27 import wx |
27 import wx |
28 |
28 |
29 from graphics.FBD_Objects import FBD_Block |
29 from graphics.FBD_Objects import FBD_Block |
30 from controls.LibraryPanel import LibraryPanel |
30 from controls.LibraryPanel import LibraryPanel |
31 from BlockPreviewDialog import BlockPreviewDialog |
31 from BlockPreviewDialog import BlockPreviewDialog |
|
32 |
|
33 #------------------------------------------------------------------------------- |
|
34 # Helpers |
|
35 #------------------------------------------------------------------------------- |
|
36 |
|
37 def GetBlockTypeDefaultNameModel(blocktype): |
|
38 return re.compile("%s[0-9]+" % blocktype if blocktype is not None else ".*") |
32 |
39 |
33 #------------------------------------------------------------------------------- |
40 #------------------------------------------------------------------------------- |
34 # Set Block Parameters Dialog |
41 # Set Block Parameters Dialog |
35 #------------------------------------------------------------------------------- |
42 #------------------------------------------------------------------------------- |
36 |
43 |
134 |
141 |
135 # Add preview panel and associated label to sizers |
142 # Add preview panel and associated label to sizers |
136 right_gridsizer.AddWindow(self.PreviewLabel, flag=wx.GROW) |
143 right_gridsizer.AddWindow(self.PreviewLabel, flag=wx.GROW) |
137 right_gridsizer.AddWindow(self.Preview, flag=wx.GROW) |
144 right_gridsizer.AddWindow(self.Preview, flag=wx.GROW) |
138 |
145 |
|
146 # Add buttons sizer to sizers |
139 main_sizer.AddSizer(self.ButtonSizer, border=20, |
147 main_sizer.AddSizer(self.ButtonSizer, border=20, |
140 flag=wx.ALIGN_RIGHT|wx.BOTTOM|wx.LEFT|wx.RIGHT) |
148 flag=wx.ALIGN_RIGHT|wx.BOTTOM|wx.LEFT|wx.RIGHT) |
141 |
149 |
142 self.SetSizer(main_sizer) |
150 self.SetSizer(main_sizer) |
143 |
151 |
|
152 # Dictionary containing correspondence between parameter exchanged and |
|
153 # control to fill with parameter value |
144 self.ParamsControl = { |
154 self.ParamsControl = { |
145 "extension": self.Inputs, |
155 "extension": self.Inputs, |
146 "executionOrder": self.ExecutionOrder, |
156 "executionOrder": self.ExecutionOrder, |
147 "executionControl": self.ExecutionControl |
157 "executionControl": self.ExecutionControl |
148 } |
158 } |
182 elif name_enabled and block_name == "": |
192 elif name_enabled and block_name == "": |
183 message = _("Form isn't complete. Name must be filled!") |
193 message = _("Form isn't complete. Name must be filled!") |
184 |
194 |
185 # Show error message if an error is detected |
195 # Show error message if an error is detected |
186 if message is not None: |
196 if message is not None: |
187 self.ShowMessage(message) |
197 self.ShowErrorMessage(message) |
188 |
198 |
189 # Test block name validity if necessary |
199 # Test block name validity if necessary |
190 elif not name_enabled or self.TestBlockName(block_name): |
200 elif not name_enabled or self.TestElementName(block_name): |
|
201 # Call BlockPreviewDialog function |
191 BlockPreviewDialog.OnOK(self, event) |
202 BlockPreviewDialog.OnOK(self, event) |
192 |
203 |
193 def SetValues(self, values): |
204 def SetValues(self, values): |
194 """ |
205 """ |
195 Set default block parameters |
206 Set default block parameters |
198 # Extract block type defined in parameters |
209 # Extract block type defined in parameters |
199 blocktype = values.get("type", None) |
210 blocktype = values.get("type", None) |
200 |
211 |
201 # Define regular expression for determine if block name is block |
212 # Define regular expression for determine if block name is block |
202 # default name |
213 # default name |
203 default_name_model = re.compile( |
214 default_name_model = GetBlockTypeDefaultNameModel(blocktype) |
204 "%s[0-9]+" % blocktype if blocktype is not None else ".*") |
|
205 |
|
206 # Select block type in library panel |
|
207 if blocktype is not None: |
|
208 self.LibraryPanel.SelectTreeItem(blocktype, |
|
209 values.get("inputs", None)) |
|
210 |
215 |
211 # For each parameters defined, set corresponding control value |
216 # For each parameters defined, set corresponding control value |
212 for name, value in values.items(): |
217 for name, value in values.items(): |
|
218 |
|
219 # Parameter is block name |
213 if name == "name": |
220 if name == "name": |
214 # Parameter is block name |
|
215 if value != "": |
221 if value != "": |
216 # Set default block name for testing |
222 # Set default graphic element name for testing |
217 self.DefaultBlockName = value |
223 self.DefaultElementName = value |
218 |
224 |
219 # Test if block name is type default block name and save |
225 # Test if block name is type default block name and save |
220 # block name if not (name have been typed by user) |
226 # block name if not (name have been typed by user) |
221 if default_name_model.match(value) is None: |
227 if default_name_model.match(value) is None: |
222 self.CurrentBlockName = value |
228 self.CurrentBlockName = value |
223 |
229 |
224 self.BlockName.ChangeValue(value) |
230 self.BlockName.ChangeValue(value) |
225 |
231 |
|
232 # Set value of other controls |
226 else: |
233 else: |
227 control = self.ParamsControl.get(name, None) |
234 control = self.ParamsControl.get(name, None) |
228 if control is not None: |
235 if control is not None: |
229 control.SetValue(value) |
236 control.SetValue(value) |
230 |
237 |
|
238 # Select block type in library panel |
|
239 if blocktype is not None: |
|
240 self.LibraryPanel.SelectTreeItem(blocktype, |
|
241 values.get("inputs", None)) |
|
242 |
231 # Refresh preview panel |
243 # Refresh preview panel |
232 self.RefreshPreview() |
244 self.RefreshPreview() |
233 |
245 |
234 def GetValues(self): |
246 def GetValues(self): |
235 """ |
247 """ |
237 @return: {parameter_name: parameter_value,...} |
249 @return: {parameter_name: parameter_value,...} |
238 """ |
250 """ |
239 values = self.LibraryPanel.GetSelectedBlock() |
251 values = self.LibraryPanel.GetSelectedBlock() |
240 if self.BlockName.IsEnabled() and self.BlockName.GetValue() != "": |
252 if self.BlockName.IsEnabled() and self.BlockName.GetValue() != "": |
241 values["name"] = self.BlockName.GetValue() |
253 values["name"] = self.BlockName.GetValue() |
242 values["width"], values["height"] = self.Block.GetSize() |
254 values["width"], values["height"] = self.Element.GetSize() |
243 values.update({ |
255 values.update({ |
244 name: control.GetValue() |
256 name: control.GetValue() |
245 for name, control in self.ParamsControl.iteritems()}) |
257 for name, control in self.ParamsControl.iteritems()}) |
246 return values |
258 return values |
247 |
259 |
268 |
280 |
269 # Update block name with default value if block type is a function and |
281 # Update block name with default value if block type is a function and |
270 # current block name wasn't typed by user |
282 # current block name wasn't typed by user |
271 if blocktype is not None and blocktype["type"] != "function": |
283 if blocktype is not None and blocktype["type"] != "function": |
272 self.BlockName.Enable(True) |
284 self.BlockName.Enable(True) |
273 self.BlockName.ChangeValue( |
285 |
274 self.CurrentBlockName |
286 if self.CurrentBlockName is None: |
275 if self.CurrentBlockName is not None |
287 # Generate new block name according to block type, taking |
276 else self.Controller.GenerateNewName( |
288 # default element name if it was already a default name for this |
277 self.TagName, None, values["type"]+"%d", 0)) |
289 # block type |
|
290 default_name_model = GetBlockTypeDefaultNameModel(values["type"]) |
|
291 block_name = ( |
|
292 self.DefaultElementName |
|
293 if (self.DefaultElementName is not None and |
|
294 default_name_model.match(self.DefaultElementName)) |
|
295 else self.Controller.GenerateNewName( |
|
296 self.TagName, None, values["type"]+"%d", 0)) |
|
297 else: |
|
298 block_name = self.CurrentBlockName |
|
299 |
|
300 self.BlockName.ChangeValue(block_name) |
278 else: |
301 else: |
279 self.BlockName.Enable(False) |
302 self.BlockName.Enable(False) |
280 self.BlockName.ChangeValue("") |
303 self.BlockName.ChangeValue("") |
281 |
304 |
282 # Refresh preview panel |
305 # Refresh preview panel |
326 # Get type selected in library panel |
349 # Get type selected in library panel |
327 values = self.LibraryPanel.GetSelectedBlock() |
350 values = self.LibraryPanel.GetSelectedBlock() |
328 |
351 |
329 # If a block type is selected in library panel |
352 # If a block type is selected in library panel |
330 if values is not None: |
353 if values is not None: |
331 blockname = (self.BlockName.GetValue() |
|
332 if self.BlockName.IsEnabled() |
|
333 else "") |
|
334 |
|
335 # Set graphic element displayed, creating a FBD block element |
354 # Set graphic element displayed, creating a FBD block element |
336 self.Block = FBD_Block(self.Preview, values["type"], |
355 self.Element = FBD_Block(self.Preview, values["type"], |
337 blockname, |
356 (self.BlockName.GetValue() |
|
357 if self.BlockName.IsEnabled() |
|
358 else ""), |
338 extension = self.Inputs.GetValue(), |
359 extension = self.Inputs.GetValue(), |
339 inputs = values["inputs"], |
360 inputs = values["inputs"], |
340 executionControl = self.ExecutionControl.GetValue(), |
361 executionControl = self.ExecutionControl.GetValue(), |
341 executionOrder = self.ExecutionOrder.GetValue()) |
362 executionOrder = self.ExecutionOrder.GetValue()) |
342 |
363 |
343 # Reset graphic element displayed |
364 # Reset graphic element displayed |
344 else: |
365 else: |
345 self.Block = None |
366 self.Element = None |
346 |
367 |
347 # Call BlockPreviewDialog function |
368 # Call BlockPreviewDialog function |
348 BlockPreviewDialog.RefreshPreview(self) |
369 BlockPreviewDialog.RefreshPreview(self) |