FAQ Search Today's Posts Mark Forums Read
» Video Reviews

» Linux Archive

Linux-archive is a website aiming to archive linux email lists and to make them easily accessible for linux users/developers.


» Sponsor

» Partners

» Sponsor

Go Back   Linux Archive > CRUX > CRUX

 
 
LinkBack Thread Tools
 
Old 11-23-2010, 11:59 AM
Ales Kozumplik
 
Default (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

_______________________________________________
Anaconda-devel-list mailing list
Anaconda-devel-list@redhat.com
https://www.redhat.com/mailman/listinfo/anaconda-devel-list
 
Old 11-23-2010, 02:55 PM
David Lehman
 
Default (Un)select all button in Partition Editor.

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@redhat.com
https://www.redhat.com/mailman/listinfo/anaconda-devel-list
 

Thread Tools




All times are GMT. The time now is 05:38 AM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.
Copyright 2007 - 2008, www.linux-archive.org