Mercurial > system76-keyboard-colors
annotate ui/main_window.py @ 3:eb2aa09653bd default tip
beginnings of CPU colors, daemon
author | Brad Greco <brad@bgreco.net> |
---|---|
date | Mon, 29 Mar 2021 20:27:09 -0400 |
parents | 091a1f59a79c |
children |
rev | line source |
---|---|
3
eb2aa09653bd
beginnings of CPU colors, daemon
Brad Greco <brad@bgreco.net>
parents:
2
diff
changeset
|
1 import itertools |
0 | 2 import gi |
3 import os | |
4 from keyboard_colors.color_profile import ProfileManager | |
1 | 5 gi.require_version("Gtk", "3.0") |
2 | 6 from gi.repository import Gtk |
0 | 7 # from ui.keyboard_section import KeyboardSection |
8 | |
1 | 9 |
0 | 10 class MainWindow: |
11 | |
1 | 12 def init(self): |
13 self.profile_manager = ProfileManager() | |
2 | 14 # self.profile_manager.save_profiles() |
0 | 15 |
1 | 16 self.builder = Gtk.Builder() |
17 dirname = os.path.dirname(os.path.realpath(__file__)) | |
18 self.builder.add_from_file(os.path.join(dirname, 'MainWindow.glade')) | |
19 self.builder.connect_signals(self) | |
20 window = self.builder.get_object('main_window') | |
0 | 21 |
2 | 22 self.color_profile_list_store = self.builder.get_object('color_profile_list_store') |
23 self.load_color_profiles() | |
0 | 24 |
1 | 25 keyboard_section = self.builder.get_object('keyboard_section') |
2 | 26 keyboard_section.pack_start( |
27 KeyboardSection(self.color_profile_list_store), False, False, 0 | |
28 ) | |
29 keyboard_section.pack_start( | |
30 KeyboardSection(self.color_profile_list_store), False, False, 0 | |
31 ) | |
32 keyboard_section.pack_start( | |
33 KeyboardSection(self.color_profile_list_store), False, False, 0 | |
34 ) | |
0 | 35 |
1 | 36 menu = Gtk.Menu() |
37 menu.set_halign(Gtk.Align.CENTER) | |
38 for profile_type in self.profile_manager.get_types(): | |
39 item = Gtk.MenuItem.new_with_label(profile_type.type_name) | |
40 item.connect('activate', self.create_profile, profile_type) | |
41 item.show() | |
42 menu.append(item) | |
43 add_button = Gtk.MenuButton() | |
44 add_button.set_popup(menu) | |
45 add_profile_button_contents = self.builder.get_object('add_profile_button_contents') | |
46 add_button.add(add_profile_button_contents) | |
0 | 47 |
1 | 48 profile_pane = self.builder.get_object('profile_pane') |
49 profile_pane.add(add_button) | |
0 | 50 |
1 | 51 window.show_all() |
52 Gtk.main() | |
0 | 53 |
3
eb2aa09653bd
beginnings of CPU colors, daemon
Brad Greco <brad@bgreco.net>
parents:
2
diff
changeset
|
54 def load_color_profiles(self): |
eb2aa09653bd
beginnings of CPU colors, daemon
Brad Greco <brad@bgreco.net>
parents:
2
diff
changeset
|
55 for profile in self.profile_manager.get_profiles().values(): |
eb2aa09653bd
beginnings of CPU colors, daemon
Brad Greco <brad@bgreco.net>
parents:
2
diff
changeset
|
56 self.color_profile_list_store.append([profile.id, profile.name]) |
eb2aa09653bd
beginnings of CPU colors, daemon
Brad Greco <brad@bgreco.net>
parents:
2
diff
changeset
|
57 |
1 | 58 def create_profile(self, widget, profile_type): |
2 | 59 # todo move to profile manager |
1 | 60 profile = profile_type() |
2 | 61 self.color_profile_list_store.append([profile.id, 'New ' + profile.type_name]) |
62 self.builder.get_object('profile_tree_view').set_cursor( | |
63 len(self.color_profile_list_store) - 1 | |
64 ) | |
1 | 65 self.edit_profile(profile) |
66 self.builder.get_object('edit_profile_name_entry').grab_focus() | |
0 | 67 |
1 | 68 def edit_profile(self, profile): |
3
eb2aa09653bd
beginnings of CPU colors, daemon
Brad Greco <brad@bgreco.net>
parents:
2
diff
changeset
|
69 edit_profile_box = self.builder.get_object('edit_profile_box') |
eb2aa09653bd
beginnings of CPU colors, daemon
Brad Greco <brad@bgreco.net>
parents:
2
diff
changeset
|
70 edit_profile_box.show() |
0 | 71 |
1 | 72 self.builder.get_object('edit_profile_type_name_label').set_text(profile.type_name) |
73 self.builder.get_object('edit_profile_name_entry').set_text(profile.name) | |
0 | 74 |
1 | 75 edit_profile_details_box = self.builder.get_object('edit_profile_details_box') |
76 for child in edit_profile_details_box.get_children(): | |
77 edit_profile_details_box.remove(child) | |
78 edit_profile_details_box.add(profile.build_settings_ui()) | |
0 | 79 |
3
eb2aa09653bd
beginnings of CPU colors, daemon
Brad Greco <brad@bgreco.net>
parents:
2
diff
changeset
|
80 edit_profile_entries = self.find_descendents(edit_profile_box, Gtk.Entry) |
eb2aa09653bd
beginnings of CPU colors, daemon
Brad Greco <brad@bgreco.net>
parents:
2
diff
changeset
|
81 pass |
eb2aa09653bd
beginnings of CPU colors, daemon
Brad Greco <brad@bgreco.net>
parents:
2
diff
changeset
|
82 |
eb2aa09653bd
beginnings of CPU colors, daemon
Brad Greco <brad@bgreco.net>
parents:
2
diff
changeset
|
83 def find_descendents(self, widget, type): |
eb2aa09653bd
beginnings of CPU colors, daemon
Brad Greco <brad@bgreco.net>
parents:
2
diff
changeset
|
84 if isinstance(widget, type): |
eb2aa09653bd
beginnings of CPU colors, daemon
Brad Greco <brad@bgreco.net>
parents:
2
diff
changeset
|
85 return [widget] |
eb2aa09653bd
beginnings of CPU colors, daemon
Brad Greco <brad@bgreco.net>
parents:
2
diff
changeset
|
86 |
eb2aa09653bd
beginnings of CPU colors, daemon
Brad Greco <brad@bgreco.net>
parents:
2
diff
changeset
|
87 try: |
eb2aa09653bd
beginnings of CPU colors, daemon
Brad Greco <brad@bgreco.net>
parents:
2
diff
changeset
|
88 matches = [] |
eb2aa09653bd
beginnings of CPU colors, daemon
Brad Greco <brad@bgreco.net>
parents:
2
diff
changeset
|
89 for child in widget.get_children(): |
eb2aa09653bd
beginnings of CPU colors, daemon
Brad Greco <brad@bgreco.net>
parents:
2
diff
changeset
|
90 matches = matches + self.find_descendents(child, type) |
eb2aa09653bd
beginnings of CPU colors, daemon
Brad Greco <brad@bgreco.net>
parents:
2
diff
changeset
|
91 return matches |
eb2aa09653bd
beginnings of CPU colors, daemon
Brad Greco <brad@bgreco.net>
parents:
2
diff
changeset
|
92 except AttributeError: |
eb2aa09653bd
beginnings of CPU colors, daemon
Brad Greco <brad@bgreco.net>
parents:
2
diff
changeset
|
93 return [] |
eb2aa09653bd
beginnings of CPU colors, daemon
Brad Greco <brad@bgreco.net>
parents:
2
diff
changeset
|
94 |
eb2aa09653bd
beginnings of CPU colors, daemon
Brad Greco <brad@bgreco.net>
parents:
2
diff
changeset
|
95 |
2 | 96 def profile_tree_view_selection_changed(self, selection): |
97 (model, tree_iter) = selection.get_selected() | |
98 profile_id = model.get_value(tree_iter, 0) | |
99 self.edit_profile(self.profile_manager.get_profile(profile_id)) | |
100 | |
1 | 101 def edit_profile_name_changed(self, entry): |
102 profile_name = entry.get_text() | |
103 selection = self.builder.get_object('profile_tree_view').get_selection() | |
104 (model, tree_iter) = selection.get_selected() | |
105 model.set_value(tree_iter, 1, profile_name) | |
0 | 106 |
1 | 107 def edit_profile_name_entry_focus_out(self, entry, event): |
108 pass | |
109 | |
0 | 110 class KeyboardSection(Gtk.Grid): |
111 | |
1 | 112 def __init__(self, model): |
113 super().__init__() | |
0 | 114 |
1 | 115 profile_label = Gtk.Label('Color profile') |
116 # profile_combo_box = Gtk.ComboBox(model) | |
117 profile_combo_box = Gtk.ComboBox.new_with_model(model) | |
118 # profile_combo_box.set_entry_text_column(1) | |
119 # profile_combo_box.append_text('asdf') | |
120 renderer_text = Gtk.CellRendererText() | |
121 profile_combo_box.pack_start(renderer_text, True) | |
122 profile_combo_box.add_attribute(renderer_text, 'text', 1) | |
0 | 123 |
1 | 124 self.add(profile_label) |
125 self.add(profile_combo_box) |