Mercurial > mamba
annotate mamba/widgets/toollist.py @ 601:915de6c7d342 default tip
Add support for making the editor fullscreen too.
author | Simon Cross <hodgestar@gmail.com> |
---|---|
date | Sat, 14 Jan 2023 19:34:26 +0100 |
parents | 5f26ba2402cc |
children |
rev | line source |
---|---|
267
1e8dca95c48a
Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents:
265
diff
changeset
|
1 from pygame.constants import KEYUP, K_1, K_PAGEDOWN, K_PAGEUP |
1e8dca95c48a
Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents:
265
diff
changeset
|
2 |
265
74ae1645df6e
Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
3 from mamba.widgets.base import Container |
74ae1645df6e
Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
4 from mamba.widgets.text import TextButton |
74ae1645df6e
Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
5 |
74ae1645df6e
Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
6 |
74ae1645df6e
Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
7 class ToolListWidget(Container): |
74ae1645df6e
Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
8 """List of other widgets, with some paging trickery""" |
74ae1645df6e
Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
9 |
267
1e8dca95c48a
Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents:
265
diff
changeset
|
10 def __init__(self, rect, widget_list, page_length, start_key=K_1, |
1e8dca95c48a
Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents:
265
diff
changeset
|
11 padding=2): |
480
90a59251c93b
Sort tools in level editor.
Jeremy Thurgood <firxen@gmail.com>
parents:
479
diff
changeset
|
12 widget_list.sort(key=lambda w: w.text) |
265
74ae1645df6e
Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
13 self.widget_list = widget_list |
74ae1645df6e
Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
14 self.page_length = page_length |
74ae1645df6e
Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
15 self.padding = padding |
74ae1645df6e
Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
16 self.page = 0 |
267
1e8dca95c48a
Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents:
265
diff
changeset
|
17 self.start_key = start_key |
265
74ae1645df6e
Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
18 super(ToolListWidget, self).__init__(rect) |
479 | 19 self.prev_but = None |
20 self.next_but = None | |
265
74ae1645df6e
Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
21 self.fill_page() |
267
1e8dca95c48a
Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents:
265
diff
changeset
|
22 # We do this to avoid needing to worry about focus too much |
1e8dca95c48a
Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents:
265
diff
changeset
|
23 self.add_callback(KEYUP, self.handle_key) |
1e8dca95c48a
Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents:
265
diff
changeset
|
24 self.focussable = True |
265
74ae1645df6e
Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
25 |
74ae1645df6e
Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
26 def fill_page(self): |
324
ffec90bda89d
Make sure we clear list before refilling it
Neil Muller <drnlmuller@gmail.com>
parents:
267
diff
changeset
|
27 for widget in self.children[:]: |
ffec90bda89d
Make sure we clear list before refilling it
Neil Muller <drnlmuller@gmail.com>
parents:
267
diff
changeset
|
28 self.remove(widget) |
267
1e8dca95c48a
Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents:
265
diff
changeset
|
29 self.hot_keys = {} |
265
74ae1645df6e
Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
30 start_page = self.page * self.page_length |
74ae1645df6e
Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
31 end_page = start_page + self.page_length |
74ae1645df6e
Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
32 button_height = self.rect.top + self.padding |
74ae1645df6e
Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
33 button_left = self.rect.left + self.padding |
267
1e8dca95c48a
Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents:
265
diff
changeset
|
34 key = self.start_key |
265
74ae1645df6e
Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
35 for widget in self.widget_list[start_page:end_page]: |
74ae1645df6e
Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
36 widget.rect.topleft = (button_left, button_height) |
74ae1645df6e
Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
37 self.add(widget) |
267
1e8dca95c48a
Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents:
265
diff
changeset
|
38 if key: |
1e8dca95c48a
Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents:
265
diff
changeset
|
39 self.hot_keys[key] = widget |
1e8dca95c48a
Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents:
265
diff
changeset
|
40 key += 1 |
265
74ae1645df6e
Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
41 button_height += widget.rect.height + self.padding |
479 | 42 if not self.prev_but: |
513
5f26ba2402cc
Pretty unicode arrows
Stefano Rivera <stefano@rivera.za.net>
parents:
480
diff
changeset
|
43 self.prev_but = TextButton((button_left, button_height), |
5f26ba2402cc
Pretty unicode arrows
Stefano Rivera <stefano@rivera.za.net>
parents:
480
diff
changeset
|
44 u'\N{LEFTWARDS ARROW}') |
267
1e8dca95c48a
Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents:
265
diff
changeset
|
45 self.prev_but.add_callback('clicked', self.change_page, -1) |
479 | 46 else: |
47 self.prev_but.rect.top = max(button_height, self.prev_but.rect.top) | |
48 if not self.next_but: | |
267
1e8dca95c48a
Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents:
265
diff
changeset
|
49 self.next_but = TextButton((button_left + 100, button_height), |
513
5f26ba2402cc
Pretty unicode arrows
Stefano Rivera <stefano@rivera.za.net>
parents:
480
diff
changeset
|
50 u'\N{RIGHTWARDS ARROW}') |
267
1e8dca95c48a
Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents:
265
diff
changeset
|
51 self.next_but.add_callback('clicked', self.change_page, 1) |
479 | 52 else: |
53 self.next_but.rect.top = max(button_height, self.next_but.rect.top) | |
54 if start_page > 0: | |
55 self.prev_but.enable() | |
56 else: | |
57 self.prev_but.disable() | |
58 if end_page < len(self.widget_list): | |
59 self.next_but.enable() | |
60 else: | |
61 self.next_but.disable() | |
62 self.add(self.prev_but) | |
63 self.add(self.next_but) | |
64 for widget in self.children[:]: | |
65 if widget in self.widget_list: | |
66 # Standardise widdths | |
67 widget.rect.width = self.rect.width - 2 | |
68 widget.prepare() | |
267
1e8dca95c48a
Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents:
265
diff
changeset
|
69 |
1e8dca95c48a
Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents:
265
diff
changeset
|
70 def handle_key(self, ev, widget): |
351 | 71 if hasattr(self.parent, 'paused') and self.parent.paused: |
72 # No hotjets when pasued | |
73 return False | |
267
1e8dca95c48a
Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents:
265
diff
changeset
|
74 if ev.key in self.hot_keys: |
1e8dca95c48a
Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents:
265
diff
changeset
|
75 widget = self.hot_keys[ev.key] |
1e8dca95c48a
Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents:
265
diff
changeset
|
76 return widget.forced_click() |
1e8dca95c48a
Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents:
265
diff
changeset
|
77 elif ev.key == K_PAGEDOWN and self.prev_but: |
337
170d4a43c00e
Don't edit the level when interacting with dialogs
Neil Muller <drnlmuller@gmail.com>
parents:
324
diff
changeset
|
78 return self.prev_but.forced_click() |
267
1e8dca95c48a
Hook up hot-keys in editor for jerith
Neil Muller <drnlmuller@gmail.com>
parents:
265
diff
changeset
|
79 elif ev.key == K_PAGEUP and self.next_but: |
337
170d4a43c00e
Don't edit the level when interacting with dialogs
Neil Muller <drnlmuller@gmail.com>
parents:
324
diff
changeset
|
80 return self.next_but.forced_click() |
265
74ae1645df6e
Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
81 |
74ae1645df6e
Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
82 def change_page(self, ev, widget, change): |
74ae1645df6e
Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
83 self.page += change |
74ae1645df6e
Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
84 self.fill_page() |
74ae1645df6e
Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
85 return True |