浏览代码

wxGUI: move datacatalog search below toolbar, make it stretch (#2207)

Anna Petrasova 3 年之前
父节点
当前提交
bba41c0a9a
共有 2 个文件被更改,包括 47 次插入39 次删除
  1. 10 1
      gui/wxpython/datacatalog/catalog.py
  2. 37 38
      gui/wxpython/datacatalog/toolbars.py

+ 10 - 1
gui/wxpython/datacatalog/catalog.py

@@ -21,7 +21,7 @@ import os
 
 
 from core.debug import Debug
 from core.debug import Debug
 from datacatalog.tree import DataCatalogTree
 from datacatalog.tree import DataCatalogTree
-from datacatalog.toolbars import DataCatalogToolbar
+from datacatalog.toolbars import DataCatalogToolbar, DataCatalogSearch
 from gui_core.infobar import InfoBar
 from gui_core.infobar import InfoBar
 from datacatalog.infomanager import DataCatalogInfoManager
 from datacatalog.infomanager import DataCatalogInfoManager
 from gui_core.wrap import Menu
 from gui_core.wrap import Menu
@@ -66,6 +66,9 @@ class DataCatalog(wx.Panel):
         # toolbar
         # toolbar
         self.toolbar = DataCatalogToolbar(parent=self)
         self.toolbar = DataCatalogToolbar(parent=self)
 
 
+        # search
+        self.search = DataCatalogSearch(parent=self, filter_function=self.Filter)
+
         # tree with layers
         # tree with layers
         self.tree = DataCatalogTree(self, giface=giface)
         self.tree = DataCatalogTree(self, giface=giface)
         self.tree.showNotification.connect(self.showNotification)
         self.tree.showNotification.connect(self.showNotification)
@@ -106,6 +109,12 @@ class DataCatalog(wx.Panel):
         """Do layout"""
         """Do layout"""
         sizer = wx.BoxSizer(wx.VERTICAL)
         sizer = wx.BoxSizer(wx.VERTICAL)
         sizer.Add(self.toolbar, proportion=0, flag=wx.EXPAND)
         sizer.Add(self.toolbar, proportion=0, flag=wx.EXPAND)
+        sizer.Add(
+            self.search,
+            proportion=0,
+            flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND,
+            border=5,
+        )
         sizer.Add(self.infoBar, proportion=0, flag=wx.EXPAND)
         sizer.Add(self.infoBar, proportion=0, flag=wx.EXPAND)
         sizer.Add(self.tree.GetControl(), proportion=1, flag=wx.EXPAND)
         sizer.Add(self.tree.GetControl(), proportion=1, flag=wx.EXPAND)
 
 

+ 37 - 38
gui/wxpython/datacatalog/toolbars.py

@@ -53,30 +53,18 @@ icons = {
 }
 }
 
 
 
 
-class DataCatalogToolbar(BaseToolbar):
-    """Main data catalog toolbar"""
-
-    def __init__(self, parent):
-        """Main toolbar constructor"""
-
-        BaseToolbar.__init__(self, parent)
-
-        self.InitToolbar(self._toolbarData())
+class DataCatalogSearch(SearchCtrl):
+    def __init__(self, parent, filter_function):
+        super().__init__(parent)
+        self.filter_function = filter_function
         self.filter_element = None
         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(
+        self.SetDescriptiveText(_("Search"))
+        self.ShowCancelButton(True)
+        self.Bind(
             wx.EVT_TEXT,
             wx.EVT_TEXT,
-            lambda event: self.parent.Filter(
-                self.filter.GetValue(), self.filter_element
-            ),
+            lambda event: self.filter_function(self.GetValue(), self.filter_element),
         )
         )
-        self.filter.Bind(
-            wx.EVT_SEARCHCTRL_CANCEL_BTN, lambda evt: self.parent.Filter("")
-        )
-        self.AddControl(self.filter)
+        self.Bind(wx.EVT_SEARCHCTRL_CANCEL_BTN, lambda evt: self.filter_function(""))
         filterMenu = wx.Menu()
         filterMenu = wx.Menu()
         item = filterMenu.AppendRadioItem(-1, "All")
         item = filterMenu.AppendRadioItem(-1, "All")
         self.Bind(wx.EVT_MENU, self.OnFilterMenu, item)
         self.Bind(wx.EVT_MENU, self.OnFilterMenu, item)
@@ -86,12 +74,37 @@ class DataCatalogToolbar(BaseToolbar):
         self.Bind(wx.EVT_MENU, self.OnFilterMenu, item)
         self.Bind(wx.EVT_MENU, self.OnFilterMenu, item)
         item = filterMenu.AppendRadioItem(-1, "3D raster maps")
         item = filterMenu.AppendRadioItem(-1, "3D raster maps")
         self.Bind(wx.EVT_MENU, self.OnFilterMenu, item)
         self.Bind(wx.EVT_MENU, self.OnFilterMenu, item)
-        self.filter.SetMenu(filterMenu)
-        help = _(
+        self.SetMenu(filterMenu)
+        helpTip = _(
             "Type to search database by map type or name. "
             "Type to search database by map type or name. "
             "Use Python regular expressions to refine your search."
             "Use Python regular expressions to refine your search."
         )
         )
-        self.SetToolShortHelp(self.filter.GetId(), help)
+        self.SetToolTip(helpTip)
+
+    def OnFilterMenu(self, event):
+        """Decide the element to filter by"""
+        filterMenu = self.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.GetValue():
+            self.filter_function(self.GetValue(), self.filter_element)
+
+
+class DataCatalogToolbar(BaseToolbar):
+    """Main data catalog toolbar"""
+
+    def __init__(self, parent):
+        """Main toolbar constructor"""
+
+        BaseToolbar.__init__(self, parent)
+
+        self.InitToolbar(self._toolbarData())
         # realize the toolbar
         # realize the toolbar
         self.Realize()
         self.Realize()
 
 
@@ -122,20 +135,6 @@ class DataCatalogToolbar(BaseToolbar):
             )
             )
         )
         )
 
 
-    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):
     def OnSetRestriction(self, event):
         if self.GetToolState(self.lock):
         if self.GetToolState(self.lock):
             self.SetToolNormalBitmap(self.lock, icons["unlocked"].GetBitmap())
             self.SetToolNormalBitmap(self.lock, icons["unlocked"].GetBitmap())