Merge branch 'view' into UI_2.0

This commit is contained in:
Sakamoto Shiina
2023-10-19 15:26:47 +09:00
10 changed files with 155 additions and 28 deletions

View File

@@ -66,6 +66,9 @@ config_window:
compact_mode: Compact Mode compact_mode: Compact Mode
version: version %{version} version: version %{version}
restart_message: Apply changes with a restart. restart_message: Apply changes with a restart.
common_error_message:
invalid_value: Invalid value.
side_menu_labels: side_menu_labels:
appearance: Appearance appearance: Appearance
# translation: Translation # translation: Translation
@@ -75,16 +78,21 @@ config_window:
others: Others others: Others
advanced_settings: Advanced Settings advanced_settings: Advanced Settings
transparency: transparency:
label: Transparency label: Transparency
desc: Change the main window's transparency. desc: Change the main window's transparency.
appearance_theme: appearance_theme:
label: Theme [Under development] label: Theme [Under development]
desc: Change the color theme. Currently, only the Dark theme is supported. The Light theme is under development. desc: Change the color theme. Currently, only the Dark theme is supported. The Light theme is under development.
ui_size: ui_size:
label: UI Size label: UI Size
font_family: font_family:
label: Font Family label: Font Family
ui_language: ui_language:
label: UI Language label: UI Language
@@ -93,22 +101,32 @@ config_window:
mic_host: mic_host:
label: Mic Host/Driver label: Mic Host/Driver
mic_device: mic_device:
label: Mic Device label: Mic Device
mic_dynamic_energy_threshold: mic_dynamic_energy_threshold:
label_for_automatic: "Mic Energy Threshold (Current Setting: Automatic)" label_for_automatic: "Mic Energy Threshold (Current Setting: Automatic)"
desc_for_automatic: "Automatically determine microphone input sensitivity." desc_for_automatic: "Automatically determine microphone input sensitivity."
label_for_manual: "Mic Energy Threshold (Current Setting: Manual)" label_for_manual: "Mic Energy Threshold (Current Setting: Manual)"
desc_for_manual: "Manually determine the microphone input sensitivity using the slider. Press the microphone icon to input your voice and adjust the sensitivity while monitoring the volume." desc_for_manual: "Manually determine the microphone input sensitivity using the slider. Press the microphone icon to input your voice and adjust the sensitivity while monitoring the volume."
error_message: You can set it with a value between 0 to %{max}.
mic_record_timeout: mic_record_timeout:
label: Mic Record Timeout label: Mic Record Timeout
desc: Detects silence and, when the specified number of seconds has passed, considers the mic input to have ended. (Second(s)) desc: Detects silence and, when the specified number of seconds has passed, considers the mic input to have ended. (Second(s))
error_message: It cannot be greater than '%{mic_phrase_timeout_label}' with a value of 0 or more.
mic_phrase_timeout: mic_phrase_timeout:
label: Mic Phrase Timeout label: Mic Phrase Timeout
desc: Transcription processing is performed at intervals of the specified number of seconds. desc: Transcription processing is performed at intervals of the specified number of seconds.
error_message: It cannot be set lower than '%{mic_record_timeout_label}' with a value of 0 or more.
mic_max_phrase: mic_max_phrase:
label: Mic Max Phrases label: Mic Max Phrases
desc: It is the lower limit for the number of transcribed words, and only when this number is exceeded will the transcription results be displayed logs and send to VRChat. desc: It is the lower limit for the number of transcribed words, and only when this number is exceeded will the transcription results be displayed logs and send to VRChat.
error_message: You can set a number equal to or greater than 0.
mic_word_filter: mic_word_filter:
label: Mic Word Filter label: Mic Word Filter
desc: "It will not send the sentence if the word(s) included in the set list of words.\nHow to set: e.g. AAA,BBB,CCC" desc: "It will not send the sentence if the word(s) included in the set list of words.\nHow to set: e.g. AAA,BBB,CCC"
@@ -119,32 +137,46 @@ config_window:
desc_for_automatic: "Automatically determine speaker input sensitivity." desc_for_automatic: "Automatically determine speaker input sensitivity."
label_for_manual: "Speaker Energy Threshold (Current Setting: Manual)" label_for_manual: "Speaker Energy Threshold (Current Setting: Manual)"
desc_for_manual: "Manually determine the speaker input sensitivity using the slider. Press the headphones icon to listen to the audio and adjust the sensitivity while monitoring the volume." desc_for_manual: "Manually determine the speaker input sensitivity using the slider. Press the headphones icon to listen to the audio and adjust the sensitivity while monitoring the volume."
error_message: You can set it with a value between 0 to %{max}.
no_device_error_message: No speaker device detected.
speaker_record_timeout: speaker_record_timeout:
label: Speaker Record Timeout label: Speaker Record Timeout
desc: Detects silence and, when the specified number of seconds has passed, considers the speaker input to have ended. (Second(s)) desc: Detects silence and, when the specified number of seconds has passed, considers the speaker input to have ended. (Second(s))
error_message: It cannot be greater than '%{speaker_phrase_timeout_label}' with a value of 0 or more.
speaker_phrase_timeout: speaker_phrase_timeout:
label: Speaker Phrase Timeout label: Speaker Phrase Timeout
desc: Transcription processing is performed at intervals of the specified number of seconds. desc: Transcription processing is performed at intervals of the specified number of seconds.
error_message: It cannot be set lower than '%{speaker_record_timeout_label}' with a value of 0 or more.
speaker_max_phrase: speaker_max_phrase:
label: Speaker Max Phrases label: Speaker Max Phrases
desc: It is the lower limit for the number of transcribed words, and only when this number is exceeded will the transcription results be displayed logs. desc: It is the lower limit for the number of transcribed words, and only when this number is exceeded will the transcription results be displayed logs.
error_message: You can set a number equal to or greater than 0.
auto_clear_the_message_box: auto_clear_the_message_box:
label: Auto Clear The Message Box label: Auto Clear The Message Box
notice_xsoverlay: notice_xsoverlay:
label: Notification XSOverlay (VR Only) label: Notification XSOverlay (VR Only)
desc: Notify received messages by using XSOverlay's notification feature. desc: Notify received messages by using XSOverlay's notification feature.
auto_export_message_logs: auto_export_message_logs:
label: Auto Export Message Logs label: Auto Export Message Logs
desc: Automatically export the conversation messages as a text file. desc: Automatically export the conversation messages as a text file.
message_format: message_format:
label: Message Format label: Message Format
desc: "You can change the decoration of the message you want to send.\n[message] will be replaced with the message, and [translation] will be replaced with the translated message.\nIt will be used in Notification XSOverlay too." desc: "You can change the decoration of the message you want to send.\n[message] will be replaced with the message, and [translation] will be replaced with the translated message.\nIt will be used in Notification XSOverlay too."
send_message_to_vrc: send_message_to_vrc:
label: Send Message To VRChat label: Send Message To VRChat
desc: There is a way to use it without sending messages to VRChat, but it is not supported. Enable this feature when you intend to send a message to VRChat. desc: There is a way to use it without sending messages to VRChat, but it is not supported. Enable this feature when you intend to send a message to VRChat.
osc_ip_address: osc_ip_address:
label: OSC IP Address label: OSC IP Address
osc_port: osc_port:
label: OSC Port label: OSC Port

