source: sasview/sansguiframe/src/sans/guiframe/plugin_base.py @ 51e5a87

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 51e5a87 was ae84427, checked in by Jae Cho <jhjcho@…>, 12 years ago

mdi frames for main applications

  • Property mode set to 100644
File size: 8.9 KB
Line 
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        """
35        # Define if the plugin is local to Viewerframe  and always active
36        self._always_active = False
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
43        self.frame = None
44        #plugin state reader
45        self.state_reader = None 
46        self._extensions = ''
47        ## List of panels that you would like to open in AUI windows
48        #  for your plug-in. This defines your plug-in "perspective"
49        self.perspective = []
50        #flag to tell the current plugin that aaplication is in batch mode
51        self.batch_on = False
52        #properties for color and ID of a specific plugin..
53        self.color = None
54        self.id = -1
55        self.batch_capable = self.get_batch_capable()
56   
57    def get_batch_capable(self):
58        """
59        Check if the plugin has a batch capability
60        """
61        return False
62         
63    def add_color(self, color, id):
64        """
65        Adds color to a plugin
66        """
67       
68    def clear_panel(self):
69        """
70        clear all related panels
71        """
72    def get_extensions(self):
73        """
74        return state reader and its extensions
75        """
76        return self.state_reader, self._extensions
77   
78    def can_load_data(self):
79        """
80        if return True, then call handler to laod data
81        """
82        return False
83   
84    def use_data(self):
85        """
86        return True if these plugin use data
87        """
88        return True
89   
90    def is_in_use(self, data_id):
91        """
92        get a  data id a list of data name if data data is
93         currently used by the plugin and the name of the plugin
94       
95        data_name = 'None'
96        in_use = False
97        example [(data_name, self.sub_menu)]
98        """
99        return []
100   
101    def delete_data(self, data_id):
102        """
103        Delete all references of data which id are in data_list.
104        """
105       
106    def load_data(self, event):
107        """
108        Load  data
109        """
110        raise NotImplementedError
111 
112    def load_folder(self, event):
113        """
114        Load entire folder
115        """
116        raise NotImplementedError
117   
118    def set_is_active(self, active=False):
119        """
120        """
121        self._always_active = active
122       
123    def is_always_active(self):
124        """
125        return True is this plugin is always active and it is local to guiframe
126        even if the user is switching between perspectives
127        """
128        return self._always_active
129   
130    def populate_file_menu(self):
131        """
132        Append menu item under file menu item of the frame
133        """
134        return []
135   
136    def populate_menu(self, parent):
137        """
138        Create and return the list of application menu
139        items for the plug-in.
140       
141        :param parent: parent window
142       
143        :return: plug-in menu
144       
145        """
146        return []
147   
148    def get_frame(self):
149        """
150        Returns MDIChildFrame
151        """
152        return self.frame
153
154    def _frame_set_helper(self):
155        """
156        Sets default frame config
157        """
158        if self.frame != None:
159            self.frame.EnableCloseButton(False)
160            self.frame.Show(False)
161   
162    def get_panels(self, parent):
163        """
164        Create and return the list of wx.Panels for your plug-in.
165        Define the plug-in perspective.
166       
167        Panels should inherit from DefaultPanel defined below,
168        or should present the same interface. They must define
169        "window_caption" and "window_name".
170       
171        :param parent: parent window
172       
173        :return: list of panels
174       
175        """
176        ## Save a reference to the parent
177        self.parent = parent
178       
179        # Return the list of panels
180        return []
181   
182 
183    def get_tools(self):
184        """
185        Returns a set of menu entries for tools
186        """
187        return []
188       
189   
190    def get_context_menu(self, plotpanel=None):
191        """
192        This method is optional.
193   
194        When the context menu of a plot is rendered, the
195        get_context_menu method will be called to give you a
196        chance to add a menu item to the context menu.
197       
198        A ref to a plotpanel object is passed so that you can
199        investigate the plot content and decide whether you
200        need to add items to the context menu. 
201       
202        This method returns a list of menu items.
203        Each item is itself a list defining the text to
204        appear in the menu, a tool-tip help text, and a
205        call-back method.
206       
207        :param graph: the Graph object to which we attach the context menu
208       
209        :return: a list of menu items with call-back function
210       
211        """
212        return []
213   
214    def get_perspective(self):
215        """
216        Get the list of panel names for this perspective
217        """
218        return self.perspective
219   
220    def on_perspective(self, event=None):
221        """
222        Call back function for the perspective menu item.
223        We notify the parent window that the perspective
224        has changed.
225       
226        :param event: menu event
227       
228        """
229        old_frame = None
230        tool_height = self.parent.get_toolbar_height()
231        old_persp = self.parent.get_current_perspective()
232        if old_persp != None:
233            old_frame = old_persp.get_frame()
234        self.parent.check_multimode(self)
235        self.parent.set_current_perspective(self)
236        self.parent.set_perspective(self.perspective)
237       
238        if self.frame != None:
239            if old_frame != None:
240                pos_x, pos_y = old_frame.GetPositionTuple()
241                self.frame.SetPosition((pos_x, pos_y - tool_height))
242            if not self.frame.IsShown():
243                self.frame.Show(True)
244       
245       
246    def set_batch_selection(self, flag):
247        """
248        the plugin to its batch state if flag is True
249        """
250        self.batch_on = flag
251        self.on_batch_selection(self.batch_on)   
252   
253    def on_batch_selection(self, flag):
254        """
255        need to be overwritten by the derivated class
256        """
257   
258    def post_init(self):
259        """
260        Post initialization call back to close the loose ends
261        """
262        pass
263   
264    def set_default_perspective(self):
265        """
266       Call back method that True to notify the parent that the current plug-in
267       can be set as default  perspective.
268       when returning False, the plug-in is not candidate for an automatic
269       default perspective setting
270        """
271        if self.standalone:
272            return True
273        return False
274   
275    def set_state(self, state=None, datainfo=None):   
276        """
277        update state
278        """
279    def set_data(self, data_list=None):
280        """
281        receive a list of data and use it in the current perspective
282       
283        """
284    def set_theory(self, theory_list=None):
285        """
286        :param theory_list: list of information
287            related to available theory state
288        """
289        msg = "%s plugin: does not support import theory" % str(self.sub_menu)
290        raise ValueError, msg
291   
292    def on_set_state_helper(self, event):
293        """
294        update state
295        """
296   
Note: See TracBrowser for help on using the repository browser.