Changeset 1151 for SHX


Ignore:
Timestamp:
31.01.2016 19:48:03 (4 years ago)
Author:
klaus
Message:

key events in magnify window (emulate menu shortcuts); changed mouse wheel functions; amplitude info in magnify; infodisplay in status line

Location:
SHX/trunk/SeismicHandler
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • SHX/trunk/SeismicHandler/basics/messages.py

    r1066 r1151  
    2020# place to store messages 
    2121hive = {} 
     22 
     23# infodisplay flag 
     24infodisplay_active = False 
    2225 
    2326#@timeit 
     
    201204        return styles[block.upper()][item.upper()] 
    202205 
     206def set_infodisplay( text ): 
     207    "Send info text to status line of main window." 
     208    global infodisplay_active 
     209    if text == '__INFODISPLAY_ON__': 
     210        infodisplay_active = True 
     211        return 
     212    elif text == '__INFODISPLAY_OFF__': 
     213        infodisplay_active = False 
     214        return 
     215    if infodisplay_active: 
     216        ui_event( "infodisplay", payload=text ) 
  • SHX/trunk/SeismicHandler/commands/magnitude.py

    r1150 r1151  
    1414from SeismicHandler.basics.error import ShxError 
    1515from SeismicHandler.basics import timeit 
     16from SeismicHandler.basics.messages import set_infodisplay 
    1617from SeismicHandler.modules.traces import traces_from_list, getDistance 
    1718from obspy.sh.core import toUTCDateTime, fromUTCDateTime 
     
    107108        elif subcmd == 'clear_all': 
    108109            maglist.clearAll() 
     110            set_infodisplay( "all magnitudes cleared" ) 
    109111        elif subcmd == 'clear': 
    110112            magtype = self.getMagtype( self.parameters[1] ) 
     
    123125                    station = "%s.%s" % (trc.stats.network,trc.stats.station) 
    124126                maglist.clearStationMagnitude( station, magtype ) 
     127                set_infodisplay( "cleared %s on %s" % (magtype,station) ) 
    125128            else: 
    126129                maglist.clearMagnitude( magtype ) 
     
    201204                        mmax = m 
    202205                reslist[sname] = mmax 
     206            magcnt = 0 
     207            lastmag = None 
     208            laststation = None 
    203209            for sname in reslist.keys(): 
    204210                if reslist[sname] != None: 
    205211                    maglist.addStationMagnitude( sname, magtype, 
    206212                        reslist[sname] ) 
     213                    magcnt += 1 
     214                    lastmag = reslist[sname] 
     215                    laststation = sname 
     216            if magcnt == 1: 
     217                set_infodisplay( "determined %s %4.2f on %s" % (magtype,lastmag, 
     218                    laststation) ) 
     219            else: 
     220                set_infodisplay( "determined %d %s values" % (magcnt,magtype) ) 
    207221        else: 
    208222            raise ShxError( 
  • SHX/trunk/SeismicHandler/commands/wdw.py

    r1063 r1151  
    88from SeismicHandler.basics.error import ShxError 
    99from SeismicHandler.basics import timeit 
     10from SeismicHandler.basics.messages import set_infodisplay 
    1011from SeismicHandler.modules.screen import WindowManager 
    1112 
     
    5051            # connect to redraw event 
    5152            data.append(True) 
     53            set_infodisplay( '__INFODISPLAY_ON__' ) 
    5254        elif command == "delete": 
    5355            data = [] 
  • SHX/trunk/SeismicHandler/modules/wx_.py

    r1150 r1151  
    4343plotter = None 
    4444 
     45# status information 
     46statusinfotext = "" 
     47 
    4548displayselect = None 
    4649 
     
    5861        "magnifyCanvas: init method." 
    5962        wx.Panel.__init__( self, parent, 
    60             style=wx.BORDER_SIMPLE|wx.NO_FULL_REPAINT_ON_RESIZE) 
     63            style=wx.BORDER_SIMPLE|wx.NO_FULL_REPAINT_ON_RESIZE|wx.WANTS_CHARS) 
    6164        self.Bind(wx.EVT_PAINT, self.OnPaint) 
    6265        self.Bind(wx.EVT_SIZE, self.OnSize) 
     
    6871        self.Bind(wx.EVT_LEFT_DCLICK, self.OnMouseLeftDouble) 
    6972        self.Bind(wx.EVT_MOUSEWHEEL, self.OnMouseWheel) 
    70         self.Bind(wx.EVT_KEY_UP, self.OnKeyPress ) 
     73        #self.Bind(wx.EVT_KEY_UP, self.OnKeyPress ) 
     74        self.Bind(wx.EVT_CHAR, self.OnKeyPress ) 
    7175        self.SetFocus() 
    7276        self._magn_bitmap = None 
     
    106110            self._drawXorLine( x ) 
    107111        # Put text in status line of plotter window 
    108         stext = "%s - %g - %s - Z:%3.1f" % (fromUTCDateTime(abstime),reltime, 
     112        stext = "%s    %g    %s    Z:%3.1f" % (fromUTCDateTime(abstime),reltime, 
    109113            self.trc.id,(self.trc.stats.endtime-self.trc.stats.starttime)) 
    110         plotter.SetStatusText( stext ) 
     114        plotter._setStatusText( stext ) 
    111115        if evt.RightIsDown() and self._dragstarttime: 
    112116            difftime = self._dragstarttime - abstime 
     
    187191     
    188192    def OnKeyPress( self, evt ): 
    189         "magnifyCanvas: key events do not work (i.e. this is never called)." 
    190         print "dbg: key", dir(evt) 
     193        "magnifyCanvas: key event: emulate all shortcuts of main window." 
     194        char = chr( evt.GetUniChar() ).lower() 
     195        shortcut = { 
     196            'b': plotter.OnBeam, 
     197            'd': plotter.OnDelTimeWindow, 
     198            'g': plotter.OnSetPhase_Pg, 
     199            'l': plotter.OnLocateEvent, 
     200            'm': plotter.OnMagnMlAnalyticSingle, 
     201            'n': plotter.OnSetPhase_Pn, 
     202            'p': plotter.OnSetPhase_P, 
     203            's': plotter.OnSetTimeWindow, 
     204            'u': plotter.OnSimulateUndo, 
     205            'w': plotter.OnSimulateWoodAnderson, 
     206            '>': plotter.OnMoveZoomRight, 
     207            '<': plotter.OnMoveZoomLeft, 
     208            '+': plotter.OnAmplZoomUp, 
     209            '-': plotter.OnAmplZoomDown, 
     210            '0': plotter.OnPrevEvent, 
     211            '1': plotter.OnNextEvent, 
     212            '2': plotter.OnSetPhase_Sg, 
     213            '3': plotter.OnShowAllInMagnify, 
     214            '8': plotter.OnFilterBP_1_8, 
     215        } 
     216        shortcut_control = { 
     217            'd': plotter.OnDemean, 
     218            'f': plotter.OnFKAutoFreq, 
     219            'n': plotter.OnNorm, 
     220            'o': plotter.OnOverlappingTraces, 
     221            'q': plotter.OnQuit, 
     222            's': plotter.OnSaveTracesAndParamsQuick, 
     223            'w': plotter.OnSimulateWWSSNSP, 
     224            'l': plotter.OnSimulateSROLP, 
     225            'y': plotter.OnSortByDistance, 
     226        } 
     227        print "dbg: pressed key", char 
     228        if evt.ControlDown(): 
     229            if char in shortcut_control.keys(): 
     230                shortcut_control[char](None) 
     231        else: 
     232            if char in shortcut.keys(): 
     233                shortcut[char](None) 
    191234 
    192235    def refresh( self ): 
     
    202245        if not self.pixel_duration: 
    203246            return None 
    204         toltime = 2*self.pixel_duration 
     247        toltime = 3*self.pixel_duration 
    205248        station = "%s.%s" % (self.trc.stats.network,self.trc.stats.station) 
    206249        for phase in phaselist.getPhaseList(station): 
     
    242285            ) 
    243286        ) 
    244         # station label 
    245         mdc.DrawText( self.trc.id, 4, 4 ) # top left corner addressed 
     287        # station label and amplitudes 
     288        mindat = self.trc.data.min() 
     289        maxdat = self.trc.data.max() 
     290        if abs(mindat) > 10 or abs(maxdat) > 10: 
     291            valtext = "%3.1f,%3.1f" % (mindat,maxdat) 
     292        else: 
     293            valtext = "%g,%g" % (mindat,maxdat) 
     294        labtext = "%s (%s)" % (self.trc.id,valtext) 
     295        mdc.DrawText( labtext, 4, 4 ) # top left corner addressed 
    246296        mdc.EndDrawing() 
    247297        del mdc 
     
    503553        #self.Bind(wx.EVT_SCROLLWIN, self.OnScroll) 
    504554        self.Bind(wx.EVT_MOUSEWHEEL, self.OnMouseWheel) 
    505         self.Bind(wx.EVT_CHAR_HOOK, self.OnKeyDown) 
     555        #self.Bind(wx.EVT_CHAR_HOOK, self.OnKeyDown) 
    506556        self.Bind(wx.EVT_ERASE_BACKGROUND, disable_event) 
    507557 
     
    609659        maxwheelpos = 10 
    610660        wheel = evt.GetWheelRotation() 
    611         if wheel > 0: 
    612             #if self.wheelpos < maxwheelpos: 
    613             #    _sendShCommand( "zoom/rel all 2" ) 
    614             #    self.wheelpos += 1 
    615             _scrollTraces( 'up' ) 
    616         elif wheel < 0: 
    617             #if self.wheelpos > -maxwheelpos: 
    618             #    _sendShCommand( "zoom/rel all 0.5" )             
    619             #    self.wheelpos -= 1 
    620             _scrollTraces( 'down' ) 
     661        if displayselect: 
     662            if wheel > 0: 
     663                _scrollTraces( 'up' ) 
     664            elif wheel < 0: 
     665                _scrollTraces( 'down' ) 
     666        else: 
     667            if wheel > 0: 
     668                #self.moveZoomWindow( 'up' ) 
     669                self.moveZoomWindow( 'grow' ) 
     670            elif wheel < 0: 
     671                #self.moveZoomWindow( 'down' ) 
     672                self.moveZoomWindow( 'shrink' ) 
     673        #else: 
     674        #    if wheel > 0: 
     675        #        if self.wheelpos < maxwheelpos: 
     676        #            _sendShCommand( "zoom/rel all 2" ) 
     677        #            self.wheelpos += 1 
     678        #    elif wheel < 0: 
     679        #        if self.wheelpos > -maxwheelpos: 
     680        #            _sendShCommand( "zoom/rel all 0.5" )             
     681        #            self.wheelpos -= 1 
    621682        evt.Skip() 
    622683 
    623684    def OnKeyDown(self, evt): 
    624         "traceCanvas: key event doesn't work, i.e. this is never called." 
     685        "traceCanvas: key events not used, just menu shortcuts." 
    625686        print "key" 
    626687        kc = evt.GetKeyCode() 
     
    645706    def OnMouseRightDouble(self, evt): 
    646707        "traceCanvas: right double click." 
    647         print "dbg: right double click" 
     708        self.ZoomWindow = None 
     709        if plotter: 
     710            plotter.setZoomWindow( None, None, None ) 
    648711        self.zoomwdwwidth = 0. 
     712        self.__zoombox( None, None, None ) 
    649713        evt.Skip() 
    650714 
     
    685749        else: 
    686750            self.zoomwdwwidth = 0 
     751        # draw zoom box 
     752        if self.zoomwdwwidth > 0: 
     753            x, y = evt.GetPositionTuple() 
     754            trace, start = \ 
     755                self.ScreenToTraceAndTime(x-self.zoomwdwwidth/2, y) 
     756            trace, end = \ 
     757                self.ScreenToTraceAndTime(x+self.zoomwdwwidth/2, y) 
     758            self.ZoomWindow = [trace, start, end] 
     759            self._drawZoomWindow() 
     760         
    687761 
    688762    def OnMouseMotion(self, evt): 
     
    753827                    ) ) 
    754828 
    755         stext = "%s - %s - %s" % (fromUTCDateTime(timestamp), reltimestr, tid) 
     829        stext = "%s    %s    %s" % (fromUTCDateTime(timestamp), reltimestr, tid) 
    756830        if self.ZoomWindow: 
    757             stext += " - Z:%3.1f" % (self.ZoomWindow[2]-self.ZoomWindow[1]) 
     831            stext += "   Z:%3.1f" % (self.ZoomWindow[2]-self.ZoomWindow[1]) 
    758832        elif dragwidth and self.pixel_duration: 
    759             stext += " - Z:%3.1f" % (dragwidth*self.pixel_duration) 
    760         self.parent.SetStatusText( stext ) 
     833            stext += "   Z:%3.1f" % (dragwidth*self.pixel_duration) 
     834        self.parent._setStatusText( stext ) 
    761835 
    762836        # let the event propagate 
     
    796870            self.ZoomWindow = [trace, start, end] 
    797871            self.dragStart = None 
    798             self._drawZoomWindow()  #?? 
     872            self._drawZoomWindow() 
    799873            if plotter and trace: 
    800874                # store relative times for possible menu call to stw. 
     
    18151889            start -= tmove 
    18161890            end -= tmove 
     1891        elif direction == 'shrink': 
     1892            if self.timewindow[1] is None: 
     1893                duration = self.relend - self.relstart 
     1894            else: 
     1895                duration = self.timewindow[1] - self.timewindow[0] 
     1896            limit = duration/100. 
     1897            if boxwidth > limit: 
     1898                boxwidth *= 0.9 
     1899                end = start + boxwidth 
     1900                self.zoomwdwwidth = boxwidth/self.pixel_duration 
     1901        elif direction == 'grow': 
     1902            if self.timewindow[1] is None: 
     1903                duration = self.relend - self.relstart 
     1904            else: 
     1905                duration = self.timewindow[1] - self.timewindow[0] 
     1906            limit = duration 
     1907            if boxwidth < limit: 
     1908                boxwidth *= 1.1 
     1909                end = start + boxwidth 
     1910                self.zoomwdwwidth = boxwidth/self.pixel_duration 
    18171911        elif direction == 'up': 
    18181912            newtrc = traces_from_list( "%d" % (trace.index(True)+1) ) 
     
    18671961     
    18681962    Shortcuts 
    1869            b(Beam) d(DelTimeWdw) g(PhasePg) l(locate) n(PhasePn) p(PhaseP) 
    1870            s(SetTimeWdw) u(Undo Filter) w(FilterWA) 0(PrevEvent) 1(NextEvent) 
    1871            2(PhaseSg) 8(Filter 1-8Hz) >(zoom->right) <(zoom->left) 
     1963           b(Beam) d(DelTimeWdw) g(PhasePg) l(locate) m(mlSingle) n(PhasePn) 
     1964           p(PhaseP) s(SetTimeWdw) u(Undo Filter) w(FilterWA) 0(PrevEvent) 
     1965           1(NextEvent) 2(PhaseSg) 8(Filter 1-8Hz) >(zoom->right) <(zoom->left) 
    18721966    Ctrl-  f(FK) l(FilterSROLP) n(Norm) o(Overlapping) q(Quit) s(SaveT&P) 
    18731967           w(FilterWWSSNSP) y(SortByDistance) 
     
    19011995        self.magnify = None 
    19021996        self.Move( get_runtime("wdwpos_main") )   # this works 
     1997     
     1998    def _setStatusText( self, localtext ): 
     1999        "plotterWindow: set local status text + global statusinfotext." 
     2000        self.SetStatusText( localtext + 10*'\t' + statusinfotext ) 
    19032001     
    19042002    def openMagnifyWindow( self, e ): 
     
    21092207            'Computes magnitude ml around picked phases at all traces up to selected', 
    21102208            self.OnMagnMlAnalytic ) 
    2111         self.addEntry( magnMenu, 'ml on single Trc. (analytic)', 
     2209        self.addEntry( magnMenu, '&ml on single Trc. (analytic)\tM', 
    21122210            'Computes magnitude ml within selection window', 
    21132211            self.OnMagnMlAnalyticSingle ) 
     
    26602758            return 
    26612759        cmd = "magnitude determine ml %d %g %g" % (self._seltrace,timea,timeb) 
    2662         print "dbg: cmd", cmd 
    26632760        _sendShCommand( cmd ) 
    26642761     
     
    29723069subscribe_ui_event(__openmagnify, "openmagnify") 
    29733070 
     3071@ui_events 
     3072def __infodisplay(infotext): 
     3073    """ 
     3074    Set text for infodisplay (in status line). 
     3075    """ 
     3076    global statusinfotext 
     3077    statusinfotext = infotext 
     3078    if plotter: 
     3079        wx.CallAfter(plotter._setStatusText, 'Message') 
     3080subscribe_ui_event(__infodisplay, "infodisplay") 
     3081 
Note: See TracChangeset for help on using the changeset viewer.