diff --git a/utils.py b/utils.py index 3033cb13..a68474fb 100644 --- a/utils.py +++ b/utils.py @@ -3,4 +3,10 @@ from PIL.Image import open as Image_open def getImageFile(file_name): img = Image_open(os_path.join(os_path.dirname(__file__), "img", file_name)) - return img \ No newline at end of file + return img + +def get_key_by_value(dictionary, value): + for key, val in dictionary.items(): + if val == value: + return key + return None \ No newline at end of file diff --git a/vrct_gui/config_window/widgets/createSideMenuAndSettingsBoxContainers/createSideMenuAndSettingsBoxContainers.py b/vrct_gui/config_window/widgets/createSideMenuAndSettingsBoxContainers/createSideMenuAndSettingsBoxContainers.py index 161d5e96..3a28865b 100644 --- a/vrct_gui/config_window/widgets/createSideMenuAndSettingsBoxContainers/createSideMenuAndSettingsBoxContainers.py +++ b/vrct_gui/config_window/widgets/createSideMenuAndSettingsBoxContainers/createSideMenuAndSettingsBoxContainers.py @@ -6,7 +6,7 @@ from .addConfigSideMenuItem import addConfigSideMenuItem from .createSettingBoxContainer import createSettingBoxContainer -from .setting_box_containers import createSettingBox_General +from .setting_box_containers import createSettingBox_Appearance def createSideMenuAndSettingsBoxContainers(config_window, settings): @@ -45,16 +45,14 @@ def createSideMenuAndSettingsBoxContainers(config_window, settings): side_menu_and_setting_box_containers_settings = [ { - "side_menu_tab_attr_name": "side_menu_tab_general", - "label_attr_name": "label_general", - "selected_mark_attr_name": "translation_selected_mark", - "text": "General", + "side_menu_tab_attr_name": "side_menu_tab_appearance", + "label_attr_name": "label_appearance", + "selected_mark_attr_name": "selected_mark_appearance", + "text": "Appearance", "setting_box_container_settings": { - "setting_box_container_attr_name": "setting_box_container_general", + "setting_box_container_attr_name": "setting_box_container_appearance", "setting_boxes": [ - { "section_title": None, "setting_box": createSettingBox_General }, - # { "section_title": "General Section Title", "setting_box": createSettingBox_General }, - # { "section_title": None, "setting_box": createSettingBox_General }, + { "section_title": None, "setting_box": createSettingBox_Appearance }, ] }, "activate_by_default": True, 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 5e0a530d..c304fbc0 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 @@ -3,6 +3,7 @@ from ctk_scrollable_dropdown import CTkScrollableDropdown from vrct_gui.ui_utils import createButtonWithImage +from typing import Union class SettingBoxGenerator(): @@ -154,7 +155,7 @@ class SettingBoxGenerator(): - def createSettingBoxSlider(self, parent_widget, label_text, desc_text, slider_attr_name, slider_range, slider_number_of_steps, command, variable): + def createSettingBoxSlider(self, parent_widget, label_text, desc_text, slider_attr_name, slider_range, command, variable, slider_number_of_steps: Union[int, None] = None): (setting_box_frame, setting_box_frame_wrapper) = self._createSettingBoxFrame(parent_widget, label_text, desc_text) setting_box_slider_frame = CTkFrame(setting_box_frame_wrapper, corner_radius=0, width=0, height=0, fg_color=self.ctm.SB__BG_COLOR) diff --git a/vrct_gui/config_window/widgets/createSideMenuAndSettingsBoxContainers/setting_box_containers/__init__.py b/vrct_gui/config_window/widgets/createSideMenuAndSettingsBoxContainers/setting_box_containers/__init__.py index f992f8c0..d0733fd4 100644 --- a/vrct_gui/config_window/widgets/createSideMenuAndSettingsBoxContainers/setting_box_containers/__init__.py +++ b/vrct_gui/config_window/widgets/createSideMenuAndSettingsBoxContainers/setting_box_containers/__init__.py @@ -1 +1 @@ -from .setting_box_general import createSettingBox_General \ No newline at end of file +from .setting_box_appearance import createSettingBox_Appearance \ No newline at end of file diff --git a/vrct_gui/config_window/widgets/createSideMenuAndSettingsBoxContainers/setting_box_containers/setting_box_appearance/__init__.py b/vrct_gui/config_window/widgets/createSideMenuAndSettingsBoxContainers/setting_box_containers/setting_box_appearance/__init__.py new file mode 100644 index 00000000..7dd435d8 --- /dev/null +++ b/vrct_gui/config_window/widgets/createSideMenuAndSettingsBoxContainers/setting_box_containers/setting_box_appearance/__init__.py @@ -0,0 +1 @@ +from .createSettingBox_Appearance import createSettingBox_Appearance \ No newline at end of file diff --git a/vrct_gui/config_window/widgets/createSideMenuAndSettingsBoxContainers/setting_box_containers/setting_box_general/createSettingBox_General.py b/vrct_gui/config_window/widgets/createSideMenuAndSettingsBoxContainers/setting_box_containers/setting_box_appearance/__tmp.py similarity index 99% rename from vrct_gui/config_window/widgets/createSideMenuAndSettingsBoxContainers/setting_box_containers/setting_box_general/createSettingBox_General.py rename to vrct_gui/config_window/widgets/createSideMenuAndSettingsBoxContainers/setting_box_containers/setting_box_appearance/__tmp.py index 70fd7bd3..51b4c0e6 100644 --- a/vrct_gui/config_window/widgets/createSideMenuAndSettingsBoxContainers/setting_box_containers/setting_box_general/createSettingBox_General.py +++ b/vrct_gui/config_window/widgets/createSideMenuAndSettingsBoxContainers/setting_box_containers/setting_box_appearance/__tmp.py @@ -7,7 +7,7 @@ from ..SettingBoxGenerator import SettingBoxGenerator from config import config -def createSettingBox_General(setting_box_wrapper, config_window, settings): +def __tmp(setting_box_wrapper, config_window, settings): sbg = SettingBoxGenerator(config_window, settings) diff --git a/vrct_gui/config_window/widgets/createSideMenuAndSettingsBoxContainers/setting_box_containers/setting_box_appearance/createSettingBox_Appearance.py b/vrct_gui/config_window/widgets/createSideMenuAndSettingsBoxContainers/setting_box_containers/setting_box_appearance/createSettingBox_Appearance.py new file mode 100644 index 00000000..e209e8af --- /dev/null +++ b/vrct_gui/config_window/widgets/createSideMenuAndSettingsBoxContainers/setting_box_containers/setting_box_appearance/createSettingBox_Appearance.py @@ -0,0 +1,114 @@ +from time import sleep + +from customtkinter import StringVar, IntVar +from tkinter import font as tk_font +from languages import selectable_languages +from utils import get_key_by_value + + +from ..SettingBoxGenerator import SettingBoxGenerator + +from config import config + +def createSettingBox_Appearance(setting_box_wrapper, config_window, settings): + + + sbg = SettingBoxGenerator(config_window, settings) + + createSettingBoxDropdownMenu = sbg.createSettingBoxDropdownMenu + createSettingBoxSlider = sbg.createSettingBoxSlider + + + # 関数名は変えるかもしれない。 + # テーマ変更、フォント変更時、 Widget再生成か再起動かは検討中 + + + def slider_transparency_callback(value): + # self.parent.wm_attributes("-alpha", int(value/100)) + config.TRANSPARENCY = int(value) + + def optionmenu_appearance_theme_callback(value): + config.APPEARANCE_THEME = value + + def optionmenu_ui_scaling_callback(value): + # self.optionmenu_ui_scaling.set(choice) + # new_scaling_float = int(choice.replace("%", "")) / 100 + config.UI_SCALING = value + + def optionmenu_font_family_callback(value): + config.FONT_FAMILY = value + + def optionmenu_ui_language_callback(value): + config.UI_LANGUAGE = get_key_by_value(selectable_languages, value) + + row=0 + config_window.sb__transparency = createSettingBoxSlider( + parent_widget=setting_box_wrapper, + label_text="Transparency", + desc_text="Change the window's transparency. 50% to 100%. (Default: 100%)", + slider_attr_name="sb__transparency_slider", + slider_range=(50, 100), + command=lambda value: slider_transparency_callback(value), + variable=IntVar(value=config.TRANSPARENCY), + ) + config_window.sb__transparency.grid(row=row) + row+=1 + + + config_window.sb__appearance_theme = createSettingBoxDropdownMenu( + parent_widget=setting_box_wrapper, + label_text="Theme", + desc_text="Change the color theme from \"Light\" and \"Dark\". If you select \"System\", It will adjust based on your Windows theme. (Default: System)", + optionmenu_attr_name="sb__appearance_theme_optionmenu", + dropdown_menu_attr_name="sb__appearance_theme_dropdown", + dropdown_menu_values=["Light", "Dark", "System"], + command=lambda value: optionmenu_appearance_theme_callback(value), + variable=StringVar(value=config.APPEARANCE_THEME) + ) + config_window.sb__appearance_theme.grid(row=row) + row+=1 + + + config_window.sb__ui_scaling = createSettingBoxDropdownMenu( + parent_widget=setting_box_wrapper, + label_text="UI Size", + desc_text="(Default: 100%)", + optionmenu_attr_name="sb__ui_scaling_optionmenu", + dropdown_menu_attr_name="sb__ui_scaling_dropdown", + dropdown_menu_values=["80%", "90%", "100%", "110%", "120%"], + command=lambda value: optionmenu_ui_scaling_callback(value), + variable=StringVar(value=config.UI_SCALING) + ) + config_window.sb__ui_scaling.grid(row=row) + row+=1 + + + # font_families = list(tk_font.families()) + config_window.sb__font_family = createSettingBoxDropdownMenu( + parent_widget=setting_box_wrapper, + label_text="Font Family", + desc_text="(Default: Yu Gothic UI)", + optionmenu_attr_name="sb__font_family_optionmenu", + dropdown_menu_attr_name="sb__font_family_dropdown", + dropdown_menu_values=["Font A", "Font B"], + # dropdown_menu_values=font_families, + command=lambda value: optionmenu_font_family_callback(value), + variable=StringVar(value=config.FONT_FAMILY) + ) + config_window.sb__font_family.grid(row=row) + row+=1 + + + selectable_languages_values = list(selectable_languages.values()) + config_window.sb__ui_language = createSettingBoxDropdownMenu( + parent_widget=setting_box_wrapper, + label_text="UI Language", + desc_text="(Default: English)", + optionmenu_attr_name="sb__ui_language_optionmenu", + dropdown_menu_attr_name="sb__ui_language_dropdown", + dropdown_menu_values=selectable_languages_values, + command=lambda value: optionmenu_ui_language_callback(value), + variable=StringVar(value=selectable_languages[config.UI_LANGUAGE]), + ) + config_window.sb__ui_language.grid(row=row) + row+=1 \ No newline at end of file diff --git a/vrct_gui/config_window/widgets/createSideMenuAndSettingsBoxContainers/setting_box_containers/setting_box_general/__init__.py b/vrct_gui/config_window/widgets/createSideMenuAndSettingsBoxContainers/setting_box_containers/setting_box_general/__init__.py deleted file mode 100644 index c0c243b9..00000000 --- a/vrct_gui/config_window/widgets/createSideMenuAndSettingsBoxContainers/setting_box_containers/setting_box_general/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .createSettingBox_General import createSettingBox_General \ No newline at end of file