annotate ui/main_window.py @ 0:11a9d346aa7a

Sort of working model
author Brad Greco <brad@bgreco.net>
date Wed, 27 Jan 2021 21:02:30 -0500
parents
children b6d0a1e6ba3a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
1 import gi
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
2 import os
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
3 gi.require_version("Gtk", "3.0")
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
4 from gi.repository import Gtk
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
5 from keyboard_colors.color_profile import ProfileManager
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
6 # from ui.keyboard_section import KeyboardSection
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
7
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
8 class MainWindow:
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
9
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
10 def init(self):
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
11 self.profile_manager = ProfileManager()
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
12
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
13 self.builder = Gtk.Builder()
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
14 dirname = os.path.dirname(os.path.realpath(__file__))
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
15 self.builder.add_from_file(os.path.join(dirname, 'MainWindow.glade'))
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
16 self.builder.connect_signals(self)
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
17 window = self.builder.get_object('main_window')
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
18
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
19 color_profile_list_store = self.builder.get_object('color_profile_list_store')
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
20 # color_profile_list_store.append(["1", "test"])
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
21
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
22 keyboard_section = self.builder.get_object('keyboard_section')
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
23 keyboard_section.pack_start(KeyboardSection(color_profile_list_store), False, False, 0)
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
24 keyboard_section.pack_start(KeyboardSection(color_profile_list_store), False, False, 0)
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
25 keyboard_section.pack_start(KeyboardSection(color_profile_list_store), False, False, 0)
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
26
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
27 # for profile_id, profile_type in self.profile_manager.get_types().items():
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
28
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
29 menu = Gtk.Menu()
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
30 menu.set_halign(Gtk.Align.CENTER)
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
31 for profile_type in self.profile_manager.get_types():
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
32 item = Gtk.MenuItem.new_with_label(profile_type.type_name)
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
33 item.connect('activate', self.create_profile, profile_type)
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
34 item.show()
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
35 menu.append(item)
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
36 add_button = Gtk.MenuButton()
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
37 add_button.set_popup(menu)
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
38 add_profile_button_contents = self.builder.get_object('add_profile_button_contents')
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
39 add_button.add(add_profile_button_contents)
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
40
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
41 profile_pane = self.builder.get_object('profile_pane')
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
42 profile_pane.add(add_button)
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
43
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
44 window.show_all()
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
45 Gtk.main()
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
46
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
47 def create_profile(self, widget, profile_type):
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
48 profile = profile_type()
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
49 color_profile_list_store = self.builder.get_object('color_profile_list_store')
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
50 color_profile_list_store.append([profile.id, 'New ' + profile.type_name])
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
51 self.builder.get_object('profile_tree_view').set_cursor(len(color_profile_list_store) - 1)
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
52 self.edit_profile(profile)
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
53 self.builder.get_object('edit_profile_name_entry').grab_focus()
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
54
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
55 def edit_profile(self, profile):
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
56 self.builder.get_object('edit_profile_box').show()
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
57
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
58 self.builder.get_object('edit_profile_type_name_label').set_text(profile.type_name)
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
59 self.builder.get_object('edit_profile_name_entry').set_text(profile.name)
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
60
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
61 edit_profile_details_box = self.builder.get_object('edit_profile_details_box')
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
62 for child in edit_profile_details_box.get_children():
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
63 edit_profile_details_box.remove(child)
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
64 edit_profile_details_box.add(profile.build_settings_ui())
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
65
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
66 def edit_profile_name_changed(self, entry):
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
67 profile_name = entry.get_text()
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
68 color_profile_list_store = self.builder.get_object('color_profile_list_store')
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
69 selection = self.builder.get_object('profile_tree_view').get_selection()
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
70 (model, tree_iter) = selection.get_selected()
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
71 model.set_value(tree_iter, 1, profile_name)
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
72
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
73 def edit_profile_name_entry_focus_out(self, entry, event):
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
74 pass
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
75
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
76 class KeyboardSection(Gtk.Grid):
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
77
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
78 def __init__(self, model):
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
79 super().__init__()
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
80
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
81 profile_label = Gtk.Label('Color profile')
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
82 # profile_combo_box = Gtk.ComboBox(model)
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
83 profile_combo_box = Gtk.ComboBox.new_with_model(model)
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
84 # profile_combo_box.set_entry_text_column(1)
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
85 # profile_combo_box.append_text('asdf')
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
86 renderer_text = Gtk.CellRendererText()
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
87 profile_combo_box.pack_start(renderer_text, True)
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
88 profile_combo_box.add_attribute(renderer_text, 'text', 1)
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
89
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
90 self.add(profile_label)
11a9d346aa7a Sort of working model
Brad Greco <brad@bgreco.net>
parents:
diff changeset
91 self.add(profile_combo_box)