diff -r a6ff2b3fcc25 -r 2245e8776086 PLCOpenEditor.py --- a/PLCOpenEditor.py Mon Sep 10 16:12:29 2007 +0200 +++ b/PLCOpenEditor.py Mon Sep 10 18:16:07 2007 +0200 @@ -346,6 +346,10 @@ self.SetClientSize(wx.Size(1000, 600)) self.SetMenuBar(self.menuBar1) self.Bind(wx.EVT_CLOSE, self.OnCloseFrame, id=ID_PLCOPENEDITOR) + if not self.ModeSolo: + self.Bind(wx.EVT_MENU, self.OnSaveProjectMenu, id=ID_PLCOPENEDITORFILEMENUITEMS5) + accel = wx.AcceleratorTable([wx.AcceleratorEntry(wx.ACCEL_CTRL, 83, ID_PLCOPENEDITORFILEMENUITEMS5)]) + self.SetAcceleratorTable(accel) self.MainSplitter = wx.SplitterWindow(id=ID_PLCOPENEDITORMAINSPLITTER, name='MainSplitter', parent=self, point=wx.Point(0, 0), @@ -365,7 +369,7 @@ self.ToolBar = wx.ToolBar(id=ID_PLCOPENEDITORTOOLBAR, name='ToolBar', parent=self.EditorPanel, pos=wx.Point(0, 0), size=wx.Size(0, 40), - style=wx.TB_HORIZONTAL | wx.NO_BORDER) + style=wx.TB_HORIZONTAL|wx.NO_BORDER) self.ToolBar.AddRadioTool(ID_PLCOPENEDITORTOOLBARSELECTION, wx.Bitmap(os.path.join(CWD, 'Images/select.png')), wx.NullBitmap, "Select an object") self.Bind(wx.EVT_TOOL, self.OnSelectionTool, @@ -496,7 +500,10 @@ dialog.Destroy() def OnCloseFrame(self, event): - if not self.Controler.ProjectIsSaved(): + if not self.ModeSolo and getattr(self, "_onclose", None) != None: + self._onclose() + event.Skip() + elif not self.Controler.ProjectIsSaved(): dialog = wx.MessageDialog(self, "There are changes, do you want to save?", "Close Application", wx.YES_NO|wx.CANCEL|wx.ICON_QUESTION) answer = dialog.ShowModal() dialog.Destroy() @@ -570,7 +577,10 @@ event.Skip() def OnSaveProjectMenu(self, event): - self.SaveProject() + if not self.ModeSolo and getattr(self, "_onsave", None) != None: + self._onsave() + else: + self.SaveProject() event.Skip() def OnSaveProjectAsMenu(self, event): @@ -1015,26 +1025,25 @@ def RefreshProjectTree(self): infos = self.Controler.GetProjectInfos() root = self.ProjectTree.GetRootItem() + if not root.IsOk(): + root = self.ProjectTree.AddRoot(infos["name"]) self.GenerateTreeBranch(root, infos) self.ProjectTree.Expand(self.ProjectTree.GetRootItem()) def GenerateTreeBranch(self, root, infos): to_delete = [] - if root.IsOk(): - self.ProjectTree.SetItemText(root, infos["name"]) - else: - root = self.ProjectTree.AddRoot(infos["name"]) + self.ProjectTree.SetItemText(root, infos["name"]) self.ProjectTree.SetPyData(root, infos["type"]) if infos["type"] == ITEM_POU: self.ProjectTree.SetItemImage(root, LANGUAGES.index(self.Controler.GetPouBodyType(infos["name"]))) item, root_cookie = self.ProjectTree.GetFirstChild(root) - if len(infos["values"]) > 0: - for values in infos["values"]: - if not item.IsOk(): - item = self.ProjectTree.AppendItem(root, "") + for values in infos["values"]: + if not item.IsOk(): + item = self.ProjectTree.AppendItem(root, "") + if wx.VERSION < (2, 7, 0): item, root_cookie = self.ProjectTree.GetNextChild(root, root_cookie) - self.GenerateTreeBranch(item, values) - item, root_cookie = self.ProjectTree.GetNextChild(root, root_cookie) + self.GenerateTreeBranch(item, values) + item, root_cookie = self.ProjectTree.GetNextChild(root, root_cookie) while item.IsOk(): to_delete.append(item) item, root_cookie = self.ProjectTree.GetNextChild(root, root_cookie) @@ -2187,20 +2196,20 @@ def __init__(self, parent): wx.TextDropTarget.__init__(self) - self.Parent = parent + self.ParentWindow = parent def OnDropText(self, x, y, data): - col = self.Parent.VariablesGrid.XToCol(x) - row = self.Parent.VariablesGrid.YToRow(y) + col = self.ParentWindow.VariablesGrid.XToCol(x) + row = self.ParentWindow.VariablesGrid.YToRow(y) if col != wx.NOT_FOUND and row != wx.NOT_FOUND: - if self.Parent.Table.GetColLabelValue(col) != "Location": + if self.ParentWindow.Table.GetColLabelValue(col) != "Location": return try: values = eval(data) except: values = None if values and values[1] == "location": - dialog = wx.SingleChoiceDialog(self.Parent, "Select a variable class:", "Variable class", ["Input", "Output", "Memory"], wx.OK|wx.CANCEL) + dialog = wx.SingleChoiceDialog(self.ParentWindow, "Select a variable class:", "Variable class", ["Input", "Output", "Memory"], wx.OK|wx.CANCEL) if dialog.ShowModal() == wx.ID_OK: selected = dialog.GetSelection() if selected == 0: @@ -2209,9 +2218,9 @@ location = "%Q" + values[0] else: location = "%M" + values[0] - self.Parent.Table.SetValue(row - 1, col, location) - self.Parent.Table.ResetView(self.Parent.VariablesGrid) - self.Parent.SaveValues() + self.ParentWindow.Table.SetValue(row - 1, col, location) + self.ParentWindow.Table.ResetView(self.ParentWindow.VariablesGrid) + self.ParentWindow.SaveValues() dialog.Destroy() [ID_POUEDITORPANEL, ID_POUEDITORPANELVIEWER, @@ -2290,15 +2299,15 @@ self.Viewer.ResetBuffer = lambda: None self.Viewer.RefreshView = lambda: None elif element_type == "resource": - self.Viewer = ResourceEditor(self, self.Parent, self.Controler) + self.Viewer = ResourceEditor(self, self.ParentWindow, self.Controler) elif element_type == "FBD": - self.Viewer = Viewer(self, self.Parent, self.Controler) + self.Viewer = Viewer(self, self.ParentWindow, self.Controler) elif element_type == "LD": - self.Viewer = LD_Viewer(self, self.Parent, self.Controler) + self.Viewer = LD_Viewer(self, self.ParentWindow, self.Controler) elif element_type == "SFC": - self.Viewer = SFC_Viewer(self, self.Parent, self.Controler) + self.Viewer = SFC_Viewer(self, self.ParentWindow, self.Controler) else: - self.Viewer = TextViewer(self, self.Parent, self.Controler) + self.Viewer = TextViewer(self, self.ParentWindow, self.Controler) self.Viewer.SetTextSyntax(element_type) if element_type == "IL": self.Viewer.SetKeywords(IL_KEYWORDS) @@ -2365,7 +2374,7 @@ 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): - self.Parent = window + self.ParentWindow = window self.Controler = controler self.ElementType = element_type self.PouName = pou_name @@ -2496,8 +2505,8 @@ def OnReturnTypeChanged(self, event): self.Controler.SetPouInterfaceReturnType(self.PouName, self.ReturnType.GetStringSelection()) self.Controler.BufferProject() - self.Parent.RefreshTitle() - self.Parent.RefreshEditMenu() + self.ParentWindow.RefreshTitle() + self.ParentWindow.RefreshEditMenu() event.Skip() def OnClassFilter(self, event): @@ -2590,8 +2599,8 @@ if old_value != "": self.Controler.UpdateCurrentPouEditingUsedVariable(old_value, value) self.Controler.BufferProject() - self.Parent.RefreshTitle() - self.Parent.RefreshEditMenu() + self.ParentWindow.RefreshTitle() + self.ParentWindow.RefreshEditMenu() self.RefreshViewerVarList() self.Viewer.RefreshView() event.Skip() @@ -2690,8 +2699,8 @@ self.Controler.SetPouInterfaceVars(self.PouName, self.Values) if buffer: self.Controler.BufferProject() - self.Parent.RefreshTitle() - self.Parent.RefreshEditMenu() + self.ParentWindow.RefreshTitle() + self.ParentWindow.RefreshEditMenu() #------------------------------------------------------------------------------- # Exception Handler