dialogs/FBDVariableDialog.py
author Andrey Skvortsov <andrej.skvortzov@gmail.com>
Wed, 28 Dec 2016 16:33:50 +0300
changeset 1616 3638463d6e02
parent 1571 486f94a8032c
child 1696 8043f32de7b8
permissions -rw-r--r--
fix issue with creating SFC transitions using ST and IL

Beremiz generates text representation for transitions without names.
Therefore transition name in its IL code is not needed.
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
     1
#!/usr/bin/env python
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
     2
# -*- coding: utf-8 -*-
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
     3
1571
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1259
diff changeset
     4
# This file is part of Beremiz, a Integrated Development Environment for
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1259
diff changeset
     5
# programming IEC 61131-3 automates supporting plcopen standard and CanFestival.
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1259
diff changeset
     6
#
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1259
diff changeset
     7
# Copyright (C) 2007: Edouard TISSERANT and Laurent BESSARD
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1259
diff changeset
     8
#
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1259
diff changeset
     9
# See COPYING file for copyrights details.
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1259
diff changeset
    10
#
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1259
diff changeset
    11
# This program is free software; you can redistribute it and/or
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1259
diff changeset
    12
# modify it under the terms of the GNU General Public License
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1259
diff changeset
    13
# as published by the Free Software Foundation; either version 2
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1259
diff changeset
    14
# of the License, or (at your option) any later version.
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1259
diff changeset
    15
#
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1259
diff changeset
    16
# This program is distributed in the hope that it will be useful,
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1259
diff changeset
    17
# but WITHOUT ANY WARRANTY; without even the implied warranty of
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1259
diff changeset
    18
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1259
diff changeset
    19
# GNU General Public License for more details.
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1259
diff changeset
    20
#
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1259
diff changeset
    21
# You should have received a copy of the GNU General Public License
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1259
diff changeset
    22
# along with this program; if not, write to the Free Software
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1259
diff changeset
    23
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    24
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    25
import wx
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    26
1244
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
    27
from graphics.GraphicCommons import INPUT, INOUT, OUTPUT
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
    28
from graphics.FBD_Objects import FBD_Variable
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
    29
from BlockPreviewDialog import BlockPreviewDialog
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    30
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    31
#-------------------------------------------------------------------------------
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    32
#                                    Helpers
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    33
#-------------------------------------------------------------------------------
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    34
1244
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
    35
# Dictionaries containing correspondence between variable block class and string
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
    36
# to be shown in Class combo box in both sense
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    37
VARIABLE_CLASSES_DICT = {INPUT : _("Input"),
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    38
                         INOUT : _("InOut"),
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    39
                         OUTPUT : _("Output")}
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    40
VARIABLE_CLASSES_DICT_REVERSE = dict(
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    41
    [(value, key) for key, value in VARIABLE_CLASSES_DICT.iteritems()])
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    42
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    43
#-------------------------------------------------------------------------------
1244
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
    44
#                        Set Variable Parameters Dialog
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    45
#-------------------------------------------------------------------------------
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    46
1244
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
    47
"""
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
    48
Class that implements a dialog for defining parameters of a FBD variable graphic
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
    49
element
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
    50
"""
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
    51
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
    52
class FBDVariableDialog(BlockPreviewDialog):
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
    53
1259
8350222a81c3 Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents: 1250
diff changeset
    54
    def __init__(self, parent, controller, tagname, exclude_input=False):
1244
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
    55
        """
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
    56
        Constructor
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
    57
        @param parent: Parent wx.Window of dialog for modal
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
    58
        @param controller: Reference to project controller
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
    59
        @param tagname: Tagname of project POU edited
1259
8350222a81c3 Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents: 1250
diff changeset
    60
        @param exclude_input: Exclude input from variable class selection
1244
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
    61
        """
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
    62
        BlockPreviewDialog.__init__(self, parent, controller, tagname,
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    63
              size=wx.Size(400, 380), title=_('Variable Properties'))
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    64
        
1250
7e6de17c687a Rewrite SFCStepDialog and factorize code for creating common dialog sizers
Laurent Bessard
parents: 1246
diff changeset
    65
        # Init common sizers
7e6de17c687a Rewrite SFCStepDialog and factorize code for creating common dialog sizers
Laurent Bessard
parents: 1246
diff changeset
    66
        self._init_sizers(4, 2, 4, None, 3, 2)
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    67
        
1244
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
    68
        # Create label for variable class
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    69
        class_label = wx.StaticText(self, label=_('Class:'))
1250
7e6de17c687a Rewrite SFCStepDialog and factorize code for creating common dialog sizers
Laurent Bessard
parents: 1246
diff changeset
    70
        self.LeftGridSizer.AddWindow(class_label, flag=wx.GROW)
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    71
        
