On Tue, 2010-11-23 at 13:59 +0100, Ales Kozumplik wrote: > 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(-) Ack. > > 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() _______________________________________________ Anaconda-devel-list mailing list Anaconda-devel-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/anaconda-devel-list