mirror of
https://github.com/GradienceTeam/Gradience.git
synced 2024-10-02 16:17:53 +00:00
feat: add welcome dialog (WIP)
This commit is contained in:
parent
2dd878d914
commit
ec54cd8596
5 changed files with 153 additions and 3 deletions
|
@ -12,6 +12,7 @@
|
|||
<file>ui/custom_css_group.ui</file>
|
||||
<file>ui/presets_manager_window.ui</file>
|
||||
<file>ui/plugin_row.ui</file>
|
||||
<file>ui/welcome.ui</file>
|
||||
</gresource>
|
||||
<gresource prefix="/com/github/GradienceTeam/Gradience/icons/scalable/actions/">
|
||||
<file
|
||||
|
|
10
src/main.py
10
src/main.py
|
@ -35,7 +35,7 @@ from .option import GradienceOption
|
|||
from .app_type_dialog import GradienceAppTypeDialog
|
||||
from .custom_css_group import GradienceCustomCSSGroup
|
||||
from .constants import rootdir, app_id, version, bugtracker_url, help_url, project_url
|
||||
|
||||
from .welcome import GradienceWelcomeWindow
|
||||
|
||||
def to_slug_case(non_slug):
|
||||
return re.sub(r"[^0-9a-z]+", "-", anyascii(non_slug).lower()).strip("-")
|
||||
|
@ -75,6 +75,7 @@ class GradienceApplication(Adw.Application):
|
|||
self.disabled_plugins = list(
|
||||
self.settings.get_value("disabled-plugins"))
|
||||
|
||||
self.first_run = self.settings.get_boolean("first-run")
|
||||
print(f"disabled plugins: {self.disabled_plugins}")
|
||||
|
||||
def do_activate(self):
|
||||
|
@ -116,8 +117,15 @@ class GradienceApplication(Adw.Application):
|
|||
f"{rootdir}/presets/adwaita.json"
|
||||
)
|
||||
|
||||
if self.first_run:
|
||||
print("first run")
|
||||
welcome = GradienceWelcomeWindow(self.win)
|
||||
welcome.present()
|
||||
else:
|
||||
print("normal run")
|
||||
self.win.present()
|
||||
|
||||
|
||||
def reload_user_defined_presets(self):
|
||||
if self.props.active_window.presets_menu.get_n_items() > 1:
|
||||
self.props.active_window.presets_menu.remove(1)
|
||||
|
|
|
@ -10,6 +10,7 @@ blueprints = custom_target('blueprints',
|
|||
'ui/custom_css_group.blp',
|
||||
'ui/presets_manager_window.blp',
|
||||
'ui/plugin_row.blp',
|
||||
'ui/welcome.blp',
|
||||
),
|
||||
output: '.',
|
||||
command: [find_program('blueprint-compiler'), 'batch-compile', '@OUTPUT@', '@CURRENT_SOURCE_DIR@', '@INPUT@'],
|
||||
|
@ -62,6 +63,7 @@ gradience_sources = [
|
|||
'custom_css_group.py',
|
||||
'presets_manager_window.py',
|
||||
'plugin_row.py',
|
||||
'welcome.py'
|
||||
]
|
||||
|
||||
PY_INSTALLDIR.install_sources(gradience_sources, subdir: 'gradience')
|
||||
|
|
|
@ -64,7 +64,7 @@ template GradienceWelcomeWindow: Adw.Window {
|
|||
|
||||
}
|
||||
|
||||
Adw.StatusPage page_Gradience {
|
||||
Adw.StatusPage page_gradience {
|
||||
vexpand: true;
|
||||
hexpand: true;
|
||||
title: _("Customize Adwaita");
|
||||
|
|
139
src/welcome.py
Normal file
139
src/welcome.py
Normal file
|
@ -0,0 +1,139 @@
|
|||
from gi.repository import Gtk, Adw, Gio, Gdk
|
||||
from material_color_utilities_python import *
|
||||
from .constants import rootdir
|
||||
from .run_async import RunAsync
|
||||
|
||||
@Gtk.Template(resource_path=f"{rootdir}/ui/welcome.ui")
|
||||
class GradienceWelcomeWindow(Adw.Window):
|
||||
__gtype_name__ = "GradienceWelcomeWindow"
|
||||
|
||||
__settings = Gtk.Settings.get_default()
|
||||
|
||||
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 = [
|
||||
"/com/github/GradienceTeam/Gradience/images/images/gradience-welcome.svg",
|
||||
"/com/github/GradienceTeam/Gradience/images/images/gradience-welcome-night.svg",
|
||||
]
|
||||
|
||||
def __init__(self, window, **kwargs) -> None:
|
||||
super().__init__(**kwargs)
|
||||
self.set_transient_for(window)
|
||||
|
||||
# common variables and references
|
||||
self.window = window
|
||||
|
||||
# connect signals
|
||||
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("notify::gtk-application-prefer-dark-theme", self.__theme_changed)
|
||||
|
||||
self.btn_close.set_sensitive(False)
|
||||
|
||||
if self.__settings.get_property("gtk-application-prefer-dark-theme"):
|
||||
self.img_welcome.set_from_resource(self.images[1])
|
||||
|
||||
self.__page_changed()
|
||||
|
||||
def __theme_changed(self, settings, key):
|
||||
self.img_welcome.set_from_resource(self.images[settings.get_property("gtk-application-prefer-dark-theme")])
|
||||
|
||||
def __get_page(self, index):
|
||||
return self.carousel_pages[index]
|
||||
|
||||
def __page_changed(self, widget=False, index=0, *_args):
|
||||
"""
|
||||
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.
|
||||
"""
|
||||
page = self.__get_page(index)
|
||||
|
||||
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
|
||||
def __quit(widget=False):
|
||||
quit()
|
||||
self.window.present()
|
||||
|
||||
def __install_runner(self, widget):
|
||||
def set_completed(result, error=False):
|
||||
self.label_skip.set_visible(False)
|
||||
self.btn_close.set_sensitive(True)
|
||||
self.__next_page()
|
||||
|
||||
self.__installing = True
|
||||
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)
|
||||
|
||||
#RunAsync(self.pulse)
|
||||
#RunAsync(
|
||||
# callback=set_completed,
|
||||
# install_latest=True,
|
||||
# first_run=True
|
||||
#)
|
||||
|
||||
print("install")
|
||||
|
||||
self.btn_next.set_visible(True)
|
||||
|
||||
def __previous_page(self, widget=False):
|
||||
index = int(self.carousel.get_position())
|
||||
previous_page = self.carousel.get_nth_page(index - 1)
|
||||
self.carousel.scroll_to(previous_page, True)
|
||||
|
||||
def __next_page(self, widget=False):
|
||||
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()
|
||||
|
||||
def __close_window(self, widget):
|
||||
self.destroy()
|
||||
self.win.present()
|
Loading…
Reference in a new issue