瀏覽代碼

wxGUI: move MenuTree and MenuTreeWindow from gui_core.ghelp to gui_core.menu

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@53368 15284696-431f-4ddb-bdfa-cd5b030d7da7
Martin Landa 12 年之前
父節點
當前提交
38d9cd8429
共有 4 個文件被更改,包括 212 次插入209 次删除
  1. 1 199
      gui/wxpython/gui_core/ghelp.py
  2. 207 6
      gui/wxpython/gui_core/menu.py
  3. 2 2
      gui/wxpython/lmgr/frame.py
  4. 2 2
      gui/wxpython/wxpythonlib.dox

+ 1 - 199
gui/wxpython/gui_core/ghelp.py

@@ -5,8 +5,6 @@
 
 
 Classes:
 Classes:
  - ghelp::SearchModuleWindow
  - ghelp::SearchModuleWindow
- - ghelp::MenuTreeWindow
- - ghelp::MenuTree
  - ghelp::AboutWindow
  - ghelp::AboutWindow
  - ghelp::HelpFrame
  - ghelp::HelpFrame
  - ghelp::HelpWindow
  - ghelp::HelpWindow
@@ -39,9 +37,8 @@ import grass.script as grass
 
 
 from core             import globalvar
 from core             import globalvar
 from core             import utils
 from core             import utils
-from lmgr.menudata    import ManagerData
 from core.gcmd        import GError, DecodeString
 from core.gcmd        import GError, DecodeString
-from gui_core.widgets import FormListbook, StaticWrapText, ItemTree, ScrolledPanel
+from gui_core.widgets import FormListbook, StaticWrapText, ScrolledPanel
 from core.debug       import Debug
 from core.debug       import Debug
 from core.settings    import UserSettings
 from core.settings    import UserSettings
 
 
@@ -193,201 +190,6 @@ class SearchModuleWindow(wx.Panel):
         if self.showTip:
         if self.showTip:
             self.searchTip.SetLabel('')
             self.searchTip.SetLabel('')
         
         
