source: sasview/guiframe/local_perspectives/plotting/profile_dialog.py @ 340c2b3

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 340c2b3 was 02879ea, checked in by Jae Cho <jhjcho@…>, 14 years ago

fixed a bug, not displaying the label after changing the scale of an axis

  • Property mode set to 100644
File size: 6.3 KB
RevLine 
[a54e4be]1
2
3
[da9ac4e6]4import wx
5import sys
6from copy import deepcopy
7from danse.common.plottools.plottables import Graph
[a54e4be]8from Plotter1D import ModelPanel1D as PlotPanel
[da9ac4e6]9from sans.guiframe.dataFitting import Theory1D
10import pylab
11
[a54e4be]12DEFAULT_CMAP = pylab.cm.jet
[da9ac4e6]13_BOX_WIDTH = 76
14_STATICBOX_WIDTH = 400
15_SCALE = 1e-6
16
17#SLD panel size
[519c693]18if sys.platform.count("win32") > 0:
[6996942]19    _STATICBOX_WIDTH = 570
[da9ac4e6]20    PANEL_SIZE = 475
21    FONT_VARIANT = 0
22else:
[519c693]23    _STATICBOX_WIDTH = 610
24    PANEL_SIZE = 500
[da9ac4e6]25    FONT_VARIANT = 1
26   
[a54e4be]27     
[da9ac4e6]28class SLDPanel(wx.Dialog):
29    """
30    Provides the SLD profile plot panel.
31    """
32    ## Internal nickname for the window, used by the AUI manager
33    window_name = "SLD Profile"
34    ## Name to appear on the window title bar
35    window_caption = "SLD Profile"
36    ## Flag to tell the AUI manager to put this panel in the center pane
37    CENTER_PANE = True
[a54e4be]38    def __init__(self, parent=None, base=None, data=None, axes =['Radius'], 
39                 id=-1, *args, **kwds):
40        kwds["style"] = wx.DEFAULT_DIALOG_STYLE
41        kwds["size"] = wx.Size(_STATICBOX_WIDTH, PANEL_SIZE) 
42        wx.Dialog.__init__(self, parent, id=id, *args, **kwds)
[519c693]43
[da9ac4e6]44        if data != None:
45            #Font size
[a54e4be]46            kwds = []
[da9ac4e6]47            self.SetWindowVariant(variant=FONT_VARIANT)
48            self.SetTitle("Scattering Length Density Profile")
49            self.parent = base
50            self.data = data
51            self.str = self.data.__str__()
52            ## when 2 data have the same id override the 1 st plotted
53            self.name = self.data.name
54            # Panel for plot
[a54e4be]55            self.plotpanel = SLDplotpanel(self, axes, -1, 
56                                             style=wx.TRANSPARENT_WINDOW)
[da9ac4e6]57            self.cmap = DEFAULT_CMAP
58            ## Create Artist and bind it
59            self.subplot = self.plotpanel.subplot
60            # layout
61            self._setup_layout()
62            # plot
63            data_plot = deepcopy(self.data)
64            data_plot.dy = self._set_dy_data()
[a54e4be]65            self.newplot = Theory1D(data_plot.x, data_plot.y, data_plot.dy)
[da9ac4e6]66            self.newplot.name = 'SLD'
67            self.plotpanel.add_image(self.newplot) 
68            self.Centre()
69            self.Layout()
[519c693]70
[da9ac4e6]71    def _set_dy_data(self): 
72        """
73        make fake dy data
74       
75        :return dy:
76        """
77        # set dy as zero
[a54e4be]78        dy = [0 for y in self.data.y]
[da9ac4e6]79        return dy     
80   
81    def _setup_layout(self):
82        """
83        Set up the layout
84        """
[519c693]85        # panel sizer
86        sizer = wx.BoxSizer(wx.VERTICAL)
[a54e4be]87        sizer.Add(self.plotpanel, -1, wx.LEFT|wx.RIGHT, 5)
88        sizer.Add((0, 10))
[da9ac4e6]89        #-----Button------------1
90        id = wx.NewId()
91        button_reset = wx.Button(self, id, "Close")
92        button_reset.SetToolTipString("Close...")
93        button_reset.Bind(wx.EVT_BUTTON, self._close, 
[a54e4be]94                          id=button_reset.GetId()) 
[519c693]95        sizer.Add(button_reset, 0, wx.LEFT, _STATICBOX_WIDTH - 80) 
[a54e4be]96        sizer.Add((0, 10))
[da9ac4e6]97        self.SetSizerAndFit(sizer)
98        self.Centre()
99        self.Show(True)
[519c693]100        button_reset.SetFocus()
101       
[da9ac4e6]102    def _close(self, event):
103        """
104        Close the dialog
105        """
106        self.Close(True)
107
[a54e4be]108    def _draw_model(self, event):
[da9ac4e6]109        """
110         on_close, update the model2d plot
111        """
112        pass
113
114    def get_context_menu(self, graph=None):
115        """
116        When the context menu of a plot is rendered, the
117        get_context_menu method will be called to give you a
118        chance to add a menu item to the context menu.
119        :param graph: the Graph object to which we attach the context menu
120       
121        :return: a list of menu items with call-back function
122        """
123        return []
124   
[a54e4be]125
[da9ac4e6]126class SLDplotpanel(PlotPanel):
127    """
128    Panel
129    """
[a54e4be]130    def __init__(self, parent, axes=[], id=-1, color=None, dpi=None,
[da9ac4e6]131                  **kwargs):
132        """
133        """
[a54e4be]134        PlotPanel.__init__(self, parent, id=id, xtransform='x', ytransform='y', 
135                           color=color, dpi=dpi, 
136                           size=(_STATICBOX_WIDTH, PANEL_SIZE-100), **kwargs)
[519c693]137
[da9ac4e6]138        # Keep track of the parent Frame
139        self.parent = parent
140        # Internal list of plottable names (because graph
141        # doesn't have a dictionary of handles for the plottables)
142        self.plots = {}
143        self.graph = Graph()
144        self.axes_label = []
[519c693]145        for idx in range(0, len(axes)):
[da9ac4e6]146            self.axes_label.append(axes[idx])
147       
148    def add_image(self, plot):
149        """
150        Add image(Theory1D)
151        """
152        self.plots[plot.name] = plot
153        #init graph
154        self.gaph = Graph()
155        #add plot
156        self.graph.add(plot)
157        #add axes
158        x1_label = self.axes_label[0]
159        self.graph.xaxis('\\rm{%s} '% x1_label, 'A')
160        self.graph.yaxis('\\rm{SLD} ', 'A^{-2}')
161        #draw
162        self.graph.render(self)
163        self.subplot.figure.canvas.draw_idle()
[02879ea]164               
165        # For latter scale changes
166        self.plots[plot.name].xaxis('\\rm{%s} '% x1_label, 'A')
167        self.plots[plot.name].yaxis('\\rm{SLD} ', 'A^{-2}')
[da9ac4e6]168
169    def on_set_focus(self, event):
170        """
171        send to the parenet the current panel on focus
172       
173        """
174        #Not implemented
175        pass
176
177    def on_kill_focus(self, event):
178        """
179        reset the panel color
180       
181        """
182        #Not implemented
183        pass
184   
185       
186       
187class ViewerFrame(wx.Frame):
188    """
189    Add comment
190    """
191    def __init__(self, parent, id, title):
192        """
193        comment
194        :param parent: parent panel/container
195        """
196        # Initialize the Frame object
197        wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition, 
[a54e4be]198                          wx.Size(_STATICBOX_WIDTH, PANEL_SIZE))
[da9ac4e6]199        # Panel for 1D plot
[a54e4be]200        self.plotpanel    = SLDplotpanel(self, -1, style=wx.RAISED_BORDER)
[da9ac4e6]201
202class ViewApp(wx.App):
203    def OnInit(self):
204        frame = ViewerFrame(None, -1, 'testView')   
205        frame.Show(True)
206        self.SetTopWindow(frame)
207       
208        return True
209               
210if __name__ == "__main__": 
211    app = ViewApp(0)
212    app.MainLoop()     
Note: See TracBrowser for help on using the repository browser.