--- a/controls/VariablePanel.py Fri Jun 15 18:03:25 2012 +0200
+++ b/controls/VariablePanel.py Mon Jun 25 20:03:53 2012 +0200
@@ -23,32 +23,34 @@
#Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
import os
-import wx, wx.grid
import re
-
from types import TupleType, StringType, UnicodeType
+import wx
+import wx.grid
+import wx.lib.buttons
+
from plcopen.structures import LOCATIONDATATYPES, TestIdentifier, IEC_KEYWORDS
from graphics.GraphicCommons import REFRESH_HIGHLIGHT_PERIOD, ERROR_HIGHLIGHT
from dialogs.ArrayTypeDialog import ArrayTypeDialog
from CustomGrid import CustomGrid
from CustomTable import CustomTable
from LocationCellEditor import LocationCellEditor
-
-# Compatibility function for wx versions < 2.6
+from utils.BitmapLibrary import GetBitmap
+
+#-------------------------------------------------------------------------------
+# Helpers
+#-------------------------------------------------------------------------------
+
def AppendMenu(parent, help, id, kind, text):
if wx.VERSION >= (2, 6, 0):
parent.Append(help=help, id=id, kind=kind, text=text)
else:
parent.Append(helpString=help, id=id, kind=kind, item=text)
-[TITLE, TOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU, TYPESTREE,
- POUINSTANCEVARIABLESPANEL, LIBRARYTREE, SCALING
-] = range(9)
-
-#-------------------------------------------------------------------------------
-# Variables Editor Panel
-#-------------------------------------------------------------------------------
+[TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU, PROJECTTREE,
+ POUINSTANCEVARIABLESPANEL, LIBRARYTREE, SCALING, PAGETITLES
+] = range(10)
def GetVariableTableColnames(location):
_ = lambda x : x
@@ -88,6 +90,10 @@
LOCATION_MODEL = re.compile("((?:%[IQM](?:\*|(?:[XBWLD]?[0-9]+(?:\.[0-9]+)*)))?)$")
+#-------------------------------------------------------------------------------
+# Variables Panel Table
+#-------------------------------------------------------------------------------
+
class VariableTable(CustomTable):
"""
@@ -205,7 +211,10 @@
grid.SetCellBackgroundColour(row, col, highlight_colours[0])
grid.SetCellTextColour(row, col, highlight_colours[1])
self.ResizeRow(grid, row)
-
+
+#-------------------------------------------------------------------------------
+# Variable Panel Drop Target
+#-------------------------------------------------------------------------------
class VariableDropTarget(wx.TextDropTarget):
'''
@@ -301,154 +310,101 @@
if message is not None:
wx.CallAfter(self.ShowMessage, message)
-
-
+
def ShowMessage(self, message):
message = wx.MessageDialog(self.ParentWindow, message, _("Error"), wx.OK|wx.ICON_ERROR)
message.ShowModal()
message.Destroy()
-[ID_VARIABLEEDITORPANEL, ID_VARIABLEEDITORPANELVARIABLESGRID,
- ID_VARIABLEEDITORCONTROLPANEL, ID_VARIABLEEDITORPANELRETURNTYPELABEL,
- ID_VARIABLEEDITORPANELRETURNTYPE, ID_VARIABLEEDITORPANELDESCRIPTIONLABEL,
- ID_VARIABLEEDITORPANELDESCRIPTION, ID_VARIABLEEDITORPANELCLASSFILTERLABEL,
- ID_VARIABLEEDITORPANELCLASSFILTER, ID_VARIABLEEDITORPANELADDBUTTON,
- ID_VARIABLEEDITORPANELDELETEBUTTON, ID_VARIABLEEDITORPANELUPBUTTON,
- ID_VARIABLEEDITORPANELDOWNBUTTON,
-] = [wx.NewId() for _init_ctrls in range(13)]
+#-------------------------------------------------------------------------------
+# Variable Panel
+#-------------------------------------------------------------------------------
class VariablePanel(wx.Panel):
- if wx.VERSION < (2, 6, 0):
- def Bind(self, event, function, id = None):
- if id is not None:
- event(self, id, function)
- else:
- event(self, function)
-
- def _init_coll_MainSizer_Items(self, parent):
- parent.AddWindow(self.ControlPanel, 0, border=5, flag=wx.GROW|wx.ALL)
- parent.AddWindow(self.VariablesGrid, 0, border=0, flag=wx.GROW)
-
- def _init_coll_MainSizer_Growables(self, parent):
- parent.AddGrowableCol(0)
- parent.AddGrowableRow(1)
-
- def _init_coll_ControlPanelSizer_Items(self, parent):
- parent.AddWindow(self.ReturnTypeLabel, 0, border=0, flag=wx.ALIGN_CENTER_VERTICAL)
- parent.AddWindow(self.ReturnType, 0, border=0, flag=0)
- parent.AddWindow(self.DescriptionLabel, 0, border=0, flag=wx.ALIGN_CENTER_VERTICAL)
- parent.AddWindow(self.Description, 0, border=0, flag=0)
- parent.AddWindow(self.ClassFilterLabel, 0, border=0, flag=wx.ALIGN_CENTER_VERTICAL)
- parent.AddWindow(self.ClassFilter, 0, border=0, flag=0)
- parent.AddWindow(self.AddButton, 0, border=0, flag=0)
- parent.AddWindow(self.DeleteButton, 0, border=0, flag=0)
- parent.AddWindow(self.UpButton, 0, border=0, flag=0)
- parent.AddWindow(self.DownButton, 0, border=0, flag=0)
-
- def _init_coll_ControlPanelSizer_Growables(self, parent):
- parent.AddGrowableCol(5)
- parent.AddGrowableRow(0)
-
- def _init_sizers(self):
+ def __init__(self, parent, window, controler, element_type, debug=False):
+ wx.Panel.__init__(self, parent, style=wx.TAB_TRAVERSAL)
+
self.MainSizer = wx.FlexGridSizer(cols=1, hgap=10, rows=2, vgap=0)
- self.ControlPanelSizer = wx.FlexGridSizer(cols=10, hgap=5, rows=1, vgap=5)
-
- self._init_coll_MainSizer_Items(self.MainSizer)
- self._init_coll_MainSizer_Growables(self.MainSizer)
- self._init_coll_ControlPanelSizer_Items(self.ControlPanelSizer)
- self._init_coll_ControlPanelSizer_Growables(self.ControlPanelSizer)
-
- self.ControlPanel.SetSizer(self.ControlPanelSizer)
+ self.MainSizer.AddGrowableCol(0)
+ self.MainSizer.AddGrowableRow(1)
+
+ controls_sizer = wx.FlexGridSizer(cols=10, hgap=5, rows=1, vgap=5)
+ controls_sizer.AddGrowableCol(5)
+ controls_sizer.AddGrowableRow(0)
+ self.MainSizer.AddSizer(controls_sizer, border=5, flag=wx.GROW|wx.ALL)
+
+ self.ReturnTypeLabel = wx.StaticText(self, label=_('Return Type:'))
+ controls_sizer.AddWindow(self.ReturnTypeLabel, flag=wx.ALIGN_CENTER_VERTICAL)
+
+ self.ReturnType = wx.ComboBox(self,
+ size=wx.Size(145, -1), style=wx.CB_READONLY)
+ self.Bind(wx.EVT_COMBOBOX, self.OnReturnTypeChanged, self.ReturnType)
+ controls_sizer.AddWindow(self.ReturnType)
+
+ self.DescriptionLabel = wx.StaticText(self, label=_('Description:'))
+ controls_sizer.AddWindow(self.DescriptionLabel, flag=wx.ALIGN_CENTER_VERTICAL)
+
+ self.Description = wx.TextCtrl(self,
+ size=wx.Size(250, -1), style=wx.TE_PROCESS_ENTER)
+ self.Bind(wx.EVT_TEXT_ENTER, self.OnDescriptionChanged, self.Description)
+ self.Description.Bind(wx.EVT_KILL_FOCUS, self.OnDescriptionChanged)
+ controls_sizer.AddWindow(self.Description)
+
+ class_filter_label = wx.StaticText(self, label=_('Class Filter:'))
+ controls_sizer.AddWindow(class_filter_label, flag=wx.ALIGN_CENTER_VERTICAL)
+
+ self.ClassFilter = wx.ComboBox(self,
+ size=wx.Size(145, -1), style=wx.CB_READONLY)
+ self.Bind(wx.EVT_COMBOBOX, self.OnClassFilter, self.ClassFilter)
+ controls_sizer.AddWindow(self.ClassFilter)
+
+ for name, bitmap, help in [
+ ("AddButton", "add_element", _("Add variable")),
+ ("DeleteButton", "remove_element", _("Remove variable")),
+ ("UpButton", "up", _("Move variable up")),
+ ("DownButton", "down", _("Move variable down"))]:
+ button = wx.lib.buttons.GenBitmapButton(self, bitmap=GetBitmap(bitmap),
+ size=wx.Size(28, 28), style=wx.NO_BORDER)
+ button.SetToolTipString(help)
+ setattr(self, name, button)
+ controls_sizer.AddWindow(button)
+
+ self.VariablesGrid = CustomGrid(self, style=wx.VSCROLL)
+ self.VariablesGrid.SetDropTarget(VariableDropTarget(self))
+ self.VariablesGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE,
+ self.OnVariablesGridCellChange)
+ self.VariablesGrid.Bind(wx.grid.EVT_GRID_CELL_LEFT_CLICK,
+ self.OnVariablesGridCellLeftClick)
+ self.VariablesGrid.Bind(wx.grid.EVT_GRID_EDITOR_SHOWN,
+ self.OnVariablesGridEditorShown)
+ self.MainSizer.AddWindow(self.VariablesGrid, flag=wx.GROW)
+
self.SetSizer(self.MainSizer)
-
- def _init_ctrls(self, prnt):
- wx.Panel.__init__(self, id=ID_VARIABLEEDITORPANEL,
- name='VariableEditorPanel', parent=prnt, pos=wx.Point(0, 0),
- size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL)
-
- self.VariablesGrid = CustomGrid(id=ID_VARIABLEEDITORPANELVARIABLESGRID,
- name='VariablesGrid', parent=self, pos=wx.Point(0, 0),
- size=wx.Size(0, 0), style=wx.VSCROLL)
- self.VariablesGrid.SetDropTarget(VariableDropTarget(self))
- if wx.VERSION >= (2, 6, 0):
- self.VariablesGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.OnVariablesGridCellChange)
- self.VariablesGrid.Bind(wx.grid.EVT_GRID_CELL_LEFT_CLICK, self.OnVariablesGridCellLeftClick)
- self.VariablesGrid.Bind(wx.grid.EVT_GRID_EDITOR_SHOWN, self.OnVariablesGridEditorShown)
- else:
- wx.grid.EVT_GRID_CELL_CHANGE(self.VariablesGrid, self.OnVariablesGridCellChange)
- wx.grid.EVT_GRID_CELL_LEFT_CLICK(self.VariablesGrid, self.OnVariablesGridCellLeftClick)
- wx.grid.EVT_GRID_EDITOR_SHOWN(self.VariablesGrid, self.OnVariablesGridEditorShown)
-
- self.ControlPanel = wx.ScrolledWindow(id=ID_VARIABLEEDITORCONTROLPANEL,
- name='ControlPanel', parent=self, pos=wx.Point(0, 0),
- size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL)
- self.ControlPanel.SetScrollRate(10, 0)
-
- self.ReturnTypeLabel = wx.StaticText(id=ID_VARIABLEEDITORPANELRETURNTYPELABEL,
- label=_('Return Type:'), name='ReturnTypeLabel', parent=self.ControlPanel,
- pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
-
- self.ReturnType = wx.ComboBox(id=ID_VARIABLEEDITORPANELRETURNTYPE,
- name='ReturnType', parent=self.ControlPanel, pos=wx.Point(0, 0),
- size=wx.Size(145, -1), style=wx.CB_READONLY)
- self.Bind(wx.EVT_COMBOBOX, self.OnReturnTypeChanged, id=ID_VARIABLEEDITORPANELRETURNTYPE)
-
- self.DescriptionLabel = wx.StaticText(id=ID_VARIABLEEDITORPANELDESCRIPTIONLABEL,
- label=_('Description:'), name='DescriptionLabel', parent=self.ControlPanel,
- pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
-
- self.Description = wx.TextCtrl(id=ID_VARIABLEEDITORPANELDESCRIPTION,
- name='Description', parent=self.ControlPanel, pos=wx.Point(0, 0),
- size=wx.Size(250, -1), style=wx.TE_PROCESS_ENTER)
- self.Bind(wx.EVT_TEXT_ENTER, self.OnDescriptionChanged, id=ID_VARIABLEEDITORPANELDESCRIPTION)
- self.Description.Bind(wx.EVT_KILL_FOCUS, self.OnDescriptionChanged)
-
- self.ClassFilterLabel = wx.StaticText(id=ID_VARIABLEEDITORPANELCLASSFILTERLABEL,
- label=_('Class Filter:'), name='ClassFilterLabel', parent=self.ControlPanel,
- pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
-
- self.ClassFilter = wx.ComboBox(id=ID_VARIABLEEDITORPANELCLASSFILTER,
- name='ClassFilter', parent=self.ControlPanel, pos=wx.Point(0, 0),
- size=wx.Size(145, -1), style=wx.CB_READONLY)
- self.Bind(wx.EVT_COMBOBOX, self.OnClassFilter, id=ID_VARIABLEEDITORPANELCLASSFILTER)
-
- self.AddButton = wx.Button(id=ID_VARIABLEEDITORPANELADDBUTTON, label=_('Add'),
- name='AddButton', parent=self.ControlPanel, pos=wx.Point(0, 0),
- size=wx.DefaultSize, style=0)
-
- self.DeleteButton = wx.Button(id=ID_VARIABLEEDITORPANELDELETEBUTTON, label=_('Delete'),
- name='DeleteButton', parent=self.ControlPanel, pos=wx.Point(0, 0),
- size=wx.DefaultSize, style=0)
-
- self.UpButton = wx.Button(id=ID_VARIABLEEDITORPANELUPBUTTON, label='^',
- name='UpButton', parent=self.ControlPanel, pos=wx.Point(0, 0),
- size=wx.Size(28, -1), style=0)
-
- self.DownButton = wx.Button(id=ID_VARIABLEEDITORPANELDOWNBUTTON, label='v',
- name='DownButton', parent=self.ControlPanel, pos=wx.Point(0, 0),
- size=wx.Size(28, -1), style=0)
-
- self._init_sizers()
-
- def __init__(self, parent, window, controler, element_type, debug=False):
- self._init_ctrls(parent)
+
self.ParentWindow = window
self.Controler = controler
self.ElementType = element_type
self.Debug = debug
self.RefreshHighlightsTimer = wx.Timer(self, -1)
- self.Bind(wx.EVT_TIMER, self.OnRefreshHighlightsTimer, self.RefreshHighlightsTimer)
+ self.Bind(wx.EVT_TIMER, self.OnRefreshHighlightsTimer,
+ self.RefreshHighlightsTimer)
self.Filter = "All"
self.FilterChoices = []
self.FilterChoiceTransfer = GetFilterChoiceTransfer()
- self.DefaultValue = { "Name" : "", "Class" : "", "Type" : "INT", "Location" : "",
- "Initial Value" : "", "Option" : "",
- "Documentation" : "", "Edit" : True
- }
+ self.DefaultValue = {
+ "Name" : "",
+ "Class" : "",
+ "Type" : "INT",
+ "Location" : "",
+ "Initial Value" : "",
+ "Option" : "",
+ "Documentation" : "",
+ "Edit" : True
+ }
if element_type in ["config", "resource"]:
self.DefaultTypes = {"All" : "Global"}
@@ -636,7 +592,6 @@
self.RefreshValues()
self.VariablesGrid.RefreshButtons()
- self.ControlPanelSizer.Layout()
self.MainSizer.Layout()
def OnReturnTypeChanged(self, event):