-class MenuTreeWindow(wx.Panel):
-    """!Show menu tree"""
-    def __init__(self, parent, id = wx.ID_ANY, **kwargs):
-        self.parent = parent # LayerManager
-        
-        wx.Panel.__init__(self, parent = parent, id = id, **kwargs)
-        
-        self.dataBox = wx.StaticBox(parent = self, id = wx.ID_ANY,
-                                    label = " %s " % _("Menu tree (double-click to run command)"))
-        # tree
-        self.tree = MenuTree(parent = self, data = ManagerData())
-        self.tree.Load()
-
-        # search widget
-        self.search = SearchModuleWindow(parent = self, showChoice = False)
-        
-        # buttons
-        self.btnRun   = wx.Button(self, id = wx.ID_OK, label = _("&Run"))
-        self.btnRun.SetToolTipString(_("Run selected command"))
-        self.btnRun.Enable(False)
-        
-        # bindings
-        self.btnRun.Bind(wx.EVT_BUTTON,            self.OnRun)
-        self.tree.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnItemActivated)
-        self.tree.Bind(wx.EVT_TREE_SEL_CHANGED,    self.OnItemSelected)
-        self.search.Bind(wx.EVT_TEXT_ENTER,        self.OnShowItem)
-        self.search.Bind(wx.EVT_TEXT,              self.OnUpdateStatusBar)
-        
-        self._layout()
-        
-        self.search.SetFocus()
-        
-    def _layout(self):
-        """!Do dialog layout"""
-        sizer = wx.BoxSizer(wx.VERTICAL)
-        
-        # body
-        dataSizer = wx.StaticBoxSizer(self.dataBox, wx.HORIZONTAL)
-        dataSizer.Add(item = self.tree, proportion =1,
-                      flag = wx.EXPAND)
-        
-        # buttons
-        btnSizer = wx.BoxSizer(wx.HORIZONTAL)
-        btnSizer.Add(item = self.btnRun, proportion = 0)
-        
-        sizer.Add(item = dataSizer, proportion = 1,
-                  flag = wx.EXPAND | wx.ALL, border = 5)
-
-        sizer.Add(item = self.search, proportion = 0,
-                  flag = wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM, border = 5)
-        
-        sizer.Add(item = btnSizer, proportion = 0,
-                  flag = wx.ALIGN_RIGHT | wx.BOTTOM | wx.RIGHT, border = 5)
-        
-        sizer.Fit(self)
-        sizer.SetSizeHints(self)
-        
-        self.SetSizer(sizer)
-        
-        self.Fit()
-        self.SetAutoLayout(True)        
-        self.Layout()
-        
-    def OnCloseWindow(self, event):
-        """!Close window"""
-        self.Destroy()
-        
-    def OnRun(self, event):
-        """!Run selected command"""
-        if not self.tree.GetSelected():
-            return # should not happen
-        
-        data = self.tree.GetPyData(self.tree.GetSelected())
-        if not data:
-            return
-
-        handler = 'self.parent.' + data['handler'].lstrip('self.')
-        if data['handler'] == 'self.OnXTerm':
-            wx.MessageBox(parent = self,
-                          message = _('You must run this command from the menu or command line',
-                                      'This command require an XTerm'),
-                          caption = _('Message'), style = wx.OK | wx.ICON_ERROR | wx.CENTRE)
-        elif data['command']:
-            eval(handler)(event = None, cmd = data['command'].split())
-        else:
-            eval(handler)(None)
-
-    def OnShowItem(self, event):
-        """!Show selected item"""
-        self.tree.OnShowItem(event)
-        if self.tree.GetSelected():
-            self.btnRun.Enable()
-        else:
-            self.btnRun.Enable(False)
-        
-    def OnItemActivated(self, event):
-        """!Item activated (double-click)"""
-        item = event.GetItem()
-        if not item or not item.IsOk():
-            return
-        
-        data = self.tree.GetPyData(item)
-        if not data or 'command' not in data:
-            return
-        
-        self.tree.itemSelected = item
-        
-        self.OnRun(None)
-        
-    def OnItemSelected(self, event):
-        """!Item selected"""
-        item = event.GetItem()
-        if not item or not item.IsOk():
-            return
-        
-        data = self.tree.GetPyData(item)
-        if not data or 'command' not in data:
-            return
-        
-        if data['command']:
-            label = data['command'] + ' -- ' + data['description']
-        else:
-            label = data['description']
-        
-        self.parent.SetStatusText(label, 0)
-        
-    def OnUpdateStatusBar(self, event):
-        """!Update statusbar text"""
-        element = self.search.GetSelection()
-        self.tree.SearchItems(element = element,
-                              value = event.GetString())
-        
-        nItems = len(self.tree.itemsMarked)
-        if event.GetString():
-            self.parent.SetStatusText(_("%d modules match") % nItems, 0)
-        else:
-            self.parent.SetStatusText("", 0)
-        
-        event.Skip()
-        
-class MenuTree(ItemTree):
-    """!Menu tree class"""
-    def __init__(self, parent, data, **kwargs):
-        self.parent   = parent
-        self.menudata = data
-
-        super(MenuTree, self).__init__(parent, **kwargs)
-        
-        self.menustyle = UserSettings.Get(group = 'appearance', key = 'menustyle', subkey = 'selection')
-        
-    def Load(self, data = None):
-        """!Load menu data tree
-
-        @param data menu data (None to use self.menudata)
-        """
-        if not data:
-            data = self.menudata
-        
-        self.itemsMarked = [] # list of marked items
-        for eachMenuData in data.GetMenu():
-            for label, items in eachMenuData:
-                item = self.AppendItem(parentId = self.root,
-                                       text = label.replace('&', ''))
-                self.__AppendItems(item, items)
-        
-    def __AppendItems(self, item, data):
-        """!Append items into tree (used by Load()
-        
-        @param item tree item (parent)
-        @parent data menu data"""
-        for eachItem in data:
-            if len(eachItem) == 2:
-                if eachItem[0]:
-                    itemSub = self.AppendItem(parentId = item,
-                                    text = eachItem[0])
-                self.__AppendItems(itemSub, eachItem[1])
-            else:
-                if eachItem[0]:
-                    label = eachItem[0]
-                    if eachItem[3]:
-                        if self.menustyle == 1:
-                            label += ' [' + eachItem[3] + ']'
-                        elif self.menustyle == 2:
-                            label = '[' + eachItem[3] + ']'
-                    
-                    itemNew = self.AppendItem(parentId = item,
-                                              text = label)
-                    
-                    data = { 'item'        : eachItem[0],
-                             'description' : eachItem[1],
-                             'handler'  : eachItem[2],
-                             'command'  : eachItem[3],
-                             'keywords' : eachItem[4] }
-                    
-                    self.SetPyData(itemNew, data)
         
         
 class AboutWindow(wx.Frame):
 class AboutWindow(wx.Frame):
     """!Create custom About Window
     """!Create custom About Window

