derive plugins from BasePlugin class
This commit is contained in:
@@ -1 +1,2 @@
|
||||
# do not remove this file
|
||||
from plugins import BasePlugin
|
||||
|
||||
@@ -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
32
gui/plugins.py
Normal 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)
|
||||
|
||||
Reference in New Issue
Block a user