Source code for sas.sasgui.plottools.RangeDialog

import wx
from math import log10
from math import floor

[docs]class RangeDialog(wx.Dialog): def __init__(self, parent, id, title="Set Graph Range"): wx.Dialog.__init__(self, parent, id, title, size=(350, 175)) mainbox = wx.BoxSizer(wx.VERTICAL) x_box = wx.BoxSizer(wx.HORIZONTAL) xmin_label = wx.StaticText(self, -1, 'xmin: ', size=(50,20)) x_box.Add(xmin_label) self.xmin_input = wx.TextCtrl(self, -1, size=(75, -1)) x_box.Add(self.xmin_input) x_box.AddSpacer(35) xmax_label = wx.StaticText(self, -1, "xmax: ", size=(50,20)) x_box.Add(xmax_label) self.xmax_input = wx.TextCtrl(self, -1, size=(75, -1)) x_box.Add(self.xmax_input) mainbox.Add(x_box, flag=wx.CENTER | wx.ALL, border=10) y_box = wx.BoxSizer(wx.HORIZONTAL) ymin_label = wx.StaticText(self, -1, 'ymin: ', size=(50,20)) y_box.Add(ymin_label) self.ymin_input = wx.TextCtrl(self, -1, size=(75, -1)) y_box.Add(self.ymin_input) y_box.AddSpacer(35) ymax_label = wx.StaticText(self, -1, "ymax: ", size=(50,20)) y_box.Add(ymax_label) self.ymax_input = wx.TextCtrl(self, -1, size=(75, -1)) y_box.Add(self.ymax_input) mainbox.Add(y_box, flag=wx.CENTER | wx.ALL, border=10) btn_sizer = wx.BoxSizer(wx.HORIZONTAL) btn_sizer.AddSpacer(20) ok_btn = wx.Button(self, wx.ID_OK, 'Done') btn_sizer.Add(ok_btn) btn_sizer.AddSpacer(5) cancel_btn = wx.Button(self, wx.ID_CANCEL, 'Cancel') btn_sizer.Add(cancel_btn) mainbox.Add(btn_sizer, flag=wx.CENTER, border=10) self.SetSizer(mainbox)
[docs] def GetXRange(self): xmin, xmax = (None, None) try: xmin = float(self.xmin_input.GetValue()) except: pass try: xmax = float(self.xmax_input.GetValue()) except: pass if xmin is not None and xmax is not None: return (xmin, xmax) return None
[docs] def SetXRange(self, x_range): xmin, xmax = x_range self.xmin_input.SetValue(str(self._round_to_sigfig(xmin, 8))) self.xmax_input.SetValue(str(self._round_to_sigfig(xmax, 8)))
[docs] def GetYRange(self): ymin, ymax = (None, None) try: ymin = float(self.ymin_input.GetValue()) except: pass try: ymax = float(self.ymax_input.GetValue()) except: pass if ymin is not None and ymax is not None: return (ymin, ymax) return None
[docs] def SetYRange(self, y_range): ymin, ymax = y_range self.ymin_input.SetValue(str(self._round_to_sigfig(ymin, 8))) self.ymax_input.SetValue(str(self._round_to_sigfig(ymax, 8)))
def _round_to_sigfig(self, x, sigfigs): if x == 0.0: return 0.0 return round(x, sigfigs-1-int(floor(log10(abs(x)))))