diff --git a/config.py b/config.py index 7b7c4c27..fdfde88f 100644 --- a/config.py +++ b/config.py @@ -356,7 +356,7 @@ class Config: @INPUT_MIC_WORD_FILTER.setter def INPUT_MIC_WORD_FILTER(self, value): if type(value) is list: - self._INPUT_MIC_WORD_FILTER = value + self._INPUT_MIC_WORD_FILTER = sorted(set(value), key=value.index) saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value) @property diff --git a/controller.py b/controller.py index f3ee030d..f3f2d7c1 100644 --- a/controller.py +++ b/controller.py @@ -487,19 +487,40 @@ def callbackSetMicMaxPhrases(value): except: view.showErrorMessage_MicMaxPhrases() -def callbackSetMicWordFilter(value): - print("callbackSetMicWordFilter", value) - word_filter = str(value) - word_filter = [w.strip() for w in word_filter.split(",") if len(w.strip()) > 0] - word_filter = ",".join(word_filter) - print("callbackSetMicWordFilter_afterSplitting", word_filter) - if len(word_filter) > 0: - config.INPUT_MIC_WORD_FILTER = word_filter.split(",") - else: - config.INPUT_MIC_WORD_FILTER = [] +def callbackSetMicWordFilter(values): + print("callbackSetMicWordFilter", values) + values = str(values) + values = [w.strip() for w in values.split(",") if len(w.strip()) > 0] + # Copy the list + new_input_mic_word_filter_list = config.INPUT_MIC_WORD_FILTER + new_added_value = [] + for value in values: + if value in new_input_mic_word_filter_list: + # If the value is already in the list, do nothing. + pass + else: + new_input_mic_word_filter_list.append(value) + new_added_value.append(value) + config.INPUT_MIC_WORD_FILTER = new_input_mic_word_filter_list + + view.addValueToList_WordFilter(new_added_value) + view.clearEntryBox_WordFilter() + view.setLatestConfigVariable("MicMicWordFilter") + model.resetKeywordProcessor() model.addKeywords() +def callbackDeleteMicWordFilter(value): + print("callbackDeleteMicWordFilter", value) + try: + new_input_mic_word_filter_list = config.INPUT_MIC_WORD_FILTER + new_input_mic_word_filter_list.remove(str(value)) + config.INPUT_MIC_WORD_FILTER = new_input_mic_word_filter_list + view.setLatestConfigVariable("MicMicWordFilter") + except: + print("There was no the target word in config.INPUT_MIC_WORD_FILTER") + + def callbackSetSpeakerEnergyThreshold(value): print("callbackSetSpeakerEnergyThreshold", value) if value == "": return @@ -718,6 +739,7 @@ def createMainWindow(): "callback_set_mic_phrase_timeout": callbackSetMicPhraseTimeout, "callback_set_mic_max_phrases": callbackSetMicMaxPhrases, "callback_set_mic_word_filter": callbackSetMicWordFilter, + "callback_delete_mic_word_filter": callbackDeleteMicWordFilter, # Transcription Tab (Speaker) "callback_set_speaker_energy_threshold": callbackSetSpeakerEnergyThreshold, diff --git a/img/cancel_icon.png b/img/cancel_icon.png new file mode 100644 index 00000000..aa6c386e Binary files /dev/null and b/img/cancel_icon.png differ diff --git a/img/redo_white.png b/img/redo_white.png new file mode 100644 index 00000000..2a27e302 Binary files /dev/null and b/img/redo_white.png differ diff --git a/locales/en.yml b/locales/en.yml index 3af662cf..7eee5744 100644 --- a/locales/en.yml +++ b/locales/en.yml @@ -138,7 +138,9 @@ config_window: mic_word_filter: label: Mic Word Filter - desc: "It will not send the sentence if the word(s) included in the set list of words.\nHow to set: e.g. AAA,BBB,CCC" + desc: "If a registered word is detected, the text will not be sent. To add multiple words at once, separate them with a \",\" (comma). \n*Duplicate words will not be registered." + add_button_label: Add + count_desc: "Current registered word count: %{count}" speaker_dynamic_energy_threshold: diff --git a/locales/ja.yml b/locales/ja.yml index e608c2b2..b662a3eb 100644 --- a/locales/ja.yml +++ b/locales/ja.yml @@ -138,7 +138,9 @@ config_window: mic_word_filter: label: ワードフィルター - desc: "設定された単語を検出すると、その文章は送信されません。\n設定の例: AAA,BBB,CCC" + desc: "登録された単語を検出すると、その文章は送信されません。\n「,」カンマで区切ると、まとめて複数の単語を追加できます。\n※重複した単語は登録されません。" + add_button_label: 追加 + count_desc: "現在登録されている単語数: %{count}" speaker_dynamic_energy_threshold: diff --git a/view.py b/view.py index 2a309a06..ac1d0739 100644 --- a/view.py +++ b/view.py @@ -8,7 +8,7 @@ import i18n from languages import selectable_languages from customtkinter import StringVar, IntVar, BooleanVar, END as CTK_END, get_appearance_mode -from vrct_gui.ui_managers import ColorThemeManager, ImageFileManager, UiScalingManager +from vrct_gui.ui_managers import ColorThemeManager, UiScalingManager from vrct_gui import vrct_gui from utils import callFunctionIfCallable, generatePercentageStringsList, intToPercentageStringsFormatter @@ -37,10 +37,9 @@ class View(): theme = "Dark" all_ctm = ColorThemeManager(theme) all_uism = UiScalingManager(config.UI_SCALING) - image_file = ImageFileManager(theme) common_args = { - "image_file": image_file, + "image_file": all_ctm.image_file, "FONT_FAMILY": config.FONT_FAMILY, } @@ -69,7 +68,6 @@ class View(): ) self.settings.error_message_window = SimpleNamespace( - ctm=all_ctm.error_message_window, uism=all_uism.error_message_window, **common_args ) @@ -286,10 +284,15 @@ class View(): VAR_MIC_MAX_PHRASES=StringVar(value=config.INPUT_MIC_MAX_PHRASES), CALLBACK_FOCUS_OUT_MIC_MAX_PHRASES=self.callbackBindFocusOut_MicMaxPhrases, + CALLBACK_ARROW_SWITCH_MIC_WORD_FILTER_LIST_OPEN=self._openMicWordFilterList, + CALLBACK_ARROW_SWITCH_MIC_WORD_FILTER_LIST_CLOSE=self._closeMicWordFilterList, + VAR_LABEL_MIC_WORD_FILTER=StringVar(value=i18n.t("config_window.mic_word_filter.label")), VAR_DESC_MIC_WORD_FILTER=StringVar(value=i18n.t("config_window.mic_word_filter.desc")), + VAR_SWITCH_DESC_MIC_WORD_FILTER=StringVar(value=i18n.t("config_window.mic_word_filter.count_desc", count=len(config.INPUT_MIC_WORD_FILTER))), + VAR_LABEL_MIC_WORD_FILTER_ADD_BUTTON=StringVar(value=i18n.t("config_window.mic_word_filter.add_button_label")), CALLBACK_SET_MIC_WORD_FILTER=None, - VAR_MIC_WORD_FILTER=StringVar(value=",".join(config.INPUT_MIC_WORD_FILTER) if len(config.INPUT_MIC_WORD_FILTER) > 0 else ""), + MIC_WORD_FILTER_LIST=config.INPUT_MIC_WORD_FILTER, # Transcription Tab (Speaker) @@ -464,6 +467,7 @@ class View(): self.view_variable.CALLBACK_SET_MIC_PHRASE_TIMEOUT = config_window_registers.get("callback_set_mic_phrase_timeout", None) self.view_variable.CALLBACK_SET_MIC_MAX_PHRASES = config_window_registers.get("callback_set_mic_max_phrases", None) self.view_variable.CALLBACK_SET_MIC_WORD_FILTER = config_window_registers.get("callback_set_mic_word_filter", None) + self.view_variable.CALLBACK_DELETE_MIC_WORD_FILTER = config_window_registers.get("callback_delete_mic_word_filter", None) # Transcription Tab (Speaker) self.view_variable.CALLBACK_SET_SPEAKER_ENERGY_THRESHOLD = config_window_registers.get("callback_set_speaker_energy_threshold", None) @@ -605,10 +609,12 @@ class View(): def enableConfigWindowCompactMode(self): for additional_widget in vrct_gui.config_window.additional_widgets: additional_widget.grid_remove() + self._closeMicWordFilterList() def disableConfigWindowCompactMode(self): for additional_widget in vrct_gui.config_window.additional_widgets: additional_widget.grid() + self._closeMicWordFilterList() def showRestartButtonIfRequired(self, locale:Union[None,str]=None): @@ -743,27 +749,85 @@ class View(): self.view_variable.VAR_MIC_DEVICE.set(default_selected_mic_device_name) - @staticmethod - def updateSetProgressBar_MicEnergy(new_mic_energy): - vrct_gui.config_window.sb__progressbar_x_slider__progressbar_mic_energy_threshold.set(new_mic_energy/config.MAX_MIC_ENERGY_THRESHOLD) + def updateSetProgressBar_MicEnergy(self, new_mic_energy): + self.updateProgressBar( + target_progressbar_widget=vrct_gui.config_window.sb__progressbar_x_slider__progressbar_mic_energy_threshold, + new_energy=new_mic_energy, + max_energy=config.MAX_MIC_ENERGY_THRESHOLD, + energy_threshold=config.INPUT_MIC_ENERGY_THRESHOLD, + ) + @staticmethod def initProgressBar_MicEnergy(): vrct_gui.config_window.sb__progressbar_x_slider__progressbar_mic_energy_threshold.set(0) - @staticmethod - def updateSetProgressBar_SpeakerEnergy(new_speaker_energy): - vrct_gui.config_window.sb__progressbar_x_slider__progressbar_speaker_energy_threshold.set(new_speaker_energy/config.MAX_SPEAKER_ENERGY_THRESHOLD) + def updateSetProgressBar_SpeakerEnergy(self, new_speaker_energy): + self.updateProgressBar( + target_progressbar_widget=vrct_gui.config_window.sb__progressbar_x_slider__progressbar_speaker_energy_threshold, + new_energy=new_speaker_energy, + max_energy=config.MAX_SPEAKER_ENERGY_THRESHOLD, + energy_threshold=config.INPUT_SPEAKER_ENERGY_THRESHOLD, + ) @staticmethod def initProgressBar_SpeakerEnergy(): vrct_gui.config_window.sb__progressbar_x_slider__progressbar_speaker_energy_threshold.set(0) + def updateProgressBar( + self, + target_progressbar_widget, + new_energy, + max_energy, + energy_threshold, + ): + target_progressbar_widget.set(new_energy/max_energy) + if new_energy >= energy_threshold: + target_progressbar_widget.configure(progress_color=self.settings.config_window.ctm.SB__PROGRESSBAR_X_SLIDER__PROGRESSBAR_PROGRESS_EXCEED_THRESHOLD_BG_COLOR) + else: + target_progressbar_widget.configure(progress_color=self.settings.config_window.ctm.SB__PROGRESSBAR_X_SLIDER__PROGRESSBAR_PROGRESS_BG_COLOR) + def _openMicWordFilterList(self): + target_widget = vrct_gui.config_window.sb__widgets["sb__arrow_switch_mic_word_filter"] + target_widget.arrow_switch_open.grid_remove() + target_widget.arrow_switch_close.grid() + + vrct_gui.config_window.sb__mic_word_filter_list.grid() + + def _closeMicWordFilterList(self): + target_widget = vrct_gui.config_window.sb__widgets["sb__arrow_switch_mic_word_filter"] + target_widget.arrow_switch_close.grid_remove() + target_widget.arrow_switch_open.grid() + + vrct_gui.config_window.sb__mic_word_filter_list.grid_remove() + + + def addValueToList_WordFilter(self, values:list): + target_widget = vrct_gui.config_window.sb__widgets["sb__add_and_delete_able_list_mic_word_filter_list"] + for t_item in target_widget.items: + if t_item.label in values: + values.remove(t_item.label) + t_item.redoFunction() + mic_word_filter_item_row_wrapper, accumulated_labels_width, last_row, last_column = target_widget.addValues( + values, + target_widget.mic_word_filter_item_row_wrapper, + target_widget.accumulated_labels_width, + target_widget.last_row, + target_widget.last_column + ) + target_widget.mic_word_filter_item_row_wrapper = mic_word_filter_item_row_wrapper + target_widget.accumulated_labels_width = accumulated_labels_width + target_widget.last_row = last_row + target_widget.last_column = last_column + + def clearEntryBox_WordFilter(self): + self._clearEntryBox(vrct_gui.config_window.sb__entry_mic_word_filter_list) + + # Widget Control (Whole) def foregroundOnIfForegroundEnabled(self): if config.ENABLE_FOREGROUND: @@ -905,6 +969,7 @@ class View(): def _closeConfigWindow(self): callFunctionIfCallable(self.view_variable.CALLBACK_CLOSE_CONFIG_WINDOW) + self._closeMicWordFilterList() vrct_gui._closeConfigWindow() # Window Control (Main Window Cover) @@ -962,7 +1027,8 @@ class View(): def setGuiVariable_MicMaxPhrases(self, value): self.view_variable.VAR_MIC_MAX_PHRASES.set(str(value)) - + def setGuiVariable_MicWordFilter_Length(self, value): + self.view_variable.VAR_SWITCH_DESC_MIC_WORD_FILTER.set(i18n.t("config_window.mic_word_filter.count_desc", count=value)) def setGuiVariable_SpeakerRecordTimeout(self, value): self.view_variable.VAR_SPEAKER_RECORD_TIMEOUT.set(str(value)) @@ -992,6 +1058,9 @@ class View(): self.setGuiVariable_MicPhraseTimeout(config.INPUT_MIC_PHRASE_TIMEOUT) case "MicMaxPhrases": self.setGuiVariable_MicMaxPhrases(config.INPUT_MIC_MAX_PHRASES) + case "MicMicWordFilter": + self.setGuiVariable_MicWordFilter_Length(len(config.INPUT_MIC_WORD_FILTER)) + case "SpeakerRecordTimeout": self.setGuiVariable_SpeakerRecordTimeout(config.INPUT_SPEAKER_RECORD_TIMEOUT) case "SpeakerPhraseTimeout": diff --git a/vrct_gui/config_window/widgets/createSideMenuAndSettingsBoxContainers/setting_box_containers/_SettingBoxGenerator.py b/vrct_gui/config_window/widgets/createSideMenuAndSettingsBoxContainers/setting_box_containers/_SettingBoxGenerator.py index 3c152958..8a7f3622 100644 --- a/vrct_gui/config_window/widgets/createSideMenuAndSettingsBoxContainers/setting_box_containers/_SettingBoxGenerator.py +++ b/vrct_gui/config_window/widgets/createSideMenuAndSettingsBoxContainers/setting_box_containers/_SettingBoxGenerator.py @@ -5,8 +5,9 @@ from typing import Union from customtkinter import CTkOptionMenu, CTkFont, CTkFrame, CTkLabel, CTkRadioButton, CTkEntry, CTkSlider, CTkSwitch, CTkCheckBox, CTkProgressBar from CTkToolTip import * -from vrct_gui.ui_utils import createButtonWithImage, getLatestWidth, createOptionMenuBox +from vrct_gui.ui_utils import createButtonWithImage, getLatestWidth, createOptionMenuBox, getLatestHeight, bindButtonFunctionAndColor from vrct_gui import vrct_gui +from utils import isEven, callFunctionIfCallable SETTING_BOX_COLUMN = 1 @@ -17,6 +18,8 @@ class _SettingBoxGenerator(): self.parent_widget = parent_widget self.settings = settings + self.MAIN_INNER_AREA_MIN_WIDTH = int(self.settings.uism.MAIN_AREA_MIN_WIDTH - self.settings.uism.SB__IPADX) + self.dropdown_menu_window = vrct_gui.vrct_gui.dropdown_menu_window def _createSettingBoxFrame(self, sb__attr_name, for_var_label_text=None, for_var_desc_text=None): @@ -274,6 +277,7 @@ class _SettingBoxGenerator(): message=getSliderValueWAfterFormatting(), delay=0, bg_color=self.settings.ctm.SB__SLIDER_TOOLTIP_BG_COLOR, + corner_radius=0, text_color=self.settings.ctm.SB__SLIDER_TOOLTIP_TEXT_COLOR, font=CTkFont(family=self.settings.FONT_FAMILY, size=self.settings.uism.SB__SLIDER_TOOLTIP_FONT_SIZE, weight="normal"), ) @@ -448,6 +452,315 @@ class _SettingBoxGenerator(): return setting_box_frame + def createSettingBoxArrowSwitch( + self, + for_var_label_text, for_var_desc_text, + arrow_switch_attr_name, + open_command, + close_command, + var_switch_desc=None, + ): + + (setting_box_frame, setting_box_item_frame) = self._createSettingBoxFrame(arrow_switch_attr_name, for_var_label_text, for_var_desc_text) + + ARROW_BUTTON_COLUMN = SETTING_BOX_COLUMN + + if var_switch_desc is not None: + label_widget = CTkLabel( + setting_box_item_frame, + textvariable=var_switch_desc, + height=0, + corner_radius=0, + font=CTkFont(family=self.settings.FONT_FAMILY, size=self.settings.uism.SB__ARROW_SWITCH_DESC_FONT_SIZE, weight="normal"), + anchor="w", + text_color=self.settings.ctm.LABELS_DESC_TEXT_COLOR, + ) + + label_widget.grid(row=1, column=SETTING_BOX_COLUMN) + ARROW_BUTTON_COLUMN = SETTING_BOX_COLUMN + 1 + + + for_opening_button_wrapper = createButtonWithImage( + parent_widget=setting_box_item_frame, + button_fg_color=self.settings.ctm.SB__ARROW_SWITCH_BUTTON_COLOR, + button_enter_color=self.settings.ctm.SB__ARROW_SWITCH_BUTTON_HOVERED_COLOR, + button_clicked_color=self.settings.ctm.SB__ARROW_SWITCH_BUTTON_CLICKED_COLOR, + button_image_file=self.settings.image_file.ARROW_LEFT.rotate(270), + button_image_size=self.settings.uism.SB__ARROW_SWITCH_BUTTON_ICON_SIZE, + button_ipadxy=self.settings.uism.SB__ARROW_SWITCH_BUTTON_IPADXY, + button_command=open_command, + ) + for_opening_button_wrapper.grid(row=1, column=ARROW_BUTTON_COLUMN, padx=self.settings.uism.SB__ARROW_SWITCH_LEFT_PADX, sticky="e") + + self.config_window.sb__widgets[arrow_switch_attr_name].arrow_switch_open = for_opening_button_wrapper + + for_closing_button_wrapper = createButtonWithImage( + parent_widget=setting_box_item_frame, + button_fg_color=self.settings.ctm.SB__ARROW_SWITCH_BUTTON_COLOR, + button_enter_color=self.settings.ctm.SB__ARROW_SWITCH_BUTTON_HOVERED_COLOR, + button_clicked_color=self.settings.ctm.SB__ARROW_SWITCH_BUTTON_CLICKED_COLOR, + button_image_file=self.settings.image_file.ARROW_LEFT.rotate(90), + button_image_size=self.settings.uism.SB__ARROW_SWITCH_BUTTON_ICON_SIZE, + button_ipadxy=self.settings.uism.SB__ARROW_SWITCH_BUTTON_IPADXY, + button_command=close_command, + ) + for_closing_button_wrapper.grid(row=1, column=ARROW_BUTTON_COLUMN, padx=self.settings.uism.SB__ARROW_SWITCH_LEFT_PADX, sticky="e") + for_closing_button_wrapper.grid_remove() + + self.config_window.sb__widgets[arrow_switch_attr_name].arrow_switch_close = for_closing_button_wrapper + + + return setting_box_frame + + + + # I've added it for the word filter, but it's not currently generalized. If you want to use it in the same way elsewhere, it will require refactoring. + def createSettingBoxAddAndDeleteAbleList( + self, + add_and_delete_able_list_attr_name, + entry_attr_name, + entry_width, + mic_word_filter_list, + ): + + (setting_box_frame, setting_box_item_frame) = self._createSettingBoxFrame(add_and_delete_able_list_attr_name) + + self.config_window.sb__widgets[add_and_delete_able_list_attr_name].items = [] + + + list_container = CTkFrame(setting_box_item_frame, corner_radius=0, fg_color=self.settings.ctm.SB__BG_COLOR, width=0, height=0) + list_container.grid(row=1, column=0, sticky="nsew") + + + max_width = int(self.MAIN_INNER_AREA_MIN_WIDTH - (self.settings.uism.SB__IPADX*2)) + + def addValues(mic_word_filter_list, mic_word_filter_item_row_wrapper, accumulated_labels_width, row, column): + for mic_word_filter_item in mic_word_filter_list: + mic_word_filter_item_wrapper = self._createValue(add_and_delete_able_list_attr_name, mic_word_filter_item_row_wrapper, row, column, mic_word_filter_item) + + if int(accumulated_labels_width + getLatestWidth(mic_word_filter_item_wrapper) + self.settings.uism.ADD_AND_DELETE_ABLE_LIST__VALUES_LEFT_PADX[1]) >= max_width: + accumulated_labels_width = 0 + column = 0 + row += 1 + mic_word_filter_item_wrapper.destroy() + mic_word_filter_item_row_wrapper = self._createRowFrame(list_container, row) + mic_word_filter_item_wrapper = self._createValue(add_and_delete_able_list_attr_name, mic_word_filter_item_row_wrapper, row, column, mic_word_filter_item) + column += 1 + else: + column += 1 + + accumulated_labels_width += int(getLatestWidth(mic_word_filter_item_wrapper) + self.settings.uism.ADD_AND_DELETE_ABLE_LIST__VALUES_LEFT_PADX[1]) + + + + return mic_word_filter_item_row_wrapper, accumulated_labels_width, row, column + + accumulated_labels_width = 0 + row=0 + column=0 + mic_word_filter_item_row_wrapper = self._createRowFrame(list_container, row) + + + mic_word_filter_list = self.view_variable.MIC_WORD_FILTER_LIST + + mic_word_filter_item_row_wrapper, accumulated_labels_width, row, column = addValues(mic_word_filter_list, mic_word_filter_item_row_wrapper, accumulated_labels_width, row, column) + + + self.config_window.sb__widgets[add_and_delete_able_list_attr_name].mic_word_filter_item_row_wrapper = mic_word_filter_item_row_wrapper + self.config_window.sb__widgets[add_and_delete_able_list_attr_name].accumulated_labels_width = accumulated_labels_width + self.config_window.sb__widgets[add_and_delete_able_list_attr_name].last_row = row + self.config_window.sb__widgets[add_and_delete_able_list_attr_name].last_column = column + self.config_window.sb__widgets[add_and_delete_able_list_attr_name].addValues = lambda values, mic_word_filter_item_row_wrapper, accumulated_labels_width, last_row, last_column: addValues(values, mic_word_filter_item_row_wrapper, accumulated_labels_width, last_row, last_column) + + + entry_and_add_button_wrapper = CTkFrame(setting_box_item_frame, corner_radius=0, fg_color=self.settings.ctm.SB__BG_COLOR) + entry_and_add_button_wrapper.grid(row=2, column=0, pady=(self.settings.uism.SB__IPADY, 0), sticky="ew") + + entry_and_add_button_wrapper.grid_columnconfigure((0,3), weight=1) + + + + entry_widget = CTkEntry( + entry_and_add_button_wrapper, + text_color=self.settings.ctm.SB__ENTRY_TEXT_COLOR, + fg_color=self.settings.ctm.SB__ENTRY_BG_COLOR, + border_color=self.settings.ctm.SB__ENTRY_BORDER_COLOR, + width=entry_width, + placeholder_text="AAA or AAA,BBB,CCC", + height=self.settings.uism.SB__PROGRESSBAR_X_SLIDER__ENTRY_HEIGHT, + font=CTkFont(family=self.settings.FONT_FAMILY, size=self.settings.uism.SB__ENTRY_FONT_SIZE, weight="normal"), + ) + setattr(self.config_window, entry_attr_name, entry_widget) + + entry_widget.grid(row=0, column=1, sticky="ew") + + + + add_button = CTkFrame(entry_and_add_button_wrapper, corner_radius=self.settings.uism.BUTTONS_CORNER_RADIUS, fg_color=self.settings.ctm.SB__ADD_AND_DELETE_ABLE_LIST__ADD_BUTTON_COLOR, cursor="hand2") + add_button.grid(row=0, column=2, padx=self.settings.uism.ADD_AND_DELETE_ABLE_LIST__ADD_BUTTON_LEFT_PADX, sticky="ew") + + + add_button.grid_columnconfigure(0, weight=1) + add_button_label_wrapper = CTkFrame(add_button, corner_radius=0, fg_color=self.settings.ctm.SB__ADD_AND_DELETE_ABLE_LIST__ADD_BUTTON_COLOR) + add_button_label_wrapper.grid(row=0, column=0, padx=self.settings.uism.ADD_AND_DELETE_ABLE_LIST__ADD_BUTTON_IPADX, pady=self.settings.uism.ADD_AND_DELETE_ABLE_LIST__ADD_BUTTON_IPADY, sticky="ew") + + add_button_label_wrapper.grid_columnconfigure((0,2), weight=1) + add_button_label = CTkLabel( + add_button_label_wrapper, + textvariable=self.view_variable.VAR_LABEL_MIC_WORD_FILTER_ADD_BUTTON, + height=0, + corner_radius=0, + font=CTkFont(family=self.settings.FONT_FAMILY, size=self.settings.uism.ADD_AND_DELETE_ABLE_LIST__ADD_BUTTON_FONT_SIZE, weight="normal"), + anchor="w", + text_color=self.settings.ctm.LABELS_TEXT_COLOR, + ) + add_button_label.grid(row=0, column=1) + + + def adjustedCommand(): + callFunctionIfCallable(self.view_variable.CALLBACK_SET_MIC_WORD_FILTER, entry_widget.get()) + entry_widget.focus_set() + + bindButtonFunctionAndColor( + target_widgets=[ + add_button, + add_button_label_wrapper, + add_button_label, + ], + enter_color=self.settings.ctm.SB__ADD_AND_DELETE_ABLE_LIST__ADD_BUTTON_HOVERED_COLOR, + leave_color=self.settings.ctm.SB__ADD_AND_DELETE_ABLE_LIST__ADD_BUTTON_COLOR, + clicked_color=self.settings.ctm.SB__ADD_AND_DELETE_ABLE_LIST__ADD_BUTTON_CLICKED_COLOR, + buttonReleasedFunction=lambda _e: adjustedCommand(), + ) + + + return setting_box_frame + + + def _createRowFrame(self, parent_widget, row): + mic_word_filter_item_row_wrapper = CTkFrame(parent_widget, corner_radius=0, fg_color=self.settings.ctm.SB__BG_COLOR, width=0, height=0) + mic_word_filter_item_row_wrapper.grid(row=row, column=0, pady=self.settings.uism.ADD_AND_DELETE_ABLE_LIST__VALUES_BOTTOM_PADY, sticky="nsew") + + return mic_word_filter_item_row_wrapper + + + + def _createValue(self, add_and_delete_able_list_attr_name, parent_row_frame, row, column, mic_word_filter_item): + mic_word_filter_item_wrapper = CTkFrame(parent_row_frame, corner_radius=self.settings.uism.ADD_AND_DELETE_ABLE_LIST__VALUES_CORNER_RADIUS, fg_color=self.settings.ctm.SB__ADD_AND_DELETE_ABLE_LIST_BG_COLOR, width=0, height=0) + mic_word_filter_item_wrapper.grid(row=0, column=column, padx=self.settings.uism.ADD_AND_DELETE_ABLE_LIST__VALUES_LEFT_PADX, sticky="nsew") + setattr(self, f"{row}_{column}", mic_word_filter_item_wrapper) + + + + mic_word_filter_item_wrapper.grid_rowconfigure((0,2), weight=1) + label_widget = CTkLabel( + mic_word_filter_item_wrapper, + text=mic_word_filter_item, + height=0, + corner_radius=0, + font=CTkFont(family=self.settings.FONT_FAMILY, size=self.settings.uism.ADD_AND_DELETE_ABLE_LIST__VALUES_TEXT_FONT_SIZE, weight="normal"), + anchor="w", + text_color=self.settings.ctm.BASIC_TEXT_COLOR, + ) + + label_widget.grid(row=1, column=0, padx=self.settings.uism.ADD_AND_DELETE_ABLE_LIST__VALUES_TEXT_IPADX, pady=self.settings.uism.ADD_AND_DELETE_ABLE_LIST__VALUES_TEXT_IPADY) + + + if isEven(getLatestHeight(label_widget)) is False: + label_widget.grid( + pady=( + self.settings.uism.ADD_AND_DELETE_ABLE_LIST__VALUES_TEXT_IPADY, + self.settings.uism.ADD_AND_DELETE_ABLE_LIST__VALUES_TEXT_IPADY + 1 + ) + ) + + + if isEven(getLatestWidth(label_widget)) is False: + label_widget.grid( + padx=( + self.settings.uism.ADD_AND_DELETE_ABLE_LIST__VALUES_TEXT_IPADX[0], + self.settings.uism.ADD_AND_DELETE_ABLE_LIST__VALUES_TEXT_IPADX[1] + 1 + ) + ) + + + + def pressedDeleteButtonCommand(_e, delete_button, redo_button): + # overstrike true + label_widget.configure(font=CTkFont(family=self.settings.FONT_FAMILY, size=self.settings.uism.ADD_AND_DELETE_ABLE_LIST__VALUES_TEXT_FONT_SIZE, weight="normal", overstrike=True)) + # change fg_color + mic_word_filter_item_wrapper.configure(fg_color=self.settings.ctm.SB__ADD_AND_DELETE_ABLE_LIST_DELETED_BG_COLOR) + # change button img to redo button + delete_button.grid_remove() + redo_button.grid() + # callback delete function + callFunctionIfCallable(self.view_variable.CALLBACK_DELETE_MIC_WORD_FILTER, mic_word_filter_item) + + def pressedRedoButtonCommand(_e, delete_button, redo_button): + # overstrike false + label_widget.configure(font=CTkFont(family=self.settings.FONT_FAMILY, size=self.settings.uism.ADD_AND_DELETE_ABLE_LIST__VALUES_TEXT_FONT_SIZE, weight="normal", overstrike=False)) + # change fg_color + mic_word_filter_item_wrapper.configure(fg_color=self.settings.ctm.SB__ADD_AND_DELETE_ABLE_LIST_BG_COLOR) + # change button img to delete button + redo_button.grid_remove() + delete_button.grid() + # callback add function + callFunctionIfCallable(self.view_variable.CALLBACK_SET_MIC_WORD_FILTER, mic_word_filter_item) + + + + delete_button = createButtonWithImage( + parent_widget=mic_word_filter_item_wrapper, + button_fg_color=self.settings.ctm.SB__ADD_AND_DELETE_ABLE_LIST_BG_COLOR, + button_enter_color=self.settings.ctm.SB__ADD_AND_DELETE_ABLE_LIST__VALUES_ACTION_BUTTON_HOVERED_BG_COLOR, + button_clicked_color=self.settings.ctm.SB__ADD_AND_DELETE_ABLE_LIST__VALUES_ACTION_BUTTON_CLICKED_BG_COLOR, + button_image_file=self.settings.image_file.CANCEL_ICON, + button_image_size=self.settings.uism.ADD_AND_DELETE_ABLE_LIST__VALUES_ACTION_BUTTON_IMG_SIZE, + button_ipadxy=self.settings.uism.ADD_AND_DELETE_ABLE_LIST__VALUES_ACTION_BUTTON_IPADXY, + button_command=lambda _e: pressedDeleteButtonCommand(_e, delete_button, redo_button), + ) + delete_button.grid(row=1, column=1, padx=self.settings.uism.ADD_AND_DELETE_ABLE_LIST__VALUES_ACTION_BUTTON_PADX, sticky="e") + + redo_button = createButtonWithImage( + parent_widget=mic_word_filter_item_wrapper, + button_fg_color=self.settings.ctm.SB__ADD_AND_DELETE_ABLE_LIST_DELETED_BG_COLOR, + button_enter_color=self.settings.ctm.SB__ADD_AND_DELETE_ABLE_LIST__VALUES_DELETED_BUTTON_HOVERED_BG_COLOR, + button_clicked_color=self.settings.ctm.SB__ADD_AND_DELETE_ABLE_LIST__VALUES_DELETED_BUTTON_CLICKED_BG_COLOR, + button_image_file=self.settings.image_file.REDO_ICON, + button_image_size=self.settings.uism.ADD_AND_DELETE_ABLE_LIST__VALUES_ACTION_BUTTON_IMG_SIZE, + button_ipadxy=self.settings.uism.ADD_AND_DELETE_ABLE_LIST__VALUES_ACTION_BUTTON_IPADXY, + button_command=lambda _e: pressedRedoButtonCommand(_e, delete_button, redo_button), + ) + redo_button.grid(row=1, column=1, padx=self.settings.uism.ADD_AND_DELETE_ABLE_LIST__VALUES_ACTION_BUTTON_PADX, sticky="e") + redo_button.grid_remove() + + + partial_pressedRedoButtonCommand = partial(pressedRedoButtonCommand, _e=None, delete_button=delete_button, redo_button=redo_button) + item_data = SimpleNamespace( + label = mic_word_filter_item, + redoFunction = lambda: partial_pressedRedoButtonCommand(), + ) + + + items = self.config_window.sb__widgets[add_and_delete_able_list_attr_name].items + if len(items) == 0: + items.append(item_data) + else: + is_replaced = False + for i, item in enumerate(items): + if item.label == mic_word_filter_item: + items[i] = item_data + is_replaced = True + break + if is_replaced is False: items.append(item_data) + + + return mic_word_filter_item_wrapper + + + + + # if setting_box_type == "dropdown_menu_x_dropdown_menu": # self.setting_box_dropdown_menu_x_dropdown_menu = CTkFrame(self.setting_box, corner_radius=0, fg_color=self.settings.ctm.SB__BG_COLOR, width=0, height=0) diff --git a/vrct_gui/config_window/widgets/createSideMenuAndSettingsBoxContainers/setting_box_containers/setting_box_transcription/createSettingBox_Mic.py b/vrct_gui/config_window/widgets/createSideMenuAndSettingsBoxContainers/setting_box_containers/setting_box_transcription/createSettingBox_Mic.py index 472e5baa..d5ece1b6 100644 --- a/vrct_gui/config_window/widgets/createSideMenuAndSettingsBoxContainers/setting_box_containers/setting_box_transcription/createSettingBox_Mic.py +++ b/vrct_gui/config_window/widgets/createSideMenuAndSettingsBoxContainers/setting_box_containers/setting_box_transcription/createSettingBox_Mic.py @@ -8,6 +8,8 @@ def createSettingBox_Mic(setting_box_wrapper, config_window, settings, view_vari createSettingBoxSwitch = sbg.createSettingBoxSwitch createSettingBoxProgressbarXSlider = sbg.createSettingBoxProgressbarXSlider createSettingBoxEntry = sbg.createSettingBoxEntry + createSettingBoxArrowSwitch = sbg.createSettingBoxArrowSwitch + createSettingBoxAddAndDeleteAbleList = sbg.createSettingBoxAddAndDeleteAbleList def checkbox_input_mic_threshold_check_callback(is_turned_on): @@ -36,6 +38,11 @@ def createSettingBox_Mic(setting_box_wrapper, config_window, settings, view_vari def entry_input_mic_max_phrases_callback(value): callFunctionIfCallable(view_variable.CALLBACK_SET_MIC_MAX_PHRASES, value) + def arrow_switch_mic_word_filter_list_open_callback(value): + callFunctionIfCallable(view_variable.CALLBACK_ARROW_SWITCH_MIC_WORD_FILTER_LIST_OPEN) + def arrow_switch_mic_word_filter_list_close_callback(value): + callFunctionIfCallable(view_variable.CALLBACK_ARROW_SWITCH_MIC_WORD_FILTER_LIST_CLOSE) + def entry_input_mic_word_filters_callback(value): callFunctionIfCallable(view_variable.CALLBACK_SET_MIC_WORD_FILTER, value) @@ -140,13 +147,24 @@ def createSettingBox_Mic(setting_box_wrapper, config_window, settings, view_vari # # __________ - config_window.sb__mic_word_filter = createSettingBoxEntry( + config_window.sb__mic_word_filter = createSettingBoxArrowSwitch( for_var_label_text=view_variable.VAR_LABEL_MIC_WORD_FILTER, for_var_desc_text=view_variable.VAR_DESC_MIC_WORD_FILTER, - entry_attr_name="sb__entry_mic_word_filter", - entry_width=settings.uism.RESPONSIVE_UI_SIZE_INT_300, - entry_bind__Any_KeyRelease=lambda value: entry_input_mic_word_filters_callback(value), - entry_textvariable=view_variable.VAR_MIC_WORD_FILTER, + arrow_switch_attr_name="sb__arrow_switch_mic_word_filter", + open_command=lambda value: arrow_switch_mic_word_filter_list_open_callback(value), + close_command=lambda value: arrow_switch_mic_word_filter_list_close_callback(value), + var_switch_desc=view_variable.VAR_SWITCH_DESC_MIC_WORD_FILTER, ) config_window.sb__mic_word_filter.grid(row=row, pady=0) + row+=1 + + config_window.sb__mic_word_filter_list = createSettingBoxAddAndDeleteAbleList( + add_and_delete_able_list_attr_name="sb__add_and_delete_able_list_mic_word_filter_list", + entry_attr_name="sb__entry_mic_word_filter_list", + entry_width=settings.uism.RESPONSIVE_UI_SIZE_INT_300, + mic_word_filter_list=view_variable.MIC_WORD_FILTER_LIST, + ) + config_window.sb__mic_word_filter_list.grid(row=row, pady=0) + # Default, close the list. + config_window.sb__mic_word_filter_list.grid_remove() row+=1 \ No newline at end of file diff --git a/vrct_gui/ui_managers/ColorThemeManager.py b/vrct_gui/ui_managers/ColorThemeManager.py index 19f9f884..707bc9a8 100644 --- a/vrct_gui/ui_managers/ColorThemeManager.py +++ b/vrct_gui/ui_managers/ColorThemeManager.py @@ -1,487 +1,114 @@ from types import SimpleNamespace +from .Themes import _darkTheme, _lightTheme + class ColorThemeManager(): def __init__(self, theme): - self.main = SimpleNamespace() - self.config_window = SimpleNamespace() - self.selectable_language_window = SimpleNamespace() - self.main_window_cover = SimpleNamespace() - self.error_message_window = SimpleNamespace() - self.confirmation_modal = SimpleNamespace() + # base_color 100, 200, 300...900 is generated by https://m2.material.io/design/color/the-color-system.html#tools-for-picking-colors . I put the comment "Source". I used it as a source color and generated. + # and like 750, 888... is made by https://meyerweb.com/eric/tools/color-blend/#:::hex - # old one. But leave it here for now. - # self.PRIMARY_100_COLOR = "#c4eac1" - # self.PRIMARY_200_COLOR = "#9cdd98" - # self.PRIMARY_300_COLOR = "#70d16c" - # self.PRIMARY_400_COLOR = "#49c649" - # self.PRIMARY_500_COLOR = "#0abb1d" - # self.PRIMARY_600_COLOR = "#00ac11" - # self.PRIMARY_650_COLOR = "#00A309" - # self.PRIMARY_700_COLOR = "#009900" - # self.PRIMARY_800_COLOR = "#008800" - # self.PRIMARY_900_COLOR = "#006900" + self.base_color = SimpleNamespace( + + PRIMARY_100_COLOR = "#b7ded8", + PRIMARY_200_COLOR = "#8acac0", + PRIMARY_300_COLOR = "#61b4a7", + PRIMARY_400_COLOR = "#48a495", # Source + PRIMARY_450_COLOR = "#429c8c", + PRIMARY_500_COLOR = "#3b9483", + PRIMARY_600_COLOR = "#368777", + PRIMARY_650_COLOR = "#347f6f", + PRIMARY_700_COLOR = "#317767", + PRIMARY_750_COLOR = "#2F6F60", + PRIMARY_800_COLOR = "#2c6759", + PRIMARY_900_COLOR = "#214b3f", + + SENT_400_COLOR = "#6197b4", # Source PRIMARY_300_COLOR #61b4a7. ANALOGOUS' Second one. + RECEIVED_300_COLOR = "#a861b4", # Source PRIMARY_300_COLOR #61b4a7. TRIADIC' Second one. + + DARK_BASIC_TEXT_COLOR = "#f2f2f2", + DARK_100_COLOR = "#f5f7fb", # THE LIGHTEST BG COLOR + DARK_200_COLOR = "#f1f2f6", + DARK_300_COLOR = "#e9eaee", + DARK_350_COLOR = "#d8d9dd", + DARK_400_COLOR = "#c7c8cc", + DARK_450_COLOR = "#b8b9bd", + DARK_500_COLOR = "#a9aaae", + DARK_600_COLOR = "#7f8084", + DARK_650_COLOR = "#75767a", + DARK_700_COLOR = "#6a6c6f", + DARK_725_COLOR = "#636467", + DARK_750_COLOR = "#5b5c5f", + DARK_775_COLOR = "#535457", + DARK_800_COLOR = "#4b4c4f", + DARK_825_COLOR = "#434447", + DARK_850_COLOR = "#3a3b3e", + DARK_863_COLOR = "#36373a", + DARK_875_COLOR = "#323336", + DARK_888_COLOR = "#2e2f32", + DARK_900_COLOR = "#292a2d", # Source + DARK_925_COLOR = "#242528", + DARK_950_COLOR = "#1f2022", + DARK_975_COLOR = "#1a1b1d", + DARK_1000_COLOR = "#151517", # THE DARKEST BG COLOR - # new one. - self.PRIMARY_100_COLOR = "#b7ded8" - self.PRIMARY_200_COLOR = "#8acac0" - self.PRIMARY_300_COLOR = "#61b4a7" - self.PRIMARY_400_COLOR = "#48a495" - self.PRIMARY_450_COLOR = "#429c8c" - self.PRIMARY_500_COLOR = "#3b9483" - self.PRIMARY_600_COLOR = "#368777" - self.PRIMARY_650_COLOR = "#347f6f" - self.PRIMARY_700_COLOR = "#317767" - self.PRIMARY_750_COLOR = "#2F6F60" - self.PRIMARY_800_COLOR = "#2c6759" - self.PRIMARY_900_COLOR = "#214b3f" + LIGHT_100_COLOR = "#f2f2f2", # THE LIGHTEST BG COLOR + LIGHT_200_COLOR = "#e9e9e9", + LIGHT_250_COLOR = "#e1e1e1", + LIGHT_300_COLOR = "#d9d9d9", + LIGHT_325_COLOR = "#d0d0d0", + LIGHT_350_COLOR = "#c7c7c7", + LIGHT_375_COLOR = "#bebebe", + LIGHT_400_COLOR = "#b5b5b5", + LIGHT_450_COLOR = "#a5a5a5", + LIGHT_500_COLOR = "#959595", + LIGHT_600_COLOR = "#6d6d6d", + LIGHT_700_COLOR = "#5a5a5a", + LIGHT_750_COLOR = "#515151", + LIGHT_800_COLOR = "#3b3b3b", + LIGHT_850_COLOR = "#323232", + LIGHT_875_COLOR = "#2b2b2b", + LIGHT_900_COLOR = "#1b1b1b", + # LIGHT_925_COLOR = "#121212", + # LIGHT_950_COLOR = "#0c0c0c", + # LIGHT_975_COLOR = "#070707", + LIGHT_1000_COLOR = "#010101", # THE DARKEST BG COLOR + ) - self.DARK_100_COLOR = "#f5f7fb" - self.DARK_200_COLOR = "#f1f2f6" - self.DARK_300_COLOR = "#e9eaee" - self.DARK_350_COLOR = "#d8d9dd" - self.DARK_400_COLOR = "#c7c8cc" - self.DARK_450_COLOR = "#b8b9bd" - self.DARK_500_COLOR = "#a9aaae" - self.DARK_600_COLOR = "#7f8084" - self.DARK_650_COLOR = "#75767a" - self.DARK_700_COLOR = "#6a6c6f" - self.DARK_725_COLOR = "#636467" - self.DARK_750_COLOR = "#5b5c5f" - self.DARK_775_COLOR = "#535457" - self.DARK_800_COLOR = "#4b4c4f" - self.DARK_825_COLOR = "#434447" - self.DARK_850_COLOR = "#3a3b3e" - self.DARK_863_COLOR = "#36373a" - self.DARK_875_COLOR = "#323336" - self.DARK_888_COLOR = "#2e2f32" - self.DARK_900_COLOR = "#292a2d" - self.DARK_925_COLOR = "#242528" - self.DARK_950_COLOR = "#1f2022" - self.DARK_975_COLOR = "#1a1b1d" - self.DARK_1000_COLOR = "#151517" # THE DARKEST COLOR - - - self.LIGHT_100_COLOR = "#f2f2f2" # THE LIGHTEST COLOR - self.LIGHT_200_COLOR = "#e9e9e9" - self.LIGHT_250_COLOR = "#e1e1e1" - self.LIGHT_300_COLOR = "#d9d9d9" - self.LIGHT_325_COLOR = "#d0d0d0" - self.LIGHT_350_COLOR = "#c7c7c7" - self.LIGHT_375_COLOR = "#bebebe" - self.LIGHT_400_COLOR = "#b5b5b5" - self.LIGHT_450_COLOR = "#a5a5a5" - self.LIGHT_500_COLOR = "#959595" - self.LIGHT_600_COLOR = "#6d6d6d" - self.LIGHT_700_COLOR = "#5a5a5a" - self.LIGHT_750_COLOR = "#515151" - self.LIGHT_800_COLOR = "#3b3b3b" - self.LIGHT_850_COLOR = "#323232" - self.LIGHT_875_COLOR = "#2b2b2b" - self.LIGHT_900_COLOR = "#1b1b1b" - # self.LIGHT_925_COLOR = "#121212" - # self.LIGHT_950_COLOR = "#0c0c0c" - # self.LIGHT_975_COLOR = "#070707" - self.LIGHT_1000_COLOR = "#010101" + # It's actually meaningless to separate it from __init__. but it's just set to use the dark theme by default, so I did it just in case to change the default theme. + selected_color_theme = _darkTheme(self.base_color) + for each_key in selected_color_theme.__dict__.keys(): + setattr(self, each_key, getattr(selected_color_theme, each_key)) if theme == "Dark": - self._createDarkModeColor() + pass + elif theme == "Light": - self._createLightModeColor() + selected_color_theme = _lightTheme(self.base_color) + self._colorThemeDictsMerger(selected_color_theme) - def _createDarkModeColor(self): - # Common - self.main.BASIC_TEXT_COLOR = self.LIGHT_100_COLOR - self.main.LABELS_TEXT_COLOR = self.main.BASIC_TEXT_COLOR - # Main - self.main.MAIN_BG_COLOR = self.DARK_888_COLOR - self.main.TEXTBOX_BG_COLOR = self.DARK_900_COLOR - self.main.TEXTBOX_TEXT_COLOR = self.main.BASIC_TEXT_COLOR - self.main.TEXTBOX_TEXT_SUB_COLOR = self.DARK_450_COLOR - self.main.TEXTBOX_SYSTEM_TAG_TEXT_COLOR = self.PRIMARY_300_COLOR - self.main.TEXTBOX_SENT_TAG_TEXT_COLOR = "#6197b4" - self.main.TEXTBOX_RECEIVED_TAG_TEXT_COLOR = "#a861b4" - self.main.TEXTBOX_ERROR_TAG_TEXT_COLOR = "#c27583" - self.main.TEXTBOX_TIMESTAMP_TEXT_COLOR = self.DARK_600_COLOR - self.main.TEXTBOX_TAB_BG_PASSIVE_COLOR = self.DARK_850_COLOR - self.main.TEXTBOX_TAB_BG_ACTIVE_COLOR = self.main.TEXTBOX_BG_COLOR - self.main.TEXTBOX_TAB_BG_HOVERED_COLOR = self.DARK_800_COLOR - self.main.TEXTBOX_TAB_BG_CLICKED_COLOR = self.DARK_925_COLOR - self.main.TEXTBOX_TAB_TEXT_ACTIVE_COLOR = self.main.BASIC_TEXT_COLOR - self.main.TEXTBOX_TAB_TEXT_PASSIVE_COLOR = self.DARK_500_COLOR + def _colorThemeDictsMerger(self, selected_color_theme): + # Each section(main, selectable_language_window, config_window...) marge to default theme. + for selected_theme_section_key in selected_color_theme.__dict__.keys(): + # Get same section data by section key from default theme. + default_theme_target_section_data = getattr(self, selected_theme_section_key) - self.main.TEXTBOX_ENTRY_TEXT_COLOR = self.DARK_300_COLOR - self.main.TEXTBOX_ENTRY_TEXT_DISABLED_COLOR = self.DARK_500_COLOR - self.main.TEXTBOX_ENTRY_BG_COLOR = self.DARK_875_COLOR - self.main.TEXTBOX_ENTRY_BORDER_COLOR = self.DARK_750_COLOR - self.main.TEXTBOX_ENTRY_PLACEHOLDER_COLOR = self.DARK_500_COLOR - self.main.TEXTBOX_ENTRY_PLACEHOLDER_DISABLED_COLOR = self.DARK_700_COLOR + selected_theme_section_data = getattr(selected_color_theme, selected_theme_section_key) + self._mergeNestedDicts(default_theme_target_section_data.__dict__, selected_theme_section_data.__dict__) - # Sidebar - self.main.SIDEBAR_BG_COLOR = self.DARK_850_COLOR + def _mergeNestedDicts(self, d1, d2): + for key, value in d2.items(): + if key in d1 and isinstance(d1[key], dict) and isinstance(value, dict): + self._mergeNestedDicts(d1[key], value) + else: + d1[key] = value - # Sidebar Features - self.main.SF__BG_COLOR = self.DARK_825_COLOR - self.main.SF__HOVERED_BG_COLOR = self.DARK_800_COLOR - self.main.SF__CLICKED_BG_COLOR = self.DARK_875_COLOR - self.main.SF__TEXT_DISABLED_COLOR = self.DARK_500_COLOR - - self.main.SF__SWITCH_BOX_BG_COLOR = self.DARK_775_COLOR - self.main.SF__SWITCH_BOX_HOVERED_BG_COLOR = self.DARK_725_COLOR - self.main.SF__SWITCH_BOX_CLICKED_BG_COLOR = self.DARK_825_COLOR - self.main.SF__SWITCH_BOX_ACTIVE_BG_COLOR = self.PRIMARY_500_COLOR - self.main.SF__SWITCH_BOX_ACTIVE_HOVERED_BG_COLOR = self.PRIMARY_400_COLOR - self.main.SF__SWITCH_BOX_ACTIVE_CLICKED_BG_COLOR = self.PRIMARY_700_COLOR - self.main.SF__SWITCH_BOX_DISABLE_BG_COLOR = self.PRIMARY_800_COLOR - - self.main.SF__SWITCH_BOX_BUTTON_COLOR = self.DARK_400_COLOR - # It's not working because It overrode internally. - self.main.SF__SWITCH_BOX_BUTTON_HOVERED_COLOR = self.DARK_350_COLOR - - self.main.SF__SELECTED_MARK_ACTIVE_BG_COLOR = self.main.SF__SWITCH_BOX_ACTIVE_BG_COLOR - self.main.SF__SELECTED_MARK_ACTIVE_HOVERED_BG_COLOR = self.main.SF__SWITCH_BOX_ACTIVE_HOVERED_BG_COLOR - self.main.SF__SELECTED_MARK_ACTIVE_CLICKED_BG_COLOR = self.main.SF__SWITCH_BOX_ACTIVE_CLICKED_BG_COLOR - self.main.SF__SELECTED_MARK_DISABLE_BG_COLOR = self.main.SF__SWITCH_BOX_DISABLE_BG_COLOR - - - # Sidebar Languages Settings - self.main.SLS__TITLE_TEXT_COLOR = self.DARK_400_COLOR - - self.main.SLS__BG_COLOR = self.DARK_800_COLOR - - self.main.SLS__PRESETS_TAB_BG_HOVERED_COLOR = self.DARK_825_COLOR - self.main.SLS__PRESETS_TAB_BG_CLICKED_COLOR = self.DARK_875_COLOR - self.main.SLS__PRESETS_TAB_BG_PASSIVE_COLOR = self.main.SIDEBAR_BG_COLOR - self.main.SLS__PRESETS_TAB_BG_ACTIVE_COLOR = self.main.SLS__BG_COLOR - self.main.SLS__PRESETS_TAB_ACTIVE_TEXT_COLOR_PASSIVE = self.DARK_600_COLOR - self.main.SLS__PRESETS_TAB_ACTIVE_TEXT_COLOR = self.main.BASIC_TEXT_COLOR - - self.main.SLS__BOX_BG_COLOR = self.DARK_825_COLOR - self.main.SLS__BOX_SECTION_TITLE_TEXT_COLOR = self.DARK_400_COLOR - self.main.SLS__BOX_ARROWS_TEXT_COLOR = self.DARK_500_COLOR - - self.main.SLS__OPTIONMENU_BG_COLOR = self.DARK_888_COLOR - self.main.SLS__OPTIONMENU_HOVERED_BG_COLOR = self.DARK_875_COLOR - self.main.SLS__OPTIONMENU_CLICKED_BG_COLOR = self.DARK_900_COLOR - - - self.main.CONFIG_BUTTON_BG_COLOR = self.main.SIDEBAR_BG_COLOR - self.main.CONFIG_BUTTON_HOVERED_BG_COLOR = self.DARK_800_COLOR - self.main.CONFIG_BUTTON_CLICKED_BG_COLOR = self.DARK_875_COLOR - # self.main.CONFIG_BUTTON_DISABLE_COLOR = self.DARK_900_COLOR - - self.main.MINIMIZE_SIDEBAR_BUTTON_BG_COLOR = self.main.SIDEBAR_BG_COLOR - self.main.MINIMIZE_SIDEBAR_BUTTON_HOVERED_BG_COLOR = self.DARK_800_COLOR - self.main.MINIMIZE_SIDEBAR_BUTTON_CLICKED_BG_COLOR = self.DARK_900_COLOR - # self.main.MINIMIZE_SIDEBAR_BUTTON_DISABLE_COLOR = self.DARK_900_COLOR - - - - self.main.TOP_BAR_BUTTON_BG_COLOR = self.main.MAIN_BG_COLOR - self.main.TOP_BAR_BUTTON_HOVERED_BG_COLOR = self.DARK_850_COLOR - self.main.TOP_BAR_BUTTON_CLICKED_BG_COLOR = self.DARK_900_COLOR - # self.main.TOP_BAR_BUTTON_DISABLE_COLOR = self.DARK_900_COLOR - - self.main.UPDATE_AVAILABLE_BUTTON_BG_COLOR = self.main.TOP_BAR_BUTTON_BG_COLOR - self.main.UPDATE_AVAILABLE_BUTTON_HOVERED_BG_COLOR = self.main.TOP_BAR_BUTTON_HOVERED_BG_COLOR - self.main.UPDATE_AVAILABLE_BUTTON_CLICKED_BG_COLOR = self.main.TOP_BAR_BUTTON_CLICKED_BG_COLOR - # self.main.UPDATE_AVAILABLE_BUTTON_DISABLE_COLOR = self.main.TOP_BAR_BUTTON_DISABLE_COLOR - self.main.UPDATE_AVAILABLE_BUTTON_TEXT_COLOR = self.PRIMARY_300_COLOR - - self.main.HELP_AND_INFO_BUTTON_BG_COLOR = self.main.TOP_BAR_BUTTON_BG_COLOR - self.main.HELP_AND_INFO_BUTTON_HOVERED_BG_COLOR = self.main.TOP_BAR_BUTTON_HOVERED_BG_COLOR - self.main.HELP_AND_INFO_BUTTON_CLICKED_BG_COLOR = self.main.TOP_BAR_BUTTON_CLICKED_BG_COLOR - # self.main.HELP_AND_INFO_BUTTON_DISABLE_COLOR = self.main.TOP_BAR_BUTTON_DISABLE_COLOR - - - - # Selectable Language Window - self.selectable_language_window.BASIC_TEXT_COLOR = self.main.BASIC_TEXT_COLOR - - self.selectable_language_window.MAIN_BG_COLOR = self.DARK_875_COLOR - - self.selectable_language_window.GO_BACK_BUTTON_BG_COLOR = self.DARK_800_COLOR - self.selectable_language_window.GO_BACK_BUTTON_BG_HOVERED_COLOR = self.DARK_750_COLOR - self.selectable_language_window.GO_BACK_BUTTON_BG_CLICKED_COLOR = self.DARK_875_COLOR - - - self.selectable_language_window.TOP_BG_COLOR = self.main.SIDEBAR_BG_COLOR - self.selectable_language_window.TITLE_TEXT_COLOR = self.DARK_400_COLOR - self.selectable_language_window.LANGUAGE_BUTTON_BG_COLOR = self.selectable_language_window.MAIN_BG_COLOR - self.selectable_language_window.LANGUAGE_BUTTON_BG_HOVERED_COLOR = self.DARK_825_COLOR - self.selectable_language_window.LANGUAGE_BUTTON_BG_CLICKED_COLOR = self.DARK_888_COLOR - - - # Modal Window (Main Window) - self.main_window_cover.TEXT_COLOR = self.LIGHT_100_COLOR - - - self.confirmation_modal.MESSAGE_TEXT_COLOR = self.LIGHT_100_COLOR - self.confirmation_modal.FAKE_BORDER_COLOR = self.DARK_600_COLOR - self.confirmation_modal.BG_COLOR = self.DARK_800_COLOR - self.confirmation_modal.CONFIRMATION_BUTTONS_TEXT_COLOR = self.LIGHT_100_COLOR - - self.confirmation_modal.ACCEPT_BUTTON_BG_COLOR = self.PRIMARY_600_COLOR - self.confirmation_modal.ACCEPT_BUTTON_HOVERED_BG_COLOR = self.PRIMARY_450_COLOR - self.confirmation_modal.ACCEPT_BUTTON_CLICKED_BG_COLOR = self.PRIMARY_750_COLOR - self.confirmation_modal.DENY_BUTTON_BG_COLOR = self.DARK_750_COLOR - self.confirmation_modal.DENY_BUTTON_HOVERED_BG_COLOR = self.DARK_700_COLOR - self.confirmation_modal.DENY_BUTTON_CLICKED_BG_COLOR = self.DARK_825_COLOR - - - # Common - self.config_window.BASIC_TEXT_COLOR = self.main.BASIC_TEXT_COLOR - self.config_window.LABELS_TEXT_COLOR = self.config_window.BASIC_TEXT_COLOR - self.config_window.LABELS_DESC_TEXT_COLOR = self.DARK_500_COLOR - - self.config_window.LABELS_TEXT_DISABLED_COLOR = self.DARK_600_COLOR - - - # Top bar - self.config_window.TOP_BAR_BG_COLOR = self.DARK_850_COLOR - - # Restart Button - self.config_window.RESTART_BUTTON_BG_COLOR = self.PRIMARY_600_COLOR - self.config_window.RESTART_BUTTON_HOVERED_BG_COLOR = self.PRIMARY_500_COLOR - self.config_window.RESTART_BUTTON_CLICKED_BG_COLOR = self.PRIMARY_700_COLOR - - - # Compact Mode - self.config_window.COMPACT_MODE_SWITCH_BOX_BG_COLOR = self.DARK_775_COLOR - self.config_window.COMPACT_MODE_SWITCH_BOX_ACTIVE_BG_COLOR = self.PRIMARY_500_COLOR - self.config_window.COMPACT_MODE_SWITCH_BOX_BUTTON_COLOR = self.DARK_350_COLOR - self.config_window.COMPACT_MODE_SWITCH_BOX_BUTTON_HOVERED_COLOR = self.DARK_300_COLOR - - # Main - self.config_window.MAIN_BG_COLOR = self.DARK_950_COLOR - - # This is for fake border color - self.config_window.SB__WRAPPER_BG_COLOR = self.DARK_750_COLOR - - self.config_window.SB__BG_COLOR = self.DARK_888_COLOR - - self.config_window.SB__OPTIONMENU_BG_COLOR = self.DARK_925_COLOR - self.config_window.SB__OPTIONMENU_HOVERED_BG_COLOR = self.DARK_850_COLOR - self.config_window.SB__OPTIONMENU_CLICKED_BG_COLOR = self.DARK_950_COLOR - self.config_window.SB__DROPDOWN_MENU_WINDOW_BG_COLOR = self.config_window.MAIN_BG_COLOR - self.config_window.SB__DROPDOWN_MENU_WINDOW_BORDER_COLOR = self.DARK_600_COLOR - # self.config_window.SB__DROPDOWN_MENU_WINDOW_BG_COLOR = self.DARK_700_COLOR - self.config_window.SB__DROPDOWN_MENU_BG_COLOR = self.DARK_875_COLOR - self.config_window.SB__DROPDOWN_MENU_HOVERED_BG_COLOR = self.DARK_800_COLOR - self.config_window.SB__DROPDOWN_MENU_CLICKED_BG_COLOR = self.DARK_900_COLOR - - self.config_window.SB__SLIDER_BG_COLOR = self.DARK_700_COLOR - self.config_window.SB__SLIDER_PROGRESS_BG_COLOR = self.DARK_500_COLOR - self.config_window.SB__SLIDER_BUTTON_COLOR = self.DARK_700_COLOR - self.config_window.SB__SLIDER_BUTTON_HOVERED_COLOR = self.DARK_600_COLOR - self.config_window.SB__SLIDER_TOOLTIP_BG_COLOR = self.DARK_850_COLOR - self.config_window.SB__SLIDER_TOOLTIP_TEXT_COLOR = self.DARK_200_COLOR - - self.config_window.SB__SWITCH_BOX_BG_COLOR = self.DARK_800_COLOR - self.config_window.SB__SWITCH_BOX_ACTIVE_BG_COLOR = self.PRIMARY_500_COLOR - self.config_window.SB__SWITCH_BOX_BUTTON_COLOR = self.DARK_400_COLOR - self.config_window.SB__SWITCH_BOX_BUTTON_HOVERED_COLOR = self.DARK_350_COLOR - - self.config_window.SB__CHECKBOX_BORDER_COLOR = self.DARK_600_COLOR - self.config_window.SB__CHECKBOX_HOVER_COLOR = self.DARK_800_COLOR - self.config_window.SB__CHECKBOX_CHECKED_COLOR = self.PRIMARY_700_COLOR - self.config_window.SB__CHECKBOX_CHECKMARK_COLOR = self.config_window.BASIC_TEXT_COLOR - - self.config_window.SB__ENTRY_TEXT_COLOR = self.DARK_300_COLOR - self.config_window.SB__ENTRY_BG_COLOR = self.DARK_863_COLOR - self.config_window.SB__ENTRY_BORDER_COLOR = self.DARK_775_COLOR - - - self.config_window.SB__PROGRESSBAR_X_SLIDER__PROGRESSBAR_BG_COLOR = self.DARK_800_COLOR - self.config_window.SB__PROGRESSBAR_X_SLIDER__PROGRESSBAR_PROGRESS_BG_COLOR = self.PRIMARY_400_COLOR - - self.config_window.SB__PROGRESSBAR_X_SLIDER__SLIDER_BUTTON_COLOR = self.PRIMARY_600_COLOR - self.config_window.SB__PROGRESSBAR_X_SLIDER__SLIDER_BUTTON_HOVERED_COLOR = self.PRIMARY_400_COLOR - self.config_window.SB__PROGRESSBAR_X_SLIDER__PASSIVE_BUTTON_COLOR = self.DARK_800_COLOR - - self.config_window.SB__PROGRESSBAR_X_SLIDER__PASSIVE_BUTTON_COLOR = self.DARK_800_COLOR - self.config_window.SB__PROGRESSBAR_X_SLIDER__PASSIVE_BUTTON_HOVERED_COLOR = self.DARK_700_COLOR - self.config_window.SB__PROGRESSBAR_X_SLIDER__PASSIVE_BUTTON_CLICKED_COLOR = self.DARK_900_COLOR - self.config_window.SB__PROGRESSBAR_X_SLIDER__PASSIVE_BUTTON_DISABLED_COLOR = self.DARK_850_COLOR - - self.config_window.SB__PROGRESSBAR_X_SLIDER__ACTIVE_BUTTON_COLOR = self.PRIMARY_600_COLOR - self.config_window.SB__PROGRESSBAR_X_SLIDER__ACTIVE_BUTTON_HOVERED_COLOR = self.PRIMARY_500_COLOR - self.config_window.SB__PROGRESSBAR_X_SLIDER__ACTIVE_BUTTON_CLICKED_COLOR = self.PRIMARY_800_COLOR - # self.config_window.SB__PROGRESSBAR_X_SLIDER__ACTIVE_BUTTON_DISABLED_COLOR = self.PRIMARY_900_COLOR - - - # Side menu - self.config_window.SIDE_MENU_BG_COLOR = self.config_window.MAIN_BG_COLOR - - self.config_window.SIDE_MENU_LABELS_BG_COLOR = self.config_window.SIDE_MENU_BG_COLOR - self.config_window.SIDE_MENU_LABELS_BG_FOR_FAKE_BORDER_COLOR = self.config_window.SIDE_MENU_BG_COLOR - self.config_window.SIDE_MENU_LABELS_HOVERED_BG_COLOR = self.DARK_850_COLOR - self.config_window.SIDE_MENU_LABELS_CLICKED_BG_COLOR = self.PRIMARY_750_COLOR - self.config_window.SIDE_MENU_LABELS_SELECTED_TEXT_COLOR = self.PRIMARY_200_COLOR - - self.config_window.SIDE_MENU_SELECTED_MARK_ACTIVE_BG_COLOR = self.main.SF__SWITCH_BOX_ACTIVE_BG_COLOR - - self.config_window.NOW_VERSION_TEXT_COLOR = self.DARK_300_COLOR - - # Error Message Window for Config Window - # The color code [#bb4448] is a mixture of [#a9555c] and [#cc3333] (for a redder shade). - self.config_window.SB__ERROR_MESSAGE_BG_COLOR = "#bb4448" - self.config_window.SB__ERROR_MESSAGE_TEXT_COLOR = "#fff" - - - - - - - - - - # def _createLightModeColor(self): - # # Common - # self.main.BASIC_TEXT_COLOR = self.DARK_1000_COLOR - # self.main.LABELS_TEXT_COLOR = self.main.BASIC_TEXT_COLOR - - # # Main - # self.main.MAIN_BG_COLOR = self.LIGHT_300_COLOR - - # self.main.TEXTBOX_BG_COLOR = self.LIGHT_200_COLOR - # self.main.TEXTBOX_TEXT_COLOR = self.main.BASIC_TEXT_COLOR - # self.main.TEXTBOX_TAB_BG_PASSIVE_COLOR = self.LIGHT_350_COLOR - # self.main.TEXTBOX_TAB_BG_ACTIVE_COLOR = self.main.TEXTBOX_BG_COLOR - # self.main.TEXTBOX_TAB_BG_HOVERED_COLOR = self.LIGHT_300_COLOR - # self.main.TEXTBOX_TAB_BG_CLICKED_COLOR = self.LIGHT_350_COLOR - # self.main.TEXTBOX_TAB_TEXT_ACTIVE_COLOR = self.main.BASIC_TEXT_COLOR - # self.main.TEXTBOX_TAB_TEXT_PASSIVE_COLOR = self.LIGHT_600_COLOR - - # self.main.TEXTBOX_ENTRY_TEXT_COLOR = self.LIGHT_800_COLOR - # self.main.TEXTBOX_ENTRY_TEXT_DISABLED_COLOR = self.LIGHT_500_COLOR - # self.main.TEXTBOX_ENTRY_BG_COLOR = self.LIGHT_325_COLOR - # self.main.TEXTBOX_ENTRY_BORDER_COLOR = self.LIGHT_400_COLOR - # self.main.TEXTBOX_ENTRY_PLACEHOLDER_COLOR = self.LIGHT_600_COLOR - # self.main.TEXTBOX_ENTRY_PLACEHOLDER_DISABLED_COLOR = self.LIGHT_700_COLOR - - - - # # Sidebar - # self.main.SIDEBAR_BG_COLOR = self.LIGHT_350_COLOR - - # # Sidebar Features - # self.main.SF__BG_COLOR = self.LIGHT_375_COLOR - # self.main.SF__HOVERED_BG_COLOR = self.LIGHT_300_COLOR - # self.main.SF__CLICKED_BG_COLOR = self.LIGHT_200_COLOR - # self.main.SF__TEXT_DISABLED_COLOR = self.LIGHT_500_COLOR - - # self.main.SF__SWITCH_BOX_BG_COLOR = self.LIGHT_300_COLOR - # self.main.SF__SWITCH_BOX_HOVERED_BG_COLOR = self.LIGHT_450_COLOR - # self.main.SF__SWITCH_BOX_CLICKED_BG_COLOR = self.LIGHT_350_COLOR - # self.main.SF__SWITCH_BOX_ACTIVE_BG_COLOR = self.PRIMARY_650_COLOR - # self.main.SF__SWITCH_BOX_ACTIVE_HOVERED_BG_COLOR = self.PRIMARY_500_COLOR - # self.main.SF__SWITCH_BOX_ACTIVE_CLICKED_BG_COLOR = self.PRIMARY_700_COLOR - # self.main.SF__SWITCH_BOX_DISABLE_BG_COLOR = self.PRIMARY_900_COLOR - - # self.main.SF__SELECTED_MARK_ACTIVE_BG_COLOR = self.main.SF__SWITCH_BOX_ACTIVE_BG_COLOR - # self.main.SF__SELECTED_MARK_ACTIVE_HOVERED_BG_COLOR = self.main.SF__SWITCH_BOX_ACTIVE_HOVERED_BG_COLOR - # self.main.SF__SELECTED_MARK_ACTIVE_CLICKED_BG_COLOR = self.main.SF__SWITCH_BOX_ACTIVE_CLICKED_BG_COLOR - # self.main.SF__SELECTED_MARK_DISABLE_BG_COLOR = self.main.SF__SWITCH_BOX_DISABLE_BG_COLOR - - - # # Sidebar quick settings - # self.main.SLS__TITLE_TEXT_COLOR = self.LIGHT_800_COLOR - - # self.main.SLS__BG_COLOR = self.LIGHT_300_COLOR - - # self.main.SLS__PRESETS_TAB_BG_HOVERED_COLOR = self.LIGHT_350_COLOR - # self.main.SLS__PRESETS_TAB_BG_CLICKED_COLOR = self.LIGHT_800_COLOR - # self.main.SLS__PRESETS_TAB_BG_PASSIVE_COLOR = self.main.SIDEBAR_BG_COLOR - # self.main.SLS__PRESETS_TAB_BG_ACTIVE_COLOR = self.main.SLS__BG_COLOR - # self.main.SLS__PRESETS_TAB_ACTIVE_TEXT_COLOR_PASSIVE = self.LIGHT_600_COLOR - # self.main.SLS__PRESETS_TAB_ACTIVE_TEXT_COLOR = self.main.BASIC_TEXT_COLOR - - # self.main.SLS__BOX_BG_COLOR = self.LIGHT_350_COLOR - # self.main.SLS__BOX_SECTION_TITLE_TEXT_COLOR = self.LIGHT_800_COLOR - # self.main.SLS__BOX_ARROWS_TEXT_COLOR = self.LIGHT_700_COLOR - - # self.main.SLS__OPTIONMENU_BG_COLOR = self.LIGHT_500_COLOR - - - # self.main.CONFIG_BUTTON_BG_COLOR = self.main.SIDEBAR_BG_COLOR - # self.main.CONFIG_BUTTON_HOVERED_BG_COLOR = self.LIGHT_800_COLOR - # self.main.CONFIG_BUTTON_CLICKED_BG_COLOR = self.LIGHT_900_COLOR - # # self.main.CONFIG_BUTTON_DISABLE_COLOR = self.LIGHT_900_COLOR - - # self.main.MINIMIZE_SIDEBAR_BUTTON_BG_COLOR = self.main.SIDEBAR_BG_COLOR - # self.main.MINIMIZE_SIDEBAR_BUTTON_HOVERED_BG_COLOR = self.LIGHT_800_COLOR - # self.main.MINIMIZE_SIDEBAR_BUTTON_CLICKED_BG_COLOR = self.LIGHT_900_COLOR - # # self.main.MINIMIZE_SIDEBAR_BUTTON_DISABLE_COLOR = self.LIGHT_900_COLOR - - # self.main.HELP_AND_INFO_BUTTON_BG_COLOR = self.main.MAIN_BG_COLOR - # self.main.HELP_AND_INFO_BUTTON_HOVERED_BG_COLOR = self.LIGHT_350_COLOR - # self.main.HELP_AND_INFO_BUTTON_CLICKED_BG_COLOR = self.LIGHT_450_COLOR - # # self.main.HELP_AND_INFO_BUTTON_DISABLE_COLOR = self.LIGHT_900_COLOR - - - # # Common - # self.config_window.BASIC_TEXT_COLOR = self.main.BASIC_TEXT_COLOR - # self.config_window.LABELS_TEXT_COLOR = self.config_window.BASIC_TEXT_COLOR - # self.config_window.LABELS_DESC_TEXT_COLOR = self.DARK_500_COLOR - - - # # Top bar - # self.config_window.TOP_BAR_BG_COLOR = self.DARK_850_COLOR - - - # # Main - # self.config_window.MAIN_BG_COLOR = self.DARK_950_COLOR - - # # This is for fake border color - # self.config_window.SB__WRAPPER_BG_COLOR = self.DARK_750_COLOR - - # self.config_window.SB__BG_COLOR = self.DARK_888_COLOR - - # self.config_window.SB__OPTIONMENU_BG_COLOR = self.DARK_925_COLOR - # self.config_window.SB__OPTIONMENU_HOVERED_BG_COLOR = self.DARK_875_COLOR - - # self.config_window.SB__SLIDER_BUTTON_COLOR = self.DARK_700_COLOR - # self.config_window.SB__SLIDER_BUTTON_HOVERED_COLOR = self.DARK_600_COLOR - - # self.config_window.SB__SWITCH_BOX_BG_COLOR = self.main.SF__SWITCH_BOX_BG_COLOR - # self.config_window.SB__SWITCH_BOX_ACTIVE_BG_COLOR = self.main.SF__SWITCH_BOX_ACTIVE_BG_COLOR - - # self.config_window.SB__CHECKBOX_BORDER_COLOR = self.DARK_500_COLOR - # self.config_window.SB__CHECKBOX_HOVER_COLOR = self.DARK_800_COLOR - # self.config_window.SB__CHECKBOX_CHECKED_COLOR = self.PRIMARY_700_COLOR - # self.config_window.SB__CHECKBOX_CHECKMARK_COLOR = self.config_window.BASIC_TEXT_COLOR - - # self.config_window.SB__PROGRESSBAR_X_SLIDER__SLIDER_BUTTON_COLOR = self.PRIMARY_700_COLOR - # self.config_window.SB__PROGRESSBAR_X_SLIDER__SLIDER_BUTTON_HOVERED_COLOR = self.PRIMARY_500_COLOR - # self.config_window.SB__PROGRESSBAR_X_SLIDER__PASSIVE_BUTTON_COLOR = self.DARK_800_COLOR - - # self.config_window.SB__PROGRESSBAR_X_SLIDER__PASSIVE_BUTTON_COLOR = self.DARK_800_COLOR - # self.config_window.SB__PROGRESSBAR_X_SLIDER__PASSIVE_BUTTON_HOVERED_COLOR = self.DARK_700_COLOR - # self.config_window.SB__PROGRESSBAR_X_SLIDER__PASSIVE_BUTTON_CLICKED_COLOR = self.DARK_900_COLOR - # self.config_window.SB__PROGRESSBAR_X_SLIDER__PASSIVE_BUTTON_DISABLED_COLOR = self.DARK_850_COLOR - - # self.config_window.SB__PROGRESSBAR_X_SLIDER__ACTIVE_BUTTON_COLOR = self.PRIMARY_700_COLOR - # self.config_window.SB__PROGRESSBAR_X_SLIDER__ACTIVE_BUTTON_HOVERED_COLOR = self.PRIMARY_600_COLOR - # self.config_window.SB__PROGRESSBAR_X_SLIDER__ACTIVE_BUTTON_CLICKED_COLOR = self.PRIMARY_900_COLOR - # # self.config_window.SB__PROGRESSBAR_X_SLIDER__ACTIVE_BUTTON_DISABLED_COLOR = self.PRIMARY_900_COLOR - - - # # Side menu - # self.config_window.SIDE_MENU_BG_COLOR = self.config_window.MAIN_BG_COLOR - - # self.config_window.SIDE_MENU_LABELS_BG_COLOR = self.config_window.SIDE_MENU_BG_COLOR - # self.config_window.SIDE_MENU_LABELS_BG_FOR_FAKE_BORDER_COLOR = self.config_window.SIDE_MENU_BG_COLOR - # self.config_window.SIDE_MENU_LABELS_HOVERED_BG_COLOR = self.DARK_850_COLOR - # self.config_window.SIDE_MENU_LABELS_CLICKED_BG_COLOR = self.PRIMARY_900_COLOR - # self.config_window.SIDE_MENU_LABELS_SELECTED_TEXT_COLOR = self.PRIMARY_300_COLOR - - # self.config_window.SIDE_MENU_SELECTED_MARK_ACTIVE_BG_COLOR = self.main.SF__SWITCH_BOX_ACTIVE_BG_COLOR + return d1 diff --git a/vrct_gui/ui_managers/ImageFileManager.py b/vrct_gui/ui_managers/ImageFileManager.py deleted file mode 100644 index 8bb71b4a..00000000 --- a/vrct_gui/ui_managers/ImageFileManager.py +++ /dev/null @@ -1,58 +0,0 @@ -from ..ui_utils import getImageFileFromUiUtils - - -class ImageFileManager(): - def __init__(self, theme:str ="Dark"): - if theme == "Dark": - self._createDarkModeImages() - elif theme == "Light": - self._createLightModeImages() - - - def _createDarkModeImages(self): - self.VRCT_LOGO = getImageFileFromUiUtils("vrct_logo_for_dark_mode.png") - self.VRCT_LOGO_MARK = getImageFileFromUiUtils("vrct_logo_mark_white.png") - - self.TRANSLATION_ICON = getImageFileFromUiUtils("translation_icon_white.png") - self.TRANSLATION_ICON_DISABLED = getImageFileFromUiUtils("translation_icon_disabled.png") - self.MIC_ICON = getImageFileFromUiUtils("mic_icon_white.png") - self.MIC_ICON_DISABLED = getImageFileFromUiUtils("mic_icon_disabled.png") - self.HEADPHONES_ICON = getImageFileFromUiUtils("headphones_icon_white.png") - self.HEADPHONES_ICON_DISABLED = getImageFileFromUiUtils("headphones_icon_disabled.png") - self.FOREGROUND_ICON = getImageFileFromUiUtils("foreground_icon_white.png") - self.FOREGROUND_ICON_DISABLED = getImageFileFromUiUtils("foreground_icon_disabled.png") - - self.NARROW_ARROW_DOWN = getImageFileFromUiUtils("narrow_arrow_down.png") - - self.CONFIGURATION_ICON = getImageFileFromUiUtils("configuration_icon_white.png") - self.CONFIGURATION_ICON_DISABLED = getImageFileFromUiUtils("configuration_icon_disabled.png") - - self.ARROW_LEFT = getImageFileFromUiUtils("arrow_left_white.png") - self.ARROW_LEFT_DISABLED = getImageFileFromUiUtils("arrow_left_disabled.png") - - self.REFRESH_ICON = getImageFileFromUiUtils("refresh_icon.png") - self.HELP_ICON = getImageFileFromUiUtils("help_icon_white.png") - - def _createLightModeImages(self): - self.VRCT_LOGO = getImageFileFromUiUtils("vrct_logo_for_light_mode.png") - self.VRCT_LOGO_MARK = getImageFileFromUiUtils("vrct_logo_mark_black.png") - - - self.TRANSLATION_ICON = getImageFileFromUiUtils("translation_icon_white.png") - self.TRANSLATION_ICON_DISABLED = getImageFileFromUiUtils("translation_icon_disabled.png") - self.MIC_ICON = getImageFileFromUiUtils("mic_icon_white.png") - self.MIC_ICON_DISABLED = getImageFileFromUiUtils("mic_icon_disabled.png") - self.HEADPHONES_ICON = getImageFileFromUiUtils("headphones_icon_white.png") - self.HEADPHONES_ICON_DISABLED = getImageFileFromUiUtils("headphones_icon_disabled.png") - self.FOREGROUND_ICON = getImageFileFromUiUtils("foreground_icon_white.png") - self.FOREGROUND_ICON_DISABLED = getImageFileFromUiUtils("foreground_icon_disabled.png") - - self.NARROW_ARROW_DOWN = getImageFileFromUiUtils("narrow_arrow_down.png") - - self.CONFIGURATION_ICON = getImageFileFromUiUtils("configuration_icon_white.png") - self.CONFIGURATION_ICON_DISABLED = getImageFileFromUiUtils("configuration_icon_disabled.png") - - self.ARROW_LEFT = getImageFileFromUiUtils("arrow_left_white.png") - self.ARROW_LEFT_DISABLED = getImageFileFromUiUtils("arrow_left_disabled.png") - - self.HELP_ICON = getImageFileFromUiUtils("help_icon_white.png") \ No newline at end of file diff --git a/vrct_gui/ui_managers/Themes/__init__.py b/vrct_gui/ui_managers/Themes/__init__.py new file mode 100644 index 00000000..fb61579d --- /dev/null +++ b/vrct_gui/ui_managers/Themes/__init__.py @@ -0,0 +1,2 @@ +from ._darkTheme import _darkTheme +from ._lightTheme import _lightTheme \ No newline at end of file diff --git a/vrct_gui/ui_managers/Themes/_darkTheme.py b/vrct_gui/ui_managers/Themes/_darkTheme.py new file mode 100644 index 00000000..2522608a --- /dev/null +++ b/vrct_gui/ui_managers/Themes/_darkTheme.py @@ -0,0 +1,300 @@ +from types import SimpleNamespace +from ...ui_utils import getImageFileFromUiUtils + +def _darkTheme(base_color): + theme_settings = SimpleNamespace( + main = SimpleNamespace( + # Common + BASIC_TEXT_COLOR = base_color.DARK_BASIC_TEXT_COLOR, + LABELS_TEXT_COLOR = base_color.DARK_BASIC_TEXT_COLOR, + + # Main + MAIN_BG_COLOR = base_color.DARK_888_COLOR, + + + TEXTBOX_BG_COLOR = base_color.DARK_900_COLOR, + TEXTBOX_TEXT_COLOR = base_color.DARK_BASIC_TEXT_COLOR, + TEXTBOX_TEXT_SUB_COLOR = base_color.DARK_450_COLOR, + TEXTBOX_SYSTEM_TAG_TEXT_COLOR = base_color.PRIMARY_300_COLOR, + TEXTBOX_SENT_TAG_TEXT_COLOR = base_color.SENT_400_COLOR, + TEXTBOX_RECEIVED_TAG_TEXT_COLOR = base_color.RECEIVED_300_COLOR, + # TEXTBOX_ERROR_TAG_TEXT_COLOR = "#c27583", + TEXTBOX_TIMESTAMP_TEXT_COLOR = base_color.DARK_600_COLOR, + + TEXTBOX_TAB_BG_PASSIVE_COLOR = base_color.DARK_850_COLOR, + TEXTBOX_TAB_BG_ACTIVE_COLOR = base_color.DARK_900_COLOR, + TEXTBOX_TAB_BG_HOVERED_COLOR = base_color.DARK_800_COLOR, + TEXTBOX_TAB_BG_CLICKED_COLOR = base_color.DARK_925_COLOR, + TEXTBOX_TAB_TEXT_ACTIVE_COLOR = base_color.DARK_BASIC_TEXT_COLOR, + TEXTBOX_TAB_TEXT_PASSIVE_COLOR = base_color.DARK_500_COLOR, + + TEXTBOX_ENTRY_TEXT_COLOR = base_color.DARK_300_COLOR, + TEXTBOX_ENTRY_TEXT_DISABLED_COLOR = base_color.DARK_500_COLOR, + TEXTBOX_ENTRY_BG_COLOR = base_color.DARK_875_COLOR, + TEXTBOX_ENTRY_BORDER_COLOR = base_color.DARK_750_COLOR, + TEXTBOX_ENTRY_PLACEHOLDER_COLOR = base_color.DARK_500_COLOR, + TEXTBOX_ENTRY_PLACEHOLDER_DISABLED_COLOR = base_color.DARK_700_COLOR, + + + # Sidebar + SIDEBAR_BG_COLOR = base_color.DARK_850_COLOR, + + # Sidebar Features + SF__BG_COLOR = base_color.DARK_825_COLOR, + SF__HOVERED_BG_COLOR = base_color.DARK_800_COLOR, + SF__CLICKED_BG_COLOR = base_color.DARK_875_COLOR, + SF__TEXT_DISABLED_COLOR = base_color.DARK_500_COLOR, + + SF__SWITCH_BOX_BG_COLOR = base_color.DARK_775_COLOR, + SF__SWITCH_BOX_HOVERED_BG_COLOR = base_color.DARK_725_COLOR, + SF__SWITCH_BOX_CLICKED_BG_COLOR = base_color.DARK_825_COLOR, + SF__SWITCH_BOX_ACTIVE_BG_COLOR = base_color.PRIMARY_500_COLOR, + SF__SWITCH_BOX_ACTIVE_HOVERED_BG_COLOR = base_color.PRIMARY_400_COLOR, + SF__SWITCH_BOX_ACTIVE_CLICKED_BG_COLOR = base_color.PRIMARY_700_COLOR, + SF__SWITCH_BOX_DISABLE_BG_COLOR = base_color.PRIMARY_800_COLOR, + + SF__SWITCH_BOX_BUTTON_COLOR = base_color.DARK_400_COLOR, + # It's not working because It overrode internally. + SF__SWITCH_BOX_BUTTON_HOVERED_COLOR = base_color.DARK_350_COLOR, + + SF__SELECTED_MARK_ACTIVE_BG_COLOR = base_color.PRIMARY_500_COLOR, + SF__SELECTED_MARK_ACTIVE_HOVERED_BG_COLOR = base_color.PRIMARY_400_COLOR, + SF__SELECTED_MARK_ACTIVE_CLICKED_BG_COLOR = base_color.PRIMARY_700_COLOR, + SF__SELECTED_MARK_DISABLE_BG_COLOR = base_color.PRIMARY_800_COLOR, + + + # Sidebar Languages Settings + SLS__TITLE_TEXT_COLOR = base_color.DARK_400_COLOR, + + SLS__BG_COLOR = base_color.DARK_800_COLOR, + + SLS__PRESETS_TAB_BG_HOVERED_COLOR = base_color.DARK_825_COLOR, + SLS__PRESETS_TAB_BG_CLICKED_COLOR = base_color.DARK_875_COLOR, + SLS__PRESETS_TAB_BG_PASSIVE_COLOR = base_color.DARK_850_COLOR, + SLS__PRESETS_TAB_BG_ACTIVE_COLOR = base_color.DARK_800_COLOR, + SLS__PRESETS_TAB_ACTIVE_TEXT_COLOR_PASSIVE = base_color.DARK_600_COLOR, + SLS__PRESETS_TAB_ACTIVE_TEXT_COLOR = base_color.DARK_BASIC_TEXT_COLOR, + + SLS__BOX_BG_COLOR = base_color.DARK_825_COLOR, + SLS__BOX_SECTION_TITLE_TEXT_COLOR = base_color.DARK_400_COLOR, + SLS__BOX_ARROWS_TEXT_COLOR = base_color.DARK_500_COLOR, + + SLS__OPTIONMENU_BG_COLOR = base_color.DARK_888_COLOR, + SLS__OPTIONMENU_HOVERED_BG_COLOR = base_color.DARK_875_COLOR, + SLS__OPTIONMENU_CLICKED_BG_COLOR = base_color.DARK_900_COLOR, + + + CONFIG_BUTTON_BG_COLOR = base_color.DARK_850_COLOR, + CONFIG_BUTTON_HOVERED_BG_COLOR = base_color.DARK_800_COLOR, + CONFIG_BUTTON_CLICKED_BG_COLOR = base_color.DARK_875_COLOR, + + MINIMIZE_SIDEBAR_BUTTON_BG_COLOR = base_color.DARK_850_COLOR, + MINIMIZE_SIDEBAR_BUTTON_HOVERED_BG_COLOR = base_color.DARK_800_COLOR, + MINIMIZE_SIDEBAR_BUTTON_CLICKED_BG_COLOR = base_color.DARK_900_COLOR, + + + + TOP_BAR_BUTTON_BG_COLOR = base_color.DARK_888_COLOR, + TOP_BAR_BUTTON_HOVERED_BG_COLOR = base_color.DARK_850_COLOR, + TOP_BAR_BUTTON_CLICKED_BG_COLOR = base_color.DARK_900_COLOR, + + UPDATE_AVAILABLE_BUTTON_BG_COLOR = base_color.DARK_888_COLOR, + UPDATE_AVAILABLE_BUTTON_HOVERED_BG_COLOR = base_color.DARK_850_COLOR, + UPDATE_AVAILABLE_BUTTON_CLICKED_BG_COLOR = base_color.DARK_900_COLOR, + UPDATE_AVAILABLE_BUTTON_TEXT_COLOR = base_color.PRIMARY_300_COLOR, + + HELP_AND_INFO_BUTTON_BG_COLOR = base_color.DARK_888_COLOR, + HELP_AND_INFO_BUTTON_HOVERED_BG_COLOR = base_color.DARK_850_COLOR, + HELP_AND_INFO_BUTTON_CLICKED_BG_COLOR = base_color.DARK_900_COLOR, + ), + + + selectable_language_window = SimpleNamespace( + # Selectable Language Window + BASIC_TEXT_COLOR = base_color.DARK_BASIC_TEXT_COLOR, + + MAIN_BG_COLOR = base_color.DARK_875_COLOR, + + GO_BACK_BUTTON_BG_COLOR = base_color.DARK_800_COLOR, + GO_BACK_BUTTON_BG_HOVERED_COLOR = base_color.DARK_750_COLOR, + GO_BACK_BUTTON_BG_CLICKED_COLOR = base_color.DARK_875_COLOR, + + TOP_BG_COLOR = base_color.DARK_850_COLOR, + TITLE_TEXT_COLOR = base_color.DARK_400_COLOR, + LANGUAGE_BUTTON_BG_COLOR = base_color.DARK_875_COLOR, + LANGUAGE_BUTTON_BG_HOVERED_COLOR = base_color.DARK_825_COLOR, + LANGUAGE_BUTTON_BG_CLICKED_COLOR = base_color.DARK_888_COLOR, + ), + + + + # Modal Window (Main Window) + main_window_cover = SimpleNamespace( + TEXT_COLOR = base_color.DARK_BASIC_TEXT_COLOR, + ), + + + confirmation_modal = SimpleNamespace( + MESSAGE_TEXT_COLOR = base_color.DARK_BASIC_TEXT_COLOR, + FAKE_BORDER_COLOR = base_color.DARK_600_COLOR, + BG_COLOR = base_color.DARK_800_COLOR, + CONFIRMATION_BUTTONS_TEXT_COLOR = base_color.DARK_BASIC_TEXT_COLOR, + + ACCEPT_BUTTON_BG_COLOR = base_color.PRIMARY_600_COLOR, + ACCEPT_BUTTON_HOVERED_BG_COLOR = base_color.PRIMARY_450_COLOR, + ACCEPT_BUTTON_CLICKED_BG_COLOR = base_color.PRIMARY_750_COLOR, + DENY_BUTTON_BG_COLOR = base_color.DARK_750_COLOR, + DENY_BUTTON_HOVERED_BG_COLOR = base_color.DARK_700_COLOR, + DENY_BUTTON_CLICKED_BG_COLOR = base_color.DARK_825_COLOR, + ), + + + config_window = SimpleNamespace( + # Common + BASIC_TEXT_COLOR = base_color.DARK_BASIC_TEXT_COLOR, + LABELS_TEXT_COLOR = base_color.DARK_BASIC_TEXT_COLOR, + LABELS_DESC_TEXT_COLOR = base_color.DARK_500_COLOR, + + LABELS_TEXT_DISABLED_COLOR = base_color.DARK_600_COLOR, + + + # Top bar + TOP_BAR_BG_COLOR = base_color.DARK_850_COLOR, + + # Restart Button + RESTART_BUTTON_BG_COLOR = base_color.PRIMARY_600_COLOR, + RESTART_BUTTON_HOVERED_BG_COLOR = base_color.PRIMARY_500_COLOR, + RESTART_BUTTON_CLICKED_BG_COLOR = base_color.PRIMARY_700_COLOR, + + + # Compact Mode + COMPACT_MODE_SWITCH_BOX_BG_COLOR = base_color.DARK_775_COLOR, + COMPACT_MODE_SWITCH_BOX_ACTIVE_BG_COLOR = base_color.PRIMARY_500_COLOR, + COMPACT_MODE_SWITCH_BOX_BUTTON_COLOR = base_color.DARK_350_COLOR, + COMPACT_MODE_SWITCH_BOX_BUTTON_HOVERED_COLOR = base_color.DARK_300_COLOR, + + # Main + MAIN_BG_COLOR = base_color.DARK_950_COLOR, + + # This is for fake border color + SB__WRAPPER_BG_COLOR = base_color.DARK_750_COLOR, + + SB__BG_COLOR = base_color.DARK_888_COLOR, + + SB__OPTIONMENU_BG_COLOR = base_color.DARK_925_COLOR, + SB__OPTIONMENU_HOVERED_BG_COLOR = base_color.DARK_850_COLOR, + SB__OPTIONMENU_CLICKED_BG_COLOR = base_color.DARK_950_COLOR, + SB__DROPDOWN_MENU_WINDOW_BG_COLOR = base_color.DARK_950_COLOR, + SB__DROPDOWN_MENU_WINDOW_BORDER_COLOR = base_color.DARK_600_COLOR, + SB__DROPDOWN_MENU_BG_COLOR = base_color.DARK_875_COLOR, + SB__DROPDOWN_MENU_HOVERED_BG_COLOR = base_color.DARK_800_COLOR, + SB__DROPDOWN_MENU_CLICKED_BG_COLOR = base_color.DARK_900_COLOR, + + SB__SLIDER_BG_COLOR = base_color.DARK_700_COLOR, + SB__SLIDER_PROGRESS_BG_COLOR = base_color.DARK_500_COLOR, + SB__SLIDER_BUTTON_COLOR = base_color.DARK_700_COLOR, + SB__SLIDER_BUTTON_HOVERED_COLOR = base_color.DARK_600_COLOR, + SB__SLIDER_TOOLTIP_BG_COLOR = base_color.DARK_850_COLOR, + SB__SLIDER_TOOLTIP_TEXT_COLOR = base_color.DARK_200_COLOR, + + SB__SWITCH_BOX_BG_COLOR = base_color.DARK_800_COLOR, + SB__SWITCH_BOX_ACTIVE_BG_COLOR = base_color.PRIMARY_500_COLOR, + SB__SWITCH_BOX_BUTTON_COLOR = base_color.DARK_400_COLOR, + SB__SWITCH_BOX_BUTTON_HOVERED_COLOR = base_color.DARK_350_COLOR, + + SB__CHECKBOX_BORDER_COLOR = base_color.DARK_600_COLOR, + SB__CHECKBOX_HOVER_COLOR = base_color.DARK_800_COLOR, + SB__CHECKBOX_CHECKED_COLOR = base_color.PRIMARY_700_COLOR, + SB__CHECKBOX_CHECKMARK_COLOR = base_color.DARK_BASIC_TEXT_COLOR, + + SB__ENTRY_TEXT_COLOR = base_color.DARK_300_COLOR, + SB__ENTRY_BG_COLOR = base_color.DARK_863_COLOR, + SB__ENTRY_BORDER_COLOR = base_color.DARK_775_COLOR, + + + SB__PROGRESSBAR_X_SLIDER__PROGRESSBAR_BG_COLOR = base_color.DARK_800_COLOR, + SB__PROGRESSBAR_X_SLIDER__PROGRESSBAR_PROGRESS_BG_COLOR = base_color.PRIMARY_750_COLOR, + SB__PROGRESSBAR_X_SLIDER__PROGRESSBAR_PROGRESS_EXCEED_THRESHOLD_BG_COLOR = base_color.PRIMARY_400_COLOR, + + SB__PROGRESSBAR_X_SLIDER__SLIDER_BUTTON_COLOR = base_color.PRIMARY_600_COLOR, + SB__PROGRESSBAR_X_SLIDER__SLIDER_BUTTON_HOVERED_COLOR = base_color.PRIMARY_400_COLOR, + + SB__PROGRESSBAR_X_SLIDER__PASSIVE_BUTTON_COLOR = base_color.DARK_800_COLOR, + SB__PROGRESSBAR_X_SLIDER__PASSIVE_BUTTON_HOVERED_COLOR = base_color.DARK_700_COLOR, + SB__PROGRESSBAR_X_SLIDER__PASSIVE_BUTTON_CLICKED_COLOR = base_color.DARK_900_COLOR, + SB__PROGRESSBAR_X_SLIDER__PASSIVE_BUTTON_DISABLED_COLOR = base_color.DARK_850_COLOR, + + SB__PROGRESSBAR_X_SLIDER__ACTIVE_BUTTON_COLOR = base_color.PRIMARY_600_COLOR, + SB__PROGRESSBAR_X_SLIDER__ACTIVE_BUTTON_HOVERED_COLOR = base_color.PRIMARY_500_COLOR, + SB__PROGRESSBAR_X_SLIDER__ACTIVE_BUTTON_CLICKED_COLOR = base_color.PRIMARY_800_COLOR, + + + SB__ARROW_SWITCH_BUTTON_COLOR = base_color.DARK_888_COLOR, + SB__ARROW_SWITCH_BUTTON_HOVERED_COLOR = base_color.DARK_800_COLOR, + SB__ARROW_SWITCH_BUTTON_CLICKED_COLOR = base_color.DARK_900_COLOR, + + SB__ADD_AND_DELETE_ABLE_LIST__ADD_BUTTON_COLOR = base_color.PRIMARY_600_COLOR, + SB__ADD_AND_DELETE_ABLE_LIST__ADD_BUTTON_HOVERED_COLOR = base_color.PRIMARY_500_COLOR, + SB__ADD_AND_DELETE_ABLE_LIST__ADD_BUTTON_CLICKED_COLOR = base_color.PRIMARY_700_COLOR, + SB__ADD_AND_DELETE_ABLE_LIST_BG_COLOR = base_color.DARK_800_COLOR, + + SB__ADD_AND_DELETE_ABLE_LIST__VALUES_ACTION_BUTTON_HOVERED_BG_COLOR = base_color.DARK_750_COLOR, + SB__ADD_AND_DELETE_ABLE_LIST__VALUES_ACTION_BUTTON_CLICKED_BG_COLOR = base_color.DARK_850_COLOR, + + SB__ADD_AND_DELETE_ABLE_LIST_DELETED_BG_COLOR = base_color.DARK_850_COLOR, + SB__ADD_AND_DELETE_ABLE_LIST__VALUES_DELETED_BUTTON_HOVERED_BG_COLOR = base_color.DARK_800_COLOR, + SB__ADD_AND_DELETE_ABLE_LIST__VALUES_DELETED_BUTTON_CLICKED_BG_COLOR = base_color.DARK_900_COLOR, + + + + # Side menu + SIDE_MENU_BG_COLOR = base_color.DARK_950_COLOR, + + SIDE_MENU_LABELS_BG_COLOR = base_color.DARK_950_COLOR, + SIDE_MENU_LABELS_BG_FOR_FAKE_BORDER_COLOR = base_color.DARK_950_COLOR, + SIDE_MENU_LABELS_HOVERED_BG_COLOR = base_color.DARK_850_COLOR, + SIDE_MENU_LABELS_CLICKED_BG_COLOR = base_color.PRIMARY_750_COLOR, + SIDE_MENU_LABELS_SELECTED_TEXT_COLOR = base_color.PRIMARY_200_COLOR, + + SIDE_MENU_SELECTED_MARK_ACTIVE_BG_COLOR = base_color.PRIMARY_500_COLOR, + + NOW_VERSION_TEXT_COLOR = base_color.DARK_300_COLOR, + + # Error Message Window for Config Window + # The color code [#bb4448] is a mixture of [#a9555c] and [#cc3333] (for a redder shade). + SB__ERROR_MESSAGE_BG_COLOR = "#bb4448", + SB__ERROR_MESSAGE_TEXT_COLOR = "#fff", + ), + + + + image_file = SimpleNamespace( + VRCT_LOGO = getImageFileFromUiUtils("vrct_logo_for_dark_mode.png"), + VRCT_LOGO_MARK = getImageFileFromUiUtils("vrct_logo_mark_white.png"), + + TRANSLATION_ICON = getImageFileFromUiUtils("translation_icon_white.png"), + TRANSLATION_ICON_DISABLED = getImageFileFromUiUtils("translation_icon_disabled.png"), + MIC_ICON = getImageFileFromUiUtils("mic_icon_white.png"), + MIC_ICON_DISABLED = getImageFileFromUiUtils("mic_icon_disabled.png"), + HEADPHONES_ICON = getImageFileFromUiUtils("headphones_icon_white.png"), + HEADPHONES_ICON_DISABLED = getImageFileFromUiUtils("headphones_icon_disabled.png"), + FOREGROUND_ICON = getImageFileFromUiUtils("foreground_icon_white.png"), + FOREGROUND_ICON_DISABLED = getImageFileFromUiUtils("foreground_icon_disabled.png"), + + NARROW_ARROW_DOWN = getImageFileFromUiUtils("narrow_arrow_down.png"), + + CONFIGURATION_ICON = getImageFileFromUiUtils("configuration_icon_white.png"), + CONFIGURATION_ICON_DISABLED = getImageFileFromUiUtils("configuration_icon_disabled.png"), + + ARROW_LEFT = getImageFileFromUiUtils("arrow_left_white.png"), + ARROW_LEFT_DISABLED = getImageFileFromUiUtils("arrow_left_disabled.png"), + + REFRESH_ICON = getImageFileFromUiUtils("refresh_icon.png"), + HELP_ICON = getImageFileFromUiUtils("help_icon_white.png"), + + CANCEL_ICON = getImageFileFromUiUtils("cancel_icon.png"), + REDO_ICON = getImageFileFromUiUtils("redo_white.png"), + ), + ) + + return theme_settings \ No newline at end of file diff --git a/vrct_gui/ui_managers/Themes/_lightTheme.py b/vrct_gui/ui_managers/Themes/_lightTheme.py new file mode 100644 index 00000000..d861711a --- /dev/null +++ b/vrct_gui/ui_managers/Themes/_lightTheme.py @@ -0,0 +1,47 @@ +from types import SimpleNamespace +from ...ui_utils import getImageFileFromUiUtils + +def _lightTheme(base_color): + theme_settings = SimpleNamespace( + main = SimpleNamespace( + # Common + BASIC_TEXT_COLOR = base_color.LIGHT_100_COLOR, + LABELS_TEXT_COLOR = base_color.LIGHT_100_COLOR, + + # Main + MAIN_BG_COLOR = base_color.DARK_888_COLOR, + ), + + config_window = SimpleNamespace( + # Common + BASIC_TEXT_COLOR = base_color.LIGHT_100_COLOR, + ), + + + image_file = SimpleNamespace( + VRCT_LOGO = getImageFileFromUiUtils("vrct_logo_for_light_mode.png"), + VRCT_LOGO_MARK = getImageFileFromUiUtils("vrct_logo_mark_black.png"), + + + TRANSLATION_ICON = getImageFileFromUiUtils("translation_icon_white.png"), + TRANSLATION_ICON_DISABLED = getImageFileFromUiUtils("translation_icon_disabled.png"), + MIC_ICON = getImageFileFromUiUtils("mic_icon_white.png"), + MIC_ICON_DISABLED = getImageFileFromUiUtils("mic_icon_disabled.png"), + HEADPHONES_ICON = getImageFileFromUiUtils("headphones_icon_white.png"), + HEADPHONES_ICON_DISABLED = getImageFileFromUiUtils("headphones_icon_disabled.png"), + FOREGROUND_ICON = getImageFileFromUiUtils("foreground_icon_white.png"), + FOREGROUND_ICON_DISABLED = getImageFileFromUiUtils("foreground_icon_disabled.png"), + + NARROW_ARROW_DOWN = getImageFileFromUiUtils("narrow_arrow_down.png"), + + CONFIGURATION_ICON = getImageFileFromUiUtils("configuration_icon_white.png"), + CONFIGURATION_ICON_DISABLED = getImageFileFromUiUtils("configuration_icon_disabled.png"), + + ARROW_LEFT = getImageFileFromUiUtils("arrow_left_white.png"), + ARROW_LEFT_DISABLED = getImageFileFromUiUtils("arrow_left_disabled.png"), + + HELP_ICON = getImageFileFromUiUtils("help_icon_white.png"), + ), + ) + + return theme_settings \ No newline at end of file diff --git a/vrct_gui/ui_managers/UiScalingManager.py b/vrct_gui/ui_managers/UiScalingManager.py index fae26c79..9a1ad1c2 100644 --- a/vrct_gui/ui_managers/UiScalingManager.py +++ b/vrct_gui/ui_managers/UiScalingManager.py @@ -217,6 +217,10 @@ class UiScalingManager(): self.config_window.SB__DESC_TOP_PADY = self._calculateUiSize(2) + self.config_window.BUTTONS_CORNER_RADIUS = self._calculateUiSize(6) + # self.config_window.BUTTONS_IPADX = self._calculateUiSize(10) + # self.config_window.BUTTONS_IPADY = self._calculateUiSize(6) + self.config_window.SB__ERROR_MESSAGE_IPADX = (self._calculateUiSize(10), self._calculateUiSize(10)) self.config_window.SB__ERROR_MESSAGE_IPADY = (self._calculateUiSize(6), self._calculateUiSize(6)) self.config_window.SB__ERROR_MESSAGE_FONT_SIZE = self._calculateUiSize(14) @@ -276,6 +280,28 @@ class UiScalingManager(): + self.config_window.SB__ARROW_SWITCH_BUTTON_IPADXY = self._calculateUiSize(16) + self.config_window.SB__ARROW_SWITCH_BUTTON_ICON_SIZE = self._calculateUiSize(24) + self.config_window.SB__ARROW_SWITCH_DESC_FONT_SIZE = self._calculateUiSize(16) + self.config_window.SB__ARROW_SWITCH_LEFT_PADX = (self._calculateUiSize(20), 0) + + self.config_window.ADD_AND_DELETE_ABLE_LIST__ADD_BUTTON_IPADX = self._calculateUiSize(16) + self.config_window.ADD_AND_DELETE_ABLE_LIST__ADD_BUTTON_IPADY = self._calculateUiSize(6) + + self.config_window.ADD_AND_DELETE_ABLE_LIST__VALUES_CORNER_RADIUS = self._calculateUiSize(2) + self.config_window.ADD_AND_DELETE_ABLE_LIST__VALUES_LEFT_PADX = (0, self._calculateUiSize(4)) + self.config_window.ADD_AND_DELETE_ABLE_LIST__VALUES_BOTTOM_PADY = (0, self._calculateUiSize(4)) + + self.config_window.ADD_AND_DELETE_ABLE_LIST__VALUES_TEXT_FONT_SIZE = self._calculateUiSize(14) + self.config_window.ADD_AND_DELETE_ABLE_LIST__VALUES_TEXT_IPADX = (self._calculateUiSize(8), 0) + self.config_window.ADD_AND_DELETE_ABLE_LIST__VALUES_TEXT_IPADY = self._calculateUiSize(6) + self.config_window.ADD_AND_DELETE_ABLE_LIST__VALUES_ACTION_BUTTON_IMG_SIZE = self._calculateUiSize(14) + self.config_window.ADD_AND_DELETE_ABLE_LIST__VALUES_ACTION_BUTTON_IPADXY = self._calculateUiSize(6) + self.config_window.ADD_AND_DELETE_ABLE_LIST__VALUES_ACTION_BUTTON_PADX = (self._calculateUiSize(6), self._calculateUiSize(8)) + + self.config_window.ADD_AND_DELETE_ABLE_LIST__ADD_BUTTON_LEFT_PADX = (self._calculateUiSize(20), 0) + self.config_window.ADD_AND_DELETE_ABLE_LIST__ADD_BUTTON_FONT_SIZE = self._calculateUiSize(14) + def _calculateUiSize(self, default_size, is_allowed_odd:bool=False, is_zero_allowed:bool=False): size = calculateUiSize(default_size, self.SCALING_FLOAT, is_allowed_odd, is_zero_allowed) return size diff --git a/vrct_gui/ui_managers/__init__.py b/vrct_gui/ui_managers/__init__.py index f0dd1edb..6304cb9e 100644 --- a/vrct_gui/ui_managers/__init__.py +++ b/vrct_gui/ui_managers/__init__.py @@ -1,3 +1,2 @@ from .ColorThemeManager import ColorThemeManager -from .ImageFileManager import ImageFileManager from .UiScalingManager import UiScalingManager \ No newline at end of file