1244
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
    72
        # Create a combo box for defining variable class
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    73
        self.Class = wx.ComboBox(self, style=wx.CB_READONLY)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    74
        self.Bind(wx.EVT_COMBOBOX, self.OnClassChanged, self.Class)
1250
7e6de17c687a Rewrite SFCStepDialog and factorize code for creating common dialog sizers
Laurent Bessard
parents: 1246
diff changeset
    75
        self.LeftGridSizer.AddWindow(self.Class, flag=wx.GROW)
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    76
        
1244
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
    77
        # Create label for variable execution order
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
    78
        execution_order_label = wx.StaticText(self, 
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
    79
              label=_('Execution Order:'))
1250
7e6de17c687a Rewrite SFCStepDialog and factorize code for creating common dialog sizers
Laurent Bessard
parents: 1246
diff changeset
    80
        self.LeftGridSizer.AddWindow(execution_order_label, flag=wx.GROW)
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    81
        
1244
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
    82
        # Create spin control for defining variable execution order
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    83
        self.ExecutionOrder = wx.SpinCtrl(self, min=0, style=wx.SP_ARROW_KEYS)
1244
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
    84
        self.Bind(wx.EVT_SPINCTRL, self.OnExecutionOrderChanged, 
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
    85
                  self.ExecutionOrder)
1250
7e6de17c687a Rewrite SFCStepDialog and factorize code for creating common dialog sizers
Laurent Bessard
parents: 1246
diff changeset
    86
        self.LeftGridSizer.AddWindow(self.ExecutionOrder, flag=wx.GROW)
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    87
        
1244
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
    88
        # Create label for variable expression
1182
208103fd9ad0 Improved FBDVariable dialog
Laurent Bessard
parents: 814
diff changeset
    89
        name_label = wx.StaticText(self, label=_('Expression:'))
1250
7e6de17c687a Rewrite SFCStepDialog and factorize code for creating common dialog sizers
Laurent Bessard
parents: 1246
diff changeset
    90
        self.RightGridSizer.AddWindow(name_label, border=5, 
7e6de17c687a Rewrite SFCStepDialog and factorize code for creating common dialog sizers
Laurent Bessard
parents: 1246
diff changeset
    91
              flag=wx.GROW|wx.BOTTOM)
1182
208103fd9ad0 Improved FBDVariable dialog
Laurent Bessard
parents: 814
diff changeset
    92
        
1244
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
    93
        # Create text control for defining variable expression
1182
208103fd9ad0 Improved FBDVariable dialog
Laurent Bessard
parents: 814
diff changeset
    94
        self.Expression = wx.TextCtrl(self)
208103fd9ad0 Improved FBDVariable dialog
Laurent Bessard
parents: 814
diff changeset
    95
        self.Bind(wx.EVT_TEXT, self.OnExpressionChanged, self.Expression)
1250
7e6de17c687a Rewrite SFCStepDialog and factorize code for creating common dialog sizers
Laurent Bessard
parents: 1246
diff changeset
    96
        self.RightGridSizer.AddWindow(self.Expression, flag=wx.GROW)
1182
208103fd9ad0 Improved FBDVariable dialog
Laurent Bessard
parents: 814
diff changeset
    97
        
1244
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
    98
        # Create a list box to selected variable expression in the list of
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
    99
        # variables defined in POU
1182
208103fd9ad0 Improved FBDVariable dialog
Laurent Bessard
parents: 814
diff changeset
   100
        self.VariableName = wx.ListBox(self, size=wx.Size(0, 120), 
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   101
              style=wx.LB_SINGLE|wx.LB_SORT)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   102
        self.Bind(wx.EVT_LISTBOX, self.OnNameChanged, self.VariableName)
1250
7e6de17c687a Rewrite SFCStepDialog and factorize code for creating common dialog sizers
Laurent Bessard
parents: 1246
diff changeset
   103
        self.RightGridSizer.AddWindow(self.VariableName, flag=wx.GROW)
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   104
        
1244
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   105
        # Add preview panel and associated label to sizers
1250
7e6de17c687a Rewrite SFCStepDialog and factorize code for creating common dialog sizers
Laurent Bessard
parents: 1246
diff changeset
   106
        self.MainSizer.AddWindow(self.PreviewLabel, border=20,
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   107
              flag=wx.GROW|wx.LEFT|wx.RIGHT)
1250
7e6de17c687a Rewrite SFCStepDialog and factorize code for creating common dialog sizers
Laurent Bessard
parents: 1246
diff changeset
   108
        self.MainSizer.AddWindow(self.Preview, border=20,
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   109
              flag=wx.GROW|wx.LEFT|wx.RIGHT)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   110
        