View File

@@ -67,6 +67,9 @@ config_window:
compact_mode: コンパクトモード compact_mode: コンパクトモード
version: バージョン %{version} version: バージョン %{version}
restart_message: 再起動して変更を適用する。 restart_message: 再起動して変更を適用する。
common_error_message:
invalid_value: 無効な値です。
side_menu_labels: side_menu_labels:
appearance: デザイン appearance: デザイン
# translation: 翻訳 # translation: 翻訳
@@ -76,16 +79,21 @@ config_window:
others: その他 others: その他
advanced_settings: 高度な設定 advanced_settings: 高度な設定
transparency: transparency:
label: 透明度 label: 透明度
desc: メイン画面の透明度を変更できます。 desc: メイン画面の透明度を変更できます。
appearance_theme: appearance_theme:
label: 外観テーマ [開発中] label: 外観テーマ [開発中]
desc: カラーテーマを変更できます。現在はDarkテーマのみ対応。Lightテーマは制作中です。 desc: カラーテーマを変更できます。現在はDarkテーマのみ対応。Lightテーマは制作中です。
ui_size: ui_size:
label: UIサイズ label: UIサイズ
font_family: font_family:
label: 使用フォント label: 使用フォント
ui_language: ui_language:
label: UIの言語 / UI Language label: UIの言語 / UI Language
@@ -94,22 +102,32 @@ config_window:
mic_host: mic_host:
label: マイク(ホスト/ドライバー) label: マイク(ホスト/ドライバー)
mic_device: mic_device:
label: マイク (デバイス) label: マイク (デバイス)
mic_dynamic_energy_threshold: mic_dynamic_energy_threshold:
label_for_automatic: "マイク入力感度の調整 (現在の設定: 自動)" label_for_automatic: "マイク入力感度の調整 (現在の設定: 自動)"
desc_for_automatic: マイクの入力感度を自動的に調節する。 desc_for_automatic: マイクの入力感度を自動的に調節する。
label_for_manual: "マイク入力感度の調整 (現在の設定: 手動)" label_for_manual: "マイク入力感度の調整 (現在の設定: 手動)"
desc_for_manual: スライダーを調整して入力感度を手動で決められます。マイクのアイコンを押すと、実際に声を入力し、音量を確認しながら調節できます。 desc_for_manual: スライダーを調整して入力感度を手動で決められます。マイクのアイコンを押すと、実際に声を入力し、音量を確認しながら調節できます。
error_message: 0 から %{max} までの数値で設定できます。
mic_record_timeout: mic_record_timeout:
label: 入力が終了したとみなす無音時間 label: 入力が終了したとみなす無音時間
desc: 無音を検出し、設定された秒数経過すると、音声入力が終了したとみなします。 desc: 無音を検出し、設定された秒数経過すると、音声入力が終了したとみなします。
error_message: 0 以上で 「%{mic_phrase_timeout_label}」より大きくすることはできません。
mic_phrase_timeout: mic_phrase_timeout:
label: 一度に文字起こしする時間の長さ label: 一度に文字起こしする時間の長さ
desc: 設定された秒数ごとに文字起こし処理が行われます。 desc: 設定された秒数ごとに文字起こし処理が行われます。
error_message: 0 以上で 「%{mic_record_timeout_label}」より小さくすることはできません。
mic_max_phrase: mic_max_phrase:
label: 送信するまでに保持する単語数 label: 送信するまでに保持する単語数
desc: 文字起こしされた単語数の下限値で、この数値を超えた場合のみ結果をVRChatへ送信し、ログに表示します。 desc: 文字起こしされた単語数の下限値で、この数値を超えた場合のみ結果をVRChatへ送信し、ログに表示します。
error_message: 0以上の数値を設定できます。
mic_word_filter: mic_word_filter:
label: ワードフィルター label: ワードフィルター
desc: "設定された単語を検出すると、その文章は送信されません。\n設定の例: AAA,BBB,CCC" desc: "設定された単語を検出すると、その文章は送信されません。\n設定の例: AAA,BBB,CCC"
@@ -120,32 +138,45 @@ config_window:
desc_for_automatic: スピーカーの入力感度を自動的に調節する。 desc_for_automatic: スピーカーの入力感度を自動的に調節する。
label_for_manual: "スピーカー入力感度の調整 (現在の設定: 手動)" label_for_manual: "スピーカー入力感度の調整 (現在の設定: 手動)"
desc_for_manual: スライダーを調整して入力感度を手動で決められます。ヘッドフォンのアイコンを押すと、実際に音声を聞き取り、音量を確認しながら調節できます。 desc_for_manual: スライダーを調整して入力感度を手動で決められます。ヘッドフォンのアイコンを押すと、実際に音声を聞き取り、音量を確認しながら調節できます。
error_message: 0 から %{max} までの数値で設定できます。
no_device_error_message: スピーカーデバイスが検出されませんでした。
speaker_record_timeout: speaker_record_timeout:
label: 入力が終了したとみなす無音時間 label: 入力が終了したとみなす無音時間
desc: 無音を検出し、設定された秒数経過すると、音声入力が終了したとみなします。 desc: 無音を検出し、設定された秒数経過すると、音声入力が終了したとみなします。
error_message: 0 以上で 「%{speaker_phrase_timeout_label}」より大きくすることはできません。
speaker_phrase_timeout: speaker_phrase_timeout:
label: 一度に文字起こしする時間の長さ label: 一度に文字起こしする時間の長さ
desc: 設定された秒数ごとに文字起こし処理が行われます。 desc: 設定された秒数ごとに文字起こし処理が行われます。
error_message: 0 以上で 「%{speaker_record_timeout_label}」より小さくすることはできません。
speaker_max_phrase: speaker_max_phrase:
label: ログとして表示するまでに保持する単語数 label: ログとして表示するまでに保持する単語数
desc: 文字起こしされた単語数の下限値で、この数値を超えた場合のみ結果をログに表示します。 desc: 文字起こしされた単語数の下限値で、この数値を超えた場合のみ結果をログに表示します。
error_message: 0以上の数値を設定できます。
auto_clear_the_message_box: auto_clear_the_message_box:
label: 送信後はチャットボックスを空にする label: 送信後はチャットボックスを空にする
notice_xsoverlay: notice_xsoverlay:
label: XSOverlayでの通知受け取り機能を有効 (VR限定) label: XSOverlayでの通知受け取り機能を有効 (VR限定)
desc: 文字起こし受信されたメッセージをXSOverlayの機能を使って通知として受け取れます。 desc: 文字起こし受信されたメッセージをXSOverlayの機能を使って通知として受け取れます。
auto_export_message_logs: auto_export_message_logs:
label: 会話ログを自動的に保存する label: 会話ログを自動的に保存する
desc: テキストファイルとしてログがlogsフォルダ内に保存されます。 desc: テキストファイルとしてログがlogsフォルダ内に保存されます。
message_format: message_format:
label: 送信するメッセージのフォーマット label: 送信するメッセージのフォーマット
desc: "VRChatで相手に実際に見えるフォーマットを変更できます。\n[message]がメッセージに置換され、\n[translation]が翻訳されたメッセージに置換されます。\n※XSOverlayでの通知受け取り機能でも使われます。" desc: "VRChatで相手に実際に見えるフォーマットを変更できます。\n[message]がメッセージに置換され、\n[translation]が翻訳されたメッセージに置換されます。\n※XSOverlayでの通知受け取り機能でも使われます。"
send_message_to_vrc: send_message_to_vrc:
label: VRChatにメッセージを送信する label: VRChatにメッセージを送信する
desc: "サポート対象外ですが、VRChatにメッセージを送信せずに使う方法があります。送信したい場合、この機能を有効にする事を忘れないでください。" desc: "サポート対象外ですが、VRChatにメッセージを送信せずに使う方法があります。送信したい場合、この機能を有効にする事を忘れないでください。"
osc_ip_address: osc_ip_address:
label: OSC IP Address label: OSC IP Address
osc_port: osc_port:
label: OSC Port label: OSC Port

