Package reflectometry :: Package reduction :: Module polcorgui

Source Code for Module reflectometry.reduction.polcorgui

  1  """ 
  2  GUI driver for the polarization correction code polcor. 
  3  """ 
  4   
  5  import sys 
  6  import wx,wx.aui 
  7  from selection import SelectionPanel, EVT_ITEM_SELECT, EVT_ITEM_VIEW 
  8  from polplot import Plotter, Plotter4 
  9   
10 -class Reduction(wx.Panel):
11 - def __init__(self, *args, **kw):
12 wx.Panel.__init__(self, *args, **kw) 13 14 self.data = {} 15 self.plotlist = [] 16 if True: 17 # Use simple sashes 18 splitter = wx.SplitterWindow(self) 19 splitter.SetSashGravity(0.3) 20 left = wx.SplitterWindow(splitter) 21 left.SetSashGravity(0.3) 22 right = wx.SplitterWindow(splitter) 23 right.SetSashGravity(0.0) 24 25 self.selector = SelectionPanel(left) 26 self.metadata = wx.TextCtrl(left,style=wx.TE_MULTILINE|wx.TE_AUTO_SCROLL) 27 self.plotter = Plotter4(right) 28 self.slice = Plotter(right) 29 30 splitter.SplitVertically(left,right,170) 31 left.SplitHorizontally(self.selector,self.metadata,-100) 32 right.SplitHorizontally(self.plotter,self.slice,-1) 33 container = splitter 34 else: 35 # Use AUI notebook 36 self.notebook = wx.aui.AuiNotebook(self) 37 self.selector = SelectionPanel(self.notebook) 38 self.plotter = Plotter4(self.notebook) 39 self.metadata = wx.TextCtrl(self,style=wx.TE_MULTILINE|wx.TE_RICH2) 40 self.slice = Plotter(self) 41 self.notebook.AddPage(self.selector, "Selection") 42 self.notebook.AddPage(self.plotter, "Reduction") 43 self.notebook.AddPage(self.metadata, "Metadata") 44 self.notebook.AddPage(self.slice, "Slice") 45 #self.notebook.Bind(wx.aui.EVT_AUI_RENDER,self.onRender) 46 container = self.notebook 47 48 sizer = wx.BoxSizer() 49 sizer.Add(container, 1, wx.EXPAND) 50 self.SetSizer(sizer) 51 52 self.selector.Bind(EVT_ITEM_SELECT, self.onSelect) 53 self.selector.Bind(EVT_ITEM_VIEW, self.onView)
54
55 - def load(self, filename):
56 # Check if it is already loaded 57 if filename in self.data: 58 return self.data[filename] 59 60 # Try loading data, guessing format from file extension 61 try: 62 data = registry.load(filename) 63 except: 64 print "unable to laod %s\n %s"%(filename, sys.exc_value) 65 data = None 66 else: 67 if data.prop.polarization == "": 68 # TODO Temporary hack: unpolarized data dumped into ++ 69 data.prop.polarization = "++" 70 self.data[filename] = data 71 return data
72
73 - def onView(self, event):
74 filename = event.data 75 data = self.load(filename) 76 if data is not None: 77 # TODO this isn't shifting the text control on aqua 78 # Tried setting focus first without success: 79 # focuswin = wx.Window.FindFocus() 80 # self.metadata.SetFocus() 81 # ... 82 # if focuswin: focuswin.SetFocus() 83 #self.metadata.SetFocus() 84 pt = self.metadata.GetInsertionPoint() 85 self.metadata.Replace(0,self.metadata.GetLastPosition(),data.summary()) 86 self.metadata.SetInsertionPoint(pt) 87 # See if simulating a right-left sequence moves the view 88 #kevent = wx.KeyEvent(wx.EVT_CHAR) 89 #kevent.m_keyCode = wx.WXK_RIGHT 90 #self.metadata.EmulateKeyPress(kevent) 91 #kevent.m_keyCode = wx.WXK_LEFT 92 #self.metadata.EmulateKeyPress(kevent) 93 #print "Setting point to",pt 94 self.metadata.ShowPosition(pt)
95 96
97 - def onSelect(self, event):
98 filename = event.data 99 if event.enabled == True: 100 # Adding a plot 101 data = self.load(filename) 102 if data: 103 im = self.plotter.surface(data.prop.polarization,data) 104 self.plotlist.append(filename) 105 else: 106 if filename in self.plotlist: 107 self.plotlist.remove(filename) 108 self.plotter.clear() 109 for f in self.plotlist: 110 data = self.load(f) 111 im = self.plotter.surface(data.prop.polarization,data)
112
113 - def onRender(self, event):
114 # AUI only - ignored 115 print "rendering" 116 mgr = self.notebook.GetAuiManager() 117 print "perspective",mgr.SavePerspective()
118 119
120 -def demo():
121 frame = wx.Frame(None, -1, 'Polarization Correction') 122 reduction = Reduction(frame) 123 frame.SetSize((600,400)) 124 frame.Show()
125 126 if __name__ == "__main__": 127 app = wx.PySimpleApp(False) 128 demo() 129 app.MainLoop() 130