Beispiel #1
0
    def notify (self, event):
        """S.notify (...) -> None

        Notifies the Scale about an event.
        """
        if not self.sensitive:
            return

        if event.signal in SIGNALS_MOUSE:
            eventarea = self.rect_to_client ()

            if event.signal == SIG_MOUSEDOWN:
                if eventarea.collidepoint (event.data.pos):
                    self.focus = True
                    if event.data.button == 1:
                        # Guarantee a correct look, if the signal
                        # handlers run a long time
                        self.state = STATE_ACTIVE
                    self.run_signal_handlers (SIG_MOUSEDOWN, event.data)
                    if event.data.button == 1: # Only react upon left clicks.
                        self.__click = True
                        val = self._get_value_from_coords (eventarea,
                                                           event.data.pos)
                        if val != self.value:
                            self.value = val
                    # Mouse wheel.
                    elif event.data.button == 4:
                        val = self.value - 2 * self.step
                        if val > self.minimum:
                            self.value = val
                        else:
                            self.value = self.minimum
                    elif event.data.button == 5:
                        val = self.value + 2 * self.step
                        if val < self.maximum:
                            self.value = val
                        else:
                            self.value = self.maximum
                    event.handled = True

            elif event.signal == SIG_MOUSEUP:
                if eventarea.collidepoint (event.data.pos):
                    if event.data.button == 1:
                        if self.state == STATE_ACTIVE:
                            self.state = STATE_ENTERED
                        else:
                            self.state = STATE_NORMAL
                        self.__click = False
                    self.run_signal_handlers (SIG_MOUSEUP, event.data)
                    event.handled = True
                elif (event.data.button == 1) and self.__click:
                    self.state = STATE_NORMAL
                    self.__click = False
        
            elif event.signal == SIG_MOUSEMOVE:
                if eventarea.collidepoint (event.data.pos):
                    self.focus = True
                    self.run_signal_handlers (SIG_MOUSEMOVE, event.data)
                    if self.__click and self.focus:
                        val = self._get_value_from_coords (eventarea,
                                                           event.data.pos)
                        if val != self.value:
                            self.value = val

                    self.entered = True
                    event.handled = True
                else:
                    self.entered = False

        elif (event.signal == SIG_KEYDOWN) and self.focus:
            if event.data.key in (K_KP_PLUS, K_PLUS, K_RIGHT, K_DOWN):
                self.increase ()
                event.handled = True
            elif event.data.key in (K_KP_MINUS, K_MINUS, K_LEFT, K_UP):
                self.decrease ()
                event.handled = True
            elif event.data.key == K_PAGEUP:
                val = self.value - 10 * self.step
                if val > self.minimum:
                    self.value = val
                else:
                    self.value = self.minimum
                event.handled = True
            elif event.data.key == K_PAGEDOWN:
                val = self.value + 10 * self.step
                if val < self.maximum:
                    self.value = val
                else:
                    self.value = self.maximum
                event.handled = True
            elif event.data.key == K_END:
                self.value = self.maximum
                event.handled = True
            elif event.data.key == K_HOME:
                self.value = self.minimum
                event.handled = True

        Range.notify (self, event)
