コード例 #1
0
    def callbackFunction3():

        TestScheduler.callTime3 = Scheduler.timestamp()
        prettyTime = strftime("%H:%M:%S", localtime(TestScheduler.callTime3))
        TestScheduler.ourLogger.info("`%s' executed at: %s",
                                     TestScheduler.callbackFunction3.__name__,
                                     prettyTime)
コード例 #2
0
    def testMakeDueCallNothingScheduled(self):

        timeNow = Scheduler.timestamp()
        untilTime = timeNow + 5000
        aTime = Scheduler.make_due_calls(time_now=timeNow, until_time=untilTime)
        TestScheduler.ourLogger.info("aTime: %s", aTime)

        self.assertFalse(TestScheduler.weHaveBeenCalledToken, "Someone set the token and should not have")
コード例 #3
0
    def testNonEqualityWithTime(self):

        whenToExecute1 = Scheduler.timestamp()
        whenToExecute2 = Scheduler.timestamp()

        TestScheduledCall.classLogger.info(
            "whenToExecute1: %s, whenToExecute2: %s", whenToExecute1,
            whenToExecute2)

        sc1: ScheduledCall = ScheduledCall(timeToExecute=whenToExecute1,
                                           func=TestScheduledCall.callback1,
                                           interval=0)
        sc2: ScheduledCall = ScheduledCall(timeToExecute=whenToExecute2,
                                           func=TestScheduledCall.callback1,
                                           interval=0)

        ans: bool = sc1 == sc2

        self.assertFalse(ans, "time inequality is failing")
コード例 #4
0
    def scheduledMethod(self):

        ts = Scheduler.timestamp()
        cbText = f"I have been called at: {ts}"
        self.logger.info(cbText)

        oldText = self.textBox.getText()

        cbText = f"{oldText}\n{cbText}"

        self.textBox.setText(cbText)
コード例 #5
0
    def testStringRepresentation(self):

        whenToExecute = Scheduler.timestamp()

        sc: ScheduledCall = ScheduledCall(timeToExecute=whenToExecute,
                                          func=TestScheduledCall.callback1,
                                          interval=40)

        strRep = sc.__str__()
        self.assertIsNotNone(strRep,
                             "Class string rep did not return anything")

        TestScheduledCall.classLogger.info("String representation: %s", sc)
コード例 #6
0
    def testNonEqualityWithInterval(self):

        whenToExecute = Scheduler.timestamp()

        sc1: ScheduledCall = ScheduledCall(timeToExecute=whenToExecute,
                                           func=TestScheduledCall.callback1,
                                           interval=40)
        sc2: ScheduledCall = ScheduledCall(timeToExecute=whenToExecute,
                                           func=TestScheduledCall.callback2,
                                           interval=50)

        ans: bool = (sc1 == sc2)

        self.assertFalse(ans, "Interval inequality is failing")
コード例 #7
0
    def testGreaterThanFalse(self):

        whenToExecute = Scheduler.timestamp()

        sc1: ScheduledCall = ScheduledCall(timeToExecute=whenToExecute + 1000,
                                           func=TestScheduledCall.callback1,
                                           interval=40)
        sc2: ScheduledCall = ScheduledCall(timeToExecute=whenToExecute,
                                           func=TestScheduledCall.callback2,
                                           interval=50)

        ans: bool = (sc1 < sc2)

        self.assertFalse(ans, "__cmp__ seems to be broken")
コード例 #8
0
    def testEquality(self):

        whenToExecute = Scheduler.timestamp()

        TestScheduledCall.classLogger.info("whenToExecute: %s", whenToExecute)

        sc1: ScheduledCall = ScheduledCall(timeToExecute=whenToExecute,
                                           func=TestScheduledCall.callback1,
                                           interval=0)
        sc2: ScheduledCall = ScheduledCall(timeToExecute=whenToExecute,
                                           func=TestScheduledCall.callback1,
                                           interval=0)

        self.assertEqual(first=sc1,
                         second=sc2,
                         msg="Unit test equality is failing")

        self.assertTrue((sc1 == sc2), msg="Basic equality is failing")