72
view.py
View File

@@ -593,7 +593,8 @@ class View():
index = self.view_variable.LIST_UI_SCALING.index(str(target_percentage) + "%") index = self.view_variable.LIST_UI_SCALING.index(str(target_percentage) + "%")
callFunctionIfCallable(self.view_variable.CALLBACK_SET_UI_SCALING, self.view_variable.LIST_UI_SCALING[index]) callFunctionIfCallable(self.view_variable.CALLBACK_SET_UI_SCALING, self.view_variable.LIST_UI_SCALING[index])
callFunctionIfCallable(self.view_variable.CALLBACK_RESTART_SOFTWARE) callFunctionIfCallable(self.view_variable.CALLBACK_RESTART_SOFTWARE)
else:
self._hideConfirmationModal()
# ※Below 40% of the UI size is not supported, and we cannot handle it at this time. # ※Below 40% of the UI size is not supported, and we cannot handle it at this time.
@@ -1040,38 +1041,89 @@ class View():
def showErrorMessage_MicEnergyThreshold(self): def showErrorMessage_MicEnergyThreshold(self):
self._showErrorMessage(vrct_gui.config_window.sb__progressbar_x_slider__entry_mic_energy_threshold, "Mic Energy Threshold Error Message") self._showErrorMessage(
vrct_gui.config_window.sb__progressbar_x_slider__entry_mic_energy_threshold,
self._makeInvalidValueErrorMessage(i18n.t("config_window.mic_dynamic_energy_threshold.error_message", max=config.MAX_MIC_ENERGY_THRESHOLD))
)
def showErrorMessage_MicRecordTimeout(self): def showErrorMessage_MicRecordTimeout(self):
self._showErrorMessage(vrct_gui.config_window.sb__entry_mic_record_timeout, "Mic Record Timeout Error Message") self._showErrorMessage(
vrct_gui.config_window.sb__entry_mic_record_timeout,
self._makeInvalidValueErrorMessage(
i18n.t(
"config_window.mic_record_timeout.error_message",
mic_phrase_timeout_label=i18n.t("config_window.mic_phrase_timeout.label")
)
)
)
def showErrorMessage_MicPhraseTimeout(self): def showErrorMessage_MicPhraseTimeout(self):
self._showErrorMessage(vrct_gui.config_window.sb__entry_mic_phrase_timeout, "Mic Phrase Timeout Error Message") self._showErrorMessage(
vrct_gui.config_window.sb__entry_mic_phrase_timeout,
self._makeInvalidValueErrorMessage(
i18n.t(
"config_window.mic_phrase_timeout.error_message",
mic_record_timeout_label=i18n.t("config_window.mic_record_timeout.label")
)
)
)
def showErrorMessage_MicMaxPhrases(self): def showErrorMessage_MicMaxPhrases(self):
self._showErrorMessage(vrct_gui.config_window.sb__entry_mic_max_phrases, "Mic Max Phrases Error Message") self._showErrorMessage(
vrct_gui.config_window.sb__entry_mic_max_phrases,
self._makeInvalidValueErrorMessage(i18n.t("config_window.mic_max_phrase.error_message"))
)
def showErrorMessage_SpeakerEnergyThreshold(self): def showErrorMessage_SpeakerEnergyThreshold(self):
self._showErrorMessage(vrct_gui.config_window.sb__progressbar_x_slider__entry_speaker_energy_threshold, "Speaker Energy Threshold Error Message") self._showErrorMessage(
vrct_gui.config_window.sb__progressbar_x_slider__entry_speaker_energy_threshold,
self._makeInvalidValueErrorMessage(i18n.t("config_window.speaker_dynamic_energy_threshold.error_message", max=config.MAX_SPEAKER_ENERGY_THRESHOLD))
)
def showErrorMessage_SpeakerRecordTimeout(self): def showErrorMessage_SpeakerRecordTimeout(self):
self._showErrorMessage(vrct_gui.config_window.sb__entry_speaker_record_timeout, "Speaker Record Timeout Error Message") self._showErrorMessage(
vrct_gui.config_window.sb__entry_speaker_record_timeout,
self._makeInvalidValueErrorMessage(
i18n.t(
"config_window.speaker_record_timeout.error_message",
speaker_phrase_timeout_label=i18n.t("config_window.speaker_phrase_timeout.label")
)
)
)
def showErrorMessage_SpeakerPhraseTimeout(self): def showErrorMessage_SpeakerPhraseTimeout(self):
self._showErrorMessage(vrct_gui.config_window.sb__entry_speaker_phrase_timeout, "Speaker Phrase Timeout Error Message") self._showErrorMessage(
vrct_gui.config_window.sb__entry_speaker_phrase_timeout,
self._makeInvalidValueErrorMessage(
i18n.t(
"config_window.speaker_phrase_timeout.error_message",
speaker_record_timeout_label=i18n.t("config_window.speaker_record_timeout.label")
)
)
)
def showErrorMessage_SpeakerMaxPhrases(self): def showErrorMessage_SpeakerMaxPhrases(self):
self._showErrorMessage(vrct_gui.config_window.sb__entry_speaker_max_phrases, "Speaker Max Phrases Error Message") self._showErrorMessage(
vrct_gui.config_window.sb__entry_speaker_max_phrases,
self._makeInvalidValueErrorMessage(i18n.t("config_window.speaker_max_phrase.error_message"))
)
def showErrorMessage_CheckSpeakerThreshold_NoDevice(self): def showErrorMessage_CheckSpeakerThreshold_NoDevice(self):
self._showErrorMessage(vrct_gui.config_window.sb__progressbar_x_slider__active_button_speaker_energy_threshold, "No speaker device detected") self._showErrorMessage(
vrct_gui.config_window.sb__progressbar_x_slider__active_button_speaker_energy_threshold,
self._makeInvalidValueErrorMessage(i18n.t("config_window.speaker_dynamic_energy_threshold.no_device_error_message"))
)
def _showErrorMessage(self, target_widget, message): def _showErrorMessage(self, target_widget, message):
self.view_variable.VAR_ERROR_MESSAGE.set(message) self.view_variable.VAR_ERROR_MESSAGE.set(message)
vrct_gui._showErrorMessage(target_widget=target_widget) vrct_gui._showErrorMessage(target_widget=target_widget)
@staticmethod
def _makeInvalidValueErrorMessage(error_message):
return i18n.t("config_window.common_error_message.invalid_value") + "\n" + error_message
def clearErrorMessage(self): def clearErrorMessage(self):
vrct_gui._clearErrorMessage() vrct_gui._clearErrorMessage()