+ 207 - 6
gui/wxpython/gui_core/menu.py

@@ -5,8 +5,10 @@
 
 
 Classes:
 Classes:
  - menu::Menu
  - menu::Menu
+ - menu::MenuTreeWindow
+ - menu::MenuTree
 
 
-(C) 2010 by the GRASS Development Team
+(C) 2010-2012 by the GRASS Development Team
 
 
 This program is free software under the GNU General Public License
 This program is free software under the GNU General Public License
 (>=v2). Read the file COPYING that comes with GRASS for details.
 (>=v2). Read the file COPYING that comes with GRASS for details.
@@ -20,10 +22,13 @@ This program is free software under the GNU General Public License
 
 
 import wx
 import wx
 
 
-from core          import globalvar
-from core          import utils
-from core.gcmd     import EncodeString
-from core.settings import UserSettings
+from core              import globalvar
+from core              import utils
+from core.gcmd         import EncodeString
+from core.settings     import UserSettings
+from gui_core.widgets  import ItemTree
+from lmgr.menudata     import ManagerData
+from gui_core.ghelp    import SearchModuleWindow
 
 
 class Menu(wx.MenuBar):
 class Menu(wx.MenuBar):
     def __init__(self, parent, data):
     def __init__(self, parent, data):
@@ -33,7 +38,7 @@ class Menu(wx.MenuBar):
         self.menudata = data
         self.menudata = data
         self.menucmd  = dict()
         self.menucmd  = dict()
         
         
-        self.menustyle = UserSettings.Get(group='appearance', key='menustyle', subkey='selection')
+        self.menustyle = UserSettings.Get(group = 'appearance', key = 'menustyle', subkey = 'selection')
         
         
         for eachMenuData in self.menudata.GetMenu():
         for eachMenuData in self.menudata.GetMenu():
             for eachHeading in eachMenuData:
             for eachHeading in eachMenuData:
@@ -118,3 +123,199 @@ class Menu(wx.MenuBar):
 
 
         # but in this case just call Skip so the default is done
         # but in this case just call Skip so the default is done
         event.Skip()
         event.Skip()
