1
0

derive plugins from BasePlugin class

This commit is contained in:
thomasv
2013-03-15 09:58:05 +01:00
parent 93b98e1176
commit bd1cdc9bfb
6 changed files with 342 additions and 389 deletions

View File

@@ -1 +1,2 @@
# do not remove this file
from plugins import BasePlugin

View File

@@ -339,7 +339,7 @@ class ElectrumWindow(QMainWindow):
self.console.showMessage(self.wallet.banner)
# plugins that need to change the GUI do it here
self.run_hook('init')
self.run_hook('init_gui')
# plugins
@@ -350,36 +350,33 @@ class ElectrumWindow(QMainWindow):
plugin_names = [name for a, name, b in pkgutil.iter_modules([pathname])]
plugin_names = filter( lambda name: os.path.exists(os.path.join(pathname,name+'.py')), plugin_names)
imp.load_module('electrum_plugins', fp, pathname, description)
self.plugins = map(lambda name: imp.load_source('electrum_plugins.'+name, os.path.join(pathname,name+'.py')), plugin_names)
plugins = map(lambda name: imp.load_source('electrum_plugins.'+name, os.path.join(pathname,name+'.py')), plugin_names)
else:
import electrum_plugins
plugin_names = [name for a, name, b in pkgutil.iter_modules(electrum_plugins.__path__)]
self.plugins = [ __import__('electrum_plugins.'+name, fromlist=['electrum_plugins']) for name in plugin_names]
plugins = [ __import__('electrum_plugins.'+name, fromlist=['electrum_plugins']) for name in plugin_names]
self.plugin_hooks = {}
for p in self.plugins:
self.plugins = []
for p in plugins:
try:
p.init(self)
self.plugins.append( p.Plugin(self) )
except:
print_msg("Error:cannot initialize plugin",p)
traceback.print_exc(file=sys.stdout)
def set_hook(self, name, callback):
h = self.plugin_hooks.get(name, [])
h.append(callback)
self.plugin_hooks[name] = h
def unset_hook(self, name, callback):
h = self.plugin_hooks.get(name,[])
if callback in h: h.remove(callback)
self.plugin_hooks[name] = h
def run_hook(self, name, *args):
args = (self,) + args
for cb in self.plugin_hooks.get(name,[]):
apply(cb, args)
for p in self.plugins:
if not p.is_enabled():
continue
try:
f = eval('p.'+name)
except:
continue
apply(f, args)
return
def set_label(self, name, text = None):
changed = False
old_text = self.wallet.labels.get(name)
@@ -2002,7 +1999,7 @@ class ElectrumWindow(QMainWindow):
grid_plugins.setColumnStretch(0,1)
tabs.addTab(tab5, _('Plugins') )
def mk_toggle(cb, p):
return lambda: cb.setChecked(p.toggle(self))
return lambda: cb.setChecked(p.toggle())
for i, p in enumerate(self.plugins):
try:
name, description = p.get_info()

32
gui/plugins.py Normal file
View File

@@ -0,0 +1,32 @@
class BasePlugin:
def get_info(self):
return self.fullname, self.description
def __init__(self, gui, name, fullname, description):
self.name = name
self.fullname = fullname
self.description = description
self.gui = gui
self.config = gui.config
def toggle(self):
enabled = not self.is_enabled()
self.set_enabled(enabled)
self.init_gui()
return enabled
def init_gui(self):
pass
def is_enabled(self):
return self.is_available() and self.config.get('use_'+self.name) is True
def is_available(self):
return True
def set_enabled(self, enabled):
self.config.set_key('use_'+self.name, enabled, True)