Dialogs.py
changeset 28 fc23e1f415d8
parent 27 dae55dd9ee14
child 42 4a8400732001
equal deleted inserted replaced
27:dae55dd9ee14 28:fc23e1f415d8
   124         self.MinBlockSize = None
   124         self.MinBlockSize = None
   125         
   125         
   126         EVT_PAINT(self, self.OnPaint)
   126         EVT_PAINT(self, self.OnPaint)
   127         EVT_BUTTON(self, self.ButtonSizer.GetAffirmativeButton().GetId(), self.OnOK)
   127         EVT_BUTTON(self, self.ButtonSizer.GetAffirmativeButton().GetId(), self.OnOK)
   128     
   128     
   129     def FindTreeItem(self, root, name):
   129     def FindTreeItem(self, root, name, inputs = None):
   130         if root.IsOk():
   130         if root.IsOk():
   131             if self.TypeTree.GetItemText(root) == name:
   131             pydata = self.TypeTree.GetPyData(root)
       
   132             if inputs and "inputs" in pydata:
       
   133                 print inputs, pydata["inputs"]
       
   134                 same_inputs = pydata["inputs"] == inputs
       
   135             else:
       
   136                 same_inputs = True
       
   137             if self.TypeTree.GetItemText(root) == name and same_inputs:
   132                 return root
   138                 return root
   133             else:
   139             else:
   134                 item, root_cookie = self.TypeTree.GetFirstChild(root)
   140                 item, root_cookie = self.TypeTree.GetFirstChild(root)
   135                 while item.IsOk():
   141                 while item.IsOk():
   136                     result = self.FindTreeItem(item, name)
   142                     result = self.FindTreeItem(item, name, inputs)
   137                     if result:
   143                     if result:
   138                         return result
   144                         return result
   139                     item, root_cookie = self.TypeTree.GetNextChild(root, root_cookie)
   145                     item, root_cookie = self.TypeTree.GetNextChild(root, root_cookie)
   140         return None
   146         return None
   141     
   147     
   153         else:
   159         else:
   154             self.EndModal(wxID_OK)
   160             self.EndModal(wxID_OK)
   155 
   161 
   156     def SetBlockList(self, blocktypes):
   162     def SetBlockList(self, blocktypes):
   157         root = self.TypeTree.AddRoot("")
   163         root = self.TypeTree.AddRoot("")
   158         self.TypeTree.SetPyData(root, CATEGORY)
   164         self.TypeTree.SetPyData(root, {"type" : CATEGORY})
   159         for category in blocktypes:
   165         for category in blocktypes:
   160             category_item = self.TypeTree.AppendItem(root, category["name"])
   166             category_item = self.TypeTree.AppendItem(root, category["name"])
   161             self.TypeTree.SetPyData(category_item, CATEGORY)
   167             self.TypeTree.SetPyData(category_item, {"type" : CATEGORY})
   162             for blocktype in category["list"]:
   168             for blocktype in category["list"]:
   163                 blocktype_item = self.TypeTree.AppendItem(category_item, blocktype["name"])
   169                 blocktype_item = self.TypeTree.AppendItem(category_item, blocktype["name"])
   164                 self.TypeTree.SetPyData(blocktype_item, BLOCK)
   170                 self.TypeTree.SetPyData(blocktype_item, {"type" : BLOCK, "inputs" : tuple([type for name, type, modifier in blocktype["inputs"]])})
   165 
   171 
   166     def SetMinBlockSize(self, size):
   172     def SetMinBlockSize(self, size):
   167         self.MinBlockSize = size
   173         self.MinBlockSize = size
   168 
   174 
   169     def SetValues(self, values):
   175     def SetValues(self, values):
   170         for name, value in values.items():
   176         for name, value in values.items():
   171             if name == "type":
   177             if name == "type":
   172                 item = self.FindTreeItem(self.TypeTree.GetRootItem(), value)
   178                 inputs = None
       
   179                 if "inputs" in values:
       
   180                     inputs = values["inputs"]
       
   181                 item = self.FindTreeItem(self.TypeTree.GetRootItem(), value, inputs)
   173                 if item:
   182                 if item:
   174                     self.TypeTree.SelectItem(item)
   183                     self.TypeTree.SelectItem(item)
   175             elif name == "name":
   184             elif name == "name":
   176                 self.Name.SetValue(value)
   185                 self.Name.SetValue(value)
   177             elif name == "extension":
   186             elif name == "extension":
   178                 self.Inputs.SetValue(value)
   187                 self.Inputs.SetValue(value)
   179         self.RefreshPreview()
   188         self.RefreshPreview()
   180 
   189 
   181     def GetValues(self):
   190     def GetValues(self):
   182         values = {}
   191         values = {}
   183         values["type"] = self.TypeTree.GetItemText(self.TypeTree.GetSelection())
   192         item = self.TypeTree.GetSelection()
       
   193         values["type"] = self.TypeTree.GetItemText(item)
       
   194         values["inputs"] = self.TypeTree.GetPyData(item)["inputs"]
   184         if self.Name.GetValue() != "":
   195         if self.Name.GetValue() != "":
   185             values["name"] = self.Name.GetValue()
   196             values["name"] = self.Name.GetValue()
   186         values["width"], values["height"] = self.Block.GetSize()
   197         values["width"], values["height"] = self.Block.GetSize()
   187         values["extension"] = self.Inputs.GetValue()
   198         values["extension"] = self.Inputs.GetValue()
   188         return values
   199         return values
   189 
   200 
   190     def OnTypeTreeItemSelected(self, event):
   201     def OnTypeTreeItemSelected(self, event):
   191         self.Name.SetValue("")
   202         self.Name.SetValue("")
   192         selected = event.GetItem()
   203         selected = event.GetItem()
   193         if self.TypeTree.GetPyData(selected) != CATEGORY:
   204         pydata = self.TypeTree.GetPyData(selected)
   194             blocktype = GetBlockType(self.TypeTree.GetItemText(selected))
   205         if pydata["type"] != CATEGORY:
       
   206             blocktype = GetBlockType(self.TypeTree.GetItemText(selected), pydata["inputs"])
   195             if blocktype:
   207             if blocktype:
   196                 self.Inputs.SetValue(len(blocktype["inputs"]))
   208                 self.Inputs.SetValue(len(blocktype["inputs"]))
   197                 self.Inputs.Enable(blocktype["extensible"])
   209                 self.Inputs.Enable(blocktype["extensible"])
   198                 self.Name.Enable(blocktype["type"] != "function")
   210                 self.Name.Enable(blocktype["type"] != "function")
   199                 self.TypeDesc.SetValue(blocktype["comment"])
   211                 self.TypeDesc.SetValue(blocktype["comment"])
   229         
   241         
   230     def RefreshPreview(self):
   242     def RefreshPreview(self):
   231         dc = wxClientDC(self.Preview)
   243         dc = wxClientDC(self.Preview)
   232         dc.Clear()
   244         dc.Clear()
   233         item = self.TypeTree.GetSelection()
   245         item = self.TypeTree.GetSelection()
   234         if self.TypeTree.GetPyData(item) == CATEGORY:
   246         pydata = self.TypeTree.GetPyData(item)
       
   247         if pydata["type"] == CATEGORY:
   235             self.Block = None
   248             self.Block = None
   236         else:
   249         else:
   237             blocktype = self.TypeTree.GetItemText(item)
   250             blocktype = self.TypeTree.GetItemText(item)
   238             if blocktype:
   251             if blocktype:
   239                 self.Block = FBD_Block(self.Preview, blocktype, self.Name.GetValue(), extension = self.Inputs.GetValue())
   252                 self.Block = FBD_Block(self.Preview, blocktype, self.Name.GetValue(), extension = self.Inputs.GetValue(), inputs = pydata["inputs"])
   240                 width, height = self.MinBlockSize
   253                 width, height = self.MinBlockSize
   241                 min_width, min_height = self.Block.GetMinSize()
   254                 min_width, min_height = self.Block.GetMinSize()
   242                 width, height = max(min_width, width), max(min_height, height)
   255                 width, height = max(min_width, width), max(min_height, height)
   243                 self.Block.SetSize(width, height)
   256                 self.Block.SetSize(width, height)
   244                 clientsize = self.Preview.GetClientSize()
   257                 clientsize = self.Preview.GetClientSize()
   258 #                          Create New Variable Dialog
   271 #                          Create New Variable Dialog
   259 #-------------------------------------------------------------------------------
   272 #-------------------------------------------------------------------------------
   260 
   273 
   261 [wxID_VARIABLEPROPERTIESDIALOG, wxID_VARIABLEPROPERTIESDIALOGMAINPANEL, 
   274 [wxID_VARIABLEPROPERTIESDIALOG, wxID_VARIABLEPROPERTIESDIALOGMAINPANEL, 
   262  wxID_VARIABLEPROPERTIESDIALOGNAME, wxID_VARIABLEPROPERTIESDIALOGCLASS, 
   275  wxID_VARIABLEPROPERTIESDIALOGNAME, wxID_VARIABLEPROPERTIESDIALOGCLASS, 
   263  wxID_VARIABLEPROPERTIESDIALOGPREVIEW, wxID_VARIABLEPROPERTIESDIALOGSTATICTEXT1,
   276  wxID_VARIABLEPROPERTIESDIALOGPREVIEW, wxID_VARIABLEPROPERTIESDIALOGEXPRESSION,
   264  wxID_VARIABLEPROPERTIESDIALOGSTATICTEXT2, wxID_VARIABLEPROPERTIESDIALOGSTATICTEXT3, 
   277  wxID_VARIABLEPROPERTIESDIALOGSTATICTEXT1, wxID_VARIABLEPROPERTIESDIALOGSTATICTEXT2,
   265 ] = [wx.NewId() for _init_ctrls in range(8)]
   278  wxID_VARIABLEPROPERTIESDIALOGSTATICTEXT3, wxID_VARIABLEPROPERTIESDIALOGSTATICTEXT4,
       
   279 ] = [wx.NewId() for _init_ctrls in range(10)]
   266 
   280 
   267 class VariablePropertiesDialog(wx.Dialog):
   281 class VariablePropertiesDialog(wx.Dialog):
   268     def _init_coll_flexGridSizer1_Items(self, parent):
   282     def _init_coll_flexGridSizer1_Items(self, parent):
   269         # generated method, don't edit
   283         # generated method, don't edit
   270 
   284 
   280 
   294 
   281     def _init_ctrls(self, prnt):
   295     def _init_ctrls(self, prnt):
   282         # generated method, don't edit
   296         # generated method, don't edit
   283         wx.Dialog.__init__(self, id=wxID_VARIABLEPROPERTIESDIALOG,
   297         wx.Dialog.__init__(self, id=wxID_VARIABLEPROPERTIESDIALOG,
   284               name='VariablePropertiesDialog', parent=prnt, pos=wx.Point(376, 223),
   298               name='VariablePropertiesDialog', parent=prnt, pos=wx.Point(376, 223),
   285               size=wx.Size(400, 320), style=wx.DEFAULT_DIALOG_STYLE,
   299               size=wx.Size(400, 380), style=wx.DEFAULT_DIALOG_STYLE,
   286               title='Variable Properties')
   300               title='Variable Properties')
   287         self.SetClientSize(wx.Size(400, 320))
   301         self.SetClientSize(wx.Size(400, 380))
   288 
   302 
   289         self.MainPanel = wx.Panel(id=wxID_VARIABLEPROPERTIESDIALOGMAINPANEL,
   303         self.MainPanel = wx.Panel(id=wxID_VARIABLEPROPERTIESDIALOGMAINPANEL,
   290               name='MainPanel', parent=self, pos=wx.Point(0, 0),
   304               name='MainPanel', parent=self, pos=wx.Point(0, 0),
   291               size=wx.Size(400, 280), style=wx.TAB_TRAVERSAL)
   305               size=wx.Size(400, 280), style=wx.TAB_TRAVERSAL)
   292         self.MainPanel.SetAutoLayout(True)
   306         self.MainPanel.SetAutoLayout(True)
   294         self.staticText1 = wx.StaticText(id=wxID_VARIABLEPROPERTIESDIALOGSTATICTEXT1,
   308         self.staticText1 = wx.StaticText(id=wxID_VARIABLEPROPERTIESDIALOGSTATICTEXT1,
   295               label='Class:', name='staticText1', parent=self.MainPanel,
   309               label='Class:', name='staticText1', parent=self.MainPanel,
   296               pos=wx.Point(24, 24), size=wx.Size(70, 17), style=0)
   310               pos=wx.Point(24, 24), size=wx.Size(70, 17), style=0)
   297 
   311 
   298         self.staticText2 = wx.StaticText(id=wxID_VARIABLEPROPERTIESDIALOGSTATICTEXT2,
   312         self.staticText2 = wx.StaticText(id=wxID_VARIABLEPROPERTIESDIALOGSTATICTEXT2,
   299               label='Name:', name='staticText2', parent=self.MainPanel,
   313               label='Expression:', name='staticText2', parent=self.MainPanel,
       
   314               pos=wx.Point(24, 90), size=wx.Size(100, 17), style=0)
       
   315 
       
   316         self.staticText3 = wx.StaticText(id=wxID_VARIABLEPROPERTIESDIALOGSTATICTEXT3,
       
   317               label='Name:', name='staticText3', parent=self.MainPanel,
   300               pos=wx.Point(204, 24), size=wx.Size(70, 17), style=0)
   318               pos=wx.Point(204, 24), size=wx.Size(70, 17), style=0)
   301 
   319 
   302         self.staticText3 = wx.StaticText(id=wxID_VARIABLEPROPERTIESDIALOGSTATICTEXT3,
   320         self.staticText4 = wx.StaticText(id=wxID_VARIABLEPROPERTIESDIALOGSTATICTEXT4,
   303               label='Preview:', name='staticText3', parent=self.MainPanel,
   321               label='Preview:', name='staticText4', parent=self.MainPanel,
   304               pos=wx.Point(24, 78), size=wx.Size(100, 17), style=0)
   322               pos=wx.Point(24, 144), size=wx.Size(100, 17), style=0)
   305 
   323 
   306         self.Class = wx.Choice(id=wxID_VARIABLEPROPERTIESDIALOGCLASS,
   324         self.Class = wx.Choice(id=wxID_VARIABLEPROPERTIESDIALOGCLASS,
   307               name='Class', parent=self.MainPanel, pos=wx.Point(24, 48),
   325               name='Class', parent=self.MainPanel, pos=wx.Point(24, 48),
   308               size=wx.Size(145, 24), style=0)
   326               size=wx.Size(145, 24), style=0)
   309         EVT_CHOICE(self, wxID_VARIABLEPROPERTIESDIALOGCLASS, self.OnClassChanged)
   327         EVT_CHOICE(self, wxID_VARIABLEPROPERTIESDIALOGCLASS, self.OnClassChanged)
   310         
   328         
   311         self.Name = wx.Choice(id=wxID_VARIABLEPROPERTIESDIALOGNAME,
   329         self.Name = wx.ListBox(id=wxID_VARIABLEPROPERTIESDIALOGNAME,
   312               name='Name', parent=self.MainPanel, pos=wx.Point(204, 48),
   330               name='Name', parent=self.MainPanel, pos=wx.Point(204, 48),
       
   331               size=wx.Size(145, 90), style=wx.LB_SINGLE)
       
   332         EVT_LISTBOX(self, wxID_VARIABLEPROPERTIESDIALOGNAME, self.OnNameChanged)
       
   333 
       
   334         self.Expression = wx.TextCtrl(id=wxID_VARIABLEPROPERTIESDIALOGEXPRESSION,
       
   335               name='Expression', parent=self.MainPanel, pos=wx.Point(24, 114),
   313               size=wx.Size(145, 24), style=0)
   336               size=wx.Size(145, 24), style=0)
   314         EVT_CHOICE(self, wxID_VARIABLEPROPERTIESDIALOGNAME, self.OnNameChanged)
   337         EVT_TEXT(self, wxID_VARIABLEPROPERTIESDIALOGEXPRESSION, self.OnExpressionChanged)
   315 
   338 
   316         self.Preview = wx.Panel(id=wxID_VARIABLEPROPERTIESDIALOGPREVIEW,
   339         self.Preview = wx.Panel(id=wxID_VARIABLEPROPERTIESDIALOGPREVIEW,
   317               name='Preview', parent=self.MainPanel, pos=wx.Point(24, 104),
   340               name='Preview', parent=self.MainPanel, pos=wx.Point(24, 170),
   318               size=wx.Size(350, 150), style=wx.TAB_TRAVERSAL|wx.SIMPLE_BORDER)
   341               size=wx.Size(350, 150), style=wx.TAB_TRAVERSAL|wx.SIMPLE_BORDER)
   319         self.Preview.SetBackgroundColour(wxColour(255,255,255))
   342         self.Preview.SetBackgroundColour(wxColour(255,255,255))
   320 
   343 
   321         self._init_sizers()
   344         self._init_sizers()
   322 
   345 
   336         EVT_PAINT(self, self.OnPaint)
   359         EVT_PAINT(self, self.OnPaint)
   337 
   360 
   338     def RefreshNameList(self):
   361     def RefreshNameList(self):
   339         selected = self.Name.GetStringSelection()
   362         selected = self.Name.GetStringSelection()
   340         self.Name.Clear()
   363         self.Name.Clear()
       
   364         self.Name.Append("")
   341         for name, var_type, value_type in self.VarList:
   365         for name, var_type, value_type in self.VarList:
   342             if var_type in ["Local","Temp"]:
   366             if var_type in ["Local","Temp","Global","External"]:
   343                 self.Name.Append(name)
   367                 self.Name.Append(name)
   344             elif var_type == "Input" and self.Class.GetStringSelection() == "Input":
   368             elif var_type == "Input" and self.Class.GetStringSelection() == "Input":
   345                 self.Name.Append(name)
   369                 self.Name.Append(name)
   346             elif var_type == "Output" and self.Class.GetStringSelection() == "Output":
   370             elif var_type == "Output" and self.Class.GetStringSelection() == "Output":
   347                 self.Name.Append(name)
   371                 self.Name.Append(name)
   348             elif var_type == "InOut" and self.Class.GetStringSelection() == "InOut":
   372             elif var_type == "InOut" and self.Class.GetStringSelection() == "InOut":
   349                 self.Name.Append(name)
   373                 self.Name.Append(name)
   350         if self.Name.FindString(selected) != wxNOT_FOUND:
   374         if self.Name.FindString(selected) != wxNOT_FOUND:
   351             self.Name.SetStringSelection(selected)
   375             self.Name.SetStringSelection(selected)
       
   376         else:
       
   377             self.Name.SetStringSelection("")
   352         self.Name.Enable(self.Name.GetCount() > 0)
   378         self.Name.Enable(self.Name.GetCount() > 0)
   353             
   379             
   354     def SetMinVariableSize(self, size):
   380     def SetMinVariableSize(self, size):
   355         self.MinVariableSize = size
   381         self.MinVariableSize = size
   356 
   382 
   365                     self.Class.SetStringSelection("Input")
   391                     self.Class.SetStringSelection("Input")
   366                 if value == OUTPUT:
   392                 if value == OUTPUT:
   367                     self.Class.SetStringSelection("Output")
   393                     self.Class.SetStringSelection("Output")
   368                 if value == INOUT:
   394                 if value == INOUT:
   369                     self.Class.SetStringSelection("InOut")
   395                     self.Class.SetStringSelection("InOut")
   370             elif name == "name":
   396             elif name == "name" and value != "":
   371                 self.Name.SetStringSelection(value)
   397                 if self.Name.FindString(value) != wxNOT_FOUND:
       
   398                     self.Name.SetStringSelection(value)
       
   399                     self.Expression.Enable(False)
       
   400                 else:
       
   401                     self.Expression.SetValue(value)
       
   402                     self.Name.Enable(False)
   372         self.RefreshPreview()
   403         self.RefreshPreview()
   373         
   404         
   374     def GetValues(self):
   405     def GetValues(self):
   375         values = {}
   406         values = {}
   376         classtype = self.Class.GetStringSelection()
   407         classtype = self.Class.GetStringSelection()
   378             values["type"] = INPUT
   409             values["type"] = INPUT
   379         elif classtype == "Output":
   410         elif classtype == "Output":
   380             values["type"] = OUTPUT
   411             values["type"] = OUTPUT
   381         elif classtype == "InOut":
   412         elif classtype == "InOut":
   382             values["type"] = INOUT
   413             values["type"] = INOUT
   383         values["name"] = self.Name.GetStringSelection()
   414         expression = self.Expression.GetValue()
       
   415         if self.Expression.IsEnabled() and expression != "":
       
   416             values["name"] = expression
       
   417         else:
       
   418             values["name"] = self.Name.GetStringSelection()
   384         values["value_type"] = ""
   419         values["value_type"] = ""
   385         for var_name, var_type, value_type in self.VarList:
   420         for var_name, var_type, value_type in self.VarList:
   386             if var_name == values["name"]:
   421             if var_name == values["name"]:
   387                 values["value_type"] = value_type
   422                 values["value_type"] = value_type
   388         values["width"], values["height"] = self.Variable.GetSize()
   423         values["width"], values["height"] = self.Variable.GetSize()
   389         return values
   424         return values
   390 
   425 
   391     def OnClassChanged(self, event):
   426     def OnClassChanged(self, event):
   392         self.RefreshNameList()
   427         self.RefreshNameList()
       
   428         if self.Class.GetStringSelection() == "Input":
       
   429             self.Expression.Enable(True)
       
   430         else:
       
   431             self.Expression.Enable(False)
   393         self.RefreshPreview()
   432         self.RefreshPreview()
   394         event.Skip()
   433         event.Skip()
   395 
   434 
   396     def OnNameChanged(self, event):
   435     def OnNameChanged(self, event):
   397         self.RefreshPreview()
   436         if self.Name.GetStringSelection() != "":
   398         event.Skip()
   437             self.Expression.Enable(False)
   399         
   438         elif self.Class.GetStringSelection() == "Input":
       
   439             self.Expression.Enable(True)
       
   440         self.RefreshPreview()
       
   441         event.Skip()
       
   442     
       
   443     def OnExpressionChanged(self, event):
       
   444         if self.Expression.GetValue() != "":
       
   445             self.Name.Enable(False)
       
   446         else:
       
   447             self.Name.Enable(True)
       
   448         self.RefreshPreview()
       
   449         event.Skip()
       
   450     
   400     def RefreshPreview(self):
   451     def RefreshPreview(self):
   401         dc = wxClientDC(self.Preview)
   452         dc = wxClientDC(self.Preview)
   402         dc.Clear()
   453         dc.Clear()
   403         name = self.Name.GetStringSelection()
   454         expression = self.Expression.GetValue()
       
   455         if self.Expression.IsEnabled() and expression != "":
       
   456             name = expression
       
   457         else:
       
   458             name = self.Name.GetStringSelection()
   404         type = ""
   459         type = ""
   405         for var_name, var_type, value_type in self.VarList:
   460         for var_name, var_type, value_type in self.VarList:
   406             if var_name == name:
   461             if var_name == name:
   407                 type = value_type
   462                 type = value_type
   408         classtype = self.Class.GetStringSelection()
   463         classtype = self.Class.GetStringSelection()
   508         
   563         
   509         EVT_PAINT(self, self.OnPaint)
   564         EVT_PAINT(self, self.OnPaint)
   510             
   565             
   511     def SetMinConnectionSize(self, size):
   566     def SetMinConnectionSize(self, size):
   512         self.MinConnectionSize = size
   567         self.MinConnectionSize = size
   513         
   568     
       
   569     def SetValues(self, values):
       
   570         for name, value in values.items():
       
   571             if name == "type":
       
   572                 if value == CONNECTOR:
       
   573                     self.radioButton1.SetValue(True)
       
   574                 elif value == CONTINUATION:
       
   575                     self.radioButton2.SetValue(True)
       
   576             elif name == "name":
       
   577                 self.Name.SetValue(value)
       
   578         self.RefreshPreview()
       
   579     
   514     def GetValues(self):
   580     def GetValues(self):
   515         values = {}
   581         values = {}
   516         if self.radioButton1.GetValue():
   582         if self.radioButton1.GetValue():
   517             values["type"] = CONNECTOR
   583             values["type"] = CONNECTOR
   518         else:
   584         else:
   648         self.ButtonSizer = self.CreateButtonSizer(wxOK|wxCANCEL|wxCENTRE)
   714         self.ButtonSizer = self.CreateButtonSizer(wxOK|wxCANCEL|wxCENTRE)
   649         self.flexGridSizer1.Add(self.ButtonSizer, 1, wxALIGN_RIGHT)
   715         self.flexGridSizer1.Add(self.ButtonSizer, 1, wxALIGN_RIGHT)
   650 
   716 
   651         EVT_PAINT(self, self.OnPaint)
   717         EVT_PAINT(self, self.OnPaint)
   652 
   718 
   653     def SetElementSize(self, width, height):
   719     def SetElementSize(self, size):
   654         min_width, min_height = self.Element.GetMinSize()
   720         min_width, min_height = self.Element.GetMinSize()
   655         width, height = max(min_width, width), max(min_height, height)
   721         width, height = max(min_width, size[0]), max(min_height, size[1])
   656         self.Element.SetSize(width, height)
   722         self.Element.SetSize(width, height)
   657         self.Element.SetPosition((150 - width) / 2, (150 - height) / 2)
   723         self.Element.SetPosition((150 - width) / 2, (150 - height) / 2)
   658 
   724 
   659     def SetVariables(self, vars):
   725     def SetVariables(self, vars):
   660         self.Name.Clear()
   726         self.Name.Clear()
   823 
   889 
   824         EVT_PAINT(self, self.OnPaint)
   890         EVT_PAINT(self, self.OnPaint)
   825 
   891 
   826     def SetMinSize(self, size):
   892     def SetMinSize(self, size):
   827         self.PowerRailMinSize = size
   893         self.PowerRailMinSize = size
   828         self.RefreshPreview()
   894         self.RefreshPreview()    
   829 
   895 
   830     def GetValues(self):
   896     def GetValues(self):
   831         values = {}
   897         values = {}
   832         values["type"] = self.Type
   898         values["type"] = self.Type
   833         values["number"] = self.PinNumber.GetValue()
   899         values["number"] = self.PinNumber.GetValue()