class ThunkEvent( QEvent ):
    """
    A QEvent subclass that holds a callable which can be executed by its listeners.
    Sort of like a "queued connection" signal.
    """
    EventType = QEvent.Type(QEvent.registerEventType())

    def __init__(self, func, *args):
        QEvent.__init__(self, self.EventType)
        if len(args) > 0:
            self.thunk = partial(func, *args)
        else:
            self.thunk = func
    
    def __call__(self):
        self.thunk()

    @classmethod
    def post(cls, handlerObject, func, *args):
        e = ThunkEvent( func, *args )
        QApplication.postEvent(handlerObject, e)

    @classmethod
    def send(cls, handlerObject, func, *args):
        e = ThunkEvent( func, *args )
        QApplication.sendEvent(handlerObject, e)
Esempio n. 2
0
class EventFlusher(QObject):
    SetEvent = QEvent.Type(QEvent.registerEventType())

    def __init__(self, parent=None):
        QObject.__init__(self, parent)
        self._state = threading.Event()

    def event(self, e):
        if e.type() == EventFlusher.SetEvent:
            assert threading.current_thread().name == "MainThread"
            self.set()
            return True
        return False

    def eventFilter(self, watched, event):
        return self.event(event)

    def set(self):
        QApplication.sendPostedEvents()
        QApplication.processEvents()
        QApplication.flush()
        assert not self._state.is_set()
        self._state.set()

    def clear(self):
        self._state.clear()

    def wait(self):
        assert threading.current_thread().name != "MainThread"
        self._state.wait()
Esempio n. 3
0
class CallbackEvent(QEvent):

    _evtype = QEvent.Type(QEvent.registerEventType())

    def __init__(self, callback, *args):
        super(CallbackEvent, self).__init__(self._evtype)
        self.callback = callback
        self.args = args
Esempio n. 4
0
    def write(self, str):
        """ Emulate write function """

        if self.guistream.thread() != QThread.currentThread():
            sys_stdout.write(str)
            e = QEvent(QEvent.Type(RedirectionEventId))
            e.txt = str
            QApplication.postEvent(self.guistream, e)
            pass
        else:
            self.guistream.write(str)
Esempio n. 5
0
    class Updater():

        QUIT_EVENT_TYPE = QEvent.Type(QEvent.registerEventType())

        def __init__(self, window):
            pass

        def checkForUpdates(self):
            pass

        def close(self):
            pass
Esempio n. 6
0
    class Updater():

        QUIT_EVENT_TYPE = QEvent.Type(QEvent.registerEventType())

        # https://github.com/vslavik/winsparkle/wiki/Basic-Setup

        def __init__(self, window):
            try:
                sys.frozen  # don't want to try updating python.exe
                self.updater = ctypes.cdll.WinSparkle
                self.updater.win_sparkle_set_appcast_url(
                    'http://eliteocr.sourceforge.net/appcast.xml'
                )  # py2exe won't let us embed this in resources
                self.updater.win_sparkle_set_automatic_check_for_updates(1)
                self.updater.win_sparkle_set_update_check_interval(47 * 60 *
                                                                   60)

                # set up shutdown callback
                global mainwindow
                mainwindow = window
                self.callback_t = ctypes.CFUNCTYPE(None)  # keep reference
                self.callback_fn = self.callback_t(shutdown_request)
                self.updater.win_sparkle_set_shutdown_request_callback(
                    self.callback_fn)

                self.updater.win_sparkle_init()

            except:
                from traceback import print_exc
                print_exc()
                self.updater = None

        def checkForUpdates(self):
            if self.updater:
                self.updater.win_sparkle_check_update_with_ui()

        def close(self):
            if self.updater:
                self.updater.win_sparkle_cleanup()
            self.updater = None
Esempio n. 7
0
    class Updater():

        QUIT_EVENT_TYPE = QEvent.Type(QEvent.registerEventType())

        # http://sparkle-project.org/documentation/customization/

        def __init__(self, window):
            try:
                objc.loadBundle(
                    'Sparkle', globals(),
                    join(dirname(sys.executable), os.pardir, 'Frameworks',
                         'Sparkle.framework'))
                self.updater = SUUpdater.sharedUpdater()
            except:
                # can't load framework - not frozen or not included in app bundle?
                self.updater = None

        def checkForUpdates(self):
            if self.updater:
                self.updater.checkForUpdates_(None)

        def close(self):
            self.updater = None
Esempio n. 8
0
class FinishImageGrowthEvent(QEvent):
    def __init__(self):
        QEvent.__init__(self, FinishImageGrowthEvent.event_type)
    event_type = QEvent.Type(QEvent.registerEventType())
Esempio n. 9
0
class UpdateNbImageEvent(QEvent):
    def __init__(self, nb):
        QEvent.__init__(self, self.event_type)
        self.nb = nb

    event_type = QEvent.Type(QEvent.registerEventType())
Esempio n. 10
0
class ImageReadyPlottingEvent(QEvent):
    def __init__(self):
        QEvent.__init__(self, self.event_type)

    event_type = QEvent.Type(QEvent.registerEventType())
Esempio n. 11
0
class FinishLoadingEvent(QEvent):
    def __init__(self):
        QEvent.__init__(self, self.event_type)

    event_type = QEvent.Type(QEvent.registerEventType())
Esempio n. 12
0
class AbortPlottingEvent(QEvent):
    def __init__(self, reason):
        QEvent.__init__(self, self.event_type)
        self.reason = reason

    event_type = QEvent.Type(QEvent.registerEventType())
Esempio n. 13
0
class NextImageEvent(QEvent):
    def __init__(self):
        QEvent.__init__(self, self.event_type)

    event_type = QEvent.Type(QEvent.registerEventType())
Esempio n. 14
0
class ScaleEvent(QEvent):
    Type = QEvent.Type(QEvent.registerEventType())

    def __init__(self, config):
        QEvent.__init__(self, 11003)
        self.config = config