dialogs/FBDVariableDialog.py
changeset 1182 208103fd9ad0
parent 814 5743cbdff669
child 1187 be891953958f
equal deleted inserted replaced
1181:21e6db77eb29 1182:208103fd9ad0
    52         
    52         
    53         column_sizer = wx.BoxSizer(wx.HORIZONTAL)
    53         column_sizer = wx.BoxSizer(wx.HORIZONTAL)
    54         main_sizer.AddSizer(column_sizer, border=20, 
    54         main_sizer.AddSizer(column_sizer, border=20, 
    55               flag=wx.GROW|wx.TOP|wx.LEFT|wx.RIGHT)
    55               flag=wx.GROW|wx.TOP|wx.LEFT|wx.RIGHT)
    56         
    56         
    57         left_gridsizer = wx.FlexGridSizer(cols=1, hgap=0, rows=6, vgap=5)
    57         left_gridsizer = wx.FlexGridSizer(cols=1, hgap=0, rows=4, vgap=5)
    58         left_gridsizer.AddGrowableCol(0)
    58         left_gridsizer.AddGrowableCol(0)
    59         column_sizer.AddSizer(left_gridsizer, 1, border=5, 
    59         column_sizer.AddSizer(left_gridsizer, 1, border=5, 
    60               flag=wx.GROW|wx.RIGHT)
    60               flag=wx.GROW|wx.RIGHT)
    61         
    61         
    62         class_label = wx.StaticText(self, label=_('Class:'))
    62         class_label = wx.StaticText(self, label=_('Class:'))
    64         
    64         
    65         self.Class = wx.ComboBox(self, style=wx.CB_READONLY)
    65         self.Class = wx.ComboBox(self, style=wx.CB_READONLY)
    66         self.Bind(wx.EVT_COMBOBOX, self.OnClassChanged, self.Class)
    66         self.Bind(wx.EVT_COMBOBOX, self.OnClassChanged, self.Class)
    67         left_gridsizer.AddWindow(self.Class, flag=wx.GROW)
    67         left_gridsizer.AddWindow(self.Class, flag=wx.GROW)
    68         
    68         
    69         expression_label = wx.StaticText(self, label=_('Expression:'))
       
    70         left_gridsizer.AddWindow(expression_label, flag=wx.GROW)
       
    71         
       
    72         self.Expression = wx.TextCtrl(self)
       
    73         self.Bind(wx.EVT_TEXT, self.OnExpressionChanged, self.Expression)
       
    74         left_gridsizer.AddWindow(self.Expression, flag=wx.GROW)
       
    75         
       
    76         execution_order_label = wx.StaticText(self, label=_('Execution Order:'))
    69         execution_order_label = wx.StaticText(self, label=_('Execution Order:'))
    77         left_gridsizer.AddWindow(execution_order_label, flag=wx.GROW)
    70         left_gridsizer.AddWindow(execution_order_label, flag=wx.GROW)
    78         
    71         
    79         self.ExecutionOrder = wx.SpinCtrl(self, min=0, style=wx.SP_ARROW_KEYS)
    72         self.ExecutionOrder = wx.SpinCtrl(self, min=0, style=wx.SP_ARROW_KEYS)
    80         self.Bind(wx.EVT_SPINCTRL, self.OnExecutionOrderChanged, self.ExecutionOrder)
    73         self.Bind(wx.EVT_SPINCTRL, self.OnExecutionOrderChanged, self.ExecutionOrder)
    81         left_gridsizer.AddWindow(self.ExecutionOrder, flag=wx.GROW)
    74         left_gridsizer.AddWindow(self.ExecutionOrder, flag=wx.GROW)
    82         
    75         
    83         right_gridsizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=5)
    76         right_gridsizer = wx.FlexGridSizer(cols=1, hgap=0, rows=3, vgap=0)
    84         right_gridsizer.AddGrowableCol(0)
    77         right_gridsizer.AddGrowableCol(0)
    85         right_gridsizer.AddGrowableRow(1)
    78         right_gridsizer.AddGrowableRow(2)
    86         column_sizer.AddSizer(right_gridsizer, 1, border=5, 
    79         column_sizer.AddSizer(right_gridsizer, 1, border=5, 
    87               flag=wx.GROW|wx.LEFT)
    80               flag=wx.GROW|wx.LEFT)
    88         
    81         
    89         name_label = wx.StaticText(self, label=_('Name:'))
    82         name_label = wx.StaticText(self, label=_('Expression:'))
    90         right_gridsizer.AddWindow(name_label, flag=wx.GROW)
    83         right_gridsizer.AddWindow(name_label, border=5, flag=wx.GROW|wx.BOTTOM)
    91         
    84         
    92         self.VariableName = wx.ListBox(self, size=wx.Size(0, 0), 
    85         self.Expression = wx.TextCtrl(self)
       
    86         self.Bind(wx.EVT_TEXT, self.OnExpressionChanged, self.Expression)
       
    87         right_gridsizer.AddWindow(self.Expression, flag=wx.GROW)
       
    88         
       
    89         self.VariableName = wx.ListBox(self, size=wx.Size(0, 120), 
    93               style=wx.LB_SINGLE|wx.LB_SORT)
    90               style=wx.LB_SINGLE|wx.LB_SORT)
    94         self.Bind(wx.EVT_LISTBOX, self.OnNameChanged, self.VariableName)
    91         self.Bind(wx.EVT_LISTBOX, self.OnNameChanged, self.VariableName)
    95         right_gridsizer.AddWindow(self.VariableName, flag=wx.GROW)
    92         right_gridsizer.AddWindow(self.VariableName, flag=wx.GROW)
    96         
    93         
    97         preview_label = wx.StaticText(self, label=_('Preview:'))
    94         preview_label = wx.StaticText(self, label=_('Preview:'))
   129 
   126 
   130     def SetPreviewFont(self, font):
   127     def SetPreviewFont(self, font):
   131         self.Preview.SetFont(font)
   128         self.Preview.SetFont(font)
   132 
   129 
   133     def RefreshNameList(self):
   130     def RefreshNameList(self):
   134         selected = self.VariableName.GetStringSelection()
   131         selected = self.Expression.GetValue()
   135         var_class = VARIABLE_CLASSES_DICT_REVERSE[self.Class.GetStringSelection()]
   132         var_class = VARIABLE_CLASSES_DICT_REVERSE[self.Class.GetStringSelection()]
   136         self.VariableName.Clear()
   133         self.VariableName.Clear()
   137         self.VariableName.Append("")
       
   138         for name, var_type, value_type in self.VarList:
   134         for name, var_type, value_type in self.VarList:
   139             if var_type != "Input" or var_class == INPUT:
   135             if var_type != "Input" or var_class == INPUT:
   140                 self.VariableName.Append(name)
   136                 self.VariableName.Append(name)
   141         if selected != "" and self.VariableName.FindString(selected) != wx.NOT_FOUND:
   137         if selected != "" and self.VariableName.FindString(selected) != wx.NOT_FOUND:
   142             self.VariableName.SetStringSelection(selected)
   138             self.VariableName.SetStringSelection(selected)
   143             self.Expression.Enable(False)
       
   144         else:
   139         else:
   145             self.VariableName.SetStringSelection("")
   140             self.VariableName.SetSelection(wx.NOT_FOUND)
   146             #self.Expression.Enable(var_class == INPUT)
       
   147         self.VariableName.Enable(self.VariableName.GetCount() > 0)
   141         self.VariableName.Enable(self.VariableName.GetCount() > 0)
   148             
   142             
   149     def SetMinVariableSize(self, size):
   143     def SetMinVariableSize(self, size):
   150         self.MinVariableSize = size
   144         self.MinVariableSize = size
   151 
   145 
   158         value_name = values.get("name", None)
   152         value_name = values.get("name", None)
   159         if value_type:
   153         if value_type:
   160             self.Class.SetStringSelection(VARIABLE_CLASSES_DICT[value_type])
   154             self.Class.SetStringSelection(VARIABLE_CLASSES_DICT[value_type])
   161             self.RefreshNameList()
   155             self.RefreshNameList()
   162         if value_name:
   156         if value_name:
       
   157             self.Expression.ChangeValue(value_name)
   163             if self.VariableName.FindString(value_name) != wx.NOT_FOUND:
   158             if self.VariableName.FindString(value_name) != wx.NOT_FOUND:
   164                 self.VariableName.SetStringSelection(value_name)
   159                 self.VariableName.SetStringSelection(value_name)
   165                 self.Expression.Enable(False)
       
   166             else:
   160             else:
   167                 self.Expression.SetValue(value_name)
   161                 self.VariableName.SetSelection(wx.NOT_FOUND)
   168                 self.VariableName.Enable(False)
       
   169         if "executionOrder" in values:
   162         if "executionOrder" in values:
   170             self.ExecutionOrder.SetValue(values["executionOrder"])
   163             self.ExecutionOrder.SetValue(values["executionOrder"])
   171         self.RefreshPreview()
   164         self.RefreshPreview()
   172         
   165         
   173     def GetValues(self):
   166     def GetValues(self):
   174         values = {}
   167         values = {}
   175         values["type"] = VARIABLE_CLASSES_DICT_REVERSE[self.Class.GetStringSelection()]
   168         values["type"] = VARIABLE_CLASSES_DICT_REVERSE[self.Class.GetStringSelection()]
   176         expression = self.Expression.GetValue()
   169         values["name"] = self.Expression.GetValue()
   177         if self.Expression.IsEnabled() and expression != "":
       
   178             values["name"] = expression
       
   179         else:
       
   180             values["name"] = self.VariableName.GetStringSelection()
       
   181         values["value_type"] = None
   170         values["value_type"] = None
   182         for var_name, var_type, value_type in self.VarList:
   171         for var_name, var_type, value_type in self.VarList:
   183             if var_name == values["name"]:
   172             if var_name == values["name"]:
   184                 values["value_type"] = value_type
   173                 values["value_type"] = value_type
   185         values["width"], values["height"] = self.Variable.GetSize()
   174         values["width"], values["height"] = self.Variable.GetSize()
   186         values["executionOrder"] = self.ExecutionOrder.GetValue()
   175         values["executionOrder"] = self.ExecutionOrder.GetValue()
   187         return values
   176         return values
   188 
   177 
   189     def OnOK(self, event):
   178     def OnOK(self, event):
   190         message = None
   179         message = None
   191         expression = self.Expression.GetValue()
   180         value = self.Expression.GetValue()
   192         if self.Expression.IsEnabled():
       
   193             value = expression
       
   194         else:
       
   195             value = self.VariableName.GetStringSelection()
       
   196         if value == "":
   181         if value == "":
   197             message = _("At least a variable or an expression must be selected!")
   182             message = _("At least a variable or an expression must be selected!")
   198         elif value.upper() in IEC_KEYWORDS:
   183         elif value.upper() in IEC_KEYWORDS:
   199             message = _("\"%s\" is a keyword. It can't be used!") % value
   184             message = _("\"%s\" is a keyword. It can't be used!") % value
   200         if message is not None:
   185         if message is not None:
   208         self.RefreshNameList()
   193         self.RefreshNameList()
   209         self.RefreshPreview()
   194         self.RefreshPreview()
   210         event.Skip()
   195         event.Skip()
   211 
   196 
   212     def OnNameChanged(self, event):
   197     def OnNameChanged(self, event):
   213         if self.VariableName.GetStringSelection() != "":
   198         self.Expression.ChangeValue(
   214             self.Expression.Enable(False)
   199             self.VariableName.GetStringSelection())
   215         elif VARIABLE_CLASSES_DICT_REVERSE[self.Class.GetStringSelection()] == INPUT:
       
   216             self.Expression.Enable(True)
       
   217         self.RefreshPreview()
   200         self.RefreshPreview()
   218         event.Skip()
   201         event.Skip()
   219     
   202     
   220     def OnExpressionChanged(self, event):
   203     def OnExpressionChanged(self, event):
   221         if self.Expression.GetValue() != "":
   204         expression = self.Expression.GetValue()
   222             self.VariableName.Enable(False)
   205         self.VariableName.SetSelection(
   223         else:
   206             self.VariableName.FindString(expression))
   224             self.VariableName.Enable(True)
       
   225         self.RefreshPreview()
   207         self.RefreshPreview()
   226         event.Skip()
   208         event.Skip()
   227     
   209     
   228     def OnExecutionOrderChanged(self, event):
   210     def OnExecutionOrderChanged(self, event):
   229         self.RefreshPreview()
   211         self.RefreshPreview()
   231     
   213     
   232     def RefreshPreview(self):
   214     def RefreshPreview(self):
   233         dc = wx.ClientDC(self.Preview)
   215         dc = wx.ClientDC(self.Preview)
   234         dc.SetFont(self.Preview.GetFont())
   216         dc.SetFont(self.Preview.GetFont())
   235         dc.Clear()
   217         dc.Clear()
   236         expression = self.Expression.GetValue()
   218         name = self.Expression.GetValue()
   237         if self.Expression.IsEnabled() and expression != "":
       
   238             name = expression
       
   239         else:
       
   240             name = self.VariableName.GetStringSelection()
       
   241         type = ""
   219         type = ""
   242         for var_name, var_type, value_type in self.VarList:
   220         for var_name, var_type, value_type in self.VarList:
   243             if var_name == name:
   221             if var_name == name:
   244                 type = value_type
   222                 type = value_type
   245         classtype = VARIABLE_CLASSES_DICT_REVERSE[self.Class.GetStringSelection()]
   223         classtype = VARIABLE_CLASSES_DICT_REVERSE[self.Class.GetStringSelection()]