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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3
eb2aa09653bd beginnings of CPU colors, daemon
Brad Greco <brad@bgreco.net>
parents: 2
diff changeset
1 import itertools
0
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
2 import gi
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
3 import os
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
4 from keyboard_colors.color_profile import ProfileManager
1
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
5 gi.require_version("Gtk", "3.0")
2
091a1f59a79c Load profiles into list view
Brad Greco <brad@bgreco.net>
parents: 1
diff changeset
6 from gi.repository import Gtk
0
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
7 # from ui.keyboard_section import KeyboardSection
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
8
1
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
9
0
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
10 class MainWindow:
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
11
1
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
12 def init(self):
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
13 self.profile_manager = ProfileManager()
2
091a1f59a79c Load profiles into list view
Brad Greco <brad@bgreco.net>
parents: 1
diff changeset
14 # self.profile_manager.save_profiles()
0
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
15
1
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
16 self.builder = Gtk.Builder()
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
17 dirname = os.path.dirname(os.path.realpath(__file__))
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
18 self.builder.add_from_file(os.path.join(dirname, 'MainWindow.glade'))
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
19 self.builder.connect_signals(self)
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
20 window = self.builder.get_object('main_window')
0
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
21
2
091a1f59a79c Load profiles into list view
Brad Greco <brad@bgreco.net>
parents: 1
diff changeset
22 self.color_profile_list_store = self.builder.get_object('color_profile_list_store')
091a1f59a79c Load profiles into list view
Brad Greco <brad@bgreco.net>
parents: 1
diff changeset
23 self.load_color_profiles()
0
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
24
1
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
25 keyboard_section = self.builder.get_object('keyboard_section')
2
091a1f59a79c Load profiles into list view
Brad Greco <brad@bgreco.net>
parents: 1
diff changeset
26 keyboard_section.pack_start(
091a1f59a79c Load profiles into list view
Brad Greco <brad@bgreco.net>
parents: 1
diff changeset
27 KeyboardSection(self.color_profile_list_store), False, False, 0
091a1f59a79c Load profiles into list view
Brad Greco <brad@bgreco.net>
parents: 1
diff changeset
28 )
091a1f59a79c Load profiles into list view
Brad Greco <brad@bgreco.net>
parents: 1
diff changeset
29 keyboard_section.pack_start(
091a1f59a79c Load profiles into list view
Brad Greco <brad@bgreco.net>
parents: 1
diff changeset
30 KeyboardSection(self.color_profile_list_store), False, False, 0
091a1f59a79c Load profiles into list view
Brad Greco <brad@bgreco.net>
parents: 1
diff changeset
31 )
091a1f59a79c Load profiles into list view
Brad Greco <brad@bgreco.net>
parents: 1
diff changeset
32 keyboard_section.pack_start(
091a1f59a79c Load profiles into list view
Brad Greco <brad@bgreco.net>
parents: 1
diff changeset
33 KeyboardSection(self.color_profile_list_store), False, False, 0
091a1f59a79c Load profiles into list view
Brad Greco <brad@bgreco.net>
parents: 1
diff changeset
34 )
0
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
35
1
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
36 menu = Gtk.Menu()
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
37 menu.set_halign(Gtk.Align.CENTER)
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
38 for profile_type in self.profile_manager.get_types():
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
39 item = Gtk.MenuItem.new_with_label(profile_type.type_name)
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
40 item.connect('activate', self.create_profile, profile_type)
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
41 item.show()
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
42 menu.append(item)
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
43 add_button = Gtk.MenuButton()
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
44 add_button.set_popup(menu)
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
45 add_profile_button_contents = self.builder.get_object('add_profile_button_contents')
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
46 add_button.add(add_profile_button_contents)
0
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
47
1
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
48 profile_pane = self.builder.get_object('profile_pane')
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
49 profile_pane.add(add_button)
0
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
50
1
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
51 window.show_all()
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
52 Gtk.main()
0
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
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
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
58 def create_profile(self, widget, profile_type):
2
091a1f59a79c Load profiles into list view
Brad Greco <brad@bgreco.net>
parents: 1
diff changeset
59 # todo move to profile manager
1
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
60 profile = profile_type()
2
091a1f59a79c Load profiles into list view
Brad Greco <brad@bgreco.net>
parents: 1
diff changeset
61 self.color_profile_list_store.append([profile.id, 'New ' + profile.type_name])
091a1f59a79c Load profiles into list view
Brad Greco <brad@bgreco.net>
parents: 1
diff changeset
62 self.builder.get_object('profile_tree_view').set_cursor(
091a1f59a79c Load profiles into list view
Brad Greco <brad@bgreco.net>
parents: 1
diff changeset
63 len(self.color_profile_list_store) - 1
091a1f59a79c Load profiles into list view
Brad Greco <brad@bgreco.net>
parents: 1
diff changeset
64 )
1
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
65 self.edit_profile(profile)
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
66 self.builder.get_object('edit_profile_name_entry').grab_focus()
0
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
67
1
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
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
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
71
1
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
72 self.builder.get_object('edit_profile_type_name_label').set_text(profile.type_name)
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
73 self.builder.get_object('edit_profile_name_entry').set_text(profile.name)
0
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
74
1
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
75 edit_profile_details_box = self.builder.get_object('edit_profile_details_box')
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
76 for child in edit_profile_details_box.get_children():
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
77 edit_profile_details_box.remove(child)
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
78 edit_profile_details_box.add(profile.build_settings_ui())
0
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
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
091a1f59a79c Load profiles into list view
Brad Greco <brad@bgreco.net>
parents: 1
diff changeset
96 def profile_tree_view_selection_changed(self, selection):
091a1f59a79c Load profiles into list view
Brad Greco <brad@bgreco.net>
parents: 1
diff changeset
97 (model, tree_iter) = selection.get_selected()
091a1f59a79c Load profiles into list view
Brad Greco <brad@bgreco.net>
parents: 1
diff changeset
98 profile_id = model.get_value(tree_iter, 0)
091a1f59a79c Load profiles into list view
Brad Greco <brad@bgreco.net>
parents: 1
diff changeset
99 self.edit_profile(self.profile_manager.get_profile(profile_id))
091a1f59a79c Load profiles into list view
Brad Greco <brad@bgreco.net>
parents: 1
diff changeset
100
1
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
101 def edit_profile_name_changed(self, entry):
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
102 profile_name = entry.get_text()
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
103 selection = self.builder.get_object('profile_tree_view').get_selection()
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
104 (model, tree_iter) = selection.get_selected()
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
105 model.set_value(tree_iter, 1, profile_name)
0
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
106
1
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
107 def edit_profile_name_entry_focus_out(self, entry, event):
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
108 pass
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
109
0
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
110 class KeyboardSection(Gtk.Grid):
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
111
1
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
112 def __init__(self, model):
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
113 super().__init__()
0
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
114
1
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
115 profile_label = Gtk.Label('Color profile')
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
116 # profile_combo_box = Gtk.ComboBox(model)
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
117 profile_combo_box = Gtk.ComboBox.new_with_model(model)
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
118 # profile_combo_box.set_entry_text_column(1)
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
119 # profile_combo_box.append_text('asdf')
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
120 renderer_text = Gtk.CellRendererText()
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
121 profile_combo_box.pack_start(renderer_text, True)
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
122 profile_combo_box.add_attribute(renderer_text, 'text', 1)
0
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
123
1
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
124 self.add(profile_label)
b6d0a1e6ba3a Linter cleanup
Brad Greco <brad@bgreco.net>
parents: 0
diff changeset
125 self.add(profile_combo_box)