View File

@@ -3,7 +3,7 @@ from types import SimpleNamespace
from customtkinter import CTkToplevel, CTkFrame, CTkLabel, CTkFont, CTkScrollableFrame from customtkinter import CTkToplevel, CTkFrame, CTkLabel, CTkFont, CTkScrollableFrame
from time import sleep from time import sleep
from .ui_utils import bindButtonReleaseFunction, bindEnterAndLeaveColor, bindButtonPressColor, getLatestHeight, applyUiScalingAndFixTheBugScrollBar from .ui_utils import bindButtonReleaseFunction, bindEnterAndLeaveColor, bindButtonPressColor, getLatestHeight, applyUiScalingAndFixTheBugScrollBar, getLatestWidth, getLongestText
from functools import partial from functools import partial
from utils import isEven, makeEven from utils import isEven, makeEven
@@ -22,6 +22,7 @@ class _CreateDropdownMenuWindow(CTkToplevel):
value_ipady, value_ipady,
value_pady, value_pady,
value_font_size, value_font_size,
dropdown_menu_default_min_width,
window_bg_color, window_bg_color,
window_border_color, window_border_color,
@@ -53,6 +54,7 @@ class _CreateDropdownMenuWindow(CTkToplevel):
self.value_ipady=value_ipady self.value_ipady=value_ipady
self.value_pady=value_pady self.value_pady=value_pady
self.value_font_size=value_font_size self.value_font_size=value_font_size
self.dropdown_menu_default_min_width=dropdown_menu_default_min_width
self.window_bg_color=window_bg_color self.window_bg_color=window_bg_color
self.window_border_color=window_border_color self.window_border_color=window_border_color
@@ -97,19 +99,19 @@ class _CreateDropdownMenuWindow(CTkToplevel):
wrapper_widget=self.dropdown_menu_widgets[dropdown_menu_widget_id].wrapper_widget, wrapper_widget=self.dropdown_menu_widgets[dropdown_menu_widget_id].wrapper_widget,
attach_widget=self.dropdown_menu_widgets[dropdown_menu_widget_id].attach_widget, attach_widget=self.dropdown_menu_widgets[dropdown_menu_widget_id].attach_widget,
dropdown_menu_width=self.dropdown_menu_widgets[dropdown_menu_widget_id].dropdown_menu_settings.dropdown_menu_width, dropdown_menu_min_width=self.dropdown_menu_widgets[dropdown_menu_widget_id].dropdown_menu_settings.dropdown_menu_min_width,
dropdown_menu_height=self.dropdown_menu_widgets[dropdown_menu_widget_id].dropdown_menu_settings.dropdown_menu_height, dropdown_menu_height=self.dropdown_menu_widgets[dropdown_menu_widget_id].dropdown_menu_settings.dropdown_menu_height,
max_display_length=self.dropdown_menu_widgets[dropdown_menu_widget_id].dropdown_menu_settings.max_display_length, max_display_length=self.dropdown_menu_widgets[dropdown_menu_widget_id].dropdown_menu_settings.max_display_length,
) )
def createDropdownMenuBox(self, dropdown_menu_widget_id, dropdown_menu_values, command, wrapper_widget, attach_widget, dropdown_menu_width=None, dropdown_menu_height=None, max_display_length=None): def createDropdownMenuBox(self, dropdown_menu_widget_id, dropdown_menu_values, command, wrapper_widget, attach_widget, dropdown_menu_min_width=None, dropdown_menu_height=None, max_display_length=None):
self.attach_widget = attach_widget self.attach_widget = attach_widget
self.wrapper_widget = wrapper_widget self.wrapper_widget = wrapper_widget
self.update()
self.new_width = dropdown_menu_width if dropdown_menu_width is not None else self.attach_widget.winfo_width() self.new_width = dropdown_menu_min_width if dropdown_menu_min_width is not None else self.dropdown_menu_default_min_width
self.new_height = dropdown_menu_height if dropdown_menu_height is not None else self.init_height self.new_height = dropdown_menu_height if dropdown_menu_height is not None else self.init_height
self.max_display_length = max_display_length if max_display_length is not None else self.init_max_display_length self.max_display_length = max_display_length if max_display_length is not None else self.init_max_display_length
@@ -151,7 +153,7 @@ class _CreateDropdownMenuWindow(CTkToplevel):
wrapper_widget=wrapper_widget, wrapper_widget=wrapper_widget,
attach_widget=attach_widget, attach_widget=attach_widget,
dropdown_menu_settings=SimpleNamespace( dropdown_menu_settings=SimpleNamespace(
dropdown_menu_width=dropdown_menu_width, dropdown_menu_min_width=dropdown_menu_min_width,
dropdown_menu_height=dropdown_menu_height, dropdown_menu_height=dropdown_menu_height,
max_display_length=max_display_length, max_display_length=max_display_length,
), ),
@@ -166,6 +168,7 @@ class _CreateDropdownMenuWindow(CTkToplevel):
def _createDropdownMenuValues(self, dropdown_menu_widget_id, dropdown_menu_values, command): def _createDropdownMenuValues(self, dropdown_menu_widget_id, dropdown_menu_values, command):
longest_text = getLongestText(dropdown_menu_values)
self.dropdown_menu_values_wrapper = CTkFrame(self.scroll_frame_container, corner_radius=0, fg_color=self.window_bg_color) self.dropdown_menu_values_wrapper = CTkFrame(self.scroll_frame_container, corner_radius=0, fg_color=self.window_bg_color)
self.dropdown_menu_values_wrapper.grid(row=0, column=0, sticky="nsew") self.dropdown_menu_values_wrapper.grid(row=0, column=0, sticky="nsew")
self.dropdown_menu_values_wrapper.grid_columnconfigure(0, weight=1) self.dropdown_menu_values_wrapper.grid_columnconfigure(0, weight=1)
@@ -177,10 +180,10 @@ class _CreateDropdownMenuWindow(CTkToplevel):
__dropdown_menu_value_wrapper.grid_rowconfigure((0,2), weight=1) __dropdown_menu_value_wrapper.grid_rowconfigure((0,2), weight=1)
__dropdown_menu_value_wrapper.grid_columnconfigure(0, weight=1) # __dropdown_menu_value_wrapper.grid_columnconfigure(0, weight=1)
__label_widget = CTkLabel( __label_widget = CTkLabel(
__dropdown_menu_value_wrapper, __dropdown_menu_value_wrapper,
text="Aa", text=longest_text,
height=0, height=0,
corner_radius=0, corner_radius=0,
font=CTkFont(family=self.settings.FONT_FAMILY, size=self.value_font_size, weight="normal"), font=CTkFont(family=self.settings.FONT_FAMILY, size=self.value_font_size, weight="normal"),
@@ -190,7 +193,13 @@ class _CreateDropdownMenuWindow(CTkToplevel):
# setattr(self, f"l", __label_widget) # setattr(self, f"l", __label_widget)
__label_widget.grid(row=1, column=0, padx=self.value_ipadx, pady=self.value_ipady, sticky="w") __label_widget.grid(row=1, column=0, padx=self.value_ipadx, pady=self.value_ipady, sticky="w")
label_height = getLatestHeight(__dropdown_menu_value_wrapper) label_height = getLatestHeight(__dropdown_menu_value_wrapper)
label_width = getLatestWidth(__label_widget)
label_width += self.scroll_frame_container._scrollbar.winfo_width() + (self.window_border_width*2) + (self.scrollbar_ipadx[0] + self.scrollbar_ipadx[1])
if label_width > self.new_width:
additional_width = int(label_width - self.new_width)
self.new_width += additional_width
# for fixing 1px bug # for fixing 1px bug
if isEven(label_height) is False: if isEven(label_height) is False:
@@ -223,7 +232,6 @@ class _CreateDropdownMenuWindow(CTkToplevel):
dropdown_menu_value_wrapper.grid_rowconfigure((0,2), weight=1) dropdown_menu_value_wrapper.grid_rowconfigure((0,2), weight=1)
dropdown_menu_value_wrapper.grid_columnconfigure(0, weight=1)
label_widget = CTkLabel( label_widget = CTkLabel(
dropdown_menu_value_wrapper, dropdown_menu_value_wrapper,
text=dropdown_menu_value, text=dropdown_menu_value,

View File

@@ -11,7 +11,6 @@ class _CreateSelectableLanguagesWindow(CTkToplevel):
self.withdraw() self.withdraw()
# configure window
self.title("_CreateSelectableLanguagesWindow") self.title("_CreateSelectableLanguagesWindow")
self.overrideredirect(True) self.overrideredirect(True)
@@ -24,7 +23,8 @@ class _CreateSelectableLanguagesWindow(CTkToplevel):
self.settings = settings self.settings = settings
self._view_variable = view_variable self._view_variable = view_variable
self.bind("<FocusOut>", lambda e: vrct_gui._closeSelectableLanguagesWindow())
self.bind("<FocusOut>", self.focusOutFunction)
@@ -180,3 +180,8 @@ class _CreateSelectableLanguagesWindow(CTkToplevel):
self.is_created = True self.is_created = True
def focusOutFunction(self, e):
if str(e.widget) != ".!_createselectablelanguageswindow": return
self.vrct_gui._closeSelectableLanguagesWindow()

View File

@@ -96,7 +96,7 @@ class _SettingBoxGenerator():
for_var_label_text, for_var_desc_text, for_var_label_text, for_var_desc_text,
optionmenu_attr_name, optionmenu_attr_name,
command, command,
dropdown_menu_width=None, dropdown_menu_min_width=None,
dropdown_menu_values=None, dropdown_menu_values=None,
variable=None, variable=None,
): ):
@@ -144,7 +144,7 @@ class _SettingBoxGenerator():
command=adjustedCommand, command=adjustedCommand,
wrapper_widget=self.config_window.main_bg_container, wrapper_widget=self.config_window.main_bg_container,
attach_widget=option_menu_widget, attach_widget=option_menu_widget,
dropdown_menu_width=dropdown_menu_width, dropdown_menu_min_width=dropdown_menu_min_width,
) )
return setting_box_frame return setting_box_frame

