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

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

worling on slicer panel

  • Property mode set to 100644
File size: 5.8 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
19from sans.guicomm.events import EVT_SLICER_PARS
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        self.parent.Bind(EVT_SLICER_PARS, self._on_slicer_event)
63        # We have no initial panels for this plug-in
64        return []
65   
66    def get_perspective(self):
67        """
68            Get the list of panel names for this perspective
69        """
70        return self.perspective
71   
72    def on_perspective(self, event):
73        """
74            Call back function for the perspective menu item.
75            We notify the parent window that the perspective
76            has changed.
77            @param event: menu event
78        """
79        self.parent.set_perspective(self.perspective)
80   
81    def post_init(self):
82        """
83            Post initialization call back to close the loose ends
84            [Somehow openGL needs this call]
85        """
86        pass
87   
88    def _on_show_panel(self, event):
89        print "_on_show_panel"
90    def _on_slicer_event(self, event):
91        print "slicer event ", event.panel
92        new_panel = event.panel
93        # Set group ID if available
94        event_id = self.parent.popup_panel(new_panel)
95        self.menu.Append(event_id, new_panel.window_caption, 
96                         "Show %s plot panel" % new_panel.window_caption)
97        # Set UID to allow us to reference the panel later
98        new_panel.uid = event_id
99       
100        self.plot_panels.append(new_panel) 
101        return       
102    def _on_plot_event(self, event):
103        """
104            A new plottable is being shipped to the plotting plug-in.
105            Check whether we have a panel to put in on, or create
106            a new one
107            @param event: EVT_NEW_PLOT event
108        """
109        # Check whether we already have a graph with the same units
110        # as the plottable we just received.
111       
112        is_available = False
113        for panel in self.plot_panels:
114            if event.plot._xunit == panel.graph.prop["xunit_base"] \
115            and event.plot._yunit == panel.graph.prop["yunit_base"]:
116                if hasattr(event.plot, "group_id"):
117                    if not event.plot.group_id==None \
118                        and event.plot.group_id==panel.group_id:
119                        is_available = True
120                        panel._onEVT_1DREPLOT(event)
121                        self.parent.show_panel(panel.uid)
122                else:
123                    # Check that the plot panel has no group ID
124                    if panel.group_id==None:
125                        is_available = True
126                        panel._onEVT_1DREPLOT(event)
127                        self.parent.show_panel(panel.uid)
128       
129        # Create a new plot panel if none was available       
130        if not is_available:
131            if not hasattr(event.plot,'data'):
132                from Plotter1D import ModelPanel1D
133                new_panel = ModelPanel1D(self.parent, -1, style=wx.RAISED_BORDER)
134            else:
135                from Plotter2D import ModelPanel2D
136                new_panel = ModelPanel2D(self.parent, -1, data2d=event.plot,style=wx.RAISED_BORDER)
137            # Set group ID if available
138            group_id_str = ''
139            if hasattr(event.plot, "group_id"):
140                if not event.plot.group_id==None:
141                    new_panel.group_id = event.plot.group_id
142                    group_id_str = ' [%s]' % event.plot.group_id
143           
144            if hasattr(event, "title"):
145                new_panel.window_caption = event.title
146                new_panel.window_name = event.title
147                #new_panel.window_caption = event.title+group_id_str
148                #new_panel.window_name = event.title+group_id_str
149           
150            event_id = self.parent.popup_panel(new_panel)
151            self.menu.Append(event_id, new_panel.window_caption, 
152                             "Show %s plot panel" % new_panel.window_caption)
153            # Set UID to allow us to reference the panel later
154            new_panel.uid = event_id
155            # Ship the plottable to its panel
156            new_panel._onEVT_1DREPLOT(event)
157            self.plot_panels.append(new_panel)       
158           
159        return
160       
Note: See TracBrowser for help on using the repository browser.