PLCOpenEditor.py
changeset 700 cf3db1775105
parent 699 649399ffdaf0
child 703 1a14560e10ed
equal deleted inserted replaced
699:649399ffdaf0 700:cf3db1775105
   107 from RessourceEditor import *
   107 from RessourceEditor import *
   108 from DataTypeEditor import *
   108 from DataTypeEditor import *
   109 from PLCControler import *
   109 from PLCControler import *
   110 from SearchResultPanel import SearchResultPanel
   110 from SearchResultPanel import SearchResultPanel
   111 from controls import CustomGrid, CustomTable, CustomTree, LibraryPanel, PouInstanceVariablesPanel
   111 from controls import CustomGrid, CustomTable, CustomTree, LibraryPanel, PouInstanceVariablesPanel
       
   112 from dialogs import ProjectDialog
   112 
   113 
   113 # Define PLCOpenEditor controls id
   114 # Define PLCOpenEditor controls id
   114 [ID_PLCOPENEDITOR, ID_PLCOPENEDITORLEFTNOTEBOOK, 
   115 [ID_PLCOPENEDITOR, ID_PLCOPENEDITORLEFTNOTEBOOK, 
   115  ID_PLCOPENEDITORBOTTOMNOTEBOOK, ID_PLCOPENEDITORRIGHTNOTEBOOK, 
   116  ID_PLCOPENEDITORBOTTOMNOTEBOOK, ID_PLCOPENEDITORRIGHTNOTEBOOK, 
   116  ID_PLCOPENEDITORPROJECTTREE, ID_PLCOPENEDITORMAINSPLITTER, 
   117  ID_PLCOPENEDITORPROJECTTREE, ID_PLCOPENEDITORMAINSPLITTER, 
  1796         selected = event.GetItem()
  1797         selected = event.GetItem()
  1797         name = self.ProjectTree.GetItemText(selected)
  1798         name = self.ProjectTree.GetItemText(selected)
  1798         item_infos = self.ProjectTree.GetPyData(selected)
  1799         item_infos = self.ProjectTree.GetPyData(selected)
  1799         if item_infos["type"] == ITEM_PROJECT:
  1800         if item_infos["type"] == ITEM_PROJECT:
  1800             self.EditProjectSettings()
  1801             self.EditProjectSettings()
  1801         elif item_infos["type"] in [ITEM_DATATYPE, ITEM_POU,
  1802         else:
       
  1803             if item_infos["type"] in [ITEM_DATATYPE, ITEM_POU,
  1802                                     ITEM_CONFIGURATION, ITEM_RESOURCE,
  1804                                     ITEM_CONFIGURATION, ITEM_RESOURCE,
  1803                                     ITEM_TRANSITION, ITEM_ACTION]:
  1805                                     ITEM_TRANSITION, ITEM_ACTION]:
  1804             self.EditProjectElement(item_infos["type"], item_infos["tagname"])
  1806                 self.EditProjectElement(item_infos["type"], item_infos["tagname"])
  1805         event.Skip()
  1807             event.Skip()
  1806     
  1808     
  1807     def ProjectTreeItemSelect(self, select_item):
  1809     def ProjectTreeItemSelect(self, select_item):
  1808         name = self.ProjectTree.GetItemText(select_item)
  1810         name = self.ProjectTree.GetItemText(select_item)
  1809         item_infos = self.ProjectTree.GetPyData(select_item)
  1811         item_infos = self.ProjectTree.GetPyData(select_item)
  1810         if item_infos["type"] in [ITEM_DATATYPE, ITEM_POU,
  1812         if item_infos["type"] in [ITEM_DATATYPE, ITEM_POU,
  2883                 self.ShowErrorMessage(_("\"%s\" is not a valid folder!")%os.path.dirname(filepath))
  2885                 self.ShowErrorMessage(_("\"%s\" is not a valid folder!")%os.path.dirname(filepath))
  2884             self._Refresh(TITLE, FILEMENU, PAGETITLES)
  2886             self._Refresh(TITLE, FILEMENU, PAGETITLES)
  2885         dialog.Destroy()
  2887         dialog.Destroy()
  2886 
  2888 
  2887 #-------------------------------------------------------------------------------
  2889 #-------------------------------------------------------------------------------
  2888 #                            Create Project Dialog
       
  2889 #-------------------------------------------------------------------------------
       
  2890 
       
  2891 [ID_SCALINGPANEL, ID_SCALINGPANELXSCALE, 
       
  2892  ID_SCALINGPANELYSCALE, ID_SCALINGPANELSTATICTEXT1, 
       
  2893  ID_SCALINGPANELSTATICTEXT2, 
       
  2894 ] = [wx.NewId() for _init_ctrls in range(5)]
       
  2895 
       
  2896 class ScalingPanel(wx.Panel):
       
  2897     
       
  2898     def _init_coll_ScalingPanelSizer_Items(self, parent):
       
  2899         parent.AddWindow(self.staticText1, 0, border=10, flag=wx.ALIGN_CENTER_VERTICAL|wx.TOP|wx.LEFT)
       
  2900         parent.AddWindow(self.XScale, 0, border=10, flag=wx.GROW|wx.TOP|wx.RIGHT)
       
  2901         parent.AddWindow(self.staticText2, 0, border=10, flag=wx.ALIGN_CENTER_VERTICAL|wx.BOTTOM|wx.LEFT)
       
  2902         parent.AddWindow(self.YScale, 0, border=10, flag=wx.GROW|wx.BOTTOM|wx.RIGHT)
       
  2903 
       
  2904     def _init_coll_ScalingPanelSizer_Growables(self, parent):
       
  2905         parent.AddGrowableCol(1)
       
  2906 
       
  2907     def _init_sizers(self):
       
  2908         self.ScalingPanelSizer = wx.FlexGridSizer(cols=2, hgap=5, rows=2, vgap=5)
       
  2909         
       
  2910         self._init_coll_ScalingPanelSizer_Items(self.ScalingPanelSizer)
       
  2911         self._init_coll_ScalingPanelSizer_Growables(self.ScalingPanelSizer)
       
  2912 
       
  2913         self.SetSizer(self.ScalingPanelSizer)
       
  2914 
       
  2915     def _init_ctrls(self, prnt):
       
  2916         wx.Panel.__init__(self, id=ID_SCALINGPANEL,
       
  2917               name='ScalingPanel', parent=prnt, pos=wx.Point(0, 0),
       
  2918               size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL)
       
  2919         
       
  2920         self.staticText1 = wx.StaticText(id=ID_SCALINGPANELSTATICTEXT1,
       
  2921               label=_('Horizontal:'), name='staticText1', parent=self,
       
  2922               pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
       
  2923         
       
  2924         self.XScale = wx.SpinCtrl(id=ID_SCALINGPANELXSCALE,
       
  2925               name='XScale', parent=self, pos=wx.Point(0, 0),
       
  2926               size=wx.Size(0, 24), style=0, min=0, max=2**16)
       
  2927         
       
  2928         self.staticText2 = wx.StaticText(id=ID_SCALINGPANELSTATICTEXT2,
       
  2929               label=_('Vertical:'), name='staticText2', parent=self,
       
  2930               pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
       
  2931         
       
  2932         self.YScale = wx.SpinCtrl(id=ID_SCALINGPANELYSCALE,
       
  2933               name='YScale', parent=self, pos=wx.Point(0, 0),
       
  2934               size=wx.Size(0, 24), style=0, min=0, max=2**16)
       
  2935         
       
  2936         self._init_sizers()
       
  2937         
       
  2938     def __init__(self, parent):
       
  2939         self._init_ctrls(parent)
       
  2940 
       
  2941     def SetScaling(self, x, y):
       
  2942         self.XScale.SetValue(x)
       
  2943         self.YScale.SetValue(y)
       
  2944         
       
  2945     def GetScaling(self):
       
  2946         return self.XScale.GetValue(), self.YScale.GetValue()
       
  2947 
       
  2948 [ID_PROJECTDIALOG, ID_PROJECTDIALOGMAINNOTEBOOK, 
       
  2949  ID_PROJECTDIALOGPROJECTPANEL, ID_PROJECTDIALOGAUTHORPANEL, 
       
  2950  ID_PROJECTDIALOGGRAPHICSPANEL, ID_PROJECTDIALOGMISCELLANEOUSPANEL, 
       
  2951  ID_PROJECTDIALOGPROJECTNAME, ID_PROJECTDIALOGPROJECTVERSION, 
       
  2952  ID_PROJECTDIALOGPRODUCTNAME, ID_PROJECTDIALOGPRODUCTVERSION, 
       
  2953  ID_PROJECTDIALOGPRODUCTRELEASE, ID_PROJECTDIALOGCOMPANYNAME, 
       
  2954  ID_PROJECTDIALOGCOMPANYURL, ID_PROJECTDIALOGAUTHORNAME, 
       
  2955  ID_PROJECTDIALOGORGANIZATION, ID_PROJECTDIALOGLANGUAGE, 
       
  2956  ID_PROJECTDIALOGCONTENTDESCRIPTION, ID_PROJECTDIALOGSCALINGNOTEBOOK, 
       
  2957  ID_PROJECTDIALOGPAGEWIDTH, ID_PROJECTDIALOGPAGEHEIGHT, 
       
  2958  ID_PROJECTDIALOGSTATICTEXT1, ID_PROJECTDIALOGSTATICTEXT2, 
       
  2959  ID_PROJECTDIALOGSTATICTEXT3, ID_PROJECTDIALOGSTATICTEXT4, 
       
  2960  ID_PROJECTDIALOGSTATICTEXT5, ID_PROJECTDIALOGSTATICTEXT6, 
       
  2961  ID_PROJECTDIALOGSTATICTEXT7, ID_PROJECTDIALOGSTATICTEXT8, 
       
  2962  ID_PROJECTDIALOGSTATICTEXT9, ID_PROJECTDIALOGSTATICTEXT10, 
       
  2963  ID_PROJECTDIALOGSTATICTEXT11, ID_PROJECTDIALOGSTATICTEXT12, 
       
  2964  ID_PROJECTDIALOGSTATICTEXT13, ID_PROJECTDIALOGSTATICTEXT14, 
       
  2965  ID_PROJECTDIALOGSTATICTEXT15, 
       
  2966 ] = [wx.NewId() for _init_ctrls in range(35)]
       
  2967 
       
  2968 class ProjectDialog(wx.Dialog):
       
  2969     if wx.VERSION < (2, 6, 0):
       
  2970         def Bind(self, event, function, id = None):
       
  2971             if id is not None:
       
  2972                 event(self, id, function)
       
  2973             else:
       
  2974                 event(self, function)
       
  2975                 
       
  2976     def _init_coll_flexGridSizer1_Items(self, parent):
       
  2977         parent.AddSizer(self.MainNotebook, 0, border=0, flag=wx.GROW)
       
  2978         parent.AddSizer(self.ButtonSizer, 0, border=20, flag=wx.ALIGN_RIGHT|wx.BOTTOM|wx.LEFT|wx.RIGHT)
       
  2979         
       
  2980     def _init_coll_flexGridSizer1_Growables(self, parent):
       
  2981         parent.AddGrowableCol(0)
       
  2982         parent.AddGrowableRow(0)
       
  2983     
       
  2984     def _init_coll_ProjectPanelSizer_Items(self, parent):
       
  2985         parent.AddWindow(self.staticText1, 0, border=10, flag=wx.ALIGN_CENTER_VERTICAL|wx.TOP|wx.LEFT)
       
  2986         parent.AddWindow(self.ProjectName, 0, border=10, flag=wx.GROW|wx.TOP|wx.RIGHT)
       
  2987         parent.AddWindow(self.staticText2, 0, border=10, flag=wx.ALIGN_CENTER_VERTICAL|wx.LEFT)
       
  2988         parent.AddWindow(self.ProjectVersion, 0, border=10, flag=wx.GROW|wx.RIGHT)
       
  2989         parent.AddWindow(self.staticText3, 0, border=10, flag=wx.ALIGN_CENTER_VERTICAL|wx.LEFT)
       
  2990         parent.AddWindow(self.ProductName, 0, border=10, flag=wx.GROW|wx.RIGHT)
       
  2991         parent.AddWindow(self.staticText4, 0, border=10, flag=wx.ALIGN_CENTER_VERTICAL|wx.LEFT)
       
  2992         parent.AddWindow(self.ProductVersion, 0, border=10, flag=wx.GROW|wx.RIGHT)
       
  2993         parent.AddWindow(self.staticText5, 0, border=10, flag=wx.ALIGN_CENTER_VERTICAL|wx.BOTTOM|wx.LEFT)
       
  2994         parent.AddWindow(self.ProductRelease, 0, border=10, flag=wx.GROW|wx.BOTTOM|wx.RIGHT)
       
  2995         
       
  2996     def _init_coll_ProjectPanelSizer_Growables(self, parent):
       
  2997         parent.AddGrowableCol(1)
       
  2998 
       
  2999     def _init_coll_AuthorPanelSizer_Items(self, parent):
       
  3000         parent.AddWindow(self.staticText6, 0, border=10, flag=wx.ALIGN_CENTER_VERTICAL|wx.TOP|wx.LEFT)
       
  3001         parent.AddWindow(self.CompanyName, 0, border=10, flag=wx.GROW|wx.TOP|wx.RIGHT)
       
  3002         parent.AddWindow(self.staticText7, 0, border=10, flag=wx.ALIGN_CENTER_VERTICAL|wx.LEFT)
       
  3003         parent.AddWindow(self.CompanyURL, 0, border=10, flag=wx.GROW|wx.RIGHT)
       
  3004         parent.AddWindow(self.staticText8, 0, border=10, flag=wx.ALIGN_CENTER_VERTICAL|wx.LEFT)
       
  3005         parent.AddWindow(self.AuthorName, 0, border=10, flag=wx.GROW|wx.RIGHT)
       
  3006         parent.AddWindow(self.staticText9, 0, border=10, flag=wx.ALIGN_CENTER_VERTICAL|wx.BOTTOM|wx.LEFT)
       
  3007         parent.AddWindow(self.Organization, 0, border=10, flag=wx.GROW|wx.BOTTOM|wx.RIGHT)
       
  3008     
       
  3009     def _init_coll_AuthorPanelSizer_Growables(self, parent):
       
  3010         parent.AddGrowableCol(1)
       
  3011     
       
  3012     def _init_coll_GraphicsPanelSizer_Items(self, parent):
       
  3013         parent.AddWindow(self.staticText12, 0, border=10, flag=wx.ALIGN_CENTER_VERTICAL|wx.TOP|wx.LEFT|wx.RIGHT)
       
  3014         parent.AddSizer(self.GraphicsPageSizeSizer, 0, border=10, flag=wx.GROW|wx.LEFT|wx.RIGHT)
       
  3015         parent.AddWindow(self.staticText15, 0, border=10, flag=wx.ALIGN_CENTER_VERTICAL|wx.LEFT|wx.RIGHT)
       
  3016         parent.AddWindow(self.ScalingNotebook, 0, border=10, flag=wx.GROW|wx.BOTTOM|wx.LEFT|wx.RIGHT)
       
  3017         
       
  3018     def _init_coll_GraphicsPanelSizer_Growables(self, parent):
       
  3019         parent.AddGrowableCol(0)
       
  3020         parent.AddGrowableRow(3)
       
  3021     
       
  3022     def _init_coll_GraphicsPageSizeSizer_Items(self, parent):
       
  3023         parent.AddWindow(self.staticText13, 0, border=12, flag=wx.ALIGN_CENTER_VERTICAL|wx.LEFT)
       
  3024         parent.AddWindow(self.PageWidth, 0, border=0, flag=wx.GROW)
       
  3025         parent.AddWindow(self.staticText14, 0, border=12, flag=wx.ALIGN_CENTER_VERTICAL|wx.LEFT)
       
  3026         parent.AddWindow(self.PageHeight, 0, border=0, flag=wx.GROW)
       
  3027     
       
  3028     def _init_coll_GraphicsPageSizeSizer_Growables(self, parent):
       
  3029         parent.AddGrowableCol(1)
       
  3030     
       
  3031     def _init_coll_MiscellaneousPanelSizer_Items(self, parent):
       
  3032         parent.AddWindow(self.staticText10, 0, border=10, flag=wx.ALIGN_CENTER_VERTICAL|wx.TOP|wx.LEFT)
       
  3033         parent.AddWindow(self.Language, 0, border=10, flag=wx.GROW|wx.TOP|wx.RIGHT)
       
  3034         parent.AddWindow(self.staticText11, 0, border=10, flag=wx.BOTTOM|wx.LEFT)
       
  3035         parent.AddWindow(self.ContentDescription, 0, border=10, flag=wx.GROW|wx.BOTTOM|wx.RIGHT)
       
  3036         
       
  3037     def _init_coll_MiscellaneousPanelSizer_Growables(self, parent):
       
  3038         parent.AddGrowableCol(1)
       
  3039         parent.AddGrowableRow(1)
       
  3040         
       
  3041     def _init_sizers(self):
       
  3042         self.flexGridSizer1 = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10)
       
  3043         self.ProjectPanelSizer = wx.FlexGridSizer(cols=2, hgap=5, rows=5, vgap=15)
       
  3044         self.AuthorPanelSizer = wx.FlexGridSizer(cols=2, hgap=5, rows=4, vgap=15)
       
  3045         self.GraphicsPanelSizer = wx.FlexGridSizer(cols=1, hgap=5, rows=4, vgap=5)
       
  3046         self.GraphicsPageSizeSizer = wx.FlexGridSizer(cols=2, hgap=5, rows=2, vgap=5)
       
  3047         self.MiscellaneousPanelSizer = wx.FlexGridSizer(cols=2, hgap=5, rows=2, vgap=15)
       
  3048 
       
  3049         self._init_coll_flexGridSizer1_Items(self.flexGridSizer1)
       
  3050         self._init_coll_flexGridSizer1_Growables(self.flexGridSizer1)
       
  3051         self._init_coll_ProjectPanelSizer_Items(self.ProjectPanelSizer)
       
  3052         self._init_coll_ProjectPanelSizer_Growables(self.ProjectPanelSizer)
       
  3053         self._init_coll_AuthorPanelSizer_Items(self.AuthorPanelSizer)
       
  3054         self._init_coll_AuthorPanelSizer_Growables(self.AuthorPanelSizer)
       
  3055         self._init_coll_GraphicsPanelSizer_Items(self.GraphicsPanelSizer)
       
  3056         self._init_coll_GraphicsPanelSizer_Growables(self.GraphicsPanelSizer)
       
  3057         self._init_coll_GraphicsPageSizeSizer_Items(self.GraphicsPageSizeSizer)
       
  3058         self._init_coll_GraphicsPageSizeSizer_Growables(self.GraphicsPageSizeSizer)
       
  3059         self._init_coll_MiscellaneousPanelSizer_Items(self.MiscellaneousPanelSizer)
       
  3060         self._init_coll_MiscellaneousPanelSizer_Growables(self.MiscellaneousPanelSizer)
       
  3061 
       
  3062         self.SetSizer(self.flexGridSizer1)
       
  3063         self.ProjectPanel.SetSizer(self.ProjectPanelSizer)
       
  3064         self.AuthorPanel.SetSizer(self.AuthorPanelSizer)
       
  3065         self.GraphicsPanel.SetSizer(self.GraphicsPanelSizer)
       
  3066         self.MiscellaneousPanel.SetSizer(self.MiscellaneousPanelSizer)
       
  3067 
       
  3068     def _init_ctrls(self, prnt):
       
  3069         wx.Dialog.__init__(self, id=ID_PROJECTDIALOG,
       
  3070               name='ProjectDialog', parent=prnt,
       
  3071               size=wx.Size(500, 350), style=wx.DEFAULT_DIALOG_STYLE,
       
  3072               title=_('Project properties'))
       
  3073         self.SetClientSize(wx.Size(500, 350))
       
  3074 
       
  3075         self.MainNotebook = wx.Notebook(id=ID_PROJECTDIALOGMAINNOTEBOOK,
       
  3076                   name='MainNotebook', parent=self, pos=wx.Point(0,
       
  3077                   0), size=wx.Size(0, 0), style=0)
       
  3078 
       
  3079         # Project Panel elements
       
  3080 
       
  3081         self.ProjectPanel = wx.Panel(id=ID_PROJECTDIALOGPROJECTPANEL,
       
  3082               name='ProjectPanel', parent=self.MainNotebook, pos=wx.Point(0, 0),
       
  3083               size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL)
       
  3084 
       
  3085         self.staticText1 = wx.StaticText(id=ID_PROJECTDIALOGSTATICTEXT1,
       
  3086               label=_('Project Name (required):'), name='staticText1', parent=self.ProjectPanel,
       
  3087               pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
       
  3088 
       
  3089         self.ProjectName = wx.TextCtrl(id=ID_PROJECTDIALOGPROJECTNAME,
       
  3090               name='ProjectName', parent=self.ProjectPanel, pos=wx.Point(0, 0), 
       
  3091               size=wx.Size(0, 24), style=0)
       
  3092 
       
  3093         self.staticText2 = wx.StaticText(id=ID_PROJECTDIALOGSTATICTEXT2,
       
  3094               label=_('Project Version (optional):'), name='staticText2', parent=self.ProjectPanel,
       
  3095               pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
       
  3096 
       
  3097         self.ProjectVersion = wx.TextCtrl(id=ID_PROJECTDIALOGPROJECTVERSION,
       
  3098               name='ProjectVersion', parent=self.ProjectPanel, pos=wx.Point(0, 0), 
       
  3099               size=wx.Size(0, 24), style=0)
       
  3100 
       
  3101         self.staticText3 = wx.StaticText(id=ID_PROJECTDIALOGSTATICTEXT3,
       
  3102               label=_('Product Name (required):'), name='staticText3', parent=self.ProjectPanel,
       
  3103               pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
       
  3104 
       
  3105         self.ProductName = wx.TextCtrl(id=ID_PROJECTDIALOGPRODUCTNAME,
       
  3106               name='ProductName', parent=self.ProjectPanel, pos=wx.Point(0, 0),
       
  3107               size=wx.Size(0, 24), style=0)
       
  3108 
       
  3109         self.staticText4 = wx.StaticText(id=ID_PROJECTDIALOGSTATICTEXT4,
       
  3110               label=_('Product Version (required):'), name='staticText4', parent=self.ProjectPanel,
       
  3111               pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
       
  3112 
       
  3113         self.ProductVersion = wx.TextCtrl(id=ID_PROJECTDIALOGPRODUCTVERSION,
       
  3114               name='ProductVersion', parent=self.ProjectPanel, pos=wx.Point(0, 0),
       
  3115               size=wx.Size(0, 24), style=0)
       
  3116 
       
  3117         self.staticText5 = wx.StaticText(id=ID_PROJECTDIALOGSTATICTEXT5,
       
  3118               label=_('Product Release (optional):'), name='staticText5', parent=self.ProjectPanel,
       
  3119               pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
       
  3120 
       
  3121         self.ProductRelease = wx.TextCtrl(id=ID_PROJECTDIALOGPRODUCTRELEASE,
       
  3122               name='ProductRelease', parent=self.ProjectPanel, pos=wx.Point(0, 0),
       
  3123               size=wx.Size(0, 24), style=0)
       
  3124 
       
  3125         self.MainNotebook.AddPage(self.ProjectPanel, _("Project"))
       
  3126         
       
  3127         # Author Panel elements
       
  3128 
       
  3129         self.AuthorPanel = wx.Panel(id=ID_PROJECTDIALOGAUTHORPANEL,
       
  3130               name='AuthorPanel', parent=self.MainNotebook, pos=wx.Point(0, 0),
       
  3131               size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL)
       
  3132 
       
  3133         self.staticText6 = wx.StaticText(id=ID_PROJECTDIALOGSTATICTEXT6,
       
  3134               label=_('Company Name (required):'), name='staticText6', parent=self.AuthorPanel,
       
  3135               pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
       
  3136 
       
  3137         self.CompanyName = wx.TextCtrl(id=ID_PROJECTDIALOGCOMPANYNAME,
       
  3138               name='CompanyName', parent=self.AuthorPanel, pos=wx.Point(0, 0),
       
  3139               size=wx.Size(0, 24), style=0)
       
  3140 
       
  3141         self.staticText7 = wx.StaticText(id=ID_PROJECTDIALOGSTATICTEXT7,
       
  3142               label=_('Company URL (optional):'), name='staticText7', parent=self.AuthorPanel,
       
  3143               pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
       
  3144 
       
  3145         self.CompanyURL = wx.TextCtrl(id=ID_PROJECTDIALOGCOMPANYURL,
       
  3146               name='CompanyURL', parent=self.AuthorPanel, pos=wx.Point(0, 0),
       
  3147               size=wx.Size(0, 24), style=0)
       
  3148 
       
  3149         self.staticText8 = wx.StaticText(id=ID_PROJECTDIALOGSTATICTEXT8,
       
  3150               label=_('Author Name (optional):'), name='staticText8', parent=self.AuthorPanel,
       
  3151               pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
       
  3152 
       
  3153         self.AuthorName = wx.TextCtrl(id=ID_PROJECTDIALOGAUTHORNAME,
       
  3154               name='AuthorName', parent=self.AuthorPanel, pos=wx.Point(0, 0),
       
  3155               size=wx.Size(0, 24), style=0)
       
  3156 
       
  3157         self.staticText9 = wx.StaticText(id=ID_PROJECTDIALOGSTATICTEXT9,
       
  3158               label=_('Organization (optional):'), name='staticText9', parent=self.AuthorPanel,
       
  3159               pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
       
  3160 
       
  3161         self.Organization = wx.TextCtrl(id=ID_PROJECTDIALOGORGANIZATION,
       
  3162               name='Organization', parent=self.AuthorPanel, pos=wx.Point(0, 0),
       
  3163               size=wx.Size(0, 24), style=0)
       
  3164 
       
  3165         self.MainNotebook.AddPage(self.AuthorPanel, _("Author"))
       
  3166 
       
  3167         # Graphics Panel elements
       
  3168 
       
  3169         self.GraphicsPanel = wx.Panel(id=ID_PROJECTDIALOGGRAPHICSPANEL,
       
  3170               name='GraphicsPanel', parent=self.MainNotebook, pos=wx.Point(0, 0),
       
  3171               size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL)
       
  3172 
       
  3173         self.staticText12 = wx.StaticText(id=ID_PROJECTDIALOGSTATICTEXT12,
       
  3174               label=_('Page Size (optional):'), name='staticText12', parent=self.GraphicsPanel,
       
  3175               pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
       
  3176 
       
  3177         self.staticText13 = wx.StaticText(id=ID_PROJECTDIALOGSTATICTEXT13,
       
  3178               label=_('Width:'), name='staticText13', parent=self.GraphicsPanel,
       
  3179               pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
       
  3180         
       
  3181         self.PageWidth = wx.SpinCtrl(id=ID_PROJECTDIALOGPAGEWIDTH,
       
  3182               name='PageWidth', parent=self.GraphicsPanel, pos=wx.Point(0, 0),
       
  3183               size=wx.Size(0, 24), style=0, min=0, max=2**16)
       
  3184 
       
  3185         self.staticText14 = wx.StaticText(id=ID_PROJECTDIALOGSTATICTEXT14,
       
  3186               label=_('Height:'), name='staticText14', parent=self.GraphicsPanel,
       
  3187               pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
       
  3188         
       
  3189         self.PageHeight = wx.SpinCtrl(id=ID_PROJECTDIALOGPAGEHEIGHT,
       
  3190               name='PageHeight', parent=self.GraphicsPanel, pos=wx.Point(0, 0),
       
  3191               size=wx.Size(0, 24), style=0, min=0, max=2**16)
       
  3192         
       
  3193         self.staticText15 = wx.StaticText(id=ID_PROJECTDIALOGSTATICTEXT15,
       
  3194               label=_('Grid Resolution:'), name='staticText15', parent=self.GraphicsPanel,
       
  3195               pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
       
  3196         
       
  3197         self.ScalingNotebook = wx.Notebook(id=ID_PROJECTDIALOGSCALINGNOTEBOOK,
       
  3198               name='ScalingNotebook', parent=self.GraphicsPanel, pos=wx.Point(0,
       
  3199               0), size=wx.Size(0, 0), style=0)
       
  3200         
       
  3201         self.Scalings = {}
       
  3202         for language, translation in [("FBD",_("FBD")), ("LD",_("LD")), ("SFC",_("SFC"))]:
       
  3203             window = ScalingPanel(self.ScalingNotebook)
       
  3204             self.Scalings[language] = window
       
  3205             self.ScalingNotebook.AddPage(window, translation)
       
  3206         
       
  3207         self.MainNotebook.AddPage(self.GraphicsPanel, _("Graphics"))
       
  3208 
       
  3209         # Miscellaneous Panel elements
       
  3210 
       
  3211         self.MiscellaneousPanel = wx.Panel(id=ID_PROJECTDIALOGMISCELLANEOUSPANEL,
       
  3212               name='MiscellaneousPanel', parent=self.MainNotebook, pos=wx.Point(0, 0),
       
  3213               size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL)
       
  3214 
       
  3215         self.staticText10 = wx.StaticText(id=ID_PROJECTDIALOGSTATICTEXT10,
       
  3216               label=_('Language (optional):'), name='staticText10', parent=self.MiscellaneousPanel,
       
  3217               pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
       
  3218 
       
  3219         self.Language = wx.ComboBox(id=ID_PROJECTDIALOGLANGUAGE,
       
  3220               name='Language', parent=self.MiscellaneousPanel, pos=wx.Point(0, 0),
       
  3221               size=wx.Size(0, 28), style=wx.CB_READONLY)
       
  3222 
       
  3223         self.staticText11 = wx.StaticText(id=ID_PROJECTDIALOGSTATICTEXT11,
       
  3224               label=_('Content Description (optional):'), name='staticText11', parent=self.MiscellaneousPanel,
       
  3225               pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
       
  3226 
       
  3227         self.ContentDescription = wx.TextCtrl(id=ID_PROJECTDIALOGCONTENTDESCRIPTION,
       
  3228               name='ContentDescription', parent=self.MiscellaneousPanel, pos=wx.Point(0, 0),
       
  3229               size=wx.Size(0, 24), style=wx.TE_MULTILINE)
       
  3230 
       
  3231         self.MainNotebook.AddPage(self.MiscellaneousPanel, _("Miscellaneous"))
       
  3232 
       
  3233         self.ButtonSizer = self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.CENTRE)
       
  3234         self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.ButtonSizer.GetAffirmativeButton().GetId())
       
  3235         
       
  3236         self._init_sizers()
       
  3237 
       
  3238     def __init__(self, parent, enable_required=True):
       
  3239         self._init_ctrls(parent)
       
  3240         
       
  3241         self.ProjectName.Enable(enable_required)
       
  3242         self.ProductName.Enable(enable_required)
       
  3243         self.ProductVersion.Enable(enable_required)
       
  3244         self.CompanyName.Enable(enable_required)
       
  3245             
       
  3246         languages = ["", "en-US", "fr-FR", "zh-CN"]
       
  3247         
       
  3248         for language in languages:
       
  3249             self.Language.Append(language)
       
  3250         
       
  3251     def OnOK(self, event):
       
  3252         error = []
       
  3253         if self.ProjectName.GetValue() == "":
       
  3254             error.append("Project Name")
       
  3255         if self.CompanyName.GetValue() == "":
       
  3256             error.append("Company Name")
       
  3257         if self.ProductName.GetValue() == "":
       
  3258             error.append("Product Name")
       
  3259         if self.ProductVersion.GetValue() == "":
       
  3260             error.append("Product Version")
       
  3261         if len(error) > 0:
       
  3262             text = ""
       
  3263             for i, item in enumerate(error):
       
  3264                 if i == 0:
       
  3265                     text += item
       
  3266                 elif i == len(error) - 1:
       
  3267                     text += " and %s"%item
       
  3268                 else:
       
  3269                     text += ", %s"%item
       
  3270             message = wx.MessageDialog(self, _("Form isn't complete. %s must be filled!")%text, _("Error"), wx.OK|wx.ICON_ERROR)
       
  3271             message.ShowModal()
       
  3272             message.Destroy()
       
  3273         else:
       
  3274             self.EndModal(wx.ID_OK)
       
  3275 
       
  3276     def SetValues(self, values):
       
  3277         for item, value in values.items():
       
  3278             if item == "projectName":
       
  3279                 self.ProjectName.SetValue(value)
       
  3280             elif item == "projectVersion":
       
  3281                 self.ProjectVersion.SetValue(value)
       
  3282             elif item == "productName":
       
  3283                 self.ProductName.SetValue(value)
       
  3284             elif item == "productVersion":
       
  3285                 self.ProductVersion.SetValue(value)
       
  3286             elif item == "productRelease":
       
  3287                 self.ProductRelease.SetValue(value)
       
  3288             elif item == "companyName":
       
  3289                 self.CompanyName.SetValue(value)
       
  3290             elif item == "companyURL":
       
  3291                 self.CompanyURL.SetValue(value)
       
  3292             elif item == "authorName":
       
  3293                 self.AuthorName.SetValue(value)
       
  3294             elif item == "organization":
       
  3295                 self.Organization.SetValue(value)
       
  3296             elif item == "language":
       
  3297                 self.Language.SetStringSelection(value)
       
  3298             elif item == "contentDescription":
       
  3299                 self.ContentDescription.SetValue(value)
       
  3300             elif item == "pageSize":
       
  3301                 self.PageWidth.SetValue(value[0])
       
  3302                 self.PageHeight.SetValue(value[1])
       
  3303             elif item == "scaling":
       
  3304                 for language, (x, y) in value.items():
       
  3305                     if language in self.Scalings:
       
  3306                         self.Scalings[language].SetScaling(x, y)
       
  3307     
       
  3308     def GetValues(self):
       
  3309         values = {}
       
  3310         values["projectName"] = self.ProjectName.GetValue()
       
  3311         if self.ProjectVersion.GetValue() != "":
       
  3312             values["projectVersion"] = self.ProjectVersion.GetValue()
       
  3313         values["productName"] = self.ProductName.GetValue()
       
  3314         values["productVersion"] = self.ProductVersion.GetValue()
       
  3315         if self.ProductRelease.GetValue() != "":
       
  3316             values["productRelease"] = self.ProductRelease.GetValue()
       
  3317         values["companyName"] = self.CompanyName.GetValue()
       
  3318         if self.CompanyURL.GetValue() != "":
       
  3319             values["companyURL"] = self.CompanyURL.GetValue()
       
  3320         if self.AuthorName.GetValue() != "":
       
  3321             values["authorName"] = self.AuthorName.GetValue()
       
  3322         if self.Organization.GetValue() != "":
       
  3323             values["organization"] = self.Organization.GetValue()
       
  3324         if self.Language.GetStringSelection() != "":
       
  3325             values["language"] = self.Language.GetStringSelection()
       
  3326         if self.ProductRelease.GetValue() != "":
       
  3327             values["contentDescription"] = self.ContentDescription.GetValue()
       
  3328         values["pageSize"] = (self.PageWidth.GetValue(), self.PageHeight.GetValue())
       
  3329         values["scaling"] = {}
       
  3330         for language in ["FBD", "LD", "SFC"]:
       
  3331             values["scaling"][language] = self.Scalings[language].GetScaling()
       
  3332         return values
       
  3333 
       
  3334 #-------------------------------------------------------------------------------
       
  3335 #                          Edit Step Name Dialog
  2890 #                          Edit Step Name Dialog
  3336 #-------------------------------------------------------------------------------
  2891 #-------------------------------------------------------------------------------
  3337 
  2892 
  3338 class DataTypeDialog(wx.TextEntryDialog):
  2893 class DataTypeDialog(wx.TextEntryDialog):
  3339 
  2894