From 96d051adfef76e19de3c67d862e34f4c33d94cf7 Mon Sep 17 00:00:00 2001 From: cidoku Date: Sat, 21 Jun 2025 19:27:17 -0400 Subject: [PATCH] switch themes without restarting --- AO2XPbase/ao2xp_themes/dark/theme.py | 6 +++--- AO2XPbase/ao2xp_themes/default/theme.py | 3 +++ gameview.py | 14 ++++++++++---- options.py | 18 +++++++++++------- 4 files changed, 27 insertions(+), 14 deletions(-) diff --git a/AO2XPbase/ao2xp_themes/dark/theme.py b/AO2XPbase/ao2xp_themes/dark/theme.py index 867277b..20b715c 100644 --- a/AO2XPbase/ao2xp_themes/dark/theme.py +++ b/AO2XPbase/ao2xp_themes/dark/theme.py @@ -17,12 +17,10 @@ self.gametab_pair.setObjectName("gametab_pair") self.gametab_misc.setObjectName("gametab_misc") self.gametab_msgqueue.setObjectName("gametab_msgqueue") self.gametab_music.setObjectName("gametab_music") -self.areaitems.setObjectName("areaitems") self.gametab_players.setObjectName("gametab_player") -self.demoitems.setObjectName("demoitems") self.gamewindow.setStyleSheet(""" - QWidget#main, QSlider, QCheckBox, QLabel#musiclabel, QLabel#sfxlabel, QLabel#blipslabel, QLabel#notmutedlabel, QLabel#mutedlabel, QLabel#iniswapinfo, QLabel#pairoffset_l, QLabel#ypairoffset_l, QLabel#pair_order_l + QWidget#main, QSlider, QCheckBox, QLabel#musiclabel, QLabel#sfxlabel, QLabel#blipslabel, QLabel#notmutedlabel, QLabel#mutedlabel, QLabel#iniswapinfo, QLabel#pairoffset_l, QLabel#ypairoffset_l, QLabel#pair_order_l, QWidget#gametab_log, QWidget#gametab_evidence, QWidget#gametab_mute, QWidget#gametab_iniswap, QWidget#gametab_pair, QWidget#gametab_misc, QWidget#gametab_msgqueue, QWidget#gametab_music, QWidget#gametab_player { color: #eeeeee; background: #111111; @@ -35,6 +33,8 @@ self.gamewindow.setStyleSheet(""" """ ) +self.found_songitem_color = "#444444" + self.width = 820 self.height = 730 diff --git a/AO2XPbase/ao2xp_themes/default/theme.py b/AO2XPbase/ao2xp_themes/default/theme.py index f811e75..e36e230 100644 --- a/AO2XPbase/ao2xp_themes/default/theme.py +++ b/AO2XPbase/ao2xp_themes/default/theme.py @@ -1,3 +1,5 @@ +self.gamewindow.setStyleSheet("") + self.width = 820 self.height = 730 @@ -42,6 +44,7 @@ self.ooclogin.move(814 - (self.ooclogin.size().width()), self.oocinput.y() + sel self.musicareatabs.setGeometry(814 - 288, 468, 288, 258) self.musicitems.setGeometry(8, 8, 268, 184) self.musicsearch.setGeometry(8, self.musicitems.size().height() + 16, 268, self.musicsearch.sizeHint().height()) +self.found_songitem_color = "#80ff80" self.iclog.setGeometry(8, 8, 714 - 304 - 22, 212) diff --git a/gameview.py b/gameview.py index dd3d0a0..2d6d265 100644 --- a/gameview.py +++ b/gameview.py @@ -1225,6 +1225,8 @@ class GUI(QtGui.QWidget): self.musicsearch.setPlaceholderText("Search...") self.musicsearch.textChanged.connect(self.onMusicSearch) + self.found_songitem_color = "background: #80FF80;" + self.areaitems = QtGui.QListWidget() self.areaitems.itemDoubleClicked.connect(self.onAreaClick) @@ -1583,6 +1585,7 @@ class GUI(QtGui.QWidget): self.playsfx = 1 self.demo_recorder = None self.demo_playing = False + self.musiclist = {} self.slide_enabled = bool(get_option("General", "slide", False)) self.slide_available = False @@ -1621,13 +1624,16 @@ class GUI(QtGui.QWidget): # Finally, load the theme self.width = 820 self.height = 730 + self.load_theme() + + def load_theme(self): theme = get_option("General", "theme", "default") try: with open(AO2XPpath+"ao2xp_themes/"+theme+"/theme.py") as t: exec t except Exception as e: - QtGui.QMessageBox.critical(None, "Unable to load theme", "There was a problem loading the current theme \"%s\":\n\n%s." % (theme, e)) - os._exit(-2) + QtGui.QMessageBox.critical(None, "Unable to load theme", "There was a problem loading the current theme \"%s\":\n\n%s." % (theme, e)) + os._exit(-2) def reset_offsets(self): self.pairoffset.setValue(0) @@ -1755,7 +1761,7 @@ class GUI(QtGui.QWidget): songitem = QtGui.QListWidgetItem() songitem.setText(song) if exists(unicode(AOpath + 'sounds/music/' + fname.replace("","&").lower())): - songitem.setBackgroundColor(QtGui.QColor(128, 255, 128)) + songitem.setBackgroundColor(QtGui.QColor(self.found_songitem_color)) self.musicitems.addItem(songitem) else: self.allMusic() @@ -3671,7 +3677,7 @@ class GUI(QtGui.QWidget): songitem = QtGui.QListWidgetItem() songitem.setText(song) if exists(unicode(AOpath + 'sounds/music/' + fname.replace("","&").lower())): - songitem.setBackgroundColor(QtGui.QColor(128, 255, 128)) + songitem.setBackgroundColor(QtGui.QColor(self.found_songitem_color)) #else: #songitem.setBackgroundColor(QtGui.QColor(255, 128, 128)) self.musicitems.addItem(songitem) diff --git a/options.py b/options.py index 0b35256..f298524 100644 --- a/options.py +++ b/options.py @@ -145,8 +145,8 @@ class Settings(QtGui.QDialog): autojoinarea_layout.addWidget(self.autojoinarea) self.autoconnect.addItem("Always show server list") - if exists(AOpath+'serverlist.txt'): - with open(AOpath+'serverlist.txt') as file: + if exists('serverlist.txt'): + with open('serverlist.txt') as file: for server in [line.rstrip().split(':') for line in file]: self.autoconnect.addItem(server[-1]) autoconnect_layout.addWidget(autoconnect_label) @@ -238,6 +238,7 @@ class Settings(QtGui.QDialog): self.savelogs_state = False self.combinelogs_state = False self.savedemos_state = False + self.theme_state = "" def showSettings(self): if exists("AO2XP.ini"): @@ -254,10 +255,10 @@ class Settings(QtGui.QDialog): except: self.defaultshowname.setText(ini.read_ini(self.inifile, "General", "showname")) self.enableslide.setChecked(ini.read_ini_bool(self.inifile, "General", "slide", False)) - self.allowdownload_chars.setChecked(ini.read_ini_bool(self.inifile, "General", "download characters")) - self.allowdownload_sounds.setChecked(ini.read_ini_bool(self.inifile, "General", "download sounds")) + self.allowdownload_chars.setChecked(ini.read_ini_bool(self.inifile, "General", "download characters", False)) + self.allowdownload_sounds.setChecked(ini.read_ini_bool(self.inifile, "General", "download sounds", False)) self.allowdownload_music.setChecked(ini.read_ini_bool(self.inifile, "General", "download music")) - self.allowdownload_evidence.setChecked(ini.read_ini_bool(self.inifile, "General", "download evidence")) + self.allowdownload_evidence.setChecked(ini.read_ini_bool(self.inifile, "General", "download evidence", False)) self.currtheme.setCurrentIndex(self.themes.index(ini.read_ini(self.inifile, "General", "theme", "default"))) self.autoconnect.setCurrentIndex(ini.read_ini_int(self.inifile, "General", "auto connect", -1) + 1) self.autopick.setEditText(ini.read_ini(self.inifile, "General", "auto pick").decode('utf-8')) @@ -300,6 +301,7 @@ class Settings(QtGui.QDialog): self.savelogs_state = self.savetolog.isChecked() self.combinelogs_state = self.savetolog_combine.isChecked() self.savedemos_state = self.savedemos.isChecked() + self.theme_state = self.currtheme.currentText() self.tabs.setCurrentIndex(0) self.show() @@ -343,6 +345,8 @@ class Settings(QtGui.QDialog): self.gamewindow.gamewidget.text_wait_time = self.textstaytime.value() self.gamewindow.gamewidget.slide_enabled = self.enableslide.isChecked() + if not self.theme_state == self.currtheme.currentText(): + self.gamewindow.gamewidget.load_theme() if not self.gamewindow.gamewidget.demo_playing: if not (self.savelogs_state == self.savetolog.isChecked() and self.combinelogs_state == self.savetolog_combine.isChecked()): @@ -369,8 +373,8 @@ class Settings(QtGui.QDialog): if code == 0: subprocess.Popen(["./AO2XPupdat"]) _exit(0) - elif osname == "Darwin": # bundle - os.chdir(Cocoa.NSBundle.mainBundle().resourcePath()) # return to Resources folder + #elif osname == "Darwin": # bundle + # os.chdir(Cocoa.NSBundle.mainBundle().resourcePath()) # return to Resources folder def onReloadAudio(self): audio.free()