Changeset 1142


Ignore:
Timestamp:
26.01.2016 15:30:14 (4 years ago)
Author:
klaus
Message:

window positions; mouse control in magnify window

Location:
SHX/trunk/SeismicHandler
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • SHX/trunk/SeismicHandler/cmdscripts/UI.SHC

    r1141 r1142  
    11 
    2 wdw/gc=x1h/main create xh1 0. 6.8 33.9 22. 
     2wdw/gc=x1h/main create xh1 2. 3. 33.9 20. 
    33uitrigger openparams 
    44uitrigger openmagnify 
     5 
     6norm sw 
    57 
    68switch/global history on 
  • SHX/trunk/SeismicHandler/commands/phase.py

    r1101 r1142  
    99from SeismicHandler.basics.error import ShxError 
    1010from SeismicHandler.basics import timeit 
    11 from SeismicHandler.modules.traces import addNetcode 
     11from SeismicHandler.modules.traces import addNetcode, number_of_visible_traces 
    1212from obspy.sh.core import toUTCDateTime, fromUTCDateTime 
    1313 
     
    5151    ] 
    5252    known_qualifiers = [ 
     53        "REDRAW", 
     54        "SMARTREDRAW", 
    5355    ] 
    5456     
     
    6466         
    6567        subcmd = self.parameters[0].lower() 
     68        self.redraw = False 
     69        if self.qualifiers["REDRAW"]: 
     70            self.redraw = True 
     71        if self.qualifiers["SMARTREDRAW"] and number_of_visible_traces() < 50: 
     72            self.redraw = True 
    6673 
    6774        if subcmd == 'define': 
  • SHX/trunk/SeismicHandler/config/runtime.py

    r1110 r1142  
    118118        # overlapping traces 
    119119        "RUNTIME:overlapping_traces": True, 
     120        # window positions 
     121        "RUNTIME:wdwpos_main": (50,181), 
     122        "RUNTIME:wdwpos_magnify": (50,0), 
     123        "RUNTIME:wdwpos_params": (1333,0), 
    120124    }) 
    121125 
  • SHX/trunk/SeismicHandler/modules/screen.py

    r1065 r1142  
    8484            log_message( 
    8585                "warning.WindowManager", 
    86                 ("Attempt to open window twice, canceled.\n" 
     86                ("Attempt to open window twice, cancelled.\n" 
    8787                 "\t Maybe you want to run 'wdw delete %s'\n" 
    8888                 "\t (this information is only shown once.)") % id 
  • SHX/trunk/SeismicHandler/modules/traces.py

    r1130 r1142  
    328328 
    329329 
     330def number_of_visible_traces(): 
     331    return len(Traces().traces.visible) 
     332 
     333 
    330334#@timeit 
    331335def expandTracelist(selection): 
  • SHX/trunk/SeismicHandler/modules/wx_.py

    r1141 r1142  
    5757        self.Bind(wx.EVT_MOTION, self.OnMouseMotion) 
    5858        self.Bind(wx.EVT_LEFT_DOWN, self.OnMouseLeftDown) 
     59        self.Bind(wx.EVT_RIGHT_DOWN, self.OnMouseRightDown) 
    5960        self.Bind(wx.EVT_LEFT_UP, self.OnMouseLeftUp) 
     61        self.Bind(wx.EVT_RIGHT_UP, self.OnMouseRightUp) 
     62        self.Bind(wx.EVT_LEFT_DCLICK, self.OnMouseLeftDouble) 
     63        self.Bind(wx.EVT_MOUSEWHEEL, self.OnMouseWheel) 
     64        self.Bind(wx.EVT_KEY_UP, self.OnKeyPress ) 
     65        self.SetFocus() 
    6066        self._magn_bitmap = None 
    6167        self.trc = None 
     
    6672        self._last_defined_phase = None 
    6773        self._mousedouble = None 
     74        self._dragstarttime = None 
     75        self.SetBackgroundColour( "white" ) 
    6876        self.clearWindow() 
    6977     
     
    8896            self.trc.id,(self.trc.stats.endtime-self.trc.stats.starttime)) 
    8997        plotter.SetStatusText( stext ) 
     98        if evt.RightIsDown() and self._dragstarttime: 
     99            difftime = self._dragstarttime - abstime 
     100            plotter.canvas.moveZoomWindow( 'right', span=difftime ) 
     101            #self._dragstarttime -= 0.05*difftime 
    90102        # let the event propagate 
    91103        evt.Skip() 
     
    109121                self.refresh() 
    110122        evt.Skip() 
     123     
     124    def OnMouseRightDown( self, evt ): 
     125        x, y = evt.GetPositionTuple() 
     126        self._dragstarttime = self._fromScreenCoo( x,  mode='abs' ) 
     127        evt.Skip() 
     128 
     129    def OnMouseRightUp( self, evt ): 
     130        self._dragstarttime = None 
     131        evt.Skip() 
    111132 
    112133    def OnMouseLeftUp(self, evt): 
     
    122143        if self._mousedouble: 
    123144            if self._last_defined_phase: 
    124                 _sendShCommand( "@PHASE CLEAR %s %s manual" % ( 
    125                     self.last_defined_phase,station.upper()) ) 
     145                _sendShCommand( "@PHASE CLEAR %s %s manual /SMARTREDRAW" % ( 
     146                    self._last_defined_phase,station.upper()) ) 
    126147        else: 
    127             _sendShCommand( "@PHASE DEFINE %s %s ;;; %s" % (station.upper(), 
     148            _sendShCommand( "@PHASE DEFINE %s %s ;;; %s /SMARTREDRAW" % (station.upper(), 
    128149                fromUTCDateTime(abstime),self.trc.stats.channel[-1].upper()), 
    129150                name="mouse evt" ) 
    130151            #self._drawSinglePick( trace, tracetime ) 
    131             self.refresh() 
    132         self.mousedouble = False 
     152        self.refresh() 
     153        self._mousedouble = False 
    133154        evt.Skip() 
     155     
     156    def OnMouseLeftDouble( self, evt ): 
     157        self._mousedouble = True 
     158 
     159    def OnMouseWheel(self, evt): 
     160        wheel = evt.GetWheelRotation() 
     161        if wheel > 0: 
     162            plotter.canvas.moveZoomWindow( 'up' ) 
     163        elif wheel < 0: 
     164            plotter.canvas.moveZoomWindow( 'down' ) 
     165        evt.Skip() 
     166     
     167    def OnKeyPress( self, evt ): 
     168        print "dbg: key", dir(evt) 
    134169 
    135170    def refresh( self ): 
     
    172207            ) 
    173208        ) 
     209        # station label 
     210        mdc.DrawText( self.trc.id, 4, 4 ) # top left corner addressed 
    174211        mdc.EndDrawing() 
    175212        del mdc 
     
    530567        x, y = evt.GetPositionTuple() 
    531568        trace, timestamp = self.ScreenToTraceAndTime(x, y) 
     569        if timestamp == None: 
     570            return 
    532571 
    533572        try: 
     
    605644            if self.zoomwdwwidth == 0: 
    606645                trace, end = self.ScreenToTraceAndTime(x, y) 
     646                if end == None: 
     647                    return 
    607648                if self.traceOrder in [0, 1]: 
    608649                    _, start = self.ScreenToTraceAndTime(self.dragStart[0], y) 
     
    654695        x, y = evt.GetPositionTuple() 
    655696        trace, tracetime = self.ScreenToTraceAndTime(x, y) 
     697        if tracetime == None: 
     698            return 
    656699 
    657700        # Send SH command to define/clear phase if not waiting for user input. 
     
    659702            if self.last_defined_phase: 
    660703                station = "%s.%s" % (trace.stats.network,trace.stats.station) 
    661                 _sendShCommand( "@PHASE CLEAR %s %s manual" % ( 
     704                _sendShCommand( "@PHASE CLEAR %s %s manual /SMARTREDRAW" % ( 
    662705                    self.last_defined_phase,station.upper()) ) 
    663706        elif trace and self.parent._user_selection: 
    664707            station = "%s.%s" % (trace.stats.network,trace.stats.station) 
    665             _sendShCommand( "@PHASE DEFINE %s %s ;;; %s" % (station.upper(), 
     708            _sendShCommand( "@PHASE DEFINE %s %s ;;; %s /SMARTREDRAW" % (station.upper(), 
    666709                fromUTCDateTime(tracetime),trace.stats.channel[-1].upper()), 
    667710                name="mouse evt" ) 
     
    700743            self._timewindow = get_runtime("timewindow") 
    701744            self._normtype = get_runtime("normtype") 
    702             wx.BeginBusyCursor( cursor=wx.StockCursor(_cursorNameToID("wait")) ) 
     745            wx.BeginBusyCursor( cursor=wx.StockCursor(_cursorNameToID("cross")) ) 
    703746            self._resetTimeRange() 
    704747            self._drawTraces() 
    705748            self._drawPicksAndZoom() 
     749            if plotter.magnify: 
     750                plotter.magnify.canvas.refresh() 
    706751            wx.EndBusyCursor() 
    707752            self.refresh = False 
     
    731776     
    732777    def OnPaint( self, evt ): 
    733         #ks dc2 = wx.AutoBufferedPaintDCFactory(self) 
    734         #ks dc2.Clear() 
    735         #ks x, y = self.CalcUnscrolledPosition(0, 0) 
    736         #ks dc2.Blit(0, 0, width, height, canvas, x, y) 
    737778        if self._bitmap: 
    738779            dc = wx.BufferedPaintDC(self, self._bitmap) 
     
    854895                continue 
    855896            if tracepos >= shx_graphics.midpoint - theight and \ 
    856                                           tracepos <= shx_graphics.midpoint + theight: 
     897                tracepos <= shx_graphics.midpoint + theight: 
    857898                trace = t 
    858899                break 
     
    864905            shx_graphics = trace.get_graphics() 
    865906            if shx_graphics != None: 
    866                 pixel_width = shx_graphics.PlotPixels 
     907                try: 
     908                    pixel_width = shx_graphics.PlotPixels 
     909                except: 
     910                    # during redraw PlotPixels may not be set yet 
     911                    return (None,None) 
    867912            # only needed for vertical plotting 
    868913            length = self.height - STATION_INFO - MARGINS[0] - MARGINS[2] 
     
    12511296                style = get_style(attrib) 
    12521297            except KeyError: 
    1253                 style = get_default_attrib(t.get_info("METASTATUS")) #AttributeBlock() 
     1298                style = get_default_attrib(t.get_info("METASTATUS")) 
    12541299            cmode = None 
    12551300            try: 
     
    15811626            self._drawXor( 'rect', (offset + th2 * marginfactor, start[1], 
    15821627                th2 * mf2, end[1] - start[1]) ) 
     1628     
     1629    def moveZoomWindow( self, direction, span=None ): 
     1630        if not self.ZoomWindow: 
     1631            return 
     1632        trace, start, end = self.ZoomWindow 
     1633        boxwidth = end - start 
     1634        if direction == 'right': 
     1635            if span == None: 
     1636                tmove = boxwidth/2. 
     1637            else: 
     1638                tmove = span 
     1639            start += tmove 
     1640            end += tmove 
     1641        elif direction == 'left': 
     1642            tmove = boxwidth/2. 
     1643            start -= tmove 
     1644            end -= tmove 
     1645        elif direction == 'up': 
     1646            newtrc = traces_from_list( "%d" % (trace.index(True)+1) ) 
     1647            if newtrc and len(newtrc) == 1: 
     1648                trace = newtrc[0] 
     1649            else: 
     1650                return 
     1651        elif direction == 'down': 
     1652            newtrc = traces_from_list( "%d" % (trace.index(True)-1) ) 
     1653            if newtrc and len(newtrc) == 1: 
     1654                trace = newtrc[0] 
     1655            else: 
     1656                return 
     1657        else: 
     1658            return 
     1659        self.ZoomWindow = trace, start, end 
     1660        self._drawPicksAndZoom() 
     1661        plotter.magnify.canvas.magnifyTrace( trace, boxwidth=boxwidth, 
     1662            boxend=end ) 
    15831663 
    15841664 
    15851665class magnifyWindow(wx.Frame): 
    15861666 
    1587     def __init__( self, parent, title, size=(640,100), position=(0,0) ): 
     1667    def __init__( self, parent, title, size=None, position=None ): 
     1668        if size == None or position == None: 
     1669            px, py = plotter.GetPosition() 
     1670            pw, ph = plotter.GetSize() 
     1671            if size == None: 
     1672                size = (pw,ph/5) 
     1673            if position == None: 
     1674                position = (px,0) 
    15881675        wx.Frame.__init__(self, parent, title=title, size=size, 
    15891676            style=wx.DEFAULT_FRAME_STYLE | wx.FULL_REPAINT_ON_RESIZE | 
    15901677            wx.FRAME_FLOAT_ON_PARENT) 
    1591         self.SetPosition( position ) 
     1678        #self.SetPosition( position ) 
     1679        self.Move( get_runtime("wdwpos_magnify") ) 
    15921680        self.canvas = magnifyCanvas( self ) 
    15931681        self.Disable() 
     
    16011689     
    16021690    Shortcuts 
    1603            b(Beam) d(DelTimeWdw) g(PhasePg) n(PhasePn) p(PhaseP) s(SetTimeWdw) 
    1604            u(Undo Filter) 0(PrevEvent) 1(NextEvent) 2(PhaseSg) 8(Filter 1-8Hz) 
     1691           b(Beam) d(DelTimeWdw) g(PhasePg) n(PhasePn) p(PhaseP) 
     1692           s(SetTimeWdw) u(Undo Filter) 0(PrevEvent) 1(NextEvent) 2(PhaseSg) 
     1693           8(Filter 1-8Hz) >(zoom->right) <(zoom->left) 
    16051694    Ctrl-  f(FK) l(FilterSROLP) n(Norm) o(Overlapping) q(Quit) s(SaveT&P) 
    16061695           w(FilterWWSSNSP) y(SortByDistance) 
    16071696    """ 
    1608     def __init__(self, parent, title, size=(640,280), position=(100,100)): 
     1697    def __init__(self, parent, title, size=(640,280), position=(50,100)): 
    16091698        # save instance for external access 
    16101699        global plotter 
     
    16141703                    wx.FRAME_FLOAT_ON_PARENT) 
    16151704 
    1616         self.SetPosition(position) 
     1705        #self.SetPosition(position) # positioning doesn't work 
    16171706        self.addMenuEntries() 
    16181707        self.canvas = traceCanvas(self, []) 
     
    16301719        self.pardialog = None 
    16311720        self.magnify = None 
     1721        self.Move( get_runtime("wdwpos_main") )   # this works 
    16321722     
    16331723    def openMagnifyWindow( self, e ): 
    1634         self.magnify = magnifyWindow( None, 'SHX magnify' ) 
     1724        self.magnify = magnifyWindow( self, 'SHX magnify' ) 
    16351725     
    16361726    def showMessage( self, msg, error=False ): 
     
    16691759        self.addEntry( windowMenu, '&Del Time Window\tD', 
    16701760            'Delete time window', self.OnDelTimeWindow ) 
     1761        self.addEntry( windowMenu, '&Move Zoom Right\t>', 
     1762            'move zoom window to the right', self.OnMoveZoomRight ) 
     1763        self.addEntry( windowMenu, 'Move Zoom Left\t<', 
     1764            'move zoom window to the left', self.OnMoveZoomLeft ) 
     1765        self.addEntry( windowMenu, 'Move Zoom Up', 
     1766            'move zoom window upward', self.OnMoveZoomUp, accel=wx.WXK_UP ) 
     1767        self.addEntry( windowMenu, 'Move Zoom Down', 
     1768            'move zoom window downward', self.OnMoveZoomDown ) 
    16711769        self.addEntry( windowMenu, '&Norm All/Single\tCtrl+N', 
    16721770            'Normalize All Traces Together / Normalize Traces Separately', 
     
    17751873            'Recover traces and parameters from a recovery command file', 
    17761874            self.OnRecoverTracesAndParams ) 
    1777         tracesMenu.AppendSeparator() 
     1875        controlMenu.AppendSeparator() 
    17781876        self.addEntry( controlMenu, 'Open Parameter Window', 
    17791877            'Open parameter dialog', self.OnOpenParams ) 
     1878        self.addEntry( controlMenu, 'Open Magnify Window', 
     1879            'Open magnification window for traces', self.OnOpenMagnify ) 
    17801880        # test menu 
    17811881        testMenu = wx.Menu() 
     
    17971897        self.Centre() 
    17981898     
    1799     def addEntry( self, menutitle, entrytext, entrydescr, callback ): 
     1899    def addEntry( self, menutitle, entrytext, entrydescr, callback, accel=None ): 
    18001900        #self.menu_entry_id += 1 
    18011901        #qmi = wx.MenuItem( menutitle, self.menu_entry_id, entrytext, 
     
    18051905        item = menutitle.Append( wx.ID_ANY, entrytext, entrydescr ) 
    18061906        self.Bind( wx.EVT_MENU, callback, item ) 
     1907        # doesn't work: 
     1908        if accel: 
     1909            item.SetAccel( wx.AcceleratorEntry(keyCode=accel) ) 
    18071910 
    18081911    def OnQuit( self, e ): 
     
    18641967    def OnDelTimeWindow( self, e ): 
    18651968        _sendShCommand( 'dtw' ) 
     1969 
     1970    def OnMoveZoomRight( self, e ): 
     1971        plotter.canvas.moveZoomWindow( 'right' ) 
     1972 
     1973    def OnMoveZoomLeft( self, e ): 
     1974        plotter.canvas.moveZoomWindow( 'left' ) 
     1975 
     1976    def OnMoveZoomUp( self, e ): 
     1977        plotter.canvas.moveZoomWindow( 'up' ) 
     1978 
     1979    def OnMoveZoomDown( self, e ): 
     1980        plotter.canvas.moveZoomWindow( 'down' ) 
    18661981 
    18671982    def OnReadDataFile( self, e ): 
     
    20032118        self.pardialog = ParamDialog( self ) 
    20042119        self.pardialog.Show() 
    2005  
     2120        self.pardialog.Move( get_runtime("wdwpos_params") ) 
     2121     
     2122    def OnOpenMagnify( self, e ): 
     2123        plotter.openMagnifyWindow(None) 
     2124         
    20062125    def OnGetEventlist( self, e ): 
    20072126        _sendShCommand( 'shx_menu_get_eventlist' ) 
Note: See TracChangeset for help on using the changeset viewer.