dialogs/SFCDivergenceDialog.py
changeset 1730 64d8f52bc8c8
parent 1696 8043f32de7b8
child 1736 7e61baa047f0
equal deleted inserted replaced
1726:d51af006fa6b 1730:64d8f52bc8c8
    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         """
   125         # is selected
   125         # is selected
   126         for type, control in self.TypeRadioButtons.iteritems():
   126         for type, control in self.TypeRadioButtons.iteritems():
   127             if control.GetValue():
   127             if control.GetValue():
   128                 return type
   128                 return type
   129         return None
   129         return None
   130     
   130 
   131     def GetValues(self):
   131     def GetValues(self):
   132         """
   132         """
   133         Set default SFC divergence parameters
   133         Set default SFC divergence parameters
   134         @param values: Divergence parameters values
   134         @param values: Divergence parameters values
   135         """
   135         """
   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