DataTypeEditor.py
author laurent
Wed, 12 Oct 2011 23:47:48 +0200
changeset 576 3f2024f30553
parent 566 6014ef82a98a
child 577 9dbb79722fbc
permissions -rw-r--r--
Adding support for searching pattern in datatype elements
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
     1
#!/usr/bin/env python
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
     2
# -*- coding: utf-8 -*-
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
     3
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
     4
#This file is part of PLCOpenEditor, a library implementing an IEC 61131-3 editor
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
     5
#based on the plcopen standard. 
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
     6
#
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
     7
#Copyright (C) 2007: Edouard TISSERANT and Laurent BESSARD
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
     8
#
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
     9
#See COPYING file for copyrights details.
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
    10
#
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
    11
#This library is free software; you can redistribute it and/or
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
    12
#modify it under the terms of the GNU General Public
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
    13
#License as published by the Free Software Foundation; either
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
    14
#version 2.1 of the License, or (at your option) any later version.
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
    15
#
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
    16
#This library is distributed in the hope that it will be useful,
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
    17
#but WITHOUT ANY WARRANTY; without even the implied warranty of
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
    18
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
    19
#General Public License for more details.
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
    20
#
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
    21
#You should have received a copy of the GNU General Public
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
    22
#License along with this library; if not, write to the Free Software
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
    23
#Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
    24
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
    25
import wx
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
    26
import wx.grid
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
    27
import wx.gizmos
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    28
from plcopen.structures import IEC_KEYWORDS, TestIdentifier
566
6014ef82a98a Adding support for searching text or regular expression in whole project
laurent
parents: 556
diff changeset
    29
from graphics.GraphicCommons import REFRESH_HIGHLIGHT_PERIOD
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
    30
207
b1144bb36605 Bug with array dimensions edition fixed
lbessard
parents: 205
diff changeset
    31
import re
b1144bb36605 Bug with array dimensions edition fixed
lbessard
parents: 205
diff changeset
    32
b1144bb36605 Bug with array dimensions edition fixed
lbessard
parents: 205
diff changeset
    33
DIMENSION_MODEL = re.compile("([0-9]+)\.\.([0-9]+)$")
b1144bb36605 Bug with array dimensions edition fixed
lbessard
parents: 205
diff changeset
    34
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    35
def AppendMenu(parent, help, id, kind, text):
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    36
    if wx.VERSION >= (2, 6, 0):
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    37
        parent.Append(help=help, id=id, kind=kind, text=text)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    38
    else:
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    39
        parent.Append(helpString=help, id=id, kind=kind, item=text)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    40
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    41
#-------------------------------------------------------------------------------
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    42
#                            Structure Elements Table
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    43
#-------------------------------------------------------------------------------
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    44
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
    45
def GetElementsTableColnames():
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
    46
    _ = lambda x : x
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
    47
    return ["#", _("Name"), _("Type"), _("Initial Value")]
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
    48
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    49
class ElementsTable(wx.grid.PyGridTableBase):
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    50
    
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    51
    """
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    52
    A custom wx.grid.Grid Table using user supplied data
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    53
    """
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    54
    def __init__(self, parent, data, colnames):
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    55
        # The base class must be initialized *first*
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    56
        wx.grid.PyGridTableBase.__init__(self)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    57
        self.data = data
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    58
        self.old_value = None
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    59
        self.colnames = colnames
576
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
    60
        self.Highlights = {}
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    61
        self.Parent = parent
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    62
        # XXX
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    63
        # we need to store the row length and collength to
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    64
        # see if the table has changed size
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    65
        self._rows = self.GetNumberRows()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    66
        self._cols = self.GetNumberCols()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    67
    
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    68
    def GetNumberCols(self):
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    69
        return len(self.colnames)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    70
        
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    71
    def GetNumberRows(self):
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    72
        return len(self.data)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    73
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
    74
    def GetColLabelValue(self, col, translate=True):
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    75
        if col < len(self.colnames):
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
    76
            if translate:
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
    77
                return _(self.colnames[col])
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    78
            return self.colnames[col]
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    79
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
    80
    def GetRowLabelValues(self, row, translate=True):
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    81
        return row
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    82
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    83
    def GetValue(self, row, col):
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    84
        if row < self.GetNumberRows():
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    85
            if col == 0:
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    86
                return row + 1
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
    87
            name = str(self.data[row].get(self.GetColLabelValue(col, False), ""))
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    88
            return name
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    89
    
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    90
    def SetValue(self, row, col, value):
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    91
        if col < len(self.colnames):
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
    92
            colname = self.GetColLabelValue(col, False)
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    93
            if colname == "Name":
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    94
                self.old_value = self.data[row][colname]
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    95
            self.data[row][colname] = value
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    96
    
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    97
    def GetValueByName(self, row, colname):
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    98
        if row < self.GetNumberRows():
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
    99
            return self.data[row].get(colname)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   100
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   101
    def SetValueByName(self, row, colname, value):
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   102
        if row < self.GetNumberRows():
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   103
            self.data[row][colname] = value
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   104
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   105
    def GetOldValue(self):
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   106
        return self.old_value
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   107
    
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   108
    def ResetView(self, grid):
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   109
        """
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   110
        (wx.grid.Grid) -> Reset the grid view.   Call this to
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   111
        update the grid if rows and columns have been added or deleted
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   112
        """
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   113
        grid.BeginBatch()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   114
        for current, new, delmsg, addmsg in [
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   115
            (self._rows, self.GetNumberRows(), wx.grid.GRIDTABLE_NOTIFY_ROWS_DELETED, wx.grid.GRIDTABLE_NOTIFY_ROWS_APPENDED),
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   116
            (self._cols, self.GetNumberCols(), wx.grid.GRIDTABLE_NOTIFY_COLS_DELETED, wx.grid.GRIDTABLE_NOTIFY_COLS_APPENDED),
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   117
        ]:
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   118
            if new < current:
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   119
                msg = wx.grid.GridTableMessage(self,delmsg,new,current-new)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   120
                grid.ProcessTableMessage(msg)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   121
            elif new > current:
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   122
                msg = wx.grid.GridTableMessage(self,addmsg,new-current)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   123
                grid.ProcessTableMessage(msg)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   124
                self.UpdateValues(grid)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   125
        grid.EndBatch()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   126
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   127
        self._rows = self.GetNumberRows()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   128
        self._cols = self.GetNumberCols()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   129
        # update the column rendering scheme
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   130
        self._updateColAttrs(grid)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   131
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   132
        # update the scrollbars and the displayed part of the grid
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   133
        grid.AdjustScrollbars()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   134
        grid.ForceRefresh()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   135
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   136
    def UpdateValues(self, grid):
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   137
        """Update all displayed values"""
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   138
        # This sends an event to the grid table to update all of the values
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   139
        msg = wx.grid.GridTableMessage(self, wx.grid.GRIDTABLE_REQUEST_VIEW_GET_VALUES)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   140
        grid.ProcessTableMessage(msg)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   141
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   142
    def _updateColAttrs(self, grid):
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   143
        """
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   144
        wx.grid.Grid -> update the column attributes to add the
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   145
        appropriate renderer given the column name.
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   146
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   147
        Otherwise default to the default renderer.
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   148
        """
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   149
        
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   150
        for row in range(self.GetNumberRows()):
576
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   151
            row_highlights = self.Highlights.get(row, {})
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   152
            for col in range(self.GetNumberCols()):
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   153
                editor = None
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   154
                renderer = None
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   155
                colname = self.GetColLabelValue(col, False)
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   156
                if col != 0:
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   157
                    grid.SetReadOnly(row, col, False)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   158
                    if colname == "Name":
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   159
                        editor = wx.grid.GridCellTextEditor()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   160
                        renderer = wx.grid.GridCellStringRenderer()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   161
                    elif colname == "Initial Value":
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   162
                        editor = wx.grid.GridCellTextEditor()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   163
                        renderer = wx.grid.GridCellStringRenderer()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   164
                    elif colname == "Type":
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   165
                        editor = wx.grid.GridCellTextEditor()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   166
                else:
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   167
                    grid.SetReadOnly(row, col, True)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   168
                
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   169
                grid.SetCellEditor(row, col, editor)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   170
                grid.SetCellRenderer(row, col, renderer)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   171
                
576
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   172
                highlight_colours = row_highlights.get(colname.lower(), [(wx.WHITE, wx.BLACK)])[-1]
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   173
                grid.SetCellBackgroundColour(row, col, highlight_colours[0])
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   174
                grid.SetCellTextColour(row, col, highlight_colours[1])
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   175
            if wx.Platform == '__WXMSW__':
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   176
                grid.SetRowMinimalHeight(row, 20)
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   177
            else:
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   178
                grid.SetRowMinimalHeight(row, 28)
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   179
            grid.AutoSizeRow(row, False)
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   180
    
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   181
    def SetData(self, data):
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   182
        self.data = data
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   183
    
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   184
    def GetData(self):
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   185
        return self.data
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   186
    
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   187
    def AppendRow(self, row_content):
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   188
        self.data.append(row_content)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   189
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   190
    def RemoveRow(self, row_index):
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   191
        self.data.pop(row_index)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   192
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   193
    def MoveRow(self, idx, move):
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   194
        new_idx = max(0, min(idx + move, len(self.data) - 1))
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   195
        if new_idx != idx:
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   196
            self.data.insert(new_idx, self.data.pop(idx))
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   197
            return new_idx
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   198
        return None
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   199
    
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   200
    def GetRow(self, row_index):
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   201
        return self.data[row_index]
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   202
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   203
    def Empty(self):
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   204
        self.data = []
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   205
        self.editors = []
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   206
576
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   207
    def AddHighlight(self, infos, highlight_type):
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   208
        row_highlights = self.Highlights.setdefault(infos[0], {})
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   209
        if infos[1] == "initial":
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   210
            col_highlights = row_highlights.setdefault("initial value", [])
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   211
        else:
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   212
            col_highlights = row_highlights.setdefault(infos[1], [])
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   213
        col_highlights.append(highlight_type)
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   214
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   215
    def ClearHighlights(self, highlight_type=None):
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   216
        if highlight_type is None:
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   217
            self.Highlights = {}
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   218
        else:
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   219
            for row, row_highlights in self.Highlights.iteritems():
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   220
                row_items = row_highlights.items()
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   221
                for col, col_highlights in row_items:
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   222
                    if highlight_type in col_highlights:
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   223
                        col_highlights.remove(highlight_type)
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   224
                    if len(col_highlights) == 0:
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   225
                        row_highlights.pop(col)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   226
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   227
#-------------------------------------------------------------------------------
379
e4c26ee9c998 Code rewritten, replacing all list containing tests by dict key defining tests
laurent
parents: 313
diff changeset
   228
