@@ -99,27 +99,13 @@ function ConfigUI:getObjectName()
99
99
return sim .getObjectAlias (self :getObject (), 1 )
100
100
end
101
101
102
- function ConfigUI :readInfo ()
103
- self .info = {}
104
- local info = sim .readCustomTableData (self :getObject (), self .dataBlockName .info )
105
- for k , v in pairs (info ) do
106
- self .info [k ] = v
107
- end
108
- end
109
-
110
- function ConfigUI :writeInfo ()
111
- sim .writeCustomTableData (self :getObject (), self .dataBlockName .info , self .info )
112
- end
113
-
114
102
function ConfigUI :readSchema ()
115
- local schema = sim .readCustomTableData (self :getObject (), self .dataBlockName .schema )
103
+ local schema = sim .getTableProperty (self :getObject (), ' customData. ' .. self .propertyName .schema , { noError = true }) or {}
116
104
if next (schema ) ~= nil then
117
105
self .schema = {}
118
- for k , v in pairs (schema ) do
119
- self .schema [k ] = v
120
- end
106
+ for k , v in pairs (schema ) do self .schema [k ] = v end
121
107
elseif self .schema == nil then
122
- error (' schema not provided, and not found in the custom data block ' .. self .dataBlockName .schema )
108
+ error (' schema not provided, and not found in the custom data block ' .. self .propertyName .schema )
123
109
end
124
110
end
125
111
@@ -129,25 +115,32 @@ function ConfigUI:defaultConfig()
129
115
return ret
130
116
end
131
117
132
- function ConfigUI :readConfig ()
133
- if self .schema == nil then error (' readConfig() requires schema' ) end
134
- self .config = self :defaultConfig ()
135
- local config = sim .readCustomTableData (self :getObject (), self .dataBlockName .config )
136
- for k , v in pairs (config ) do
137
- if self .schema [k ] then self .config [k ] = v end
138
- end
118
+ function ConfigUI :getConfigProperty (k )
119
+ local nsConfig = self .propertyNamespace .config or ' '
120
+ if nsConfig ~= ' ' then nsConfig = nsConfig .. ' .' end
121
+ return ' customData.' .. nsConfig .. k
139
122
end
140
123
141
- function ConfigUI :writeConfig ()
142
- sim .writeCustomTableData (self :getObject (), self .dataBlockName .config , self .config )
124
+ function ConfigUI :readConfigConst ()
125
+ if self .schema == nil then error (' readConfig() requires schema' ) end
126
+ local config = self :defaultConfig ()
127
+ for k , v in pairs (self .schema ) do
128
+ local pv = sim .getProperty (self :getObject (), self :getConfigProperty (k ), {noError = true })
129
+ if pv ~= nil then config [k ] = pv end
130
+ end
131
+ return config
143
132
end
144
133
145
- function ConfigUI :readUiState ()
146
- return sim . readCustomTableData ( self : getObject (), self . dataBlockName . uiState .. ' @tmp ' )
134
+ function ConfigUI :readConfig ()
135
+ self . config = self : readConfigConst ( )
147
136
end
148
137
149
- function ConfigUI :writeUiState (uiState )
150
- sim .writeCustomTableData (self :getObject (), self .dataBlockName .uiState .. ' @tmp' , uiState )
138
+ function ConfigUI :writeConfig ()
139
+ for k , v in pairs (self .schema ) do
140
+ if self .config [k ] ~= nil then
141
+ sim .setProperty (self :getObject (), self :getConfigProperty (k ), self .config [k ])
142
+ end
143
+ end
151
144
end
152
145
153
146
function ConfigUI :showUi ()
@@ -168,7 +161,7 @@ function ConfigUI:createUi()
168
161
schema = self .schema ,
169
162
objectName = sim .getObjectAlias (self :getObject (), 1 ),
170
163
})
171
- simQML .sendEvent (self .uiHandle , ' setUiState' , self : readUiState () )
164
+ simQML .sendEvent (self .uiHandle , ' setUiState' , self . uiState )
172
165
end
173
166
174
167
function ConfigUI_uiChanged (c )
179
172
180
173
function ConfigUI_uiState (info )
181
174
if ConfigUI .instance then
182
- ConfigUI .instance :uiState (info )
175
+ ConfigUI .instance :uiStateChanged (info )
183
176
end
184
177
end
185
178
@@ -197,8 +190,10 @@ function ConfigUI:uiChanged(c)
197
190
self :writeConfig ()
198
191
end
199
192
200
- function ConfigUI :uiState (uiState )
201
- self :writeUiState (uiState )
193
+ function ConfigUI :uiStateChanged (uiState )
194
+ for k , v in pairs (uiState ) do
195
+ self .uiState [k ] = v
196
+ end
202
197
203
198
if self .uiHandle and not uiState .opened then
204
199
-- UI is closing
@@ -210,19 +205,26 @@ end
210
205
function ConfigUI :sysCall_init ()
211
206
self :readSchema ()
212
207
self :validateSchema ()
213
- self :readInfo ()
214
- self .info .modelType = self .modelType
215
- self :writeInfo ()
216
208
self :readConfig () -- reads existing or creates default
217
209
self :writeConfig ()
218
210
219
- local uiState = self :readUiState ()
220
- if uiState .opened then
211
+ self .uiState = self .uiState or {}
212
+ local uiState = sim .getTableProperty (self :getObject (), ' signal.configUi.uistate' , {noError = true })
213
+ if uiState then
214
+ sim .removeProperty (self :getObject (), ' signal.configUi.uistate' )
215
+ for k , v in pairs (uiState ) do
216
+ self .uiState [k ] = v
217
+ end
218
+ end
219
+ if self .uiState .opened then
221
220
self :showUi ()
222
221
end
223
222
end
224
223
225
224
function ConfigUI :sysCall_cleanup ()
225
+ -- save uistate here so it can persist a script restart:
226
+ sim .setTableProperty (self :getObject (), ' signal.configUi.uistate' , self .uiState )
227
+
226
228
if self .uiHandle then
227
229
simQML .destroyEngine (self .uiHandle )
228
230
self .uiHandle = nil
@@ -236,12 +238,15 @@ function ConfigUI:sysCall_userConfig()
236
238
end
237
239
238
240
function ConfigUI :sysCall_data (changedNames )
239
- if changedNames [self .dataBlockName .config ] then
240
- self :readConfig ()
241
- if self .uiHandle then
242
- simQML .sendEvent (self .uiHandle , ' setConfig' , self .config )
241
+ for changedName , g in pairs (changedNames ) do
242
+ local typ , name = changedName :match (" &(.-)&%.(.*)" )
243
+ if self .schema [name ] and g then
244
+ self :readConfig ()
245
+ if self .uiHandle then
246
+ simQML .sendEvent (self .uiHandle , ' setConfig' , self .config )
247
+ end
248
+ self :generateNow ()
243
249
end
244
- self :generateNow ()
245
250
end
246
251
end
247
252
@@ -295,11 +300,11 @@ setmetatable(ConfigUI, {__call = function(meta, modelType, schema, genCb)
295
300
error (' multiple instances of ConfigUI not supported' )
296
301
end
297
302
local self = setmetatable ({
298
- dataBlockName = {
299
- config = ' __config__' ,
300
- info = ' __info__' ,
303
+ propertyNamespace = {
304
+ config = ' ' ,
305
+ },
306
+ propertyName = {
301
307
schema = ' __schema__' ,
302
- uiState = ' __uiState__' ,
303
308
},
304
309
modelType = modelType ,
305
310
schema = schema ,
0 commit comments