diff --git a/view.py b/view.py index d16fe3c4..1364e053 100644 --- a/view.py +++ b/view.py @@ -35,6 +35,12 @@ class View(): **common_args ) + self.settings.selectable_language_window = SimpleNamespace( + ctm=all_ctm.selectable_language_window, + uism=all_uism.config_window, + **common_args + ) + self.view_variable = SimpleNamespace( # Main Window # Sidebar @@ -58,16 +64,18 @@ class View(): # Sidebar Language Settings VAR_LABEL_LANGUAGE_SETTINGS=StringVar(value="Language Settings"), # JA: 言語設定 LIST_SELECTABLE_LANGUAGES=[], - CALLBACK_SELECTED_LANGUAGE_PRESET_TAB=None, + VAR_LABEL_YOUR_LANGUAGE=StringVar(value="Your Language"), # JA: あなたの言語 VAR_YOUR_LANGUAGE = StringVar(value="Japanese\n(Japan)"), + CALLBACK_OPEN_SELECTABLE_YOUR_LANGUAGE_WINDOW=None, CALLBACK_SELECTED_YOUR_LANGUAGE=None, VAR_LABEL_BOTH_DIRECTION_DESC=StringVar(value="Translate Each Other"), # JA: 双方向に翻訳 VAR_LABEL_TARGET_LANGUAGE=StringVar(value="Target Language"), # JA: 相手の言語 VAR_TARGET_LANGUAGE = StringVar(value="English\n(United States)"), + CALLBACK_OPEN_SELECTABLE_TARGET_LANGUAGE_WINDOW=None, CALLBACK_SELECTED_TARGET_LANGUAGE=None, @@ -248,6 +256,13 @@ class View(): self.view_variable.CALLBACK_SELECTED_LANGUAGE_PRESET_TAB = language_presets["callback_selected_language_preset_tab"] vrct_gui.setDefaultActiveLanguagePresetTab(tab_no=config.SELECTED_TAB_NO) + self.view_variable.CALLBACK_OPEN_SELECTABLE_YOUR_LANGUAGE_WINDOW = self.openSelectableLanguagesWindow_YourLanguage + self.view_variable.CALLBACK_OPEN_SELECTABLE_TARGET_LANGUAGE_WINDOW = self.openSelectableLanguagesWindow_TargetLanguage + + + + # vrct_gui.sls__title_text_your_language.bind("", self.view_variable.CALLBACK_OPEN_SELECTABLE_YOUR_LANGUAGE_WINDOW) + # vrct_gui.sls__title_text_target_language.bind("", self.view_variable.CALLBACK_OPEN_SELECTABLE_TARGET_LANGUAGE_WINDOW) entry_message_box = getattr(vrct_gui, "entry_message_box") entry_message_box.bind("", entry_message_box_commands["bind_Return"]) @@ -345,6 +360,11 @@ class View(): self.view_variable.IS_MAIN_WINDOW_SIDEBAR_COMPACT_MODE = is_turned_on vrct_gui.recreateMainWindowSidebar() + def openSelectableLanguagesWindow_YourLanguage(self, _e): + vrct_gui.openSelectableLanguagesWindow("your_language") + def openSelectableLanguagesWindow_TargetLanguage(self, _e): + vrct_gui.openSelectableLanguagesWindow("target_language") + def updateGuiVariableByPresetTabNo(self, tab_no:str): self.view_variable.VAR_YOUR_LANGUAGE.set(config.SELECTED_TAB_YOUR_LANGUAGES[tab_no]) @@ -353,8 +373,8 @@ class View(): def updateList_selectableLanguages(self, new_selectable_language_list:list): self.view_variable.LIST_SELECTABLE_LANGUAGES = new_selectable_language_list - vrct_gui.sls__optionmenu_your_language.configure(values=new_selectable_language_list) - vrct_gui.sls__optionmenu_target_language.configure(values=new_selectable_language_list) + # vrct_gui.sls__optionmenu_your_language.configure(values=new_selectable_language_list) + # vrct_gui.sls__optionmenu_target_language.configure(values=new_selectable_language_list) def printToTextbox_enableTranslation(self): diff --git a/vrct_gui/_CreateSelectableLanguagesWindow.py b/vrct_gui/_CreateSelectableLanguagesWindow.py new file mode 100644 index 00000000..713a4587 --- /dev/null +++ b/vrct_gui/_CreateSelectableLanguagesWindow.py @@ -0,0 +1,159 @@ +# from .widgets import createConfigWindowTitle, createSideMenuAndSettingsBoxContainers, createSettingBoxTopBar +from functools import partial + +from .ui_utils import bindButtonReleaseFunction, bindEnterAndLeaveColor, bindButtonPressColor +from utils import callFunctionIfCallable + +from customtkinter import CTkToplevel, CTkFrame, CTkLabel, CTkFont, CTkScrollableFrame + +class _CreateSelectableLanguagesWindow(CTkToplevel): + def __init__(self, vrct_gui, settings, view_variable): + super().__init__() + self.withdraw() + + + # configure window + self.title("_CreateSelectableLanguagesWindow") + self.overrideredirect(True) + + self.attach = vrct_gui.main_bg_container + self.vrct_gui = vrct_gui + + + self.configure(fg_color="black") + self.protocol("WM_DELETE_WINDOW", vrct_gui.closeSelectableLanguagesWindow) + + self.settings = settings + self._view_variable = view_variable + + self.bind("", lambda e: self.withdraw()) + + + + self.is_created = False + + + self.selectable_language_window_type = None + + def createContainer(self, selectable_language_window_type): + print(selectable_language_window_type) + self.selectable_language_window_type = selectable_language_window_type + if self.is_created is True: + pass + else: + self._createContainer() + + + def callbackSelectableLanguages(self, value, _e): + if self.selectable_language_window_type == "your_language": + callback = self._view_variable.CALLBACK_SELECTED_YOUR_LANGUAGE + target_variable = self._view_variable.VAR_YOUR_LANGUAGE + elif self.selectable_language_window_type == "target_language": + callback = self._view_variable.CALLBACK_SELECTED_TARGET_LANGUAGE + target_variable = self._view_variable.VAR_TARGET_LANGUAGE + + callFunctionIfCallable(callback, value) + target_variable.set(value) + self.withdraw() + + + + + + def _createContainer(self): + + + print("create") + self.x_pos = self.attach.winfo_rootx() + self.y_pos = self.attach.winfo_rooty() + self.width_new = self.attach.winfo_width() + self.height_new = self.attach.winfo_height() + + + self.geometry('+{}+{}'.format(self.x_pos, self.y_pos)) + # self.geometry('{}x{}+{}+{}'.format(self.width_new, self.height_new, self.x_pos, self.y_pos)) + # self.geometry('{}x{}+{}+{}'.format(self.width_new, self.height_new, self.x_pos, self.y_pos)) + + + self.rowconfigure(0, minsize=50) + self.top_container = CTkFrame(self, corner_radius=0, fg_color=self.settings.ctm.MAIN_BG_COLOR, width=0, height=0) + self.top_container.grid(row=0, column=0, sticky="nsew") + + + self.top_container.rowconfigure((0,2), weight=1) + self.go_back_button_container = CTkFrame(self.top_container, corner_radius=0, fg_color=self.settings.ctm.GO_BACK_BUTTON_BG_COLOR, width=0, height=0) + self.go_back_button_container.grid(row=1, column=0) + + self.go_back_button_label_wrapper = CTkFrame(self.go_back_button_container, corner_radius=0, fg_color=self.settings.ctm.GO_BACK_BUTTON_BG_COLOR, width=0, height=0) + self.go_back_button_label_wrapper.grid(row=0, column=0) + + + self.go_back_button_label = CTkLabel( + self.go_back_button_label_wrapper, + text="Go back", + height=0, + corner_radius=0, + font=CTkFont(family=self.settings.FONT_FAMILY, size=14, weight="normal"), + anchor="w", + text_color=self.settings.ctm.BASIC_TEXT_COLOR, + ) + self.go_back_button_label.grid(row=1, column=0, padx=10, pady=10) + + bindButtonReleaseFunction([self.go_back_button_label_wrapper, self.go_back_button_label], lambda _e: self.withdraw()) + + + + + # self.scroll_frame_container = CTkScrollableFrame(self, corner_radius=0, fg_color=self.settings.ctm.MAIN_BG_COLOR) + # self.scroll_frame_container.grid(row=1, column=0, sticky="nsew") + + + + self.container = CTkFrame(self, corner_radius=0, fg_color=self.settings.ctm.MAIN_BG_COLOR, width=0, height=0) + self.container.grid(row=1, column=0, sticky="nsew") + + + + row=0 + column=0 + for selectable_language_name in self._view_variable.LIST_SELECTABLE_LANGUAGES: + + self.wrapper = CTkFrame(self.container, corner_radius=0, fg_color=self.settings.ctm.LANGUAGE_BUTTON_BG_COLOR, width=0, height=0) + self.wrapper.grid(row=row, column=column, ipadx=6, ipady=6, sticky="nsew") + setattr(self, f"{row}_{column}", self.wrapper) + + + + self.wrapper.rowconfigure((0,2), weight=1) + selectable_language_name_for_text = selectable_language_name.replace("\n", " ") + label_widget = CTkLabel( + self.wrapper, + text=selectable_language_name_for_text, + height=0, + corner_radius=0, + font=CTkFont(family=self.settings.FONT_FAMILY, size=14, weight="normal"), + anchor="w", + text_color=self.settings.ctm.BASIC_TEXT_COLOR, + ) + # setattr(self, f"l", label_widget) + + label_widget.grid(row=1, column=0, padx=(8,0)) + + + + bindEnterAndLeaveColor([self.wrapper, label_widget], self.settings.ctm.LANGUAGE_BUTTON_BG_HOVERED_COLOR, self.settings.ctm.LANGUAGE_BUTTON_BG_COLOR) + bindButtonPressColor([self.wrapper, label_widget], self.settings.ctm.LANGUAGE_BUTTON_BG_CLICKED_COLOR, self.settings.ctm.LANGUAGE_BUTTON_BG_COLOR) + + + + callback = partial(self.callbackSelectableLanguages, selectable_language_name) + bindButtonReleaseFunction([self.wrapper, label_widget], callback) + + if row == 16: + row=0 + column+=1 + else: + row+=1 + + + self.is_created = True \ No newline at end of file diff --git a/vrct_gui/main_window/widgets/_create_sidebar/createSidebarLanguagesSettings.py b/vrct_gui/main_window/widgets/_create_sidebar/createSidebarLanguagesSettings.py index a76be24d..d6608324 100644 --- a/vrct_gui/main_window/widgets/_create_sidebar/createSidebarLanguagesSettings.py +++ b/vrct_gui/main_window/widgets/_create_sidebar/createSidebarLanguagesSettings.py @@ -28,8 +28,8 @@ def createSidebarLanguagesSettings(settings, main_window, view_variable): switchActiveAndPassivePresetsTabsColor(target_active_widget) switchActiveTabAndPassiveTab(target_active_widget, main_window.current_active_preset_tab, main_window.current_active_preset_tab.passive_function, settings.ctm.SLS__PRESETS_TAB_BG_HOVERED_COLOR, settings.ctm.SLS__PRESETS_TAB_BG_CLICKED_COLOR, settings.ctm.SLS__PRESETS_TAB_BG_PASSIVE_COLOR) - main_window.sls__optionmenu_your_language.set(view_variable.VAR_YOUR_LANGUAGE.get()) - main_window.sls__optionmenu_target_language.set(view_variable.VAR_TARGET_LANGUAGE.get()) + # main_window.sls__optionmenu_your_language.set(view_variable.VAR_YOUR_LANGUAGE.get()) + # main_window.sls__optionmenu_target_language.set(view_variable.VAR_TARGET_LANGUAGE.get()) main_window.current_active_preset_tab = target_active_widget @@ -76,7 +76,7 @@ def createSidebarLanguagesSettings(settings, main_window, view_variable): - def createLanguageSettingBox(parent_widget, var_title_text, title_text_attr_name, optionmenu_attr_name, dropdown_menu_values, command, variable): + def createLanguageSettingBox(parent_widget, var_title_text, title_text_attr_name, optionmenu_attr_name, dropdown_menu_values, open_selectable_language_window_command, variable): sls__box = CTkFrame(parent_widget, corner_radius=0, fg_color=settings.ctm.SLS__BOX_BG_COLOR, width=0, height=0) sls__box.columnconfigure((0,2), weight=1) @@ -97,19 +97,37 @@ def createSidebarLanguagesSettings(settings, main_window, view_variable): - createOption_DropdownMenu_for_languageSettings( - main_window, - sls__box_wrapper, - optionmenu_attr_name, - dropdown_menu_values=dropdown_menu_values, - command=command, - width=settings.uism.SLS__BOX_DROPDOWN_MENU_WIDTH, - font_size=settings.uism.SLS__BOX_DROPDOWN_MENU_FONT_SIZE, - text_color=settings.ctm.LABELS_TEXT_COLOR, - variable=variable, - # variable=StringVar(value="Chinese, Cantonese\n(Traditional Hong Kong)"), + + sls__selected_language_box = CTkFrame(sls__box_wrapper, corner_radius=0, fg_color=settings.ctm.SLS__DROPDOWN_MENU_BG_COLOR, width=200, height=30) + sls__selected_language_box.grid(row=1, column=0) + + + sls__selected_language_box.columnconfigure(0, minsize=200) + sls__selected_language_box.rowconfigure(0, minsize=30) + sls__selected_language_label = CTkFrame(sls__selected_language_box, corner_radius=0, fg_color=settings.ctm.SLS__DROPDOWN_MENU_BG_COLOR) + sls__selected_language_label.grid(row=0, column=0) + + sls__selected_language_label = CTkLabel( + sls__selected_language_label, + textvariable=variable, + height=0, + # anchor="center", + font=CTkFont(family=settings.FONT_FAMILY, size=settings.uism.SLS__BOX_DROPDOWN_MENU_FONT_SIZE, weight="normal"), + text_color=settings.ctm.SLS__BOX_SECTION_TITLE_TEXT_COLOR ) - getattr(main_window, optionmenu_attr_name).grid(row=1, column=0, padx=0, pady=0) + sls__selected_language_label.grid(row=0, column=0, pady=2) + setattr(main_window, title_text_attr_name, sls__selected_language_label) + open_selectable_language_window_command + + + + + # bindEnterAndLeaveColor([self.wrapper, label_widget], self.settings.ctm.LANGUAGE_BUTTON_BG_HOVERED_COLOR, self.settings.ctm.LANGUAGE_BUTTON_BG_COLOR) + # bindButtonPressColor([self.wrapper, label_widget], self.settings.ctm.LANGUAGE_BUTTON_BG_CLICKED_COLOR, self.settings.ctm.LANGUAGE_BUTTON_BG_COLOR) + + + + bindButtonReleaseFunction([sls__selected_language_box, sls__selected_language_label], open_selectable_language_window_command) return sls__box @@ -204,12 +222,12 @@ def createSidebarLanguagesSettings(settings, main_window, view_variable): column+=1 - def selectYourLanguageCommand(value): - callFunctionIfCallable(view_variable.CALLBACK_SELECTED_YOUR_LANGUAGE, value) + def callbackOpenSelectableYourLanguageWindow(value): + callFunctionIfCallable(view_variable.CALLBACK_OPEN_SELECTABLE_YOUR_LANGUAGE_WINDOW, value) - def selectTargetLanguageCommand(value): - callFunctionIfCallable(view_variable.CALLBACK_SELECTED_TARGET_LANGUAGE, value) + def callbackOpenSelectableTargetLanguageWindow(value): + callFunctionIfCallable(view_variable.CALLBACK_OPEN_SELECTABLE_TARGET_LANGUAGE_WINDOW, value) # Language Settings BOX main_window.sls__box_frame = CTkFrame(main_window.sls__container, corner_radius=0, fg_color=settings.ctm.SLS__BG_COLOR, width=0, height=0) @@ -223,7 +241,7 @@ def createSidebarLanguagesSettings(settings, main_window, view_variable): title_text_attr_name="sls__title_text_your_language", optionmenu_attr_name="sls__optionmenu_your_language", dropdown_menu_values=view_variable.LIST_SELECTABLE_LANGUAGES, - command=selectYourLanguageCommand, + open_selectable_language_window_command=callbackOpenSelectableYourLanguageWindow, variable=view_variable.VAR_YOUR_LANGUAGE ) main_window.sls__box_your_language.grid(row=2, column=0, padx=0, pady=(settings.uism.SLS__BOX_TOP_PADY,0),sticky="ew") @@ -271,7 +289,7 @@ def createSidebarLanguagesSettings(settings, main_window, view_variable): title_text_attr_name="sls__title_text_target_language", optionmenu_attr_name="sls__optionmenu_target_language", dropdown_menu_values=view_variable.LIST_SELECTABLE_LANGUAGES, - command=selectTargetLanguageCommand, + open_selectable_language_window_command=callbackOpenSelectableTargetLanguageWindow, variable=view_variable.VAR_TARGET_LANGUAGE ) main_window.sls__box_target_language.grid(row=4, column=0, padx=0, pady=(0,0),sticky="ew") \ No newline at end of file diff --git a/vrct_gui/ui_managers/ColorThemeManager.py b/vrct_gui/ui_managers/ColorThemeManager.py index 9189035b..f68e04c0 100644 --- a/vrct_gui/ui_managers/ColorThemeManager.py +++ b/vrct_gui/ui_managers/ColorThemeManager.py @@ -5,6 +5,7 @@ class ColorThemeManager(): print(theme) self.main = SimpleNamespace() self.config_window = SimpleNamespace() + self.selectable_language_window = SimpleNamespace() self.PRIMARY_100_COLOR = "#c4eac1" self.PRIMARY_200_COLOR = "#9cdd98" @@ -151,6 +152,21 @@ class ColorThemeManager(): # self.main.HELP_AND_INFO_BUTTON_DISABLE_COLOR = self.DARK_900_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.LANGUAGE_BUTTON_BG_COLOR = self.selectable_language_window.MAIN_BG_COLOR + self.selectable_language_window.GO_BACK_BUTTON_BG_COLOR = self.DARK_800_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 + + + # Common self.config_window.BASIC_TEXT_COLOR = self.main.BASIC_TEXT_COLOR self.config_window.LABELS_TEXT_COLOR = self.config_window.BASIC_TEXT_COLOR diff --git a/vrct_gui/vrct_gui.py b/vrct_gui/vrct_gui.py index 61631efb..f472a1e3 100644 --- a/vrct_gui/vrct_gui.py +++ b/vrct_gui/vrct_gui.py @@ -4,7 +4,8 @@ from customtkinter import CTk # from window_help_and_info import ToplevelWindowInformation -# from .ui_managers import ColorThemeManager, ImageFileManager, UiScalingManager +from ._CreateSelectableLanguagesWindow import _CreateSelectableLanguagesWindow + from ._changeMainWindowWidgetsStatus import _changeMainWindowWidgetsStatus from ._changeConfigWindowWidgetsStatus import _changeConfigWindowWidgetsStatus from ._printToTextbox import _printToTextbox @@ -24,10 +25,25 @@ class VRCT_GUI(CTk): self.settings = settings self._view_variable = view_variable - createMainWindowWidgets(vrct_gui=self, settings=self.settings.main, view_variable=self._view_variable) - self.config_window = ConfigWindow(vrct_gui=self, settings=self.settings.config_window, view_variable=self._view_variable) + createMainWindowWidgets( + vrct_gui=self, + settings=self.settings.main, + view_variable=self._view_variable + ) + + self.config_window = ConfigWindow( + vrct_gui=self, + settings=self.settings.config_window, + view_variable=self._view_variable + ) # self.information_window = ToplevelWindowInformation(self) + self.selectable_languages_window = _CreateSelectableLanguagesWindow( + vrct_gui=self, + settings=self.settings.selectable_language_window, + view_variable=self._view_variable + ) + def startMainLoop(self): self.mainloop() @@ -48,6 +64,18 @@ class VRCT_GUI(CTk): self.config_window.grab_release() + def openSelectableLanguagesWindow(self, selectable_language_window_type): + self.selectable_languages_window.createContainer(selectable_language_window_type) + self.selectable_languages_window.deiconify() + self.selectable_languages_window.focus_set() + self.selectable_languages_window.attributes("-topmost", True) + + + def closeSelectableLanguagesWindow(self): + self.selectable_languages_window.withdraw() + + + def openHelpAndInfoWindow(self, e): self.information_window.deiconify()