From 19522ec975b0af6831b32e44147a662af0f7ec67 Mon Sep 17 00:00:00 2001 From: Benny Malengier Date: Sun, 8 Nov 2009 16:41:49 +0000 Subject: [PATCH] GEPS 014: Plugin registration and management Also views are now plugins belonging to view category svn: r13528 --- po/POTFILES.in | 49 +++-- src/DataViews/Makefile.am | 36 ---- src/DataViews/__init__.py | 82 --------- src/DisplayModels/Makefile.am | 26 --- src/DisplayModels/__init__.py | 29 --- src/GrampsCfg.py | 30 --- src/Makefile.am | 2 - src/Selectors/_SelectEvent.py | 2 +- src/Selectors/_SelectFamily.py | 2 +- src/Selectors/_SelectNote.py | 2 +- src/Selectors/_SelectObject.py | 2 +- src/Selectors/_SelectPerson.py | 2 +- src/Selectors/_SelectPlace.py | 2 +- src/Selectors/_SelectRepository.py | 2 +- src/Selectors/_SelectSource.py | 2 +- src/config.py | 3 +- src/gen/plug/__init__.py | 6 +- src/gen/plug/_manager.py | 5 + src/gen/plug/_pluginreg.py | 54 +++++- src/gui/grampsgui.py | 52 +++++- src/gui/pluginmanager.py | 6 + src/gui/viewmanager.py | 155 ++++++++++------ src/gui/views/listview.py | 3 + src/gui/views/treemodels/Makefile.am | 8 + src/gui/views/treemodels/__init__.py | 9 + .../views/treemodels/eventmodel.py} | 0 .../views/treemodels/familymodel.py} | 0 .../views/treemodels/mediamodel.py} | 0 .../views/treemodels/notemodel.py} | 2 +- .../views/treemodels/peoplemodel.py} | 0 .../views/treemodels/placemodel.py} | 0 .../views/treemodels/repomodel.py} | 0 .../views/treemodels/sourcemodel.py} | 0 src/plugins/Makefile.am | 1 + src/plugins/tool/RelCalc.py | 2 +- src/plugins/view/Makefile.am | 35 ++++ .../view/eventview.py} | 21 ++- .../view/familyview.py} | 17 +- src/plugins/view/geoview.gpr.py | 69 +++++++ .../GeoView.py => plugins/view/geoview.py} | 0 .../view/grampletview.py} | 0 .../view/htmlrenderer.py} | 7 +- .../view/mediaview.py} | 4 +- .../NoteView.py => plugins/view/noteview.py} | 22 +-- .../view/pedigreeview.py} | 0 .../view/personview.py} | 8 +- .../view/placeview.py} | 4 +- .../view/relview.py} | 0 .../view/repoview.py} | 4 +- .../view/sourceview.py} | 4 +- src/plugins/view/view.gpr.py | 171 ++++++++++++++++++ 51 files changed, 588 insertions(+), 354 deletions(-) delete mode 100644 src/DataViews/Makefile.am delete mode 100644 src/DataViews/__init__.py delete mode 100644 src/DisplayModels/Makefile.am delete mode 100644 src/DisplayModels/__init__.py rename src/{DisplayModels/_EventModel.py => gui/views/treemodels/eventmodel.py} (100%) rename src/{DisplayModels/_FamilyModel.py => gui/views/treemodels/familymodel.py} (100%) rename src/{DisplayModels/_MediaModel.py => gui/views/treemodels/mediamodel.py} (100%) rename src/{DisplayModels/_NoteModel.py => gui/views/treemodels/notemodel.py} (98%) rename src/{DisplayModels/_PeopleModel.py => gui/views/treemodels/peoplemodel.py} (100%) rename src/{DisplayModels/_PlaceModel.py => gui/views/treemodels/placemodel.py} (100%) rename src/{DisplayModels/_RepositoryModel.py => gui/views/treemodels/repomodel.py} (100%) rename src/{DisplayModels/_SourceModel.py => gui/views/treemodels/sourcemodel.py} (100%) create mode 100644 src/plugins/view/Makefile.am rename src/{DataViews/EventView.py => plugins/view/eventview.py} (98%) rename src/{DataViews/FamilyList.py => plugins/view/familyview.py} (96%) create mode 100644 src/plugins/view/geoview.gpr.py rename src/{DataViews/GeoView.py => plugins/view/geoview.py} (100%) rename src/{DataViews/GrampletView.py => plugins/view/grampletview.py} (100%) rename src/{DataViews/HtmlRenderer.py => plugins/view/htmlrenderer.py} (99%) rename src/{DataViews/MediaView.py => plugins/view/mediaview.py} (99%) rename src/{DataViews/NoteView.py => plugins/view/noteview.py} (97%) rename src/{DataViews/PedigreeView.py => plugins/view/pedigreeview.py} (100%) rename src/{DataViews/PersonView.py => plugins/view/personview.py} (99%) rename src/{DataViews/PlaceView.py => plugins/view/placeview.py} (99%) rename src/{DataViews/RelationView.py => plugins/view/relview.py} (100%) rename src/{DataViews/RepositoryView.py => plugins/view/repoview.py} (98%) rename src/{DataViews/SourceView.py => plugins/view/sourceview.py} (98%) create mode 100644 src/plugins/view/view.gpr.py diff --git a/po/POTFILES.in b/po/POTFILES.in index b665581a1..1247b8ddc 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -199,7 +199,14 @@ src/gui/views/pageview.py # gui/views/treemodels - the GUI views package src/gui/views/treemodels/__init__.py +src/gui/views/treemodels/eventmodel.py +src/gui/views/treemodels/familymodel.py src/gui/views/treemodels/flatbasemodel.py +src/gui/views/treemodels/mediamodel.py +src/gui/views/treemodels/peoplemodel.py +src/gui/views/treemodels/placemodel.py +src/gui/views/treemodels/repomodel.py +src/gui/views/treemodels/sourcemodel.py src/gui/views/treemodels/treebasemodel.py # Simple API @@ -218,21 +225,6 @@ src/Merge/_MergePerson.py src/Merge/_MergePlace.py src/Merge/_MergeSource.py -# DataViews package -src/DataViews/EventView.py -src/DataViews/FamilyList.py -src/DataViews/GeoView.py -src/DataViews/__init__.py -src/DataViews/MediaView.py -src/DataViews/GrampletView.py -src/DataViews/NoteView.py -src/DataViews/PedigreeView.py -src/DataViews/PersonView.py -src/DataViews/PlaceView.py -src/DataViews/RelationView.py -src/DataViews/RepositoryView.py -src/DataViews/SourceView.py - # DateHandler package src/DateHandler/_Date_cs.py src/DateHandler/_Date_de.py @@ -259,16 +251,6 @@ src/docgen/OpenSpreadSheet.py src/docgen/SpreadSheetDoc.py src/docgen/TextBufDoc.py -# DisplayModels package -src/DisplayModels/_EventModel.py -src/DisplayModels/_FamilyModel.py -src/DisplayModels/_MediaModel.py -src/DisplayModels/_PeopleModel.py -src/DisplayModels/_PlaceModel.py -src/DisplayModels/_RepositoryModel.py -src/DisplayModels/_SourceModel.py -src/DisplayModels/__init__.py - # DisplayTabs package src/DisplayTabs/_AddrEmbedList.py src/DisplayTabs/_AddressModel.py @@ -546,6 +528,23 @@ src/plugins/tool/SoundGen.py src/plugins/tool/tools.gpr.py src/plugins/tool/Verify.py +#plugins/view directory +src/plugins/view/eventview.py +src/plugins/view/familyview.py +src/plugins/view/geoview.py +src/plugins/view/geoview.gpr.py +src/plugins/view/grampletview.py +src/plugins/view/htmlrenderer +src/plugins/view/mediaview.py +src/plugins/view/noteview.py +src/plugins/view/pedigreeview.py +src/plugins/view/personview.py +src/plugins/view/placeview.py +src/plugins/view/relview.py +src/plugins/view/repoview.py +src/plugins/view/sourceview.py +src/plugins/view/view.gpr.py + # plugins/webreport directory src/plugins/webreport/NarrativeWeb.py src/plugins/webreport/WebCal.py diff --git a/src/DataViews/Makefile.am b/src/DataViews/Makefile.am deleted file mode 100644 index 3f340ce6f..000000000 --- a/src/DataViews/Makefile.am +++ /dev/null @@ -1,36 +0,0 @@ -# This is the src/DataViews level Makefile for Gramps -# We could use GNU make's ':=' syntax for nice wildcard use, -# but that is not necessarily portable. -# If not using GNU make, then list all .py files individually - -pkgdatadir = $(datadir)/@PACKAGE@/DataViews - -pkgdata_PYTHON = \ - __init__.py\ - EventView.py\ - FamilyList.py\ - GeoView.py\ - GrampletView.py\ - MediaView.py\ - NoteView.py\ - PedigreeView.py\ - PersonView.py\ - PlaceView.py\ - RelationView.py\ - RepositoryView.py\ - SourceView.py - -pkgpyexecdir = @pkgpyexecdir@/DataViews -pkgpythondir = @pkgpythondir@/DataViews - -# Clean up all the byte-compiled files -MOSTLYCLEANFILES = *pyc *pyo - -GRAMPS_PY_MODPATH = "../" - -pycheck: - (export PYTHONPATH=$(GRAMPS_PY_MODPATH); \ - pychecker $(pkgdata_PYTHON)); - -pylint: - PYTHONPATH=$(GRAMPS_PY_MODPATH) pylint $(pkgdata_PYTHON) > pylint.out diff --git a/src/DataViews/__init__.py b/src/DataViews/__init__.py deleted file mode 100644 index 12a8405a4..000000000 --- a/src/DataViews/__init__.py +++ /dev/null @@ -1,82 +0,0 @@ -# Gramps - a GTK+/GNOME based genealogy program -# -# Copyright (C) 2001-2005 Donald N. Allingham -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# - -# $Id$ - -""" -Package init for the DataViews package. -""" - -from GrampletView import GrampletView -from PersonView import PersonView -from RelationView import RelationshipView -from FamilyList import FamilyListView -from PedigreeView import PedigreeView -from EventView import EventView -from SourceView import SourceView -from PlaceView import PlaceView -from MediaView import MediaView -from RepositoryView import RepositoryView -from NoteView import NoteView - -geopresent = True -try: - from GeoView import HtmlView, GeoView -except: - geopresent = False - -try: - import config - dv = config.get('interface.data-views') # list of strings - #remove GeoView so we do not try to eval it if import fails - if not geopresent and dv.count('GeoView') > 0: - dv.remove('GeoView') - DATA_VIEWS = [eval(view) for view in dv] - #add or remove GeoView if config says so - if geopresent and config.get('preferences.geoview') and \ - not GeoView in DATA_VIEWS: - DATA_VIEWS.append(GeoView) - config.get('interface.data-views').append('GeoView') - elif geopresent and not config.get('preferences.geoview') and \ - GeoView in DATA_VIEWS: - DATA_VIEWS.remove(GeoView) - config.get('interface.data-views').remove('GeoView') -except AttributeError: - # Fallback if bad config line, or if no Config system - DATA_VIEWS = [ - GrampletView, - PersonView, - RelationshipView, - FamilyListView, - PedigreeView, - EventView, - SourceView, - PlaceView, - MediaView, - RepositoryView, - NoteView, - ] - if geopresent: - DATA_VIEWS.append(GeoView) - -def get_views(): - """ - Return a list of PageView instances, in order - """ - return DATA_VIEWS diff --git a/src/DisplayModels/Makefile.am b/src/DisplayModels/Makefile.am deleted file mode 100644 index 039d4d147..000000000 --- a/src/DisplayModels/Makefile.am +++ /dev/null @@ -1,26 +0,0 @@ -# This is the src/DisplayModels level Makefile for Gramps - -pkgdatadir = $(datadir)/@PACKAGE@/DisplayModels - -pkgdata_PYTHON = \ - __init__.py \ - _EventModel.py \ - _FamilyModel.py \ - _MediaModel.py \ - _PeopleModel.py \ - _PlaceModel.py \ - _RepositoryModel.py \ - _NoteModel.py \ - _SourceModel.py - -pkgpyexecdir = @pkgpyexecdir@/DisplayModels -pkgpythondir = @pkgpythondir@/DisplayModels - -# Clean up all the byte-compiled files -MOSTLYCLEANFILES = *pyc *pyo - -GRAMPS_PY_MODPATH = "../" - -pycheck: - (export PYTHONPATH=$(GRAMPS_PY_MODPATH); \ - pychecker $(pkgdata_PYTHON)); diff --git a/src/DisplayModels/__init__.py b/src/DisplayModels/__init__.py deleted file mode 100644 index 47765fe84..000000000 --- a/src/DisplayModels/__init__.py +++ /dev/null @@ -1,29 +0,0 @@ -# -# Gramps - a GTK+/GNOME based genealogy program -# -# Copyright (C) 2000-2006 Donald N. Allingham -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# $Id$ - -from _PeopleModel import PeopleModel -from _FamilyModel import FamilyModel -from _EventModel import EventModel -from _SourceModel import SourceModel -from _PlaceModel import PlaceModel -from _MediaModel import MediaModel -from _RepositoryModel import RepositoryModel -from _NoteModel import NoteModel diff --git a/src/GrampsCfg.py b/src/GrampsCfg.py index 306c1b185..0c03cc8fa 100644 --- a/src/GrampsCfg.py +++ b/src/GrampsCfg.py @@ -151,10 +151,6 @@ class GrampsPreferences(ManagedWindow.ManagedWindow): MarkupLabel(_('Researcher'))) panel.append_page(self.add_color_panel(), MarkupLabel(_('Marker Colors'))) - import DataViews - if DataViews.geopresent: - panel.append_page(self.add_geoview_panel(), - MarkupLabel(_('Internet Maps'))) self.window.show_all() self.show() @@ -261,32 +257,6 @@ class GrampsPreferences(ManagedWindow.ManagedWindow): for widget in [self.comp_color, self.todo_color, self.custom_color]: widget.emit('color-set') - def add_geoview_panel(self): - table = gtk.Table(3, 8) - table.set_border_width(12) - table.set_col_spacings(12) - table.set_row_spacings(6) - - self.add_text( - table, _('You need a broadband internet connection to use ' - 'Internet mapping applications from within GRAMPS') - , 0) - - self.add_checkbox( - table, _('Add GeoView to GRAMPS showing internet maps based on ' - 'your data.'), - 1, 'preferences.geoview') - - self.add_text( - table, _('GeoView uses OpenStreetMap and Google maps provider.'), - 2) - - self.add_text( - table, _('You need to restart GRAMPS for above settings to take' - ' effect'), 5) - - return table - def add_name_panel(self): """ Name format settings panel diff --git a/src/Makefile.am b/src/Makefile.am index 1990c0a76..acc62e9fb 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -5,10 +5,8 @@ SUBDIRS = \ BasicUtils \ cli \ data \ - DataViews \ DateHandler \ DisplayTabs \ - DisplayModels \ docgen \ Editors \ Filters \ diff --git a/src/Selectors/_SelectEvent.py b/src/Selectors/_SelectEvent.py index b3ee61ea3..9fde6a9de 100644 --- a/src/Selectors/_SelectEvent.py +++ b/src/Selectors/_SelectEvent.py @@ -33,7 +33,7 @@ from gettext import gettext as _ # gramps modules # #------------------------------------------------------------------------- -from DisplayModels import EventModel +from gui.views.treemodels import EventModel from _BaseSelector import BaseSelector import config diff --git a/src/Selectors/_SelectFamily.py b/src/Selectors/_SelectFamily.py index d96cae55a..67c4b51ce 100644 --- a/src/Selectors/_SelectFamily.py +++ b/src/Selectors/_SelectFamily.py @@ -33,7 +33,7 @@ from gettext import gettext as _ # gramps modules # #------------------------------------------------------------------------- -from DisplayModels import FamilyModel +from gui.views.treemodels import FamilyModel from _BaseSelector import BaseSelector import config diff --git a/src/Selectors/_SelectNote.py b/src/Selectors/_SelectNote.py index b1f45c0fd..6d663b0c7 100644 --- a/src/Selectors/_SelectNote.py +++ b/src/Selectors/_SelectNote.py @@ -36,7 +36,7 @@ from gettext import gettext as _ # GRAMPS Modules # #------------------------------------------------------------------------- -from DisplayModels import NoteModel +from gui.views.treemodels import NoteModel from _BaseSelector import BaseSelector import config diff --git a/src/Selectors/_SelectObject.py b/src/Selectors/_SelectObject.py index 394b6b397..5339f706b 100644 --- a/src/Selectors/_SelectObject.py +++ b/src/Selectors/_SelectObject.py @@ -47,7 +47,7 @@ import gtk import const from Utils import media_path_full import ThumbNails -from DisplayModels import MediaModel +from gui.views.treemodels import MediaModel from _BaseSelector import BaseSelector import config diff --git a/src/Selectors/_SelectPerson.py b/src/Selectors/_SelectPerson.py index 7ba68e43e..21facef3c 100644 --- a/src/Selectors/_SelectPerson.py +++ b/src/Selectors/_SelectPerson.py @@ -34,7 +34,7 @@ import gtk # gramps modules # #------------------------------------------------------------------------- -from DisplayModels import PeopleModel +from gui.views.treemodels import PeopleModel from _BaseSelector import BaseSelector import config diff --git a/src/Selectors/_SelectPlace.py b/src/Selectors/_SelectPlace.py index 9a03bfb50..b3c39f390 100644 --- a/src/Selectors/_SelectPlace.py +++ b/src/Selectors/_SelectPlace.py @@ -33,7 +33,7 @@ from gettext import gettext as _ # gramps modules # #------------------------------------------------------------------------- -from DisplayModels import PlaceModel +from gui.views.treemodels import PlaceModel from _BaseSelector import BaseSelector import config diff --git a/src/Selectors/_SelectRepository.py b/src/Selectors/_SelectRepository.py index 9489026a9..07ff3af8e 100644 --- a/src/Selectors/_SelectRepository.py +++ b/src/Selectors/_SelectRepository.py @@ -33,7 +33,7 @@ from gettext import gettext as _ # gramps modules # #------------------------------------------------------------------------- -from DisplayModels import RepositoryModel +from gui.views.treemodels import RepositoryModel from _BaseSelector import BaseSelector import config diff --git a/src/Selectors/_SelectSource.py b/src/Selectors/_SelectSource.py index eb7c37ded..936892309 100644 --- a/src/Selectors/_SelectSource.py +++ b/src/Selectors/_SelectSource.py @@ -33,7 +33,7 @@ from gettext import gettext as _ # gramps modules # #------------------------------------------------------------------------- -from DisplayModels import SourceModel +from gui.views.treemodels import SourceModel from _BaseSelector import BaseSelector import config diff --git a/src/config.py b/src/config.py index d335e5f91..9fa0e8f2b 100644 --- a/src/config.py +++ b/src/config.py @@ -612,11 +612,10 @@ register('preferences.family-details', True) register('preferences.family-siblings', True) register('preferences.family-warn', True) register('preferences.fprefix', 'F%04d') -register('preferences.geoview', False) register('preferences.hide-ep-msg', False) register('preferences.invalid-date-format', "%s") register('preferences.iprefix', 'I%04d') -register('preferences.last-view', 0) +register('preferences.last-view', '') register('preferences.name-format', 1) register('preferences.no-given-text', "[%s]" % _("Missing Given Name")) register('preferences.no-record-text', "[%s]" % _("Missing Record")) diff --git a/src/gen/plug/__init__.py b/src/gen/plug/__init__.py index 93db307d4..7fcd831ef 100644 --- a/src/gen/plug/__init__.py +++ b/src/gen/plug/__init__.py @@ -29,7 +29,11 @@ from _pluginreg import (PluginData, PluginRegister, REPORT, TOOL, TOOL_UTILS, CATEGORY_QR_MISC, CATEGORY_QR_PERSON, CATEGORY_QR_FAMILY, CATEGORY_QR_EVENT, CATEGORY_QR_SOURCE, CATEGORY_QR_PLACE, CATEGORY_QR_REPOSITORY, CATEGORY_QR_NOTE, - CATEGORY_QR_DATE, PTYPE_STR ) + 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 + ) from _manager import BasePluginManager from _import import ImportPlugin from _export import ExportPlugin diff --git a/src/gen/plug/_manager.py b/src/gen/plug/_manager.py index 48b42d715..e4e970089 100644 --- a/src/gen/plug/_manager.py +++ b/src/gen/plug/_manager.py @@ -225,6 +225,11 @@ class BasePluginManager(object): """ return self.__pgr.quickreport_plugins() + def get_reg_views(self): + """ Return list of registered views + """ + return self.__pgr.view_plugins() + def get_reg_mapservices(self): """ Return list of registered mapservices """ diff --git a/src/gen/plug/_pluginreg.py b/src/gen/plug/_pluginreg.py index 40267db01..fa21ec6d1 100644 --- a/src/gen/plug/_pluginreg.py +++ b/src/gen/plug/_pluginreg.py @@ -102,6 +102,22 @@ 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_EVENT = 4 +VIEW_PLACE = 5 +VIEW_SOURCE = 6 +VIEW_REPO = 7 +VIEW_MEDIA = 8 +VIEW_NOTE = 9 +VIEW_GEO = 10 +VIEW_CAT = [VIEW_MISC, VIEW_PERSON, VIEW_REL, VIEW_FAMILY, VIEW_EVENT, + VIEW_PLACE, VIEW_SOURCE, VIEW_REPO, VIEW_MEDIA, VIEW_NOTE, + VIEW_GEO] + #possible quickreport categories CATEGORY_QR_MISC = -1 CATEGORY_QR_PERSON = 0 @@ -178,11 +194,12 @@ class PluginData(object): .. attribute:: report_modes The report modes: list of REPORT_MODE_GUI ,REPORT_MODE_BKI,REPORT_MODE_CLI - Attributes for REPORT and TOOL and QUICKREPORT plugins + Attributes for REPORT and TOOL and QUICKREPORT and VIEW plugins .. attribute:: category 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 Attributes for REPORT and TOOL plugins .. attribute:: optionclass @@ -243,6 +260,11 @@ class PluginData(object): Title to use for the gramplet, default = 'Gramplet' .. attribute:: help_url The URL where documentation for the URL can be found + + Attributes for VIEW plugins + .. attribute:: viewclass + A class of type ViewCreator that holds the needed info of the + view to be created: icon, viewclass that derives from pageview, ... """ def __init__(self): @@ -296,6 +318,8 @@ class PluginData(object): self._expand = False self._gramplet_title = _('Gramplet') self._help_url = None + #VIEW attr + self._viewclass = None def _set_id(self, id): self._id = id @@ -353,6 +377,8 @@ class PluginData(object): self._category = TOOL_UTILS elif self._ptype == QUICKREPORT: self._category = CATEGORY_QR_PERSON + elif self._ptype == VIEW: + self._category = VIEW_MISC #if self._ptype == DOCGEN: # self._load_on_reg = True @@ -463,8 +489,9 @@ class PluginData(object): #REPORT OR TOOL OR QUICKREPORT attributes def _set_category(self, category): if not (self._ptype == REPORT or self._ptype == TOOL or - self._ptype == QUICKREPORT): - raise ValueError, 'category may only be set for REPORT/TOOL plugins' + self._ptype == QUICKREPORT or self._ptype == VIEW): + raise ValueError, 'category may only be set for ' \ + 'REPORT/TOOL/QUICKREPORT/VIEW plugins' self._category = category def _get_category(self): @@ -690,6 +717,16 @@ class PluginData(object): gramplet_title = property(_get_gramplet_title, _set_gramplet_title) help_url = property(_get_help_url, _set_help_url) + def _set_viewclass(self, viewclass): + if not self._ptype == VIEW: + raise ValueError, 'viewclass may only be set for VIEW plugins' + self._viewclass = viewclass + + def _get_viewclass(self): + return self._viewclass + + viewclass = property(_get_viewclass, _set_viewclass) + def newplugin(): """ Function to create a new plugindata object, add it to list of @@ -808,6 +845,17 @@ 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_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 7969cc4b5..8d3f6e5b4 100644 --- a/src/gui/grampsgui.py +++ b/src/gui/grampsgui.py @@ -61,7 +61,14 @@ import gobject 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_SOURCE, VIEW_REPO, VIEW_MEDIA, + VIEW_NOTE, VIEW_GEO) +DEFAULT_SIDEBAR_ORDER = (VIEW_MISC, VIEW_PERSON, VIEW_REL, VIEW_FAMILY, + VIEW_EVENT, VIEW_PLACE, VIEW_SOURCE, VIEW_REPO, VIEW_MEDIA, + VIEW_NOTE, VIEW_GEO) #------------------------------------------------------------------------- # # Functions @@ -221,6 +228,41 @@ def _display_welcome_message(): # config.set('behavior.betawarn', True) config.set('behavior.betawarn', config.get('behavior.betawarn')) +def construct_view_order(): + """ + Query the views and determine what views to show and in which order + + :Returns: a list of lists containing tuples (view_id, viewclass) + """ + pmgr = GuiPluginManager.get_instance() + view_list = pmgr.get_reg_views() + viewstoshow = {} + for pdata in view_list: + mod = pmgr.load_plugin(pdata) + if not mod: + #import of plugin failed + ErrorDialog( + _('Failed Loading View'), + _('The view %(name)s did not load. See Help Menu, Plugin Status' + ' for more info.\nUse http://bugs.gramps-project.org to' + ' submit bugs of official views, contact the view ' + 'author (%(firstauthoremail)s) otherwise. ') % { + 'name': pdata.name, + 'firstauthoremail': pdata.authors_email[0] if + pdata.authors_email else '...'}) + continue + viewclass = eval('mod.' + pdata.viewclass) + if pdata.category in viewstoshow: + viewstoshow[pdata.category].append((pdata.id, viewclass)) + else: + viewstoshow[pdata.category] = [(pdata.id, viewclass)] + + resultorder = [] + for item in DEFAULT_SIDEBAR_ORDER: + if item in viewstoshow: + resultorder.append(viewstoshow[item]) + return resultorder + #------------------------------------------------------------------------- # # Main Gramps class @@ -237,18 +279,18 @@ class Gramps(object): def __init__(self, argparser): import DbState from viewmanager import ViewManager - import DataViews from cli.arghandler import ArgHandler import TipOfDay register_stock_icons() dbstate = DbState.DbState() - self.vm = ViewManager(dbstate) - for view in DataViews.get_views(): - self.vm.register_view(view) + self.vm = ViewManager(dbstate, DEFAULT_SIDEBAR_ORDER) - self.vm.init_interface() + #now we determine which views are present, which to show, and we + #instruct the viewmanager to show them + vieworder = construct_view_order() + self.vm.init_interface(vieworder) #act based on the given arguments ah = ArgHandler(dbstate, argparser, self.vm, self.argerrorfunc, diff --git a/src/gui/pluginmanager.py b/src/gui/pluginmanager.py index b3171975e..61600cbc9 100644 --- a/src/gui/pluginmanager.py +++ b/src/gui/pluginmanager.py @@ -144,6 +144,12 @@ class GuiPluginManager(gen.utils.Callback): """ return [plg for plg in self.basemgr.get_reg_tools(gui) if plg.id not in self.__hidden_plugins] + + def get_reg_views(self): + """ Return list of non hidden registered views + """ + return [plg for plg in self.basemgr.get_reg_views() + if plg.id not in self.__hidden_plugins] def get_reg_quick_reports(self): """ Return list of non hidden registered quick reports diff --git a/src/gui/viewmanager.py b/src/gui/viewmanager.py index 0dedb4f1c..ad7fc10de 100644 --- a/src/gui/viewmanager.py +++ b/src/gui/viewmanager.py @@ -199,10 +199,15 @@ class ViewManager(CLIManager): into the gtk.UIManager to control all menus and actions. The ViewManager controls the various Views within the GRAMPS programs. + Views are organised in categories. The categories can be accessed via + a sidebar. Within a category, the different views are accesible via the + toolbar of view menu. + A View is a particular way of looking a information in the GRAMPS main window. Each view is separate from the others, and has no knowledge of - the others. All Views are held in the DisplayViews module. Examples of - current views include: + the others. + + Examples of current views include: - Person View - Relationship View @@ -212,11 +217,17 @@ class ViewManager(CLIManager): The View Manager does not have to know the number of views, the type of views, or any other details about the views. It simply provides the method of containing each view, and switching between the views. - + """ - def __init__(self, dbstate): + def __init__(self, dbstate, view_category_order): + """ + The viewmanager is initialiste with a dbstate on which GRAMPS is + working, and a fixed view_category_order, which is the order in which + the view categories are accessible in the sidebar. + """ CLIManager.__init__(self, dbstate, False) + self.view_category_order = view_category_order #set pluginmanager to GUI one self._pmgr = GuiPluginManager.get_instance() self.page_is_changing = False @@ -277,6 +288,7 @@ class ViewManager(CLIManager): self.notebook.set_scrollable(True) self.notebook.set_show_tabs(False) self.notebook.show() + self.notebook_cat = [] self.__init_lists() self.__build_ui_manager() @@ -546,10 +558,11 @@ class ViewManager(CLIManager): else: self.notebook.set_current_page(new_page) - def init_interface(self): + def init_interface(self, vieworder): """ - Initialize the interface, creating the pages + Initialize the interface, creating the pages as given in vieworder """ + self.views = vieworder self.__init_lists() self.__create_pages() @@ -799,12 +812,6 @@ class ViewManager(CLIManager): config.set('interface.fullscreen', False) config.save() - def register_view(self, view): - """ - Allow other objects to register a view with the View Manager - """ - self.views.append(view) - def __switch_page_on_dnd(self, widget, context, xpos, ypos, time, page_no): """ Switches the page based on drag and drop @@ -818,8 +825,9 @@ class ViewManager(CLIManager): """ Calls on_delete() for each view """ - for page in self.pages: - page.on_delete() + for pages in self.pages: + for page in pages: + page.on_delete() def __create_pages(self): """ @@ -831,55 +839,87 @@ class ViewManager(CLIManager): use_text = config.get('interface.sidebar-text') index = 0 - for page_def in self.views: - page = page_def(self.dbstate, self.uistate) - page_title = page.get_title() - page_stock = page.get_stock() + for cat_views in self.views: + #for every category, we create a button in the sidebar and a main + #workspace in which to show the view + first = True + nr_views = len(cat_views) + self.pages.append([]) + for id, page_def in cat_views: + page = page_def(self.dbstate, self.uistate) + page_title = page.get_title() + page_stock = page.get_stock() + if first: + #the first page of this category, used to obtain + #category workspace notebook + notebook = gtk.Notebook() + notebook.set_scrollable(False) + notebook.set_show_tabs(False) + notebook.show() + self.notebook_cat.append(notebook) + # create icon/label for workspace notebook + hbox = gtk.HBox() + 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.show_all() + page_cat = self.notebook.append_page(notebook, hbox) + # Enable view switching during DnD + hbox.drag_dest_set(0, [], 0) + hbox.connect('drag_motion', self.__switch_page_on_dnd, + page_cat) - # create icon/label for notebook - hbox = gtk.HBox() - 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.show_all() + # create the button and add it to the sidebar + button = self.__make_sidebar_button(use_text, index, + page_title, page_stock) - # create notebook page and add to notebook - page.define_actions() - page_display = page.get_display() - page_display.show_all() - page.post() - page_no = self.notebook.append_page(page_display, hbox) - self.pages.append(page) - - # Enable view switching during DnD - hbox.drag_dest_set(0, [], 0) - hbox.connect('drag_motion', self.__switch_page_on_dnd, page_no) + index += 1 + self.bbox.pack_start(button, False) + self.buttons.append(button) + + # Enable view switching during DnD + button.drag_dest_set(0, [], 0) + button.connect('drag_motion', self.__switch_page_on_dnd, + page_cat) - # create the button and add it to the sidebar - button = self.__make_sidebar_button(use_text, index, - page_title, page_stock) + # create view page and add to category notebook + page.define_actions() + page_display = page.get_display() + page_display.show_all() + page.post() + page_no = self.notebook_cat[-1].append_page(page_display, + gtk.Label(page_title)) + self.pages[-1].append(page) - index += 1 - self.bbox.pack_start(button, False) - self.buttons.append(button) - - # Enable view switching during DnD - button.drag_dest_set(0, [], 0) - button.connect('drag_motion', self.__switch_page_on_dnd, page_no) + first = False + current_cat = 0 + current_cat_view = 0 use_current = config.get('preferences.use-last-view') if use_current: - current_page = config.get('preferences.last-view') - if current_page >= len(self.pages): - current_page = 0 - else: - current_page = 0 + current_page_id = config.get('preferences.last-view') + found = False + for cat_views in self.views: + current_cat_view = 0 + for id, page_def in cat_views: + if id == current_page_id: + found = True + break + else: + current_cat_view += 1 + if found: + break + current_cat += 1 + if not found: + current_cat = 0 + current_cat_view = 0 - self.active_page = self.pages[current_page] - self.buttons[current_page].set_active(True) + self.active_page = self.pages[current_cat][current_cat_view] + self.buttons[current_cat].set_active(True) self.active_page.set_active() - self.notebook.set_current_page(current_page) + self.notebook.set_current_page(current_cat) + self.notebook_cat[current_cat].set_current_page(current_cat_view) def __make_sidebar_button(self, use_text, index, page_title, page_stock): """ @@ -1018,18 +1058,18 @@ class ViewManager(CLIManager): """ if num == -1: num = self.notebook.get_current_page() + num_view = self.notebook_cat[num].get_current_page() # set button of current page active self.__set_active_button(num) if self.dbstate.open: - self.__disconnect_previous_page() if len(self.pages) > 0: - self.active_page = self.pages[num] + self.active_page = self.pages[num][num_view] self.active_page.set_active() - config.set('preferences.last-view', num) + config.set('preferences.last-view', self.views[num][num_view][0]) config.save() self.__setup_navigation() @@ -1057,7 +1097,6 @@ class ViewManager(CLIManager): InfoDialog(_('Import Statistics'), infotxt, self.window) self.__post_load() - def __open_activate(self, obj): """ Called when the Open button is clicked, opens the DbManager diff --git a/src/gui/views/listview.py b/src/gui/views/listview.py index a119c4110..441d0b64a 100644 --- a/src/gui/views/listview.py +++ b/src/gui/views/listview.py @@ -213,6 +213,9 @@ class ListView(NavigationView): self.list.append_column(column) index += 1 + def __build_tree(self): + Utils.profile(self._build_tree) + def build_tree(self): if self.active: cput0 = time.clock() diff --git a/src/gui/views/treemodels/Makefile.am b/src/gui/views/treemodels/Makefile.am index b4049a5b6..8499b308c 100644 --- a/src/gui/views/treemodels/Makefile.am +++ b/src/gui/views/treemodels/Makefile.am @@ -7,7 +7,15 @@ pkgdatadir = $(datadir)/@PACKAGE@/gui/views/treemodels pkgdata_PYTHON = \ __init__.py \ + eventmodel.py \ + familymodel.py \ flatbasemodel.py \ + mediamodel.py \ + notemodel.py \ + peoplemodel.py \ + placemodel.py \ + repomodel.py \ + sourcemodel.py \ treebasemodel.py pkgpyexecdir = @pkgpyexecdir@/gui/views/treemodels diff --git a/src/gui/views/treemodels/__init__.py b/src/gui/views/treemodels/__init__.py index cb923d8b2..32c48e93b 100644 --- a/src/gui/views/treemodels/__init__.py +++ b/src/gui/views/treemodels/__init__.py @@ -22,3 +22,12 @@ """ Package init for the treemodels package. """ + +from peoplemodel import PeopleModel +from familymodel import FamilyModel +from eventmodel import EventModel +from sourcemodel import SourceModel +from placemodel import PlaceModel +from mediamodel import MediaModel +from repomodel import RepositoryModel +from notemodel import NoteModel diff --git a/src/DisplayModels/_EventModel.py b/src/gui/views/treemodels/eventmodel.py similarity index 100% rename from src/DisplayModels/_EventModel.py rename to src/gui/views/treemodels/eventmodel.py diff --git a/src/DisplayModels/_FamilyModel.py b/src/gui/views/treemodels/familymodel.py similarity index 100% rename from src/DisplayModels/_FamilyModel.py rename to src/gui/views/treemodels/familymodel.py diff --git a/src/DisplayModels/_MediaModel.py b/src/gui/views/treemodels/mediamodel.py similarity index 100% rename from src/DisplayModels/_MediaModel.py rename to src/gui/views/treemodels/mediamodel.py diff --git a/src/DisplayModels/_NoteModel.py b/src/gui/views/treemodels/notemodel.py similarity index 98% rename from src/DisplayModels/_NoteModel.py rename to src/gui/views/treemodels/notemodel.py index 041b4d641..7bb7caab7 100644 --- a/src/DisplayModels/_NoteModel.py +++ b/src/gui/views/treemodels/notemodel.py @@ -25,7 +25,7 @@ # #------------------------------------------------------------------------- import logging -_LOG = logging.getLogger(".DisplayModels.NoteModel") +_LOG = logging.getLogger(".gui.notemodel") #------------------------------------------------------------------------- # diff --git a/src/DisplayModels/_PeopleModel.py b/src/gui/views/treemodels/peoplemodel.py similarity index 100% rename from src/DisplayModels/_PeopleModel.py rename to src/gui/views/treemodels/peoplemodel.py diff --git a/src/DisplayModels/_PlaceModel.py b/src/gui/views/treemodels/placemodel.py similarity index 100% rename from src/DisplayModels/_PlaceModel.py rename to src/gui/views/treemodels/placemodel.py diff --git a/src/DisplayModels/_RepositoryModel.py b/src/gui/views/treemodels/repomodel.py similarity index 100% rename from src/DisplayModels/_RepositoryModel.py rename to src/gui/views/treemodels/repomodel.py diff --git a/src/DisplayModels/_SourceModel.py b/src/gui/views/treemodels/sourcemodel.py similarity index 100% rename from src/DisplayModels/_SourceModel.py rename to src/gui/views/treemodels/sourcemodel.py diff --git a/src/plugins/Makefile.am b/src/plugins/Makefile.am index f868787f4..37fa511c0 100644 --- a/src/plugins/Makefile.am +++ b/src/plugins/Makefile.am @@ -16,6 +16,7 @@ SUBDIRS = \ rel \ textreport \ tool \ + view \ webreport pkgdatadir = $(datadir)/@PACKAGE@/plugins diff --git a/src/plugins/tool/RelCalc.py b/src/plugins/tool/RelCalc.py index 3f58517ba..f1690c90d 100644 --- a/src/plugins/tool/RelCalc.py +++ b/src/plugins/tool/RelCalc.py @@ -44,7 +44,7 @@ import gtk #------------------------------------------------------------------------- from BasicUtils import name_displayer import ManagedWindow -from DisplayModels import PeopleModel +from gui.views.treemodels import PeopleModel import Relationship from QuestionDialog import ErrorDialog diff --git a/src/plugins/view/Makefile.am b/src/plugins/view/Makefile.am new file mode 100644 index 000000000..2f31f4c07 --- /dev/null +++ b/src/plugins/view/Makefile.am @@ -0,0 +1,35 @@ +# This is the src/plugins/quickview level Makefile for Gramps +# We could use GNU make's ':=' syntax for nice wildcard use, +# but that is not necessarily portable. +# If not using GNU make, then list all .py files individually + +pkgdatadir = $(datadir)/@PACKAGE@/plugins/view + +pkgdata_PYTHON = \ + eventview.py \ + familyview.py \ + geoview.py \ + geoview.gpr.py \ + grampletview.py \ + htmlrenderer \ + mediaview.py \ + noteview.py \ + pedigreeview.py \ + personview.py \ + placeview.py \ + relview.py \ + repoview.py \ + sourceview.py \ + view.gpr.py + +pkgpyexecdir = @pkgpyexecdir@/plugins/view +pkgpythondir = @pkgpythondir@/plugins/view + +# Clean up all the byte-compiled files +MOSTLYCLEANFILES = *pyc *pyo + +GRAMPS_PY_MODPATH = "../../" + +pycheck: + (export PYTHONPATH=$(GRAMPS_PY_MODPATH); \ + pychecker $(pkgdata_PYTHON)); diff --git a/src/DataViews/EventView.py b/src/plugins/view/eventview.py similarity index 98% rename from src/DataViews/EventView.py rename to src/plugins/view/eventview.py index 8f6b1fe1e..dcdc232b5 100644 --- a/src/DataViews/EventView.py +++ b/src/plugins/view/eventview.py @@ -24,6 +24,15 @@ Provide the event view. """ +#------------------------------------------------------------------------- +# +# Standard python modules +# +#------------------------------------------------------------------------- +from gettext import gettext as _ +import logging +_LOG = logging.getLogger(".plugins.eventview") + #------------------------------------------------------------------------- # # GTK/Gnome modules @@ -38,7 +47,7 @@ import gtk #------------------------------------------------------------------------- import gen.lib from gui.views.listview import ListView -import DisplayModels +from gui.views.treemodels import EventModel import Utils import Errors import Bookmarks @@ -48,14 +57,6 @@ from Editors import EditEvent, DelEventQuery from Filters.SideBar import EventSidebarFilter from gen.plug import CATEGORY_QR_EVENT -#------------------------------------------------------------------------- -# -# internationalization -# -#------------------------------------------------------------------------- -from gettext import gettext as _ - - #------------------------------------------------------------------------- # # EventView @@ -95,7 +96,7 @@ class EventView(ListView): ListView.__init__( self, _('Events'), dbstate, uistate, EventView.COLUMN_NAMES, len(EventView.COLUMN_NAMES), - DisplayModels.EventModel, + EventModel, signal_map, dbstate.db.get_event_bookmarks(), Bookmarks.EventBookmarks, multiple=True, diff --git a/src/DataViews/FamilyList.py b/src/plugins/view/familyview.py similarity index 96% rename from src/DataViews/FamilyList.py rename to src/plugins/view/familyview.py index 810160c0e..e8d628bed 100644 --- a/src/DataViews/FamilyList.py +++ b/src/plugins/view/familyview.py @@ -20,7 +20,7 @@ # $Id$ """ -FamilyList View. +Family View. """ #------------------------------------------------------------------------- @@ -29,7 +29,8 @@ FamilyList View. # #------------------------------------------------------------------------- from gettext import gettext as _ - +import logging +_LOG = logging.getLogger(".plugins.eventview") #------------------------------------------------------------------------- # # GNOME/GTK+ modules @@ -44,7 +45,7 @@ import gtk #------------------------------------------------------------------------- import gen.lib from gui.views.listview import ListView -import DisplayModels +from gui.views.treemodels import FamilyModel import Bookmarks import Errors import config @@ -53,10 +54,10 @@ from gen.plug import CATEGORY_QR_FAMILY #------------------------------------------------------------------------- # -# FamilyListView +# FamilyView # #------------------------------------------------------------------------- -class FamilyListView(ListView): +class FamilyView(ListView): COLUMN_NAMES = [ _('ID'), @@ -84,8 +85,8 @@ class FamilyListView(ListView): ListView.__init__( self, _('Families'), dbstate, uistate, - FamilyListView.COLUMN_NAMES, len(FamilyListView.COLUMN_NAMES), - DisplayModels.FamilyModel, + FamilyView.COLUMN_NAMES, len(FamilyView.COLUMN_NAMES), + FamilyModel, signal_map, dbstate.db.get_family_bookmarks(), Bookmarks.FamilyBookmarks, filter_class=FamilySidebarFilter) @@ -110,7 +111,7 @@ class FamilyListView(ListView): _('Select Family Columns'), self.uistate, self.dbstate.db.get_family_list_column_order(), - FamilyListView.COLUMN_NAMES, + FamilyView.COLUMN_NAMES, self.set_column_order) def get_stock(self): diff --git a/src/plugins/view/geoview.gpr.py b/src/plugins/view/geoview.gpr.py new file mode 100644 index 000000000..c92f8ebcc --- /dev/null +++ b/src/plugins/view/geoview.gpr.py @@ -0,0 +1,69 @@ +# encoding:utf-8 +# +# Gramps - a GTK+/GNOME based genealogy program +# +# Copyright (C) 2009 Benny Malengier +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +# $Id$ + +#------------------------------------------------------------------------ +# +# Geoview and HtmlView +# +#------------------------------------------------------------------------ + +TOOLKIT = NOWEB + +try: + import webkit + TOOLKIT = WEBKIT +except: + try: + import gtkmozembed + TOOLKIT = MOZILLA + except: + pass + +#no interfaces present, we do not register these plugins +if not (TOOLKIT == NOWEB): + register(VIEW, + id = 'geoview', + name = _("Geographic View"), + description = _("The view showing events on an interactive internet map " + "(internet connection needed"), + version = '1.0', + status = STABLE, + fname = 'geoview.py', + authors = [u"The GRAMPS project"], + authors_email = ["http://gramps-project.org"], + category = VIEW_GEO, + viewclass = 'GeoView', + ) + + register(VIEW, + id = 'htmlview', + name = _("Html View"), + description = _("A view allowing to see html pages embedded in GRAMPS"), + version = '1.0', + status = UNSTABLE, + fname = 'htmlrenderer.py', + authors = [u"The GRAMPS project"], + authors_email = ["http://gramps-project.org"], + category = VIEW_MISC, + viewclass = 'HtmlView', + ) diff --git a/src/DataViews/GeoView.py b/src/plugins/view/geoview.py similarity index 100% rename from src/DataViews/GeoView.py rename to src/plugins/view/geoview.py diff --git a/src/DataViews/GrampletView.py b/src/plugins/view/grampletview.py similarity index 100% rename from src/DataViews/GrampletView.py rename to src/plugins/view/grampletview.py diff --git a/src/DataViews/HtmlRenderer.py b/src/plugins/view/htmlrenderer.py similarity index 99% rename from src/DataViews/HtmlRenderer.py rename to src/plugins/view/htmlrenderer.py index d191b3b70..0b2dc9af0 100644 --- a/src/DataViews/HtmlRenderer.py +++ b/src/plugins/view/htmlrenderer.py @@ -61,11 +61,11 @@ from const import TEMP_DIR #------------------------------------------------------------------------- def get_identity(): - if Utils.lin: + if Utils.lin(): platform = "X11" - elif Utils.win: + elif Utils.win(): platform = "Windows" - elif Utils.mac: + elif Utils.mac(): platform = "Macintosh" else: platform = "Unknown" @@ -112,7 +112,6 @@ except: #no interfaces present, raise Error so that options for GeoView do not show if TOOLKIT == NOWEB : - config.set('preferences.geoview', False) raise ImportError, 'No GTK html plugin found' #------------------------------------------------------------------------- diff --git a/src/DataViews/MediaView.py b/src/plugins/view/mediaview.py similarity index 99% rename from src/DataViews/MediaView.py rename to src/plugins/view/mediaview.py index 492e8165e..cef7bcac1 100644 --- a/src/DataViews/MediaView.py +++ b/src/plugins/view/mediaview.py @@ -48,7 +48,7 @@ import gtk #------------------------------------------------------------------------- from gui.utils import open_file_with_default_application from gui.views.listview import ListView -import DisplayModels +from gui.views.treemodels import MediaModel import ThumbNails import const import config @@ -104,7 +104,7 @@ class MediaView(ListView): ListView.__init__( self, _('Media'), dbstate, uistate, MediaView.COLUMN_NAMES, len(MediaView.COLUMN_NAMES), - DisplayModels.MediaModel, + MediaModel, signal_map, dbstate.db.get_media_bookmarks(), Bookmarks.MediaBookmarks, filter_class=MediaSidebarFilter, multiple=True) diff --git a/src/DataViews/NoteView.py b/src/plugins/view/noteview.py similarity index 97% rename from src/DataViews/NoteView.py rename to src/plugins/view/noteview.py index 78b2fffa4..f12ae69a9 100644 --- a/src/DataViews/NoteView.py +++ b/src/plugins/view/noteview.py @@ -21,8 +21,16 @@ # $Id$ """ -Place View. +Note View. """ +#------------------------------------------------------------------------- +# +# python modules +# +#------------------------------------------------------------------------- +from gettext import gettext as _ +import logging +_LOG = logging.getLogger(".plugins.noteview") #------------------------------------------------------------------------- # @@ -37,7 +45,7 @@ import gtk # #------------------------------------------------------------------------- from gui.views.listview import ListView -import DisplayModels +from gui.views.treemodels import NoteModel import Utils import Errors import Bookmarks @@ -48,14 +56,6 @@ from DdTargets import DdTargets from Filters.SideBar import NoteSidebarFilter from Editors import EditNote, DeleteNoteQuery -#------------------------------------------------------------------------- -# -# internationalization -# -#------------------------------------------------------------------------- -from gettext import gettext as _ - - #------------------------------------------------------------------------- # # NoteView @@ -91,7 +91,7 @@ class NoteView(ListView): ListView.__init__( self, _('Notes'), dbstate, uistate, NoteView.COLUMN_NAMES, - len(NoteView.COLUMN_NAMES), DisplayModels.NoteModel, signal_map, + len(NoteView.COLUMN_NAMES), NoteModel, signal_map, dbstate.db.get_note_bookmarks(), Bookmarks.NoteBookmarks, filter_class=NoteSidebarFilter, diff --git a/src/DataViews/PedigreeView.py b/src/plugins/view/pedigreeview.py similarity index 100% rename from src/DataViews/PedigreeView.py rename to src/plugins/view/pedigreeview.py diff --git a/src/DataViews/PersonView.py b/src/plugins/view/personview.py similarity index 99% rename from src/DataViews/PersonView.py rename to src/plugins/view/personview.py index 356139d85..a04b255ca 100644 --- a/src/DataViews/PersonView.py +++ b/src/plugins/view/personview.py @@ -46,9 +46,9 @@ _LOG = logging.getLogger(".gui.personview") # #------------------------------------------------------------------------- import gen.lib -import gui.views.pageview as PageView +from gui.views.pageview import NAVIGATION_PERSON from gui.views.listview import ListView -import DisplayModels +from gui.views.treemodels import PeopleModel import Utils from BasicUtils import name_displayer from QuestionDialog import ErrorDialog, QuestionDialog @@ -108,7 +108,7 @@ class PersonView(ListView): ListView.__init__( self, _('People'), dbstate, uistate, PersonView.COLUMN_NAMES, len(PersonView.COLUMN_NAMES), - DisplayModels.PeopleModel, + PeopleModel, signal_map, dbstate.db.get_bookmarks(), Bookmarks.Bookmarks, multiple=True, @@ -126,7 +126,7 @@ class PersonView(ListView): self.dbstate.db.set_person_column_order(clist) def navigation_type(self): - return PageView.NAVIGATION_PERSON + return NAVIGATION_PERSON def get_bookmarks(self): """ diff --git a/src/DataViews/PlaceView.py b/src/plugins/view/placeview.py similarity index 99% rename from src/DataViews/PlaceView.py rename to src/plugins/view/placeview.py index 1ce37a5bf..3ecaca569 100644 --- a/src/DataViews/PlaceView.py +++ b/src/plugins/view/placeview.py @@ -45,7 +45,7 @@ import gtk #------------------------------------------------------------------------- import gen.lib from gui.views.listview import ListView -import DisplayModels +from gui.views.treemodels import PlaceModel from gui.utils import add_menuitem import Errors import Bookmarks @@ -111,7 +111,7 @@ class PlaceView(ListView): ListView.__init__( self, _('Places'), dbstate, uistate, PlaceView.COLUMN_NAMES, len(PlaceView.COLUMN_NAMES), - DisplayModels.PlaceModel, signal_map, + PlaceModel, signal_map, dbstate.db.get_place_bookmarks(), Bookmarks.PlaceBookmarks, multiple=True, diff --git a/src/DataViews/RelationView.py b/src/plugins/view/relview.py similarity index 100% rename from src/DataViews/RelationView.py rename to src/plugins/view/relview.py diff --git a/src/DataViews/RepositoryView.py b/src/plugins/view/repoview.py similarity index 98% rename from src/DataViews/RepositoryView.py rename to src/plugins/view/repoview.py index ec01e695f..b99c5eb6e 100644 --- a/src/DataViews/RepositoryView.py +++ b/src/plugins/view/repoview.py @@ -38,7 +38,7 @@ import gtk #------------------------------------------------------------------------- import gen.lib from gui.views.listview import ListView -import DisplayModels +from gui.views.treemodels import RepositoryModel import Utils import Bookmarks import Errors @@ -102,7 +102,7 @@ class RepositoryView(ListView): ListView.__init__( self, _('Repositories'), dbstate, uistate, RepositoryView.COLUMN_NAMES, len(RepositoryView.COLUMN_NAMES), - DisplayModels.RepositoryModel, signal_map, + RepositoryModel, signal_map, dbstate.db.get_repo_bookmarks(), Bookmarks.RepoBookmarks, multiple=True, filter_class=RepoSidebarFilter) diff --git a/src/DataViews/SourceView.py b/src/plugins/view/sourceview.py similarity index 98% rename from src/DataViews/SourceView.py rename to src/plugins/view/sourceview.py index 5a54035bd..12d2eac82 100644 --- a/src/DataViews/SourceView.py +++ b/src/plugins/view/sourceview.py @@ -39,7 +39,7 @@ import gtk import gen.lib import config from gui.views.listview import ListView -import DisplayModels +from gui.views.treemodels import SourceModel import Utils import Bookmarks import Errors @@ -94,7 +94,7 @@ class SourceView(ListView): ListView.__init__( self, _('Sources'), dbstate, uistate, SourceView.COLUMN_NAMES, len(SourceView.COLUMN_NAMES), - DisplayModels.SourceModel, signal_map, + SourceModel, signal_map, dbstate.db.get_source_bookmarks(), Bookmarks.SourceBookmarks, multiple=True, filter_class=SourceSidebarFilter) diff --git a/src/plugins/view/view.gpr.py b/src/plugins/view/view.gpr.py new file mode 100644 index 000000000..be8135511 --- /dev/null +++ b/src/plugins/view/view.gpr.py @@ -0,0 +1,171 @@ +# encoding:utf-8 +# +# Gramps - a GTK+/GNOME based genealogy program +# +# Copyright (C) 2009 Benny Malengier +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +# $Id$ + +#------------------------------------------------------------------------ +# +# default views of GRAMPS +# +#------------------------------------------------------------------------ + +register(VIEW, +id = 'eventview', +name = _("Event View"), +description = _("The view showing all the events"), +version = '1.0', +status = STABLE, +fname = 'eventview.py', +authors = [u"The GRAMPS project"], +authors_email = ["http://gramps-project.org"], +category = VIEW_EVENT, +viewclass = 'EventView', + ) + +register(VIEW, +id = 'familyview', +name = _("Family View"), +description = _("The view showing all families"), +version = '1.0', +status = STABLE, +fname = 'familyview.py', +authors = [u"The GRAMPS project"], +authors_email = ["http://gramps-project.org"], +category = VIEW_FAMILY, +viewclass = 'FamilyView', + ) + +register(VIEW, +id = 'grampletview', +name = _("Gramplet View"), +description = _("The view allowing to see Gramplets"), +version = '1.0', +status = STABLE, +fname = 'grampletview.py', +authors = [u"The GRAMPS project"], +authors_email = ["http://gramps-project.org"], +category = VIEW_MISC, +viewclass = 'GrampletView', + ) + +register(VIEW, +id = 'mediaview', +name = _("Media View"), +description = _("The view showing all the media objects"), +version = '1.0', +status = STABLE, +fname = 'mediaview.py', +authors = [u"The GRAMPS project"], +authors_email = ["http://gramps-project.org"], +category = VIEW_MEDIA, +viewclass = 'MediaView', + ) + +register(VIEW, +id = 'noteview', +name = _("Note View"), +description = _("The view showing all the notes"), +version = '1.0', +status = STABLE, +fname = 'noteview.py', +authors = [u"The GRAMPS project"], +authors_email = ["http://gramps-project.org"], +category = VIEW_NOTE, +viewclass = 'NoteView', + ) + +register(VIEW, +id = 'relview', +name = _("Relationship View"), +description = _("The view showing all relationships of the selected person"), +version = '1.0', +status = STABLE, +fname = 'relview.py', +authors = [u"The GRAMPS project"], +authors_email = ["http://gramps-project.org"], +category = VIEW_REL, +viewclass = 'RelationshipView', + ) + +register(VIEW, +id = 'pedigreeview', +name = _("Pedigree View"), +description = _("The view showing an ancestor pedigree of the selected person"), +version = '1.0', +status = STABLE, +fname = 'pedigreeview.py', +authors = [u"The GRAMPS project"], +authors_email = ["http://gramps-project.org"], +category = VIEW_REL, +viewclass = 'PedigreeView', + ) + +register(VIEW, +id = 'personview', +name = _("Person View"), +description = _("The view showing all people in the family tree"), +version = '1.0', +status = STABLE, +fname = 'personview.py', +authors = [u"The GRAMPS project"], +authors_email = ["http://gramps-project.org"], +category = VIEW_PERSON, +viewclass = 'PersonView', + ) + +register(VIEW, +id = 'placeview', +name = _("Place View"), +description = _("The view showing all the places of the family tree"), +version = '1.0', +status = STABLE, +fname = 'placeview.py', +authors = [u"The GRAMPS project"], +authors_email = ["http://gramps-project.org"], +category = VIEW_PLACE, +viewclass = 'PlaceView', + ) + +register(VIEW, +id = 'repoview', +name = _("Repository View"), +description = _("The view showing all the repositories"), +version = '1.0', +status = STABLE, +fname = 'repoview.py', +authors = [u"The GRAMPS project"], +authors_email = ["http://gramps-project.org"], +category = VIEW_REPO, +viewclass = 'RepositoryView', + ) + +register(VIEW, +id = 'sourceview', +name = _("Source View"), +description = _("The view showing all the sources"), +version = '1.0', +status = STABLE, +fname = 'sourceview.py', +authors = [u"The GRAMPS project"], +authors_email = ["http://gramps-project.org"], +category = VIEW_SOURCE, +viewclass = 'SourceView', + )