# HG changeset patch # User John Rice # Date 1252489402 -3600 # Node ID 539e3dc08316fe352dfc97f6aebbbe79d0b42bc8 # Parent c4d21b460a6689d7046f436556de3dd623b55f4e 11215 PM Allow toggle of select all from main list header diff -r c4d21b460a66 -r 539e3dc08316 src/gui/Makefile --- a/src/gui/Makefile Tue Sep 08 16:10:38 2009 +0100 +++ b/src/gui/Makefile Wed Sep 09 10:43:22 2009 +0100 @@ -117,6 +117,7 @@ data/icons/16x16/filter_selected.png \ data/icons/16x16/progress_blank.png \ data/icons/16x16/progress_checkmark.png \ + data/icons/16x16/selection.png \ data/icons/16x16/status_checkmark.png \ data/icons/16x16/status_installed.png \ data/icons/16x16/status_newupdate.png \ diff -r c4d21b460a66 -r 539e3dc08316 src/gui/data/icons/16x16/selection.png Binary file src/gui/data/icons/16x16/selection.png has changed diff -r c4d21b460a66 -r 539e3dc08316 src/packagemanager.py --- a/src/packagemanager.py Tue Sep 08 16:10:38 2009 +0100 +++ b/src/packagemanager.py Wed Sep 09 10:43:22 2009 +0100 @@ -1005,14 +1005,19 @@ enumerations.STATUS_ICON_COLUMN, self.__status_sort_func) toggle_renderer = gtk.CellRendererToggle() - column = gtk.TreeViewColumn("", toggle_renderer, \ + column = gtk.TreeViewColumn("", toggle_renderer, active = enumerations.MARK_COLUMN) - column.set_sort_column_id(enumerations.MARK_COLUMN) - column.set_sort_indicator(True) column.set_cell_data_func(toggle_renderer, self.cell_data_function, None) - column.connect_after('clicked', - self.__application_treeview_column_sorted, None) + column.set_clickable(True) + column.connect('clicked', self.__select_column_clicked) self.w_application_treeview.append_column(column) + image = gtk.Image() + image.set_from_pixbuf(gui_misc.get_icon(self.icon_theme, 'selection')) + tooltips = gtk.Tooltips() + tooltips.set_tip(image, _("Click to toggle selections")) + image.show() + column.set_widget(image) + name_renderer = gtk.CellRendererText() column = gtk.TreeViewColumn(_("Name"), name_renderer, text = enumerations.NAME_COLUMN) @@ -1190,6 +1195,11 @@ self.w_application_treeview.get_accessible() self.process_package_list_end() + def __select_column_clicked(self, data): + self.set_busy_cursor() + gobject.idle_add(self.__toggle_select_all, + self.w_selectall_menuitem.props.sensitive) + def __application_treeview_column_sorted(self, widget, user_data): self.__set_visible_status(False) @@ -1897,19 +1907,23 @@ return True else: return False - - - def __on_select_all(self, widget): + + def __toggle_select_all(self, select_all=True): focus_widget = self.w_main_window.get_focus() if self.__is_a_textview(focus_widget): - focus_widget.emit('select-all', True) + focus_widget.emit('select-all', select_all) self.w_selectall_menuitem.set_sensitive(False) self.w_deselect_menuitem.set_sensitive(True) + self.unset_busy_cursor() return elif focus_widget == self.w_searchentry: - focus_widget.select_region(0, -1) + if select_all: + focus_widget.select_region(0, -1) + else: + focus_widget.select_region(0, 0) self.w_selectall_menuitem.set_sensitive(False) self.w_deselect_menuitem.set_sensitive(True) + self.unset_busy_cursor() return sort_filt_model = \ @@ -1923,23 +1937,43 @@ filtered_path = \ sort_filt_model.convert_path_to_child_path(sorted_path) path = filt_model.convert_path_to_child_path(filtered_path) - list_of_paths.append(path) + if select_all: + list_of_paths.append(path) + else: + filtered_iter = \ + sort_filt_model.convert_iter_to_child_iter(None, + iter_next) + app_iter = filt_model.convert_iter_to_child_iter( + filtered_iter) + if model.get_value(app_iter, enumerations.MARK_COLUMN): + list_of_paths.append(path) iter_next = sort_filt_model.iter_next(iter_next) for path in list_of_paths: itr = model.get_iter(path) - already_marked = model.get_value(itr, enumerations.MARK_COLUMN) - if not already_marked: + mark_value = model.get_value(itr, enumerations.MARK_COLUMN) + if select_all and not mark_value: model.set_value(itr, enumerations.MARK_COLUMN, True) pkg_stem = model.get_value(itr, enumerations.STEM_COLUMN) pkg_status = model.get_value(itr, enumerations.STATUS_COLUMN) self.__add_pkg_stem_to_list(pkg_stem, pkg_status) - self.w_selectall_menuitem.set_sensitive(False) - self.w_deselect_menuitem.set_sensitive(True) + elif not select_all and mark_value: + model.set_value(itr, enumerations.MARK_COLUMN, False) + self.__remove_pkg_stem_from_list(model.get_value(itr, + enumerations.STEM_COLUMN)) + + self.w_selectall_menuitem.set_sensitive(not select_all) + self.w_deselect_menuitem.set_sensitive(select_all) self.__enable_disable_selection_menus() self.update_statusbar() self.__enable_disable_install_remove() + self.unset_busy_cursor() + + def __on_select_all(self, widget): + self.set_busy_cursor() + gobject.idle_add(self.__toggle_select_all, True) + return def __on_select_updates(self, widget): sort_filt_model = \ @@ -1972,48 +2006,9 @@ self.__enable_disable_install_remove() def __on_deselect(self, widget): - focus_widget = self.w_main_window.get_focus() - if self.__is_a_textview(focus_widget): - focus_widget.emit('select-all', False) - self.w_deselect_menuitem.set_sensitive(False) - self.w_selectall_menuitem.set_sensitive(True) - return - elif focus_widget == self.w_searchentry: - focus_widget.select_region(0, 0) - self.w_deselect_menuitem.set_sensitive(False) - self.w_selectall_menuitem.set_sensitive(True) - return - - sort_filt_model = \ - self.w_application_treeview.get_model() #gtk.TreeModelSort - filt_model = sort_filt_model.get_model() #gtk.TreeModelFilter - model = filt_model.get_model() #gtk.ListStore - iter_next = sort_filt_model.get_iter_first() - list_of_paths = [] - while iter_next != None: - sorted_path = sort_filt_model.get_path(iter_next) - filtered_iter = sort_filt_model.convert_iter_to_child_iter(None, \ - iter_next) - app_iter = filt_model.convert_iter_to_child_iter(filtered_iter) - filtered_path = \ - sort_filt_model.convert_path_to_child_path(sorted_path) - path = filt_model.convert_path_to_child_path(filtered_path) - if model.get_value(app_iter, enumerations.MARK_COLUMN): - list_of_paths.append(path) - iter_next = sort_filt_model.iter_next(iter_next) - for path in list_of_paths: - itr = model.get_iter(path) - already_deselected = not model.get_value(itr, - enumerations.MARK_COLUMN) - if not already_deselected: - model.set_value(itr, enumerations.MARK_COLUMN, False) - self.__remove_pkg_stem_from_list(model.get_value(itr, - enumerations.STEM_COLUMN)) - self.w_selectall_menuitem.set_sensitive(True) - self.w_deselect_menuitem.set_sensitive(False) - self.__enable_disable_selection_menus() - self.update_statusbar() - self.__enable_disable_install_remove() + self.set_busy_cursor() + gobject.idle_add(self.__toggle_select_all, False) + return def __on_preferences(self, widget): self.w_startpage_checkbutton.set_active(self.show_startpage) @@ -2250,7 +2245,7 @@ col = pthinfo[1] #Double click - if event.type == GDK_2BUTTON_PRESS: + if event.type == GDK_2BUTTON_PRESS: self.__active_pane_toggle(None, path, treeview.get_model()) return if event.button == GDK_RIGHT_BUTTON: #Right Click @@ -2263,13 +2258,13 @@ @staticmethod def __position_package_popup(menu, position): - #Positions popup relative to the top left corner of the currently + #Positions popup relative to the top left corner of the currently #selected row's Name cell x, y = position - + #Offset x by 10 and y by 15 so underlying name is visible return (x+10, y+15, True) - + @staticmethod def __on_applicationtreeview_motion_notify_event(treeview, event): #TBD - needed for Tooltips in application treeview @@ -4055,16 +4050,16 @@ self.__remove_pkg_stem_from_list(pkg_stem) if self.info_cache.has_key(pkg_stem): del self.info_cache[pkg_stem] - package_info = self.__get_version(self.api_o, + package_info = self.__get_version(self.api_o, local = True, pkg = pkg_stem) package_installed = False if package_info: package_installed = \ (package_info.state == api.PackageInfo.INSTALLED) if package_installed: - package_info = self.__get_version(self.api_o, + package_info = self.__get_version(self.api_o, local = False, pkg = pkg_stem) - if (package_info and + if (package_info and package_info.state == api.PackageInfo.INSTALLED): row[enumerations.STATUS_COLUMN] = \ enumerations.INSTALLED diff -r c4d21b460a66 -r 539e3dc08316 src/pkgdefs/SUNWipkg-gui/prototype --- a/src/pkgdefs/SUNWipkg-gui/prototype Tue Sep 08 16:10:38 2009 +0100 +++ b/src/pkgdefs/SUNWipkg-gui/prototype Wed Sep 09 10:43:22 2009 +0100 @@ -73,6 +73,7 @@ f none usr/share/package-manager/icons/hicolor/16x16/actions/filter_selected.png 444 root other f none usr/share/package-manager/icons/hicolor/16x16/actions/progress_blank.png 444 root other f none usr/share/package-manager/icons/hicolor/16x16/actions/progress_checkmark.png 444 root other +f none usr/share/package-manager/icons/hicolor/16x16/actions/selection.png 444 root other f none usr/share/package-manager/icons/hicolor/16x16/actions/status_checkmark.png 444 root other f none usr/share/package-manager/icons/hicolor/16x16/actions/status_installed.png 444 root other f none usr/share/package-manager/icons/hicolor/16x16/actions/status_newupdate.png 444 root other