mirror of
				https://github.com/kovidgoyal/calibre.git
				synced 2025-11-04 03:27:00 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			80 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
#!/usr/bin/env python
 | 
						|
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
 | 
						|
 | 
						|
 | 
						|
__license__   = 'GPL v3'
 | 
						|
__copyright__ = '2011, Kovid Goyal <kovid@kovidgoyal.net>'
 | 
						|
__docformat__ = 'restructuredtext en'
 | 
						|
 | 
						|
# The class that all Interface Action plugin wrappers must inherit from
 | 
						|
from calibre.customize import InterfaceActionBase
 | 
						|
 | 
						|
class InterfacePluginDemo(InterfaceActionBase):
 | 
						|
    '''
 | 
						|
    This class is a simple wrapper that provides information about the actual
 | 
						|
    plugin class. The actual interface plugin class is called InterfacePlugin
 | 
						|
    and is defined in the ui.py file, as specified in the actual_plugin field
 | 
						|
    below.
 | 
						|
 | 
						|
    The reason for having two classes is that it allows the command line
 | 
						|
    calibre utilities to run without needing to load the GUI libraries.
 | 
						|
    '''
 | 
						|
    name                = 'Interface Plugin Demo'
 | 
						|
    description         = 'An advanced plugin demo'
 | 
						|
    supported_platforms = ['windows', 'osx', 'linux']
 | 
						|
    author              = 'Kovid Goyal'
 | 
						|
    version             = (1, 0, 0)
 | 
						|
    minimum_calibre_version = (0, 7, 53)
 | 
						|
 | 
						|
    #: This field defines the GUI plugin class that contains all the code
 | 
						|
    #: that actually does something. Its format is module_path:class_name
 | 
						|
    #: The specified class must be defined in the specified module.
 | 
						|
    actual_plugin       = 'calibre_plugins.interface_demo.ui:InterfacePlugin'
 | 
						|
 | 
						|
    def is_customizable(self):
 | 
						|
        '''
 | 
						|
        This method must return True to enable customization via
 | 
						|
        Preferences->Plugins
 | 
						|
        '''
 | 
						|
        return True
 | 
						|
 | 
						|
    def config_widget(self):
 | 
						|
        '''
 | 
						|
        Implement this method and :meth:`save_settings` in your plugin to
 | 
						|
        use a custom configuration dialog.
 | 
						|
 | 
						|
        This method, if implemented, must return a QWidget. The widget can have
 | 
						|
        an optional method validate() that takes no arguments and is called
 | 
						|
        immediately after the user clicks OK. Changes are applied if and only
 | 
						|
        if the method returns True.
 | 
						|
 | 
						|
        If for some reason you cannot perform the configuration at this time,
 | 
						|
        return a tuple of two strings (message, details), these will be
 | 
						|
        displayed as a warning dialog to the user and the process will be
 | 
						|
        aborted.
 | 
						|
 | 
						|
        The base class implementation of this method raises NotImplementedError
 | 
						|
        so by default no user configuration is possible.
 | 
						|
        '''
 | 
						|
        # It is important to put this import statement here rather than at the
 | 
						|
        # top of the module as importing the config class will also cause the
 | 
						|
        # GUI libraries to be loaded, which we do not want when using calibre
 | 
						|
        # from the command line
 | 
						|
        from calibre_plugins.interface_demo.config import ConfigWidget
 | 
						|
        return ConfigWidget()
 | 
						|
 | 
						|
    def save_settings(self, config_widget):
 | 
						|
        '''
 | 
						|
        Save the settings specified by the user with config_widget.
 | 
						|
 | 
						|
        :param config_widget: The widget returned by :meth:`config_widget`.
 | 
						|
        '''
 | 
						|
        config_widget.save_settings()
 | 
						|
 | 
						|
        # Apply the changes
 | 
						|
        ac = self.actual_plugin_
 | 
						|
        if ac is not None:
 | 
						|
            ac.apply_settings()
 | 
						|
 | 
						|
 |