|
|
|
|
@@ -2,7 +2,7 @@ from functools import partial
|
|
|
|
|
from types import SimpleNamespace
|
|
|
|
|
from typing import Union
|
|
|
|
|
|
|
|
|
|
from customtkinter import CTkOptionMenu, CTkFont, CTkFrame, CTkLabel, CTkRadioButton, CTkEntry, CTkSlider, CTkSwitch, CTkCheckBox, CTkProgressBar
|
|
|
|
|
from customtkinter import CTkOptionMenu, CTkFont, CTkFrame, CTkLabel, CTkRadioButton, CTkEntry, CTkSlider, CTkSwitch, CTkCheckBox, CTkProgressBar, CTkImage
|
|
|
|
|
from CTkToolTip import *
|
|
|
|
|
|
|
|
|
|
from vrct_gui.ui_utils import createButtonWithImage, getLatestWidth, createOptionMenuBox, getLatestHeight, bindButtonFunctionAndColor
|
|
|
|
|
@@ -22,7 +22,7 @@ class _SettingBoxGenerator():
|
|
|
|
|
|
|
|
|
|
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):
|
|
|
|
|
def _createSettingBoxFrame(self, sb__attr_name, for_var_label_text=None, for_var_desc_text=None, expand_label_frame:bool=False):
|
|
|
|
|
self.config_window.sb__widgets[sb__attr_name] = SimpleNamespace()
|
|
|
|
|
|
|
|
|
|
setting_box_frame = CTkFrame(self.parent_widget, corner_radius=0, fg_color=self.settings.ctm.SB__BG_COLOR, width=0, height=0)
|
|
|
|
|
@@ -34,8 +34,7 @@ class _SettingBoxGenerator():
|
|
|
|
|
|
|
|
|
|
setting_box_frame_wrapper = CTkFrame(setting_box_frame, corner_radius=0, fg_color=self.settings.ctm.SB__BG_COLOR, width=0, height=0)
|
|
|
|
|
setting_box_frame_wrapper.grid(row=0, column=0, padx=self.settings.uism.SB__IPADX, pady=self.settings.uism.SB__IPADY, sticky="ew")
|
|
|
|
|
setting_box_frame_wrapper.grid_columnconfigure(0, weight=0, minsize=int(self.settings.uism.MAIN_AREA_MIN_WIDTH / 2))
|
|
|
|
|
setting_box_frame_wrapper.grid_columnconfigure(2, weight=1, minsize=int(self.settings.uism.MAIN_AREA_MIN_WIDTH / 2))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
setting_box_frame_wrapper_fix_border = CTkFrame(setting_box_frame, corner_radius=0, width=0, height=0)
|
|
|
|
|
setting_box_frame_wrapper_fix_border.grid(row=1, column=0, sticky="ew")
|
|
|
|
|
@@ -43,10 +42,22 @@ class _SettingBoxGenerator():
|
|
|
|
|
setting_box_frame_wrapper_fix_border2 = CTkFrame(setting_box_frame, corner_radius=0, width=0, height=0)
|
|
|
|
|
setting_box_frame_wrapper_fix_border2.grid(row=0, column=1, sticky="ns")
|
|
|
|
|
|
|
|
|
|
if for_var_label_text is not None:
|
|
|
|
|
self._setSettingBoxLabels(sb__attr_name, setting_box_frame_wrapper, for_var_label_text, for_var_desc_text)
|
|
|
|
|
|
|
|
|
|
# setting_box_item_frame = CTkFrame(setting_box_frame_wrapper, corner_radius=0, width=0, height=0, fg_color="red")
|
|
|
|
|
|
|
|
|
|
if for_var_label_text is not None:
|
|
|
|
|
self._setSettingBoxLabels(sb__attr_name, setting_box_frame_wrapper, for_var_label_text, for_var_desc_text, expand_label_frame)
|
|
|
|
|
if expand_label_frame is True:
|
|
|
|
|
setting_box_frame_wrapper.grid_columnconfigure(0, weight=1, minsize=int(self.settings.uism.MAIN_AREA_MIN_WIDTH))
|
|
|
|
|
setting_box_frame_wrapper.grid(columnspan=3)
|
|
|
|
|
return setting_box_frame
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
setting_box_frame_wrapper.grid_columnconfigure(0, weight=0, minsize=int(self.settings.uism.MAIN_AREA_MIN_WIDTH / 2))
|
|
|
|
|
setting_box_frame_wrapper.grid_columnconfigure(2, weight=1, minsize=int(self.settings.uism.MAIN_AREA_MIN_WIDTH / 2))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
setting_box_item_frame = CTkFrame(setting_box_frame_wrapper, corner_radius=0, width=0, height=0, fg_color=self.settings.ctm.SB__BG_COLOR)
|
|
|
|
|
if for_var_label_text is not None:
|
|
|
|
|
setting_box_item_frame.grid(row=0, column=2, padx=0, sticky="nsew")
|
|
|
|
|
@@ -57,7 +68,7 @@ class _SettingBoxGenerator():
|
|
|
|
|
|
|
|
|
|
return (setting_box_frame, setting_box_item_frame)
|
|
|
|
|
|
|
|
|
|
def _setSettingBoxLabels(self, sb__attr_name, setting_box_frame_wrapper, for_var_label_text, for_var_desc_text=None):
|
|
|
|
|
def _setSettingBoxLabels(self, sb__attr_name, setting_box_frame_wrapper, for_var_label_text, for_var_desc_text=None, expand_label_frame:bool=False):
|
|
|
|
|
|
|
|
|
|
setting_box_labels_frame = CTkFrame(setting_box_frame_wrapper, corner_radius=0, fg_color=self.settings.ctm.SB__BG_COLOR, width=0, height=0)
|
|
|
|
|
setting_box_labels_frame.grid(row=0, column=0, padx=0, pady=0, sticky="nsew")
|
|
|
|
|
@@ -86,6 +97,9 @@ class _SettingBoxGenerator():
|
|
|
|
|
font=CTkFont(family=self.settings.FONT_FAMILY, size=self.settings.uism.SB__DESC_FONT_SIZE, weight="normal"),
|
|
|
|
|
text_color=self.settings.ctm.LABELS_DESC_TEXT_COLOR
|
|
|
|
|
)
|
|
|
|
|
if expand_label_frame is True:
|
|
|
|
|
setting_box_desc.configure(wraplength=self.settings.uism.MAIN_AREA_MIN_WIDTH)
|
|
|
|
|
|
|
|
|
|
setting_box_desc.grid(row=2, column=0, padx=0, pady=(self.settings.uism.SB__DESC_TOP_PADY,0), sticky="ew")
|
|
|
|
|
self.config_window.additional_widgets.append(setting_box_desc)
|
|
|
|
|
self.config_window.sb__widgets[sb__attr_name].desc_widget=setting_box_desc
|
|
|
|
|
@@ -93,6 +107,16 @@ class _SettingBoxGenerator():
|
|
|
|
|
self.config_window.sb__widgets[sb__attr_name].desc_widget=None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def createSettingBox_Labels(
|
|
|
|
|
self,
|
|
|
|
|
for_var_label_text, for_var_desc_text,
|
|
|
|
|
labels_attr_name,
|
|
|
|
|
):
|
|
|
|
|
|
|
|
|
|
setting_box_frame= self._createSettingBoxFrame(labels_attr_name, for_var_label_text, for_var_desc_text, expand_label_frame=True)
|
|
|
|
|
|
|
|
|
|
return setting_box_frame
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def createSettingBoxDropdownMenu(
|
|
|
|
|
@@ -452,6 +476,210 @@ class _SettingBoxGenerator():
|
|
|
|
|
return setting_box_frame
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def createSettingBoxMessageFormatEntries(self,
|
|
|
|
|
base_entry_attr_name,
|
|
|
|
|
entry_textvariable_0,
|
|
|
|
|
entry_textvariable_1,
|
|
|
|
|
entry_textvariable_2,
|
|
|
|
|
textvariable_0,
|
|
|
|
|
textvariable_1,
|
|
|
|
|
entry_bind__Any_KeyRelease,
|
|
|
|
|
entry_bind__FocusOut=None,
|
|
|
|
|
):
|
|
|
|
|
|
|
|
|
|
(setting_box_frame, setting_box_item_frame) = self._createSettingBoxFrame(base_entry_attr_name)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
all_wrapper = CTkFrame(setting_box_item_frame, corner_radius=0, fg_color=self.settings.ctm.SB__BG_COLOR, width=0, height=0)
|
|
|
|
|
all_wrapper.grid(row=1, column=0, sticky="ew")
|
|
|
|
|
|
|
|
|
|
all_wrapper.grid_columnconfigure(0, weight=1)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
example_box_wrapper = CTkFrame(all_wrapper, corner_radius=0, fg_color=self.settings.ctm.SB__BG_COLOR, width=0, height=0)
|
|
|
|
|
example_box_wrapper.grid(row=0, column=0, pady=self.settings.uism.SB__MESSAGE_FORMAT__ENTRIES_BOTTOM_PADY, sticky="ew")
|
|
|
|
|
|
|
|
|
|
entries_wrapper = CTkFrame(all_wrapper, corner_radius=0, fg_color=self.settings.ctm.SB__BG_COLOR, width=0, height=0)
|
|
|
|
|
entries_wrapper.grid(row=1, column=0, pady=self.settings.uism.SB__MESSAGE_FORMAT__ENTRIES_BOTTOM_PADY, sticky="ew")
|
|
|
|
|
|
|
|
|
|
swap_button_wrapper = CTkFrame(all_wrapper, corner_radius=0, fg_color=self.settings.ctm.SB__BG_COLOR, width=0, height=0)
|
|
|
|
|
swap_button_wrapper.grid(row=2, column=0, sticky="e")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
example_box_wrapper.grid_columnconfigure((0,2), weight=1)
|
|
|
|
|
example_frame_widget = CTkFrame(example_box_wrapper, corner_radius=self.settings.uism.SB__MESSAGE_FORMAT__EXAMPLE_CORNER_RADIUS, fg_color=self.settings.ctm.SB__MESSAGE_FORMAT__EXAMPLE_BG_COLOR, width=0, height=0)
|
|
|
|
|
example_frame_widget.grid(row=0, column=1)
|
|
|
|
|
|
|
|
|
|
example_frame_widget.grid_rowconfigure((0,2), weight=1)
|
|
|
|
|
example_frame_widget.grid_columnconfigure((0,2), weight=1)
|
|
|
|
|
example_label_widget = CTkLabel(
|
|
|
|
|
example_frame_widget,
|
|
|
|
|
textvariable=self.view_variable.VAR_LABEL_EXAMPLE_TEXT_MESSAGE_FORMAT,
|
|
|
|
|
anchor="center",
|
|
|
|
|
justify="center",
|
|
|
|
|
wraplength=self.settings.uism.SB__MESSAGE_FORMAT__EXAMPLE_WRAP_LENGTH,
|
|
|
|
|
height=0,
|
|
|
|
|
font=CTkFont(family=self.settings.FONT_FAMILY, size=self.settings.uism.SB__MESSAGE_FORMAT__REQUIRED_TEXT_FONT_SIZE, weight="normal"),
|
|
|
|
|
text_color=self.settings.ctm.LABELS_TEXT_COLOR,
|
|
|
|
|
)
|
|
|
|
|
example_label_widget.grid(row=1, column=1, padx=self.settings.uism.SB__MESSAGE_FORMAT__EXAMPLE_IPADXY, pady=self.settings.uism.SB__MESSAGE_FORMAT__EXAMPLE_IPADXY, sticky="ew")
|
|
|
|
|
|
|
|
|
|
self.config_window.additional_widgets.append(example_box_wrapper)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
entry_textvariables = [entry_textvariable_0, entry_textvariable_1, entry_textvariable_2]
|
|
|
|
|
for i in range(3):
|
|
|
|
|
entry_widget = CTkEntry(
|
|
|
|
|
entries_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,
|
|
|
|
|
height=self.settings.uism.SB__MESSAGE_FORMAT__ENTRY_HEIGHT,
|
|
|
|
|
textvariable=entry_textvariables[i],
|
|
|
|
|
justify="center",
|
|
|
|
|
font=CTkFont(family=self.settings.FONT_FAMILY, size=self.settings.uism.SB__ENTRY_FONT_SIZE, weight="normal"),
|
|
|
|
|
)
|
|
|
|
|
setattr(self.config_window, base_entry_attr_name + str(i), entry_widget)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if entry_bind__FocusOut is not None:
|
|
|
|
|
entry_widget.bind("<FocusOut>", entry_bind__FocusOut, "+")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
label_frame_widget_0 = CTkFrame(entries_wrapper, corner_radius=0, fg_color=self.settings.ctm.SB__BG_COLOR, width=0, height=0)
|
|
|
|
|
|
|
|
|
|
label_frame_widget_0.grid_rowconfigure((0,2), weight=1)
|
|
|
|
|
label_frame_widget_0.grid_columnconfigure(0, weight=1)
|
|
|
|
|
label_widget_0 = CTkLabel(
|
|
|
|
|
label_frame_widget_0,
|
|
|
|
|
textvariable=textvariable_0,
|
|
|
|
|
anchor="center",
|
|
|
|
|
height=0,
|
|
|
|
|
font=CTkFont(family=self.settings.FONT_FAMILY, size=self.settings.uism.SB__MESSAGE_FORMAT__REQUIRED_TEXT_FONT_SIZE, weight="normal"),
|
|
|
|
|
text_color=self.settings.ctm.LABELS_TEXT_COLOR
|
|
|
|
|
)
|
|
|
|
|
label_widget_0.grid(row=1, column=0, padx=0, pady=0, sticky="ew")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
label_frame_widget_1 = CTkFrame(entries_wrapper, corner_radius=0, fg_color=self.settings.ctm.SB__BG_COLOR, width=0, height=0)
|
|
|
|
|
|
|
|
|
|
label_frame_widget_1.grid_rowconfigure((0,2), weight=1)
|
|
|
|
|
label_frame_widget_1.grid_columnconfigure(0, weight=1)
|
|
|
|
|
label_widget_1 = CTkLabel(
|
|
|
|
|
label_frame_widget_1,
|
|
|
|
|
textvariable=textvariable_1,
|
|
|
|
|
anchor="center",
|
|
|
|
|
height=0,
|
|
|
|
|
font=CTkFont(family=self.settings.FONT_FAMILY, size=self.settings.uism.SB__MESSAGE_FORMAT__REQUIRED_TEXT_FONT_SIZE, weight="normal"),
|
|
|
|
|
text_color=self.settings.ctm.LABELS_TEXT_COLOR
|
|
|
|
|
)
|
|
|
|
|
label_widget_1.grid(row=1, column=0, padx=0, pady=0, sticky="ew")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
entries_wrapper.grid_columnconfigure((0,2,4), weight=1)
|
|
|
|
|
entries_wrapper.grid_columnconfigure((1,3), weight=0, uniform="message_format_fixed_labels")
|
|
|
|
|
|
|
|
|
|
entry_widget_0 = getattr(self.config_window, base_entry_attr_name+"0")
|
|
|
|
|
entry_widget_1 = getattr(self.config_window, base_entry_attr_name+"1")
|
|
|
|
|
entry_widget_2 = getattr(self.config_window, base_entry_attr_name+"2")
|
|
|
|
|
entry_widget_0.grid(row=0, column=0, sticky="ew")
|
|
|
|
|
entry_widget_1.grid(row=0, column=2, sticky="ew")
|
|
|
|
|
entry_widget_2.grid(row=0, column=4, sticky="ew")
|
|
|
|
|
label_frame_widget_0.grid(row=0, column=1, padx=self.settings.uism.SB__MESSAGE_FORMAT__REQUIRED_TEXT_PADX, sticky="ew")
|
|
|
|
|
label_frame_widget_1.grid(row=0, column=3, padx=self.settings.uism.SB__MESSAGE_FORMAT__REQUIRED_TEXT_PADX, sticky="ew")
|
|
|
|
|
|
|
|
|
|
def adjusted_command__for_entry_bind__Any_KeyRelease(_e):
|
|
|
|
|
message_format = entry_widget_0.get() + textvariable_0.get() + entry_widget_1.get() + textvariable_1.get() + entry_widget_2.get()
|
|
|
|
|
entry_bind__Any_KeyRelease(message_format)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
entry_widget_0.bind("<Any-KeyRelease>", adjusted_command__for_entry_bind__Any_KeyRelease)
|
|
|
|
|
entry_widget_1.bind("<Any-KeyRelease>", adjusted_command__for_entry_bind__Any_KeyRelease)
|
|
|
|
|
entry_widget_2.bind("<Any-KeyRelease>", adjusted_command__for_entry_bind__Any_KeyRelease)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
swap_button = CTkFrame(swap_button_wrapper, corner_radius=self.settings.uism.BUTTONS_CORNER_RADIUS, fg_color=self.settings.ctm.SB__MESSAGE_FORMAT__SWAP_BUTTON_COLOR, cursor="hand2")
|
|
|
|
|
swap_button.grid(row=0, column=2, sticky="ew")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
swap_button.grid_columnconfigure(0, weight=1)
|
|
|
|
|
swap_button_label_wrapper = CTkFrame(swap_button, corner_radius=0, fg_color=self.settings.ctm.SB__MESSAGE_FORMAT__SWAP_BUTTON_COLOR)
|
|
|
|
|
swap_button_label_wrapper.grid(row=0, column=0, padx=self.settings.uism.SB__MESSAGE_FORMAT__SWAP_BUTTON_IPADX, pady=self.settings.uism.SB__MESSAGE_FORMAT__SWAP_BUTTON_IPADY, sticky="ew")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
swap_button_label_wrapper.grid_columnconfigure((0,4), weight=1)
|
|
|
|
|
swap_button_label_wrapper.grid_rowconfigure((0,2), weight=1)
|
|
|
|
|
|
|
|
|
|
swap_button_label_0 = CTkLabel(
|
|
|
|
|
swap_button_label_wrapper,
|
|
|
|
|
textvariable=textvariable_0,
|
|
|
|
|
height=0,
|
|
|
|
|
corner_radius=0,
|
|
|
|
|
font=CTkFont(family=self.settings.FONT_FAMILY, size=self.settings.uism.SB__MESSAGE_FORMAT__SWAP_BUTTON_FONT_SIZE, weight="normal"),
|
|
|
|
|
anchor="w",
|
|
|
|
|
text_color=self.settings.ctm.LABELS_TEXT_COLOR,
|
|
|
|
|
)
|
|
|
|
|
swap_button_label_0.grid(row=1, column=1)
|
|
|
|
|
|
|
|
|
|
swap_button_both_direction_arrow_img = CTkLabel(
|
|
|
|
|
swap_button_label_wrapper,
|
|
|
|
|
text=None,
|
|
|
|
|
height=0,
|
|
|
|
|
corner_radius=0,
|
|
|
|
|
image=CTkImage((self.settings.image_file.SWAP_ICON), size=self.settings.uism.SB__MESSAGE_FORMAT__SWAP_BUTTON_ARROWS_IMG_SIZE),
|
|
|
|
|
anchor="w",
|
|
|
|
|
text_color=self.settings.ctm.LABELS_TEXT_COLOR,
|
|
|
|
|
)
|
|
|
|
|
swap_button_both_direction_arrow_img.grid(row=1, column=2, padx=self.settings.uism.SB__MESSAGE_FORMAT__SWAP_TEXT_PADX)
|
|
|
|
|
|
|
|
|
|
swap_button_label_1 = CTkLabel(
|
|
|
|
|
swap_button_label_wrapper,
|
|
|
|
|
textvariable=textvariable_1,
|
|
|
|
|
height=0,
|
|
|
|
|
corner_radius=0,
|
|
|
|
|
font=CTkFont(family=self.settings.FONT_FAMILY, size=self.settings.uism.SB__MESSAGE_FORMAT__SWAP_BUTTON_FONT_SIZE, weight="normal"),
|
|
|
|
|
anchor="w",
|
|
|
|
|
text_color=self.settings.ctm.LABELS_TEXT_COLOR,
|
|
|
|
|
)
|
|
|
|
|
swap_button_label_1.grid(row=1, column=3)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def adjustedCommand():
|
|
|
|
|
callFunctionIfCallable(self.view_variable.CALLBACK_SWAP_MESSAGE_FORMAT_REQUIRED_TEXT)
|
|
|
|
|
|
|
|
|
|
bindButtonFunctionAndColor(
|
|
|
|
|
target_widgets=[
|
|
|
|
|
swap_button,
|
|
|
|
|
swap_button_label_wrapper,
|
|
|
|
|
swap_button_label_0,
|
|
|
|
|
swap_button_both_direction_arrow_img,
|
|
|
|
|
swap_button_label_1,
|
|
|
|
|
],
|
|
|
|
|
enter_color=self.settings.ctm.SB__MESSAGE_FORMAT__SWAP_BUTTON_HOVERED_COLOR,
|
|
|
|
|
leave_color=self.settings.ctm.SB__MESSAGE_FORMAT__SWAP_BUTTON_COLOR,
|
|
|
|
|
clicked_color=self.settings.ctm.SB__MESSAGE_FORMAT__SWAP_BUTTON_CLICKED_COLOR,
|
|
|
|
|
buttonReleasedFunction=lambda _e: adjustedCommand(),
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return setting_box_frame
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def createSettingBoxArrowSwitch(
|
|
|
|
|
self,
|
|
|
|
|
for_var_label_text, for_var_desc_text,
|
|
|
|
|
|