#                          Datatype Editor class
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   229
#-------------------------------------------------------------------------------
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   230
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   231
[ID_DATATYPEEDITOR, ID_DATATYPEEDITORSTATICBOX,
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   232
 ID_DATATYPEEDITORDERIVATIONTYPE, ID_DATATYPEEDITORDIRECTLYPANEL,
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   233
 ID_DATATYPEEDITORSUBRANGEPANEL, ID_DATATYPEEDITORDIRECTLYBASETYPE, 
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   234
 ID_DATATYPEEDITORSUBRANGEBASETYPE, ID_DATATYPEEDITORSUBRANGEMINIMUM, 
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   235
 ID_DATATYPEEDITORSUBRANGEMAXIMUM, ID_DATATYPEEDITORDIRECTLYINITIALVALUE, 
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   236
 ID_DATATYPEEDITORSUBRANGEINITIALVALUE, ID_DATATYPEEDITORENUMERATEDPANEL,
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   237
 ID_DATATYPEEDITORENUMERATEDVALUES, ID_DATATYPEEDITORENUMERATEDINITIALVALUE,
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   238
 ID_DATATYPEEDITORARRAYPANEL, ID_DATATYPEEDITORARRAYBASETYPE, 
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   239
 ID_DATATYPEEDITORARRAYDIMENSIONS, ID_DATATYPEEDITORARRAYINITIALVALUE, 
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   240
 ID_DATATYPEEDITORSTRUCTUREPANEL, ID_DATATYPEEDITORSTRUCTUREELEMENTSGRID,
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   241
 ID_DATATYPEEDITORSTRUCTUREADDBUTTON, ID_DATATYPEEDITORSTRUCTUREDELETEBUTTON,
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   242
 ID_DATATYPEEDITORSTRUCTUREUPBUTTON, ID_DATATYPEEDITORSTRUCTUREDOWNBUTTON,
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   243
 ID_DATATYPEEDITORSTATICTEXT1, ID_DATATYPEEDITORSTATICTEXT2, 
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   244
 ID_DATATYPEEDITORSTATICTEXT3, ID_DATATYPEEDITORSTATICTEXT4, 
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   245
 ID_DATATYPEEDITORSTATICTEXT5, ID_DATATYPEEDITORSTATICTEXT6, 
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   246
 ID_DATATYPEEDITORSTATICTEXT7, ID_DATATYPEEDITORSTATICTEXT8,
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   247
 ID_DATATYPEEDITORSTATICTEXT9, ID_DATATYPEEDITORSTATICTEXT10, 
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   248
 ID_DATATYPEEDITORSTATICTEXT11, 
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   249
] = [wx.NewId() for _init_ctrls in range(35)]
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   250
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   251
def GetDatatypeTypes():
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   252
    _ = lambda x : x
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   253
    return [_("Directly"), _("Subrange"), _("Enumerated"), _("Array"), _("Structure")]
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   254
DATATYPE_TYPES_DICT = dict([(_(datatype), datatype) for datatype in GetDatatypeTypes()])
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   255
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   256
class DataTypeEditor(wx.Panel):
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   257
    
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   258
    def _init_coll_MainSizer_Items(self, parent):
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   259
        parent.AddSizer(self.TopSizer, 0, border=5, flag=wx.GROW|wx.TOP|wx.LEFT|wx.RIGHT)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   260
        parent.AddSizer(self.TypeInfosSizer, 0, border=5, flag=wx.GROW|wx.BOTTOM|wx.LEFT|wx.RIGHT)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   261
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   262
    def _init_coll_MainSizer_Growables(self, parent):
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   263
        parent.AddGrowableCol(0)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   264
        parent.AddGrowableRow(1)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   265
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   266
    def _init_coll_TopSizer_Items(self, parent):
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   267
        parent.AddWindow(self.staticText1, 0, border=5, flag=wx.ALIGN_CENTER_VERTICAL|wx.LEFT|wx.RIGHT)
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   268
        parent.AddWindow(self.DerivationType, 0, border=5, flag=wx.GROW|wx.RIGHT)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   269
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   270
    def _init_coll_TypeInfosSizer_Items(self, parent):
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   271
        parent.AddWindow(self.DirectlyPanel, 1, border=0, flag=wx.ALL)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   272
        parent.AddWindow(self.SubrangePanel, 1, border=0, flag=wx.ALL)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   273
        parent.AddWindow(self.EnumeratedPanel, 1, border=0, flag=wx.GROW|wx.ALL)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   274
        parent.AddWindow(self.ArrayPanel, 1, border=0, flag=wx.ALL)
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   275
        parent.AddWindow(self.StructurePanel, 1, border=0, flag=wx.GROW|wx.ALL)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   276
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   277
    def _init_coll_DirectlyPanelSizer_Items(self, parent):
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   278
        parent.AddWindow(self.staticText2, 1, border=5, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   279
        parent.AddWindow(self.DirectlyBaseType, 1, border=5, flag=wx.GROW|wx.ALL)
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   280
        parent.AddWindow(self.staticText3, 1, border=5, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL)
566
6014ef82a98a Adding support for searching text or regular expression in whole project
laurent
parents: 556
diff changeset
   281
        parent.AddWindow(self.DirectlyInitialValue, 1, border=5, flag=wx.ALL)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   282
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   283
    def _init_coll_SubrangePanelSizer_Items(self, parent):
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   284
        parent.AddWindow(self.staticText4, 1, border=5, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   285
        parent.AddWindow(self.SubrangeBaseType, 1, border=5, flag=wx.GROW|wx.ALL)
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   286
        parent.AddWindow(self.staticText5, 1, border=5, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   287
        parent.AddWindow(self.SubrangeInitialValue, 1, border=5, flag=wx.GROW|wx.ALL)
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   288
        parent.AddWindow(self.staticText6, 1, border=5, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   289
        parent.AddWindow(self.SubrangeMinimum, 1, border=5, flag=wx.GROW|wx.ALL)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   290
        parent.AddWindow(wx.Size(0, 0), 1, border=5, flag=wx.GROW|wx.ALL)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   291
        parent.AddWindow(wx.Size(0, 0), 1, border=5, flag=wx.GROW|wx.ALL)
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   292
        parent.AddWindow(self.staticText7, 1, border=5, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   293
        parent.AddWindow(self.SubrangeMaximum, 1, border=5, flag=wx.GROW|wx.ALL)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   294
        
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   295
    def _init_coll_EnumeratedPanelSizer_Items(self, parent):
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   296
        parent.AddWindow(self.EnumeratedValues, 1, border=5, flag=wx.GROW|wx.ALL)
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   297
        parent.AddSizer(self.EnumeratedPanelRightSizer, 1, border=0, flag=0)
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   298
        
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   299
    def _init_coll_EnumeratedPanelRightSizer_Items(self, parent):
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   300
        parent.AddWindow(self.staticText8, 1, border=5, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   301
        parent.AddWindow(self.EnumeratedInitialValue, 1, border=5, flag=wx.ALL)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   302
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   303
    def _init_coll_ArrayPanelSizer_Items(self, parent):
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   304
        parent.AddSizer(self.ArrayPanelLeftSizer, 0, border=0, flag=wx.GROW)
556
69214983dd03 Enabling support for direct array variable declaration
laurent
parents: 507
diff changeset
   305
        parent.AddSizer(self.ArrayPanelRightSizer, 0, border=0, flag=wx.GROW)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   306
        parent.AddWindow(self.ArrayDimensions, 0, border=5, flag=wx.GROW|wx.ALL)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   307
        
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   308
    def _init_coll_ArrayPanelSizer_Growables(self, parent):
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   309
        parent.AddGrowableCol(0)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   310
        parent.AddGrowableCol(1)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   311
        parent.AddGrowableRow(1)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   312
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   313
    def _init_coll_ArrayPanelLeftSizer_Items(self, parent):
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   314
        parent.AddWindow(self.staticText9, 1, border=5, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   315
        parent.AddWindow(self.ArrayBaseType, 1, border=5, flag=wx.GROW|wx.ALL)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   316
    
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   317
    def _init_coll_ArrayPanelRightSizer_Items(self, parent):
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   318
        parent.AddWindow(self.staticText10, 1, border=5, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL)
566
6014ef82a98a Adding support for searching text or regular expression in whole project
laurent
parents: 556
diff changeset
   319
        parent.AddWindow(self.ArrayInitialValue, 1, border=5, flag=wx.ALL)    
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   320
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   321
    def _init_coll_StructurePanelSizer_Items(self, parent):
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   322
        parent.AddWindow(self.staticText11, 0, border=5, flag=wx.ALL)
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   323
        parent.AddWindow(self.StructureElementsGrid, 0, border=0, flag=wx.GROW)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   324
        parent.AddSizer(self.StructurePanelButtonSizer, 0, border=0, flag=wx.ALIGN_RIGHT)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   325
        
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   326
    def _init_coll_StructurePanelSizer_Growables(self, parent):
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   327
        parent.AddGrowableCol(0)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   328
        parent.AddGrowableRow(1)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   329
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   330
    def _init_coll_StructurePanelButtonSizer_Items(self, parent):
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   331
        parent.AddWindow(self.StructureAddButton, 0, border=5, flag=wx.ALL)
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   332
        parent.AddWindow(self.StructureDeleteButton, 0, border=5, flag=wx.ALL)
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   333
        parent.AddWindow(self.StructureUpButton, 0, border=5, flag=wx.ALL)
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   334
        parent.AddWindow(self.StructureDownButton, 0, border=5, flag=wx.ALL)
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   335
    
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   336
    def _init_sizers(self):
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   337
        self.MainSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   338
        self.TopSizer = wx.BoxSizer(wx.HORIZONTAL)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   339
        self.TypeInfosSizer = wx.StaticBoxSizer(self.staticbox, wx.HORIZONTAL)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   340
        self.DirectlyPanelSizer = wx.BoxSizer(wx.HORIZONTAL)
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   341
        self.SubrangePanelSizer = wx.GridSizer(cols=4, hgap=5, rows=3, vgap=0)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   342
        self.EnumeratedPanelSizer = wx.BoxSizer(wx.HORIZONTAL)
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   343
        self.EnumeratedPanelRightSizer = wx.BoxSizer(wx.HORIZONTAL)
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   344
        self.ArrayPanelSizer = wx.FlexGridSizer(cols=2, hgap=5, rows=2, vgap=0)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   345
        self.ArrayPanelLeftSizer = wx.BoxSizer(wx.HORIZONTAL)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   346
        self.ArrayPanelRightSizer = wx.BoxSizer(wx.HORIZONTAL)
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   347
        self.StructurePanelSizer = wx.FlexGridSizer(cols=1, hgap=5, rows=3, vgap=0)
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   348
        self.StructurePanelButtonSizer = wx.BoxSizer(wx.HORIZONTAL)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   349
        self._init_coll_MainSizer_Items(self.MainSizer)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   350
        self._init_coll_MainSizer_Growables(self.MainSizer)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   351
        self._init_coll_TopSizer_Items(self.TopSizer)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   352
        self._init_coll_TypeInfosSizer_Items(self.TypeInfosSizer)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   353
        self._init_coll_DirectlyPanelSizer_Items(self.DirectlyPanelSizer)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   354
        self._init_coll_SubrangePanelSizer_Items(self.SubrangePanelSizer)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   355
        self._init_coll_EnumeratedPanelSizer_Items(self.EnumeratedPanelSizer)
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   356
        self._init_coll_EnumeratedPanelRightSizer_Items(self.EnumeratedPanelRightSizer)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   357
        self._init_coll_ArrayPanelSizer_Items(self.ArrayPanelSizer)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   358
        self._init_coll_ArrayPanelSizer_Growables(self.ArrayPanelSizer)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   359
        self._init_coll_ArrayPanelLeftSizer_Items(self.ArrayPanelLeftSizer)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   360
        self._init_coll_ArrayPanelRightSizer_Items(self.ArrayPanelRightSizer)
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   361
        self._init_coll_StructurePanelSizer_Items(self.StructurePanelSizer)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   362
        self._init_coll_StructurePanelSizer_Growables(self.StructurePanelSizer)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   363
        self._init_coll_StructurePanelButtonSizer_Items(self.StructurePanelButtonSizer)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   364
        
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   365
        self.SetSizer(self.MainSizer)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   366
        self.DirectlyPanel.SetSizer(self.DirectlyPanelSizer)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   367
        self.SubrangePanel.SetSizer(self.SubrangePanelSizer)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   368
        self.EnumeratedPanel.SetSizer(self.EnumeratedPanelSizer)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   369
        self.ArrayPanel.SetSizer(self.ArrayPanelSizer)
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   370
        self.StructurePanel.SetSizer(self.StructurePanelSizer)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   371
    
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   372
    def _init_ctrls(self, prnt):
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   373
        wx.Panel.__init__(self, id=ID_DATATYPEEDITOR, name='', parent=prnt,
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   374
              size=wx.Size(0, 0), style=wx.SUNKEN_BORDER)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   375
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   376
        self.staticbox = wx.StaticBox(id=ID_DATATYPEEDITORSTATICBOX,
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   377
              label=_('Type infos:'), name='staticBox1', parent=self,
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   378
              pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   379
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   380
        self.staticText1 = wx.StaticText(id=ID_DATATYPEEDITORSTATICTEXT1,
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   381
              label=_('Derivation Type:'), name='staticText1', parent=self,
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   382
              pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   383
304
2df3d31d8059 Replacing wx.Choice by wx.ComboBox
lbessard
parents: 295
diff changeset
   384
        self.DerivationType = wx.ComboBox(id=ID_DATATYPEEDITORDERIVATIONTYPE,
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   385
              name='DerivationType', parent=self, pos=wx.Point(0, 0),
313
9266d1e6e3d4 Fix size of ComboBoxes
lbessard
parents: 304
diff changeset
   386
              size=wx.Size(200, 28), style=wx.CB_READONLY)
304
2df3d31d8059 Replacing wx.Choice by wx.ComboBox
lbessard
parents: 295
diff changeset
   387
        self.Bind(wx.EVT_COMBOBOX, self.OnDerivationTypeChanged, id=ID_DATATYPEEDITORDERIVATIONTYPE)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   388
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   389
        # Panel for Directly derived data types
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   390
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   391
        self.DirectlyPanel = wx.Panel(id=ID_DATATYPEEDITORDIRECTLYPANEL,
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   392
              name='DirectlyPanel', parent=self, pos=wx.Point(0, 0),
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   393
              size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   394
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   395
        self.staticText2 = wx.StaticText(id=ID_DATATYPEEDITORSTATICTEXT2,
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   396
              label=_('Base Type:'), name='staticText2', parent=self.DirectlyPanel,
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   397
              pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   398
304
2df3d31d8059 Replacing wx.Choice by wx.ComboBox
lbessard
parents: 295
diff changeset
   399
        self.DirectlyBaseType = wx.ComboBox(id=ID_DATATYPEEDITORDIRECTLYBASETYPE, 
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   400
              name='DirectlyBaseType', parent=self.DirectlyPanel, pos=wx.Point(0, 0),
313
9266d1e6e3d4 Fix size of ComboBoxes
lbessard
parents: 304
diff changeset
   401
              size=wx.Size(0, 28), style=wx.CB_READONLY)
576
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   402
        self.DirectlyBaseType.SetBackgroundColour(wx.BLUE)
304
2df3d31d8059 Replacing wx.Choice by wx.ComboBox
lbessard
parents: 295
diff changeset
   403
        self.Bind(wx.EVT_COMBOBOX, self.OnInfosChanged, id=ID_DATATYPEEDITORDIRECTLYBASETYPE)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   404
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   405
        self.staticText3 = wx.StaticText(id=ID_DATATYPEEDITORSTATICTEXT3,
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   406
              label=_('Initial Value:'), name='staticText3', parent=self.DirectlyPanel,
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   407
              pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   408
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   409
        self.DirectlyInitialValue = wx.TextCtrl(id=ID_DATATYPEEDITORDIRECTLYINITIALVALUE, 
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   410
              name='DirectlyInitialValue', parent=self.DirectlyPanel, pos=wx.Point(0, 0),
231
fc2d6cbb8b39 Adding support for highlighing compiling errors from matiec
lbessard
parents: 215
diff changeset
   411
              size=wx.Size(0, 24), style=wx.TAB_TRAVERSAL|wx.TE_PROCESS_ENTER|wx.TE_MULTILINE|wx.TE_RICH)
fc2d6cbb8b39 Adding support for highlighing compiling errors from matiec
lbessard
parents: 215
diff changeset
   412
        self.Bind(wx.EVT_TEXT_ENTER, self.OnReturnKeyPressed, id=ID_DATATYPEEDITORDIRECTLYINITIALVALUE)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   413
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   414
        # Panel for Subrange data types
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   415
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   416
        self.SubrangePanel = wx.Panel(id=ID_DATATYPEEDITORSUBRANGEPANEL,
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   417
              name='SubrangePanel', parent=self, pos=wx.Point(0, 0),
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   418
              size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   419
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   420
        self.staticText4 = wx.StaticText(id=ID_DATATYPEEDITORSTATICTEXT4,
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   421
              label=_('Base Type:'), name='staticText4', parent=self.SubrangePanel,
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   422
              pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   423
304
2df3d31d8059 Replacing wx.Choice by wx.ComboBox
lbessard
parents: 295
diff changeset
   424
        self.SubrangeBaseType = wx.ComboBox(id=ID_DATATYPEEDITORSUBRANGEBASETYPE, 
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   425
              name='SubrangeBaseType', parent=self.SubrangePanel, pos=wx.Point(0, 0),
313
9266d1e6e3d4 Fix size of ComboBoxes
lbessard
parents: 304
diff changeset
   426
              size=wx.Size(0, 28), style=wx.CB_READONLY)
576
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   427
        self.SubrangeBaseType.SetBackgroundColour(wx.BLUE)
304
2df3d31d8059 Replacing wx.Choice by wx.ComboBox
lbessard
parents: 295
diff changeset
   428
        self.Bind(wx.EVT_COMBOBOX, self.OnSubrangeBaseTypeChanged, id=ID_DATATYPEEDITORSUBRANGEBASETYPE)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   429
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   430
        self.staticText5 = wx.StaticText(id=ID_DATATYPEEDITORSTATICTEXT5,
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   431
              label=_('Initial Value:'), name='staticText5', parent=self.SubrangePanel,
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   432
              pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   433
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   434
        self.SubrangeInitialValue = wx.SpinCtrl(id=ID_DATATYPEEDITORSUBRANGEINITIALVALUE, 
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   435
              name='SubrangeInitialValue', parent=self.SubrangePanel, pos=wx.Point(0, 0),
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   436
              size=wx.Size(0, 24), style=wx.TAB_TRAVERSAL)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   437
        self.Bind(wx.EVT_SPINCTRL, self.OnInfosChanged, id=ID_DATATYPEEDITORSUBRANGEINITIALVALUE)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   438
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   439
        self.staticText6 = wx.StaticText(id=ID_DATATYPEEDITORSTATICTEXT6,
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   440
              label=_('Minimum:'), name='staticText6', parent=self.SubrangePanel,
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   441
              pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   442
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   443
        self.SubrangeMinimum = wx.SpinCtrl(id=ID_DATATYPEEDITORSUBRANGEMINIMUM, 
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   444
              name='SubrangeMinimum', parent=self.SubrangePanel, pos=wx.Point(0, 0),
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   445
              size=wx.Size(0, 24), style=wx.TAB_TRAVERSAL)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   446
        self.Bind(wx.EVT_SPINCTRL, self.OnSubrangeMinimumChanged, id=ID_DATATYPEEDITORSUBRANGEMINIMUM)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   447
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   448
        self.staticText7 = wx.StaticText(id=ID_DATATYPEEDITORSTATICTEXT7,
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   449
              label=_('Maximum:'), name='staticText7', parent=self.SubrangePanel,
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   450
              pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   451
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   452
        self.SubrangeMaximum = wx.SpinCtrl(id=ID_DATATYPEEDITORSUBRANGEMAXIMUM, 
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   453
              name='SubrangeMaximum', parent=self.SubrangePanel, pos=wx.Point(0, 0),
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   454
              size=wx.Size(0, 24), style=wx.TAB_TRAVERSAL)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   455
        self.Bind(wx.EVT_SPINCTRL, self.OnSubrangeMaximumChanged, id=ID_DATATYPEEDITORSUBRANGEMAXIMUM)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   456
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   457
        # Panel for Enumerated data types
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   458
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   459
        self.EnumeratedPanel = wx.Panel(id=ID_DATATYPEEDITORENUMERATEDPANEL,
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   460
              name='EnumeratedPanel', parent=self, pos=wx.Point(0, 0),
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   461
              size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   462
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   463
        self.EnumeratedValues = wx.gizmos.EditableListBox(id=ID_DATATYPEEDITORENUMERATEDVALUES, 
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   464
              name='EnumeratedValues', parent=self.EnumeratedPanel, label=_("Values:"), pos=wx.Point(0, 0),
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   465
              size=wx.Size(0, 0), style=wx.gizmos.EL_ALLOW_NEW | wx.gizmos.EL_ALLOW_EDIT | wx.gizmos.EL_ALLOW_DELETE)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   466
        self.EnumeratedValues.GetListCtrl().Bind(wx.EVT_LIST_END_LABEL_EDIT, self.OnEnumeratedValueEndEdit)
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   467
        self.EnumeratedValues.GetEditButton().SetToolTipString(_("Edit item"))
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   468
        new_button = self.EnumeratedValues.GetNewButton()
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   469
        new_button.SetToolTipString(_("New item"))
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   470
        new_button.Bind(wx.EVT_BUTTON, self.OnEnumeratedValuesChanged)
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   471
        del_button = self.EnumeratedValues.GetDelButton()
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   472
        del_button.SetToolTipString(_("Delete item"))
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   473
        del_button.Bind(wx.EVT_BUTTON, self.OnEnumeratedValuesChanged)
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   474
        up_button = self.EnumeratedValues.GetUpButton()
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   475
        up_button.SetToolTipString(_("Move up"))
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   476
        up_button.Bind(wx.EVT_BUTTON, self.OnEnumeratedValuesChanged)
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   477
        down_button = self.EnumeratedValues.GetDownButton()
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   478
        down_button.SetToolTipString(_("Move down"))
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   479
        down_button.Bind(wx.EVT_BUTTON, self.OnEnumeratedValuesChanged)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   480
        
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   481
        self.staticText8 = wx.StaticText(id=ID_DATATYPEEDITORSTATICTEXT8,
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   482
              label=_('Initial Value:'), name='staticText8', parent=self.EnumeratedPanel,
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   483
              pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   484
304
2df3d31d8059 Replacing wx.Choice by wx.ComboBox
lbessard
parents: 295
diff changeset
   485
        self.EnumeratedInitialValue = wx.ComboBox(id=ID_DATATYPEEDITORENUMERATEDINITIALVALUE, 
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   486
              name='EnumeratedInitialValue', parent=self.EnumeratedPanel, pos=wx.Point(0, 0),
313
9266d1e6e3d4 Fix size of ComboBoxes
lbessard
parents: 304
diff changeset
   487
              size=wx.Size(0, 28), style=wx.CB_READONLY)
304
2df3d31d8059 Replacing wx.Choice by wx.ComboBox
lbessard
parents: 295
diff changeset
   488
        self.Bind(wx.EVT_COMBOBOX, self.OnInfosChanged, id=ID_DATATYPEEDITORENUMERATEDINITIALVALUE)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   489
        
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   490
        # Panel for Array data types
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   491
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   492
        self.ArrayPanel = wx.Panel(id=ID_DATATYPEEDITORARRAYPANEL,
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   493
              name='ArrayPanel', parent=self, pos=wx.Point(0, 0),
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   494
              size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   495
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   496
        self.staticText9 = wx.StaticText(id=ID_DATATYPEEDITORSTATICTEXT9,
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   497
              label=_('Base Type:'), name='staticText9', parent=self.ArrayPanel,
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   498
              pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   499
304
2df3d31d8059 Replacing wx.Choice by wx.ComboBox
lbessard
parents: 295
diff changeset
   500
        self.ArrayBaseType = wx.ComboBox(id=ID_DATATYPEEDITORARRAYBASETYPE, 
507
42150e041dbe Adding support for direct array variable declaration in variable panel (still disable cause matiec doesn't support this feature)
laurent
parents: 494
diff changeset
   501
              name='ArrayBaseType', parent=self.ArrayPanel, pos=wx.Point(0, 0),
313
9266d1e6e3d4 Fix size of ComboBoxes
lbessard
parents: 304
diff changeset
   502
              size=wx.Size(0, 28), style=wx.CB_READONLY)
304
2df3d31d8059 Replacing wx.Choice by wx.ComboBox
lbessard
parents: 295
diff changeset
   503
        self.Bind(wx.EVT_COMBOBOX, self.OnInfosChanged, id=ID_DATATYPEEDITORARRAYBASETYPE)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   504
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   505
        self.ArrayDimensions = wx.gizmos.EditableListBox(id=ID_DATATYPEEDITORARRAYDIMENSIONS, 
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   506
              name='ArrayDimensions', parent=self.ArrayPanel, label=_("Dimensions:"), pos=wx.Point(0, 0),
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   507
              size=wx.Size(0, 24), style=wx.gizmos.EL_ALLOW_NEW | wx.gizmos.EL_ALLOW_EDIT | wx.gizmos.EL_ALLOW_DELETE)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   508
        self.ArrayDimensions.GetListCtrl().Bind(wx.EVT_LIST_END_LABEL_EDIT, self.OnDimensionsChanged)
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   509
        self.ArrayDimensions.GetEditButton().SetToolTipString(_("Edit item"))
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   510
        new_button = self.ArrayDimensions.GetNewButton()
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   511
        new_button.SetToolTipString(_("New item"))
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   512
        new_button.Bind(wx.EVT_BUTTON, self.OnDimensionsChanged)
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   513
        del_button = self.ArrayDimensions.GetDelButton()
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   514
        del_button.SetToolTipString(_("Delete item"))
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   515
        del_button.Bind(wx.EVT_BUTTON, self.OnDimensionsChanged)
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   516
        up_button = self.ArrayDimensions.GetUpButton()
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   517
        up_button.SetToolTipString(_("Move up"))
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   518
        up_button.Bind(wx.EVT_BUTTON, self.OnDimensionsChanged)
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   519
        down_button = self.ArrayDimensions.GetDownButton()
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   520
        down_button.SetToolTipString(_("Move down"))
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   521
        down_button.Bind(wx.EVT_BUTTON, self.OnDimensionsChanged)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   522
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   523
        self.staticText10 = wx.StaticText(id=ID_DATATYPEEDITORSTATICTEXT10,
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   524
              label=_('Initial Value:'), name='staticText10', parent=self.ArrayPanel,
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   525
              pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   526
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   527
        self.ArrayInitialValue = wx.TextCtrl(id=ID_DATATYPEEDITORARRAYINITIALVALUE, 
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   528
              name='ArrayInitialValue', parent=self.ArrayPanel, pos=wx.Point(0, 0),
231
fc2d6cbb8b39 Adding support for highlighing compiling errors from matiec
lbessard
parents: 215
diff changeset
   529
              size=wx.Size(0, 24), style=wx.TAB_TRAVERSAL|wx.TE_PROCESS_ENTER|wx.TE_MULTILINE|wx.TE_RICH)
fc2d6cbb8b39 Adding support for highlighing compiling errors from matiec
lbessard
parents: 215
diff changeset
   530
        self.Bind(wx.EVT_TEXT_ENTER, self.OnReturnKeyPressed, id=ID_DATATYPEEDITORARRAYINITIALVALUE)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   531
        
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   532
        # Panel for Structure data types
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   533
        
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   534
        self.StructurePanel = wx.Panel(id=ID_DATATYPEEDITORSTRUCTUREPANEL,
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   535
              name='StructurePanel', parent=self, pos=wx.Point(0, 0),
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   536
              size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   537
        
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   538
        self.staticText11 = wx.StaticText(id=ID_DATATYPEEDITORSTATICTEXT11,
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   539
              label=_('Elements :'), name='staticText11', parent=self.StructurePanel,
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   540
              pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   541
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   542
        self.StructureElementsGrid = wx.grid.Grid(id=ID_DATATYPEEDITORSTRUCTUREELEMENTSGRID,
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   543
              name='StructureElementsGrid', parent=self.StructurePanel, pos=wx.Point(0, 0), 
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   544
              size=wx.Size(0, 150), style=wx.VSCROLL)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   545
        self.StructureElementsGrid.SetFont(wx.Font(12, 77, wx.NORMAL, wx.NORMAL, False,
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   546
              'Sans'))
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   547
        self.StructureElementsGrid.SetLabelFont(wx.Font(10, 77, wx.NORMAL, wx.NORMAL,
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   548
              False, 'Sans'))
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   549
        self.StructureElementsGrid.SetSelectionBackground(wx.WHITE)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   550
        self.StructureElementsGrid.SetSelectionForeground(wx.BLACK)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   551
        if wx.VERSION >= (2, 6, 0):
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   552
            self.StructureElementsGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.OnStructureElementsGridCellChange)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   553
            self.StructureElementsGrid.Bind(wx.grid.EVT_GRID_EDITOR_SHOWN, self.OnStructureElementsGridEditorShown)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   554
        else:
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   555
            wx.grid.EVT_GRID_CELL_CHANGE(self.StructureElementsGrid, self.OnStructureElementsGridCellChange)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   556
            wx.grid.EVT_GRID_EDITOR_SHOWN(self.StructureElementsGrid, self.OnStructureElementsGridEditorShown)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   557
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   558
        self.StructureAddButton = wx.Button(id=ID_DATATYPEEDITORSTRUCTUREADDBUTTON, label=_('Add'),
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   559
              name='StructureAddButton', parent=self.StructurePanel, pos=wx.Point(0, 0),
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   560
              size=wx.DefaultSize, style=0)
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   561
        self.Bind(wx.EVT_BUTTON, self.OnStructureAddButton, id=ID_DATATYPEEDITORSTRUCTUREADDBUTTON)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   562
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   563
        self.StructureDeleteButton = wx.Button(id=ID_DATATYPEEDITORSTRUCTUREDELETEBUTTON, label=_('Delete'),
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   564
              name='StructureDeleteButton', parent=self.StructurePanel, pos=wx.Point(0, 0),
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   565
              size=wx.DefaultSize, style=0)
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   566
        self.Bind(wx.EVT_BUTTON, self.OnStructureDeleteButton, id=ID_DATATYPEEDITORSTRUCTUREDELETEBUTTON)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   567
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   568
        self.StructureUpButton = wx.Button(id=ID_DATATYPEEDITORSTRUCTUREUPBUTTON, label='^',
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   569
              name='StructureUpButton', parent=self.StructurePanel, pos=wx.Point(0, 0),
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   570
              size=wx.Size(32, 32), style=0)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   571
        self.Bind(wx.EVT_BUTTON, self.OnStructureUpButton, id=ID_DATATYPEEDITORSTRUCTUREUPBUTTON)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   572
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   573
        self.StructureDownButton = wx.Button(id=ID_DATATYPEEDITORSTRUCTUREDOWNBUTTON, label='v',
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   574
              name='StructureDownButton', parent=self.StructurePanel, pos=wx.Point(0, 0),
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   575
              size=wx.Size(32, 32), style=0)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   576
        self.Bind(wx.EVT_BUTTON, self.OnStructureDownButton, id=ID_DATATYPEEDITORSTRUCTUREDOWNBUTTON)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   577
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   578
        self._init_sizers()
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   579
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   580
    def __init__(self, parent, tagname, window, controler):
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   581
        self._init_ctrls(parent)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   582
        
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   583
        self.StructureElementDefaultValue = {"Name" : "", "Type" : "INT", "Initial Value" : ""}
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   584
        self.StructureElementsTable = ElementsTable(self, [], GetElementsTableColnames())
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   585
        self.StructureColSizes = [40, 150, 100, 250]
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   586
        self.StructureColAlignements = [wx.ALIGN_CENTER, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT]
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   587
        
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   588
        self.StructureElementsGrid.SetTable(self.StructureElementsTable)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   589
        self.StructureElementsGrid.SetRowLabelSize(0)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   590
        for col in range(self.StructureElementsTable.GetNumberCols()):
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   591
            attr = wx.grid.GridCellAttr()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   592
            attr.SetAlignment(self.StructureColAlignements[col], wx.ALIGN_CENTRE)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   593
            self.StructureElementsGrid.SetColAttr(col, attr)
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   594
            self.StructureElementsGrid.SetColMinimalWidth(col, self.StructureColSizes[col])
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   595
            self.StructureElementsGrid.AutoSizeColumn(col, False)
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   596
        
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   597
        for datatype in GetDatatypeTypes():
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   598
            self.DerivationType.Append(_(datatype))
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   599
        self.SubrangePanel.Hide()
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   600
        self.EnumeratedPanel.Hide()
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   601
        self.ArrayPanel.Hide()
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   602
        self.StructurePanel.Hide()
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   603
        self.CurrentPanel = "Directly"
566
6014ef82a98a Adding support for searching text or regular expression in whole project
laurent
parents: 556
diff changeset
   604
        self.Highlights = []
130
38421cd7c8ff Bug on subrange SpinCtrls with Windows fixed
lbessard
parents: 125
diff changeset
   605
        self.Initializing = False
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   606
        
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   607
        self.ParentWindow = window
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   608
        self.Controler = controler
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   609
        self.TagName = tagname
566
6014ef82a98a Adding support for searching text or regular expression in whole project
laurent
parents: 556
diff changeset
   610
        
576
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   611
        self.HighlightControls = {
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   612
            ("Directly", "base"): self.DirectlyBaseType,
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   613
            ("Directly", "initial"): self.DirectlyInitialValue,
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   614
            ("Subrange", "base"): self.SubrangeBaseType,
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   615
            ("Subrange", "lower"): self.SubrangeMinimum,
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   616
            ("Subrange", "upper"): self.SubrangeMaximum,
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   617
            ("Subrange", "initial"): self.SubrangeInitialValue,
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   618
            ("Enumerated", "value"): self.EnumeratedValues,
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   619
            ("Enumerated", "initial"): self.EnumeratedInitialValue,
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   620
            ("Array", "initial"): self.ArrayInitialValue,
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   621
            ("Array", "base"): self.ArrayBaseType,
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   622
            ("Array", "range"): self.ArrayDimensions,
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   623
        }
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   624
        
566
6014ef82a98a Adding support for searching text or regular expression in whole project
laurent
parents: 556
diff changeset
   625
        self.RefreshHighlightsTimer = wx.Timer(self, -1)
6014ef82a98a Adding support for searching text or regular expression in whole project
laurent
parents: 556
diff changeset
   626
        self.Bind(wx.EVT_TIMER, self.OnRefreshHighlightsTimer, self.RefreshHighlightsTimer)
6014ef82a98a Adding support for searching text or regular expression in whole project
laurent
parents: 556
diff changeset
   627
        
6014ef82a98a Adding support for searching text or regular expression in whole project
laurent
parents: 556
diff changeset
   628
    def __del__(self):
6014ef82a98a Adding support for searching text or regular expression in whole project
laurent
parents: 556
diff changeset
   629
        self.RefreshHighlightsTimer.Stop()
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   630
    
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   631
    def SetTagName(self, tagname):
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   632
        self.TagName = tagname
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   633
        
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   634
    def GetTagName(self):
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   635
        return self.TagName
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   636
    
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   637
    def IsViewing(self, tagname):
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   638
        return self.TagName == tagname
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   639
407
0a324a874981 Adding support for integrating PLCOpenEditor in Beremiz frame
laurent
parents: 391
diff changeset
   640
    def IsDebugging(self):
0a324a874981 Adding support for integrating PLCOpenEditor in Beremiz frame
laurent
parents: 391
diff changeset
   641
        return False
0a324a874981 Adding support for integrating PLCOpenEditor in Beremiz frame
laurent
parents: 391
diff changeset
   642
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   643
    def SetMode(self, mode):
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   644
        pass
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   645
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   646
    def ResetBuffer(self):
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   647
        pass
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   648
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   649
    def RefreshView(self):
130
38421cd7c8ff Bug on subrange SpinCtrls with Windows fixed
lbessard
parents: 125
diff changeset
   650
        self.Initializing = True
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   651
        self.DirectlyBaseType.Clear()
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   652
        self.ArrayBaseType.Clear()
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   653
        for datatype in self.Controler.GetDataTypes(self.TagName):
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   654
            self.DirectlyBaseType.Append(datatype)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   655
            self.ArrayBaseType.Append(datatype)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   656
        self.DirectlyBaseType.SetSelection(0)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   657
        self.SubrangeBaseType.Clear()
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   658
        words = self.TagName.split("::")
231
fc2d6cbb8b39 Adding support for highlighing compiling errors from matiec
lbessard
parents: 215
diff changeset
   659
        for base_type in self.Controler.GetSubrangeBaseTypes(words[1]):
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   660
            self.SubrangeBaseType.Append(base_type)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   661
        self.SubrangeBaseType.SetSelection(0)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   662
        self.RefreshBoundsRange()
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   663
        type_infos = self.Controler.GetDataTypeInfos(self.TagName)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   664
        if type_infos is not None:
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   665
            datatype = type_infos["type"]
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   666
            self.DerivationType.SetStringSelection(_(datatype))
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   667
            if type_infos["type"] == "Directly":
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   668
                self.DirectlyBaseType.SetStringSelection(type_infos["base_type"])
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   669
                self.DirectlyInitialValue.SetValue(type_infos["initial"])
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   670
            elif type_infos["type"] == "Subrange":
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   671
                self.SubrangeBaseType.SetStringSelection(type_infos["base_type"])
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   672
                self.RefreshBoundsRange()
389
6a72016d721a Adding support for plcopen version 2.01
laurent
parents: 379
diff changeset
   673
                self.SubrangeMinimum.SetValue(int(type_infos["min"]))
6a72016d721a Adding support for plcopen version 2.01
laurent
parents: 379
diff changeset
   674
                self.SubrangeMaximum.SetValue(int(type_infos["max"]))
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   675
                self.RefreshSubrangeInitialValueRange()
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   676
                if type_infos["initial"] != "":
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   677
                    self.SubrangeInitialValue.SetValue(int(type_infos["initial"]))
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   678
                else:
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   679
                    self.SubrangeInitialValue.SetValue(type_infos["min"])
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   680
            elif type_infos["type"] == "Enumerated":
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   681
                self.EnumeratedValues.SetStrings(type_infos["values"])
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   682
                self.RefreshEnumeratedValues()
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   683
                self.EnumeratedInitialValue.SetStringSelection(type_infos["initial"])
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   684
            elif type_infos["type"] == "Array":
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   685
                self.ArrayBaseType.SetStringSelection(type_infos["base_type"])
389
6a72016d721a Adding support for plcopen version 2.01
laurent
parents: 379
diff changeset
   686
                self.ArrayDimensions.SetStrings(map(lambda x : "..".join(x), type_infos["dimensions"]))
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   687
                self.ArrayInitialValue.SetValue(type_infos["initial"])
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   688
            elif type_infos["type"] == "Structure":
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   689
                self.StructureElementsTable.SetData(type_infos["elements"])
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   690
            self.RefreshDisplayedInfos()
576
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   691
        self.ShowHighlights()
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   692
        self.StructureElementsTable.ResetView(self.StructureElementsGrid)
130
38421cd7c8ff Bug on subrange SpinCtrls with Windows fixed
lbessard
parents: 125
diff changeset
   693
        self.Initializing = False
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   694
205
f12ad5b87f99 Bug with missing RefreshScaling fixed
lbessard
parents: 192
diff changeset
   695
    def RefreshScaling(self, refresh=True):
f12ad5b87f99 Bug with missing RefreshScaling fixed
lbessard
parents: 192
diff changeset
   696
        pass
f12ad5b87f99 Bug with missing RefreshScaling fixed
lbessard
parents: 192
diff changeset
   697
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   698
    def OnDerivationTypeChanged(self, event):
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   699
        self.RefreshDisplayedInfos()
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   700
        self.RefreshTypeInfos()
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   701
        event.Skip()
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   702
231
fc2d6cbb8b39 Adding support for highlighing compiling errors from matiec
lbessard
parents: 215
diff changeset
   703
    def OnReturnKeyPressed(self, event):
fc2d6cbb8b39 Adding support for highlighing compiling errors from matiec
lbessard
parents: 215
diff changeset
   704
        self.RefreshTypeInfos()
fc2d6cbb8b39 Adding support for highlighing compiling errors from matiec
lbessard
parents: 215
diff changeset
   705
        
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   706
    def OnInfosChanged(self, event):
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   707
        self.RefreshTypeInfos()
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   708
        event.Skip()
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   709
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   710
    def OnSubrangeBaseTypeChanged(self, event):
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   711
        self.RefreshBoundsRange()
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   712
        self.RefreshTypeInfos()
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   713
        event.Skip()
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   714
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   715
    def OnSubrangeMinimumChanged(self, event):
215
dd3381f38a9e Fixed various bugs
etisserant
parents: 207
diff changeset
   716
        if not self.Initializing:
130
38421cd7c8ff Bug on subrange SpinCtrls with Windows fixed
lbessard
parents: 125
diff changeset
   717
            wx.CallAfter(self.SubrangeMinimum.SetValue, min(self.SubrangeMaximum.GetValue(), self.SubrangeMinimum.GetValue()))
38421cd7c8ff Bug on subrange SpinCtrls with Windows fixed
lbessard
parents: 125
diff changeset
   718
            wx.CallAfter(self.RefreshSubrangeInitialValueRange)
38421cd7c8ff Bug on subrange SpinCtrls with Windows fixed
lbessard
parents: 125
diff changeset
   719
            wx.CallAfter(self.RefreshTypeInfos)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   720
        event.Skip()
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   721
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   722
    def OnSubrangeMaximumChanged(self, event):
215
dd3381f38a9e Fixed various bugs
etisserant
parents: 207
diff changeset
   723
        if not self.Initializing:
130
38421cd7c8ff Bug on subrange SpinCtrls with Windows fixed
lbessard
parents: 125
diff changeset
   724
            wx.CallAfter(self.SubrangeMaximum.SetValue, max(self.SubrangeMinimum.GetValue(), self.SubrangeMaximum.GetValue()))
38421cd7c8ff Bug on subrange SpinCtrls with Windows fixed
lbessard
parents: 125
diff changeset
   725
            wx.CallAfter(self.RefreshSubrangeInitialValueRange)
38421cd7c8ff Bug on subrange SpinCtrls with Windows fixed
lbessard
parents: 125
diff changeset
   726
            wx.CallAfter(self.RefreshTypeInfos)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   727
        event.Skip()
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   728
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   729
    def OnDimensionsChanged(self, event):
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   730
        wx.CallAfter(self.RefreshTypeInfos)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   731
        event.Skip()
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   732
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   733
    def OnEnumeratedValueEndEdit(self, event):
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   734
        text = event.GetText()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   735
        values = self.EnumeratedValues.GetStrings()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   736
        index = event.GetIndex()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   737
        if index >= len(values) or values[index].upper() != text.upper():
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   738
            if text.upper() in [value.upper() for value in values]:
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   739
                message = wx.MessageDialog(self, _("\"%s\" value already defined!")%text, _("Error"), wx.OK|wx.ICON_ERROR)
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   740
                message.ShowModal()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   741
                message.Destroy()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   742
                event.Veto()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   743
            elif text.upper() in IEC_KEYWORDS:
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   744
                message = wx.MessageDialog(self, _("\"%s\" is a keyword. It can't be used!")%text, _("Error"), wx.OK|wx.ICON_ERROR)
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   745
                message.ShowModal()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   746
                message.Destroy()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   747
            else:
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   748
                wx.CallAfter(self.RefreshEnumeratedValues)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   749
                wx.CallAfter(self.RefreshTypeInfos)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   750
                event.Skip()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   751
        else:
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   752
            wx.CallAfter(self.RefreshEnumeratedValues)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   753
            wx.CallAfter(self.RefreshTypeInfos)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   754
            event.Skip()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   755
    
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   756
    def OnEnumeratedValuesChanged(self, event):
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   757
        wx.CallAfter(self.RefreshEnumeratedValues)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   758
        wx.CallAfter(self.RefreshTypeInfos)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   759
        event.Skip()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   760
    
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   761
    def OnStructureAddButton(self, event):
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   762
        new_row = self.StructureElementDefaultValue.copy()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   763
        self.StructureElementsTable.AppendRow(new_row)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   764
        self.RefreshTypeInfos()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   765
        self.StructureElementsTable.ResetView(self.StructureElementsGrid)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   766
        event.Skip()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   767
    
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   768
    def OnStructureDeleteButton(self, event):
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   769
        row = self.StructureElementsGrid.GetGridCursorRow()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   770
        self.StructureElementsTable.RemoveRow(row)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   771
        self.RefreshTypeInfos()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   772
        self.StructureElementsTable.ResetView(self.StructureElementsGrid)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   773
        event.Skip()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   774
    
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   775
    def OnStructureUpButton(self, event):
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   776
        row = self.StructureElementsGrid.GetGridCursorRow()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   777
        new_index = self.StructureElementsTable.MoveRow(row, -1)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   778
        if new_index is not None:
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   779
            self.RefreshTypeInfos()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   780
            self.StructureElementsTable.ResetView(self.StructureElementsGrid)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   781
            self.StructureElementsGrid.SetGridCursor(new_index, self.StructureElementsGrid.GetGridCursorCol())
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   782
        event.Skip()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   783
    
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   784
    def OnStructureDownButton(self, event):
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   785
        row = self.StructureElementsGrid.GetGridCursorRow()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   786
        new_index = self.StructureElementsTable.MoveRow(row, 1)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   787
        if new_index is not None:
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   788
            self.RefreshTypeInfos()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   789
            self.StructureElementsTable.ResetView(self.StructureElementsGrid)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   790
            self.StructureElementsGrid.SetGridCursor(new_index, self.StructureElementsGrid.GetGridCursorCol())
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   791
        event.Skip()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   792
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   793
    def OnStructureElementsGridCellChange(self, event):
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   794
        row, col = event.GetRow(), event.GetCol()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   795
        colname = self.StructureElementsTable.GetColLabelValue(col)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   796
        value = self.StructureElementsTable.GetValue(row, col)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   797
        if colname == "Name":
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   798
            if not TestIdentifier(value):
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   799
                message = wx.MessageDialog(self, _("\"%s\" is not a valid identifier!")%value, _("Error"), wx.OK|wx.ICON_ERROR)
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   800
                message.ShowModal()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   801
                message.Destroy()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   802
                event.Veto()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   803
            elif value.upper() in IEC_KEYWORDS:
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   804
                message = wx.MessageDialog(self, _("\"%s\" is a keyword. It can't be used!")%value, _("Error"), wx.OK|wx.ICON_ERROR)
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   805
                message.ShowModal()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   806
                message.Destroy()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   807
                event.Veto()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   808
##            elif value.upper() in self.PouNames:
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   809
##                message = wx.MessageDialog(self, "A pou with \"%s\" as name exists!"%value, "Error", wx.OK|wx.ICON_ERROR)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   810
##                message.ShowModal()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   811
##                message.Destroy()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   812
##                event.Veto()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   813
            elif value.upper() in [var["Name"].upper() for idx, var in enumerate(self.StructureElementsTable.GetData()) if idx != row]:
427
22d16c457d87 improved English spelling & grammar
b.taylor@willowglen.ca
parents: 391
diff changeset
   814
                message = wx.MessageDialog(self, _("An element named \"%s\" already exists in this structure!")%value, _("Error"), wx.OK|wx.ICON_ERROR)
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   815
                message.ShowModal()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   816
                message.Destroy()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   817
                event.Veto()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   818
            else:
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   819
                self.RefreshTypeInfos()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   820
                self.StructureElementsTable.ResetView(self.StructureElementsGrid)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   821
##                old_value = self.Table.GetOldValue()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   822
##                if old_value != "":
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   823
##                    self.Controler.UpdateEditedElementUsedVariable(self.TagName, old_value, value)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   824
##                self.Controler.BufferProject()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   825
                event.Skip()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   826
        else:
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   827
            self.RefreshTypeInfos()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   828
            self.StructureElementsTable.ResetView(self.StructureElementsGrid)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   829
            event.Skip()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   830
    
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   831
    def OnStructureElementsGridEditorShown(self, event):
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   832
        row, col = event.GetRow(), event.GetCol() 
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   833
        if self.StructureElementsTable.GetColLabelValue(col) == "Type":
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   834
            type_menu = wx.Menu(title='')
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   835
            base_menu = wx.Menu(title='')
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   836
            for base_type in self.Controler.GetBaseTypes():
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   837
                new_id = wx.NewId()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   838
                AppendMenu(base_menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=base_type)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   839
                self.Bind(wx.EVT_MENU, self.GetElementTypeFunction(base_type), id=new_id)
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   840
            type_menu.AppendMenu(wx.NewId(), _("Base Types"), base_menu)
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   841
            datatype_menu = wx.Menu(title='')
462
9abbc90c0263 Bug when trying to choose type of struture datatype element fixed
laurent
parents: 460
diff changeset
   842
            for datatype in self.Controler.GetDataTypes(self.TagName, False):
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   843
                new_id = wx.NewId()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   844
                AppendMenu(datatype_menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=datatype)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   845
                self.Bind(wx.EVT_MENU, self.GetElementTypeFunction(datatype), id=new_id)
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   846
            type_menu.AppendMenu(wx.NewId(), _("User Data Types"), datatype_menu)
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   847
##            functionblock_menu = wx.Menu(title='')
462
9abbc90c0263 Bug when trying to choose type of struture datatype element fixed
laurent
parents: 460
diff changeset
   848
##            bodytype = self.Controler.GetEditedElementBodyType(self.TagName)
9abbc90c0263 Bug when trying to choose type of struture datatype element fixed
laurent
parents: 460
diff changeset
   849
##            pouname, poutype = self.Controler.GetEditedElementType(self.TagName)
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   850
##            if classtype in ["Input","Output","InOut","External","Global"] or poutype != "function" and bodytype in ["ST", "IL"]:
462
9abbc90c0263 Bug when trying to choose type of struture datatype element fixed
laurent
parents: 460
diff changeset
   851
##                for functionblock_type in self.Controler.GetFunctionBlockTypes(self.TagName):
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   852
##                    new_id = wx.NewId()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   853
##                    AppendMenu(functionblock_menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=functionblock_type)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   854
##                    self.Bind(wx.EVT_MENU, self.GetVariableTypeFunction(functionblock_type), id=new_id)
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   855
##                type_menu.AppendMenu(wx.NewId(), _("Function Block Types"), functionblock_menu)
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   856
            rect = self.StructureElementsGrid.BlockToDeviceRect((row, col), (row, col))
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   857
            self.StructureElementsGrid.PopupMenuXY(type_menu, rect.x + rect.width, rect.y + self.StructureElementsGrid.GetColLabelSize())
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   858
            event.Veto()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   859
        else:
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   860
            event.Skip()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   861
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   862
    def GetElementTypeFunction(self, base_type):
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   863
        def ElementTypeFunction(event):
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   864
            row = self.StructureElementsGrid.GetGridCursorRow()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   865
            self.StructureElementsTable.SetValueByName(row, "Type", base_type)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   866
            self.RefreshTypeInfos()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   867
            self.StructureElementsTable.ResetView(self.StructureElementsGrid)
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   868
        return ElementTypeFunction
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   869
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   870
    def RefreshDisplayedInfos(self):
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   871
        selected = DATATYPE_TYPES_DICT[self.DerivationType.GetStringSelection()]
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   872
        if selected != self.CurrentPanel:
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   873
            if self.CurrentPanel == "Directly":
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   874
                self.DirectlyPanel.Hide()
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   875
            elif self.CurrentPanel == "Subrange":
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   876
                self.SubrangePanel.Hide()
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   877
            elif self.CurrentPanel == "Enumerated":
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   878
                self.EnumeratedPanel.Hide()
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   879
            elif self.CurrentPanel == "Array":
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   880
                self.ArrayPanel.Hide()
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   881
            elif self.CurrentPanel == "Structure":
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   882
                self.StructurePanel.Hide()
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   883
            self.CurrentPanel = selected
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   884
            if selected == "Directly":
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   885
                self.DirectlyPanel.Show()
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   886
            elif selected == "Subrange":
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   887
                self.SubrangePanel.Show()
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   888
            elif selected == "Enumerated":
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   889
                self.EnumeratedPanel.Show()
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   890
            elif selected == "Array":
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   891
                self.ArrayPanel.Show()
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   892
            elif selected == "Structure":
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   893
                self.StructurePanel.Show()
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   894
            self.MainSizer.Layout()
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   895
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   896
    def RefreshEnumeratedValues(self):
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   897
        selected = self.EnumeratedInitialValue.GetStringSelection()
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   898
        self.EnumeratedInitialValue.Clear()
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   899
        self.EnumeratedInitialValue.Append("")
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   900
        for value in self.EnumeratedValues.GetStrings():
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   901
            self.EnumeratedInitialValue.Append(value)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   902
        self.EnumeratedInitialValue.SetStringSelection(selected)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   903
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   904
    def RefreshBoundsRange(self):
231
fc2d6cbb8b39 Adding support for highlighing compiling errors from matiec
lbessard
parents: 215
diff changeset
   905
        range = self.Controler.GetDataTypeRange(self.SubrangeBaseType.GetStringSelection())
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   906
        if range is not None:
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   907
            min_value, max_value = range
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   908
            self.SubrangeMinimum.SetRange(min_value, max_value)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   909
            self.SubrangeMinimum.SetValue(min(max(min_value, self.SubrangeMinimum.GetValue()), max_value))
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   910
            self.SubrangeMaximum.SetRange(min_value, max_value)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   911
            self.SubrangeMaximum.SetValue(min(max(min_value, self.SubrangeMaximum.GetValue()), max_value))
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   912
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   913
    def RefreshSubrangeInitialValueRange(self):
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   914
        self.SubrangeInitialValue.SetRange(self.SubrangeMinimum.GetValue(), self.SubrangeMaximum.GetValue())
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   915
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   916
    def RefreshTypeInfos(self):
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   917
        selected = DATATYPE_TYPES_DICT[self.DerivationType.GetStringSelection()]
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   918
        infos = {"type" : selected}
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   919
        if selected == "Directly":
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   920
            infos["base_type"] = self.DirectlyBaseType.GetStringSelection()
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   921
            infos["initial"] = self.DirectlyInitialValue.GetValue()
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   922
        elif selected == "Subrange":
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   923
            infos["base_type"] = self.SubrangeBaseType.GetStringSelection()
389
6a72016d721a Adding support for plcopen version 2.01
laurent
parents: 379
diff changeset
   924
            infos["min"] = str(self.SubrangeMinimum.GetValue())
6a72016d721a Adding support for plcopen version 2.01
laurent
parents: 379
diff changeset
   925
            infos["max"] = str(self.SubrangeMaximum.GetValue())
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   926
            initial_value = self.SubrangeInitialValue.GetValue()
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   927
            if initial_value == infos["min"]:
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   928
                infos["initial"] = ""
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   929
            else:
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   930
                infos["initial"] = str(initial_value)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   931
        elif selected == "Enumerated":
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   932
            infos["values"] = self.EnumeratedValues.GetStrings()
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   933
            infos["initial"] = self.EnumeratedInitialValue.GetStringSelection()
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   934
        elif selected == "Array":
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   935
            infos["base_type"] = self.ArrayBaseType.GetStringSelection()
207
b1144bb36605 Bug with array dimensions edition fixed
lbessard
parents: 205
diff changeset
   936
            infos["dimensions"] = []
b1144bb36605 Bug with array dimensions edition fixed
lbessard
parents: 205
diff changeset
   937
            for dimensions in self.ArrayDimensions.GetStrings():
b1144bb36605 Bug with array dimensions edition fixed
lbessard
parents: 205
diff changeset
   938
                result = DIMENSION_MODEL.match(dimensions)
b1144bb36605 Bug with array dimensions edition fixed
lbessard
parents: 205
diff changeset
   939
                if result is None:
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   940
                    message = wx.MessageDialog(self, _("\"%s\" value isn't a valid array dimension!")%dimensions, _("Error"), wx.OK|wx.ICON_ERROR)
207
b1144bb36605 Bug with array dimensions edition fixed
lbessard
parents: 205
diff changeset
   941
                    message.ShowModal()
b1144bb36605 Bug with array dimensions edition fixed
lbessard
parents: 205
diff changeset
   942
                    message.Destroy()
b1144bb36605 Bug with array dimensions edition fixed
lbessard
parents: 205
diff changeset
   943
                    self.RefreshView()
b1144bb36605 Bug with array dimensions edition fixed
lbessard
parents: 205
diff changeset
   944
                    return
b1144bb36605 Bug with array dimensions edition fixed
lbessard
parents: 205
diff changeset
   945
                bounds = result.groups()
460
2ddf7bbd1f74 Bug on array dimensions bound test fixed
laurent
parents: 440
diff changeset
   946
                if int(bounds[0]) >= int(bounds[1]):
391
07447ee3538e Adding support for internationalization
laurent
parents: 389
diff changeset
   947
                    message = wx.MessageDialog(self, _("\"%s\" value isn't a valid array dimension!\nRight value must be greater than left value.")%dimensions, _("Error"), wx.OK|wx.ICON_ERROR)
207
b1144bb36605 Bug with array dimensions edition fixed
lbessard
parents: 205
diff changeset
   948
                    message.ShowModal()
b1144bb36605 Bug with array dimensions edition fixed
lbessard
parents: 205
diff changeset
   949
                    message.Destroy()
b1144bb36605 Bug with array dimensions edition fixed
lbessard
parents: 205
diff changeset
   950
                    self.RefreshView()
b1144bb36605 Bug with array dimensions edition fixed
lbessard
parents: 205
diff changeset
   951
                    return
389
6a72016d721a Adding support for plcopen version 2.01
laurent
parents: 379
diff changeset
   952
                infos["dimensions"].append(bounds)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   953
            infos["initial"] = self.ArrayInitialValue.GetValue()
295
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   954
        elif selected == "Structure":
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   955
            infos["elements"] = self.StructureElementsTable.GetData()
c6ef6d92ce16 Adding support for editing and using struct data types
lbessard
parents: 235
diff changeset
   956
            infos["initial"] = ""
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   957
        self.Controler.SetDataTypeInfos(self.TagName, infos)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   958
        self.ParentWindow.RefreshTitle()
494
c91644c2bfa7 Bug on FileMenu not refreshed when modifications fixed
laurent
parents: 462
diff changeset
   959
        self.ParentWindow.RefreshFileMenu()
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   960
        self.ParentWindow.RefreshEditMenu()
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents:
diff changeset
   961
231
fc2d6cbb8b39 Adding support for highlighing compiling errors from matiec
lbessard
parents: 215
diff changeset
   962
#-------------------------------------------------------------------------------
566
6014ef82a98a Adding support for searching text or regular expression in whole project
laurent
parents: 556
diff changeset
   963
#                        Highlights showing functions
231
fc2d6cbb8b39 Adding support for highlighing compiling errors from matiec
lbessard
parents: 215
diff changeset
   964
#-------------------------------------------------------------------------------
fc2d6cbb8b39 Adding support for highlighing compiling errors from matiec
lbessard
parents: 215
diff changeset
   965
566
6014ef82a98a Adding support for searching text or regular expression in whole project
laurent
parents: 556
diff changeset
   966
    def OnRefreshHighlightsTimer(self, event):
231
fc2d6cbb8b39 Adding support for highlighing compiling errors from matiec
lbessard
parents: 215
diff changeset
   967
        self.RefreshView()
566
6014ef82a98a Adding support for searching text or regular expression in whole project
laurent
parents: 556
diff changeset
   968
        event.Skip()
6014ef82a98a Adding support for searching text or regular expression in whole project
laurent
parents: 556
diff changeset
   969
6014ef82a98a Adding support for searching text or regular expression in whole project
laurent
parents: 556
diff changeset
   970
    def ClearHighlights(self, highlight_type=None):
6014ef82a98a Adding support for searching text or regular expression in whole project
laurent
parents: 556
diff changeset
   971
        if highlight_type is None:
6014ef82a98a Adding support for searching text or regular expression in whole project
laurent
parents: 556
diff changeset
   972
            self.Highlights = []
6014ef82a98a Adding support for searching text or regular expression in whole project
laurent
parents: 556
diff changeset
   973
        else:
6014ef82a98a Adding support for searching text or regular expression in whole project
laurent
parents: 556
diff changeset
   974
            self.Highlights = [(infos, start, end, highlight) for (infos, start, end, highlight) in self.Highlights if highlight != highlight_type]
576
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   975
        for control in self.HighlightControls.itervalues():
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   976
            if isinstance(control, (wx.ComboBox, wx.SpinCtrl)):
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   977
                control.SetBackgroundColour(wx.NullColour)
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   978
                control.SetForegroundColour(wx.NullColour)
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   979
            elif isinstance(control, wx.TextCtrl):
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   980
                value = control.GetValue()
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   981
                control.SetStyle(0, len(value), wx.TextAttr(wx.NullColour))
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   982
            elif isinstance(control, wx.gizmos.EditableListBox):
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   983
                listctrl = control.GetListCtrl()
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   984
                for i in xrange(listctrl.GetItemCount()):
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   985
                    listctrl.SetItemBackgroundColour(i, wx.NullColour)
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   986
                    listctrl.SetItemTextColour(i, wx.NullColour)
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   987
        self.StructureElementsTable.ClearHighlights(highlight_type)
566
6014ef82a98a Adding support for searching text or regular expression in whole project
laurent
parents: 556
diff changeset
   988
        self.RefreshView()
6014ef82a98a Adding support for searching text or regular expression in whole project
laurent
parents: 556
diff changeset
   989
6014ef82a98a Adding support for searching text or regular expression in whole project
laurent
parents: 556
diff changeset
   990
    def AddHighlight(self, infos, start, end ,highlight_type):
6014ef82a98a Adding support for searching text or regular expression in whole project
laurent
parents: 556
diff changeset
   991
        self.Highlights.append((infos, start, end, highlight_type))
6014ef82a98a Adding support for searching text or regular expression in whole project
laurent
parents: 556
diff changeset
   992
        self.RefreshHighlightsTimer.Start(int(REFRESH_HIGHLIGHT_PERIOD * 1000), oneShot=True)
231
fc2d6cbb8b39 Adding support for highlighing compiling errors from matiec
lbessard
parents: 215
diff changeset
   993
576
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   994
    def ShowHighlights(self):
231
fc2d6cbb8b39 Adding support for highlighing compiling errors from matiec
lbessard
parents: 215
diff changeset
   995
        type_infos = self.Controler.GetDataTypeInfos(self.TagName)
566
6014ef82a98a Adding support for searching text or regular expression in whole project
laurent
parents: 556
diff changeset
   996
        for infos, start, end, highlight_type in self.Highlights:
576
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   997
            if infos[0] == "struct":
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   998
                self.StructureElementsTable.AddHighlight(infos[1:], highlight_type)
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
   999
            else:
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
  1000
                control = self.HighlightControls.get((type_infos["type"], infos[0]), None)
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
  1001
                if control is not None:
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
  1002
                    if isinstance(control, (wx.ComboBox, wx.SpinCtrl)):
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
  1003
                        control.SetBackgroundColour(highlight_type[0])
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
  1004
                        control.SetForegroundColour(highlight_type[1])
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
  1005
                    elif isinstance(control, wx.TextCtrl):
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
  1006
                        control.SetStyle(start[1], end[1] + 1, wx.TextAttr(highlight_type[1], highlight_type[0]))
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
  1007
                    elif isinstance(control, wx.gizmos.EditableListBox):
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
  1008
                        listctrl = control.GetListCtrl()
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
  1009
                        listctrl.SetItemBackgroundColour(infos[1], highlight_type[0])
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
  1010
                        listctrl.SetItemTextColour(infos[1], highlight_type[1])
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
  1011
                        listctrl.Select(listctrl.FocusedItem, False)
3f2024f30553 Adding support for searching pattern in datatype elements
laurent
parents: 566
diff changeset
  1012