Beispiel #2
0
    def notify (self, event):
        """S.notify (...) -> None

        Notifies the ScrollBar about an event.
        """
        if not self.eventarea or not self.sensitive:
            return

        if event.signal == SIG_MOUSEDOWN and \
               self.eventarea.collidepoint (event.data.pos):
            if base.debug: print "ScrollBar.MOUSEDOWN"
            self.focus = True
            # Act only on left clicks or scrollwheel events.
            if event.data.button == 1:
                self.state = STATE_ACTIVE
            self.run_signal_handlers (SIG_MOUSEDOWN)
            if event.data.button == 1:
                buttons = self.get_button_coords ()
                if self._check_collision (event.data.pos, buttons[0]):
                    self._button_dec = True
                    self._button_inc = False
                    self._click = False
                    self.decrease ()
                elif self._check_collision (event.data.pos, buttons[1]):
                    self._button_inc = True
                    self._button_dec = False
                    self._click = False
                    self.increase ()
                else:
                    self._click = True
                    self._button_dec = False
                    self._button_inc = False
                    val = self.get_value_from_coords (event.data.pos)
                    if val != self.value:
                        self.value = val
            # Mouse wheel.
            elif event.data.button == 4:
                self.decrease ()
            elif event.data.button == 5:
                self.increase ()
            
        elif event.signal == SIG_MOUSEMOVE:
            if self.eventarea.collidepoint (event.data.pos):
                if base.debug: print "ScrollBar.MOUSEMOVE (inner)"
                self.focus = True
                if self.state == STATE_NORMAL:
                    self.state = STATE_ENTERED
                self.run_signal_handlers (SIG_MOUSEMOVE)
                buttons = self.get_button_coords ()
                if not self._check_collision (event.data.pos, buttons[0]):
                    self._button_dec = False
                    self.dirty = True
                if not self._check_collision (event.data.pos, buttons[1]):
                    self._button_inc = False
                    self.dirty = True
                if self._click:
                    val = self.get_value_from_coords (event.data.pos)
                    if val != self.value:
                        self.value = val
            elif self.state == STATE_ENTERED:
                if base.debug: print "ScrollBar.MOUSEMOVE (outer)"
                self.state = STATE_NORMAL

        elif event.signal == SIG_MOUSEUP:
            if self.rect.collidepoint (event.data.pos):
                if base.debug: print "ScrollBar.MOUSEUP"
                if event.data.button == 1:
                    if self.state == STATE_ACTIVE:
                        self.state = STATE_ENTERED
                self.run_signal_handlers (SIG_MOUSEUP)
            else:
                self.state = STATE_NORMAL
            if self._click or self._button_inc or self._button_dec:
                self._button_dec = False
                self._button_inc = False
                self._click = False

        # The user holds the mouse clicked over one button.
        elif event.signal == SIG_TICK:
            if self._button_dec:
                self.decrease ()
            elif self._button_inc:
                self.increase ()

        # Keyboard activation.
        elif (event.signal == SIG_KEYDOWN) and self.focus:
            if event.data.key in (pygame.locals.K_KP_PLUS,
                                  pygame.locals.K_PLUS, pygame.locals.K_RIGHT,
                                  pygame.locals.K_DOWN):
                self.increase ()
            elif event.data.key in (pygame.locals.K_KP_MINUS,
                                    pygame.locals.K_MINUS,
                                    pygame.locals.K_LEFT, pygame.locals.K_UP):
                self.decrease ()
            elif event.data.key == pygame.locals.K_PAGEUP:
                val = self.value - 10 * self.step
                if val > self.minimum:
                    self.value = val
                else:
                    self.value = self.minimum
            elif event.data.key == pygame.locals.K_PAGEDOWN:
                val = self.value + 10 * self.step
                if val < self.maximum:
                    self.value = val
                else:
                    self.value = self.maximum
            elif event.data.key == pygame.locals.K_END:
                self.value = self.maximum
            elif event.data.key == pygame.locals.K_HOME:
                self.value = self.minimum

        Range.notify (self, event)
    def notify (self, event):
        """S.notify (...) -> None

        Notifies the ScrollBar about an event.
        """
        if not self.sensitive:
            return

        if event.signal in SIGNALS_MOUSE:
            eventarea = self.rect_to_client ()
            collision = eventarea.collidepoint (event.data.pos)
            if event.signal == SIG_MOUSEDOWN and collision:
                self.focus = True
                # Act only on left clicks or scrollwheel events.
                if event.data.button == 1:
                    self.state = STATE_ACTIVE
                self.run_signal_handlers (SIG_MOUSEDOWN, event.data)

                if event.data.button == 1:
                    buttons = self._get_button_coords (eventarea)
                    if self._check_collision (event.data.pos, buttons[0]):
                        self._buttondec = True
                        self._buttoninc = False
                        self._click = False
                        self.decrease ()
                    elif self._check_collision (event.data.pos, buttons[1]):
                        self._buttoninc = True
                        self._buttondec = False
                        self._click = False
                        self.increase ()
                    else:
                        self._click = True
                        self._buttondec = False
                        self._buttoninc = False
                        val = self._get_value_from_coords (eventarea,
                                                           event.data.pos)
                        if val != self.value:
                            self.value = val
                # Mouse wheel.
                elif event.data.button == 4:
                    self.decrease ()
                elif event.data.button == 5:
                    self.increase ()
                event.handled = True

            elif event.signal == SIG_MOUSEMOVE:
                dirty = False
                if collision:
                    self.focus = True
                    if self.state == STATE_NORMAL:
                        self.state = STATE_ENTERED
                    self.run_signal_handlers (SIG_MOUSEMOVE, event.data)

                    buttons = self._get_button_coords (eventarea)
                    if not self._check_collision (event.data.pos, buttons[0]) \
                           and self._buttondec:
                        self._buttondec = False
                        dirty = True
                    if not self._check_collision (event.data.pos, buttons[1]) \
                           and self._buttoninc:
                        self._buttoninc = False
                        dirty = True
                    if self._click:
                        val = self._get_value_from_coords (eventarea,
                                                           event.data.pos)
                        if val != self.value:
                            self.value = val
                            dirty = False
                    self.dirty = dirty
                    event.handled = True

                elif self.state == STATE_ENTERED:
                    self.state = STATE_NORMAL

            elif event.signal == SIG_MOUSEUP:
                if self._click or self._buttoninc or self._buttondec:
                    self._buttondec = False
                    self._buttoninc = False
                    self._click = False

                if collision:
                    if event.data.button == 1:
                        if self.state == STATE_ACTIVE:
                            self.state = STATE_ENTERED
                    self.run_signal_handlers (SIG_MOUSEUP, event.data)
                    event.handled = True
                else:
                    self.state = STATE_NORMAL
                # Reset timer
                self._timer = _TIMER

        # The user holds the mouse clicked over one button.
        elif (self._buttondec or self._buttoninc) and \
                 (event.signal == SIG_TICK):
            # Wait half a second before starting to in/decrease.
            if self._timer > 0:
                self._timer -= 1
            else:
                if self._buttondec:
                    self.decrease ()
                elif self._buttoninc:
                    self.increase ()

        # Keyboard activation.
        elif (event.signal == SIG_KEYDOWN) and self.focus:
            if event.data.key in (K_KP_PLUS, K_PLUS, K_RIGHT, K_DOWN):
                self.increase ()
                event.handled = True
            elif event.data.key in (K_KP_MINUS, K_MINUS, K_LEFT, K_UP):
                self.decrease ()
                event.handled = True
            elif event.data.key == K_PAGEUP:
                val = self.value - 10 * self.step
                if val > self.minimum:
                    self.value = val
                else:
                    self.value = self.minimum
                event.handled = True
            elif event.data.key == K_PAGEDOWN:
                val = self.value + 10 * self.step
                if val < self.maximum:
                    self.value = val
                else:
                    self.value = self.maximum
                event.handled = True
            elif event.data.key == K_END:
                self.value = self.maximum
                event.handled = True
            elif event.data.key == K_HOME:
                self.value = self.minimum
                event.handled = True

        Range.notify (self, event)
