Index: guiframe/data_panel.py
===================================================================
--- guiframe/data_panel.py	(revision 32c0841e02d6c59dd5e7872fdba98ea9afb790b9)
+++ guiframe/data_panel.py	(revision 52b8b74ee4a07398ef3f87d25aa332dfba2e9656)
@@ -417,7 +417,11 @@
         self.parent._onClose()
         
+    
+from sans.guiframe.dataFitting import Data1D
+from DataLoader.loader import Loader
             
-data_list = [('Data1', 'Data1D', '07/01/2010'), 
-            ('Data2', 'Data2D', '07/03/2011'),
+list  = Loader().load('latex_smeared.xml')
+data_list = [('Data1', list[0], '07/01/2010'), 
+            ('Data2', list[1], '07/03/2011'),
             ('Data3', 'Theory1D', '06/01/2010'),
             ('Data4', 'Theory2D', '07/01/2010'),
Index: guiframe/events.py
===================================================================
--- guiframe/events.py	(revision b5ca22392a8b926450a207ca7fb9c9bf296558e2)
+++ guiframe/events.py	(revision 52b8b74ee4a07398ef3f87d25aa332dfba2e9656)
Index: guiframe/gui_manager.py
===================================================================
--- guiframe/gui_manager.py	(revision 749eb8a6ff70daa6717fc1b7e22925d5fa5511b6)
+++ guiframe/gui_manager.py	(revision 52b8b74ee4a07398ef3f87d25aa332dfba2e9656)
@@ -41,6 +41,6 @@
 from sans.guiframe.events import StatusEvent
 from sans.guiframe.events import NewPlotEvent
-
-
+from sans.guiframe.gui_style import *
+from sans.guiframe.events import NewLoadedDataEvent
 STATE_FILE_EXT = ['.inv', '.fitv', '.prv']
 
@@ -55,5 +55,6 @@
     
     def __init__(self, parent, id, title, 
-                 window_height=300, window_width=300):
+                 window_height=300, window_width=300,
+                 gui_style=GUIFRAME.SINGLE_APPLICATION):
         """
         Initialize the Frame object
@@ -65,4 +66,5 @@
         self._window_height = window_height
         self._window_width  = window_width
+        self.__gui_style = gui_style
         
         # Logging info
@@ -87,9 +89,17 @@
         #data manager
         from data_manager import DataManager
-        self.data_manager = DataManager()
+        self._data_manager = DataManager()
+        self._data_panel = None
         #add current perpsective
         self._current_perspective = None
-        #file menu
-        self.file_menu = None
+        self._plotting_plugin = None
+        self._data_plugin = None
+        #Menu bar and item
+        self._menubar = None
+        self._file_menu = None
+        self._data_menu = None
+        self._window_menu = None
+        self._window_menu = None
+        self._help = None
         
         ## Find plug-ins
@@ -97,10 +107,5 @@
         self.plugins = []
         #add local plugin
-      
-        from sans.guiframe.local_perspectives.plotting import plotting
-        from sans.guiframe.local_perspectives.data_loader import data_loader
-        self.plugins.append(plotting.Plugin())
-        self.plugins.append(data_loader.Plugin())
-        
+        self.plugins += self._get_local_plugins()
         self.plugins += self._find_plugins()
       
@@ -154,10 +159,27 @@
         self.SetStatusBar(self.sb)
         # Add panel
-        self._mgr = wx.aui.AuiManager(self)
-        self._mgr.SetDockSizeConstraint(0.5, 0.5) 
+        default_flag = wx.aui.AUI_MGR_DEFAULT| wx.aui.AUI_MGR_ALLOW_ACTIVE_PANE
+        self._mgr = wx.aui.AuiManager(self, flags=default_flag)
+        """
+        if self.__gui_style in [GUIFRAME.MULTIPLE_APPLICATIONS]:
+            from data_panel import DataPanel
+            self._data_panel = DataPanel(self)
+            """
         # Load panels
         self._load_panels()
         self._mgr.Update()
         
+    def _layout(self, style):
+        """
+        Layout the frame according to a style
+        """
+        if self.__gui_style == GUIFRAME.SINGLE_APPLICATION:
+            #Divide the frame into 
+            print "GUIFRAME.SINGLE_APPLICATION"
+        elif self.__gui_style == GUIFRAME.MULTIPLE_APPLICATIONS:
+            print 'GUIFRAME.MULTIPLE_APPLICATION'
+        elif self.__gui_style == GUIFRAME.FLOATING_PANEL:
+            print "GUIFRAME.FLOATING_PANEL"
+            
     def SetStatusText(self, *args, **kwds):
         """
@@ -192,4 +214,40 @@
             self.plugins.append(plugin)
       
+    def _get_local_plugins(self):
+        """
+        get plugins local to guiframe and others 
+        """
+        plugins = []
+        #import guiframe local plugins
+        if self.__gui_style == GUIFRAME.DATALOADER_ON:
+            try:
+                from sans.guiframe.local_perspectives.data_loader import data_loader
+                self._data_plugin =data_loader.Plugin()
+                plugins.append(self._data_plugin)
+            except:
+                msg = "ViewerFrame._find_plugins:"
+                msg += "cannot import dataloader plugin.\n %s" % sys.exc_value
+                logging.error(msg)
+        elif self.__gui_style == GUIFRAME.PLOTTIN_ON:
+            try:
+                from sans.guiframe.local_perspectives.plotting import plotting
+                self._plotting_plugin = plotting.Plugin()
+                plugins.append(self._plotting_plugin)
+            except:
+                msg = "ViewerFrame._find_plugins:"
+                msg += "cannot import plotting plugin.\n %s" % sys.exc_value
+        elif self.__gui_style in [6, 7, 8]:
+            try:
+                from sans.guiframe.local_perspectives.data_loader import data_loader
+                self._data_plugin =data_loader.Plugin()
+                plugins.append(self._data_plugin)
+                from sans.guiframe.local_perspectives.plotting import plotting
+                self._plotting_plugin = plotting.Plugin()
+                plugins.append(self._plotting_plugin)
+            except:
+                msg = "ViewerFrame._get_local_plugins: %s" % sys.exc_value
+                logging.error(msg)
+        return plugins
+    
     def _find_plugins(self, dir="perspectives"):
         """
@@ -392,7 +450,7 @@
                     id = wx.NewId()
                     m_name, m_hint, m_handler = item
-                    self.filemenu.Append(id, m_name, m_hint)
+                    self._filemenu.Append(id, m_name, m_hint)
                     wx.EVT_MENU(self, id, m_handler)
-                self.filemenu.AppendSeparator()
+                self._filemenu.AppendSeparator()
                 
     def _setup_menus(self):
@@ -402,64 +460,11 @@
         # Menu
         self._menubar = wx.MenuBar()
-        # File menu
-        self.filemenu = wx.Menu()
-        
-        # some menu of plugin to be seen under file menu
-        self._populate_file_menu()
-        id = wx.NewId()
-        self.filemenu.Append(id, '&Save state into File',
-                             'Save project as a SansView (svs) file')
-        wx.EVT_MENU(self, id, self._on_save)
-        #self.filemenu.AppendSeparator()
-        
-        id = wx.NewId()
-        self.filemenu.Append(id, '&Quit', 'Exit') 
-        wx.EVT_MENU(self, id, self.Close)
-        
-        # Add sub menus
-        self._menubar.Append(self.filemenu, '&File')
-        
-        # Window menu
-        # Attach a menu item for each panel in our
-        # panel list that also appears in a plug-in.
-        
-        # Only add the panel menu if there is only one perspective and
-        # it has more than two panels.
-        # Note: the first plug-in is always the plotting plug-in. 
-        #The first application
-        # plug-in is always the second one in the list.
-        if len(self.plugins) == 2:
-            plug = self.plugins[1]
-            pers = plug.get_perspective()
+        self._add_menu_file()
+        self._add_menu_data()
+        self._add_menu_application()
+        self._add_menu_window()
        
-            if len(pers) > 1:
-                viewmenu = wx.Menu()
-                for item in self.panels:
-                    if item == 'default':
-                        continue
-                    panel = self.panels[item]
-                    if panel.window_name in pers:
-                        viewmenu.Append(int(item), panel.window_caption,
-                                        "Show %s window" % panel.window_caption)
-                        wx.EVT_MENU(self, int(item), self._on_view)
-                self._menubar.Append(viewmenu, '&Window')
-
-        # Perspective
-        # Attach a menu item for each defined perspective.
-        # Only add the perspective menu if there are more than one perspectives
-        n_perspectives = 0
-        for plug in self.plugins:
-            if len(plug.get_perspective()) > 0:
-                n_perspectives += 1
-        
-        if n_perspectives > 1:
-            p_menu = wx.Menu()
-            for plug in self.plugins:
-                if len(plug.get_perspective()) > 0:
-                    id = wx.NewId()
-                    p_menu.Append(id, plug.sub_menu,
-                                  "Switch to %s perspective" % plug.sub_menu)
-                    wx.EVT_MENU(self, id, plug.on_perspective)
-            self._menubar.Append(p_menu, '&Perspective')
+
+        
  
         # Tools menu
@@ -509,5 +514,5 @@
         # Add available plug-in sub-menus. 
         for item in self.plugins:
-            if hasattr(item, "populate_menu"):
+            if item != self._plotting_plugin:
                 for (self.next_id, menu, name) in \
                     item.populate_menu(self.next_id, self):
@@ -517,4 +522,136 @@
         self.SetMenuBar(self._menubar)
     
+    def _add_menu_window(self):
+        """
+        add a menu window to the menu bar
+        Window menu
+        Attach a menu item for each panel in our
+        panel list that also appears in a plug-in.
+        
+        Only add the panel menu if there is only one perspective and
+        it has more than two panels.
+        Note: the first plug-in is always the plotting plug-in. 
+        The first application
+        #plug-in is always the second one in the list.
+        """
+        self._window_menu = wx.Menu()
+        if self._plotting_plugin is not None:
+            for (self.next_id, menu, name) in \
+                self._plotting_plugin.populate_menu(self.next_id, self):
+                self._window_menu.AppendSubMenu(menu, name)
+        self._window_menu.AppendSeparator()
+        self._menubar.Append(self._window_menu, '&Window')
+        if self.defaultPanel is not None :
+            id = wx.NewId()
+            self._window_menu.Append(id,'&Welcome', '')
+            
+            wx.EVT_MENU(self, id, self.show_welcome_panel)
+        if self.__gui_style in [GUIFRAME.MANAGER_ON,
+                                 GUIFRAME.MULTIPLE_APPLICATIONS]:
+            id = wx.NewId()
+            self._window_menu.Append(id,'&Data Manager', '')
+            
+            wx.EVT_MENU(self, id, self.show_data_panel)
+            
+        """
+        if len(self.plugins) == 2:
+            plug = self.plugins[1]
+            pers = plug.get_perspective()
+       
+            if len(pers) > 1:
+                self._window_menu = wx.Menu()
+                for item in self.panels:
+                    if item == 'default':
+                        continue
+                    panel = self.panels[item]
+                    if panel.window_name in pers:
+                        self._window_menu.Append(int(item),
+                                                  panel.window_caption,
+                                        "Show %s window" % panel.window_caption)
+                        wx.EVT_MENU(self, int(item), self._on_view)
+                self._menubar.Append(self._window_menu, '&Window')
+                """
+                
+    def _add_menu_application(self):
+        """
+        
+        # Attach a menu item for each defined perspective or application.
+        # Only add the perspective menu if there are more than one perspectives
+        add menu application
+        """
+        if self.__gui_style in [GUIFRAME.MULTIPLE_APPLICATIONS]:
+            p_menu = wx.Menu()
+            for plug in self.plugins:
+                if len(plug.get_perspective()) > 0:
+                    id = wx.NewId()
+                    p_menu.Append(id, plug.sub_menu,
+                                  "Switch to application: %s" % plug.sub_menu)
+                    wx.EVT_MENU(self, id, plug.on_perspective)
+            self._menubar.Append(p_menu, '&Applications')
+            
+    def _add_menu_file(self):
+        """
+        add menu file
+        """
+         # File menu
+        self._filemenu = wx.Menu()
+        
+        # some menu of plugin to be seen under file menu
+        self._populate_file_menu()
+        
+        id = wx.NewId()
+        self._filemenu.Append(id, '&Save state into File',
+                             'Save project as a SansView (svs) file')
+        wx.EVT_MENU(self, id, self._on_save)
+        #self.__filemenu.AppendSeparator()
+        
+        id = wx.NewId()
+        self._filemenu.Append(id, '&Quit', 'Exit') 
+        wx.EVT_MENU(self, id, self.Close)
+        
+        # Add sub menus
+        self._menubar.Append(self._filemenu, '&File')
+        
+    def _add_menu_data(self):
+        """
+        Add menu item item data to menu bar
+        """
+        # Add menu data 
+        self._data_menu = wx.Menu()
+        #menu for data files
+        data_file_id = wx.NewId()
+        data_file_hint = "load one or more data in the application"
+        self._data_menu.Append(data_file_id, 
+                         '&Load Data File(s)', data_file_hint)
+        wx.EVT_MENU(self, data_file_id, self._load_data)
+        if self.__gui_style == GUIFRAME.SINGLE_APPLICATION:
+            self._menubar.Append(self._data_menu, '&Data')
+            return 
+        else:
+            #menu for data from folder
+            data_folder_id = wx.NewId()
+            data_folder_hint = "load multiple data in the application"
+            self._data_menu.Append(data_folder_id, 
+                             '&Load Data Folder', data_folder_hint)
+            wx.EVT_MENU(self, data_folder_id, self._load_folder)
+            self._menubar.Append(self._data_menu, '&Data')
+        
+    def _load_data(self, event):
+        """
+        connect menu item load data with the first plugin that can load data
+        """
+        for plug in self.plugins:
+            if plug.can_load_data():
+                plug.load_data(event)
+                
+    def _load_folder(self, event):
+        """
+        connect menu item load data with the first plugin that can load data and
+        folder
+        """
+        for plug in self.plugins:
+            if plug.can_load_data():
+                plug.load_folder(event)
+                
     def _on_status_event(self, evt):
         """
@@ -832,4 +969,12 @@
         return path
     
+    def show_data_panel(self, event):
+        """
+        """
+    def show_welcome_panel(self, event):
+        """
+        show welcome panel
+        """
+        
     def add_data(self, data_list):
         """
@@ -837,5 +982,12 @@
         determine if data was be plot of send to data perspectives
         """
-        self.data_manager.add_data(data_list)
+        #send a list of available data to plotting plugin
+        avalaible_data = []
+        if self._data_manager is not None:
+            self._data_manager.add_data(data_list)
+            avalaible_data = self._data_manager.get_all_data()
+        wx.PostEvent(self, NewLoadedDataEvent(data_to_add=avalaible_data,
+                                              data_to_remove = [])) 
+            
         if AUTO_SET_DATA:
             if self._current_perspective is not None:
@@ -853,5 +1005,7 @@
         if AUTO_PLOT:
             self.plot_data(data_list)
-            
+       
+        
+        
     def plot_data(self, data_list):
         """
Index: guiframe/gui_style.py
===================================================================
--- guiframe/gui_style.py	(revision f444b20f1e24695fba634d38bf4839ddd05e95a6)
+++ guiframe/gui_style.py	(revision 52b8b74ee4a07398ef3f87d25aa332dfba2e9656)
@@ -4,6 +4,23 @@
 """
 
-LOADING = True
-PLOTTING = True
-DATAMANAGER = True
+class GUIFRAME:
+    MANAGER_ON = 1
+    FLOATING_PANEL = 2
+    FIXED_PANEL = 3
+    PLOTTIN_ON = 4
+    DATALOADER_ON = 5
+    SINGLE_APPLICATION = 6
+    MULTIPLE_APPLICATIONS = 7
+    
+    DEFAULT_STYLE = 8
 
+if __name__ == "__main__":
+  
+    print GUIFRAME.DEFAULT_STYLE
+    print GUIFRAME.FLOATING_PANEL
+ 
+    value = GUIFRAME.MANAGER_ON|GUIFRAME.DATALOADER_ON
+    print value
+    print value in [1,2]
+    print value in [5,2]
+    print value in [GUIFRAME.MANAGER_ON,GUIFRAME.DATALOADER_ON]
Index: guiframe/local_perspectives/data_loader/data_loader.py
===================================================================
--- guiframe/local_perspectives/data_loader/data_loader.py	(revision de48a1a174078007472d180f8b17f2435616d929)
+++ guiframe/local_perspectives/data_loader/data_loader.py	(revision 52b8b74ee4a07398ef3f87d25aa332dfba2e9656)
@@ -35,31 +35,4 @@
         self.loader = Loader()   
         
-    def populate_menu(self, id, owner):
-        """
-        Create a menu for the Data plug-in
-        
-        :param id: id to create a menu
-        :param owner: owner of menu
-        
-        :return: list of information to populate the main menu
-        
-        """
-        #Menu for data loader
-        self.menu = wx.Menu()
-        #menu for data files
-        data_file_id = wx.NewId()
-        data_file_hint = "load one or more data in the application"
-        self.menu.Append(data_file_id, 
-                         '&Load Data File(s)', data_file_hint)
-        wx.EVT_MENU(owner, data_file_id, self._load_data)
-        #menu for data from folder
-        data_folder_id = wx.NewId()
-        data_folder_hint = "load multiple data in the application"
-        self.menu.Append(data_folder_id, 
-                         '&Load Data Folder', data_folder_hint)
-        wx.EVT_MENU(owner, data_folder_id, self._load_folder)
-        #create  menubar items
-        return [(id, self.menu, "Data")]
-    
     def populate_file_menu(self):
         """
@@ -69,7 +42,7 @@
         
         hint_load_file = "Read state's files and load them into the application"
-        return [["Open State from File", hint_load_file, self._load_file]]
+        return [["Open State from File", hint_load_file, self.load_file]]
   
-    def _load_data(self, event):
+    def load_data(self, event):
         """
         Load data
@@ -81,5 +54,11 @@
         self.get_data(file_list, flag=flag)
         
-    def _load_file(self, event):
+    def can_load_data(self):
+        """
+        if return True, then call handler to laod data
+        """
+        return True
+    
+    def load_file(self, event):
         """
         Load  sansview defined files
@@ -91,5 +70,5 @@
         self.get_data(file_list, flag=flag)
        
-    def _load_folder(self, event):
+    def load_folder(self, event):
         """
         Load entire folder
@@ -101,5 +80,5 @@
         file_list = self.get_file_path(path)
         self.get_data(file_list, flag=flag)
-    
+       
     def get_wild_card(self, flag=True):
         """
Index: guiframe/local_perspectives/plotting/Plotter1D.py
===================================================================
--- guiframe/local_perspectives/plotting/Plotter1D.py	(revision df7046fcb50acb9613f62b370ccd175fe64429bf)
+++ guiframe/local_perspectives/plotting/Plotter1D.py	(revision 52b8b74ee4a07398ef3f87d25aa332dfba2e9656)
@@ -29,4 +29,5 @@
 from sans.guiframe.events import RemoveDataEvent
 from sans.guiframe.events import AddManyDataEvent
+from sans.guiframe.events import EVT_NEW_LOADED_DATA
 from sans.guiframe.utils import PanelMenu
 from sans.guiframe.dataFitting import Data1D
@@ -64,4 +65,9 @@
         ## Plottables
         self.plots = {}
+        #context menu
+        self._slicerpop = None
+        self._menu_add_plot = None
+        self._available_data = []
+        self._menu_add_ids = []
         ## save errors dy  for each data plotted
         self.err_dy = {}
@@ -80,5 +86,34 @@
         self.graph.yaxis("\\rm{Intensity} ", "cm^{-1}")
         self.graph.render(self)
-   
+        #bind with event to contrst context menu
+        self.parent.Bind(EVT_NEW_LOADED_DATA, self._add_new_plot)
+        
+    def on_add_new_plot(self, event):
+        """
+        """
+    def _add_new_plot(self, event):
+        """
+        Construct the context menu given available data
+        """
+        self._available_data = event.data_to_add
+    
+    def _fill_menu_add_plot(self):
+        """
+        """
+        if self._menu_add_plot is not None:
+            if self._available_data:
+                for id in self._menu_add_ids:
+                    item = self._menu_add_plot.FindItemById(id)
+                    if item is None:
+                        for data in self._available_data:
+                            new_id = wx.NewId()
+                            hint = 'Add %s to this panel' % str(data.name)
+                            self._menu_add_plot.Append(new_id, str(data.name), hint)
+                            wx.EVT_MENU(self, id, self.on_add_new_plot)
+                            self._menu_add_ids.append(new_id)
+                    else:
+                        if item.GetLabel() == 'No Loaded Data':
+                            self._menu_add_plot.RemoveItem(item)
+                        
     def set_data(self, list=None):
         """
@@ -205,18 +240,28 @@
         
         """
-        slicerpop = PanelMenu()
-        slicerpop.set_plots(self.plots)
-        slicerpop.set_graph(self.graph)     
+        self._slicerpop = PanelMenu()
+        self._slicerpop.set_plots(self.plots)
+        self._slicerpop.set_graph(self.graph)     
         # Various plot options
         id = wx.NewId()
-        slicerpop.Append(id, '&Save image', 'Save image as PNG')
+        self._slicerpop.Append(id, '&Save image', 'Save image as PNG')
         wx.EVT_MENU(self, id, self.onSaveImage)
         id = wx.NewId()
-        slicerpop.Append(id, '&Print image', 'Print image ')
+        self._slicerpop.Append(id, '&Print image', 'Print image ')
         wx.EVT_MENU(self, id, self.onPrint)
         id = wx.NewId()
-        slicerpop.Append(id, '&Print Preview', 'image preview for print')
+        self._slicerpop.Append(id, '&Print Preview', 'image preview for print')
         wx.EVT_MENU(self, id, self.onPrinterPreview)
-        slicerpop.AppendSeparator()
+        #add plot
+        self._menu_add_plot = wx.Menu()
+        id = wx.NewId()
+        self._menu_add_plot.Append(id, '&No Loaded Data', 'Add new plot')
+        self._menu_add_plot.FindItemByPosition(0).Enable(False)
+        self._menu_add_ids.append(id)
+        
+        self._slicerpop.AppendSubMenu(self._menu_add_plot, '&Add New Plot')
+        self._fill_menu_add_plot()
+        self._slicerpop.AppendSeparator()
+        #add menu of other plugins
         item_list = self.parent.get_context_menu(self.graph)
         if (not item_list == None) and (not len(item_list) == 0):
@@ -224,5 +269,5 @@
                 try:
                     id = wx.NewId()
-                    slicerpop.Append(id, item[0], item[1])
+                    self._slicerpop.Append(id, item[0], item[1])
                     wx.EVT_MENU(self, id, item[2])
                 except:
@@ -231,18 +276,20 @@
                     wx.PostEvent(self.parent, StatusEvent(status=msg))
                     pass
-            slicerpop.AppendSeparator()
-        
+            self._slicerpop.AppendSeparator()
+        id = wx.NewId()
+        self._menu_add_plot = wx.Menu()
+        self._slicerpop.Append(id, '&Print image', 'Print image')
         if self.graph.selected_plottable in self.plots:
             plot = self.plots[self.graph.selected_plottable]
             id = wx.NewId()
             name = plot.name
-            slicerpop.Append(id, "&Save points" )
+            self._slicerpop.Append(id, "&Save points")
             self.action_ids[str(id)] = plot
             wx.EVT_MENU(self, id, self._onSave)
             id = wx.NewId()
-            slicerpop.Append(id, "Remove %s curve" % name)
+            self._slicerpop.Append(id, "Remove %s curve" % name)
             self.action_ids[str(id)] = plot
             wx.EVT_MENU(self, id, self._onRemove)
-            slicerpop.AppendSeparator()
+            self._slicerpop.AppendSeparator()
             # Option to hide
             #TODO: implement functionality to hide a plottable (legend click)
@@ -250,16 +297,16 @@
             selected_plot = self.plots[self.graph.selected_plottable]
             id = wx.NewId()
-            slicerpop.Append(id, '&Linear fit')
+            self._slicerpop.Append(id, '&Linear fit')
             wx.EVT_MENU(self, id, self.onFitting)
-            slicerpop.AppendSeparator()
-        id = wx.NewId()
-        slicerpop.Append(id, '&Change scale')
+            self._slicerpop.AppendSeparator()
+        id = wx.NewId()
+        self._slicerpop.Append(id, '&Change scale')
         wx.EVT_MENU(self, id, self._onProperties)
         id = wx.NewId()
-        slicerpop.Append(id, '&Reset Graph')
+        self._slicerpop.Append(id, '&Reset Graph')
         wx.EVT_MENU(self, id, self.onResetGraph)  
         pos = event.GetPosition()
         pos = self.ScreenToClient(pos)
-        self.PopupMenu(slicerpop, pos)
+        self.PopupMenu(self._slicerpop, pos)
         
     def _on_remove_errors(self, evt):
Index: guiframe/plugin_base.py
===================================================================
--- guiframe/plugin_base.py	(revision f444b20f1e24695fba634d38bf4839ddd05e95a6)
+++ guiframe/plugin_base.py	(revision 52b8b74ee4a07398ef3f87d25aa332dfba2e9656)
@@ -46,4 +46,28 @@
         self.perspective = []
         
+    def can_load_data(self):
+        """
+        if return True, then call handler to laod data
+        """
+        return False
+    
+    def use_data(self):
+        """
+        return True if these plugin use data
+        """
+        return True
+    
+    def load_data(self, event):
+        """
+        Load  data
+        """
+        raise NotImplemented
+ 
+    def load_folder(self, event):
+        """
+        Load entire folder
+        """
+        raise NotImplemented 
+    
     def set_is_active(self, active=False):
         """
