[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[master 1/2] (Un)select all button in Partition Editor.



Original patch by Tomas Mlcoch.

Related: rhbz#641910
---
 pyanaconda/iw/checklist.py                |   40 ++++++++++++++++++++++++----
 pyanaconda/iw/lvm_dialog_gui.py           |    3 +-
 pyanaconda/iw/partition_dialog_gui.py     |    2 +-
 pyanaconda/iw/partition_ui_helpers_gui.py |    6 +++-
 pyanaconda/iw/raid_dialog_gui.py          |    3 +-
 5 files changed, 43 insertions(+), 11 deletions(-)

diff --git a/pyanaconda/iw/checklist.py b/pyanaconda/iw/checklist.py
index 50026a1..c94ce21 100644
--- a/pyanaconda/iw/checklist.py
+++ b/pyanaconda/iw/checklist.py
@@ -31,15 +31,16 @@ class CheckList (gtk.TreeView):
     # override this to make your own columns if necessary
     def create_columns(self, columns):
         # add the string columns to the tree view widget
-        for i in range(1, columns + 1):
+        titles = [''] + columns
+        for i in range(1, len(titles)):
             renderer = gtk.CellRendererText()
-            column = gtk.TreeViewColumn('Text', renderer, text=i,
+            column = gtk.TreeViewColumn(titles[i], renderer, text=i,
                                         **self.sensitivity_args)
             column.set_clickable(False)
             self.append_column(column)
 
     # XXX need to handle the multicolumn case better still....
-    def __init__ (self, columns = 1, custom_store=None, sensitivity=False):
+    def __init__ (self, columns, custom_store=None, sensitivity=False):
 	if custom_store is None:
 	    self.store = gtk.TreeStore(gobject.TYPE_BOOLEAN,
 				       gobject.TYPE_STRING,
@@ -48,7 +49,7 @@ class CheckList (gtk.TreeView):
 	    self.store = custom_store
 	    
         gtk.TreeView.__init__ (self, self.store)
-        
+
         # XXX we only handle two text columns right now
         if custom_store is None and columns > 2:
             raise RuntimeError, "CheckList supports a maximum of 2 columns"
@@ -76,6 +77,11 @@ class CheckList (gtk.TreeView):
 #        column.set_fixed_width(40)
         column.set_clickable(True)
         self.checkboxrenderer.connect ("toggled", self.toggled_item)        
+        column.connect("clicked", self.select_deselect)
+        column.set_alignment(0.75)
+        self.allButton = gtk.ToggleButton()
+        column.set_widget(self.allButton)
+        self.allButton.show_all()
         self.append_column(column)
 
 	self.create_columns(columns)
@@ -88,6 +94,11 @@ class CheckList (gtk.TreeView):
         # keep track of the number of rows we have so we can
         # iterate over them all
         self.num_rows = 0
+        # remember what allButton should do. If this is True, it should select
+        # all items, if it's False it should unselect all items. None means
+        # uninitialized (we can't tell what the first action should be until
+        # there are some elemnts in the store
+        self.select_all = None
 
         self.tiptext = {}
         self.props.has_tooltip = True
@@ -117,7 +128,7 @@ class CheckList (gtk.TreeView):
 
         # add the text for the number of columns we have
         i = 1
-        for text in textList[:self.columns]:
+        for text in textList[:len(self.columns)]:
             self.store.set_value(iter, i, textList[i - 1])
             i = i + 1
 
@@ -203,9 +214,26 @@ class CheckList (gtk.TreeView):
         if col:
             col.set_sort_column_id(id)
 
+    def select_deselect (self, widget, data=None):
+        """Select/Deselect all checkboxes"""
+
+        if self.select_all is None:
+            # this is the first time someone clicked 'select all'
+            self.select_all = False
+            for i in xrange(self.num_rows):
+                if not self.get_active(i):
+                    # if there's at least one untoggled item, we'll select
+                    # all of them with this click
+                    self.select_all = True
+                    break
+
+        for i in xrange(self.num_rows):
+            self.set_active(i, self.select_all)
+        self.select_all = not self.select_all
+
 def main():
     win = gtk.Window()
-    cl = CheckList(1)
+    cl = CheckList(['Column'])
     for i in range(1, 10):
         cl.append_row("%s" %(i,), False, "foo: %d" %(i,))
 
diff --git a/pyanaconda/iw/lvm_dialog_gui.py b/pyanaconda/iw/lvm_dialog_gui.py
index 5eb3088..daa8488 100644
--- a/pyanaconda/iw/lvm_dialog_gui.py
+++ b/pyanaconda/iw/lvm_dialog_gui.py
@@ -317,7 +317,8 @@ class VolumeGroupEditor:
 	store = gtk.TreeStore(gobject.TYPE_BOOLEAN,
 			      gobject.TYPE_STRING,
 			      gobject.TYPE_STRING)
-	partlist = WideCheckList(2, store, self.clickCB)
+	columns = ['Drive', 'Size']
+	partlist = WideCheckList(columns, store, self.clickCB)
 
 	sw = gtk.ScrolledWindow()
 	sw.add(partlist)
diff --git a/pyanaconda/iw/partition_dialog_gui.py b/pyanaconda/iw/partition_dialog_gui.py
index 3e4af2b..723fbee 100644
--- a/pyanaconda/iw/partition_dialog_gui.py
+++ b/pyanaconda/iw/partition_dialog_gui.py
@@ -466,7 +466,7 @@ class PartitionEditor:
             sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
             sw.set_shadow_type(gtk.SHADOW_IN)
             maintable.attach(sw, 1, 2, row, row + 1)
-            self.driveview.set_size_request(375, 80)
+            self.driveview.set_size_request(375, 120)
 
             row = row + 1
 
diff --git a/pyanaconda/iw/partition_ui_helpers_gui.py b/pyanaconda/iw/partition_ui_helpers_gui.py
index 08ba44b..4b88347 100644
--- a/pyanaconda/iw/partition_ui_helpers_gui.py
+++ b/pyanaconda/iw/partition_ui_helpers_gui.py
@@ -55,7 +55,7 @@ class WideCheckList(checklist.CheckList):
                                      sensitivity=sensitivity)
 
         # make checkbox column wider
-        column = self.get_column(columns)
+        column = self.get_column(len(columns))
         self.set_expander_column(column)
         column = self.get_column(0)
         column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
@@ -171,7 +171,9 @@ def createAllowedDrivesList(disks, reqdrives, selectDrives=True, disallowDrives=
                           gobject.TYPE_STRING,
                           gobject.TYPE_STRING,
                           gobject.TYPE_BOOLEAN)
-    drivelist = WideCheckList(3, store, sensitivity=True)
+    columns = ['Drive', 'Size', 'Model']
+    drivelist = WideCheckList(columns, store, sensitivity=True)
+    drivelist.set_headers_visible(True)
     createAllowedDrivesStore(disks, reqdrives, drivelist, selectDrives=selectDrives,
                              disallowDrives=disallowDrives)
 
diff --git a/pyanaconda/iw/raid_dialog_gui.py b/pyanaconda/iw/raid_dialog_gui.py
index 770344c..236e34b 100644
--- a/pyanaconda/iw/raid_dialog_gui.py
+++ b/pyanaconda/iw/raid_dialog_gui.py
@@ -46,7 +46,8 @@ class RaidEditor:
 	store = gtk.TreeStore(gobject.TYPE_BOOLEAN,
 			      gobject.TYPE_STRING,
 			      gobject.TYPE_STRING)
-	partlist = WideCheckList(2, store, 
+	columns = ['Drive', 'Size']
+	partlist = WideCheckList(columns, store, 
                                  clickCB=self.raidlist_toggle_callback)
 
 	sw = gtk.ScrolledWindow()
-- 
1.7.3.2


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]