dialogs/SFCTransitionDialog.py
changeset 714 131ea7f237b9
parent 577 9dbb79722fbc
equal deleted inserted replaced
713:95a0a427f3ef 714:131ea7f237b9
    27 
    27 
    28 #-------------------------------------------------------------------------------
    28 #-------------------------------------------------------------------------------
    29 #                          Edit Transition Content Dialog
    29 #                          Edit Transition Content Dialog
    30 #-------------------------------------------------------------------------------
    30 #-------------------------------------------------------------------------------
    31 
    31 
    32 [ID_SFCTRANSITIONDIALOG, ID_SFCTRANSITIONDIALOGSPACER, 
       
    33  ID_SFCTRANSITIONDIALOGREFERENCE, ID_SFCTRANSITIONDIALOGINLINE, 
       
    34  ID_SFCTRANSITIONDIALOGPRIORITY, ID_SFCTRANSITIONDIALOGPREVIEW, 
       
    35  ID_SFCTRANSITIONDIALOGRADIOBUTTON1, ID_SFCTRANSITIONDIALOGRADIOBUTTON2, 
       
    36  ID_SFCTRANSITIONDIALOGRADIOBUTTON3, ID_SFCTRANSITIONDIALOGSTATICTEXT1, 
       
    37  ID_SFCTRANSITIONDIALOGSTATICTEXT2, ID_SFCTRANSITIONDIALOGSTATICTEXT3, 
       
    38 ] = [wx.NewId() for _init_ctrls in range(12)]
       
    39 
       
    40 class SFCTransitionDialog(wx.Dialog):
    32 class SFCTransitionDialog(wx.Dialog):
    41     
    33     
    42     if wx.VERSION < (2, 6, 0):
    34     def __init__(self, parent, controller, connection):
    43         def Bind(self, event, function, id = None):
    35         self.Connection = connection
    44             if id is not None:
    36         
    45                 event(self, id, function)
    37         wx.Dialog.__init__(self, parent, 
    46             else:
    38               size=wx.Size(350, 300), title=_('Edit transition'))
    47                 event(self, function)
    39         
    48     
    40         main_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10)
    49     def _init_coll_flexGridSizer1_Items(self, parent):
    41         main_sizer.AddGrowableCol(0)
    50         parent.AddSizer(self.MainSizer, 0, border=20, flag=wx.GROW|wx.TOP|wx.LEFT|wx.RIGHT)
    42         main_sizer.AddGrowableRow(0)
    51         parent.AddSizer(self.ButtonSizer, 0, border=20, flag=wx.ALIGN_RIGHT|wx.BOTTOM|wx.LEFT|wx.RIGHT)
    43         
    52         
    44         column_sizer = wx.BoxSizer(wx.HORIZONTAL)
    53     def _init_coll_flexGridSizer1_Growables(self, parent):
    45         main_sizer.AddSizer(column_sizer, border=20, 
    54         parent.AddGrowableCol(0)
    46               flag=wx.GROW|wx.TOP|wx.LEFT|wx.RIGHT)
    55         parent.AddGrowableRow(0)
    47         
    56     
    48         left_gridsizer = wx.FlexGridSizer(cols=1, hgap=0, rows=8, vgap=5)
    57     def _init_coll_MainSizer_Items(self, parent):
    49         left_gridsizer.AddGrowableCol(0)
    58         parent.AddSizer(self.LeftGridSizer, 1, border=5, flag=wx.GROW|wx.RIGHT)
    50         column_sizer.AddSizer(left_gridsizer, 1, border=5, 
    59         parent.AddSizer(self.RightGridSizer, 1, border=5, flag=wx.GROW|wx.LEFT)
    51                               flag=wx.GROW|wx.RIGHT)
    60     
    52         
    61     def _init_coll_LeftGridSizer_Items(self, parent):
    53         type_label = wx.StaticText(self, label=_('Type:'))
    62         parent.AddWindow(self.staticText1, 0, border=0, flag=wx.GROW)
    54         left_gridsizer.AddWindow(type_label, flag=wx.GROW)
    63         parent.AddWindow(self.radioButton1, 0, border=0, flag=wx.GROW)
    55         
    64         parent.AddWindow(self.Reference, 0, border=0, flag=wx.GROW)
    56         self.ReferenceRadioButton = wx.RadioButton(self,
    65         parent.AddWindow(self.radioButton2, 0, border=0, flag=wx.GROW)
    57               label=_('Reference'), style=wx.RB_GROUP)
    66         parent.AddWindow(self.Inline, 0, border=0, flag=wx.GROW)
    58         self.ReferenceRadioButton.SetValue(True)
    67         parent.AddWindow(self.radioButton3, 0, border=0, flag=wx.GROW)
    59         self.Bind(wx.EVT_RADIOBUTTON, self.OnTypeChanged, self.ReferenceRadioButton)
    68         parent.AddWindow(self.staticText3, 0, border=0, flag=wx.GROW)
    60         left_gridsizer.AddWindow(self.ReferenceRadioButton, flag=wx.GROW)
    69         parent.AddWindow(self.Priority, 0, border=0, flag=wx.GROW)
    61         
    70         parent.AddWindow(self.Spacer, 0, border=0, flag=wx.GROW)
    62         self.Reference = wx.ComboBox(self, style=wx.CB_READONLY)
    71     
    63         self.Bind(wx.EVT_COMBOBOX, self.OnReferenceChanged, self.Reference)
    72     def _init_coll_LeftGridSizer_Growables(self, parent):
    64         left_gridsizer.AddWindow(self.Reference, flag=wx.GROW)
    73         parent.AddGrowableCol(0)
    65         
    74         parent.AddGrowableRow(6)
    66         self.InlineRadioButton = wx.RadioButton(self, label=_('Inline'))
    75             
    67         self.InlineRadioButton.SetValue(False)
    76     def _init_coll_RightGridSizer_Items(self, parent):
    68         self.Bind(wx.EVT_RADIOBUTTON, self.OnTypeChanged, self.InlineRadioButton)
    77         parent.AddWindow(self.staticText2, 0, border=0, flag=wx.GROW)
    69         left_gridsizer.AddWindow(self.InlineRadioButton, flag=wx.GROW)
    78         parent.AddWindow(self.Preview, 0, border=0, flag=wx.GROW)
    70         
    79         
    71         self.Inline = wx.TextCtrl(self)
    80     def _init_coll_RightGridSizer_Growables(self, parent):
       
    81         parent.AddGrowableCol(0)
       
    82         parent.AddGrowableRow(1)
       
    83 
       
    84     def _init_sizers(self):
       
    85         self.flexGridSizer1 = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10)
       
    86         self.MainSizer = wx.BoxSizer(wx.HORIZONTAL)
       
    87         self.LeftGridSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=9, vgap=5)
       
    88         self.RightGridSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=5)
       
    89 
       
    90         self._init_coll_flexGridSizer1_Items(self.flexGridSizer1)
       
    91         self._init_coll_flexGridSizer1_Growables(self.flexGridSizer1)
       
    92         self._init_coll_MainSizer_Items(self.MainSizer)
       
    93         self._init_coll_LeftGridSizer_Items(self.LeftGridSizer)
       
    94         self._init_coll_LeftGridSizer_Growables(self.LeftGridSizer)
       
    95         self._init_coll_RightGridSizer_Items(self.RightGridSizer)
       
    96         self._init_coll_RightGridSizer_Growables(self.RightGridSizer)
       
    97 
       
    98         self.SetSizer(self.flexGridSizer1)
       
    99 
       
   100     def _init_ctrls(self, prnt, ctrler):
       
   101         wx.Dialog.__init__(self, id=ID_SFCTRANSITIONDIALOG,
       
   102               name='SFCTransitionDialog', parent=prnt,
       
   103               size=wx.Size(350, 300), style=wx.DEFAULT_DIALOG_STYLE,
       
   104               title=_('Edit transition'))
       
   105         self.SetClientSize(wx.Size(350, 300))
       
   106 
       
   107         self.staticText1 = wx.StaticText(id=ID_SFCTRANSITIONDIALOGSTATICTEXT1,
       
   108               label=_('Type:'), name='staticText1', parent=self,
       
   109               pos=wx.Point(0, 0), size=wx.Size(0, 17), style=0)
       
   110 
       
   111         self.staticText2 = wx.StaticText(id=ID_SFCTRANSITIONDIALOGSTATICTEXT2,
       
   112               label=_('Preview:'), name='staticText2', parent=self,
       
   113               pos=wx.Point(0, 0), size=wx.Size(0, 17), style=0)
       
   114 
       
   115         self.staticText3 = wx.StaticText(id=ID_SFCTRANSITIONDIALOGSTATICTEXT3,
       
   116               label=_('Priority:'), name='staticText3', parent=self,
       
   117               pos=wx.Point(0, 0), size=wx.Size(0, 17), style=0)
       
   118         
       
   119         self.radioButton1 = wx.RadioButton(id=ID_SFCTRANSITIONDIALOGRADIOBUTTON1,
       
   120               label=_('Reference'), name='radioButton1', parent=self,
       
   121               pos=wx.Point(0, 0), size=wx.Size(0, 24), style=wx.RB_GROUP)
       
   122         self.Bind(wx.EVT_RADIOBUTTON, self.OnTypeChanged, id=ID_SFCTRANSITIONDIALOGRADIOBUTTON1)
       
   123         self.radioButton1.SetValue(True)
       
   124 
       
   125         self.Reference = wx.ComboBox(id=ID_SFCTRANSITIONDIALOGREFERENCE,
       
   126               name='Reference', parent=self, pos=wx.Point(0, 0), 
       
   127               size=wx.Size(0, 28), style=wx.CB_READONLY)
       
   128         self.Bind(wx.EVT_COMBOBOX, self.OnReferenceChanged, id=ID_SFCTRANSITIONDIALOGREFERENCE)
       
   129 
       
   130         self.radioButton2 = wx.RadioButton(id=ID_SFCTRANSITIONDIALOGRADIOBUTTON2,
       
   131               label=_('Inline'), name='radioButton2', parent=self,
       
   132               pos=wx.Point(0, 0), size=wx.Size(0, 24), style=0)
       
   133         self.Bind(wx.EVT_RADIOBUTTON, self.OnTypeChanged, id=ID_SFCTRANSITIONDIALOGRADIOBUTTON2)
       
   134         self.radioButton2.SetValue(False)
       
   135 
       
   136         self.Inline = wx.TextCtrl(id=ID_SFCTRANSITIONDIALOGINLINE,
       
   137               name='Inline', parent=self, pos=wx.Point(0, 0),
       
   138               size=wx.Size(0, 24), style=0)
       
   139         self.Bind(wx.EVT_TEXT, self.OnInlineChanged, id=ID_SFCTRANSITIONDIALOGINLINE)
       
   140         self.Inline.Enable(False)
    72         self.Inline.Enable(False)
   141         
    73         self.Bind(wx.EVT_TEXT, self.OnInlineChanged, self.Inline)
   142         self.radioButton3 = wx.RadioButton(id=ID_SFCTRANSITIONDIALOGRADIOBUTTON3,
    74         left_gridsizer.AddWindow(self.Inline, flag=wx.GROW)
   143               label=_('Connection'), name='radioButton3', parent=self,
    75         
   144               pos=wx.Point(0, 0), size=wx.Size(0, 24), style=0)
    76         self.ConnectionRadioButton = wx.RadioButton(self, label=_('Connection'))
   145         self.Bind(wx.EVT_RADIOBUTTON, self.OnTypeChanged, id=ID_SFCTRANSITIONDIALOGRADIOBUTTON3)
    77         self.Bind(wx.EVT_RADIOBUTTON, self.OnTypeChanged, self.ConnectionRadioButton)
   146         self.radioButton3.SetValue(False)
    78         self.ConnectionRadioButton.SetValue(False)
   147         if not self.Connection:
    79         if not self.Connection:
   148             self.radioButton3.Hide()
    80             self.ConnectionRadioButton.Hide()
   149 
    81         left_gridsizer.AddWindow(self.ConnectionRadioButton, flag=wx.GROW)
   150         self.Priority = wx.SpinCtrl(id=ID_SFCTRANSITIONDIALOGPRIORITY,
    82         
   151               name='Priority', parent=self, pos=wx.Point(0, 0),
    83         priority_label = wx.StaticText(self, label=_('Priority:'))
   152               size=wx.Size(0, 24), style=wx.SP_ARROW_KEYS, min=0)
    84         left_gridsizer.AddWindow(priority_label, flag=wx.GROW)
   153         self.Bind(wx.EVT_TEXT, self.OnPriorityChanged, id=ID_SFCTRANSITIONDIALOGPRIORITY)
    85         
   154 
    86         self.Priority = wx.SpinCtrl(self, min=0, style=wx.SP_ARROW_KEYS)
   155         self.Preview = wx.Panel(id=ID_SFCTRANSITIONDIALOGPREVIEW,
    87         self.Bind(wx.EVT_TEXT, self.OnPriorityChanged, self.Priority)
   156               name='Preview', parent=self, pos=wx.Point(0, 0),
    88         left_gridsizer.AddWindow(self.Priority, flag=wx.GROW)
   157               size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL|wx.SIMPLE_BORDER)
    89         
       
    90         right_gridsizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=5)
       
    91         right_gridsizer.AddGrowableCol(0)
       
    92         right_gridsizer.AddGrowableRow(1)
       
    93         column_sizer.AddSizer(right_gridsizer, 1, border=5, 
       
    94               flag=wx.GROW|wx.LEFT)
       
    95         
       
    96         preview_label = wx.StaticText(self, label=_('Preview:'))
       
    97         right_gridsizer.AddWindow(preview_label, flag=wx.GROW)
       
    98         
       
    99         self.Preview = wx.Panel(self, 
       
   100               style=wx.TAB_TRAVERSAL|wx.SIMPLE_BORDER)
   158         self.Preview.SetBackgroundColour(wx.Colour(255,255,255))
   101         self.Preview.SetBackgroundColour(wx.Colour(255,255,255))
   159         setattr(self.Preview, "GetDrawingMode", lambda:FREEDRAWING_MODE)
   102         setattr(self.Preview, "GetDrawingMode", lambda:FREEDRAWING_MODE)
   160         setattr(self.Preview, "RefreshTransitionModel", lambda x:None)
   103         setattr(self.Preview, "RefreshTransitionModel", lambda x:None)
   161         setattr(self.Preview, "GetScaling", lambda:None)
   104         setattr(self.Preview, "GetScaling", lambda:None)
   162         setattr(self.Preview, "IsOfType", ctrler.IsOfType)
   105         setattr(self.Preview, "IsOfType", controller.IsOfType)
   163 
   106         self.Preview.Bind(wx.EVT_PAINT, self.OnPaint)
   164         self.Spacer = wx.Panel(id=ID_SFCTRANSITIONDIALOGSPACER,
   107         right_gridsizer.AddWindow(self.Preview, flag=wx.GROW)
   165               name='Spacer', parent=self, pos=wx.Point(0, 0),
   108         
   166               size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL)
   109         button_sizer = self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.CENTRE)
   167 
   110         self.Bind(wx.EVT_BUTTON, self.OnOK, 
   168         self.ButtonSizer = self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.CENTRE)
   111               button_sizer.GetAffirmativeButton())
   169         if wx.VERSION >= (2, 5, 0):
   112         main_sizer.AddSizer(button_sizer, border=20, 
   170             self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.ButtonSizer.GetAffirmativeButton().GetId())
   113               flag=wx.ALIGN_RIGHT|wx.BOTTOM|wx.LEFT|wx.RIGHT)
   171             self.Preview.Bind(wx.EVT_PAINT, self.OnPaint)
   114         
   172         else:
   115         self.SetSizer(main_sizer)
   173             self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.ButtonSizer.GetChildren()[0].GetSizer().GetChildren()[0].GetWindow().GetId())
   116         
   174             wx.EVT_PAINT(self.Preview, self.OnPaint)
       
   175         
       
   176         self._init_sizers()
       
   177 
       
   178     def __init__(self, parent, controler, connection):
       
   179         self.Connection = connection
       
   180         self._init_ctrls(parent, controler)
       
   181         self.Transition = None
   117         self.Transition = None
   182         self.MinTransitionSize = None
   118         self.MinTransitionSize = None
   183         
   119         
   184         self.Element = SFC_Transition(self.Preview)
   120         self.Element = SFC_Transition(self.Preview)
   185         
   121         
   186         self.radioButton1.SetFocus()
   122         self.ReferenceRadioButton.SetFocus()
   187     
   123     
   188     def SetPreviewFont(self, font):
   124     def SetPreviewFont(self, font):
   189         self.Preview.SetFont(font)
   125         self.Preview.SetFont(font)
   190     
   126     
   191     def SetElementSize(self, size):
   127     def SetElementSize(self, size):
   193         width, height = max(min_width, size[0]), max(min_height, size[1])
   129         width, height = max(min_width, size[0]), max(min_height, size[1])
   194         self.Element.SetSize(width, height)
   130         self.Element.SetSize(width, height)
   195     
   131     
   196     def OnOK(self, event):
   132     def OnOK(self, event):
   197         error = []
   133         error = []
   198         if self.radioButton1.GetValue() and self.Reference.GetStringSelection() == "":
   134         if self.ReferenceRadioButton.GetValue() and self.Reference.GetStringSelection() == "":
   199             error.append(_("Reference"))
   135             error.append(_("Reference"))
   200         if self.radioButton2.GetValue() and self.Inline.GetValue() == "":
   136         if self.InlineRadioButton.GetValue() and self.Inline.GetValue() == "":
   201             error.append(_("Inline"))
   137             error.append(_("Inline"))
   202         if len(error) > 0:
   138         if len(error) > 0:
   203             text = ""
   139             text = ""
   204             for i, item in enumerate(error):
   140             for i, item in enumerate(error):
   205                 if i == 0:
   141                 if i == 0:
   206                     text += item
   142                     text += item
   207                 elif i == len(error) - 1:
   143                 elif i == len(error) - 1:
   208                     text += _(" and %s")%item
   144                     text += _(" and %s")%item
   209                 else:
   145                 else:
   210                     text += _(", %s")%item 
   146                     text += _(", %s")%item 
   211             message = wx.MessageDialog(self, _("Form isn't complete. %s must be filled!")%text, _("Error"), wx.OK|wx.ICON_ERROR)
   147             dialog = wx.MessageDialog(self, _("Form isn't complete. %s must be filled!")%text, _("Error"), wx.OK|wx.ICON_ERROR)
   212             message.ShowModal()
   148             dialog.ShowModal()
   213             message.Destroy()
   149             dialog.Destroy()
   214         else:
   150         else:
   215             self.EndModal(wx.ID_OK)
   151             self.EndModal(wx.ID_OK)
   216 
   152 
   217     def OnTypeChanged(self, event):
   153     def OnTypeChanged(self, event):
   218         if self.radioButton1.GetValue():
   154         if self.ReferenceRadioButton.GetValue():
   219             self.Element.SetType("reference", self.Reference.GetStringSelection())
   155             self.Element.SetType("reference", self.Reference.GetStringSelection())
   220             self.Reference.Enable(True)
   156             self.Reference.Enable(True)
   221             self.Inline.Enable(False)
   157             self.Inline.Enable(False)
   222         elif self.radioButton2.GetValue():
   158         elif self.InlineRadioButton.GetValue():
   223             self.Element.SetType("inline", self.Inline.GetValue())
   159             self.Element.SetType("inline", self.Inline.GetValue())
   224             self.Reference.Enable(False)
   160             self.Reference.Enable(False)
   225             self.Inline.Enable(True)
   161             self.Inline.Enable(True)
   226         else:
   162         else:
   227             self.Element.SetType("connection")
   163             self.Element.SetType("connection")
   250         for transition in transitions:
   186         for transition in transitions:
   251             self.Reference.Append(transition)
   187             self.Reference.Append(transition)
   252 
   188 
   253     def SetValues(self, values):
   189     def SetValues(self, values):
   254         if values["type"] == "reference":
   190         if values["type"] == "reference":
   255             self.radioButton1.SetValue(True)
   191             self.ReferenceRadioButton.SetValue(True)
   256             self.radioButton2.SetValue(False)
   192             self.InlineRadioButton.SetValue(False)
   257             self.radioButton3.SetValue(False)
   193             self.ConnectionRadioButton.SetValue(False)
   258             self.Reference.Enable(True)
   194             self.Reference.Enable(True)
   259             self.Inline.Enable(False)
   195             self.Inline.Enable(False)
   260             self.Reference.SetStringSelection(values["value"])
   196             self.Reference.SetStringSelection(values["value"])
   261             self.Element.SetType("reference", values["value"])
   197             self.Element.SetType("reference", values["value"])
   262         elif values["type"] == "inline":
   198         elif values["type"] == "inline":
   263             self.radioButton1.SetValue(False)
   199             self.ReferenceRadioButton.SetValue(False)
   264             self.radioButton2.SetValue(True)
   200             self.InlineRadioButton.SetValue(True)
   265             self.radioButton3.SetValue(False)
   201             self.ConnectionRadioButton.SetValue(False)
   266             self.Reference.Enable(False)
   202             self.Reference.Enable(False)
   267             self.Inline.Enable(True)
   203             self.Inline.Enable(True)
   268             self.Inline.SetValue(values["value"])
   204             self.Inline.SetValue(values["value"])
   269             self.Element.SetType("inline", values["value"])
   205             self.Element.SetType("inline", values["value"])
   270         elif values["type"] == "connection" and self.Connection:
   206         elif values["type"] == "connection" and self.Connection:
   271             self.radioButton1.SetValue(False)
   207             self.ReferenceRadioButton.SetValue(False)
   272             self.radioButton2.SetValue(False)
   208             self.InlineRadioButton.SetValue(False)
   273             self.radioButton3.SetValue(True)
   209             self.ConnectionRadioButton.SetValue(True)
   274             self.Reference.Enable(False)
   210             self.Reference.Enable(False)
   275             self.Inline.Enable(False)
   211             self.Inline.Enable(False)
   276             self.Element.SetType("connection")
   212             self.Element.SetType("connection")
   277         self.Priority.SetValue(values["priority"])
   213         self.Priority.SetValue(values["priority"])
   278         self.Element.SetPriority(values["priority"])
   214         self.Element.SetPriority(values["priority"])
   279         self.RefreshPreview()
   215         self.RefreshPreview()
   280         
   216         
   281     def GetValues(self):
   217     def GetValues(self):
   282         values = {"priority" : int(self.Priority.GetValue())}
   218         values = {"priority" : int(self.Priority.GetValue())}
   283         if self.radioButton1.GetValue():
   219         if self.ReferenceRadioButton.GetValue():
   284             values["type"] = "reference"
   220             values["type"] = "reference"
   285             values["value"] = self.Reference.GetStringSelection()
   221             values["value"] = self.Reference.GetStringSelection()
   286         elif self.radioButton2.GetValue():
   222         elif self.InlineRadioButton.GetValue():
   287             values["type"] = "inline"
   223             values["type"] = "inline"
   288             values["value"] = self.Inline.GetValue()
   224             values["value"] = self.Inline.GetValue()
   289         else:
   225         else:
   290             values["type"] = "connection"
   226             values["type"] = "connection"
   291             values["value"] = None
   227             values["value"] = None