浏览代码

wxGUI: New management icons for vector and raster data import (#1204)

* Other import functions moved to Data Catalog Toolbar.
* The text in the Import Data Info Bar changed in order to refer to toolbar above.
Linda Kladivova 4 年之前
父节点
当前提交
fb1e17c253

二进制
gui/icons/grass/raster-import.png


文件差异内容过多而无法显示
+ 1 - 0
gui/icons/grass/raster-import.svg


二进制
gui/icons/grass/vector-import.png


文件差异内容过多而无法显示
+ 1 - 0
gui/icons/grass/vector-import.svg


+ 105 - 12
gui/wxpython/datacatalog/catalog.py

@@ -13,6 +13,7 @@ License (>=v2). Read the file COPYING that comes with GRASS
 for details.
 
 @author Tereza Fiedlerova
+@author Linda Kladivova l.kladivova@seznam.cz
 """
 
 import wx
@@ -23,6 +24,8 @@ from datacatalog.tree import DataCatalogTree
 from datacatalog.toolbars import DataCatalogToolbar
 from gui_core.infobar import InfoBar
 from datacatalog.infomanager import DataCatalogInfoManager
+from gui_core.wrap import Menu
+from gui_core.forms import GUI
 
 from grass.pydispatch.signal import Signal
 
@@ -110,29 +113,64 @@ class DataCatalog(wx.Panel):
         db_node, loc_node, mapset_node = self.tree.GetCurrentDbLocationMapsetNode()
         self.tree.CreateMapset(db_node, loc_node)
 
-    def OnImportOgrLayers(self, event, cmd=None):
+    def OnCreateLocation(self, event):
+        """Create new location"""
+        db_node, loc_node, mapset_node = self.tree.GetCurrentDbLocationMapsetNode()
+        self.tree.CreateLocation(db_node)
+
+    def OnDownloadLocation(self, event):
+        """Download location to current grass database"""
+        db_node, loc_node, mapset_node = self.tree.GetCurrentDbLocationMapsetNode()
+        self.tree.DownloadLocation(db_node)
+
+    def OnImportGdalLayers(self, event):
+        """Convert multiple GDAL layers to GRASS raster map layers"""
+        from modules.import_export import GdalImportDialog
+        dlg = GdalImportDialog(parent=self, giface=self.giface)
+        dlg.CentreOnScreen()
+        dlg.Show()
+
+    def OnImportOgrLayers(self, event):
         """Convert multiple OGR layers to GRASS vector map layers"""
         from modules.import_export import OgrImportDialog
         dlg = OgrImportDialog(parent=self, giface=self.giface)
         dlg.CentreOnScreen()
         dlg.Show()
 
-    def OnImportGdalLayers(self, event, cmd=None):
-        """Convert multiple GDAL layers to GRASS raster map layers"""
+    def OnLinkGdalLayers(self, event):
+        """Link multiple GDAL layers to GRASS raster map layers"""
         from modules.import_export import GdalImportDialog
-        dlg = GdalImportDialog(parent=self, giface=self.giface)
+        dlg = GdalImportDialog(parent=self, giface=self.giface, link=True)
         dlg.CentreOnScreen()
         dlg.Show()
 
-    def OnCreateLocation(self, event):
-        """Create new location"""
-        db_node, loc_node, mapset_node = self.tree.GetCurrentDbLocationMapsetNode()
-        self.tree.CreateLocation(db_node)
+    def OnLinkOgrLayers(self, event):
+        """Links multiple OGR layers to GRASS vector map layers"""
+        from modules.import_export import OgrImportDialog
+        dlg = OgrImportDialog(parent=self, giface=self.giface, link=True)
+        dlg.CentreOnScreen()
+        dlg.Show()
 
-    def OnDownloadLocation(self, event):
-        """Download location to current grass database"""
-        db_node, loc_node, mapset_node = self.tree.GetCurrentDbLocationMapsetNode()
-        self.tree.DownloadLocation(db_node)
+    def OnRasterOutputFormat(self, event):
+        """Set raster output format handler"""
+        from modules.import_export import GdalOutputDialog
+        dlg = GdalOutputDialog(parent=self, ogr=False)
+        dlg.CentreOnScreen()
+        dlg.Show()
+
+    def OnVectorOutputFormat(self, event):
+        """Set vector output format handler"""
+        from modules.import_export import GdalOutputDialog
+        dlg = GdalOutputDialog(parent=self, ogr=True)
+        dlg.CentreOnScreen()
+        dlg.Show()
+
+    def GuiParseCommand(self, cmd):
+        """Generic handler"""
+        GUI(parent=self, giface=self.giface).ParseCommand(cmd=[cmd])
+
+    def OnMoreOptions(self, event):
+        self.giface.Help(entry="topic_import")
 
     def SetRestriction(self, restrict):
         """Allow editing other mapsets or restrict editing to current mapset"""
@@ -140,3 +178,58 @@ class DataCatalog(wx.Panel):
 
     def Filter(self, text, element=None):
         self.tree.Filter(text=text, element=element)
+
+    def OnImportMenu(self, event):
+        """Create popup menu for other import options"""
+        # create submenu
+        subMenu = Menu()
+
+        subitem = wx.MenuItem(subMenu, wx.ID_ANY, _("Link external raster data  [r.external]"))
+        subMenu.AppendItem(subitem)
+        self.Bind(wx.EVT_MENU, self.OnLinkGdalLayers, subitem)
+
+        subitem = wx.MenuItem(subMenu, wx.ID_ANY, _("Link external vector data  [v.external]"))
+        subMenu.AppendItem(subitem)
+        self.Bind(wx.EVT_MENU, self.OnLinkOgrLayers, subitem)
+
+        subMenu.AppendSeparator()
+
+        subitem = wx.MenuItem(subMenu, wx.ID_ANY, _("Set raster output format  [r.external.out]"))
+        subMenu.AppendItem(subitem)
+        self.Bind(wx.EVT_MENU, self.OnRasterOutputFormat, subitem)
+
+        subitem = wx.MenuItem(subMenu, wx.ID_ANY, _("Set vector output format  [v.external.out]"))
+        subMenu.AppendItem(subitem)
+        self.Bind(wx.EVT_MENU, self.OnVectorOutputFormat, subitem)
+
+        # create menu
+        menu = Menu()
+
+        item = wx.MenuItem(menu, wx.ID_ANY, _("Unpack GRASS raster map  [r.unpack]"))
+        menu.AppendItem(item)
+        self.Bind(wx.EVT_MENU, lambda evt: self.GuiParseCommand('r.unpack'), item)
+
+        item = wx.MenuItem(menu, wx.ID_ANY, _("Unpack GRASS vector map  [v.unpack]"))
+        menu.AppendItem(item)
+        self.Bind(wx.EVT_MENU, lambda evt: self.GuiParseCommand('v.unpack'), item)
+
+        menu.AppendSeparator()
+
+        item = wx.MenuItem(menu, wx.ID_ANY, _("Create raster map from x,y,z data  [r.in.xyz]"))
+        menu.AppendItem(item)
+        self.Bind(wx.EVT_MENU, lambda evt: self.GuiParseCommand('r.in.xyz'), item)
+
+        item = wx.MenuItem(menu, wx.ID_ANY, _("Create vector map from x,y,z data  [v.in.ascii]"))
+        menu.AppendItem(item)
+        self.Bind(wx.EVT_MENU, lambda evt: self.GuiParseCommand('v.in.ascii'), item)
+
+        menu.AppendSeparator()
+        menu.AppendMenu(wx.ID_ANY, _("Link external data"), subMenu)
+
+        menu.AppendSeparator()
+        item = wx.MenuItem(menu, wx.ID_ANY, _("More options..."))
+        menu.AppendItem(item)
+        self.Bind(wx.EVT_MENU, self.OnMoreOptions, item)
+
+        self.PopupMenu(menu)
+        menu.Destroy()

+ 1 - 1
gui/wxpython/datacatalog/infomanager.py

@@ -53,7 +53,7 @@ class DataCatalogInfoManager:
             "storing your base maps to make them readily available in other "
             "Mapsets. You can create new Mapsets for different tasks by right "
             "clicking on the Location name.\n\n"
-            "To import data, go to the File menu or use the buttons below."
+            "To import data, go to the toolbar above or use the buttons below."
         ).format(loc=gisenv()['LOCATION_NAME'])
         self.infoBar.ShowMessage(message, wx.ICON_INFORMATION, buttons)
 

+ 19 - 4
gui/wxpython/datacatalog/toolbars.py

@@ -16,7 +16,7 @@ This program is free software under the GNU General Public License
 
 import wx
 from gui_core.toolbars import BaseToolbar
-from gui_core.wrap import StaticText, SearchCtrl
+from gui_core.wrap import SearchCtrl
 from icons.icon import MetaIcon
 
 icons = {
@@ -43,7 +43,16 @@ icons = {
         label=_("Create new location in current GRASS database")),
     'downloadLocation': MetaIcon(
         img='location-download',
-        label=_("Download sample location to current GRASS database"))
+        label=_("Download sample location to current GRASS database")),
+    'importRaster': MetaIcon(
+        img='raster-import',
+        label=_("Import raster data  [r.import]")),
+    'importVector': MetaIcon(
+        img='vector-import',
+        label=_("Import vector data  [v.import]")),
+    'importLayer': MetaIcon(
+        img='layer-import',
+        label=_("Select another import option"))
 }
 
 
@@ -102,8 +111,14 @@ class DataCatalogToolbar(BaseToolbar):
                                      ("downloadLocation", icons['downloadLocation'],
                                       self.parent.OnDownloadLocation),
                                      ("addMapset", icons['addMapset'],
-                                      self.parent.OnCreateMapset)
-                                     ))
+                                      self.parent.OnCreateMapset),
+                                     ("importRaster", icons['importRaster'],
+                                      self.parent.OnImportGdalLayers),
+                                     ("importVector", icons['importVector'],
+                                      self.parent.OnImportOgrLayers),
+                                     ("importLayer", icons['importLayer'],
+                                      self.parent.OnImportMenu)))
+
     def OnFilterMenu(self, event):
         """Decide the element to filter by"""
         filterMenu = self.filter.GetMenu().GetMenuItems()

+ 0 - 22
gui/wxpython/lmgr/frame.py

@@ -1302,20 +1302,6 @@ class GMFrame(wx.Frame):
         self.PopupMenu(menu)
         menu.Destroy()
 
-    def OnImportMenu(self, event):
-        """Import maps menu (import, link)
-        """
-        self._popupMenu((('rastImport', self.OnImportGdalLayers),
-                         ('vectImport', self.OnImportOgrLayers),
-                         (None, None),
-                         ('rastUnpack', self.OnUnpackRaster),
-                         ('vectUnpack', self.OnUnpackVector),
-                         (None, None),
-                         ('rastLink', self.OnLinkGdalLayers),
-                         ('vectLink', self.OnLinkOgrLayers),
-                         ('rastOut', self.OnRasterOutputFormat),
-                         ('vectOut', self.OnVectorOutputFormat)))
-
     def OnWorkspaceNew(self, event=None):
         """Create new workspace file
 
@@ -1972,14 +1958,6 @@ class GMFrame(wx.Frame):
         dlg.CentreOnScreen()
         dlg.Show()
 
-    def OnUnpackRaster(self, event):
-        """Unpack raster map handler"""
-        self.OnMenuCmd(cmd=['r.unpack'])
-
-    def OnUnpackVector(self, event):
-        """Unpack vector map handler"""
-        self.OnMenuCmd(cmd=['v.unpack'])
-
     def OnImportDxfFile(self, event, cmd=None):
         """Convert multiple DXF layers to GRASS vector map layers"""
         from modules.import_export import DxfImportDialog

+ 0 - 16
gui/wxpython/lmgr/layertree.py

@@ -51,22 +51,6 @@ from lmgr.giface import LayerManagerGrassInterfaceForMapDisplay
 TREE_ITEM_HEIGHT = 25
 
 LMIcons = {
-    'rastImport': MetaIcon(img='layer-import',
-                           label=_('Import raster data')),
-    'rastLink': MetaIcon(img='layer-import',
-                         label=_('Link external raster data')),
-    'rastUnpack': MetaIcon(img='layer-import',
-                           label=_('Unpack GRASS raster map')),
-    'rastOut': MetaIcon(img='layer-export',
-                        label=_('Set raster output format')),
-    'vectImport': MetaIcon(img='layer-import',
-                           label=_('Import vector data')),
-    'vectLink': MetaIcon(img='layer-import',
-                         label=_('Link external vector data')),
-    'vectUnpack': MetaIcon(img='layer-import',
-                           label=_('Unpack GRASS vector map')),
-    'vectOut': MetaIcon(img='layer-export',
-                        label=_('Set vector output format')),
     'wmsImport': MetaIcon(img='layer-wms-add',
                           label=_('Import data from WMS server')),
     'layerCmd': MetaIcon(img='layer-command-add',

+ 1 - 6
gui/wxpython/lmgr/toolbars.py

@@ -149,8 +149,6 @@ class LMToolsToolbar(BaseToolbar):
         """Toolbar data
         """
         icons = {
-            'import': MetaIcon(img='layer-import',
-                               label=_('Import/link raster or vector data')),
             'mapcalc': MetaIcon(img='raster-calculator',
                                 label=_('Raster Map Calculator')),
             'modeler': MetaIcon(img='modeler-main',
@@ -165,10 +163,7 @@ class LMToolsToolbar(BaseToolbar):
                                label=_('Open a simple Python code editor')),
         }
 
-        return self._getToolbarData((('importMap', icons["import"],
-                                      self.parent.OnImportMenu),
-                                     (None, ),
-                                     ('mapCalc', icons["mapcalc"],
+        return self._getToolbarData((('mapCalc', icons["mapcalc"],
                                       self.parent.OnMapCalculator),
                                      ('georect', icons["georectify"],
                                       self.parent.OnGCPManager),