problem.py

 avatar
unknown
python
a year ago
3.7 kB
9
Indexable
#!/usr/bin/python3

import os

import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, GLib

IS_ROOT = (os.geteuid() == 0)
NOT_ROOT_NOTICE = "You cannot change the configuration because you are not root"

class ApplyButtonsWidget(Gtk.VBox):
    def __init__(self):
        super().__init__()

        self.error_label = Gtk.Label()
        self.add(self.error_label)

        self.read_only_checkbox = Gtk.CheckButton(label="(Re-)start in read-only mode")
        self.add(self.read_only_checkbox)

        hbox = Gtk.HBox()
        self.add(hbox)

        self.apply_button = Gtk.Button(label="Apply")
        hbox.add(self.apply_button)

        self.apply_with_restart_button = Gtk.Button(label="Apply with (re-)start")
        hbox.add(self.apply_with_restart_button)

    def enable(self):
        self.error_label.hide()
        self.read_only_checkbox.set_sensitive(True)
        self.apply_button.set_sensitive(True)
        self.apply_with_restart_button.set_sensitive(True)

    def disable(self, reason):
        self.error_label.show()
        self.error_label.set_text(reason)
        self.read_only_checkbox.set_sensitive(False)
        self.apply_button.set_sensitive(False)
        self.apply_with_restart_button.set_sensitive(False)

class TemperatureSourcesWidget(Gtk.Frame):
    def __init__(self):
        super().__init__()

        self.stack = Gtk.Stack()
        self.add(self.stack)

        # Error Widget ========================================================
        self.error_widget = Gtk.VBox()
        self.error_label = Gtk.Label()
        self.error_widget.add(self.error_label)

        button_layout = Gtk.HBox()
        self.retry_button = Gtk.Button(label="Retry")
        self.retry_button.connect("clicked", self.setup_ui)
        button_layout.add(self.retry_button)
        self.error_widget.add(button_layout)

        self.stack.add_titled(self.error_widget, "error_layout", "Error")

        # Main Widget =========================================================
        self.main_widget = Gtk.VBox()

        scroll_area = Gtk.ScrolledWindow()
        self.available_temperature_sources = Gtk.ListBox()
        self.available_temperature_sources.set_selection_mode(Gtk.SelectionMode.SINGLE)
        scroll_area.add(self.available_temperature_sources)
        self.main_widget.add(scroll_area)

        scroll_area = Gtk.ScrolledWindow()
        self.temperature_sources_widget = Gtk.VBox()
        scroll_area.add(self.temperature_sources_widget)
        self.main_widget.add(scroll_area)

        self.apply_buttons_widget = ApplyButtonsWidget()
        self.main_widget.add(self.apply_buttons_widget)

        self.stack.add_titled(self.main_widget, "main_widget", "Main")

        self.setup_ui()
        # XXX: This "fixes" the undesired behaviour
        # self.setup_ui()

    def setup_ui(self, *_):
        if not IS_ROOT:
            self.apply_buttons_widget.disable(NOT_ROOT_NOTICE)
        else:
            self.apply_buttons_widget.enable()

        for child in self.available_temperature_sources.get_children():
            self.available_temperature_sources.remove(child)

        self.stack.set_visible_child(self.main_widget)
        self.stack.show_all()
        print('changed stack to main_widget')

class MainWindow(Gtk.Window):
    def __init__(self):
        super().__init__(title="NBFC Client")

        self.set_default_size(400, 400)

        temperature_sources_widget = TemperatureSourcesWidget()
        self.add(temperature_sources_widget)

if __name__ == '__main__':
    window = MainWindow()
    window.connect("destroy", Gtk.main_quit)
    window.show_all()
    Gtk.main()
Editor is loading...
Leave a Comment