25 import wx |
25 import wx |
26 |
26 |
27 from graphics import * |
27 from graphics import * |
28 |
28 |
29 #------------------------------------------------------------------------------- |
29 #------------------------------------------------------------------------------- |
30 # Create New Variable Dialog |
30 # Helpers |
31 #------------------------------------------------------------------------------- |
31 #------------------------------------------------------------------------------- |
32 |
|
33 [ID_FBDVARIABLEDIALOG, ID_FBDVARIABLEDIALOGSPACER, |
|
34 ID_FBDVARIABLEDIALOGNAME, ID_FBDVARIABLEDIALOGCLASS, |
|
35 ID_FBDVARIABLEDIALOGPREVIEW, ID_FBDVARIABLEDIALOGEXPRESSION, |
|
36 ID_FBDVARIABLEDIALOGEXECUTIONORDER, ID_FBDVARIABLEDIALOGSTATICTEXT1, |
|
37 ID_FBDVARIABLEDIALOGSTATICTEXT2, ID_FBDVARIABLEDIALOGSTATICTEXT3, |
|
38 ID_FBDVARIABLEDIALOGSTATICTEXT4, ID_FBDVARIABLEDIALOGSTATICTEXT5 |
|
39 ] = [wx.NewId() for _init_ctrls in range(12)] |
|
40 |
32 |
41 VARIABLE_CLASSES_DICT = {INPUT : _("Input"), |
33 VARIABLE_CLASSES_DICT = {INPUT : _("Input"), |
42 INOUT : _("InOut"), |
34 INOUT : _("InOut"), |
43 OUTPUT : _("Output")} |
35 OUTPUT : _("Output")} |
44 VARIABLE_CLASSES_DICT_REVERSE = dict([(value, key) for key, value in VARIABLE_CLASSES_DICT.iteritems()]) |
36 VARIABLE_CLASSES_DICT_REVERSE = dict( |
|
37 [(value, key) for key, value in VARIABLE_CLASSES_DICT.iteritems()]) |
|
38 |
|
39 #------------------------------------------------------------------------------- |
|
40 # Create New Variable Dialog |
|
41 #------------------------------------------------------------------------------- |
45 |
42 |
46 class FBDVariableDialog(wx.Dialog): |
43 class FBDVariableDialog(wx.Dialog): |
47 |
44 |
48 if wx.VERSION < (2, 6, 0): |
45 def __init__(self, parent, controller, transition = ""): |
49 def Bind(self, event, function, id = None): |
46 wx.Dialog.__init__(self, parent, |
50 if id is not None: |
47 size=wx.Size(400, 380), title=_('Variable Properties')) |
51 event(self, id, function) |
48 |
52 else: |
49 main_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=4, vgap=10) |
53 event(self, function) |
50 main_sizer.AddGrowableCol(0) |
54 |
51 main_sizer.AddGrowableRow(2) |
55 def _init_coll_flexGridSizer1_Items(self, parent): |
52 |
56 parent.AddSizer(self.MainSizer, 0, border=20, flag=wx.GROW|wx.TOP|wx.LEFT|wx.RIGHT) |
53 column_sizer = wx.BoxSizer(wx.HORIZONTAL) |
57 parent.AddSizer(self.ButtonSizer, 0, border=20, flag=wx.ALIGN_RIGHT|wx.BOTTOM|wx.LEFT|wx.RIGHT) |
54 main_sizer.AddSizer(column_sizer, border=20, |
58 |
55 flag=wx.GROW|wx.TOP|wx.LEFT|wx.RIGHT) |
59 def _init_coll_flexGridSizer1_Growables(self, parent): |
56 |
60 parent.AddGrowableCol(0) |
57 left_gridsizer = wx.FlexGridSizer(cols=1, hgap=0, rows=6, vgap=5) |
61 parent.AddGrowableRow(0) |
58 left_gridsizer.AddGrowableCol(0) |
62 |
59 column_sizer.AddSizer(left_gridsizer, 1, border=5, |
63 def _init_coll_MainSizer_Items(self, parent): |
60 flag=wx.GROW|wx.RIGHT) |
64 parent.AddSizer(self.TopSizer, 0, border=0, flag=wx.GROW) |
61 |
65 parent.AddWindow(self.staticText5, 0, border=0, flag=wx.GROW) |
62 class_label = wx.StaticText(self, label=_('Class:')) |
66 parent.AddWindow(self.Preview, 0, border=0, flag=wx.GROW) |
63 left_gridsizer.AddWindow(class_label, flag=wx.GROW) |
67 |
64 |
68 def _init_coll_MainSizer_Growables(self, parent): |
65 self.Class = wx.ComboBox(self, style=wx.CB_READONLY) |
69 parent.AddGrowableCol(0) |
66 self.Bind(wx.EVT_COMBOBOX, self.OnClassChanged, self.Class) |
70 parent.AddGrowableRow(2) |
67 left_gridsizer.AddWindow(self.Class, flag=wx.GROW) |
71 |
68 |
72 def _init_coll_TopSizer_Items(self, parent): |
69 expression_label = wx.StaticText(self, label=_('Expression:')) |
73 parent.AddSizer(self.LeftGridSizer, 1, border=5, flag=wx.GROW|wx.RIGHT) |
70 left_gridsizer.AddWindow(expression_label, flag=wx.GROW) |
74 parent.AddSizer(self.RightGridSizer, 1, border=5, flag=wx.GROW|wx.LEFT) |
71 |
75 |
72 self.Expression = wx.TextCtrl(self) |
76 def _init_coll_LeftGridSizer_Items(self, parent): |
73 self.Bind(wx.EVT_TEXT, self.OnExpressionChanged, self.Expression) |
77 parent.AddWindow(self.staticText1, 0, border=0, flag=wx.GROW) |
74 left_gridsizer.AddWindow(self.Expression, flag=wx.GROW) |
78 parent.AddWindow(self.Class, 0, border=0, flag=wx.GROW) |
75 |
79 parent.AddWindow(self.staticText2, 0, border=0, flag=wx.GROW) |
76 execution_order_label = wx.StaticText(self, label=_('Execution Order:')) |
80 parent.AddWindow(self.Expression, 0, border=0, flag=wx.GROW) |
77 left_gridsizer.AddWindow(execution_order_label, flag=wx.GROW) |
81 parent.AddWindow(self.staticText3, 0, border=0, flag=wx.GROW) |
78 |
82 parent.AddWindow(self.ExecutionOrder, 0, border=0, flag=wx.GROW) |
79 self.ExecutionOrder = wx.SpinCtrl(self, min=0, style=wx.SP_ARROW_KEYS) |
83 parent.AddWindow(self.Spacer, 0, border=0, flag=wx.GROW) |
80 self.Bind(wx.EVT_SPINCTRL, self.OnExecutionOrderChanged, self.ExecutionOrder) |
84 |
81 left_gridsizer.AddWindow(self.ExecutionOrder, flag=wx.GROW) |
85 def _init_coll_LeftGridSizer_Growables(self, parent): |
82 |
86 parent.AddGrowableCol(0) |
83 right_gridsizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=5) |
87 parent.AddGrowableRow(2) |
84 right_gridsizer.AddGrowableCol(0) |
88 |
85 right_gridsizer.AddGrowableRow(1) |
89 def _init_coll_RightGridSizer_Items(self, parent): |
86 column_sizer.AddSizer(right_gridsizer, 1, border=5, |
90 parent.AddWindow(self.staticText4, 0, border=0, flag=wx.GROW) |
87 flag=wx.GROW|wx.LEFT) |
91 parent.AddWindow(self.VariableName, 0, border=0, flag=wx.GROW) |
88 |
92 |
89 name_label = wx.StaticText(self, label=_('Name:')) |
93 def _init_coll_RightGridSizer_Growables(self, parent): |
90 right_gridsizer.AddWindow(name_label, flag=wx.GROW) |
94 parent.AddGrowableCol(0) |
91 |
95 parent.AddGrowableRow(1) |
92 self.VariableName = wx.ListBox(self, style=wx.LB_SINGLE|wx.LB_SORT) |
96 |
93 self.Bind(wx.EVT_LISTBOX, self.OnNameChanged, self.VariableName) |
97 def _init_sizers(self): |
94 right_gridsizer.AddWindow(self.VariableName, flag=wx.GROW) |
98 self.flexGridSizer1 = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10) |
95 |
99 self.MainSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=3, vgap=5) |
96 preview_label = wx.StaticText(self, label=_('Preview:')) |
100 self.TopSizer = wx.BoxSizer(wx.HORIZONTAL) |
97 main_sizer.AddWindow(preview_label, border=20, |
101 self.LeftGridSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=7, vgap=5) |
98 flag=wx.GROW|wx.LEFT|wx.RIGHT) |
102 self.RightGridSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=5) |
99 |
103 |
100 self.Preview = wx.Panel(self, |
104 self._init_coll_flexGridSizer1_Items(self.flexGridSizer1) |
101 style=wx.TAB_TRAVERSAL|wx.SIMPLE_BORDER) |
105 self._init_coll_flexGridSizer1_Growables(self.flexGridSizer1) |
|
106 self._init_coll_MainSizer_Items(self.MainSizer) |
|
107 self._init_coll_MainSizer_Growables(self.MainSizer) |
|
108 self._init_coll_TopSizer_Items(self.TopSizer) |
|
109 self._init_coll_LeftGridSizer_Items(self.LeftGridSizer) |
|
110 self._init_coll_LeftGridSizer_Growables(self.LeftGridSizer) |
|
111 self._init_coll_RightGridSizer_Items(self.RightGridSizer) |
|
112 self._init_coll_RightGridSizer_Growables(self.RightGridSizer) |
|
113 |
|
114 self.SetSizer(self.flexGridSizer1) |
|
115 |
|
116 def _init_ctrls(self, prnt, ctrler): |
|
117 wx.Dialog.__init__(self, id=ID_FBDVARIABLEDIALOG, |
|
118 name='FBDVariableDialog', parent=prnt, |
|
119 size=wx.Size(400, 380), style=wx.DEFAULT_DIALOG_STYLE, |
|
120 title=_('Variable Properties')) |
|
121 self.SetClientSize(wx.Size(400, 380)) |
|
122 |
|
123 self.staticText1 = wx.StaticText(id=ID_FBDVARIABLEDIALOGSTATICTEXT1, |
|
124 label=_('Class:'), name='staticText1', parent=self, |
|
125 pos=wx.Point(0, 0), size=wx.Size(0, 17), style=0) |
|
126 |
|
127 self.staticText2 = wx.StaticText(id=ID_FBDVARIABLEDIALOGSTATICTEXT2, |
|
128 label=_('Expression:'), name='staticText2', parent=self, |
|
129 pos=wx.Point(0, 0), size=wx.Size(0, 17), style=0) |
|
130 |
|
131 self.staticText3 = wx.StaticText(id=ID_FBDVARIABLEDIALOGSTATICTEXT3, |
|
132 label=_('Execution Order:'), name='staticText3', parent=self, |
|
133 pos=wx.Point(0, 0), size=wx.Size(0, 17), style=0) |
|
134 |
|
135 self.staticText4 = wx.StaticText(id=ID_FBDVARIABLEDIALOGSTATICTEXT4, |
|
136 label=_('Name:'), name='staticText4', parent=self, |
|
137 pos=wx.Point(0, 0), size=wx.Size(0, 17), style=0) |
|
138 |
|
139 self.staticText5 = wx.StaticText(id=ID_FBDVARIABLEDIALOGSTATICTEXT5, |
|
140 label=_('Preview:'), name='staticText5', parent=self, |
|
141 pos=wx.Point(0, 0), size=wx.Size(0, 17), style=0) |
|
142 |
|
143 self.Class = wx.ComboBox(id=ID_FBDVARIABLEDIALOGCLASS, |
|
144 name='Class', parent=self, pos=wx.Point(0, 0), |
|
145 size=wx.Size(0, 28), style=wx.CB_READONLY) |
|
146 self.Bind(wx.EVT_COMBOBOX, self.OnClassChanged, id=ID_FBDVARIABLEDIALOGCLASS) |
|
147 |
|
148 self.VariableName = wx.ListBox(id=ID_FBDVARIABLEDIALOGNAME, |
|
149 name='Name', parent=self, pos=wx.Point(0, 0), |
|
150 size=wx.Size(0, 90), style=wx.LB_SINGLE|wx.LB_SORT) |
|
151 self.Bind(wx.EVT_LISTBOX, self.OnNameChanged, id=ID_FBDVARIABLEDIALOGNAME) |
|
152 |
|
153 self.Expression = wx.TextCtrl(id=ID_FBDVARIABLEDIALOGEXPRESSION, |
|
154 name='Expression', parent=self, pos=wx.Point(0, 0), |
|
155 size=wx.Size(0, 24), style=0) |
|
156 self.Bind(wx.EVT_TEXT, self.OnExpressionChanged, id=ID_FBDVARIABLEDIALOGEXPRESSION) |
|
157 |
|
158 self.ExecutionOrder = wx.SpinCtrl(id=ID_FBDVARIABLEDIALOGEXECUTIONORDER, |
|
159 name='ExecutionOrder', parent=self, pos=wx.Point(0, 0), |
|
160 size=wx.Size(0, 24), style=wx.SP_ARROW_KEYS, min=0) |
|
161 self.Bind(wx.EVT_SPINCTRL, self.OnExecutionOrderChanged, id=ID_FBDVARIABLEDIALOGEXECUTIONORDER) |
|
162 |
|
163 self.Spacer = wx.Panel(id=ID_FBDVARIABLEDIALOGSPACER, |
|
164 name='Spacer', parent=self, pos=wx.Point(0, 0), |
|
165 size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL) |
|
166 |
|
167 self.Preview = wx.Panel(id=ID_FBDVARIABLEDIALOGPREVIEW, |
|
168 name='Preview', parent=self, pos=wx.Point(0, 0), |
|
169 size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL|wx.SIMPLE_BORDER) |
|
170 self.Preview.SetBackgroundColour(wx.Colour(255,255,255)) |
102 self.Preview.SetBackgroundColour(wx.Colour(255,255,255)) |
171 setattr(self.Preview, "GetDrawingMode", lambda:FREEDRAWING_MODE) |
103 setattr(self.Preview, "GetDrawingMode", lambda:FREEDRAWING_MODE) |
172 setattr(self.Preview, "GetScaling", lambda:None) |
104 setattr(self.Preview, "GetScaling", lambda:None) |
173 setattr(self.Preview, "IsOfType", ctrler.IsOfType) |
105 setattr(self.Preview, "IsOfType", controller.IsOfType) |
174 |
106 self.Preview.Bind(wx.EVT_PAINT, self.OnPaint) |
175 self.ButtonSizer = self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.CENTRE) |
107 main_sizer.AddWindow(self.Preview, border=20, |
176 if wx.VERSION >= (2, 5, 0): |
108 flag=wx.GROW|wx.LEFT|wx.RIGHT) |
177 self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.ButtonSizer.GetAffirmativeButton().GetId()) |
109 |
178 self.Preview.Bind(wx.EVT_PAINT, self.OnPaint) |
110 button_sizer = self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.CENTRE) |
179 else: |
111 self.Bind(wx.EVT_BUTTON, self.OnOK, button_sizer.GetAffirmativeButton()) |
180 self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.ButtonSizer.GetChildren()[0].GetSizer().GetChildren()[0].GetWindow().GetId()) |
112 main_sizer.AddSizer(button_sizer, border=20, |
181 wx.EVT_PAINT(self.Preview, self.OnPaint) |
113 flag=wx.ALIGN_RIGHT|wx.BOTTOM|wx.LEFT|wx.RIGHT) |
182 |
114 |
183 self._init_sizers() |
115 self.SetSizer(main_sizer) |
184 |
116 |
185 def __init__(self, parent, controler, transition = ""): |
|
186 self._init_ctrls(parent, controler) |
|
187 self.Transition = transition |
117 self.Transition = transition |
188 self.Variable = None |
118 self.Variable = None |
189 self.VarList = [] |
119 self.VarList = [] |
190 self.MinVariableSize = None |
120 self.MinVariableSize = None |
191 |
121 |