コード例 #9
0
    def testMakeDueCalls(self):

        TestScheduler.ourLogger.info("Test Scheduler make calls that are due")

        retToken = Scheduler.schedule_call(delay=0, func=TestScheduler.callbackFunction, repeat=False)

        TestScheduler.ourLogger.info("Task %s scheduled", retToken)

        TestScheduler.ourLogger.info("Sleepy time ...")
        time.sleep(10.0)

        TestScheduler.ourLogger.info("We've awakened . . . ")

        timeNow = Scheduler.timestamp()
        untilTime = timeNow + 5000
        aTime = Scheduler.make_due_calls(time_now=timeNow, until_time=untilTime)
        TestScheduler.ourLogger.info("aTime: %s", aTime)

        self.assertTrue(TestScheduler.weHaveBeenCalledToken, "The token should have been set, but was not")
コード例 #10
0
    def processEvents(self, eventList: List[Event], relativeMode: bool,
                      deferDrawing: bool,
                      eventLoopParams: EventLoopParams) -> EventLoopParams:

        self.logger.debug(f"Events to process: {len(eventList)}")

        use_sleep = eventLoopParams.use_sleep
        relative_pause = eventLoopParams.relative_pause
        do_draw = eventLoopParams.do_draw
        relative_warmup = eventLoopParams.relative_warmup
        last_click_time = eventLoopParams.last_click_time
        num_clicks = eventLoopParams.num_clicks

        for event in eventList:
            t = Scheduler.timestamp()
            event.dict['time'] = t
            event.dict['local'] = getattr(event, 'pos', (0, 0))
            eventType = event.type
            if eventType == QUIT:
                self.quit()
            elif eventType == MOUSEBUTTONDOWN:
                # print "RootWidget: MOUSEBUTTONDOWN: setting do_draw" ###
                do_draw = True
                if t - last_click_time <= AlbowEventLoop.DOUBLE_CLICK_TIME:
                    num_clicks += 1
                else:
                    num_clicks = 1
                last_click_time = t
                event.dict['num_clicks'] = num_clicks
                CoreUtilities.add_modifiers(event)
                RootWidget.last_mouse_event = event
                self.logger.debug(
                    f"num_clicks: '{num_clicks}' -- t: '{t}' -- last_click_time: '{last_click_time}'"
                )

                if relativeMode:
                    event.dict['local'] = (0, 0)
                    if relative_pause:
                        relative_pause = False
                    else:
                        #  modal_widget.dispatch_key('mouse_down', event)
                        mouse_widget = self.modal_widget.get_focus()
                        RootWidget.clicked_widget = mouse_widget
                        RootWidget.last_mouse_event_handler = mouse_widget
                        mouse_widget.handle_event('mouse_down', event)
                else:
                    mouse_widget = self.containingWidget.find_widget(event.pos)
                    if not mouse_widget.is_inside(self.modal_widget):
                        mouse_widget = self.modal_widget
                    RootWidget.clicked_widget = mouse_widget
                    RootWidget.last_mouse_event_handler = mouse_widget
                    mouse_widget.notify_attention_loss()
                    mouse_widget.handle_mouse('mouse_down', event)
            elif eventType == MOUSEMOTION:
                CoreUtilities.add_modifiers(event)
                RootWidget.last_mouse_event = event

                if relativeMode:
                    event.dict['local'] = (0, 0)
                    if not relative_pause:
                        if relative_warmup:
                            relative_warmup -= 1
                        else:
                            #  modal_widget.dispatch_key('mouse_delta', event)
                            mouse_widget = RootWidget.clicked_widget or self.modal_widget.get_focus(
                            )
                            RootWidget.last_mouse_event_handler = mouse_widget
                            mouse_widget.handle_event('mouse_delta', event)
                else:
                    mouse_widget = self.containingWidget.find_widget(
                        event.pos)  # Do this in else branch?
                    if RootWidget.clicked_widget:
                        RootWidget.last_mouse_event_handler = mouse_widget  # Should this be clicked_widget?
                        RootWidget.clicked_widget.handle_mouse(
                            'mouse_drag', event)
                    else:
                        if not mouse_widget.is_inside(self.modal_widget):
                            mouse_widget = self.modal_widget
                        RootWidget.last_mouse_event_handler = mouse_widget
                        mouse_widget.handle_mouse('mouse_move', event)
            elif eventType == MOUSEBUTTONUP:
                CoreUtilities.add_modifiers(event)
                RootWidget.last_mouse_event = event
                do_draw = True
                if relativeMode:
                    event.dict['local'] = (0, 0)
                    if not relative_pause:

                        if RootWidget.clicked_widget:
                            mouse_widget = RootWidget.clicked_widget
                            RootWidget.clicked_widget = None
                        else:
                            mouse_widget = self.modal_widget.get_focus()
                        RootWidget.last_mouse_event_handler = mouse_widget
                        mouse_widget.handle_event('mouse_up', event)
                else:
                    if RootWidget.clicked_widget:
                        RootWidget.last_mouse_event_handler = RootWidget.clicked_widget
                        RootWidget.clicked_widget = None
                        RootWidget.last_mouse_event_handler.handle_mouse(
                            'mouse_up', event)
            elif eventType == KEYDOWN:
                key = event.key
                if key == K_ESCAPE and relativeMode and event.mod & KMOD_CTRL and event.mod & KMOD_SHIFT:
                    relative_pause = True
                elif relative_pause:
                    relative_pause = False
                else:
                    CoreUtilities.set_modifier(key, True)

                    do_draw = True
                    self.send_key(self.modal_widget, 'key_down', event)
                    if RootWidget.last_mouse_event_handler:
                        event.dict['pos'] = RootWidget.last_mouse_event.pos
                        event.dict['local'] = RootWidget.last_mouse_event.local
                        RootWidget.last_mouse_event_handler.setup_cursor(event)
            elif eventType == KEYUP:
                key = event.key
                CoreUtilities.set_modifier(key, False)

                do_draw = True
                self.send_key(self.modal_widget, 'key_up', event)
                if RootWidget.last_mouse_event_handler:
                    event.dict['pos'] = RootWidget.last_mouse_event.pos
                    event.dict['local'] = RootWidget.last_mouse_event.local
                    RootWidget.last_mouse_event_handler.setup_cursor(event)
            elif eventType == AlbowEventLoop.MUSIC_END_EVENT:
                self.music_end()
            elif eventType == USEREVENT:
                if deferDrawing and not use_sleep:
                    RootWidget.ourTimerEvent = event
            else:
                #
                # Maybe someone has registered some user events handler
                #
                userEventCallList = RootWidget.getUserEventList()
                for cb in userEventCallList:
                    if cb.userEvent == eventType:
                        self.logger.debug(f"API User eventType: {eventType}")
                        cb.func(event)

        retEventLoopParams: EventLoopParams = EventLoopParams(
            use_sleep=use_sleep,
            relative_pause=relative_pause,
            do_draw=do_draw,
            relative_warmup=relative_warmup,
            last_click_time=last_click_time,
            num_clicks=num_clicks)

        return retEventLoopParams
