Adobe 65007312 Programming Guide - Page 103

Complex bindings, Transforming values

Page 103 highlights

CHAPTER 5: Creating a User Interface for Your Plug-in Binding UI values to data values 103 Complex bindings The LrBinding functions provide a particular, limited set of value transformations. To specify more complex bindings, the argument to LrView.bind() can be a table with these items: key bind_to_object -or- object transform A key name in the bound table. The value can be mapped to a value for the local property by the transform function. Optional. The name of an observable table which overrides the value of the bind_to_object view property. Optional. A function that maps the key or key values to the local property value. See "Transforming values" on page 103. This function is called immediately when the value changes in either the bound view property or the bound table key. Here is an example of binding to keys in two different tables in a single view object: ... visible = LrView.bind("myBooleanSetting"), -- simple binding between two -- Booleans in the default table enabled = LrView.bind( { key = "mySetting", -- a single key bind_to_object = mySettingsTable, -- a non-default bound table transform = function( value, fromTable ) -- a mapping function ... end } ) ... Transforming values The transformation function that you specify for a binding maps the value of a key in the bound table to a value in the bound property. If the LrBinding functions do not provide mapping that you need, define your own transformation function. It is passed these parameters: value: The new value of the key or property that changed. fromTable (Boolean): True if the change that triggered this notification was in the bound table, false if the change was in the bound view property. Your function should return the new value for the destination property or key. This simple example creates a slider with a range of 0-110, then reports when the value goes over 100, by using a transformation function. The slider value and the visible property of a text box are bound to the same key. For the text box, the transform function returns true (making visible true) only when the value is over 100. sectionsForTopOfDialog = function(viewFactory, propertyTable) return { { title = "Section Title", viewFactory:slider { min = 0,

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204

C
HAPTER
5: Creating a User Interface for Your Plug-in
Binding UI values to data values
103
Complex bindings
The
LrBinding
functions provide a particular, limited set of value transformations. To specify more
complex bindings, the argument to
LrView.bind()
can be a table with these items:
Here is an example of binding to keys in two different tables in a single view object:
...
visible = LrView.bind("myBooleanSetting"), -- simple binding between two
-- Booleans in the default table
enabled = LrView.bind( {
key = "mySetting", -- a single key
bind_to_object = mySettingsTable, -- a non-default bound table
transform = function( value, fromTable ) -- a mapping function
...
end
}
)
...
Transforming values
The transformation function that you specify for a binding maps the value of a key in the bound table to a
value in the bound property. If the
LrBinding
functions do not provide mapping that you need, define
your own transformation function. It is passed these parameters:
value
: The new value of the key or property that changed.
fromTable
(Boolean): True if the change that triggered this notification was in the bound table, false if
the change was in the bound view property.
Your function should return the new value for the destination property or key.
This simple example creates a slider with a range of 0-110, then reports when the value goes over 100, by
using a transformation function. The slider
value
and the
visible
property of a text box are bound to the
same key. For the text box, the transform function returns true (making
visible
true) only when the value
is over 100.
sectionsForTopOfDialog = function(viewFactory, propertyTable)
return {
{
title = "Section Title",
viewFactory:slider {
min = 0,
key
A key name in the bound table. The value can be mapped to a value for the
local property by the
transform
function.
bind_to_object
—or—
object
Optional. The name of an observable table which overrides the value of the
bind_to_object
view property.
transform
Optional. A function that maps the key or key values to the local property
value. See
“Transforming values” on page 103
. This function is called
immediately when the value changes in either the bound view property or
the bound table key.