source: sasview/guiframe/plugin_base.py @ 52d3fd1

ESS_GUIESS_GUI_DocsESS_GUI_batch_fittingESS_GUI_bumps_abstractionESS_GUI_iss1116ESS_GUI_iss879ESS_GUI_iss959ESS_GUI_openclESS_GUI_orderingESS_GUI_sync_sascalccostrafo411magnetic_scattrelease-4.1.1release-4.1.2release-4.2.2release_4.0.1ticket-1009ticket-1094-headlessticket-1242-2d-resolutionticket-1243ticket-1249ticket885unittest-saveload
Last change on this file since 52d3fd1 was e88ebfd, checked in by Gervaise Alina <gervyh@…>, 14 years ago

working on guiframe

  • Property mode set to 100644
File size: 6.8 KB
RevLine 
[b5ca223]1################################################################################
2#This software was developed by the University of Tennessee as part of the
3#Distributed Data Analysis of Neutron Scattering Experiments (DANSE)
4#project funded by the US National Science Foundation.
5#
6#See the license text in license.txt
7#
8#copyright 2008, University of Tennessee
9################################################################################
10 
11class PluginBase:
12    """
13    This class defines the interface for a Plugin class
14    that can be used by the gui_manager.
15   
16    Plug-ins should be placed in a sub-directory called "perspectives".
17    For example, a plug-in called Foo should be place in "perspectives/Foo".
18    That directory contains at least two files:
19        perspectives/Foo/__init__.py contains two lines:
20       
21            PLUGIN_ID = "Foo plug-in 1.0"
22            from Foo import *
23           
24        perspectives/Foo/Foo.py contains the definition of the Plugin
25        class for the Foo plug-in. The interface of that Plugin class
26        should follow the interface of the class you are looking at.
27       
28    See dummyapp.py for a plugin example.
29    """
30   
31    def __init__(self, name="Test_plugin", standalone=True):
32        """
33            Abstract class for gui_manager Plugins.
34        """
[b7c7a1c]35        # Define if the plugin is local to Viewerframe  and always active
36        self._always_active = False
[b5ca223]37        ## Plug-in name. It will appear on the application menu.
38        self.sub_menu = name     
39        #standalone flag
40        self.standalone = standalone
41        ## Reference to the parent window. Filled by get_panels() below.
42        self.parent = None
[52725d6]43        #plugin state reader
44        self.state_reader = None 
45        self._extensions = ''
[b5ca223]46        ## List of panels that you would like to open in AUI windows
47        #  for your plug-in. This defines your plug-in "perspective"
48        self.perspective = []
49       
[03314e7]50    def clear_panel(self):
51        """
52        clear all related panels
53        """
[52725d6]54    def get_extensions(self):
55        """
56        return state reader and its extensions
57        """
58        return self.state_reader, self._extensions
59   
[52b8b74]60    def can_load_data(self):
61        """
62        if return True, then call handler to laod data
63        """
64        return False
65   
66    def use_data(self):
67        """
68        return True if these plugin use data
69        """
70        return True
71   
[6db811e]72    def delete_data(self, data_id):
73        """
74        Delete all references of data which id are in data_list.
75        """
76       
[52b8b74]77    def load_data(self, event):
78        """
79        Load  data
80        """
81        raise NotImplemented
82 
83    def load_folder(self, event):
84        """
85        Load entire folder
86        """
87        raise NotImplemented 
88   
[b7c7a1c]89    def set_is_active(self, active=False):
90        """
91        """
92        self._always_active = active
93       
94    def is_always_active(self):
95        """
96        return True is this plugin is always active and it is local to guiframe
97        even if the user is switching between perspectives
98        """
99        return self._always_active
[75fbd17]100
[bf4402c3]101    def populate_menu(self, parent):
[b5ca223]102        """
103        Create and return the list of application menu
104        items for the plug-in.
105       
106        :param parent: parent window
107       
108        :return: plug-in menu
109       
110        """
111        return []
112   
113    def get_panels(self, parent):
114        """
115        Create and return the list of wx.Panels for your plug-in.
116        Define the plug-in perspective.
117       
118        Panels should inherit from DefaultPanel defined below,
119        or should present the same interface. They must define
120        "window_caption" and "window_name".
121       
122        :param parent: parent window
123       
124        :return: list of panels
125       
126        """
127        ## Save a reference to the parent
128        self.parent = parent
129       
130        # Return the list of panels
131        return []
132   
[75fbd17]133    def clear_panel(self):
134        """
135        reset all panels
136        """
137   
[b5ca223]138    def get_tools(self):
139        """
140        Returns a set of menu entries for tools
141        """
142        return []
143       
144   
[a07e72f]145    def get_context_menu(self, plotpanel=None):
[b5ca223]146        """
147        This method is optional.
148   
149        When the context menu of a plot is rendered, the
150        get_context_menu method will be called to give you a
151        chance to add a menu item to the context menu.
152       
[a07e72f]153        A ref to a plotpanel object is passed so that you can
[b5ca223]154        investigate the plot content and decide whether you
155        need to add items to the context menu. 
156       
157        This method returns a list of menu items.
158        Each item is itself a list defining the text to
159        appear in the menu, a tool-tip help text, and a
160        call-back method.
161       
162        :param graph: the Graph object to which we attach the context menu
163       
164        :return: a list of menu items with call-back function
165       
166        """
167        return []
168   
169    def get_perspective(self):
170        """
171        Get the list of panel names for this perspective
172        """
173        return self.perspective
174   
[75fbd17]175    def on_perspective(self, event=None):
[b5ca223]176        """
177        Call back function for the perspective menu item.
178        We notify the parent window that the perspective
179        has changed.
180       
181        :param event: menu event
182       
183        """
[f444b20]184        self.parent.set_current_perspective(self)
[b5ca223]185        self.parent.set_perspective(self.perspective)
186   
187    def post_init(self):
188        """
189        Post initialization call back to close the loose ends
190        """
191        pass
192   
193    def set_default_perspective(self):
194        """
195       Call back method that True to notify the parent that the current plug-in
196       can be set as default  perspective.
197       when returning False, the plug-in is not candidate for an automatic
198       default perspective setting
199        """
[f444b20]200        if self.standalone:
201            return True
[b5ca223]202        return False
[f444b20]203   
[75fbd17]204    def set_state(self, state=None, datainfo=None):   
205        """
206        update state
207        """
[e88ebfd]208    def set_data(self, data_list=None):
[f444b20]209        """
210        receive a list of data and use it in the current perspective
[e88ebfd]211       
[f444b20]212        """
[e88ebfd]213    def set_theory(self, theory_list=None):
214        """
215        :param theory_list: list of information
216            related to available theory state
217        """
218        msg = "%s plugin: does not support import theory" % str(self.sub_menu)
219        raise ValueError, msg
220   
[52725d6]221    def on_set_state_helper(self, event):
222        """
223        update state
224        """
225   
Note: See TracBrowser for help on using the repository browser.