コード例 #11
0
    def run_modal(self, modal_widget: Widget):
        """
            Runs a modal event loop. The widget is run as a modal dialog until its dismiss() method is called.
        Args:
            modal_widget:  The modal widget
        """
        is_modal = modal_widget is not None
        modal_widget = modal_widget or self
        relative_pause = False
        relative_warmup = 0

        was_modal = None
        try:
            RootWidget.old_top_widget = RootWidget.top_widget
            RootWidget.top_widget = modal_widget
            was_modal = modal_widget.is_modal
            modal_widget.is_modal = True

            modal_widget.modal_result = None
            if not modal_widget.focus_switch:
                modal_widget.tab_to_first()

            self.do_draw = True
            use_sleep = self._use_sleep

            from albow.core.ui.AlbowEventLoop import AlbowEventLoop
            from albow.core.ui.EventLoopParams import EventLoopParams

            eventLoop: AlbowEventLoop = AlbowEventLoop(
                modalWidget=modal_widget, containingWidget=self)

            last_click_time = 0
            num_clicks = 0
            while modal_widget.modal_result is None:

                defer_drawing = self.frame_time != 0.0 and modal_widget.defer_drawing(
                )
                try:
                    if not is_modal:
                        if RootWidget.ourTimerEvent:
                            if not use_sleep and defer_drawing:
                                Scheduler.make_scheduled_calls()
                            CoreUtilities.add_modifiers(
                                RootWidget.ourTimerEvent)
                            if RootWidget.last_mouse_event:
                                RootWidget.ourTimerEvent.dict[
                                    'pos'] = RootWidget.last_mouse_event.pos
                                RootWidget.ourTimerEvent.dict[
                                    'local'] = RootWidget.last_mouse_event.local
                            if RootWidget.last_mouse_event_handler:
                                RootWidget.last_mouse_event_handler.setup_cursor(
                                    RootWidget.ourTimerEvent)
                            self.do_draw = self.timer_event(
                                RootWidget.ourTimerEvent)
                            RootWidget.ourTimerEvent = None
                        else:
                            if defer_drawing:
                                self.do_draw = False
                    # RootWidget.classLogger.info(f"self.do_draw: {self.do_draw}")
                    if self.do_draw:
                        if self.is_gl:
                            gl_surface = self.gl_surface
                            gl_surface.gl_clear(self.bg_color)
                            self.gl_draw_all(gl_surface)
                            gl_surface.gl_flush()
                        else:
                            self.draw_all(self.surface)
                        self.do_draw = False
                        # tb1 = timestamp() ###
                        pygame.display.flip()

                    in_relative_mode = bool(modal_widget.relative_mode())
                    grab = in_relative_mode and not relative_pause
                    if grab != get_grab():
                        set_grab(grab)
                        set_mouse_visible(not grab)
                        relative_warmup = 3  # Ignore spurious deltas on entering relative mode
                    if use_sleep and defer_drawing:

                        time_now = Scheduler.timestamp()

                        if RootWidget.nextFrameDue < time_now:
                            RootWidget.nextFrameDue = time_now

                        while True:
                            sleep_time = Scheduler.make_due_calls(
                                time_now, RootWidget.nextFrameDue)
                            if sleep_time <= 0.0:
                                break

                            sleep(sleep_time / 1000.0)
                            time_now = Scheduler.timestamp()
                        RootWidget.nextFrameDue += self.frame_time
                        RootWidget.ourTimerEvent = Event(
                            USEREVENT, {'time': time_now})
                        events = []
                    else:
                        events = [pygame.event.wait()]
                    events.extend(pygame.event.get())

                    loopParams: EventLoopParams = EventLoopParams(
                        use_sleep=use_sleep,
                        relative_pause=relative_pause,
                        do_draw=self.do_draw,
                        relative_warmup=relative_warmup,
                        last_click_time=last_click_time,
                        num_clicks=num_clicks)

                    newParams: EventLoopParams = eventLoop.processEvents(
                        eventList=events,
                        relativeMode=in_relative_mode,
                        deferDrawing=defer_drawing,
                        eventLoopParams=loopParams)

                    use_sleep = newParams.use_sleep
                    relative_pause = newParams.relative_pause
                    self.do_draw = newParams.do_draw
                    relative_warmup = newParams.relative_warmup
                    last_click_time = newParams.last_click_time
                    num_clicks = newParams.num_clicks

                except CancelException:
                    pass

                except ApplicationException as e:
                    self.report_error(e)
        finally:
            modal_widget.is_modal = was_modal
            RootWidget.top_widget = RootWidget.old_top_widget

        RootWidget.clicked_widget = None