diff --git a/src/config.py b/src/config.py
index f3f392054..30fce5bcb 100644
--- a/src/config.py
+++ b/src/config.py
@@ -526,10 +526,10 @@ register('interface.child-ref-width', 600)
register('interface.clipboard-height', 300)
register('interface.clipboard-width', 300)
register('interface.dont-ask', False)
-register('interface.data-views',
- ['GrampletView', 'PersonView', 'RelationshipView',
- 'FamilyListView', 'PedigreeView', 'EventView', 'SourceView',
- 'PlaceView', 'MediaView', 'RepositoryView', 'NoteView'])
+register('interface.view-categories',
+ ["Gramplets", "People", "Relationships", "Families",
+ "Charts", "Events", "Places", "Geography", "Sources",
+ "Repositories", "Media", "Notes"])
register('interface.event-height', 450)
register('interface.event-ref-height', 450)
register('interface.event-ref-width', 600)
diff --git a/src/gen/plug/__init__.py b/src/gen/plug/__init__.py
index fcb0cf81b..e91b27444 100644
--- a/src/gen/plug/__init__.py
+++ b/src/gen/plug/__init__.py
@@ -30,9 +30,6 @@ from _pluginreg import (PluginData, PluginRegister, REPORT, TOOL,
CATEGORY_QR_FAMILY, CATEGORY_QR_EVENT, CATEGORY_QR_SOURCE,
CATEGORY_QR_PLACE, CATEGORY_QR_REPOSITORY, CATEGORY_QR_NOTE,
CATEGORY_QR_DATE, PTYPE_STR,
- VIEW_MISC, VIEW_PERSON, VIEW_REL, VIEW_FAMILY, VIEW_EVENT,
- VIEW_PLACE, VIEW_SOURCE, VIEW_REPO, VIEW_MEDIA, VIEW_NOTE,
- VIEW_GEO, VIEW_PEDI,
START, END
)
from _manager import BasePluginManager
@@ -52,7 +49,4 @@ __all__ = [ "docbackend", "docgen", "menu", Plugin, PluginData,
CATEGORY_QR_FAMILY, CATEGORY_QR_EVENT, CATEGORY_QR_SOURCE,
CATEGORY_QR_PLACE, CATEGORY_QR_REPOSITORY, CATEGORY_QR_NOTE,
CATEGORY_QR_DATE, PTYPE_STR,
- VIEW_MISC, VIEW_PERSON, VIEW_REL, VIEW_FAMILY, VIEW_EVENT,
- VIEW_PLACE, VIEW_SOURCE, VIEW_REPO, VIEW_MEDIA, VIEW_NOTE,
- VIEW_GEO, VIEW_PEDI,
START, END]
diff --git a/src/gen/plug/_pluginreg.py b/src/gen/plug/_pluginreg.py
index 306283e56..576caf6ca 100644
--- a/src/gen/plug/_pluginreg.py
+++ b/src/gen/plug/_pluginreg.py
@@ -102,23 +102,6 @@ TOOL_UTILS = 4
TOOL_CAT = [ TOOL_DEBUG, TOOL_ANAL, TOOL_DBPROC, TOOL_DBFIX, TOOL_REVCTL,
TOOL_UTILS]
-#possible view categories
-VIEW_MISC = 0
-VIEW_PERSON = 1
-VIEW_REL = 2
-VIEW_FAMILY = 3
-VIEW_PEDI = 4
-VIEW_EVENT = 5
-VIEW_PLACE = 6
-VIEW_SOURCE = 7
-VIEW_REPO = 8
-VIEW_MEDIA = 9
-VIEW_NOTE = 10
-VIEW_GEO = 11
-VIEW_CAT = [VIEW_MISC, VIEW_PERSON, VIEW_REL, VIEW_FAMILY, VIEW_EVENT,
- VIEW_PEDI, VIEW_PLACE, VIEW_SOURCE, VIEW_REPO, VIEW_MEDIA,
- VIEW_NOTE, VIEW_GEO]
-
#possible quickreport categories
CATEGORY_QR_MISC = -1
CATEGORY_QR_PERSON = 0
@@ -204,7 +187,8 @@ class PluginData(object):
Or the report category the plugin belongs to, default=CATEGORY_TEXT
or the tool category a plugin belongs to, default=TOOL_UTILS
or the quickreport category a plugin belongs to, default=CATEGORY_QR_PERSON
- or the view category a plugin belongs to, default=VIEW_MISC
+ or the view category a plugin belongs to,
+ default=("Miscellaneous", _("Miscellaneous"))
Attributes for REPORT and TOOL plugins
.. attribute:: optionclass
@@ -389,7 +373,7 @@ class PluginData(object):
elif self._ptype == QUICKREPORT:
self._category = CATEGORY_QR_PERSON
elif self._ptype == VIEW:
- self._category = VIEW_MISC
+ self._category = ("Miscellaneous", _("Miscellaneous"))
#if self._ptype == DOCGEN:
# self._load_on_reg = True
@@ -865,18 +849,6 @@ class PluginRegister(object):
'TOOL_DBFIX': TOOL_DBFIX,
'TOOL_REVCTL': TOOL_REVCTL,
'TOOL_UTILS': TOOL_UTILS,
- 'VIEW_MISC': VIEW_MISC,
- 'VIEW_PERSON': VIEW_PERSON,
- 'VIEW_REL': VIEW_REL,
- 'VIEW_FAMILY': VIEW_FAMILY,
- 'VIEW_PEDI': VIEW_PEDI,
- 'VIEW_EVENT': VIEW_EVENT,
- 'VIEW_PLACE': VIEW_PLACE,
- 'VIEW_SOURCE': VIEW_SOURCE,
- 'VIEW_REPO': VIEW_REPO,
- 'VIEW_MEDIA': VIEW_MEDIA,
- 'VIEW_NOTE': VIEW_NOTE,
- 'VIEW_GEO': VIEW_GEO,
'CATEGORY_QR_MISC': CATEGORY_QR_MISC,
'CATEGORY_QR_PERSON': CATEGORY_QR_PERSON,
'CATEGORY_QR_FAMILY': CATEGORY_QR_FAMILY,
diff --git a/src/gui/grampsgui.py b/src/gui/grampsgui.py
index 1c92cea76..196d75194 100644
--- a/src/gui/grampsgui.py
+++ b/src/gui/grampsgui.py
@@ -62,13 +62,8 @@ from QuestionDialog import ErrorDialog
import config
import Utils
from gui.pluginmanager import GuiPluginManager
-from gen.plug import (VIEW_MISC, VIEW_PERSON, VIEW_REL, VIEW_FAMILY,
- VIEW_EVENT, VIEW_PLACE, VIEW_GEO, VIEW_SOURCE, VIEW_REPO,
- VIEW_MEDIA, VIEW_PEDI, VIEW_NOTE, START, END)
+from gen.plug import (START, END)
-DEFAULT_SIDEBAR_ORDER = (VIEW_MISC, VIEW_PERSON, VIEW_REL, VIEW_FAMILY,
- VIEW_PEDI, VIEW_EVENT, VIEW_PLACE, VIEW_GEO, VIEW_SOURCE,
- VIEW_REPO, VIEW_MEDIA, VIEW_NOTE)
#-------------------------------------------------------------------------
#
# Functions
@@ -256,20 +251,28 @@ def construct_view_order():
'firstauthoremail': pdata.authors_email[0] if
pdata.authors_email else '...'})
continue
- viewclass = eval('mod.' + pdata.viewclass)
- if pdata.category in viewstoshow:
+ viewclass = getattr(mod, pdata.viewclass)
+ # pdata.category is (string, trans-string):
+ if pdata.category[0] in viewstoshow:
if pdata.order == START:
- viewstoshow[pdata.category].insert(0, ((pdata.id,
- viewclass)))
+ viewstoshow[pdata.category[0]].insert(0, ((pdata, viewclass)))
else:
- viewstoshow[pdata.category].append((pdata.id, viewclass))
+ viewstoshow[pdata.category[0]].append((pdata, viewclass))
else:
- viewstoshow[pdata.category] = [(pdata.id, viewclass)]
+ viewstoshow[pdata.category[0]] = [(pdata, viewclass)]
resultorder = []
- for item in DEFAULT_SIDEBAR_ORDER:
+ # First, get those in order defined, if exists:
+ for item in config.get("interface.view-categories"):
if item in viewstoshow:
resultorder.append(viewstoshow[item])
+ # Next, get the rest in some order:
+ viewstoshow_names = viewstoshow.keys()
+ viewstoshow_names.sort()
+ for item in viewstoshow_names:
+ if viewstoshow[item] in resultorder:
+ continue
+ resultorder.append(viewstoshow[item])
return resultorder
#-------------------------------------------------------------------------
@@ -294,7 +297,7 @@ class Gramps(object):
register_stock_icons()
dbstate = DbState.DbState()
- self.vm = ViewManager(dbstate, DEFAULT_SIDEBAR_ORDER)
+ self.vm = ViewManager(dbstate, config.get("interface.view-categories"))
#now we determine which views are present, which to show, and we
#instruct the viewmanager to show them
diff --git a/src/gui/viewmanager.py b/src/gui/viewmanager.py
index 2121a8f07..3f15054a9 100644
--- a/src/gui/viewmanager.py
+++ b/src/gui/viewmanager.py
@@ -891,9 +891,13 @@ class ViewManager(CLIManager):
self.view_toggle_actions[index] = []
self.pages.append([])
nrpage = 0
- for id, page_def in cat_views:
+ for pdata, page_def in cat_views:
page = page_def(self.dbstate, self.uistate)
+ # Category is (string, trans):
+ page.set_category(pdata.category)
page_title = page.get_title()
+ page_category = page.get_category()
+ page_translated_category = page.get_translated_category()
page_stock = page.get_stock()
if nrpage == 0:
#the first page of this category, used to obtain
@@ -908,7 +912,7 @@ class ViewManager(CLIManager):
image = gtk.Image()
image.set_from_stock(page_stock, gtk.ICON_SIZE_MENU)
hbox.pack_start(image, False)
- hbox.add(gtk.Label(page_title))
+ hbox.add(gtk.Label(page_translated_category))
hbox.show_all()
page_cat = self.notebook.append_page(notebook, hbox)
# Enable view switching during DnD
@@ -918,7 +922,8 @@ class ViewManager(CLIManager):
# create the button and add it to the sidebar
button = self.__make_sidebar_button(use_text, index,
- page_title, page_stock)
+ page_translated_category,
+ page_stock)
self.bbox.pack_start(button, False)
self.buttons.append(button)
@@ -936,12 +941,13 @@ class ViewManager(CLIManager):
page_no = self.notebook_cat[-1].append_page(page_display,
gtk.Label(page_title))
self.pages[-1].append(page)
- pageid = (id + '_%i' % nrpage)
+ pageid = (pdata.id + '_%i' % nrpage)
uimenuitems += '\n' % pageid
uitoolitems += '\n' % pageid
+ # id, stock, button text, UI, tooltip, page
self.view_toggle_actions[index].append((pageid,
page.get_viewtype_stock(),
- page_title, '%i' % (nrpage+1), page_title,
+ pdata.name, '%i' % (nrpage+1), page_title,
nrpage))
nrpage += 1
@@ -971,8 +977,8 @@ class ViewManager(CLIManager):
found = False
for cat_views in self.views:
current_cat_view = 0
- for id, page_def in cat_views:
- if id == current_page_id:
+ for pdata, page_def in cat_views:
+ if pdata.id == current_page_id:
found = True
break
else:
@@ -1166,7 +1172,7 @@ class ViewManager(CLIManager):
self.active_page = self.pages[category_page][view_page]
self.active_page.set_active()
config.set('preferences.last-view',
- self.views[category_page][view_page][0])
+ self.views[category_page][view_page][0].id)
config.save()
self.__setup_navigation()
@@ -1605,14 +1611,14 @@ def run_plugin(pdata, dbstate, uistate):
if pdata.ptype == REPORT:
ReportBase.report(dbstate, uistate, dbstate.active,
- eval('mod.' + pdata.reportclass),
- eval('mod.' + pdata.optionclass),
+ getattr(mod, pdata.reportclass),
+ getattr(mod, pdata.optionclass),
pdata.name, pdata.id,
pdata.category, pdata.require_active)
else:
gui_tool(dbstate, uistate,
- eval('mod.' + pdata.toolclass),
- eval('mod.' + pdata.optionclass),
+ getattr(mod, pdata.toolclass),
+ getattr(mod, pdata.optionclass),
pdata.name, pdata.id, pdata.category,
dbstate.db.request_rebuild)
diff --git a/src/gui/views/pageview.py b/src/gui/views/pageview.py
index 00a6200b9..d147b6421 100644
--- a/src/gui/views/pageview.py
+++ b/src/gui/views/pageview.py
@@ -39,6 +39,7 @@ _LOG = logging.getLogger('.pageview')
#
#----------------------------------------------------------------
import gtk
+from gettext import gettext as _
#----------------------------------------------------------------
#
@@ -79,6 +80,8 @@ class PageView(DbGUIElement):
self.dirty = True
self.active = False
self.func_list = {}
+ self.category = "Miscellaneous"
+ self.translated_category = _("Miscellaneous")
self.dbstate.connect('no-database', self.disable_action_group)
self.dbstate.connect('database-changed', self.enable_action_group)
@@ -180,6 +183,34 @@ class PageView(DbGUIElement):
"""
return self.title
+
+ def set_category(self, category):
+ """
+ Set the category of the view. This is used to define the text for the
+ button, and for the tab label.
+
+ category - a tuple of the form (category, translated-category)
+ """
+ if isinstance(category, tuple):
+ self.category = category[0]
+ self.translated_category = category[1]
+ else:
+ raise AttributeError("View category must be (name, translated-name)")
+
+ def get_category(self):
+ """
+ Return the category name of the view. This is used to define
+ the text for the button, and for the tab label.
+ """
+ return self.category
+
+ def get_translated_category(self):
+ """
+ Return the translated category name of the view. This is used
+ to define the text for the button, and for the tab label.
+ """
+ return self.translated_category
+
def get_display(self):
"""
Builds the graphical display, returning the top level widget.
diff --git a/src/plugins/view/fanchartview.gpr.py b/src/plugins/view/fanchartview.gpr.py
index 59a123fa3..356e3094e 100644
--- a/src/plugins/view/fanchartview.gpr.py
+++ b/src/plugins/view/fanchartview.gpr.py
@@ -1,12 +1,12 @@
register(VIEW,
id = 'fanchartview',
name = _("Fan Chart View"),
+ category = ("Charts", _("Charts")),
description = _("The view showing relations through a fanchart"),
version = '1.0',
status = UNSTABLE,
fname = 'fanchartview.py',
authors = [u"Douglas S. Blank"],
authors_email = ["doug.blank@gmail.com"],
- category = VIEW_PEDI,
viewclass = 'FanChartView',
)
diff --git a/src/plugins/view/geoview.gpr.py b/src/plugins/view/geoview.gpr.py
index ae5cf0624..be480907f 100644
--- a/src/plugins/view/geoview.gpr.py
+++ b/src/plugins/view/geoview.gpr.py
@@ -55,7 +55,7 @@ if not (TOOLKIT == NOWEB):
fname = 'geoview.py',
authors = [u"The Gramps project"],
authors_email = ["http://gramps-project.org"],
- category = VIEW_GEO,
+ category = ("Geography", _("Geography")),
viewclass = 'GeoView',
)
@@ -68,6 +68,6 @@ if not (TOOLKIT == NOWEB):
fname = 'htmlrenderer.py',
authors = [u"The Gramps project"],
authors_email = ["http://gramps-project.org"],
- category = VIEW_MISC,
+ category = ("Web", _("Web")),
viewclass = 'HtmlView',
)
diff --git a/src/plugins/view/placetreeview.gpr.py b/src/plugins/view/placetreeview.gpr.py
index 73f456d74..32d6f3fbe 100644
--- a/src/plugins/view/placetreeview.gpr.py
+++ b/src/plugins/view/placetreeview.gpr.py
@@ -7,6 +7,6 @@ register(VIEW,
fname = 'placetreeview.py',
authors = [u"Donald N. Allingham", u"Gary Burton", u"Nick Hall"],
authors_email = [""],
- category = VIEW_PLACE,
+ category = ("Places", _("Places")),
viewclass = 'PlaceTreeView',
)
diff --git a/src/plugins/view/view.gpr.py b/src/plugins/view/view.gpr.py
index 1e25aea69..c772de08c 100644
--- a/src/plugins/view/view.gpr.py
+++ b/src/plugins/view/view.gpr.py
@@ -36,7 +36,7 @@ status = STABLE,
fname = 'eventview.py',
authors = [u"The Gramps project"],
authors_email = ["http://gramps-project.org"],
-category = VIEW_EVENT,
+category = ("Events", _("Events")),
viewclass = 'EventView',
order = START,
)
@@ -50,7 +50,7 @@ status = STABLE,
fname = 'familyview.py',
authors = [u"The Gramps project"],
authors_email = ["http://gramps-project.org"],
-category = VIEW_FAMILY,
+category = ("Families", _("Families")),
viewclass = 'FamilyView',
order = START,
)
@@ -64,7 +64,7 @@ status = STABLE,
fname = 'grampletview.py',
authors = [u"The Gramps project"],
authors_email = ["http://gramps-project.org"],
-category = VIEW_MISC,
+category = ("Gramplets", _("Gramplets")),
viewclass = 'GrampletView',
order = START,
)
@@ -78,7 +78,7 @@ status = STABLE,
fname = 'mediaview.py',
authors = [u"The Gramps project"],
authors_email = ["http://gramps-project.org"],
-category = VIEW_MEDIA,
+category = ("Media", _("Media")),
viewclass = 'MediaView',
order = START,
)
@@ -92,7 +92,7 @@ status = STABLE,
fname = 'noteview.py',
authors = [u"The Gramps project"],
authors_email = ["http://gramps-project.org"],
-category = VIEW_NOTE,
+category = ("Notes", _("Notes")),
viewclass = 'NoteView',
order = START,
)
@@ -106,7 +106,7 @@ status = STABLE,
fname = 'relview.py',
authors = [u"The Gramps project"],
authors_email = ["http://gramps-project.org"],
-category = VIEW_REL,
+category = ("Relationships", _("Relationships")),
viewclass = 'RelationshipView',
order = START,
)
@@ -120,8 +120,9 @@ status = STABLE,
fname = 'pedigreeview.py',
authors = [u"The Gramps project"],
authors_email = ["http://gramps-project.org"],
-category = VIEW_PEDI,
+category = ("Charts", _("Charts")),
viewclass = 'PedigreeView',
+order = START,
)
register(VIEW,
@@ -133,7 +134,7 @@ status = STABLE,
fname = 'personview.py',
authors = [u"The Gramps project"],
authors_email = ["http://gramps-project.org"],
-category = VIEW_PERSON,
+category = ("People", _("People")),
viewclass = 'PersonView',
order = START,
)
@@ -147,7 +148,7 @@ status = STABLE,
fname = 'placeview.py',
authors = [u"The Gramps project"],
authors_email = ["http://gramps-project.org"],
-category = VIEW_PLACE,
+category = ("Places", _("Places")),
viewclass = 'PlaceView',
order = START,
)
@@ -161,7 +162,7 @@ status = STABLE,
fname = 'repoview.py',
authors = [u"The Gramps project"],
authors_email = ["http://gramps-project.org"],
-category = VIEW_REPO,
+category = ("Repositories", _("Repositories")),
viewclass = 'RepositoryView',
order = START,
)
@@ -175,7 +176,7 @@ status = STABLE,
fname = 'sourceview.py',
authors = [u"The Gramps project"],
authors_email = ["http://gramps-project.org"],
-category = VIEW_SOURCE,
+category = ("Sources", _("Sources")),
viewclass = 'SourceView',
order = START,
)