view 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
line wrap: on
line source

import itertools
import gi
import os
from keyboard_colors.color_profile import ProfileManager
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
# from ui.keyboard_section import KeyboardSection


class MainWindow:

    def init(self):
        self.profile_manager = ProfileManager()
        # self.profile_manager.save_profiles()

        self.builder = Gtk.Builder()
        dirname = os.path.dirname(os.path.realpath(__file__))
        self.builder.add_from_file(os.path.join(dirname, 'MainWindow.glade'))
        self.builder.connect_signals(self)
        window = self.builder.get_object('main_window')

        self.color_profile_list_store = self.builder.get_object('color_profile_list_store')
        self.load_color_profiles()

        keyboard_section = self.builder.get_object('keyboard_section')
        keyboard_section.pack_start(
            KeyboardSection(self.color_profile_list_store), False, False, 0
        )
        keyboard_section.pack_start(
            KeyboardSection(self.color_profile_list_store), False, False, 0
        )
        keyboard_section.pack_start(
            KeyboardSection(self.color_profile_list_store), False, False, 0
        )

        menu = Gtk.Menu()
        menu.set_halign(Gtk.Align.CENTER)
        for profile_type in self.profile_manager.get_types():
            item = Gtk.MenuItem.new_with_label(profile_type.type_name)
            item.connect('activate', self.create_profile, profile_type)
            item.show()
            menu.append(item)
        add_button = Gtk.MenuButton()
        add_button.set_popup(menu)
        add_profile_button_contents = self.builder.get_object('add_profile_button_contents')
        add_button.add(add_profile_button_contents)

        profile_pane = self.builder.get_object('profile_pane')
        profile_pane.add(add_button)

        window.show_all()
        Gtk.main()

    def load_color_profiles(self):
        for profile in self.profile_manager.get_profiles().values():
            self.color_profile_list_store.append([profile.id, profile.name])

    def create_profile(self, widget, profile_type):
        # todo move to profile manager
        profile = profile_type()
        self.color_profile_list_store.append([profile.id, 'New ' + profile.type_name])
        self.builder.get_object('profile_tree_view').set_cursor(
            len(self.color_profile_list_store) - 1
        )
        self.edit_profile(profile)
        self.builder.get_object('edit_profile_name_entry').grab_focus()

    def edit_profile(self, profile):
        edit_profile_box = self.builder.get_object('edit_profile_box')
        edit_profile_box.show()

        self.builder.get_object('edit_profile_type_name_label').set_text(profile.type_name)
        self.builder.get_object('edit_profile_name_entry').set_text(profile.name)

        edit_profile_details_box = self.builder.get_object('edit_profile_details_box')
        for child in edit_profile_details_box.get_children():
            edit_profile_details_box.remove(child)
        edit_profile_details_box.add(profile.build_settings_ui())

        edit_profile_entries = self.find_descendents(edit_profile_box, Gtk.Entry)
        pass

    def find_descendents(self, widget, type):
        if isinstance(widget, type):
            return [widget]

        try:
            matches = []
            for child in widget.get_children():
                matches = matches + self.find_descendents(child, type)
            return matches
        except AttributeError:
            return []


    def profile_tree_view_selection_changed(self, selection):
        (model, tree_iter) = selection.get_selected()
        profile_id = model.get_value(tree_iter, 0)
        self.edit_profile(self.profile_manager.get_profile(profile_id))

    def edit_profile_name_changed(self, entry):
        profile_name = entry.get_text()
        selection = self.builder.get_object('profile_tree_view').get_selection()
        (model, tree_iter) = selection.get_selected()
        model.set_value(tree_iter, 1, profile_name)

    def edit_profile_name_entry_focus_out(self, entry, event):
        pass

class KeyboardSection(Gtk.Grid):

    def __init__(self, model):
        super().__init__()

        profile_label = Gtk.Label('Color profile')
        # profile_combo_box = Gtk.ComboBox(model)
        profile_combo_box = Gtk.ComboBox.new_with_model(model)
        # profile_combo_box.set_entry_text_column(1)
        # profile_combo_box.append_text('asdf')
        renderer_text = Gtk.CellRendererText()
        profile_combo_box.pack_start(renderer_text, True)
        profile_combo_box.add_attribute(renderer_text, 'text', 1)

        self.add(profile_label)
        self.add(profile_combo_box)