1244
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   111
        # Add buttons sizer to sizers
1250
7e6de17c687a Rewrite SFCStepDialog and factorize code for creating common dialog sizers
Laurent Bessard
parents: 1246
diff changeset
   112
        self.MainSizer.AddSizer(self.ButtonSizer, border=20, 
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   113
              flag=wx.ALIGN_RIGHT|wx.BOTTOM|wx.LEFT|wx.RIGHT)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   114
        
1244
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   115
        # Set options that can be selected in class combo box
1259
8350222a81c3 Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents: 1250
diff changeset
   116
        for var_class, choice in VARIABLE_CLASSES_DICT.iteritems():
8350222a81c3 Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents: 1250
diff changeset
   117
            if not exclude_input or var_class != INPUT:
8350222a81c3 Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents: 1250
diff changeset
   118
                self.Class.Append(choice)
8350222a81c3 Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents: 1250
diff changeset
   119
        self.Class.SetSelection(0)
1244
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   120
        
1246
101625efb1c1 Rewrite LDElementDialog
Laurent Bessard
parents: 1244
diff changeset
   121
        # Extract list of variables defined in POU
101625efb1c1 Rewrite LDElementDialog
Laurent Bessard
parents: 1244
diff changeset
   122
        self.RefreshVariableList()
1244
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   123
        
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   124
        # Refresh values in name list box
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   125
        self.RefreshNameList()
1244
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   126
        
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   127
        # Class combo box is default control having keyboard focus
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   128
        self.Class.SetFocus()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   129
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   130
    def RefreshNameList(self):
1244
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   131
        """
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   132
        Called to refresh names in name list box
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   133
        """
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   134
        # Get variable class to select POU variable applicable
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   135
        var_class = VARIABLE_CLASSES_DICT_REVERSE[
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   136
                            self.Class.GetStringSelection()]
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   137
        
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   138
        # Refresh names in name list box by selecting variables in POU variables
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   139
        # list that can be applied to variable class
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   140
        self.VariableName.Clear()
1246
101625efb1c1 Rewrite LDElementDialog
Laurent Bessard
parents: 1244
diff changeset
   141
        for name, (var_type, value_type) in self.VariableList.iteritems():
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   142
            if var_type != "Input" or var_class == INPUT:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   143
                self.VariableName.Append(name)
1244
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   144
        
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   145
        # Get variable expression and select corresponding value in name list
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   146
        # box if it exists
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   147
        selected = self.Expression.GetValue()
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   148
        if (selected != "" and 
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   149
            self.VariableName.FindString(selected) != wx.NOT_FOUND):
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   150
            self.VariableName.SetStringSelection(selected)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   151
        else:
1182
208103fd9ad0 Improved FBDVariable dialog
Laurent Bessard
parents: 814
diff changeset
   152
            self.VariableName.SetSelection(wx.NOT_FOUND)
1244
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   153
        
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   154
        # Disable name list box if no name present inside
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   155
        self.VariableName.Enable(self.VariableName.GetCount() > 0)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   156
            
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   157
    def SetValues(self, values):
1244
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   158
        """
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   159
        Set default variable parameters
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   160
        @param values: Variable parameters values
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   161
        """
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   162
        
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   163
        # Get class parameter value
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   164
        var_class = values.get("class", None)
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   165
        if var_class is not None:
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   166
            # Set class selected in class combo box
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   167
            self.Class.SetStringSelection(VARIABLE_CLASSES_DICT[var_class])
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   168
            # Refresh names in name list box according to var class
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   169
            self.RefreshNameList()
1244
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   170
        
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   171
        # For each parameters defined, set corresponding control value
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   172
        for name, value in values.items():
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   173
            
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   174
            # Parameter is variable expression
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   175
            if name == "expression":
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   176
                # Set expression text control value
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   177
                self.Expression.ChangeValue(value)
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   178
                # Select corresponding text in name list box if it exists
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   179
                if self.VariableName.FindString(value) != wx.NOT_FOUND:
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   180
                    self.VariableName.SetStringSelection(value)
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   181
                else:
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   182
                    self.VariableName.SetSelection(wx.NOT_FOUND)
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   183
            
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   184
            # Parameter is variable execution order
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   185
            elif name == "executionOrder":
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   186
                self.ExecutionOrder.SetValue(value)
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   187
        
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   188
        # Refresh preview panel
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   189
        self.RefreshPreview()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   190
        
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   191
    def GetValues(self):
