Changeset 404


Ignore:
Timestamp:
06/09/2011 05:43:13 PM (12 years ago)
Author:
marcus
Message:
  • loading multiple files
  • trace order top-bottom vs. bottom-top
File:
1 edited

Legend:

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

    r403 r404  
    4242 
    4343class MyPanel(SP.ScrolledPanel): 
    44     def __init__(self, parent, fname=None): 
     44    def __init__(self, parent, fnames=[]): 
    4545        self.traces = Traces() 
    4646 
     
    5555        self.refresh = False 
    5656        self.relativeAxis = False 
    57         self.traceOrder = "tb" 
    58         self.load(fname) 
     57        self.traceOrder = "bottom-top" 
     58        self.load(fnames) 
    5959        self.OnPaint(None) 
    6060        self.SetFocus() 
     
    6464 
    6565    def getTraceUnderCursor(self, y): 
     66        idx = int(float(y)/self.heigth*len(self.traces)) 
     67        if self.traceOrder == "bottom-top": 
     68            idx = -idx-1 
     69 
    6670        try: 
    67             return self.traces[int(float(y)/self.heigth*len(self.traces))] 
     71            return self.traces[idx] 
    6872        except IndexError: 
    6973            return self.traces[-1] 
     
    9296        evt.Skip() 
    9397 
    94     def load(self, fname=None): 
    95         self._debug("Loading %s..." % fname) 
    96         try: 
    97             st = read(fname) 
    98             trace = st[0] 
    99             self.traces.add(trace) 
    100             self.resetTimeRange() 
    101         except Exception, e: 
    102             msg = e.message and e.message or "File not readable!" 
    103             dlg = wx.MessageDialog(self, msg, "An error occured!", wx.OK | wx.ICON_ERROR) 
    104             dlg.ShowModal() 
    105             dlg.Destroy() 
    106  
    107             self._debug(e.message) 
     98    def load(self, fnames=[]): 
     99        if not fnames: 
     100            fnames = [None] 
     101 
     102        for fname in fnames: 
     103            self._debug("Loading %s..." % fname) 
     104 
     105            try: 
     106                st = read(fname) 
     107                trace = st[0] 
     108                self.traces.add(trace) 
     109            except Exception, e: 
     110                msg = e.message and e.message or "File not readable!" 
     111                dlg = wx.MessageDialog(self, msg, "An error occured!", wx.OK | wx.ICON_ERROR) 
     112                dlg.ShowModal() 
     113                dlg.Destroy() 
     114 
     115                self._debug(e.message) 
     116 
     117        self.resetTimeRange() 
    108118 
    109119    def resetTimeRange(self): 
     
    149159        canvas.SetFont(wx.Font(8, wx.SWISS, wx.NORMAL, wx.NORMAL)) 
    150160 
    151         for i, t in enumerate(self.traces): 
     161        if self.traceOrder == "top-bottom": 
     162            trcs = self.traces 
     163        elif self.traceOrder == "bottom-top": 
     164            trcs = self.traces[::-1] 
     165 
     166        for i, t in enumerate(trcs): 
    152167            if not self.relativeAxis: 
    153168                start = self.start 
     
    186201            # copy data 
    187202            canvas.Blit(offsetX+STATION_INFO, i*theight, width, height, buffer, 0, 0, wx.AND) 
    188             txt = "%d: %s %s" % (i+1, t.stats.station, t.stats.channel[-1]) 
     203            if self.traceOrder == "top-bottom": 
     204                idx = i+1 
     205            elif self.traceOrder == "bottom-top": 
     206                idx = -i+len(self.traces) 
     207            txt = "%d: %s %s" % (idx, t.stats.station, t.stats.channel[-1]) 
     208 
    189209            _, h, _, _ = canvas.GetFullTextExtent(txt) 
    190210            canvas.DrawText(txt, 5, i*theight+theight//2-h//2) 
     
    201221            self.OnPaint(evt) 
    202222 
     223    def onTraceOrder(self, evt): 
     224        recent = self.traceOrder 
     225        self.traceOrder = evt.GetString() 
     226        if recent != self.traceOrder: 
     227            self.OnPaint(evt) 
     228 
     229#        print [i for i in dir(self.parent.toolbar) if "id" in i.lower()] 
     230#        print dir(evt), evt.GetId() 
     231#        self.parent.toolbar.EnableTool(evt.GetId(), False) 
     232 
    203233class MyFrame(wx.Frame): 
    204234    def __init__(self, parent, title, size=(640,280)): 
    205235        wx.Frame.__init__(self, parent, title=title, size=size, style=wx.DEFAULT_FRAME_STYLE | wx.FULL_REPAINT_ON_RESIZE) 
     236 
     237        files = [] 
     238        for fname in sys.argv[1:]: 
     239            files.append(fname) 
     240 
    206241        try: 
    207             fname = sys.argv[1] 
    208             self.dirname, self.filename = os.path.split(fname) 
     242            self.dirname, self.filename = os.path.split(files[-1]) 
    209243        except IndexError: 
    210244            fname = None 
    211245 
    212         self.canvas = MyPanel(self, fname) 
     246        self.canvas = MyPanel(self, files) 
    213247        self.CreateStatusBar() 
    214248        self.SetStatusText("Seimic Handler wxWidgets version") 
     
    248282        timeaxis = wx.Choice(tb, wx.NewId(), (-1, -1), (-1, -1), ["absolute", "relative"]) 
    249283        tb.AddControl(timeaxis) 
     284        self.Bind(wx.EVT_CHOICE, self.canvas.onTimeAxis, timeaxis) 
     285        msg = ' trace order ' 
     286        tb.AddControl(wx.StaticText(tb, -1, msg)) 
     287        traceorder = wx.Choice(tb, wx.NewId(), (-1, -1), (-1, -1), ["bottom-top", "top-bottom"]) 
     288        tb.AddControl(traceorder) 
     289        print "xxx", traceorder.GetId() 
     290        self.Bind(wx.EVT_CHOICE, self.canvas.onTraceOrder, traceorder) 
    250291        tb.Realize() 
    251         self.Bind(wx.EVT_CHOICE, self.canvas.onTimeAxis, timeaxis) 
    252292 
    253293        self.Show() 
     
    267307        self.dirname = getattr(self, "dirname", "") 
    268308        self.filename = getattr(self, "filename", "") 
    269         fqpn_recent = os.path.join(self.dirname, self.filename) 
    270          
    271         dlg = wx.FileDialog(self, "Choose a file", self.dirname, "", "*.*", wx.OPEN) 
     309        
     310        dlg = wx.FileDialog(self, "Choose a file", self.dirname, "", "*.*", wx.OPEN | wx.FD_MULTIPLE) 
     311 
     312        files = [] 
    272313        if dlg.ShowModal() == wx.ID_OK: 
     314            files = dlg.GetFilenames() 
    273315            self.filename = dlg.GetFilename() 
    274316            self.dirname = dlg.GetDirectory() 
    275317        dlg.Destroy() 
    276318 
    277         fqpn = os.path.join(self.dirname, self.filename) 
    278  
    279         # only update if new file 
    280         if fqpn != fqpn_recent: 
     319        for fname in files: 
     320            fqpn = os.path.join(self.dirname, fname) 
     321 
    281322            self.SetStatusText(fqpn) 
    282             self.canvas.load(fqpn) 
     323            self.canvas.load([fqpn]) 
    283324 
    284325    def onReadDb(self, evt): 
Note: See TracChangeset for help on using the changeset viewer.