Beispiel #4
0
    def notify(self, event):
        """S.notify (...) -> None

        Notifies the Scale about an event.
        """
        if not self.sensitive:
            return

        if event.signal in SIGNALS_MOUSE:
            eventarea = self.rect_to_client()

            if event.signal == SIG_MOUSEDOWN:
                if eventarea.collidepoint(event.data.pos):
                    self.focus = True
                    if event.data.button == 1:
                        # Guarantee a correct look, if the signal
                        # handlers run a long time
                        self.state = STATE_ACTIVE
                    self.run_signal_handlers(SIG_MOUSEDOWN, event.data)
                    if event.data.button == 1:  # Only react upon left clicks.
                        self.__click = True
                        val = self._get_value_from_coords(
                            eventarea, event.data.pos)
                        if val != self.value:
                            self.value = val
                    # Mouse wheel.
                    elif event.data.button == 4:
                        val = self.value - 2 * self.step
                        if val > self.minimum:
                            self.value = val
                        else:
                            self.value = self.minimum
                    elif event.data.button == 5:
                        val = self.value + 2 * self.step
                        if val < self.maximum:
                            self.value = val
                        else:
                            self.value = self.maximum
                    event.handled = True

            elif event.signal == SIG_MOUSEUP:
                if eventarea.collidepoint(event.data.pos):
                    if event.data.button == 1:
                        if self.state == STATE_ACTIVE:
                            self.state = STATE_ENTERED
                        else:
                            self.state = STATE_NORMAL
                        self.__click = False
                    self.run_signal_handlers(SIG_MOUSEUP, event.data)
                    event.handled = True
                elif (event.data.button == 1) and self.__click:
                    self.state = STATE_NORMAL
                    self.__click = False

            elif event.signal == SIG_MOUSEMOVE:
                if eventarea.collidepoint(event.data.pos):
                    self.focus = True
                    self.run_signal_handlers(SIG_MOUSEMOVE, event.data)
                    if self.__click and self.focus:
                        val = self._get_value_from_coords(
                            eventarea, event.data.pos)
                        if val != self.value:
                            self.value = val

                    self.entered = True
                    event.handled = True
                else:
                    self.entered = False

        elif (event.signal == SIG_KEYDOWN) and self.focus:
            if event.data.key in (K_KP_PLUS, K_PLUS, K_RIGHT, K_DOWN):
                self.increase()
                event.handled = True
            elif event.data.key in (K_KP_MINUS, K_MINUS, K_LEFT, K_UP):
                self.decrease()
                event.handled = True
            elif event.data.key == K_PAGEUP:
                val = self.value - 10 * self.step
                if val > self.minimum:
                    self.value = val
                else:
                    self.value = self.minimum
                event.handled = True
            elif event.data.key == K_PAGEDOWN:
                val = self.value + 10 * self.step
                if val < self.maximum:
                    self.value = val
                else:
                    self.value = self.maximum
                event.handled = True
            elif event.data.key == K_END:
                self.value = self.maximum
                event.handled = True
            elif event.data.key == K_HOME:
                self.value = self.minimum
                event.handled = True

        Range.notify(self, event)
