Store sidebar state in the configuration file
svn: r16274
This commit is contained in:
parent
84c07b3f56
commit
b79b09b86b
@ -33,13 +33,6 @@ from gen.ggettext import gettext as _
|
|||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
import gtk
|
import gtk
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
|
||||||
#
|
|
||||||
# Gramps modules
|
|
||||||
#
|
|
||||||
#-------------------------------------------------------------------------
|
|
||||||
import config
|
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
# Sidebar class
|
# Sidebar class
|
||||||
@ -49,9 +42,10 @@ class Sidebar(object):
|
|||||||
"""
|
"""
|
||||||
A class which defines the graphical representation of the Gramps sidebar.
|
A class which defines the graphical representation of the Gramps sidebar.
|
||||||
"""
|
"""
|
||||||
def __init__(self, callback):
|
def __init__(self, changed_callback, close_callback):
|
||||||
|
|
||||||
self.callback = callback
|
self.changed_callback = changed_callback
|
||||||
|
self.close_callback = close_callback
|
||||||
self.pages = []
|
self.pages = []
|
||||||
self.top = gtk.VBox()
|
self.top = gtk.VBox()
|
||||||
|
|
||||||
@ -77,6 +71,7 @@ class Sidebar(object):
|
|||||||
close_button.connect('clicked', self.__close_clicked)
|
close_button.connect('clicked', self.__close_clicked)
|
||||||
hbox.pack_start(select_button, False)
|
hbox.pack_start(select_button, False)
|
||||||
hbox.pack_end(close_button, False)
|
hbox.pack_end(close_button, False)
|
||||||
|
frame.show_all()
|
||||||
|
|
||||||
self.top.pack_start(frame, False)
|
self.top.pack_start(frame, False)
|
||||||
|
|
||||||
@ -90,7 +85,7 @@ class Sidebar(object):
|
|||||||
self.notebook.set_show_border(False)
|
self.notebook.set_show_border(False)
|
||||||
self.notebook.connect('switch_page', self.__switch_page)
|
self.notebook.connect('switch_page', self.__switch_page)
|
||||||
self.top.pack_start(self.notebook, True)
|
self.top.pack_start(self.notebook, True)
|
||||||
self.top.show_all()
|
self.top.show()
|
||||||
|
|
||||||
def get_display(self):
|
def get_display(self):
|
||||||
"""
|
"""
|
||||||
@ -98,6 +93,24 @@ class Sidebar(object):
|
|||||||
"""
|
"""
|
||||||
return self.top
|
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):
|
def get_page_type(self):
|
||||||
"""
|
"""
|
||||||
Return the type of the active page.
|
Return the type of the active page.
|
||||||
@ -175,11 +188,10 @@ class Sidebar(object):
|
|||||||
if self.pages:
|
if self.pages:
|
||||||
self.title_label.set_markup('<b>%s</b>' % self.pages[index][0])
|
self.title_label.set_markup('<b>%s</b>' % self.pages[index][0])
|
||||||
active = self.top.get_property('visible')
|
active = self.top.get_property('visible')
|
||||||
self.callback(self.pages[index][1], active)
|
self.changed_callback(self.pages[index][1], active, index)
|
||||||
|
|
||||||
def __close_clicked(self, button):
|
def __close_clicked(self, button):
|
||||||
"""
|
"""
|
||||||
Called when the sidebar is closed.
|
Called when the sidebar is closed.
|
||||||
"""
|
"""
|
||||||
config.set('interface.filter', False)
|
self.close_callback()
|
||||||
config.save()
|
|
||||||
|
@ -135,7 +135,7 @@ UIDEFAULT = '''<ui>
|
|||||||
<menuitem action="ConfigView"/>
|
<menuitem action="ConfigView"/>
|
||||||
<menuitem action="Navigator"/>
|
<menuitem action="Navigator"/>
|
||||||
<menuitem action="Toolbar"/>
|
<menuitem action="Toolbar"/>
|
||||||
<menuitem action="Sidebar"/>
|
<placeholder name="Bars"/>
|
||||||
<menuitem action="Fullscreen"/>
|
<menuitem action="Fullscreen"/>
|
||||||
<separator/>
|
<separator/>
|
||||||
<placeholder name="ViewsInCategory"/>
|
<placeholder name="ViewsInCategory"/>
|
||||||
@ -298,7 +298,6 @@ class ViewManager(CLIManager):
|
|||||||
|
|
||||||
self.show_navigator = config.get('interface.view')
|
self.show_navigator = config.get('interface.view')
|
||||||
self.show_toolbar = config.get('interface.toolbar-on')
|
self.show_toolbar = config.get('interface.toolbar-on')
|
||||||
self.show_sidebar = config.get('interface.filter')
|
|
||||||
self.fullscreen = config.get('interface.fullscreen')
|
self.fullscreen = config.get('interface.fullscreen')
|
||||||
|
|
||||||
self.__build_main_window()
|
self.__build_main_window()
|
||||||
@ -794,8 +793,6 @@ class ViewManager(CLIManager):
|
|||||||
self.navigator_toggle, self.show_navigator ),
|
self.navigator_toggle, self.show_navigator ),
|
||||||
('Toolbar', None, _('_Toolbar'), None, None, self.toolbar_toggle,
|
('Toolbar', None, _('_Toolbar'), None, None, self.toolbar_toggle,
|
||||||
self.show_toolbar ),
|
self.show_toolbar ),
|
||||||
('Sidebar', None, _('_Sidebar'), None, None,
|
|
||||||
sidebar_toggle, self.show_sidebar),
|
|
||||||
('Fullscreen', None, _('F_ull Screen'), "F11", None,
|
('Fullscreen', None, _('F_ull Screen'), "F11", None,
|
||||||
self.fullscreen_toggle, self.fullscreen),
|
self.fullscreen_toggle, self.fullscreen),
|
||||||
]
|
]
|
||||||
@ -877,7 +874,6 @@ class ViewManager(CLIManager):
|
|||||||
self.fileactions.set_sensitive(True)
|
self.fileactions.set_sensitive(True)
|
||||||
self.uistate.widget.set_sensitive(True)
|
self.uistate.widget.set_sensitive(True)
|
||||||
config.connect("interface.statusbar", self.__statusbar_key_update)
|
config.connect("interface.statusbar", self.__statusbar_key_update)
|
||||||
config.connect("interface.filter", self.__sidebar_signal)
|
|
||||||
|
|
||||||
def __statusbar_key_update(self, client, cnxn_id, entry, data):
|
def __statusbar_key_update(self, client, cnxn_id, entry, data):
|
||||||
"""
|
"""
|
||||||
@ -885,13 +881,6 @@ class ViewManager(CLIManager):
|
|||||||
"""
|
"""
|
||||||
self.uistate.modify_statusbar(self.dbstate)
|
self.uistate.modify_statusbar(self.dbstate)
|
||||||
|
|
||||||
def __sidebar_signal(self, client, cnxn_id, entry, data):
|
|
||||||
"""
|
|
||||||
Callback function for sidebar key update
|
|
||||||
"""
|
|
||||||
if self.sidebar_menu.get_active() != config.get('interface.filter'):
|
|
||||||
self.sidebar_menu.set_active(config.get('interface.filter'))
|
|
||||||
|
|
||||||
def post_init_interface(self, show_manager=True):
|
def post_init_interface(self, show_manager=True):
|
||||||
"""
|
"""
|
||||||
Showing the main window is deferred so that
|
Showing the main window is deferred so that
|
||||||
@ -1164,6 +1153,8 @@ class ViewManager(CLIManager):
|
|||||||
wspace.add_view(page)
|
wspace.add_view(page)
|
||||||
self.pages.append(wspace)
|
self.pages.append(wspace)
|
||||||
|
|
||||||
|
wspace.define_actions()
|
||||||
|
|
||||||
# create icon/label for workspace notebook
|
# create icon/label for workspace notebook
|
||||||
hbox = gtk.HBox()
|
hbox = gtk.HBox()
|
||||||
image = gtk.Image()
|
image = gtk.Image()
|
||||||
@ -1726,13 +1717,6 @@ def display_about_box(obj):
|
|||||||
about.run()
|
about.run()
|
||||||
about.destroy()
|
about.destroy()
|
||||||
|
|
||||||
def sidebar_toggle(obj):
|
|
||||||
"""
|
|
||||||
Save the filter state to the config settings on change
|
|
||||||
"""
|
|
||||||
config.set('interface.filter', obj.get_active())
|
|
||||||
config.save()
|
|
||||||
|
|
||||||
def key_bindings(obj):
|
def key_bindings(obj):
|
||||||
"""
|
"""
|
||||||
Display key bindings
|
Display key bindings
|
||||||
|
@ -131,7 +131,6 @@ class ListView(NavigationView):
|
|||||||
contains the interface. This containter will be inserted into
|
contains the interface. This containter will be inserted into
|
||||||
a gtk.Notebook page.
|
a gtk.Notebook page.
|
||||||
"""
|
"""
|
||||||
self.init_config()
|
|
||||||
self.vbox = gtk.VBox()
|
self.vbox = gtk.VBox()
|
||||||
self.vbox.set_border_width(4)
|
self.vbox.set_border_width(4)
|
||||||
self.vbox.set_spacing(4)
|
self.vbox.set_spacing(4)
|
||||||
|
@ -312,6 +312,7 @@ class PageView(DbGUIElement):
|
|||||||
Set the id of the view. This is an unique ident
|
Set the id of the view. This is an unique ident
|
||||||
"""
|
"""
|
||||||
self.ident = ident
|
self.ident = ident
|
||||||
|
self.init_config()
|
||||||
|
|
||||||
def get_display(self):
|
def get_display(self):
|
||||||
"""
|
"""
|
||||||
@ -475,6 +476,8 @@ class PageView(DbGUIElement):
|
|||||||
use_config_path=True)
|
use_config_path=True)
|
||||||
for section, value in self.CONFIGSETTINGS:
|
for section, value in self.CONFIGSETTINGS:
|
||||||
self._config.register(section, value)
|
self._config.register(section, value)
|
||||||
|
self._config.register('sidebar.visible', True)
|
||||||
|
self._config.register('sidebar.page', 0)
|
||||||
self._config.init()
|
self._config.init()
|
||||||
self.config_connect()
|
self.config_connect()
|
||||||
|
|
||||||
|
@ -72,22 +72,14 @@ class Workspace(object):
|
|||||||
self.dbstate = dbstate
|
self.dbstate = dbstate
|
||||||
self.active = False
|
self.active = False
|
||||||
self.view = None
|
self.view = None
|
||||||
self.__configure_content = None
|
|
||||||
self._config = None
|
self._config = None
|
||||||
self.sidebar = Sidebar(self.sidebar_changed)
|
self.sidebar = Sidebar(self.sidebar_changed, self.sidebar_closed)
|
||||||
self.hpane = gtk.HPaned()
|
self.hpane = gtk.HPaned()
|
||||||
self.vpane = gtk.VPaned()
|
self.vpane = gtk.VPaned()
|
||||||
self.gramplet_pane = self.__create_gramplet_pane()
|
|
||||||
self.gramplet_pane.show_all()
|
|
||||||
self.hpane.pack1(self.vpane, resize=True, shrink=True)
|
self.hpane.pack1(self.vpane, resize=True, shrink=True)
|
||||||
self.hpane.pack2(self.sidebar.get_display(), resize=False, shrink=False)
|
self.hpane.pack2(self.sidebar.get_display(), resize=False, shrink=False)
|
||||||
self.hpane.show()
|
self.hpane.show()
|
||||||
self.vpane.show()
|
self.vpane.show()
|
||||||
if config.get('interface.filter'):
|
|
||||||
self.sidebar.get_display().show()
|
|
||||||
else:
|
|
||||||
self.sidebar.get_display().hide()
|
|
||||||
self.define_actions()
|
|
||||||
|
|
||||||
def get_display(self):
|
def get_display(self):
|
||||||
"""
|
"""
|
||||||
@ -101,10 +93,20 @@ class Workspace(object):
|
|||||||
"""
|
"""
|
||||||
self.view = view
|
self.view = view
|
||||||
self.vpane.add1(view.get_display())
|
self.vpane.add1(view.get_display())
|
||||||
|
initial_page = self.view._config.get('sidebar.page')
|
||||||
|
|
||||||
|
self.gramplet_pane = self.__create_gramplet_pane()
|
||||||
|
|
||||||
if isinstance(view, ListView):
|
if isinstance(view, ListView):
|
||||||
self.add_filter(view.filter_class)
|
self.add_filter(view.filter_class)
|
||||||
|
|
||||||
|
if self.view._config.get('sidebar.visible'):
|
||||||
|
self.sidebar.show()
|
||||||
|
else:
|
||||||
|
self.sidebar.hide()
|
||||||
|
|
||||||
|
self.sidebar.set_current_page(initial_page)
|
||||||
|
|
||||||
def add_aux(self, aux):
|
def add_aux(self, aux):
|
||||||
"""
|
"""
|
||||||
Add an auxilliary object to the workspace.
|
Add an auxilliary object to the workspace.
|
||||||
@ -134,6 +136,13 @@ class Workspace(object):
|
|||||||
Create a gramplet pane.
|
Create a gramplet pane.
|
||||||
"""
|
"""
|
||||||
self.uidef = '''<ui>
|
self.uidef = '''<ui>
|
||||||
|
<menubar name="MenuBar">
|
||||||
|
<menu action="ViewMenu">
|
||||||
|
<placeholder name="Bars">
|
||||||
|
<menuitem action="Sidebar"/>
|
||||||
|
</placeholder>
|
||||||
|
</menu>
|
||||||
|
</menubar>
|
||||||
<popup name="Popup">
|
<popup name="Popup">
|
||||||
<menuitem action="AddGramplet"/>
|
<menuitem action="AddGramplet"/>
|
||||||
<menuitem action="RestoreGramplet"/>
|
<menuitem action="RestoreGramplet"/>
|
||||||
@ -143,9 +152,10 @@ class Workspace(object):
|
|||||||
eb = gtk.EventBox()
|
eb = gtk.EventBox()
|
||||||
eb.connect('button-press-event', self._gramplet_button_press)
|
eb.connect('button-press-event', self._gramplet_button_press)
|
||||||
|
|
||||||
gramplet_pane = GrampletPane("grampletsidebar",
|
gramplet_pane = GrampletPane(self.view.ident + "_gramplets",
|
||||||
self, self.dbstate, self.uistate,
|
self, self.dbstate, self.uistate,
|
||||||
column_count=1)
|
column_count=1)
|
||||||
|
gramplet_pane.show_all()
|
||||||
eb.add(gramplet_pane)
|
eb.add(gramplet_pane)
|
||||||
eb.show()
|
eb.show()
|
||||||
self.sidebar.add(_('Gramplets'), eb, GRAMPLET_PAGE)
|
self.sidebar.add(_('Gramplets'), eb, GRAMPLET_PAGE)
|
||||||
@ -174,24 +184,32 @@ class Workspace(object):
|
|||||||
"""
|
"""
|
||||||
active = action.get_active()
|
active = action.get_active()
|
||||||
if active:
|
if active:
|
||||||
self.sidebar.get_display().show()
|
self.sidebar.show()
|
||||||
self.sidebar_changed(self.sidebar.get_page_type(), True)
|
self.sidebar_changed(self.sidebar.get_page_type(), True, None)
|
||||||
else:
|
else:
|
||||||
self.sidebar.get_display().hide()
|
self.sidebar.hide()
|
||||||
self.sidebar_changed(None, False)
|
self.sidebar_changed(None, False, None)
|
||||||
config.set('interface.filter', active)
|
self.view._config.set('sidebar.visible', active)
|
||||||
config.save()
|
|
||||||
|
|
||||||
def sidebar_changed(self, page_type, active):
|
def sidebar_changed(self, page_type, active, index):
|
||||||
"""
|
"""
|
||||||
Called when the sidebar page is changed.
|
Called when the sidebar page is changed.
|
||||||
"""
|
"""
|
||||||
|
if index is not None:
|
||||||
|
self.view._config.set('sidebar.page', index)
|
||||||
if isinstance(self.view, ListView):
|
if isinstance(self.view, ListView):
|
||||||
if active and page_type == FILTER_PAGE:
|
if active and page_type == FILTER_PAGE:
|
||||||
self.view.search_bar.hide()
|
self.view.search_bar.hide()
|
||||||
else:
|
else:
|
||||||
self.view.search_bar.show()
|
self.view.search_bar.show()
|
||||||
|
|
||||||
|
def sidebar_closed(self):
|
||||||
|
"""
|
||||||
|
Called when the sidebar close button is clicked.
|
||||||
|
"""
|
||||||
|
uimanager = self.uistate.uimanager
|
||||||
|
uimanager.get_action('/MenuBar/ViewMenu/Bars/Sidebar').activate()
|
||||||
|
|
||||||
def get_title(self):
|
def get_title(self):
|
||||||
"""
|
"""
|
||||||
Return the title of the view.
|
Return the title of the view.
|
||||||
@ -207,7 +225,8 @@ class Workspace(object):
|
|||||||
self.action_group = gtk.ActionGroup('Workspace')
|
self.action_group = gtk.ActionGroup('Workspace')
|
||||||
self.action_group.add_toggle_actions([
|
self.action_group.add_toggle_actions([
|
||||||
('Sidebar', None, _('_Sidebar'),
|
('Sidebar', None, _('_Sidebar'),
|
||||||
None, None, self.__sidebar_toggled, config.get('interface.filter'))
|
None, None, self.__sidebar_toggled,
|
||||||
|
self.view._config.get('sidebar.visible'))
|
||||||
])
|
])
|
||||||
self.action_group.add_actions([
|
self.action_group.add_actions([
|
||||||
("AddGramplet", None, _("Add a gramplet")),
|
("AddGramplet", None, _("Add a gramplet")),
|
||||||
@ -219,16 +238,16 @@ class Workspace(object):
|
|||||||
Called when the view is set as active.
|
Called when the view is set as active.
|
||||||
"""
|
"""
|
||||||
self.active = True
|
self.active = True
|
||||||
self.view.set_active()
|
|
||||||
self.gramplet_pane.set_active()
|
self.gramplet_pane.set_active()
|
||||||
|
self.view.set_active()
|
||||||
|
|
||||||
def set_inactive(self):
|
def set_inactive(self):
|
||||||
"""
|
"""
|
||||||
Called when the view is set as inactive.
|
Called when the view is set as inactive.
|
||||||
"""
|
"""
|
||||||
self.active = False
|
self.active = False
|
||||||
self.view.set_inactive()
|
|
||||||
self.gramplet_pane.set_inactive()
|
self.gramplet_pane.set_inactive()
|
||||||
|
self.view.set_inactive()
|
||||||
|
|
||||||
def get_actions(self):
|
def get_actions(self):
|
||||||
"""
|
"""
|
||||||
@ -291,14 +310,13 @@ class Workspace(object):
|
|||||||
"""
|
"""
|
||||||
Open the configure dialog for the workspace.
|
Open the configure dialog for the workspace.
|
||||||
"""
|
"""
|
||||||
if not self.__configure_content:
|
__configure_content = self._get_configure_page_funcs()
|
||||||
self.__configure_content = self._get_configure_page_funcs()
|
|
||||||
title = _("Configure %(cat)s - %(view)s") % \
|
title = _("Configure %(cat)s - %(view)s") % \
|
||||||
{'cat': self.view.get_translated_category(),
|
{'cat': self.view.get_translated_category(),
|
||||||
'view': self.view.get_title()}
|
'view': self.view.get_title()}
|
||||||
try:
|
try:
|
||||||
ViewConfigureDialog(self.uistate, self.dbstate,
|
ViewConfigureDialog(self.uistate, self.dbstate,
|
||||||
self.__configure_content,
|
__configure_content,
|
||||||
self, self.view._config, dialogtitle=title,
|
self, self.view._config, dialogtitle=title,
|
||||||
ident=_("%(cat)s - %(view)s") %
|
ident=_("%(cat)s - %(view)s") %
|
||||||
{'cat': self.view.get_translated_category(),
|
{'cat': self.view.get_translated_category(),
|
||||||
|
@ -479,7 +479,6 @@ class GeoView(HtmlView):
|
|||||||
self.filter.pack_start(self.hpaned, True, True)
|
self.filter.pack_start(self.hpaned, True, True)
|
||||||
self.signal_map = {'place-add': self._place_changed,
|
self.signal_map = {'place-add': self._place_changed,
|
||||||
'place-update' : self._place_changed}
|
'place-update' : self._place_changed}
|
||||||
self.init_config()
|
|
||||||
self.context_id = 0
|
self.context_id = 0
|
||||||
self.active = False
|
self.active = False
|
||||||
self.already_testing = False
|
self.already_testing = False
|
||||||
|
@ -474,7 +474,6 @@ class HtmlView(PageView):
|
|||||||
# The two toolkits ( webkit and mozilla ) are available.
|
# The two toolkits ( webkit and mozilla ) are available.
|
||||||
# The user is able to choose what toolkit he will use.
|
# The user is able to choose what toolkit he will use.
|
||||||
try:
|
try:
|
||||||
self.init_config()
|
|
||||||
# preferences.webkit is useful only in geoview;
|
# preferences.webkit is useful only in geoview;
|
||||||
# not in htmlview.
|
# not in htmlview.
|
||||||
if self._config.get('preferences.webkit'):
|
if self._config.get('preferences.webkit'):
|
||||||
|
@ -868,7 +868,6 @@ class PedigreeView(NavigationView):
|
|||||||
We use this to create immediately the config file with this ident.
|
We use this to create immediately the config file with this ident.
|
||||||
"""
|
"""
|
||||||
NavigationView.set_ident(self, ident)
|
NavigationView.set_ident(self, ident)
|
||||||
self.init_config()
|
|
||||||
|
|
||||||
# Automatic resize
|
# Automatic resize
|
||||||
self.force_size = self._config.get('interface.pedview-tree-size')
|
self.force_size = self._config.get('interface.pedview-tree-size')
|
||||||
|
@ -189,7 +189,6 @@ class RelationshipView(NavigationView):
|
|||||||
We use this to create immediately the config file with this ident.
|
We use this to create immediately the config file with this ident.
|
||||||
"""
|
"""
|
||||||
NavigationView.set_ident(self, ident)
|
NavigationView.set_ident(self, ident)
|
||||||
self.init_config()
|
|
||||||
self.show_siblings = self._config.get('preferences.family-siblings')
|
self.show_siblings = self._config.get('preferences.family-siblings')
|
||||||
self.show_details = self._config.get('preferences.family-details')
|
self.show_details = self._config.get('preferences.family-details')
|
||||||
self.use_shade = self._config.get('preferences.relation-shade')
|
self.use_shade = self._config.get('preferences.relation-shade')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user