Move themes management into the Theme class. Also add a splashscreen
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -8,3 +8,5 @@ pyinstaller_cmd.txt
|
|||||||
icons_imgs
|
icons_imgs
|
||||||
TestData
|
TestData
|
||||||
themes/.current_theme
|
themes/.current_theme
|
||||||
|
*.bat
|
||||||
|
*.sh
|
||||||
|
|||||||
14
constants.py
14
constants.py
@@ -9,22 +9,9 @@ class ChecksumWhat(Enum):
|
|||||||
FOLDER = auto()
|
FOLDER = auto()
|
||||||
DB = auto()
|
DB = auto()
|
||||||
|
|
||||||
class Theme(object):
|
|
||||||
FOLDER = "themes"
|
|
||||||
EXTENSION = ".qss"
|
|
||||||
ICONS_FOLDER = "icons"
|
|
||||||
DEFAULT = "1-system"
|
|
||||||
CURRENT = ".current_theme"
|
|
||||||
COLORS = "colors.txt"
|
|
||||||
COLOR_SEPARATOR = "="
|
|
||||||
DEFAULT_ACTIVE_COLOR = "#39eaff"
|
|
||||||
DEFAULT_INACTIVE_COLOR = "#9f9f9f"
|
|
||||||
|
|
||||||
class Messages(object):
|
class Messages(object):
|
||||||
NO_DB_AVAIL = "No database available.\nGo to Updates->Update database."
|
NO_DB_AVAIL = "No database available.\nGo to Updates->Update database."
|
||||||
NO_DB = "No database"
|
NO_DB = "No database"
|
||||||
THEME_NOT_FOUND = "Theme not found"
|
|
||||||
MISSING_THEME = "Missing theme in " + Theme.FOLDER + " folder."
|
|
||||||
NO_CONNECTION = "No internet connection"
|
NO_CONNECTION = "No internet connection"
|
||||||
NO_CONNECTION_MSG = "Unable to establish an internet connection."
|
NO_CONNECTION_MSG = "Unable to establish an internet connection."
|
||||||
BAD_DOWNLOAD = "Something went wrong"
|
BAD_DOWNLOAD = "Something went wrong"
|
||||||
@@ -70,6 +57,7 @@ class Database(object):
|
|||||||
Signal.INF_BAND,
|
Signal.INF_BAND,
|
||||||
Signal.SUP_BAND,
|
Signal.SUP_BAND,
|
||||||
Signal.CATEGORY_CODE,)
|
Signal.CATEGORY_CODE,)
|
||||||
|
|
||||||
ACF_DOCS = "https://aresvalley.com/documentation/"
|
ACF_DOCS = "https://aresvalley.com/documentation/"
|
||||||
SEARCH_LABEL_IMG = "search_icon.png"
|
SEARCH_LABEL_IMG = "search_icon.png"
|
||||||
VOLUME_LABEL_IMG = "volume.png"
|
VOLUME_LABEL_IMG = "volume.png"
|
||||||
|
|||||||
138
main.py
138
main.py
@@ -4,20 +4,20 @@ from glob import glob
|
|||||||
import webbrowser
|
import webbrowser
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
from time import sleep
|
||||||
|
|
||||||
from pandas import read_csv
|
from pandas import read_csv
|
||||||
from PyQt5.QtWidgets import (QMainWindow,
|
from PyQt5.QtWidgets import (QMainWindow,
|
||||||
QApplication,
|
QApplication,
|
||||||
QAction,
|
|
||||||
qApp,
|
qApp,
|
||||||
QDesktopWidget,
|
QDesktopWidget,
|
||||||
QListWidgetItem,
|
QListWidgetItem,
|
||||||
|
QSplashScreen,
|
||||||
QTreeView,
|
QTreeView,
|
||||||
QTreeWidgetItem,)
|
QTreeWidgetItem,)
|
||||||
from PyQt5.QtGui import QPixmap
|
from PyQt5.QtGui import QPixmap
|
||||||
from PyQt5 import uic
|
from PyQt5 import uic
|
||||||
from PyQt5.QtCore import (QFileInfo,
|
from PyQt5.QtCore import (QFileInfo,
|
||||||
QSize,
|
|
||||||
Qt,
|
Qt,
|
||||||
pyqtSlot,)
|
pyqtSlot,)
|
||||||
|
|
||||||
@@ -27,10 +27,10 @@ from double_text_button import DoubleTextButton
|
|||||||
from download_window import DownloadWindow
|
from download_window import DownloadWindow
|
||||||
|
|
||||||
import constants
|
import constants
|
||||||
|
from themes import Theme
|
||||||
|
|
||||||
from utilities import (uncheck_and_emit,
|
from utilities import (uncheck_and_emit,
|
||||||
throwable_message,
|
throwable_message,
|
||||||
is_valid_html_color,
|
|
||||||
connect_to,
|
connect_to,
|
||||||
filters_ok,
|
filters_ok,
|
||||||
is_undef_freq,
|
is_undef_freq,
|
||||||
@@ -54,8 +54,7 @@ class MyApp(QMainWindow, Ui_MainWindow):
|
|||||||
self.current_signal_name = ''
|
self.current_signal_name = ''
|
||||||
self.signal_names = []
|
self.signal_names = []
|
||||||
self.total_signals = 0
|
self.total_signals = 0
|
||||||
self.active_color = constants.Theme.DEFAULT_ACTIVE_COLOR
|
self.theme = Theme(self)
|
||||||
self.inactive_color = constants.Theme.DEFAULT_INACTIVE_COLOR
|
|
||||||
|
|
||||||
# Manage frequency filters.
|
# Manage frequency filters.
|
||||||
self.frequency_filters_btns = (
|
self.frequency_filters_btns = (
|
||||||
@@ -328,11 +327,6 @@ class MyApp(QMainWindow, Ui_MainWindow):
|
|||||||
fun_args = None
|
fun_args = None
|
||||||
)
|
)
|
||||||
|
|
||||||
# Find available themes.
|
|
||||||
self.default_images_folder = os.path.join(constants.Theme.FOLDER,
|
|
||||||
constants.Theme.DEFAULT,
|
|
||||||
constants.Theme.ICONS_FOLDER)
|
|
||||||
|
|
||||||
# ##########################################################################################
|
# ##########################################################################################
|
||||||
|
|
||||||
self.load_db()
|
self.load_db()
|
||||||
@@ -366,8 +360,7 @@ class MyApp(QMainWindow, Ui_MainWindow):
|
|||||||
BandLabel(self.ehf_left, self.ehf, self.ehf_right),
|
BandLabel(self.ehf_left, self.ehf, self.ehf_right),
|
||||||
]
|
]
|
||||||
|
|
||||||
self.find_themes()
|
self.theme.initialize()
|
||||||
self.set_theme()
|
|
||||||
|
|
||||||
self.show()
|
self.show()
|
||||||
|
|
||||||
@@ -392,119 +385,6 @@ class MyApp(QMainWindow, Ui_MainWindow):
|
|||||||
self.upper_freq_confidence,
|
self.upper_freq_confidence,
|
||||||
self.freq_range_lbl)
|
self.freq_range_lbl)
|
||||||
|
|
||||||
@pyqtSlot()
|
|
||||||
def show_theme(self, theme):
|
|
||||||
self.change_theme(theme)
|
|
||||||
self.display_specs(self.result_list.currentItem(), None)
|
|
||||||
self.refresh_range_labels()
|
|
||||||
self.audio_widget.refresh_btns_colors(self.active_color, self.inactive_color)
|
|
||||||
|
|
||||||
def find_themes(self):
|
|
||||||
themes = []
|
|
||||||
for theme_folder in os.listdir(constants.Theme.FOLDER):
|
|
||||||
relative_folder = os.path.join(constants.Theme.FOLDER, theme_folder)
|
|
||||||
if os.path.isdir(os.path.abspath(relative_folder)):
|
|
||||||
relative_folder = os.path.join(constants.Theme.FOLDER, theme_folder)
|
|
||||||
themes.append(relative_folder)
|
|
||||||
for theme in themes:
|
|
||||||
theme_name = '&' + ' '.join(
|
|
||||||
map(lambda s: s.capitalize(),
|
|
||||||
os.path.basename(theme).split('-')[1].split('_')
|
|
||||||
)
|
|
||||||
)
|
|
||||||
new_theme = QAction(theme_name, self)
|
|
||||||
self.menu_themes.addAction(new_theme)
|
|
||||||
|
|
||||||
new_theme.triggered.connect(partial(self.show_theme, theme))
|
|
||||||
|
|
||||||
@pyqtSlot()
|
|
||||||
def change_theme(self, theme_path):
|
|
||||||
try:
|
|
||||||
with open(os.path.join(
|
|
||||||
theme_path,
|
|
||||||
os.path.basename(theme_path).split('-')[1] + constants.Theme.EXTENSION)
|
|
||||||
) as stylesheet:
|
|
||||||
style = stylesheet.read()
|
|
||||||
self.setStyleSheet(style)
|
|
||||||
self.download_window.setStyleSheet(style)
|
|
||||||
except FileNotFoundError:
|
|
||||||
throwable_message(self, title = constants.Messages.THEME_NOT_FOUND,
|
|
||||||
text = constants.Messages.MISSING_THEME).show()
|
|
||||||
else:
|
|
||||||
icons_path = os.path.join(theme_path, constants.Theme.ICONS_FOLDER)
|
|
||||||
default_icons_path = os.path.join(constants.Theme.FOLDER, constants.Theme.DEFAULT, constants.Theme.ICONS_FOLDER)
|
|
||||||
|
|
||||||
if os.path.exists(os.path.join(icons_path, constants.NOT_SELECTED)) and \
|
|
||||||
os.path.exists(os.path.join(icons_path, constants.NOT_AVAILABLE)):
|
|
||||||
self.default_images_folder = icons_path
|
|
||||||
else:
|
|
||||||
self.default_images_folder = default_icons_path
|
|
||||||
|
|
||||||
path_to_search_label = os.path.join(icons_path, constants.SEARCH_LABEL_IMG)
|
|
||||||
default_search_label = os.path.join(default_icons_path, constants.SEARCH_LABEL_IMG)
|
|
||||||
|
|
||||||
if os.path.exists(path_to_search_label):
|
|
||||||
self.search_label.setPixmap(QPixmap(path_to_search_label))
|
|
||||||
self.modulation_search_label.setPixmap(QPixmap(path_to_search_label))
|
|
||||||
self.location_search_label.setPixmap(QPixmap(path_to_search_label))
|
|
||||||
else:
|
|
||||||
self.search_label.setPixmap(QPixmap(default_search_label))
|
|
||||||
self.modulation_search_label.setPixmap(QPixmap(default_search_label))
|
|
||||||
self.location_search_label.setPixmap(QPixmap(default_search_label))
|
|
||||||
|
|
||||||
self.search_label.setScaledContents(True)
|
|
||||||
self.modulation_search_label.setScaledContents(True)
|
|
||||||
self.location_search_label.setScaledContents(True)
|
|
||||||
|
|
||||||
path_to_volume_label = os.path.join(icons_path, constants.VOLUME_LABEL_IMG)
|
|
||||||
default_volume_label = os.path.join(default_icons_path, constants.VOLUME_LABEL_IMG)
|
|
||||||
|
|
||||||
if os.path.exists(path_to_volume_label):
|
|
||||||
self.volume_label.setPixmap(QPixmap(path_to_volume_label))
|
|
||||||
else:
|
|
||||||
self.volume_label.setPixmap(QPixmap(default_volume_label))
|
|
||||||
|
|
||||||
self.volume_label.setScaledContents(True)
|
|
||||||
|
|
||||||
path_to_colors = os.path.join(theme_path, constants.Theme.COLORS)
|
|
||||||
active_color_ok = False
|
|
||||||
inactive_color_ok = False
|
|
||||||
valid_format = False
|
|
||||||
valid_file = False
|
|
||||||
if os.path.exists(path_to_colors):
|
|
||||||
valid_file = True
|
|
||||||
with open(path_to_colors, "r") as colors_file:
|
|
||||||
for line in colors_file:
|
|
||||||
if constants.Theme.COLOR_SEPARATOR in line:
|
|
||||||
valid_format = True
|
|
||||||
quality, color = line.split(constants.Theme.COLOR_SEPARATOR)
|
|
||||||
color = color.rstrip()
|
|
||||||
if quality.lower() == constants.ACTIVE and is_valid_html_color(color):
|
|
||||||
self.active_color = color
|
|
||||||
active_color_ok = True
|
|
||||||
if quality.lower() == constants.INACTIVE and is_valid_html_color(color):
|
|
||||||
self.inactive_color = color
|
|
||||||
inactive_color_ok = True
|
|
||||||
|
|
||||||
if not all([valid_file, valid_format, active_color_ok, inactive_color_ok]):
|
|
||||||
self.active_color = constants.Theme.DEFAULT_ACTIVE_COLOR
|
|
||||||
self.inactive_color = constants.Theme.DEFAULT_INACTIVE_COLOR
|
|
||||||
|
|
||||||
try:
|
|
||||||
with open(os.path.join(constants.Theme.FOLDER,
|
|
||||||
constants.Theme.CURRENT), "w") as current_theme:
|
|
||||||
current_theme.write(theme_path)
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
|
|
||||||
def set_theme(self):
|
|
||||||
current_theme_file = os.path.join(constants.Theme.FOLDER, constants.Theme.CURRENT)
|
|
||||||
if os.path.exists(current_theme_file):
|
|
||||||
with open(current_theme_file) as current_theme:
|
|
||||||
theme = current_theme.read()
|
|
||||||
if theme != constants.Theme.DEFAULT:
|
|
||||||
self.show_theme(theme)
|
|
||||||
|
|
||||||
@pyqtSlot(QListWidgetItem)
|
@pyqtSlot(QListWidgetItem)
|
||||||
def remove_if_unselected_modulation(self, item):
|
def remove_if_unselected_modulation(self, item):
|
||||||
if not item.isSelected():
|
if not item.isSelected():
|
||||||
@@ -1079,8 +959,14 @@ class MyApp(QMainWindow, Ui_MainWindow):
|
|||||||
super().closeEvent(event)
|
super().closeEvent(event)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
my_app = QApplication(sys.argv)
|
my_app = QApplication(sys.argv)
|
||||||
|
img = QPixmap("splash.jpg")
|
||||||
|
img = img.scaled(600, 600, aspectRatioMode = Qt.KeepAspectRatio)
|
||||||
|
splash = QSplashScreen(img)
|
||||||
|
splash.show()
|
||||||
|
splash.showMessage("Loading database...")
|
||||||
|
sleep(2)
|
||||||
w = MyApp()
|
w = MyApp()
|
||||||
|
splash.finish(w)
|
||||||
sys.exit(my_app.exec_())
|
sys.exit(my_app.exec_())
|
||||||
BIN
splash.jpg
Normal file
BIN
splash.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 77 KiB |
166
themes.py
Normal file
166
themes.py
Normal file
@@ -0,0 +1,166 @@
|
|||||||
|
from functools import partial
|
||||||
|
import os
|
||||||
|
from PyQt5.QtWidgets import QAction
|
||||||
|
from PyQt5.QtCore import pyqtSlot
|
||||||
|
from PyQt5.QtGui import QPixmap
|
||||||
|
import constants
|
||||||
|
from utilities import (throwable_message,
|
||||||
|
is_valid_html_color,)
|
||||||
|
|
||||||
|
class ThemeConstants(object):
|
||||||
|
FOLDER = "themes"
|
||||||
|
EXTENSION = ".qss"
|
||||||
|
ICONS_FOLDER = "icons"
|
||||||
|
DEFAULT = "1-system"
|
||||||
|
CURRENT = ".current_theme"
|
||||||
|
COLORS = "colors.txt"
|
||||||
|
COLOR_SEPARATOR = "="
|
||||||
|
DEFAULT_ACTIVE_COLOR = "#39eaff"
|
||||||
|
DEFAULT_INACTIVE_COLOR = "#9f9f9f"
|
||||||
|
THEME_NOT_FOUND = "Theme not found"
|
||||||
|
MISSING_THEME = "Missing theme in " + FOLDER + " folder."
|
||||||
|
|
||||||
|
class Theme(object):
|
||||||
|
def __init__(self, parent):
|
||||||
|
self.__parent = parent
|
||||||
|
self.__parent.active_color = ThemeConstants.DEFAULT_ACTIVE_COLOR
|
||||||
|
self.__parent.inactive_color = ThemeConstants.DEFAULT_INACTIVE_COLOR
|
||||||
|
self.__theme_path = ThemeConstants.DEFAULT
|
||||||
|
self.__parent.default_images_folder = os.path.join(ThemeConstants.FOLDER,
|
||||||
|
ThemeConstants.DEFAULT,
|
||||||
|
ThemeConstants.ICONS_FOLDER)
|
||||||
|
self.__detect_themes()
|
||||||
|
|
||||||
|
def __refresh_range_labels(self):
|
||||||
|
self.__parent.set_acf_interval_label()
|
||||||
|
self.__parent.set_band_filter_label(self.__parent.activate_low_band_filter_btn,
|
||||||
|
self.__parent.lower_band_spinbox,
|
||||||
|
self.__parent.lower_band_filter_unit,
|
||||||
|
self.__parent.lower_band_confidence,
|
||||||
|
self.__parent.activate_up_band_filter_btn,
|
||||||
|
self.__parent.upper_band_spinbox,
|
||||||
|
self.__parent.upper_band_filter_unit,
|
||||||
|
self.__parent.upper_band_confidence,
|
||||||
|
self.__parent.band_range_lbl)
|
||||||
|
self.__parent.set_band_filter_label(self.__parent.activate_low_freq_filter_btn,
|
||||||
|
self.__parent.lower_freq_spinbox,
|
||||||
|
self.__parent.lower_freq_filter_unit,
|
||||||
|
self.__parent.lower_freq_confidence,
|
||||||
|
self.__parent.activate_up_freq_filter_btn,
|
||||||
|
self.__parent.upper_freq_spinbox,
|
||||||
|
self.__parent.upper_freq_filter_unit,
|
||||||
|
self.__parent.upper_freq_confidence,
|
||||||
|
self.__parent.freq_range_lbl)
|
||||||
|
|
||||||
|
@pyqtSlot()
|
||||||
|
def __apply(self, theme_path):
|
||||||
|
self.__theme_path = theme_path
|
||||||
|
self.__change()
|
||||||
|
self.__parent.display_specs(self.__parent.result_list.currentItem(), None)
|
||||||
|
self.__refresh_range_labels()
|
||||||
|
self.__parent.audio_widget.refresh_btns_colors(self.__parent.active_color, self.__parent.inactive_color)
|
||||||
|
|
||||||
|
def __detect_themes(self):
|
||||||
|
themes = []
|
||||||
|
for theme_folder in os.listdir(ThemeConstants.FOLDER):
|
||||||
|
relative_folder = os.path.join(ThemeConstants.FOLDER, theme_folder)
|
||||||
|
if os.path.isdir(os.path.abspath(relative_folder)):
|
||||||
|
relative_folder = os.path.join(ThemeConstants.FOLDER, theme_folder)
|
||||||
|
themes.append(relative_folder)
|
||||||
|
for theme_path in themes:
|
||||||
|
theme_name = '&' + ' '.join(
|
||||||
|
map(lambda s: s.capitalize(),
|
||||||
|
os.path.basename(theme_path).split('-')[1].split('_')
|
||||||
|
)
|
||||||
|
)
|
||||||
|
new_theme = QAction(theme_name, self.__parent)
|
||||||
|
self.__parent.menu_themes.addAction(new_theme)
|
||||||
|
new_theme.triggered.connect(partial(self.__apply, theme_path))
|
||||||
|
|
||||||
|
def __change(self):
|
||||||
|
try:
|
||||||
|
with open(os.path.join(
|
||||||
|
self.__theme_path,
|
||||||
|
os.path.basename(self.__theme_path).split('-')[1] + ThemeConstants.EXTENSION)) as stylesheet:
|
||||||
|
style = stylesheet.read()
|
||||||
|
self.__parent.setStyleSheet(style)
|
||||||
|
self.__parent.download_window.setStyleSheet(style)
|
||||||
|
except FileNotFoundError:
|
||||||
|
throwable_message(self.__parent, title = ThemeConstants.THEME_NOT_FOUND,
|
||||||
|
text = ThemeConstants.MISSING_THEME).show()
|
||||||
|
else:
|
||||||
|
icons_path = os.path.join(self.__theme_path, ThemeConstants.ICONS_FOLDER)
|
||||||
|
default_icons_path = os.path.join(ThemeConstants.FOLDER,
|
||||||
|
ThemeConstants.DEFAULT,
|
||||||
|
ThemeConstants.ICONS_FOLDER)
|
||||||
|
|
||||||
|
if os.path.exists(os.path.join(icons_path, constants.NOT_SELECTED)) and \
|
||||||
|
os.path.exists(os.path.join(icons_path, constants.NOT_AVAILABLE)):
|
||||||
|
self.__parent.default_images_folder = icons_path
|
||||||
|
else:
|
||||||
|
self.__parent.default_images_folder = default_icons_path
|
||||||
|
|
||||||
|
path_to_search_label = os.path.join(icons_path, constants.SEARCH_LABEL_IMG)
|
||||||
|
default_search_label = os.path.join(default_icons_path, constants.SEARCH_LABEL_IMG)
|
||||||
|
|
||||||
|
if os.path.exists(path_to_search_label):
|
||||||
|
self.__parent.search_label.setPixmap(QPixmap(path_to_search_label))
|
||||||
|
self.__parent.modulation_search_label.setPixmap(QPixmap(path_to_search_label))
|
||||||
|
self.__parent.location_search_label.setPixmap(QPixmap(path_to_search_label))
|
||||||
|
else:
|
||||||
|
self.__parent.search_label.setPixmap(QPixmap(default_search_label))
|
||||||
|
self.__parent.modulation_search_label.setPixmap(QPixmap(default_search_label))
|
||||||
|
self.__parent.location_search_label.setPixmap(QPixmap(default_search_label))
|
||||||
|
|
||||||
|
self.__parent.search_label.setScaledContents(True)
|
||||||
|
self.__parent.modulation_search_label.setScaledContents(True)
|
||||||
|
self.__parent.location_search_label.setScaledContents(True)
|
||||||
|
|
||||||
|
path_to_volume_label = os.path.join(icons_path, constants.VOLUME_LABEL_IMG)
|
||||||
|
default_volume_label = os.path.join(default_icons_path, constants.VOLUME_LABEL_IMG)
|
||||||
|
|
||||||
|
if os.path.exists(path_to_volume_label):
|
||||||
|
self.__parent.volume_label.setPixmap(QPixmap(path_to_volume_label))
|
||||||
|
else:
|
||||||
|
self.__parent.volume_label.setPixmap(QPixmap(default_volume_label))
|
||||||
|
|
||||||
|
self.__parent.volume_label.setScaledContents(True)
|
||||||
|
|
||||||
|
path_to_colors = os.path.join(self.__theme_path, ThemeConstants.COLORS)
|
||||||
|
active_color_ok = False
|
||||||
|
inactive_color_ok = False
|
||||||
|
valid_format = False
|
||||||
|
valid_file = False
|
||||||
|
if os.path.exists(path_to_colors):
|
||||||
|
valid_file = True
|
||||||
|
with open(path_to_colors, "r") as colors_file:
|
||||||
|
for line in colors_file:
|
||||||
|
if ThemeConstants.COLOR_SEPARATOR in line:
|
||||||
|
valid_format = True
|
||||||
|
quality, color = line.split(ThemeConstants.COLOR_SEPARATOR)
|
||||||
|
color = color.rstrip()
|
||||||
|
if quality.lower() == constants.ACTIVE and is_valid_html_color(color):
|
||||||
|
self.__parent.active_color = color
|
||||||
|
active_color_ok = True
|
||||||
|
if quality.lower() == constants.INACTIVE and is_valid_html_color(color):
|
||||||
|
self.__parent.inactive_color = color
|
||||||
|
inactive_color_ok = True
|
||||||
|
|
||||||
|
if not all([valid_file, valid_format, active_color_ok, inactive_color_ok]):
|
||||||
|
self.__parent.active_color = ThemeConstants.DEFAULT_ACTIVE_COLOR
|
||||||
|
self.__parent.inactive_color = ThemeConstants.DEFAULT_INACTIVE_COLOR
|
||||||
|
|
||||||
|
try:
|
||||||
|
with open(os.path.join(ThemeConstants.FOLDER,
|
||||||
|
ThemeConstants.CURRENT), "w") as current_theme:
|
||||||
|
current_theme.write(self.__theme_path)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
def initialize(self):
|
||||||
|
current_theme_file = os.path.join(ThemeConstants.FOLDER, ThemeConstants.CURRENT)
|
||||||
|
if os.path.exists(current_theme_file):
|
||||||
|
with open(current_theme_file) as current_theme_path:
|
||||||
|
theme_path = current_theme_path.read()
|
||||||
|
if theme_path != ThemeConstants.DEFAULT:
|
||||||
|
self.__apply(theme_path)
|
||||||
Reference in New Issue
Block a user