window.py 2.23 KB
Newer Older
Roman Alifanov's avatar
Roman Alifanov committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
# window.py
#
# Copyright 2024 Etersoft
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <https://www.gnu.org/licenses/>.
#
# SPDX-License-Identifier: GPL-3.0-or-later

Roman Alifanov's avatar
Roman Alifanov committed
20
import threading, traceback
21
from gi.repository import GObject, Adw, Gtk, GLib
Roman Alifanov's avatar
Roman Alifanov committed
22

Roman Alifanov's avatar
Roman Alifanov committed
23
from .settings.main import init_settings_stack
Roman Alifanov's avatar
Roman Alifanov committed
24

Roman Alifanov's avatar
Roman Alifanov committed
25 26
from .settings.widgets.error_dialog import TuneItErrorDialog

27
@Gtk.Template(resource_path='/ru.ximperlinux.TuneIt/window.ui')
Roman Alifanov's avatar
Roman Alifanov committed
28 29 30
class TuneitWindow(Adw.ApplicationWindow):
    __gtype_name__ = 'TuneitWindow'

Roman Alifanov's avatar
Roman Alifanov committed
31
    settings_pagestack = Gtk.Template.Child()
32 33
    settings_listbox = Gtk.Template.Child()
    settings_split_view = Gtk.Template.Child()
Roman Alifanov's avatar
Roman Alifanov committed
34

35 36 37 38
    @GObject.Signal
    def settings_page_update(self):
        pass

Roman Alifanov's avatar
Roman Alifanov committed
39 40
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
Roman Alifanov's avatar
Roman Alifanov committed
41 42
        self.error_dialog = TuneItErrorDialog()

43 44
        self.connect('settings_page_update', self.update_settings_page)
        self.update_settings_page()
Roman Alifanov's avatar
Roman Alifanov committed
45

46 47 48 49 50 51
    def update_settings_page(self):
        thread = threading.Thread(target=self._update_settings_page)
        thread.daemon = True
        thread.start()

    def _update_settings_page(self, *args):
52 53 54 55
        """
        Можно вызвать вот так, благодаря сигналу:
        self.settings_pagestack.get_root().emit("settings_page_update")
        """
Roman Alifanov's avatar
Roman Alifanov committed
56 57 58 59 60 61 62 63 64 65
        try:
            init_settings_stack(
                self.settings_pagestack,
                self.settings_listbox,
                self.settings_split_view,
            )
        except Exception as e:
            self.error(traceback.format_exc())

    def error(self, error):
Roman Alifanov's avatar
Roman Alifanov committed
66
        print(error)
Roman Alifanov's avatar
Roman Alifanov committed
67 68
        self.error_dialog.textbuffer.set_text(str(error))
        self.error_dialog.present(self)