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>
<MD5FromFilesDlg title="Generate MD5 digest from files">
<Item id="1922" name="Choose files to generate MD5..."/>
<Item id="1924" name="Copy to Clipboard"/>
<Item id="2" name="Close"/>
<Item id="1922" name="Choose files to &amp;generate MD5..."/>
<Item id="1924" name="Co&amp;py to Clipboard"/>
<Item id="2" name="&amp;Close"/>
</MD5FromFilesDlg>
<MD5FromTextDlg title="Generate MD5 digest">
<Item id="1932" name="Treat each line as a separate string"/>
<Item id="1934" name="Copy to Clipboard"/>
<Item id="2" name="Close"/>
<Item id="1932" name="Treat each line as a &amp;separate string"/>
<Item id="1934" name="Co&amp;py to Clipboard"/>
<Item id="2" name="&amp;Close"/>
</MD5FromTextDlg>
<SHA256FromFilesDlg title="Generate SHA-256 digest from files">
<Item id="1922" name="Choose files to generate SHA-256..."/>
<Item id="1924" name="Copy to Clipboard"/>
<Item id="2" name="Close"/>
<Item id="1922" name="Choose files to &amp;generate SHA-256..."/>
<Item id="1924" name="Co&amp;py to Clipboard"/>
<Item id="2" name="&amp;Close"/>
</SHA256FromFilesDlg>
<SHA256FromTextDlg title="Generate SHA-256 digest">
<Item id="1932" name="Treat each line as a separate string"/>
<Item id="1934" name="Copy to Clipboard"/>
<Item id="2" name="Close"/>
<Item id="1932" name="Treat each line as a &amp;separate string"/>
<Item id="1934" name="Co&amp;py to Clipboard"/>
<Item id="2" name="&amp;Close"/>
</SHA256FromTextDlg>
<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>
<MD5FromFilesDlg title="Generate MD5 digest from files">
<Item id="1922" name="Choose files to generate MD5..."/>
<Item id="1924" name="Copy to Clipboard"/>
<Item id="2" name="Close"/>
<Item id="1922" name="Choose files to &amp;generate MD5..."/>
<Item id="1924" name="Co&amp;py to Clipboard"/>
<Item id="2" name="&amp;Close"/>
</MD5FromFilesDlg>
<MD5FromTextDlg title="Generate MD5 digest">
<Item id="1932" name="Treat each line as a separate string"/>
<Item id="1934" name="Copy to Clipboard"/>
<Item id="2" name="Close"/>
<Item id="1932" name="Treat each line as a &amp;separate string"/>
<Item id="1934" name="Co&amp;py to Clipboard"/>
<Item id="2" name="&amp;Close"/>
</MD5FromTextDlg>
<SHA256FromFilesDlg title="Generate SHA-256 digest from files">
<Item id="1922" name="Choose files to generate SHA-256..."/>
<Item id="1924" name="Copy to Clipboard"/>
<Item id="2" name="Close"/>
<Item id="1922" name="Choose files to &amp;generate SHA-256..."/>
<Item id="1924" name="Co&amp;py to Clipboard"/>
<Item id="2" name="&amp;Close"/>
</SHA256FromFilesDlg>
<SHA256FromTextDlg title="Generate SHA-256 digest">
<Item id="1932" name="Treat each line as a separate string"/>
<Item id="1934" name="Copy to Clipboard"/>
<Item id="2" name="Close"/>
<Item id="1932" name="Treat each line as a &amp;separate string"/>
<Item id="1934" name="Co&amp;py to Clipboard"/>
<Item id="2" name="&amp;Close"/>
</SHA256FromTextDlg>
<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:
{
if (NppDarkMode::isEnabled())
{
return NppDarkMode::onCtlColorDarker(reinterpret_cast<HDC>(wParam));
}
break;
return NppDarkMode::onCtlColorDarker(reinterpret_cast<HDC>(wParam));
}
case WM_CTLCOLORSTATIC:
{
if (NppDarkMode::isEnabled())
{
HWND hwnd = reinterpret_cast<HWND>(lParam);
if (hwnd == ::GetDlgItem(_hSelf, IDC_HASH_PATH_EDIT) || hwnd == ::GetDlgItem(_hSelf, IDC_HASH_RESULT_EDIT))
const auto hdcStatic = reinterpret_cast<HDC>(wParam);
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));
}
else
{
return NppDarkMode::onCtlColorDarker(reinterpret_cast<HDC>(wParam));
return NppDarkMode::onCtlColor(hdcStatic);
}
return NppDarkMode::onCtlColorDarker(hdcStatic);
}
break;
}
@ -89,7 +83,7 @@ intptr_t CALLBACK HashFromFilesDlg::run_dlgProc(UINT message, WPARAM wParam, LPA
return TRUE;
}
case WM_COMMAND :
case WM_COMMAND:
{
switch (wParam)
{
@ -137,7 +131,7 @@ intptr_t CALLBACK HashFromFilesDlg::run_dlgProc(UINT message, WPARAM wParam, LPA
{
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());
wchar_t sha2hashStr[65] = { '\0' };
@ -186,7 +180,7 @@ intptr_t CALLBACK HashFromFilesDlg::run_dlgProc(UINT message, WPARAM wParam, LPA
}
}
}
return FALSE;
return FALSE;
}
LRESULT run_textEditProc(WNDPROC oldEditProc, HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
@ -230,13 +224,13 @@ void HashFromFilesDlg::doDialog(bool isRTL)
generic_string title = TEXT("Generate SHA-256 digest from files");
::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());
}
}
// Adjust the position in the center
goToCenter();
goToCenter(SWP_SHOWWINDOW | SWP_NOSIZE);
}
void HashFromTextDlg::generateHash()
@ -261,7 +255,7 @@ void HashFromTextDlg::generateHash()
}
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));
wchar_t sha2hashStr[65] = { '\0' };
@ -359,43 +353,25 @@ intptr_t CALLBACK HashFromTextDlg::run_dlgProc(UINT message, WPARAM wParam, LPAR
case WM_CTLCOLOREDIT:
{
if (NppDarkMode::isEnabled())
{
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;
return NppDarkMode::onCtlColorSofter(reinterpret_cast<HDC>(wParam));
}
case WM_CTLCOLORDLG:
{
if (NppDarkMode::isEnabled())
{
return NppDarkMode::onCtlColorDarker(reinterpret_cast<HDC>(wParam));
}
break;
return NppDarkMode::onCtlColorDarker(reinterpret_cast<HDC>(wParam));
}
case WM_CTLCOLORSTATIC:
{
if (NppDarkMode::isEnabled())
{
HWND hwnd = reinterpret_cast<HWND>(lParam);
if (hwnd == ::GetDlgItem(_hSelf, IDC_HASH_RESULT_FOMTEXT_EDIT))
const auto hdcStatic = reinterpret_cast<HDC>(wParam);
const auto dlgCtrlID = ::GetDlgCtrlID(reinterpret_cast<HWND>(lParam));
if (dlgCtrlID == IDC_HASH_RESULT_FOMTEXT_EDIT)
{
return NppDarkMode::onCtlColor(reinterpret_cast<HDC>(wParam));
}
else
{
return NppDarkMode::onCtlColorDarker(reinterpret_cast<HDC>(wParam));
return NppDarkMode::onCtlColor(hdcStatic);
}
return NppDarkMode::onCtlColorDarker(hdcStatic);
}
break;
}
@ -415,7 +391,7 @@ intptr_t CALLBACK HashFromTextDlg::run_dlgProc(UINT message, WPARAM wParam, LPAR
return TRUE;
}
case WM_COMMAND :
case WM_COMMAND:
{
if (HIWORD(wParam) == EN_CHANGE && LOWORD(wParam) == IDC_HASH_TEXT_EDIT)
{
@ -471,7 +447,7 @@ intptr_t CALLBACK HashFromTextDlg::run_dlgProc(UINT message, WPARAM wParam, LPAR
}
}
}
return FALSE;
return FALSE;
}
void HashFromTextDlg::setHashType(hashType hashType2set)
@ -493,5 +469,5 @@ void HashFromTextDlg::doDialog(bool isRTL)
}
// Adjust the position in the center
goToCenter();
goToCenter(SWP_SHOWWINDOW | SWP_NOSIZE);
}