1244
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   192
        """
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   193
        Return block parameters defined in dialog
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   194
        @return: {parameter_name: parameter_value,...}
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   195
        """
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   196
        expression = self.Expression.GetValue()
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   197
        values = {
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   198
            "class": VARIABLE_CLASSES_DICT_REVERSE[
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   199
                        self.Class.GetStringSelection()],
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   200
            "expression": expression,
1246
101625efb1c1 Rewrite LDElementDialog
Laurent Bessard
parents: 1244
diff changeset
   201
            "var_type": self.VariableList.get(expression, (None, None))[1],
1244
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   202
            "executionOrder": self.ExecutionOrder.GetValue()}
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   203
        values["width"], values["height"] = self.Element.GetSize()
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   204
        return values
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   205
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   206
    def OnOK(self, event):
1244
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   207
        """
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   208
        Called when dialog OK button is pressed
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   209
        Test if parameters defined are valid
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   210
        @param event: wx.Event from OK button
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   211
        """
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   212
        message = None
1244
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   213
        
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   214
        # Test that an expression have been selected or typed by user
1182
208103fd9ad0 Improved FBDVariable dialog
Laurent Bessard
parents: 814
diff changeset
   215
        value = self.Expression.GetValue()
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   216
        if value == "":
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   217
            message = _("At least a variable or an expression must be selected!")
1244
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   218
        
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   219
        # Show error message if an error is detected
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   220
        if message is not None:
1244
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   221
            self.ShowErrorMessage(message)
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   222
        
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   223
        else:
1244
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   224
            # Call BlockPreviewDialog function
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   225
            BlockPreviewDialog.OnOK(self, event)
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   226
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   227
    def OnClassChanged(self, event):
1244
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   228
        """
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   229
        Called when variable class value changed
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   230
        @param event: wx.ComboBoxEvent
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   231
        """
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   232
        # Refresh name list box values
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   233
        self.RefreshNameList()
1244
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   234
        
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   235
        self.RefreshPreview()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   236
        event.Skip()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   237
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   238
    def OnNameChanged(self, event):
1244
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   239
        """
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   240
        Called when name selected in name list box changed
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   241
        @param event: wx.ListBoxEvent
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   242
        """
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   243
        # Change expression test control value to the value selected in name
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   244
        # list box if value selected is valid
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   245
        if self.VariableName.GetSelection() != wx.NOT_FOUND:
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   246
            self.Expression.ChangeValue(self.VariableName.GetStringSelection())
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   247
        
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   248
        self.RefreshPreview()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   249
        event.Skip()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   250
    
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   251
    def OnExpressionChanged(self, event):
1244
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   252
        """
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   253
        Called when expression text control is changed by user
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   254
        @param event: wx.ListBoxEvent
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   255
        """
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   256
        # Select the corresponding value in name list box if it exists
1182
208103fd9ad0 Improved FBDVariable dialog
Laurent Bessard
parents: 814
diff changeset
   257
        self.VariableName.SetSelection(
1244
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   258
            self.VariableName.FindString(self.Expression.GetValue()))
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   259
        
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   260
        self.RefreshPreview()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   261
        event.Skip()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   262
    
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   263
    def OnExecutionOrderChanged(self, event):
1244
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   264
        """
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   265
        Called when block execution control value changed
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   266
        @param event: wx.SpinEvent
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   267
        """
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   268
        self.RefreshPreview()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   269
        event.Skip()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   270
    
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   271
    def RefreshPreview(self):
1244
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   272
        """
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   273
        Refresh preview panel of graphic element
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   274
        Override BlockPreviewDialog function
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   275
        """
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   276
        # Get expression value to put in FBD variable element
1182
208103fd9ad0 Improved FBDVariable dialog
Laurent Bessard
parents: 814
diff changeset
   277
        name = self.Expression.GetValue()
1244
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   278
        
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   279
        # Set graphic element displayed, creating a FBD variable element
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   280
        self.Element = FBD_Variable(self.Preview, 
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   281
                    VARIABLE_CLASSES_DICT_REVERSE[
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   282
                        self.Class.GetStringSelection()], 
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   283
                    name, 
1246
101625efb1c1 Rewrite LDElementDialog
Laurent Bessard
parents: 1244
diff changeset
   284
                    self.VariableList.get(name, ("", ""))[1], 
1244
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   285
                    executionOrder = self.ExecutionOrder.GetValue())
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   286
        
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   287
        # Call BlockPreviewDialog function
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   288
        BlockPreviewDialog.RefreshPreview(self)
336d515096b1 Rewrite FBDVariableDialog
Laurent Bessard
parents: 1187
diff changeset
   289
        
1571
486f94a8032c fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1259
diff changeset
   290