diff --git a/.gitignore b/.gitignore
index 7d2394a5..388a9457 100644
--- a/.gitignore
+++ b/.gitignore
@@ -431,5 +431,5 @@ $RECYCLE.BIN/
# The flatpak pip generator (needed for GH-Actions)
flatpak-pip-generator
-# Don't include constants.py in VCS since that's a generated file
-gradience/constants.py
+# Don't include constants.py in VCS since that's a generated file
+gradience/backend/constants.py
diff --git a/gradience/Structure.md b/gradience/Structure.md
deleted file mode 100644
index 675d6159..00000000
--- a/gradience/Structure.md
+++ /dev/null
@@ -1,9 +0,0 @@
-## Source code structure
-
-```
-gradience/ - main source code folder, contains majority of Python code
-|
-|- ui/ - contains logic code for Gradience widgets (you can find .ui files for widgets in data/ui folder)
-|
-|- utils/ - contains helpers for the rest of the codebase
-```
diff --git a/gradience/__init__.py b/gradience/__init__.py
index 2f4793b2..e69de29b 100644
--- a/gradience/__init__.py
+++ b/gradience/__init__.py
@@ -1,17 +0,0 @@
-# __init__.py
-#
-# Change the look of Adwaita, with ease
-# Copyright (C) 2022 Gradience Team
-#
-# 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 .
diff --git a/gradience/backend/__init__.py b/gradience/backend/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/gradience/constants.py.in b/gradience/backend/constants.py.in
similarity index 100%
rename from gradience/constants.py.in
rename to gradience/backend/constants.py.in
diff --git a/gradience/utils/css.py b/gradience/backend/css_parser.py
similarity index 95%
rename from gradience/utils/css.py
rename to gradience/backend/css_parser.py
index 4ac0c994..6d2ae0e4 100644
--- a/gradience/utils/css.py
+++ b/gradience/backend/css_parser.py
@@ -1,4 +1,4 @@
-# css.py
+# css_parser.py
#
# Change the look of Adwaita, with ease
# Copyright (C) 2022 Gradience Team
@@ -20,7 +20,7 @@ import re
# Adwaita named palette colors dict
-COLORS = [
+adw_colors = [
"blue_",
"green_",
"yellow_",
@@ -41,7 +41,7 @@ def parse_css(path):
variables = {}
palette = {}
- for color in COLORS:
+ for color in adw_colors:
palette[color] = {}
with open(path, "r", encoding="utf-8") as sheet:
@@ -51,7 +51,7 @@ def parse_css(path):
if cdefine_match != None: # If @define-color variable declarations were found
palette_part = cdefine_match.__getitem__(1) # Get the second item of the re.Match object
name, color = palette_part.split(" ", 1)[1].split(" ", 1)
- for color_name in COLORS:
+ for color_name in adw_colors:
if name.startswith(color_name): # Palette colors
palette[name[:-1]][name[-1:]] = color[:-1]
break
diff --git a/gradience/utils/flatpak_overrides.py b/gradience/backend/flatpak_overrides.py
similarity index 99%
rename from gradience/utils/flatpak_overrides.py
rename to gradience/backend/flatpak_overrides.py
index 4be69463..1f58d012 100644
--- a/gradience/utils/flatpak_overrides.py
+++ b/gradience/backend/flatpak_overrides.py
@@ -20,7 +20,7 @@ import os
from gi.repository import GLib, Gio, Adw
-from gradience.utils.utils import buglog
+from gradience.backend.utils.common import buglog
""" Custom exception class """
diff --git a/gradience/backend/meson.build b/gradience/backend/meson.build
new file mode 100644
index 00000000..bedc15f1
--- /dev/null
+++ b/gradience/backend/meson.build
@@ -0,0 +1,31 @@
+backenddir = 'gradience/backend'
+
+configure_file(
+ input: 'constants.py.in',
+ output: 'constants.py',
+ configuration: configuration_data({
+ 'APP_ID': APPLICATION_ID,
+ 'RELEASE_VER': meson.project_version(),
+ 'VERSION': meson.project_version() + VERSION_SUFFIX,
+ 'BUILD_TYPE': get_option('buildtype'),
+ 'PROJECT_URL': PROJECT_URL,
+ 'BUGTRACKER_URL': BUGTRACKER_URL,
+ 'HELP_URL': HELP_URL,
+ 'TRANSLATE_URL': TRANSLATE_URL,
+ 'PKGDATA_DIR': PKGDATA_DIR,
+ 'LOCALE_DIR': conf.get('LOCALE_DIR'),
+ }),
+ install: true,
+ install_dir: PY_INSTALLDIR.get_install_dir() / backenddir,
+)
+
+subdir('models')
+subdir('utils')
+
+gradience_sources = [
+ '__init__.py',
+ 'css_parser.py',
+ 'flatpak_overrides.py',
+ 'preset_downloader.py'
+]
+PY_INSTALLDIR.install_sources(gradience_sources, subdir: backenddir)
diff --git a/gradience/backend/models/__init__.py b/gradience/backend/models/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/gradience/backend/models/meson.build b/gradience/backend/models/meson.build
new file mode 100644
index 00000000..e64a49db
--- /dev/null
+++ b/gradience/backend/models/meson.build
@@ -0,0 +1,8 @@
+modelsdir = 'gradience/backend/models'
+
+gradience_sources = [
+ '__init__.py',
+ 'preset.py',
+ 'repo.py'
+]
+PY_INSTALLDIR.install_sources(gradience_sources, subdir: modelsdir)
diff --git a/gradience/utils/preset.py b/gradience/backend/models/preset.py
similarity index 97%
rename from gradience/utils/preset.py
rename to gradience/backend/models/preset.py
index 6f99a087..a6faf701 100644
--- a/gradience/utils/preset.py
+++ b/gradience/backend/models/preset.py
@@ -19,8 +19,8 @@
import json
import os
-from gradience.settings_schema import settings_schema
-from gradience.utils.utils import buglog, to_slug_case
+from gradience.frontend.settings_schema import settings_schema
+from gradience.backend.utils.common import buglog, to_slug_case
presets_dir = os.path.join(
diff --git a/gradience/utils/repo.py b/gradience/backend/models/repo.py
similarity index 90%
rename from gradience/utils/repo.py
rename to gradience/backend/models/repo.py
index b3ed9cc4..b6d9bf4b 100644
--- a/gradience/utils/repo.py
+++ b/gradience/backend/models/repo.py
@@ -16,10 +16,11 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-from gradience.utils.utils import to_slug_case
-from gradience.utils.preset import Preset, presets_dir
import os
+from gradience.backend.utils.common import to_slug_case
+from gradience.backend.models.preset import Preset, presets_dir
+
class Repo:
presets = {}
diff --git a/gradience/utils/custom_presets.py b/gradience/backend/preset_downloader.py
similarity index 95%
rename from gradience/utils/custom_presets.py
rename to gradience/backend/preset_downloader.py
index 18649f8b..290b2f60 100644
--- a/gradience/utils/custom_presets.py
+++ b/gradience/backend/preset_downloader.py
@@ -1,4 +1,4 @@
-# custom_presets.py
+# preset_downloader.py
#
# Change the look of Adwaita, with ease
# Copyright (C) 2022 Gradience Team
@@ -21,8 +21,8 @@ import json
from gi.repository import GLib, Soup
-from gradience.utils.preset import presets_dir
-from gradience.utils.utils import to_slug_case, buglog
+from gradience.backend.models.preset import presets_dir
+from gradience.backend.utils.common import to_slug_case, buglog
# Open Soup3 session
diff --git a/gradience/backend/struct.md b/gradience/backend/struct.md
new file mode 100644
index 00000000..fcd9f59b
--- /dev/null
+++ b/gradience/backend/struct.md
@@ -0,0 +1,4 @@
+## `backend/` directory structure:
+
+- `models/` - objects containing various types of data, with logic to manipulate them
+- `utils/` - general purpose utility modules
diff --git a/gradience/backend/utils/__init__.py b/gradience/backend/utils/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/gradience/utils/utils.py b/gradience/backend/utils/common.py
similarity index 96%
rename from gradience/utils/utils.py
rename to gradience/backend/utils/common.py
index d304d21b..41d2ca96 100644
--- a/gradience/utils/utils.py
+++ b/gradience/backend/utils/common.py
@@ -1,4 +1,4 @@
-# utils.py
+# common.py
#
# Change the look of Adwaita, with ease
# Copyright (C) 2022 Gradience Team
@@ -23,7 +23,7 @@ import os
from subprocess import run
from anyascii import anyascii
-from gradience.constants import build_type
+from gradience.backend.constants import build_type
if build_type == "debug":
diff --git a/gradience/backend/utils/meson.build b/gradience/backend/utils/meson.build
new file mode 100644
index 00000000..588667a5
--- /dev/null
+++ b/gradience/backend/utils/meson.build
@@ -0,0 +1,7 @@
+utilsdir = 'gradience/backend/utils'
+
+gradience_sources = [
+ '__init__.py',
+ 'common.py'
+]
+PY_INSTALLDIR.install_sources(gradience_sources, subdir: utilsdir)
diff --git a/gradience/frontend/__init__.py b/gradience/frontend/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/gradience/frontend/dialogs/__init__.py b/gradience/frontend/dialogs/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/gradience/ui/app_type_dialog.py b/gradience/frontend/dialogs/app_type_dialog.py
similarity index 97%
rename from gradience/ui/app_type_dialog.py
rename to gradience/frontend/dialogs/app_type_dialog.py
index 9dd9e6a4..8e5d44d2 100644
--- a/gradience/ui/app_type_dialog.py
+++ b/gradience/frontend/dialogs/app_type_dialog.py
@@ -18,7 +18,7 @@
from gi.repository import Gtk, Adw
-from gradience.constants import rootdir
+from gradience.backend.constants import rootdir
@Gtk.Template(resource_path=f"{rootdir}/ui/app_type_dialog.ui")
diff --git a/gradience/frontend/dialogs/meson.build b/gradience/frontend/dialogs/meson.build
new file mode 100644
index 00000000..824213f0
--- /dev/null
+++ b/gradience/frontend/dialogs/meson.build
@@ -0,0 +1,8 @@
+dialogsdir = 'gradience/frontend/dialogs'
+
+gradience_sources = [
+ '__init__.py',
+ 'app_type_dialog.py',
+ 'no_plugin_window.py'
+]
+PY_INSTALLDIR.install_sources(gradience_sources, subdir: dialogsdir)
diff --git a/gradience/ui/no_plugin_window.py b/gradience/frontend/dialogs/no_plugin_window.py
similarity index 95%
rename from gradience/ui/no_plugin_window.py
rename to gradience/frontend/dialogs/no_plugin_window.py
index bf47b0ca..fd89a077 100644
--- a/gradience/ui/no_plugin_window.py
+++ b/gradience/frontend/dialogs/no_plugin_window.py
@@ -18,7 +18,7 @@
from gi.repository import Gtk, Adw
-from gradience.constants import rootdir
+from gradience.backend.constants import rootdir
@Gtk.Template(resource_path=f"{rootdir}/ui/no_plugin_window.ui")
diff --git a/gradience/gradience.in b/gradience/frontend/gradience.in
similarity index 91%
rename from gradience/gradience.in
rename to gradience/frontend/gradience.in
index 7bc7ec96..19439cae 100755
--- a/gradience/gradience.in
+++ b/gradience/frontend/gradience.in
@@ -35,8 +35,8 @@ if is_local:
os.environ["XDG_DATA_DIRS"] = '@SCHEMAS_DIR@:' + os.environ.get("XDG_DATA_DIRS", "")
shutil.copyfile(
- os.path.join('@BUILD_DIR@', "gradience", "constants.py"),
- os.path.join('@SOURCE_DIR@', "gradience", "constants.py")
+ os.path.join('@BUILD_DIR@', "gradience/backend", "constants.py"),
+ os.path.join('@SOURCE_DIR@', "gradience/backend", "constants.py")
)
pkgdatadir = '@PKGDATA_DIR@'
@@ -67,5 +67,5 @@ if __name__ == '__main__':
sys.path.insert(1, "/usr/local/lib/python3.10/site-packages")
- from gradience import main
+ from gradience.frontend import main
sys.exit(main.main())
diff --git a/gradience/main.py b/gradience/frontend/main.py
similarity index 98%
rename from gradience/main.py
rename to gradience/frontend/main.py
index d3458be6..54e0b63a 100644
--- a/gradience/main.py
+++ b/gradience/frontend/main.py
@@ -23,29 +23,23 @@ import threading
from pathlib import Path
from material_color_utilities_python import *
-
from gi.repository import Gtk, Gdk, Gio, Adw, GLib, Xdp, XdpGtk4
-from gradience.ui.window import GradienceMainWindow
-from gradience.ui.welcome_window import GradienceWelcomeWindow
-from gradience.ui.app_type_dialog import GradienceAppTypeDialog
-from gradience.ui.custom_css_group import GradienceCustomCSSGroup
-from gradience.ui.presets_manager_window import GradiencePresetWindow
-from gradience.ui.preferences_window import GradiencePreferencesWindow
-from gradience.utils.css import parse_css
-from gradience.utils.utils import to_slug_case, buglog, run_command
-from gradience.utils.preset import Preset, presets_dir
-from gradience.settings_schema import settings_schema
-from gradience.plugins_list import GradiencePluginsList
-from gradience.constants import (
- rootdir,
- app_id,
- rel_ver,
- version,
- bugtracker_url,
- help_url,
- project_url,
-)
+from gradience.backend.css_parser import parse_css
+from gradience.backend.models.preset import Preset, presets_dir
+from gradience.backend.utils.common import to_slug_case, buglog, run_command
+from gradience.backend.constants import *
+
+from gradience.frontend.views.main_window import GradienceMainWindow
+from gradience.frontend.views.plugins_list import GradiencePluginsList
+from gradience.frontend.views.welcome_window import GradienceWelcomeWindow
+from gradience.frontend.views.presets_manager_window import GradiencePresetWindow
+from gradience.frontend.views.preferences_window import GradiencePreferencesWindow
+
+from gradience.frontend.dialogs.app_type_dialog import GradienceAppTypeDialog
+from gradience.frontend.widgets.custom_css_group import GradienceCustomCSSGroup
+
+from gradience.frontend.settings_schema import settings_schema
class GradienceApplication(Adw.Application):
diff --git a/gradience/frontend/meson.build b/gradience/frontend/meson.build
new file mode 100644
index 00000000..89be3ed8
--- /dev/null
+++ b/gradience/frontend/meson.build
@@ -0,0 +1,26 @@
+frontenddir = 'gradience/frontend'
+
+configure_file(
+ input: 'gradience.in',
+ output: 'gradience',
+ configuration: conf,
+ install_dir: get_option('bindir')
+)
+
+configure_file(
+ input: 'gradience.in',
+ output: 'local-gradience',
+ configuration: local_conf
+)
+
+subdir('dialogs')
+subdir('utils')
+subdir('views')
+subdir('widgets')
+
+gradience_sources = [
+ '__init__.py',
+ 'main.py',
+ 'settings_schema.py'
+]
+PY_INSTALLDIR.install_sources(gradience_sources, subdir: frontenddir)
diff --git a/gradience/settings_schema.py b/gradience/frontend/settings_schema.py
similarity index 100%
rename from gradience/settings_schema.py
rename to gradience/frontend/settings_schema.py
diff --git a/gradience/frontend/struct.md b/gradience/frontend/struct.md
new file mode 100644
index 00000000..97dee56b
--- /dev/null
+++ b/gradience/frontend/struct.md
@@ -0,0 +1,6 @@
+## `frontend/` directory structure:
+
+- `dialogs/` - message boxes and simple popup windows
+- `utils/` - general purpose utility modules for UI related stuff
+- `views/` - more extensive widgets (eg. widget groups, lists) and windows
+- `widgets/` - general purpose graphical widgets
diff --git a/gradience/frontend/utils/__init__.py b/gradience/frontend/utils/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/gradience/frontend/utils/meson.build b/gradience/frontend/utils/meson.build
new file mode 100644
index 00000000..fa585442
--- /dev/null
+++ b/gradience/frontend/utils/meson.build
@@ -0,0 +1,7 @@
+utilsdir = 'gradience/frontend/utils'
+
+gradience_sources = [
+ '__init__.py',
+ 'run_async.py'
+]
+PY_INSTALLDIR.install_sources(gradience_sources, subdir: utilsdir)
diff --git a/gradience/utils/run_async.py b/gradience/frontend/utils/run_async.py
similarity index 97%
rename from gradience/utils/run_async.py
rename to gradience/frontend/utils/run_async.py
index 18737b23..5d6e46a3 100644
--- a/gradience/utils/run_async.py
+++ b/gradience/frontend/utils/run_async.py
@@ -22,7 +22,7 @@ import traceback
from gi.repository import GLib
-from gradience.utils.utils import buglog
+from gradience.backend.utils.common import buglog
class RunAsync(threading.Thread):
diff --git a/gradience/frontend/views/__init__.py b/gradience/frontend/views/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/gradience/ui/window.py b/gradience/frontend/views/main_window.py
similarity index 96%
rename from gradience/ui/window.py
rename to gradience/frontend/views/main_window.py
index b692b752..d3c99c76 100644
--- a/gradience/ui/window.py
+++ b/gradience/frontend/views/main_window.py
@@ -1,4 +1,4 @@
-# window.py
+# main_window.py
#
# Change the look of Adwaita, with ease
# Copyright (C) 2022 Gradience Team
@@ -18,18 +18,18 @@
import os
-from gi.repository import Gtk, Adw, Gio
-
from svglib.svglib import svg2rlg
from reportlab.graphics import renderPM
from material_color_utilities_python import *
+from gi.repository import Gtk, Adw, Gio
-from gradience.ui.error_list_row import GradienceErrorListRow
-from gradience.ui.palette_shades import GradiencePaletteShades
-from gradience.ui.option_row import GradienceOptionRow
-from gradience.utils.utils import buglog
-from gradience.settings_schema import settings_schema
-from gradience.constants import rootdir, app_id, build_type
+from gradience.backend.utils.common import buglog
+from gradience.backend.constants import rootdir, app_id, build_type
+
+from gradience.frontend.widgets.error_list_row import GradienceErrorListRow
+from gradience.frontend.widgets.palette_shades import GradiencePaletteShades
+from gradience.frontend.widgets.option_row import GradienceOptionRow
+from gradience.frontend.settings_schema import settings_schema
@Gtk.Template(resource_path=f"{rootdir}/ui/window.ui")
@@ -118,7 +118,7 @@ class GradienceMainWindow(Adw.ApplicationWindow):
image_basename = self.monet_image_file.get_basename()
self.monet_file_chooser_button.set_label(image_basename)
self.monet_file_chooser_button.set_tooltip_text(image_basename)
-
+
self.monet_file_chooser_dialog.hide()
if response == Gtk.ResponseType.ACCEPT:
diff --git a/gradience/frontend/views/meson.build b/gradience/frontend/views/meson.build
new file mode 100644
index 00000000..965b60bb
--- /dev/null
+++ b/gradience/frontend/views/meson.build
@@ -0,0 +1,12 @@
+viewsdir = 'gradience/frontend/views'
+
+gradience_sources = [
+ '__init__.py',
+ 'main_window.py',
+ 'plugins_list.py',
+ 'preferences_window.py',
+ 'presets_manager_window.py',
+ 'share_window.py',
+ 'welcome_window.py'
+]
+PY_INSTALLDIR.install_sources(gradience_sources, subdir: viewsdir)
diff --git a/gradience/plugins_list.py b/gradience/frontend/views/plugins_list.py
similarity index 96%
rename from gradience/plugins_list.py
rename to gradience/frontend/views/plugins_list.py
index 47e8d6ff..23fdc539 100644
--- a/gradience/plugins_list.py
+++ b/gradience/frontend/views/plugins_list.py
@@ -21,9 +21,9 @@ import os
from gi.repository import Adw, GLib
from yapsy.PluginManager import PluginManager
-from gradience.ui.plugin_row import GradiencePluginRow
-from gradience.utils.utils import buglog
-from gradience.constants import pkgdatadir
+from gradience.frontend.widgets.plugin_row import GradiencePluginRow
+from gradience.backend.utils.common import buglog
+from gradience.backend.constants import pkgdatadir
USER_PLUGIN_DIR = os.path.join(
diff --git a/gradience/ui/preferences_window.py b/gradience/frontend/views/preferences_window.py
similarity index 95%
rename from gradience/ui/preferences_window.py
rename to gradience/frontend/views/preferences_window.py
index a55ab9e5..1f3c68cb 100644
--- a/gradience/ui/preferences_window.py
+++ b/gradience/frontend/views/preferences_window.py
@@ -18,16 +18,16 @@
from gi.repository import Gtk, Adw
-from gradience.constants import rootdir
-from gradience.utils.flatpak_overrides import (
+from gradience.backend.constants import rootdir
+from gradience.backend.flatpak_overrides import (
create_gtk_user_override,
remove_gtk_user_override,
)
-from gradience.utils.flatpak_overrides import (
+from gradience.backend.flatpak_overrides import (
create_gtk_global_override,
remove_gtk_global_override,
)
-from gradience.utils.utils import buglog
+from gradience.backend.utils.common import buglog
@Gtk.Template(resource_path=f"{rootdir}/ui/preferences_window.ui")
diff --git a/gradience/ui/presets_manager_window.py b/gradience/frontend/views/presets_manager_window.py
similarity index 96%
rename from gradience/ui/presets_manager_window.py
rename to gradience/frontend/views/presets_manager_window.py
index 1df2f946..478e2d5b 100644
--- a/gradience/ui/presets_manager_window.py
+++ b/gradience/frontend/views/presets_manager_window.py
@@ -22,17 +22,18 @@ import json
from collections import OrderedDict
from pathlib import Path
-
from gi.repository import Gtk, Adw, GLib
-from gradience.ui.preset_row import GradiencePresetRow
-from gradience.ui.builtin_preset_row import GradienceBuiltinPresetRow
-from gradience.ui.explore_preset_row import GradienceExplorePresetRow
-from gradience.ui.repo_row import GradienceRepoRow
-from gradience.utils.custom_presets import fetch_presets
-from gradience.utils.preset import presets_dir
-from gradience.utils.utils import buglog
-from gradience.constants import rootdir
+from gradience.backend.preset_downloader import fetch_presets
+from gradience.backend.models.preset import presets_dir
+from gradience.backend.utils.common import buglog
+from gradience.backend.constants import rootdir
+
+from gradience.frontend.widgets.preset_row import GradiencePresetRow
+from gradience.frontend.widgets.builtin_preset_row import GradienceBuiltinPresetRow
+from gradience.frontend.widgets.explore_preset_row import GradienceExplorePresetRow
+from gradience.frontend.widgets.repo_row import GradienceRepoRow
+
@Gtk.Template(resource_path=f"{rootdir}/ui/presets_manager_window.ui")
class GradiencePresetWindow(Adw.Window):
diff --git a/gradience/ui/share_window.py b/gradience/frontend/views/share_window.py
similarity index 95%
rename from gradience/ui/share_window.py
rename to gradience/frontend/views/share_window.py
index 3240bc24..5266d16d 100644
--- a/gradience/ui/share_window.py
+++ b/gradience/frontend/views/share_window.py
@@ -21,10 +21,10 @@ import time
from gi.repository import Gtk, Adw, Gio
-from gradience.utils.run_async import RunAsync
-from gradience.utils.utils import buglog
-from gradience.utils.flatpak_overrides import create_gtk_user_override
-from gradience.constants import rootdir, app_id, rel_ver
+from gradience.frontend.utils.run_async import RunAsync
+from gradience.backend.utils.common import buglog
+from gradience.backend.flatpak_overrides import create_gtk_user_override
+from gradience.backend.constants import rootdir, app_id, rel_ver
@Gtk.Template(resource_path=f"{rootdir}/ui/share_window.ui")
diff --git a/gradience/ui/welcome_window.py b/gradience/frontend/views/welcome_window.py
similarity index 96%
rename from gradience/ui/welcome_window.py
rename to gradience/frontend/views/welcome_window.py
index 4ca55770..f904ca58 100644
--- a/gradience/ui/welcome_window.py
+++ b/gradience/frontend/views/welcome_window.py
@@ -21,10 +21,10 @@ import time
from gi.repository import Gtk, Adw, Gio
-from gradience.utils.run_async import RunAsync
-from gradience.utils.utils import buglog
-from gradience.utils.flatpak_overrides import create_gtk_user_override
-from gradience.constants import rootdir, app_id, rel_ver
+from gradience.frontend.utils.run_async import RunAsync
+from gradience.backend.utils.common import buglog
+from gradience.backend.flatpak_overrides import create_gtk_user_override
+from gradience.backend.constants import rootdir, app_id, rel_ver
@Gtk.Template(resource_path=f"{rootdir}/ui/welcome_window.ui")
diff --git a/gradience/frontend/widgets/__init__.py b/gradience/frontend/widgets/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/gradience/ui/builtin_preset_row.py b/gradience/frontend/widgets/builtin_preset_row.py
similarity index 93%
rename from gradience/ui/builtin_preset_row.py
rename to gradience/frontend/widgets/builtin_preset_row.py
index c433c2b8..2f2d3a81 100644
--- a/gradience/ui/builtin_preset_row.py
+++ b/gradience/frontend/widgets/builtin_preset_row.py
@@ -18,8 +18,8 @@
from gi.repository import Gtk, Adw
-from gradience.utils.utils import to_slug_case, buglog
-from gradience.constants import rootdir
+from gradience.backend.utils.common import to_slug_case, buglog
+from gradience.backend.constants import rootdir
@Gtk.Template(resource_path=f"{rootdir}/ui/builtin_preset_row.ui")
diff --git a/gradience/ui/custom_css_group.py b/gradience/frontend/widgets/custom_css_group.py
similarity index 95%
rename from gradience/ui/custom_css_group.py
rename to gradience/frontend/widgets/custom_css_group.py
index 4da23800..67fca605 100644
--- a/gradience/ui/custom_css_group.py
+++ b/gradience/frontend/widgets/custom_css_group.py
@@ -18,8 +18,8 @@
from gi.repository import Gtk, Adw
-from gradience.utils.utils import buglog
-from gradience.constants import rootdir
+from gradience.backend.utils.common import buglog
+from gradience.backend.constants import rootdir
@Gtk.Template(resource_path=f"{rootdir}/ui/custom_css_group.ui")
diff --git a/gradience/ui/error_list_row.py b/gradience/frontend/widgets/error_list_row.py
similarity index 96%
rename from gradience/ui/error_list_row.py
rename to gradience/frontend/widgets/error_list_row.py
index e0065f2c..18132bc0 100644
--- a/gradience/ui/error_list_row.py
+++ b/gradience/frontend/widgets/error_list_row.py
@@ -18,7 +18,7 @@
from gi.repository import Gtk
-from gradience.constants import rootdir
+from gradience.backend.constants import rootdir
@Gtk.Template(resource_path=f"{rootdir}/ui/error_list_row.ui")
diff --git a/gradience/ui/explore_preset_row.py b/gradience/frontend/widgets/explore_preset_row.py
similarity index 94%
rename from gradience/ui/explore_preset_row.py
rename to gradience/frontend/widgets/explore_preset_row.py
index 67f1376c..fe94643b 100644
--- a/gradience/ui/explore_preset_row.py
+++ b/gradience/frontend/widgets/explore_preset_row.py
@@ -20,9 +20,9 @@ import os
from gi.repository import Gtk, Adw
-from gradience.utils.utils import to_slug_case, buglog
-from gradience.utils.custom_presets import download_preset
-from gradience.constants import rootdir
+from gradience.backend.utils.common import to_slug_case, buglog
+from gradience.backend.preset_downloader import download_preset
+from gradience.backend.constants import rootdir
@Gtk.Template(resource_path=f"{rootdir}/ui/explore_preset_row.ui")
diff --git a/gradience/frontend/widgets/meson.build b/gradience/frontend/widgets/meson.build
new file mode 100644
index 00000000..e9604d40
--- /dev/null
+++ b/gradience/frontend/widgets/meson.build
@@ -0,0 +1,15 @@
+widgetsdir = 'gradience/frontend/widgets'
+
+gradience_sources = [
+ '__init__.py',
+ 'builtin_preset_row.py',
+ 'custom_css_group.py',
+ 'error_list_row.py',
+ 'explore_preset_row.py',
+ 'option_row.py',
+ 'palette_shades.py',
+ 'plugin_row.py',
+ 'preset_row.py',
+ 'repo_row.py'
+]
+PY_INSTALLDIR.install_sources(gradience_sources, subdir: widgetsdir)
diff --git a/gradience/ui/option_row.py b/gradience/frontend/widgets/option_row.py
similarity index 98%
rename from gradience/ui/option_row.py
rename to gradience/frontend/widgets/option_row.py
index 6a49e20c..8c173b6d 100644
--- a/gradience/ui/option_row.py
+++ b/gradience/frontend/widgets/option_row.py
@@ -18,7 +18,7 @@
from gi.repository import Gtk, Gdk, Adw
-from gradience.constants import rootdir
+from gradience.backend.constants import rootdir
@Gtk.Template(resource_path=f"{rootdir}/ui/option_row.ui")
diff --git a/gradience/ui/palette_shades.py b/gradience/frontend/widgets/palette_shades.py
similarity index 98%
rename from gradience/ui/palette_shades.py
rename to gradience/frontend/widgets/palette_shades.py
index ab4087e1..622a3fc4 100644
--- a/gradience/ui/palette_shades.py
+++ b/gradience/frontend/widgets/palette_shades.py
@@ -18,7 +18,7 @@
from gi.repository import Gtk, Gdk, Adw
-from gradience.constants import rootdir
+from gradience.backend.constants import rootdir
@Gtk.Template(resource_path=f"{rootdir}/ui/palette_shades.ui")
diff --git a/gradience/ui/plugin_row.py b/gradience/frontend/widgets/plugin_row.py
similarity index 94%
rename from gradience/ui/plugin_row.py
rename to gradience/frontend/widgets/plugin_row.py
index 4e00c260..9d615653 100644
--- a/gradience/ui/plugin_row.py
+++ b/gradience/frontend/widgets/plugin_row.py
@@ -21,10 +21,9 @@ import os
from pathlib import Path
from gi.repository import Gtk, Adw
-from gradience.ui.no_plugin_window import GradienceNoPluginPrefWindow
-from gradience.utils.utils import buglog
-from gradience.constants import rootdir
-
+from gradience.frontend.dialogs.no_plugin_window import GradienceNoPluginPrefWindow
+from gradience.backend.utils.common import buglog
+from gradience.backend.constants import rootdir
USER_PLUGIN_DIR = Path(
diff --git a/gradience/ui/preset_row.py b/gradience/frontend/widgets/preset_row.py
similarity index 96%
rename from gradience/ui/preset_row.py
rename to gradience/frontend/widgets/preset_row.py
index a57ae75d..18c36576 100644
--- a/gradience/ui/preset_row.py
+++ b/gradience/frontend/widgets/preset_row.py
@@ -20,10 +20,10 @@ import os
from gi.repository import Gtk, Adw, Xdp, XdpGtk4
-from gradience.ui.share_window import GradienceShareWindow
-from gradience.utils.utils import to_slug_case, buglog
-from gradience.utils.preset import Preset, presets_dir
-from gradience.constants import rootdir
+from gradience.frontend.views.share_window import GradienceShareWindow
+from gradience.backend.utils.common import to_slug_case, buglog
+from gradience.backend.models.preset import Preset, presets_dir
+from gradience.backend.constants import rootdir
@Gtk.Template(resource_path=f"{rootdir}/ui/preset_row.ui")
diff --git a/gradience/ui/repo_row.py b/gradience/frontend/widgets/repo_row.py
similarity index 94%
rename from gradience/ui/repo_row.py
rename to gradience/frontend/widgets/repo_row.py
index 3106ccfe..b2a6d138 100644
--- a/gradience/ui/repo_row.py
+++ b/gradience/frontend/widgets/repo_row.py
@@ -20,8 +20,8 @@ import os
from gi.repository import Gtk, Adw
-from gradience.constants import rootdir
-from gradience.utils.utils import to_slug_case
+from gradience.backend.constants import rootdir
+from gradience.backend.utils.common import to_slug_case
@Gtk.Template(resource_path=f"{rootdir}/ui/repo_row.ui")
diff --git a/gradience/meson.build b/gradience/meson.build
index 6f1293c4..2fdddca6 100644
--- a/gradience/meson.build
+++ b/gradience/meson.build
@@ -1,80 +1,15 @@
-configure_file(
- input: 'gradience.in',
- output: 'gradience',
- configuration: conf,
- install_dir: get_option('bindir')
-)
+moduledir = 'gradience'
-configure_file(
- input: 'gradience.in',
- output: 'local-gradience',
- configuration: local_conf
-)
+subdir('backend')
+subdir('frontend')
-configure_file(
- input: 'constants.py.in',
- output: 'constants.py',
- configuration: configuration_data({
- 'APP_ID': APPLICATION_ID,
- 'RELEASE_VER': meson.project_version(),
- 'VERSION': meson.project_version() + VERSION_SUFFIX,
- 'BUILD_TYPE': get_option('buildtype'),
- 'PROJECT_URL': PROJECT_URL,
- 'BUGTRACKER_URL': BUGTRACKER_URL,
- 'HELP_URL': HELP_URL,
- 'TRANSLATE_URL': TRANSLATE_URL,
- 'PKGDATA_DIR': PKGDATA_DIR,
- 'LOCALE_DIR': conf.get('LOCALE_DIR'),
- }),
- install: true,
- install_dir: PY_INSTALLDIR.get_install_dir() / 'gradience',
-)
-
-launcher = join_paths(meson.project_build_root(), 'gradience', 'local-' + meson.project_name())
+launcher = join_paths(meson.project_build_root(), moduledir, 'frontend', 'local-' + meson.project_name())
run_target('run',
command: [launcher]
)
-# Install sources
gradience_sources = [
- '__init__.py',
- 'settings_schema.py',
- 'main.py',
- 'plugins_list.py',
+ '__init__.py'
]
-PY_INSTALLDIR.install_sources(gradience_sources, subdir: 'gradience')
-
-# Install utility modules
-gradience_utils = [
- 'utils/__init__.py',
- 'utils/custom_presets.py',
- 'utils/flatpak_overrides.py',
- 'utils/utils.py',
- 'utils/run_async.py',
- 'utils/css.py',
- 'utils/preset.py',
- 'utils/repo.py',
-]
-PY_INSTALLDIR.install_sources(gradience_utils, subdir: 'gradience/utils')
-
-# Install ui Python modules
-gradience_ui_modules = [
- 'ui/error_list_row.py',
- 'ui/palette_shades.py',
- 'ui/option_row.py',
- 'ui/window.py',
- 'ui/app_type_dialog.py',
- 'ui/custom_css_group.py',
- 'ui/presets_manager_window.py',
- 'ui/preferences_window.py',
- 'ui/plugin_row.py',
- 'ui/explore_preset_row.py',
- 'ui/builtin_preset_row.py',
- 'ui/preset_row.py',
- 'ui/welcome_window.py',
- 'ui/repo_row.py',
- 'ui/no_plugin_window.py',
- 'ui/share_window.py',
-]
-PY_INSTALLDIR.install_sources(gradience_ui_modules, subdir: 'gradience/ui')
+PY_INSTALLDIR.install_sources(gradience_sources, subdir: moduledir)
diff --git a/gradience/ui/__init__.py b/gradience/ui/__init__.py
deleted file mode 100644
index d755531e..00000000
--- a/gradience/ui/__init__.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# __init__.py
-#
-# Change the look of Adwaita, with ease
-# Copyright (C) 2022 Gradience Team
-#
-# 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 .
diff --git a/gradience/utils/__init__.py b/gradience/utils/__init__.py
deleted file mode 100644
index d755531e..00000000
--- a/gradience/utils/__init__.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# __init__.py
-#
-# Change the look of Adwaita, with ease
-# Copyright (C) 2022 Gradience Team
-#
-# 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 .
diff --git a/po/POTFILES b/po/POTFILES
index c5ca7cf5..c93ddaad 100644
--- a/po/POTFILES
+++ b/po/POTFILES
@@ -14,27 +14,25 @@ data/ui/presets_manager_window.blp
data/ui/share_window.blp
data/ui/welcome_window.blp
data/ui/window.blp
-gradience/utils/css.py
-gradience/utils/custom_presets.py
-gradience/utils/flatpak_overrides.py
-gradience/utils/preset.py
-gradience/utils/repo.py
-gradience/utils/run_async.py
-gradience/utils/utils.py
-gradience/ui/app_type_dialog.py
-gradience/ui/builtin_preset_row.py
-gradience/ui/custom_css_group.py
-gradience/ui/error_list_row.py
-gradience/ui/explore_preset_row.py
-gradience/ui/option_row.py
-gradience/ui/palette_shades.py
-gradience/ui/plugin_row.py
-gradience/ui/preferences_window.py
-gradience/ui/preset_row.py
-gradience/ui/presets_manager_window.py
-gradience/ui/repo_row.py
-gradience/ui/welcome_window.py
-gradience/ui/window.py
-gradience/main.py
-gradience/plugins_list.py
-gradience/settings_schema.py
+gradience/backend/preset_downloader.py
+gradience/backend/flatpak_overrides.py
+gradience/backend/models/preset.py
+gradience/backend/models/repo.py
+gradience/frontend/dialogs/app_type_dialog.py
+gradience/frontend/dialogs/no_plugin_window.py
+gradience/frontend/widgets/builtin_preset_row.py
+gradience/frontend/widgets/custom_css_group.py
+gradience/frontend/widgets/error_list_row.py
+gradience/frontend/widgets/explore_preset_row.py
+gradience/frontend/widgets/option_row.py
+gradience/frontend/widgets/palette_shades.py
+gradience/frontend/widgets/plugin_row.py
+gradience/frontend/views/preferences_window.py
+gradience/frontend/widgets/preset_row.py
+gradience/frontend/views/presets_manager_window.py
+gradience/frontend/widgets/repo_row.py
+gradience/frontend/views/welcome_window.py
+gradience/frontend/views/main_window.py
+gradience/frontend/main.py
+gradience/frontend/views/plugins_list.py
+gradience/frontend/settings_schema.py