source: sasview/src/sas/sasgui/guiframe/local_perspectives/plotting/SlicerParameters.py @ 9f25bce

ESS_GUIESS_GUI_DocsESS_GUI_batch_fittingESS_GUI_bumps_abstractionESS_GUI_iss1116ESS_GUI_iss879ESS_GUI_iss959ESS_GUI_openclESS_GUI_orderingESS_GUI_sync_sascalc
Last change on this file since 9f25bce was d85c194, checked in by Piotr Rozyczko <piotr.rozyczko@…>, 9 years ago

Remaining modules refactored

  • Property mode set to 100644
File size: 5.4 KB
Line 
1
2
3import wx
4import wx.lib.newevent
5#from copy import deepcopy
6from sas.sasgui.guiframe.events import EVT_SLICER_PARS
7from sas.sasgui.guiframe.utils import format_number
8from sas.sasgui.guiframe.events import EVT_SLICER
9from sas.sasgui.guiframe.events import SlicerParameterEvent
10
11
12class SlicerParameterPanel(wx.Dialog):
13    """
14    Panel class to show the slicer parameters
15    """
16    #TODO: show units
17    #TODO: order parameters properly
18
19    def __init__(self, parent, *args, **kwargs):
20        """
21        Dialog window that allow to edit parameters slicer
22        by entering new values
23        """
24        wx.Dialog.__init__(self, parent, *args, **kwargs)
25        self.params = {}
26        self.parent = parent
27        self.type = None
28        self.listeners = []
29        self.parameters = []
30        self.bck = wx.GridBagSizer(5, 5)
31        self.SetSizer(self.bck)
32        label = "Right-click on 2D plot for slicer options"
33        title = wx.StaticText(self, -1, label, style=wx.ALIGN_LEFT)
34        self.bck.Add(title, (0, 0), (1, 2),
35                     flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL, border=15)
36        # Bindings
37        self.parent.Bind(EVT_SLICER, self.onEVT_SLICER)
38        self.parent.Bind(EVT_SLICER_PARS, self.onParamChange)
39
40    def onEVT_SLICER(self, event):
41        """
42        Process EVT_SLICER events
43        When the slicer changes, update the panel
44
45        :param event: EVT_SLICER event
46        """
47        event.Skip()
48        if event.obj_class == None:
49            self.set_slicer(None, None)
50        else:
51            self.set_slicer(event.type, event.params)
52
53    def set_slicer(self, type, params):
54        """
55        Rebuild the panel
56        """
57        self.bck.Clear(True)
58        self.type = type
59        if type == None:
60            label = "Right-click on 2D plot for slicer options"
61            title = wx.StaticText(self, -1, label, style=wx.ALIGN_LEFT)
62            self.bck.Add(title, (0, 0), (1, 2),
63                         flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL, border=15)
64        else:
65            title = wx.StaticText(self, -1,
66                                  "Slicer Parameters", style=wx.ALIGN_LEFT)
67            self.bck.Add(title, (0, 0), (1, 2),
68                         flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL, border=15)
69            ix = 0
70            iy = 0
71            self.parameters = []
72            keys = params.keys()
73            keys.sort()
74            for item in keys:
75                iy += 1
76                ix = 0
77                if not item in ["count", "errors"]:
78                    text = wx.StaticText(self, -1, item, style=wx.ALIGN_LEFT)
79                    self.bck.Add(text, (iy, ix), (1, 1),
80                                 wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 15)
81                    ctl = wx.TextCtrl(self, -1, size=(80, 20),
82                                      style=wx.TE_PROCESS_ENTER)
83                    hint_msg = "Modify the value of %s to change" % item
84                    hint_msg += " the 2D slicer"
85                    ctl.SetToolTipString(hint_msg)
86                    ix = 1
87                    ctl.SetValue(format_number(str(params[item])))
88                    self.Bind(wx.EVT_TEXT_ENTER, self.onTextEnter)
89                    self.parameters.append([item, ctl])
90                    self.bck.Add(ctl, (iy, ix), (1, 1),
91                                 wx.EXPAND | wx.ADJUST_MINSIZE, 0)
92                    ix = 3
93                    self.bck.Add((20, 20), (iy, ix), (1, 1),
94                                 wx.EXPAND | wx.ADJUST_MINSIZE, 0)
95                else:
96                    text = wx.StaticText(self, -1, item + " : ",
97                                         style=wx.ALIGN_LEFT)
98                    self.bck.Add(text, (iy, ix), (1, 1),
99                                 wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 15)
100                    ctl = wx.StaticText(self, -1,
101                                        format_number(str(params[item])),
102                                        style=wx.ALIGN_LEFT)
103                    ix = 1
104                    self.bck.Add(ctl, (iy, ix), (1, 1),
105                                 wx.EXPAND | wx.ADJUST_MINSIZE, 0)
106            iy += 1
107            ix = 1
108            self.bck.Add((20, 20), (iy, ix), (1, 1),
109                         wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 15)
110        self.bck.Layout()
111        self.bck.Fit(self)
112        self.parent.GetSizer().Layout()
113
114    def onParamChange(self, evt):
115        """
116        receive an event end reset value text fields
117        inside self.parameters
118        """
119        evt.Skip()
120        if evt.type == "UPDATE":
121            for item in self.parameters:
122                if item[0] in evt.params:
123                    item[1].SetValue("%-5.3g" % evt.params[item[0]])
124                    item[1].Refresh()
125
126    def onTextEnter(self, evt):
127        """
128        Parameters have changed
129        """
130        params = {}
131        has_error = False
132        for item in self.parameters:
133            try:
134                params[item[0]] = float(item[1].GetValue())
135                item[1].SetBackgroundColour(wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW))
136                item[1].Refresh()
137            except:
138                has_error = True
139                item[1].SetBackgroundColour("pink")
140                item[1].Refresh()
141
142        if has_error == False:
143            # Post parameter event
144            ##parent hier is plotter2D
145            event = SlicerParameterEvent(type=self.type, params=params)
146            wx.PostEvent(self.parent, event)
Note: See TracBrowser for help on using the repository browser.