Browse Source

wxGUI/extension: show manual page (via contextual menu)

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@58642 15284696-431f-4ddb-bdfa-cd5b030d7da7
Martin Landa 11 years ago
parent
commit
0ab2194e39
2 changed files with 33 additions and 4 deletions
  1. 5 1
      gui/wxpython/lmgr/giface.py
  2. 28 3
      gui/wxpython/modules/extensions.py

+ 5 - 1
gui/wxpython/lmgr/giface.py

@@ -15,6 +15,8 @@ This program is free software under the GNU General Public License
 @author Vaclav Petras <wenzeslaus gmail.com>
 """
 
+import os
+
 from grass.pydispatch.signal import Signal
 from core.giface import Notification
 
@@ -144,8 +146,10 @@ class LayerManagerGrassInterface(object):
     def RunCmd(self, *args, **kwargs):
         self.lmgr._gconsole.RunCmd(*args, **kwargs)
 
-    def Help(self, entry):
+    def Help(self, entry, online=False):
         cmdlist = ['g.manual', 'entry=%s' % entry]
+        if online:
+            cmdlist.append('-o')
         self.RunCmd(cmdlist, compReg = False, notification=Notification.NO_NOTIFICATION)
 
     def WriteLog(self, text, wrap = None,

+ 28 - 3
gui/wxpython/modules/extensions.py

@@ -9,7 +9,7 @@ Classes:
  - extensions::UninstallExtensionWindow
  - extensions::CheckListExtension
 
-(C) 2008-2013 by the GRASS Development Team
+(C) 2008-2014 by the GRASS Development Team
 
 This program is free software under the GNU General Public License
 (>=v2). Read the file COPYING that comes with GRASS for details.
@@ -40,7 +40,7 @@ class InstallExtensionWindow(wx.Frame):
         self.parent = parent
         self._giface = giface
         self.options = dict() # list of options
-        
+
         wx.Frame.__init__(self, parent = parent, id = id, title = title, **kwargs)
         self.SetIcon(wx.Icon(os.path.join(globalvar.ETCICONDIR, 'grass.ico'), wx.BITMAP_TYPE_ICO))
         
@@ -109,6 +109,7 @@ class InstallExtensionWindow(wx.Frame):
         self.btnHelp.Bind(wx.EVT_BUTTON, self.OnHelp)
         self.tree.selectionChanged.connect(self.OnItemSelected)
         self.tree.itemActivated.connect(self.OnItemActivated)
+        self.tree.contextMenu.connect(self.OnContextMenu)
 
         wx.CallAfter(self._fetch)
         
@@ -197,6 +198,24 @@ class InstallExtensionWindow(wx.Frame):
         self.SetStatusText("", 0)
         wx.EndBusyCursor()
 
+    def OnContextMenu(self, node):
+        if not hasattr (self, "popupID"):
+            self.popupID = dict()
+            for key in ('install', 'help'):
+                self.popupID[key] = wx.NewId()
+        
+        data = node.data
+        if data and 'command' in data:
+            self.popupMenu = wx.Menu()
+            self.popupMenu.Append(self.popupID['install'], text = _("Install"))
+            self.Bind(wx.EVT_MENU, self.OnInstall, id = self.popupID['install'])
+            self.popupMenu.AppendSeparator()
+            self.popupMenu.Append(self.popupID['help'], text = _("Show manual page"))
+            self.Bind(wx.EVT_MENU, self.OnItemHelp, id = self.popupID['help'])
+            
+            self.PopupMenu(self.popupMenu)
+            self.popupMenu.Destroy()
+
     def OnItemActivated(self, node):
         data = node.data
         if data and 'command' in data:
@@ -217,6 +236,13 @@ class InstallExtensionWindow(wx.Frame):
             globalvar.UpdateGRASSAddOnCommands()
             toolboxesOutdated()
 
+    def OnItemHelp(self, event):
+        item = self.tree.GetSelected()
+        if not item or 'command' not in item[0].data:
+            return
+        
+        self._giface.Help(entry=item[0].data['command'], online=True)
+
     def OnHelp(self, event):
         self._giface.Help(entry='g.extension')
 
@@ -230,7 +256,6 @@ class InstallExtensionWindow(wx.Frame):
             self.SetStatusText(data.get('description', ''), 0)
             self.btnInstall.Enable(True)
 
-
 class ExtensionTreeModelBuilder:
     """!Tree model of available extensions."""
     def __init__(self):