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

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 bf39777 was 7360816, checked in by Jae Cho <jhjcho@…>, 13 years ago

active radio buttons for single/batch modes

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