PLCOpenEditor.py
changeset 90 2245e8776086
parent 82 119b62c73085
child 92 76d5001393df
--- 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