--- a/PLCOpenEditor.py Tue Nov 13 17:21:30 2007 +0100
+++ b/PLCOpenEditor.py Fri Nov 16 17:43:32 2007 +0100
@@ -45,11 +45,12 @@
CWD = os.path.split(__file__)[0]
[ID_PLCOPENEDITOR, ID_PLCOPENEDITORPROJECTTREE,
- ID_PLCOPENEDITORMAINSPLITTER, ID_PLCOPENEDITOREDITORPANEL,
- ID_PLCOPENEDITORTABSOPENED, ID_PLCOPENEDITORTOOLBAR,
- ID_PLCOPENEDITORDEFAULTTOOLBAR, ID_PLCOPENEDITORSFCTOOLBAR,
- ID_PLCOPENEDITORFBDTOOLBAR, ID_PLCOPENEDITORLDTOOLBAR,
-] = [wx.NewId() for _init_ctrls in range(10)]
+ ID_PLCOPENEDITORMAINSPLITTER, ID_PLCOPENEDITORSECONDSPLITTER,
+ ID_PLCOPENEDITOREDITORPANEL, ID_PLCOPENEDITORTABSOPENED,
+ ID_PLCOPENEDITORTOOLBAR, ID_PLCOPENEDITORDEFAULTTOOLBAR,
+ ID_PLCOPENEDITORSFCTOOLBAR, ID_PLCOPENEDITORFBDTOOLBAR,
+ ID_PLCOPENEDITORLDTOOLBAR,
+] = [wx.NewId() for _init_ctrls in range(11)]
[ID_PLCOPENEDITORFILEMENUITEMS0, ID_PLCOPENEDITORFILEMENUITEMS1,
ID_PLCOPENEDITORFILEMENUITEMS2, ID_PLCOPENEDITORFILEMENUITEMS3,
@@ -139,7 +140,12 @@
else:
parent.Append(helpString=help, id=id, kind=kind, item=text)
-class PLCOpenEditor(wx.Frame):
+if wx.VERSION >= (2, 8, 0):
+ base_class = wx.aui.AuiMDIParentFrame
+else:
+ base_class = wx.Frame
+
+class PLCOpenEditor(base_class):
_custom_classes = {'wx.SashWindow' : ['Viewer']}
if wx.VERSION < (2, 6, 0):
@@ -303,20 +309,28 @@
self._init_coll_ConfigMenu_Items(self.ConfigMenu)
def _init_ctrls(self, prnt):
- wx.Frame.__init__(self, id=ID_PLCOPENEDITOR, name=u'PLCOpenEditor',
- parent=prnt, pos=wx.Point(235, 287), size=wx.Size(1000, 600),
- style=wx.DEFAULT_FRAME_STYLE, title=u'PLCOpenEditor')
+ if wx.VERSION >= (2, 8, 0):
+ wx.aui.AuiMDIParentFrame.__init__(self, winid=ID_PLCOPENEDITOR, name=u'PLCOpenEditor',
+ parent=prnt, pos=wx.DefaultPosition, size=wx.Size(1000, 600),
+ style=wx.DEFAULT_FRAME_STYLE|wx.SUNKEN_BORDER|wx.CLIP_CHILDREN, title=u'PLCOpenEditor')
+ else:
+ wx.Frame.__init__(self, id=ID_PLCOPENEDITOR, name=u'PLCOpenEditor',
+ parent=prnt, pos=wx.DefaultPosition, size=wx.Size(1000, 600),
+ style=wx.DEFAULT_FRAME_STYLE, title=u'PLCOpenEditor')
self._init_utils()
self.SetClientSize(wx.Size(1000, 600))
self.SetMenuBar(self.menuBar1)
self.Bind(wx.EVT_CLOSE, self.OnCloseFrame)
if not self.ModeSolo:
+ self.Bind(wx.EVT_MENU, self.OnCloseTabMenu, id=ID_PLCOPENEDITORFILEMENUITEMS2)
self.Bind(wx.EVT_MENU, self.OnSaveProjectMenu, id=ID_PLCOPENEDITORFILEMENUITEMS5)
- accel = wx.AcceleratorTable([wx.AcceleratorEntry(wx.ACCEL_CTRL, 83, ID_PLCOPENEDITORFILEMENUITEMS5)])
+ accel = wx.AcceleratorTable([wx.AcceleratorEntry(wx.ACCEL_CTRL, 119, ID_PLCOPENEDITORFILEMENUITEMS2),
+ wx.AcceleratorEntry(wx.ACCEL_CTRL, 83, ID_PLCOPENEDITORFILEMENUITEMS5)])
self.SetAcceleratorTable(accel)
if wx.VERSION >= (2, 8, 0):
self.AUIManager = wx.aui.AuiManager(self)
+ self.AUIManager.SetDockSizeConstraint(0.5, 0.5)
self.Panes = {}
if wx.VERSION < (2, 8, 0):
@@ -335,7 +349,7 @@
name='treeCtrl1', parent=self, pos=wx.Point(0, 0),
size=wx.Size(200, -1),
style=wx.TR_HAS_BUTTONS|wx.TR_EDIT_LABELS|wx.TR_SINGLE|wx.SUNKEN_BORDER)
- self.AUIManager.AddPane(self.ProjectTree, wx.aui.AuiPaneInfo().Caption("Project Tree").CloseButton(False))
+ self.AUIManager.AddPane(self.ProjectTree, wx.aui.AuiPaneInfo().Caption("Project Tree").Left().Layer(1).BestSize(wx.Size(200, 500)).CloseButton(False))
if wx.VERSION >= (2, 6, 0):
self.ProjectTree.Bind(wx.EVT_RIGHT_UP, self.OnProjectTreeRightUp)
else:
@@ -375,28 +389,42 @@
id=ID_PLCOPENEDITORTOOLBARSELECTION)
if wx.VERSION < (2, 8, 0):
+ self.SecondSplitter = wx.SplitterWindow(id=ID_PLCOPENEDITORSECONDSPLITTER,
+ name='SecondSplitter', parent=self.MainSplitter, point=wx.Point(0, 0),
+ size=wx.Size(0, 0), style=wx.SP_3D)
+ self.SecondSplitter.SetMinimumPaneSize(1)
+
+ self.MainSplitter.SplitVertically(self.ProjectTree, self.SecondSplitter, 200)
+
self.TabsOpened = wx.Notebook(id=ID_PLCOPENEDITORTABSOPENED,
- name='TabsOpened', parent=self.MainSplitter, pos=wx.Point(0,
+ name='TabsOpened', parent=self.SecondSplitter, pos=wx.Point(0,
0), size=wx.Size(0, 0), style=0)
- self.MainSplitter.SplitVertically(self.ProjectTree, self.TabsOpened, 200)
- else:
- self.TabsOpened = wx.Notebook(id=ID_PLCOPENEDITORTABSOPENED,
- name='TabsOpened', parent=self, pos=wx.Point(0,
- 0), size=wx.Size(0, 0), style=0)
- self.AUIManager.AddPane(self.TabsOpened, wx.aui.AuiPaneInfo().Name("TabsOpened").CenterPane())
-
- if wx.VERSION >= (2, 6, 0):
- self.TabsOpened.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED,
- self.OnPouSelectedChanged, id=ID_PLCOPENEDITORTABSOPENED)
- else:
- wx.EVT_NOTEBOOK_PAGE_CHANGED(self.TabsOpened, ID_PLCOPENEDITORTABSOPENED,
- self.OnPouSelectedChanged)
-
- if wx.VERSION > (2, 8, 0):
+ if wx.VERSION >= (2, 6, 0):
+ self.TabsOpened.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED,
+ self.OnPouSelectedChanged, id=ID_PLCOPENEDITORTABSOPENED)
+ else:
+ wx.EVT_NOTEBOOK_PAGE_CHANGED(self.TabsOpened, ID_PLCOPENEDITORTABSOPENED,
+ self.OnPouSelectedChanged)
+
+ if wx.VERSION < (2, 8, 0):
+ self.VariablePanelIndexer = VariablePanelIndexer(self.SecondSplitter, self.Controler)
+
+ self.SecondSplitter.SplitHorizontally(self.TabsOpened, self.VariablePanelIndexer, -200)
+ else:
+ self.VariablePanelIndexer = VariablePanelIndexer(self, self.Controler)
+ self.AUIManager.AddPane(self.VariablePanelIndexer, wx.aui.AuiPaneInfo().Caption("Variable Panel").Bottom().Layer(0).BestSize(wx.Size(800, 200)).CloseButton(False))
+
self.AUIManager.Update();
def __init__(self, parent, controler = None, fileOpen = None):
self.ModeSolo = controler == None
+ if self.ModeSolo:
+ self.Controler = PLCControler()
+ if fileOpen is not None:
+ self.Controler.OpenXMLFile(fileOpen)
+ else:
+ self.Controler = controler
+
self._init_ctrls(parent)
if wx.Platform != '__WXMSW__':
@@ -405,26 +433,109 @@
self.TreeImageList.Add(wx.Bitmap(os.path.join(CWD, 'Images', '%s.png'%language)))
self.ProjectTree.AssignImageList(self.TreeImageList)
- if self.ModeSolo:
- self.Controler = PLCControler()
- if fileOpen:
- self.Controler.OpenXMLFile(fileOpen)
- self.RefreshProjectTree()
- else:
- self.Controler = controler
- self.RefreshProjectTree()
-
self.CurrentToolBar = []
self.CurrentLanguage = ""
self.CopyBuffer = None
self.DrawingMode = FREEDRAWING_MODE
#self.DrawingMode = DRIVENDRAWING_MODE
+ if not self.ModeSolo or fileOpen is not None:
+ self.RefreshProjectTree()
+
self.RefreshFileMenu()
self.RefreshEditMenu()
self.RefreshTitle()
self.RefreshToolBar()
+ def GetPageCount(self):
+ if wx.VERSION >= (2, 8, 0):
+ notebook = self.GetNotebook()
+ if notebook is not None:
+ return notebook.GetPageCount()
+ else:
+ return 0
+ else:
+ return self.TabsOpened.GetPageCount()
+
+ def GetPage(self, idx):
+ if wx.VERSION >= (2, 8, 0):
+ notebook = self.GetNotebook()
+ if notebook is not None:
+ return notebook.GetPage(idx).GetViewer()
+ else:
+ return None
+ else:
+ return self.TabsOpened.GetPage(idx)
+
+ def GetPageSelection(self):
+ if wx.VERSION >= (2, 8, 0):
+ notebook = self.GetNotebook()
+ if notebook is not None:
+ return notebook.GetSelection()
+ else:
+ return -1
+ else:
+ return self.TabsOpened.GetSelection()
+
+ def SetPageSelection(self, idx):
+ if wx.VERSION >= (2, 8, 0):
+ notebook = self.GetNotebook()
+ if notebook is not None:
+ notebook.SetSelection(idx)
+ else:
+ self.TabsOpened.SetSelection(idx)
+
+ def DeletePage(self, idx):
+ if wx.VERSION >= (2, 8, 0):
+ notebook = self.GetNotebook()
+ if notebook is not None:
+ notebook.DeletePage(idx)
+ else:
+ self.TabsOpened.DeletePage(idx)
+
+ def DeleteAllPages(self):
+ if wx.VERSION >= (2, 8, 0):
+ notebook = self.GetNotebook()
+ if notebook is not None:
+ for idx in xrange(notebook.GetPageCount()):
+ notebook.DeletePage(idx)
+ else:
+ self.TabsOpened.DeleteAllPages()
+
+ def SetPageText(self, idx, text):
+ if wx.VERSION >= (2, 8, 0):
+ notebook = self.GetNotebook()
+ if notebook is not None:
+ return notebook.SetPageText(idx, text)
+ else:
+ return self.TabsOpened.SetPageText(idx, text)
+
+ def GetPageText(self, idx):
+ if wx.VERSION >= (2, 8, 0):
+ notebook = self.GetNotebook()
+ if notebook is not None:
+ return notebook.GetPageText(idx)
+ else:
+ return ""
+ else:
+ return self.TabsOpened.GetPageText(idx)
+
+ def OnPageClose(self, event):
+ selected = self.GetPageSelection()
+ if selected >= 0:
+ tagname = self.GetPage(selected).GetTagName()
+ self.VariablePanelIndexer.RemoveVariablePanel(tagname)
+ if self.GetPageCount() > 0:
+ new_index = min(selected, self.GetPageCount() - 1)
+ tagname = self.GetPage(new_index).GetTagName()
+ self.SetPageSelection(new_index)
+ self.VariablePanelIndexer.ChangeVariablePanel(tagname)
+ self.RefreshTitle()
+ self.RefreshFileMenu()
+ self.RefreshEditMenu()
+ self.RefreshToolBar()
+ event.Skip()
+
def GetCopyBuffer(self):
return self.CopyBuffer
@@ -444,7 +555,7 @@
def RefreshFileMenu(self):
if self.FileMenu:
if self.Controler.HasOpenedProject():
- if self.TabsOpened.GetPageCount() > 0:
+ if self.GetPageCount() > 0:
self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS2, True)
else:
self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS2, False)
@@ -471,7 +582,7 @@
self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS1, False)
self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS2, False)
if self.Controler.HasOpenedProject():
- if self.TabsOpened.GetPageCount() > 0:
+ if self.GetPageCount() > 0:
self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS0, True)
else:
self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS0, False)
@@ -481,7 +592,6 @@
self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS0, False)
self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS8, False)
self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS9, False)
- bodytype = self.Controler.GetCurrentElementEditingBodyType()
self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS4, True)
self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS5, True)
if self.CopyBuffer is not None:
@@ -489,10 +599,13 @@
else:
self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS6, False)
- def RefreshEditor(self):
- selected = self.TabsOpened.GetSelection()
+ def RefreshEditor(self, variablepanel = True):
+ selected = self.GetPageSelection()
if selected != -1:
- self.TabsOpened.GetPage(selected).RefreshView()
+ window = self.GetPage(selected)
+ window.RefreshView()
+ if variablepanel:
+ self.VariablePanelIndexer.RefreshVariablePanel(window.GetTagName())
def ShowProperties(self):
old_values = self.Controler.GetProjectProperties()
@@ -508,7 +621,7 @@
def OnCloseFrame(self, event):
if not self.ModeSolo and getattr(self, "_onclose", None) is not None:
- self.Controler.CloseAllElements()
+ self.AUIManager.UnInit()
self._onclose()
event.Skip()
elif not self.Controler.ProjectIsSaved():
@@ -520,6 +633,7 @@
event.Skip()
elif answer == wx.ID_NO:
self.Controler.Reset()
+ self.AUIManager.UnInit()
wx.CallAfter(self.Close)
event.Skip()
else:
@@ -552,7 +666,7 @@
filepath = dialog.GetPath()
if os.path.isfile(filepath):
self.Controler.OpenXMLFile(filepath)
- self.TabsOpened.DeleteAllPages()
+ self.DeleteAllPages()
self.RefreshProjectTree()
self.RefreshTitle()
self.RefreshFileMenu()
@@ -562,12 +676,16 @@
event.Skip()
def OnCloseTabMenu(self, event):
- selected = self.TabsOpened.GetSelection()
+ selected = self.GetPageSelection()
if selected >= 0:
- self.Controler.CloseElementEditing()
- self.TabsOpened.DeletePage(selected)
- if self.TabsOpened.GetPageCount() > 0:
- self.TabsOpened.SetSelection(min(selected, self.TabsOpened.GetPageCount() - 1))
+ tagname = self.GetPage(selected).GetTagName()
+ self.DeletePage(selected)
+ self.VariablePanelIndexer.RemoveVariablePanel(tagname)
+ if self.GetPageCount() > 0:
+ new_index = min(selected, self.GetPageCount() - 1)
+ tagname = self.GetPage(new_index).GetTagName()
+ self.SetPageSelection(new_index)
+ self.VariablePanelIndexer.ChangeVariablePanel(tagname)
self.RefreshTitle()
self.RefreshFileMenu()
self.RefreshEditMenu()
@@ -575,7 +693,8 @@
event.Skip()
def OnCloseProjectMenu(self, event):
- self.TabsOpened.DeleteAllPages()
+ self.DeleteAllPages()
+ self.VariablePanelIndexer.RemoveAllPanels()
self.ProjectTree.DeleteAllItems()
self.Controler.Reset()
self.RefreshTitle()
@@ -654,15 +773,17 @@
event.Skip()
def ResetCurrentMode(self):
- selected = self.TabsOpened.GetSelection()
+ selected = self.GetPageSelection()
if selected != -1:
- window = self.TabsOpened.GetPage(selected)
+ window = self.GetPage(selected)
window.SetMode(MODE_SELECTION)
if wx.VERSION < (2, 8, 0):
- self.ToolBar.ToggleTool(ID_PLCOPENEDITORTOOLBARSELECTION, True)
- else:
- self.Panes["ToolBar"].ToggleTool(ID_PLCOPENEDITORTOOLBARSELECTION, True)
-
+ ToolBar = self.ToolBar
+ else:
+ ToolBar = self.Panes["ToolBar"]
+ if ToolBar:
+ ToolBar.ToggleTool(ID_PLCOPENEDITORTOOLBARSELECTION, True)
+
def ResetToolToggle(self, id):
if wx.VERSION < (2, 8, 0):
tool = self.ToolBar.FindById(id)
@@ -671,163 +792,171 @@
tool.SetToggle(False)
def OnSelectionTool(self, event):
- selected = self.TabsOpened.GetSelection()
+ self.GetPageSelection()
if selected != -1:
- self.TabsOpened.GetPage(selected).SetMode(MODE_SELECTION)
+ self.GetPage(selected).SetMode(MODE_SELECTION)
event.Skip()
def OnCommentTool(self, event):
self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARCOMMENT)
- selected = self.TabsOpened.GetSelection()
+ selected = self.GetPageSelection()
if selected != -1:
- self.TabsOpened.GetPage(selected).SetMode(MODE_COMMENT)
+ self.GetPage(selected).SetMode(MODE_COMMENT)
event.Skip()
def OnVariableTool(self, event):
self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARVARIABLE)
- selected = self.TabsOpened.GetSelection()
+ selected = self.GetPageSelection()
if selected != -1:
- self.TabsOpened.GetPage(selected).SetMode(MODE_VARIABLE)
+ self.GetPage(selected).SetMode(MODE_VARIABLE)
event.Skip()
def OnBlockTool(self, event):
- selected = self.TabsOpened.GetSelection()
+ selected = self.GetPageSelection()
if selected != -1:
- self.TabsOpened.GetPage(selected).SetMode(MODE_BLOCK)
+ self.GetPage(selected).SetMode(MODE_BLOCK)
event.Skip()
def OnConnectionTool(self, event):
self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARCONNECTION)
- selected = self.TabsOpened.GetSelection()
+ selected = self.GetPageSelection()
if selected != -1:
- self.TabsOpened.GetPage(selected).SetMode(MODE_CONNECTION)
+ self.GetPage(selected).SetMode(MODE_CONNECTION)
event.Skip()
def OnWireTool(self, event):
self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARWIRE)
- selected = self.TabsOpened.GetSelection()
+ selected = self.GetPageSelection()
if selected != -1:
- self.TabsOpened.GetPage(selected).SetMode(MODE_WIRE)
+ self.GetPage(selected).SetMode(MODE_WIRE)
event.Skip()
def OnPowerRailTool(self, event):
self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARPOWERRAIL)
- selected = self.TabsOpened.GetSelection()
+ selected = self.GetPageSelection()
if selected != -1:
- self.TabsOpened.GetPage(selected).SetMode(MODE_POWERRAIL)
+ self.GetPage(selected).SetMode(MODE_POWERRAIL)
event.Skip()
def OnRungTool(self, event):
- selected = self.TabsOpened.GetSelection()
+ selected = self.GetPageSelection()
if selected != -1:
- self.TabsOpened.GetPage(selected).Viewer.AddLadderRung()
+ self.GetPage(selected).AddLadderRung()
event.Skip()
def OnCoilTool(self, event):
self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARCOIL)
- selected = self.TabsOpened.GetSelection()
+ selected = self.GetPageSelection()
if selected != -1:
- self.TabsOpened.GetPage(selected).SetMode(MODE_COIL)
+ self.GetPage(selected).SetMode(MODE_COIL)
event.Skip()
def OnContactTool(self, event):
if self.DrawingMode == FREEDRAWING_MODE:
self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARCONTACT)
- selected = self.TabsOpened.GetSelection()
+ selected = self.GetPageSelection()
if selected != -1:
if self.DrawingMode == FREEDRAWING_MODE:
- self.TabsOpened.GetPage(selected).SetMode(MODE_CONTACT)
- else:
- self.TabsOpened.GetPage(selected).Viewer.AddLadderContact()
+ self.GetPage(selected).SetMode(MODE_CONTACT)
+ else:
+ self.GetPage(selected).AddLadderContact()
event.Skip()
def OnBranchTool(self, event):
- selected = self.TabsOpened.GetSelection()
+ selected = self.GetPageSelection()
if selected != -1:
- self.TabsOpened.GetPage(selected).Viewer.AddLadderBranch()
+ self.GetPage(selected).AddLadderBranch()
event.Skip()
def OnInitialStepTool(self, event):
self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARINITIALSTEP)
- selected = self.TabsOpened.GetSelection()
+ selected = self.GetPageSelection()
if selected != -1:
- self.TabsOpened.GetPage(selected).SetMode(MODE_INITIALSTEP)
+ self.GetPage(selected).SetMode(MODE_INITIALSTEP)
event.Skip()
def OnStepTool(self, event):
if self.GetDrawingMode() == FREEDRAWING_MODE:
self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARSTEP)
- selected = self.TabsOpened.GetSelection()
+ selected = self.GetPageSelection()
if selected != -1:
if self.GetDrawingMode() == FREEDRAWING_MODE:
- self.TabsOpened.GetPage(selected).SetMode(MODE_STEP)
- else:
- self.TabsOpened.GetPage(selected).Viewer.AddStep()
+ self.GetPage(selected).SetMode(MODE_STEP)
+ else:
+ self.GetPage(selected).AddStep()
event.Skip()
def OnActionBlockTool(self, event):
if self.GetDrawingMode() == FREEDRAWING_MODE:
self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARACTIONBLOCK)
- selected = self.TabsOpened.GetSelection()
+ selected = self.GetPageSelection()
if selected != -1:
if self.GetDrawingMode() == FREEDRAWING_MODE:
- self.TabsOpened.GetPage(selected).SetMode(MODE_ACTION)
- else:
- self.TabsOpened.GetPage(selected).Viewer.AddStepAction()
+ self.GetPage(selected).SetMode(MODE_ACTION)
+ else:
+ self.GetPage(selected).AddStepAction()
event.Skip()
def OnTransitionTool(self, event):
self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARTRANSITION)
- selected = self.TabsOpened.GetSelection()
+ selected = self.GetPageSelection()
if selected != -1:
- self.TabsOpened.GetPage(selected).SetMode(MODE_TRANSITION)
+ self.GetPage(selected).SetMode(MODE_TRANSITION)
event.Skip()
def OnDivergenceTool(self, event):
if self.GetDrawingMode() == FREEDRAWING_MODE:
self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARDIVERGENCE)
- selected = self.TabsOpened.GetSelection()
+ selected = self.GetPageSelection()
if selected != -1:
if self.GetDrawingMode() == FREEDRAWING_MODE:
- self.TabsOpened.GetPage(selected).SetMode(MODE_DIVERGENCE)
- else:
- self.TabsOpened.GetPage(selected).Viewer.AddDivergence()
+ self.GetPage(selected).SetMode(MODE_DIVERGENCE)
+ else:
+ self.GetPage(selected).AddDivergence()
event.Skip()
def OnJumpTool(self, event):
if self.GetDrawingMode() == FREEDRAWING_MODE:
self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARJUMP)
- selected = self.TabsOpened.GetSelection()
+ selected = self.GetPageSelection()
if selected != -1:
if self.GetDrawingMode() == FREEDRAWING_MODE:
- self.TabsOpened.GetPage(selected).SetMode(MODE_JUMP)
- else:
- self.TabsOpened.GetPage(selected).Viewer.AddJump()
+ self.GetPage(selected).SetMode(MODE_JUMP)
+ else:
+ self.GetPage(selected).AddJump()
event.Skip()
def OnPouSelectedChanged(self, event):
- old_selected = self.TabsOpened.GetSelection()
- if old_selected >= 0:
- self.TabsOpened.GetPage(old_selected).ResetBuffer()
- selected = event.GetSelection()
- if selected >= 0:
- self.Controler.RefreshCurrentElementEditing(selected)
- found = False
- name = self.TabsOpened.GetPageText(selected)
- if self.ProjectTree:
- root = self.ProjectTree.GetRootItem()
- if wx.VERSION >= (2, 6, 0):
- item, root_cookie = self.ProjectTree.GetFirstChild(root)
+ if wx.VERSION < (2, 8, 0) or event.GetActive():
+ old_selected = self.GetPageSelection()
+ if old_selected >= 0:
+ self.GetPage(old_selected).ResetBuffer()
+ if wx.VERSION >= (2, 8, 0):
+ window = event.GetEventObject().GetViewer()
+ else:
+ selected = event.GetSelection()
+ if selected >= 0:
+ window = self.GetPage(selected)
else:
- item, root_cookie = self.ProjectTree.GetFirstChild(root, 0)
- while item.IsOk() and not found:
- if self.ProjectTree.GetItemText(item) == name:
- self.ProjectTree.SelectItem(item)
- item, root_cookie = self.ProjectTree.GetNextChild(root, root_cookie)
- self.TabsOpened.GetPage(selected).RefreshView()
- self.RefreshFileMenu()
- self.RefreshEditMenu()
- self.RefreshToolBar()
+ window = None
+ if window:
+## found = False
+## words = window.GetTagName().split("::")
+## if self.ProjectTree:
+## root = self.ProjectTree.GetRootItem()
+## if wx.VERSION >= (2, 6, 0):
+## item, root_cookie = self.ProjectTree.GetFirstChild(root)
+## else:
+## item, root_cookie = self.ProjectTree.GetFirstChild(root, 0)
+## while item.IsOk() and not found:
+## if self.ProjectTree.GetItemText(item) == words[1]:
+## self.ProjectTree.SelectItem(item)
+## item, root_cookie = self.ProjectTree.GetNextChild(root, root_cookie)
+ window.RefreshView()
+ self.VariablePanelIndexer.ChangeVariablePanel(window.GetTagName())
+ self.RefreshFileMenu()
+ self.RefreshEditMenu()
+ self.RefreshToolBar()
event.Skip()
def OnProjectTreeBeginDrag(self, event):
@@ -842,8 +971,8 @@
dragSource.DoDragDrop()
def RefreshEditorNames(self, item_type, old_name, new_name):
- for i in xrange(self.TabsOpened.GetPageCount()):
- editor = self.TabsOpened.GetPage(i)
+ for i in xrange(self.GetPageCount()):
+ editor = self.GetPage(i)
editor.RefreshName(item_type, old_name, new_name)
def OnProjectTreeItemEndEdit(self, event):
@@ -873,7 +1002,7 @@
if not abort:
self.Controler.ChangePouName(old_name, new_name)
self.RefreshEditorNames(itemtype, old_name, new_name)
- self.RefreshTabsOpenedTitles()
+ self.RefreshPageTitles()
elif itemtype == ITEM_TRANSITION:
parent = self.ProjectTree.GetItemParent(item)
parent_type = self.ProjectTree.GetPyData(parent)
@@ -888,7 +1017,7 @@
else:
self.Controler.ChangePouTransitionName(pou_name, old_name, new_name)
self.RefreshEditorNames(itemtype, old_name, new_name)
- self.RefreshTabsOpenedTitles()
+ self.RefreshPageTitles()
elif itemtype == ITEM_ACTION:
parent = self.ProjectTree.GetItemParent(item)
parent_type = self.ProjectTree.GetPyData(parent)
@@ -903,7 +1032,7 @@
else:
self.Controler.ChangePouActionName(pou_name, old_name, new_name)
self.RefreshEditorNames(itemtype, old_name, new_name)
- self.RefreshTabsOpenedTitles()
+ self.RefreshPageTitles()
elif itemtype == ITEM_CONFIGURATION:
if new_name.upper() in [name.upper() for name in self.Controler.GetProjectConfigNames() if name != old_name]:
message = "\"%s\" config already exists!"%new_name
@@ -921,7 +1050,7 @@
if not abort:
self.Controler.ChangeConfigurationName(old_name, new_name)
self.RefreshEditorNames(itemtype, old_name, new_name)
- self.RefreshTabsOpenedTitles()
+ self.RefreshPageTitles()
elif itemtype == ITEM_RESOURCE:
parent = self.ProjectTree.GetItemParent(item)
parent_type = self.ProjectTree.GetPyData(parent)
@@ -945,7 +1074,7 @@
if not abort:
self.Controler.ChangeConfigurationResourceName(config_name, old_name, new_name)
self.RefreshEditorNames(itemtype, old_name, new_name)
- self.RefreshTabsOpenedTitles()
+ self.RefreshPageTitles()
if message or abort:
if message:
messageDialog = wx.MessageDialog(self, message, "Error", wx.OK|wx.ICON_ERROR)
@@ -956,9 +1085,9 @@
event.Veto()
else:
wx.CallAfter(self.RefreshProjectTree)
- window = self.TabsOpened.GetCurrentPage()
- if window:
- window.RefreshView()
+ selected = self.GetPageSelection()
+ if selected != -1:
+ self.GetPage(selected).RefreshView()
event.Skip()
def OnProjectTreeItemBeginEdit(self, event):
@@ -978,8 +1107,10 @@
data = self.ProjectTree.GetPyData(selected)
if name == "Properties":
self.ShowProperties()
- if data in [ITEM_POU, ITEM_CONFIGURATION]:
- self.EditProjectElement(data, name)
+ if data == ITEM_POU:
+ self.EditProjectElement(data, self.Controler.ComputePouName(name))
+ elif data == ITEM_CONFIGURATION:
+ self.EditProjectElement(data, self.Controler.ComputeConfigurationName(name))
elif data == ITEM_RESOURCE:
item = self.ProjectTree.GetItemParent(selected)
item_type = self.ProjectTree.GetPyData(item)
@@ -987,7 +1118,7 @@
item = self.ProjectTree.GetItemParent(item)
item_type = self.ProjectTree.GetPyData(item)
config_name = self.ProjectTree.GetItemText(item)
- self.EditProjectElement(data, "%s::%s"%(config_name, name))
+ self.EditProjectElement(data, self.Controler.ComputeConfigurationResourceName(config_name, name))
elif data in [ITEM_TRANSITION, ITEM_ACTION]:
item = self.ProjectTree.GetItemParent(selected)
item_type = self.ProjectTree.GetPyData(item)
@@ -995,14 +1126,20 @@
item = self.ProjectTree.GetItemParent(item)
item_type = self.ProjectTree.GetPyData(item)
pou_name = self.ProjectTree.GetItemText(item)
- self.EditProjectElement(data, "%s::%s"%(pou_name, name))
+ if data == ITEM_TRANSITION:
+ tagname = self.Controler.ComputePouTransitionName(pou_name, name)
+ elif data == ITEM_ACTION:
+ tagname = self.Controler.ComputePouActionName(pou_name, name)
+ self.EditProjectElement(data, tagname)
def OnProjectTreeItemSelected(self, event):
selected = event.GetItem()
name = self.ProjectTree.GetItemText(selected)
data = self.ProjectTree.GetPyData(selected)
- if data in [ITEM_POU, ITEM_CONFIGURATION]:
- self.EditProjectElement(data, name, True)
+ if data == ITEM_POU:
+ self.EditProjectElement(data, self.Controler.ComputePouName(name), True)
+ elif data == ITEM_CONFIGURATION:
+ self.EditProjectElement(data, self.Controler.ComputeConfigurationName(name), True)
elif data == ITEM_RESOURCE:
item = self.ProjectTree.GetItemParent(selected)
item_type = self.ProjectTree.GetPyData(item)
@@ -1010,7 +1147,7 @@
item = self.ProjectTree.GetItemParent(item)
item_type = self.ProjectTree.GetPyData(item)
config_name = self.ProjectTree.GetItemText(item)
- self.EditProjectElement(data, "%s::%s"%(config_name, name), True)
+ self.EditProjectElement(data, self.Controler.ComputeConfigurationResourceName(config_name, name), True)
elif data in [ITEM_TRANSITION, ITEM_ACTION]:
item = self.ProjectTree.GetItemParent(selected)
item_type = self.ProjectTree.GetPyData(item)
@@ -1018,71 +1155,106 @@
item = self.ProjectTree.GetItemParent(item)
item_type = self.ProjectTree.GetPyData(item)
pou_name = self.ProjectTree.GetItemText(item)
- self.EditProjectElement(data, "%s::%s"%(pou_name, name), True)
- event.Skip()
-
- def EditProjectElement(self, elementtype, elementname, onlyopened = False):
- idx = None
- names = elementname.split("::")
- if elementtype == ITEM_CONFIGURATION and len(names) == 1:
- if not onlyopened:
- idx = self.Controler.OpenConfigurationEditing(*names)
- if idx is not None:
- new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, "config", config_name = names[0])
- new_window.SetIndex(idx)
+ if data == ITEM_TRANSITION:
+ tagname = self.Controler.ComputePouTransitionName(pou_name, name)
+ elif data == ITEM_ACTION:
+ tagname = self.Controler.ComputePouActionName(pou_name, name)
+ self.EditProjectElement(data, tagname, True)
+ event.Skip()
+
+ def IsOpened(self, tagname):
+ for idx in xrange(self.GetPageCount()):
+ if self.GetPage(idx).IsViewing(tagname):
+ return idx
+ return None
+
+ def EditProjectElement(self, elementtype, tagname, onlyopened = False):
+ openedidx = self.IsOpened(tagname)
+ if openedidx is not None:
+ old_selected = self.GetPageSelection()
+ if old_selected != openedidx:
+ if old_selected >= 0:
+ self.GetPage(old_selected).ResetBuffer()
+ self.SetPageSelection(openedidx)
+ self.GetPage(openedidx).RefreshView()
+ self.VariablePanelIndexer.ChangeVariablePanel(tagname)
+ self.RefreshPageTitles()
+ self.RefreshFileMenu()
+ self.RefreshEditMenu()
+ self.RefreshToolBar()
+ elif not onlyopened:
+ if wx.VERSION >= (2, 8, 0):
+ if elementtype == ITEM_CONFIGURATION:
+ new_window = MDIConfigurationEditor(self, tagname, self, self.Controler)
+ self.VariablePanelIndexer.AddVariablePanel(tagname, "config")
+ elif elementtype == ITEM_RESOURCE:
+ new_window = MDIResourceEditor(self, tagname, self, self.Controler)
+ self.VariablePanelIndexer.AddVariablePanel(tagname, "resource")
+ elif elementtype in [ITEM_POU, ITEM_TRANSITION, ITEM_ACTION]:
+ bodytype = self.Controler.GetEditedElementBodyType(tagname)
+ if bodytype == "FBD":
+ new_window = MDIViewer(self, tagname, self, self.Controler)
+ elif bodytype == "LD":
+ new_window = LD_MDIViewer(self, tagname, self, self.Controler)
+ elif bodytype == "SFC":
+ new_window = SFC_MDIViewer(self, tagname, self, self.Controler)
+ else:
+ new_window = TextMDIViewer(self, tagname, self, self.Controler)
+ viewer = new_window.GetViewer()
+ viewer.SetTextSyntax(elementtype)
+ if bodytype == "IL":
+ viewer.SetKeywords(IL_KEYWORDS)
+ else:
+ viewer.SetKeywords(ST_KEYWORDS)
+ new_window.Bind(wx.EVT_ACTIVATE, self.OnPouSelectedChanged)
+ new_window.Bind(wx.EVT_CLOSE, self.OnPageClose)
+ else:
+ if elementtype == ITEM_CONFIGURATION:
+ new_window = ConfigurationEditor(self.TabsOpened, tagname, self, self.Controler)
self.TabsOpened.AddPage(new_window, "")
- if idx is None:
- idx = self.Controler.ChangeConfigurationEditing(*names)
- elif elementtype == ITEM_RESOURCE and len(names) == 2:
- if not onlyopened:
- idx = self.Controler.OpenConfigurationResourceEditing(*names)
- if idx is not None:
- new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, "resource", config_name = names[0], resource_name = names[1])
- new_window.SetIndex(idx)
+ self.VariablePanelIndexer.AddVariablePanel(tagname, "config")
+ elif elementtype == ITEM_RESOURCE:
+ new_window = ResourceEditor(self.TabsOpened, tagname, self, self.Controler)
self.TabsOpened.AddPage(new_window, "")
- if idx is None:
- idx = self.Controler.ChangeConfigurationResourceEditing(*names)
- elif elementtype == ITEM_POU and len(names) == 1:
- if not onlyopened:
- idx = self.Controler.OpenPouEditing(*names)
- if idx != None:
- new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, self.Controler.GetPouType(names[0]), pou_name = names[0])
- new_window.SetIndex(idx)
+ self.VariablePanelIndexer.AddVariablePanel(tagname, "resource")
+ elif elementtype in [ITEM_POU, ITEM_TRANSITION, ITEM_ACTION]:
+ bodytype = self.Controler.GetEditedElementBodyType(tagname)
+ if bodytype == "FBD":
+ new_window = Viewer(self.TabsOpened, tagname, self, self.Controler)
+ elif bodytype == "LD":
+ new_window = LD_Viewer(self.TabsOpened, tagname, self, self.Controler)
+ elif bodytype == "SFC":
+ new_window = SFC_Viewer(self.TabsOpened, tagname, self, self.Controler)
+ else:
+ new_window = TextViewer(self.TabsOpened, tagname, self, self.Controler)
+ new_window.SetTextSyntax(elementtype)
+ if bodytype == "IL":
+ new_window.SetKeywords(IL_KEYWORDS)
+ else:
+ new_window.SetKeywords(ST_KEYWORDS)
self.TabsOpened.AddPage(new_window, "")
- if idx is None:
- idx = self.Controler.ChangePouEditing(*names)
- elif elementtype == ITEM_TRANSITION and len(names) == 2:
- if not onlyopened:
- idx = self.Controler.OpenPouTransitionEditing(*names)
- if idx is not None:
- new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, "transition", pou_name = names[0], transition_name = names[1])
- new_window.SetIndex(idx)
- self.TabsOpened.AddPage(new_window, "")
- if idx is None:
- idx = self.Controler.ChangePouTransitionEditing(*names)
- elif elementtype == ITEM_ACTION and len(names) == 2:
- if not onlyopened:
- idx = self.Controler.OpenPouActionEditing(*names)
- if idx is not None:
- new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, "action", pou_name = names[0], action_name = names[1])
- new_window.SetIndex(idx)
- self.TabsOpened.AddPage(new_window, "")
- if idx is None:
- idx = self.Controler.ChangePouActionEditing(*names)
- if idx != None:
- old_selected = self.TabsOpened.GetSelection()
- if old_selected >= 0:
- self.TabsOpened.GetPage(old_selected).ResetBuffer()
- for i in xrange(self.TabsOpened.GetPageCount()):
- window = self.TabsOpened.GetPage(i)
- if window.GetIndex() == idx:
- self.TabsOpened.SetSelection(i)
+ if elementtype == ITEM_POU:
+ words = tagname.split("::")
+ self.VariablePanelIndexer.AddVariablePanel(tagname, self.Controler.GetPouType(words[1]))
+ elif elementtype == ITEM_TRANSITION:
+ self.VariablePanelIndexer.AddVariablePanel(tagname, "transition")
+ elif elementtype == ITEM_TRANSITION:
+ self.VariablePanelIndexer.AddVariablePanel(tagname, "action")
+ self.VariablePanelIndexer.ChangeVariablePanel(tagname)
+ openedidx = self.IsOpened(tagname)
+ old_selected = self.GetPageSelection()
+ if old_selected != openedidx:
+ if old_selected >= 0:
+ self.GetPage(old_selected).ResetBuffer()
+ for i in xrange(self.GetPageCount()):
+ window = self.GetPage(i)
+ if window.GetTagName() == tagname:
+ self.SetPageSelection(i)
window.RefreshView()
- self.RefreshTabsOpenedTitles()
+ self.RefreshPageTitles()
self.RefreshFileMenu()
self.RefreshEditMenu()
self.RefreshToolBar()
- return
def OnProjectTreeRightUp(self, event):
cursor_pos = event.GetPosition()
@@ -1137,15 +1309,20 @@
ToolBar = self.ToolBar
else:
ToolBar = self.Panes["ToolBar"]
- ToolBar.DeleteTool(item)
- ToolBar.Realize()
- if wx.VERSION >= (2, 8, 0):
- self.AUIManager.GetPane("ToolBar").BestSize(ToolBar.GetBestSize())
- self.AUIManager.Update()
+ if ToolBar:
+ ToolBar.DeleteTool(item)
+ ToolBar.Realize()
+ if wx.VERSION >= (2, 8, 0):
+ self.AUIManager.GetPane("ToolBar").BestSize(ToolBar.GetBestSize())
+ self.AUIManager.Update()
def RefreshToolBar(self):
- language = self.Controler.GetCurrentElementEditingBodyType()
- if language and language != self.CurrentLanguage:
+ selected = self.GetPageSelection()
+ if selected != -1:
+ language = self.Controler.GetEditedElementBodyType(self.GetPage(selected).GetTagName())
+ else:
+ language = None
+ if language is not None and language != self.CurrentLanguage:
self.ResetToolBar()
self.CurrentLanguage = language
self.CurrentToolBar = []
@@ -1153,41 +1330,45 @@
ToolBar = self.ToolBar
else:
ToolBar = self.Panes["ToolBar"]
- for radio, modes, id, method, picture, help in ToolBarItems[language]:
- if modes & self.DrawingMode:
- if radio or self.DrawingMode == FREEDRAWING_MODE:
- ToolBar.AddRadioTool(id, wx.Bitmap(os.path.join(CWD, "Images", picture)), wx.NullBitmap, help)
- else:
- ToolBar.AddSimpleTool(id, wx.Bitmap(os.path.join(CWD, "Images", picture)), help)
- self.Bind(wx.EVT_TOOL, getattr(self, method), id=id)
- self.CurrentToolBar.append(id)
- ToolBar.Realize()
- if wx.VERSION >= (2, 8, 0):
- self.AUIManager.GetPane("ToolBar").BestSize(ToolBar.GetBestSize())
- self.AUIManager.Update()
+ if ToolBar:
+ for radio, modes, id, method, picture, help in ToolBarItems[language]:
+ if modes & self.DrawingMode:
+ if radio or self.DrawingMode == FREEDRAWING_MODE:
+ ToolBar.AddRadioTool(id, wx.Bitmap(os.path.join(CWD, "Images", picture)), wx.NullBitmap, help)
+ else:
+ ToolBar.AddSimpleTool(id, wx.Bitmap(os.path.join(CWD, "Images", picture)), help)
+ self.Bind(wx.EVT_TOOL, getattr(self, method), id=id)
+ self.CurrentToolBar.append(id)
+ ToolBar.Realize()
+ if wx.VERSION >= (2, 8, 0):
+ self.AUIManager.GetPane("ToolBar").BestSize(ToolBar.GetBestSize())
+ self.AUIManager.Update()
elif not language:
self.ResetToolBar()
self.CurrentLanguage = language
self.ResetCurrentMode()
- def RefreshTabsOpenedTitles(self):
- pous = self.Controler.GetElementsOpenedNames()
- for i, pou in enumerate(pous):
- self.TabsOpened.SetPageText(i, pou)
+ def RefreshPageTitles(self):
+ for idx in xrange(self.GetPageCount()):
+ window = self.GetPage(idx)
+ words = window.GetTagName().split("::")
+ self.SetPageText(idx, "-".join(words[1:]))
def OnRefreshMenu(self, event):
- selected = self.TabsOpened.GetSelection()
+ selected = self.GetPageSelection()
if selected != -1:
- self.TabsOpened.GetPage(selected).RefreshView()
- self.TabsOpened.GetPage(selected).Refresh()
+ window = self.GetPage(selected)
+ window.RefreshView()
+ self.VariablePanelIndexer.RefreshVariablePanel(window.GetTagName())
event.Skip()
def OnUndoMenu(self, event):
self.Controler.LoadPrevious()
- selected = self.TabsOpened.GetSelection()
+ selected = self.GetPageSelection()
if selected != -1:
- self.TabsOpened.GetPage(selected).RefreshView()
- self.TabsOpened.GetPage(selected).Refresh()
+ window = self.GetPage(selected)
+ window.RefreshView()
+ self.VariablePanelIndexer.RefreshVariablePanel(window.GetTagName())
self.RefreshTitle()
self.RefreshEditMenu()
self.RefreshProjectTree()
@@ -1195,38 +1376,39 @@
def OnRedoMenu(self, event):
self.Controler.LoadNext()
- selected = self.TabsOpened.GetSelection()
+ selected = self.GetPageSelection()
if selected != -1:
- self.TabsOpened.GetPage(selected).RefreshView()
- self.TabsOpened.GetPage(selected).Refresh()
+ window = self.GetPage(selected)
+ window.RefreshView()
+ self.VariablePanelIndexer.RefreshVariablePanel(window.GetTagName())
self.RefreshTitle()
self.RefreshEditMenu()
self.RefreshProjectTree()
event.Skip()
def OnCutMenu(self, event):
- selected = self.TabsOpened.GetSelection()
+ selected = self.GetPageSelection()
if selected != -1:
try:
- self.TabsOpened.GetPage(selected).Viewer.Cut()
+ self.GetPage(selected).Cut()
except:
pass
event.Skip()
def OnCopyMenu(self, event):
- selected = self.TabsOpened.GetSelection()
+ selected = self.GetPageSelection()
if selected != -1:
try:
- self.TabsOpened.GetPage(selected).Viewer.Copy()
+ self.GetPage(selected).Copy()
except:
pass
event.Skip()
def OnPasteMenu(self, event):
- selected = self.TabsOpened.GetSelection()
+ selected = self.GetPageSelection()
if selected != -1:
try:
- self.TabsOpened.GetPage(selected).Viewer.Paste()
+ self.GetPage(selected).Paste()
except:
pass
event.Skip()
@@ -1251,12 +1433,11 @@
selected = dialog.GetStringSelection()
if not self.Controler.PouIsUsed(selected):
self.Controler.ProjectRemovePou(selected)
- deleted = None
- for i in xrange(self.TabsOpened.GetPageCount()):
- if self.TabsOpened.GetPageText(i) == selected:
- deleted = i
- if deleted is not None:
- self.TabsOpened.DeletePage(deleted)
+ tagname = self.Controler.ComputePouName(selected)
+ idx = self.IsOpened(tagname)
+ if idx is not None:
+ self.VariablePanelIndexer.RemoveVariablePanel(self.GetPage(idx).GetTagName())
+ self.DeletePage(idx)
self.RefreshTitle()
self.RefreshEditMenu()
self.RefreshProjectTree()
@@ -1286,6 +1467,11 @@
if dialog.ShowModal() == wx.ID_OK:
selected = dialog.GetStringSelection()
self.Controler.ProjectRemoveConfiguration(selected)
+ tagname = self.Controler.ComputeConfigurationName(selected)
+ idx = self.IsOpened(tagname)
+ if idx is not None:
+ self.VariablePanelIndexer.RemoveVariablePanel(self.GetPage(idx).GetTagName())
+ self.DeletePage(idx)
self.RefreshTitle()
self.RefreshEditMenu()
self.RefreshProjectTree()
@@ -1318,6 +1504,11 @@
if dialog.ShowModal() == wx.ID_OK:
selected = dialog.GetStringSelection()
self.Controler.ProjectRemovePouTransition(pouname, selected)
+ tagname = self.Controler.ComputePouTransitionName(pouname, selected)
+ idx = self.IsOpened(tagname)
+ if idx is not None:
+ self.VariablePanelIndexer.RemoveVariablePanel(self.GetPage(idx).GetTagName())
+ self.DeletePage(idx)
self.RefreshTitle()
self.RefreshEditMenu()
self.RefreshProjectTree()
@@ -1351,6 +1542,11 @@
if dialog.ShowModal() == wx.ID_OK:
selected = dialog.GetStringSelection()
self.Controler.ProjectRemovePouAction(pouname, selected)
+ tagname = self.Controler.ComputePouActionName(pouname, selected)
+ idx = self.IsOpened(tagname)
+ if idx is not None:
+ self.VariablePanelIndexer.RemoveVariablePanel(self.GetPage(idx).GetTagName())
+ self.DeletePage(idx)
self.RefreshTitle()
self.RefreshEditMenu()
self.RefreshProjectTree()
@@ -1367,6 +1563,11 @@
if dialog.ShowModal() == wx.ID_OK:
value = dialog.GetValue()
self.Controler.ProjectAddConfigurationResource(config_name, value)
+ tagname = self.Controler.ComputeConfigurationResourceName(config_name, selected)
+ idx = self.IsOpened(tagname)
+ if idx is not None:
+ self.VariablePanelIndexer.RemoveVariablePanel(self.GetPage(idx).GetTagName())
+ self.DeletePage(idx)
self.RefreshTitle()
self.RefreshEditMenu()
self.RefreshProjectTree()
@@ -2161,7 +2362,76 @@
return self.GetSizer().GetItem(1).GetWindow().GetValue()
#-------------------------------------------------------------------------------
-# Pou Editor Panel
+# Variables Editor Panel
+#-------------------------------------------------------------------------------
+
+class VariablePanelIndexer(wx.Panel):
+
+ def _init_sizers(self):
+ self.MainSizer = wx.BoxSizer(wx.HORIZONTAL)
+
+ self.SetSizer(self.MainSizer)
+
+ def _init_ctrls(self, prnt):
+ wx.Panel.__init__(self, id=wx.NewId(),
+ name='VariablePanelIndexer', parent=prnt, pos=wx.Point(0, 0),
+ size=wx.Size(0, 300), style=wx.TAB_TRAVERSAL)
+
+ self._init_sizers()
+
+ def __init__(self, parent, controler):
+ self._init_ctrls(parent)
+
+ self.ParentWindow = parent
+ self.Controler = controler
+
+ self.VariablePanelList = {}
+ self.CurrentPanel = None
+
+ def AddVariablePanel(self, tagname, element_type):
+ new_panel = VariablePanel(self, self.ParentWindow, self.Controler, element_type)
+ new_panel.SetTagName(tagname)
+ new_panel.Hide()
+ new_panel.RefreshView()
+ self.MainSizer.AddWindow(new_panel, 1, border=0, flag=wx.GROW)
+ self.VariablePanelList[tagname] = new_panel
+
+ def RemoveVariablePanel(self, tagname):
+ if tagname in self.VariablePanelList:
+ panel = self.VariablePanelList.pop(tagname)
+ panel.Hide()
+ self.MainSizer.Remove(panel)
+ if self.CurrentPanel == tagname:
+ self.CurrentPanel = None
+
+ def RemoveAllPanels(self):
+ if self.CurrentPanel is not None and self.CurrentPanel in self.VariablePanelList:
+ self.VariablePanelList[self.CurrentPanel].Hide()
+ self.VariablePanelList = {}
+ self.MainSizer.Clear()
+ self.CurrentPanel = None
+
+ def UpdateVariablePanelTagName(self, old_tagname, new_tagname):
+ if old_name in self.VariablePanelList:
+ self.VariablePanelList[new_tagname] = self.VariablePanelList.pop(old_tagname)
+ if self.CurrentPanel == old_tagname:
+ self.CurrentPanel = new_tagname
+
+ def ChangeVariablePanel(self, tagname):
+ if tagname in self.VariablePanelList and tagname != self.CurrentPanel:
+ if self.CurrentPanel is not None:
+ self.VariablePanelList[self.CurrentPanel].Hide()
+ self.CurrentPanel = tagname
+ self.VariablePanelList[self.CurrentPanel].RefreshView()
+ self.VariablePanelList[self.CurrentPanel].Show()
+ self.MainSizer.Layout()
+
+ def RefreshVariablePanel(self, tagname):
+ if tagname in self.VariablePanelList:
+ self.VariablePanelList[self.CurrentPanel].RefreshView()
+
+#-------------------------------------------------------------------------------
+# Variables Editor Panel
#-------------------------------------------------------------------------------
class VariableTable(wx.grid.PyGridTableBase):
@@ -2384,15 +2654,15 @@
message.ShowModal()
message.Destroy()
-[ID_POUEDITORPANEL, ID_POUEDITORPANELVIEWER,
- ID_POUEDITORPANELVARIABLESGRID, ID_POUEDITORPANELRETURNTYPE,
- ID_POUEDITORPANELCLASSFILTER, ID_POUEDITORPANELADDBUTTON,
- ID_POUEDITORPANELDELETEBUTTON, ID_POUEDITORPANELUPBUTTON,
- ID_POUEDITORPANELDOWNBUTTON, ID_POUEDITORPANELSTATICTEXT1,
- ID_POUEDITORPANELSTATICTEXT2, ID_POUEDITORPANELSTATICTEXT3,
-] = [wx.NewId() for _init_ctrls in range(12)]
-
-class PouEditorPanel(wx.SplitterWindow):
+[ID_VARIABLEEDITORPANEL, ID_VARIABLEEDITORPANELVARIABLESGRID,
+ ID_VARIABLEEDITORPANELRETURNTYPE, ID_VARIABLEEDITORPANELCLASSFILTER,
+ ID_VARIABLEEDITORPANELADDBUTTON, ID_VARIABLEEDITORPANELDELETEBUTTON,
+ ID_VARIABLEEDITORPANELUPBUTTON, ID_VARIABLEEDITORPANELDOWNBUTTON,
+ ID_VARIABLEEDITORPANELSTATICTEXT1, ID_VARIABLEEDITORPANELSTATICTEXT2,
+ ID_VARIABLEEDITORPANELSTATICTEXT3,
+] = [wx.NewId() for _init_ctrls in range(11)]
+
+class VariablePanel(wx.Panel):
if wx.VERSION < (2, 6, 0):
def Bind(self, event, function, id = None):
@@ -2401,11 +2671,11 @@
else:
event(self, function)
- def _init_coll_VariablePanelSizer_Items(self, parent):
+ def _init_coll_MainSizer_Items(self, parent):
parent.AddWindow(self.VariablesGrid, 0, border=0, flag=wx.GROW)
parent.AddSizer(self.ControlPanelSizer, 0, border=0, flag=wx.GROW)
- def _init_coll_VariablePanelSizer_Growables(self, parent):
+ def _init_coll_MainSizer_Growables(self, parent):
parent.AddGrowableCol(0)
parent.AddGrowableRow(0)
@@ -2438,75 +2708,46 @@
parent.AddGrowableRow(0)
def _init_sizers(self):
- self.VariablePanelSizer = wx.FlexGridSizer(cols=2, hgap=10, rows=1, vgap=0)
+ self.MainSizer = wx.FlexGridSizer(cols=2, hgap=10, rows=1, vgap=0)
self.ControlPanelSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10)
self.ChoicePanelSizer = wx.GridSizer(cols=1, hgap=5, rows=4, vgap=5)
self.ButtonPanelSizer = wx.FlexGridSizer(cols=2, hgap=5, rows=2, vgap=0)
- self._init_coll_VariablePanelSizer_Items(self.VariablePanelSizer)
- self._init_coll_VariablePanelSizer_Growables(self.VariablePanelSizer)
+ 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._init_coll_ChoicePanelSizer_Items(self.ChoicePanelSizer)
self._init_coll_ButtonPanelSizer_Items(self.ButtonPanelSizer)
self._init_coll_ButtonPanelSizer_Growables(self.ButtonPanelSizer)
- self.VariablePanel.SetSizer(self.VariablePanelSizer)
-
- def _init_ctrls(self, prnt, element_type):
- wx.SplitterWindow.__init__(self, id=ID_POUEDITORPANEL,
- name='EditVariablePanel', parent=prnt, point=wx.Point(0, 0),
- size=wx.Size(0, 0), style=wx.SP_3D)
- self.SetNeedUpdating(True)
- self.SetMinimumPaneSize(1)
-
- if element_type == "config":
- self.Viewer = wx.Panel(id=ID_POUEDITORPANELVIEWER,
- name='ConfigPanel', parent=self, pos=wx.Point(0, 0),
- size=wx.Size(0, 0), style=0)
- self.Viewer.SetSizer(wx.BoxSizer(wx.VERTICAL))
- self.Viewer.ResetBuffer = lambda: None
- self.Viewer.RefreshView = lambda: None
- elif element_type == "resource":
- self.Viewer = ResourceEditor(self, self.ParentWindow, self.Controler)
- elif element_type == "FBD":
- self.Viewer = Viewer(self, self.ParentWindow, self.Controler)
- elif element_type == "LD":
- self.Viewer = LD_Viewer(self, self.ParentWindow, self.Controler)
- elif element_type == "SFC":
- self.Viewer = SFC_Viewer(self, self.ParentWindow, self.Controler)
- else:
- self.Viewer = TextViewer(self, self.ParentWindow, self.Controler)
- self.Viewer.SetTextSyntax(element_type)
- if element_type == "IL":
- self.Viewer.SetKeywords(IL_KEYWORDS)
- else:
- self.Viewer.SetKeywords(ST_KEYWORDS)
-
- self.VariablePanel = wx.Panel(id=ID_POUEDITORPANELVIEWER,
- name='VariablePanel', parent=self, pos=wx.Point(0, 0),
+ 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.staticText1 = wx.StaticText(id=ID_POUEDITORPANELSTATICTEXT1,
- label='Return Type:', name='staticText1', parent=self.VariablePanel,
+ self.staticText1 = wx.StaticText(id=ID_VARIABLEEDITORPANELSTATICTEXT1,
+ label='Return Type:', name='staticText1', parent=self,
pos=wx.Point(0, 0), size=wx.Size(95, 17), style=0)
- self.ReturnType = wx.Choice(id=ID_POUEDITORPANELRETURNTYPE,
- name='ReturnType', parent=self.VariablePanel, pos=wx.Point(0, 0),
+ self.ReturnType = wx.Choice(id=ID_VARIABLEEDITORPANELRETURNTYPE,
+ name='ReturnType', parent=self, pos=wx.Point(0, 0),
size=wx.Size(145, 24), style=0)
- self.Bind(wx.EVT_CHOICE, self.OnReturnTypeChanged, id=ID_POUEDITORPANELRETURNTYPE)
-
- self.staticText2 = wx.StaticText(id=ID_POUEDITORPANELSTATICTEXT2,
- label='Class Filter:', name='staticText2', parent=self.VariablePanel,
+ self.Bind(wx.EVT_CHOICE, self.OnReturnTypeChanged, id=ID_VARIABLEEDITORPANELRETURNTYPE)
+
+ self.staticText2 = wx.StaticText(id=ID_VARIABLEEDITORPANELSTATICTEXT2,
+ label='Class Filter:', name='staticText2', parent=self,
pos=wx.Point(0, 0), size=wx.Size(95, 17), style=0)
- self.ClassFilter = wx.Choice(id=ID_POUEDITORPANELCLASSFILTER,
- name='ClassFilter', parent=self.VariablePanel, pos=wx.Point(0, 0),
+ self.ClassFilter = wx.Choice(id=ID_VARIABLEEDITORPANELCLASSFILTER,
+ name='ClassFilter', parent=self, pos=wx.Point(0, 0),
size=wx.Size(145, 24), style=0)
- self.Bind(wx.EVT_CHOICE, self.OnClassFilter, id=ID_POUEDITORPANELCLASSFILTER)
-
- self.VariablesGrid = wx.grid.Grid(id=ID_POUEDITORPANELVARIABLESGRID,
- name='VariablesGrid', parent=self.VariablePanel, pos=wx.Point(0, 0),
+ self.Bind(wx.EVT_CHOICE, self.OnClassFilter, id=ID_VARIABLEEDITORPANELCLASSFILTER)
+
+ self.VariablesGrid = wx.grid.Grid(id=ID_VARIABLEEDITORPANELVARIABLESGRID,
+ name='VariablesGrid', parent=self, pos=wx.Point(0, 0),
size=wx.Size(0, 150), style=wx.VSCROLL)
self.VariablesGrid.SetFont(wx.Font(12, 77, wx.NORMAL, wx.NORMAL, False,
'Sans'))
@@ -2526,54 +2767,33 @@
wx.grid.EVT_GRID_EDITOR_SHOWN(self.VariablesGrid, self.OnVariablesGridEditorShown)
self.VariablesGrid.SetDropTarget(VariableDropTarget(self))
- self.AddButton = wx.Button(id=ID_POUEDITORPANELADDBUTTON, label='Add',
- name='AddButton', parent=self.VariablePanel, pos=wx.Point(345, 340),
+ self.AddButton = wx.Button(id=ID_VARIABLEEDITORPANELADDBUTTON, label='Add',
+ name='AddButton', parent=self, pos=wx.Point(345, 340),
size=wx.Size(72, 32), style=0)
- self.Bind(wx.EVT_BUTTON, self.OnAddButton, id=ID_POUEDITORPANELADDBUTTON)
-
- self.DeleteButton = wx.Button(id=ID_POUEDITORPANELDELETEBUTTON, label='Delete',
- name='DeleteButton', parent=self.VariablePanel, pos=wx.Point(425, 340),
+ self.Bind(wx.EVT_BUTTON, self.OnAddButton, id=ID_VARIABLEEDITORPANELADDBUTTON)
+
+ self.DeleteButton = wx.Button(id=ID_VARIABLEEDITORPANELDELETEBUTTON, label='Delete',
+ name='DeleteButton', parent=self, pos=wx.Point(425, 340),
size=wx.Size(72, 32), style=0)
- self.Bind(wx.EVT_BUTTON, self.OnDeleteButton, id=ID_POUEDITORPANELDELETEBUTTON)
-
- self.UpButton = wx.Button(id=ID_POUEDITORPANELUPBUTTON, label='^',
- name='UpButton', parent=self.VariablePanel, pos=wx.Point(505, 340),
+ self.Bind(wx.EVT_BUTTON, self.OnDeleteButton, id=ID_VARIABLEEDITORPANELDELETEBUTTON)
+
+ self.UpButton = wx.Button(id=ID_VARIABLEEDITORPANELUPBUTTON, label='^',
+ name='UpButton', parent=self, pos=wx.Point(505, 340),
size=wx.Size(32, 32), style=0)
- self.Bind(wx.EVT_BUTTON, self.OnUpButton, id=ID_POUEDITORPANELUPBUTTON)
-
- self.DownButton = wx.Button(id=ID_POUEDITORPANELDOWNBUTTON, label='v',
- name='DownButton', parent=self.VariablePanel, pos=wx.Point(545, 340),
+ self.Bind(wx.EVT_BUTTON, self.OnUpButton, id=ID_VARIABLEEDITORPANELUPBUTTON)
+
+ self.DownButton = wx.Button(id=ID_VARIABLEEDITORPANELDOWNBUTTON, label='v',
+ name='DownButton', parent=self, pos=wx.Point(545, 340),
size=wx.Size(32, 32), style=0)
- self.Bind(wx.EVT_BUTTON, self.OnDownButton, id=ID_POUEDITORPANELDOWNBUTTON)
-
- self.SplitHorizontally(self.Viewer, self.VariablePanel, -200)
+ self.Bind(wx.EVT_BUTTON, self.OnDownButton, id=ID_VARIABLEEDITORPANELDOWNBUTTON)
self._init_sizers()
- def __init__(self, parent, window, controler, element_type, pou_name = None, transition_name = None, action_name = None, config_name = None, resource_name = None):
+ def __init__(self, parent, window, controler, element_type):
+ self._init_ctrls(parent)
self.ParentWindow = window
self.Controler = controler
self.ElementType = element_type
- self.PouName = pou_name
- self.TransitionName = transition_name
- self.ActionName = action_name
- self.ConfigName = config_name
- self.ResourceName = resource_name
-
- if element_type == "config":
- self._init_ctrls(parent, "config")
- pou_type = "config"
- elif element_type == "resource":
- self._init_ctrls(parent, "resource")
- pou_type = "resource"
- else:
- if element_type == "transition":
- self._init_ctrls(parent, self.Controler.GetTransitionBodyType(pou_name, transition_name))
- elif element_type == "action":
- self._init_ctrls(parent, self.Controler.GetActionBodyType(pou_name, action_name))
- else:
- self._init_ctrls(parent, self.Controler.GetPouBodyType(pou_name))
- pou_type = self.Controler.GetPouType(pou_name)
self.Filter = "All"
self.FilterChoices = []
@@ -2582,15 +2802,15 @@
" External" : "External", "Variables" : "Variables", " Local" : "Local",
" Temp" : "Temp", "Global" : "Global", "Access" : "Access"}
- if pou_type in ["config", "resource"]:
+ if element_type in ["config", "resource"]:
self.DefaultTypes = {"All" : "Global"}
self.DefaultValue = {"Name" : "", "Class" : "", "Type" : "INT", "Location" : "", "Initial Value" : "", "Retain" : "No", "Constant" : "No", "Edit" : True}
else:
self.DefaultTypes = {"All" : "Local", "Interface" : "Input", "Variables" : "Local"}
self.DefaultValue = {"Name" : "", "Class" : "", "Type" : "INT", "Location" : "", "Initial Value" : "", "Retain" : "No", "Constant" : "No", "Edit" : True}
- if pou_type in ["config", "resource"] or pou_type == "program":
+ if element_type in ["config", "resource"] or element_type in ["program", "transition", "action"]:
self.Table = VariableTable(self, [], ["#", "Name", "Class", "Type", "Location", "Initial Value", "Retain", "Constant"])
- if pou_type not in ["config", "resource"]:
+ if element_type not in ["config", "resource"]:
self.FilterChoices = ["All","Interface"," Input"," Output"," InOut"," External","Variables"," Local"," Temp","Global","Access"]
else:
self.FilterChoices = ["All","Global","Access"]
@@ -2612,7 +2832,7 @@
self.OptionList = "Yes,No"
self.TypeList = [value for value, parent in TypeHierarchy_list if not value.startswith("ANY")]
- if pou_type == "function":
+ if element_type == "function":
for value, parent in TypeHierarchy_list:
if not value.startswith("ANY"):
self.ReturnType.Append(value)
@@ -2630,80 +2850,35 @@
self.VariablesGrid.SetColAttr(col, attr)
self.VariablesGrid.SetColSize(col, self.ColSizes[col])
- def SetIndex(self, index):
- self.ControlerIndex = index
-
- def GetIndex(self):
- return self.ControlerIndex
-
- def RefreshName(self, name_type, old_name, new_name):
- if name_type == ITEM_POU and self.PouName == old_name:
- self.PouName = new_name
- elif name_type == ITEM_TRANSITION and self.TransitionName == old_name:
- self.TransitionName = new_name
- elif name_type == ITEM_ACTION and self.ActionName == old_name:
- self.ActionName = new_name
- elif name_type == ITEM_CONFIGURATION and self.ConfigName == old_name:
- self.ConfigName = new_name
- elif name_type == ITEM_RESOURCE and self.ResourceName == old_name:
- self.ResourceName = new_name
-
- def SetMode(self, mode):
- if self.ElementType not in ["resource", "config"]:
- if self.ElementType == "transition":
- language = self.Controler.GetTransitionBodyType(self.PouName, self.TransitionName)
- elif self.ElementType == "action":
- language = self.Controler.GetActionBodyType(self.PouName, self.ActionName)
- else:
- language = self.Controler.GetPouBodyType(self.PouName)
- if language not in ["IL", "ST"]:
- self.Viewer.SetMode(mode)
-
- def ResetBuffer(self):
- self.Viewer.ResetBuffer()
-
+ def SetTagName(self, tagname):
+ self.TagName = tagname
+
def RefreshView(self):
self.PouNames = self.Controler.GetProjectPouNames()
+ words = self.TagName.split("::")
if self.ElementType == "config":
self.PouIsUsed = False
returnType = None
- self.Values = self.Controler.GetConfigurationGlobalVars(self.ConfigName)
+ self.Values = self.Controler.GetConfigurationGlobalVars(words[1])
elif self.ElementType == "resource":
self.PouIsUsed = False
returnType = None
- self.Values = self.Controler.GetConfigurationResourceGlobalVars(self.ConfigName, self.ResourceName)
- else:
- self.PouIsUsed = self.Controler.PouIsUsed(self.PouName)
- returnType = self.Controler.GetCurrentElementEditingInterfaceReturnType()
- self.Values = self.Controler.GetCurrentElementEditingInterfaceVars()
+ self.Values = self.Controler.GetConfigurationResourceGlobalVars(words[1], words[2])
+ else:
+ self.PouIsUsed = self.Controler.PouIsUsed(words[1])
+ returnType = self.Controler.GetEditedElementInterfaceReturnType(self.TagName)
+ self.Values = self.Controler.GetEditedElementInterfaceVars(self.TagName)
if returnType and self.ReturnType.IsEnabled():
self.ReturnType.SetStringSelection(returnType)
self.RefreshValues()
- self.RefreshViewerVarList()
self.RefreshButtons()
- self.Viewer.RefreshView()
-
- def RefreshViewerVarList(self):
- if self.ElementType not in ["config", "resource"]:
- varlist = [var["Name"] for var in self.Values]
- if self.ElementType == "transition":
- language = self.Controler.GetTransitionBodyType(self.PouName, self.TransitionName)
- varlist.append(self.TransitionName)
- elif self.ElementType == "action":
- language = self.Controler.GetActionBodyType(self.PouName, self.ActionName)
- varlist.append(self.ActionName)
- else:
- language = self.Controler.GetPouBodyType(self.PouName)
- varlist.append(self.PouName)
- if language in ["IL", "ST"]:
- self.Viewer.SetVariables(varlist)
- self.Viewer.SetFunctions(self.Controler.GetBlockTypes())
def OnReturnTypeChanged(self, event):
- self.Controler.SetPouInterfaceReturnType(self.PouName, self.ReturnType.GetStringSelection())
+ words = self.TagName.split("::")
+ self.Controler.SetPouInterfaceReturnType(words[1], self.ReturnType.GetStringSelection())
self.Controler.BufferProject()
self.ParentWindow.RefreshTitle()
self.ParentWindow.RefreshEditMenu()
@@ -2797,30 +2972,17 @@
self.SaveValues(False)
old_value = self.Table.GetOldValue()
if old_value != "":
- self.Controler.UpdateCurrentPouEditingUsedVariable(old_value, value)
+ self.Controler.UpdateEditedElementUsedVariable(self.TagName, old_value, value)
self.Controler.BufferProject()
+ self.ParentWindow.RefreshEditor(variablepanel = False)
self.ParentWindow.RefreshTitle()
self.ParentWindow.RefreshEditMenu()
- self.RefreshViewerVarList()
- self.Viewer.RefreshView()
event.Skip()
else:
self.SaveValues()
if colname == "Class":
self.Table.ResetView(self.VariablesGrid)
event.Skip()
-
- def OnVariablesGridCellLeftClick(self, event):
- if event.GetCol() == "#":
- row = event.GetRow()
- var_name = self.Table.GetValueByName(row, "Name")
- var_class = self.Table.GetValueByName(row, "Class")
- var_type = self.Table.GetValueByName(row, "Type")
- data = wx.TextDataObject(str((var_name, var_class, var_type)))
- dragSource = wx.DropSource(self.VariablesGrid)
- dragSource.SetData(data)
- dragSource.DoDragDrop()
- event.Skip()
def OnVariablesGridEditorShown(self, event):
row, col = event.GetRow(), event.GetCol()
@@ -2850,8 +3012,7 @@
self.Table.SetValueByName(row, "Type", base_type)
self.Table.ResetView(self.VariablesGrid)
self.SaveValues(False)
- self.Viewer.RefreshView()
- self.Viewer.VerifyVariableTypeCompatibility()
+ self.ParentWindow.RefreshEditor(variablepanel = False)
self.Controler.BufferProject()
self.ParentWindow.RefreshTitle()
self.ParentWindow.RefreshEditMenu()
@@ -2864,7 +3025,7 @@
var_name = self.Table.GetValueByName(row, "Name")
var_class = self.Table.GetValueByName(row, "Class")
var_type = self.Table.GetValueByName(row, "Type")
- data = wx.TextDataObject(str((var_name, var_class, var_type)))
+ data = wx.TextDataObject(str((var_name, var_class, var_type, self.TagName)))
dragSource = wx.DropSource(self.VariablesGrid)
dragSource.SetData(data)
dragSource.DoDragDrop()
@@ -2896,14 +3057,15 @@
self.Table.ResetView(self.VariablesGrid)
def SaveValues(self, buffer = True):
+ words = self.TagName.split("::")
if self.ElementType == "config":
- self.Controler.SetConfigurationGlobalVars(self.ConfigName, self.Values)
+ self.Controler.SetConfigurationGlobalVars(words[1], self.Values)
elif self.ElementType == "resource":
- self.Controler.SetConfigurationResourceGlobalVars(self.ConfigName, self.ResourceName, self.Values)
+ self.Controler.SetConfigurationResourceGlobalVars(words[1], words[2], self.Values)
else:
if self.ReturnType.IsEnabled():
- self.Controler.SetPouInterfaceReturnType(self.PouName, self.ReturnType.GetStringSelection())
- self.Controler.SetPouInterfaceVars(self.PouName, self.Values)
+ self.Controler.SetPouInterfaceReturnType(words[1], self.ReturnType.GetStringSelection())
+ self.Controler.SetPouInterfaceVars(words[1], self.Values)
if buffer:
self.Controler.BufferProject()
self.ParentWindow.RefreshTitle()