From d48dcc9c5f1c43445340b8da6a2da79d6a34b0b7 Mon Sep 17 00:00:00 2001 From: SNoiraud Date: Wed, 31 Oct 2018 20:30:44 +0100 Subject: [PATCH] FR10850 V1: Refresh button in the gramplet bar. Fixes #10850 This is the first method to avoid reloading gramplet automaticaly. --- gramps/gen/config.py | 1 + gramps/gen/plug/_gramplet.py | 8 ++++++-- gramps/gui/configure.py | 13 ++++++++++++ gramps/gui/displaystate.py | 1 + gramps/gui/widgets/grampletbar.py | 32 +++++++++++++++++++++++++++++- gramps/gui/widgets/grampletpane.py | 11 ++++++++++ 6 files changed, 63 insertions(+), 3 deletions(-) diff --git a/gramps/gen/config.py b/gramps/gen/config.py index 12508ba13..68f707c85 100644 --- a/gramps/gen/config.py +++ b/gramps/gen/config.py @@ -196,6 +196,7 @@ register('interface.view-categories', register('interface.filter', False) register('interface.fullscreen', False) register('interface.grampletbar-close', False) +register('interface.grampletbar-refresh', False) register('interface.ignore-gexiv2', False) register('interface.ignore-pil', False) register('interface.ignore-osmgpsmap', False) diff --git a/gramps/gen/plug/_gramplet.py b/gramps/gen/plug/_gramplet.py index 76b097224..6b30b2a2a 100644 --- a/gramps/gen/plug/_gramplet.py +++ b/gramps/gen/plug/_gramplet.py @@ -34,6 +34,7 @@ LOG = logging.getLogger(".Gramplets") # #------------------------------------------------------------------------ from ..const import GRAMPS_LOCALE as glocale +from gramps.gen.config import config _ = glocale.translation.gettext class Gramplet: @@ -296,12 +297,15 @@ class Gramplet: not self.gui.force_update): self.dirty = True if self.dbstate.is_open(): - #print " %s is not active" % self.gui.gname + #print(" %s is not active" % self.gui.gname) self.update_has_data() else: self.set_has_data(False) return - #print " %s is UPDATING" % self.gui.gname + #print(" %s is UPDATING" % self.gui.gname) + if (config.get('interface.grampletbar-refresh') and + self.gui.view.navigation_type() != None): # dashboard has no navtype + return # Don't update the gramplet if we are in manual refresh self.dirty = False LOG.debug("gramplet updater: %s: running" % self.gui.title) if self._idle_id != 0: diff --git a/gramps/gui/configure.py b/gramps/gui/configure.py index b7c442db8..dd5748744 100644 --- a/gramps/gui/configure.py +++ b/gramps/gui/configure.py @@ -984,6 +984,12 @@ class GrampsPreferences(ConfigureDialog): """ self.uistate.emit('grampletbar-close-changed') + def cb_grampletbar_refresh(self, obj): + """ + Gramplet bar refresh button preference callback + """ + self.uistate.emit('grampletbar-refresh-changed') + def add_formats_panel(self, configdialog): row = 0 grid = Gtk.Grid() @@ -1185,6 +1191,13 @@ class GrampsPreferences(ConfigureDialog): row, 'interface.grampletbar-close', stop=3, extra_callback=self.cb_grampletbar_close) row += 1 + + # Gramplet bar refresh button: + self.add_checkbox(grid, + _("Enable manual refresh for the active gramplet"), + row, 'interface.grampletbar-refresh', stop=3, + extra_callback=self.cb_grampletbar_refresh) + row += 1 return _('Display'), grid def auto_title_changed(self, obj): diff --git a/gramps/gui/displaystate.py b/gramps/gui/displaystate.py index 758f9a824..f57dfa8f2 100644 --- a/gramps/gui/displaystate.py +++ b/gramps/gui/displaystate.py @@ -398,6 +398,7 @@ class DisplayState(Callback): 'nameformat-changed' : None, 'placeformat-changed' : None, 'grampletbar-close-changed' : None, + 'grampletbar-refresh-changed' : None, 'update-available' : (list, ), 'autobackup' : None, } diff --git a/gramps/gui/widgets/grampletbar.py b/gramps/gui/widgets/grampletbar.py index b5cae4bb8..a2d8387d5 100644 --- a/gramps/gui/widgets/grampletbar.py +++ b/gramps/gui/widgets/grampletbar.py @@ -104,6 +104,16 @@ class GrampletBar(Gtk.Notebook): self.set_show_border(False) self.set_scrollable(True) + image = Gtk.Image(stock=Gtk.STOCK_REFRESH) + refresh_button = Gtk.Button(image=image) + refresh_button.set_relief(Gtk.ReliefStyle.NONE) + refresh_button.connect('clicked', self.__refresh_clicked) + self.set_action_widget(refresh_button, Gtk.PackType.START) + if config.get('interface.grampletbar-refresh'): + refresh_button.show() + else: + refresh_button.hide() + book_button = Gtk.Button() # Arrow is too small unless in a box box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) @@ -142,6 +152,7 @@ class GrampletBar(Gtk.Notebook): self.set_current_page(config_settings[1]) uistate.connect('grampletbar-close-changed', self.cb_close_changed) + uistate.connect('grampletbar-refresh-changed', self.cb_refresh_changed) # Connect after gramplets added to prevent making them active self.connect('switch-page', self.__switch_page) @@ -404,6 +415,16 @@ class GrampletBar(Gtk.Notebook): tablabel = self.get_tab_label(gramplet) tablabel.use_close(config.get('interface.grampletbar-close')) + def cb_refresh_changed(self): + """ + Refresh button preference changed. + """ + button = self.get_action_widget(Gtk.PackType.START) + if config.get('interface.grampletbar-refresh'): + button.show() + else: + button.hide() + def __delete_clicked(self, button, gramplet): """ Called when the delete button is clicked. @@ -476,6 +497,15 @@ class GrampletBar(Gtk.Notebook): gramplet.detached_window.close() gramplet.detached_window = None + def __refresh_clicked(self, button): + """ + Called when the drop-down button is clicked. + """ + for gramplet in self.get_children(): + if gramplet and gramplet.pui: + if gramplet.pui.active: + gramplet.pui.main() + def __button_clicked(self, button): """ Called when the drop-down button is clicked. @@ -743,7 +773,7 @@ class TabLabel(Gtk.Box): def use_close(self, use_close): """ - Display the cose button according to user preference. + Display the close button according to user preference. """ if use_close: self.closebtn.show() diff --git a/gramps/gui/widgets/grampletpane.py b/gramps/gui/widgets/grampletpane.py index 2d3042d60..d47db7fb6 100644 --- a/gramps/gui/widgets/grampletpane.py +++ b/gramps/gui/widgets/grampletpane.py @@ -34,6 +34,7 @@ from gi.repository import Pango import time import os import configparser +from gramps.gen.config import config import logging @@ -242,6 +243,8 @@ class GrampletWindow(ManagedWindow): self.setup_configs('interface.' + cfg_name, gramplet.detached_width, gramplet.detached_height) self.window.add_button(_('_Help'), Gtk.ResponseType.HELP) + if config.get('interface.grampletbar-refresh'): + self.window.add_button(_('Refresh'), Gtk.ResponseType.APPLY) # add gramplet: if self.gramplet.pui: self.gramplet.pui.active = True @@ -274,6 +277,8 @@ class GrampletWindow(ManagedWindow): else: display_help(WIKI_HELP_PAGE, self.gramplet.tname.replace(" ", "_")) + elif response == Gtk.ResponseType.APPLY: + self.refresh() def build_menu_names(self, obj): """ @@ -281,6 +286,12 @@ class GrampletWindow(ManagedWindow): """ return (self.title, 'Gramplet') + def refresh(self): + """ + Refresh the detached gramplet + """ + self.gramplet.pui.main() # refresh + def get_title(self): """ Returns the window title.