Sfoglia il codice sorgente

group dialog: select all checkbox, ok button is not default

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@58171 15284696-431f-4ddb-bdfa-cd5b030d7da7
Štěpán Turek 11 anni fa
parent
commit
7d1b2c3bbb
1 ha cambiato i file con 86 aggiunte e 14 eliminazioni
  1. 86 14
      gui/wxpython/gui_core/dialogs.py

+ 86 - 14
gui/wxpython/gui_core/dialogs.py

@@ -551,7 +551,7 @@ class GroupDialog(wx.Dialog):
         btnApply.SetToolTipString(_("Apply changes to selected group"))
         btnClose.SetToolTipString(_("Close dialog, changes are not applied"))
 
-        btnOk.SetDefault()
+        #btnOk.SetDefault()
         
         # sizers & do layout
         # btnSizer = wx.BoxSizer(wx.HORIZONTAL)
@@ -636,11 +636,18 @@ class GroupDialog(wx.Dialog):
         # layers in group
         self.gListPanel = wx.Panel(self)
 
-        gListSizer  = wx.GridBagSizer(vgap=2, hgap=2)
+        gListSizer  = wx.GridBagSizer(vgap=3, hgap=2)
+
+        self.g_sel_all = wx.CheckBox(parent=self.gListPanel, id=wx.ID_ANY,
+                                  label=_("Select all"))
+
+        gListSizer.Add(item=self.g_sel_all,
+                       flag=wx.ALIGN_CENTER_VERTICAL,
+                       pos=(0,1))
 
         gListSizer.Add(item = wx.StaticText(parent = self.gListPanel, label = _("Pattern:")),
                       flag = wx.ALIGN_CENTER_VERTICAL,
-                      pos = (0,0))
+                      pos = (1,0))
         
         self.gfilter = wx.TextCtrl(parent=self.gListPanel, id=wx.ID_ANY,
                                   value="",
@@ -650,11 +657,11 @@ class GroupDialog(wx.Dialog):
 
         gListSizer.Add(item=self.gfilter,
                        flag=wx.EXPAND,
-                       pos=(0,1))
+                       pos=(1,1))
 
         gListSizer.Add(item = wx.StaticText(parent = self.gListPanel, 
                                            label = _("List of maps:")),
-                      flag = wx.ALIGN_CENTER_VERTICAL | wx.BOTTOM, border = 5, pos=(1,0))
+                      flag = wx.ALIGN_CENTER_VERTICAL | wx.BOTTOM, border = 5, pos=(2,0))
 
         sizer = wx.BoxSizer(wx.HORIZONTAL)
 
@@ -671,9 +678,9 @@ class GroupDialog(wx.Dialog):
         buttonSizer.Add(item = self.removeLayer)
         sizer.Add(item = buttonSizer, flag = wx.LEFT, border = 5)
         
-        gListSizer.Add(item=sizer, flag=wx.EXPAND, pos=(1,1))
+        gListSizer.Add(item=sizer, flag=wx.EXPAND, pos=(2,1))
         gListSizer.AddGrowableCol(1)
-        gListSizer.AddGrowableRow(1)
+        gListSizer.AddGrowableRow(2)
 
         self.gListPanel.SetSizer(gListSizer)
         bodySizer.Add(item=self.gListPanel, proportion=1, flag=wx.EXPAND)
@@ -681,11 +688,19 @@ class GroupDialog(wx.Dialog):
         # layers in subgroup
         self.subgListPanel = wx.Panel(self)
 
-        subgListSizer  = wx.GridBagSizer(vgap=2, hgap=2)
+        subgListSizer  = wx.GridBagSizer(vgap=3, hgap=2)
+
+        # select toggle
+        self.subg_sel_all = wx.CheckBox(parent=self.subgListPanel, id=wx.ID_ANY,
+                                  label=_("Select all"))
+
+        subgListSizer.Add(item=self.subg_sel_all,
+                          flag=wx.ALIGN_CENTER_VERTICAL,
+                          pos=(0,1))
 
-        subgListSizer.Add(item = wx.StaticText(parent = self.subgListPanel, label = _("Pattern:")),
+        subgListSizer.Add(item = wx.StaticText(parent=self.subgListPanel, label=_("Pattern:")),
                       flag = wx.ALIGN_CENTER_VERTICAL,
-                      pos = (0,0))
+                      pos = (1,0))
         
         self.subgfilter = wx.TextCtrl(parent=self.subgListPanel, id=wx.ID_ANY,
                                   value="",
@@ -694,19 +709,19 @@ class GroupDialog(wx.Dialog):
         
         subgListSizer.Add(item=self.subgfilter,
                       flag=wx.EXPAND,
-                      pos=(0,1))
+                      pos=(1,1))
 
         subgListSizer.Add(item = wx.StaticText(parent = self.subgListPanel, 
                                            label = _("List of maps:")),
-                      flag = wx.ALIGN_CENTER_VERTICAL | wx.BOTTOM, border = 5, pos=(1,0))
+                      flag = wx.ALIGN_CENTER_VERTICAL | wx.BOTTOM, border = 5, pos=(2,0))
 
         self.subgListBox = wx.CheckListBox(parent = self.subgListPanel, id = wx.ID_ANY,
                                            size = (250, 100))
         self.subgListBox.SetToolTipString(_("Check maps from group to be included into subgroup."))
 
