diff --git a/controller.py b/controller.py index 47f15f66..d634edc2 100644 --- a/controller.py +++ b/controller.py @@ -885,6 +885,11 @@ def callbackSetEnableOverlaySmallLog(value): model.clearOverlayImage() model.shutdownOverlay() + if config.ENABLE_OVERLAY_SMALL_LOG is True: + view.setStateOverlaySmallLog("enabled") + elif config.ENABLE_OVERLAY_SMALL_LOG is False: + view.setStateOverlaySmallLog("disabled") + def callbackSetOverlaySmallLogSettings(value, set_type:str): print("callbackSetOverlaySmallLogSettings", value, set_type) pre_settings = config.OVERLAY_SMALL_LOG_SETTINGS @@ -934,8 +939,10 @@ def callbackSetEnableVrcMicMuteSync(value): config.ENABLE_VRC_MIC_MUTE_SYNC = value if config.ENABLE_VRC_MIC_MUTE_SYNC is True: model.startCheckMuteSelfStatus() + view.setStateVrcMicMuteSync("enabled") else: model.stopCheckMuteSelfStatus() + view.setStateVrcMicMuteSync("disabled") def callbackSetEnableSendMessageToVrc(value): diff --git a/locales/en.yml b/locales/en.yml index 82571147..34c63e00 100644 --- a/locales/en.yml +++ b/locales/en.yml @@ -18,7 +18,7 @@ main_window: textbox_tab_system: System textbox_system_message: - enabled_easter_egg: Whoa! You caught us! There is something...like...easter-egg-ish function has enabled! + enabled_easter_egg: Whoa! You caught us! There is something...like...easter-egg-ish function has enabled! It'll affect to Overlay(VR) for now;). enabled_translation: Translation feature is turned on. disabled_translation: Translation feature is turned off. enabled_voice2chatbox: Transcription from the microphone has started. @@ -46,6 +46,8 @@ main_window: opened_web_page_vrct_documents: "Opened VRCT Documents page in your web browser.\nFor any issues, requests, or inquiries, please feel free to contact us through the links at the bottom of the documents page, the \"Contact Form,\" or via X (formerly Twitter)!" update_available: New version is here! + state_text_enabled: Enabled + state_text_disabled: Disabled cover_message: The functionality is temporarily disabled until the settings window is closed. @@ -244,8 +246,8 @@ config_window: desc: Automatically export the conversation messages as a text file. vrc_mic_mute_sync: - label: VRChat Mic Mute Sync - desc: VRCT will not send the message to VRChat while VRChat's mic is muted. + label: VRC Mic Mute Sync + desc: "VRCT will not send the message to VRChat while VRChat's mic is muted.\n*There is a bit latency and Push-To-Talk is not supported." send_message_to_vrc: label: Send Message To VRChat diff --git a/locales/ja.yml b/locales/ja.yml index 893470d6..8376fce0 100644 --- a/locales/ja.yml +++ b/locales/ja.yml @@ -45,6 +45,8 @@ main_window: opened_web_page_vrct_documents: "お使いのブラウザで、VRCTのドキュメントを開きました。使用方法などはそちらに記載されています。\n不具合、ご要望、その他お問い合わせはドキュメント最下部にあるLinks、「お問合せフォーム」もしくはX (元Twitter) にて気軽にご連絡ください!" update_available: 新しいバージョンが出ました! + state_text_enabled: 有効 + state_text_disabled: 無効 cover_message: 設定画面が閉じられるまで、一時的に機能を停止しています。 @@ -243,8 +245,8 @@ config_window: desc: テキストファイルとしてログがlogsフォルダ内に保存されます。 vrc_mic_mute_sync: - label: VRChatマイクミュート同期機能 - desc: VRChatのマイクがミュートされている間は、メッセージをVRChatに送信しません。 + label: VRCマイクミュート同期 + desc: "VRChatのマイクがミュートされている間は、メッセージをVRChatに送信しません。\n※若干の遅延はあります。また、Push-To-Talkは非対応です。" send_message_to_vrc: diff --git a/view.py b/view.py index b1b8b730..939e000a 100644 --- a/view.py +++ b/view.py @@ -140,10 +140,16 @@ class View(): # Overlay Settings - VAR_OVERLAY_SETTINGS=StringVar(value="Overlay Settings"), + VAR_OVERLAY_SETTINGS=StringVar(value="Overlay (VR)"), CALLBACK_SET_OPEN_OVERLAY_SETTINGS_WINDOW=self._openVrSettingsWindow, VAR_TO_DEFAULT_OVERLAY_SETTINGS=StringVar(value=i18n.t("overlay_settings.restore_default_settings")), CALLBACK_SET_TO_DEFAULT_OVERLAY_SETTINGS=self._toDefaultOverlaySettings, + VAR_OVERLAY_SMALL_LOG_STATE=StringVar(value=""), + + + CALLBACK_SET_OPEN_VRC_MIC_MUTE_SYNC_SETTINGS_WINDOW=self._openVrcMicMuteSyncSettingsWindow, + VAR_VRC_MIC_MUTE_SYNC_SETTINGS=StringVar(value=i18n.t("config_window.vrc_mic_mute_sync.label")), + VAR_VRC_MIC_MUTE_SYNC_STATE=StringVar(value=""), VAR_LABEL_OVERLAY_OPACITY=StringVar(value=i18n.t("overlay_settings.opacity")), @@ -808,6 +814,18 @@ class View(): self.view_variable.VAR_LABEL_BOTH_DIRECTION_SWAP_BUTTON.set(i18n.t("main_window.swap_button_label")) self.useTranslationFeatureProcess("Disable") + + if config.ENABLE_VRC_MIC_MUTE_SYNC is True: + self.setStateVrcMicMuteSync("enabled") + elif config.ENABLE_VRC_MIC_MUTE_SYNC is False: + self.setStateVrcMicMuteSync("disabled") + + if config.ENABLE_OVERLAY_SMALL_LOG is True: + self.setStateOverlaySmallLog("enabled") + elif config.ENABLE_OVERLAY_SMALL_LOG is False: + self.setStateOverlaySmallLog("disabled") + + if config.CHOICE_MIC_HOST == "NoHost": self.view_variable.VAR_MIC_HOST.set("No Mic Host Detected") @@ -1281,6 +1299,26 @@ class View(): dropdown_menu_values=translation_dict, ) + def setStateVrcMicMuteSync(self, state:str): + if state == "enabled": + self.view_variable.VAR_VRC_MIC_MUTE_SYNC_STATE.set(i18n.t("main_window.state_text_enabled")) + vrct_gui.vrc_mic_mute_sync_settings_state_label.configure(text_color=self.settings.main.ctm.TOP_BAR_BUTTON_STATE_TEXT_ENABLED_COLOR) + elif state == "disabled": + self.view_variable.VAR_VRC_MIC_MUTE_SYNC_STATE.set(i18n.t("main_window.state_text_disabled")) + vrct_gui.vrc_mic_mute_sync_settings_state_label.configure(text_color=self.settings.main.ctm.TOP_BAR_BUTTON_STATE_TEXT_DISABLED_COLOR) + + vrct_gui.config_window.after(200, vrct_gui.config_window.lift) + + def setStateOverlaySmallLog(self, state:str): + if state == "enabled": + self.view_variable.VAR_OVERLAY_SMALL_LOG_STATE.set(i18n.t("main_window.state_text_enabled")) + vrct_gui.overlay_settings_state_label.configure(text_color=self.settings.main.ctm.TOP_BAR_BUTTON_STATE_TEXT_ENABLED_COLOR) + elif state == "disabled": + self.view_variable.VAR_OVERLAY_SMALL_LOG_STATE.set(i18n.t("main_window.state_text_disabled")) + vrct_gui.overlay_settings_state_label.configure(text_color=self.settings.main.ctm.TOP_BAR_BUTTON_STATE_TEXT_DISABLED_COLOR) + + vrct_gui.config_window.after(200, vrct_gui.config_window.lift) + # Config Window def enableConfigWindowCompactMode(self): @@ -1741,7 +1779,10 @@ class View(): vrct_gui._closeConfigWindow() def _openVrSettingsWindow(self): - vrct_gui.quick_settings_window.show() + vrct_gui.quick_settings_window.show(target="overlay") + + def _openVrcMicMuteSyncSettingsWindow(self): + vrct_gui.quick_settings_window.show(target="vrc_mic_mute_sync") # Window Control (Main Window Cover) def _openTheCoverOfMainWindow(self): diff --git a/vrct_gui/main_window/createMainWindowWidgets.py b/vrct_gui/main_window/createMainWindowWidgets.py index 447dfb1d..3fb7d105 100644 --- a/vrct_gui/main_window/createMainWindowWidgets.py +++ b/vrct_gui/main_window/createMainWindowWidgets.py @@ -48,6 +48,61 @@ def createMainWindowWidgets(vrct_gui, settings, view_variable): # start from 3 main_topbar_column=3 + # VRChat Mic Mute Sync Settings Button + vrct_gui.vrc_mic_mute_sync_settings_container = CTkFrame( + vrct_gui.main_topbar_container, + corner_radius=settings.uism.UPDATE_AVAILABLE_BUTTON_CORNER_RADIUS, + fg_color=settings.ctm.MAIN_BG_COLOR, + cursor="hand2", + ) + vrct_gui.vrc_mic_mute_sync_settings_container.grid(row=0, column=main_topbar_column, padx=settings.uism.UPDATE_AVAILABLE_BUTTON_PADX, pady=settings.uism.TOP_BAR_BUTTON_PADY, sticky="nsw") + vrct_gui.vrc_mic_mute_sync_settings_container.grid_rowconfigure((0,3), weight=1) + + vrct_gui.vrc_mic_mute_sync_settings_label = CTkLabel( + vrct_gui.vrc_mic_mute_sync_settings_container, + textvariable=view_variable.VAR_VRC_MIC_MUTE_SYNC_SETTINGS, + height=0, + corner_radius=0, + font=CTkFont(family=settings.FONT_FAMILY, size=settings.uism.QUICK_SETTINGS_BUTTON_FONT_SIZE, weight="normal"), + anchor="e", + text_color=settings.ctm.TOP_BAR_BUTTON_TEXT_COLOR, + # text_color=settings.ctm.UPDATE_AVAILABLE_BUTTON_TEXT_COLOR, + ) + # This "right padx +1" is for fixing a bug that sticks out from the frame. I don't know why that happens... + vrct_gui.vrc_mic_mute_sync_settings_label.grid(row=1, column=1, padx=(0,settings.uism.UPDATE_AVAILABLE_BUTTON_IPADX+1), pady=0) + + + vrct_gui.vrc_mic_mute_sync_settings_state_label = CTkLabel( + vrct_gui.vrc_mic_mute_sync_settings_container, + textvariable=view_variable.VAR_VRC_MIC_MUTE_SYNC_STATE, + height=0, + corner_radius=0, + font=CTkFont(family=settings.FONT_FAMILY, size=settings.uism.QUICK_SETTINGS_BUTTON_STATE_FONT_SIZE, weight="normal"), + anchor="e", + text_color=settings.ctm.TOP_BAR_BUTTON_TEXT_COLOR, + # text_color=settings.ctm.UPDATE_AVAILABLE_BUTTON_TEXT_COLOR, + ) + # This "right padx +1" is for fixing a bug that sticks out from the frame. I don't know why that happens... + vrct_gui.vrc_mic_mute_sync_settings_state_label.grid(row=2, column=1, padx=(0,settings.uism.UPDATE_AVAILABLE_BUTTON_IPADX+1), pady=0) + + + bindButtonFunctionAndColor( + target_widgets=[ + vrct_gui.vrc_mic_mute_sync_settings_container, + vrct_gui.vrc_mic_mute_sync_settings_label, + vrct_gui.vrc_mic_mute_sync_settings_state_label, + ], + enter_color=settings.ctm.TOP_BAR_BUTTON_HOVERED_BG_COLOR, + leave_color=settings.ctm.TOP_BAR_BUTTON_BG_COLOR, + clicked_color=settings.ctm.TOP_BAR_BUTTON_CLICKED_BG_COLOR, + buttonReleasedFunction=lambda e: callFunctionIfCallable(view_variable.CALLBACK_SET_OPEN_VRC_MIC_MUTE_SYNC_SETTINGS_WINDOW), + ) + + + + + + main_topbar_column+=1 # Overlay Settings Button vrct_gui.overlay_settings_container = CTkFrame( vrct_gui.main_topbar_container, @@ -56,27 +111,14 @@ def createMainWindowWidgets(vrct_gui, settings, view_variable): cursor="hand2", ) vrct_gui.overlay_settings_container.grid(row=0, column=main_topbar_column, padx=settings.uism.UPDATE_AVAILABLE_BUTTON_PADX, pady=settings.uism.TOP_BAR_BUTTON_PADY, sticky="nsw") - # vrct_gui.overlay_settings_container.grid_remove() - - - vrct_gui.overlay_settings_container.grid_rowconfigure((0,2), weight=1) - - vrct_gui.overlay_settings_icon = CTkLabel( - vrct_gui.overlay_settings_container, - text=None, - corner_radius=0, - height=0, - image=CTkImage(settings.image_file.CONFIGURATION_ICON_DISABLED, size=settings.uism.UPDATE_AVAILABLE_BUTTON_SIZE) - ) - vrct_gui.overlay_settings_icon.grid(row=1, column=0, padx=(settings.uism.UPDATE_AVAILABLE_BUTTON_IPADX, settings.uism.UPDATE_AVAILABLE_PADX_BETWEEN_LABEL_AND_ICON), pady=0) - + vrct_gui.overlay_settings_container.grid_rowconfigure((0,3), weight=1) vrct_gui.overlay_settings_label = CTkLabel( vrct_gui.overlay_settings_container, textvariable=view_variable.VAR_OVERLAY_SETTINGS, height=0, corner_radius=0, - font=CTkFont(family=settings.FONT_FAMILY, size=settings.uism.UPDATE_AVAILABLE_BUTTON_FONT_SIZE, weight="normal"), + font=CTkFont(family=settings.FONT_FAMILY, size=settings.uism.QUICK_SETTINGS_BUTTON_FONT_SIZE, weight="normal"), anchor="e", text_color=settings.ctm.TOP_BAR_BUTTON_TEXT_COLOR, # text_color=settings.ctm.UPDATE_AVAILABLE_BUTTON_TEXT_COLOR, @@ -85,11 +127,24 @@ def createMainWindowWidgets(vrct_gui, settings, view_variable): vrct_gui.overlay_settings_label.grid(row=1, column=1, padx=(0,settings.uism.UPDATE_AVAILABLE_BUTTON_IPADX+1), pady=0) + vrct_gui.overlay_settings_state_label = CTkLabel( + vrct_gui.overlay_settings_container, + textvariable=view_variable.VAR_OVERLAY_SMALL_LOG_STATE, + height=0, + corner_radius=0, + font=CTkFont(family=settings.FONT_FAMILY, size=settings.uism.QUICK_SETTINGS_BUTTON_STATE_FONT_SIZE, weight="normal"), + anchor="e", + text_color=settings.ctm.TOP_BAR_BUTTON_TEXT_COLOR, + ) + # This "right padx +1" is for fixing a bug that sticks out from the frame. I don't know why that happens... + vrct_gui.overlay_settings_state_label.grid(row=2, column=1, padx=(0,settings.uism.UPDATE_AVAILABLE_BUTTON_IPADX+1), pady=0) + + bindButtonFunctionAndColor( target_widgets=[ vrct_gui.overlay_settings_container, vrct_gui.overlay_settings_label, - vrct_gui.overlay_settings_icon, + vrct_gui.overlay_settings_state_label, ], enter_color=settings.ctm.TOP_BAR_BUTTON_HOVERED_BG_COLOR, leave_color=settings.ctm.TOP_BAR_BUTTON_BG_COLOR, diff --git a/vrct_gui/quick_settings_window/QuickSettingsWindow.py b/vrct_gui/quick_settings_window/QuickSettingsWindow.py index 0d294b8e..4c2bb266 100644 --- a/vrct_gui/quick_settings_window/QuickSettingsWindow.py +++ b/vrct_gui/quick_settings_window/QuickSettingsWindow.py @@ -20,18 +20,21 @@ class QuickSettingsWindow(CTkToplevel): BG_HEX_COLOR = "#292a2d" - self.grid_columnconfigure(0, weight=1, minsize=400) - self.grid_rowconfigure(0, weight=1) self.qsw_background = CTkFrame(self, corner_radius=0, fg_color=self.settings.ctm.SB__BG_COLOR) - self.qsw_background.grid(row=0, column=0, pady=(0,18), sticky="nsew") - self.qsw_background.grid_columnconfigure(0, weight=1) - - self.qsw_setting_box = CTkFrame(self.qsw_background, corner_radius=0, fg_color=BG_HEX_COLOR) - self.qsw_setting_box.grid(row=0, column=0, sticky="nsew") - self.qsw_setting_box.grid_columnconfigure(0, weight=1) + self.qsw_background.grid(row=0, column=0, pady=0, sticky="ew") + self.qsw_background.grid_columnconfigure(0, weight=1, minsize=400) - cqsb = _CreateQuickSettingBox(self.qsw_setting_box, vrct_gui, settings, view_variable) + self.qsw_background__overlay = CTkFrame(self.qsw_background, corner_radius=0, fg_color=self.settings.ctm.SB__BG_COLOR) + self.qsw_background__overlay.grid(row=0, column=0, pady=(0,18), sticky="ew") + self.qsw_background__overlay.grid_columnconfigure(0, weight=1) + + + self.qsw_setting_box__overlay = CTkFrame(self.qsw_background__overlay, corner_radius=0, fg_color=BG_HEX_COLOR) + self.qsw_setting_box__overlay.grid(row=0, column=0, sticky="ew") + self.qsw_setting_box__overlay.grid_columnconfigure(0, weight=1) + + cqsb = _CreateQuickSettingBox(self.qsw_setting_box__overlay, vrct_gui, settings, view_variable) createSettingBoxSlider = cqsb.createSettingBoxSlider createSettingBoxSwitch = cqsb.createSettingBoxSwitch @@ -41,20 +44,20 @@ class QuickSettingsWindow(CTkToplevel): # Overlay General Settings row=0 - def switchCallback(switch_widget): + def overlaySmallLogSwitchCallback(switch_widget): callFunctionIfCallable(view_variable.CALLBACK_SET_ENABLE_OVERLAY_SMALL_LOG, switch_widget.get()) self.qsb__enable_overlay_small_log = createSettingBoxSwitch( for_var_label_text=view_variable.VAR_LABEL_ENABLE_OVERLAY_SMALL_LOG, switch_attr_name="qsb__enable_overlay_small_log_switch", - command=lambda: switchCallback(vrct_gui.qsb__enable_overlay_small_log_switch), + command=lambda: overlaySmallLogSwitchCallback(vrct_gui.qsb__enable_overlay_small_log_switch), variable=view_variable.VAR_ENABLE_OVERLAY_SMALL_LOG, ) self.qsb__enable_overlay_small_log.grid(row=row) row+=1 - def sliderCallback(e): + def overlayOpacitySliderCallback(e): value = round(e,2) callFunctionIfCallable(view_variable.CALLBACK_SET_OVERLAY_SETTINGS, value, "opacity") view_variable.VAR_CURRENT_VALUE_OVERLAY_OPACITY.set(floatToPctStr(value)) @@ -65,14 +68,14 @@ class QuickSettingsWindow(CTkToplevel): slider_attr_name="qsb__overlay_opacity_slider", slider_range=view_variable.SLIDER_RANGE_OVERLAY_OPACITY, slider_number_of_steps=view_variable.NUMBER_OF_STEPS_OVERLAY_OPACITY, - command=sliderCallback, + command=overlayOpacitySliderCallback, variable=view_variable.VAR_OVERLAY_OPACITY, ) self.qsb__overlay_opacity.grid(row=row) row+=1 - def sliderCallback(e): + def overlayUiScalingSliderCallback(e): value = round(e,2) callFunctionIfCallable(view_variable.CALLBACK_SET_OVERLAY_SETTINGS, value, "ui_scaling") view_variable.VAR_CURRENT_VALUE_OVERLAY_UI_SCALING.set(floatToPctStr(value)) @@ -83,7 +86,7 @@ class QuickSettingsWindow(CTkToplevel): slider_attr_name="qsb__overlay_ui_scaling_slider", slider_range=view_variable.SLIDER_RANGE_OVERLAY_UI_SCALING, slider_number_of_steps=view_variable.NUMBER_OF_STEPS_OVERLAY_UI_SCALING, - command=sliderCallback, + command=overlayUiScalingSliderCallback, variable=view_variable.VAR_OVERLAY_UI_SCALING, ) self.qsb__overlay_ui_scaling.grid(row=row) @@ -107,7 +110,7 @@ class QuickSettingsWindow(CTkToplevel): row+=1 - def sliderCallback(e): + def overlaySmallLogSettingsXPosSliderCallback(e): value = round(e,2) callFunctionIfCallable(view_variable.CALLBACK_SET_OVERLAY_SMALL_LOG_SETTINGS, value, "x_pos") view_variable.VAR_CURRENT_VALUE_OVERLAY_SMALL_LOG_X_POS.set(str(value)) @@ -118,14 +121,14 @@ class QuickSettingsWindow(CTkToplevel): slider_attr_name="qsb__overlay_small_log_settings_x_pos_slider", slider_range=view_variable.SLIDER_RANGE_OVERLAY_SMALL_LOG_X_POS, slider_number_of_steps=view_variable.NUMBER_OF_STEPS_OVERLAY_SMALL_LOG_X_POS, - command=sliderCallback, + command=overlaySmallLogSettingsXPosSliderCallback, variable=view_variable.VAR_OVERLAY_SMALL_LOG_X_POS, ) self.qsb__overlay_small_log_settings_x_pos.grid(row=row) row+=1 - def sliderCallback(e): + def overlaySmallLogSettingsYPosSliderCallback(e): value = round(e,2) callFunctionIfCallable(view_variable.CALLBACK_SET_OVERLAY_SMALL_LOG_SETTINGS, value, "y_pos") view_variable.VAR_CURRENT_VALUE_OVERLAY_SMALL_LOG_Y_POS.set(str(value)) @@ -136,14 +139,14 @@ class QuickSettingsWindow(CTkToplevel): slider_attr_name="qsb__overlay_small_log_settings_y_pos_slider", slider_range=view_variable.SLIDER_RANGE_OVERLAY_SMALL_LOG_Y_POS, slider_number_of_steps=view_variable.NUMBER_OF_STEPS_OVERLAY_SMALL_LOG_Y_POS, - command=sliderCallback, + command=overlaySmallLogSettingsYPosSliderCallback, variable=view_variable.VAR_OVERLAY_SMALL_LOG_Y_POS, ) self.qsb__overlay_small_log_settings_y_pos.grid(row=row) row+=1 - def sliderCallback(e): + def overlaySmallLogSettingsDepthSliderCallback(e): value = round(e,2) callFunctionIfCallable(view_variable.CALLBACK_SET_OVERLAY_SMALL_LOG_SETTINGS, value, "depth") view_variable.VAR_CURRENT_VALUE_OVERLAY_SMALL_LOG_DEPTH.set(str(value)) @@ -154,14 +157,14 @@ class QuickSettingsWindow(CTkToplevel): slider_attr_name="qsb__overlay_small_log_settings_depth_slider", slider_range=view_variable.SLIDER_RANGE_OVERLAY_SMALL_LOG_DEPTH, slider_number_of_steps=view_variable.NUMBER_OF_STEPS_OVERLAY_SMALL_LOG_DEPTH, - command=sliderCallback, + command=overlaySmallLogSettingsDepthSliderCallback, variable=view_variable.VAR_OVERLAY_SMALL_LOG_DEPTH, ) self.qsb__overlay_small_log_settings_depth.grid(row=row) row+=1 - def sliderCallback(e): + def overlaySmallLogSettingsDisplayDurationSliderCallback(e): value = int(e) callFunctionIfCallable(view_variable.CALLBACK_SET_OVERLAY_SMALL_LOG_SETTINGS, value, "display_duration") view_variable.VAR_CURRENT_VALUE_OVERLAY_SMALL_LOG_DISPLAY_DURATION.set(f"{value} second(s)") @@ -172,7 +175,7 @@ class QuickSettingsWindow(CTkToplevel): slider_attr_name="qsb__overlay_small_log_settings_display_duration_slider", slider_range=view_variable.SLIDER_RANGE_OVERLAY_SMALL_LOG_DISPLAY_DURATION, slider_number_of_steps=view_variable.NUMBER_OF_STEPS_OVERLAY_SMALL_LOG_DISPLAY_DURATION, - command=sliderCallback, + command=overlaySmallLogSettingsDisplayDurationSliderCallback, variable=view_variable.VAR_OVERLAY_SMALL_LOG_DISPLAY_DURATION, ) self.qsb__overlay_small_log_settings_display_duration.grid(row=row) @@ -180,7 +183,7 @@ class QuickSettingsWindow(CTkToplevel): row+=1 - def sliderCallback(e): + def overlaySmallLogSettingsFadeoutDurationSliderCallback(e): value = int(e) callFunctionIfCallable(view_variable.CALLBACK_SET_OVERLAY_SMALL_LOG_SETTINGS, value, "fadeout_duration") view_variable.VAR_CURRENT_VALUE_OVERLAY_SMALL_LOG_FADEOUT_DURATION.set(f"{value} second(s)") @@ -191,7 +194,7 @@ class QuickSettingsWindow(CTkToplevel): slider_attr_name="qsb__overlay_small_log_settings_fadeout_duration_slider", slider_range=view_variable.SLIDER_RANGE_OVERLAY_SMALL_LOG_FADEOUT_DURATION, slider_number_of_steps=view_variable.NUMBER_OF_STEPS_OVERLAY_SMALL_LOG_FADEOUT_DURATION, - command=sliderCallback, + command=overlaySmallLogSettingsFadeoutDurationSliderCallback, variable=view_variable.VAR_OVERLAY_SMALL_LOG_FADEOUT_DURATION, ) self.qsb__overlay_small_log_settings_fadeout_duration.grid(row=row) @@ -204,7 +207,7 @@ class QuickSettingsWindow(CTkToplevel): - self.qsw_setting_box_bottom = CTkFrame(self.qsw_background, corner_radius=0, fg_color=self.settings.ctm.SB__BG_COLOR) + self.qsw_setting_box_bottom = CTkFrame(self.qsw_background__overlay, corner_radius=0, fg_color=self.settings.ctm.SB__BG_COLOR) self.qsw_setting_box_bottom.grid(row=1, column=0, sticky="nsew") self.qsw_setting_box_bottom.grid_columnconfigure((0,2), weight=1) @@ -236,9 +239,80 @@ class QuickSettingsWindow(CTkToplevel): ) restore_default_settings_button.grid(row=0, column=0, pady=self.settings.uism.QSB__RESTORE_DEFAULT_SETTINGS_BUTTON_PADY) + self.qsw_background__overlay.grid_remove() + + + + + + + + + + + + + + + # VRChat mic mute sync + self.qsw_background__vrc_mic_mute_sync = CTkFrame(self.qsw_background, corner_radius=0, fg_color=self.settings.ctm.SB__BG_COLOR) + self.qsw_background__vrc_mic_mute_sync.grid(row=0, column=0, pady=(0,18), sticky="ew") + self.qsw_background__vrc_mic_mute_sync.grid_columnconfigure(0, weight=1) + + + self.qsw_setting_box__vrc_mic_mute_sync = CTkFrame(self.qsw_background__vrc_mic_mute_sync, corner_radius=0, fg_color=BG_HEX_COLOR) + self.qsw_setting_box__vrc_mic_mute_sync.grid(row=0, column=0, sticky="ew") + self.qsw_setting_box__vrc_mic_mute_sync.grid_columnconfigure(0, weight=1) + + + + + + + + + + cqsb = _CreateQuickSettingBox(self.qsw_setting_box__vrc_mic_mute_sync, vrct_gui, settings, view_variable) + createSettingBoxSlider = cqsb.createSettingBoxSlider + createSettingBoxSwitch = cqsb.createSettingBoxSwitch + + + row=0 + def enableVrcMicMuteSyncSwitchCallback(switch_widget): + callFunctionIfCallable(view_variable.CALLBACK_SET_ENABLE_VRC_MIC_MUTE_SYNC, switch_widget.get()) + + self.qsb__enable_vrc_mic_mute_sync = createSettingBoxSwitch( + for_var_label_text=view_variable.VAR_LABEL_ENABLE_VRC_MIC_MUTE_SYNC, + switch_attr_name="qsb__enable_vrc_mic_mute_sync_switch", + command=lambda: enableVrcMicMuteSyncSwitchCallback(vrct_gui.qsb__enable_vrc_mic_mute_sync_switch), + variable=view_variable.VAR_ENABLE_VRC_MIC_MUTE_SYNC, + ) + self.qsb__enable_vrc_mic_mute_sync.grid(row=row) + + + self.qsw_background__vrc_mic_mute_sync.grid_remove() + + + + + + + + def show(self, target:str): + if target == "overlay": + self.qsw_background__vrc_mic_mute_sync.grid_remove() + self.qsw_background__overlay.grid() + elif target == "vrc_mic_mute_sync": + self.qsw_background__overlay.grid_remove() + self.qsw_background__vrc_mic_mute_sync.grid() - def show(self): self.attributes("-alpha", 0) self.deiconify() + + self.qsw_background.update() + self.geometry("{}x{}".format(self.qsw_background.winfo_width(), self.qsw_background.winfo_height())) + + + setGeometryToCenterOfScreen(root_widget=self) fadeInAnimation(self, steps=5, interval=0.02) \ No newline at end of file diff --git a/vrct_gui/ui_managers/Themes/_darkTheme.py b/vrct_gui/ui_managers/Themes/_darkTheme.py index c90a8e5f..ed46a557 100644 --- a/vrct_gui/ui_managers/Themes/_darkTheme.py +++ b/vrct_gui/ui_managers/Themes/_darkTheme.py @@ -111,6 +111,8 @@ def _darkTheme(base_color): TOP_BAR_BUTTON_HOVERED_BG_COLOR = base_color.DARK_850_COLOR, TOP_BAR_BUTTON_CLICKED_BG_COLOR = base_color.DARK_900_COLOR, TOP_BAR_BUTTON_TEXT_COLOR = base_color.DARK_BASIC_TEXT_COLOR, + TOP_BAR_BUTTON_STATE_TEXT_ENABLED_COLOR = base_color.PRIMARY_300_COLOR, + TOP_BAR_BUTTON_STATE_TEXT_DISABLED_COLOR = base_color.DARK_600_COLOR, UPDATE_AVAILABLE_BUTTON_BG_COLOR = base_color.DARK_888_COLOR, UPDATE_AVAILABLE_BUTTON_HOVERED_BG_COLOR = base_color.DARK_850_COLOR, diff --git a/vrct_gui/ui_managers/Themes/_lightTheme.py b/vrct_gui/ui_managers/Themes/_lightTheme.py index 503be63a..b4e2d96d 100644 --- a/vrct_gui/ui_managers/Themes/_lightTheme.py +++ b/vrct_gui/ui_managers/Themes/_lightTheme.py @@ -111,6 +111,8 @@ def _lightTheme(base_color): TOP_BAR_BUTTON_HOVERED_BG_COLOR = base_color.LIGHT_300_COLOR, TOP_BAR_BUTTON_CLICKED_BG_COLOR = base_color.LIGHT_350_COLOR, TOP_BAR_BUTTON_TEXT_COLOR = base_color.LIGHT_BASIC_TEXT_COLOR, + TOP_BAR_BUTTON_STATE_TEXT_ENABLED_COLOR = base_color.PRIMARY_400_COLOR, + TOP_BAR_BUTTON_STATE_TEXT_DISABLED_COLOR = base_color.LIGHT_600_COLOR, UPDATE_AVAILABLE_BUTTON_TEXT_COLOR = base_color.PRIMARY_400_COLOR, ), diff --git a/vrct_gui/ui_managers/UiScalingManager.py b/vrct_gui/ui_managers/UiScalingManager.py index b7e5f5e3..2c081c2c 100644 --- a/vrct_gui/ui_managers/UiScalingManager.py +++ b/vrct_gui/ui_managers/UiScalingManager.py @@ -123,6 +123,13 @@ class UiScalingManager(): self.main.TOP_BAR_BUTTON_PADY = (self._calculateUiSize(6),0) + + + + self.main.QUICK_SETTINGS_BUTTON_FONT_SIZE = self._calculateUiSize(12) + self.main.QUICK_SETTINGS_BUTTON_STATE_FONT_SIZE = self._calculateUiSize(10) + + self.main.UPDATE_AVAILABLE_BUTTON_CORNER_RADIUS = self._calculateUiSize(6) self.main.UPDATE_AVAILABLE_BUTTON_SIZE = (self._calculateUiSize(18), self._calculateUiSize(18)) self.main.UPDATE_AVAILABLE_BUTTON_FONT_SIZE = self._calculateUiSize(12)