source: sasview/guiframe/local_perspectives/plotting/plotting.py @ b06ef8c

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 b06ef8c was b06ef8c, checked in by Gervaise Alina <gervyh@…>, 15 years ago

sector averaging

  • Property mode set to 100644
File size: 5.2 KB
Line 
1"""
2This software was developed by the University of Tennessee as part of the
3Distributed Data Analysis of Neutron Scattering Experiments (DANSE)
4project funded by the US National Science Foundation.
5
6See the license text in license.txt
7
8copyright 2008, University of Tennessee
9"""
10
11
12import wx
13import sys
14#import danse.common.plottools
15#from danse.common.plottools.PlotPanel import PlotPanel
16#from danse.common.plottools.plottables import Graph,Data1D
17from sans.guicomm.events import EVT_NEW_PLOT
18from sans.guicomm.events import StatusEvent
19
20class Plugin:
21    """
22        Plug-in class to be instantiated by the GUI manager
23    """
24   
25    def __init__(self):
26        """
27            Initialize the plug-in
28        """
29        ## Plug-in name
30        self.sub_menu = "Plotting"
31       
32        ## Reference to the parent window
33        self.parent = None
34       
35        ## List of panels for the simulation perspective (names)
36        self.perspective = []
37       
38        ## Plot panels
39        self.plot_panels = []
40       
41
42    def populate_menu(self, id, parent):
43        """
44            Create a 'Plot' menu to list the panels
45            available for displaying
46            @param id: next available unique ID for wx events
47            @param parent: parent window
48        """
49        self.menu = wx.Menu()
50        return [(id, self.menu, "Plot")]
51   
52       
53    def get_panels(self, parent):
54        """
55            Create and return a list of panel objects
56        """
57        ## Save a reference to the parent
58        self.parent = parent
59        # Connect to plotting events
60        self.parent.Bind(EVT_NEW_PLOT, self._on_plot_event)
61       
62        # We have no initial panels for this plug-in
63        return []
64   
65    def get_perspective(self):
66        """
67            Get the list of panel names for this perspective
68        """
69        return self.perspective
70   
71    def on_perspective(self, event):
72        """
73            Call back function for the perspective menu item.
74            We notify the parent window that the perspective
75            has changed.
76            @param event: menu event
77        """
78        self.parent.set_perspective(self.perspective)
79   
80    def post_init(self):
81        """
82            Post initialization call back to close the loose ends
83            [Somehow openGL needs this call]
84        """
85        pass
86   
87    def _on_show_panel(self, event):
88        print "_on_show_panel"
89   
90    def _on_plot_event(self, event):
91        """
92            A new plottable is being shipped to the plotting plug-in.
93            Check whether we have a panel to put in on, or create
94            a new one
95            @param event: EVT_NEW_PLOT event
96        """
97        # Check whether we already have a graph with the same units
98        # as the plottable we just received.
99        is_available = False
100        for panel in self.plot_panels:
101            if event.plot._xunit == panel.graph.prop["xunit_base"] \
102            and event.plot._yunit == panel.graph.prop["yunit_base"]:
103                if hasattr(event.plot, "group_id"):
104                    if not event.plot.group_id==None \
105                        and event.plot.group_id==panel.group_id:
106                        is_available = True
107                        panel._onEVT_1DREPLOT(event)
108                        self.parent.show_panel(panel.uid)
109                else:
110                    # Check that the plot panel has no group ID
111                    if panel.group_id==None:
112                        is_available = True
113                        panel._onEVT_1DREPLOT(event)
114                        self.parent.show_panel(panel.uid)
115       
116        # Create a new plot panel if none was available       
117        if not is_available:
118            if not hasattr(event.plot,'data'):
119                from DataPanel import View1DPanel1D
120                new_panel = View1DPanel1D(self.parent, -1, style=wx.RAISED_BORDER)
121            else:
122                from DataPanel import View1DPanel2D
123                new_panel = View1DPanel2D(self.parent, -1, data2d=event.plot,style=wx.RAISED_BORDER)
124            # Set group ID if available
125            group_id_str = ''
126            if hasattr(event.plot, "group_id"):
127                if not event.plot.group_id==None:
128                    new_panel.group_id = event.plot.group_id
129                    group_id_str = ' [%s]' % event.plot.group_id
130           
131            if hasattr(event, "title"):
132                new_panel.window_caption = event.title
133                new_panel.window_name = event.title
134                #new_panel.window_caption = event.title+group_id_str
135                #new_panel.window_name = event.title+group_id_str
136           
137            event_id = self.parent.popup_panel(new_panel)
138            self.menu.Append(event_id, new_panel.window_caption, 
139                             "Show %s plot panel" % new_panel.window_caption)
140            # Set UID to allow us to reference the panel later
141            new_panel.uid = event_id
142            # Ship the plottable to its panel
143            new_panel._onEVT_1DREPLOT(event)
144            self.plot_panels.append(new_panel)       
145           
146        return
147       
Note: See TracBrowser for help on using the repository browser.