From 7c82c523b6bdafacbc35425b2deba937d34cf462 Mon Sep 17 00:00:00 2001 From: Don Ho Date: Mon, 26 Jul 2021 19:07:38 +0200 Subject: [PATCH] Add "Switch to Document List" command for shortcut Fix #9015 --- PowerEditor/src/Notepad_plus.cpp | 36 ++++++++++++------------- PowerEditor/src/Notepad_plus.h | 4 +-- PowerEditor/src/NppBigSwitch.cpp | 26 +++++++++--------- PowerEditor/src/NppCommands.cpp | 42 ++++++++++++++++++++--------- PowerEditor/src/NppIO.cpp | 18 ++++++------- PowerEditor/src/NppNotification.cpp | 8 +++--- PowerEditor/src/Parameters.cpp | 1 + PowerEditor/src/menuCmdID.h | 5 ++-- 8 files changed, 79 insertions(+), 61 deletions(-) diff --git a/PowerEditor/src/Notepad_plus.cpp b/PowerEditor/src/Notepad_plus.cpp index b74298da9..259514a93 100644 --- a/PowerEditor/src/Notepad_plus.cpp +++ b/PowerEditor/src/Notepad_plus.cpp @@ -181,7 +181,7 @@ Notepad_plus::~Notepad_plus() delete _pTrayIco; delete _pAnsiCharPanel; delete _pClipboardHistoryPanel; - delete _pFileSwitcherPanel; + delete _pDocumentListPanel; delete _pProjectPanel_1; delete _pProjectPanel_2; delete _pProjectPanel_3; @@ -4025,8 +4025,8 @@ void Notepad_plus::loadBufferIntoView(BufferID id, int whichOne, bool dontClose) tabToOpen->setBuffer(0, id); //index 0 since only one open activateBuffer(id, whichOne); //activate. DocTab already activated but not a problem MainFileManager.closeBuffer(idToClose, viewToOpen); //delete the buffer - if (_pFileSwitcherPanel) - _pFileSwitcherPanel->closeItem(idToClose, whichOne); + if (_pDocumentListPanel) + _pDocumentListPanel->closeItem(idToClose, whichOne); } else { @@ -5907,8 +5907,8 @@ void Notepad_plus::notifyBufferChanged(Buffer * buffer, int mask) } - if (_pFileSwitcherPanel) - _pFileSwitcherPanel->setItemIconStatus(buffer); + if (_pDocumentListPanel) + _pDocumentListPanel->setItemIconStatus(buffer); if (!mainActive && !subActive) { @@ -6006,9 +6006,9 @@ void Notepad_plus::notifyBufferActivated(BufferID bufid, int view) scnN.nmhdr.idFrom = (uptr_t)bufid; _pluginsManager.notify(&scnN); - if (_pFileSwitcherPanel) + if (_pDocumentListPanel) { - _pFileSwitcherPanel->activateItem(bufid, currentView()); + _pDocumentListPanel->activateItem(bufid, currentView()); } if (_pDocMap && (!_pDocMap->isClosed()) && _pDocMap->isVisible()) @@ -6540,19 +6540,19 @@ void Notepad_plus::launchClipboardHistoryPanel() } -void Notepad_plus::launchFileSwitcherPanel() +void Notepad_plus::launchDocumentListPanel() { - if (!_pFileSwitcherPanel) + if (!_pDocumentListPanel) { - _pFileSwitcherPanel = new VerticalFileSwitcher; + _pDocumentListPanel = new VerticalFileSwitcher; HIMAGELIST hImgLst = _docTabIconList.getHandle(); - _pFileSwitcherPanel->init(_pPublicInterface->getHinst(), _pPublicInterface->getHSelf(), hImgLst); + _pDocumentListPanel->init(_pPublicInterface->getHinst(), _pPublicInterface->getHSelf(), hImgLst); NativeLangSpeaker *pNativeSpeaker = (NppParameters::getInstance()).getNativeLangSpeaker(); bool isRTL = pNativeSpeaker->isRTL(); tTbData data = {0}; - _pFileSwitcherPanel->create(&data, isRTL); + _pDocumentListPanel->create(&data, isRTL); - ::SendMessage(_pPublicInterface->getHSelf(), NPPM_MODELESSDIALOG, MODELESSDIALOGREMOVE, reinterpret_cast(_pFileSwitcherPanel->getHSelf())); + ::SendMessage(_pPublicInterface->getHSelf(), NPPM_MODELESSDIALOG, MODELESSDIALOGREMOVE, reinterpret_cast(_pDocumentListPanel->getHSelf())); // define the default docking behaviour data.uMask = DWS_DF_CONT_LEFT | DWS_ICONTAB; data.hIconTab = (HICON)::LoadImage(_pPublicInterface->getHinst(), MAKEINTRESOURCE(IDR_DOCLIST_ICO), IMAGE_ICON, 14, 14, LR_LOADMAP3DCOLORS | LR_LOADTRANSPARENT); @@ -6575,10 +6575,10 @@ void Notepad_plus::launchFileSwitcherPanel() COLORREF fgColor = (NppParameters::getInstance()).getCurrentDefaultFgColor(); COLORREF bgColor = (NppParameters::getInstance()).getCurrentDefaultBgColor(); - _pFileSwitcherPanel->setBackgroundColor(bgColor); - _pFileSwitcherPanel->setForegroundColor(fgColor); + _pDocumentListPanel->setBackgroundColor(bgColor); + _pDocumentListPanel->setForegroundColor(fgColor); } - _pFileSwitcherPanel->display(); + _pDocumentListPanel->display(); } @@ -7555,9 +7555,9 @@ void Notepad_plus::refreshDarkMode() { ::SendMessage(_pAnsiCharPanel->getHSelf(), NPPM_INTERNAL_REFRESHDARKMODE, 0, 0); } - if (_pFileSwitcherPanel) + if (_pDocumentListPanel) { - ::SendMessage(_pFileSwitcherPanel->getHSelf(), NPPM_INTERNAL_REFRESHDARKMODE, 0, 0); + ::SendMessage(_pDocumentListPanel->getHSelf(), NPPM_INTERNAL_REFRESHDARKMODE, 0, 0); } if (_pClipboardHistoryPanel) diff --git a/PowerEditor/src/Notepad_plus.h b/PowerEditor/src/Notepad_plus.h index 6ca59a570..beef3e325 100644 --- a/PowerEditor/src/Notepad_plus.h +++ b/PowerEditor/src/Notepad_plus.h @@ -402,7 +402,7 @@ private: AnsiCharPanel* _pAnsiCharPanel = nullptr; ClipboardHistoryPanel* _pClipboardHistoryPanel = nullptr; - VerticalFileSwitcher* _pFileSwitcherPanel = nullptr; + VerticalFileSwitcher* _pDocumentListPanel = nullptr; ProjectPanel* _pProjectPanel_1 = nullptr; ProjectPanel* _pProjectPanel_2 = nullptr; ProjectPanel* _pProjectPanel_3 = nullptr; @@ -608,7 +608,7 @@ private: void removeDuplicateLines(); void launchAnsiCharPanel(); void launchClipboardHistoryPanel(); - void launchFileSwitcherPanel(); + void launchDocumentListPanel(); void checkProjectMenuItem(); void launchProjectPanel(int cmdID, ProjectPanel ** pProjPanel, int panelID); void launchDocMap(); diff --git a/PowerEditor/src/NppBigSwitch.cpp b/PowerEditor/src/NppBigSwitch.cpp index d4aa1ff04..286558bed 100644 --- a/PowerEditor/src/NppBigSwitch.cpp +++ b/PowerEditor/src/NppBigSwitch.cpp @@ -548,9 +548,9 @@ LRESULT Notepad_plus::process(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa case NPPM_INTERNAL_DOCORDERCHANGED : { - if (_pFileSwitcherPanel) + if (_pDocumentListPanel) { - _pFileSwitcherPanel->updateTabOrder(); + _pDocumentListPanel->updateTabOrder(); } BufferID id = _pEditView->getCurrentBufferID(); @@ -1811,10 +1811,10 @@ LRESULT Notepad_plus::process(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa _pAnsiCharPanel->setForegroundColor(style._fgColor); } - if (_pFileSwitcherPanel) + if (_pDocumentListPanel) { - _pFileSwitcherPanel->setBackgroundColor(style._bgColor); - _pFileSwitcherPanel->setForegroundColor(style._fgColor); + _pDocumentListPanel->setBackgroundColor(style._bgColor); + _pDocumentListPanel->setForegroundColor(style._fgColor); } if (_pClipboardHistoryPanel) @@ -2444,9 +2444,9 @@ LRESULT Notepad_plus::process(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa NppGUI & nppGUI = nppParam.getNppGUI(); nppGUI._fileSwitcherWithoutExtColumn = isOff == TRUE; - if (_pFileSwitcherPanel) + if (_pDocumentListPanel) { - _pFileSwitcherPanel->reload(); + _pDocumentListPanel->reload(); } // else nothing to do return TRUE; @@ -2465,22 +2465,22 @@ LRESULT Notepad_plus::process(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa BOOL toShow = static_cast(lParam); if (toShow) { - if (!_pFileSwitcherPanel || !_pFileSwitcherPanel->isVisible()) - launchFileSwitcherPanel(); + if (!_pDocumentListPanel || !_pDocumentListPanel->isVisible()) + launchDocumentListPanel(); } else { - if (_pFileSwitcherPanel) - _pFileSwitcherPanel->display(false); + if (_pDocumentListPanel) + _pDocumentListPanel->display(false); } return TRUE; } case NPPM_ISDOCLISTSHOWN: { - if (!_pFileSwitcherPanel) + if (!_pDocumentListPanel) return FALSE; - return _pFileSwitcherPanel->isVisible(); + return _pDocumentListPanel->isVisible(); } // OLD BEHAVIOUR: diff --git a/PowerEditor/src/NppCommands.cpp b/PowerEditor/src/NppCommands.cpp index bc30abfea..501d2a2a6 100644 --- a/PowerEditor/src/NppCommands.cpp +++ b/PowerEditor/src/NppCommands.cpp @@ -171,19 +171,19 @@ void Notepad_plus::command(int id) fileReload(); break; - case IDM_FILESWITCHER_FILESCLOSE: - case IDM_FILESWITCHER_FILESCLOSEOTHERS: - if (_pFileSwitcherPanel) + case IDM_DOCLIST_FILESCLOSE: + case IDM_DOCLIST_FILESCLOSEOTHERS: + if (_pDocumentListPanel) { - vector files = _pFileSwitcherPanel->getSelectedFiles(id == IDM_FILESWITCHER_FILESCLOSEOTHERS); + vector files = _pDocumentListPanel->getSelectedFiles(id == IDM_DOCLIST_FILESCLOSEOTHERS); for (size_t i = 0, len = files.size(); i < len; ++i) { fileClose((BufferID)files[i]._bufID, files[i]._iView); } - if (id == IDM_FILESWITCHER_FILESCLOSEOTHERS) + if (id == IDM_DOCLIST_FILESCLOSEOTHERS) { // Get current buffer and its view - _pFileSwitcherPanel->activateItem(_pEditView->getCurrentBufferID(), currentView()); + _pDocumentListPanel->activateItem(_pEditView->getCurrentBufferID(), currentView()); } } break; @@ -737,23 +737,39 @@ void Notepad_plus::command(int id) } break; + case IDM_VIEW_SWITCHTO_DOCLIST: + { + if (_pDocumentListPanel && _pDocumentListPanel->isVisible()) + { + _pDocumentListPanel->getFocus(); + } + else + { + checkMenuItem(IDM_VIEW_DOCLIST, true); + _toolBar.setCheck(IDM_VIEW_DOCLIST, true); + launchDocumentListPanel(); + _pDocumentListPanel->setClosed(false); + } + } + break; + case IDM_VIEW_DOCLIST: { - if (_pFileSwitcherPanel && (!_pFileSwitcherPanel->isClosed())) + if (_pDocumentListPanel && (!_pDocumentListPanel->isClosed())) { - _pFileSwitcherPanel->display(false); - _pFileSwitcherPanel->setClosed(true); + _pDocumentListPanel->display(false); + _pDocumentListPanel->setClosed(true); checkMenuItem(IDM_VIEW_DOCLIST, false); _toolBar.setCheck(IDM_VIEW_DOCLIST, false); } else { - launchFileSwitcherPanel(); - if (_pFileSwitcherPanel) + launchDocumentListPanel(); + if (_pDocumentListPanel) { checkMenuItem(IDM_VIEW_DOCLIST, true); _toolBar.setCheck(IDM_VIEW_DOCLIST, true); - _pFileSwitcherPanel->setClosed(false); + _pDocumentListPanel->setClosed(false); } } } @@ -876,7 +892,7 @@ void Notepad_plus::command(int id) } } break; - + case IDM_VIEW_FUNC_LIST: { if (_pFuncList && (!_pFuncList->isClosed())) diff --git a/PowerEditor/src/NppIO.cpp b/PowerEditor/src/NppIO.cpp index 75a2d84f9..53618a0cf 100644 --- a/PowerEditor/src/NppIO.cpp +++ b/PowerEditor/src/NppIO.cpp @@ -392,8 +392,8 @@ BufferID Notepad_plus::doOpen(const generic_string& fileName, bool isRecursive, // Notify plugins that current file is just opened scnN.nmhdr.code = NPPN_FILEOPENED; _pluginsManager.notify(&scnN); - if (_pFileSwitcherPanel) - _pFileSwitcherPanel->newItem(buf, currentView()); + if (_pDocumentListPanel) + _pDocumentListPanel->newItem(buf, currentView()); } else { @@ -728,8 +728,8 @@ void Notepad_plus::doClose(BufferID id, int whichOne, bool doDeleteBackup) // if the current activated buffer is in this view, // then get buffer ID to remove the entry from File Switcher Pannel hiddenBufferID = reinterpret_cast(::SendMessage(_pPublicInterface->getHSelf(), NPPM_GETBUFFERIDFROMPOS, 0, whichOne)); - if (!isBufRemoved && hiddenBufferID != BUFFER_INVALID && _pFileSwitcherPanel) - _pFileSwitcherPanel->closeItem(hiddenBufferID, whichOne); + if (!isBufRemoved && hiddenBufferID != BUFFER_INVALID && _pDocumentListPanel) + _pDocumentListPanel->closeItem(hiddenBufferID, whichOne); } // Notify plugins that current file is closed @@ -740,12 +740,12 @@ void Notepad_plus::doClose(BufferID id, int whichOne, bool doDeleteBackup) // The document could be clonned. // if the same buffer ID is not found then remove the entry from File Switcher Panel - if (_pFileSwitcherPanel) + if (_pDocumentListPanel) { - _pFileSwitcherPanel->closeItem(id, whichOne); + _pDocumentListPanel->closeItem(id, whichOne); if (hiddenBufferID != BUFFER_INVALID) - _pFileSwitcherPanel->closeItem(hiddenBufferID, whichOne); + _pDocumentListPanel->closeItem(hiddenBufferID, whichOne); } // Add to recent file only if file is removed and does not exist in any of the views @@ -2223,8 +2223,8 @@ bool Notepad_plus::loadSession(Session & session, bool isSnapshotMode, bool shou else if (canHideView(currentView())) hideView(currentView()); - if (_pFileSwitcherPanel) - _pFileSwitcherPanel->reload(); + if (_pDocumentListPanel) + _pDocumentListPanel->reload(); if (shouldLoadFileBrowser && !session._fileBrowserRoots.empty()) { diff --git a/PowerEditor/src/NppNotification.cpp b/PowerEditor/src/NppNotification.cpp index d2a8559a7..6a35ebb57 100644 --- a/PowerEditor/src/NppNotification.cpp +++ b/PowerEditor/src/NppNotification.cpp @@ -479,17 +479,17 @@ BOOL Notepad_plus::notify(SCNotification *notification) } return TRUE; } - else if (_pFileSwitcherPanel && notification->nmhdr.hwndFrom == _pFileSwitcherPanel->getHSelf()) + else if (_pDocumentListPanel && notification->nmhdr.hwndFrom == _pDocumentListPanel->getHSelf()) { // Already switched, so do nothing here. - if (_pFileSwitcherPanel->nbSelectedFiles() > 1) + if (_pDocumentListPanel->nbSelectedFiles() > 1) { if (!_fileSwitcherMultiFilePopupMenu.isCreated()) { vector itemUnitArray; - itemUnitArray.push_back(MenuItemUnit(IDM_FILESWITCHER_FILESCLOSE, TEXT("Close Selected files"))); - itemUnitArray.push_back(MenuItemUnit(IDM_FILESWITCHER_FILESCLOSEOTHERS, TEXT("Close others files"))); + itemUnitArray.push_back(MenuItemUnit(IDM_DOCLIST_FILESCLOSE, TEXT("Close Selected files"))); + itemUnitArray.push_back(MenuItemUnit(IDM_DOCLIST_FILESCLOSEOTHERS, TEXT("Close others files"))); _fileSwitcherMultiFilePopupMenu.create(_pPublicInterface->getHSelf(), itemUnitArray); _nativeLangSpeaker.changeLangTabContextMenu(_fileSwitcherMultiFilePopupMenu.getMenuHandle()); diff --git a/PowerEditor/src/Parameters.cpp b/PowerEditor/src/Parameters.cpp index c28085102..ca05d5db2 100644 --- a/PowerEditor/src/Parameters.cpp +++ b/PowerEditor/src/Parameters.cpp @@ -312,6 +312,7 @@ static const WinMenuKeyDefinition winKeyDefs[] = { VK_NULL, IDM_VIEW_SWITCHTO_PROJECT_PANEL_3, false, false, false, TEXT("Switch to Project Panel 3") }, { VK_NULL, IDM_VIEW_SWITCHTO_FILEBROWSER, false, false, false, TEXT("Switch to Folder as Workspace") }, { VK_NULL, IDM_VIEW_SWITCHTO_FUNC_LIST, false, false, false, TEXT("Switch to Function List") }, + { VK_NULL, IDM_VIEW_SWITCHTO_DOCLIST, false, false, false, TEXT("Switch to Document List") }, { VK_NULL, IDM_VIEW_SYNSCROLLV, false, false, false, nullptr }, { VK_NULL, IDM_VIEW_SYNSCROLLH, false, false, false, nullptr }, { VK_R, IDM_EDIT_RTL, true, true, false, nullptr }, diff --git a/PowerEditor/src/menuCmdID.h b/PowerEditor/src/menuCmdID.h index a1eefd58d..b0b8b658c 100644 --- a/PowerEditor/src/menuCmdID.h +++ b/PowerEditor/src/menuCmdID.h @@ -244,8 +244,8 @@ #define IDM_SEARCH_MARKONEEXT5 (IDM_SEARCH + 66) #define IDM_MISC (IDM + 3500) - #define IDM_FILESWITCHER_FILESCLOSE (IDM_MISC + 1) - #define IDM_FILESWITCHER_FILESCLOSEOTHERS (IDM_MISC + 2) + #define IDM_DOCLIST_FILESCLOSE (IDM_MISC + 1) + #define IDM_DOCLIST_FILESCLOSEOTHERS (IDM_MISC + 2) #define IDM_VIEW (IDM + 4000) @@ -356,6 +356,7 @@ #define IDM_VIEW_SWITCHTO_PROJECT_PANEL_3 (IDM_VIEW + 106) #define IDM_VIEW_SWITCHTO_FILEBROWSER (IDM_VIEW + 107) #define IDM_VIEW_SWITCHTO_FUNC_LIST (IDM_VIEW + 108) + #define IDM_VIEW_SWITCHTO_DOCLIST (IDM_VIEW + 109) #define IDM_VIEW_GOTO_ANOTHER_VIEW 10001 #define IDM_VIEW_CLONE_TO_ANOTHER_VIEW 10002