Beispiel #5
0
    def notify(self, event):
        """S.notify (...) -> None

        Notifies the Scale about an event.
        """
        if not self.eventarea or not self.sensitive:
            return

        if event.signal == SIG_MOUSEDOWN:
            if self.eventarea.collidepoint(event.data.pos):
                if base.debug:
                    print "Scale.MOUSEDOWN"
                self.focus = True
                if event.data.button == 1:
                    # Guarantee a correct look, if the signal handlers run a
                    # long time
                    self.state = STATE_ACTIVE
                self.run_signal_handlers(SIG_MOUSEDOWN)
                if event.data.button == 1:  # Only react upon left clicks.
                    self.__click = True
                    val = self.get_value_from_coords(event.data.pos)
                    if val != self.value:
                        self.value = val
                # Mouse wheel.
                elif event.data.button == 4:
                    val = self.value - 2 * self.step
                    if val > self.minimum:
                        self.value = val
                    else:
                        self.value = self.minimum
                elif event.data.button == 5:
                    val = self.value + 2 * self.step
                    if val < self.maximum:
                        self.value = val
                    else:
                        self.value = self.maximum

        elif event.signal == SIG_MOUSEUP:
            if self.eventarea.collidepoint(event.data.pos):
                if base.debug:
                    print "Scale.MOUSEUP"
                if event.data.button == 1:
                    if self.state == STATE_ACTIVE:
                        self.state = STATE_ENTERED
                    else:
                        self.state = STATE_NORMAL
                    self.__click = False
                self.run_signal_handlers(SIG_MOUSEUP)
            elif (event.data.button == 1) and self.__click:
                self.state = STATE_NORMAL
                self.__click = False

        elif event.signal == SIG_MOUSEMOVE:
            if self.eventarea.collidepoint(event.data.pos):
                if base.debug:
                    print "Scale.MOUSEMOVE (inner)"
                self.focus = True
                if self.state == STATE_NORMAL:
                    self.state = STATE_ENTERED
                self.run_signal_handlers(SIG_MOUSEMOVE)
                if self.__click and self.focus:
                    val = self.get_value_from_coords(event.data.pos)
                    if val != self.value:
                        self.value = val
            elif self.state == STATE_ENTERED:
                if base.debug:
                    print "Scale.MOUSEMOVE (outer)"
                self.state = STATE_NORMAL

        elif (event.signal == SIG_KEYDOWN) and self.focus:
            if event.data.key in (
                pygame.locals.K_KP_PLUS,
                pygame.locals.K_PLUS,
                pygame.locals.K_RIGHT,
                pygame.locals.K_DOWN,
            ):
                self.increase()
            elif event.data.key in (
                pygame.locals.K_KP_MINUS,
                pygame.locals.K_MINUS,
                pygame.locals.K_LEFT,
                pygame.locals.K_UP,
            ):
                self.decrease()
            elif event.data.key == pygame.locals.K_PAGEUP:
                val = self.value - 10 * self.step
                if val > self.minimum:
                    self.value = val
                else:
                    self.value = self.minimum
            elif event.data.key == pygame.locals.K_PAGEDOWN:
                val = self.value + 10 * self.step
                if val < self.maximum:
                    self.value = val
                else:
                    self.value = self.maximum
            elif event.data.key == pygame.locals.K_END:
                self.value = self.maximum
            elif event.data.key == pygame.locals.K_HOME:
                self.value = self.minimum

        Range.notify(self, event)
