--- a/PLCOpenEditor.py Wed Jul 25 10:06:29 2007 +0200
+++ b/PLCOpenEditor.py Thu Jul 26 17:23:21 2007 +0200
@@ -190,6 +190,10 @@
kind=wx.ITEM_NORMAL, text=u'Remove Configuration')
self.Bind(wx.EVT_MENU, self.OnRefreshMenu,
id=wxID_PLCOPENEDITOREDITMENUITEMS0)
+ self.Bind(wx.EVT_MENU, self.OnUndoMenu,
+ id=wxID_PLCOPENEDITOREDITMENUITEMS1)
+ self.Bind(wx.EVT_MENU, self.OnRedoMenu,
+ id=wxID_PLCOPENEDITOREDITMENUITEMS2)
self.Bind(wx.EVT_MENU, self.OnCutMenu,
id=wxID_PLCOPENEDITOREDITMENUITEMS4)
self.Bind(wx.EVT_MENU, self.OnCopyMenu,
@@ -373,6 +377,7 @@
self._init_utils()
self.SetClientSize(wx.Size(1000, 600))
self.SetMenuBar(self.menuBar1)
+ self.Bind(wx.EVT_CLOSE, self.OnCloseFrame, id=wxID_PLCOPENEDITOR)
self.splitterWindow1 = wx.SplitterWindow(id=wxID_PLCOPENEDITORSPLITTERWINDOW1,
name='splitterWindow1', parent=self, point=wx.Point(0, 0),
@@ -443,11 +448,18 @@
self.RefreshFileMenu()
self.RefreshEditMenu()
+ self.RefreshTitle()
self.RefreshToolBar()
def GetDrawingMode(self):
return self.DrawingMode
+ def RefreshTitle(self):
+ if self.Controler.HasOpenedProject() > 0:
+ self.SetTitle("PLCOpenEditor - %s"%self.Controler.GetFilename())
+ else:
+ self.SetTitle("PLCOpenEditor")
+
def RefreshFileMenu(self):
if self.FileMenu:
if self.Controler.HasOpenedProject():
@@ -470,8 +482,13 @@
def RefreshEditMenu(self):
if self.EditMenu:
- self.EditMenu.FindItemByPosition(1).Enable(False)
- self.EditMenu.FindItemByPosition(2).Enable(False)
+ if self.Controler.HasOpenedProject():
+ undo, redo = self.Controler.GetBufferState()
+ self.EditMenu.Enable(wxID_PLCOPENEDITOREDITMENUITEMS1, undo)
+ self.EditMenu.Enable(wxID_PLCOPENEDITOREDITMENUITEMS2, redo)
+ else:
+ self.EditMenu.Enable(wxID_PLCOPENEDITOREDITMENUITEMS1, False)
+ self.EditMenu.Enable(wxID_PLCOPENEDITOREDITMENUITEMS2, False)
if self.Controler.HasOpenedProject():
if self.TabsOpened.GetPageCount() > 0:
self.EditMenu.FindItemByPosition(0).Enable(True)
@@ -495,18 +512,29 @@
def ShowProperties(self):
old_values = self.Controler.GetProjectProperties()
- old_values["projectName"] = self.Controler.GetProjectName()
dialog = ProjectDialog(self)
dialog.SetValues(old_values)
if dialog.ShowModal() == wxID_OK:
new_values = dialog.GetValues()
projectname = new_values.pop("projectName")
new_values["creationDateTime"] = old_values["creationDateTime"]
- self.Controler.SetProjectName(projectname)
- self.Controler.SetProjectProperties(new_values)
+ self.Controler.SetProjectProperties(projectname, new_values)
self.RefreshProjectTree()
dialog.Destroy()
+ def OnCloseFrame(self, event):
+ if not self.Controler.ProjectIsSaved():
+ dialog = wxMessageDialog(self, "There are changes, do you want to save?", "Close Application", wxYES_NO|wxCANCEL|wxICON_QUESTION)
+ answer = dialog.ShowModal()
+ dialog.Destroy()
+ if answer == wxID_YES:
+ self.SaveProject()
+ event.Skip()
+ elif answer == wxID_NO:
+ event.Skip()
+ else:
+ event.Skip()
+
def OnNewProjectMenu(self, event):
dialog = ProjectDialog(self)
if dialog.ShowModal() == wxID_OK:
@@ -514,7 +542,8 @@
projectname = values.pop("projectName")
values["creationDateTime"] = datetime(*localtime()[:6])
self.Controler.CreateNewProject(projectname)
- self.Controler.SetProjectProperties(values)
+ self.Controler.SetProjectProperties(projectname, values)
+ self.RefreshTitle()
self.RefreshFileMenu()
self.RefreshEditMenu()
self.RefreshProjectTree()
@@ -533,6 +562,7 @@
self.Controler.OpenXMLFile(filepath)
self.TabsOpened.DeleteAllPages()
self.RefreshProjectTree()
+ self.RefreshTitle()
self.RefreshFileMenu()
self.RefreshEditMenu()
self.RefreshToolBar()
@@ -546,6 +576,7 @@
self.TabsOpened.DeletePage(selected)
if self.TabsOpened.GetPageCount() > 0:
self.TabsOpened.SetSelection(min(selected, self.TabsOpened.GetPageCount() - 1))
+ self.RefreshTitle()
self.RefreshFileMenu()
self.RefreshEditMenu()
self.RefreshToolBar()
@@ -555,6 +586,7 @@
self.Controler.Reset()
self.TabsOpened.DeleteAllPages()
self.ProjectTree.DeleteAllItems()
+ self.RefreshTitle()
self.RefreshFileMenu()
self.RefreshEditMenu()
self.RefreshToolBar()
@@ -589,13 +621,15 @@
result = self.Controler.SaveXMLFile()
if not result:
self.SaveProjectAs()
+ else:
+ self.RefreshTitle()
def SaveProjectAs(self):
filepath = self.Controler.GetFilePath()
if filepath != "":
directory, filename = os.path.split(filepath)
else:
- directory, filename = os.getcwd(), "%s.xml"%self.Controler.GetProjectName()
+ directory, filename = os.getcwd(), "%(projectName)s.xml"%self.Controler.GetProjectProperties()
dialog = wxFileDialog(self, "Choose a file", directory, filename, "PLCOpen files (*.xml)|*.xml|All files|*.*", wxSAVE|wxOVERWRITE_PROMPT)
if dialog.ShowModal() == wxID_OK:
filepath = dialog.GetPath()
@@ -609,6 +643,7 @@
message = wxMessageDialog(self, "%s is not a valid folder!"%os.path.dirname(filepath), "Error", wxOK|wxICON_ERROR)
message.ShowModal()
message.Destroy()
+ self.RefreshTitle()
dialog.Destroy()
def OnPropertiesMenu(self, event):
@@ -768,6 +803,9 @@
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)
@@ -809,7 +847,7 @@
item = event.GetItem()
itemtype = self.ProjectTree.GetPyData(item)
if itemtype == ITEM_PROJECT:
- self.Controler.SetProjectName(new_name)
+ self.Controler.SetProjectProperties(name = new_name)
elif itemtype == ITEM_POU:
if new_name.upper() in self.Controler.GetProjectPouNames():
message = "\"%s\" pou already exists!"%new_name
@@ -1088,6 +1126,9 @@
else:
idx = self.Controler.ChangePouActionEditing(grandparent_name, name)
if idx != None:
+ old_selected = self.TabsOpened.GetSelection()
+ if old_selected >= 0:
+ self.TabsOpened.GetPage(old_selected).ResetBuffer()
self.TabsOpened.SetSelection(idx)
window = self.TabsOpened.GetPage(idx)
window.RefreshView()
@@ -1197,9 +1238,30 @@
def OnRefreshMenu(self, event):
selected = self.TabsOpened.GetSelection()
if selected != -1:
+ self.TabsOpened.GetPage(selected).RefreshView()
self.TabsOpened.GetPage(selected).Refresh()
event.Skip()
-
+
+ def OnUndoMenu(self, event):
+ self.Controler.LoadPrevious()
+ selected = self.TabsOpened.GetSelection()
+ if selected != -1:
+ self.TabsOpened.GetPage(selected).RefreshView()
+ self.TabsOpened.GetPage(selected).Refresh()
+ self.RefreshTitle()
+ self.RefreshEditMenu()
+ event.Skip()
+
+ def OnRedoMenu(self, event):
+ self.Controler.LoadNext()
+ selected = self.TabsOpened.GetSelection()
+ if selected != -1:
+ self.TabsOpened.GetPage(selected).RefreshView()
+ self.TabsOpened.GetPage(selected).Refresh()
+ self.RefreshTitle()
+ self.RefreshEditMenu()
+ event.Skip()
+
def OnCutMenu(self, event):
selected = self.TabsOpened.GetSelection()
if selected != -1:
@@ -1244,9 +1306,12 @@
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:
- self.TabsOpened.DeletePage(i)
+ deleted = i
+ if deleted != None:
+ self.TabsOpened.DeletePage(i)
self.RefreshProjectTree()
self.RefreshToolBar()
else:
@@ -2173,6 +2238,8 @@
self.Viewer = wx.Panel(id=wxID_POUEDITORPANELVIEWER,
name='ConfigPanel', parent=self, pos=wx.Point(0, 0),
size=wx.Size(-1, -1), style=wx.TAB_TRAVERSAL)
+ self.Viewer.ResetBuffer = lambda: None
+ self.Viewer.RefreshView = lambda: None
elif element_type == "resource":
self.Viewer = ResourceEditor(self, self.Parent, self.Controler)
elif element_type == "FBD":
@@ -2327,6 +2394,9 @@
if language not in ["IL", "ST"]:
self.Viewer.SetMode(mode)
+ def ResetBuffer(self):
+ self.Viewer.ResetBuffer()
+
def RefreshView(self):
self.PouNames = self.Controler.GetProjectPouNames()
@@ -2360,9 +2430,8 @@
self.ReturnType.SetStringSelection(returnType)
self.RefreshValues()
self.RefreshButtons()
- if self.ElementType != "config":
- self.Viewer.RefreshView()
-
+ self.Viewer.RefreshView()
+
def OnClassFilter(self, event):
self.Filter = self.FilterChoiceTransfer[self.ClassFilter.GetStringSelection()]
self.RefreshTypeList()
@@ -2381,15 +2450,16 @@
self.ClassList = [self.Filter]
def RefreshButtons(self):
- table_length = len(self.Table.data)
- row_class = None
- if table_length and self.PouIsUsed:
- row = self.VariablesGrid.GetGridCursorRow()
- row_class = self.Table.GetValueByName(row, "Class")
- self.AddButton.Enable(not self.PouIsUsed or self.Filter not in ["Interface", "Input", "Output", "InOut"])
- self.DeleteButton.Enable(table_length > 0 and row_class not in ["Input", "Output", "InOut"])
- self.UpButton.Enable(table_length > 0 and self.Filter == "All" and row_class not in ["Input", "Output", "InOut"])
- self.DownButton.Enable(table_length > 0 and self.Filter == "All" and row_class not in ["Input", "Output", "InOut"])
+ if self.Table:
+ table_length = len(self.Table.data)
+ row_class = None
+ if table_length and self.PouIsUsed:
+ row = self.VariablesGrid.GetGridCursorRow()
+ row_class = self.Table.GetValueByName(row, "Class")
+ self.AddButton.Enable(not self.PouIsUsed or self.Filter not in ["Interface", "Input", "Output", "InOut"])
+ self.DeleteButton.Enable(table_length > 0 and row_class not in ["Input", "Output", "InOut"])
+ self.UpButton.Enable(table_length > 0 and self.Filter == "All" and row_class not in ["Input", "Output", "InOut"])
+ self.DownButton.Enable(table_length > 0 and self.Filter == "All" and row_class not in ["Input", "Output", "InOut"])
def OnAddButton(self, event):
new_row = self.DefaultValue.copy()