dialogs/LDElementDialog.py
changeset 714 131ea7f237b9
parent 577 9dbb79722fbc
child 740 b40ef1010140
equal deleted inserted replaced
713:95a0a427f3ef 714:131ea7f237b9
    28 
    28 
    29 #-------------------------------------------------------------------------------
    29 #-------------------------------------------------------------------------------
    30 #                        Edit Ladder Element Properties Dialog
    30 #                        Edit Ladder Element Properties Dialog
    31 #-------------------------------------------------------------------------------
    31 #-------------------------------------------------------------------------------
    32 
    32 
    33 
       
    34 [ID_LDELEMENTDIALOG, ID_LDELEMENTDIALOGSPACER, 
       
    35  ID_LDELEMENTDIALOGNAME, ID_LDELEMENTDIALOGRADIOBUTTON1, 
       
    36  ID_LDELEMENTDIALOGRADIOBUTTON2, ID_LDELEMENTDIALOGRADIOBUTTON3,
       
    37  ID_LDELEMENTDIALOGRADIOBUTTON4, ID_LDELEMENTDIALOGRADIOBUTTON5,
       
    38  ID_LDELEMENTDIALOGRADIOBUTTON6, ID_LDELEMENTDIALOGPREVIEW,
       
    39  ID_LDELEMENTDIALOGSTATICTEXT1, ID_LDELEMENTDIALOGSTATICTEXT2, 
       
    40  ID_LDELEMENTDIALOGSTATICTEXT3, 
       
    41 ] = [wx.NewId() for _init_ctrls in range(13)]
       
    42 
       
    43 class LDElementDialog(wx.Dialog):
    33 class LDElementDialog(wx.Dialog):
    44     
    34     
    45     if wx.VERSION < (2, 6, 0):
    35     def __init__(self, parent, controller, type):
    46         def Bind(self, event, function, id = None):
    36         if type == "contact":
    47             if id is not None:
    37             wx.Dialog.__init__(self, parent, size=wx.Size(350, 310),
    48                 event(self, id, function)
    38                   title=_("Edit Contact Values"))
    49             else:
    39         else:
    50                 event(self, function)
    40             wx.Dialog.__init__(self, parent, size=wx.Size(350, 260),
    51     
    41                   title=_("Edit Coil Values"))
    52     def _init_coll_flexGridSizer1_Items(self, parent):
    42         
    53         parent.AddSizer(self.MainSizer, 0, border=20, flag=wx.GROW|wx.TOP|wx.LEFT|wx.RIGHT)
    43         main_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10)
    54         parent.AddSizer(self.ButtonSizer, 0, border=20, flag=wx.ALIGN_RIGHT|wx.BOTTOM|wx.LEFT|wx.RIGHT)
    44         main_sizer.AddGrowableCol(0)
    55         
    45         main_sizer.AddGrowableRow(0)
    56     def _init_coll_flexGridSizer1_Growables(self, parent):
    46         
    57         parent.AddGrowableCol(0)
    47         column_sizer = wx.BoxSizer(wx.HORIZONTAL)
    58         parent.AddGrowableRow(0)
    48         main_sizer.AddSizer(column_sizer, border=20, 
    59     
    49               flag=wx.GROW|wx.TOP|wx.LEFT|wx.RIGHT)
    60     def _init_coll_MainSizer_Items(self, parent):
    50         
    61         parent.AddSizer(self.LeftGridSizer, 1, border=5, flag=wx.GROW|wx.RIGHT)
    51         if type == "contact":
    62         parent.AddSizer(self.RightGridSizer, 1, border=5, flag=wx.GROW|wx.LEFT)
    52             left_gridsizer = wx.FlexGridSizer(cols=1, hgap=0, rows=9, vgap=5)
    63     
    53         else:
    64     def _init_coll_LeftGridSizer_Items(self, parent):
    54             left_gridsizer = wx.FlexGridSizer(cols=1, hgap=0, rows=7, vgap=5)
    65         parent.AddWindow(self.staticText1, 0, border=0, flag=wx.GROW)
    55         left_gridsizer.AddGrowableCol(0)
    66         parent.AddSizer(self.RadioButtonSizer, 0, border=0, flag=wx.GROW)
    56         column_sizer.AddSizer(left_gridsizer, 1, border=5, 
    67         parent.AddWindow(self.staticText2, 0, border=0, flag=wx.GROW)
    57               flag=wx.GROW|wx.RIGHT)
    68         parent.AddWindow(self.ElementName, 0, border=0, flag=wx.GROW)
    58         
    69         parent.AddWindow(self.Spacer, 0, border=0, flag=wx.GROW)
    59         modifier_label = wx.StaticText(self, label=_('Modifier:'))
    70         
    60         left_gridsizer.AddWindow(modifier_label, flag=wx.GROW)
    71     def _init_coll_LeftGridSizer_Growables(self, parent):
    61         
    72         parent.AddGrowableCol(0)
    62         self.Normal = wx.RadioButton(self, label=_("Normal"), style=wx.RB_GROUP)
    73         parent.AddGrowableRow(7)
    63         self.Normal.SetValue(True)
    74     
    64         self.Bind(wx.EVT_RADIOBUTTON, self.OnTypeChanged, self.Normal)
    75     def _init_coll_RadioButtonSizer_Items(self, parent):
    65         left_gridsizer.AddWindow(self.Normal, flag=wx.GROW)
    76         parent.AddWindow(self.radioButton1, 0, border=0, flag=wx.GROW)
    66         
    77         parent.AddWindow(self.radioButton2, 0, border=0, flag=wx.GROW)
    67         self.Negated = wx.RadioButton(self, label=_("Negated"))
    78         parent.AddWindow(self.radioButton3, 0, border=0, flag=wx.GROW)
    68         self.Bind(wx.EVT_RADIOBUTTON, self.OnTypeChanged, self.Negated)
    79         parent.AddWindow(self.radioButton4, 0, border=0, flag=wx.GROW)
    69         left_gridsizer.AddWindow(self.Negated, flag=wx.GROW)
    80         parent.AddWindow(self.radioButton5, 0, border=0, flag=wx.GROW)
    70         
    81         parent.AddWindow(self.radioButton6, 0, border=0, flag=wx.GROW)
    71         if type == "contact":
    82         
    72             self.Set = wx.RadioButton(self, label=_("Set"))
    83     def _init_coll_RightGridSizer_Items(self, parent):
    73             self.Bind(wx.EVT_RADIOBUTTON, self.OnTypeChanged, self.Set)
    84         parent.AddWindow(self.staticText3, 0, border=0, flag=wx.GROW)
    74             left_gridsizer.AddWindow(self.Set, flag=wx.GROW)
    85         parent.AddWindow(self.Preview, 0, border=0, flag=wx.GROW)
    75             
    86         
    76             self.Reset = wx.RadioButton(self, label=_("Reset"))
    87     def _init_coll_RightGridSizer_Growables(self, parent):
    77             self.Bind(wx.EVT_RADIOBUTTON, self.OnTypeChanged, self.Reset)
    88         parent.AddGrowableCol(0)
    78             left_gridsizer.AddWindow(self.Reset, flag=wx.GROW)
    89         parent.AddGrowableRow(1)
    79             
    90 
    80         self.RisingEdge = wx.RadioButton(self, label=_("Rising Edge"))
    91     def _init_sizers(self):
    81         self.Bind(wx.EVT_RADIOBUTTON, self.OnTypeChanged, self.RisingEdge)
    92         self.flexGridSizer1 = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10)
    82         left_gridsizer.AddWindow(self.RisingEdge, flag=wx.GROW)
    93         self.MainSizer = wx.BoxSizer(wx.HORIZONTAL)
    83         
    94         self.LeftGridSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=5, vgap=5)
    84         self.FallingEdge = wx.RadioButton(self, label=_("Falling Edge"))
    95         self.RadioButtonSizer = wx.BoxSizer(wx.VERTICAL)
    85         self.Bind(wx.EVT_RADIOBUTTON, self.OnTypeChanged, self.FallingEdge)
    96         self.RightGridSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=5)
    86         left_gridsizer.AddWindow(self.FallingEdge, flag=wx.GROW)
    97 
    87         
    98         self._init_coll_flexGridSizer1_Items(self.flexGridSizer1)
    88         element_name_label = wx.StaticText(self, label=_('Name:'))
    99         self._init_coll_flexGridSizer1_Growables(self.flexGridSizer1)
    89         left_gridsizer.AddWindow(element_name_label, flag=wx.GROW)
   100         self._init_coll_MainSizer_Items(self.MainSizer)
    90         
   101         self._init_coll_LeftGridSizer_Items(self.LeftGridSizer)
    91         self.ElementName = wx.ComboBox(self, style=wx.CB_READONLY)
   102         self._init_coll_LeftGridSizer_Growables(self.LeftGridSizer)
    92         self.Bind(wx.EVT_COMBOBOX, self.OnNameChanged, self.ElementName)
   103         self._init_coll_RadioButtonSizer_Items(self.RadioButtonSizer)
    93         left_gridsizer.AddWindow(self.ElementName, flag=wx.GROW)
   104         self._init_coll_RightGridSizer_Items(self.RightGridSizer)
    94         
   105         self._init_coll_RightGridSizer_Growables(self.RightGridSizer)
    95         right_gridsizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=5)
   106 
    96         right_gridsizer.AddGrowableCol(0)
   107         self.SetSizer(self.flexGridSizer1)
    97         right_gridsizer.AddGrowableRow(1)
   108 
    98         column_sizer.AddSizer(right_gridsizer, 1, border=5, 
   109     def _init_ctrls(self, prnt, ctrler, title, extra_size = 0):
    99               flag=wx.GROW|wx.LEFT)
   110         wx.Dialog.__init__(self, id=ID_LDELEMENTDIALOG,
   100         
   111               name='LDElementDialog', parent=prnt,
   101         preview_sizer = wx.StaticText(self, label=_('Preview:'))
   112               size=wx.Size(350, 260 + extra_size), style=wx.DEFAULT_DIALOG_STYLE,
   102         right_gridsizer.AddWindow(preview_sizer, flag=wx.GROW)
   113               title=title)
   103 
   114         self.SetClientSize(wx.Size(350, 260 + extra_size))
   104         self.Preview = wx.Panel(self,
   115 
   105               style=wx.TAB_TRAVERSAL|wx.SIMPLE_BORDER)
   116         self.staticText1 = wx.StaticText(id=ID_LDELEMENTDIALOGSTATICTEXT1,
       
   117               label=_('Modifier:'), name='staticText1', parent=self,
       
   118               pos=wx.Point(0, 0), size=wx.Size(0, 17), style=0)
       
   119 
       
   120         self.staticText2 = wx.StaticText(id=ID_LDELEMENTDIALOGSTATICTEXT2,
       
   121               label=_('Name:'), name='staticText2', parent=self,
       
   122               pos=wx.Point(0, 0), size=wx.Size(0, 17), style=0)
       
   123 
       
   124         self.staticText3 = wx.StaticText(id=ID_LDELEMENTDIALOGSTATICTEXT3,
       
   125               label=_('Preview:'), name='staticText3', parent=self,
       
   126               pos=wx.Point(0, 0), size=wx.Size(0, 17), style=0)
       
   127 
       
   128         self.radioButton1 = wx.RadioButton(id=ID_LDELEMENTDIALOGRADIOBUTTON1,
       
   129               label=_("Normal"), name='radioButton1', parent=self,
       
   130               pos=wx.Point(0, 0), size=wx.Size(0, 24), style=wx.RB_GROUP)
       
   131         self.Bind(wx.EVT_RADIOBUTTON, self.OnTypeChanged, id=ID_LDELEMENTDIALOGRADIOBUTTON1)
       
   132         self.radioButton1.SetValue(True)
       
   133 
       
   134         self.radioButton2 = wx.RadioButton(id=ID_LDELEMENTDIALOGRADIOBUTTON2,
       
   135               label=_("Negated"), name='radioButton2', parent=self, 
       
   136               pos=wx.Point(0, 0), size=wx.Size(0, 24), style=0)
       
   137         self.Bind(wx.EVT_RADIOBUTTON, self.OnTypeChanged, id=ID_LDELEMENTDIALOGRADIOBUTTON2)
       
   138 
       
   139         self.radioButton3 = wx.RadioButton(id=ID_LDELEMENTDIALOGRADIOBUTTON3,
       
   140               label=_("Set"), name='radioButton3', parent=self,
       
   141               pos=wx.Point(0, 0), size=wx.Size(0, 24), style=0)
       
   142         self.Bind(wx.EVT_RADIOBUTTON, self.OnTypeChanged, id=ID_LDELEMENTDIALOGRADIOBUTTON3)
       
   143 
       
   144         self.radioButton4 = wx.RadioButton(id=ID_LDELEMENTDIALOGRADIOBUTTON4,
       
   145               label=_("Reset"), name='radioButton4', parent=self, 
       
   146               pos=wx.Point(0, 0), size=wx.Size(0, 24), style=0)
       
   147         self.Bind(wx.EVT_RADIOBUTTON, self.OnTypeChanged, id=ID_LDELEMENTDIALOGRADIOBUTTON4)
       
   148 
       
   149         self.radioButton5 = wx.RadioButton(id=ID_LDELEMENTDIALOGRADIOBUTTON5,
       
   150               label=_("Rising Edge"), name='radioButton5', parent=self, 
       
   151               pos=wx.Point(0, 0), size=wx.Size(0, 24), style=0)
       
   152         self.Bind(wx.EVT_RADIOBUTTON, self.OnTypeChanged, id=ID_LDELEMENTDIALOGRADIOBUTTON5)
       
   153 
       
   154         self.radioButton6 = wx.RadioButton(id=ID_LDELEMENTDIALOGRADIOBUTTON6,
       
   155               label=_("Falling Edge"), name='radioButton6', parent=self, 
       
   156               pos=wx.Point(0, 0), size=wx.Size(0, 24), style=0)
       
   157         self.Bind(wx.EVT_RADIOBUTTON, self.OnTypeChanged, id=ID_LDELEMENTDIALOGRADIOBUTTON6)
       
   158 
       
   159         self.ElementName = wx.ComboBox(id=ID_LDELEMENTDIALOGNAME,
       
   160               name='Name', parent=self, pos=wx.Point(0, 0),
       
   161               size=wx.Size(0, 28), style=wx.CB_READONLY)
       
   162         self.Bind(wx.EVT_COMBOBOX, self.OnNameChanged, id=ID_LDELEMENTDIALOGNAME)
       
   163 
       
   164         self.Preview = wx.Panel(id=ID_LDELEMENTDIALOGPREVIEW,
       
   165               name='Preview', parent=self, pos=wx.Point(0, 0),
       
   166               size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL|wx.SIMPLE_BORDER)
       
   167         self.Preview.SetBackgroundColour(wx.Colour(255,255,255))
   106         self.Preview.SetBackgroundColour(wx.Colour(255,255,255))
   168         setattr(self.Preview, "GetDrawingMode", lambda:FREEDRAWING_MODE)
   107         setattr(self.Preview, "GetDrawingMode", lambda:FREEDRAWING_MODE)
   169         setattr(self.Preview, "GetScaling", lambda:None)
   108         setattr(self.Preview, "GetScaling", lambda:None)
   170         setattr(self.Preview, "IsOfType", ctrler.IsOfType)
   109         setattr(self.Preview, "IsOfType", controller.IsOfType)
   171 
   110         self.Preview.Bind(wx.EVT_PAINT, self.OnPaint)
   172         self.Spacer = wx.Panel(id=ID_LDELEMENTDIALOGSPACER,
   111         
   173               name='Spacer', parent=self, pos=wx.Point(0, 0),
   112         button_sizer = self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.CENTRE)
   174               size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL)
   113         main_sizer.AddSizer(button_sizer, border=20, 
   175 
   114               flag=wx.ALIGN_RIGHT|wx.BOTTOM|wx.LEFT|wx.RIGHT)
   176         self.ButtonSizer = self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.CENTRE)
   115         
   177         
   116         self.SetSizer(main_sizer)
   178         if wx.VERSION >= (2, 5, 0):
   117         
   179             self.Preview.Bind(wx.EVT_PAINT, self.OnPaint)
   118         if type == "contact":
       
   119             self.Element = LD_Contact(self.Preview, CONTACT_NORMAL, "")
   180         else:
   120         else:
   181             wx.EVT_PAINT(self.Preview, self.OnPaint)
   121             self.Element = LD_Coil(self.Preview, COIL_NORMAL, "")
   182         
   122         
   183         self._init_sizers()
       
   184 
       
   185     def __init__(self, parent, controler, type):
       
   186         self.Type = type
   123         self.Type = type
   187         if type == "contact":
   124         
   188             self._init_ctrls(parent, controler, _("Edit Contact Values"))
   125         self.Normal.SetFocus()
   189             self.Element = LD_Contact(self.Preview, CONTACT_NORMAL, "")
       
   190             self.radioButton3.Hide()
       
   191             self.radioButton4.Hide()
       
   192         elif type == "coil":
       
   193             self._init_ctrls(parent, controler, _("Edit Coil Values"), 50)
       
   194             self.Element = LD_Coil(self.Preview, COIL_NORMAL, "")
       
   195         
       
   196         self.radioButton1.SetFocus()
       
   197     
   126     
   198     def SetPreviewFont(self, font):
   127     def SetPreviewFont(self, font):
   199         self.Preview.SetFont(font)
   128         self.Preview.SetFont(font)
   200     
   129     
   201     def SetElementSize(self, size):
   130     def SetElementSize(self, size):
   216                 self.ElementName.SetStringSelection(value)
   145                 self.ElementName.SetStringSelection(value)
   217             elif name == "type":
   146             elif name == "type":
   218                 self.Element.SetType(value)
   147                 self.Element.SetType(value)
   219                 if self.Type == "contact":
   148                 if self.Type == "contact":
   220                     if value == CONTACT_NORMAL:
   149                     if value == CONTACT_NORMAL:
   221                         self.radioButton1.SetValue(True)
   150                         self.Normal.SetValue(True)
   222                     elif value == CONTACT_REVERSE:
   151                     elif value == CONTACT_REVERSE:
   223                         self.radioButton2.SetValue(True)
   152                         self.Negated.SetValue(True)
   224                     elif value == CONTACT_RISING:
   153                     elif value == CONTACT_RISING:
   225                         self.radioButton5.SetValue(True)
   154                         self.RisingEdge.SetValue(True)
   226                     elif value == CONTACT_FALLING:
   155                     elif value == CONTACT_FALLING:
   227                         self.radioButton6.SetValue(True)
   156                         self.FallingEdge.SetValue(True)
   228                 elif self.Type == "coil":
   157                 elif self.Type == "coil":
   229                     if value == COIL_NORMAL:
   158                     if value == COIL_NORMAL:
   230                         self.radioButton1.SetValue(True)
   159                         self.Normal.SetValue(True)
   231                     elif value == COIL_REVERSE:
   160                     elif value == COIL_REVERSE:
   232                         self.radioButton2.SetValue(True)
   161                         self.Negated.SetValue(True)
   233                     elif value == COIL_SET:
   162                     elif value == COIL_SET:
   234                         self.radioButton3.SetValue(True)
   163                         self.Set.SetValue(True)
   235                     elif value == COIL_RESET:
   164                     elif value == COIL_RESET:
   236                         self.radioButton4.SetValue(True)
   165                         self.Reset.SetValue(True)
   237                     elif value == COIL_RISING:
   166                     elif value == COIL_RISING:
   238                         self.radioButton5.SetValue(True)
   167                         self.RisingEdge.SetValue(True)
   239                     elif value == COIL_FALLING:
   168                     elif value == COIL_FALLING:
   240                         self.radioButton6.SetValue(True)
   169                         self.FallingEdge.SetValue(True)
   241 
   170 
   242     def GetValues(self):
   171     def GetValues(self):
   243         values = {}
   172         values = {}
   244         values["name"] = self.Element.GetName()
   173         values["name"] = self.Element.GetName()
   245         values["type"] = self.Element.GetType()
   174         values["type"] = self.Element.GetType()
   246         values["width"], values["height"] = self.Element.GetSize()
   175         values["width"], values["height"] = self.Element.GetSize()
   247         return values
   176         return values
   248 
   177 
   249     def OnTypeChanged(self, event):
   178     def OnTypeChanged(self, event):
   250         if self.Type == "contact":
   179         if self.Type == "contact":
   251             if self.radioButton1.GetValue():
   180             if self.Normal.GetValue():
   252                 self.Element.SetType(CONTACT_NORMAL)
   181                 self.Element.SetType(CONTACT_NORMAL)
   253             elif self.radioButton2.GetValue():
   182             elif self.Negated.GetValue():
   254                 self.Element.SetType(CONTACT_REVERSE)
   183                 self.Element.SetType(CONTACT_REVERSE)
   255             elif self.radioButton5.GetValue():
   184             elif self.RisingEdge.GetValue():
   256                 self.Element.SetType(CONTACT_RISING)
   185                 self.Element.SetType(CONTACT_RISING)
   257             elif self.radioButton6.GetValue():
   186             elif self.FallingEdge.GetValue():
   258                 self.Element.SetType(CONTACT_FALLING)
   187                 self.Element.SetType(CONTACT_FALLING)
   259         elif self.Type == "coil":
   188         elif self.Type == "coil":
   260             if self.radioButton1.GetValue():
   189             if self.Normal.GetValue():
   261                 self.Element.SetType(COIL_NORMAL)
   190                 self.Element.SetType(COIL_NORMAL)
   262             elif self.radioButton2.GetValue():
   191             elif self.Negated.GetValue():
   263                 self.Element.SetType(COIL_REVERSE)
   192                 self.Element.SetType(COIL_REVERSE)
   264             elif self.radioButton3.GetValue():
   193             elif self.Set.GetValue():
   265                 self.Element.SetType(COIL_SET)
   194                 self.Element.SetType(COIL_SET)
   266             elif self.radioButton4.GetValue():
   195             elif self.Reset.GetValue():
   267                 self.Element.SetType(COIL_RESET)
   196                 self.Element.SetType(COIL_RESET)
   268             elif self.radioButton5.GetValue():
   197             elif self.RisingEdge.GetValue():
   269                 self.Element.SetType(COIL_RISING)
   198                 self.Element.SetType(COIL_RISING)
   270             elif self.radioButton6.GetValue():
   199             elif self.FallingEdge.GetValue():
   271                 self.Element.SetType(COIL_FALLING)
   200                 self.Element.SetType(COIL_FALLING)
   272         self.RefreshPreview()
   201         self.RefreshPreview()
   273         event.Skip()
   202         event.Skip()
   274 
   203 
   275     def OnNameChanged(self, event):
   204     def OnNameChanged(self, event):