view ui/main_window.py @ 1:b6d0a1e6ba3a

Linter cleanup
author Brad Greco <brad@bgreco.net>
date Tue, 02 Feb 2021 19:46:01 -0500
parents 11a9d346aa7a
children 091a1f59a79c
line wrap: on
line source

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


class MainWindow:

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

        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')

        color_profile_list_store = self.builder.get_object('color_profile_list_store')
        # color_profile_list_store.append(["1", "test"])

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

        # for profile_id, profile_type in self.profile_manager.get_types().items():

        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 create_profile(self, widget, profile_type):
        profile = profile_type()
        color_profile_list_store = self.builder.get_object('color_profile_list_store')
        color_profile_list_store.append([profile.id, 'New ' + profile.type_name])
        self.builder.get_object('profile_tree_view').set_cursor(len(color_profile_list_store) - 1)
        self.edit_profile(profile)
        self.builder.get_object('edit_profile_name_entry').grab_focus()

    def edit_profile(self, profile):
        self.builder.get_object('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())

    def edit_profile_name_changed(self, entry):
        profile_name = entry.get_text()
        color_profile_list_store = self.builder.get_object('color_profile_list_store')
        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)