Fix changing toolbar icon set not change to matched panel icon set issue

Synchronize dockable panel tab icons with toolbar icons.

Fix #16595, close #16556
This commit is contained in:
ozone10 2025-05-16 19:13:53 +02:00 committed by Don Ho
parent 8bc77857a7
commit 19a1897eaa
11 changed files with 180 additions and 112 deletions

View File

@ -7285,20 +7285,13 @@ void Notepad_plus::launchClipboardHistoryPanel()
NativeLangSpeaker *pNativeSpeaker = nppParams.getNativeLangSpeaker(); NativeLangSpeaker *pNativeSpeaker = nppParams.getNativeLangSpeaker();
bool isRTL = pNativeSpeaker->isRTL(); bool isRTL = pNativeSpeaker->isRTL();
tTbData data{}; tTbData data{};
_pClipboardHistoryPanel->create(&data, isRTL); _pClipboardHistoryPanel->create(&data, { IDR_CLIPBOARDPANEL_ICO, IDR_CLIPBOARDPANEL_ICO_DM, IDR_CLIPBOARDPANEL_ICO2 }, isRTL);
::SendMessage(_pPublicInterface->getHSelf(), NPPM_MODELESSDIALOG, MODELESSDIALOGREMOVE, reinterpret_cast<LPARAM>(_pClipboardHistoryPanel->getHSelf())); ::SendMessage(_pPublicInterface->getHSelf(), NPPM_MODELESSDIALOG, MODELESSDIALOGREMOVE, reinterpret_cast<LPARAM>(_pClipboardHistoryPanel->getHSelf()));
// define the default docking behaviour // define the default docking behaviour
data.uMask = DWS_DF_CONT_RIGHT | DWS_ICONTAB | DWS_USEOWNDARKMODE; data.uMask = DWS_DF_CONT_RIGHT | DWS_ICONTAB | DWS_USEOWNDARKMODE;
int icoID = IDR_CLIPBOARDPANEL_ICO2; loadPanelIcon(_pPublicInterface->getHinst(), _pClipboardHistoryPanel, &data.hIconTab);
if (nppParams.getNppGUI()._tbIconInfo._tbIconSet == TB_STANDARD)
icoID = IDR_CLIPBOARDPANEL_ICO;
else if (NppDarkMode::isEnabled())
icoID = IDR_CLIPBOARDPANEL_ICO_DM;
const int iconSize = DPIManagerV2::scale(g_dockingContTabIconSize, _pClipboardHistoryPanel->getHSelf());
DPIManagerV2::loadIcon(_pPublicInterface->getHinst(), MAKEINTRESOURCE(icoID), iconSize, iconSize, &data.hIconTab, LR_LOADMAP3DCOLORS | LR_LOADTRANSPARENT);
data.pszModuleName = NPP_INTERNAL_FUNCTION_STR; data.pszModuleName = NPP_INTERNAL_FUNCTION_STR;
@ -7349,20 +7342,13 @@ void Notepad_plus::launchDocumentListPanel(bool changeFromBtnCmd)
NativeLangSpeaker *pNativeSpeaker = nppParams.getNativeLangSpeaker(); NativeLangSpeaker *pNativeSpeaker = nppParams.getNativeLangSpeaker();
bool isRTL = pNativeSpeaker->isRTL(); bool isRTL = pNativeSpeaker->isRTL();
tTbData data{}; tTbData data{};
_pDocumentListPanel->create(&data, isRTL); _pDocumentListPanel->create(&data, { IDR_DOCLIST_ICO, IDR_DOCLIST_ICO_DM, IDR_DOCLIST_ICO2 }, isRTL);
::SendMessage(_pPublicInterface->getHSelf(), NPPM_MODELESSDIALOG, MODELESSDIALOGREMOVE, reinterpret_cast<LPARAM>(_pDocumentListPanel->getHSelf())); ::SendMessage(_pPublicInterface->getHSelf(), NPPM_MODELESSDIALOG, MODELESSDIALOGREMOVE, reinterpret_cast<LPARAM>(_pDocumentListPanel->getHSelf()));
// define the default docking behaviour // define the default docking behaviour
data.uMask = DWS_DF_CONT_LEFT | DWS_ICONTAB | DWS_USEOWNDARKMODE; data.uMask = DWS_DF_CONT_LEFT | DWS_ICONTAB | DWS_USEOWNDARKMODE;
int icoID = IDR_DOCLIST_ICO2; loadPanelIcon(_pPublicInterface->getHinst(), _pDocumentListPanel, &data.hIconTab);
if (nppParams.getNppGUI()._tbIconInfo._tbIconSet == TB_STANDARD)
icoID = IDR_DOCLIST_ICO;
else if (NppDarkMode::isEnabled())
icoID = IDR_DOCLIST_ICO_DM;
const int iconSize = DPIManagerV2::scale(g_dockingContTabIconSize, _pDocumentListPanel->getHSelf());
DPIManagerV2::loadIcon(_pPublicInterface->getHinst(), MAKEINTRESOURCE(icoID), iconSize, iconSize, &data.hIconTab, LR_LOADMAP3DCOLORS | LR_LOADTRANSPARENT);
data.pszModuleName = NPP_INTERNAL_FUNCTION_STR; data.pszModuleName = NPP_INTERNAL_FUNCTION_STR;
@ -7437,20 +7423,13 @@ void Notepad_plus::launchAnsiCharPanel()
NativeLangSpeaker *pNativeSpeaker = nppParams.getNativeLangSpeaker(); NativeLangSpeaker *pNativeSpeaker = nppParams.getNativeLangSpeaker();
bool isRTL = pNativeSpeaker->isRTL(); bool isRTL = pNativeSpeaker->isRTL();
tTbData data{}; tTbData data{};
_pAnsiCharPanel->create(&data, isRTL); _pAnsiCharPanel->create(&data, { IDR_ASCIIPANEL_ICO, IDR_ASCIIPANEL_ICO_DM, IDR_ASCIIPANEL_ICO2 }, isRTL);
::SendMessage(_pPublicInterface->getHSelf(), NPPM_MODELESSDIALOG, MODELESSDIALOGREMOVE, reinterpret_cast<LPARAM>(_pAnsiCharPanel->getHSelf())); ::SendMessage(_pPublicInterface->getHSelf(), NPPM_MODELESSDIALOG, MODELESSDIALOGREMOVE, reinterpret_cast<LPARAM>(_pAnsiCharPanel->getHSelf()));
// define the default docking behaviour // define the default docking behaviour
data.uMask = DWS_DF_CONT_RIGHT | DWS_ICONTAB | DWS_USEOWNDARKMODE; data.uMask = DWS_DF_CONT_RIGHT | DWS_ICONTAB | DWS_USEOWNDARKMODE;
int icoID = IDR_ASCIIPANEL_ICO2; loadPanelIcon(_pPublicInterface->getHinst(), _pAnsiCharPanel, &data.hIconTab);
if (nppParams.getNppGUI()._tbIconInfo._tbIconSet == TB_STANDARD)
icoID = IDR_ASCIIPANEL_ICO;
else if (NppDarkMode::isEnabled())
icoID = IDR_ASCIIPANEL_ICO_DM;
const int iconSize = DPIManagerV2::scale(g_dockingContTabIconSize, _pAnsiCharPanel->getHSelf());
DPIManagerV2::loadIcon(_pPublicInterface->getHinst(), MAKEINTRESOURCE(icoID), iconSize, iconSize, &data.hIconTab, LR_LOADMAP3DCOLORS | LR_LOADTRANSPARENT);
data.pszModuleName = NPP_INTERNAL_FUNCTION_STR; data.pszModuleName = NPP_INTERNAL_FUNCTION_STR;
@ -7486,7 +7465,7 @@ void Notepad_plus::launchFileBrowser(const vector<wstring> & folders, const wstr
_pFileBrowser->init(_pPublicInterface->getHinst(), _pPublicInterface->getHSelf()); _pFileBrowser->init(_pPublicInterface->getHinst(), _pPublicInterface->getHSelf());
tTbData data{}; tTbData data{};
_pFileBrowser->create(&data, _nativeLangSpeaker.isRTL()); _pFileBrowser->create(&data, { IDR_FILEBROWSER_ICO, IDR_FILEBROWSER_ICO_DM, IDR_FILEBROWSER_ICO2 }, _nativeLangSpeaker.isRTL());
data.pszName = L"ST"; data.pszName = L"ST";
NppParameters& nppParams = NppParameters::getInstance(); NppParameters& nppParams = NppParameters::getInstance();
@ -7495,14 +7474,7 @@ void Notepad_plus::launchFileBrowser(const vector<wstring> & folders, const wstr
// define the default docking behaviour // define the default docking behaviour
data.uMask = DWS_DF_CONT_LEFT | DWS_ICONTAB | DWS_USEOWNDARKMODE; data.uMask = DWS_DF_CONT_LEFT | DWS_ICONTAB | DWS_USEOWNDARKMODE;
int icoID = IDR_FILEBROWSER_ICO2; loadPanelIcon(_pPublicInterface->getHinst(), _pFileBrowser, &data.hIconTab);
if (nppParams.getNppGUI()._tbIconInfo._tbIconSet == TB_STANDARD)
icoID = IDR_FILEBROWSER_ICO;
else if (NppDarkMode::isEnabled())
icoID = IDR_FILEBROWSER_ICO_DM;
const int iconSize = DPIManagerV2::scale(g_dockingContTabIconSize, _pFileBrowser->getHSelf());
DPIManagerV2::loadIcon(_pPublicInterface->getHinst(), MAKEINTRESOURCE(icoID), iconSize, iconSize, &data.hIconTab, LR_LOADMAP3DCOLORS | LR_LOADTRANSPARENT);
data.pszModuleName = NPP_INTERNAL_FUNCTION_STR; data.pszModuleName = NPP_INTERNAL_FUNCTION_STR;
@ -7598,21 +7570,14 @@ void Notepad_plus::launchProjectPanel(int cmdID, ProjectPanel ** pProjPanel, int
NativeLangSpeaker *pNativeSpeaker = nppParam.getNativeLangSpeaker(); NativeLangSpeaker *pNativeSpeaker = nppParam.getNativeLangSpeaker();
bool isRTL = pNativeSpeaker->isRTL(); bool isRTL = pNativeSpeaker->isRTL();
tTbData data{}; tTbData data{};
(*pProjPanel)->create(&data, isRTL); (*pProjPanel)->create(&data, { IDR_PROJECTPANEL_ICO, IDR_PROJECTPANEL_ICO_DM, IDR_PROJECTPANEL_ICO2 }, isRTL);
data.pszName = L"ST"; data.pszName = L"ST";
::SendMessage(_pPublicInterface->getHSelf(), NPPM_MODELESSDIALOG, MODELESSDIALOGREMOVE, reinterpret_cast<LPARAM>((*pProjPanel)->getHSelf())); ::SendMessage(_pPublicInterface->getHSelf(), NPPM_MODELESSDIALOG, MODELESSDIALOGREMOVE, reinterpret_cast<LPARAM>((*pProjPanel)->getHSelf()));
// define the default docking behaviour // define the default docking behaviour
data.uMask = DWS_DF_CONT_LEFT | DWS_ICONTAB | DWS_USEOWNDARKMODE; data.uMask = DWS_DF_CONT_LEFT | DWS_ICONTAB | DWS_USEOWNDARKMODE;
int icoID = IDR_PROJECTPANEL_ICO2; loadPanelIcon(_pPublicInterface->getHinst(), (*pProjPanel), &data.hIconTab);
if (nppParam.getNppGUI()._tbIconInfo._tbIconSet == TB_STANDARD)
icoID = IDR_PROJECTPANEL_ICO;
else if (NppDarkMode::isEnabled())
icoID = IDR_PROJECTPANEL_ICO_DM;
const int iconSize = DPIManagerV2::scale(g_dockingContTabIconSize, (*pProjPanel)->getHSelf());
DPIManagerV2::loadIcon(_pPublicInterface->getHinst(), MAKEINTRESOURCE(icoID), iconSize, iconSize, &data.hIconTab, LR_LOADMAP3DCOLORS | LR_LOADTRANSPARENT);
data.pszModuleName = NPP_INTERNAL_FUNCTION_STR; data.pszModuleName = NPP_INTERNAL_FUNCTION_STR;
@ -7665,20 +7630,13 @@ void Notepad_plus::launchDocMap()
_pDocMap->init(_pPublicInterface->getHinst(), _pPublicInterface->getHSelf(), &_pEditView); _pDocMap->init(_pPublicInterface->getHinst(), _pPublicInterface->getHSelf(), &_pEditView);
tTbData data{}; tTbData data{};
_pDocMap->create(&data); _pDocMap->create(&data, { IDR_DOCMAP_ICO, IDR_DOCMAP_ICO_DM, IDR_DOCMAP_ICO2 });
::SendMessage(_pPublicInterface->getHSelf(), NPPM_MODELESSDIALOG, MODELESSDIALOGREMOVE, reinterpret_cast<LPARAM>(_pDocMap->getHSelf())); ::SendMessage(_pPublicInterface->getHSelf(), NPPM_MODELESSDIALOG, MODELESSDIALOGREMOVE, reinterpret_cast<LPARAM>(_pDocMap->getHSelf()));
// define the default docking behaviour // define the default docking behaviour
data.uMask = DWS_DF_CONT_RIGHT | DWS_ICONTAB | DWS_USEOWNDARKMODE; data.uMask = DWS_DF_CONT_RIGHT | DWS_ICONTAB | DWS_USEOWNDARKMODE;
int icoID = IDR_DOCMAP_ICO2; loadPanelIcon(_pPublicInterface->getHinst(), _pDocMap, &data.hIconTab);
if (nppParam.getNppGUI()._tbIconInfo._tbIconSet == TB_STANDARD)
icoID = IDR_DOCMAP_ICO;
else if (NppDarkMode::isEnabled())
icoID = IDR_DOCMAP_ICO_DM;
const int iconSize = DPIManagerV2::scale(g_dockingContTabIconSize, _pDocMap->getHSelf());
DPIManagerV2::loadIcon(_pPublicInterface->getHinst(), MAKEINTRESOURCE(icoID), iconSize, iconSize, &data.hIconTab, LR_LOADMAP3DCOLORS | LR_LOADTRANSPARENT);
data.pszModuleName = NPP_INTERNAL_FUNCTION_STR; data.pszModuleName = NPP_INTERNAL_FUNCTION_STR;
@ -7714,7 +7672,7 @@ void Notepad_plus::launchFunctionList()
_pFuncList->init(_pPublicInterface->getHinst(), _pPublicInterface->getHSelf(), &_pEditView); _pFuncList->init(_pPublicInterface->getHinst(), _pPublicInterface->getHSelf(), &_pEditView);
tTbData data{}; tTbData data{};
_pFuncList->create(&data); _pFuncList->create(&data, { IDR_FUNC_LIST_ICO, IDR_FUNC_LIST_ICO_DM, IDR_FUNC_LIST_ICO2 });
::SendMessage(_pPublicInterface->getHSelf(), NPPM_MODELESSDIALOG, MODELESSDIALOGREMOVE, reinterpret_cast<LPARAM>(_pFuncList->getHSelf())); ::SendMessage(_pPublicInterface->getHSelf(), NPPM_MODELESSDIALOG, MODELESSDIALOGREMOVE, reinterpret_cast<LPARAM>(_pFuncList->getHSelf()));
// define the default docking behaviour // define the default docking behaviour
@ -7722,14 +7680,7 @@ void Notepad_plus::launchFunctionList()
NppParameters& nppParam = NppParameters::getInstance(); NppParameters& nppParam = NppParameters::getInstance();
int icoID = IDR_FUNC_LIST_ICO2; loadPanelIcon(_pPublicInterface->getHinst(), _pFuncList, &data.hIconTab);
if (nppParam.getNppGUI()._tbIconInfo._tbIconSet == TB_STANDARD)
icoID = IDR_FUNC_LIST_ICO;
else if (NppDarkMode::isEnabled())
icoID = IDR_FUNC_LIST_ICO_DM;
const int iconSize = DPIManagerV2::scale(g_dockingContTabIconSize, _pFuncList->getHSelf());
DPIManagerV2::loadIcon(_pPublicInterface->getHinst(), MAKEINTRESOURCE(icoID), iconSize, iconSize, &data.hIconTab, LR_LOADMAP3DCOLORS | LR_LOADTRANSPARENT);
data.pszModuleName = NPP_INTERNAL_FUNCTION_STR; data.pszModuleName = NPP_INTERNAL_FUNCTION_STR;
@ -8641,6 +8592,81 @@ void Notepad_plus::refreshDarkMode(bool resetStyle)
} }
} }
int Notepad_plus::getIcoID(DockingDlgInterface* panel)
{
if (_toolBar.getState() == TB_STANDARD)
return panel->getIconIDs().at(0);
if (NppDarkMode::isEnabled())
return panel->getIconIDs().at(1);
return panel->getIconIDs().at(2);
}
void Notepad_plus::loadPanelIcon(HINSTANCE hInst, DockingDlgInterface* panel, HICON* phIcon)
{
const int icoID = getIcoID(panel);
const int iconSize = DPIManagerV2::scale(g_dockingContTabIconSize, panel->getHSelf());
DPIManagerV2::loadIcon(hInst, MAKEINTRESOURCE(icoID), iconSize, iconSize, phIcon, LR_LOADMAP3DCOLORS | LR_LOADTRANSPARENT);
}
void Notepad_plus::refreshPanelIcon(HINSTANCE hInst, DockingDlgInterface* panel)
{
HWND hWnd = panel->getHSelf();
for (const auto& docCont : _dockingManager.getContainerInfo())
{
auto data = docCont->findToolbarByWnd(hWnd);
if (data != nullptr)
{
if (data->hIconTab != nullptr)
{
::DestroyIcon(data->hIconTab);
data->hIconTab = nullptr;
}
loadPanelIcon(hInst, panel, &data->hIconTab);
break;
}
}
}
void Notepad_plus::refreshInternalPanelIcons()
{
std::array<DockingDlgInterface*, 9> internalPanels = { _pProjectPanel_1, _pProjectPanel_2, _pProjectPanel_3,
_pFuncList, _pDocMap, _pFileBrowser,
_pAnsiCharPanel, _pDocumentListPanel, _pClipboardHistoryPanel };
for (const auto& panel : internalPanels)
{
if (panel != nullptr)
{
refreshPanelIcon(_pPublicInterface->getHinst(), panel);
}
}
const auto mainFinder = _findReplaceDlg.getMainFinder();
if (mainFinder != nullptr)
{
refreshPanelIcon(_pPublicInterface->getHinst(), mainFinder);
const auto& finders = _findReplaceDlg.getFindersOfFinder();
if (!finders.empty())
{
for (const auto& finder : finders)
{
if (finder != nullptr)
{
refreshPanelIcon(_pPublicInterface->getHinst(), finder);
}
}
}
}
for (const auto& docCont : _dockingManager.getContainerInfo())
{
auto hTab = docCont->getTabWnd();
::RedrawWindow(hTab, nullptr, nullptr, RDW_INVALIDATE | RDW_ERASE);
}
}
void Notepad_plus::launchDocumentBackupTask() void Notepad_plus::launchDocumentBackupTask()
{ {
HANDLE hThread = ::CreateThread(NULL, 0, backupDocument, NULL, 0, NULL); HANDLE hThread = ::CreateThread(NULL, 0, backupDocument, NULL, 0, NULL);

View File

@ -273,6 +273,8 @@ public:
void refreshDarkMode(bool resetStyle = false); void refreshDarkMode(bool resetStyle = false);
void refreshInternalPanelIcons();
private: private:
Notepad_plus_Window* _pPublicInterface = nullptr; Notepad_plus_Window* _pPublicInterface = nullptr;
Window* _pMainWindow = nullptr; Window* _pMainWindow = nullptr;
@ -662,4 +664,8 @@ private:
HMENU createMenuFromMenu(HMENU hSourceMenu, const std::vector<int>& commandIds); HMENU createMenuFromMenu(HMENU hSourceMenu, const std::vector<int>& commandIds);
BOOL notifyTBShowMenu(LPNMTOOLBARW lpnmtb, const char* menuPosId); BOOL notifyTBShowMenu(LPNMTOOLBARW lpnmtb, const char* menuPosId);
BOOL notifyTBShowMenu(LPNMTOOLBARW lpnmtb, const char* menuPosId, const std::vector<int>& cmdIDs); BOOL notifyTBShowMenu(LPNMTOOLBARW lpnmtb, const char* menuPosId, const std::vector<int>& cmdIDs);
int getIcoID(DockingDlgInterface* panel);
void loadPanelIcon(HINSTANCE hInst, DockingDlgInterface* panel, HICON* phIcon);
void refreshPanelIcon(HINSTANCE hInst, DockingDlgInterface* panel);
}; };

