0
|
1 import gi
|
|
2 import os
|
|
3 from keyboard_colors.color_profile import ProfileManager
|
1
|
4 gi.require_version("Gtk", "3.0")
|
2
|
5 from gi.repository import Gtk
|
0
|
6 # from ui.keyboard_section import KeyboardSection
|
|
7
|
1
|
8
|
0
|
9 class MainWindow:
|
|
10
|
1
|
11 def init(self):
|
|
12 self.profile_manager = ProfileManager()
|
2
|
13 # self.profile_manager.save_profiles()
|
0
|
14
|
1
|
15 self.builder = Gtk.Builder()
|
|
16 dirname = os.path.dirname(os.path.realpath(__file__))
|
|
17 self.builder.add_from_file(os.path.join(dirname, 'MainWindow.glade'))
|
|
18 self.builder.connect_signals(self)
|
|
19 window = self.builder.get_object('main_window')
|
0
|
20
|
2
|
21 self.color_profile_list_store = self.builder.get_object('color_profile_list_store')
|
|
22 self.load_color_profiles()
|
0
|
23
|
1
|
24 keyboard_section = self.builder.get_object('keyboard_section')
|
2
|
25 keyboard_section.pack_start(
|
|
26 KeyboardSection(self.color_profile_list_store), False, False, 0
|
|
27 )
|
|
28 keyboard_section.pack_start(
|
|
29 KeyboardSection(self.color_profile_list_store), False, False, 0
|
|
30 )
|
|
31 keyboard_section.pack_start(
|
|
32 KeyboardSection(self.color_profile_list_store), False, False, 0
|
|
33 )
|
0
|
34
|
1
|
35 menu = Gtk.Menu()
|
|
36 menu.set_halign(Gtk.Align.CENTER)
|
|
37 for profile_type in self.profile_manager.get_types():
|
|
38 item = Gtk.MenuItem.new_with_label(profile_type.type_name)
|
|
39 item.connect('activate', self.create_profile, profile_type)
|
|
40 item.show()
|
|
41 menu.append(item)
|
|
42 add_button = Gtk.MenuButton()
|
|
43 add_button.set_popup(menu)
|
|
44 add_profile_button_contents = self.builder.get_object('add_profile_button_contents')
|
|
45 add_button.add(add_profile_button_contents)
|
0
|
46
|
1
|
47 profile_pane = self.builder.get_object('profile_pane')
|
|
48 profile_pane.add(add_button)
|
0
|
49
|
1
|
50 window.show_all()
|
|
51 Gtk.main()
|
0
|
52
|
1
|
53 def create_profile(self, widget, profile_type):
|
2
|
54 # todo move to profile manager
|
1
|
55 profile = profile_type()
|
2
|
56 self.color_profile_list_store.append([profile.id, 'New ' + profile.type_name])
|
|
57 self.builder.get_object('profile_tree_view').set_cursor(
|
|
58 len(self.color_profile_list_store) - 1
|
|
59 )
|
1
|
60 self.edit_profile(profile)
|
|
61 self.builder.get_object('edit_profile_name_entry').grab_focus()
|
0
|
62
|
1
|
63 def edit_profile(self, profile):
|
|
64 self.builder.get_object('edit_profile_box').show()
|
0
|
65
|
1
|
66 self.builder.get_object('edit_profile_type_name_label').set_text(profile.type_name)
|
|
67 self.builder.get_object('edit_profile_name_entry').set_text(profile.name)
|
0
|
68
|
1
|
69 edit_profile_details_box = self.builder.get_object('edit_profile_details_box')
|
|
70 for child in edit_profile_details_box.get_children():
|
|
71 edit_profile_details_box.remove(child)
|
|
72 edit_profile_details_box.add(profile.build_settings_ui())
|
0
|
73
|
2
|
74 def profile_tree_view_selection_changed(self, selection):
|
|
75 (model, tree_iter) = selection.get_selected()
|
|
76 profile_id = model.get_value(tree_iter, 0)
|
|
77 self.edit_profile(self.profile_manager.get_profile(profile_id))
|
|
78
|
1
|
79 def edit_profile_name_changed(self, entry):
|
|
80 profile_name = entry.get_text()
|
|
81 selection = self.builder.get_object('profile_tree_view').get_selection()
|
|
82 (model, tree_iter) = selection.get_selected()
|
|
83 model.set_value(tree_iter, 1, profile_name)
|
0
|
84
|
1
|
85 def edit_profile_name_entry_focus_out(self, entry, event):
|
|
86 pass
|
|
87
|
2
|
88 def load_color_profiles(self):
|
|
89 for profile in self.profile_manager.get_profiles().values():
|
|
90 self.color_profile_list_store.append([profile.id, profile.name])
|
0
|
91
|
|
92 class KeyboardSection(Gtk.Grid):
|
|
93
|
1
|
94 def __init__(self, model):
|
|
95 super().__init__()
|
0
|
96
|
1
|
97 profile_label = Gtk.Label('Color profile')
|
|
98 # profile_combo_box = Gtk.ComboBox(model)
|
|
99 profile_combo_box = Gtk.ComboBox.new_with_model(model)
|
|
100 # profile_combo_box.set_entry_text_column(1)
|
|
101 # profile_combo_box.append_text('asdf')
|
|
102 renderer_text = Gtk.CellRendererText()
|
|
103 profile_combo_box.pack_start(renderer_text, True)
|
|
104 profile_combo_box.add_attribute(renderer_text, 'text', 1)
|
0
|
105
|
1
|
106 self.add(profile_label)
|
|
107 self.add(profile_combo_box)
|