]> rtime.felk.cvut.cz Git - CanFestival-3.git/commitdiff
Added embedded mode in objdictedit, for integration in Beremiz.
authoretisserant <etisserant>
Tue, 24 Jun 2008 17:05:41 +0000 (17:05 +0000)
committeretisserant <etisserant>
Tue, 24 Jun 2008 17:05:41 +0000 (17:05 +0000)
objdictgen/networkedit.py
objdictgen/nodemanager.py
objdictgen/objdictedit.py
objdictgen/subindextable.py

index 30b745f78ff5edad85d597f3e5165ce7c8dddb6a..3d82fa4caca6fc16284259ff4d114a873cc2dc12 100644 (file)
@@ -27,7 +27,7 @@ import wx.grid
 from types import *
 import os, re, platform, sys, time, traceback, getopt
 
-__version__ = "$Revision: 1.22 $"
+__version__ = "$Revision: 1.23 $"
 
 from nodelist import *
 from nodemanager import *
@@ -596,7 +596,7 @@ class networkedit(wx.Frame):
                         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:
index 300d4cb2a7c12e3a7659524793adc0c422556d56..21faf261bdf4e41310fe7b02802ec206fdf62e38 100755 (executable)
@@ -789,6 +789,9 @@ class NodeManager:
     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()
     
index 9ba2027361e2b97714404ff52b6e1494a1cd3c30..09b905ae6f7d8116d43967d4ea6e738b08868d22 100755 (executable)
@@ -26,7 +26,7 @@ import wx
 from types import *
 import os, re, platform, sys, time, traceback, getopt
 
-__version__ = "$Revision: 1.41 $"
+__version__ = "$Revision: 1.42 $"
 
 from node import OD_Subindex, OD_MultipleSubindexes, OD_IdenticalSubindexes, OD_IdenticalIndexes
 
@@ -126,7 +126,8 @@ ScriptDirectory = os.path.split(os.path.realpath(__file__))[0]
 
 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 @@ class objdictedit(wx.Frame):
         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 @@ class objdictedit(wx.Frame):
         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 @@ class objdictedit(wx.Frame):
         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 @@ class objdictedit(wx.Frame):
         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 @@ class objdictedit(wx.Frame):
         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 @@ class objdictedit(wx.Frame):
         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 @@ class objdictedit(wx.Frame):
                         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 @@ class objdictedit(wx.Frame):
         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 @@ if __name__ == '__main__':
     # Install a exception handle for bug reports
     AddExceptHook(os.getcwd(),__version__)
     
-    frame = objdictedit(None, args)
+    frame = objdictedit(None, filesOpen = args)
 
     frame.Show()
     app.MainLoop()
index 9da33490273d782c2a6fe96a8efd7558f374f88f..32f59fa21bf2f15dc590e68f10998cb1cc944116 100644 (file)
@@ -449,7 +449,23 @@ class EditingPanel(wx.SplitterWindow):
     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]