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

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 ffd23b5 was ffd23b5, checked in by Gervaise Alina <gervyh@…>, 15 years ago
  • Property mode set to 100644
File size: 5.7 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
20
21class Plugin:
22    """
23        Plug-in class to be instantiated by the GUI manager
24    """
25   
26    def __init__(self):
27        """
28            Initialize the plug-in
29        """
30        ## Plug-in name
31        self.sub_menu = "Plotting"
32       
33        ## Reference to the parent window
34        self.parent = None
35       
36        ## List of panels for the simulation perspective (names)
37        self.perspective = []
38       
39        ## Plot panels
40        self.plot_panels = []
41       
42
43    def populate_menu(self, id, parent):
44        """
45            Create a 'Plot' menu to list the panels
46            available for displaying
47            @param id: next available unique ID for wx events
48            @param parent: parent window
49        """
50        self.menu = wx.Menu()
51        return [(id, self.menu, "Plot")]
52   
53       
54    def get_panels(self, parent):
55        """
56            Create and return a list of panel objects
57        """
58        ## Save a reference to the parent
59        self.parent = parent
60        # Connect to plotting events
61        self.parent.Bind(EVT_NEW_PLOT, self._on_plot_event)
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       
100        is_available = False
101        for panel in self.plot_panels:
102            if event.plot._xunit == panel.graph.prop["xunit_base"] \
103            and event.plot._yunit == panel.graph.prop["yunit_base"]:
104                if hasattr(event.plot, "group_id"):
105                    if not event.plot.group_id==None \
106                        and event.plot.group_id==panel.group_id:
107                        is_available = True
108                        panel._onEVT_1DREPLOT(event)
109                        self.parent.show_panel(panel.uid)
110                else:
111                    # Check that the plot panel has no group ID
112                    if panel.group_id==None:
113                        is_available = True
114                        panel._onEVT_1DREPLOT(event)
115                        self.parent.show_panel(panel.uid)
116       
117        # Create a new plot panel if none was available       
118        if not is_available:
119            if not hasattr(event.plot,'data'):
120                from Plotter1D import ModelPanel1D
121                if hasattr(event.plot,"xtransform"):
122                    print "went here"
123                    xtransform = event.plot.xtransform
124                else:
125                   
126                    xtransform =None
127                if hasattr(event.plot,"ytransform"):
128                    ytransform=  event.plot.ytransform
129                else:
130                    ytransform=None
131                new_panel = ModelPanel1D(self.parent, -1,xtransform=xtransform,
132                                         ytransform=ytransform, style=wx.RAISED_BORDER)
133            else:
134                from Plotter2D import ModelPanel2D
135                new_panel = ModelPanel2D(self.parent, -1, data2d=event.plot,style=wx.RAISED_BORDER)
136            # Set group ID if available
137            group_id_str = ''
138            if hasattr(event.plot, "group_id"):
139                if not event.plot.group_id==None:
140                    new_panel.group_id = event.plot.group_id
141                    group_id_str = ' [%s]' % event.plot.group_id
142           
143            if hasattr(event, "title"):
144                new_panel.window_caption = event.title
145                new_panel.window_name = event.title
146                #new_panel.window_caption = event.title+group_id_str
147                #new_panel.window_name = event.title+group_id_str
148           
149            event_id = self.parent.popup_panel(new_panel)
150            self.menu.Append(event_id, new_panel.window_caption, 
151                             "Show %s plot panel" % new_panel.window_caption)
152            # Set UID to allow us to reference the panel later
153            new_panel.uid = event_id
154            # Ship the plottable to its panel
155            new_panel._onEVT_1DREPLOT(event)
156            self.plot_panels.append(new_panel)       
157           
158        return
159       
Note: See TracBrowser for help on using the repository browser.