View File

@@ -70,7 +70,6 @@ def createSettingBox_Appearance(setting_box_wrapper, config_window, settings, vi
for_var_desc_text=view_variable.VAR_DESC_FONT_FAMILY, for_var_desc_text=view_variable.VAR_DESC_FONT_FAMILY,
optionmenu_attr_name="sb__optionmenu_font_family", optionmenu_attr_name="sb__optionmenu_font_family",
dropdown_menu_values=view_variable.LIST_FONT_FAMILY, dropdown_menu_values=view_variable.LIST_FONT_FAMILY,
dropdown_menu_width=settings.uism.RESPONSIVE_UI_SIZE_INT_300,
command=lambda value: optionmenu_font_family_callback(value), command=lambda value: optionmenu_font_family_callback(value),
variable=view_variable.VAR_FONT_FAMILY, variable=view_variable.VAR_FONT_FAMILY,
) )

View File

@@ -58,7 +58,6 @@ def createSettingBox_Mic(setting_box_wrapper, config_window, settings, view_vari
for_var_desc_text=view_variable.VAR_DESC_MIC_DEVICE, for_var_desc_text=view_variable.VAR_DESC_MIC_DEVICE,
optionmenu_attr_name="sb__optionmenu_mic_device", optionmenu_attr_name="sb__optionmenu_mic_device",
dropdown_menu_values=view_variable.LIST_MIC_DEVICE, dropdown_menu_values=view_variable.LIST_MIC_DEVICE,
dropdown_menu_width=settings.uism.RESPONSIVE_UI_SIZE_INT_500,
command=lambda value: optionmenu_input_mic_device_callback(value), command=lambda value: optionmenu_input_mic_device_callback(value),
variable=view_variable.VAR_MIC_DEVICE, variable=view_variable.VAR_MIC_DEVICE,
) )