View File

@ -374,6 +374,18 @@ LRESULT Notepad_plus::process(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa
return TRUE; return TRUE;
} }
case NPPM_INTERNAL_TOOLBARICONSCHANGED:
{
refreshInternalPanelIcons();
// Notify plugins that toolbar icons have changed TODO
//SCNotification scnN{};
//scnN.nmhdr.code = ;
//scnN.nmhdr.hwndFrom = hwnd;
//scnN.nmhdr.idFrom = 0;
//_pluginsManager.notify(&scnN);
return TRUE;
}
case WM_DRAWITEM: case WM_DRAWITEM:
{ {
DRAWITEMSTRUCT *dis = reinterpret_cast<DRAWITEMSTRUCT *>(lParam); DRAWITEMSTRUCT *dis = reinterpret_cast<DRAWITEMSTRUCT *>(lParam);

View File

@ -3632,16 +3632,16 @@ void FindReplaceDlg::findAllIn(InWhat op)
_pFinder->setVolatiled(false); _pFinder->setVolatiled(false);
tTbData data{}; tTbData data{};
_pFinder->create(&data); _pFinder->create(&data, { IDI_FIND_RESULT_ICON, IDR_FIND_RESULT_ICO_DM, IDR_FIND_RESULT_ICO2 });
::SendMessage(_hParent, NPPM_MODELESSDIALOG, MODELESSDIALOGREMOVE, reinterpret_cast<LPARAM>(_pFinder->getHSelf())); ::SendMessage(_hParent, NPPM_MODELESSDIALOG, MODELESSDIALOGREMOVE, reinterpret_cast<LPARAM>(_pFinder->getHSelf()));
// define the default docking behaviour // define the default docking behaviour
data.uMask = DWS_DF_CONT_BOTTOM | DWS_ICONTAB | DWS_ADDINFO | DWS_USEOWNDARKMODE; data.uMask = DWS_DF_CONT_BOTTOM | DWS_ICONTAB | DWS_ADDINFO | DWS_USEOWNDARKMODE;
int icoID = IDR_FIND_RESULT_ICO2; int icoID = _pFinder->getIconIDs().at(2);
if (nppParam.getNppGUI()._tbIconInfo._tbIconSet == TB_STANDARD) if (nppParam.getNppGUI()._tbIconInfo._tbIconSet == TB_STANDARD)
icoID = IDI_FIND_RESULT_ICON; icoID = _pFinder->getIconIDs().at(0);
else if (NppDarkMode::isEnabled()) else if (NppDarkMode::isEnabled())
icoID = IDR_FIND_RESULT_ICO_DM; icoID = _pFinder->getIconIDs().at(1);
const int iconSize = DPIManagerV2::scale(g_dockingContTabIconSize, _pFinder->getHSelf()); const int iconSize = DPIManagerV2::scale(g_dockingContTabIconSize, _pFinder->getHSelf());
DPIManagerV2::loadIcon(_hInst, MAKEINTRESOURCE(icoID), iconSize, iconSize, &data.hIconTab, LR_LOADMAP3DCOLORS | LR_LOADTRANSPARENT); DPIManagerV2::loadIcon(_hInst, MAKEINTRESOURCE(icoID), iconSize, iconSize, &data.hIconTab, LR_LOADMAP3DCOLORS | LR_LOADTRANSPARENT);
@ -3780,16 +3780,16 @@ Finder* FindReplaceDlg::createFinder()
tTbData data{}; tTbData data{};
bool isRTL = _pFinder->_scintView.isTextDirectionRTL(); bool isRTL = _pFinder->_scintView.isTextDirectionRTL();
pFinder->create(&data, isRTL); pFinder->create(&data, { IDI_FIND_RESULT_ICON, IDR_FIND_RESULT_ICO_DM, IDR_FIND_RESULT_ICO2 }, isRTL);
::SendMessage(_hParent, NPPM_MODELESSDIALOG, MODELESSDIALOGREMOVE, reinterpret_cast<WPARAM>(pFinder->getHSelf())); ::SendMessage(_hParent, NPPM_MODELESSDIALOG, MODELESSDIALOGREMOVE, reinterpret_cast<WPARAM>(pFinder->getHSelf()));
// define the default docking behaviour // define the default docking behaviour
data.uMask = DWS_DF_CONT_BOTTOM | DWS_ICONTAB | DWS_ADDINFO | DWS_USEOWNDARKMODE; data.uMask = DWS_DF_CONT_BOTTOM | DWS_ICONTAB | DWS_ADDINFO | DWS_USEOWNDARKMODE;
int icoID = IDR_FIND_RESULT_ICO2; int icoID = pFinder->getIconIDs().at(2);
if (nppParam.getNppGUI()._tbIconInfo._tbIconSet == TB_STANDARD) if (nppParam.getNppGUI()._tbIconInfo._tbIconSet == TB_STANDARD)
icoID = IDI_FIND_RESULT_ICON; icoID = pFinder->getIconIDs().at(0);
else if (NppDarkMode::isEnabled()) else if (NppDarkMode::isEnabled())
icoID = IDR_FIND_RESULT_ICO_DM; icoID = pFinder->getIconIDs().at(1);
const int iconSize = DPIManagerV2::scale(g_dockingContTabIconSize, _pFinder->getHSelf()); const int iconSize = DPIManagerV2::scale(g_dockingContTabIconSize, _pFinder->getHSelf());
DPIManagerV2::loadIcon(_hInst, MAKEINTRESOURCE(icoID), iconSize, iconSize, &data.hIconTab, LR_LOADMAP3DCOLORS | LR_LOADTRANSPARENT); DPIManagerV2::loadIcon(_hInst, MAKEINTRESOURCE(icoID), iconSize, iconSize, &data.hIconTab, LR_LOADMAP3DCOLORS | LR_LOADTRANSPARENT);

View File

@ -403,6 +403,14 @@ public :
} }
}; };
Finder* getMainFinder() const {
return _pFinder;
}
const std::vector<Finder*>& getFindersOfFinder() const {
return _findersOfFinder;
}
void execSavedCommand(int cmd, uptr_t intValue, const std::wstring& stringValue); void execSavedCommand(int cmd, uptr_t intValue, const std::wstring& stringValue);
void clearMarks(const FindOption& opt); void clearMarks(const FindOption& opt);
void setStatusbarMessage(const std::wstring & msg, FindStatus status, const std::wstring& tooltipMsg = L""); void setStatusbarMessage(const std::wstring & msg, FindStatus status, const std::wstring& tooltipMsg = L"");

