diff --git a/UmaUmaChecker/locale/UmaUmaChecker.pot b/UmaUmaChecker/locale/UmaUmaChecker.pot
index c426a8e..1f1695a 100644
--- a/UmaUmaChecker/locale/UmaUmaChecker.pot
+++ b/UmaUmaChecker/locale/UmaUmaChecker.pot
@@ -1,274 +1,279 @@
-#: umaumachecker\src\ui\settingdialog.cpp:137
+#: src\ui\settingdialog.cpp:137
msgid "*Need to restart application."
msgstr ""
-#: umaumachecker\src\ui\checkupdatedialog.cpp:30
+#: src\ui\checkupdatedialog.cpp:30
#, c-format
msgid "
Available update %s
Update history
"
msgstr ""
-#: umaumachecker\src\ui\mainframe.cpp:66
+#: src\ui\mainframe.cpp:70
msgid "About"
msgstr ""
-#: umaumachecker\src\ui\aboutdialog.cpp:14
+#: src\ui\aboutdialog.cpp:14
msgid "About UmaUmaChecker"
msgstr ""
-#: umaumachecker\src\ui\settingdialog.cpp:307
+#: src\ui\mainframe.cpp:224
+msgid "Always on top"
+msgstr ""
+
+#: src\ui\settingdialog.cpp:309
msgid "Apply after restart."
msgstr ""
-#: umaumachecker\src\ui\settingdialog.cpp:150
+#: src\ui\settingdialog.cpp:150
msgid "BitBlt"
msgstr ""
-#: umaumachecker\src\ui\settingdialog.cpp:174
+#: src\ui\settingdialog.cpp:174
msgid "Browse"
msgstr ""
-#: umaumachecker\src\ui\settingdialog.cpp:208
+#: src\ui\settingdialog.cpp:208
msgid "Cancel"
msgstr ""
-#: umaumachecker\src\ui\settingdialog.cpp:146
+#: src\ui\settingdialog.cpp:146
msgid "Capture Type"
msgstr ""
-#: umaumachecker\src\ui\mainframe.cpp:53
+#: src\ui\mainframe.cpp:57
msgid ""
"Capture Umamusume window.\n"
"Click the right button to open save location."
msgstr ""
-#: umaumachecker\src\ui\settingdialog.cpp:196
+#: src\ui\settingdialog.cpp:196
msgid "Capture screen if event is not recognized"
msgstr ""
-#: umaumachecker\src\ui\aboutdialog.cpp:68
+#: src\ui\aboutdialog.cpp:68
msgid "Check Update"
msgstr ""
-#: umaumachecker\src\ui\mainframe.cpp:93
+#: src\ui\mainframe.cpp:97
msgid "Choise"
msgstr ""
-#: umaumachecker\src\ui\aboutdialog.cpp:45
+#: src\ui\aboutdialog.cpp:45
msgid "Contain the following libraries:"
msgstr ""
-#: umaumachecker\src\ui\settingdialog.cpp:88
+#: src\ui\settingdialog.cpp:88
msgid "Dark"
msgstr ""
-#: umaumachecker\src\ui\settingdialog.cpp:193
+#: src\ui\settingdialog.cpp:193
msgid "Debug Mode"
msgstr ""
-#: umaumachecker\src\ui\checkupdatedialog.cpp:39
+#: src\ui\checkupdatedialog.cpp:39
msgid "Do not check on startup."
msgstr ""
-#: umaumachecker\src\ui\settingdialog.cpp:110
+#: src\ui\settingdialog.cpp:110
msgid "Enable Status Bar"
msgstr ""
-#: umaumachecker\src\ui\settingdialog.cpp:117
+#: src\ui\settingdialog.cpp:117
msgid "Enable auto start on startup"
msgstr ""
-#: umaumachecker\src\ui\mainframe.cpp:212
+#: src\ui\mainframe.cpp:231
msgid "Error"
msgstr ""
-#: umaumachecker\src\ui\mainframe.cpp:82
+#: src\ui\mainframe.cpp:86
msgid "Event Name"
msgstr ""
-#: umaumachecker\src\ui\mainframe.cpp:318
+#: src\ui\mainframe.cpp:337
msgid "Failed to capture."
msgstr ""
-#: umaumachecker\src\data\eventlibrary.cpp:57
+#: src\data\eventlibrary.cpp:57
msgid "Failed to load Scenario Event Data."
msgstr ""
-#: umaumachecker\src\data\eventlibrary.cpp:61
+#: src\data\eventlibrary.cpp:61
msgid "Failed to load Skill Data."
msgstr ""
-#: umaumachecker\src\data\eventlibrary.cpp:49
+#: src\data\eventlibrary.cpp:49
msgid "Failed to load SupportCard Event Data."
msgstr ""
-#: umaumachecker\src\data\eventlibrary.cpp:53
+#: src\data\eventlibrary.cpp:53
msgid "Failed to load Umamusume Event Data."
msgstr ""
-#: umaumachecker\src\ui\mainframe.cpp:258
+#: src\ui\mainframe.cpp:277
msgid "Failed to save image."
msgstr ""
-#: umaumachecker\src\ui\settingdialog.cpp:179
+#: src\ui\settingdialog.cpp:179
msgid "File Type"
msgstr ""
-#: umaumachecker\src\ui\settingdialog.cpp:35
+#: src\ui\settingdialog.cpp:35
msgid "General"
msgstr ""
-#: umaumachecker\src\ui\settingdialog.cpp:106
+#: src\ui\settingdialog.cpp:106
msgid "Hide \"no choise\" event"
msgstr ""
-#: umaumachecker\src\ui\settingdialog.cpp:141
+#: src\ui\settingdialog.cpp:141
msgid ""
"Increase the value then CPU usage and Memory increase.\n"
"Decrease the value then CPU usage and Memory decrease but be slowly recognize event."
msgstr ""
-#: umaumachecker\src\ui\settingdialog.cpp:92
+#: src\ui\settingdialog.cpp:92
msgid "Language"
msgstr ""
-#: umaumachecker\src\ui\settingdialog.cpp:87
+#: src\ui\settingdialog.cpp:87
msgid "Light"
msgstr ""
-#: umaumachecker\src\ui\settingdialog.cpp:166
+#: src\ui\settingdialog.cpp:166
msgid "Location"
msgstr ""
-#: umaumachecker\src\ui\settingdialog.cpp:78
+#: src\ui\settingdialog.cpp:78
msgid "Max number of effect line"
msgstr ""
-#: umaumachecker\src\ui\mainframe.cpp:57
-#: umaumachecker\src\ui\mainframe.cpp:312
+#: src\ui\mainframe.cpp:61
+#: src\ui\mainframe.cpp:331
msgid "Merge umamusume skill tab as an image."
msgstr ""
-#: umaumachecker\src\ui\settingdialog.cpp:264
+#: src\ui\settingdialog.cpp:265
msgid "No available update."
msgstr ""
-#: umaumachecker\src\ui\mainframe.cpp:264
-#: umaumachecker\src\ui\mainframe.cpp:278
+#: src\ui\mainframe.cpp:283
+#: src\ui\mainframe.cpp:297
msgid "Not found Umamusume window."
msgstr ""
-#: umaumachecker\src\ui\settingdialog.cpp:114
+#: src\ui\settingdialog.cpp:114
msgid "Notice on startup if there is available update"
msgstr ""
-#: umaumachecker\src\ui\settingdialog.cpp:128
+#: src\ui\settingdialog.cpp:128
msgid "Number of OCR"
msgstr ""
-#: umaumachecker\src\ui\settingdialog.cpp:124
+#: src\ui\settingdialog.cpp:124
msgid "OCR Setting"
msgstr ""
-#: umaumachecker\src\ui\mainframe.cpp:212
+#: src\ui\mainframe.cpp:231
msgid "Please stop merging image to exit."
msgstr ""
-#: umaumachecker\src\ui\mainframe.cpp:60
-#: umaumachecker\src\ui\previewframe.cpp:14
+#: src\ui\mainframe.cpp:64
+#: src\ui\previewframe.cpp:14
msgid "Preview"
msgstr ""
-#: umaumachecker\src\ui\previewframe.cpp:29
-#: umaumachecker\src\ui\previewframe.cpp:108
+#: src\ui\previewframe.cpp:29
+#: src\ui\previewframe.cpp:108
msgid "Save an image"
msgstr ""
-#: umaumachecker\src\ui\settingdialog.cpp:161
+#: src\ui\settingdialog.cpp:161
msgid "Screenshot"
msgstr ""
-#: umaumachecker\src\ui\settingdialog.cpp:269
+#: src\ui\settingdialog.cpp:270
msgid "Select screenshot save location"
msgstr ""
-#: umaumachecker\src\ui\mainframe.cpp:63
-#: umaumachecker\src\ui\settingdialog.cpp:21
+#: src\ui\mainframe.cpp:67
+#: src\ui\settingdialog.cpp:21
msgid "Setting"
msgstr ""
-#: umaumachecker\src\ui\checkupdatedialog.cpp:45
+#: src\ui\checkupdatedialog.cpp:45
msgid "Skip"
msgstr ""
-#: umaumachecker\src\ui\mainframe.cpp:49
-#: umaumachecker\src\ui\mainframe.cpp:223
+#: src\ui\mainframe.cpp:53
+#: src\ui\mainframe.cpp:242
msgid "Start"
msgstr ""
-#: umaumachecker\src\ui\mainframe.cpp:227
+#: src\ui\mainframe.cpp:215
+#: src\ui\mainframe.cpp:246
msgid "Stop"
msgstr ""
-#: umaumachecker\src\ui\mainframe.cpp:299
-#: umaumachecker\src\ui\mainframe.cpp:303
+#: src\ui\mainframe.cpp:318
+#: src\ui\mainframe.cpp:322
msgid "Stop merge."
msgstr ""
-#: umaumachecker\src\ui\settingdialog.cpp:94
+#: src\ui\settingdialog.cpp:94
msgid "System Language"
msgstr ""
-#: umaumachecker\src\ui\settingdialog.cpp:85
+#: src\ui\settingdialog.cpp:85
msgid "Theme"
msgstr ""
-#: umaumachecker\src\ui\mainframe.cpp:74
+#: src\ui\mainframe.cpp:78
msgid "Training Umamusume"
msgstr ""
-#: umaumachecker\src\version.h:11
-#: umaumachecker\src\ui\mainframe.cpp:258
-#: umaumachecker\src\ui\mainframe.cpp:264
-#: umaumachecker\src\ui\settingdialog.cpp:259
-#: umaumachecker\src\ui\settingdialog.cpp:264
+#: src\version.h:11
+#: src\ui\mainframe.cpp:277
+#: src\ui\mainframe.cpp:283
+#: src\ui\settingdialog.cpp:260
+#: src\ui\settingdialog.cpp:265
msgid "UmaUmaChecker"
msgstr ""
-#: umaumachecker\src\ui\checkupdatedialog.cpp:48
-#: umaumachecker\src\ui\settingdialog.cpp:41
+#: src\ui\checkupdatedialog.cpp:48
+#: src\ui\settingdialog.cpp:41
msgid "Update"
msgstr ""
-#: umaumachecker\src\ui\settingdialog.cpp:40
+#: src\ui\settingdialog.cpp:40
msgid "Update Event Data"
msgstr ""
-#: umaumachecker\src\ui\checkupdatedialog.cpp:20
+#: src\ui\checkupdatedialog.cpp:20
msgid "Update UmaUmaChecker"
msgstr ""
-#: umaumachecker\src\ui\settingdialog.cpp:259
+#: src\ui\settingdialog.cpp:260
msgid "Update completed."
msgstr ""
-#: umaumachecker\src\ui\settingdialog.cpp:47
+#: src\ui\settingdialog.cpp:47
msgid "Window Font"
msgstr ""
-#: umaumachecker\src\ui\settingdialog.cpp:151
+#: src\ui\settingdialog.cpp:151
msgid "Windows 10 (above 1903)"
msgstr ""
-#: umaumachecker\src\ui\settingdialog.cpp:195
+#: src\ui\settingdialog.cpp:195
msgid "Write debug log in output.log"
msgstr ""
-#: umaumachecker\src\ui\mainframe.cpp:509
+#: src\ui\mainframe.cpp:532
#, c-format
msgid "umamusume: %dx%d"
msgstr ""
-#: umaumachecker\src\ui\mainframe.cpp:129
-#: umaumachecker\src\ui\mainframe.cpp:512
+#: src\ui\mainframe.cpp:134
+#: src\ui\mainframe.cpp:535
msgid "umamusume: Not detected"
msgstr ""
diff --git a/UmaUmaChecker/locale/en.po b/UmaUmaChecker/locale/en.po
index 2f166da..a31b238 100644
--- a/UmaUmaChecker/locale/en.po
+++ b/UmaUmaChecker/locale/en.po
@@ -11,44 +11,48 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 3.4\n"
-#: umaumachecker\src\ui\settingdialog.cpp:137
+#: src\ui\settingdialog.cpp:137
msgid "*Need to restart application."
msgstr "*Need to restart application."
-#: umaumachecker\src\ui\checkupdatedialog.cpp:30
+#: src\ui\checkupdatedialog.cpp:30
#, c-format
msgid "Available update %s
Update history
"
msgstr "Available update %s
Update history
"
-#: umaumachecker\src\ui\mainframe.cpp:66
+#: src\ui\mainframe.cpp:70
msgid "About"
msgstr "About"
-#: umaumachecker\src\ui\aboutdialog.cpp:14
+#: src\ui\aboutdialog.cpp:14
msgid "About UmaUmaChecker"
msgstr "About UmaUmaChecker"
-#: umaumachecker\src\ui\settingdialog.cpp:307
+#: src\ui\mainframe.cpp:224
+msgid "Always on top"
+msgstr ""
+
+#: src\ui\settingdialog.cpp:309
msgid "Apply after restart."
msgstr "Apply after restart."
-#: umaumachecker\src\ui\settingdialog.cpp:150
+#: src\ui\settingdialog.cpp:150
msgid "BitBlt"
msgstr "BitBlt"
-#: umaumachecker\src\ui\settingdialog.cpp:174
+#: src\ui\settingdialog.cpp:174
msgid "Browse"
msgstr "Browse"
-#: umaumachecker\src\ui\settingdialog.cpp:208
+#: src\ui\settingdialog.cpp:208
msgid "Cancel"
msgstr "Cancel"
-#: umaumachecker\src\ui\settingdialog.cpp:146
+#: src\ui\settingdialog.cpp:146
msgid "Capture Type"
msgstr "Capture Type"
-#: umaumachecker\src\ui\mainframe.cpp:53
+#: src\ui\mainframe.cpp:57
msgid ""
"Capture Umamusume window.\n"
"Click the right button to open save location."
@@ -56,87 +60,87 @@ msgstr ""
"Capture Umamusume window.\n"
"Click the right button to open save location."
-#: umaumachecker\src\ui\settingdialog.cpp:196
+#: src\ui\settingdialog.cpp:196
msgid "Capture screen if event is not recognized"
msgstr "Capture screen if event is not recognized"
-#: umaumachecker\src\ui\aboutdialog.cpp:68
+#: src\ui\aboutdialog.cpp:68
msgid "Check Update"
msgstr "Check Update"
-#: umaumachecker\src\ui\mainframe.cpp:93
+#: src\ui\mainframe.cpp:97
msgid "Choise"
msgstr "Choise"
-#: umaumachecker\src\ui\aboutdialog.cpp:45
+#: src\ui\aboutdialog.cpp:45
msgid "Contain the following libraries:"
msgstr "Contain the following libraries:"
-#: umaumachecker\src\ui\settingdialog.cpp:88
+#: src\ui\settingdialog.cpp:88
msgid "Dark"
msgstr "Dark"
-#: umaumachecker\src\ui\settingdialog.cpp:193
+#: src\ui\settingdialog.cpp:193
msgid "Debug Mode"
msgstr "Debug Mode"
-#: umaumachecker\src\ui\checkupdatedialog.cpp:39
+#: src\ui\checkupdatedialog.cpp:39
msgid "Do not check on startup."
msgstr "Do not check on startup."
-#: umaumachecker\src\ui\settingdialog.cpp:110
+#: src\ui\settingdialog.cpp:110
msgid "Enable Status Bar"
msgstr "Enable Status Bar"
-#: umaumachecker\src\ui\settingdialog.cpp:117
+#: src\ui\settingdialog.cpp:117
msgid "Enable auto start on startup"
msgstr "Enable auto start on startup"
-#: umaumachecker\src\ui\mainframe.cpp:212
+#: src\ui\mainframe.cpp:231
msgid "Error"
msgstr "Error"
-#: umaumachecker\src\ui\mainframe.cpp:82
+#: src\ui\mainframe.cpp:86
msgid "Event Name"
msgstr "Event Name"
-#: umaumachecker\src\ui\mainframe.cpp:318
+#: src\ui\mainframe.cpp:337
msgid "Failed to capture."
msgstr "Failed to capture."
-#: umaumachecker\src\data\eventlibrary.cpp:57
+#: src\data\eventlibrary.cpp:57
msgid "Failed to load Scenario Event Data."
msgstr "Failed to load Scenario Event Data."
-#: umaumachecker\src\data\eventlibrary.cpp:61
+#: src\data\eventlibrary.cpp:61
msgid "Failed to load Skill Data."
msgstr "Failed to load Skill Data."
-#: umaumachecker\src\data\eventlibrary.cpp:49
+#: src\data\eventlibrary.cpp:49
msgid "Failed to load SupportCard Event Data."
msgstr "Failed to load SupportCard Event Data."
-#: umaumachecker\src\data\eventlibrary.cpp:53
+#: src\data\eventlibrary.cpp:53
msgid "Failed to load Umamusume Event Data."
msgstr "Failed to load Umamusume Event Data."
-#: umaumachecker\src\ui\mainframe.cpp:258
+#: src\ui\mainframe.cpp:277
msgid "Failed to save image."
msgstr "Failed to save image."
-#: umaumachecker\src\ui\settingdialog.cpp:179
+#: src\ui\settingdialog.cpp:179
msgid "File Type"
msgstr "File Type"
-#: umaumachecker\src\ui\settingdialog.cpp:35
+#: src\ui\settingdialog.cpp:35
msgid "General"
msgstr "General"
-#: umaumachecker\src\ui\settingdialog.cpp:106
+#: src\ui\settingdialog.cpp:106
msgid "Hide \"no choise\" event"
msgstr "Hide \"no choise\" event"
-#: umaumachecker\src\ui\settingdialog.cpp:141
+#: src\ui\settingdialog.cpp:141
msgid ""
"Increase the value then CPU usage and Memory increase.\n"
"Decrease the value then CPU usage and Memory decrease but be slowly "
@@ -146,145 +150,136 @@ msgstr ""
"Decrease the value then CPU usage and Memory decrease but be slowly "
"recognize event."
-#: umaumachecker\src\ui\settingdialog.cpp:92
+#: src\ui\settingdialog.cpp:92
msgid "Language"
msgstr "Language"
-#: umaumachecker\src\ui\settingdialog.cpp:87
+#: src\ui\settingdialog.cpp:87
msgid "Light"
msgstr "Light"
-#: umaumachecker\src\ui\settingdialog.cpp:166
+#: src\ui\settingdialog.cpp:166
msgid "Location"
msgstr "Location"
-#: umaumachecker\src\ui\settingdialog.cpp:78
+#: src\ui\settingdialog.cpp:78
msgid "Max number of effect line"
msgstr "Max number of effect line"
-#: umaumachecker\src\ui\mainframe.cpp:57 umaumachecker\src\ui\mainframe.cpp:312
+#: src\ui\mainframe.cpp:61 src\ui\mainframe.cpp:331
msgid "Merge umamusume skill tab as an image."
msgstr "Merge umamusume skill tab as an image."
-#: umaumachecker\src\ui\settingdialog.cpp:264
+#: src\ui\settingdialog.cpp:265
msgid "No available update."
msgstr "No available update."
-#: umaumachecker\src\ui\mainframe.cpp:264
-#: umaumachecker\src\ui\mainframe.cpp:278
+#: src\ui\mainframe.cpp:283 src\ui\mainframe.cpp:297
msgid "Not found Umamusume window."
msgstr "Not found Umamusume window."
-#: umaumachecker\src\ui\settingdialog.cpp:114
+#: src\ui\settingdialog.cpp:114
msgid "Notice on startup if there is available update"
msgstr "Notice on startup if there is available update"
-#: umaumachecker\src\ui\settingdialog.cpp:128
+#: src\ui\settingdialog.cpp:128
msgid "Number of OCR"
msgstr "Number of OCR"
-#: umaumachecker\src\ui\settingdialog.cpp:124
+#: src\ui\settingdialog.cpp:124
msgid "OCR Setting"
msgstr "OCR Setting"
-#: umaumachecker\src\ui\mainframe.cpp:212
+#: src\ui\mainframe.cpp:231
msgid "Please stop merging image to exit."
msgstr "Please stop merging image to exit."
-#: umaumachecker\src\ui\mainframe.cpp:60
-#: umaumachecker\src\ui\previewframe.cpp:14
+#: src\ui\mainframe.cpp:64 src\ui\previewframe.cpp:14
msgid "Preview"
msgstr "Preview"
-#: umaumachecker\src\ui\previewframe.cpp:29
-#: umaumachecker\src\ui\previewframe.cpp:108
+#: src\ui\previewframe.cpp:29 src\ui\previewframe.cpp:108
msgid "Save an image"
msgstr "Save an image"
-#: umaumachecker\src\ui\settingdialog.cpp:161
+#: src\ui\settingdialog.cpp:161
msgid "Screenshot"
msgstr "Screenshot"
-#: umaumachecker\src\ui\settingdialog.cpp:269
+#: src\ui\settingdialog.cpp:270
msgid "Select screenshot save location"
msgstr "Select screenshot save location"
-#: umaumachecker\src\ui\mainframe.cpp:63
-#: umaumachecker\src\ui\settingdialog.cpp:21
+#: src\ui\mainframe.cpp:67 src\ui\settingdialog.cpp:21
msgid "Setting"
msgstr "Setting"
-#: umaumachecker\src\ui\checkupdatedialog.cpp:45
+#: src\ui\checkupdatedialog.cpp:45
msgid "Skip"
msgstr "Skip"
-#: umaumachecker\src\ui\mainframe.cpp:49 umaumachecker\src\ui\mainframe.cpp:223
+#: src\ui\mainframe.cpp:53 src\ui\mainframe.cpp:242
msgid "Start"
msgstr "Start"
-#: umaumachecker\src\ui\mainframe.cpp:227
+#: src\ui\mainframe.cpp:215 src\ui\mainframe.cpp:246
msgid "Stop"
msgstr "Stop"
-#: umaumachecker\src\ui\mainframe.cpp:299
-#: umaumachecker\src\ui\mainframe.cpp:303
+#: src\ui\mainframe.cpp:318 src\ui\mainframe.cpp:322
msgid "Stop merge."
msgstr "Stop merge."
-#: umaumachecker\src\ui\settingdialog.cpp:94
+#: src\ui\settingdialog.cpp:94
msgid "System Language"
msgstr "System Language"
-#: umaumachecker\src\ui\settingdialog.cpp:85
+#: src\ui\settingdialog.cpp:85
msgid "Theme"
msgstr "Theme"
-#: umaumachecker\src\ui\mainframe.cpp:74
+#: src\ui\mainframe.cpp:78
msgid "Training Umamusume"
msgstr "Training Umamusume"
-#: umaumachecker\src\version.h:11 umaumachecker\src\ui\mainframe.cpp:258
-#: umaumachecker\src\ui\mainframe.cpp:264
-#: umaumachecker\src\ui\settingdialog.cpp:259
-#: umaumachecker\src\ui\settingdialog.cpp:264
+#: src\version.h:11 src\ui\mainframe.cpp:277 src\ui\mainframe.cpp:283
+#: src\ui\settingdialog.cpp:260 src\ui\settingdialog.cpp:265
msgid "UmaUmaChecker"
msgstr "UmaUmaChecker"
-#: umaumachecker\src\ui\checkupdatedialog.cpp:48
-#: umaumachecker\src\ui\settingdialog.cpp:41
+#: src\ui\checkupdatedialog.cpp:48 src\ui\settingdialog.cpp:41
msgid "Update"
msgstr "Update"
-#: umaumachecker\src\ui\settingdialog.cpp:40
+#: src\ui\settingdialog.cpp:40
msgid "Update Event Data"
msgstr "Update Event Data"
-#: umaumachecker\src\ui\checkupdatedialog.cpp:20
+#: src\ui\checkupdatedialog.cpp:20
msgid "Update UmaUmaChecker"
msgstr "Update UmaUmaChecker"
-#: umaumachecker\src\ui\settingdialog.cpp:259
+#: src\ui\settingdialog.cpp:260
msgid "Update completed."
msgstr "Update completed."
-#: umaumachecker\src\ui\settingdialog.cpp:47
+#: src\ui\settingdialog.cpp:47
msgid "Window Font"
msgstr "Window Font"
-#: umaumachecker\src\ui\settingdialog.cpp:151
+#: src\ui\settingdialog.cpp:151
msgid "Windows 10 (above 1903)"
msgstr "Windows 10 (above 1903)"
-#: umaumachecker\src\ui\settingdialog.cpp:195
+#: src\ui\settingdialog.cpp:195
msgid "Write debug log in output.log"
msgstr "Write debug log in output.log"
-#: umaumachecker\src\ui\mainframe.cpp:509
+#: src\ui\mainframe.cpp:532
#, c-format
msgid "umamusume: %dx%d"
msgstr "umamusume: %dx%d"
-#: umaumachecker\src\ui\mainframe.cpp:129
-#: umaumachecker\src\ui\mainframe.cpp:512
+#: src\ui\mainframe.cpp:134 src\ui\mainframe.cpp:535
msgid "umamusume: Not detected"
msgstr "umamusume: Not detected"
diff --git a/UmaUmaChecker/locale/ja.po b/UmaUmaChecker/locale/ja.po
index 1d9bf28..06cfe8b 100644
--- a/UmaUmaChecker/locale/ja.po
+++ b/UmaUmaChecker/locale/ja.po
@@ -12,44 +12,48 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Poedit 3.4\n"
-#: umaumachecker\src\ui\settingdialog.cpp:137
+#: src\ui\settingdialog.cpp:137
msgid "*Need to restart application."
msgstr "※再起動が必要です。"
-#: umaumachecker\src\ui\checkupdatedialog.cpp:30
+#: src\ui\checkupdatedialog.cpp:30
#, c-format
msgid "Available update %s
Update history
"
msgstr "%s の更新が利用可能です。
更新履歴
"
-#: umaumachecker\src\ui\mainframe.cpp:66
+#: src\ui\mainframe.cpp:70
msgid "About"
msgstr "About"
-#: umaumachecker\src\ui\aboutdialog.cpp:14
+#: src\ui\aboutdialog.cpp:14
msgid "About UmaUmaChecker"
msgstr "ウマウマチェッカーについて"
-#: umaumachecker\src\ui\settingdialog.cpp:307
+#: src\ui\mainframe.cpp:224
+msgid "Always on top"
+msgstr "常に手前に表示"
+
+#: src\ui\settingdialog.cpp:309
msgid "Apply after restart."
msgstr "再起動後に適用されます。"
-#: umaumachecker\src\ui\settingdialog.cpp:150
+#: src\ui\settingdialog.cpp:150
msgid "BitBlt"
msgstr "BitBlt"
-#: umaumachecker\src\ui\settingdialog.cpp:174
+#: src\ui\settingdialog.cpp:174
msgid "Browse"
msgstr "参照"
-#: umaumachecker\src\ui\settingdialog.cpp:208
+#: src\ui\settingdialog.cpp:208
msgid "Cancel"
msgstr "キャンセル"
-#: umaumachecker\src\ui\settingdialog.cpp:146
+#: src\ui\settingdialog.cpp:146
msgid "Capture Type"
msgstr "キャプチャタイプ"
-#: umaumachecker\src\ui\mainframe.cpp:53
+#: src\ui\mainframe.cpp:57
msgid ""
"Capture Umamusume window.\n"
"Click the right button to open save location."
@@ -57,235 +61,226 @@ msgstr ""
"ウマ娘をキャプチャします。\n"
"右クリックすると保存先が開きます。"
-#: umaumachecker\src\ui\settingdialog.cpp:196
+#: src\ui\settingdialog.cpp:196
msgid "Capture screen if event is not recognized"
msgstr "イベントが認識されなかった場合に画面をキャプチャする"
-#: umaumachecker\src\ui\aboutdialog.cpp:68
+#: src\ui\aboutdialog.cpp:68
msgid "Check Update"
msgstr "アップデートを確認"
-#: umaumachecker\src\ui\mainframe.cpp:93
+#: src\ui\mainframe.cpp:97
msgid "Choise"
msgstr "選択肢"
-#: umaumachecker\src\ui\aboutdialog.cpp:45
+#: src\ui\aboutdialog.cpp:45
msgid "Contain the following libraries:"
msgstr "以下のライブラリが含まれます:"
-#: umaumachecker\src\ui\settingdialog.cpp:88
+#: src\ui\settingdialog.cpp:88
msgid "Dark"
msgstr "ダーク"
-#: umaumachecker\src\ui\settingdialog.cpp:193
+#: src\ui\settingdialog.cpp:193
msgid "Debug Mode"
msgstr "デバッグモード"
-#: umaumachecker\src\ui\checkupdatedialog.cpp:39
+#: src\ui\checkupdatedialog.cpp:39
msgid "Do not check on startup."
msgstr "起動時に確認しない。"
-#: umaumachecker\src\ui\settingdialog.cpp:110
+#: src\ui\settingdialog.cpp:110
msgid "Enable Status Bar"
msgstr "ステータスバーを有効にする"
-#: umaumachecker\src\ui\settingdialog.cpp:117
+#: src\ui\settingdialog.cpp:117
msgid "Enable auto start on startup"
msgstr "起動時に自動スタート"
-#: umaumachecker\src\ui\mainframe.cpp:212
+#: src\ui\mainframe.cpp:231
msgid "Error"
msgstr "エラー"
-#: umaumachecker\src\ui\mainframe.cpp:82
+#: src\ui\mainframe.cpp:86
msgid "Event Name"
msgstr "イベント名"
-#: umaumachecker\src\ui\mainframe.cpp:318
+#: src\ui\mainframe.cpp:337
msgid "Failed to capture."
msgstr "キャプチャに失敗しました。"
-#: umaumachecker\src\data\eventlibrary.cpp:57
+#: src\data\eventlibrary.cpp:57
msgid "Failed to load Scenario Event Data."
msgstr "シナリオイベントデータのロードに失敗しました。"
-#: umaumachecker\src\data\eventlibrary.cpp:61
+#: src\data\eventlibrary.cpp:61
msgid "Failed to load Skill Data."
msgstr "スキルデータのロードに失敗しました。"
-#: umaumachecker\src\data\eventlibrary.cpp:49
+#: src\data\eventlibrary.cpp:49
msgid "Failed to load SupportCard Event Data."
msgstr "サポートカードイベントデータのロードに失敗しました。"
-#: umaumachecker\src\data\eventlibrary.cpp:53
+#: src\data\eventlibrary.cpp:53
msgid "Failed to load Umamusume Event Data."
msgstr "ウマ娘イベントデータの読み込みに失敗しました。"
-#: umaumachecker\src\ui\mainframe.cpp:258
+#: src\ui\mainframe.cpp:277
msgid "Failed to save image."
msgstr "画像の保存に失敗しました。"
-#: umaumachecker\src\ui\settingdialog.cpp:179
+#: src\ui\settingdialog.cpp:179
msgid "File Type"
msgstr "ファイルタイプ"
-#: umaumachecker\src\ui\settingdialog.cpp:35
+#: src\ui\settingdialog.cpp:35
msgid "General"
msgstr "一般"
-#: umaumachecker\src\ui\settingdialog.cpp:106
+#: src\ui\settingdialog.cpp:106
msgid "Hide \"no choise\" event"
msgstr "「選択肢なし」のイベントを表示しない"
-#: umaumachecker\src\ui\settingdialog.cpp:141
+#: src\ui\settingdialog.cpp:141
msgid ""
"Increase the value then CPU usage and Memory increase.\n"
"Decrease the value then CPU usage and Memory decrease but be slowly "
"recognize event."
msgstr ""
"値を大きくするとCPU使用率とメモリが増えます。\n"
-"値を小さくするとCPU使用率とメモリは少なくなりますがイベント識別が遅くなりま"
-"す。"
+"値を小さくするとCPU使用率とメモリは少なくなりますがイベント識別が遅"
+"くなります。"
-#: umaumachecker\src\ui\settingdialog.cpp:92
+#: src\ui\settingdialog.cpp:92
msgid "Language"
msgstr "言語"
-#: umaumachecker\src\ui\settingdialog.cpp:87
+#: src\ui\settingdialog.cpp:87
msgid "Light"
msgstr "ライト"
-#: umaumachecker\src\ui\settingdialog.cpp:166
+#: src\ui\settingdialog.cpp:166
msgid "Location"
msgstr "場所"
-#: umaumachecker\src\ui\settingdialog.cpp:78
+#: src\ui\settingdialog.cpp:78
msgid "Max number of effect line"
msgstr "最大効果行数"
-#: umaumachecker\src\ui\mainframe.cpp:57 umaumachecker\src\ui\mainframe.cpp:312
+#: src\ui\mainframe.cpp:61 src\ui\mainframe.cpp:331
msgid "Merge umamusume skill tab as an image."
msgstr "ウマ娘のスキルタブを一つの画像として結合します。"
-#: umaumachecker\src\ui\settingdialog.cpp:264
+#: src\ui\settingdialog.cpp:265
msgid "No available update."
msgstr "更新はありません。"
-#: umaumachecker\src\ui\mainframe.cpp:264
-#: umaumachecker\src\ui\mainframe.cpp:278
+#: src\ui\mainframe.cpp:283 src\ui\mainframe.cpp:297
msgid "Not found Umamusume window."
msgstr "ウマ娘のウィンドウが見つかりませんでした。"
-#: umaumachecker\src\ui\settingdialog.cpp:114
+#: src\ui\settingdialog.cpp:114
msgid "Notice on startup if there is available update"
msgstr "アップデートが利用可能な場合、起動時に通知を行う"
-#: umaumachecker\src\ui\settingdialog.cpp:128
+#: src\ui\settingdialog.cpp:128
msgid "Number of OCR"
msgstr "OCR数"
-#: umaumachecker\src\ui\settingdialog.cpp:124
+#: src\ui\settingdialog.cpp:124
msgid "OCR Setting"
msgstr "OCR設定"
-#: umaumachecker\src\ui\mainframe.cpp:212
+#: src\ui\mainframe.cpp:231
msgid "Please stop merging image to exit."
msgstr "終了するためには結合を停止してください。"
-#: umaumachecker\src\ui\mainframe.cpp:60
-#: umaumachecker\src\ui\previewframe.cpp:14
+#: src\ui\mainframe.cpp:64 src\ui\previewframe.cpp:14
msgid "Preview"
msgstr "プレビュー"
-#: umaumachecker\src\ui\previewframe.cpp:29
-#: umaumachecker\src\ui\previewframe.cpp:108
+#: src\ui\previewframe.cpp:29 src\ui\previewframe.cpp:108
msgid "Save an image"
msgstr "画像を保存"
-#: umaumachecker\src\ui\settingdialog.cpp:161
+#: src\ui\settingdialog.cpp:161
msgid "Screenshot"
msgstr "スクリーンショット"
-#: umaumachecker\src\ui\settingdialog.cpp:269
+#: src\ui\settingdialog.cpp:270
msgid "Select screenshot save location"
msgstr "スクリーンショット保存先を指定"
-#: umaumachecker\src\ui\mainframe.cpp:63
-#: umaumachecker\src\ui\settingdialog.cpp:21
+#: src\ui\mainframe.cpp:67 src\ui\settingdialog.cpp:21
msgid "Setting"
msgstr "設定"
-#: umaumachecker\src\ui\checkupdatedialog.cpp:45
+#: src\ui\checkupdatedialog.cpp:45
msgid "Skip"
msgstr "スキップ"
-#: umaumachecker\src\ui\mainframe.cpp:49 umaumachecker\src\ui\mainframe.cpp:223
+#: src\ui\mainframe.cpp:53 src\ui\mainframe.cpp:242
msgid "Start"
msgstr "スタート"
-#: umaumachecker\src\ui\mainframe.cpp:227
+#: src\ui\mainframe.cpp:215 src\ui\mainframe.cpp:246
msgid "Stop"
msgstr "ストップ"
-#: umaumachecker\src\ui\mainframe.cpp:299
-#: umaumachecker\src\ui\mainframe.cpp:303
+#: src\ui\mainframe.cpp:318 src\ui\mainframe.cpp:322
msgid "Stop merge."
msgstr "結合を停止。"
-#: umaumachecker\src\ui\settingdialog.cpp:94
+#: src\ui\settingdialog.cpp:94
msgid "System Language"
msgstr "システム言語"
-#: umaumachecker\src\ui\settingdialog.cpp:85
+#: src\ui\settingdialog.cpp:85
msgid "Theme"
msgstr "テーマ"
-#: umaumachecker\src\ui\mainframe.cpp:74
+#: src\ui\mainframe.cpp:78
msgid "Training Umamusume"
msgstr "育成ウマ娘"
-#: umaumachecker\src\version.h:11 umaumachecker\src\ui\mainframe.cpp:258
-#: umaumachecker\src\ui\mainframe.cpp:264
-#: umaumachecker\src\ui\settingdialog.cpp:259
-#: umaumachecker\src\ui\settingdialog.cpp:264
+#: src\version.h:11 src\ui\mainframe.cpp:277 src\ui\mainframe.cpp:283
+#: src\ui\settingdialog.cpp:260 src\ui\settingdialog.cpp:265
msgid "UmaUmaChecker"
msgstr "ウマウマチェッカー"
-#: umaumachecker\src\ui\checkupdatedialog.cpp:48
-#: umaumachecker\src\ui\settingdialog.cpp:41
+#: src\ui\checkupdatedialog.cpp:48 src\ui\settingdialog.cpp:41
msgid "Update"
msgstr "更新"
-#: umaumachecker\src\ui\settingdialog.cpp:40
+#: src\ui\settingdialog.cpp:40
msgid "Update Event Data"
msgstr "イベントデータを更新"
-#: umaumachecker\src\ui\checkupdatedialog.cpp:20
+#: src\ui\checkupdatedialog.cpp:20
msgid "Update UmaUmaChecker"
msgstr "ウマウマチェッカーを更新"
-#: umaumachecker\src\ui\settingdialog.cpp:259
+#: src\ui\settingdialog.cpp:260
msgid "Update completed."
msgstr "更新が完了しました。"
-#: umaumachecker\src\ui\settingdialog.cpp:47
+#: src\ui\settingdialog.cpp:47
msgid "Window Font"
msgstr "ウィンドウのフォント"
-#: umaumachecker\src\ui\settingdialog.cpp:151
+#: src\ui\settingdialog.cpp:151
msgid "Windows 10 (above 1903)"
msgstr "Windows 10 (1903以降)"
-#: umaumachecker\src\ui\settingdialog.cpp:195
+#: src\ui\settingdialog.cpp:195
msgid "Write debug log in output.log"
msgstr "デバッグログをoutput.logに出力する"
-#: umaumachecker\src\ui\mainframe.cpp:509
+#: src\ui\mainframe.cpp:532
#, c-format
msgid "umamusume: %dx%d"
msgstr "ウマ娘: %dx%d"
-#: umaumachecker\src\ui\mainframe.cpp:129
-#: umaumachecker\src\ui\mainframe.cpp:512
+#: src\ui\mainframe.cpp:134 src\ui\mainframe.cpp:535
msgid "umamusume: Not detected"
msgstr "ウマ娘: 未検出"
diff --git a/UmaUmaChecker/locale/ko.po b/UmaUmaChecker/locale/ko.po
index e00ae03..0f9c8a4 100644
--- a/UmaUmaChecker/locale/ko.po
+++ b/UmaUmaChecker/locale/ko.po
@@ -12,44 +12,48 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Poedit 3.4\n"
-#: umaumachecker\src\ui\settingdialog.cpp:137
+#: src\ui\settingdialog.cpp:137
msgid "*Need to restart application."
msgstr "애플리케이션을 다시 시작해야 합니다."
-#: umaumachecker\src\ui\checkupdatedialog.cpp:30
+#: src\ui\checkupdatedialog.cpp:30
#, c-format
msgid "Available update %s
Update history
"
msgstr "%s 업데이트 가능
업데이트 내역
"
-#: umaumachecker\src\ui\mainframe.cpp:66
+#: src\ui\mainframe.cpp:70
msgid "About"
msgstr "소개"
-#: umaumachecker\src\ui\aboutdialog.cpp:14
+#: src\ui\aboutdialog.cpp:14
msgid "About UmaUmaChecker"
msgstr "UmaUmaChecker 정보"
-#: umaumachecker\src\ui\settingdialog.cpp:307
+#: src\ui\mainframe.cpp:224
+msgid "Always on top"
+msgstr "항상 위에"
+
+#: src\ui\settingdialog.cpp:309
msgid "Apply after restart."
msgstr "재시작 후 적용합니다."
-#: umaumachecker\src\ui\settingdialog.cpp:150
+#: src\ui\settingdialog.cpp:150
msgid "BitBlt"
msgstr "BitBlt"
-#: umaumachecker\src\ui\settingdialog.cpp:174
+#: src\ui\settingdialog.cpp:174
msgid "Browse"
msgstr "찾아보기"
-#: umaumachecker\src\ui\settingdialog.cpp:208
+#: src\ui\settingdialog.cpp:208
msgid "Cancel"
msgstr "취소"
-#: umaumachecker\src\ui\settingdialog.cpp:146
+#: src\ui\settingdialog.cpp:146
msgid "Capture Type"
msgstr "캡처 유형"
-#: umaumachecker\src\ui\mainframe.cpp:53
+#: src\ui\mainframe.cpp:57
msgid ""
"Capture Umamusume window.\n"
"Click the right button to open save location."
@@ -57,235 +61,226 @@ msgstr ""
"우마무스메 창 캡처.\n"
"오른쪽 버튼을 클릭하여 저장 위치 열기."
-#: umaumachecker\src\ui\settingdialog.cpp:196
+#: src\ui\settingdialog.cpp:196
msgid "Capture screen if event is not recognized"
msgstr "이벤트를 인식하지 못하면 화면 캡처"
-#: umaumachecker\src\ui\aboutdialog.cpp:68
+#: src\ui\aboutdialog.cpp:68
msgid "Check Update"
msgstr "업데이트 확인"
-#: umaumachecker\src\ui\mainframe.cpp:93
+#: src\ui\mainframe.cpp:97
msgid "Choise"
msgstr "선택"
-#: umaumachecker\src\ui\aboutdialog.cpp:45
+#: src\ui\aboutdialog.cpp:45
msgid "Contain the following libraries:"
msgstr "다음 라이브러리 포함:"
-#: umaumachecker\src\ui\settingdialog.cpp:88
+#: src\ui\settingdialog.cpp:88
msgid "Dark"
msgstr "어두운"
-#: umaumachecker\src\ui\settingdialog.cpp:193
+#: src\ui\settingdialog.cpp:193
msgid "Debug Mode"
msgstr "디버그 모드"
-#: umaumachecker\src\ui\checkupdatedialog.cpp:39
+#: src\ui\checkupdatedialog.cpp:39
msgid "Do not check on startup."
msgstr "시작 시 확인하지 않음."
-#: umaumachecker\src\ui\settingdialog.cpp:110
+#: src\ui\settingdialog.cpp:110
msgid "Enable Status Bar"
msgstr "상태 표시줄 사용"
-#: umaumachecker\src\ui\settingdialog.cpp:117
+#: src\ui\settingdialog.cpp:117
msgid "Enable auto start on startup"
msgstr "시작시 자동으로 시작"
-#: umaumachecker\src\ui\mainframe.cpp:212
+#: src\ui\mainframe.cpp:231
msgid "Error"
msgstr "오류"
-#: umaumachecker\src\ui\mainframe.cpp:82
+#: src\ui\mainframe.cpp:86
msgid "Event Name"
msgstr "이벤트 이름"
-#: umaumachecker\src\ui\mainframe.cpp:318
+#: src\ui\mainframe.cpp:337
msgid "Failed to capture."
msgstr "캡처 실패."
-#: umaumachecker\src\data\eventlibrary.cpp:57
+#: src\data\eventlibrary.cpp:57
msgid "Failed to load Scenario Event Data."
msgstr "시나리오 이벤트 데이터를 로드하지 못했습니다."
-#: umaumachecker\src\data\eventlibrary.cpp:61
+#: src\data\eventlibrary.cpp:61
msgid "Failed to load Skill Data."
msgstr "스킬 데이터를 로드하지 못했습니다."
-#: umaumachecker\src\data\eventlibrary.cpp:49
+#: src\data\eventlibrary.cpp:49
msgid "Failed to load SupportCard Event Data."
msgstr "SupportCard 이벤트 데이터를 로드하지 못했습니다."
-#: umaumachecker\src\data\eventlibrary.cpp:53
+#: src\data\eventlibrary.cpp:53
msgid "Failed to load Umamusume Event Data."
msgstr "우마무스메 이벤트 데이터를 로드하지 못했습니다."
-#: umaumachecker\src\ui\mainframe.cpp:258
+#: src\ui\mainframe.cpp:277
msgid "Failed to save image."
msgstr "이미지 저장 실패."
-#: umaumachecker\src\ui\settingdialog.cpp:179
+#: src\ui\settingdialog.cpp:179
msgid "File Type"
msgstr "파일 유형"
-#: umaumachecker\src\ui\settingdialog.cpp:35
+#: src\ui\settingdialog.cpp:35
msgid "General"
msgstr "일반"
-#: umaumachecker\src\ui\settingdialog.cpp:106
+#: src\ui\settingdialog.cpp:106
msgid "Hide \"no choise\" event"
msgstr "\"선택 없음\" 이벤트 숨기기"
-#: umaumachecker\src\ui\settingdialog.cpp:141
+#: src\ui\settingdialog.cpp:141
msgid ""
"Increase the value then CPU usage and Memory increase.\n"
"Decrease the value then CPU usage and Memory decrease but be slowly "
"recognize event."
msgstr ""
"값을 증가시키면 CPU 사용량 및 메모리 사용량이 증가합니다.\n"
-"값을 감소시키면 CPU 사용량 및 메모리 사용량이 감소하지만 이벤트 인식이 느려집"
-"니다."
+"값을 감소시키면 CPU 사용량 및 메모리 사용량이 감소하지만 이벤트 인식"
+"이 느려집니다."
-#: umaumachecker\src\ui\settingdialog.cpp:92
+#: src\ui\settingdialog.cpp:92
msgid "Language"
msgstr "언어"
-#: umaumachecker\src\ui\settingdialog.cpp:87
+#: src\ui\settingdialog.cpp:87
msgid "Light"
msgstr "밝은"
-#: umaumachecker\src\ui\settingdialog.cpp:166
+#: src\ui\settingdialog.cpp:166
msgid "Location"
msgstr "위치"
-#: umaumachecker\src\ui\settingdialog.cpp:78
+#: src\ui\settingdialog.cpp:78
msgid "Max number of effect line"
msgstr "최대 효과 라인 수"
-#: umaumachecker\src\ui\mainframe.cpp:57 umaumachecker\src\ui\mainframe.cpp:312
+#: src\ui\mainframe.cpp:61 src\ui\mainframe.cpp:331
msgid "Merge umamusume skill tab as an image."
msgstr "umamusume 스킬 탭을 이미지로 병합합니다."
-#: umaumachecker\src\ui\settingdialog.cpp:264
+#: src\ui\settingdialog.cpp:265
msgid "No available update."
msgstr "사용 가능한 업데이트 없음."
-#: umaumachecker\src\ui\mainframe.cpp:264
-#: umaumachecker\src\ui\mainframe.cpp:278
+#: src\ui\mainframe.cpp:283 src\ui\mainframe.cpp:297
msgid "Not found Umamusume window."
msgstr "umamusume 창을 찾을 수 없습니다."
-#: umaumachecker\src\ui\settingdialog.cpp:114
+#: src\ui\settingdialog.cpp:114
msgid "Notice on startup if there is available update"
msgstr "사용 가능한 업데이트가 있을 경우 시작 시 알림"
-#: umaumachecker\src\ui\settingdialog.cpp:128
+#: src\ui\settingdialog.cpp:128
msgid "Number of OCR"
msgstr "OCR 수"
-#: umaumachecker\src\ui\settingdialog.cpp:124
+#: src\ui\settingdialog.cpp:124
msgid "OCR Setting"
msgstr "OCR 설정"
-#: umaumachecker\src\ui\mainframe.cpp:212
+#: src\ui\mainframe.cpp:231
msgid "Please stop merging image to exit."
msgstr "종료하려면 이미지 병합을 중지하세요."
-#: umaumachecker\src\ui\mainframe.cpp:60
-#: umaumachecker\src\ui\previewframe.cpp:14
+#: src\ui\mainframe.cpp:64 src\ui\previewframe.cpp:14
msgid "Preview"
msgstr "미리보기"
-#: umaumachecker\src\ui\previewframe.cpp:29
-#: umaumachecker\src\ui\previewframe.cpp:108
+#: src\ui\previewframe.cpp:29 src\ui\previewframe.cpp:108
msgid "Save an image"
msgstr "이미지 저장"
-#: umaumachecker\src\ui\settingdialog.cpp:161
+#: src\ui\settingdialog.cpp:161
msgid "Screenshot"
msgstr "스크린샷"
-#: umaumachecker\src\ui\settingdialog.cpp:269
+#: src\ui\settingdialog.cpp:270
msgid "Select screenshot save location"
msgstr "스크린샷 저장 위치 선택"
-#: umaumachecker\src\ui\mainframe.cpp:63
-#: umaumachecker\src\ui\settingdialog.cpp:21
+#: src\ui\mainframe.cpp:67 src\ui\settingdialog.cpp:21
msgid "Setting"
msgstr "설정"
-#: umaumachecker\src\ui\checkupdatedialog.cpp:45
+#: src\ui\checkupdatedialog.cpp:45
msgid "Skip"
msgstr "건너뛰기"
-#: umaumachecker\src\ui\mainframe.cpp:49 umaumachecker\src\ui\mainframe.cpp:223
+#: src\ui\mainframe.cpp:53 src\ui\mainframe.cpp:242
msgid "Start"
msgstr "시작"
-#: umaumachecker\src\ui\mainframe.cpp:227
+#: src\ui\mainframe.cpp:215 src\ui\mainframe.cpp:246
msgid "Stop"
msgstr "중지"
-#: umaumachecker\src\ui\mainframe.cpp:299
-#: umaumachecker\src\ui\mainframe.cpp:303
+#: src\ui\mainframe.cpp:318 src\ui\mainframe.cpp:322
msgid "Stop merge."
msgstr "병합 중지."
-#: umaumachecker\src\ui\settingdialog.cpp:94
+#: src\ui\settingdialog.cpp:94
msgid "System Language"
msgstr "시스템 언어"
-#: umaumachecker\src\ui\settingdialog.cpp:85
+#: src\ui\settingdialog.cpp:85
msgid "Theme"
msgstr "테마"
-#: umaumachecker\src\ui\mainframe.cpp:74
+#: src\ui\mainframe.cpp:78
msgid "Training Umamusume"
msgstr "훈련 umamusume"
-#: umaumachecker\src\version.h:11 umaumachecker\src\ui\mainframe.cpp:258
-#: umaumachecker\src\ui\mainframe.cpp:264
-#: umaumachecker\src\ui\settingdialog.cpp:259
-#: umaumachecker\src\ui\settingdialog.cpp:264
+#: src\version.h:11 src\ui\mainframe.cpp:277 src\ui\mainframe.cpp:283
+#: src\ui\settingdialog.cpp:260 src\ui\settingdialog.cpp:265
msgid "UmaUmaChecker"
msgstr "UmaUmaChecker"
-#: umaumachecker\src\ui\checkupdatedialog.cpp:48
-#: umaumachecker\src\ui\settingdialog.cpp:41
+#: src\ui\checkupdatedialog.cpp:48 src\ui\settingdialog.cpp:41
msgid "Update"
msgstr "업데이트"
-#: umaumachecker\src\ui\settingdialog.cpp:40
+#: src\ui\settingdialog.cpp:40
msgid "Update Event Data"
msgstr "이벤트 데이터 업데이트"
-#: umaumachecker\src\ui\checkupdatedialog.cpp:20
+#: src\ui\checkupdatedialog.cpp:20
msgid "Update UmaUmaChecker"
msgstr "UmaUmaChecker 업데이트"
-#: umaumachecker\src\ui\settingdialog.cpp:259
+#: src\ui\settingdialog.cpp:260
msgid "Update completed."
msgstr "업데이트 완료."
-#: umaumachecker\src\ui\settingdialog.cpp:47
+#: src\ui\settingdialog.cpp:47
msgid "Window Font"
msgstr "창 글꼴"
-#: umaumachecker\src\ui\settingdialog.cpp:151
+#: src\ui\settingdialog.cpp:151
msgid "Windows 10 (above 1903)"
msgstr "Windows 10 (버전 1903 이상)"
-#: umaumachecker\src\ui\settingdialog.cpp:195
+#: src\ui\settingdialog.cpp:195
msgid "Write debug log in output.log"
msgstr "디버그 로그를 output.log에 작성"
-#: umaumachecker\src\ui\mainframe.cpp:509
+#: src\ui\mainframe.cpp:532
#, c-format
msgid "umamusume: %dx%d"
msgstr "umamusume: %dx%d"
-#: umaumachecker\src\ui\mainframe.cpp:129
-#: umaumachecker\src\ui\mainframe.cpp:512
+#: src\ui\mainframe.cpp:134 src\ui\mainframe.cpp:535
msgid "umamusume: Not detected"
msgstr "umamusume: 미탐지"
diff --git a/UmaUmaChecker/src/Config/Config.cpp b/UmaUmaChecker/src/Config/Config.cpp
index 22abe8e..513f754 100644
--- a/UmaUmaChecker/src/Config/Config.cpp
+++ b/UmaUmaChecker/src/Config/Config.cpp
@@ -51,6 +51,7 @@ bool Config::Load()
if (UpdateUrl.back() != '/') UpdateUrl += L"/";
TesseractLanguage = utility::from_u8string(config.value("TesseractLanguage", "jpn"));
EnabledAutoStartOnStartup = config.value("EnabledAutoStartOnStartup", false);
+ AlwaysOnTop = config.value("AlwaysOnTop", false);
}
catch (json::exception& ex) {
return false;
@@ -90,6 +91,7 @@ void Config::Save()
config["UpdateUrl"] = std::filesystem::path(UpdateUrl.begin(), UpdateUrl.end()).u8string();
config["TesseractLanguage"] = std::filesystem::path(TesseractLanguage.begin(), TesseractLanguage.end()).u8string();
config["EnabledAutoStartOnStartup"] = EnabledAutoStartOnStartup;
+ config["AlwaysOnTop"] = AlwaysOnTop;
std::ofstream output(utility::GetExeDirectory() + L"\\config.json");
output << std::setw(4) << config << std::endl;
diff --git a/UmaUmaChecker/src/Config/Config.h b/UmaUmaChecker/src/Config/Config.h
index d3f212b..fd57511 100644
--- a/UmaUmaChecker/src/Config/Config.h
+++ b/UmaUmaChecker/src/Config/Config.h
@@ -39,5 +39,6 @@ class Config
std::wstring UpdateUrl;
std::wstring TesseractLanguage;
bool EnabledAutoStartOnStartup;
+ bool AlwaysOnTop;
};
diff --git a/UmaUmaChecker/src/UI/MainFrame.cpp b/UmaUmaChecker/src/UI/MainFrame.cpp
index 3cd4ea9..2ed8078 100644
--- a/UmaUmaChecker/src/UI/MainFrame.cpp
+++ b/UmaUmaChecker/src/UI/MainFrame.cpp
@@ -30,6 +30,8 @@
#pragma comment(lib, "gdiplus.lib")
+#define IDM_ALWAYSONTOP 10000
+
using json = nlohmann::json;
@@ -40,101 +42,111 @@ MainFrame::MainFrame(wxWindow* parent, const wxPoint& pos, const wxSize& size, l
this->SetIcon(wxICON(AppIcon));
this->SetFont(wxFont(config->FontSize, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, config->FontName));
this->SetDoubleBuffered(true);
+ if (config->AlwaysOnTop) {
+ this->SetWindowStyleFlag(this->GetWindowStyleFlag() | wxSTAY_ON_TOP);
+ }
+
+ AddToSystemMenu();
ChangeTheme();
wxBoxSizer* bSizerTop = new wxBoxSizer(wxVERTICAL);
wxBoxSizer* bSizerButtons = new wxBoxSizer(wxHORIZONTAL);
+ {
+ m_toggleBtnStart = new ThemedButtonWrapper(this, wxID_ANY, _("Start"), wxDefaultPosition, wxDefaultSize, 0);
+ bSizerButtons->Add(m_toggleBtnStart, 0, wxALL, 5);
- m_toggleBtnStart = new ThemedButtonWrapper(this, wxID_ANY, _("Start"), wxDefaultPosition, wxDefaultSize, 0);
- bSizerButtons->Add(m_toggleBtnStart, 0, wxALL, 5);
-
- m_buttonScreenshot = new ThemedButtonWrapper(this, wxID_ANY, wxIcon(wxT("ScreenShot"), wxBITMAP_TYPE_ICO_RESOURCE, 16, 16));
- m_buttonScreenshot->SetToolTip(_("Capture Umamusume window.\nClick the right button to open save location."));
- bSizerButtons->Add(m_buttonScreenshot, 0, wxALL & ~wxRIGHT, 5);
-
- m_buttonCombine = new ThemedButtonWrapper(this, wxID_ANY, wxIcon(wxT("StartRecord"), wxBITMAP_TYPE_ICO_RESOURCE, 16, 16));
- m_buttonCombine->SetToolTip(_("Merge umamusume skill tab as an image."));
- bSizerButtons->Add(m_buttonCombine, 0, wxALL & ~wxLEFT, 5);
+ m_buttonScreenshot = new ThemedButtonWrapper(this, wxID_ANY, wxIcon(wxT("ScreenShot"), wxBITMAP_TYPE_ICO_RESOURCE, 16, 16));
+ m_buttonScreenshot->SetToolTip(_("Capture Umamusume window.\nClick the right button to open save location."));
+ bSizerButtons->Add(m_buttonScreenshot, wxSizerFlags().Proportion(0).Border(wxALL & ~wxRIGHT, 5));
- m_buttonPreview = new ThemedButtonWrapper(this, wxID_ANY, _("Preview"), wxDefaultPosition, wxDefaultSize, 0);
- bSizerButtons->Add(m_buttonPreview, 0, wxALL, 5);
+ m_buttonCombine = new ThemedButtonWrapper(this, wxID_ANY, wxIcon(wxT("StartRecord"), wxBITMAP_TYPE_ICO_RESOURCE, 16, 16));
+ m_buttonCombine->SetToolTip(_("Merge umamusume skill tab as an image."));
+ bSizerButtons->Add(m_buttonCombine, wxSizerFlags().Proportion(0).Border(wxALL & ~wxLEFT, 5));
- m_buttonSetting = new ThemedButtonWrapper(this, wxID_ANY, _("Setting"), wxDefaultPosition, wxDefaultSize, 0);
- bSizerButtons->Add(m_buttonSetting, 0, wxALL, 5);
+ m_buttonPreview = new ThemedButtonWrapper(this, wxID_ANY, _("Preview"), wxDefaultPosition, wxDefaultSize, 0);
+ bSizerButtons->Add(m_buttonPreview, wxSizerFlags().Proportion(0).Border(wxALL, 5));
- m_buttonAbout = new ThemedButtonWrapper(this, wxID_ANY, _("About"), wxDefaultPosition, wxDefaultSize, 0);
- bSizerButtons->Add(m_buttonAbout, 0, wxALL, 5);
+ m_buttonSetting = new ThemedButtonWrapper(this, wxID_ANY, _("Setting"), wxDefaultPosition, wxDefaultSize, 0);
+ bSizerButtons->Add(m_buttonSetting, wxSizerFlags().Proportion(0).Border(wxALL, 5));
- bSizerTop->Add(bSizerButtons, 0, wxEXPAND | wxFIXED_MINSIZE | wxRIGHT | wxLEFT | wxBOTTOM, 5);
+ m_buttonAbout = new ThemedButtonWrapper(this, wxID_ANY, _("About"), wxDefaultPosition, wxDefaultSize, 0);
+ bSizerButtons->Add(m_buttonAbout, wxSizerFlags().Proportion(0).Border(wxALL, 5));
+ }
+ bSizerTop->Add(bSizerButtons, wxSizerFlags().Expand().Border(wxLEFT | wxRIGHT | wxBOTTOM, 5).Proportion(0));
wxFlexGridSizer* sizerEventInfo = new wxFlexGridSizer(2, 2, 9, 9);
+ {
+ // 育成ウマ娘
+ m_staticTextCharaName = new ThemedWrapper(this, wxID_ANY, _("Training Umamusume"));
+ m_staticTextCharaName->Wrap(-1);
+ sizerEventInfo->Add(m_staticTextCharaName, 0, wxALIGN_CENTER_VERTICAL);
- // 育成ウマ娘
- m_staticTextCharaName = new ThemedWrapper(this, wxID_ANY, _("Training Umamusume"));
- m_staticTextCharaName->Wrap(-1);
- sizerEventInfo->Add(m_staticTextCharaName, 0, wxALIGN_CENTER_VERTICAL);
-
- m_comboBoxUma = new ThemedComboBoxWrapper(this, wxID_ANY);
- sizerEventInfo->Add(m_comboBoxUma, 1, wxEXPAND);
+ m_comboBoxUma = new ThemedComboBoxWrapper(this, wxID_ANY);
+ sizerEventInfo->Add(m_comboBoxUma, 1, wxEXPAND);
- // イベント名
- m_staticTextEventName = new ThemedWrapper(this, wxID_ANY, _("Event Name"));
- m_staticTextEventName->Wrap(-1);
- sizerEventInfo->Add(m_staticTextEventName, 0, wxALIGN_CENTER_VERTICAL);
+ // イベント名
+ m_staticTextEventName = new ThemedWrapper(this, wxID_ANY, _("Event Name"));
+ m_staticTextEventName->Wrap(-1);
+ sizerEventInfo->Add(m_staticTextEventName, 0, wxALIGN_CENTER_VERTICAL);
- m_textCtrlEventSource = new ThemedEditWrapper(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY);
- sizerEventInfo->Add(m_textCtrlEventSource, 1, wxEXPAND);
- sizerEventInfo->AddGrowableCol(1, 1);
-
- bSizerTop->Add(sizerEventInfo, 0, wxEXPAND | wxRIGHT | wxLEFT, 15);
+ m_textCtrlEventSource = new ThemedEditWrapper(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY);
+ sizerEventInfo->Add(m_textCtrlEventSource, 1, wxEXPAND);
+ sizerEventInfo->AddGrowableCol(1, 1);
+ }
+ bSizerTop->Add(sizerEventInfo, wxSizerFlags().Proportion(0).Expand().Border(wxLEFT | wxRIGHT, 15));
// 選択肢
wxStaticBoxSizer* sbSizerOptions = new wxStaticBoxSizer(new ThemedWrapper(this, wxID_ANY, _("Choise")), wxVERTICAL);
+ {
+ std::vector bgColors = {
+ wxColour(200, 255, 150),
+ wxColour(255, 240, 140),
+ wxColour(255, 200, 200),
+ wxColour(106, 227, 255),
+ wxColour(182, 193, 255),
+ wxColour(231, 183, 255),
+ };
+ wxBoxSizer* sbOptionSizer = new wxBoxSizer(wxVERTICAL);
- std::vector bgColors = {
- wxColour(200, 255, 150),
- wxColour(255, 240, 140),
- wxColour(255, 200, 200),
- wxColour(106, 227, 255),
- wxColour(182, 193, 255),
- wxColour(231, 183, 255),
- };
- for (int i = 0; i < EventOptionCount; i++) {
- wxBoxSizer* bSizerOption1 = new wxBoxSizer(wxHORIZONTAL);
+ for (int i = 0; i < EventOptionCount; i++) {
+ wxBoxSizer* bSizerOption1 = new wxBoxSizer(wxHORIZONTAL);
- // 選択肢名
- wxTextCtrl* TitleCtrl = new wxTextCtrl(sbSizerOptions->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY);
- if (i < bgColors.size()) TitleCtrl->SetBackgroundColour(bgColors[i]);
- else TitleCtrl->SetBackgroundColour(*wxWHITE);
- bSizerOption1->Add(TitleCtrl, 2, wxALL, 5);
+ // 選択肢名
+ wxTextCtrl* TitleCtrl = new wxTextCtrl(sbSizerOptions->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY);
+ if (i < bgColors.size()) TitleCtrl->SetBackgroundColour(bgColors[i]);
+ else TitleCtrl->SetBackgroundColour(*wxWHITE);
+ bSizerOption1->Add(TitleCtrl, wxSizerFlags().Border(wxALL, 5).Proportion(2));
- // 効果
- wxUmaTextCtrl* OptionCtrl = new ThemedEditWrapper(sbSizerOptions->GetStaticBox());
- OptionCtrl->SetHeightByLine(config->OptionMaxLine);
- bSizerOption1->Add(OptionCtrl, 3, wxALL | wxEXPAND, 5);
+ // 効果
+ wxUmaTextCtrl* OptionCtrl = new ThemedEditWrapper(sbSizerOptions->GetStaticBox(), config->OptionMaxLine);
+ bSizerOption1->Add(OptionCtrl, wxSizerFlags().Expand().Border(wxALL, 5).Proportion(3));
- sbSizerOptions->Add(bSizerOption1, 1, wxEXPAND, 5);
+ sbOptionSizer->Add(bSizerOption1, wxSizerFlags().Expand().Proportion(1));
- m_textCtrlEventTitles.push_back(TitleCtrl);
- m_textCtrlEventOptions.push_back(OptionCtrl);
- }
+ m_textCtrlEventTitles.push_back(TitleCtrl);
+ m_textCtrlEventOptions.push_back(OptionCtrl);
+ }
+ sbSizerOptions->Add(sbOptionSizer, wxSizerFlags().Expand().Proportion(1));
+ }
bSizerTop->Add(sbSizerOptions, 1, wxEXPAND | wxALL, 5);
+ //
+ //sbSizerOptions->Fit(this);
+
m_statusBar = new wxStatusBar(this, wxID_ANY);
int widths[] = { -2, -3, -4 };
m_statusBar->SetFieldsCount(3, widths);
m_statusBar->PushStatusText(wxT("CPU: 100.0%"), 0);
m_statusBar->PushStatusText(wxT("MEM: 0.0 MB"), 1);
m_statusBar->PushStatusText(_("umamusume: Not detected"), 2);
+ if (!config->IsShowStatusBar) m_statusBar->Hide();
this->SetStatusBar(m_statusBar);
m_comboPopup = new wxComboBoxPopup(this);
- this->SetSizer(bSizerTop);
- this->Fit();
- this->Layout();
+ this->SetSizerAndFit(bSizerTop);
this->Centre(wxBOTH);
this->SetSizeHints(wxSize(-1, this->GetSize().y), wxSize(-1, this->GetSize().y));
@@ -168,8 +180,7 @@ MainFrame::MainFrame(wxWindow* parent, const wxPoint& pos, const wxSize& size, l
this->Move(config->WindowX, config->WindowY);
}
- if (!config->IsShowStatusBar) m_statusBar->Hide();
- else timer.Start(1000);
+ if (config->IsShowStatusBar) timer.Start(1000);
Init();
}
@@ -212,6 +223,15 @@ void MainFrame::Init()
}
}
+void MainFrame::AddToSystemMenu()
+{
+ HMENU hMenu = GetSystemMenu(GetHWND(), FALSE);
+
+ AppendMenu(hMenu, MF_SEPARATOR, 0, TEXT(""));
+ AppendMenu(hMenu, MF_STRING | (Config::GetInstance()->AlwaysOnTop ? MFS_CHECKED : MFS_UNCHECKED), IDM_ALWAYSONTOP, _("Always on top"));
+ DrawMenuBar(GetHWND());
+}
+
void MainFrame::OnClose(wxCloseEvent& event)
{
if (thread.joinable()) {
@@ -630,6 +650,38 @@ void MainFrame::OnDPIChanged(wxDPIChangedEvent& event)
this->SetSizeHints(wxSize(-1, this->GetSize().y), wxSize(-1, this->GetSize().y));
}
+bool MainFrame::MSWTranslateMessage(WXMSG* msg)
+{
+ if (msg->message == WM_SYSCOMMAND) {
+ switch (msg->wParam) {
+ case IDM_ALWAYSONTOP: {
+ MENUITEMINFO mii;
+
+ ZeroMemory(&mii, sizeof(mii));
+ mii.cbSize = sizeof(MENUITEMINFO);
+ mii.fMask = MIIM_STATE;
+
+ GetMenuItemInfo(GetSystemMenu(GetHWND(), FALSE), IDM_ALWAYSONTOP, FALSE, &mii);
+
+ if (mii.fState == MFS_CHECKED) {
+ this->SetWindowStyleFlag(this->GetWindowStyleFlag() & ~wxSTAY_ON_TOP);
+ }
+ else {
+ this->SetWindowStyleFlag(this->GetWindowStyleFlag() | wxSTAY_ON_TOP);
+ }
+
+ mii.fState = mii.fState == MFS_CHECKED ? MFS_UNCHECKED : MFS_CHECKED;
+ Config::GetInstance()->AlwaysOnTop = mii.fState == MFS_CHECKED;
+ SetMenuItemInfo(GetSystemMenu(GetHWND(), FALSE), IDM_ALWAYSONTOP, FALSE, &mii);
+
+ return true;
+ }
+ }
+ }
+
+ return wxFrame::MSWTranslateMessage(msg);
+}
+
void MainFrame::ChangeEventOptions(EventSource* event)
{
if (event) {
diff --git a/UmaUmaChecker/src/UI/MainFrame.h b/UmaUmaChecker/src/UI/MainFrame.h
index 47956e2..a1676a4 100644
--- a/UmaUmaChecker/src/UI/MainFrame.h
+++ b/UmaUmaChecker/src/UI/MainFrame.h
@@ -44,10 +44,11 @@ class MainFrame : public ThemedWindowWrapper
private:
void Init();
+ void AddToSystemMenu();
void OnClose(wxCloseEvent& event);
- void OnSize(wxSizeEvent& event);
- void OnSizing(wxSizeEvent& event);
+ //void OnSize(wxSizeEvent& event);
+ //void OnSizing(wxSizeEvent& event);
void OnClickStart(wxCommandEvent& event);
void OnClickScreenShot(wxCommandEvent& event);
void OnRightClickScreenShot(wxMouseEvent& event);
@@ -69,6 +70,8 @@ class MainFrame : public ThemedWindowWrapper
// DPI用
void OnDPIChanged(wxDPIChangedEvent& event);
+ bool MSWTranslateMessage(WXMSG* msg) override;
+
void ChangeEventOptions(EventSource* event);
std::wstring GetSkillDescFromOption(const std::wstring& option);
diff --git a/UmaUmaChecker/src/UI/wxUmaTextCtrl.cpp b/UmaUmaChecker/src/UI/wxUmaTextCtrl.cpp
index c7e5428..181faa7 100644
--- a/UmaUmaChecker/src/UI/wxUmaTextCtrl.cpp
+++ b/UmaUmaChecker/src/UI/wxUmaTextCtrl.cpp
@@ -5,13 +5,17 @@
#include
#include
-wxUmaTextCtrl::wxUmaTextCtrl(wxWindow* parent) : wxTextCtrl(parent, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY | wxTE_RICH2 | wxTE_MULTILINE | wxTE_NO_VSCROLL | wxTE_DONTWRAP)
+wxUmaTextCtrl::wxUmaTextCtrl(wxWindow* parent, int line): wxTextCtrl(parent, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY | wxTE_RICH2 | wxTE_MULTILINE | wxTE_NO_VSCROLL | wxTE_DONTWRAP)
{
DWORD dwOptions = SendMessage(this->GetHWND(), EM_GETLANGOPTIONS, 0, 0);
dwOptions &= ~IMF_AUTOFONT;
dwOptions |= IMF_UIFONTS;
SendMessage(this->GetHWND(), EM_SETLANGOPTIONS, 0, (LPARAM)dwOptions);
SendMessage(this->GetHWND(), EM_SHOWSCROLLBAR, SB_HORZ, FALSE);
+
+ SetHeightByLine(line);
+
+ this->Refresh();
}
wxUmaTextCtrl::~wxUmaTextCtrl()
@@ -121,12 +125,28 @@ bool wxUmaTextCtrl::SetFont(const wxFont& font)
void wxUmaTextCtrl::SetHeightByLine(int line)
{
- wxClientDC dc(this);
- wxTextAttr attr = this->GetDefaultStyle();
- wxFontMetrics metrics = dc.GetFontMetrics();
+ if (Line == line) return;
+
+ Line = line;
+
+ wxSize size = wxSize(-1, GetHeightByLine(Line));
- wxSize size = wxSize(wxDefaultCoord, metrics.height * line);
this->SetMinClientSize(size);
- this->SetMaxClientSize(size);
+
+ this->InvalidateBestSize();
}
+wxSize wxUmaTextCtrl::DoGetBestClientSize() const
+{
+ return wxSize(-1, GetHeightByLine(Line));
+}
+
+int wxUmaTextCtrl::GetHeightByLine(int line) const
+{
+ wxUmaTextCtrl* const self = const_cast(this);
+ wxClientDC dc(self);
+ wxTextAttr attr = this->GetDefaultStyle();
+ wxFontMetrics metrics = dc.GetFontMetrics();
+
+ return metrics.height * line;
+}
diff --git a/UmaUmaChecker/src/UI/wxUmaTextCtrl.h b/UmaUmaChecker/src/UI/wxUmaTextCtrl.h
index 49b2752..6fffc3f 100644
--- a/UmaUmaChecker/src/UI/wxUmaTextCtrl.h
+++ b/UmaUmaChecker/src/UI/wxUmaTextCtrl.h
@@ -5,7 +5,7 @@
class wxUmaTextCtrl : public wxTextCtrl
{
public:
- wxUmaTextCtrl(wxWindow* parent);
+ wxUmaTextCtrl(wxWindow* parent, int line = -1);
~wxUmaTextCtrl();
virtual void SetValue(const wxString& value);
@@ -14,6 +14,13 @@ class wxUmaTextCtrl : public wxTextCtrl
virtual bool SetFont(const wxFont& font);
void SetHeightByLine(int line);
- //virtual bool SetBackgroundColour(const wxColour& colour);
+protected:
+ wxSize DoGetBestClientSize() const override;
+
+private:
+ int GetHeightByLine(int line) const;
+
+private:
+ int Line;
};