Files
VRCT/vrct_gui/ui_managers/AboutVrctManager.py
Sakamoto Shiina 1b6fa4c3e8 [Update] Config Window: Add About VRCT Tab. This is The Credit Page.
*The button that is supposed to open the link is not working yet.
2024-04-06 21:53:29 +09:00

179 lines
8.2 KiB
Python

from types import SimpleNamespace
from ..ui_utils import calculateUiSize, getImageFileFromUiUtils_AboutVrct, bindButtonReleaseFunction, createButtonWithImage, bindButtonFunctionAndColor
from customtkinter import CTkFrame, CTkLabel, CTkImage, CTkFont
IMAGE_STANDARD_SCALING = 2
class AboutVrctManager():
def __init__(self, scaling_percentage, ui_language, ctm):
self.ctm = ctm
scaling_float = int(scaling_percentage.replace("%", "")) / 100
self.SCALING_FLOAT = max(scaling_float, 0.4)
self.uism = SimpleNamespace()
self.uism.ABOUT_VRCT_CONTAINER_LEFT_PADX = self.dupTuple(self._calculateUiSize(32))
self.uism.SECTION_BOTTOM_PADY = self._calculateUiSize(22)
self.uism.PROJECT_LINKS_SECTION_BOTTOM_PADDING = self._calculateUiSize(18) # Exception pady
self.uism.VRCHAT_DISCLAIMER_SECTION_TOP_PADDING = self._calculateUiSize(80) # Exception pady
self.uism.THE_DEVELOPERS_SECTION_TITLE_BOTTOM_PADY = self._calculateUiSize(8)
self.uism.DEVS_CONTACTS_Y1 = self._calculateUiSize(118)
self.uism.DEVS_MISYA_X_X = self._calculateUiSize(269)
self.uism.DEVS_MISYA_GITHUB_X = self._calculateUiSize(297)
self.uism.DEVS_SHIINA_X_X = self._calculateUiSize(298)
self.uism.PROJECT_LINK_BOTTOM_PADY = self._calculateUiSize(2)
self.uism.PROJECT_LINK_CORNER_RADIUS = self._calculateUiSize(4)
self.uism.PROJECT_LINK_CONTENTS_PADX = self._calculateUiSize(55)
self.uism.PROJECT_LINK_ITEM_IPADX = self._calculateUiSize(10)
self.uism.PROJECT_LINK_ITEM_IPADY = self._calculateUiSize(4)
self.uism.CONTRIBUTORS_SECTION_TITLE_BOTTOM_PADY = self._calculateUiSize(10)
self.uism.CONTRIBUTORS_CONTACTS_Y1 = self._calculateUiSize(66)
self.uism.CONTRIBUTORS_DONE_SAN_X_X = self._calculateUiSize(25)
self.uism.CONTRIBUTORS_IYA_X_X = self._calculateUiSize(281)
self.uism.CONTRIBUTORS_RERA_X_X = self._calculateUiSize(530)
self.uism.CONTRIBUTORS_RERA_GITHUB_X = self._calculateUiSize(554)
self.uism.CONTRIBUTORS_CONTACTS_Y2 = self._calculateUiSize(170)
self.uism.CONTRIBUTORS_POPOSUKE_X_X = self._calculateUiSize(154)
self.uism.CONTRIBUTORS_KUMAGUMA_X_X = self._calculateUiSize(413)
self.uism.TELL_US_BUTTON_CORNER_RADIUS = self._calculateUiSize(6)
self.uism.TELL_US_BUTTON_PADX = self._calculateUiSize(8)
self.uism.TELL_US_BUTTON_PADY = self._calculateUiSize(8)
self.uism.TELL_US_BUTTON_BORDER_WIDTH = self._calculateUiSize(1)
self.uism.SPECIAL_THANKS_SECTION_TITLE_BOTTOM_PADY = self._calculateUiSize(6)
self.uism.SPECIAL_THANKS_MEMBERS_BOTTOM_PADY = self._calculateUiSize(4)
self.uism.SPECIAL_THANKS_MESSAGE_BOTTOM_PADY = self._calculateUiSize(0)
self.uism.SPECIAL_THANKS_MESSAGE_AND_YOU_BOTTOM_PADY = self._calculateUiSize(8)
self.uism.POSTER_SHOWCASE_SECTION_TITLE_BOTTOM_PADY = self._calculateUiSize(6)
self.uism.POSTER_SHOWCASE_POSTER_IMAGES_BOTTOM_PADY = self._calculateUiSize(18)
self.uism.POSTER_SHOWCASE_WORLD_ITEM_BOTTOM_PADY = self._calculateUiSize(4)
self.uism.POSTER_SHOWCASE_WORLD_ITEM_IPADX = self._calculateUiSize(12)
self.uism.POSTER_SHOWCASE_WORLD_ITEM_IPADY = self._calculateUiSize(4)
self.uism.POSTER_SHOWCASE_WORLD_BOTTOM_PADY = self._calculateUiSize(4)
self.uism.POSTER_SHOWCASE_WORLD_CORNER_RADIUS = self._calculateUiSize(4)
self.uism.POSTER_TELL_US_MESSAGE_TOP_PADY = self._calculateUiSize(20)
self.uism.POSTER_CHANGE_BUTTON_CORNER_RADIUS = self._calculateUiSize(6)
self.image_file = SimpleNamespace()
if ui_language == "ja":
self.image_file.SPECIAL_THANKS_MESSAGE = "special_thanks_message_ja.png"
self.image_file.SPECIAL_THANKS_TELL_US_MESSAGE = "special_thanks_tell_us_message_ja.png"
self.image_file.POSTER_TELL_US_MESSAGE = "poster_tell_us_message_ja.png"
else:
self.image_file.SPECIAL_THANKS_MESSAGE = "special_thanks_message_en.png"
self.image_file.SPECIAL_THANKS_TELL_US_MESSAGE = "special_thanks_tell_us_message_en.png"
self.image_file.POSTER_TELL_US_MESSAGE = "poster_tell_us_message_en.png"
poster_showcase_pagination_button_image = getImageFileFromUiUtils_AboutVrct("poster_showcase_pagination_button.png")
self.image_file.POSTER_SHOWCASE_WORLD_PAGINATION_BUTTON = SimpleNamespace(
img = poster_showcase_pagination_button_image,
width = calculateUiSize(
default_size = int(poster_showcase_pagination_button_image.width / IMAGE_STANDARD_SCALING),
scaling_float=self.SCALING_FLOAT,
is_allowed_odd=True,
),
height = calculateUiSize(
default_size = int(poster_showcase_pagination_button_image.height / IMAGE_STANDARD_SCALING),
scaling_float=self.SCALING_FLOAT,
is_allowed_odd=True,
),
)
poster_showcase_pagination_button_chato_image = getImageFileFromUiUtils_AboutVrct("poster_showcase_pagination_button_chato.png")
self.image_file.POSTER_SHOWCASE_WORLD_PAGINATION_BUTTON_CHATO = SimpleNamespace(
img = poster_showcase_pagination_button_chato_image,
width = calculateUiSize(
default_size = int(poster_showcase_pagination_button_chato_image.width / IMAGE_STANDARD_SCALING),
scaling_float=self.SCALING_FLOAT,
is_allowed_odd=True,
),
height = calculateUiSize(
default_size = int(poster_showcase_pagination_button_chato_image.height / IMAGE_STANDARD_SCALING),
scaling_float=self.SCALING_FLOAT,
is_allowed_odd=True,
),
)
def _calculateUiSize(self, default_size, is_allowed_odd:bool=True, is_zero_allowed:bool=False):
size = calculateUiSize(default_size, self.SCALING_FLOAT, is_allowed_odd, is_zero_allowed)
return size
def embedImageCTkLabel(self, parent_frame, image_file_name, image_scaling=IMAGE_STANDARD_SCALING, directly_type:str=None, fg_color:str="transparent", anchor:str="w"):
img = getImageFileFromUiUtils_AboutVrct(image_file_name, directly_type)
image_width = calculateUiSize(
default_size = int(img.width / image_scaling),
scaling_float=self.SCALING_FLOAT,
is_allowed_odd=True,
)
image_height = calculateUiSize(
default_size = int(img.height / image_scaling),
scaling_float=self.SCALING_FLOAT,
is_allowed_odd=True,
)
img_label = CTkLabel(
parent_frame,
text=None,
corner_radius=0,
height=image_height,
fg_color=fg_color,
anchor=anchor,
image=CTkImage((img), size=(image_width, image_height))
)
return img_label
def embedImageButtonCTkLabel(self, parent_frame, image_file_name, callback, image_scaling=IMAGE_STANDARD_SCALING, directly_type:str=None, fg_color:str=None, hovered_color:str=None, clicked_color:str=None, anchor:str="w", corner_radius:int=0):
fg_color = self.ctm.ABOUT_VRCT_BG if fg_color is None else fg_color
if hovered_color is None:
hovered_color = self.ctm.ABOUT_VRCT_BUTTON_HOVERED_BG_COLOR
if clicked_color is None:
clicked_color = self.ctm.ABOUT_VRCT_BUTTON_CLICKED_BG_COLOR
img_label_frame = CTkFrame(parent_frame, fg_color=fg_color, corner_radius=corner_radius, width=0, height=0)
img_label = self.embedImageCTkLabel(img_label_frame, image_file_name, image_scaling, directly_type, fg_color, anchor)
img_label_frame.configure(cursor="hand2")
img_label.configure(cursor="hand2")
img_label._canvas.configure(cursor="hand2")
bindButtonFunctionAndColor(
target_widgets=[img_label_frame, img_label],
enter_color=hovered_color,
leave_color=fg_color,
clicked_color=clicked_color,
buttonReleasedFunction=callback,
)
img_label.grid()
img_label_frame.img_label = img_label
return img_label_frame
@staticmethod
def dupTuple(value):
return (value, value)