source: sasview/guiframe/plugin_base.py @ b92cbf61

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 b92cbf61 was 34e3ab3, checked in by Gervaise Alina <gervyh@…>, 14 years ago

modify menu item position according to what was discuss today

  • Property mode set to 100644
File size: 7.0 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   
[3658717e]72    def is_in_use(self, data_id):
73        """
74        get a  data id and return true or false if the data
75        is currently in use the current plugin
76        """
77        return False
78   
[6db811e]79    def delete_data(self, data_id):
80        """
81        Delete all references of data which id are in data_list.
82        """
83       
[52b8b74]84    def load_data(self, event):
85        """
86        Load  data
87        """
88        raise NotImplemented
89 
90    def load_folder(self, event):
91        """
92        Load entire folder
93        """
94        raise NotImplemented 
95   
[b7c7a1c]96    def set_is_active(self, active=False):
97        """
98        """
99        self._always_active = active
100       
101    def is_always_active(self):
102        """
103        return True is this plugin is always active and it is local to guiframe
104        even if the user is switching between perspectives
105        """
106        return self._always_active
[34e3ab3]107   
108    def populate_file_menu(self):
109        """
110        Append menu item under file menu item of the frame
111        """
112        return []
113   
[bf4402c3]114    def populate_menu(self, parent):
[b5ca223]115        """
116        Create and return the list of application menu
117        items for the plug-in.
118       
119        :param parent: parent window
120       
121        :return: plug-in menu
122       
123        """
124        return []
125   
126    def get_panels(self, parent):
127        """
128        Create and return the list of wx.Panels for your plug-in.
129        Define the plug-in perspective.
130       
131        Panels should inherit from DefaultPanel defined below,
132        or should present the same interface. They must define
133        "window_caption" and "window_name".
134       
135        :param parent: parent window
136       
137        :return: list of panels
138       
139        """
140        ## Save a reference to the parent
141        self.parent = parent
142       
143        # Return the list of panels
144        return []
145   
[957723f]146 
[b5ca223]147    def get_tools(self):
148        """
149        Returns a set of menu entries for tools
150        """
151        return []
152       
153   
[a07e72f]154    def get_context_menu(self, plotpanel=None):
[b5ca223]155        """
156        This method is optional.
157   
158        When the context menu of a plot is rendered, the
159        get_context_menu method will be called to give you a
160        chance to add a menu item to the context menu.
161       
[a07e72f]162        A ref to a plotpanel object is passed so that you can
[b5ca223]163        investigate the plot content and decide whether you
164        need to add items to the context menu. 
165       
166        This method returns a list of menu items.
167        Each item is itself a list defining the text to
168        appear in the menu, a tool-tip help text, and a
169        call-back method.
170       
171        :param graph: the Graph object to which we attach the context menu
172       
173        :return: a list of menu items with call-back function
174       
175        """
176        return []
177   
178    def get_perspective(self):
179        """
180        Get the list of panel names for this perspective
181        """
182        return self.perspective
183   
[75fbd17]184    def on_perspective(self, event=None):
[b5ca223]185        """
186        Call back function for the perspective menu item.
187        We notify the parent window that the perspective
188        has changed.
189       
190        :param event: menu event
191       
192        """
[f444b20]193        self.parent.set_current_perspective(self)
[b5ca223]194        self.parent.set_perspective(self.perspective)
195   
196    def post_init(self):
197        """
198        Post initialization call back to close the loose ends
199        """
200        pass
201   
202    def set_default_perspective(self):
203        """
204       Call back method that True to notify the parent that the current plug-in
205       can be set as default  perspective.
206       when returning False, the plug-in is not candidate for an automatic
207       default perspective setting
208        """
[f444b20]209        if self.standalone:
210            return True
[b5ca223]211        return False
[f444b20]212   
[75fbd17]213    def set_state(self, state=None, datainfo=None):   
214        """
215        update state
216        """
[e88ebfd]217    def set_data(self, data_list=None):
[f444b20]218        """
219        receive a list of data and use it in the current perspective
[e88ebfd]220       
[f444b20]221        """
[e88ebfd]222    def set_theory(self, theory_list=None):
223        """
224        :param theory_list: list of information
225            related to available theory state
226        """
227        msg = "%s plugin: does not support import theory" % str(self.sub_menu)
228        raise ValueError, msg
229   
[52725d6]230    def on_set_state_helper(self, event):
231        """
232        update state
233        """
234   
Note: See TracBrowser for help on using the repository browser.