PLCOpenEditor.py
changeset 145 4fb225afddf4
parent 144 b67a5de5a24a
child 159 76b2facf14a2
equal deleted inserted replaced
144:b67a5de5a24a 145:4fb225afddf4
    20 #
    20 #
    21 #You should have received a copy of the GNU General Public
    21 #You should have received a copy of the GNU General Public
    22 #License along with this library; if not, write to the Free Software
    22 #License along with this library; if not, write to the Free Software
    23 #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    23 #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    24 
    24 
    25 from time import localtime
       
    26 from datetime import datetime
    25 from datetime import datetime
    27 import wx, wx.grid
    26 import wx, wx.grid
    28 
    27 
    29 if wx.VERSION >= (2, 8, 0):
    28 if wx.VERSION >= (2, 8, 0):
    30     import wx.aui
    29     import wx.aui
   421             else:
   420             else:
   422                 wx.EVT_NOTEBOOK_PAGE_CHANGED(self.TabsOpened, ID_PLCOPENEDITORTABSOPENED,
   421                 wx.EVT_NOTEBOOK_PAGE_CHANGED(self.TabsOpened, ID_PLCOPENEDITORTABSOPENED,
   423                     self.OnPouSelectedChanged)
   422                     self.OnPouSelectedChanged)
   424         
   423         
   425         if wx.VERSION < (2, 8, 0):
   424         if wx.VERSION < (2, 8, 0):
   426             self.VariablePanelIndexer = VariablePanelIndexer(self.SecondSplitter, self.Controler)
   425             self.VariablePanelIndexer = VariablePanelIndexer(self.SecondSplitter, self, self.Controler)
   427             
   426             
   428             self.SecondSplitter.SplitHorizontally(self.TabsOpened, self.VariablePanelIndexer, -200)
   427             self.SecondSplitter.SplitHorizontally(self.TabsOpened, self.VariablePanelIndexer, -200)
   429         else:
   428         else:
   430             self.VariablePanelIndexer = VariablePanelIndexer(self, self.Controler)
   429             self.VariablePanelIndexer = VariablePanelIndexer(self, self, self.Controler)
   431             self.AUIManager.AddPane(self.VariablePanelIndexer, wx.aui.AuiPaneInfo().Caption("Variable Panel").Bottom().Layer(0).BestSize(wx.Size(800, 200)).CloseButton(False))
   430             self.AUIManager.AddPane(self.VariablePanelIndexer, wx.aui.AuiPaneInfo().Caption("Variable Panel").Bottom().Layer(0).BestSize(wx.Size(800, 200)).CloseButton(False))
   432             
   431             
   433             self.AUIManager.Update()
   432             self.AUIManager.Update()
   434         
   433         
   435     def __init__(self, parent, controler = None, fileOpen = None):
   434     def __init__(self, parent, controler = None, fileOpen = None):
   642         old_values = self.Controler.GetProjectProperties()
   641         old_values = self.Controler.GetProjectProperties()
   643         dialog = ProjectDialog(self)
   642         dialog = ProjectDialog(self)
   644         dialog.SetValues(old_values)
   643         dialog.SetValues(old_values)
   645         if dialog.ShowModal() == wx.ID_OK:
   644         if dialog.ShowModal() == wx.ID_OK:
   646             new_values = dialog.GetValues()
   645             new_values = dialog.GetValues()
   647             projectname = new_values.pop("projectName")
       
   648             new_values["creationDateTime"] = old_values["creationDateTime"]
   646             new_values["creationDateTime"] = old_values["creationDateTime"]
   649             self.Controler.SetProjectProperties(projectname, new_values)
   647             if new_values != old_values:
   650             self.RefreshProjectTree()
   648                 self.Controler.SetProjectProperties(None, new_values)
       
   649                 self.RefreshTitle()
       
   650                 self.RefreshFileMenu()
       
   651                 self.RefreshEditMenu()
       
   652                 self.RefreshProjectTree()
       
   653                 for i in xrange(self.GetPageCount()):
       
   654                     editor = self.GetPage(i)
       
   655                     editor.RefreshScaling()
   651         dialog.Destroy()
   656         dialog.Destroy()
   652 
   657 
   653     def OnCloseFrame(self, event):
   658     def OnCloseFrame(self, event):
   654         if not self.ModeSolo and getattr(self, "_onclose", None) is not None:
   659         if not self.ModeSolo and getattr(self, "_onclose", None) is not None:
   655             self.AUIManager.UnInit()
   660             self.AUIManager.UnInit()
   673             event.Skip()
   678             event.Skip()
   674 
   679 
   675     def OnNewProjectMenu(self, event):
   680     def OnNewProjectMenu(self, event):
   676         dialog = ProjectDialog(self)
   681         dialog = ProjectDialog(self)
   677         if dialog.ShowModal() == wx.ID_OK:
   682         if dialog.ShowModal() == wx.ID_OK:
   678             values = dialog.GetValues()
   683             properties = dialog.GetValues()
   679             projectname = values.pop("projectName")
   684             self.Controler.CreateNewProject(properties)
   680             values["creationDateTime"] = datetime(*localtime()[:6])
       
   681             self.Controler.CreateNewProject(projectname)
       
   682             self.Controler.SetProjectProperties(projectname, values)
       
   683             self.RefreshTitle()
   685             self.RefreshTitle()
   684             self.RefreshFileMenu()
   686             self.RefreshFileMenu()
   685             self.RefreshEditMenu()
   687             self.RefreshEditMenu()
   686             self.RefreshProjectTree()
   688             self.RefreshProjectTree()
   687         event.Skip()
   689         event.Skip()
  1034                 dragSource = wx.DropSource(self.ProjectTree)
  1036                 dragSource = wx.DropSource(self.ProjectTree)
  1035                 dragSource.SetData(data)
  1037                 dragSource.SetData(data)
  1036                 dragSource.DoDragDrop()
  1038                 dragSource.DoDragDrop()
  1037             self.ResetSelectedItem()
  1039             self.ResetSelectedItem()
  1038 
  1040 
  1039     def RefreshEditorNames(self, item_type, old_name, new_name):
  1041     def RefreshEditorNames(self, old_tagname, new_tagname):
  1040         for i in xrange(self.GetPageCount()):
  1042         for i in xrange(self.GetPageCount()):
  1041             editor = self.GetPage(i)
  1043             editor = self.GetPage(i)
  1042             editor.RefreshName(item_type, old_name, new_name)
  1044             if editor.GetTagName() == old_tagname:
       
  1045                 editor.SetTagName(new_tagname)
       
  1046         self.VariablePanelIndexer.UpdateVariablePanelTagName(old_tagname, new_tagname)
  1043 
  1047 
  1044     def OnProjectTreeItemEndEdit(self, event):
  1048     def OnProjectTreeItemEndEdit(self, event):
  1045         message = None
  1049         message = None
  1046         abort = False
  1050         abort = False
  1047         new_name = event.GetLabel()
  1051         new_name = event.GetLabel()
  1060                     if new_name.upper() in [name.upper() for name in self.Controler.GetProjectDataTypeNames() if name != old_name]:
  1064                     if new_name.upper() in [name.upper() for name in self.Controler.GetProjectDataTypeNames() if name != old_name]:
  1061                         message = "\"%s\" data type already exists!"%new_name
  1065                         message = "\"%s\" data type already exists!"%new_name
  1062                         abort = True
  1066                         abort = True
  1063                     if not abort:
  1067                     if not abort:
  1064                         self.Controler.ChangeDataTypeName(old_name, new_name)
  1068                         self.Controler.ChangeDataTypeName(old_name, new_name)
  1065                         self.RefreshEditorNames(itemtype, old_name, new_name)
  1069                         self.RefreshEditorNames(self.Controler.ComputeDataTypeName(old_name), 
       
  1070                                                 self.Controler.ComputeDataTypeName(new_name))
  1066                         self.RefreshPageTitles()
  1071                         self.RefreshPageTitles()
  1067                 elif itemtype == ITEM_POU:
  1072                 elif itemtype == ITEM_POU:
  1068                     if new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames() if name != old_name]:
  1073                     if new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames() if name != old_name]:
  1069                         message = "\"%s\" pou already exists!"%new_name
  1074                         message = "\"%s\" pou already exists!"%new_name
  1070                         abort = True
  1075                         abort = True
  1073                         if messageDialog.ShowModal() == wx.ID_NO:
  1078                         if messageDialog.ShowModal() == wx.ID_NO:
  1074                             abort = True
  1079                             abort = True
  1075                         messageDialog.Destroy()
  1080                         messageDialog.Destroy()
  1076                     if not abort:
  1081                     if not abort:
  1077                         self.Controler.ChangePouName(old_name, new_name)
  1082                         self.Controler.ChangePouName(old_name, new_name)
  1078                         self.RefreshEditorNames(itemtype, old_name, new_name)
  1083                         self.RefreshEditorNames(self.Controler.ComputePouName(old_name), 
       
  1084                                                 self.Controler.ComputePouName(new_name))
  1079                         self.RefreshPageTitles()
  1085                         self.RefreshPageTitles()
  1080                 elif itemtype == ITEM_TRANSITION:
  1086                 elif itemtype == ITEM_TRANSITION:
  1081                     parent = self.ProjectTree.GetItemParent(item)
  1087                     parent = self.ProjectTree.GetItemParent(item)
  1082                     parent_type = self.ProjectTree.GetPyData(parent)
  1088                     parent_type = self.ProjectTree.GetPyData(parent)
  1083                     while parent_type != ITEM_POU:
  1089                     while parent_type != ITEM_POU:
  1088                         message = "A pou with \"%s\" as name exists!"%new_name
  1094                         message = "A pou with \"%s\" as name exists!"%new_name
  1089                     elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouVariables(pou_name) if name != old_name]:
  1095                     elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouVariables(pou_name) if name != old_name]:
  1090                         message = "A variable with \"%s\" as name already exists in this pou!"%new_name
  1096                         message = "A variable with \"%s\" as name already exists in this pou!"%new_name
  1091                     else:
  1097                     else:
  1092                         self.Controler.ChangePouTransitionName(pou_name, old_name, new_name)
  1098                         self.Controler.ChangePouTransitionName(pou_name, old_name, new_name)
  1093                         self.RefreshEditorNames(itemtype, old_name, new_name)
  1099                         self.RefreshEditorNames(self.Controler.ComputePouTransitionName(pou_name, old_name), 
       
  1100                                                 self.Controler.ComputePouTransitionName(pou_name, new_name))
  1094                         self.RefreshPageTitles()
  1101                         self.RefreshPageTitles()
  1095                 elif itemtype == ITEM_ACTION:
  1102                 elif itemtype == ITEM_ACTION:
  1096                     parent = self.ProjectTree.GetItemParent(item)
  1103                     parent = self.ProjectTree.GetItemParent(item)
  1097                     parent_type = self.ProjectTree.GetPyData(parent)
  1104                     parent_type = self.ProjectTree.GetPyData(parent)
  1098                     while parent_type != ITEM_POU:
  1105                     while parent_type != ITEM_POU:
  1103                         message = "A pou with \"%s\" as name exists!"%new_name
  1110                         message = "A pou with \"%s\" as name exists!"%new_name
  1104                     elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouVariables(pou_name) if name != old_name]:
  1111                     elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouVariables(pou_name) if name != old_name]:
  1105                         message = "A variable with \"%s\" as name already exists in this pou!"%new_name
  1112                         message = "A variable with \"%s\" as name already exists in this pou!"%new_name
  1106                     else:
  1113                     else:
  1107                         self.Controler.ChangePouActionName(pou_name, old_name, new_name)
  1114                         self.Controler.ChangePouActionName(pou_name, old_name, new_name)
  1108                         self.RefreshEditorNames(itemtype, old_name, new_name)
  1115                         self.RefreshEditorNames(self.Controler.ComputePouActionName(pou_name, old_name), 
       
  1116                                                 self.Controler.ComputePouActionName(pou_name, new_name))
  1109                         self.RefreshPageTitles()
  1117                         self.RefreshPageTitles()
  1110                 elif itemtype == ITEM_CONFIGURATION:
  1118                 elif itemtype == ITEM_CONFIGURATION:
  1111                     if new_name.upper() in [name.upper() for name in self.Controler.GetProjectConfigNames() if name != old_name]:
  1119                     if new_name.upper() in [name.upper() for name in self.Controler.GetProjectConfigNames() if name != old_name]:
  1112                         message = "\"%s\" config already exists!"%new_name
  1120                         message = "\"%s\" config already exists!"%new_name
  1113                         abort = True
  1121                         abort = True
  1121                         if messageDialog.ShowModal() == wx.ID_NO:
  1129                         if messageDialog.ShowModal() == wx.ID_NO:
  1122                             abort = True
  1130                             abort = True
  1123                         messageDialog.Destroy()
  1131                         messageDialog.Destroy()
  1124                     if not abort:
  1132                     if not abort:
  1125                         self.Controler.ChangeConfigurationName(old_name, new_name)
  1133                         self.Controler.ChangeConfigurationName(old_name, new_name)
  1126                         self.RefreshEditorNames(itemtype, old_name, new_name)
  1134                         self.RefreshEditorNames(self.Controler.ComputeConfigurationName(old_name), 
       
  1135                                                 self.Controler.ComputeConfigurationName(new_name))
  1127                         self.RefreshPageTitles()
  1136                         self.RefreshPageTitles()
  1128                 elif itemtype == ITEM_RESOURCE:
  1137                 elif itemtype == ITEM_RESOURCE:
  1129                     parent = self.ProjectTree.GetItemParent(item)
  1138                     parent = self.ProjectTree.GetItemParent(item)
  1130                     parent_type = self.ProjectTree.GetPyData(parent)
  1139                     parent_type = self.ProjectTree.GetPyData(parent)
  1131                     while parent_type != ITEM_CONFIGURATION:
  1140                     while parent_type != ITEM_CONFIGURATION:
  1145                         if messageDialog.ShowModal() == wx.ID_NO:
  1154                         if messageDialog.ShowModal() == wx.ID_NO:
  1146                             abort = True
  1155                             abort = True
  1147                         messageDialog.Destroy()
  1156                         messageDialog.Destroy()
  1148                     if not abort:
  1157                     if not abort:
  1149                         self.Controler.ChangeConfigurationResourceName(config_name, old_name, new_name)
  1158                         self.Controler.ChangeConfigurationResourceName(config_name, old_name, new_name)
  1150                         self.RefreshEditorNames(itemtype, old_name, new_name)
  1159                         self.RefreshEditorNames(self.Controler.ComputeConfigurationResourceName(config_name, old_name), 
       
  1160                                                 self.Controler.ComputeConfigurationResourceName(config_name, new_name))
  1151                         self.RefreshPageTitles()
  1161                         self.RefreshPageTitles()
  1152             if message or abort:
  1162             if message or abort:
  1153                 if message:
  1163                 if message:
  1154                     messageDialog = wx.MessageDialog(self, message, "Error", wx.OK|wx.ICON_ERROR)
  1164                     messageDialog = wx.MessageDialog(self, message, "Error", wx.OK|wx.ICON_ERROR)
  1155                     messageDialog.ShowModal()
  1165                     messageDialog.ShowModal()
  1285                     new_window = MDIResourceEditor(self, tagname, self, self.Controler)
  1295                     new_window = MDIResourceEditor(self, tagname, self, self.Controler)
  1286                 elif elementtype in [ITEM_POU, ITEM_TRANSITION, ITEM_ACTION]:
  1296                 elif elementtype in [ITEM_POU, ITEM_TRANSITION, ITEM_ACTION]:
  1287                     bodytype = self.Controler.GetEditedElementBodyType(tagname)
  1297                     bodytype = self.Controler.GetEditedElementBodyType(tagname)
  1288                     if bodytype == "FBD":
  1298                     if bodytype == "FBD":
  1289                         new_window = MDIViewer(self, tagname, self, self.Controler)
  1299                         new_window = MDIViewer(self, tagname, self, self.Controler)
       
  1300                         new_window.GetViewer().RefreshScaling(False)
  1290                     elif bodytype == "LD":
  1301                     elif bodytype == "LD":
  1291                         new_window = LD_MDIViewer(self, tagname, self, self.Controler)
  1302                         new_window = LD_MDIViewer(self, tagname, self, self.Controler)
       
  1303                         new_window.GetViewer().RefreshScaling(False)
  1292                     elif bodytype == "SFC":
  1304                     elif bodytype == "SFC":
  1293                         new_window = SFC_MDIViewer(self, tagname, self, self.Controler)
  1305                         new_window = SFC_MDIViewer(self, tagname, self, self.Controler)
       
  1306                         new_window.GetViewer().RefreshScaling(False)
  1294                     else:
  1307                     else:
  1295                         new_window = TextMDIViewer(self, tagname, self, self.Controler)
  1308                         new_window = TextMDIViewer(self, tagname, self, self.Controler)
  1296                         viewer = new_window.GetViewer()
  1309                         viewer = new_window.GetViewer()
  1297                         viewer.SetTextSyntax(elementtype)
  1310                         viewer.SetTextSyntax(elementtype)
  1298                         if bodytype == "IL":
  1311                         if bodytype == "IL":
  1313                     self.TabsOpened.AddPage(new_window, "")
  1326                     self.TabsOpened.AddPage(new_window, "")
  1314                 elif elementtype in [ITEM_POU, ITEM_TRANSITION, ITEM_ACTION]:
  1327                 elif elementtype in [ITEM_POU, ITEM_TRANSITION, ITEM_ACTION]:
  1315                     bodytype = self.Controler.GetEditedElementBodyType(tagname)
  1328                     bodytype = self.Controler.GetEditedElementBodyType(tagname)
  1316                     if bodytype == "FBD":
  1329                     if bodytype == "FBD":
  1317                         new_window = Viewer(self.TabsOpened, tagname, self, self.Controler)
  1330                         new_window = Viewer(self.TabsOpened, tagname, self, self.Controler)
       
  1331                         new_window.RefreshScaling(False)
  1318                     elif bodytype == "LD":
  1332                     elif bodytype == "LD":
  1319                         new_window = LD_Viewer(self.TabsOpened, tagname, self, self.Controler)
  1333                         new_window = LD_Viewer(self.TabsOpened, tagname, self, self.Controler)
       
  1334                         new_window.RefreshScaling(False)
  1320                     elif bodytype == "SFC":
  1335                     elif bodytype == "SFC":
  1321                         new_window = SFC_Viewer(self.TabsOpened, tagname, self, self.Controler)
  1336                         new_window = SFC_Viewer(self.TabsOpened, tagname, self, self.Controler)
       
  1337                         new_window.RefreshScaling(False)
  1322                     else:
  1338                     else:
  1323                         new_window = TextViewer(self.TabsOpened, tagname, self, self.Controler)
  1339                         new_window = TextViewer(self.TabsOpened, tagname, self, self.Controler)
  1324                         new_window.SetTextSyntax(elementtype)
  1340                         new_window.SetTextSyntax(elementtype)
  1325                         if bodytype == "IL":
  1341                         if bodytype == "IL":
  1326                             new_window.SetKeywords(IL_KEYWORDS)
  1342                             new_window.SetKeywords(IL_KEYWORDS)
  1739 
  1755 
  1740 #-------------------------------------------------------------------------------
  1756 #-------------------------------------------------------------------------------
  1741 #                            Create Project Dialog
  1757 #                            Create Project Dialog
  1742 #-------------------------------------------------------------------------------
  1758 #-------------------------------------------------------------------------------
  1743 
  1759 
  1744 [ID_PROJECTDIALOG, ID_PROJECTDIALOGPROJECTNAME, 
  1760 [ID_SCALINGPANEL, ID_SCALINGPANELXSCALE, 
  1745  ID_PROJECTDIALOGCOMPANYNAME, ID_PROJECTDIALOGCOMPANYURL, 
  1761  ID_SCALINGPANELYSCALE, ID_SCALINGPANELSTATICTEXT1, 
       
  1762  ID_SCALINGPANELSTATICTEXT2, 
       
  1763 ] = [wx.NewId() for _init_ctrls in range(5)]
       
  1764 
       
  1765 class ScalingPanel(wx.Panel):
       
  1766     
       
  1767     def _init_coll_ScalingPanelSizer_Items(self, parent):
       
  1768         parent.AddWindow(self.staticText1, 0, border=10, flag=wx.GROW|wx.TOP|wx.LEFT)
       
  1769         parent.AddWindow(self.XScale, 0, border=10, flag=wx.GROW|wx.TOP|wx.RIGHT)
       
  1770         parent.AddWindow(self.staticText2, 0, border=10, flag=wx.GROW|wx.BOTTOM|wx.LEFT)
       
  1771         parent.AddWindow(self.YScale, 0, border=10, flag=wx.GROW|wx.BOTTOM|wx.RIGHT)
       
  1772 
       
  1773     def _init_coll_ScalingPanelSizer_Growables(self, parent):
       
  1774         parent.AddGrowableCol(1)
       
  1775 
       
  1776     def _init_sizers(self):
       
  1777         self.ScalingPanelSizer = wx.FlexGridSizer(cols=2, hgap=0, rows=2, vgap=5)
       
  1778         
       
  1779         self._init_coll_ScalingPanelSizer_Items(self.ScalingPanelSizer)
       
  1780         self._init_coll_ScalingPanelSizer_Growables(self.ScalingPanelSizer)
       
  1781 
       
  1782         self.SetSizer(self.ScalingPanelSizer)
       
  1783 
       
  1784     def _init_ctrls(self, prnt):
       
  1785         wx.Panel.__init__(self, id=ID_SCALINGPANEL,
       
  1786               name='ScalingPanel', parent=prnt, pos=wx.Point(0, 0),
       
  1787               size=wx.Size(0, 0), style=0)
       
  1788         
       
  1789         self.staticText1 = wx.StaticText(id=ID_SCALINGPANELSTATICTEXT1,
       
  1790               label='X Scale:', name='staticText1', parent=self,
       
  1791               pos=wx.Point(0, 0), size=wx.Size(150, 17), style=0)
       
  1792         
       
  1793         self.XScale = wx.SpinCtrl(id=ID_SCALINGPANELXSCALE,
       
  1794               name='XScale', parent=self, pos=wx.Point(0, 0),
       
  1795               size=wx.Size(0, 24), style=0, min=0, max=2**16)
       
  1796         
       
  1797         self.staticText2 = wx.StaticText(id=ID_SCALINGPANELSTATICTEXT2,
       
  1798               label='Y Scale:', name='staticText2', parent=self,
       
  1799               pos=wx.Point(0, 0), size=wx.Size(150, 17), style=0)
       
  1800         
       
  1801         self.YScale = wx.SpinCtrl(id=ID_SCALINGPANELYSCALE,
       
  1802               name='YScale', parent=self, pos=wx.Point(0, 0),
       
  1803               size=wx.Size(0, 24), style=0, min=0, max=2**16)
       
  1804         
       
  1805         self._init_sizers()
       
  1806         
       
  1807     def __init__(self, parent):
       
  1808         self._init_ctrls(parent)
       
  1809 
       
  1810     def SetScaling(self, x, y):
       
  1811         self.XScale.SetValue(x)
       
  1812         self.YScale.SetValue(y)
       
  1813         
       
  1814     def GetScaling(self):
       
  1815         return self.XScale.GetValue(), self.YScale.GetValue()
       
  1816 
       
  1817 [ID_PROJECTDIALOG, ID_PROJECTDIALOGMAINNOTEBOOK, 
       
  1818  ID_PROJECTDIALOGPROJECTPANEL, ID_PROJECTDIALOGAUTHORPANEL, 
       
  1819  ID_PROJECTDIALOGGRAPHICSPANEL, ID_PROJECTDIALOGMISCELLANEOUSPANEL, 
       
  1820  ID_PROJECTDIALOGPROJECTNAME, ID_PROJECTDIALOGPROJECTVERSION, 
  1746  ID_PROJECTDIALOGPRODUCTNAME, ID_PROJECTDIALOGPRODUCTVERSION, 
  1821  ID_PROJECTDIALOGPRODUCTNAME, ID_PROJECTDIALOGPRODUCTVERSION, 
  1747  ID_PROJECTDIALOGPRODUCTRELEASE, ID_PROJECTDIALOGCONTENTDESCRIPTION, 
  1822  ID_PROJECTDIALOGPRODUCTRELEASE, ID_PROJECTDIALOGCOMPANYNAME, 
       
  1823  ID_PROJECTDIALOGCOMPANYURL, ID_PROJECTDIALOGAUTHORNAME, 
       
  1824  ID_PROJECTDIALOGORGANIZATION, ID_PROJECTDIALOGLANGUAGE, 
       
  1825  ID_PROJECTDIALOGCONTENTDESCRIPTION, ID_PROJECTDIALOGSCALINGNOTEBOOK, 
       
  1826  ID_PROJECTDIALOGPAGEWIDTH, ID_PROJECTDIALOGPAGEHEIGHT, 
  1748  ID_PROJECTDIALOGSTATICTEXT1, ID_PROJECTDIALOGSTATICTEXT2, 
  1827  ID_PROJECTDIALOGSTATICTEXT1, ID_PROJECTDIALOGSTATICTEXT2, 
  1749  ID_PROJECTDIALOGSTATICTEXT3, ID_PROJECTDIALOGSTATICTEXT4, 
  1828  ID_PROJECTDIALOGSTATICTEXT3, ID_PROJECTDIALOGSTATICTEXT4, 
  1750  ID_PROJECTDIALOGSTATICTEXT5, ID_PROJECTDIALOGSTATICTEXT6, 
  1829  ID_PROJECTDIALOGSTATICTEXT5, ID_PROJECTDIALOGSTATICTEXT6, 
  1751  ID_PROJECTDIALOGSTATICTEXT7, 
  1830  ID_PROJECTDIALOGSTATICTEXT7, ID_PROJECTDIALOGSTATICTEXT8, 
  1752 ] = [wx.NewId() for _init_ctrls in range(15)]
  1831  ID_PROJECTDIALOGSTATICTEXT9, ID_PROJECTDIALOGSTATICTEXT10, 
  1753         
  1832  ID_PROJECTDIALOGSTATICTEXT11, ID_PROJECTDIALOGSTATICTEXT12, 
       
  1833  ID_PROJECTDIALOGSTATICTEXT13, ID_PROJECTDIALOGSTATICTEXT14, 
       
  1834  ID_PROJECTDIALOGSTATICTEXT15, 
       
  1835 ] = [wx.NewId() for _init_ctrls in range(35)]
       
  1836 
  1754 class ProjectDialog(wx.Dialog):
  1837 class ProjectDialog(wx.Dialog):
  1755     if wx.VERSION < (2, 6, 0):
  1838     if wx.VERSION < (2, 6, 0):
  1756         def Bind(self, event, function, id = None):
  1839         def Bind(self, event, function, id = None):
  1757             if id is not None:
  1840             if id is not None:
  1758                 event(self, id, function)
  1841                 event(self, id, function)
  1759             else:
  1842             else:
  1760                 event(self, function)
  1843                 event(self, function)
  1761                 
  1844                 
  1762     def _init_coll_flexGridSizer1_Items(self, parent):
  1845     def _init_coll_flexGridSizer1_Items(self, parent):
  1763         parent.AddSizer(self.MainSizer, 0, border=20, flag=wx.GROW|wx.TOP|wx.LEFT|wx.RIGHT)
  1846         parent.AddSizer(self.MainNotebook, 0, border=0, flag=wx.GROW)
  1764         parent.AddSizer(self.ButtonSizer, 0, border=20, flag=wx.ALIGN_RIGHT|wx.BOTTOM|wx.LEFT|wx.RIGHT)
  1847         parent.AddSizer(self.ButtonSizer, 0, border=20, flag=wx.ALIGN_RIGHT|wx.BOTTOM|wx.LEFT|wx.RIGHT)
  1765         
  1848         
  1766     def _init_coll_flexGridSizer1_Growables(self, parent):
  1849     def _init_coll_flexGridSizer1_Growables(self, parent):
  1767         parent.AddGrowableCol(0)
  1850         parent.AddGrowableCol(0)
  1768         parent.AddGrowableRow(0)
  1851         parent.AddGrowableRow(0)
  1769     
  1852     
  1770     def _init_coll_MainSizer_Items(self, parent):
  1853     def _init_coll_ProjectPanelSizer_Items(self, parent):
  1771         parent.AddWindow(self.staticText1, 0, border=4, flag=wx.GROW|wx.TOP)
  1854         parent.AddWindow(self.staticText1, 0, border=10, flag=wx.GROW|wx.TOP|wx.LEFT)
  1772         parent.AddWindow(self.ProjectName, 0, border=0, flag=wx.GROW)
  1855         parent.AddWindow(self.ProjectName, 0, border=10, flag=wx.GROW|wx.TOP|wx.RIGHT)
  1773         parent.AddWindow(self.staticText2, 0, border=4, flag=wx.GROW|wx.TOP)
  1856         parent.AddWindow(self.staticText2, 0, border=10, flag=wx.GROW|wx.LEFT)
  1774         parent.AddWindow(self.CompanyName, 0, border=0, flag=wx.GROW)
  1857         parent.AddWindow(self.ProjectVersion, 0, border=10, flag=wx.GROW|wx.RIGHT)
  1775         parent.AddWindow(self.staticText3, 0, border=4, flag=wx.GROW|wx.TOP)
  1858         parent.AddWindow(self.staticText3, 0, border=10, flag=wx.GROW|wx.LEFT)
  1776         parent.AddWindow(self.CompanyURL, 0, border=0, flag=wx.GROW)
  1859         parent.AddWindow(self.ProductName, 0, border=10, flag=wx.GROW|wx.RIGHT)
  1777         parent.AddWindow(self.staticText4, 0, border=4, flag=wx.GROW|wx.TOP)
  1860         parent.AddWindow(self.staticText4, 0, border=10, flag=wx.GROW|wx.LEFT)
  1778         parent.AddWindow(self.ProductName, 0, border=0, flag=wx.GROW)
  1861         parent.AddWindow(self.ProductVersion, 0, border=10, flag=wx.GROW|wx.RIGHT)
  1779         parent.AddWindow(self.staticText5, 0, border=4, flag=wx.GROW|wx.TOP)
  1862         parent.AddWindow(self.staticText5, 0, border=10, flag=wx.GROW|wx.BOTTOM|wx.LEFT)
  1780         parent.AddWindow(self.ProductVersion, 0, border=0, flag=wx.GROW)
  1863         parent.AddWindow(self.ProductRelease, 0, border=10, flag=wx.GROW|wx.BOTTOM|wx.RIGHT)
  1781         parent.AddWindow(self.staticText6, 0, border=4, flag=wx.GROW|wx.TOP)
  1864         
  1782         parent.AddWindow(self.ProductRelease, 0, border=0, flag=wx.GROW)
  1865     def _init_coll_ProjectPanelSizer_Growables(self, parent):
  1783         parent.AddWindow(self.staticText7, 0, border=4, flag=wx.GROW|wx.TOP)
       
  1784         parent.AddWindow(self.ContentDescription, 0, border=0, flag=wx.GROW)
       
  1785         
       
  1786     def _init_coll_MainSizer_Growables(self, parent):
       
  1787         parent.AddGrowableCol(1)
  1866         parent.AddGrowableCol(1)
  1788         parent.AddGrowableRow(6)
  1867 
       
  1868     def _init_coll_AuthorPanelSizer_Items(self, parent):
       
  1869         parent.AddWindow(self.staticText6, 0, border=10, flag=wx.GROW|wx.TOP|wx.LEFT)
       
  1870         parent.AddWindow(self.CompanyName, 0, border=10, flag=wx.GROW|wx.TOP|wx.RIGHT)
       
  1871         parent.AddWindow(self.staticText7, 0, border=10, flag=wx.GROW|wx.LEFT)
       
  1872         parent.AddWindow(self.CompanyURL, 0, border=10, flag=wx.GROW|wx.RIGHT)
       
  1873         parent.AddWindow(self.staticText8, 0, border=10, flag=wx.GROW|wx.LEFT)
       
  1874         parent.AddWindow(self.AuthorName, 0, border=10, flag=wx.GROW|wx.RIGHT)
       
  1875         parent.AddWindow(self.staticText9, 0, border=10, flag=wx.GROW|wx.BOTTOM|wx.LEFT)
       
  1876         parent.AddWindow(self.Organization, 0, border=10, flag=wx.GROW|wx.BOTTOM|wx.RIGHT)
       
  1877     
       
  1878     def _init_coll_AuthorPanelSizer_Growables(self, parent):
       
  1879         parent.AddGrowableCol(1)
       
  1880     
       
  1881     def _init_coll_GraphicsPanelSizer_Items(self, parent):
       
  1882         parent.AddWindow(self.staticText12, 0, border=10, flag=wx.GROW|wx.TOP|wx.LEFT|wx.RIGHT)
       
  1883         parent.AddSizer(self.GraphicsPageSizeSizer, 0, border=10, flag=wx.GROW|wx.LEFT|wx.RIGHT)
       
  1884         parent.AddWindow(self.staticText15, 0, border=10, flag=wx.GROW|wx.LEFT|wx.RIGHT)
       
  1885         parent.AddWindow(self.ScalingNotebook, 0, border=10, flag=wx.GROW|wx.BOTTOM|wx.LEFT|wx.RIGHT)
       
  1886         
       
  1887     def _init_coll_GraphicsPanelSizer_Growables(self, parent):
       
  1888         parent.AddGrowableCol(0)
       
  1889         parent.AddGrowableRow(3)
       
  1890     
       
  1891     def _init_coll_GraphicsPageSizeSizer_Items(self, parent):
       
  1892         parent.AddWindow(self.staticText13, 0, border=12, flag=wx.GROW|wx.LEFT)
       
  1893         parent.AddWindow(self.PageWidth, 0, border=0, flag=wx.GROW)
       
  1894         parent.AddWindow(self.staticText14, 0, border=12, flag=wx.GROW|wx.LEFT)
       
  1895         parent.AddWindow(self.PageHeight, 0, border=0, flag=wx.GROW)
       
  1896     
       
  1897     def _init_coll_GraphicsPageSizeSizer_Growables(self, parent):
       
  1898         parent.AddGrowableCol(1)
       
  1899     
       
  1900     def _init_coll_MiscellaneousPanelSizer_Items(self, parent):
       
  1901         parent.AddWindow(self.staticText10, 0, border=10, flag=wx.GROW|wx.TOP|wx.LEFT)
       
  1902         parent.AddWindow(self.Language, 0, border=10, flag=wx.GROW|wx.TOP|wx.RIGHT)
       
  1903         parent.AddWindow(self.staticText11, 0, border=10, flag=wx.GROW|wx.BOTTOM|wx.LEFT)
       
  1904         parent.AddWindow(self.ContentDescription, 0, border=10, flag=wx.GROW|wx.BOTTOM|wx.RIGHT)
       
  1905         
       
  1906     def _init_coll_MiscellaneousPanelSizer_Growables(self, parent):
       
  1907         parent.AddGrowableCol(1)
       
  1908         parent.AddGrowableRow(1)
  1789         
  1909         
  1790     def _init_sizers(self):
  1910     def _init_sizers(self):
  1791         self.flexGridSizer1 = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10)
  1911         self.flexGridSizer1 = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10)
  1792         self.MainSizer = wx.FlexGridSizer(cols=2, hgap=0, rows=7, vgap=15)
  1912         self.ProjectPanelSizer = wx.FlexGridSizer(cols=2, hgap=0, rows=5, vgap=15)
       
  1913         self.AuthorPanelSizer = wx.FlexGridSizer(cols=2, hgap=0, rows=4, vgap=15)
       
  1914         self.GraphicsPanelSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=4, vgap=5)
       
  1915         self.GraphicsPageSizeSizer = wx.FlexGridSizer(cols=2, hgap=0, rows=2, vgap=5)
       
  1916         self.MiscellaneousPanelSizer = wx.FlexGridSizer(cols=2, hgap=0, rows=2, vgap=15)
  1793 
  1917 
  1794         self._init_coll_flexGridSizer1_Items(self.flexGridSizer1)
  1918         self._init_coll_flexGridSizer1_Items(self.flexGridSizer1)
  1795         self._init_coll_flexGridSizer1_Growables(self.flexGridSizer1)
  1919         self._init_coll_flexGridSizer1_Growables(self.flexGridSizer1)
  1796         self._init_coll_MainSizer_Items(self.MainSizer)
  1920         self._init_coll_ProjectPanelSizer_Items(self.ProjectPanelSizer)
  1797         self._init_coll_MainSizer_Growables(self.MainSizer)
  1921         self._init_coll_ProjectPanelSizer_Growables(self.ProjectPanelSizer)
       
  1922         self._init_coll_AuthorPanelSizer_Items(self.AuthorPanelSizer)
       
  1923         self._init_coll_AuthorPanelSizer_Growables(self.AuthorPanelSizer)
       
  1924         self._init_coll_GraphicsPanelSizer_Items(self.GraphicsPanelSizer)
       
  1925         self._init_coll_GraphicsPanelSizer_Growables(self.GraphicsPanelSizer)
       
  1926         self._init_coll_GraphicsPageSizeSizer_Items(self.GraphicsPageSizeSizer)
       
  1927         self._init_coll_GraphicsPageSizeSizer_Growables(self.GraphicsPageSizeSizer)
       
  1928         self._init_coll_MiscellaneousPanelSizer_Items(self.MiscellaneousPanelSizer)
       
  1929         self._init_coll_MiscellaneousPanelSizer_Growables(self.MiscellaneousPanelSizer)
  1798 
  1930 
  1799         self.SetSizer(self.flexGridSizer1)
  1931         self.SetSizer(self.flexGridSizer1)
       
  1932         self.ProjectPanel.SetSizer(self.ProjectPanelSizer)
       
  1933         self.AuthorPanel.SetSizer(self.AuthorPanelSizer)
       
  1934         self.GraphicsPanel.SetSizer(self.GraphicsPanelSizer)
       
  1935         self.MiscellaneousPanel.SetSizer(self.MiscellaneousPanelSizer)
  1800 
  1936 
  1801     def _init_ctrls(self, prnt):
  1937     def _init_ctrls(self, prnt):
  1802         wx.Dialog.__init__(self, id=ID_PROJECTDIALOG,
  1938         wx.Dialog.__init__(self, id=ID_PROJECTDIALOG,
  1803               name='ProjectDialog', parent=prnt, pos=wx.Point(376, 223),
  1939               name='ProjectDialog', parent=prnt, pos=wx.Point(376, 223),
  1804               size=wx.Size(550, 450), style=wx.DEFAULT_DIALOG_STYLE,
  1940               size=wx.Size(500, 350), style=wx.DEFAULT_DIALOG_STYLE,
  1805               title='Create a new project')
  1941               title='Create a new project')
  1806         self.SetClientSize(wx.Size(550, 450))
  1942         self.SetClientSize(wx.Size(500, 350))
       
  1943 
       
  1944         self.MainNotebook = wx.Notebook(id=ID_PROJECTDIALOGMAINNOTEBOOK,
       
  1945                   name='MainNotebook', parent=self, pos=wx.Point(0,
       
  1946                   0), size=wx.Size(0, 0), style=0)
       
  1947 
       
  1948         # Project Panel elements
       
  1949 
       
  1950         self.ProjectPanel = wx.Panel(id=ID_PROJECTDIALOGPROJECTPANEL,
       
  1951               name='ProjectPanel', parent=self.MainNotebook, pos=wx.Point(0, 0),
       
  1952               size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL)
  1807 
  1953 
  1808         self.staticText1 = wx.StaticText(id=ID_PROJECTDIALOGSTATICTEXT1,
  1954         self.staticText1 = wx.StaticText(id=ID_PROJECTDIALOGSTATICTEXT1,
  1809               label='Project Name (required):', name='staticText1', parent=self,
  1955               label='Project Name (required):', name='staticText1', parent=self.ProjectPanel,
  1810               pos=wx.Point(0, 0), size=wx.Size(200, 17), style=0)
  1956               pos=wx.Point(0, 0), size=wx.Size(200, 17), style=0)
  1811 
  1957 
  1812         self.ProjectName = wx.TextCtrl(id=ID_PROJECTDIALOGPROJECTNAME,
  1958         self.ProjectName = wx.TextCtrl(id=ID_PROJECTDIALOGPROJECTNAME,
  1813               name='ProjectName', parent=self, pos=wx.Point(0, 0), 
  1959               name='ProjectName', parent=self.ProjectPanel, pos=wx.Point(0, 0), 
  1814               size=wx.Size(0, 24), style=0)
  1960               size=wx.Size(0, 24), style=0)
  1815 
  1961 
  1816         self.staticText2 = wx.StaticText(id=ID_PROJECTDIALOGSTATICTEXT2,
  1962         self.staticText2 = wx.StaticText(id=ID_PROJECTDIALOGSTATICTEXT2,
  1817               label='Company Name (required):', name='staticText2', parent=self,
  1963               label='Project Version (optional):', name='staticText2', parent=self.ProjectPanel,
  1818               pos=wx.Point(0, 0), size=wx.Size(200, 17), style=0)
  1964               pos=wx.Point(0, 0), size=wx.Size(200, 17), style=0)
  1819 
  1965 
       
  1966         self.ProjectVersion = wx.TextCtrl(id=ID_PROJECTDIALOGPROJECTVERSION,
       
  1967               name='ProjectVersion', parent=self.ProjectPanel, pos=wx.Point(0, 0), 
       
  1968               size=wx.Size(0, 24), style=0)
       
  1969 
       
  1970         self.staticText3 = wx.StaticText(id=ID_PROJECTDIALOGSTATICTEXT3,
       
  1971               label='Product Name (required):', name='staticText3', parent=self.ProjectPanel,
       
  1972               pos=wx.Point(0, 0), size=wx.Size(200, 17), style=0)
       
  1973 
       
  1974         self.ProductName = wx.TextCtrl(id=ID_PROJECTDIALOGPRODUCTNAME,
       
  1975               name='ProductName', parent=self.ProjectPanel, pos=wx.Point(0, 0),
       
  1976               size=wx.Size(0, 24), style=0)
       
  1977 
       
  1978         self.staticText4 = wx.StaticText(id=ID_PROJECTDIALOGSTATICTEXT4,
       
  1979               label='Product Version (required):', name='staticText4', parent=self.ProjectPanel,
       
  1980               pos=wx.Point(0, 0), size=wx.Size(200, 17), style=0)
       
  1981 
       
  1982         self.ProductVersion = wx.TextCtrl(id=ID_PROJECTDIALOGPRODUCTVERSION,
       
  1983               name='ProductVersion', parent=self.ProjectPanel, pos=wx.Point(0, 0),
       
  1984               size=wx.Size(0, 24), style=0)
       
  1985 
       
  1986         self.staticText5 = wx.StaticText(id=ID_PROJECTDIALOGSTATICTEXT5,
       
  1987               label='Product Release (optional):', name='staticText5', parent=self.ProjectPanel,
       
  1988               pos=wx.Point(0, 0), size=wx.Size(200, 17), style=0)
       
  1989 
       
  1990         self.ProductRelease = wx.TextCtrl(id=ID_PROJECTDIALOGPRODUCTRELEASE,
       
  1991               name='ProductRelease', parent=self.ProjectPanel, pos=wx.Point(0, 0),
       
  1992               size=wx.Size(0, 24), style=0)
       
  1993 
       
  1994         self.MainNotebook.AddPage(self.ProjectPanel, "Project")
       
  1995         
       
  1996         # Author Panel elements
       
  1997 
       
  1998         self.AuthorPanel = wx.Panel(id=ID_PROJECTDIALOGAUTHORPANEL,
       
  1999               name='AuthorPanel', parent=self.MainNotebook, pos=wx.Point(0, 0),
       
  2000               size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL)
       
  2001 
       
  2002         self.staticText6 = wx.StaticText(id=ID_PROJECTDIALOGSTATICTEXT6,
       
  2003               label='Company Name (required):', name='staticText6', parent=self.AuthorPanel,
       
  2004               pos=wx.Point(0, 0), size=wx.Size(200, 17), style=0)
       
  2005 
  1820         self.CompanyName = wx.TextCtrl(id=ID_PROJECTDIALOGCOMPANYNAME,
  2006         self.CompanyName = wx.TextCtrl(id=ID_PROJECTDIALOGCOMPANYNAME,
  1821               name='CompanyName', parent=self, pos=wx.Point(0, 0),
  2007               name='CompanyName', parent=self.AuthorPanel, pos=wx.Point(0, 0),
  1822               size=wx.Size(0, 24), style=0)
  2008               size=wx.Size(0, 24), style=0)
  1823 
  2009 
  1824         self.staticText3 = wx.StaticText(id=ID_PROJECTDIALOGSTATICTEXT3,
  2010         self.staticText7 = wx.StaticText(id=ID_PROJECTDIALOGSTATICTEXT7,
  1825               label='Company URL (optional):', name='staticText3', parent=self,
  2011               label='Company URL (optional):', name='staticText7', parent=self.AuthorPanel,
  1826               pos=wx.Point(0, 0), size=wx.Size(200, 17), style=0)
  2012               pos=wx.Point(0, 0), size=wx.Size(200, 17), style=0)
  1827 
  2013 
  1828         self.CompanyURL = wx.TextCtrl(id=ID_PROJECTDIALOGCOMPANYURL,
  2014         self.CompanyURL = wx.TextCtrl(id=ID_PROJECTDIALOGCOMPANYURL,
  1829               name='CompanyURL', parent=self, pos=wx.Point(0, 0),
  2015               name='CompanyURL', parent=self.AuthorPanel, pos=wx.Point(0, 0),
  1830               size=wx.Size(0, 24), style=0)
  2016               size=wx.Size(0, 24), style=0)
  1831 
  2017 
  1832         self.staticText4 = wx.StaticText(id=ID_PROJECTDIALOGSTATICTEXT4,
  2018         self.staticText8 = wx.StaticText(id=ID_PROJECTDIALOGSTATICTEXT8,
  1833               label='Product Name (required):', name='staticText4', parent=self,
  2019               label='Author Name (optional):', name='staticText8', parent=self.AuthorPanel,
  1834               pos=wx.Point(0, 0), size=wx.Size(200, 17), style=0)
  2020               pos=wx.Point(0, 0), size=wx.Size(200, 17), style=0)
  1835 
  2021 
  1836         self.ProductName = wx.TextCtrl(id=ID_PROJECTDIALOGPRODUCTNAME,
  2022         self.AuthorName = wx.TextCtrl(id=ID_PROJECTDIALOGAUTHORNAME,
  1837               name='ProductName', parent=self, pos=wx.Point(0, 0),
  2023               name='AuthorName', parent=self.AuthorPanel, pos=wx.Point(0, 0),
  1838               size=wx.Size(0, 24), style=0)
  2024               size=wx.Size(0, 24), style=0)
  1839 
  2025 
  1840         self.staticText5 = wx.StaticText(id=ID_PROJECTDIALOGSTATICTEXT5,
  2026         self.staticText9 = wx.StaticText(id=ID_PROJECTDIALOGSTATICTEXT9,
  1841               label='Product Version (required):', name='staticText5', parent=self,
  2027               label='Organization (optional):', name='staticText9', parent=self.AuthorPanel,
  1842               pos=wx.Point(0, 0), size=wx.Size(200, 17), style=0)
  2028               pos=wx.Point(0, 0), size=wx.Size(200, 17), style=0)
  1843 
  2029 
  1844         self.ProductVersion = wx.TextCtrl(id=ID_PROJECTDIALOGPRODUCTVERSION,
  2030         self.Organization = wx.TextCtrl(id=ID_PROJECTDIALOGORGANIZATION,
  1845               name='ProductVersion', parent=self, pos=wx.Point(0, 0),
  2031               name='Organization', parent=self.AuthorPanel, pos=wx.Point(0, 0),
  1846               size=wx.Size(0, 24), style=0)
  2032               size=wx.Size(0, 24), style=0)
  1847 
  2033 
  1848         self.staticText6 = wx.StaticText(id=ID_PROJECTDIALOGSTATICTEXT6,
  2034         self.MainNotebook.AddPage(self.AuthorPanel, "Author")
  1849               label='Product Release (optional):', name='staticText6', parent=self,
  2035 
       
  2036         # Graphics Panel elements
       
  2037 
       
  2038         self.GraphicsPanel = wx.Panel(id=ID_PROJECTDIALOGGRAPHICSPANEL,
       
  2039               name='GraphicsPanel', parent=self.MainNotebook, pos=wx.Point(0, 0),
       
  2040               size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL)
       
  2041 
       
  2042         self.staticText12 = wx.StaticText(id=ID_PROJECTDIALOGSTATICTEXT12,
       
  2043               label='Page Size (optional):', name='staticText12', parent=self.GraphicsPanel,
  1850               pos=wx.Point(0, 0), size=wx.Size(200, 17), style=0)
  2044               pos=wx.Point(0, 0), size=wx.Size(200, 17), style=0)
  1851 
  2045 
  1852         self.ProductRelease = wx.TextCtrl(id=ID_PROJECTDIALOGPRODUCTRELEASE,
  2046         self.staticText13 = wx.StaticText(id=ID_PROJECTDIALOGSTATICTEXT13,
  1853               name='ProductRelease', parent=self, pos=wx.Point(0, 0),
  2047               label='Width:', name='staticText13', parent=self.GraphicsPanel,
       
  2048               pos=wx.Point(0, 0), size=wx.Size(150, 17), style=0)
       
  2049         
       
  2050         self.PageWidth = wx.SpinCtrl(id=ID_PROJECTDIALOGPAGEWIDTH,
       
  2051               name='PageWidth', parent=self.GraphicsPanel, pos=wx.Point(0, 0),
       
  2052               size=wx.Size(0, 24), style=0, min=0, max=2**16)
       
  2053 
       
  2054         self.staticText14 = wx.StaticText(id=ID_PROJECTDIALOGSTATICTEXT14,
       
  2055               label='Height:', name='staticText14', parent=self.GraphicsPanel,
       
  2056               pos=wx.Point(0, 0), size=wx.Size(150, 17), style=0)
       
  2057         
       
  2058         self.PageHeight = wx.SpinCtrl(id=ID_PROJECTDIALOGPAGEHEIGHT,
       
  2059               name='PageHeight', parent=self.GraphicsPanel, pos=wx.Point(0, 0),
       
  2060               size=wx.Size(0, 24), style=0, min=0, max=2**16)
       
  2061         
       
  2062         self.staticText15 = wx.StaticText(id=ID_PROJECTDIALOGSTATICTEXT15,
       
  2063               label='Scaling:', name='staticText15', parent=self.GraphicsPanel,
       
  2064               pos=wx.Point(0, 0), size=wx.Size(200, 17), style=0)
       
  2065         
       
  2066         self.ScalingNotebook = wx.Notebook(id=ID_PROJECTDIALOGSCALINGNOTEBOOK,
       
  2067               name='ScalingNotebook', parent=self.GraphicsPanel, pos=wx.Point(0,
       
  2068               0), size=wx.Size(0, 0), style=0)
       
  2069         
       
  2070         self.Scalings = {}
       
  2071         for language in ["FBD", "LD", "SFC"]:
       
  2072             window = ScalingPanel(self.ScalingNotebook)
       
  2073             self.Scalings[language] = window
       
  2074             self.ScalingNotebook.AddPage(window, language)
       
  2075         
       
  2076         self.MainNotebook.AddPage(self.GraphicsPanel, "Graphics")
       
  2077 
       
  2078         # Miscellaneous Panel elements
       
  2079 
       
  2080         self.MiscellaneousPanel = wx.Panel(id=ID_PROJECTDIALOGMISCELLANEOUSPANEL,
       
  2081               name='MiscellaneousPanel', parent=self.MainNotebook, pos=wx.Point(0, 0),
       
  2082               size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL)
       
  2083 
       
  2084         self.staticText10 = wx.StaticText(id=ID_PROJECTDIALOGSTATICTEXT10,
       
  2085               label='Language (optional):', name='staticText10', parent=self.MiscellaneousPanel,
       
  2086               pos=wx.Point(0, 0), size=wx.Size(200, 17), style=0)
       
  2087 
       
  2088         self.Language = wx.Choice(id=ID_PROJECTDIALOGLANGUAGE,
       
  2089               name='Language', parent=self.MiscellaneousPanel, pos=wx.Point(0, 0),
  1854               size=wx.Size(0, 24), style=0)
  2090               size=wx.Size(0, 24), style=0)
  1855 
  2091 
  1856         self.staticText7 = wx.StaticText(id=ID_PROJECTDIALOGSTATICTEXT7,
  2092         self.staticText11 = wx.StaticText(id=ID_PROJECTDIALOGSTATICTEXT11,
  1857               label='Content Description (optional):', name='staticText7', parent=self,
  2093               label='Content Description (optional):', name='staticText11', parent=self.MiscellaneousPanel,
  1858               pos=wx.Point(0, 0), size=wx.Size(200, 17), style=0)
  2094               pos=wx.Point(0, 0), size=wx.Size(200, 17), style=0)
  1859 
  2095 
  1860         self.ContentDescription = wx.TextCtrl(id=ID_PROJECTDIALOGCONTENTDESCRIPTION,
  2096         self.ContentDescription = wx.TextCtrl(id=ID_PROJECTDIALOGCONTENTDESCRIPTION,
  1861               name='ProductRelease', parent=self, pos=wx.Point(0, 0),
  2097               name='ContentDescription', parent=self.MiscellaneousPanel, pos=wx.Point(0, 0),
  1862               size=wx.Size(0, 120), style=wx.TE_MULTILINE)
  2098               size=wx.Size(0, 24), style=wx.TE_MULTILINE)
       
  2099 
       
  2100         self.MainNotebook.AddPage(self.MiscellaneousPanel, "Miscellaneous")
  1863 
  2101 
  1864         self.ButtonSizer = self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.CENTRE)
  2102         self.ButtonSizer = self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.CENTRE)
  1865         self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.ButtonSizer.GetAffirmativeButton().GetId())
  2103         self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.ButtonSizer.GetAffirmativeButton().GetId())
  1866         
  2104         
  1867         self._init_sizers()
  2105         self._init_sizers()
  1868 
  2106 
  1869     def __init__(self, parent):
  2107     def __init__(self, parent):
  1870         self._init_ctrls(parent)
  2108         self._init_ctrls(parent)
       
  2109         
       
  2110         languages = ["", "en-US", "fr-FR"]
       
  2111         
       
  2112         for language in languages:
       
  2113             self.Language.Append(language)
  1871         
  2114         
  1872     def OnOK(self, event):
  2115     def OnOK(self, event):
  1873         error = []
  2116         error = []
  1874         if self.ProjectName.GetValue() == "":
  2117         if self.ProjectName.GetValue() == "":
  1875             error.append("Project Name")
  2118             error.append("Project Name")
  1885                 if i == 0:
  2128                 if i == 0:
  1886                     text += item
  2129                     text += item
  1887                 elif i == len(error) - 1:
  2130                 elif i == len(error) - 1:
  1888                     text += " and %s"%item
  2131                     text += " and %s"%item
  1889                 else:
  2132                 else:
  1890                     text += ", %s"%item 
  2133                     text += ", %s"%item
  1891             message = wx.MessageDialog(self, "Form isn't complete. %s must be filled!"%text, "Error", wx.OK|wx.ICON_ERROR)
  2134             message = wx.MessageDialog(self, "Form isn't complete. %s must be filled!"%text, "Error", wx.OK|wx.ICON_ERROR)
  1892             message.ShowModal()
  2135             message.ShowModal()
  1893             message.Destroy()
  2136             message.Destroy()
  1894         else:
  2137         else:
  1895             self.EndModal(wx.ID_OK)
  2138             self.EndModal(wx.ID_OK)
  1896 
  2139 
  1897     def SetValues(self, values):
  2140     def SetValues(self, values):
  1898         for item, value in values.items():
  2141         for item, value in values.items():
  1899             if item == "projectName":
  2142             if item == "projectName":
  1900                 self.ProjectName.SetValue(value)
  2143                 self.ProjectName.SetValue(value)
  1901             elif item == "companyName":
  2144             elif item == "projectVersion":
  1902                 self.CompanyName.SetValue(value)
  2145                 self.ProjectVersion.SetValue(value)
  1903             elif item == "companyURL":
       
  1904                 self.CompanyURL.SetValue(value)
       
  1905             elif item == "productName":
  2146             elif item == "productName":
  1906                 self.ProductName.SetValue(value)
  2147                 self.ProductName.SetValue(value)
  1907             elif item == "productVersion":
  2148             elif item == "productVersion":
  1908                 self.ProductVersion.SetValue(value)
  2149                 self.ProductVersion.SetValue(value)
  1909             elif item == "productRelease":
  2150             elif item == "productRelease":
  1910                 self.ProductRelease.SetValue(value)
  2151                 self.ProductRelease.SetValue(value)
       
  2152             elif item == "companyName":
       
  2153                 self.CompanyName.SetValue(value)
       
  2154             elif item == "companyURL":
       
  2155                 self.CompanyURL.SetValue(value)
       
  2156             elif item == "authorName":
       
  2157                 self.AuthorName.SetValue(value)
       
  2158             elif item == "organization":
       
  2159                 self.Organization.SetValue(value)
       
  2160             elif item == "language":
       
  2161                 self.Language.SetStringSelection(value)
  1911             elif item == "contentDescription":
  2162             elif item == "contentDescription":
  1912                 self.ContentDescription.SetValue(value)
  2163                 self.ContentDescription.SetValue(value)
  1913 
  2164             elif item == "pageSize":
       
  2165                 self.PageWidth.SetValue(value[0])
       
  2166                 self.PageHeight.SetValue(value[1])
       
  2167             elif item == "scaling":
       
  2168                 for language, (x, y) in value.items():
       
  2169                     if language in self.Scalings:
       
  2170                         self.Scalings[language].SetScaling(x, y)
       
  2171     
  1914     def GetValues(self):
  2172     def GetValues(self):
  1915         values = {}
  2173         values = {}
  1916         values["projectName"] = self.ProjectName.GetValue()
  2174         values["projectName"] = self.ProjectName.GetValue()
  1917         values["companyName"] = self.CompanyName.GetValue()
  2175         if self.ProjectVersion.GetValue() != "":
  1918         if self.CompanyURL.GetValue() != None:
  2176             values["projectVersion"] = self.ProjectVersion.GetValue()
  1919             values["companyURL"] = self.CompanyURL.GetValue()
       
  1920         values["productName"] = self.ProductName.GetValue()
  2177         values["productName"] = self.ProductName.GetValue()
  1921         values["productVersion"] = self.ProductVersion.GetValue()
  2178         values["productVersion"] = self.ProductVersion.GetValue()
  1922         if self.ProductRelease.GetValue() != None:
  2179         if self.ProductRelease.GetValue() != "":
  1923             values["productRelease"] = self.ProductRelease.GetValue()
  2180             values["productRelease"] = self.ProductRelease.GetValue()
  1924         if self.ProductRelease.GetValue() != None:
  2181         values["companyName"] = self.CompanyName.GetValue()
       
  2182         if self.CompanyURL.GetValue() != "":
       
  2183             values["companyURL"] = self.CompanyURL.GetValue()
       
  2184         if self.AuthorName.GetValue() != "":
       
  2185             values["authorName"] = self.AuthorName.GetValue()
       
  2186         if self.Organization.GetValue() != "":
       
  2187             values["organization"] = self.Organization.GetValue()
       
  2188         if self.Language.GetStringSelection() != "":
       
  2189             values["language"] = self.Language.GetStringSelection()
       
  2190         if self.ProductRelease.GetValue() != "":
  1925             values["contentDescription"] = self.ContentDescription.GetValue()
  2191             values["contentDescription"] = self.ContentDescription.GetValue()
       
  2192         values["pageSize"] = (self.PageWidth.GetValue(), self.PageHeight.GetValue())
       
  2193         values["scaling"] = {}
       
  2194         for language in ["FBD", "LD", "SFC"]:
       
  2195             values["scaling"][language] = self.Scalings[language].GetScaling()
  1926         return values
  2196         return values
  1927 
  2197 
  1928 #-------------------------------------------------------------------------------
  2198 #-------------------------------------------------------------------------------
  1929 #                          Edit Step Name Dialog
  2199 #                          Edit Step Name Dialog
  1930 #-------------------------------------------------------------------------------
  2200 #-------------------------------------------------------------------------------
  2570               name='VariablePanelIndexer', parent=prnt, pos=wx.Point(0, 0),
  2840               name='VariablePanelIndexer', parent=prnt, pos=wx.Point(0, 0),
  2571               size=wx.Size(0, 300), style=wx.TAB_TRAVERSAL)
  2841               size=wx.Size(0, 300), style=wx.TAB_TRAVERSAL)
  2572         
  2842         
  2573         self._init_sizers()
  2843         self._init_sizers()
  2574     
  2844     
  2575     def __init__(self, parent, controler):
  2845     def __init__(self, parent, window, controler):
  2576         self._init_ctrls(parent)
  2846         self._init_ctrls(parent)
  2577         
  2847         
  2578         self.ParentWindow = parent
  2848         self.ParentWindow = window
  2579         self.Controler = controler
  2849         self.Controler = controler
  2580         
  2850         
  2581         self.VariablePanelList = {}
  2851         self.VariablePanelList = {}
  2582         self.CurrentPanel = None
  2852         self.CurrentPanel = None
  2583         
  2853         
  2603         self.VariablePanelList = {}
  2873         self.VariablePanelList = {}
  2604         self.MainSizer.Clear()
  2874         self.MainSizer.Clear()
  2605         self.CurrentPanel = None
  2875         self.CurrentPanel = None
  2606     
  2876     
  2607     def UpdateVariablePanelTagName(self, old_tagname, new_tagname):
  2877     def UpdateVariablePanelTagName(self, old_tagname, new_tagname):
  2608         if old_name in self.VariablePanelList:
  2878         if old_tagname in self.VariablePanelList:
  2609             self.VariablePanelList[new_tagname] = self.VariablePanelList.pop(old_tagname)
  2879             self.VariablePanelList[new_tagname] = self.VariablePanelList.pop(old_tagname)
  2610             if self.CurrentPanel == old_tagname:
  2880             if self.CurrentPanel == old_tagname:
  2611                 self.CurrentPanel = new_tagname
  2881                 self.CurrentPanel = new_tagname
  2612                 
  2882                 
  2613     def ChangeVariablePanel(self, tagname):
  2883     def ChangeVariablePanel(self, tagname):