Added embedded mode in objdictedit, for integration in Beremiz.
authoretisserant
Tue, 24 Jun 2008 19:05:41 +0200
changeset 485 24b506ea314b
parent 484 f59d1cdde42b
child 486 edf526bd34b5
Added embedded mode in objdictedit, for integration in Beremiz.
objdictgen/networkedit.py
objdictgen/nodemanager.py
objdictgen/objdictedit.py
objdictgen/subindextable.py
--- a/objdictgen/networkedit.py	Mon Jun 23 17:55:11 2008 +0200
+++ b/objdictgen/networkedit.py	Tue Jun 24 19:05:41 2008 +0200
@@ -596,7 +596,7 @@
                         self.HelpBar.SetStatusText("", i)
 
     def RefreshMainMenu(self):
-        if self.MenuBar:
+        if self and self.MenuBar:
             self.NetworkMenu.Enable(ID_NETWORKEDITNETWORKMENUBUILDMASTER, False)
             if self.NodeList == None:
                 if self.ModeSolo:
--- a/objdictgen/nodemanager.py	Mon Jun 23 17:55:11 2008 +0200
+++ b/objdictgen/nodemanager.py	Tue Jun 24 19:05:41 2008 +0200
@@ -789,6 +789,9 @@
     def GetBufferNumber(self):
         return len(self.UndoBuffers)
 
+    def GetBufferIndexes(self):
+        return self.UndoBuffers.keys()
+
     def LoadCurrentPrevious(self):
         self.CurrentNode = self.UndoBuffers[self.NodeIndex].Previous().Copy()
     
--- a/objdictgen/objdictedit.py	Mon Jun 23 17:55:11 2008 +0200
+++ b/objdictgen/objdictedit.py	Tue Jun 24 19:05:41 2008 +0200
@@ -126,7 +126,8 @@
 
 class objdictedit(wx.Frame):
     def _init_coll_MenuBar_Menus(self, parent):
-        parent.Append(menu=self.FileMenu, title='File')
+        if self.ModeSolo:
+            parent.Append(menu=self.FileMenu, title='File')
         parent.Append(menu=self.EditMenu, title='Edit')
         parent.Append(menu=self.AddMenu, title='Add')
         parent.Append(menu=self.HelpMenu, title='Help')
@@ -228,7 +229,7 @@
         parent.Append(help='', id=wx.ID_HELP_CONTEXT,
               kind=wx.ITEM_NORMAL, text='CAN Festival Docs\tF2')
         self.Bind(wx.EVT_MENU, self.OnHelpCANFestivalMenu, id=wx.ID_HELP_CONTEXT)
-        if Html_Window:
+        if Html_Window and self.ModeSolo:
             parent.Append(help='', id=wx.ID_ABOUT,
                   kind=wx.ITEM_NORMAL, text='About')
             self.Bind(wx.EVT_MENU, self.OnAboutMenu, id=wx.ID_ABOUT)
@@ -246,13 +247,15 @@
         self.MenuBar = wx.MenuBar()
         self.MenuBar.SetEvtHandlerEnabled(True)
 
-        self.FileMenu = wx.Menu(title='')
+        if self.ModeSolo:
+            self.FileMenu = wx.Menu(title='')
         self.EditMenu = wx.Menu(title='')
         self.AddMenu = wx.Menu(title='')
         self.HelpMenu = wx.Menu(title='')
 
         self._init_coll_MenuBar_Menus(self.MenuBar)
-        self._init_coll_FileMenu_Items(self.FileMenu)
+        if self.ModeSolo:
+            self._init_coll_FileMenu_Items(self.FileMenu)
         self._init_coll_EditMenu_Items(self.EditMenu)
         self._init_coll_AddMenu_Items(self.AddMenu)
         self._init_coll_HelpMenu_Items(self.HelpMenu)
@@ -265,6 +268,10 @@
         self.SetClientSize(wx.Size(1000, 700))
         self.SetMenuBar(self.MenuBar)
         self.Bind(wx.EVT_CLOSE, self.OnCloseFrame)
