From d1f4688b5c061bfbd99f1c993923905fe65f6fb3 Mon Sep 17 00:00:00 2001 From: Sakamoto Shiina <68018796+ShiinaSakamoto@users.noreply.github.com> Date: Thu, 9 May 2024 06:29:47 +0900 Subject: [PATCH 1/5] [Update] Main Window: Add VRC Mic Mute Sync quick settings. and the place where above on textbox is now show the state which whether it's enabled or disabled. --- controller.py | 7 + view.py | 41 +++++- .../main_window/createMainWindowWidgets.py | 87 +++++++++--- .../QuickSettingsWindow.py | 128 ++++++++++++++---- vrct_gui/ui_managers/Themes/_darkTheme.py | 2 + vrct_gui/ui_managers/UiScalingManager.py | 7 + 6 files changed, 227 insertions(+), 45 deletions(-) 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/view.py b/view.py index b1b8b730..3195dd57 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="VRC Mic Mute Sync"), + 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,22 @@ 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("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("Disabled") + vrct_gui.vrc_mic_mute_sync_settings_state_label.configure(text_color=self.settings.main.ctm.TOP_BAR_BUTTON_STATE_TEXT_DISABLED_COLOR) + + def setStateOverlaySmallLog(self, state:str): + if state == "enabled": + self.view_variable.VAR_OVERLAY_SMALL_LOG_STATE.set("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("Disabled") + vrct_gui.overlay_settings_state_label.configure(text_color=self.settings.main.ctm.TOP_BAR_BUTTON_STATE_TEXT_DISABLED_COLOR) + # Config Window def enableConfigWindowCompactMode(self): @@ -1741,7 +1775,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/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) From 37cab3fe3c35e65e3ca68116d4e83fafffe3abe3 Mon Sep 17 00:00:00 2001 From: Sakamoto Shiina <68018796+ShiinaSakamoto@users.noreply.github.com> Date: Thu, 9 May 2024 06:43:08 +0900 Subject: [PATCH 2/5] [Update] Main Window: VRC Mic Mute Sync, Overlay. Quick Settings. add Japanese and light theme. --- locales/en.yml | 2 ++ locales/ja.yml | 2 ++ view.py | 8 ++++---- vrct_gui/ui_managers/Themes/_lightTheme.py | 2 ++ 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/locales/en.yml b/locales/en.yml index 82571147..d8fe3597 100644 --- a/locales/en.yml +++ b/locales/en.yml @@ -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. diff --git a/locales/ja.yml b/locales/ja.yml index 893470d6..1d8ca719 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: 設定画面が閉じられるまで、一時的に機能を停止しています。 diff --git a/view.py b/view.py index 3195dd57..49234703 100644 --- a/view.py +++ b/view.py @@ -1301,18 +1301,18 @@ class View(): def setStateVrcMicMuteSync(self, state:str): if state == "enabled": - self.view_variable.VAR_VRC_MIC_MUTE_SYNC_STATE.set("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("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) def setStateOverlaySmallLog(self, state:str): if state == "enabled": - self.view_variable.VAR_OVERLAY_SMALL_LOG_STATE.set("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("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) 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, ), From e76d42172d7cb7c321f88488aa670e8388d6e27f Mon Sep 17 00:00:00 2001 From: Sakamoto Shiina <68018796+ShiinaSakamoto@users.noreply.github.com> Date: Thu, 9 May 2024 07:00:14 +0900 Subject: [PATCH 3/5] =?UTF-8?q?[Update/bugfix]=20=E6=96=87=E8=A8=80?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E3=80=82=E3=82=A4=E3=83=B3=E3=83=87=E3=83=B3?= =?UTF-8?q?=E3=83=88=E3=83=9F=E3=82=B9=E3=81=A7=E6=97=A5=E6=9C=AC=E8=AA=9E?= =?UTF-8?q?=E5=AF=BE=E5=BF=9C=E3=81=A7=E3=81=8D=E3=81=A6=E3=81=84=E3=81=AA?= =?UTF-8?q?=E3=81=8B=E3=81=A3=E3=81=9F=E3=81=AE=E3=82=92=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- locales/en.yml | 4 ++-- locales/ja.yml | 4 ++-- view.py | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/locales/en.yml b/locales/en.yml index d8fe3597..af75675c 100644 --- a/locales/en.yml +++ b/locales/en.yml @@ -246,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 1d8ca719..8376fce0 100644 --- a/locales/ja.yml +++ b/locales/ja.yml @@ -245,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 49234703..9762ed95 100644 --- a/view.py +++ b/view.py @@ -148,7 +148,7 @@ class View(): CALLBACK_SET_OPEN_VRC_MIC_MUTE_SYNC_SETTINGS_WINDOW=self._openVrcMicMuteSyncSettingsWindow, - VAR_VRC_MIC_MUTE_SYNC_SETTINGS=StringVar(value="VRC Mic Mute Sync"), + 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=""), From fa87946d4cff09598ba76bdb512bf025a66b9eaf Mon Sep 17 00:00:00 2001 From: Sakamoto Shiina <68018796+ShiinaSakamoto@users.noreply.github.com> Date: Thu, 9 May 2024 07:03:15 +0900 Subject: [PATCH 4/5] =?UTF-8?q?[bugfix]=20Config=20Window:=20=E8=A8=AD?= =?UTF-8?q?=E5=AE=9A=E9=A0=85=E7=9B=AE=E5=A4=89=E6=9B=B4=E6=99=82=E3=81=AB?= =?UTF-8?q?=E3=80=81=E9=BB=92=E3=82=AB=E3=83=90=E3=83=BC=E3=81=8C=E5=89=8D?= =?UTF-8?q?=E3=81=AB=E5=87=BA=E3=81=A6=E3=81=8D=E3=81=A6=E3=81=97=E3=81=BE?= =?UTF-8?q?=E3=81=86=E3=81=AE=E3=82=92=E7=84=A1=E7=90=86=E3=82=84=E3=82=8A?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E3=80=82=20=E3=83=86=E3=82=AD=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=83=9C=E3=83=83=E3=82=AF=E3=82=B9=E4=B8=8A=E9=83=A8?= =?UTF-8?q?=E3=80=81=E3=82=B9=E3=83=86=E3=83=BC=E3=82=BF=E3=82=B9=E5=A4=89?= =?UTF-8?q?=E6=9B=B4=E9=96=A2=E6=95=B0setStateOverlaySmallLog=E3=81=A8setS?= =?UTF-8?q?tateVrcMicMuteSync=E5=AE=9F=E8=A1=8C=E6=99=82=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- view.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/view.py b/view.py index 9762ed95..939e000a 100644 --- a/view.py +++ b/view.py @@ -1307,6 +1307,8 @@ class View(): 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")) @@ -1315,6 +1317,8 @@ class View(): 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): From 6bd2ad41330f26f196b6b78bb5a910c00bea83c9 Mon Sep 17 00:00:00 2001 From: Sakamoto Shiina <68018796+ShiinaSakamoto@users.noreply.github.com> Date: Thu, 9 May 2024 07:07:33 +0900 Subject: [PATCH 5/5] =?UTF-8?q?[Update]=20=E6=96=87=E8=A8=80=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3=E3=80=81=E3=82=A4=E3=83=BC=E3=82=B9=E3=82=BF=E3=83=BC?= =?UTF-8?q?=E3=82=A8=E3=83=83=E3=82=B0=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- locales/en.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/locales/en.yml b/locales/en.yml index af75675c..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.