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)
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)
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)
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)
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)