View File

@@ -217,7 +217,7 @@ class UiScalingManager():
self.config_window.SB__ERROR_MESSAGE_IPADX = (self._calculateUiSize(10), self._calculateUiSize(10)) self.config_window.SB__ERROR_MESSAGE_IPADX = (self._calculateUiSize(10), self._calculateUiSize(10))
self.config_window.SB__ERROR_MESSAGE_IPADY = (self._calculateUiSize(6), self._calculateUiSize(6)) self.config_window.SB__ERROR_MESSAGE_IPADY = (self._calculateUiSize(6), self._calculateUiSize(6))
self.config_window.SB__ERROR_MESSAGE_FONT_SIZE = self._calculateUiSize(12) self.config_window.SB__ERROR_MESSAGE_FONT_SIZE = self._calculateUiSize(14)
self.config_window.SB__SELECTOR_FONT_SIZE = self._calculateUiSize(14) self.config_window.SB__SELECTOR_FONT_SIZE = self._calculateUiSize(14)
@@ -243,6 +243,7 @@ class UiScalingManager():
self.config_window.SB__DROPDOWN_MENU_VALUE_IPADY = (self._calculateUiSize(6), self._calculateUiSize(6)) self.config_window.SB__DROPDOWN_MENU_VALUE_IPADY = (self._calculateUiSize(6), self._calculateUiSize(6))
self.config_window.SB__DROPDOWN_MENU_VALUE_PADY = (0, self._calculateUiSize(1, is_allowed_odd=True)) self.config_window.SB__DROPDOWN_MENU_VALUE_PADY = (0, self._calculateUiSize(1, is_allowed_odd=True))
self.config_window.SB__DROPDOWN_MENU_VALUE_FONT_SIZE = self._calculateUiSize(14) self.config_window.SB__DROPDOWN_MENU_VALUE_FONT_SIZE = self._calculateUiSize(14)
self.config_window.SB__DROPDOWN_MENU_VALUE_DEFAULT_MIN_WIDTH = self._calculateUiSize(200)
self.config_window.SB__SWITCH_WIDTH = self._calculateUiSize(50) self.config_window.SB__SWITCH_WIDTH = self._calculateUiSize(50)

