GUI enhancement: MD5 and SHA256 Hash dialogs

- add accelerators
- add initializers
- optimize dark mod

Fix #13579, close #13580
This commit is contained in:
ozone10 2023-04-23 14:29:04 +02:00 committed by Don Ho
parent 997ef821d1
commit 7e6c4b3c6b
5 changed files with 62 additions and 86 deletions

View File

@ -519,27 +519,27 @@ The comments are here for explanation, it's not necessary to translate them.
</Run> </Run>
<MD5FromFilesDlg title="Generate MD5 digest from files"> <MD5FromFilesDlg title="Generate MD5 digest from files">
<Item id="1922" name="Choose files to generate MD5..."/> <Item id="1922" name="Choose files to &amp;generate MD5..."/>
<Item id="1924" name="Copy to Clipboard"/> <Item id="1924" name="Co&amp;py to Clipboard"/>
<Item id="2" name="Close"/> <Item id="2" name="&amp;Close"/>
</MD5FromFilesDlg> </MD5FromFilesDlg>
<MD5FromTextDlg title="Generate MD5 digest"> <MD5FromTextDlg title="Generate MD5 digest">
<Item id="1932" name="Treat each line as a separate string"/> <Item id="1932" name="Treat each line as a &amp;separate string"/>
<Item id="1934" name="Copy to Clipboard"/> <Item id="1934" name="Co&amp;py to Clipboard"/>
<Item id="2" name="Close"/> <Item id="2" name="&amp;Close"/>
</MD5FromTextDlg> </MD5FromTextDlg>
<SHA256FromFilesDlg title="Generate SHA-256 digest from files"> <SHA256FromFilesDlg title="Generate SHA-256 digest from files">
<Item id="1922" name="Choose files to generate SHA-256..."/> <Item id="1922" name="Choose files to &amp;generate SHA-256..."/>
<Item id="1924" name="Copy to Clipboard"/> <Item id="1924" name="Co&amp;py to Clipboard"/>
<Item id="2" name="Close"/> <Item id="2" name="&amp;Close"/>
</SHA256FromFilesDlg> </SHA256FromFilesDlg>
<SHA256FromTextDlg title="Generate SHA-256 digest"> <SHA256FromTextDlg title="Generate SHA-256 digest">
<Item id="1932" name="Treat each line as a separate string"/> <Item id="1932" name="Treat each line as a &amp;separate string"/>
<Item id="1934" name="Copy to Clipboard"/> <Item id="1934" name="Co&amp;py to Clipboard"/>
<Item id="2" name="Close"/> <Item id="2" name="&amp;Close"/>
</SHA256FromTextDlg> </SHA256FromTextDlg>
<PluginsAdminDlg title="Plugins Admin" titleAvailable="Available" titleUpdates="Updates" titleInstalled="Installed" titleIncompatible="Incompatible"> <PluginsAdminDlg title="Plugins Admin" titleAvailable="Available" titleUpdates="Updates" titleInstalled="Installed" titleIncompatible="Incompatible">

View File

@ -514,27 +514,27 @@ The comments are here for explanation, it's not necessary to translate them.
</Run> </Run>
<MD5FromFilesDlg title="Generate MD5 digest from files"> <MD5FromFilesDlg title="Generate MD5 digest from files">
<Item id="1922" name="Choose files to generate MD5..."/> <Item id="1922" name="Choose files to &amp;generate MD5..."/>
<Item id="1924" name="Copy to Clipboard"/> <Item id="1924" name="Co&amp;py to Clipboard"/>
<Item id="2" name="Close"/> <Item id="2" name="&amp;Close"/>
</MD5FromFilesDlg> </MD5FromFilesDlg>
<MD5FromTextDlg title="Generate MD5 digest"> <MD5FromTextDlg title="Generate MD5 digest">
<Item id="1932" name="Treat each line as a separate string"/> <Item id="1932" name="Treat each line as a &amp;separate string"/>
<Item id="1934" name="Copy to Clipboard"/> <Item id="1934" name="Co&amp;py to Clipboard"/>
<Item id="2" name="Close"/> <Item id="2" name="&amp;Close"/>
</MD5FromTextDlg> </MD5FromTextDlg>
<SHA256FromFilesDlg title="Generate SHA-256 digest from files"> <SHA256FromFilesDlg title="Generate SHA-256 digest from files">
<Item id="1922" name="Choose files to generate SHA-256..."/> <Item id="1922" name="Choose files to &amp;generate SHA-256..."/>
<Item id="1924" name="Copy to Clipboard"/> <Item id="1924" name="Co&amp;py to Clipboard"/>
<Item id="2" name="Close"/> <Item id="2" name="&amp;Close"/>
</SHA256FromFilesDlg> </SHA256FromFilesDlg>
<SHA256FromTextDlg title="Generate SHA-256 digest"> <SHA256FromTextDlg title="Generate SHA-256 digest">
<Item id="1932" name="Treat each line as a separate string"/> <Item id="1932" name="Treat each line as a &amp;separate string"/>
<Item id="1934" name="Copy to Clipboard"/> <Item id="1934" name="Co&amp;py to Clipboard"/>
<Item id="2" name="Close"/> <Item id="2" name="&amp;Close"/>
</SHA256FromTextDlg> </SHA256FromTextDlg>
<PluginsAdminDlg title="Plugins Admin" titleAvailable="Available" titleUpdates="Updates" titleInstalled="Installed" titleIncompatible="Incompatible"> <PluginsAdminDlg title="Plugins Admin" titleAvailable="Available" titleUpdates="Updates" titleInstalled="Installed" titleIncompatible="Incompatible">

View File

@ -50,26 +50,20 @@ intptr_t CALLBACK HashFromFilesDlg::run_dlgProc(UINT message, WPARAM wParam, LPA
case WM_CTLCOLORDLG: case WM_CTLCOLORDLG:
{ {
if (NppDarkMode::isEnabled()) return NppDarkMode::onCtlColorDarker(reinterpret_cast<HDC>(wParam));
{
return NppDarkMode::onCtlColorDarker(reinterpret_cast<HDC>(wParam));
}
break;
} }
case WM_CTLCOLORSTATIC: case WM_CTLCOLORSTATIC:
{ {
if (NppDarkMode::isEnabled()) if (NppDarkMode::isEnabled())
{ {
HWND hwnd = reinterpret_cast<HWND>(lParam); const auto hdcStatic = reinterpret_cast<HDC>(wParam);
if (hwnd == ::GetDlgItem(_hSelf, IDC_HASH_PATH_EDIT) || hwnd == ::GetDlgItem(_hSelf, IDC_HASH_RESULT_EDIT)) const auto dlgCtrlID = ::GetDlgCtrlID(reinterpret_cast<HWND>(lParam));
if (dlgCtrlID == IDC_HASH_PATH_EDIT || dlgCtrlID == IDC_HASH_RESULT_EDIT)
{ {
return NppDarkMode::onCtlColor(reinterpret_cast<HDC>(wParam)); return NppDarkMode::onCtlColor(hdcStatic);
}
else
{
return NppDarkMode::onCtlColorDarker(reinterpret_cast<HDC>(wParam));
} }
return NppDarkMode::onCtlColorDarker(hdcStatic);
} }
break; break;
} }
@ -89,7 +83,7 @@ intptr_t CALLBACK HashFromFilesDlg::run_dlgProc(UINT message, WPARAM wParam, LPA
return TRUE; return TRUE;
} }
case WM_COMMAND : case WM_COMMAND:
{ {
switch (wParam) switch (wParam)
{ {
@ -137,7 +131,7 @@ intptr_t CALLBACK HashFromFilesDlg::run_dlgProc(UINT message, WPARAM wParam, LPA
{ {
std::string content = getFileContent(it.c_str()); std::string content = getFileContent(it.c_str());
uint8_t sha2hash[32]; uint8_t sha2hash[32]{};
calc_sha_256(sha2hash, reinterpret_cast<const uint8_t*>(content.c_str()), content.length()); calc_sha_256(sha2hash, reinterpret_cast<const uint8_t*>(content.c_str()), content.length());
wchar_t sha2hashStr[65] = { '\0' }; wchar_t sha2hashStr[65] = { '\0' };
@ -230,13 +224,13 @@ void HashFromFilesDlg::doDialog(bool isRTL)
generic_string title = TEXT("Generate SHA-256 digest from files"); generic_string title = TEXT("Generate SHA-256 digest from files");
::SetWindowText(_hSelf, title.c_str()); ::SetWindowText(_hSelf, title.c_str());
generic_string buttonText = TEXT("Choose files to generate SHA-256..."); generic_string buttonText = TEXT("Choose files to &generate SHA-256...");
::SetDlgItemText(_hSelf, IDC_HASH_FILEBROWSER_BUTTON, buttonText.c_str()); ::SetDlgItemText(_hSelf, IDC_HASH_FILEBROWSER_BUTTON, buttonText.c_str());
} }
} }
// Adjust the position in the center // Adjust the position in the center
goToCenter(); goToCenter(SWP_SHOWWINDOW | SWP_NOSIZE);
} }
void HashFromTextDlg::generateHash() void HashFromTextDlg::generateHash()
@ -261,7 +255,7 @@ void HashFromTextDlg::generateHash()
} }
else if (_ht == hash_sha256) else if (_ht == hash_sha256)
{ {
uint8_t sha2hash[32]; uint8_t sha2hash[32]{};
calc_sha_256(sha2hash, reinterpret_cast<const uint8_t*>(newText), strlen(newText)); calc_sha_256(sha2hash, reinterpret_cast<const uint8_t*>(newText), strlen(newText));
wchar_t sha2hashStr[65] = { '\0' }; wchar_t sha2hashStr[65] = { '\0' };
@ -359,43 +353,25 @@ intptr_t CALLBACK HashFromTextDlg::run_dlgProc(UINT message, WPARAM wParam, LPAR
case WM_CTLCOLOREDIT: case WM_CTLCOLOREDIT:
{ {
if (NppDarkMode::isEnabled()) return NppDarkMode::onCtlColorSofter(reinterpret_cast<HDC>(wParam));
{
HWND hwnd = reinterpret_cast<HWND>(lParam);
if (hwnd == ::GetDlgItem(_hSelf, IDC_HASH_TEXT_EDIT))
{
return NppDarkMode::onCtlColorSofter(reinterpret_cast<HDC>(wParam));
}
else
{
return NppDarkMode::onCtlColor(reinterpret_cast<HDC>(wParam));
}
}
break;
} }
case WM_CTLCOLORDLG: case WM_CTLCOLORDLG:
{ {
if (NppDarkMode::isEnabled()) return NppDarkMode::onCtlColorDarker(reinterpret_cast<HDC>(wParam));
{
return NppDarkMode::onCtlColorDarker(reinterpret_cast<HDC>(wParam));
}
break;
} }
case WM_CTLCOLORSTATIC: case WM_CTLCOLORSTATIC:
{ {
if (NppDarkMode::isEnabled()) if (NppDarkMode::isEnabled())
{ {
HWND hwnd = reinterpret_cast<HWND>(lParam); const auto hdcStatic = reinterpret_cast<HDC>(wParam);
if (hwnd == ::GetDlgItem(_hSelf, IDC_HASH_RESULT_FOMTEXT_EDIT)) const auto dlgCtrlID = ::GetDlgCtrlID(reinterpret_cast<HWND>(lParam));
if (dlgCtrlID == IDC_HASH_RESULT_FOMTEXT_EDIT)
{ {
return NppDarkMode::onCtlColor(reinterpret_cast<HDC>(wParam)); return NppDarkMode::onCtlColor(hdcStatic);
}
else
{
return NppDarkMode::onCtlColorDarker(reinterpret_cast<HDC>(wParam));
} }
return NppDarkMode::onCtlColorDarker(hdcStatic);
} }
break; break;
} }
@ -415,7 +391,7 @@ intptr_t CALLBACK HashFromTextDlg::run_dlgProc(UINT message, WPARAM wParam, LPAR
return TRUE; return TRUE;
} }
case WM_COMMAND : case WM_COMMAND:
{ {
if (HIWORD(wParam) == EN_CHANGE && LOWORD(wParam) == IDC_HASH_TEXT_EDIT) if (HIWORD(wParam) == EN_CHANGE && LOWORD(wParam) == IDC_HASH_TEXT_EDIT)
{ {
@ -493,5 +469,5 @@ void HashFromTextDlg::doDialog(bool isRTL)
} }
// Adjust the position in the center // Adjust the position in the center
goToCenter(); goToCenter(SWP_SHOWWINDOW | SWP_NOSIZE);
} }

View File

@ -28,11 +28,11 @@ public :
HashFromFilesDlg() = default; HashFromFilesDlg() = default;
void doDialog(bool isRTL = false); void doDialog(bool isRTL = false);
virtual void destroy() {}; void destroy() override {};
void setHashType(hashType hashType2set); void setHashType(hashType hashType2set);
protected : protected :
virtual intptr_t CALLBACK run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam); intptr_t CALLBACK run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam) override;
hashType _ht = hash_md5; hashType _ht = hash_md5;
static LRESULT CALLBACK HashPathEditStaticProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { static LRESULT CALLBACK HashPathEditStaticProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
@ -56,13 +56,13 @@ public :
HashFromTextDlg() = default; HashFromTextDlg() = default;
void doDialog(bool isRTL = false); void doDialog(bool isRTL = false);
virtual void destroy() {}; void destroy() override {};
void generateHash(); void generateHash();
void generateHashPerLine(); void generateHashPerLine();
void setHashType(hashType hashType2set); void setHashType(hashType hashType2set);
protected : protected :
virtual intptr_t CALLBACK run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam); intptr_t CALLBACK run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam) override;
hashType _ht = hash_md5; hashType _ht = hash_md5;
static LRESULT CALLBACK HashTextEditStaticProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { static LRESULT CALLBACK HashTextEditStaticProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {

View File

@ -19,28 +19,28 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
#include <windows.h> #include <windows.h>
#include "md5Dlgs_rc.h" #include "md5Dlgs_rc.h"
IDD_HASHFROMFILES_DLG DIALOGEX 0, 0, 357, 213 IDD_HASHFROMFILES_DLG DIALOGEX 0, 0, 353, 196
STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_DLGMODALFRAME | WS_EX_WINDOWEDGE EXSTYLE WS_EX_DLGMODALFRAME | WS_EX_WINDOWEDGE
CAPTION "Generate MD5 digest from files" CAPTION "Generate MD5 digest from files"
FONT 8, "MS Shell Dlg", 400, 0, 0x1 FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN BEGIN
PUSHBUTTON "Choose files to generate MD5...",IDC_HASH_FILEBROWSER_BUTTON,9,4,131,14 PUSHBUTTON "Choose files to &generate MD5...",IDC_HASH_FILEBROWSER_BUTTON,7,4,131,14
EDITTEXT IDC_HASH_PATH_EDIT,9,21,340,64,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | NOT WS_BORDER | WS_VSCROLL | WS_HSCROLL,WS_EX_CLIENTEDGE EDITTEXT IDC_HASH_PATH_EDIT,7,21,340,64,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_HSCROLL
EDITTEXT IDC_HASH_RESULT_EDIT,9,105,340,64,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | NOT WS_BORDER | WS_VSCROLL | WS_HSCROLL,WS_EX_CLIENTEDGE EDITTEXT IDC_HASH_RESULT_EDIT,7,91,340,64,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_HSCROLL
PUSHBUTTON "Copy to Clipboard",IDC_HASH_TOCLIPBOARD_BUTTON,259,172,90,14 PUSHBUTTON "Co&py to Clipboard",IDC_HASH_TOCLIPBOARD_BUTTON,257,158,90,14
PUSHBUTTON "Close",IDCANCEL,148,190,60,14 PUSHBUTTON "&Close",IDCANCEL,146,176,60,14
END END
IDD_HASHFROMTEXT_DLG DIALOGEX 0, 0, 357, 213 IDD_HASHFROMTEXT_DLG DIALOGEX 0, 0, 353, 196
STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_DLGMODALFRAME | WS_EX_WINDOWEDGE EXSTYLE WS_EX_DLGMODALFRAME | WS_EX_WINDOWEDGE
CAPTION "Generate MD5 digest" CAPTION "Generate MD5 digest"
FONT 8, "MS Shell Dlg", 400, 0, 0x1 FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN BEGIN
CONTROL "Treat each line as a separate string",IDC_HASH_EACHLINE_CHECK,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,9,3,179,16 CONTROL "Treat each line as a &separate string",IDC_HASH_EACHLINE_CHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,6,179,10
EDITTEXT IDC_HASH_TEXT_EDIT, 9, 21, 340, 64, ES_MULTILINE | ES_AUTOVSCROLL | NOT WS_BORDER | WS_VSCROLL | WS_HSCROLL | ES_WANTRETURN,WS_EX_CLIENTEDGE EDITTEXT IDC_HASH_TEXT_EDIT,7,21,340,64,ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL | WS_HSCROLL | ES_WANTRETURN
EDITTEXT IDC_HASH_RESULT_FOMTEXT_EDIT,9,105,340,64,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | NOT WS_BORDER | WS_VSCROLL | WS_HSCROLL,WS_EX_CLIENTEDGE EDITTEXT IDC_HASH_RESULT_FOMTEXT_EDIT,7,91,340,64,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_HSCROLL
PUSHBUTTON "Copy to Clipboard",IDC_HASH_FROMTEXT_TOCLIPBOARD_BUTTON,259,172,90,14 PUSHBUTTON "Co&py to Clipboard",IDC_HASH_FROMTEXT_TOCLIPBOARD_BUTTON,257,158,90,14
PUSHBUTTON "Close",IDCANCEL,148,190,60,14 PUSHBUTTON "&Close",IDCANCEL,146,176,60,14
END END