View File

@ -28,11 +28,11 @@ public :
HashFromFilesDlg() = default;
void doDialog(bool isRTL = false);
virtual void destroy() {};
void destroy() override {};
void setHashType(hashType hashType2set);
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;
static LRESULT CALLBACK HashPathEditStaticProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
@ -56,13 +56,13 @@ public :
HashFromTextDlg() = default;
void doDialog(bool isRTL = false);
virtual void destroy() {};
void destroy() override {};
void generateHash();
void generateHashPerLine();
void setHashType(hashType hashType2set);
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;
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 "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
EXSTYLE WS_EX_DLGMODALFRAME | WS_EX_WINDOWEDGE
CAPTION "Generate MD5 digest from files"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
PUSHBUTTON "Choose files to generate MD5...",IDC_HASH_FILEBROWSER_BUTTON,9,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_RESULT_EDIT,9,105,340,64,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | NOT WS_BORDER | WS_VSCROLL | WS_HSCROLL,WS_EX_CLIENTEDGE
PUSHBUTTON "Copy to Clipboard",IDC_HASH_TOCLIPBOARD_BUTTON,259,172,90,14
PUSHBUTTON "Close",IDCANCEL,148,190,60,14
PUSHBUTTON "Choose files to &generate MD5...",IDC_HASH_FILEBROWSER_BUTTON,7,4,131,14
EDITTEXT IDC_HASH_PATH_EDIT,7,21,340,64,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_HSCROLL
EDITTEXT IDC_HASH_RESULT_EDIT,7,91,340,64,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_HSCROLL
PUSHBUTTON "Co&py to Clipboard",IDC_HASH_TOCLIPBOARD_BUTTON,257,158,90,14
PUSHBUTTON "&Close",IDCANCEL,146,176,60,14
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
EXSTYLE WS_EX_DLGMODALFRAME | WS_EX_WINDOWEDGE
CAPTION "Generate MD5 digest"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
CONTROL "Treat each line as a separate string",IDC_HASH_EACHLINE_CHECK,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,9,3,179,16
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_RESULT_FOMTEXT_EDIT,9,105,340,64,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | NOT WS_BORDER | WS_VSCROLL | WS_HSCROLL,WS_EX_CLIENTEDGE
PUSHBUTTON "Copy to Clipboard",IDC_HASH_FROMTEXT_TOCLIPBOARD_BUTTON,259,172,90,14
PUSHBUTTON "Close",IDCANCEL,148,190,60,14
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,7,21,340,64,ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL | WS_HSCROLL | ES_WANTRETURN
EDITTEXT IDC_HASH_RESULT_FOMTEXT_EDIT,7,91,340,64,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_HSCROLL
PUSHBUTTON "Co&py to Clipboard",IDC_HASH_FROMTEXT_TOCLIPBOARD_BUTTON,257,158,90,14
PUSHBUTTON "&Close",IDCANCEL,146,176,60,14
END