View File

@@ -81,6 +81,7 @@ class VRCT_GUI(CTk):
value_ipady=self.settings.config_window.uism.SB__DROPDOWN_MENU_VALUE_IPADY, value_ipady=self.settings.config_window.uism.SB__DROPDOWN_MENU_VALUE_IPADY,
value_pady=self.settings.config_window.uism.SB__DROPDOWN_MENU_VALUE_PADY, value_pady=self.settings.config_window.uism.SB__DROPDOWN_MENU_VALUE_PADY,
value_font_size=self.settings.config_window.uism.SB__DROPDOWN_MENU_VALUE_FONT_SIZE, value_font_size=self.settings.config_window.uism.SB__DROPDOWN_MENU_VALUE_FONT_SIZE,
dropdown_menu_default_min_width=self.settings.config_window.uism.SB__DROPDOWN_MENU_VALUE_DEFAULT_MIN_WIDTH,
window_bg_color=self.settings.config_window.ctm.SB__DROPDOWN_MENU_WINDOW_BG_COLOR, window_bg_color=self.settings.config_window.ctm.SB__DROPDOWN_MENU_WINDOW_BG_COLOR,
window_border_color=self.settings.config_window.ctm.SB__DROPDOWN_MENU_WINDOW_BORDER_COLOR, window_border_color=self.settings.config_window.ctm.SB__DROPDOWN_MENU_WINDOW_BORDER_COLOR,
@@ -291,7 +292,6 @@ class VRCT_GUI(CTk):
self.update() self.update()
screen_height = self.winfo_screenheight() screen_height = self.winfo_screenheight()
window_height = self.winfo_height() window_height = self.winfo_height()
print(screen_height, window_height)
if screen_height < window_height: if screen_height < window_height:
return True return True
else: else: