From a01640de05ffe71588ebacaa1226c2b7a4165d05 Mon Sep 17 00:00:00 2001 From: namazso Date: Fri, 14 Jul 2023 22:06:17 +0200 Subject: [PATCH] Add summary (fixes #149) --- Localization/en-US.json | 1 + OpenHashTab/MainDialog.cpp | 36 +++++++++++++------- OpenHashTab/MainDialog.h | 2 ++ OpenHashTab/OpenHashTab.rc | 6 ++-- OpenHashTab/resource.h | 3 ++ OpenHashTab/sum.ico | Bin 0 -> 146982 bytes OpenHashTab/{virustotal_icon.ico => vt.ico} | Bin 7 files changed, 34 insertions(+), 14 deletions(-) create mode 100644 OpenHashTab/sum.ico rename OpenHashTab/{virustotal_icon.ico => vt.ico} (100%) diff --git a/Localization/en-US.json b/Localization/en-US.json index 29ced3b5..802cdda8 100644 --- a/Localization/en-US.json +++ b/Localization/en-US.json @@ -11,6 +11,7 @@ "EXPORT_BTN": "Export…", "SUMFILE": "Interpreted as sumfile.", "DONE": "Done!", + "SUMMARY": "Summary", "PROCESSING": "Processing…", "HASHES": "Hashes", "CLIPBOARD": "To clipboard", diff --git a/OpenHashTab/MainDialog.cpp b/OpenHashTab/MainDialog.cpp index a89fddf8..4bc1991e 100644 --- a/OpenHashTab/MainDialog.cpp +++ b/OpenHashTab/MainDialog.cpp @@ -299,17 +299,7 @@ void MainDialog::UpdateDefaultStatus(bool force_reset) { if (!_temporary_status) { const auto msg = _finished ? IDS_DONE : IDS_PROCESSING; - wchar_t done[64]; - swprintf_s( - done, - L"%s (%u/%u/%u/%u)", - utl::GetString(msg).c_str(), - _count_match, - _count_mismatch, - _count_unknown, - _count_error - ); - SetWindowTextW(_hwnd_STATIC_PROCESSING, done); + SetWindowTextW(_hwnd_STATIC_PROCESSING, utl::GetString(msg).c_str()); } } @@ -331,7 +321,8 @@ INT_PTR MainDialog::DlgProc(UINT msg, WPARAM wparam, LPARAM lparam) { { &MainDialog::OnSettingsClicked, WM_COMMAND, wnd::Match_wlh, MAKELONG(IDC_BUTTON_SETTINGS, BN_CLICKED) }, { &MainDialog::OnExportClicked, WM_COMMAND, wnd::Match_wlh, MAKELONG(IDC_BUTTON_EXPORT, BN_CLICKED) }, { &MainDialog::OnCancelClicked, WM_COMMAND, wnd::Match_wlh, MAKELONG(IDC_BUTTON_CANCEL, BN_CLICKED) }, - { &MainDialog::OnVTClicked, WM_COMMAND, wnd::Match_wlh, MAKELONG(IDC_BUTTON_VT, BN_CLICKED) } + { &MainDialog::OnVTClicked, WM_COMMAND, wnd::Match_wlh, MAKELONG(IDC_BUTTON_VT, BN_CLICKED) }, + { &MainDialog::OnSummaryClicked, WM_COMMAND, wnd::Match_wlh, MAKELONG(IDC_BUTTON_SUMMARY, BN_CLICKED) }, }; // clang-format on @@ -348,6 +339,7 @@ INT_PTR MainDialog::OnInitDialog(UINT, WPARAM, LPARAM) { utl::SetFontForChildren(_hwnd, _font.get()); + utl::SetIconButton(_hwnd_BUTTON_SUMMARY, IDI_ICON_SUM); utl::SetIconButton(_hwnd_BUTTON_VT, IDI_ICON_VT); utl::SetIconButton(_hwnd_BUTTON_SETTINGS, IDI_ICON_COG); @@ -472,6 +464,8 @@ INT_PTR MainDialog::OnAllFilesFinished(UINT, WPARAM, LPARAM) { if (detail::GetMachineSettingDWORD("ForceDisableVT", 0) == 0) Button_Enable(_hwnd_BUTTON_VT, true); + Button_Enable(_hwnd_BUTTON_SUMMARY, true); + Edit_Enable(_hwnd_EDIT_HASH, true); ShowWindow(_hwnd_PROGRESS, 0); @@ -619,6 +613,24 @@ INT_PTR MainDialog::OnVTClicked(UINT, WPARAM, LPARAM) { return FALSE; } +INT_PTR MainDialog::OnSummaryClicked(UINT, WPARAM, LPARAM) { + wchar_t msg[512]; + swprintf_s( + msg, + L"%s: %u\r\n%s: %u\r\n%s: %u\r\n%s: %u", + utl::GetString(IDS_MATCH_GROUP).c_str(), + _count_match, + utl::GetString(IDS_MISMATCH_GROUP).c_str(), + _count_mismatch, + utl::GetString(IDS_UNKNOWN_GROUP).c_str(), + _count_unknown, + utl::GetString(IDS_ERROR_GROUP).c_str(), + _count_error + ); + MessageBoxW(_hwnd, msg, utl::GetString(IDS_SUMMARY).c_str(), MB_OK); + return TRUE; +} + INT_PTR MainDialog::OnClose(UINT, WPARAM, LPARAM) { // we should never ever receive WM_CLOSE when running as a property sheet, so DestroyWindow is safe here DestroyWindow(_hwnd); diff --git a/OpenHashTab/MainDialog.h b/OpenHashTab/MainDialog.h index f329a91f..8b58b669 100644 --- a/OpenHashTab/MainDialog.h +++ b/OpenHashTab/MainDialog.h @@ -53,6 +53,7 @@ class MainDialog MAKE_IDC_MEMBER(_hwnd, ALGORITHM_LIST); MAKE_IDC_MEMBER(_hwnd, PROGRESS); MAKE_IDC_MEMBER(_hwnd, BUTTON_VT); + MAKE_IDC_MEMBER(_hwnd, BUTTON_SUMMARY); unsigned _count_error{}; unsigned _count_match{}; @@ -95,6 +96,7 @@ class MainDialog INT_PTR OnExportClicked(UINT, WPARAM, LPARAM); INT_PTR OnCancelClicked(UINT, WPARAM, LPARAM); INT_PTR OnVTClicked(UINT, WPARAM, LPARAM); + INT_PTR OnSummaryClicked(UINT, WPARAM, LPARAM); INT_PTR OnClose(UINT, WPARAM, LPARAM); INT_PTR OnNeedAdjust(UINT, WPARAM, LPARAM); INT_PTR OnHashEditChanged(UINT, WPARAM, LPARAM); diff --git a/OpenHashTab/OpenHashTab.rc b/OpenHashTab/OpenHashTab.rc index 30e0187f..20f2902f 100644 --- a/OpenHashTab/OpenHashTab.rc +++ b/OpenHashTab/OpenHashTab.rc @@ -43,7 +43,8 @@ BEGIN // First row: is sumfile, processing/done, VT button, Settings button LTEXT "",IDC_STATIC_SUMFILE,6,152,98,12 - RTEXT "IDS_PROCESSING",IDC_STATIC_PROCESSING,104,152,80,12 + RTEXT "IDS_PROCESSING",IDC_STATIC_PROCESSING,104,152,62,12 + PUSHBUTTON "E",IDC_BUTTON_SUMMARY,168,150,16,16,BS_ICON | WS_DISABLED PUSHBUTTON "V",IDC_BUTTON_VT,186,150,16,16,BS_ICON | WS_DISABLED PUSHBUTTON "S",IDC_BUTTON_SETTINGS,204,150,16,16,BS_ICON | WS_DISABLED @@ -158,8 +159,9 @@ END // Icon with the lowest ID value placed first to ensure application icon // remains consistent on all systems. IDI_ICON1 ICON "icon.ico" -IDI_ICON_VT ICON "virustotal_icon.ico" +IDI_ICON_VT ICON "vt.ico" IDI_ICON_COG ICON "cog.ico" +IDI_ICON_SUM ICON "sum.ico" VS_VERSION_INFO VERSIONINFO FILEVERSION CI_VERSION_MAJOR,CI_VERSION_MINOR,CI_VERSION_PATCH,0 diff --git a/OpenHashTab/resource.h b/OpenHashTab/resource.h index 702a3f26..c9582075 100644 --- a/OpenHashTab/resource.h +++ b/OpenHashTab/resource.h @@ -64,6 +64,7 @@ #define IDC_UNKNOWN_GROUP 263 #define IDC_UNKNOWN_SAMPLE 264 #define IDC_CHECK_DISPLAY_MONOSPACE 265 +#define IDC_BUTTON_SUMMARY 266 #define IDD_OPENHASHTAB_PROPPAGE 300 #define IDD_SETTINGS 301 @@ -71,6 +72,7 @@ #define IDI_ICON1 310 #define IDI_ICON_COG 311 #define IDI_ICON_VT 312 +#define IDI_ICON_SUM 313 #define IDM_COPY_EVERYTHING 320 #define IDM_COPY_FILE 321 @@ -131,3 +133,4 @@ #define IDS_VT_NOT_FOUND 451 #define IDS_VT_NO_COMPATIBLE 452 #define IDS_DISPLAY_MONOSPACE 453 +#define IDS_SUMMARY 454 diff --git a/OpenHashTab/sum.ico b/OpenHashTab/sum.ico new file mode 100644 index 0000000000000000000000000000000000000000..a1df8ce3da3c4d33daeb6f1310a1f2185f9edaa9 GIT binary patch literal 146982 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 literal 0 HcmV?d00001 diff --git a/OpenHashTab/virustotal_icon.ico b/OpenHashTab/vt.ico similarity index 100% rename from OpenHashTab/virustotal_icon.ico rename to OpenHashTab/vt.ico