Move category management back into the view manager
svn: r16137
This commit is contained in:
@ -79,9 +79,9 @@ def url(link, uistate=None):
|
|||||||
Open the specified URL in a browser.
|
Open the specified URL in a browser.
|
||||||
"""
|
"""
|
||||||
if uistate and config.get('htmlview.url-handler'):
|
if uistate and config.get('htmlview.url-handler'):
|
||||||
if 'Web' in uistate.viewmanager.get_categories():
|
cat_num = uistate.viewmanager.get_category('Web')
|
||||||
uistate.viewmanager.goto_category('Web')
|
if cat_num is not None:
|
||||||
page = uistate.viewmanager.get_category_page('Web')
|
page = uistate.viewmanager.goto_page(cat_num, None)
|
||||||
page.open(link)
|
page.open(link)
|
||||||
return
|
return
|
||||||
if not run_file(link):
|
if not run_file(link):
|
||||||
|
@ -110,19 +110,12 @@ class Sidebar(object):
|
|||||||
menu_item.connect('activate', self.cb_menu_activate, index)
|
menu_item.connect('activate', self.cb_menu_activate, index)
|
||||||
menu_item.show()
|
menu_item.show()
|
||||||
|
|
||||||
def loaded(self):
|
def view_changed(self, cat_num, view_num):
|
||||||
"""
|
|
||||||
Called after all the sidebar plugins have been loaded.
|
|
||||||
"""
|
|
||||||
for page in self.pages:
|
|
||||||
page[1].loaded()
|
|
||||||
|
|
||||||
def view_changed(self, page_num):
|
|
||||||
"""
|
"""
|
||||||
Called when a Gramps view is changed.
|
Called when a Gramps view is changed.
|
||||||
"""
|
"""
|
||||||
for page in self.pages:
|
for page in self.pages:
|
||||||
page[1].view_changed(page_num)
|
page[1].view_changed(cat_num, view_num)
|
||||||
|
|
||||||
def __menu_button_pressed(self, button, event):
|
def __menu_button_pressed(self, button, event):
|
||||||
"""
|
"""
|
||||||
|
@ -266,14 +266,17 @@ class ViewManager(CLIManager):
|
|||||||
|
|
||||||
#set pluginmanager to GUI one
|
#set pluginmanager to GUI one
|
||||||
self._pmgr = GuiPluginManager.get_instance()
|
self._pmgr = GuiPluginManager.get_instance()
|
||||||
self.active_page = None
|
|
||||||
self.pages = []
|
|
||||||
self.merge_ids = []
|
self.merge_ids = []
|
||||||
self.toolactions = None
|
self.toolactions = None
|
||||||
self.tool_menu_ui_id = None
|
self.tool_menu_ui_id = None
|
||||||
self.reportactions = None
|
self.reportactions = None
|
||||||
self.report_menu_ui_id = None
|
self.report_menu_ui_id = None
|
||||||
self.category_manager = None
|
|
||||||
|
self.active_page = None
|
||||||
|
self.pages = []
|
||||||
|
self.page_lookup = {}
|
||||||
|
self.views = None
|
||||||
|
self.current_views = [] # The current view in each category
|
||||||
|
|
||||||
self.show_sidebar = config.get('interface.view')
|
self.show_sidebar = config.get('interface.view')
|
||||||
self.show_toolbar = config.get('interface.toolbar-on')
|
self.show_toolbar = config.get('interface.toolbar-on')
|
||||||
@ -519,7 +522,7 @@ class ViewManager(CLIManager):
|
|||||||
|
|
||||||
self.notebook = gtk.Notebook()
|
self.notebook = gtk.Notebook()
|
||||||
self.notebook.set_scrollable(True)
|
self.notebook.set_scrollable(True)
|
||||||
self.notebook.set_show_tabs(False)
|
self.notebook.set_show_tabs(True)
|
||||||
self.notebook.show()
|
self.notebook.show()
|
||||||
self.__init_lists()
|
self.__init_lists()
|
||||||
self.__build_ui_manager()
|
self.__build_ui_manager()
|
||||||
@ -641,13 +644,6 @@ class ViewManager(CLIManager):
|
|||||||
self.window.connect('delete-event', self.quit)
|
self.window.connect('delete-event', self.quit)
|
||||||
self.notebook.connect('switch-page', self.view_changed)
|
self.notebook.connect('switch-page', self.view_changed)
|
||||||
|
|
||||||
def view_changed(self, notebook, page, page_num):
|
|
||||||
"""
|
|
||||||
Called when the notebook page is changed.
|
|
||||||
"""
|
|
||||||
self.sidebar.view_changed(page_num)
|
|
||||||
self.__change_page(page_num)
|
|
||||||
|
|
||||||
def __init_lists(self):
|
def __init_lists(self):
|
||||||
"""
|
"""
|
||||||
Initialize the actions lists for the UIManager
|
Initialize the actions lists for the UIManager
|
||||||
@ -803,8 +799,9 @@ class ViewManager(CLIManager):
|
|||||||
|
|
||||||
def init_interface(self):
|
def init_interface(self):
|
||||||
"""
|
"""
|
||||||
Initialize the interface, creating the pages as given in vieworder
|
Initialize the interface.
|
||||||
"""
|
"""
|
||||||
|
self.__init_views()
|
||||||
self.__load_sidebar_plugins()
|
self.__load_sidebar_plugins()
|
||||||
|
|
||||||
if not self.file_loaded:
|
if not self.file_loaded:
|
||||||
@ -840,7 +837,6 @@ class ViewManager(CLIManager):
|
|||||||
Showing the main window is deferred so that
|
Showing the main window is deferred so that
|
||||||
ArgHandler can work without it always shown
|
ArgHandler can work without it always shown
|
||||||
"""
|
"""
|
||||||
self.sidebar.loaded()
|
|
||||||
self.window.show()
|
self.window.show()
|
||||||
if not self.dbstate.db.is_open() and show_manager:
|
if not self.dbstate.db.is_open() and show_manager:
|
||||||
self.__open_activate(None)
|
self.__open_activate(None)
|
||||||
@ -1040,7 +1036,53 @@ class ViewManager(CLIManager):
|
|||||||
config.set('interface.fullscreen', False)
|
config.set('interface.fullscreen', False)
|
||||||
config.save()
|
config.save()
|
||||||
|
|
||||||
def create_page(self, pdata, page_def, show_page=True):
|
def __init_views(self):
|
||||||
|
"""
|
||||||
|
Read the view definitions and display the default view.
|
||||||
|
"""
|
||||||
|
self.views = get_available_views()
|
||||||
|
defaults = views_to_show(self.views,
|
||||||
|
config.get('preferences.use-last-view'))
|
||||||
|
self.current_views = defaults[2]
|
||||||
|
self.goto_page(defaults[0], defaults[1])
|
||||||
|
|
||||||
|
def get_views(self):
|
||||||
|
"""
|
||||||
|
Return the view definitions.
|
||||||
|
"""
|
||||||
|
return self.views
|
||||||
|
|
||||||
|
def goto_page(self, cat_num, view_num):
|
||||||
|
"""
|
||||||
|
Create the page if it doesn't exist and make it the current page.
|
||||||
|
"""
|
||||||
|
if view_num is None:
|
||||||
|
view_num = self.current_views[cat_num]
|
||||||
|
else:
|
||||||
|
self.current_views[cat_num] = view_num
|
||||||
|
|
||||||
|
page_num = self.page_lookup.get((cat_num, view_num))
|
||||||
|
if page_num is None:
|
||||||
|
page_def = self.views[cat_num][view_num]
|
||||||
|
self.page_lookup[(cat_num, view_num)] = self.notebook.get_n_pages()
|
||||||
|
self.__create_page(page_def[0], page_def[1])
|
||||||
|
else:
|
||||||
|
self.notebook.set_current_page(page_num)
|
||||||
|
|
||||||
|
if page_num:
|
||||||
|
return self.pages[page_num]
|
||||||
|
|
||||||
|
def get_category(self, cat_name):
|
||||||
|
"""
|
||||||
|
Return the category number from the given category name.
|
||||||
|
"""
|
||||||
|
print ("get_category", cat_name)
|
||||||
|
for cat_num, cat_views in enumerate(self.views):
|
||||||
|
if cat_name == cat_views[0][0].category[1]:
|
||||||
|
return cat_num
|
||||||
|
return None
|
||||||
|
|
||||||
|
def __create_page(self, pdata, page_def):
|
||||||
"""
|
"""
|
||||||
Create a new page and set it as the current page.
|
Create a new page and set it as the current page.
|
||||||
"""
|
"""
|
||||||
@ -1080,48 +1122,30 @@ class ViewManager(CLIManager):
|
|||||||
hbox.show_all()
|
hbox.show_all()
|
||||||
page_num = self.notebook.append_page(page_display,
|
page_num = self.notebook.append_page(page_display,
|
||||||
hbox)
|
hbox)
|
||||||
if show_page:
|
|
||||||
self.notebook.set_current_page(page_num)
|
|
||||||
|
|
||||||
def register_category_manager(self, manager):
|
def view_changed(self, notebook, page, page_num):
|
||||||
"""
|
"""
|
||||||
Register a category manager with the view manager.
|
Called when the notebook page is changed.
|
||||||
"""
|
"""
|
||||||
self.category_manager = manager
|
cat_num = view_num = None
|
||||||
|
for key in self.page_lookup:
|
||||||
|
if self.page_lookup[key] == page_num:
|
||||||
|
cat_num, view_num = key
|
||||||
|
break
|
||||||
|
|
||||||
def goto_category(self, category):
|
# Save last view in configuration
|
||||||
"""
|
view_id = self.views[cat_num][view_num][0].id
|
||||||
Ask the category manager to go to a page. Returns success
|
config.set('preferences.last-view', view_id)
|
||||||
status.
|
last_views = config.get('preferences.last-views')
|
||||||
"""
|
if len(last_views) != len(self.views):
|
||||||
if self.category_manager:
|
# If the number of categories has changed then reset the defaults
|
||||||
return self.category_manager.goto_category(category)
|
last_views = [''] * len(self.views)
|
||||||
return False
|
last_views[cat_num] = view_id
|
||||||
|
config.set('preferences.last-views', last_views)
|
||||||
|
config.save()
|
||||||
|
|
||||||
def get_categories(self):
|
self.sidebar.view_changed(cat_num, view_num)
|
||||||
"""
|
self.__change_page(page_num)
|
||||||
Return available categories.
|
|
||||||
"""
|
|
||||||
if self.category_manager:
|
|
||||||
return self.category_manager.get_categories()
|
|
||||||
else:
|
|
||||||
return None
|
|
||||||
|
|
||||||
def get_category_page(self, category):
|
|
||||||
"""
|
|
||||||
External API for switching to a category page. Returns
|
|
||||||
success status.
|
|
||||||
"""
|
|
||||||
if self.category_manager:
|
|
||||||
return self.category_manager.get_category_page(category)
|
|
||||||
else:
|
|
||||||
return None
|
|
||||||
|
|
||||||
def goto_page(self, page_num):
|
|
||||||
"""
|
|
||||||
Change the current page.
|
|
||||||
"""
|
|
||||||
self.notebook.set_current_page(page_num)
|
|
||||||
|
|
||||||
def __change_page(self, page_num):
|
def __change_page(self, page_num):
|
||||||
"""
|
"""
|
||||||
@ -1142,12 +1166,6 @@ class ViewManager(CLIManager):
|
|||||||
|
|
||||||
self.active_page.change_page()
|
self.active_page.change_page()
|
||||||
|
|
||||||
def get_n_pages(self):
|
|
||||||
"""
|
|
||||||
Return the total number of pages.
|
|
||||||
"""
|
|
||||||
return self.notebook.get_n_pages()
|
|
||||||
|
|
||||||
def __delete_pages(self):
|
def __delete_pages(self):
|
||||||
"""
|
"""
|
||||||
Calls on_delete() for each view
|
Calls on_delete() for each view
|
||||||
|
@ -85,35 +85,22 @@ class CategorySidebar(BaseSidebar):
|
|||||||
|
|
||||||
self.viewmanager = uistate.viewmanager
|
self.viewmanager = uistate.viewmanager
|
||||||
|
|
||||||
self.categories = {}
|
|
||||||
self.buttons = []
|
self.buttons = []
|
||||||
self.button_handlers = []
|
self.button_handlers = []
|
||||||
|
|
||||||
self.window = gtk.ScrolledWindow()
|
|
||||||
self.pages = {}
|
|
||||||
self.page_defs = {}
|
|
||||||
|
|
||||||
self.ui_category = {}
|
self.ui_category = {}
|
||||||
self.view_toggle_actions = {}
|
self.view_toggle_actions = {}
|
||||||
self.cat_view_group = None
|
self.cat_view_group = None
|
||||||
self.merge_ids = []
|
self.merge_ids = []
|
||||||
|
|
||||||
|
self.window = gtk.ScrolledWindow()
|
||||||
vbox = gtk.VBox()
|
vbox = gtk.VBox()
|
||||||
self.window.add_with_viewport(vbox)
|
self.window.add_with_viewport(vbox)
|
||||||
self.window.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
|
self.window.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
|
||||||
self.window.show()
|
self.window.show()
|
||||||
|
|
||||||
self.views = get_available_views()
|
|
||||||
defaults = views_to_show(self.views,
|
|
||||||
config.get('preferences.use-last-view'))
|
|
||||||
self.current_views = defaults[2]
|
|
||||||
|
|
||||||
# Let the view manager know what is responsible for
|
|
||||||
# switching categories:
|
|
||||||
self.viewmanager.register_category_manager(self)
|
|
||||||
|
|
||||||
use_text = config.get('interface.sidebar-text')
|
use_text = config.get('interface.sidebar-text')
|
||||||
for cat_num, cat_views in enumerate(self.views):
|
for cat_num, cat_views in enumerate(self.viewmanager.get_views()):
|
||||||
uimenuitems = ''
|
uimenuitems = ''
|
||||||
uitoolitems = ''
|
uitoolitems = ''
|
||||||
self.view_toggle_actions[cat_num] = []
|
self.view_toggle_actions[cat_num] = []
|
||||||
@ -135,9 +122,6 @@ class CategorySidebar(BaseSidebar):
|
|||||||
button.connect('drag_motion', self.cb_switch_page_on_dnd,
|
button.connect('drag_motion', self.cb_switch_page_on_dnd,
|
||||||
cat_num)
|
cat_num)
|
||||||
vbox.show_all()
|
vbox.show_all()
|
||||||
self.categories[category] = cat_num
|
|
||||||
|
|
||||||
self.page_defs[(cat_num, view_num)] = page
|
|
||||||
|
|
||||||
pageid = (page[0].id + '_%i' % view_num)
|
pageid = (page[0].id + '_%i' % view_num)
|
||||||
uimenuitems += '\n<menuitem action="%s"/>' % pageid
|
uimenuitems += '\n<menuitem action="%s"/>' % pageid
|
||||||
@ -166,35 +150,10 @@ class CategorySidebar(BaseSidebar):
|
|||||||
"""
|
"""
|
||||||
return self.window
|
return self.window
|
||||||
|
|
||||||
def loaded(self):
|
def view_changed(self, cat_num, view_num):
|
||||||
"""
|
|
||||||
Open the default view after all the sidebar plugins have been loaded.
|
|
||||||
"""
|
|
||||||
defaults = views_to_show(self.views,
|
|
||||||
config.get('preferences.use-last-view'))
|
|
||||||
self.__category_clicked(self.buttons[defaults[0]], defaults[0])
|
|
||||||
|
|
||||||
def view_changed(self, page_num):
|
|
||||||
"""
|
"""
|
||||||
Called when the active view is changed.
|
Called when the active view is changed.
|
||||||
"""
|
"""
|
||||||
cat_num = view_num = None
|
|
||||||
for key in self.pages:
|
|
||||||
if self.pages[key] == page_num:
|
|
||||||
cat_num, view_num = key
|
|
||||||
break
|
|
||||||
|
|
||||||
# Save last view in configuration
|
|
||||||
view_id = self.views[cat_num][view_num][0].id
|
|
||||||
config.set('preferences.last-view', view_id)
|
|
||||||
last_views = config.get('preferences.last-views')
|
|
||||||
if len(last_views) != len(self.views):
|
|
||||||
# If the number of categories has changed then reset the defaults
|
|
||||||
last_views = [''] * len(self.views)
|
|
||||||
last_views[cat_num] = view_id
|
|
||||||
config.set('preferences.last-views', last_views)
|
|
||||||
config.save()
|
|
||||||
|
|
||||||
# Add buttons to the toolbar for the different view in the category
|
# Add buttons to the toolbar for the different view in the category
|
||||||
uimanager = self.viewmanager.uimanager
|
uimanager = self.viewmanager.uimanager
|
||||||
if self.cat_view_group:
|
if self.cat_view_group:
|
||||||
@ -222,39 +181,6 @@ class CategorySidebar(BaseSidebar):
|
|||||||
button.set_active(False)
|
button.set_active(False)
|
||||||
self.__handlers_unblock()
|
self.__handlers_unblock()
|
||||||
|
|
||||||
def goto_category(self, category):
|
|
||||||
"""
|
|
||||||
External API for switching to a category page. Returns
|
|
||||||
success status.
|
|
||||||
"""
|
|
||||||
if category in self.categories:
|
|
||||||
index = self.categories[category]
|
|
||||||
self.__category_clicked(None, index)
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
def get_category_page(self, category):
|
|
||||||
"""
|
|
||||||
External API for getting a page. Creates it if necessary.
|
|
||||||
"""
|
|
||||||
if category not in self.categories:
|
|
||||||
return None
|
|
||||||
cat_num = self.categories[category]
|
|
||||||
view_num = self.current_views[cat_num]
|
|
||||||
page_num = self.pages.get((cat_num, view_num))
|
|
||||||
page = self.page_defs[(cat_num, view_num)]
|
|
||||||
if page_num is None:
|
|
||||||
self.pages[(cat_num, view_num)] = self.viewmanager.get_n_pages()
|
|
||||||
self.viewmanager.create_page(page[0], page[1], show_page=False)
|
|
||||||
page_num = self.pages.get((cat_num, view_num))
|
|
||||||
return self.viewmanager.pages[page_num]
|
|
||||||
|
|
||||||
def get_categories(self):
|
|
||||||
"""
|
|
||||||
External API for providing available categories.
|
|
||||||
"""
|
|
||||||
return self.categories.keys()
|
|
||||||
|
|
||||||
def __handlers_block(self):
|
def __handlers_block(self):
|
||||||
"""
|
"""
|
||||||
Block signals to the buttons to prevent spurious events.
|
Block signals to the buttons to prevent spurious events.
|
||||||
@ -274,34 +200,19 @@ class CategorySidebar(BaseSidebar):
|
|||||||
Called when a button causes a view change.
|
Called when a button causes a view change.
|
||||||
"""
|
"""
|
||||||
view_num = radioaction.get_current_value()
|
view_num = radioaction.get_current_value()
|
||||||
self.__goto_page(cat_num, view_num)
|
self.viewmanager.goto_page(cat_num, view_num)
|
||||||
|
|
||||||
def __category_clicked(self, button, cat_num):
|
def __category_clicked(self, button, cat_num):
|
||||||
"""
|
"""
|
||||||
Called when a button causes a category change.
|
Called when a button causes a category change.
|
||||||
"""
|
"""
|
||||||
view_num = self.current_views[cat_num]
|
self.viewmanager.goto_page(cat_num, None)
|
||||||
self.__goto_page(cat_num, view_num)
|
|
||||||
|
|
||||||
# If the click is on the same view we're in,
|
# If the click is on the same view we're in,
|
||||||
# restore the button state to active
|
# restore the button state to active
|
||||||
if button and not button.get_active():
|
if button and not button.get_active():
|
||||||
button.set_active(True)
|
button.set_active(True)
|
||||||
|
|
||||||
def __goto_page(self, cat_num, view_num):
|
|
||||||
"""
|
|
||||||
Create the page if it doesn't exist and make it the current page.
|
|
||||||
"""
|
|
||||||
self.current_views[cat_num] = view_num
|
|
||||||
|
|
||||||
page_num = self.pages.get((cat_num, view_num))
|
|
||||||
if page_num is None:
|
|
||||||
page = self.page_defs[(cat_num, view_num)]
|
|
||||||
self.pages[(cat_num, view_num)] = self.viewmanager.get_n_pages()
|
|
||||||
self.viewmanager.create_page(page[0], page[1])
|
|
||||||
else:
|
|
||||||
self.viewmanager.goto_page(page_num)
|
|
||||||
|
|
||||||
def __make_sidebar_button(self, use_text, index, page_title, page_stock):
|
def __make_sidebar_button(self, use_text, index, page_title, page_stock):
|
||||||
"""
|
"""
|
||||||
Create the sidebar button. The page_title is the text associated with
|
Create the sidebar button. The page_title is the text associated with
|
||||||
|
@ -40,16 +40,16 @@ menu_label = _('Category'),
|
|||||||
order = START
|
order = START
|
||||||
)
|
)
|
||||||
|
|
||||||
register(SIDEBAR,
|
#register(SIDEBAR,
|
||||||
id = 'historysidebar',
|
#id = 'historysidebar',
|
||||||
name = _("History Sidebar"),
|
#name = _("History Sidebar"),
|
||||||
description = _("A sidebar to display the history"),
|
#description = _("A sidebar to display the history"),
|
||||||
version = '1.0',
|
#version = '1.0',
|
||||||
gramps_target_version = '3.3',
|
#gramps_target_version = '3.3',
|
||||||
status = STABLE,
|
#status = STABLE,
|
||||||
fname = 'historysidebar.py',
|
#fname = 'historysidebar.py',
|
||||||
authors = [u"Nick Hall"],
|
#authors = [u"Nick Hall"],
|
||||||
authors_email = ["nick__hall@hotmail.com"],
|
#authors_email = ["nick__hall@hotmail.com"],
|
||||||
sidebarclass = 'HistorySidebar',
|
#sidebarclass = 'HistorySidebar',
|
||||||
menu_label = _('History')
|
#menu_label = _('History')
|
||||||
)
|
#)
|
||||||
|
Reference in New Issue
Block a user