mirror of https://github.com/chriskiehl/Gooey.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
36 lines
1.1 KiB
36 lines
1.1 KiB
import wx
|
|
from collections import defaultdict
|
|
|
|
__ALL__ = ['pub']
|
|
|
|
|
|
class PubSub(object):
|
|
"""
|
|
A super simplified clone of Wx.lib.pubsub since it doesn't exist on linux
|
|
"""
|
|
|
|
def __init__(self):
|
|
self.registry = defaultdict(list)
|
|
|
|
def subscribe(self, event, handler):
|
|
self.registry[event].append(handler)
|
|
|
|
def send_message(self, event, **kwargs):
|
|
for event_handler in self.registry.get(event, []):
|
|
wx.CallAfter(event_handler, **kwargs)
|
|
|
|
def send_message_sync(self, event, **kwargs):
|
|
"""
|
|
===== THIS IS NOT THREAD SAFE =====
|
|
Synchronously sends the message to all relevant consumers
|
|
and blocks until a response is received.
|
|
|
|
This MUST ONLY be used for communication within
|
|
the same thread! It exists primarily as an escape
|
|
hatch for bubbling up messages (which would be garbage
|
|
collected in the CallAfter form) to interested components
|
|
"""
|
|
for event_handler in self.registry.get(event, []):
|
|
event_handler(**kwargs)
|
|
|
|
pub = PubSub()
|