123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- """
- @package datacatalog.toolbars
- @brief Data Catalog toolbars
- Classes:
- - toolbars::DataCatalogToolbar(BaseToolbar)
- (C) 2016 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.
- @author Martin Landa <landa.martin gmail.com>
- """
- import wx
- from gui_core.toolbars import BaseToolbar
- from gui_core.wrap import SearchCtrl
- from icons.icon import MetaIcon
- icons = {
- "reloadTree": MetaIcon(img="redraw", label=_("Reload GRASS locations")),
- "reloadMapset": MetaIcon(img="reload", label=_("Reload current GRASS mapset only")),
- "unlocked": MetaIcon(
- img="edit", label=_("Restrict edits to the current mapset only")
- ),
- "locked": MetaIcon(
- img="edit", label=_("Allow edits outside of the current mapset")
- ),
- "addGrassDB": MetaIcon(
- img="grassdb-add", label=_("Add existing or create new database")
- ),
- "addMapset": MetaIcon(
- img="mapset-add", label=_("Create new mapset in current location")
- ),
- "addLocation": MetaIcon(
- img="location-add", label=_("Create new location in current GRASS database")
- ),
- "downloadLocation": MetaIcon(
- img="location-download",
- 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")
- ),
- }
- class DataCatalogToolbar(BaseToolbar):
- """Main data catalog toolbar"""
- def __init__(self, parent):
- """Main toolbar constructor"""
- BaseToolbar.__init__(self, parent)
- self.InitToolbar(self._toolbarData())
- self.filter_element = None
- self.filter = SearchCtrl(parent=self)
- self.filter.SetDescriptiveText(_("Search"))
- self.filter.ShowCancelButton(True)
- self.filter.SetSize((150, self.filter.GetBestSize()[1]))
- self.filter.Bind(
- wx.EVT_TEXT,
- lambda event: self.parent.Filter(
- self.filter.GetValue(), self.filter_element
- ),
- )
- self.filter.Bind(
- wx.EVT_SEARCHCTRL_CANCEL_BTN, lambda evt: self.parent.Filter("")
- )
- self.AddControl(self.filter)
- filterMenu = wx.Menu()
- item = filterMenu.AppendRadioItem(-1, "All")
- self.Bind(wx.EVT_MENU, self.OnFilterMenu, item)
- item = filterMenu.AppendRadioItem(-1, "Raster maps")
- self.Bind(wx.EVT_MENU, self.OnFilterMenu, item)
- item = filterMenu.AppendRadioItem(-1, "Vector maps")
- self.Bind(wx.EVT_MENU, self.OnFilterMenu, item)
- item = filterMenu.AppendRadioItem(-1, "3D raster maps")
- self.Bind(wx.EVT_MENU, self.OnFilterMenu, item)
- self.filter.SetMenu(filterMenu)
- help = _(
- "Type to search database by map type or name. "
- "Use Python regular expressions to refine your search."
- )
- self.SetToolShortHelp(self.filter.GetId(), help)
- # realize the toolbar
- self.Realize()
- def _toolbarData(self):
- """Returns toolbar data (name, icon, handler)"""
- # BaseIcons are a set of often used icons. It is possible
- # to reuse icons in ./trunk/gui/icons/grass or add new ones there.
- return self._getToolbarData(
- (
- ("reloadTree", icons["reloadTree"], self.parent.OnReloadTree),
- (
- "reloadMapset",
- icons["reloadMapset"],
- self.parent.OnReloadCurrentMapset,
- ),
- ("lock", icons["locked"], self.OnSetRestriction, wx.ITEM_CHECK),
- ("addGrassDB", icons["addGrassDB"], self.parent.OnAddGrassDB),
- ("addLocation", icons["addLocation"], self.parent.OnCreateLocation),
- (
- "downloadLocation",
- icons["downloadLocation"],
- self.parent.OnDownloadLocation,
- ),
- ("addMapset", icons["addMapset"], 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()
- self.filter_element = None
- if filterMenu[1].IsChecked():
- self.filter_element = "raster"
- elif filterMenu[2].IsChecked():
- self.filter_element = "vector"
- elif filterMenu[3].IsChecked():
- self.filter_element = "raster_3d"
- # trigger filter on change
- if self.filter.GetValue():
- self.parent.Filter(self.filter.GetValue(), self.filter_element)
- def OnSetRestriction(self, event):
- if self.GetToolState(self.lock):
- self.SetToolNormalBitmap(self.lock, icons["unlocked"].GetBitmap())
- self.SetToolShortHelp(self.lock, icons["unlocked"].GetLabel())
- self.parent.SetRestriction(restrict=False)
- else:
- self.SetToolNormalBitmap(self.lock, icons["locked"].GetBitmap())
- self.SetToolShortHelp(self.lock, icons["locked"].GetLabel())
- self.parent.SetRestriction(restrict=True)
|