Gradience/src/welcome.py

143 lines
4.6 KiB
Python
Raw Normal View History

2022-08-19 21:28:32 +00:00
from gi.repository import Gtk, Adw, Gio, Gdk
from material_color_utilities_python import *
from .constants import rootdir
from .run_async import RunAsync
2022-08-19 21:50:21 +00:00
import time
2022-08-19 21:28:32 +00:00
@Gtk.Template(resource_path=f"{rootdir}/ui/welcome.ui")
class GradienceWelcomeWindow(Adw.Window):
2022-08-19 22:08:44 +00:00
gtype_name = "GradienceWelcomeWindow"
2022-08-19 21:28:32 +00:00
2022-08-19 22:08:44 +00:00
settings = Gtk.Settings.get_default()
2022-08-19 21:28:32 +00:00
carousel = Gtk.Template.Child()
btn_close = Gtk.Template.Child()
btn_back = Gtk.Template.Child()
btn_next = Gtk.Template.Child()
btn_install = Gtk.Template.Child()
progressbar = Gtk.Template.Child()
page_welcome = Gtk.Template.Child()
page_gradience = Gtk.Template.Child()
page_configure = Gtk.Template.Child()
page_download = Gtk.Template.Child()
page_finish = Gtk.Template.Child()
img_welcome = Gtk.Template.Child()
label_skip = Gtk.Template.Child()
carousel_pages = [
"welcome",
"gradience",
"configure",
"download",
"finish"
]
images = [
2022-08-19 22:07:33 +00:00
"/com/github/GradienceTeam/Gradience/images/images/welcome.svg",
"/com/github/GradienceTeam/Gradience/images/images/welcome-night.svg",
2022-08-19 21:28:32 +00:00
]
2022-08-19 22:08:44 +00:00
def init(self, window, **kwargs) -> None:
super().init(**kwargs)
2022-08-19 21:28:32 +00:00
self.set_transient_for(window)
# common variables and references
self.window = window
# connect signals
2022-08-19 22:08:44 +00:00
self.connect("close-request", self.quit)
self.carousel.connect('page-changed', self.page_changed)
self.btn_close.connect("clicked", self.close_window)
self.btn_back.connect("clicked", self.previous_page)
self.btn_next.connect("clicked", self.next_page)
self.btn_install.connect("clicked", self.install_runner)
self.settings.connect(
2022-08-19 21:28:54 +00:00
"notify::gtk-application-prefer-dark-theme",
2022-08-19 22:08:44 +00:00
self.theme_changed)
2022-08-19 21:28:32 +00:00
self.btn_close.set_sensitive(False)
2022-08-19 22:08:44 +00:00
if self.settings.get_property("gtk-application-prefer-dark-theme"):
2022-08-19 21:28:32 +00:00
self.img_welcome.set_from_resource(self.images[1])
2022-08-19 22:08:44 +00:00
self.page_changed()
2022-08-19 21:28:32 +00:00
2022-08-19 22:08:44 +00:00
def theme_changed(self, settings, key):
2022-08-19 21:28:54 +00:00
self.img_welcome.set_from_resource(
self.images[settings.get_property("gtk-application-prefer-dark-theme")])
2022-08-19 21:28:32 +00:00
2022-08-19 22:08:44 +00:00
def get_page(self, index):
2022-08-19 21:28:32 +00:00
return self.carousel_pages[index]
2022-08-19 22:08:44 +00:00
def page_changed(self, widget=False, index=0, *_args):
2022-08-19 21:28:32 +00:00
"""
This function is called on first load and when the user require
to change the page. It sets the widgets' status according to
the step of the onboard progress.
"""
2022-08-19 22:08:44 +00:00
page = self.get_page(index)
2022-08-19 21:28:32 +00:00
if page == "finish":
self.btn_back.set_visible(False)
self.btn_next.set_visible(False)
elif page == "download":
self.btn_back.set_visible(True)
self.btn_next.set_visible(False)
self.btn_install.set_visible(True)
elif page == "welcome":
self.btn_back.set_visible(False)
self.btn_next.set_visible(True)
else:
self.btn_back.set_visible(True)
self.btn_next.set_visible(True)
@staticmethod
2022-08-19 22:08:44 +00:00
def quit(widget=False):
2022-08-19 21:28:32 +00:00
quit()
2022-08-19 22:08:44 +00:00
def install_runner(self, widget):
2022-08-19 21:28:32 +00:00
def set_completed(result, error=False):
self.label_skip.set_visible(False)
self.btn_close.set_sensitive(True)
2022-08-19 21:54:56 +00:00
self.window.settings.set_boolean("first-run", False)
2022-08-19 22:08:44 +00:00
self.next_page()
2022-08-19 21:28:32 +00:00
2022-08-19 22:08:44 +00:00
self.installing = True
2022-08-19 21:28:32 +00:00
self.btn_back.set_visible(False)
self.btn_next.set_visible(False)
self.btn_install.set_visible(False)
self.progressbar.set_visible(True)
self.carousel.set_allow_long_swipes(False)
self.carousel.set_allow_mouse_drag(False)
self.carousel.set_allow_scroll_wheel(False)
self.set_deletable(False)
2022-08-19 21:28:54 +00:00
# RunAsync(self.pulse)
# RunAsync(
2022-08-19 21:28:32 +00:00
# callback=set_completed,
# install_latest=True,
# first_run=True
2022-08-19 21:28:54 +00:00
# )
2022-08-19 21:28:32 +00:00
print("install")
2022-08-19 21:56:51 +00:00
set_completed(None)
2022-08-19 21:28:32 +00:00
2022-08-19 22:08:44 +00:00
def previous_page(self, widget=False):
2022-08-19 21:28:32 +00:00
index = int(self.carousel.get_position())
previous_page = self.carousel.get_nth_page(index - 1)
self.carousel.scroll_to(previous_page, True)
2022-08-19 22:08:44 +00:00
def next_page(self, widget=False):
2022-08-19 21:28:32 +00:00
index = int(self.carousel.get_position())
next_page = self.carousel.get_nth_page(index + 1)
self.carousel.scroll_to(next_page, True)
def pulse(self):
# This function update the progress bar every 1s.
while True:
time.sleep(.5)
self.progressbar.pulse()
2022-08-19 22:08:44 +00:00
def close_window(self, widget):
2022-08-19 21:28:32 +00:00
self.destroy()
2022-08-19 21:50:21 +00:00
self.window.present()