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