From 9fe3d1fb8b735cdc21c67de5b866270bf7e17d02 Mon Sep 17 00:00:00 2001 From: Nick Hall Date: Wed, 19 Jan 2011 14:40:39 +0000 Subject: [PATCH] Combine the sidebar and bottombar functionality into a single class svn: r16412 --- po/POTFILES.in | 2 +- po/POTFILES.skip | 1 - src/gui/Makefile.am | 3 +- src/gui/{bottombar.py => grampsbar.py} | 181 +++++++++++++++++------ src/gui/sidebar.py | 197 ------------------------- src/gui/viewmanager.py | 4 +- src/gui/views/listview.py | 21 ++- src/gui/views/pageview.py | 123 ++++----------- src/gui/widgets/grampletpane.py | 1 + src/plugins/view/grampletview.py | 7 + 10 files changed, 189 insertions(+), 351 deletions(-) rename src/gui/{bottombar.py => grampsbar.py} (79%) delete mode 100644 src/gui/sidebar.py diff --git a/po/POTFILES.in b/po/POTFILES.in index d8147eafb..e0ba05c48 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -79,12 +79,12 @@ src/gen/plug/report/utils.py src/gen/proxy/private.py # gui - GUI code -src/gui/bottombar.py src/gui/columnorder.py src/gui/configure.py src/gui/dbloader.py src/gui/dbman.py src/gui/filtereditor.py +src/gui/grampsbar.py src/gui/grampsgui.py src/gui/makefilter.py src/gui/utils.py diff --git a/po/POTFILES.skip b/po/POTFILES.skip index 26945e073..3e1c382c5 100644 --- a/po/POTFILES.skip +++ b/po/POTFILES.skip @@ -211,7 +211,6 @@ src/gui/__init__.py src/gui/dbguielement.py src/gui/navigator.py src/gui/pluginmanager.py -src/gui/sidebar.py # gui/editors - the GUI editors package src/gui/editors/__init__.py diff --git a/src/gui/Makefile.am b/src/gui/Makefile.am index ef300baeb..b8b4d49e0 100644 --- a/src/gui/Makefile.am +++ b/src/gui/Makefile.am @@ -15,18 +15,17 @@ pkgdatadir = $(datadir)/@PACKAGE@/gui pkgdata_PYTHON = \ __init__.py \ basesidebar.py \ - bottombar.py \ columnorder.py \ configure.py \ dbguielement.py \ dbloader.py \ dbman.py \ filtereditor.py \ + grampsbar.py \ grampsgui.py \ navigator.py \ makefilter.py \ pluginmanager.py \ - sidebar.py \ utils.py \ viewmanager.py diff --git a/src/gui/bottombar.py b/src/gui/grampsbar.py similarity index 79% rename from src/gui/bottombar.py rename to src/gui/grampsbar.py index a1e13b229..f32d493d6 100644 --- a/src/gui/bottombar.py +++ b/src/gui/grampsbar.py @@ -49,6 +49,7 @@ from gui.widgets.grampletpane import (AVAILABLE_GRAMPLETS, get_gramplet_options_by_name, make_requested_gramplet) from ListModel import ListModel, NOSORT +from QuestionDialog import ErrorDialog #------------------------------------------------------------------------- # @@ -59,12 +60,12 @@ NL = "\n" #------------------------------------------------------------------------- # -# Bottombar class +# GrampsBar class # #------------------------------------------------------------------------- -class Bottombar(object): +class GrampsBar(object): """ - A class which defines the graphical representation of the Gramps bottom bar. + A class which defines the graphical representation of the Gramps bar. """ def __init__(self, dbstate, uistate, configfile, close_callback, defaults): @@ -73,61 +74,61 @@ class Bottombar(object): self.configfile = os.path.join(const.VERSION_DIR, "%s.ini" % configfile) self.close_callback = close_callback self.gramplet_map = {} # title->gramplet + self.filter_page = 0 - self.top = gtk.HBox() self.notebook = gtk.Notebook() self.notebook.set_show_border(False) self.notebook.set_scrollable(True) self.notebook.connect('switch_page', self.__switch_page) - vbox = gtk.VBox() + self.top = self._build_interface(self.notebook) + self.default_gramplets = defaults + config_settings, opts_list = self.load_gramplets() + + opts_list.sort(key=lambda opt: opt["page"]) + for opts in opts_list: + name = opts["name"] + all_opts = get_gramplet_opts(name, opts) + all_opts["layout"] = "tabs" + gramplet = make_requested_gramplet(self, name, all_opts, + self.dbstate, self.uistate) + self.gramplet_map[all_opts["title"]] = gramplet + self.__add_tab(gramplet) + + if config_settings[0]: + self.top.show() + self.notebook.set_current_page(config_settings[1]) + + def _build_interface(self, notebook): + """ + Build the user interface. Must be implemented in adervied class. + """ + raise NotImplementedError + + def _make_buttons(self): + """ + Make the buttons. + """ close_button = gtk.Button() img = gtk.image_new_from_stock(gtk.STOCK_CLOSE, gtk.ICON_SIZE_MENU) close_button.set_image(img) close_button.set_relief(gtk.RELIEF_NONE) close_button.connect('clicked', self.__close_clicked) - vbox.pack_start(close_button, False) delete_button = gtk.Button() img = gtk.image_new_from_stock(gtk.STOCK_REMOVE, gtk.ICON_SIZE_MENU) delete_button.set_image(img) delete_button.set_relief(gtk.RELIEF_NONE) delete_button.connect('clicked', self.__delete_clicked) - vbox.pack_end(delete_button, False) add_button = gtk.Button() img = gtk.image_new_from_stock(gtk.STOCK_ADD, gtk.ICON_SIZE_MENU) add_button.set_image(img) add_button.set_relief(gtk.RELIEF_NONE) add_button.connect('clicked', self.__add_clicked) - vbox.pack_end(add_button, False) - self.top.pack_start(self.notebook, True) - self.top.pack_start(vbox, False) - - vbox.show_all() - self.notebook.show() - - self.default_gramplets = defaults - config_settings = self.load_gramplets() - - for (name, opts) in config_settings[1]: - all_opts = get_gramplet_opts(name, opts) - all_opts["layout"] = "tabs" - gramplet = make_requested_gramplet(self, name, all_opts, - self.dbstate, self.uistate) - self.gramplet_map[all_opts["title"]] = gramplet - - gramplets = [g for g in self.gramplet_map.itervalues() - if g is not None] - gramplets.sort(key=lambda x: x.page) - for gramplet in gramplets: - self.__add_tab(gramplet) - - if config_settings[0][0]: - self.top.show() - self.notebook.set_current_page(config_settings[0][1]) + return (close_button, delete_button, add_button) def load_gramplets(self): """ @@ -163,12 +164,12 @@ class Bottombar(object): if "name" not in data: data["name"] = "Unnamed Gramplet" data["tname"]= _("Unnamed Gramplet") - retval.append((data["name"], data)) # name, opts + retval.append(data) else: # give defaults as currently known for name in self.default_gramplets: if name in AVAILABLE_GRAMPLETS(): - retval.append((name, GET_AVAILABLE_GRAMPLETS(name))) + retval.append(GET_AVAILABLE_GRAMPLETS(name)) return ((visible, default_page), retval) def save(self): @@ -194,7 +195,7 @@ class Bottombar(object): for page_num in range(self.notebook.get_n_pages()): title = get_title(self.notebook, page_num) gramplet = self.gramplet_map[title] - + if gramplet is None: continue # filter tab opts = get_gramplet_options_by_name(gramplet.name) if opts is not None: base_opts = opts.copy() @@ -231,7 +232,8 @@ class Bottombar(object): """ page = self.notebook.get_current_page() title = get_title(self.notebook, page) - if title is not None and self.gramplet_map[title].pui: + if title is not None and self.gramplet_map[title] \ + and self.gramplet_map[title].pui: self.gramplet_map[title].pui.active = True if self.gramplet_map[title].pui.dirty: self.gramplet_map[title].pui.update() @@ -242,7 +244,8 @@ class Bottombar(object): """ page = self.notebook.get_current_page() title = get_title(self.notebook, page) - if title is not None and self.gramplet_map[title].pui: + if title is not None and self.gramplet_map[title] \ + and self.gramplet_map[title].pui: if self.gramplet_map[title].state != "detached": self.gramplet_map[title].pui.active = False @@ -276,6 +279,32 @@ class Bottombar(object): """ return self.top.hide() + def is_visible(self): + """ + Return True if the bar is visible, else return False. + """ + return self.top.get_property('visible') + + def add_filter(self, filter): + """ + Add a filter. + """ + self.gramplet_map[_('Filter')] = None + self.notebook.prepend_page(filter, gtk.Label(_('Filter'))) + self.notebook.set_tab_reorderable(filter, True) + self.notebook.set_current_page(0) + + def remove_filter(self): + """ + Remove the filter. + """ + for page_num in range(self.notebook.get_n_pages()): + title = get_title(self.notebook, page_num) + if title == _('Filter'): + self.notebook.remove_page(page_num) + del self.gramplet_map[_('Filter')] + return + def __close_clicked(self, button): """ Called when the sidebar is closed. @@ -288,7 +317,8 @@ class Bottombar(object): """ names = [GET_AVAILABLE_GRAMPLETS(key)["tname"] for key in AVAILABLE_GRAMPLETS()] - skip = [gramplet.tname for gramplet in self.gramplet_map.values()] + skip = [gramplet.tname for gramplet in self.gramplet_map.values() + if gramplet is not None] gramplet_list = [name for name in names if name not in skip] gramplet_list.sort() dialog = ChooseGrampletDialog(_("Select Gramplet"), gramplet_list) @@ -325,8 +355,13 @@ class Bottombar(object): """ page_num = self.notebook.get_current_page() title = get_title(self.notebook, page_num) - del self.gramplet_map[title] - self.notebook.remove_page(page_num) + if self.gramplet_map[title] is None: + ErrorDialog( + _("Cannot remove tab"), + _("The filter tab cannot be removed")) + else: + del self.gramplet_map[title] + self.notebook.remove_page(page_num) def __switch_page(self, notebook, unused, new_page): """ @@ -336,12 +371,12 @@ class Bottombar(object): #print "switch from", old_page, "to", new_page if old_page >= 0: title = get_title(notebook, old_page) - if self.gramplet_map[title].pui: + if self.gramplet_map[title] and self.gramplet_map[title].pui: if self.gramplet_map[title].state != "detached": self.gramplet_map[title].pui.active = False title = get_title(notebook, new_page) - if self.gramplet_map[title].pui: + if self.gramplet_map[title] and self.gramplet_map[title].pui: self.gramplet_map[title].pui.active = True if self.gramplet_map[title].pui.dirty: self.gramplet_map[title].pui.update() @@ -355,6 +390,66 @@ def get_title(notebook, page_num): return None else: return notebook.get_tab_label_text(page) + +#------------------------------------------------------------------------- +# +# HBar class +# +#------------------------------------------------------------------------- +class HBar(GrampsBar): + """ + A class which defines the representation of a horizontal Gramps bar. + """ + def _build_interface(self, notebook): + """ + Build the horizontal user interface. + """ + top = gtk.HBox() + vbox = gtk.VBox() + + close_button, delete_button, add_button = self._make_buttons() + + vbox.pack_start(close_button, False) + vbox.pack_end(delete_button, False) + vbox.pack_end(add_button, False) + + top.pack_start(notebook, True) + top.pack_start(vbox, False) + + notebook.show() + vbox.show_all() + + return top + +#------------------------------------------------------------------------- +# +# VBar class +# +#------------------------------------------------------------------------- +class VBar(GrampsBar): + """ + A class which defines the representation of a vertical Gramps bar. + """ + def _build_interface(self, notebook): + """ + Build the vertical user interface. + """ + top = gtk.VBox() + hbox = gtk.HBox() + + close_button, delete_button, add_button = self._make_buttons() + + hbox.pack_start(add_button, False) + hbox.pack_start(delete_button, False) + hbox.pack_end(close_button, False) + + top.pack_start(hbox, False) + top.pack_start(notebook, True) + + notebook.show() + hbox.show_all() + + return top #------------------------------------------------------------------------- # diff --git a/src/gui/sidebar.py b/src/gui/sidebar.py deleted file mode 100644 index 76bd36da3..000000000 --- a/src/gui/sidebar.py +++ /dev/null @@ -1,197 +0,0 @@ -# -# Gramps - a GTK+/GNOME based genealogy program -# -# Copyright (C) 2010 Nick Hall -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# $Id$ - -#------------------------------------------------------------------------- -# -# Python modules -# -#------------------------------------------------------------------------- -from gen.ggettext import gettext as _ - -#------------------------------------------------------------------------- -# -# GNOME modules -# -#------------------------------------------------------------------------- -import gtk - -#------------------------------------------------------------------------- -# -# Sidebar class -# -#------------------------------------------------------------------------- -class Sidebar(object): - """ - A class which defines the graphical representation of the Gramps sidebar. - """ - def __init__(self, changed_callback, close_callback): - - self.changed_callback = changed_callback - self.close_callback = close_callback - self.pages = [] - self.top = gtk.VBox() - - frame = gtk.Frame() - hbox = gtk.HBox() - frame.add(hbox) - - select_button = gtk.ToggleButton() - select_button.set_relief(gtk.RELIEF_NONE) - select_hbox = gtk.HBox() - self.title_label = gtk.Label() - arrow = gtk.Arrow(gtk.ARROW_DOWN, gtk.SHADOW_NONE) - select_hbox.pack_start(self.title_label, False) - select_hbox.pack_end(arrow, False) - select_button.add(select_hbox) - - select_button.connect('button_press_event', self.__menu_button_pressed) - - close_button = gtk.Button() - img = gtk.image_new_from_stock(gtk.STOCK_CLOSE, gtk.ICON_SIZE_MENU) - close_button.set_image(img) - close_button.set_relief(gtk.RELIEF_NONE) - close_button.connect('clicked', self.__close_clicked) - hbox.pack_start(select_button, False) - hbox.pack_end(close_button, False) - #frame.show_all() - - self.top.pack_start(frame, False) - - self.menu = gtk.Menu() - self.menu.show() - self.menu.connect('deactivate', self.__menu_deactivate, select_button) - - self.notebook = gtk.Notebook() - self.notebook.show() - self.notebook.set_show_tabs(True) - self.notebook.set_show_border(False) - self.notebook.connect('switch_page', self.__switch_page) - self.top.pack_start(self.notebook, True) - self.top.show() - - def get_display(self): - """ - Return the top container widget for the GUI. - """ - return self.top - - def show(self): - """ - Display the sidebar. - """ - self.top.show() - - def hide(self): - """ - Hide the sidebar. - """ - self.top.hide() - - def set_current_page(self, page_num): - """ - Set the sidebar page. - """ - self.notebook.set_current_page(page_num) - - def get_page_type(self): - """ - Return the type of the active page. - """ - return self.pages[self.notebook.get_current_page()][1] - - def add(self, title, container, page_type): - """ - Add a page to the sidebar. - """ - menu_item = gtk.MenuItem(title) - self.pages.append([title, page_type, menu_item]) - index = self.notebook.append_page(container, gtk.Label(title)) - menu_item.connect('activate', self.__menu_activate, index) - menu_item.show() - self.menu.append(menu_item) - self.notebook.set_current_page(index) - - def remove(self, page_type): - """ - Replace a page in the sidebar. - """ - position = self.__get_page(page_type) - if position is not None: - self.notebook.remove_page(position) - self.menu.remove(self.pages[position][2]) - self.pages = self.pages[:position] + self.pages[position+1:] - - def __get_page(self, page_type): - """ - Return the page number of the page with the given type. - """ - for page_num, page in enumerate(self.pages): - if page[1] == page_type: - return page_num - return None - - def __menu_button_pressed(self, button, event): - """ - Called when the button to select a sidebar page is pressed. - """ - if event.button == 1 and event.type == gtk.gdk.BUTTON_PRESS: - button.grab_focus() - button.set_active(True) - - self.menu.popup(None, None, self.__menu_position, event.button, - event.time, button) - - def __menu_position(self, menu, button): - """ - Determine the position of the popup menu. - """ - x, y = button.window.get_origin() - x += button.allocation.x - y += button.allocation.y + button.allocation.height - - return (x, y, False) - - def __menu_activate(self, menu, index): - """ - Called when an item in the popup menu is selected. - """ - self.notebook.set_current_page(index) - - def __menu_deactivate(self, menu, button): - """ - Called when the popup menu disappears. - """ - button.set_active(False) - - def __switch_page(self, notebook, unused, index): - """ - Called when the user has switched to a new sidebar page. - """ - if self.pages: - self.title_label.set_markup('%s' % self.pages[index][0]) - active = self.top.get_property('visible') - self.changed_callback(self.pages[index][1], active, index) - - def __close_clicked(self, button): - """ - Called when the sidebar is closed. - """ - self.close_callback() diff --git a/src/gui/viewmanager.py b/src/gui/viewmanager.py index 8a2c9c010..4a63af680 100644 --- a/src/gui/viewmanager.py +++ b/src/gui/viewmanager.py @@ -1156,7 +1156,6 @@ class ViewManager(CLIManager): traceback.print_exc() return - page.define_actions() try: page_display = page.get_display() except: @@ -1164,11 +1163,12 @@ class ViewManager(CLIManager): print("ERROR: '%s' failed to create view" % pdata.name) traceback.print_exc() return + page.define_actions() page.post() self.pages.append(page) - # create icon/label for workspace notebook + # create icon/label for notebook tab (useful for debugging) hbox = gtk.HBox() image = gtk.Image() image.set_from_stock(page.get_stock(), gtk.ICON_SIZE_MENU) diff --git a/src/gui/views/listview.py b/src/gui/views/listview.py index 173a044a8..92183b9fa 100644 --- a/src/gui/views/listview.py +++ b/src/gui/views/listview.py @@ -50,7 +50,7 @@ import pango # GRAMPS # #---------------------------------------------------------------- -from gui.views.pageview import PageView, FILTER_PAGE +from gui.views.pageview import PageView from gui.views.navigationview import NavigationView from gui.columnorder import ColumnOrder import config @@ -322,6 +322,15 @@ class ListView(NavigationView): [(self.colinfo[pair[1]], pair[1], pair[1] in self.exact_search()) for pair in self.column_order() if pair[0]]) + def sidebar_toggled(self, active): + """ + Called when the sidebar is toggled. + """ + if active: + self.search_bar.hide() + else: + self.search_bar.show() + #################################################################### # Navigation #################################################################### @@ -862,16 +871,6 @@ class ListView(NavigationView): self.edit_action.set_visible(True) self.edit_action.set_sensitive(not self.dbstate.db.readonly) - def sidebar_changed(self, page_type, active, index): - """ - Called when the sidebar page is changed. - """ - PageView.sidebar_changed(self, page_type, active, index) - if active and page_type == FILTER_PAGE: - self.search_bar.hide() - else: - self.search_bar.show() - def on_delete(self): """ Save the column widths when the view is shutdown. diff --git a/src/gui/views/pageview.py b/src/gui/views/pageview.py index 6dbdd6c86..f8415e065 100644 --- a/src/gui/views/pageview.py +++ b/src/gui/views/pageview.py @@ -49,20 +49,10 @@ from gen.ggettext import gettext as _ import Errors from gui.dbguielement import DbGUIElement from gui.widgets.menutoolbuttonaction import MenuToolButtonAction -from gui.sidebar import Sidebar -from gui.bottombar import Bottombar -from gui.widgets.grampletpane import GrampletPane +from gui.grampsbar import HBar, VBar from gui.configure import ConfigureDialog from config import config -#------------------------------------------------------------------------- -# -# Constants -# -#------------------------------------------------------------------------- -GRAMPLET_PAGE = 0 -FILTER_PAGE = 1 - #------------------------------------------------------------------------------ # # PageView @@ -121,10 +111,6 @@ class PageView(DbGUIElement): - - - - ''' self.dirty = True self.active = False @@ -150,7 +136,6 @@ class PageView(DbGUIElement): self.filter_class = None self.top = None - self.gramplet_pane = None self.sidebar = None self.bottombar = None @@ -161,12 +146,15 @@ class PageView(DbGUIElement): Builds the container widget for the interface. Returns a gtk container widget. """ - self.sidebar = Sidebar(self.sidebar_changed, self.sidebar_closed) - defaults = self.get_default_gramplets()[1] - self.bottombar = Bottombar(self.dbstate, self.uistate, + defaults = self.get_default_gramplets() + self.sidebar = VBar(self.dbstate, self.uistate, + self.ident + "_sidebar", + self.sidebar_closed, + defaults[0]) + self.bottombar = HBar(self.dbstate, self.uistate, self.ident + "_bottombar", self.bottombar_closed, - defaults) + defaults[1]) hpane = gtk.HPaned() vpane = gtk.VPaned() hpane.pack1(vpane, resize=True, shrink=False) @@ -178,56 +166,35 @@ class PageView(DbGUIElement): widget.show_all() vpane.pack1(widget, resize=True, shrink=False) vpane.pack2(self.bottombar.get_display(), resize=False, shrink=False) - initial_page = self._config.get('sidebar.page') - - self.gramplet_pane = self.__create_gramplet_pane() if self.filter_class: self.add_filter(self.filter_class) - - self.sidebar.set_current_page(initial_page) - if self._config.get('sidebar.visible'): - self.sidebar.show() - else: - self.sidebar.hide() + self.sidebar_toggled(self.sidebar.is_visible()) return hpane def add_filter(self, filter_class): """ - Add a filter to the workspace sidebar. + Add a filter to the sidebar. """ - self.filter_sidebar = filter_class(self.dbstate, self.uistate, + self.filter_tab = filter_class(self.dbstate, self.uistate, self.__filter_clicked) - top = self.filter_sidebar.get_widget() + top = self.filter_tab.get_widget() top.show_all() - self.sidebar.add(_('Filter'), top, FILTER_PAGE) + self.sidebar.add_filter(top) def remove_filter(self): """ - Remove the filter from the workspace sidebar. + Remove the filter from the sidebar. """ - self.filter_sidebar = None - self.sidebar.remove(FILTER_PAGE) - - def __create_gramplet_pane(self): - """ - Create a gramplet pane. - """ - defaults = self.get_default_gramplets()[0] - gramplet_pane = GrampletPane(self.ident + "_sidebar", - self, self.dbstate, self.uistate, - column_count=1, - default_gramplets=defaults) - gramplet_pane.show_all() - self.sidebar.add(_('Gramplets'), gramplet_pane, GRAMPLET_PAGE) - return gramplet_pane + self.filter_tab = None + self.sidebar.remove_filter() def __filter_clicked(self): """ Called when the filter 'Find' button is clicked. """ - self.generic_filter = self.filter_sidebar.get_filter() + self.generic_filter = self.filter_tab.get_filter() self.build_tree() def __sidebar_toggled(self, action): @@ -237,11 +204,10 @@ class PageView(DbGUIElement): active = action.get_active() if active: self.sidebar.show() - self.sidebar_changed(self.sidebar.get_page_type(), True, None) + self.sidebar_toggled(True) else: self.sidebar.hide() - self.sidebar_changed(None, False, None) - self._config.set('sidebar.visible', active) + self.sidebar_toggled(False) def __bottombar_toggled(self, action): """ @@ -252,14 +218,12 @@ class PageView(DbGUIElement): self.bottombar.show() else: self.bottombar.hide() - self._config.set('bottombar.visible', active) - def sidebar_changed(self, page_type, active, index): + def sidebar_toggled(self, active): """ - Called when the sidebar page is changed. + Called when the sidebar is toggled. """ - if index is not None: - self._config.set('sidebar.page', index) + pass def sidebar_closed(self): """ @@ -375,7 +339,7 @@ class PageView(DbGUIElement): Called with the PageView is set as active. If the page is "dirty", then we rebuild the data. """ - self.gramplet_pane.set_active() + self.sidebar.set_active() self.bottombar.set_active() self.active = True if self.dirty: @@ -387,7 +351,7 @@ class PageView(DbGUIElement): """ Marks page as being inactive (not currently displayed) """ - self.gramplet_pane.set_inactive() + self.sidebar.set_inactive() self.bottombar.set_inactive() self.active = False @@ -482,13 +446,9 @@ class PageView(DbGUIElement): self.action_toggle_list in this function. """ self._add_toggle_action('Sidebar', None, _('_Sidebar'), - None, None, self.__sidebar_toggled, - self._config.get('sidebar.visible')) + None, None, self.__sidebar_toggled, self.sidebar.is_visible()) self._add_toggle_action('Bottombar', None, _('_Bottombar'), - None, None, self.__bottombar_toggled, - self._config.get('bottombar.visible')) - self._add_action("AddGramplet", gtk.STOCK_ADD, _("Add a gramplet")) - self._add_action("RestoreGramplet", None, _("Restore a gramplet")) + None, None, self.__bottombar_toggled, self.bottombar.is_visible()) def __build_action_group(self): """ @@ -605,7 +565,7 @@ class PageView(DbGUIElement): Method called on shutdown. Data views should put code here that should be called when quiting the main application. """ - self.gramplet_pane.on_delete() + self.sidebar.on_delete() self.bottombar.on_delete() self._config.save() @@ -629,10 +589,6 @@ class PageView(DbGUIElement): use_config_path=True) for section, value in self.CONFIGSETTINGS: self._config.register(section, value) - self._config.register('sidebar.visible', False) - self._config.register('sidebar.page', 0) - self._config.register('bottombar.visible', False) - self._config.register('bottombar.page', 0) self._config.init() self.config_connect() @@ -668,37 +624,16 @@ class PageView(DbGUIElement): """ raise NotImplementedError - def __get_configure_funcs(self): - """ - Return a combined list of configuration functions for all of the panes - in the view. - - :return: list of functions - """ - retval = [] - if self.can_configure(): - other = self._get_configure_page_funcs() - if callable(other): - retval += other() - else: - retval += other - - if self.gramplet_pane is not None: - func = self.gramplet_pane._get_configure_page_funcs() - retval += func() - - return retval - def configure(self): """ - Open the configure dialog for the workspace. + Open the configure dialog for the view. """ title = _("Configure %(cat)s - %(view)s") % \ {'cat': self.get_translated_category(), 'view': self.get_title()} try: ViewConfigureDialog(self.uistate, self.dbstate, - self.__get_configure_funcs(), + self._get_configure_page_funcs(), self, self._config, dialogtitle=title, ident=_("%(cat)s - %(view)s") % {'cat': self.get_translated_category(), diff --git a/src/gui/widgets/grampletpane.py b/src/gui/widgets/grampletpane.py index c60f5fc02..3cf5e4fde 100644 --- a/src/gui/widgets/grampletpane.py +++ b/src/gui/widgets/grampletpane.py @@ -89,6 +89,7 @@ def GET_AVAILABLE_GRAMPLETS(name): "gramps": "0.0.0", "column": -1, "row": -1, + "page": 0, "data": [], "help_url": gplug.help_url, } diff --git a/src/plugins/view/grampletview.py b/src/plugins/view/grampletview.py index d59668ac8..20a6b57aa 100644 --- a/src/plugins/view/grampletview.py +++ b/src/plugins/view/grampletview.py @@ -88,6 +88,13 @@ class GrampletView(PageView): """ return 'gramps-gramplet' + def define_actions(self): + """ + Defines the UIManager actions. + """ + self._add_action("AddGramplet", gtk.STOCK_ADD, _("Add a gramplet")) + self._add_action("RestoreGramplet", None, _("Restore a gramplet")) + def set_inactive(self): self.active = False self.widget.set_inactive()