29 # Helpers |
29 # Helpers |
30 #------------------------------------------------------------------------------- |
30 #------------------------------------------------------------------------------- |
31 |
31 |
32 REQUIRED_PARAMS = ["projectName", "productName", "productVersion", "companyName"] |
32 REQUIRED_PARAMS = ["projectName", "productName", "productVersion", "companyName"] |
33 |
33 |
34 [TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU, PROJECTTREE, |
34 [TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU, PROJECTTREE, |
35 POUINSTANCEVARIABLESPANEL, LIBRARYTREE, SCALING, PAGETITLES |
35 POUINSTANCEVARIABLESPANEL, LIBRARYTREE, SCALING, PAGETITLES |
36 ] = range(10) |
36 ] = range(10) |
37 |
37 |
38 #------------------------------------------------------------------------------- |
38 #------------------------------------------------------------------------------- |
39 # Project Properties Panel |
39 # Project Properties Panel |
40 #------------------------------------------------------------------------------- |
40 #------------------------------------------------------------------------------- |
41 |
41 |
42 class ProjectPropertiesPanel(wx.Notebook): |
42 class ProjectPropertiesPanel(wx.Notebook): |
43 |
43 |
44 def AddSizerParams(self, parent, sizer, params): |
44 def AddSizerParams(self, parent, sizer, params): |
45 for idx, (name, label) in enumerate(params): |
45 for idx, (name, label) in enumerate(params): |
46 border = 0 |
46 border = 0 |
47 if idx == 0: |
47 if idx == 0: |
48 border |= wx.TOP |
48 border |= wx.TOP |
49 elif idx == len(params) - 1: |
49 elif idx == len(params) - 1: |
50 border |= wx.BOTTOM |
50 border |= wx.BOTTOM |
51 |
51 |
52 st = wx.StaticText(parent, label=label) |
52 st = wx.StaticText(parent, label=label) |
53 sizer.AddWindow(st, border=10, |
53 sizer.AddWindow(st, border=10, |
54 flag=wx.ALIGN_CENTER_VERTICAL|border|wx.LEFT) |
54 flag=wx.ALIGN_CENTER_VERTICAL|border|wx.LEFT) |
55 |
55 |
56 tc = wx.TextCtrl(parent, style=wx.TE_PROCESS_ENTER) |
56 tc = wx.TextCtrl(parent, style=wx.TE_PROCESS_ENTER) |
57 setattr(self, name, tc) |
57 setattr(self, name, tc) |
58 callback = self.GetTextCtrlChangedFunction(tc, name) |
58 callback = self.GetTextCtrlChangedFunction(tc, name) |
59 self.Bind(wx.EVT_TEXT_ENTER, callback, tc) |
59 self.Bind(wx.EVT_TEXT_ENTER, callback, tc) |
60 tc.Bind(wx.EVT_KILL_FOCUS, callback) |
60 tc.Bind(wx.EVT_KILL_FOCUS, callback) |
61 sizer.AddWindow(tc, border=10, |
61 sizer.AddWindow(tc, border=10, |
62 flag=wx.GROW|border|wx.RIGHT) |
62 flag=wx.GROW|border|wx.RIGHT) |
63 |
63 |
64 def __init__(self, parent, controller=None, window=None, enable_required=True): |
64 def __init__(self, parent, controller=None, window=None, enable_required=True): |
65 wx.Notebook.__init__(self, parent) |
65 wx.Notebook.__init__(self, parent) |
66 |
66 |
67 self.Controller = controller |
67 self.Controller = controller |
68 self.ParentWindow = window |
68 self.ParentWindow = window |
69 self.Values = None |
69 self.Values = None |
70 |
70 |
71 # Project Panel elements |
71 # Project Panel elements |
72 |
72 |
73 self.ProjectPanel = wx.Panel(self, style=wx.TAB_TRAVERSAL) |
73 self.ProjectPanel = wx.Panel(self, style=wx.TAB_TRAVERSAL) |
74 projectpanel_sizer = wx.FlexGridSizer(cols=2, hgap=5, rows=5, vgap=15) |
74 projectpanel_sizer = wx.FlexGridSizer(cols=2, hgap=5, rows=5, vgap=15) |
75 projectpanel_sizer.AddGrowableCol(1) |
75 projectpanel_sizer.AddGrowableCol(1) |
76 self.ProjectPanel.SetSizer(projectpanel_sizer) |
76 self.ProjectPanel.SetSizer(projectpanel_sizer) |
77 |
77 |
78 self.AddSizerParams(self.ProjectPanel, projectpanel_sizer, |
78 self.AddSizerParams(self.ProjectPanel, projectpanel_sizer, |
79 [("projectName", _('Project Name (required):')), |
79 [("projectName", _('Project Name (required):')), |
80 ("projectVersion", _('Project Version (optional):')), |
80 ("projectVersion", _('Project Version (optional):')), |
81 ("productName", _('Product Name (required):')), |
81 ("productName", _('Product Name (required):')), |
82 ("productVersion", _('Product Version (required):')), |
82 ("productVersion", _('Product Version (required):')), |
83 ("productRelease", _('Product Release (optional):'))]) |
83 ("productRelease", _('Product Release (optional):'))]) |
84 |
84 |
85 self.AddPage(self.ProjectPanel, _("Project")) |
85 self.AddPage(self.ProjectPanel, _("Project")) |
86 |
86 |
87 # Author Panel elements |
87 # Author Panel elements |
88 |
88 |
89 self.AuthorPanel = wx.Panel(self, style=wx.TAB_TRAVERSAL) |
89 self.AuthorPanel = wx.Panel(self, style=wx.TAB_TRAVERSAL) |
90 authorpanel_sizer = wx.FlexGridSizer(cols=2, hgap=5, rows=4, vgap=15) |
90 authorpanel_sizer = wx.FlexGridSizer(cols=2, hgap=5, rows=4, vgap=15) |
91 authorpanel_sizer.AddGrowableCol(1) |
91 authorpanel_sizer.AddGrowableCol(1) |
92 self.AuthorPanel.SetSizer(authorpanel_sizer) |
92 self.AuthorPanel.SetSizer(authorpanel_sizer) |
93 |
93 |
94 self.AddSizerParams(self.AuthorPanel, authorpanel_sizer, |
94 self.AddSizerParams(self.AuthorPanel, authorpanel_sizer, |
95 [("companyName", _('Company Name (required):')), |
95 [("companyName", _('Company Name (required):')), |
96 ("companyURL", _('Company URL (optional):')), |
96 ("companyURL", _('Company URL (optional):')), |
97 ("authorName", _('Author Name (optional):')), |
97 ("authorName", _('Author Name (optional):')), |
98 ("organization", _('Organization (optional):'))]) |
98 ("organization", _('Organization (optional):'))]) |
99 |
99 |
100 self.AddPage(self.AuthorPanel, _("Author")) |
100 self.AddPage(self.AuthorPanel, _("Author")) |
101 |
101 |
102 # Graphics Panel elements |
102 # Graphics Panel elements |
103 |
103 |
104 self.GraphicsPanel = wx.Panel(self, style=wx.TAB_TRAVERSAL) |
104 self.GraphicsPanel = wx.Panel(self, style=wx.TAB_TRAVERSAL) |
105 graphicpanel_sizer = wx.FlexGridSizer(cols=1, hgap=5, rows=4, vgap=5) |
105 graphicpanel_sizer = wx.FlexGridSizer(cols=1, hgap=5, rows=4, vgap=5) |
106 graphicpanel_sizer.AddGrowableCol(0) |
106 graphicpanel_sizer.AddGrowableCol(0) |
107 graphicpanel_sizer.AddGrowableRow(3) |
107 graphicpanel_sizer.AddGrowableRow(3) |
108 self.GraphicsPanel.SetSizer(graphicpanel_sizer) |
108 self.GraphicsPanel.SetSizer(graphicpanel_sizer) |
109 |
109 |
110 pageSize_st = wx.StaticText(self.GraphicsPanel, |
110 pageSize_st = wx.StaticText(self.GraphicsPanel, |
111 label=_('Page Size (optional):')) |
111 label=_('Page Size (optional):')) |
112 graphicpanel_sizer.AddWindow(pageSize_st, border=10, |
112 graphicpanel_sizer.AddWindow(pageSize_st, border=10, |
113 flag=wx.ALIGN_CENTER_VERTICAL|wx.TOP|wx.LEFT|wx.RIGHT) |
113 flag=wx.ALIGN_CENTER_VERTICAL|wx.TOP|wx.LEFT|wx.RIGHT) |
114 |
114 |
115 pageSize_sizer = wx.FlexGridSizer(cols=2, hgap=5, rows=2, vgap=5) |
115 pageSize_sizer = wx.FlexGridSizer(cols=2, hgap=5, rows=2, vgap=5) |
116 pageSize_sizer.AddGrowableCol(1) |
116 pageSize_sizer.AddGrowableCol(1) |
117 graphicpanel_sizer.AddSizer(pageSize_sizer, border=10, |
117 graphicpanel_sizer.AddSizer(pageSize_sizer, border=10, |
118 flag=wx.GROW|wx.LEFT|wx.RIGHT) |
118 flag=wx.GROW|wx.LEFT|wx.RIGHT) |
119 |
119 |
120 for name, label in [('PageWidth', _('Width:')), |
120 for name, label in [('PageWidth', _('Width:')), |
121 ('PageHeight', _('Height:'))]: |
121 ('PageHeight', _('Height:'))]: |
122 st = wx.StaticText(self.GraphicsPanel, label=label) |
122 st = wx.StaticText(self.GraphicsPanel, label=label) |
123 pageSize_sizer.AddWindow(st, border=12, |
123 pageSize_sizer.AddWindow(st, border=12, |
124 flag=wx.ALIGN_CENTER_VERTICAL|wx.LEFT) |
124 flag=wx.ALIGN_CENTER_VERTICAL|wx.LEFT) |
125 |
125 |
126 sp = wx.SpinCtrl(self.GraphicsPanel, |
126 sp = wx.SpinCtrl(self.GraphicsPanel, |
127 min=0, max=2**16, style=wx.TE_PROCESS_ENTER) |
127 min=0, max=2**16, style=wx.TE_PROCESS_ENTER) |
128 setattr(self, name, sp) |
128 setattr(self, name, sp) |
129 callback = self.GetPageSizeChangedFunction(sp, name) |
129 callback = self.GetPageSizeChangedFunction(sp, name) |
130 self.Bind(wx.EVT_TEXT_ENTER, callback, sp) |
130 self.Bind(wx.EVT_TEXT_ENTER, callback, sp) |
131 sp.Bind(wx.EVT_KILL_FOCUS, callback) |
131 sp.Bind(wx.EVT_KILL_FOCUS, callback) |
132 pageSize_sizer.AddWindow(sp, flag=wx.GROW) |
132 pageSize_sizer.AddWindow(sp, flag=wx.GROW) |
133 |
133 |
134 scaling_st = wx.StaticText(self.GraphicsPanel, |
134 scaling_st = wx.StaticText(self.GraphicsPanel, |
135 label=_('Grid Resolution:')) |
135 label=_('Grid Resolution:')) |
136 graphicpanel_sizer.AddWindow(scaling_st, border=10, |
136 graphicpanel_sizer.AddWindow(scaling_st, border=10, |
137 flag=wx.GROW|wx.LEFT|wx.RIGHT) |
137 flag=wx.GROW|wx.LEFT|wx.RIGHT) |
138 |
138 |
139 scaling_nb = wx.Notebook(self.GraphicsPanel) |
139 scaling_nb = wx.Notebook(self.GraphicsPanel) |
140 graphicpanel_sizer.AddWindow(scaling_nb, border=10, |
140 graphicpanel_sizer.AddWindow(scaling_nb, border=10, |
141 flag=wx.GROW|wx.BOTTOM|wx.LEFT|wx.RIGHT) |
141 flag=wx.GROW|wx.BOTTOM|wx.LEFT|wx.RIGHT) |
142 |
142 |
143 self.Scalings = {} |
143 self.Scalings = {} |
144 for language, translation in [("FBD",_("FBD")), ("LD",_("LD")), ("SFC",_("SFC"))]: |
144 for language, translation in [("FBD",_("FBD")), ("LD",_("LD")), ("SFC",_("SFC"))]: |
145 scaling_panel = wx.Panel(scaling_nb, style=wx.TAB_TRAVERSAL) |
145 scaling_panel = wx.Panel(scaling_nb, style=wx.TAB_TRAVERSAL) |
146 scalingpanel_sizer = wx.FlexGridSizer(cols=2, hgap=5, rows=2, vgap=5) |
146 scalingpanel_sizer = wx.FlexGridSizer(cols=2, hgap=5, rows=2, vgap=5) |
147 scalingpanel_sizer.AddGrowableCol(1) |
147 scalingpanel_sizer.AddGrowableCol(1) |
148 scaling_panel.SetSizer(scalingpanel_sizer) |
148 scaling_panel.SetSizer(scalingpanel_sizer) |
149 |
149 |
150 scaling_controls = [] |
150 scaling_controls = [] |
151 for idx, (name, label) in enumerate([('XScale', _('Horizontal:')), |
151 for idx, (name, label) in enumerate([('XScale', _('Horizontal:')), |
152 ('YScale', _('Vertical:'))]): |
152 ('YScale', _('Vertical:'))]): |
153 if idx == 0: |
153 if idx == 0: |
154 border = wx.TOP |
154 border = wx.TOP |
155 else: |
155 else: |
156 border = wx.BOTTOM |
156 border = wx.BOTTOM |
157 |
157 |
158 st = wx.StaticText(scaling_panel, label=label) |
158 st = wx.StaticText(scaling_panel, label=label) |
159 scalingpanel_sizer.AddWindow(st, border=10, |
159 scalingpanel_sizer.AddWindow(st, border=10, |
160 flag=wx.ALIGN_CENTER_VERTICAL|border|wx.LEFT) |
160 flag=wx.ALIGN_CENTER_VERTICAL|border|wx.LEFT) |
161 |
161 |
162 sp = wx.SpinCtrl(scaling_panel, |
162 sp = wx.SpinCtrl(scaling_panel, |
163 min=0, max=2**16, style=wx.TE_PROCESS_ENTER) |
163 min=0, max=2**16, style=wx.TE_PROCESS_ENTER) |
164 scaling_controls.append(sp) |
164 scaling_controls.append(sp) |
165 callback = self.GetScalingChangedFunction(sp, language, name) |
165 callback = self.GetScalingChangedFunction(sp, language, name) |
166 self.Bind(wx.EVT_TEXT_ENTER, callback, sp) |
166 self.Bind(wx.EVT_TEXT_ENTER, callback, sp) |
167 sp.Bind(wx.EVT_KILL_FOCUS, callback) |
167 sp.Bind(wx.EVT_KILL_FOCUS, callback) |
168 scalingpanel_sizer.AddWindow(sp, border=10, |
168 scalingpanel_sizer.AddWindow(sp, border=10, |
169 flag=wx.GROW|border|wx.RIGHT) |
169 flag=wx.GROW|border|wx.RIGHT) |
170 |
170 |
171 self.Scalings[language] = scaling_controls |
171 self.Scalings[language] = scaling_controls |
172 scaling_nb.AddPage(scaling_panel, translation) |
172 scaling_nb.AddPage(scaling_panel, translation) |
173 |
173 |
174 self.AddPage(self.GraphicsPanel, _("Graphics")) |
174 self.AddPage(self.GraphicsPanel, _("Graphics")) |
175 |
175 |
176 # Miscellaneous Panel elements |
176 # Miscellaneous Panel elements |
177 |
177 |
178 self.MiscellaneousPanel = wx.Panel(id=-1, parent=self, |
178 self.MiscellaneousPanel = wx.Panel(id=-1, parent=self, |
179 name='MiscellaneousPanel', pos=wx.Point(0, 0), |
179 name='MiscellaneousPanel', pos=wx.Point(0, 0), |
180 size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL) |
180 size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL) |
181 miscellaneouspanel_sizer = wx.FlexGridSizer(cols=2, hgap=5, rows=2, vgap=15) |
181 miscellaneouspanel_sizer = wx.FlexGridSizer(cols=2, hgap=5, rows=2, vgap=15) |
182 miscellaneouspanel_sizer.AddGrowableCol(1) |
182 miscellaneouspanel_sizer.AddGrowableCol(1) |
183 miscellaneouspanel_sizer.AddGrowableRow(1) |
183 miscellaneouspanel_sizer.AddGrowableRow(1) |
184 self.MiscellaneousPanel.SetSizer(miscellaneouspanel_sizer) |
184 self.MiscellaneousPanel.SetSizer(miscellaneouspanel_sizer) |
185 |
185 |
186 language_label = wx.StaticText(self.MiscellaneousPanel, |
186 language_label = wx.StaticText(self.MiscellaneousPanel, |
187 label=_('Language (optional):')) |
187 label=_('Language (optional):')) |
188 miscellaneouspanel_sizer.AddWindow(language_label, border=10, |
188 miscellaneouspanel_sizer.AddWindow(language_label, border=10, |
189 flag=wx.ALIGN_CENTER_VERTICAL|wx.TOP|wx.LEFT) |
189 flag=wx.ALIGN_CENTER_VERTICAL|wx.TOP|wx.LEFT) |
190 |
190 |
191 self.Language = wx.ComboBox(self.MiscellaneousPanel, |
191 self.Language = wx.ComboBox(self.MiscellaneousPanel, |
192 style=wx.CB_READONLY) |
192 style=wx.CB_READONLY) |
193 self.Bind(wx.EVT_COMBOBOX, self.OnLanguageChanged, self.Language) |
193 self.Bind(wx.EVT_COMBOBOX, self.OnLanguageChanged, self.Language) |
194 miscellaneouspanel_sizer.AddWindow(self.Language, border=10, |
194 miscellaneouspanel_sizer.AddWindow(self.Language, border=10, |
195 flag=wx.GROW|wx.TOP|wx.RIGHT) |
195 flag=wx.GROW|wx.TOP|wx.RIGHT) |
196 |
196 |
197 description_label = wx.StaticText(self.MiscellaneousPanel, |
197 description_label = wx.StaticText(self.MiscellaneousPanel, |
198 label=_('Content Description (optional):')) |
198 label=_('Content Description (optional):')) |
199 miscellaneouspanel_sizer.AddWindow(description_label, border=10, |
199 miscellaneouspanel_sizer.AddWindow(description_label, border=10, |
200 flag=wx.BOTTOM|wx.LEFT) |
200 flag=wx.BOTTOM|wx.LEFT) |
201 |
201 |
202 self.ContentDescription = wx.TextCtrl(self.MiscellaneousPanel, |
202 self.ContentDescription = wx.TextCtrl(self.MiscellaneousPanel, |
203 size=wx.Size(240,150), style=wx.TE_MULTILINE|wx.TE_PROCESS_ENTER) |
203 size=wx.Size(240,150), style=wx.TE_MULTILINE|wx.TE_PROCESS_ENTER) |
204 self.Bind(wx.EVT_TEXT_ENTER, self.OnContentDescriptionChanged, |
204 self.Bind(wx.EVT_TEXT_ENTER, self.OnContentDescriptionChanged, |
205 self.ContentDescription) |
205 self.ContentDescription) |
206 self.ContentDescription.Bind(wx.EVT_KILL_FOCUS, |
206 self.ContentDescription.Bind(wx.EVT_KILL_FOCUS, |
207 self.OnContentDescriptionChanged) |
207 self.OnContentDescriptionChanged) |
208 miscellaneouspanel_sizer.AddWindow(self.ContentDescription, border=10, |
208 miscellaneouspanel_sizer.AddWindow(self.ContentDescription, border=10, |
209 flag=wx.GROW|wx.BOTTOM|wx.RIGHT) |
209 flag=wx.GROW|wx.BOTTOM|wx.RIGHT) |
210 |
210 |
211 self.AddPage(self.MiscellaneousPanel, _("Miscellaneous")) |
211 self.AddPage(self.MiscellaneousPanel, _("Miscellaneous")) |
212 |
212 |
213 for param in REQUIRED_PARAMS: |
213 for param in REQUIRED_PARAMS: |
214 getattr(self, param).Enable(enable_required) |
214 getattr(self, param).Enable(enable_required) |
215 |
215 |
216 languages = ["", "en-US", "fr-FR", "zh-CN", "ru-RU"] |
216 languages = ["", "en-US", "fr-FR", "zh-CN", "ru-RU"] |
217 |
217 |
218 for language in languages: |
218 for language in languages: |
219 self.Language.Append(language) |
219 self.Language.Append(language) |
220 |
220 |
221 def RefreshView(self): |
221 def RefreshView(self): |
222 if self.Controller is not None: |
222 if self.Controller is not None: |