mirror of
				https://github.com/kovidgoyal/calibre.git
				synced 2025-10-31 18:47:02 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			79 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			79 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()
 |