Changeset 887 for SHX/trunk


Ignore:
Timestamp:
12/06/12 17:36:41 (8 years ago)
Author:
marcus
Message:
  • reworked message system
  • method for setting cursor styles
Location:
SHX/trunk/SeismicHandler
Files:
5 edited

Legend:

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

    r886 r887  
    107107    log_message("debug.message", "Event '%s' sent." % name) 
    108108 
     109def ui_event(name, payload=None, wait=False): 
     110    """ 
     111    Send UI event. If "wait" ist True, first is checked if there's a 
     112    receiver at all. If so, wait for response. 
     113    """ 
     114    def receiver(value, msgid): 
     115        global hive 
     116 
     117        # store in global var 
     118        hive[msgid] = value 
     119 
     120        # unsubscribe 
     121        msgs.unsubscribe(receiver, msgid) 
     122 
     123    event = "GUI:%s" % name 
     124     
     125    if wait: 
     126        # check for listeners 
     127        if event not in msgs.topicsMap: 
     128            raise NameError("no listeners active on '%s'" % event) 
     129 
     130        msgid = "UI%s" % uuid.uuid4().hex 
     131        msgs.subscribe(receiver, msgid) 
     132        topic = msgs.getTopic(msgid) 
     133    else: 
     134        msgid = None 
     135 
     136    msgs.sendMessage(event, payload=payload, msgid=msgid) 
     137    msg = "UI-Event '%s' sent (payload: %s)." 
     138    log_message("debug.message",  msg % (name, payload)) 
     139 
     140    # waiting for receiver drop out of topic 
     141    if wait: 
     142        while topic.getListeners(): 
     143            time.sleep(0.01) 
     144 
     145        return hive.pop(msgid) 
     146 
    109147def subscribe_event(method, event): 
    110148    msgs.subscribe(method, "EVENT:%s" % event) 
     149 
     150def subscribe_ui_event(method, event): 
     151    msgs.subscribe(method, "GUI:%s" % event) 
    111152 
    112153def set_style(block, item=None, value=None): 
  • SHX/trunk/SeismicHandler/commands/stw.py

    r886 r887  
    66 
    77from SeismicHandler.basics.command import BaseCommand 
    8 from SeismicHandler.basics.messages import set_runtime, send_event 
     8from SeismicHandler.basics.messages import set_runtime, send_event, ui_event 
    99from SeismicHandler.basics.error import ShxError 
    1010 
     
    1515    URI:http://www.seismic-handler.org/portal/wiki/ShStw 
    1616    """ 
    17     numberOfParameters = [2] 
     17    numberOfParameters = [0, 2] 
    1818 
    1919    def __init__(self, *args, **kwargs): 
     
    2222 
    2323    def run(self): 
     24        # user graphic input 
     25        if not self.parameters: 
     26            try: 
     27                ui_event("cursor", payload="cross") 
     28            except: 
     29                raise ShxError("Graphics mode not active!") 
     30            try: 
     31                t1 = ui_event("selecttime", wait=True) 
     32                t2 = ui_event("selecttime", wait=True) 
     33            except: 
     34                pass 
     35            ui_event("cursor", payload="normal") 
     36            return 
     37 
    2438        try: 
    2539            set_runtime("timewindow", map(float, self.parameters)) 
  • SHX/trunk/SeismicHandler/commands/wdw.py

    r782 r887  
    2929        wman = WindowManager() 
    3030        wname = self.parameters[1].lower() 
    31         wnumber = [int(i) for i in wname if i > "0" and i < "9"][0] 
     31        try: 
     32            wnumber = [int(i) for i in wname if i > "0" and i < "9"][0] 
     33        except IndexError: 
     34            raise ShxError("No window number found!") 
    3235 
    3336        try: 
  • SHX/trunk/SeismicHandler/config/runtime.py

    r886 r887  
    293293        Send out value of runtime var to listener @msgid 
    294294        """ 
    295         msg = "sent value of %s to %s" % (name, msgid) 
    296         log_message("debug.runtime.getruntime", msg) 
    297  
    298295        # if colon in name, let first part untouched 
    299296        if ":" in name: 
     
    305302        value = self.Runtime.get(name, None) 
    306303        msgs.sendMessage(msgid, value=value, msgid=msgid) 
     304 
     305        msg = "sent value of %s to %s" % (name, msgid) 
     306        log_message("debug.runtime.getruntime", msg) 
    307307 
    308308    @Property 
  • SHX/trunk/SeismicHandler/modules/wx_.py

    r886 r887  
    88import wx.lib.scrolledpanel as SP 
    99import time 
    10 from SeismicHandler.basics.messages import msgs, log_message, get_runtime 
     10from SeismicHandler.basics.messages import msgs, subscribe_ui_event, \ 
     11                                                       log_message, get_runtime 
    1112from SeismicHandler.core import Traces 
    1213from obspy.core import read, UTCDateTime 
     
    2627TIMESCALE_TICKS_MAJOR = 7 
    2728 
     29# holds window instance 
     30plotter = None 
    2831 
    2932class traceCanvas(SP.ScrolledPanel): 
     
    7174 
    7275        # messaging system 
    73         msgs.subscribe(self.OnNotifyHeight, 'GUT.displayheight') 
    74         msgs.subscribe(self.OnNotifyPhaseName, 'GUI.phasename') 
    75         msgs.subscribe(self.OnNotifyTraceOrder, 'GUI.traceorder') 
    76         msgs.subscribe(self.OnNotifyTimeAxis, 'GUT.timeaxis') 
     76#        msgs.subscribe(self.OnNotifyHeight, 'GUT.displayheight') 
     77#        msgs.subscribe(self.OnNotifyPhaseName, 'GUI.phasename') 
     78#        msgs.subscribe(self.OnNotifyTraceOrder, 'GUI.traceorder') 
     79#        msgs.subscribe(self.OnNotifyTimeAxis, 'GUT.timeaxis') 
    7780 
    7881        # init 
     
    274277        if recent != self.traceOrder: 
    275278            # reset display height 
    276             msgs.sendMessage('notify.tracecount', count=len(self.traces), 
    277                                                                     reset=True) 
    278             msgs.sendMessage('ui.change.displayheight', 
    279                                                        height=len(self.traces)) 
     279#            msgs.sendMessage('notify.tracecount', count=len(self.traces), 
     280#                                                                    reset=True) 
     281#            msgs.sendMessage('ui.change.displayheight', 
     282#                                                       height=len(self.traces)) 
    280283            self._setup() 
    281284            # BAD: setting evt=True 
     
    451454            pass 
    452455 
    453         msgs.sendMessage('notify.tracecount', count=len(self.traces)) 
     456#        msgs.sendMessage('notify.tracecount', count=len(self.traces)) 
    454457 
    455458    def _setup(self): 
     
    854857                                                  th2 * mf2, end[1] - start[1]) 
    855858 
     859 
    856860class plotterWindow(wx.Frame): 
    857861    """ 
     
    859863    """ 
    860864    def __init__(self, parent, title, size=(640,280), position=(100,100)): 
     865        # save instance for external access 
     866        global plotter 
     867        plotter = self 
    861868        wx.Frame.__init__(self, parent, title=title, size=size, 
    862869              style=wx.DEFAULT_FRAME_STYLE | wx.FULL_REPAINT_ON_RESIZE | 
     
    871878    def redraw(self): 
    872879        self.canvas.OnPaint(None) 
     880 
     881 
     882def ui_events(func): 
     883    """ 
     884    """ 
     885    def wrapper(payload, msgid): 
     886        result = func(payload) 
     887        if msgid is not None: 
     888            msgs.sendMessage(msgid, value=result, msgid=msgid) 
     889    return wrapper 
     890 
     891 
     892@ui_events 
     893def __setCursor(mode): 
     894    """ 
     895    """ 
     896    mode = mode.lower() 
     897    if mode == "cross": 
     898        _c = wx.CURSOR_CROSS 
     899    elif mode == "normal": 
     900        _c = wx.CURSOR_DEFAULT 
     901    myCursor = wx.StockCursor(_c) 
     902    global plotter 
     903    wx.CallAfter(plotter.canvas.SetCursor, myCursor) 
     904subscribe_ui_event(__setCursor, "cursor") 
Note: See TracChangeset for help on using the changeset viewer.