diff --git a/albow/controls.py b/albow/controls.py index 31bc0b9..dc64c6d 100644 --- a/albow/controls.py +++ b/albow/controls.py @@ -35,7 +35,7 @@ class Control(object): ref.set(x) else: self._value = x - + def get_highlighted(self): return self._highlighted @@ -144,9 +144,9 @@ class Label(Widget): if self.highlighted: fg = self.highlight_color or fg bg = self.highlight_bg_color or bg - + self.draw_with(surface, fg, bg) - + is_default = False def draw_with(self, surface, fg, bg=None): if bg: @@ -184,7 +184,7 @@ class GLLabel(Label): pass class SmallLabel(Label): """Small text size. See theme.py""" - + #--------------------------------------------------------------------------- class ButtonBase(Control): @@ -193,7 +193,7 @@ class ButtonBase(Control): action = None default_choice_color = ThemeProperty('default_choice_color') default_choice_bg_color = ThemeProperty('default_choice_bg_color') - + def mouse_down(self, event): if self.enabled: self._highlighted = True @@ -284,10 +284,10 @@ class ValueDisplay(Control, Label): # buf = self.font.render(text, True, self.fg_color) # frame = surf.get_rect() # blit_in_rect(surf, buf, frame, self.align, self.margin) - + def get_text(self): return self.format_value(self.value) - + def format_value(self, value): if value is not None: return self.format % value @@ -325,7 +325,7 @@ class CheckWidget(Widget): def __init__(self, **kwds): Widget.__init__(self, Rect((0, 0), self.default_size), **kwds) - + def draw(self, surf): if self.highlighted: r = self.get_margin_rect() diff --git a/albow/dialogs.py b/albow/dialogs.py index 5b2c61b..a07a901 100644 --- a/albow/dialogs.py +++ b/albow/dialogs.py @@ -13,7 +13,7 @@ class Modal(object): def ok(self): self.dismiss(True) - + def cancel(self): self.dismiss(False) @@ -51,13 +51,13 @@ class Dialog(Modal, Widget): self.enter_response = responses[default] if responses and cancel is not None: self.cancel_response = responses[cancel] - + def mouse_down(self, e): if not e in self: response = self.click_outside_response if response is not None: self.dismiss(response) - + class QuickDialog(Dialog): """ Dialog that closes as soon as you click outside or press a key""" def mouse_down(self, evt): @@ -65,11 +65,11 @@ class QuickDialog(Dialog): self.dismiss(-1) if evt.button != 1: event.post(evt) - + def key_down(self, evt): self.dismiss() event.post(evt) - + def wrapped_label(text, wrap_width, **kwds): paras = text.split("\n") text = "\n".join([textwrap.fill(para, wrap_width) for para in paras]) diff --git a/albow/fields.py b/albow/fields.py index 69ac690..4cbea28 100644 --- a/albow/fields.py +++ b/albow/fields.py @@ -14,7 +14,7 @@ class TextEditor(Widget): upper = False tab_stop = True - + _text = u"" def __init__(self, width, upper = None, **kwds): @@ -23,15 +23,15 @@ class TextEditor(Widget): if upper is not None: self.upper = upper self.insertion_point = None - + def get_text(self): return self._text - + def set_text(self, text): self._text = text - + text = overridable_property('text') - + def draw(self, surface): frame = self.get_margin_rect() fg = self.fg_color @@ -47,7 +47,7 @@ class TextEditor(Widget): x += frame.left y = frame.top draw.line(surface, fg, (x, y), (x, y + h - 1)) - + def key_down(self, event): if not (event.cmd or event.alt): k = event.key @@ -73,7 +73,7 @@ class TextEditor(Widget): pygame.scrap.put(SCRAP_TEXT, self.text) except: print "scrap not available" - + elif event.key == K_v: try: t = pygame.scrap.get(SCRAP_TEXT).replace('\0', '') @@ -83,16 +83,16 @@ class TextEditor(Widget): #print repr(t) else: self.attention_lost() - + self.call_parent_handler('key_down', event) - + def get_text_and_insertion_point(self): text = self.get_text() i = self.insertion_point if i is not None: i = max(0, min(i, len(text))) return text, i - + def move_insertion_point(self, d): text, i = self.get_text_and_insertion_point() if i is None: @@ -103,7 +103,7 @@ class TextEditor(Widget): else: i = max(0, min(i + d, len(text))) self.insertion_point = i - + def insert_char(self, c): if self.upper: c = c.upper() @@ -136,7 +136,7 @@ class TextEditor(Widget): self.insertion_point = i return return 'pass' - + def allow_char(self, c): return True @@ -145,7 +145,7 @@ class TextEditor(Widget): if e.num_clicks == 2: self.insertion_point = None return - + x, y = e.local i = self.pos_to_index(x) self.insertion_point = i @@ -170,9 +170,9 @@ class TextEditor(Widget): i = i2 else: i = i1 - + return i - + def change_text(self, text): self.set_text(text) self.call_handler('change_action') @@ -223,7 +223,7 @@ class Field(Control, TextEditor): return self._text else: return self.format_value(self.value) - + def set_text(self, text): self.editing = True self._text = text @@ -238,22 +238,22 @@ class Field(Control, TextEditor): self.commit() elif self.enter_passes: return 'pass' - + def escape_action(self): if self.editing: self.editing = False self.insertion_point = None else: return 'pass' - + def attention_lost(self): self.commit(notify=True) - + def clamp_value(self, value): if self.max is not None: value = min(value, self.max) if self.min is not None: value = max(value, self.min) return value - + def commit(self, notify = False): if self.editing: text = self._text @@ -274,7 +274,7 @@ class Field(Control, TextEditor): else: self._text = unicode(value) self.editing = False - + else: self.insertion_point = None @@ -302,7 +302,7 @@ class IntField(Field): return int(i) except: return 0 - + _shift_increment = 16 _increment = 1 @property @@ -312,34 +312,34 @@ class IntField(Field): else: return self._increment return self._increment - + @increment.setter def increment(self, val): self._increment = val - + def decrease_value(self): self.value = self.clamp_value(self.value - self.increment) - + def increase_value(self): self.value = self.clamp_value(self.value + self.increment) - + def mouse_down(self, evt): if evt.button == 5: self.decrease_value() - + self.change_text(str(self.value)) - + elif evt.button == 4: self.increase_value() self.change_text(str(self.value)) - + else: Field.mouse_down(self, evt) - + allowed_chars = '-+*/<>()0123456789' def allow_char(self, c): return c in self.allowed_chars - + def should_commit_immediately(self, text): try: return str(eval(text)) == text @@ -358,20 +358,20 @@ class TimeField(Field): return format % (h or 12,m) + " PM" else: return format % (h or 12,m) + " AM" - + def allow_char(self, c): return c in self.allowed_chars - + def type(self, i): h,m = 0,0 i = i.upper() - + pm = "PM" in i for a in "APM": i = i.replace(a, "") - + parts = i.split(":") - + if len(parts): h = int(parts[0]) if len(parts)>1: @@ -381,7 +381,7 @@ class TimeField(Field): h %= 24 m %= 60 return h,m - + def mouse_down(self, evt): if evt.button == 5: delta = -1 @@ -389,7 +389,7 @@ class TimeField(Field): delta = 1 else: return Field.mouse_down(self, evt) - + (h,m) = self.value pos = self.pos_to_index(evt.local[0]) if pos < 2: @@ -398,53 +398,53 @@ class TimeField(Field): m += delta else: h = (h + 12) % 24 - + self.value = (h,m) - + def set_value(self, v): h,m = v super(TimeField, self).set_value((h%24, m%60)) - + from pygame import key from pygame.locals import KMOD_SHIFT - + class FloatField(Field): type = float _increment = 1.0 _shift_increment = 16.0 tooltipText = "Point here and use mousewheel to adjust" - + allowed_chars = '-+.0123456789f' def allow_char(self, c): return c in self.allowed_chars - + @property def increment(self): if key.get_mods() & KMOD_SHIFT: return self._shift_increment return self._increment - + @increment.setter def increment(self, val): self._increment = self.clamp_value(val) - + def decrease_value(self): self.value = self.clamp_value(self.value - self.increment) - + def increase_value(self): self.value = self.clamp_value(self.value + self.increment) - + def mouse_down(self, evt): if evt.button == 5: self.decrease_value() - + self.change_text(str(self.value)) - + elif evt.button == 4: self.increase_value() self.change_text(str(self.value)) - + else: Field.mouse_down(self, evt) - + #--------------------------------------------------------------------------- diff --git a/albow/root.py b/albow/root.py index cb53072..b8f99c4 100644 --- a/albow/root.py +++ b/albow/root.py @@ -91,7 +91,7 @@ class RootWidget(Widget): widget.root_widget = self self.is_gl = surface.get_flags() & OPENGL <> 0 self.idle_handlers = [] - + def set_timer(self, ms): pygame.time.set_timer(USEREVENT, ms) @@ -114,7 +114,7 @@ class RootWidget(Widget): frames = 0 hover_widget = None - + def run_modal(self, modal_widget): old_captured_widget = None @@ -142,8 +142,8 @@ class RootWidget(Widget): last_click_time = start_time last_click_button = 0 self.do_draw = True - - + + while modal_widget.modal_result is None: try: self.hover_widget = self.find_widget(mouse.get_pos()) @@ -163,7 +163,7 @@ class RootWidget(Widget): for event in events: if event.type: log.debug("%s", event) - + type = event.type if type == QUIT: self.quit() @@ -218,7 +218,7 @@ class RootWidget(Widget): else: last_mouse_event_handler = mouse_widget event.dict['clicked_widget'] = None - + last_mouse_event = event clicked_widget = None last_mouse_event_handler.handle_mouse('mouse_up', event) @@ -263,7 +263,7 @@ class RootWidget(Widget): elif type == NOEVENT: add_modifiers(event) self.call_idle_handlers(event) - + except Cancel: pass finally: @@ -281,16 +281,16 @@ class RootWidget(Widget): if widget: widget.idleevent(event) else: print "Idle ref died!" return bool(widget) - + self.idle_handlers = filter(call, self.idle_handlers) - + def add_idle_handler(self, widget): from weakref import ref self.idle_handlers.append(ref(widget)) def remove_idle_handler(self, widget): from weakref import ref self.idle_handlers.remove(ref(widget)) - + def send_key(self, widget, name, event): add_modifiers(event) widget.dispatch_key(name, event)