View File

@ -156,20 +156,15 @@ void DockingCont::removeToolbar(const tTbData& data)
} }
} }
tTbData* DockingCont::findToolbarByWnd(HWND hClient) tTbData* DockingCont::findToolbarByWnd(HWND hClient)
{ {
tTbData* pTbData = NULL; auto matchesWnd = [hClient](const tTbData* pTb) -> bool {
return pTb->hClient == hClient;
};
// find entry by handle auto it = std::find_if(_vTbData.begin(), _vTbData.end(), matchesWnd);
for (size_t iTb = 0, len = _vTbData.size(); iTb < len; ++iTb)
{ return (it != _vTbData.end()) ? *it : nullptr;
if (hClient == _vTbData[iTb]->hClient)
{
pTbData = _vTbData[iTb];
}
}
return pTbData;
} }
tTbData* DockingCont::findToolbarByName(wchar_t* pszName) tTbData* DockingCont::findToolbarByName(wchar_t* pszName)

View File

@ -20,6 +20,7 @@
#include "dockingResource.h" #include "dockingResource.h"
#include "Docking.h" #include "Docking.h"
#include <array>
#include <assert.h> #include <assert.h>
#include <shlwapi.h> #include <shlwapi.h>
#include "Common.h" #include "Common.h"
@ -41,7 +42,7 @@ public:
_moduleName = ::PathFindFileName(temp); _moduleName = ::PathFindFileName(temp);
} }
void create(tTbData* data, bool isRTL = false) { virtual void create(tTbData* data, bool isRTL = false) {
assert(data != nullptr); assert(data != nullptr);
StaticDialog::create(_dlgID, isRTL); StaticDialog::create(_dlgID, isRTL);
wchar_t temp[MAX_PATH]; wchar_t temp[MAX_PATH];
@ -56,7 +57,12 @@ public:
data->uMask = 0; data->uMask = 0;
// additional info // additional info
data->pszAddInfo = NULL; data->pszAddInfo = nullptr;
}
virtual void create(tTbData* data, std::array<int, 3> iconIDs, bool isRTL = false) {
create(data, isRTL);
_iconIDs = iconIDs;
} }
virtual void updateDockingDlg() { virtual void updateDockingDlg() {
@ -82,12 +88,17 @@ public:
return _moduleName.c_str(); return _moduleName.c_str();
} }
const std::array<int, 3>& getIconIDs() const {
return _iconIDs;
}
protected : protected :
int _dlgID = -1; int _dlgID = -1;
bool _isFloating = true;
int _iDockedPos = 0; int _iDockedPos = 0;
std::wstring _moduleName; std::wstring _moduleName;
std::wstring _pluginName; std::wstring _pluginName;
std::array<int, 3> _iconIDs{};
bool _isFloating = true;
bool _isClosed = false; bool _isClosed = false;
intptr_t CALLBACK run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam) override { intptr_t CALLBACK run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam) override {
@ -100,14 +111,14 @@ protected :
break; break;
} }
RECT rc = {}; RECT rc{};
getClientRect(rc); getClientRect(rc);
::FillRect(reinterpret_cast<HDC>(wParam), &rc, NppDarkMode::getDlgBackgroundBrush()); ::FillRect(reinterpret_cast<HDC>(wParam), &rc, NppDarkMode::getDlgBackgroundBrush());
return TRUE; return TRUE;
} }
case WM_NOTIFY: case WM_NOTIFY:
{ {
LPNMHDR pnmh = reinterpret_cast<LPNMHDR>(lParam); auto* pnmh = reinterpret_cast<LPNMHDR>(lParam);
if (pnmh->hwndFrom == _hParent) if (pnmh->hwndFrom == _hParent)
{ {

View File

@ -44,7 +44,7 @@ enum moveMode {
class ViewZoneDlg : public StaticDialog class ViewZoneDlg : public StaticDialog
{ {
public : public :
ViewZoneDlg() : StaticDialog(), _viewZoneCanvas(NULL), _canvasDefaultProc(nullptr), _higherY(0), _lowerY(0) {} ViewZoneDlg() : StaticDialog(), _viewZoneCanvas(nullptr), _canvasDefaultProc(nullptr), _higherY(0), _lowerY(0) {}
enum class ViewZoneColorIndex { enum class ViewZoneColorIndex {
focus, focus,
@ -53,13 +53,13 @@ public :
void doDialog(); void doDialog();
virtual void destroy() {}; void destroy() override {};
void drawZone(long hY, long lY) { void drawZone(long hY, long lY) {
_higherY = hY; _higherY = hY;
_lowerY = lY; _lowerY = lY;
if (NULL != _viewZoneCanvas) if (nullptr != _viewZoneCanvas)
::InvalidateRect(_viewZoneCanvas, NULL, TRUE); ::InvalidateRect(_viewZoneCanvas, nullptr, TRUE);
}; };
int getViewerHeight() const { int getViewerHeight() const {
@ -73,7 +73,7 @@ public :
static void setColour(COLORREF colour2Set, ViewZoneColorIndex i); static void setColour(COLORREF colour2Set, ViewZoneColorIndex i);
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;
static LRESULT CALLBACK canvasStaticProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); static LRESULT CALLBACK canvasStaticProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK canvas_runProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); LRESULT CALLBACK canvas_runProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
@ -96,22 +96,27 @@ class DocumentMap : public DockingDlgInterface {
public: public:
DocumentMap(): DockingDlgInterface(IDD_DOCUMENTMAP) {}; DocumentMap(): DockingDlgInterface(IDD_DOCUMENTMAP) {};
void create(tTbData * data, bool isRTL = false) { void create(tTbData * data, bool isRTL = false) override {
DockingDlgInterface::create(data, isRTL); DockingDlgInterface::create(data, isRTL);
data->pszAddInfo = id4dockingCont.c_str(); data->pszAddInfo = id4dockingCont.c_str();
}; };
void create(tTbData* data, std::array<int, 3> iconIDs, bool isRTL = false) override {
DockingDlgInterface::create(data, iconIDs, isRTL);
data->pszAddInfo = id4dockingCont.c_str();
};
void init(HINSTANCE hInst, HWND hPere, ScintillaEditView **ppEditView) { void init(HINSTANCE hInst, HWND hPere, ScintillaEditView **ppEditView) {
DockingDlgInterface::init(hInst, hPere); DockingDlgInterface::init(hInst, hPere);
_ppEditView = ppEditView; _ppEditView = ppEditView;
}; };
virtual void display(bool toShow = true) const { void display(bool toShow = true) const override {
DockingDlgInterface::display(toShow); DockingDlgInterface::display(toShow);
_vzDlg.display(); _vzDlg.display();
}; };
virtual void redraw(bool forceUpdate = false) const; void redraw(bool forceUpdate = false) const override;
void setParent(HWND parent2set){ void setParent(HWND parent2set){
_hParent = parent2set; _hParent = parent2set;
@ -137,7 +142,7 @@ public:
void setTemporarilyShowing(bool tempShowing) { _isTemporarilyShowing = tempShowing; } void setTemporarilyShowing(bool tempShowing) { _isTemporarilyShowing = tempShowing; }
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;
bool needToRecomputeWith(const ScintillaEditView *editView = nullptr); bool needToRecomputeWith(const ScintillaEditView *editView = nullptr);
private: private:

View File

@ -509,6 +509,13 @@ void ToolBar::reset(bool create)
} }
} }
void ToolBar::setState(toolBarStatusType state)
{
_state = state;
HWND hRoot = ::GetAncestor(_hSelf, GA_ROOTOWNER);
::SendMessage(hRoot, NPPM_INTERNAL_TOOLBARICONSCHANGED, 0, 0);
}
void ToolBar::registerDynBtn(UINT messageID, toolbarIcons* iconHandles, HICON absentIco) void ToolBar::registerDynBtn(UINT messageID, toolbarIcons* iconHandles, HICON absentIco)
{ {
// Note: Register of buttons only possible before init! // Note: Register of buttons only possible before init!

View File

@ -64,13 +64,13 @@ public :
virtual bool init(HINSTANCE hInst, HWND hPere, toolBarStatusType type, ToolBarButtonUnit* buttonUnitArray, int arraySize); virtual bool init(HINSTANCE hInst, HWND hPere, toolBarStatusType type, ToolBarButtonUnit* buttonUnitArray, int arraySize);
virtual void destroy(); void destroy() override;
void enable(int cmdID, bool doEnable) const { void enable(int cmdID, bool doEnable) const {
::SendMessage(_hSelf, TB_ENABLEBUTTON, cmdID, static_cast<LPARAM>(doEnable)); ::SendMessage(_hSelf, TB_ENABLEBUTTON, cmdID, static_cast<LPARAM>(doEnable));
}; };
int getWidth() const; int getWidth() const override;
int getHeight() const; int getHeight() const override;
void reduce(); void reduce();
void enlarge(); void enlarge();
@ -163,10 +163,7 @@ private :
}; };
void reset(bool create = false); void reset(bool create = false);
void setState(toolBarStatusType state) { void setState(toolBarStatusType state);
_state = state;
}
}; };
class ReBar : public Window class ReBar : public Window
@ -174,13 +171,13 @@ class ReBar : public Window
public : public :
ReBar():Window() { usedIDs.clear(); }; ReBar():Window() { usedIDs.clear(); };
virtual void destroy() { void destroy() override {
::DestroyWindow(_hSelf); ::DestroyWindow(_hSelf);
_hSelf = NULL; _hSelf = nullptr;
usedIDs.clear(); usedIDs.clear();
}; };
void init(HINSTANCE hInst, HWND hPere); void init(HINSTANCE hInst, HWND hPere) override;
bool addBand(REBARBANDINFO * rBand, bool useID); //useID true if ID from info should be used (false for plugins). wID in bandinfo will be set to used ID bool addBand(REBARBANDINFO * rBand, bool useID); //useID true if ID from info should be used (false for plugins). wID in bandinfo will be set to used ID
void reNew(int id, REBARBANDINFO * rBand); //wID from bandinfo is used for update void reNew(int id, REBARBANDINFO * rBand); //wID from bandinfo is used for update
void removeBand(int id); void removeBand(int id);

View File

@ -748,6 +748,7 @@
#define NPPM_INTERNAL_HIDEMENURIGHTSHORTCUTS (NOTEPADPLUS_USER_INTERNAL + 107) #define NPPM_INTERNAL_HIDEMENURIGHTSHORTCUTS (NOTEPADPLUS_USER_INTERNAL + 107)
#define NPPM_INTERNAL_CHANGETOOLBARCOLORABLESTATE (NOTEPADPLUS_USER_INTERNAL + 108) #define NPPM_INTERNAL_CHANGETOOLBARCOLORABLESTATE (NOTEPADPLUS_USER_INTERNAL + 108)
#define NPPM_INTERNAL_SQLBACKSLASHESCAPE (NOTEPADPLUS_USER_INTERNAL + 109) #define NPPM_INTERNAL_SQLBACKSLASHESCAPE (NOTEPADPLUS_USER_INTERNAL + 109)
#define NPPM_INTERNAL_TOOLBARICONSCHANGED (NOTEPADPLUS_USER_INTERNAL + 110)
// See Notepad_plus_msgs.h // See Notepad_plus_msgs.h
//#define NPPMSG (WM_USER + 1000) //#define NPPMSG (WM_USER + 1000)