Changeset 418


Ignore:
Timestamp:
21.07.2011 12:23:23 (8 years ago)
Author:
marcus
Message:
  • adjustable display "height"
  • introducting pubsub messaging system
File:
1 edited

Legend:

Unmodified
Added
Removed
  • SHX/trunk/sandbox/traceplotter.py

    r416 r418  
    1111from obspy.core.util import AttribDict 
    1212from SeismicHandler.core import read 
     13from SeismicHandler.utils.pubsub import pub 
    1314from obspy.sh.core import fromUTCDateTime 
    1415 
     
    7273        self.traceOrder = 0 
    7374        self.phasename = "P" 
    74         self.space = 1000 
     75        self.space = None 
    7576 
    7677        self._setup() 
     
    9293        self.Bind(wx.EVT_LEFT_DOWN, self.OnMouseLeftDown) 
    9394        self.Bind(wx.EVT_SCROLLWIN, self.OnScroll) 
     95 
     96        # messaging system 
     97        pub.subscribe(self.OnNotifyHeight, 'ui.change.displayheight') 
    9498 
    9599    # event processing 
     
    273277        self.traceOrder = evt.GetSelection() 
    274278        if recent != self.traceOrder: 
     279            # reset display height 
     280            pub.sendMessage('notify.tracecount', count=len(self.traces), reset=True) 
     281            pub.sendMessage('ui.change.displayheight', height=len(self.traces)) 
    275282            self._setup() 
    276283            self.OnPaint(evt, renewOverlay=True) 
     284 
     285    def OnNotifyHeight(self, height): 
     286        """ 
     287        Handle changes of display height. 
     288        """ 
     289        if self.traceOrder in [0, 1]: 
     290            self.space = self.GetClientSize()[1] 
     291        elif self.traceOrder in [2, 3]: 
     292            self.space = self.GetClientSize()[0] 
     293 
     294        if height != len(self.traces): 
     295            self.space *= len(self.traces) / float(height) 
     296 
     297        self._setup() 
     298        self.OnPaint(None) 
    277299 
    278300    def OnPhaseNameChange(self, evt): 
     
    423445            pass 
    424446        self._resetTimeRange() 
     447        pub.sendMessage('notify.tracecount', count=len(self.traces)) 
    425448 
    426449    def _setup(self): 
     450        w, h = self.GetClientSize() 
    427451        if self.traceOrder in [0, 1]: 
    428             self.SetVirtualSizeWH(self.GetClientSize()[0], self.space) 
     452            if self.space is None: 
     453                self.space = h 
     454            self.SetVirtualSizeWH(w, self.space) 
    429455            self.SetScrollRate(0, 20) 
    430456        elif self.traceOrder in [2, 3]: 
    431             self.SetVirtualSizeWH(self.space, self.GetClientSize()[1]) 
     457            if self.space is None: 
     458                self.space = w 
     459            self.SetVirtualSizeWH(self.space, h) 
    432460            self.SetScrollRate(20, 0) 
    433461 
     
    515543        Do the real plotting of waveforms including station text and time scale. 
    516544        """ 
    517 #        width, height = self.GetClientSize() 
    518545        width, height = self.GetVirtualSize() 
    519546        numTraces = len(self.traces) 
     
    761788        msg = ' time-axis ' 
    762789        tb.AddControl(wx.StaticText(tb, -1, msg)) 
    763         timeaxis = wx.Choice(tb, wx.NewId(), (-1, -1), (-1, -1), 
     790        timeaxis = wx.Choice(tb, wx.NewId(), wx.DefaultPosition, wx.DefaultSize, 
    764791                                                       ["absolute", "relative"]) 
    765792        tb.AddControl(timeaxis) 
     
    768795        msg = ' trace order/direction ' 
    769796        tb.AddControl(wx.StaticText(tb, -1, msg)) 
    770         traceorder = wx.Choice(tb, wx.NewId(), (-1, -1), (-1, -1), \ 
     797        traceorder = wx.Choice(tb, wx.NewId(), wx.DefaultPosition, wx.DefaultSize, \ 
    771798            ["left-right, first at bottom", "left-right, first at top", 
    772799             "bottom-top, first left", "top-bottom, first left"] 
     
    780807        tb.AddControl(phase) 
    781808        self.Bind(wx.EVT_TEXT, self.canvas.OnPhaseNameChange, phase) 
     809 
     810        msg = ' height ' 
     811        tb.AddControl(wx.StaticText(tb, -1, msg)) 
     812        height = wx.Slider(tb, wx.NewId(), 2, 1, 2, wx.DefaultPosition, (70, -1), wx.SL_HORIZONTAL | wx.SL_LABELS) 
     813        tb.AddControl(height) 
     814        self.height = height 
     815        self.Bind(wx.EVT_SCROLL_CHANGED, self.OnHeightChange, height) 
     816 
     817        # messaging system 
     818        pub.subscribe(self.OnNofityHeight, 'notify.tracecount') 
     819        # manual update 
     820        self.OnNofityHeight(len(self.canvas.traces)) 
    782821 
    783822        tb.Realize() 
     
    823862        dlg.Destroy() 
    824863 
     864    def OnHeightChange(self, evt): 
     865        pub.sendMessage('ui.change.displayheight', height=evt.GetPosition()) 
     866 
     867    def OnNofityHeight(self, count, reset=False): 
     868        if count < 2: 
     869            self.height.Disable() 
     870            return 
     871        else: 
     872            self.height.Enable() 
     873 
     874        # new traces -> full display? 
     875        if reset or self.height.GetValue() == self.height.GetMax(): 
     876            pos = count 
     877        else: 
     878            pos = self.height.GetValue() 
     879 
     880        if reset or count != self.height.GetMax(): 
     881            self.height.SetMax(count) 
     882            self.height.SetValue(pos) 
     883 
     884def pubmaster(*args, **kwargs): 
     885    print time.time(), "_pubmaster_", args, kwargs 
     886pub.subscribe(pubmaster, pub.ALL_TOPICS) 
     887 
    825888def main(): 
    826889    app = wx.App(False) 
Note: See TracChangeset for help on using the changeset viewer.