38 Class that implements a dialog for defining parameters for creating a new |
38 Class that implements a dialog for defining parameters for creating a new |
39 divergence graphic element |
39 divergence graphic element |
40 """ |
40 """ |
41 |
41 |
42 class SFCDivergenceDialog(BlockPreviewDialog): |
42 class SFCDivergenceDialog(BlockPreviewDialog): |
43 |
43 |
44 def __init__(self, parent, controller, tagname, poss_div_types = None): |
44 def __init__(self, parent, controller, tagname, poss_div_types = None): |
45 """ |
45 """ |
46 Constructor |
46 Constructor |
47 @param parent: Parent wx.Window of dialog for modal |
47 @param parent: Parent wx.Window of dialog for modal |
48 @param controller: Reference to project controller |
48 @param controller: Reference to project controller |
49 @param tagname: Tagname of project POU edited |
49 @param tagname: Tagname of project POU edited |
50 @param poss_div_types: Types of divergence that will be available in the dialog window |
50 @param poss_div_types: Types of divergence that will be available in the dialog window |
51 """ |
51 """ |
52 BlockPreviewDialog.__init__(self, parent, controller, tagname, |
52 BlockPreviewDialog.__init__(self, parent, controller, tagname, |
53 title=_('Create a new divergence or convergence')) |
53 title=_('Create a new divergence or convergence')) |
54 |
54 |
55 # Init common sizers |
55 # Init common sizers |
56 self._init_sizers(2, 0, 7, None, 2, 1) |
56 self._init_sizers(2, 0, 7, None, 2, 1) |
57 |
57 |
58 # Create label for divergence type |
58 # Create label for divergence type |
59 type_label = wx.StaticText(self, label=_('Type:')) |
59 type_label = wx.StaticText(self, label=_('Type:')) |
60 self.LeftGridSizer.AddWindow(type_label, flag=wx.GROW) |
60 self.LeftGridSizer.AddWindow(type_label, flag=wx.GROW) |
61 |
61 |
62 # Create radio buttons for selecting divergence type |
62 # Create radio buttons for selecting divergence type |
63 divergence_buttons = [ |
63 divergence_buttons = [ |
64 (SELECTION_DIVERGENCE, _('Selection Divergence')), |
64 (SELECTION_DIVERGENCE, _('Selection Divergence')), |
65 (SELECTION_CONVERGENCE, _('Selection Convergence')), |
65 (SELECTION_CONVERGENCE, _('Selection Convergence')), |
66 (SIMULTANEOUS_DIVERGENCE, _('Simultaneous Divergence')), |
66 (SIMULTANEOUS_DIVERGENCE, _('Simultaneous Divergence')), |
73 poss_div_btns = divergence_buttons |
73 poss_div_btns = divergence_buttons |
74 self.TypeRadioButtons = {} |
74 self.TypeRadioButtons = {} |
75 first = True |
75 first = True |
76 focusbtn = None |
76 focusbtn = None |
77 for type, label in poss_div_btns: |
77 for type, label in poss_div_btns: |
78 radio_button = wx.RadioButton(self, label=label, |
78 radio_button = wx.RadioButton(self, label=label, |
79 style=(wx.RB_GROUP if first else 0)) |
79 style=(wx.RB_GROUP if first else 0)) |
80 radio_button.SetValue(first) |
80 radio_button.SetValue(first) |
81 self.Bind(wx.EVT_RADIOBUTTON, self.OnTypeChanged, radio_button) |
81 self.Bind(wx.EVT_RADIOBUTTON, self.OnTypeChanged, radio_button) |
82 self.LeftGridSizer.AddWindow(radio_button, flag=wx.GROW) |
82 self.LeftGridSizer.AddWindow(radio_button, flag=wx.GROW) |
83 self.TypeRadioButtons[type] = radio_button |
83 self.TypeRadioButtons[type] = radio_button |
84 if first: focusbtn = type |
84 if first: focusbtn = type |
85 first = False |
85 first = False |
86 |
86 |
87 # Create label for number of divergence sequences |
87 # Create label for number of divergence sequences |
88 sequences_label = wx.StaticText(self, |
88 sequences_label = wx.StaticText(self, |
89 label=_('Number of sequences:')) |
89 label=_('Number of sequences:')) |
90 self.LeftGridSizer.AddWindow(sequences_label, flag=wx.GROW) |
90 self.LeftGridSizer.AddWindow(sequences_label, flag=wx.GROW) |
91 |
91 |
92 # Create spin control for defining number of divergence sequences |
92 # Create spin control for defining number of divergence sequences |
93 self.Sequences = wx.SpinCtrl(self, min=2, max=20, initial=2) |
93 self.Sequences = wx.SpinCtrl(self, min=2, max=20, initial=2) |
94 self.Bind(wx.EVT_SPINCTRL, self.OnSequencesChanged, self.Sequences) |
94 self.Bind(wx.EVT_SPINCTRL, self.OnSequencesChanged, self.Sequences) |
95 self.LeftGridSizer.AddWindow(self.Sequences, flag=wx.GROW) |
95 self.LeftGridSizer.AddWindow(self.Sequences, flag=wx.GROW) |
96 |
96 |
97 # Add preview panel and associated label to sizers |
97 # Add preview panel and associated label to sizers |
98 self.RightGridSizer.AddWindow(self.PreviewLabel, flag=wx.GROW) |
98 self.RightGridSizer.AddWindow(self.PreviewLabel, flag=wx.GROW) |
99 self.RightGridSizer.AddWindow(self.Preview, flag=wx.GROW) |
99 self.RightGridSizer.AddWindow(self.Preview, flag=wx.GROW) |
100 |
100 |
101 # Add buttons sizer to sizers |
101 # Add buttons sizer to sizers |
102 self.MainSizer.AddSizer(self.ButtonSizer, border=20, |
102 self.MainSizer.AddSizer(self.ButtonSizer, border=20, |
103 flag=wx.ALIGN_RIGHT|wx.BOTTOM|wx.LEFT|wx.RIGHT) |
103 flag=wx.ALIGN_RIGHT|wx.BOTTOM|wx.LEFT|wx.RIGHT) |
104 |
104 |
105 self.Fit() |
105 self.Fit() |
106 |
106 |
107 # Selection divergence radio button is default control having keyboard |
107 # Selection divergence radio button is default control having keyboard |
108 # focus |
108 # focus |
109 self.TypeRadioButtons[focusbtn].SetFocus() |
109 self.TypeRadioButtons[focusbtn].SetFocus() |
110 |
110 |
111 def GetMinElementSize(self): |
111 def GetMinElementSize(self): |
112 """ |
112 """ |
113 Get minimal graphic element size |
113 Get minimal graphic element size |
114 @return: Tuple containing minimal size (width, height) or None if no |
114 @return: Tuple containing minimal size (width, height) or None if no |
115 element defined |
115 element defined |
116 """ |
116 """ |
117 return self.Element.GetMinSize(True) |
117 return self.Element.GetMinSize(True) |
118 |
118 |
119 def GetDivergenceType(self): |
119 def GetDivergenceType(self): |
120 """ |
120 """ |
121 Return type selected for SFC divergence |
121 Return type selected for SFC divergence |
122 @return: Type selected (None if not found) |
122 @return: Type selected (None if not found) |
123 """ |
123 """ |
149 Called when SFC divergence number of sequences changed |
149 Called when SFC divergence number of sequences changed |
150 @param event: wx.SpinEvent |
150 @param event: wx.SpinEvent |
151 """ |
151 """ |
152 self.RefreshPreview() |
152 self.RefreshPreview() |
153 event.Skip() |
153 event.Skip() |
154 |
154 |
155 def RefreshPreview(self): |
155 def RefreshPreview(self): |
156 """ |
156 """ |
157 Refresh preview panel of graphic element |
157 Refresh preview panel of graphic element |
158 Override BlockPreviewDialog function |
158 Override BlockPreviewDialog function |
159 """ |
159 """ |
160 # Set graphic element displayed, creating a SFC divergence |
160 # Set graphic element displayed, creating a SFC divergence |
161 self.Element = SFC_Divergence(self.Preview, |
161 self.Element = SFC_Divergence(self.Preview, |
162 self.GetDivergenceType(), |
162 self.GetDivergenceType(), |
163 self.Sequences.GetValue()) |
163 self.Sequences.GetValue()) |
164 |
164 |
165 # Call BlockPreviewDialog function |
165 # Call BlockPreviewDialog function |
166 BlockPreviewDialog.RefreshPreview(self) |
166 BlockPreviewDialog.RefreshPreview(self) |
167 |
|