3292: register plugins, load on need, not on start of GRAMPS - GEPS 014
Improvements: gen.plug only depends on gen, relationship default is moved to Relationship.py, and config for hidden to a gui.pluginmanager svn: r13405
This commit is contained in:
parent
c10da3fec5
commit
d25cdc3958
data/man
src
DataViews
DisplayState.pyExportAssistant.pyPluginUtils
QuickReports.pyRelationship.pyReportBase
cli
gen/plug
gui
plugins
@ -69,7 +69,7 @@ the format of that file is guessed according to its extension or MIME-type.
|
||||
.br
|
||||
|
||||
Formats
|
||||
available for output are \fBgramps\-xml\fR (guessed if \fIFILE\fR ends with
|
||||
available for export are \fBgramps\-xml\fR (guessed if \fIFILE\fR ends with
|
||||
\fB.gramps\fR), \fBgedcom\fR (guessed if \fIFILE\fR ends with \fB.ged\fR), or
|
||||
any file export available through the GRAMPS plugin system.
|
||||
.br
|
||||
|
@ -51,7 +51,7 @@ import Errors
|
||||
import Bookmarks
|
||||
import config
|
||||
from QuestionDialog import ErrorDialog
|
||||
from gen.plug import PluginManager
|
||||
from gui.pluginmanager import GuiPluginManager
|
||||
from DdTargets import DdTargets
|
||||
from Editors import EditPlace, DeletePlaceQuery
|
||||
from Filters.SideBar import PlaceSidebarFilter
|
||||
@ -195,7 +195,7 @@ class PlaceView(ListView):
|
||||
|
||||
#select the map services to show
|
||||
self.mapservicedata = {}
|
||||
servlist = PluginManager.get_instance().get_reg_mapservices()
|
||||
servlist = GuiPluginManager.get_instance().get_reg_mapservices()
|
||||
for i, pdata in zip(range(len(servlist)), servlist):
|
||||
key = pdata.id.replace(' ', '-')
|
||||
add_menuitem(menu, pdata.name, None,
|
||||
@ -220,7 +220,6 @@ class PlaceView(ListView):
|
||||
"""
|
||||
return the current label for the menutoolbutton
|
||||
"""
|
||||
print 'called', self.mapservicedata[self.mapservice].name
|
||||
return self.mapservicedata[self.mapservice].name
|
||||
|
||||
def gotomap(self, obj):
|
||||
@ -250,7 +249,7 @@ class PlaceView(ListView):
|
||||
places = [(x, None) for x in place_handles]
|
||||
|
||||
#run the mapservice:
|
||||
pmgr = PluginManager.get_instance()
|
||||
pmgr = GuiPluginManager.get_instance()
|
||||
serv = self.mapservicedata[self.mapservice]
|
||||
mod = pmgr.load_plugin(serv)
|
||||
if mod:
|
||||
|
@ -56,7 +56,7 @@ import config
|
||||
from BasicUtils import name_displayer
|
||||
import const
|
||||
import ManagedWindow
|
||||
from gen.plug import PluginManager
|
||||
import Relationship
|
||||
from glade import Glade
|
||||
|
||||
DISABLED = -1
|
||||
@ -345,8 +345,7 @@ class DisplayState(gen.utils.Callback):
|
||||
"""method that rebinds the relationship to the current rel calc
|
||||
Should be called after load or reload of plugins
|
||||
"""
|
||||
pmgr = PluginManager.get_instance()
|
||||
self.relationship = pmgr.get_relationship_calculator()
|
||||
self.relationship = Relationship.get_relationship_calculator(reinit=True)
|
||||
|
||||
def set_gendepth(self, value):
|
||||
""" Set the generations we search back for showing relationships
|
||||
|
@ -53,7 +53,7 @@ import gtk
|
||||
|
||||
import const
|
||||
import config
|
||||
from gen.plug import PluginManager
|
||||
from gui.pluginmanager import GuiPluginManager
|
||||
import Utils
|
||||
import ManagedWindow
|
||||
|
||||
@ -132,7 +132,7 @@ class ExportAssistant(gtk.Assistant, ManagedWindow.ManagedWindow) :
|
||||
self.logo = gtk.gdk.pixbuf_new_from_file(_gramps_png)
|
||||
self.splash = gtk.gdk.pixbuf_new_from_file(_splash_jpg)
|
||||
|
||||
pmgr = PluginManager.get_instance()
|
||||
pmgr = GuiPluginManager.get_instance()
|
||||
self.__exporters = pmgr.get_export_plugins()
|
||||
|
||||
self.__previous_page = -1
|
||||
|
@ -48,6 +48,7 @@ import gobject
|
||||
#-------------------------------------------------------------------------
|
||||
import Utils
|
||||
from gui.utils import ProgressMeter
|
||||
from gui.pluginmanager import GuiPluginManager
|
||||
import widgets
|
||||
import ManagedWindow
|
||||
from QuestionDialog import OptionDialog
|
||||
@ -1422,7 +1423,7 @@ def make_gui_option(option, dbstate, uistate, track):
|
||||
"""
|
||||
widget = None
|
||||
label = True
|
||||
pmgr = gen.plug.PluginManager.get_instance()
|
||||
pmgr = GuiPluginManager.get_instance()
|
||||
external_options = pmgr.get_external_opt_dict()
|
||||
if isinstance(option, gen.plug.menu.PersonOption):
|
||||
widget = GuiPersonOption(option, dbstate, uistate, track)
|
||||
|
@ -42,7 +42,8 @@ from gettext import gettext as _
|
||||
import const
|
||||
from ReportBase import report, standalone_categories
|
||||
import _Tool
|
||||
from gen.plug import PluginManager, REPORT, TOOL
|
||||
from gen.plug import REPORT, TOOL
|
||||
from gui.pluginmanager import GuiPluginManager
|
||||
import ManagedWindow
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
@ -76,7 +77,7 @@ class PluginDialog(ManagedWindow.ManagedWindow):
|
||||
self.imap = {}
|
||||
self.msg = msg
|
||||
self.content = content
|
||||
self._pmgr = PluginManager.get_instance()
|
||||
self._pmgr = GuiPluginManager.get_instance()
|
||||
|
||||
ManagedWindow.ManagedWindow.__init__(self, uistate, track,
|
||||
self.__class__)
|
||||
|
@ -45,7 +45,8 @@ import gobject
|
||||
#-------------------------------------------------------------------------
|
||||
import ManagedWindow
|
||||
import Errors
|
||||
from gen.plug import PluginManager, PluginRegister, PTYPE_STR
|
||||
from gen.plug import PluginRegister, PTYPE_STR
|
||||
from gui.pluginmanager import GuiPluginManager
|
||||
import _Tool as Tool
|
||||
from QuestionDialog import InfoDialog
|
||||
import config
|
||||
@ -67,7 +68,7 @@ class PluginStatus(ManagedWindow.ManagedWindow):
|
||||
ManagedWindow.ManagedWindow.__init__(self, uistate, track,
|
||||
self.__class__)
|
||||
|
||||
self.__pmgr = PluginManager.get_instance()
|
||||
self.__pmgr = GuiPluginManager.get_instance()
|
||||
self.__preg = PluginRegister.get_instance()
|
||||
self.set_window(gtk.Dialog("", uistate.window,
|
||||
gtk.DIALOG_DESTROY_WITH_PARENT,
|
||||
|
@ -54,10 +54,10 @@ import gtk
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
from gen.plug import (PluginManager, CATEGORY_QR_PERSON, CATEGORY_QR_FAMILY,
|
||||
from gen.plug import (CATEGORY_QR_PERSON, CATEGORY_QR_FAMILY,
|
||||
CATEGORY_QR_EVENT, CATEGORY_QR_SOURCE, CATEGORY_QR_MISC,
|
||||
CATEGORY_QR_PLACE, CATEGORY_QR_REPOSITORY)
|
||||
|
||||
from gui.pluginmanager import GuiPluginManager
|
||||
|
||||
def create_quickreport_menu(category,dbstate,uistate, handle) :
|
||||
""" This functions querries the registered quick reports with
|
||||
@ -84,7 +84,7 @@ def create_quickreport_menu(category,dbstate,uistate, handle) :
|
||||
|
||||
#select the reports to show
|
||||
showlst = []
|
||||
pmgr = PluginManager.get_instance()
|
||||
pmgr = GuiPluginManager.get_instance()
|
||||
for pdata in pmgr.get_reg_quick_reports():
|
||||
if pdata.supported and pdata.category == category :
|
||||
#add tuple function, translated name, name, status
|
||||
@ -115,7 +115,7 @@ def get_quick_report_list(qv_category=None):
|
||||
CATEGORY_QR_REPOSITORY or None for all
|
||||
"""
|
||||
names = []
|
||||
pmgr = PluginManager.get_instance()
|
||||
pmgr = GuiPluginManager.get_instance()
|
||||
for pdata in pmgr.get_reg_quick_reports():
|
||||
if qv_category == pdata.category or qv_category is None:
|
||||
names.append(pdata) # (see below for item struct)
|
||||
@ -124,7 +124,7 @@ def get_quick_report_list(qv_category=None):
|
||||
def run_quick_report_by_name(dbstate, uistate, report_name, handle,
|
||||
container=None):
|
||||
report = None
|
||||
pmgr = PluginManager.get_instance()
|
||||
pmgr = GuiPluginManager.get_instance()
|
||||
for pdata in pmgr.get_reg_quick_reports():
|
||||
if pdata.id == report_name:
|
||||
report = pdata
|
||||
@ -142,7 +142,7 @@ def run_quick_report_by_name_direct(report_name, database, document, handle):
|
||||
from docgen import TextBufDoc
|
||||
from Simple import make_basic_stylesheet
|
||||
report = None
|
||||
pmgr = PluginManager.get_instance()
|
||||
pmgr = GuiPluginManager.get_instance()
|
||||
for pdata in pmgr.get_reg_quick_reports():
|
||||
if pdata.id == report_name:
|
||||
report = pdata
|
||||
@ -174,7 +174,7 @@ def run_report(dbstate, uistate, category, handle, pdata, container=None):
|
||||
from docgen import TextBufDoc
|
||||
from Simple import make_basic_stylesheet
|
||||
container = None
|
||||
pmgr = PluginManager.get_instance()
|
||||
pmgr = GuiPluginManager.get_instance()
|
||||
mod = pmgr.load_plugin(pdata)
|
||||
if not mod:
|
||||
print "QuickView Error: plugin does not load"
|
||||
|
@ -20,6 +20,13 @@
|
||||
|
||||
# $Id:Relationship.py 9912 2008-01-22 09:17:46Z acraphae $
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# python modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
import os
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# GRAMPS modules
|
||||
@ -28,8 +35,8 @@
|
||||
|
||||
import gen.lib
|
||||
from TransUtils import sgettext as _
|
||||
from gen.plug import PluginRegister, BasePluginManager
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
#
|
||||
@ -1740,6 +1747,38 @@ class RelationshipCalculator(object):
|
||||
"""
|
||||
self.dirtymap = True
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# define the default relationshipcalculator
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
__RELCALC_CLASS = None
|
||||
|
||||
def get_relationship_calculator(reinit=False):
|
||||
"""
|
||||
Return the relationship calculator for the current language.
|
||||
"""
|
||||
global __RELCALC_CLASS
|
||||
|
||||
if __RELCALC_CLASS is None or reinit:
|
||||
__RELCALC_CLASS = RelationshipCalculator
|
||||
# set correct relationship calculator based on LANG
|
||||
for plugin in PluginRegister.get_instance().relcalc_plugins():
|
||||
if os.environ["LANG"] in plugin.lang_list:
|
||||
pmgr = BasePluginManager.get_instance()
|
||||
#the loaded module is put in variable mod
|
||||
mod = pmgr.load_plugin(plugin)
|
||||
if mod:
|
||||
__RELCALC_CLASS = eval('mod.' + plugin.relcalcclass)
|
||||
break
|
||||
return __RELCALC_CLASS()
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Tests
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
def _test(rc, onlybirth, inlawa, inlawb, printrelstr):
|
||||
""" this is a generic test suite for the singular relationship
|
||||
|
@ -40,7 +40,7 @@ log = logging.getLogger(".")
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
import Utils
|
||||
from gen.plug import PluginManager
|
||||
from gen.plug import BasePluginManager
|
||||
from gen.plug.docgen import (StyleSheet, StyleSheetList, PaperStyle,
|
||||
PAPER_PORTRAIT, PAPER_LANDSCAPE)
|
||||
from gen.plug.menu import (FamilyOption, PersonOption, NoteOption,
|
||||
@ -121,7 +121,7 @@ class CommandLineReport(object):
|
||||
def __init__(self, database, name, category, option_class, options_str_dict,
|
||||
noopt=False):
|
||||
|
||||
pmgr = PluginManager.get_instance()
|
||||
pmgr = BasePluginManager.get_instance()
|
||||
self.__textdoc_plugins = []
|
||||
self.__drawdoc_plugins = []
|
||||
self.__bookdoc_plugins = []
|
||||
|
@ -35,7 +35,7 @@ import gobject
|
||||
#-------------------------------------------------------------------------
|
||||
from _Constants import CATEGORY_DRAW
|
||||
from _DocReportDialog import DocReportDialog
|
||||
from gen.plug import PluginManager
|
||||
from gui.pluginmanager import GuiPluginManager
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
|
@ -34,7 +34,7 @@ import gobject
|
||||
# GRAMPS modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from gen.plug import PluginManager
|
||||
from gui.pluginmanager import GuiPluginManager
|
||||
from _Constants import CATEGORY_TEXT
|
||||
from _DocReportDialog import DocReportDialog
|
||||
|
||||
@ -52,7 +52,7 @@ class _TextFormatComboBox(gtk.ComboBox):
|
||||
|
||||
gtk.ComboBox.__init__(self)
|
||||
|
||||
pmgr = PluginManager.get_instance()
|
||||
pmgr = GuiPluginManager.get_instance()
|
||||
self.__textdoc_plugins = []
|
||||
for plugin in pmgr.get_docgen_plugins():
|
||||
if plugin.get_text_support():
|
||||
|
@ -48,7 +48,7 @@ import gen
|
||||
from clidbman import CLIDbManager, NAME_FILE, find_locker_name
|
||||
|
||||
from PluginUtils import Tool
|
||||
from gen.plug import PluginManager
|
||||
from gen.plug import BasePluginManager
|
||||
from ReportBase import CATEGORY_BOOK, CATEGORY_CODE, cl_report
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
@ -146,7 +146,7 @@ class ArgHandler(object):
|
||||
# or an empty string.
|
||||
family_tree_format = os.path.splitext(fname)[-1][1:].lower()
|
||||
|
||||
pmgr = PluginManager.get_instance()
|
||||
pmgr = BasePluginManager.get_instance()
|
||||
plugin_found = False
|
||||
for plugin in pmgr.get_import_plugins():
|
||||
if family_tree_format == plugin.get_extension():
|
||||
@ -189,7 +189,7 @@ class ArgHandler(object):
|
||||
# or an empty string.
|
||||
family_tree_format = os.path.splitext(fname)[-1][1:].lower()
|
||||
|
||||
pmgr = PluginManager.get_instance()
|
||||
pmgr = BasePluginManager.get_instance()
|
||||
plugin_found = False
|
||||
for plugin in pmgr.get_export_plugins():
|
||||
if family_tree_format == plugin.get_extension():
|
||||
@ -403,7 +403,7 @@ class ArgHandler(object):
|
||||
"""
|
||||
Command-line import routine. Try to import filename using the family_tree_format.
|
||||
"""
|
||||
pmgr = PluginManager.get_instance()
|
||||
pmgr = BasePluginManager.get_instance()
|
||||
for plugin in pmgr.get_import_plugins():
|
||||
if family_tree_format == plugin.get_extension():
|
||||
import_function = plugin.get_import_function()
|
||||
@ -425,7 +425,7 @@ class ArgHandler(object):
|
||||
Command-line export routine.
|
||||
Try to write into filename using the family_tree_format.
|
||||
"""
|
||||
pmgr = PluginManager.get_instance()
|
||||
pmgr = BasePluginManager.get_instance()
|
||||
for plugin in pmgr.get_export_plugins():
|
||||
if family_tree_format == plugin.get_extension():
|
||||
export_function = plugin.get_export_function()
|
||||
@ -440,7 +440,7 @@ class ArgHandler(object):
|
||||
"""
|
||||
Command-line action routine. Try to perform specified action.
|
||||
"""
|
||||
pmgr = PluginManager.get_instance()
|
||||
pmgr = BasePluginManager.get_instance()
|
||||
if action == "report":
|
||||
try:
|
||||
options_str_dict = dict( [ tuple(chunk.split('='))
|
||||
|
@ -49,7 +49,7 @@ LOG = logging.getLogger(".clidbman")
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
import gen.db
|
||||
from gen.plug import PluginManager
|
||||
from gen.plug import BasePluginManager
|
||||
import config
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
@ -258,7 +258,7 @@ class CLIDbManager(object):
|
||||
@return: A tuple of (new_path, name) for the new database
|
||||
or (None, None) if no import was performed.
|
||||
"""
|
||||
pmgr = PluginManager.get_instance()
|
||||
pmgr = BasePluginManager.get_instance()
|
||||
(name, ext) = os.path.splitext(os.path.basename(filename))
|
||||
format = ext[1:].lower()
|
||||
|
||||
|
@ -52,7 +52,7 @@ import Errors
|
||||
import DbState
|
||||
from gen.db import (GrampsDBDir, FileVersionDeclineToUpgrade)
|
||||
import gen.db.exceptions
|
||||
from gen.plug import PluginManager
|
||||
from gen.plug import BasePluginManager
|
||||
from Utils import get_researcher
|
||||
import RecentFiles
|
||||
|
||||
@ -184,7 +184,7 @@ class CLIManager(object):
|
||||
else:
|
||||
self.db_loader = None
|
||||
self.file_loaded = False
|
||||
self._pmgr = PluginManager.get_instance()
|
||||
self._pmgr = BasePluginManager.get_instance()
|
||||
|
||||
def open_activate(self, path):
|
||||
"""
|
||||
|
@ -30,14 +30,14 @@ 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 )
|
||||
from _manager import PluginManager
|
||||
from _manager import BasePluginManager
|
||||
from _import import ImportPlugin
|
||||
from _export import ExportPlugin
|
||||
from _docgenplugin import DocGenPlugin
|
||||
from utils import *
|
||||
|
||||
__all__ = [ "docbackend", "docgen", "menu", Plugin, PluginData,
|
||||
PluginRegister, PluginManager,
|
||||
PluginRegister, BasePluginManager,
|
||||
ImportPlugin, ExportPlugin, DocGenPlugin,
|
||||
REPORT, TOOL, CATEGORY_TEXT, CATEGORY_DRAW, CATEGORY_CODE,
|
||||
CATEGORY_WEB, CATEGORY_BOOK, CATEGORY_GRAPHVIZ,
|
||||
|
@ -45,9 +45,7 @@ from gettext import gettext as _
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
import gen.utils
|
||||
import Relationship
|
||||
from gen.plug import PluginRegister
|
||||
import config
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -58,30 +56,27 @@ _UNAVAILABLE = _("No description was provided")
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# PluginManager
|
||||
# BasePluginManager
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
class PluginManager(gen.utils.Callback):
|
||||
""" PluginManager is a Singleton which manages plugins """
|
||||
class BasePluginManager(object):
|
||||
""" unique singleton storage class for a PluginManager. """
|
||||
|
||||
__instance = None
|
||||
|
||||
__signals__ = { 'plugins-reloaded' : None }
|
||||
|
||||
def get_instance():
|
||||
""" Use this function to get the instance of the PluginManager """
|
||||
if PluginManager.__instance is None:
|
||||
PluginManager.__instance = 1 # Set to 1 for __init__()
|
||||
PluginManager.__instance = PluginManager()
|
||||
return PluginManager.__instance
|
||||
if BasePluginManager.__instance is None:
|
||||
BasePluginManager.__instance = 1 # Set to 1 for __init__()
|
||||
BasePluginManager.__instance = BasePluginManager()
|
||||
return BasePluginManager.__instance
|
||||
get_instance = staticmethod(get_instance)
|
||||
|
||||
|
||||
def __init__(self):
|
||||
""" This function should only be run once by get_instance() """
|
||||
if PluginManager.__instance is not 1:
|
||||
if BasePluginManager.__instance is not 1:
|
||||
raise Exception("This class is a singleton. "
|
||||
"Use the get_instance() method")
|
||||
|
||||
gen.utils.Callback.__init__(self)
|
||||
|
||||
self.__import_plugins = []
|
||||
self.__export_plugins = []
|
||||
@ -91,28 +86,12 @@ class PluginManager(gen.utils.Callback):
|
||||
self.__failmsg_list = []
|
||||
self.__external_opt_dict = {}
|
||||
self.__success_list = []
|
||||
self.__relcalc_class = Relationship.RelationshipCalculator
|
||||
|
||||
self.__mod2text = {}
|
||||
|
||||
self.__pgr = PluginRegister.get_instance()
|
||||
self.__registereddir_set = set()
|
||||
self.__loaded_plugins = {}
|
||||
self.__hidden_plugins = set([])
|
||||
for id in config.get('plugin.hiddenplugins'):
|
||||
self.__hidden_plugins.add(id)
|
||||
self.__hidden_changed()
|
||||
|
||||
def __hidden_changed(self, *args):
|
||||
#if hidden changed, stored data must be emptied as it could contain
|
||||
#something that now must be hidden
|
||||
self.__import_plugins = []
|
||||
self.__export_plugins = []
|
||||
self.__docgen_plugins = []
|
||||
#objects that need to know if the plugins available changed, are
|
||||
#listening to this signal to update themselves. If a plugin becomes
|
||||
#(un)hidden, this should happen, so we emit.
|
||||
self.emit('plugins-reloaded')
|
||||
|
||||
def reg_plugins(self, direct):
|
||||
"""
|
||||
@ -133,16 +112,7 @@ class PluginManager(gen.utils.Callback):
|
||||
# registereddir_list list for use on reloading.
|
||||
self.__registereddir_set.add(dirpath)
|
||||
self.__pgr.scan_dir(dirpath)
|
||||
|
||||
# set correct relationship calculator based on LANG
|
||||
for plugin in self.__pgr.relcalc_plugins():
|
||||
if os.environ["LANG"] in plugin.lang_list:
|
||||
#the loaded module is put in variable mod
|
||||
mod = self.load_plugin(plugin)
|
||||
if mod:
|
||||
self.__relcalc_class = eval('mod.' +
|
||||
plugin.relcalcclass)
|
||||
break
|
||||
|
||||
# load plugins that request to be loaded on startup
|
||||
for plugin in self.__pgr.filter_load_on_reg():
|
||||
mod = self.load_plugin(plugin)
|
||||
@ -167,6 +137,15 @@ class PluginManager(gen.utils.Callback):
|
||||
self.__failmsg_list.append((filename, sys.exc_info()))
|
||||
return None
|
||||
|
||||
def empty_managed_plugins(self):
|
||||
""" For some plugins, managed Plugin are used. These are only
|
||||
reobtained from the registry if this method is called
|
||||
"""
|
||||
# TODO: do other lists need to be reset here, too?
|
||||
self.__import_plugins = []
|
||||
self.__export_plugins = []
|
||||
self.__docgen_plugins = []
|
||||
|
||||
def reload_plugins(self):
|
||||
""" Reload previously loaded plugins """
|
||||
pymod = re.compile(r"^(.*)\.py$")
|
||||
@ -175,10 +154,7 @@ class PluginManager(gen.utils.Callback):
|
||||
self.__failmsg_list = []
|
||||
|
||||
# attempt to reload all plugins that have succeeded in the past
|
||||
# TODO: do other lists need to be reset here, too?
|
||||
self.__import_plugins[:] = []
|
||||
self.__export_plugins[:] = []
|
||||
self.__docgen_plugins[:] = []
|
||||
self.empty_managed_plugins()
|
||||
|
||||
for plugin in self.__success_list:
|
||||
filename = plugin[0]
|
||||
@ -211,35 +187,6 @@ class PluginManager(gen.utils.Callback):
|
||||
except:
|
||||
self.__failmsg_list.append((filename, sys.exc_info()))
|
||||
|
||||
self.emit('plugins-reloaded')
|
||||
|
||||
def get_hidden_plugin_ids(self):
|
||||
"""
|
||||
Returns copy of the set hidden plugin ids
|
||||
"""
|
||||
return self.__hidden_plugins.copy()
|
||||
|
||||
def hide_plugin(self, id):
|
||||
""" Hide plugin with given id. This will hide the plugin so queries do
|
||||
not return it anymore, and write this change to the config.
|
||||
Note that config will then emit a signal
|
||||
"""
|
||||
self.__hidden_plugins.add(id)
|
||||
hideset = [x for x in self.__hidden_plugins]
|
||||
config.set('plugin.hiddenplugins', hideset)
|
||||
config.save()
|
||||
self.__hidden_changed()
|
||||
|
||||
def unhide_plugin(self, id):
|
||||
""" Unhide plugin with given id. This will unhide the plugin so queries
|
||||
return it again, and write this change to the config
|
||||
"""
|
||||
self.__hidden_plugins.remove(id)
|
||||
hideset = [x for x in self.__hidden_plugins]
|
||||
config.set('plugin.hiddenplugins', hideset)
|
||||
config.save()
|
||||
self.__hidden_changed()
|
||||
|
||||
def get_fail_list(self):
|
||||
""" Return the list of failed plugins. """
|
||||
return self.__failmsg_list
|
||||
@ -249,38 +196,33 @@ class PluginManager(gen.utils.Callback):
|
||||
return self.__success_list
|
||||
|
||||
def get_reg_reports(self, gui=True):
|
||||
""" Return list of non hidden registered reports
|
||||
""" Return list of registered reports
|
||||
:Param gui: bool indicating if GUI reports or CLI reports must be
|
||||
returned
|
||||
"""
|
||||
return [plg for plg in self.__pgr.report_plugins(gui) if plg.id not in
|
||||
self.__hidden_plugins]
|
||||
return self.__pgr.report_plugins(gui)
|
||||
|
||||
def get_reg_tools(self, gui=True):
|
||||
""" Return list of non hidden registered tools
|
||||
""" Return list of registered tools
|
||||
:Param gui: bool indicating if GUI reports or CLI reports must be
|
||||
returned
|
||||
"""
|
||||
return [plg for plg in self.__pgr.tool_plugins(gui) if plg.id not in
|
||||
self.__hidden_plugins]
|
||||
return self.__pgr.tool_plugins(gui)
|
||||
|
||||
def get_reg_quick_reports(self):
|
||||
""" Return list of non hidden registered quick reports
|
||||
""" Return list of registered quick reports
|
||||
"""
|
||||
return [plg for plg in self.__pgr.quickreport_plugins() if plg.id not in
|
||||
self.__hidden_plugins]
|
||||
return self.__pgr.quickreport_plugins()
|
||||
|
||||
def get_reg_mapservices(self):
|
||||
""" Return list of non hidden registered mapservices
|
||||
""" Return list of registered mapservices
|
||||
"""
|
||||
return [plg for plg in self.__pgr.mapservice_plugins() if plg.id not in
|
||||
self.__hidden_plugins]
|
||||
return self.__pgr.mapservice_plugins()
|
||||
|
||||
def get_reg_bookitems(self):
|
||||
""" Return list of non hidden reports registered as bookitem
|
||||
""" Return list of reports registered as bookitem
|
||||
"""
|
||||
return [plg for plg in self.__pgr.bookitem_plugins() if plg.id not in
|
||||
self.__hidden_plugins]
|
||||
return self.__pgr.bookitem_plugins()
|
||||
|
||||
def get_external_opt_dict(self):
|
||||
""" Return the dictionary of external options. """
|
||||
@ -290,6 +232,21 @@ class PluginManager(gen.utils.Callback):
|
||||
""" Given a module name, return the module description. """
|
||||
return self.__mod2text.get(module, '')
|
||||
|
||||
def get_reg_importers(self):
|
||||
""" Return list of registered importers
|
||||
"""
|
||||
return self.__pgr.import_plugins()
|
||||
|
||||
def get_reg_exporters(self):
|
||||
""" Return list of registered exporters
|
||||
"""
|
||||
return self.__pgr.export_plugins()
|
||||
|
||||
def get_reg_docgens(self):
|
||||
""" Return list of registered docgen
|
||||
"""
|
||||
return self.__pgr.docgen_plugins()
|
||||
|
||||
def get_import_plugins(self):
|
||||
"""
|
||||
Get the list of import plugins.
|
||||
@ -300,9 +257,7 @@ class PluginManager(gen.utils.Callback):
|
||||
## only PluginData, loading from module when importfunction needed?
|
||||
if self.__import_plugins == []:
|
||||
#The module still needs to be imported
|
||||
imps = [pdata for pdata in self.__pgr.import_plugins() if pdata.id
|
||||
not in self.__hidden_plugins]
|
||||
for pdata in imps:
|
||||
for pdata in self.get_reg_importers():
|
||||
mod = self.load_plugin(pdata)
|
||||
if mod:
|
||||
imp = gen.plug.ImportPlugin(name=pdata.name,
|
||||
@ -323,9 +278,7 @@ class PluginManager(gen.utils.Callback):
|
||||
## only PluginData, loading from module when export/options needed?
|
||||
if self.__export_plugins == []:
|
||||
#The modules still need to be imported
|
||||
exps = [pdata for pdata in self.__pgr.export_plugins() if pdata.id
|
||||
not in self.__hidden_plugins]
|
||||
for pdata in exps:
|
||||
for pdata in self.get_reg_exporters():
|
||||
mod = self.load_plugin(pdata)
|
||||
if mod:
|
||||
exp = gen.plug.ExportPlugin(name=pdata.name,
|
||||
@ -349,9 +302,7 @@ class PluginManager(gen.utils.Callback):
|
||||
## So, only do import when docgen.get_basedoc() is requested
|
||||
if self.__docgen_plugins == []:
|
||||
#The modules still need to be imported
|
||||
dgdps = [pdata for pdata in self.__pgr.docgen_plugins() if pdata.id
|
||||
not in self.__hidden_plugins]
|
||||
for pdata in dgdps:
|
||||
for pdata in self.get_reg_docgens():
|
||||
mod = self.load_plugin(pdata)
|
||||
if mod:
|
||||
dgp = gen.plug.DocGenPlugin(name=pdata.name,
|
||||
@ -394,9 +345,3 @@ class PluginManager(gen.utils.Callback):
|
||||
if item.get_module_name() not in failed_module_names ][:]
|
||||
self.__docgen_plugins[:] = [ item for item in self.__docgen_plugins
|
||||
if item.get_module_name() not in failed_module_names ][:]
|
||||
|
||||
def get_relationship_calculator(self):
|
||||
"""
|
||||
Return the relationship calculator for the current language.
|
||||
"""
|
||||
return self.__relcalc_class()
|
||||
|
@ -59,7 +59,7 @@ import const
|
||||
import config
|
||||
import gen.db
|
||||
import Utils
|
||||
from gen.plug import PluginManager
|
||||
from gui.pluginmanager import GuiPluginManager
|
||||
from QuestionDialog import (DBErrorDialog, ErrorDialog, QuestionDialog2,
|
||||
WarningDialog)
|
||||
import Errors
|
||||
@ -113,7 +113,7 @@ class DbLoader(CLIDbLoader):
|
||||
if not warn_dialog.run():
|
||||
return False
|
||||
|
||||
pmgr = PluginManager.get_instance()
|
||||
pmgr = GuiPluginManager.get_instance()
|
||||
|
||||
import_dialog = gtk.FileChooserDialog(_('GRAMPS: Import database'),
|
||||
self.uistate.window,
|
||||
@ -323,7 +323,7 @@ def format_maker():
|
||||
The auto selection is always added as the first one.
|
||||
The returned box contains both the label and the selector.
|
||||
"""
|
||||
pmgr = PluginManager.get_instance()
|
||||
pmgr = GuiPluginManager.get_instance()
|
||||
format_list = [ ('auto', _('Automatically detected')) ]
|
||||
|
||||
for plugin in pmgr.get_import_plugins():
|
||||
|
@ -69,7 +69,7 @@ import pango
|
||||
#-------------------------------------------------------------------------
|
||||
from QuestionDialog import ErrorDialog, QuestionDialog
|
||||
from gen.db import GrampsDBDir
|
||||
from gen.plug import PluginManager
|
||||
from gui.pluginmanager import GuiPluginManager
|
||||
from cli.clidbman import CLIDbManager, NAME_FILE, time_val
|
||||
import GrampsDbUtils
|
||||
from DdTargets import DdTargets
|
||||
@ -795,7 +795,7 @@ def check_out(dbase, rev, path, callback):
|
||||
)
|
||||
return
|
||||
|
||||
pmgr = PluginManager.get_instance()
|
||||
pmgr = GuiPluginManager.get_instance()
|
||||
for plugin in pmgr.get_import_plugins():
|
||||
if plugin.get_extension() == "gramps":
|
||||
rdr = plugin.get_import_function()
|
||||
@ -838,7 +838,7 @@ def check_in(dbase, filename, callback, cursor_func = None):
|
||||
if cursor_func:
|
||||
cursor_func(_("Creating data to be archived..."))
|
||||
|
||||
plugin_manager = PluginManager.get_instance()
|
||||
plugin_manager = GuiPluginManager.get_instance()
|
||||
for plugin in plugin_manager.get_export_plugins():
|
||||
if plugin.get_extension() == "gramps":
|
||||
export_function = plugin.get_export_function()
|
||||
|
@ -59,7 +59,9 @@ import gtk
|
||||
from cli.grampscli import CLIManager
|
||||
from PluginUtils import Tool, PluginWindows, \
|
||||
ReportPluginDialog, ToolPluginDialog, gui_tool
|
||||
from gen.plug import PluginManager, REPORT
|
||||
from gen.plug import REPORT
|
||||
from gui.pluginmanager import GuiPluginManager
|
||||
import Relationship
|
||||
import ReportBase
|
||||
import DisplayState
|
||||
import const
|
||||
@ -215,6 +217,8 @@ class ViewManager(CLIManager):
|
||||
|
||||
def __init__(self, dbstate):
|
||||
CLIManager.__init__(self, dbstate, False)
|
||||
#set pluginmanager to GUI one
|
||||
self._pmgr = GuiPluginManager.get_instance()
|
||||
self.page_is_changing = False
|
||||
self.active_page = None
|
||||
self.views = []
|
||||
@ -235,7 +239,11 @@ class ViewManager(CLIManager):
|
||||
|
||||
self.__build_main_window()
|
||||
self.__connect_signals()
|
||||
|
||||
self.do_reg_plugins()
|
||||
#plugins loaded now set relationship class
|
||||
self.rel_class = Relationship.get_relationship_calculator()
|
||||
self.uistate.set_relationship_class()
|
||||
|
||||
def _errordialog(title, errormessage):
|
||||
"""
|
||||
@ -255,8 +263,6 @@ class ViewManager(CLIManager):
|
||||
self.window = gtk.Window()
|
||||
self.window.set_icon_from_file(const.ICON)
|
||||
self.window.set_default_size(width, height)
|
||||
|
||||
self.rel_class = self._pmgr.get_relationship_calculator()
|
||||
|
||||
vbox = gtk.VBox()
|
||||
self.window.add(vbox)
|
||||
@ -553,7 +559,6 @@ class ViewManager(CLIManager):
|
||||
self.fileactions.set_sensitive(False)
|
||||
self.__build_tools_menu(self._pmgr.get_reg_tools())
|
||||
self.__build_report_menu(self._pmgr.get_reg_reports())
|
||||
self.uistate.set_relationship_class()
|
||||
self._pmgr.connect('plugins-reloaded',
|
||||
self.__rebuild_report_and_tool_menus)
|
||||
self.fileactions.set_sensitive(True)
|
||||
@ -1448,7 +1453,7 @@ def run_plugin(pdata, dbstate, uistate):
|
||||
1/ load plugin.
|
||||
2/ the report is run
|
||||
"""
|
||||
mod = PluginManager.get_instance().load_plugin(pdata)
|
||||
mod = GuiPluginManager.get_instance().load_plugin(pdata)
|
||||
if not mod:
|
||||
#import of plugin failed
|
||||
ErrorDialog(
|
||||
|
@ -69,7 +69,7 @@ import const
|
||||
import Utils
|
||||
import ListModel
|
||||
import Errors
|
||||
from gen.plug import PluginManager
|
||||
from gui.pluginmanager import GuiPluginManager
|
||||
from gen.plug.docgen import StyleSheet, StyleSheetList
|
||||
from QuestionDialog import WarningDialog, ErrorDialog
|
||||
from gen.plug.menu import PersonOption, FilterOption, FamilyOption
|
||||
@ -198,7 +198,7 @@ class BookItem(object):
|
||||
"""
|
||||
self.dbase = dbase
|
||||
self.style_name = "default"
|
||||
pmgr = PluginManager.get_instance()
|
||||
pmgr = GuiPluginManager.get_instance()
|
||||
|
||||
for pdata in pmgr.get_reg_bookitems():
|
||||
if pdata.id == name:
|
||||
@ -748,7 +748,7 @@ class BookReportSelector(ManagedWindow.ManagedWindow):
|
||||
|
||||
The selections are read from the book item registry.
|
||||
"""
|
||||
pmgr = PluginManager.get_instance()
|
||||
pmgr = GuiPluginManager.get_instance()
|
||||
regbi = pmgr.get_reg_bookitems()
|
||||
if not regbi:
|
||||
return
|
||||
@ -1061,7 +1061,7 @@ class _BookFormatComboBox(gtk.ComboBox):
|
||||
|
||||
gtk.ComboBox.__init__(self)
|
||||
|
||||
pmgr = PluginManager.get_instance()
|
||||
pmgr = GuiPluginManager.get_instance()
|
||||
self.__bookdoc_plugins = []
|
||||
for plugin in pmgr.get_docgen_plugins():
|
||||
if plugin.get_text_support() and plugin.get_draw_support():
|
||||
|
@ -43,10 +43,6 @@ from gen.plug.menu import (BooleanOption, EnumeratedListOption,
|
||||
from ReportBase import Report, ReportUtils, MenuReportOptions
|
||||
from Utils import probably_alive
|
||||
|
||||
MODE_GUI = PluginManager.REPORT_MODE_GUI
|
||||
MODE_BKI = PluginManager.REPORT_MODE_BKI
|
||||
MODE_CLI = PluginManager.REPORT_MODE_CLI
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
#
|
||||
# Global functions
|
||||
|
@ -36,7 +36,7 @@ import time
|
||||
#------------------------------------------------------------------------
|
||||
from BasicUtils import name_displayer
|
||||
from Errors import ReportError
|
||||
from gen.plug import PluginManager
|
||||
import Relationship
|
||||
from gen.plug.docgen import (FontStyle, ParagraphStyle, GraphicsStyle,
|
||||
FONT_SERIF, PARA_ALIGN_CENTER,
|
||||
PARA_ALIGN_LEFT, PARA_ALIGN_RIGHT)
|
||||
@ -251,8 +251,7 @@ class Calendar(Report):
|
||||
people = self.database.iter_person_handles()
|
||||
self.progress.set_pass(_('Applying Filter...'), self.database.get_number_of_people())
|
||||
people = self.filter.apply(self.database, people, self.progress)
|
||||
pmgr = PluginManager.get_instance()
|
||||
rel_calc = pmgr.get_relationship_calculator()
|
||||
rel_calc = Relationship.get_relationship_calculator()
|
||||
|
||||
self.progress.set_pass(_('Reading database...'), len(people))
|
||||
for person_handle in people:
|
||||
|
@ -33,7 +33,7 @@ Display a person's relations to the home person
|
||||
|
||||
from Simple import SimpleAccess, SimpleDoc
|
||||
from gettext import gettext as _
|
||||
from gen.plug import PluginManager
|
||||
import Relationship
|
||||
|
||||
# define the formatting string once as a constant. Since this is reused
|
||||
|
||||
@ -60,9 +60,7 @@ class AllRelReport():
|
||||
self.person = person
|
||||
self.sdb = SimpleAccess(database)
|
||||
self.sdoc = SimpleDoc(document)
|
||||
|
||||
pmgr = PluginManager.get_instance()
|
||||
self.rel_class = pmgr.get_relationship_calculator()
|
||||
self.rel_class = Relationship.get_relationship_calculator()
|
||||
|
||||
self.msg_list = []
|
||||
|
||||
|
@ -27,7 +27,7 @@ Display a person's siblings in a report window
|
||||
"""
|
||||
|
||||
from Simple import SimpleAccess, SimpleDoc, SimpleTable
|
||||
from gen.plug import PluginManager
|
||||
import Relationship
|
||||
from gettext import gettext as _
|
||||
|
||||
def run(database, document, person):
|
||||
@ -39,8 +39,7 @@ def run(database, document, person):
|
||||
sdb = SimpleAccess(database)
|
||||
sdoc = SimpleDoc(document)
|
||||
stab = SimpleTable(sdb)
|
||||
pmgr = PluginManager.get_instance()
|
||||
rel_class = pmgr.get_relationship_calculator()
|
||||
rel_class = Relationship.get_relationship_calculator()
|
||||
|
||||
# display the title
|
||||
sdoc.title(_("Siblings of %s") % sdb.name(person))
|
||||
|
@ -38,7 +38,7 @@ import datetime, time
|
||||
from BasicUtils import name_displayer as _nd
|
||||
from Errors import ReportError
|
||||
from gen.lib import NameType, EventType, Name, Date, Person
|
||||
from gen.plug import PluginManager
|
||||
import Relationship
|
||||
from gen.plug.docgen import (FontStyle, ParagraphStyle, GraphicsStyle,
|
||||
FONT_SERIF, PARA_ALIGN_RIGHT,
|
||||
PARA_ALIGN_LEFT, PARA_ALIGN_CENTER)
|
||||
@ -200,8 +200,7 @@ class CalendarReport(Report):
|
||||
self.progress.set_pass(_('Applying Filter...'),
|
||||
self.database.get_number_of_people())
|
||||
people = self.filter.apply(self.database, people, self.progress)
|
||||
pmgr = PluginManager.get_instance()
|
||||
rel_calc = pmgr.get_relationship_calculator()
|
||||
rel_calc = Relationship.get_relationship_calculator()
|
||||
|
||||
self.progress.set_pass(_('Reading database...'), len(people))
|
||||
for person_handle in people:
|
||||
|
@ -38,7 +38,7 @@ from gettext import gettext as _
|
||||
#------------------------------------------------------------------------
|
||||
from BasicUtils import name_displayer
|
||||
from Errors import ReportError
|
||||
from gen.plug import PluginManager
|
||||
import Relationship
|
||||
from gen.plug.docgen import (IndexMark, FontStyle, ParagraphStyle,
|
||||
FONT_SANS_SERIF, INDEX_TYPE_TOC, PARA_ALIGN_CENTER)
|
||||
from gen.plug.menu import NumberOption, BooleanOption, PersonOption
|
||||
@ -85,7 +85,7 @@ class KinshipReport(Report):
|
||||
raise ReportError(_("Person %s is not in the Database") % pid )
|
||||
|
||||
self.__db = database
|
||||
self.rel_calc = PluginManager.get_instance().get_relationship_calculator()
|
||||
self.rel_calc = Relationship.get_relationship_calculator()
|
||||
|
||||
self.kinship_map = {}
|
||||
self.spouse_map = {}
|
||||
|
@ -45,7 +45,7 @@ import gtk
|
||||
from BasicUtils import name_displayer
|
||||
import ManagedWindow
|
||||
from DisplayModels import PeopleModel
|
||||
from gen.plug import PluginManager
|
||||
import Relationship
|
||||
|
||||
from QuestionDialog import ErrorDialog
|
||||
from PluginUtils import Tool
|
||||
@ -86,8 +86,7 @@ class RelCalc(Tool.Tool, ManagedWindow.ManagedWindow):
|
||||
ManagedWindow.ManagedWindow.__init__(self,uistate,[],self.__class__)
|
||||
|
||||
self.dbstate = dbstate
|
||||
pmgr = PluginManager.get_instance()
|
||||
self.relationship = pmgr.get_relationship_calculator()
|
||||
self.relationship = Relationship.get_relationship_calculator()
|
||||
self.relationship.connect_db_signals(dbstate)
|
||||
|
||||
self.glade = Glade()
|
||||
|
Loading…
x
Reference in New Issue
Block a user