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

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 bd66af34 was 31482fc, checked in by Gervaise Alina <gervyh@…>, 16 years ago

hide and show error bar previous status remembered

  • Property mode set to 100644
File size: 6.0 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
14from sans.guicomm.events import EVT_NEW_PLOT
15from sans.guicomm.events import StatusEvent
16
17
18class Plugin:
19    """
20        Plug-in class to be instantiated by the GUI manager
21    """
22   
23    def __init__(self):
24        """
25            Initialize the plug-in
26        """
27        ## Plug-in name
28        self.sub_menu = "Plotting"
29       
30        ## Reference to the parent window
31        self.parent = None
32       
33        ## List of panels for the simulation perspective (names)
34        self.perspective = []
35       
36        ## Plot panels
37        self.plot_panels = []
38       
39    def populate_menu(self, id, parent):
40        """
41            Create a 'Plot' menu to list the panels
42            available for displaying
43            @param id: next available unique ID for wx events
44            @param parent: parent window
45        """
46        self.menu = wx.Menu()
47        return [(id, self.menu, "Plot")]
48   
49       
50    def get_panels(self, parent):
51        """
52            Create and return a list of panel objects
53        """
54        ## Save a reference to the parent
55        self.parent = parent
56        # Connect to plotting events
57        self.parent.Bind(EVT_NEW_PLOT, self._on_plot_event)
58        # We have no initial panels for this plug-in
59       
60        return []
61   
62   
63    def get_perspective(self):
64        """
65            Get the list of panel names for this perspective
66        """
67        return self.perspective
68   
69    def on_perspective(self, event):
70        """
71            Call back function for the perspective menu item.
72            We notify the parent window that the perspective
73            has changed.
74            @param event: menu event
75        """
76        self.parent.set_perspective(self.perspective)
77   
78    def post_init(self):
79        """
80            Post initialization call back to close the loose ends
81            [Somehow openGL needs this call]
82        """
83        pass
84   
85   
86    def _on_show_panel(self, event):
87        """show plug-in panel"""
88        pass
89   
90   
91    def _on_plot_event(self, event):
92        """
93            A new plottable is being shipped to the plotting plug-in.
94            Check whether we have a panel to put in on, or create
95            a new one
96            @param event: EVT_NEW_PLOT event
97        """
98        # Check whether we already have a graph with the same units
99        # as the plottable we just received.
100       
101        is_available = False
102        for panel in self.plot_panels:
103            if event.plot._xunit == panel.graph.prop["xunit_base"] \
104            and event.plot._yunit == panel.graph.prop["yunit_base"]:
105                if hasattr(event.plot, "group_id"):
106                    ## if same group_id used the same panel to plot
107                    if not event.plot.group_id==None \
108                        and event.plot.group_id==panel.group_id:
109                        is_available = True
110                       
111                        panel._onEVT_1DREPLOT(event)
112                        self.parent.show_panel(panel.uid)   
113                else:
114                    # Check that the plot panel has no group ID
115                    ## Use a panel with group_id ==None to plot
116                   
117                    if panel.group_id==None:
118                        is_available = True
119                        panel._onEVT_1DREPLOT(event)
120                        self.parent.show_panel(panel.uid)
121       
122        # Create a new plot panel if none was available       
123        if not is_available:
124            #print"event.plot",hasattr(event.plot,'data')
125            if not hasattr(event.plot,'data'):
126                from Plotter1D import ModelPanel1D
127                ## get the data representation label of the data to plot
128                ## when even the user select "change scale"
129                if hasattr(event.plot,"xtransform"):
130                    xtransform = event.plot.xtransform
131                else:
132                    xtransform =None
133                   
134                if hasattr(event.plot,"ytransform"):
135                    ytransform=  event.plot.ytransform
136                else:
137                    ytransform=None
138                ## create a plotpanel for 1D Data
139                new_panel = ModelPanel1D(self.parent, -1,xtransform=xtransform,
140                                         ytransform=ytransform, style=wx.RAISED_BORDER)
141
142            else:
143                ##Create a new plotpanel for 2D data
144                from Plotter2D import ModelPanel2D
145                new_panel = ModelPanel2D(self.parent, id = -1, data2d=event.plot,style=wx.RAISED_BORDER)
146           
147            ## Set group ID if available
148            ## Assign data properties to the new create panel
149            group_id_str = ''
150            if hasattr(event.plot, "group_id"):
151                if not event.plot.group_id==None:
152                    new_panel.group_id = event.plot.group_id
153                    group_id_str = ' [%s]' % event.plot.group_id
154           
155            if hasattr(event, "title"):
156                new_panel.window_caption = event.title
157                new_panel.window_name = event.title
158               
159            event_id = self.parent.popup_panel(new_panel)
160            self.menu.Append(event_id, new_panel.window_caption, 
161                             "Show %s plot panel" % new_panel.window_caption)
162            # Set UID to allow us to reference the panel later
163            new_panel.uid = event_id
164            # Ship the plottable to its panel
165            new_panel._onEVT_1DREPLOT(event)
166            self.plot_panels.append(new_panel)       
167           
168        return
169       
Note: See TracBrowser for help on using the repository browser.