Beispiel #6
0
    def notify(self, event):
        """S.notify (...) -> None

        Notifies the ScrollBar about an event.
        """
        if not self.sensitive:
            return

        if event.signal in SIGNALS_MOUSE:
            eventarea = self.rect_to_client()
            collision = eventarea.collidepoint(event.data.pos)
            if event.signal == SIG_MOUSEDOWN and collision:
                self.focus = True
                # Act only on left clicks or scrollwheel events.
                if event.data.button == 1:
                    self.state = STATE_ACTIVE
                self.run_signal_handlers(SIG_MOUSEDOWN, event.data)

                if event.data.button == 1:
                    buttons = self._get_button_coords(eventarea)
                    if self._check_collision(event.data.pos, buttons[0]):
                        self._buttondec = True
                        self._buttoninc = False
                        self._click = False
                        self.decrease()
                    elif self._check_collision(event.data.pos, buttons[1]):
                        self._buttoninc = True
                        self._buttondec = False
                        self._click = False
                        self.increase()
                    else:
                        self._click = True
                        self._buttondec = False
                        self._buttoninc = False
                        val = self._get_value_from_coords(
                            eventarea, event.data.pos)
                        if val != self.value:
                            self.value = val
                # Mouse wheel.
                elif event.data.button == 4:
                    self.decrease()
                elif event.data.button == 5:
                    self.increase()
                event.handled = True

            elif event.signal == SIG_MOUSEMOVE:
                dirty = False
                if collision:
                    self.focus = True
                    if self.state == STATE_NORMAL:
                        self.state = STATE_ENTERED
                    self.run_signal_handlers(SIG_MOUSEMOVE, event.data)

                    buttons = self._get_button_coords(eventarea)
                    if not self._check_collision (event.data.pos, buttons[0]) \
                           and self._buttondec:
                        self._buttondec = False
                        dirty = True
                    if not self._check_collision (event.data.pos, buttons[1]) \
                           and self._buttoninc:
                        self._buttoninc = False
                        dirty = True
                    if self._click:
                        val = self._get_value_from_coords(
                            eventarea, event.data.pos)
                        if val != self.value:
                            self.value = val
                            dirty = False
                    self.dirty = dirty
                    event.handled = True

                elif self.state == STATE_ENTERED:
                    self.state = STATE_NORMAL

            elif event.signal == SIG_MOUSEUP:
                if self._click or self._buttoninc or self._buttondec:
                    self._buttondec = False
                    self._buttoninc = False
                    self._click = False

                if collision:
                    if event.data.button == 1:
                        if self.state == STATE_ACTIVE:
                            self.state = STATE_ENTERED
                    self.run_signal_handlers(SIG_MOUSEUP, event.data)
                    event.handled = True
                else:
                    self.state = STATE_NORMAL
                # Reset timer
                self._timer = _TIMER

        # The user holds the mouse clicked over one button.
        elif (self._buttondec or self._buttoninc) and \
                 (event.signal == SIG_TICK):
            # Wait half a second before starting to in/decrease.
            if self._timer > 0:
                self._timer -= 1
            else:
                if self._buttondec:
                    self.decrease()
                elif self._buttoninc:
                    self.increase()

        # Keyboard activation.
        elif (event.signal == SIG_KEYDOWN) and self.focus:
            if event.data.key in (K_KP_PLUS, K_PLUS, K_RIGHT, K_DOWN):
                self.increase()
                event.handled = True
            elif event.data.key in (K_KP_MINUS, K_MINUS, K_LEFT, K_UP):
                self.decrease()
                event.handled = True
            elif event.data.key == K_PAGEUP:
                val = self.value - 10 * self.step
                if val > self.minimum:
                    self.value = val
                else:
                    self.value = self.minimum
                event.handled = True
            elif event.data.key == K_PAGEDOWN:
                val = self.value + 10 * self.step
                if val < self.maximum:
                    self.value = val
                else:
                    self.value = self.maximum
                event.handled = True
            elif event.data.key == K_END:
                self.value = self.maximum
                event.handled = True
            elif event.data.key == K_HOME:
                self.value = self.minimum
                event.handled = True

        Range.notify(self, event)