Dialogs.py
changeset 118 0c53d6a36013
parent 113 9eeaebd867aa
child 123 62f93b8df816
equal deleted inserted replaced
117:bbe0697cf1ea 118:0c53d6a36013
    32 #-------------------------------------------------------------------------------
    32 #-------------------------------------------------------------------------------
    33 
    33 
    34 [ID_BLOCKPROPERTIESDIALOG, ID_BLOCKPROPERTIESDIALOGNAME, 
    34 [ID_BLOCKPROPERTIESDIALOG, ID_BLOCKPROPERTIESDIALOGNAME, 
    35  ID_BLOCKPROPERTIESDIALOGTYPETREE, ID_BLOCKPROPERTIESDIALOGTYPEDESC, 
    35  ID_BLOCKPROPERTIESDIALOGTYPETREE, ID_BLOCKPROPERTIESDIALOGTYPEDESC, 
    36  ID_BLOCKPROPERTIESDIALOGINPUTS, ID_BLOCKPROPERTIESDIALOGPREVIEW, 
    36  ID_BLOCKPROPERTIESDIALOGINPUTS, ID_BLOCKPROPERTIESDIALOGPREVIEW, 
    37  ID_BLOCKPROPERTIESDIALOGSTATICTEXT1, ID_BLOCKPROPERTIESDIALOGSTATICTEXT2, 
    37  ID_BLOCKPROPERTIESDIALOGEXECUTIONORDER, ID_BLOCKPROPERTIESDIALOGSTATICTEXT1, 
    38  ID_BLOCKPROPERTIESDIALOGSTATICTEXT3, ID_BLOCKPROPERTIESDIALOGSTATICTEXT4, 
    38  ID_BLOCKPROPERTIESDIALOGSTATICTEXT2, ID_BLOCKPROPERTIESDIALOGSTATICTEXT3, 
    39 ] = [wx.NewId() for _init_ctrls in range(10)]
    39  ID_BLOCKPROPERTIESDIALOGSTATICTEXT4, ID_BLOCKPROPERTIESDIALOGSTATICTEXT5, 
       
    40 ] = [wx.NewId() for _init_ctrls in range(12)]
    40 
    41 
    41 [CATEGORY, BLOCK] = range(2)
    42 [CATEGORY, BLOCK] = range(2)
    42 
    43 
    43 class BlockPropertiesDialog(wx.Dialog):
    44 class BlockPropertiesDialog(wx.Dialog):
    44     
    45     
    65         parent.AddWindow(self.TypeTree, 3, border=5, flag=wx.GROW|wx.BOTTOM)
    66         parent.AddWindow(self.TypeTree, 3, border=5, flag=wx.GROW|wx.BOTTOM)
    66         parent.AddWindow(self.TypeDesc, 1, border=0, flag=wx.GROW)
    67         parent.AddWindow(self.TypeDesc, 1, border=0, flag=wx.GROW)
    67 
    68 
    68     def _init_coll_RightGridSizer_Items(self, parent):
    69     def _init_coll_RightGridSizer_Items(self, parent):
    69         parent.AddSizer(self.RightUpGridSizer, 0, border=0, flag=wx.GROW)
    70         parent.AddSizer(self.RightUpGridSizer, 0, border=0, flag=wx.GROW)
    70         parent.AddWindow(self.staticText4, 0, border=0, flag=wx.GROW)
    71         parent.AddWindow(self.staticText5, 0, border=0, flag=wx.GROW)
    71         parent.AddWindow(self.Preview, 0, border=0, flag=wx.GROW)
    72         parent.AddWindow(self.Preview, 0, border=0, flag=wx.GROW)
    72 
    73 
    73     def _init_coll_RightGridSizer_Growables(self, parent):
    74     def _init_coll_RightGridSizer_Growables(self, parent):
    74         parent.AddGrowableCol(0)
    75         parent.AddGrowableCol(0)
    75         parent.AddGrowableRow(2)
    76         parent.AddGrowableRow(2)
    76 
    77 
    77     def _init_coll_RightUpGridSizer_Items(self, parent):
    78     def _init_coll_RightUpGridSizer_Items(self, parent):
    78         parent.AddWindow(self.staticText2, 0, border=0, flag=wx.GROW|wx.ALIGN_BOTTOM)
    79         parent.AddWindow(self.staticText2, 0, border=4, flag=wx.GROW|wx.TOP)
    79         parent.AddWindow(self.staticText3, 0, border=0, flag=wx.GROW|wx.ALIGN_BOTTOM)
       
    80         parent.AddWindow(self.BlockName, 0, border=0, flag=wx.GROW)
    80         parent.AddWindow(self.BlockName, 0, border=0, flag=wx.GROW)
       
    81         parent.AddWindow(self.staticText3, 0, border=4, flag=wx.GROW|wx.TOP)
    81         parent.AddWindow(self.Inputs, 0, border=0, flag=wx.GROW)
    82         parent.AddWindow(self.Inputs, 0, border=0, flag=wx.GROW)
    82 
    83         parent.AddWindow(self.staticText4, 0, border=4, flag=wx.GROW|wx.TOP)
       
    84         parent.AddWindow(self.ExecutionOrder, 0, border=0, flag=wx.GROW)
       
    85         
    83     def _init_sizers(self):
    86     def _init_sizers(self):
    84         self.flexGridSizer1 = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10)
    87         self.flexGridSizer1 = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10)
    85         self.MainSizer = wx.BoxSizer(wx.HORIZONTAL)
    88         self.MainSizer = wx.BoxSizer(wx.HORIZONTAL)
    86         self.LeftBoxSizer = wx.StaticBoxSizer(self.staticbox1, wx.VERTICAL)
    89         self.LeftBoxSizer = wx.StaticBoxSizer(self.staticbox1, wx.VERTICAL)
    87         self.RightGridSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=3, vgap=5)
    90         self.RightGridSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=3, vgap=5)
    88         self.RightUpGridSizer = wx.GridSizer(cols=2, hgap=5, rows=2, vgap=5)
    91         self.RightUpGridSizer = wx.GridSizer(cols=2, hgap=5, rows=3, vgap=5)
    89         
    92         
    90         self._init_coll_flexGridSizer1_Items(self.flexGridSizer1)
    93         self._init_coll_flexGridSizer1_Items(self.flexGridSizer1)
    91         self._init_coll_flexGridSizer1_Growables(self.flexGridSizer1)
    94         self._init_coll_flexGridSizer1_Growables(self.flexGridSizer1)
    92         self._init_coll_MainSizer_Items(self.MainSizer)
    95         self._init_coll_MainSizer_Items(self.MainSizer)
    93         self._init_coll_LeftBoxSizer_Items(self.LeftBoxSizer)
    96         self._init_coll_LeftBoxSizer_Items(self.LeftBoxSizer)
    98         self.SetSizer(self.flexGridSizer1)
   101         self.SetSizer(self.flexGridSizer1)
    99 
   102 
   100     def _init_ctrls(self, prnt):
   103     def _init_ctrls(self, prnt):
   101         wx.Dialog.__init__(self, id=ID_BLOCKPROPERTIESDIALOG,
   104         wx.Dialog.__init__(self, id=ID_BLOCKPROPERTIESDIALOG,
   102               name='BlockPropertiesDialog', parent=prnt, pos=wx.Point(376, 223),
   105               name='BlockPropertiesDialog', parent=prnt, pos=wx.Point(376, 223),
   103               size=wx.Size(600, 360), style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER,
   106               size=wx.Size(600, 380), style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER,
   104               title='Block Properties')
   107               title='Block Properties')
   105         self.SetClientSize(wx.Size(600, 360))
   108         self.SetClientSize(wx.Size(600, 380))
   106 
   109 
   107         self.staticbox1 = wx.StaticBox(id=ID_BLOCKPROPERTIESDIALOGSTATICTEXT1,
   110         self.staticbox1 = wx.StaticBox(id=ID_BLOCKPROPERTIESDIALOGSTATICTEXT1,
   108               label='Type:', name='staticBox1', parent=self,
   111               label='Type:', name='staticBox1', parent=self,
   109               pos=wx.Point(0, 0), size=wx.Size(0, 0), style=0)
   112               pos=wx.Point(0, 0), size=wx.Size(0, 0), style=0)
   110 
   113 
   115         self.staticText3 = wx.StaticText(id=ID_BLOCKPROPERTIESDIALOGSTATICTEXT2,
   118         self.staticText3 = wx.StaticText(id=ID_BLOCKPROPERTIESDIALOGSTATICTEXT2,
   116               label='Inputs:', name='staticText4', parent=self,
   119               label='Inputs:', name='staticText4', parent=self,
   117               pos=wx.Point(0, 0), size=wx.Size(0, 17), style=0)
   120               pos=wx.Point(0, 0), size=wx.Size(0, 17), style=0)
   118 
   121 
   119         self.staticText4 = wx.StaticText(id=ID_BLOCKPROPERTIESDIALOGSTATICTEXT4,
   122         self.staticText4 = wx.StaticText(id=ID_BLOCKPROPERTIESDIALOGSTATICTEXT4,
   120               label='Preview:', name='staticText4', parent=self,
   123               label='Execution Order:', name='staticText4', parent=self,
       
   124               pos=wx.Point(0, 0), size=wx.Size(0, 17), style=0)
       
   125 
       
   126         self.staticText5 = wx.StaticText(id=ID_BLOCKPROPERTIESDIALOGSTATICTEXT5,
       
   127               label='Preview:', name='staticText5', parent=self,
   121               pos=wx.Point(0, 0), size=wx.Size(0, 17), style=0)
   128               pos=wx.Point(0, 0), size=wx.Size(0, 17), style=0)
   122 
   129 
   123         if wx.Platform == '__WXMSW__':
   130         if wx.Platform == '__WXMSW__':
   124             treestyle = wx.TR_HAS_BUTTONS|wx.TR_SINGLE|wx.SUNKEN_BORDER
   131             treestyle = wx.TR_HAS_BUTTONS|wx.TR_SINGLE|wx.SUNKEN_BORDER
   125         else:
   132         else:
   141 
   148 
   142         self.Inputs = wx.SpinCtrl(id=ID_BLOCKPROPERTIESDIALOGINPUTS,
   149         self.Inputs = wx.SpinCtrl(id=ID_BLOCKPROPERTIESDIALOGINPUTS,
   143               name='Inputs', parent=self, pos=wx.Point(0, 0),
   150               name='Inputs', parent=self, pos=wx.Point(0, 0),
   144               size=wx.Size(0, 24), style=wx.SP_ARROW_KEYS, min=2, max=20)
   151               size=wx.Size(0, 24), style=wx.SP_ARROW_KEYS, min=2, max=20)
   145         self.Bind(wx.EVT_SPINCTRL, self.OnInputsChanged, id=ID_BLOCKPROPERTIESDIALOGINPUTS)
   152         self.Bind(wx.EVT_SPINCTRL, self.OnInputsChanged, id=ID_BLOCKPROPERTIESDIALOGINPUTS)
       
   153 
       
   154         self.ExecutionOrder = wx.SpinCtrl(id=ID_BLOCKPROPERTIESDIALOGEXECUTIONORDER,
       
   155               name='ExecutionOrder', parent=self, pos=wx.Point(0, 0),
       
   156               size=wx.Size(0, 24), style=wx.SP_ARROW_KEYS, min=0)
       
   157         self.Bind(wx.EVT_SPINCTRL, self.OnExecutionOrderChanged, id=ID_BLOCKPROPERTIESDIALOGEXECUTIONORDER)
   146 
   158 
   147         self.Preview = wx.Panel(id=ID_BLOCKPROPERTIESDIALOGPREVIEW,
   159         self.Preview = wx.Panel(id=ID_BLOCKPROPERTIESDIALOGPREVIEW,
   148               name='Preview', parent=self, pos=wx.Point(0, 0),
   160               name='Preview', parent=self, pos=wx.Point(0, 0),
   149               size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL|wx.SIMPLE_BORDER)
   161               size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL|wx.SIMPLE_BORDER)
   150         self.Preview.SetBackgroundColour(wx.Colour(255,255,255))
   162         self.Preview.SetBackgroundColour(wx.Colour(255,255,255))
   260                     self.TypeTree.SelectItem(item)
   272                     self.TypeTree.SelectItem(item)
   261             elif name == "name":
   273             elif name == "name":
   262                 self.BlockName.SetValue(value)
   274                 self.BlockName.SetValue(value)
   263             elif name == "extension":
   275             elif name == "extension":
   264                 self.Inputs.SetValue(value)
   276                 self.Inputs.SetValue(value)
       
   277             elif name == "executionOrder":
       
   278                 self.ExecutionOrder.SetValue(value)
   265         self.RefreshPreview()
   279         self.RefreshPreview()
   266 
   280 
   267     def GetValues(self):
   281     def GetValues(self):
   268         values = {}
   282         values = {}
   269         item = self.TypeTree.GetSelection()
   283         item = self.TypeTree.GetSelection()
   271         values["inputs"] = self.TypeTree.GetPyData(item)["inputs"]
   285         values["inputs"] = self.TypeTree.GetPyData(item)["inputs"]
   272         if self.BlockName.GetValue() != "":
   286         if self.BlockName.GetValue() != "":
   273             values["name"] = self.BlockName.GetValue()
   287             values["name"] = self.BlockName.GetValue()
   274         values["width"], values["height"] = self.Block.GetSize()
   288         values["width"], values["height"] = self.Block.GetSize()
   275         values["extension"] = self.Inputs.GetValue()
   289         values["extension"] = self.Inputs.GetValue()
       
   290         values["executionOrder"] = self.ExecutionOrder.GetValue()
   276         return values
   291         return values
   277 
   292 
   278     def OnTypeTreeItemSelected(self, event):
   293     def OnTypeTreeItemSelected(self, event):
   279         self.BlockName.SetValue("")
   294         self.BlockName.SetValue("")
   280         selected = event.GetItem()
   295         selected = event.GetItem()
   309     def OnInputsChanged(self, event):
   324     def OnInputsChanged(self, event):
   310         if self.Inputs.IsEnabled():
   325         if self.Inputs.IsEnabled():
   311             self.RefreshPreview()
   326             self.RefreshPreview()
   312         event.Skip()
   327         event.Skip()
   313     
   328     
       
   329     def OnExecutionOrderChanged(self, event):
       
   330         self.RefreshPreview()
       
   331         event.Skip()
       
   332     
   314     def ErasePreview(self):
   333     def ErasePreview(self):
   315         dc = wx.ClientDC(self.Preview)
   334         dc = wx.ClientDC(self.Preview)
   316         dc.Clear()
   335         dc.Clear()
   317         self.Block = None
   336         self.Block = None
   318         
   337         
   325             if pydata["type"] == CATEGORY:
   344             if pydata["type"] == CATEGORY:
   326                 self.Block = None
   345                 self.Block = None
   327             else:
   346             else:
   328                 blocktype = self.TypeTree.GetItemText(item)
   347                 blocktype = self.TypeTree.GetItemText(item)
   329                 if blocktype:
   348                 if blocktype:
   330                     self.Block = FBD_Block(self.Preview, blocktype, self.BlockName.GetValue(), extension = self.Inputs.GetValue(), inputs = pydata["inputs"])
   349                     self.Block = FBD_Block(self.Preview, blocktype, self.BlockName.GetValue(), extension = self.Inputs.GetValue(), inputs = pydata["inputs"], executionOrder = self.ExecutionOrder.GetValue())
   331                     width, height = self.MinBlockSize
   350                     width, height = self.MinBlockSize
   332                     min_width, min_height = self.Block.GetMinSize()
   351                     min_width, min_height = self.Block.GetMinSize()
   333                     width, height = max(min_width, width), max(min_height, height)
   352                     width, height = max(min_width, width), max(min_height, height)
   334                     self.Block.SetSize(width, height)
   353                     self.Block.SetSize(width, height)
   335                     clientsize = self.Preview.GetClientSize()
   354                     clientsize = self.Preview.GetClientSize()
   350 #-------------------------------------------------------------------------------
   369 #-------------------------------------------------------------------------------
   351 
   370 
   352 [ID_VARIABLEPROPERTIESDIALOG, ID_VARIABLEPROPERTIESDIALOGSPACER, 
   371 [ID_VARIABLEPROPERTIESDIALOG, ID_VARIABLEPROPERTIESDIALOGSPACER, 
   353  ID_VARIABLEPROPERTIESDIALOGNAME, ID_VARIABLEPROPERTIESDIALOGCLASS, 
   372  ID_VARIABLEPROPERTIESDIALOGNAME, ID_VARIABLEPROPERTIESDIALOGCLASS, 
   354  ID_VARIABLEPROPERTIESDIALOGPREVIEW, ID_VARIABLEPROPERTIESDIALOGEXPRESSION,
   373  ID_VARIABLEPROPERTIESDIALOGPREVIEW, ID_VARIABLEPROPERTIESDIALOGEXPRESSION,
   355  ID_VARIABLEPROPERTIESDIALOGSTATICTEXT1, ID_VARIABLEPROPERTIESDIALOGSTATICTEXT2,
   374  ID_VARIABLEPROPERTIESDIALOGEXECUTIONORDER, ID_VARIABLEPROPERTIESDIALOGSTATICTEXT1, 
   356  ID_VARIABLEPROPERTIESDIALOGSTATICTEXT3, ID_VARIABLEPROPERTIESDIALOGSTATICTEXT4,
   375  ID_VARIABLEPROPERTIESDIALOGSTATICTEXT2, ID_VARIABLEPROPERTIESDIALOGSTATICTEXT3, 
   357 ] = [wx.NewId() for _init_ctrls in range(10)]
   376  ID_VARIABLEPROPERTIESDIALOGSTATICTEXT4, ID_VARIABLEPROPERTIESDIALOGSTATICTEXT5
       
   377 ] = [wx.NewId() for _init_ctrls in range(12)]
   358 
   378 
   359 class VariablePropertiesDialog(wx.Dialog):
   379 class VariablePropertiesDialog(wx.Dialog):
   360     
   380     
   361     if wx.VERSION < (2, 6, 0):
   381     if wx.VERSION < (2, 6, 0):
   362         def Bind(self, event, function, id = None):
   382         def Bind(self, event, function, id = None):
   387         parent.AddSizer(self.RightGridSizer, 1, border=5, flag=wx.GROW|wx.LEFT)
   407         parent.AddSizer(self.RightGridSizer, 1, border=5, flag=wx.GROW|wx.LEFT)
   388     
   408     
   389     def _init_coll_LeftGridSizer_Items(self, parent):
   409     def _init_coll_LeftGridSizer_Items(self, parent):
   390         parent.AddWindow(self.staticText1, 0, border=0, flag=wx.GROW)
   410         parent.AddWindow(self.staticText1, 0, border=0, flag=wx.GROW)
   391         parent.AddWindow(self.Class, 0, border=0, flag=wx.GROW)
   411         parent.AddWindow(self.Class, 0, border=0, flag=wx.GROW)
   392         parent.AddWindow(self.Spacer, 0, border=0, flag=wx.GROW)
       
   393         parent.AddWindow(self.staticText2, 0, border=0, flag=wx.GROW)
   412         parent.AddWindow(self.staticText2, 0, border=0, flag=wx.GROW)
   394         parent.AddWindow(self.Expression, 0, border=0, flag=wx.GROW)
   413         parent.AddWindow(self.Expression, 0, border=0, flag=wx.GROW)
       
   414         parent.AddWindow(self.staticText3, 0, border=0, flag=wx.GROW)
       
   415         parent.AddWindow(self.ExecutionOrder, 0, border=0, flag=wx.GROW)
       
   416         parent.AddWindow(self.Spacer, 0, border=0, flag=wx.GROW)
   395     
   417     
   396     def _init_coll_LeftGridSizer_Growables(self, parent):
   418     def _init_coll_LeftGridSizer_Growables(self, parent):
   397         parent.AddGrowableCol(0)
   419         parent.AddGrowableCol(0)
   398         parent.AddGrowableRow(2)
   420         parent.AddGrowableRow(2)
   399             
   421             
   400     def _init_coll_RightGridSizer_Items(self, parent):
   422     def _init_coll_RightGridSizer_Items(self, parent):
   401         parent.AddWindow(self.staticText3, 0, border=0, flag=wx.GROW)
   423         parent.AddWindow(self.staticText5, 0, border=0, flag=wx.GROW)
   402         parent.AddWindow(self.VariableName, 0, border=0, flag=wx.GROW)
   424         parent.AddWindow(self.VariableName, 0, border=0, flag=wx.GROW)
   403         
   425         
   404     def _init_coll_RightGridSizer_Growables(self, parent):
   426     def _init_coll_RightGridSizer_Growables(self, parent):
   405         parent.AddGrowableCol(0)
   427         parent.AddGrowableCol(0)
   406         parent.AddGrowableRow(1)
   428         parent.AddGrowableRow(1)
   407         
   429         
   408     def _init_sizers(self):
   430     def _init_sizers(self):
   409         self.flexGridSizer1 = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10)
   431         self.flexGridSizer1 = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10)
   410         self.MainSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=3, vgap=5)
   432         self.MainSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=3, vgap=5)
   411         self.TopSizer = wx.BoxSizer(wx.HORIZONTAL)
   433         self.TopSizer = wx.BoxSizer(wx.HORIZONTAL)
   412         self.LeftGridSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=5, vgap=5)
   434         self.LeftGridSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=7, vgap=5)
   413         self.RightGridSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=5)
   435         self.RightGridSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=5)
   414 
   436 
   415         self._init_coll_flexGridSizer1_Items(self.flexGridSizer1)
   437         self._init_coll_flexGridSizer1_Items(self.flexGridSizer1)
   416         self._init_coll_flexGridSizer1_Growables(self.flexGridSizer1)
   438         self._init_coll_flexGridSizer1_Growables(self.flexGridSizer1)
   417         self._init_coll_MainSizer_Items(self.MainSizer)
   439         self._init_coll_MainSizer_Items(self.MainSizer)
   438         self.staticText2 = wx.StaticText(id=ID_VARIABLEPROPERTIESDIALOGSTATICTEXT2,
   460         self.staticText2 = wx.StaticText(id=ID_VARIABLEPROPERTIESDIALOGSTATICTEXT2,
   439               label='Expression:', name='staticText2', parent=self,
   461               label='Expression:', name='staticText2', parent=self,
   440               pos=wx.Point(0, 0), size=wx.Size(0, 17), style=0)
   462               pos=wx.Point(0, 0), size=wx.Size(0, 17), style=0)
   441 
   463 
   442         self.staticText3 = wx.StaticText(id=ID_VARIABLEPROPERTIESDIALOGSTATICTEXT3,
   464         self.staticText3 = wx.StaticText(id=ID_VARIABLEPROPERTIESDIALOGSTATICTEXT3,
   443               label='Name:', name='staticText3', parent=self,
   465               label='Execution Order:', name='staticText3', parent=self,
   444               pos=wx.Point(0, 0), size=wx.Size(0, 17), style=0)
   466               pos=wx.Point(0, 0), size=wx.Size(0, 17), style=0)
   445 
   467 
   446         self.staticText4 = wx.StaticText(id=ID_VARIABLEPROPERTIESDIALOGSTATICTEXT4,
   468         self.staticText4 = wx.StaticText(id=ID_VARIABLEPROPERTIESDIALOGSTATICTEXT4,
   447               label='Preview:', name='staticText4', parent=self,
   469               label='Name:', name='staticText4', parent=self,
       
   470               pos=wx.Point(0, 0), size=wx.Size(0, 17), style=0)
       
   471 
       
   472         self.staticText5 = wx.StaticText(id=ID_VARIABLEPROPERTIESDIALOGSTATICTEXT5,
       
   473               label='Preview:', name='staticText5', parent=self,
   448               pos=wx.Point(0, 0), size=wx.Size(0, 17), style=0)
   474               pos=wx.Point(0, 0), size=wx.Size(0, 17), style=0)
   449 
   475 
   450         self.Class = wx.Choice(id=ID_VARIABLEPROPERTIESDIALOGCLASS,
   476         self.Class = wx.Choice(id=ID_VARIABLEPROPERTIESDIALOGCLASS,
   451               name='Class', parent=self, pos=wx.Point(0, 0),
   477               name='Class', parent=self, pos=wx.Point(0, 0),
   452               size=wx.Size(0, 24), style=0)
   478               size=wx.Size(0, 24), style=0)
   459 
   485 
   460         self.Expression = wx.TextCtrl(id=ID_VARIABLEPROPERTIESDIALOGEXPRESSION,
   486         self.Expression = wx.TextCtrl(id=ID_VARIABLEPROPERTIESDIALOGEXPRESSION,
   461               name='Expression', parent=self, pos=wx.Point(0, 0),
   487               name='Expression', parent=self, pos=wx.Point(0, 0),
   462               size=wx.Size(0, 24), style=0)
   488               size=wx.Size(0, 24), style=0)
   463         self.Bind(wx.EVT_TEXT, self.OnExpressionChanged, id=ID_VARIABLEPROPERTIESDIALOGEXPRESSION)
   489         self.Bind(wx.EVT_TEXT, self.OnExpressionChanged, id=ID_VARIABLEPROPERTIESDIALOGEXPRESSION)
       
   490 
       
   491         self.ExecutionOrder = wx.SpinCtrl(id=ID_VARIABLEPROPERTIESDIALOGEXECUTIONORDER,
       
   492               name='ExecutionOrder', parent=self, pos=wx.Point(0, 0),
       
   493               size=wx.Size(0, 24), style=wx.SP_ARROW_KEYS, min=0)
       
   494         self.Bind(wx.EVT_SPINCTRL, self.OnExecutionOrderChanged, id=ID_VARIABLEPROPERTIESDIALOGEXECUTIONORDER)
   464 
   495 
   465         self.Spacer = wx.Panel(id=ID_VARIABLEPROPERTIESDIALOGSPACER,
   496         self.Spacer = wx.Panel(id=ID_VARIABLEPROPERTIESDIALOGSPACER,
   466               name='Spacer', parent=self, pos=wx.Point(0, 0),
   497               name='Spacer', parent=self, pos=wx.Point(0, 0),
   467               size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL)
   498               size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL)
   468 
   499 
   534                 self.VariableName.SetStringSelection(value_name)
   565                 self.VariableName.SetStringSelection(value_name)
   535                 self.Expression.Enable(False)
   566                 self.Expression.Enable(False)
   536             else:
   567             else:
   537                 self.Expression.SetValue(value_name)
   568                 self.Expression.SetValue(value_name)
   538                 self.VariableName.Enable(False)
   569                 self.VariableName.Enable(False)
       
   570         if "executionOrder" in values:
       
   571             self.ExecutionOrder.SetValue(values["executionOrder"])
   539         self.RefreshPreview()
   572         self.RefreshPreview()
   540         
   573         
   541     def GetValues(self):
   574     def GetValues(self):
   542         values = {}
   575         values = {}
   543         classtype = self.Class.GetStringSelection()
   576         classtype = self.Class.GetStringSelection()
   555         values["value_type"] = None
   588         values["value_type"] = None
   556         for var_name, var_type, value_type in self.VarList:
   589         for var_name, var_type, value_type in self.VarList:
   557             if var_name == values["name"]:
   590             if var_name == values["name"]:
   558                 values["value_type"] = value_type
   591                 values["value_type"] = value_type
   559         values["width"], values["height"] = self.Variable.GetSize()
   592         values["width"], values["height"] = self.Variable.GetSize()
       
   593         values["executionOrder"] = self.ExecutionOrder.GetValue()
   560         return values
   594         return values
   561 
   595 
   562     def OnClassChanged(self, event):
   596     def OnClassChanged(self, event):
   563         self.RefreshNameList()
   597         self.RefreshNameList()
   564         if self.Class.GetStringSelection() == "Input":
   598         if self.Class.GetStringSelection() == "Input":
   579     def OnExpressionChanged(self, event):
   613     def OnExpressionChanged(self, event):
   580         if self.Expression.GetValue() != "":
   614         if self.Expression.GetValue() != "":
   581             self.VariableName.Enable(False)
   615             self.VariableName.Enable(False)
   582         else:
   616         else:
   583             self.VariableName.Enable(True)
   617             self.VariableName.Enable(True)
       
   618         self.RefreshPreview()
       
   619         event.Skip()
       
   620     
       
   621     def OnExecutionOrderChanged(self, event):
   584         self.RefreshPreview()
   622         self.RefreshPreview()
   585         event.Skip()
   623         event.Skip()
   586     
   624     
   587     def RefreshPreview(self):
   625     def RefreshPreview(self):
   588         dc = wx.ClientDC(self.Preview)
   626         dc = wx.ClientDC(self.Preview)
   596         for var_name, var_type, value_type in self.VarList:
   634         for var_name, var_type, value_type in self.VarList:
   597             if var_name == name:
   635             if var_name == name:
   598                 type = value_type
   636                 type = value_type
   599         classtype = self.Class.GetStringSelection()
   637         classtype = self.Class.GetStringSelection()
   600         if classtype == "Input":
   638         if classtype == "Input":
   601             self.Variable = FBD_Variable(self.Preview, INPUT, name, type)
   639             self.Variable = FBD_Variable(self.Preview, INPUT, name, type, executionOrder = self.ExecutionOrder.GetValue())
   602         elif classtype == "Output":
   640         elif classtype == "Output":
   603             self.Variable = FBD_Variable(self.Preview, OUTPUT, name, type)
   641             self.Variable = FBD_Variable(self.Preview, OUTPUT, name, type, executionOrder = self.ExecutionOrder.GetValue())
   604         elif classtype == "InOut":
   642         elif classtype == "InOut":
   605             self.Variable = FBD_Variable(self.Preview, INOUT, name, type)
   643             self.Variable = FBD_Variable(self.Preview, INOUT, name, type, executionOrder = self.ExecutionOrder.GetValue())
   606         width, height = self.MinVariableSize
   644         width, height = self.MinVariableSize
   607         min_width, min_height = self.Variable.GetMinSize()
   645         min_width, min_height = self.Variable.GetMinSize()
   608         width, height = max(min_width, width), max(min_height, height)
   646         width, height = max(min_width, width), max(min_height, height)
   609         self.Variable.SetSize(width, height)
   647         self.Variable.SetSize(width, height)
   610         clientsize = self.Preview.GetClientSize()
   648         clientsize = self.Preview.GetClientSize()