source: sasview/guiframe/plugin_base.py @ 6bbeacd4

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 6bbeacd4 was 03314e7, checked in by Gervaise Alina <gervyh@…>, 14 years ago

working save state

  • Property mode set to 100644
File size: 6.5 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   
145    def get_context_menu(self, graph=None):
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       
153        A ref to a Graph object is passed so that you can
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        """
[f444b20]208    def set_data(self, data_list):
209        """
210        receive a list of data and use it in the current perspective
211        """
[52725d6]212    def on_set_state_helper(self, event):
213        """
214        update state
215        """
216   
Note: See TracBrowser for help on using the repository browser.