source: SHX/trunk/SeismicHandler/modules/fastx.py @ 1226

Revision 1226, 4.0 KB checked in by klaus, 3 years ago (diff)

SHX with X11 and redraw functionality

Line 
1# file fastx.py
2#      ========
3#
4# SHX module for fast X plotting
5
6from SeismicHandler.basics.messages import msgs, subscribe_ui_event, \
7                                ui_event, log_message
8from SeismicHandler.core import Traces
9import drawing_server
10
11
12#-------------------------------------------------------------------------------
13
14
15class FastX:
16
17    def __init__( self ):
18        self.redraw_trigger = []  # list of windows to redraw
19        self.open_windows_list = []
20        self.all_traces_wdwidx = 1
21        self.ds = drawing_server.DrawingServer()
22        self.ds.load_default_filters()
23
24    def open_window( self, wdwidx, xpos, ypos, width, height ):
25        if  wdwidx in self.open_windows_list:
26            print "fastx: window %d already open" % wdwidx
27            return
28        print "dbg: fastx: opening window %d" % wdwidx
29        self.ds.open_window( wdwidx, xpos, ypos, width, height )
30        self.open_windows_list.append( wdwidx )
31   
32    def open_all_traces_window( self, xpos, ypos, width, height ):
33        self.open_window( self.all_traces_wdwidx, xpos, ypos, width, height )
34        return self.all_traces_wdwidx
35   
36    def redraw_all_traces( self ):
37        self.ds.invalidate_window_traces( self.all_traces_wdwidx )
38        self.ds.pass_trace_data( self.all_traces_wdwidx, Traces )
39        self.ds.draw_window( self.all_traces_wdwidx )
40   
41    def close_window( self, wdwidx ):
42        if not wdwidx in self.open_windows_list:
43            print "fastx: window %d not open, cannot be closed" % wdwidx
44            return
45        self.ds.close_window( wdwidx )
46        self.open_windows_list.remove( wdwidx )
47   
48    def close_all_traces_window( self ):
49        self.close_window( self.all_traces_wdwidx )
50   
51    def close_all_windows( self ):
52        for wdwidx in self.open_windows_list:
53            self.ds.close_window( wdwidx )
54        self.open_windows_list = []
55   
56    def trigger_all_traces_redraw( self ):
57        if self.all_traces_wdwidx not in self.open_windows_list:
58            print "redraw trigger to non-open window ignored"
59            return
60        if not self.all_traces_wdwidx in self.redraw_trigger:
61            self.redraw_trigger.append( self.all_traces_wdwidx )
62
63    def event_loop( self ):
64        term = False
65        while not term:
66            term = self.ds.event_loop( 1 )
67            click = self.ds.get_click()
68            if click:
69                #stream, reltime = click
70                print "main: got click", click
71                #_sendShCommand( "@PHASE DEFINE %s %s ;;; %s %s" % (station.upper(),
72                #    fromUTCDateTime(abstime),self.trc.stats.channel[-1].upper(),
73                #    qredraw) )
74            if self.redraw_trigger:
75                for wdwidx in self.redraw_trigger:
76                    if wdwidx == self.all_traces_wdwidx:
77                        self.redraw_all_traces()
78                    else:
79                        print "redraw for wdwidx %d not implemented" % wdwidx
80                self.redraw_trigger = []
81   
82    def dummy_method( self ):
83        print "fastx dummy method called"
84        self.open_window( self.all_traces_wdwidx, 1, 2, 600, 200 )
85
86
87#-------------------------------------------------------------------------------
88
89
90def _sendShCommand( cmdstring, searchpath="default" ):
91    "Send command to command line interpreter."
92    #wx.BeginBusyCursor()
93    try:
94        msgs.sendMessage("ui.command", cmd=cmdstring, name=searchpath )
95        exc = None
96    except Exception as exc:
97        pass
98    #wx.EndBusyCursor()
99    if exc:
100        raise exc
101
102
103#-------------------------------------------------------------------------------
104
105def ui_events(func):
106    """
107    """
108    def wrapper(payload, msgid):
109        result = func(payload)
110        if msgid is not None:
111            msgs.sendMessage(msgid, value=result, msgid=msgid)
112    return wrapper
113
114@ui_events
115def __set_cursor(mode):
116    """
117    Interface method for altering cursor style on canvas. Thread-safe.
118    """
119    print "SetCursor not implemented"
120subscribe_ui_event(__set_cursor, "cursor")
121
122
123
Note: See TracBrowser for help on using the repository browser.