Adobe 65007312 Programming Guide - Page 181

Create an observer for a data property, Create the dialog contents, this case

Page 181 highlights

CHAPTER 9: Getting Started: A Tutorial Example Adding a data observer 181 Create an observer for a data property To make the text dynamic, we are going to add an observer for the props.myObservedString key. The observer is notified whenever the observed property changes; we will tell it to update the text in showValue_st. 6. When the observer receives a notification it invokes a function. Create the function that will be used by the observer: local myCalledFunction = function() showValue_st.title = updateField.value -- reflect the value entered in edit box showValue_st.text_color = LrColor( 1, 0, 0 ) -- make the text red end This makes the showValue_st text dynamic, by resetting its title value when the observed property changes. It also turns the text red to show that it has fired. 7. Now add the observer to the observable table. This associates the function with a specific property in the table: props:addObserver( "myObservedString", myCalledFunction ) This observer is notified, and calls the response function, whenever the value of the key myObservedString is modified. Create the dialog contents Now you will create the view hierarchy that defines the custom-UI portion of the dialog. This one uses a column as the top-level container, which contains two rows, which in turn contain the visible controls. In this case, the controls include the showValue text box and the updateField edit box that we already defined, along with additional labels and a push button. 8. Create the view hierarchy: local c = f:column { --The top-level container, arranges all the rows vertically f:row { -- a group of labels arranged horizontally fill_horizontal = 1, -- the row fills its parent's width f:static_text { -- add a right-aligned label alignment = "right", width = LrView.share "label_width", -- all get the same width title = "Bound value: " }, showValue_st, -- the text box we already defined }, -- end f:row f:row { -- another group, a labeled edit box and button f:static_text { alignment = "right", width = LrView.share "label_width", -- shared with other label title = "New value: " }, updateField, -- the edit box we already defined -- add push button }, -- end row } -- end column 9. We will add one more element, a push button. This demonstrates another way to define the behavior of your UI, by specifying a direct action to be taken in response to clicking the button. In this case, the

  • 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
9: Getting Started: A Tutorial Example
Adding a data observer
181
Create an observer for a data property
To make the text dynamic, we are going to add an observer for the
props.myObservedString
key. The
observer is notified whenever the observed property changes; we will tell it to update the text in
showValue_st
.
6.
When the observer receives a notification it invokes a function. Create the function that will be used
by the observer:
local myCalledFunction = function()
showValue_st.title = updateField.value -- reflect the value entered in edit box
showValue_st.text_color = LrColor( 1, 0, 0 ) -- make the text red
end
This makes the
showValue_st
text dynamic, by resetting its
title
value when the observed property
changes. It also turns the text red to show that it has fired.
7.
Now add the observer to the observable table. This associates the function with a specific property in
the table:
props:addObserver( "myObservedString", myCalledFunction )
This observer is notified, and calls the response function, whenever the value of the key
myObservedString
is modified.
Create the dialog contents
Now you will create the view hierarchy that defines the custom-UI portion of the dialog. This one uses a
column
as the top-level container, which contains two rows, which in turn contain the visible controls. In
this case, the controls include the
showValue
text box and the
updateField
edit box that we already
defined, along with additional labels and a push button.
8.
Create the view hierarchy:
local c = f:column { --The top-level container, arranges all the rows vertically
f:row { -- a group of labels arranged horizontally
fill_horizontal = 1, -- the row fills its parent’s width
f:static_text { -- add a right-aligned label
alignment = "right",
width = LrView.share "label_width", -- all get the same width
title = "Bound value: "
},
showValue_st, -- the text box we already defined
}, -- end f:row
f:row { -- another group, a labeled edit box and button
f:static_text {
alignment = "right",
width = LrView.share "label_width", -- shared with other label
title = "New value: "
},
updateField, -- the edit box we already defined
-- add push button
}, -- end row
} -- end column
9.
We will add one more element, a push button. This demonstrates another way to define the behavior
of your UI, by specifying a direct action to be taken in response to clicking the button. In this case, the