+        if not self.ModeSolo:
+            self.Bind(wx.EVT_MENU, self.OnSaveMenu, id=wx.ID_SAVE)
+            accel = wx.AcceleratorTable([wx.AcceleratorEntry(wx.ACCEL_CTRL, 83, wx.ID_SAVE)])
+            self.SetAcceleratorTable(accel)
 
         self.FileOpened = wx.Notebook(id=ID_OBJDICTEDITFILEOPENED,
               name='FileOpened', parent=self, pos=wx.Point(0, 0),
@@ -277,25 +284,35 @@
         self._init_coll_HelpBar_Fields(self.HelpBar)
         self.SetStatusBar(self.HelpBar)
 
-    def __init__(self, parent, filesOpen = []):
+    def __init__(self, parent, manager = None, filesOpen = []):
+        self.ModeSolo = manager == None
         self._init_ctrls(parent)
         self.HtmlFrameOpened = []
-        self.ModeSolo = True
+        self.BusId = None
         
         icon = wx.Icon(os.path.join(ScriptDirectory,"networkedit.ico"),wx.BITMAP_TYPE_ICO)
         self.SetIcon(icon)
         
-        self.Manager = NodeManager()
-        for filepath in filesOpen:
-            result = self.Manager.OpenFileInCurrent(filepath)
-            if type(result) == IntType:
+        if self.ModeSolo:
+            self.Manager = NodeManager()
+            for filepath in filesOpen:
+                result = self.Manager.OpenFileInCurrent(filepath)
+                if type(result) == IntType:
+                    new_editingpanel = EditingPanel(self.FileOpened, self, self.Manager)
+                    new_editingpanel.SetIndex(result)
+                    self.FileOpened.AddPage(new_editingpanel, "")
+        else:
+            self.Manager = manager
+            for index in self.Manager.GetBufferIndexes():
                 new_editingpanel = EditingPanel(self.FileOpened, self, self.Manager)
-                new_editingpanel.SetIndex(result)
+                new_editingpanel.SetIndex(index)
                 self.FileOpened.AddPage(new_editingpanel, "")
-            window = self.FileOpened.GetPage(0)
-            if window:
-                self.Manager.ChangeCurrentNode(window.GetIndex())
-                self.FileOpened.SetSelection(0)
+        
+        window = self.FileOpened.GetPage(0)
+        if window:
+            self.Manager.ChangeCurrentNode(window.GetIndex())
+            self.FileOpened.SetSelection(0)
+        
         if self.Manager.CurrentDS302Defined():
             self.EditMenu.Enable(ID_OBJDICTEDITEDITMENUDS302PROFILE, True)
         else:
@@ -306,6 +323,12 @@
         self.RefreshTitle()
         self.RefreshMainMenu()
 
+    def SetBusId(self, bus_id):
+        self.BusId = bus_id
+
+    def GetBusId(self):
+        return self.BusId
+
     def OnAddSDOServerMenu(self, event):
         self.Manager.AddSDOServerToCurrent()
         self.RefreshBufferState()
@@ -401,7 +424,11 @@
         event.Skip()
     
     def OnCloseFrame(self, event):
-        if self.Manager.OneFileHasChanged():
+        if not self.ModeSolo:
+            if getattr(self, "_onclose", None) != None:
+                self._onclose()
+            event.Skip()
+        elif self.Manager.OneFileHasChanged():
             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()
@@ -477,23 +504,33 @@
                         self.HelpBar.SetStatusText("", i)
 
     def RefreshMainMenu(self):
-        if self.FileMenu:
+        if self:
             if self.FileOpened.GetPageCount() > 0:
-                self.MenuBar.EnableTop(1, True)
-                self.MenuBar.EnableTop(2, True)
-                self.FileMenu.Enable(wx.ID_CLOSE, True)
-                self.FileMenu.Enable(wx.ID_SAVE, True)
-                self.FileMenu.Enable(wx.ID_SAVEAS, True)
-                self.FileMenu.Enable(ID_OBJDICTEDITFILEMENUEXPORTEDS, True)
-                self.FileMenu.Enable(ID_OBJDICTEDITFILEMENUEXPORTC, True)
+                if self.ModeSolo:
+                    self.MenuBar.EnableTop(1, True)
+                    self.MenuBar.EnableTop(2, True)
+                    if self.FileMenu:
+                        self.FileMenu.Enable(wx.ID_CLOSE, True)
+                        self.FileMenu.Enable(wx.ID_SAVE, True)
+                        self.FileMenu.Enable(wx.ID_SAVEAS, True)
+                        self.FileMenu.Enable(ID_OBJDICTEDITFILEMENUEXPORTEDS, True)
+                        self.FileMenu.Enable(ID_OBJDICTEDITFILEMENUEXPORTC, True)
+                else:
+                    self.MenuBar.EnableTop(0, True)
+                    self.MenuBar.EnableTop(1, True)
             else:
-                self.MenuBar.EnableTop(1, False)
-                self.MenuBar.EnableTop(2, False)
-                self.FileMenu.Enable(wx.ID_CLOSE, False)
-                self.FileMenu.Enable(wx.ID_SAVE, False)
-                self.FileMenu.Enable(wx.ID_SAVEAS, False)
-                self.FileMenu.Enable(ID_OBJDICTEDITFILEMENUEXPORTEDS, False)
-                self.FileMenu.Enable(ID_OBJDICTEDITFILEMENUEXPORTC, False)
+                if self.ModeSolo:
+                    self.MenuBar.EnableTop(1, False)
+                    self.MenuBar.EnableTop(2, False)
+                    if self.FileMenu:
+                        self.FileMenu.Enable(wx.ID_CLOSE, False)
+                        self.FileMenu.Enable(wx.ID_SAVE, False)
+                        self.FileMenu.Enable(wx.ID_SAVEAS, False)
+                        self.FileMenu.Enable(ID_OBJDICTEDITFILEMENUEXPORTEDS, False)
+                        self.FileMenu.Enable(ID_OBJDICTEDITFILEMENUEXPORTC, False)
+                else:
+                    self.MenuBar.EnableTop(0, False)
+                    self.MenuBar.EnableTop(1, False)
 
     def RefreshEditMenu(self):
         if self.EditMenu:
@@ -614,7 +651,10 @@
         event.Skip()
 
     def OnSaveMenu(self, event):
-        self.Save()
+        if not self.ModeSolo and getattr(self, "_onsave", None) != None:
+            self._onsave()
+        else:
+            self.Save()
         event.Skip()
     
     def OnSaveAsMenu(self, event):
@@ -999,7 +1039,7 @@
     # Install a exception handle for bug reports
     AddExceptHook(os.getcwd(),__version__)
     
-    frame = objdictedit(None, args)
+    frame = objdictedit(None, filesOpen = args)
 
     frame.Show()
     app.MainLoop()
--- a/objdictgen/subindextable.py	Mon Jun 23 17:55:11 2008 +0200
+++ b/objdictgen/subindextable.py	Tue Jun 24 19:05:41 2008 +0200
@@ -449,7 +449,23 @@
     def OnSubindexGridCellLeftClick(self, event):
         if not self.ParentWindow.ModeSolo:
             col = event.GetCol()
-            if not self.Editable and col == 0:
+            if self.Editable and col == 0:
+                selected = self.IndexList.GetSelection()
+                if selected != wx.NOT_FOUND:
+                    index = self.ListIndex[selected]
+                    subindex = event.GetRow()
+                    entry_infos = self.Manager.GetEntryInfos(index)
+                    if not entry_infos["struct"] & OD_MultipleSubindexes or subindex != 0:
+                        subentry_infos = self.Manager.GetSubentryInfos(index, subindex)
+                        typeinfos = self.Manager.GetEntryInfos(subentry_infos["type"])
+                        if typeinfos:
+                            bus_id = '.'.join(map(str, self.ParentWindow.GetBusId()))
+                            size = typeinfos["size"]
+                            data = wx.TextDataObject(str(("%s%s.%d.%d"%(SizeConversion[size], bus_id, index, subindex), "location")))
+                            dragSource = wx.DropSource(self.SubindexGrid)
+                            dragSource.SetData(data)
+                            dragSource.DoDragDrop()
+            elif col == 0:
                 selected = self.IndexList.GetSelection()
                 if selected != wx.NOT_FOUND:
                     index = self.ListIndex[selected]