+
+class MenuTreeWindow(wx.Panel):
+    """!Show menu tree"""
+    def __init__(self, parent, id = wx.ID_ANY, **kwargs):
+        self.parent = parent # LayerManager
+        
+        wx.Panel.__init__(self, parent = parent, id = id, **kwargs)
+        
+        self.dataBox = wx.StaticBox(parent = self, id = wx.ID_ANY,
+                                    label = " %s " % _("Menu tree (double-click to run command)"))
+        # tree
+        self.tree = MenuTree(parent = self, data = ManagerData())
+        self.tree.Load()
+
+        # search widget
+        self.search = SearchModuleWindow(parent = self, showChoice = False)
+        
+        # buttons
+        self.btnRun   = wx.Button(self, id = wx.ID_OK, label = _("&Run"))
+        self.btnRun.SetToolTipString(_("Run selected command"))
+        self.btnRun.Enable(False)
+        
+        # bindings
+        self.btnRun.Bind(wx.EVT_BUTTON,            self.OnRun)
+        self.tree.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnItemActivated)
+        self.tree.Bind(wx.EVT_TREE_SEL_CHANGED,    self.OnItemSelected)
+        self.search.Bind(wx.EVT_TEXT_ENTER,        self.OnShowItem)
+        self.search.Bind(wx.EVT_TEXT,              self.OnUpdateStatusBar)
+        
+        self._layout()
+        
+        self.search.SetFocus()
+        
+    def _layout(self):
+        """!Do dialog layout"""
+        sizer = wx.BoxSizer(wx.VERTICAL)
+        
+        # body
+        dataSizer = wx.StaticBoxSizer(self.dataBox, wx.HORIZONTAL)
+        dataSizer.Add(item = self.tree, proportion =1,
+                      flag = wx.EXPAND)
+        
+        # buttons
+        btnSizer = wx.BoxSizer(wx.HORIZONTAL)
+        btnSizer.Add(item = self.btnRun, proportion = 0)
+        
+        sizer.Add(item = dataSizer, proportion = 1,
+                  flag = wx.EXPAND | wx.ALL, border = 5)
+
+        sizer.Add(item = self.search, proportion = 0,
+                  flag = wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM, border = 5)
+        
+        sizer.Add(item = btnSizer, proportion = 0,
+                  flag = wx.ALIGN_RIGHT | wx.BOTTOM | wx.RIGHT, border = 5)
+        
+        sizer.Fit(self)
+        sizer.SetSizeHints(self)
+        
+        self.SetSizer(sizer)
+        
+        self.Fit()
+        self.SetAutoLayout(True)        
+        self.Layout()
+        
+    def OnCloseWindow(self, event):
+        """!Close window"""
+        self.Destroy()
+        
+    def OnRun(self, event):
+        """!Run selected command"""
+        if not self.tree.GetSelected():
+            return # should not happen
+        
+        data = self.tree.GetPyData(self.tree.GetSelected())
+        if not data:
+            return
+
+        handler = 'self.parent.' + data['handler'].lstrip('self.')
+        if data['handler'] == 'self.OnXTerm':
+            wx.MessageBox(parent = self,
+                          message = _('You must run this command from the menu or command line',
+                                      'This command require an XTerm'),
+                          caption = _('Message'), style = wx.OK | wx.ICON_ERROR | wx.CENTRE)
+        elif data['command']:
+            eval(handler)(event = None, cmd = data['command'].split())
+        else:
+            eval(handler)(None)
+
+    def OnShowItem(self, event):
+        """!Show selected item"""
+        self.tree.OnShowItem(event)
+        if self.tree.GetSelected():
+            self.btnRun.Enable()
+        else:
+            self.btnRun.Enable(False)
+        
+    def OnItemActivated(self, event):
+        """!Item activated (double-click)"""
+        item = event.GetItem()
+        if not item or not item.IsOk():
+            return
+        
+        data = self.tree.GetPyData(item)
+        if not data or 'command' not in data:
+            return
+        
+        self.tree.itemSelected = item
+        
+        self.OnRun(None)
+        
+    def OnItemSelected(self, event):
+        """!Item selected"""
+        item = event.GetItem()
+        if not item or not item.IsOk():
+            return
+        
+        data = self.tree.GetPyData(item)
+        if not data or 'command' not in data:
+            return
+        
+        if data['command']:
+            label = data['command'] + ' -- ' + data['description']
+        else:
+            label = data['description']
+        
+        self.parent.SetStatusText(label, 0)
+        
+    def OnUpdateStatusBar(self, event):
+        """!Update statusbar text"""
+        element = self.search.GetSelection()
+        self.tree.SearchItems(element = element,
+                              value = event.GetString())
+        
+        nItems = len(self.tree.itemsMarked)
+        if event.GetString():
+            self.parent.SetStatusText(_("%d modules match") % nItems, 0)
+        else:
+            self.parent.SetStatusText("", 0)
+        
+        event.Skip()
+        
+class MenuTree(ItemTree):
+    """!Menu tree class"""
+    def __init__(self, parent, data, **kwargs):
+        self.parent   = parent
+        self.menudata = data
+
+        super(MenuTree, self).__init__(parent, **kwargs)
+        
+        self.menustyle = UserSettings.Get(group = 'appearance', key = 'menustyle', subkey = 'selection')
+        
+    def Load(self, data = None):
+        """!Load menu data tree
+
+        @param data menu data (None to use self.menudata)
+        """
+        if not data:
+            data = self.menudata
+        
+        self.itemsMarked = [] # list of marked items
+        for eachMenuData in data.GetMenu():
+            for label, items in eachMenuData:
+                item = self.AppendItem(parentId = self.root,
+                                       text = label.replace('&', ''))
+                self.__AppendItems(item, items)
+        
+    def __AppendItems(self, item, data):
+        """!Append items into tree (used by Load()
+        
+        @param item tree item (parent)
+        @parent data menu data"""
+        for eachItem in data:
+            if len(eachItem) == 2:
+                if eachItem[0]:
+                    itemSub = self.AppendItem(parentId = item,
+                                    text = eachItem[0])
+                self.__AppendItems(itemSub, eachItem[1])
+            else:
+                if eachItem[0]:
+                    label = eachItem[0]
+                    if eachItem[3]:
+                        if self.menustyle == 1:
+                            label += ' [' + eachItem[3] + ']'
+                        elif self.menustyle == 2:
+                            label = '[' + eachItem[3] + ']'
+                    
+                    itemNew = self.AppendItem(parentId = item,
+                                              text = label)
+                    
+                    data = { 'item'        : eachItem[0],
+                             'description' : eachItem[1],
+                             'handler'  : eachItem[2],
+                             'command'  : eachItem[3],
+                             'keywords' : eachItem[4] }
+                    
+                    self.SetPyData(itemNew, data)

