diff --git a/src/gui/grampsbar.py b/src/gui/grampsbar.py index 84cf6485f..e57999e26 100644 --- a/src/gui/grampsbar.py +++ b/src/gui/grampsbar.py @@ -66,6 +66,7 @@ from gui.widgets.grampletpane import (AVAILABLE_GRAMPLETS, GuiGramplet) from gui.widgets.undoablebuffer import UndoableBuffer from ListModel import ListModel, NOSORT +from gui.utils import add_menuitem #------------------------------------------------------------------------- # @@ -306,21 +307,6 @@ class GrampsBar(gtk.Notebook): self.append_page(content, tab_label) return content - def __add_clicked(self): - """ - Called when the add button is clicked. - """ - skip = self.all_gramplets() - names = [name for name in AVAILABLE_GRAMPLETS() if name not in skip] - gramplet_list = [(GET_AVAILABLE_GRAMPLETS(name)["tname"], name) - for name in names] - gramplet_list.sort() - - dialog = ChooseGrampletDialog(_("Select Gramplet"), gramplet_list) - name = dialog.run() - if name: - self.add_gramplet(name) - def __add_tab(self, gramplet): """ Add a tab to the notebook for the given gramplet. @@ -427,8 +413,34 @@ class GrampsBar(gtk.Notebook): Called when a button is pressed in the tabs section of the GrampsBar. """ if event.type == gtk.gdk.BUTTON_PRESS and event.button == 3: - # TODO: We will probably want a context menu here. - self.__add_clicked() + uiman = self.uistate.uimanager + ag_menu = uiman.get_widget('/GrampsBarPopup/AddGramplet') + if ag_menu: + submenu = ag_menu.get_submenu() + submenu = gtk.Menu() + skip = self.all_gramplets() + gramplet_list = [(GET_AVAILABLE_GRAMPLETS(name)["tname"], name) + for name in AVAILABLE_GRAMPLETS() + if name not in skip] + gramplet_list.sort() + for entry in gramplet_list: + item = gtk.MenuItem(entry[0]) + item.connect("activate", self.__add_clicked, entry[1]) + item.show() + submenu.append(item) + ag_menu.set_submenu(submenu) + + menu = uiman.get_widget('/GrampsBarPopup') + if menu: + menu.popup(None, None, None, 1, event.time) + return True + return False + + def __add_clicked(self, menu, gname): + """ + Called when a gramplet is added from the context menu. + """ + self.add_gramplet(gname) def get_config_funcs(self): """ @@ -571,77 +583,3 @@ class DetachedWindow(ManagedWindow.ManagedWindow): self.gramplet.detached_window = None self.gramplet.reparent(self.grampsbar) ManagedWindow.ManagedWindow.close(self, *args) - -#------------------------------------------------------------------------- -# -# Choose Gramplet Dialog -# -#------------------------------------------------------------------------- -class ChooseGrampletDialog(object): - """ - A dialog to choose a gramplet - """ - def __init__(self, title, names): - self.title = title - self.names = names - self.namelist = None - self.namemodel = None - self.top = self._create_dialog() - - def run(self): - """ - Run the dialog and return the result. - """ - self._populate_model() - response = self.top.run() - result = None - if response == gtk.RESPONSE_OK: - store, iter_ = self.namemodel.get_selected() - if iter_: - result = store.get_value(iter_, 1) - self.top.destroy() - return result - - def _populate_model(self): - """ - Populate the model. - """ - self.namemodel.clear() - for name in self.names: - self.namemodel.add(name) - - def _create_dialog(self): - """ - Create a dialog box to organize tags. - """ - # pylint: disable-msg=E1101 - title = _("%(title)s - Gramps") % {'title': self.title} - top = gtk.Dialog(title) - top.set_default_size(400, 350) - top.set_modal(True) - top.set_has_separator(False) - top.vbox.set_spacing(5) - label = gtk.Label('%s' - % self.title) - label.set_use_markup(True) - top.vbox.pack_start(label, 0, 0, 5) - box = gtk.HBox() - top.vbox.pack_start(box, 1, 1, 5) - - name_titles = [(_('Name'), NOSORT, 200), - ('', NOSORT, 200)] - self.namelist = gtk.TreeView() - self.namemodel = ListModel(self.namelist, name_titles) - - slist = gtk.ScrolledWindow() - slist.add_with_viewport(self.namelist) - slist.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) - box.pack_start(slist, 1, 1, 5) - bbox = gtk.VButtonBox() - bbox.set_layout(gtk.BUTTONBOX_START) - bbox.set_spacing(6) - top.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK) - top.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL) - box.pack_start(bbox, 0, 0, 5) - top.show_all() - return top diff --git a/src/gui/views/pageview.py b/src/gui/views/pageview.py index c470d40b6..26d5000f7 100644 --- a/src/gui/views/pageview.py +++ b/src/gui/views/pageview.py @@ -111,6 +111,9 @@ class PageView(DbGUIElement): + + + ''' self.dirty = True self.active = False @@ -409,6 +412,7 @@ class PageView(DbGUIElement): self._add_toggle_action('Bottombar', None, _('_Bottombar'), None, None, self.__bottombar_toggled, self.bottombar.get_property('visible')) + self._add_action("AddGramplet", gtk.STOCK_ADD, _("Add a gramplet")) def __build_action_group(self): """