Add fromaework for viewer plugins

This commit is contained in:
Kovid Goyal 2012-08-17 20:05:25 +05:30
parent b880992393
commit 8a5a7a5975
3 changed files with 49 additions and 3 deletions

View file

@ -654,3 +654,36 @@ def save_settings(self, config_widget):
raise NotImplementedError()
# }}}
class ViewerPlugin(Plugin): # {{{
'''
These plugins are used to add functionality to the calibre viewer.
'''
def load_fonts(self):
'''
This method is called once at viewer starup. It should load any fonts
it wants to make available. For example::
def load_fonts():
from PyQt4.Qt import QFontDatabase
font_data = get_resources(['myfont1.ttf', 'myfont2.ttf'])
for raw in font_data.itervalues():
QFontDatabase.addApplicationFontFromData(raw)
'''
pass
def load_javascript(self, evaljs):
'''
This method is called every time a new HTML document is loaded in the
viewer. Use it to load javascript libraries into the viewer. For
example::
def load_javascript(self, evaljs):
js = get_resources('myjavascript.js')
evaljs(js)
'''
pass
# }}}

View file

@ -8,7 +8,7 @@
MetadataReaderPlugin, MetadataWriterPlugin,
InterfaceActionBase as InterfaceAction,
PreferencesPlugin, platform, InvalidPlugin,
StoreBase as Store)
StoreBase as Store, ViewerPlugin)
from calibre.customize.conversion import InputFormatPlugin, OutputFormatPlugin
from calibre.customize.zipplugin import loader
from calibre.customize.profiles import InputProfile, OutputProfile
@ -481,6 +481,13 @@ def all_metadata_plugins():
yield plugin
# }}}
# Viewer plugins {{{
def all_viewer_plugins():
for plugin in _initialized_plugins:
if isinstance(plugin, ViewerPlugin):
yield plugin
# }}}
# Initialize plugins {{{
_initialized_plugins = []

View file

@ -17,6 +17,7 @@
from calibre.gui2.viewer.flip import SlideFlip
from calibre.gui2.shortcuts import Shortcuts
from calibre import prints
from calibre.customize.ui import all_viewer_plugins
from calibre.gui2.viewer.keys import SHORTCUTS
from calibre.gui2.viewer.javascript import JavaScriptLoader
from calibre.gui2.viewer.position import PagePosition
@ -90,6 +91,8 @@ def __init__(self, shortcuts, parent=None, debug_javascript=False):
# Fonts
load_builtin_fonts()
for pl in all_viewer_plugins():
pl.load_fonts()
self.set_font_settings()
# Security
@ -169,8 +172,11 @@ def load_javascript_libraries(self):
if self.loaded_javascript:
return
self.loaded_javascript = True
self.loaded_lang = self.js_loader(self.mainFrame().evaluateJavaScript,
self.current_language, self.hyphenate_default_lang)
evaljs = self.mainFrame().evaluateJavaScript
self.loaded_lang = self.js_loader(evaljs, self.current_language,
self.hyphenate_default_lang)
for pl in all_viewer_plugins():
pl.load_javascript(evaljs)
@pyqtSignature("")
def animated_scroll_done(self):