+ 2 - 2
gui/wxpython/lmgr/frame.py

@@ -53,12 +53,12 @@ from gui_core.dialogs      import GdalOutputDialog, DxfImportDialog, GdalImportD
 from gui_core.dialogs      import EVT_APPLY_MAP_LAYERS
 from gui_core.dialogs      import EVT_APPLY_MAP_LAYERS
 from gui_core.dialogs      import LocationDialog, MapsetDialog, CreateNewVector, GroupDialog
 from gui_core.dialogs      import LocationDialog, MapsetDialog, CreateNewVector, GroupDialog
 from modules.colorrules    import RasterColorTable, VectorColorTable
 from modules.colorrules    import RasterColorTable, VectorColorTable
-from gui_core.menu         import Menu
+from gui_core.menu         import Menu, MenuTreeWindow
 from gmodeler.model        import Model
 from gmodeler.model        import Model
 from gmodeler.frame        import ModelFrame
 from gmodeler.frame        import ModelFrame
 from psmap.frame           import PsMapFrame
 from psmap.frame           import PsMapFrame
 from core.debug            import Debug
 from core.debug            import Debug
-from gui_core.ghelp        import MenuTreeWindow, AboutWindow
+from gui_core.ghelp        import AboutWindow
 from modules.extensions    import InstallExtensionWindow, UninstallExtensionWindow
 from modules.extensions    import InstallExtensionWindow, UninstallExtensionWindow
 from lmgr.toolbars         import LMWorkspaceToolbar, LMDataToolbar, LMToolsToolbar
 from lmgr.toolbars         import LMWorkspaceToolbar, LMDataToolbar, LMToolsToolbar
 from lmgr.toolbars         import LMMiscToolbar, LMVectorToolbar, LMNvizToolbar
 from lmgr.toolbars         import LMMiscToolbar, LMVectorToolbar, LMNvizToolbar

+ 2 - 2
gui/wxpython/wxpythonlib.dox

@@ -112,8 +112,6 @@ available in GRASS 5 and GRASS 6.
  - forms::GrassGUIApp
  - forms::GrassGUIApp
 - gui_core::ghelp
 - gui_core::ghelp
  - ghelp::SearchModuleWindow
  - ghelp::SearchModuleWindow
- - ghelp::MenuTreeWindow
- - ghelp::MenuTree
  - ghelp::AboutWindow
  - ghelp::AboutWindow
  - ghelp::HelpFrame
  - ghelp::HelpFrame
  - ghelp::HelpWindow
  - ghelp::HelpWindow
@@ -151,6 +149,8 @@ available in GRASS 5 and GRASS 6.
  - mapwindow::MapWindow
  - mapwindow::MapWindow
 - gui_core::menu
 - gui_core::menu
  - menu::Menu
  - menu::Menu
+ - menu::MenuTreeWindow
+ - menu::MenuTree
 - gui_core::preferences
 - gui_core::preferences
  - preferences::PreferencesBaseDialog
  - preferences::PreferencesBaseDialog
  - preferences::PreferencesDialog
  - preferences::PreferencesDialog