-        subgListSizer.Add(item=self.subgListBox, flag=wx.EXPAND, pos=(1,1))
+        subgListSizer.Add(item=self.subgListBox, flag=wx.EXPAND, pos=(2,1))
         subgListSizer.AddGrowableCol(1)
-        subgListSizer.AddGrowableRow(1)
+        subgListSizer.AddGrowableRow(2)
 
         self.subgListPanel.SetSizer(subgListSizer)
         bodySizer.Add(item=self.subgListPanel, proportion=1, flag=wx.EXPAND)
@@ -718,12 +733,15 @@ class GroupDialog(wx.Dialog):
         # bindings
         self.gfilter.Bind(wx.EVT_TEXT, self.OnGroupFilter)
         self.subgfilter.Bind(wx.EVT_TEXT, self.OnSubgroupFilter)
+        self.gLayerBox.Bind(wx.EVT_LISTBOX, self.OnGLayerCheck)
         self.subgListBox.Bind(wx.EVT_CHECKLISTBOX, self.OnSubgLayerCheck)
         self.groupSelect.GetTextCtrl().Bind(wx.EVT_TEXT, self.OnGroupSelected)
         self.addLayer.Bind(wx.EVT_BUTTON, self.OnAddLayer)
         self.removeLayer.Bind(wx.EVT_BUTTON, self.OnRemoveLayer)
         self.subg_chbox.Bind(wx.EVT_CHECKBOX, self.OnSubgChbox)
         self.subGroupSelect.Bind(wx.EVT_TEXT, lambda event : self.SubGroupSelected())
+        self.subg_sel_all.Bind(wx.EVT_CHECKBOX, self.OnSubgSelAll)
+        self.g_sel_all.Bind(wx.EVT_CHECKBOX, self.OnGSelAll)
 
         if self.defaultGroup:
             self.groupSelect.SetValue(self.defaultGroup)
@@ -738,6 +756,47 @@ class GroupDialog(wx.Dialog):
         
         return bodySizer
 
+    def OnGLayerCheck(self, event):
+        self._checkGSellAll()
+
+    def OnSubgSelAll(self, event):
+        check = event.Checked()
+        for item in range(self.subgListBox.GetCount()):
+            self.CheckSubgItem(item, check)
+            
+        event.Skip()
+
+    def OnGSelAll(self, event):
+        check = event.Checked()
+        if not check:
+            self.gLayerBox.DeselectAll()
+        else:
+            for item in range(self.subgListBox.GetCount()):
+                self.gLayerBox.Select(item)
+
+        event.Skip()
+
+    def _checkGSellAll(self):
+        check = False
+
+        nsel = len(self.gLayerBox.GetSelections())
+        if self.gLayerBox.GetCount() == nsel and \
+           self.gLayerBox.GetCount() != 0:
+            check = True
+
+        self.g_sel_all.SetValue(check)
+
+    def _checkSubGSellAll(self):
+        not_all_checked = False
+        if self.subgListBox.GetCount() == 0:
+            not_all_checked = True
+        else:
+            for item in range(self.subgListBox.GetCount()):
+                if not self.subgListBox.IsChecked(item):
+                    not_all_checked = True
+        
+        self.subg_sel_all.SetValue(not not_all_checked)
+
     def OnSubgroupFilter(self, event):
         text = event.GetString()
         self.gfilter.ChangeValue(text)
@@ -763,6 +822,13 @@ class GroupDialog(wx.Dialog):
         m = self.subgListBox.GetString(idx)
         self.subgmaps[m] = self.subgListBox.IsChecked(idx)
         self.dataChanged = True
+        self._checkSubGSellAll()
+
+    def CheckSubgItem(self, idx, val):
+        m = self.subgListBox.GetString(idx)
+        self.subgListBox.Check(idx, val)
+        self.subgmaps[m] = val
+        self.dataChanged = val
 
     def DisableSubgroupEdit(self):
         """!Disable editation of subgroups in the dialog 
@@ -868,9 +934,12 @@ class GroupDialog(wx.Dialog):
         self.SubGroupSelected()
         self.ClearNotification()
 
+        self._checkGSellAll()
+
     def FilterGroup(self):
         maps = self._filter(self.gmaps)
         self.ShowGroupLayers(maps)
+        self._checkGSellAll()
 
     def FilterSubgroup(self):
         maps = self._filter(self.gmaps)
@@ -880,6 +949,8 @@ class GroupDialog(wx.Dialog):
             if m in self.subgmaps.iterkeys() and self.subgmaps[m]:
                 self.subgListBox.Check(i)
 
+        self._checkSubGSellAll()
+
     def SubGroupSelected(self):
         """!Subgroup was selected, check if changes were apllied"""
         self._checkChange()
@@ -910,6 +981,7 @@ class GroupDialog(wx.Dialog):
             else:
                 self.subgListBox.Check(i, False)
 
+        self._checkSubGSellAll()
         self.currentSubgroup = subgroup
         self.ClearNotification()