From ce58b424bdeec3616943f9ea8cd257f66700c3c0 Mon Sep 17 00:00:00 2001 From: Don Ho Date: Tue, 29 Oct 2024 01:18:13 +0100 Subject: [PATCH 01/37] Add Pin tab feature Fix #5786, close #15750 --- PowerEditor/installer/nativeLang/english.xml | 1 + PowerEditor/installer/nativeLang/french.xml | 1 + .../nativeLang/taiwaneseMandarin.xml | 4 +- PowerEditor/src/Notepad_plus.cpp | 17 +- PowerEditor/src/Notepad_plus.h | 1 + PowerEditor/src/Notepad_plus.rc | 9 + PowerEditor/src/NppBigSwitch.cpp | 53 +++ PowerEditor/src/NppCommands.cpp | 40 ++- PowerEditor/src/NppIO.cpp | 19 + PowerEditor/src/NppNotification.cpp | 32 +- PowerEditor/src/Parameters.cpp | 22 +- PowerEditor/src/Parameters.h | 38 +- PowerEditor/src/ScintillaComponent/Buffer.h | 4 + .../WinControls/ColourPicker/WordStyleDlg.rc | 12 +- .../src/WinControls/Preference/preference.rc | 56 ++- .../WinControls/Preference/preferenceDlg.cpp | 6 + .../WinControls/Preference/preference_rc.h | 2 +- PowerEditor/src/WinControls/TabBar/TabBar.cpp | 337 +++++++++++++++--- PowerEditor/src/WinControls/TabBar/TabBar.h | 52 ++- .../src/icons/dark/tabbar/pinTabButton.ico | Bin 0 -> 2809 bytes .../icons/dark/tabbar/pinTabButton_hover.ico | Bin 0 -> 1592 bytes .../icons/dark/tabbar/pinTabButton_pinned.ico | Bin 0 -> 1592 bytes .../dark/tabbar/pinTabButton_pinnedHover.ico | Bin 0 -> 2809 bytes .../icons/standard/tabbar/pinTabButton.ico | Bin 0 -> 1150 bytes .../standard/tabbar/pinTabButton_hover.ico | Bin 0 -> 1150 bytes .../standard/tabbar/pinTabButton_pinned.ico | Bin 0 -> 1150 bytes .../tabbar/pinTabButton_pinnedHover.ico | Bin 0 -> 1150 bytes PowerEditor/src/resource.h | 11 + 28 files changed, 592 insertions(+), 125 deletions(-) create mode 100644 PowerEditor/src/icons/dark/tabbar/pinTabButton.ico create mode 100644 PowerEditor/src/icons/dark/tabbar/pinTabButton_hover.ico create mode 100644 PowerEditor/src/icons/dark/tabbar/pinTabButton_pinned.ico create mode 100644 PowerEditor/src/icons/dark/tabbar/pinTabButton_pinnedHover.ico create mode 100644 PowerEditor/src/icons/standard/tabbar/pinTabButton.ico create mode 100644 PowerEditor/src/icons/standard/tabbar/pinTabButton_hover.ico create mode 100644 PowerEditor/src/icons/standard/tabbar/pinTabButton_pinned.ico create mode 100644 PowerEditor/src/icons/standard/tabbar/pinTabButton_pinnedHover.ico diff --git a/PowerEditor/installer/nativeLang/english.xml b/PowerEditor/installer/nativeLang/english.xml index 760310051117..6a3deb8d176b 100644 --- a/PowerEditor/installer/nativeLang/english.xml +++ b/PowerEditor/installer/nativeLang/english.xml @@ -958,6 +958,7 @@ Translation note: + diff --git a/PowerEditor/installer/nativeLang/french.xml b/PowerEditor/installer/nativeLang/french.xml index af7c235efd7e..4404be224d30 100644 --- a/PowerEditor/installer/nativeLang/french.xml +++ b/PowerEditor/installer/nativeLang/french.xml @@ -957,6 +957,7 @@ Translation note: + diff --git a/PowerEditor/installer/nativeLang/taiwaneseMandarin.xml b/PowerEditor/installer/nativeLang/taiwaneseMandarin.xml index 2f01e3343b93..c3a425c9407d 100644 --- a/PowerEditor/installer/nativeLang/taiwaneseMandarin.xml +++ b/PowerEditor/installer/nativeLang/taiwaneseMandarin.xml @@ -910,13 +910,15 @@ - + + + diff --git a/PowerEditor/src/Notepad_plus.cpp b/PowerEditor/src/Notepad_plus.cpp index a1e943c3b59b..919e4c0d0b7d 100644 --- a/PowerEditor/src/Notepad_plus.cpp +++ b/PowerEditor/src/Notepad_plus.cpp @@ -405,6 +405,7 @@ LRESULT Notepad_plus::init(HWND hwnd) TabBarPlus::setDrawTopBar((tabBarStatus & TAB_DRAWTOPBAR) != 0, &_mainDocTab); TabBarPlus::setDrawInactiveTab((tabBarStatus & TAB_DRAWINACTIVETAB) != 0, &_mainDocTab); TabBarPlus::setDrawTabCloseButton((tabBarStatus & TAB_CLOSEBUTTON) != 0, &_mainDocTab); + TabBarPlus::setDrawTabPinButton((tabBarStatus & TAB_PINBUTTON) != 0, &_mainDocTab); TabBarPlus::setDbClk2Close((tabBarStatus & TAB_DBCLK2CLOSE) != 0); TabBarPlus::setVertical((tabBarStatus & TAB_VERTICAL) != 0); drawTabbarColoursFromStylerArray(); @@ -918,6 +919,7 @@ bool Notepad_plus::saveGUIParams() (TabBarPlus::drawInactiveTab() ? TAB_DRAWINACTIVETAB : 0) | \ (TabBarPlus::isReduced() ? TAB_REDUCE : 0) | \ (TabBarPlus::drawTabCloseButton() ? TAB_CLOSEBUTTON : 0) | \ + (TabBarPlus::drawTabPinButton() ? TAB_PINBUTTON : 0) | \ (TabBarPlus::isDbClk2Close() ? TAB_DBCLK2CLOSE : 0) | \ (TabBarPlus::isVertical() ? TAB_VERTICAL : 0) | \ (TabBarPlus::isMultiLine() ? TAB_MULTILINE : 0) |\ @@ -4909,6 +4911,8 @@ void Notepad_plus::docGotoAnotherEditView(FileTransferMode mode) //First put the doc in the other view if not present (if it is, activate it). //Then if needed close in the original tab BufferID current = _pEditView->getCurrentBufferID(); + Buffer* buf = MainFileManager.getBufferByID(current); + int viewToGo = otherView(); int indexFound = _pNonDocTab->getIndexByBuffer(current); if (indexFound != -1) //activate it @@ -4929,7 +4933,7 @@ void Notepad_plus::docGotoAnotherEditView(FileTransferMode mode) } loadBufferIntoView(current, viewToGo); - Buffer *buf = MainFileManager.getBufferByID(current); + _pEditView->saveCurrentPos(); //allow copying of position buf->setPosition(buf->getPosition(_pEditView), _pNonEditView); _pNonEditView->restoreCurrentPosPreStep(); //set position @@ -4948,7 +4952,6 @@ void Notepad_plus::docGotoAnotherEditView(FileTransferMode mode) //Close the document if we transfered the document instead of cloning it if (mode == TransferMove) { - Buffer *buf = MainFileManager.getBufferByID(current); monitoringWasOn = buf->isMonitoringOn(); //just close the activate document, since thats the one we moved (no search) @@ -4958,6 +4961,13 @@ void Notepad_plus::docGotoAnotherEditView(FileTransferMode mode) //Activate the other view since thats where the document went switchEditViewTo(viewToGo); + if (buf->isPinned()) + { + buf->setPinned(false); + _pDocTab->tabToStart(); + buf->setPinned(true); + } + if (monitoringWasOn) { command(IDM_VIEW_MONITORING); @@ -4965,7 +4975,6 @@ void Notepad_plus::docGotoAnotherEditView(FileTransferMode mode) if (_pDocumentListPanel != nullptr) { - Buffer* buf = MainFileManager.getBufferByID(current); _pDocumentListPanel->setItemColor(buf); } } @@ -6333,7 +6342,7 @@ void Notepad_plus::getCurrentOpenedFiles(Session & session, bool includUntitledD } const wchar_t* langName = languageName.c_str(); - sessionFileInfo sfi(buf->getFullPathName(), langName, buf->getEncoding(), buf->getUserReadOnly(), buf->getPosition(editView), buf->getBackupFileName().c_str(), buf->getLastModifiedTimestamp(), buf->getMapPosition()); + sessionFileInfo sfi(buf->getFullPathName(), langName, buf->getEncoding(), buf->getUserReadOnly(), buf->isPinned(), buf->getPosition(editView), buf->getBackupFileName().c_str(), buf->getLastModifiedTimestamp(), buf->getMapPosition()); sfi._isMonitoring = buf->isMonitoringOn(); sfi._individualTabColour = docTab[k]->getIndividualTabColourId(static_cast(i)); diff --git a/PowerEditor/src/Notepad_plus.h b/PowerEditor/src/Notepad_plus.h index 0ad06397cd15..2b26c49a329f 100644 --- a/PowerEditor/src/Notepad_plus.h +++ b/PowerEditor/src/Notepad_plus.h @@ -192,6 +192,7 @@ friend class FileManager; bool fileRename(BufferID id = BUFFER_INVALID); bool fileRenameUntitledPluginAPI(BufferID id, const wchar_t* tabNewName); + void unPinnedForAllBuffers(); bool switchToFile(BufferID buffer); //find buffer in active view then in other view. //@} diff --git a/PowerEditor/src/Notepad_plus.rc b/PowerEditor/src/Notepad_plus.rc index 0347c78cde69..12be73eb5975 100644 --- a/PowerEditor/src/Notepad_plus.rc +++ b/PowerEditor/src/Notepad_plus.rc @@ -335,6 +335,15 @@ IDR_CLOSETAB_INACT_DM ICON "icons/dark/tabbar/closeTabButton_in IDR_CLOSETAB_HOVER_DM ICON "icons/dark/tabbar/closeTabButton_hover.ico" IDR_CLOSETAB_PUSH_DM ICON "icons/dark/tabbar/closeTabButton_push.ico" +IDR_PINTAB ICON "icons/standard/tabbar/pinTabButton.ico" +IDR_PINTAB_HOVER ICON "icons/standard/tabbar/pinTabButton_pinned.ico" +IDR_PINTAB_PINNED ICON "icons/standard/tabbar/pinTabButton_pinned.ico" +IDR_PINTAB_PINNEDHOVER ICON "icons/standard/tabbar/pinTabButton.ico" +IDR_PINTAB_DM ICON "icons/dark/tabbar/pinTabButton.ico" +IDR_PINTAB_HOVER_DM ICON "icons/dark/tabbar/pinTabButton_hover.ico" +IDR_PINTAB_PINNED_DM ICON "icons/dark/tabbar/pinTabButton_pinned.ico" +IDR_PINTAB_PINNEDHOVER_DM ICON "icons/dark/tabbar/pinTabButton_pinnedHover.ico" + IDR_DOCMAP_ICO ICON "icons/standard/panels/tabbar/docMap.ico" IDR_DOCMAP_ICO2 ICON "icons/light/panels/tabbar/docMap.ico" IDR_DOCMAP_ICO_DM ICON "icons/dark/panels/tabbar/docMap.ico" diff --git a/PowerEditor/src/NppBigSwitch.cpp b/PowerEditor/src/NppBigSwitch.cpp index a47fd2395f96..0d3cc1e1ed62 100644 --- a/PowerEditor/src/NppBigSwitch.cpp +++ b/PowerEditor/src/NppBigSwitch.cpp @@ -3693,6 +3693,8 @@ LRESULT Notepad_plus::process(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa _subDocTab.resizeIconsDpi(); _mainDocTab.setCloseBtnImageList(); _subDocTab.setCloseBtnImageList(); + _mainDocTab.setPinBtnImageList(); + _subDocTab.setPinBtnImageList(); ::SendMessage(_pPublicInterface->getHSelf(), WM_COMMAND, IDM_VIEW_REDUCETABBAR, 0); changeDocumentListIconSet(false); @@ -3779,6 +3781,57 @@ LRESULT Notepad_plus::process(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa return fileName.length(); } + case NPPM_INTERNAL_DRAWTABBARPINBOTTUN: + { + TabBarPlus::setDrawTabPinButton(!TabBarPlus::drawTabPinButton(), &_mainDocTab); + + bool drawTabPinButton = TabBarPlus::drawTabPinButton(); + bool drawTabCloseButton = TabBarPlus::drawTabCloseButton(); + + if (!drawTabPinButton) + { + unPinnedForAllBuffers(); + } + + if (drawTabCloseButton && drawTabPinButton) + { + _mainDocTab.setTabCloseButtonOrder(0); + _mainDocTab.setTabPinButtonOrder(1); + _subDocTab.setTabCloseButtonOrder(0); + _subDocTab.setTabPinButtonOrder(1); + } + else if (!drawTabCloseButton && drawTabPinButton) + { + _mainDocTab.setTabCloseButtonOrder(-1); + _mainDocTab.setTabPinButtonOrder(0); + _subDocTab.setTabCloseButtonOrder(-1); + _subDocTab.setTabPinButtonOrder(0); + } + else if (drawTabCloseButton && !drawTabPinButton) + { + _mainDocTab.setTabCloseButtonOrder(0); + _mainDocTab.setTabPinButtonOrder(-1); + _subDocTab.setTabCloseButtonOrder(0); + _subDocTab.setTabPinButtonOrder(-1); + } + else //if (!drawTabCloseButton && !drawTabPinButton) + { + _mainDocTab.setTabCloseButtonOrder(-1); + _mainDocTab.setTabPinButtonOrder(-1); + _subDocTab.setTabCloseButtonOrder(-1); + _subDocTab.setTabPinButtonOrder(-1); + } + + // This part is just for updating (redraw) the tabs + int tabDpiDynamicalHeight = _mainDocTab.dpiManager().scale(TabBarPlus::isReduced() ? g_TabHeight : g_TabHeightLarge); + int tabDpiDynamicalWidth = _mainDocTab.dpiManager().scale(TabBarPlus::drawTabPinButton() ? g_TabWidthCloseBtn : g_TabWidth); + TabCtrl_SetItemSize(_mainDocTab.getHSelf(), tabDpiDynamicalWidth, tabDpiDynamicalHeight); + TabCtrl_SetItemSize(_subDocTab.getHSelf(), tabDpiDynamicalWidth, tabDpiDynamicalHeight); + + ::SendMessage(_pPublicInterface->getHSelf(), WM_SIZE, 0, 0); + return TRUE; + } + default: { if (message == WDN_NOTIFY) diff --git a/PowerEditor/src/NppCommands.cpp b/PowerEditor/src/NppCommands.cpp index 342049bfcae6..38d71d0e8544 100644 --- a/PowerEditor/src/NppCommands.cpp +++ b/PowerEditor/src/NppCommands.cpp @@ -2323,7 +2323,9 @@ void Notepad_plus::command(int id) case IDM_VIEW_REFRESHTABAR : { - ::SendMessage(_pPublicInterface->getHSelf(), WM_SIZE, 0, 0); + ::InvalidateRect(_mainDocTab.getHSelf(), NULL, TRUE); + ::InvalidateRect(_subDocTab.getHSelf(), NULL, TRUE); + break; } case IDM_VIEW_LOCKTABBAR: @@ -2349,6 +2351,38 @@ void Notepad_plus::command(int id) { TabBarPlus::setDrawTabCloseButton(!TabBarPlus::drawTabCloseButton(), &_mainDocTab); + bool drawTabPinButton = TabBarPlus::drawTabPinButton(); + bool drawTabCloseButton = TabBarPlus::drawTabCloseButton(); + + if (drawTabCloseButton && drawTabPinButton) + { + _mainDocTab.setTabCloseButtonOrder(0); + _mainDocTab.setTabPinButtonOrder(1); + _subDocTab.setTabCloseButtonOrder(0); + _subDocTab.setTabPinButtonOrder(1); + } + else if (!drawTabCloseButton && drawTabPinButton) + { + _mainDocTab.setTabCloseButtonOrder(-1); + _mainDocTab.setTabPinButtonOrder(0); + _subDocTab.setTabCloseButtonOrder(-1); + _subDocTab.setTabPinButtonOrder(0); + } + else if (drawTabCloseButton && !drawTabPinButton) + { + _mainDocTab.setTabCloseButtonOrder(0); + _mainDocTab.setTabPinButtonOrder(-1); + _subDocTab.setTabCloseButtonOrder(0); + _subDocTab.setTabPinButtonOrder(-1); + } + else //if (!drawTabCloseButton && !drawTabPinButton) + { + _mainDocTab.setTabCloseButtonOrder(-1); + _mainDocTab.setTabPinButtonOrder(-1); + _subDocTab.setTabCloseButtonOrder(-1); + _subDocTab.setTabPinButtonOrder(-1); + } + // This part is just for updating (redraw) the tabs int tabDpiDynamicalHeight = _mainDocTab.dpiManager().scale(TabBarPlus::isReduced() ? g_TabHeight : g_TabHeightLarge); int tabDpiDynamicalWidth = _mainDocTab.dpiManager().scale(TabBarPlus::drawTabCloseButton() ? g_TabWidthCloseBtn : g_TabWidth); @@ -3345,11 +3379,11 @@ void Notepad_plus::command(int id) } case IDM_VIEW_GOTO_START: - _pDocTab->currentTabToStart(); + _pDocTab->tabToStart(); break; case IDM_VIEW_GOTO_END: - _pDocTab->currentTabToEnd(); + _pDocTab->tabToEnd(); break; case IDM_VIEW_GOTO_ANOTHER_VIEW: diff --git a/PowerEditor/src/NppIO.cpp b/PowerEditor/src/NppIO.cpp index c893d905918a..da669484b89c 100644 --- a/PowerEditor/src/NppIO.cpp +++ b/PowerEditor/src/NppIO.cpp @@ -1111,6 +1111,23 @@ bool Notepad_plus::fileClose(BufferID id, int curView) return true; } +void Notepad_plus::unPinnedForAllBuffers() +{ + for (size_t i = 0; i < _mainDocTab.nbItem(); ++i) + { + BufferID id = _mainDocTab.getBufferByIndex(i); + Buffer* buf = MainFileManager.getBufferByID(id); + buf->setPinned(false); + } + + for (size_t i = 0; i < _subDocTab.nbItem(); ++i) + { + BufferID id = _mainDocTab.getBufferByIndex(i); + Buffer* buf = MainFileManager.getBufferByID(id); + buf->setPinned(false); + } +} + bool Notepad_plus::fileCloseAll(bool doDeleteBackup, bool isSnapshotMode) { bool noSaveToAll = false; @@ -2407,6 +2424,7 @@ bool Notepad_plus::loadSession(Session & session, bool isSnapshotMode, const wch buf->setEncoding(session._mainViewFiles[i]._encoding); buf->setUserReadOnly(session._mainViewFiles[i]._isUserReadOnly); + buf->setPinned(session._mainViewFiles[i]._isPinned); if (isSnapshotMode && !session._mainViewFiles[i]._backupFilePath.empty() && doesFileExist(session._mainViewFiles[i]._backupFilePath.c_str())) buf->setDirty(true); @@ -2539,6 +2557,7 @@ bool Notepad_plus::loadSession(Session & session, bool isSnapshotMode, const wch buf->setLangType(typeToSet, pLn); buf->setEncoding(session._subViewFiles[k]._encoding); buf->setUserReadOnly(session._subViewFiles[k]._isUserReadOnly); + buf->setPinned(session._subViewFiles[k]._isPinned); if (isSnapshotMode && !session._subViewFiles[k]._backupFilePath.empty() && doesFileExist(session._subViewFiles[k]._backupFilePath.c_str())) buf->setDirty(true); diff --git a/PowerEditor/src/NppNotification.cpp b/PowerEditor/src/NppNotification.cpp index 8503b6033f48..bd7bd101085b 100644 --- a/PowerEditor/src/NppNotification.cpp +++ b/PowerEditor/src/NppNotification.cpp @@ -317,7 +317,7 @@ BOOL Notepad_plus::notify(SCNotification *notification) int index = tabNotification->_tabOrigin; BufferID bufferToClose = notifyDocTab->getBufferByIndex(index); Buffer * buf = MainFileManager.getBufferByID(bufferToClose); - int iView = isFromPrimary?MAIN_VIEW:SUB_VIEW; + int iView = isFromPrimary ? MAIN_VIEW : SUB_VIEW; if (buf->isDirty()) { activateBuffer(bufferToClose, iView); @@ -333,6 +333,36 @@ BOOL Notepad_plus::notify(SCNotification *notification) break; } + case TCN_TABPINNED: + { + int index = tabNotification->_tabOrigin; + BufferID bufferToBePinned = notifyDocTab->getBufferByIndex(index); + Buffer * buf = MainFileManager.getBufferByID(bufferToBePinned); + + bool isPinned = buf->isPinned(); + + if (_mainDocTab.getHSelf() == notification->nmhdr.hwndFrom) + { + if (!isPinned) + _mainDocTab.tabToStart(index); + else + _mainDocTab.tabToEnd(index); + } + else if (_subDocTab.getHSelf() == notification->nmhdr.hwndFrom) + { + if (!isPinned) + _subDocTab.tabToStart(index); + else + _subDocTab.tabToEnd(index); + } + else + return FALSE; + + buf->setPinned(!isPinned); + + break; + } + case TCN_SELCHANGE: { int iView = -1; diff --git a/PowerEditor/src/Parameters.cpp b/PowerEditor/src/Parameters.cpp index ff5d81bf964d..5b65b9e33a88 100644 --- a/PowerEditor/src/Parameters.cpp +++ b/PowerEditor/src/Parameters.cpp @@ -2440,7 +2440,12 @@ bool NppParameters::getSessionFromXmlTree(TiXmlDocument *pSessionDoc, Session& s if (boolStrReadOnly) isUserReadOnly = _wcsicmp(L"yes", boolStrReadOnly) == 0; - sessionFileInfo sfi(fileName, langName, encStr ? encoding : -1, isUserReadOnly, position, backupFilePath, fileModifiedTimestamp, mapPosition); + bool isPinned = false; + const wchar_t* boolStrPinned = (childNode->ToElement())->Attribute(L"tabPinned"); + if (boolStrPinned) + isPinned = _wcsicmp(L"yes", boolStrPinned) == 0; + + sessionFileInfo sfi(fileName, langName, encStr ? encoding : -1, isUserReadOnly, isPinned, position, backupFilePath, fileModifiedTimestamp, mapPosition); const wchar_t* intStrTabColour = (childNode->ToElement())->Attribute(L"tabColourId"); if (intStrTabColour) @@ -3675,6 +3680,7 @@ void NppParameters::writeSession(const Session & session, const wchar_t *fileNam (fileNameNode->ToElement())->SetAttribute(L"originalFileLastModifTimestampHigh", static_cast(viewSessionFiles[i]._originalFileLastModifTimestamp.dwHighDateTime)); (fileNameNode->ToElement())->SetAttribute(L"tabColourId", static_cast(viewSessionFiles[i]._individualTabColour)); (fileNameNode->ToElement())->SetAttribute(L"RTL", viewSessionFiles[i]._isRTL ? L"yes" : L"no"); + (fileNameNode->ToElement())->SetAttribute(L"tabPinned", viewSessionFiles[i]._isPinned ? L"yes" : L"no"); // docMap (fileNameNode->ToElement())->SetAttribute(L"mapFirstVisibleDisplayLine", _i64tot(static_cast(viewSessionFiles[i]._mapPos._firstVisibleDisplayLine), szInt64, 10)); @@ -4908,6 +4914,17 @@ void NppParameters::feedGUIParameters(TiXmlNode *node) isFailed = true; } + val = element->Attribute(L"pinButton"); + if (val) + { + if (!lstrcmp(val, L"yes")) + _nppGUI._tabStatus |= TAB_PINBUTTON; + else if (!lstrcmp(val, L"no")) + _nppGUI._tabStatus |= 0; + else + isFailed = true; + } + val = element->Attribute(L"doubleClick2Close"); if (val) { @@ -7243,6 +7260,9 @@ void NppParameters::createXmlTreeFromGUIParams() pStr = (_nppGUI._tabStatus & TAB_CLOSEBUTTON) ? L"yes" : L"no"; GUIConfigElement->SetAttribute(L"closeButton", pStr); + pStr = (_nppGUI._tabStatus & TAB_PINBUTTON) ? L"yes" : L"no"; + GUIConfigElement->SetAttribute(L"pinButton", pStr); + pStr = (_nppGUI._tabStatus & TAB_DBCLK2CLOSE) ? L"yes" : L"no"; GUIConfigElement->SetAttribute(L"doubleClick2Close", pStr); diff --git a/PowerEditor/src/Parameters.h b/PowerEditor/src/Parameters.h index 12b31c869c51..c9cc0fcc55d3 100644 --- a/PowerEditor/src/Parameters.h +++ b/PowerEditor/src/Parameters.h @@ -64,17 +64,18 @@ const int UDD_DOCKED = 2; // 0000 0010 // 2 : 0000 0010 hide & docked // 3 : 0000 0011 show & docked -const int TAB_DRAWTOPBAR = 1; //0000 0000 0001 -const int TAB_DRAWINACTIVETAB = 2; //0000 0000 0010 -const int TAB_DRAGNDROP = 4; //0000 0000 0100 -const int TAB_REDUCE = 8; //0000 0000 1000 -const int TAB_CLOSEBUTTON = 16; //0000 0001 0000 -const int TAB_DBCLK2CLOSE = 32; //0000 0010 0000 -const int TAB_VERTICAL = 64; //0000 0100 0000 -const int TAB_MULTILINE = 128; //0000 1000 0000 -const int TAB_HIDE = 256; //0001 0000 0000 -const int TAB_QUITONEMPTY = 512; //0010 0000 0000 -const int TAB_ALTICONS = 1024; //0100 0000 0000 +const int TAB_DRAWTOPBAR = 1; //0000 0000 0001 +const int TAB_DRAWINACTIVETAB = 2; //0000 0000 0010 +const int TAB_DRAGNDROP = 4; //0000 0000 0100 +const int TAB_REDUCE = 8; //0000 0000 1000 +const int TAB_CLOSEBUTTON = 16; //0000 0001 0000 +const int TAB_DBCLK2CLOSE = 32; //0000 0010 0000 +const int TAB_VERTICAL = 64; //0000 0100 0000 +const int TAB_MULTILINE = 128; //0000 1000 0000 +const int TAB_HIDE = 256; //0001 0000 0000 +const int TAB_QUITONEMPTY = 512; //0010 0000 0000 +const int TAB_ALTICONS = 1024; //0100 0000 0000 +const int TAB_PINBUTTON = 2048; //1000 0000 0000 const bool activeText = true; const bool activeNumeric = false; @@ -216,8 +217,8 @@ struct MapPosition struct sessionFileInfo : public Position { - sessionFileInfo(const wchar_t* fn, const wchar_t *ln, int encoding, bool userReadOnly, const Position& pos, const wchar_t *backupFilePath, FILETIME originalFileLastModifTimestamp, const MapPosition & mapPos) : - Position(pos), _encoding(encoding), _isUserReadOnly(userReadOnly), _originalFileLastModifTimestamp(originalFileLastModifTimestamp), _mapPos(mapPos) + sessionFileInfo(const wchar_t* fn, const wchar_t *ln, int encoding, bool userReadOnly,bool isPinned, const Position& pos, const wchar_t *backupFilePath, FILETIME originalFileLastModifTimestamp, const MapPosition & mapPos) : + Position(pos), _encoding(encoding), _isUserReadOnly(userReadOnly), _isPinned(isPinned), _originalFileLastModifTimestamp(originalFileLastModifTimestamp), _mapPos(mapPos) { if (fn) _fileName = fn; if (ln) _langName = ln; @@ -235,6 +236,7 @@ struct sessionFileInfo : public Position bool _isMonitoring = false; int _individualTabColour = -1; bool _isRTL = false; + bool _isPinned = false; std::wstring _backupFilePath; FILETIME _originalFileLastModifTimestamp {}; @@ -791,15 +793,7 @@ struct NppGUI final bool _statusBarShow = true; bool _menuBarShow = true; - // 1st bit : draw top bar; - // 2nd bit : draw inactive tabs - // 3rd bit : enable drag & drop - // 4th bit : reduce the height - // 5th bit : enable vertical - // 6th bit : enable multiline - - // 0:don't draw; 1:draw top bar 2:draw inactive tabs 3:draw both 7:draw both+drag&drop - int _tabStatus = (TAB_DRAWTOPBAR | TAB_DRAWINACTIVETAB | TAB_DRAGNDROP | TAB_REDUCE | TAB_CLOSEBUTTON); + int _tabStatus = (TAB_DRAWTOPBAR | TAB_DRAWINACTIVETAB | TAB_DRAGNDROP | TAB_REDUCE | TAB_CLOSEBUTTON | TAB_PINBUTTON); bool _splitterPos = POS_VERTICAL; int _userDefineDlgStatus = UDD_DOCKED; diff --git a/PowerEditor/src/ScintillaComponent/Buffer.h b/PowerEditor/src/ScintillaComponent/Buffer.h index cbb122f9b11f..e96ec3bec563 100644 --- a/PowerEditor/src/ScintillaComponent/Buffer.h +++ b/PowerEditor/src/ScintillaComponent/Buffer.h @@ -362,6 +362,9 @@ class Buffer final { bool isRTL() const { return _isRTL; }; void setRTL(bool isRTL) { _isRTL = isRTL; }; + bool isPinned() const { return _isPinned; }; + void setPinned(bool isPinned) { _isPinned = isPinned; }; + private: int indexOfReference(const ScintillaEditView * identifier) const; @@ -445,4 +448,5 @@ class Buffer final { bool _isInaccessible = false; bool _isRTL = false; + bool _isPinned = false; }; diff --git a/PowerEditor/src/WinControls/ColourPicker/WordStyleDlg.rc b/PowerEditor/src/WinControls/ColourPicker/WordStyleDlg.rc index 441062816ca9..13338964bf69 100644 --- a/PowerEditor/src/WinControls/ColourPicker/WordStyleDlg.rc +++ b/PowerEditor/src/WinControls/ColourPicker/WordStyleDlg.rc @@ -64,13 +64,13 @@ BEGIN LTEXT "User-defined keywords",IDC_USER_KEYWORDS_STATIC,350,135,126,8 EDITTEXT IDC_USER_KEYWORDS_EDIT,347,146,136,52,ES_MULTILINE | WS_VSCROLL - CONTROL "Force foreground color for all styles",IDC_GLOBAL_FG_CHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,191,134,132,10 - CONTROL "Force background color for all styles",IDC_GLOBAL_BG_CHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,191,149,132,10 + CONTROL "Force foreground color for all styles",IDC_GLOBAL_FG_CHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,191,134,153,10 + CONTROL "Force background color for all styles",IDC_GLOBAL_BG_CHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,191,149,153,10 CONTROL "Force font choice for all styles",IDC_GLOBAL_FONT_CHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,327,134,153,10 - CONTROL "Force font size choice for all styles",IDC_GLOBAL_FONTSIZE_CHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,327,149,135,10 - CONTROL "Force bold choice for all styles",IDC_GLOBAL_BOLD_CHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,327,164,135,10 - CONTROL "Force italic choice for all styles",IDC_GLOBAL_ITALIC_CHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,327,179,135,10 - CONTROL "Force underline choice for all styles",IDC_GLOBAL_UNDERLINE_CHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,327,194,135,10 + CONTROL "Force font size choice for all styles",IDC_GLOBAL_FONTSIZE_CHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,327,149, 153,10 + CONTROL "Force bold choice for all styles",IDC_GLOBAL_BOLD_CHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,327,164,153,10 + CONTROL "Force italic choice for all styles",IDC_GLOBAL_ITALIC_CHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,327,179,153,10 + CONTROL "Force underline choice for all styles",IDC_GLOBAL_UNDERLINE_CHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,327,194,153,10 LTEXT "Go to settings",IDC_GLOBAL_GOTOSETTINGS_LINK,210,153,131,10,WS_TABSTOP LTEXT "What is Global override?",IDC_GLOBAL_WHATISGLOBALOVERRIDE_LINK,191,173,132,10,WS_TABSTOP diff --git a/PowerEditor/src/WinControls/Preference/preference.rc b/PowerEditor/src/WinControls/Preference/preference.rc index 9ce09b03d6e8..ef355800e64c 100644 --- a/PowerEditor/src/WinControls/Preference/preference.rc +++ b/PowerEditor/src/WinControls/Preference/preference.rc @@ -38,39 +38,35 @@ IDD_PREFERENCE_SUB_GENRAL DIALOGEX 115, 10, 460, 205 STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD FONT 8, "MS Shell Dlg", 0, 0, 0x1 BEGIN - GROUPBOX "Localization",IDC_LOCALIZATION_GB_STATIC,27,3,186,30,BS_CENTER + GROUPBOX "Localization",IDC_LOCALIZATION_GB_STATIC,27,0,186,36,BS_CENTER COMBOBOX IDC_COMBO_LOCALIZATION,60,14,125,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - - GROUPBOX "Status Bar",IDC_STATUSBAR_GB_STATIC,27,37,186,27,BS_CENTER - CONTROL "Hide",IDC_CHECK_HIDESTATUSBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,33,48,174,10 - - GROUPBOX "Toolbar",IDC_TOOLBAR_GB_STATIC,27,68,186,88,BS_CENTER - CONTROL "Hide",IDC_CHECK_HIDE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,33,76,100,10 - CONTROL "Fluent UI: small",IDC_RADIO_SMALLICON,"Button",BS_AUTORADIOBUTTON,33,91,174,10 - CONTROL "Fluent UI: large",IDC_RADIO_BIGICON,"Button",BS_AUTORADIOBUTTON,33,104,174,10 - CONTROL "Filled Fluent UI: small",IDC_RADIO_SMALLICON2,"Button",BS_AUTORADIOBUTTON,33,117,174,10 - CONTROL "Filled Fluent UI: large",IDC_RADIO_BIGICON2,"Button",BS_AUTORADIOBUTTON,33,130,174,10 - CONTROL "Standard icons: small",IDC_RADIO_STANDARD,"Button",BS_AUTORADIOBUTTON,33,143,174,10 - - GROUPBOX "Tab Bar",IDC_TABBAR_GB_STATIC,223,3,177,153,BS_CENTER - CONTROL "Hide",IDC_CHECK_TAB_HIDE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,229,11,100,10 - CONTROL "Multi-line",IDC_CHECK_TAB_MULTILINE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,229,26,164,10 - CONTROL "Vertical",IDC_CHECK_TAB_VERTICAL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,229,39,164,10 - CONTROL "Reduce",IDC_CHECK_REDUCE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,229,52,164,10 - CONTROL "Alternate icons",IDC_CHECK_TAB_ALTICONS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,229,65,164,10 - CONTROL "Lock (no drag and drop)",IDC_CHECK_LOCK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,229,78,164,10 - CONTROL "Darken inactive tabs",IDC_CHECK_DRAWINACTIVE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,229,91,164,10 - CONTROL "Draw a coloured bar on active tab",IDC_CHECK_ORANGE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,229,104,164,10 - CONTROL "Show close button on each tab",IDC_CHECK_ENABLETABCLOSE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,229,117,164,10 - CONTROL "Double click to close document",IDC_CHECK_DBCLICK2CLOSE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,229,130,164,10 - CONTROL "Exit on close the last tab",IDC_CHECK_TAB_LAST_EXIT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,229,143,164,10 - - GROUPBOX "Menu",IDC_MENU_GB_STATIC,27,160,373,34,BS_CENTER - CONTROL "Hide menu bar (use Alt or F10 key to toggle)",IDC_CHECK_HIDEMENUBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,33,168,218,10 - CONTROL "Hide right shortcuts + ▼ ✕ from the menu bar (Need to restart Notepad++)",IDC_CHECK_HIDERIGHTSHORTCUTSOFMENUBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,33,181,350,10 + GROUPBOX "Status Bar",IDC_STATUSBAR_GB_STATIC,27,39,186,31,BS_CENTER + CONTROL "Hide",IDC_CHECK_HIDESTATUSBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,33,52,174,10 + GROUPBOX "Toolbar",IDC_TOOLBAR_GB_STATIC,27,75,186,91,BS_CENTER + CONTROL "Hide",IDC_CHECK_HIDE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,33,84,100,10 + CONTROL "Fluent UI: small",IDC_RADIO_SMALLICON,"Button",BS_AUTORADIOBUTTON,33,100,174,10 + CONTROL "Fluent UI: large",IDC_RADIO_BIGICON,"Button",BS_AUTORADIOBUTTON,33,113,174,10 + CONTROL "Filled Fluent UI: small",IDC_RADIO_SMALLICON2,"Button",BS_AUTORADIOBUTTON,33,126,174,10 + CONTROL "Filled Fluent UI: large",IDC_RADIO_BIGICON2,"Button",BS_AUTORADIOBUTTON,33,139,174,10 + CONTROL "Standard icons: small",IDC_RADIO_STANDARD,"Button",BS_AUTORADIOBUTTON,33,152,174,10 + GROUPBOX "Tab Bar",IDC_TABBAR_GB_STATIC,223,0,177,166,BS_CENTER + CONTROL "Hide",IDC_CHECK_TAB_HIDE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,229,8,100,10 + CONTROL "Multi-line",IDC_CHECK_TAB_MULTILINE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,229,21,164,10 + CONTROL "Vertical",IDC_CHECK_TAB_VERTICAL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,229,34,164,10 + CONTROL "Reduce",IDC_CHECK_REDUCE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,229,47,164,10 + CONTROL "Alternate icons",IDC_CHECK_TAB_ALTICONS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,229,60,164,10 + CONTROL "Lock (no drag and drop)",IDC_CHECK_LOCK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,229,73,164,10 + CONTROL "Darken inactive tabs",IDC_CHECK_DRAWINACTIVE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,229,86,164,10 + CONTROL "Draw a coloured bar on active tab",IDC_CHECK_ORANGE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,229,99,164,10 + CONTROL "Show close button on each tab",IDC_CHECK_ENABLETABCLOSE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,229,112,164,10 + CONTROL "Enable pin tab feature", IDC_CHECK_ENABLETABPIN,"Button", BS_AUTOCHECKBOX | WS_TABSTOP, 229, 125, 164, 10 + CONTROL "Double click to close document",IDC_CHECK_DBCLICK2CLOSE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,229,138,164,10 + CONTROL "Exit on close the last tab",IDC_CHECK_TAB_LAST_EXIT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,229,151,164,10 + GROUPBOX "Menu",IDC_MENU_GB_STATIC,27,168,373,34,BS_CENTER + CONTROL "Hide menu bar (use Alt or F10 key to toggle)",IDC_CHECK_HIDEMENUBAR, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,33,176,218,10 + CONTROL "Hide right shortcuts + ? ? from the menu bar (Need to restart Notepad++)",IDC_CHECK_HIDERIGHTSHORTCUTSOFMENUBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,33,189,350,10 END - IDD_PREFERENCE_SUB_EDITING DIALOGEX 115, 10, 460, 205 STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD FONT 8, "MS Shell Dlg", 0, 0, 0x1 diff --git a/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp b/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp index ffd1bb21a0bd..cedd39e8e1fe 100644 --- a/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp +++ b/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp @@ -610,6 +610,7 @@ intptr_t CALLBACK GeneralSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM ::SendDlgItemMessage(_hSelf, IDC_CHECK_ORANGE, BM_SETCHECK, tabBarStatus & TAB_DRAWTOPBAR, 0); ::SendDlgItemMessage(_hSelf, IDC_CHECK_DRAWINACTIVE, BM_SETCHECK, tabBarStatus & TAB_DRAWINACTIVETAB, 0); ::SendDlgItemMessage(_hSelf, IDC_CHECK_ENABLETABCLOSE, BM_SETCHECK, tabBarStatus & TAB_CLOSEBUTTON, 0); + ::SendDlgItemMessage(_hSelf, IDC_CHECK_ENABLETABPIN, BM_SETCHECK, tabBarStatus & TAB_PINBUTTON, 0); ::SendDlgItemMessage(_hSelf, IDC_CHECK_DBCLICK2CLOSE, BM_SETCHECK, tabBarStatus & TAB_DBCLK2CLOSE, 0); ::SendDlgItemMessage(_hSelf, IDC_CHECK_TAB_VERTICAL, BM_SETCHECK, tabBarStatus & TAB_VERTICAL, 0); ::SendDlgItemMessage(_hSelf, IDC_CHECK_TAB_MULTILINE, BM_SETCHECK, tabBarStatus & TAB_MULTILINE, 0); @@ -699,6 +700,7 @@ intptr_t CALLBACK GeneralSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM ::EnableWindow(::GetDlgItem(_hSelf, IDC_CHECK_ORANGE), !toBeHidden); ::EnableWindow(::GetDlgItem(_hSelf, IDC_CHECK_DRAWINACTIVE), !toBeHidden); ::EnableWindow(::GetDlgItem(_hSelf, IDC_CHECK_ENABLETABCLOSE), !toBeHidden); + ::EnableWindow(::GetDlgItem(_hSelf, IDC_CHECK_ENABLETABPIN), !toBeHidden); ::EnableWindow(::GetDlgItem(_hSelf, IDC_CHECK_DBCLICK2CLOSE), !toBeHidden); ::EnableWindow(::GetDlgItem(_hSelf, IDC_CHECK_TAB_LAST_EXIT), !toBeHidden); ::EnableWindow(::GetDlgItem(_hSelf, IDC_CHECK_TAB_ALTICONS), !toBeHidden); @@ -757,6 +759,10 @@ intptr_t CALLBACK GeneralSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM ::SendMessage(_hParent, WM_COMMAND, IDM_VIEW_DRAWTABBAR_CLOSEBOTTUN, 0); return TRUE; + case IDC_CHECK_ENABLETABPIN: + ::SendMessage(::GetParent(_hParent), NPPM_INTERNAL_DRAWTABBARPINBOTTUN, 0, 0); + return TRUE; + case IDC_CHECK_DBCLICK2CLOSE : ::SendMessage(_hParent, WM_COMMAND, IDM_VIEW_DRAWTABBAR_DBCLK2CLOSE, 0); return TRUE; diff --git a/PowerEditor/src/WinControls/Preference/preference_rc.h b/PowerEditor/src/WinControls/Preference/preference_rc.h index e6f0d1353124..0046dfcfe82a 100644 --- a/PowerEditor/src/WinControls/Preference/preference_rc.h +++ b/PowerEditor/src/WinControls/Preference/preference_rc.h @@ -40,7 +40,7 @@ #define IDC_CHECK_ENABLETABCLOSE (IDD_PREFERENCE_SUB_GENRAL + 12) #define IDC_CHECK_DBCLICK2CLOSE (IDD_PREFERENCE_SUB_GENRAL + 13) #define IDC_CHECK_ENABLEDOCSWITCHER (IDD_PREFERENCE_SUB_GENRAL + 14) - //#define IDC_CHECK_MAINTAININDENT (IDD_PREFERENCE_SUB_GENRAL + 15) + #define IDC_CHECK_ENABLETABPIN (IDD_PREFERENCE_SUB_GENRAL + 15) #define IDC_CHECK_KEEPINSAMEDIR (IDD_PREFERENCE_SUB_GENRAL + 16) #define IDC_CHECK_STYLEMRU (IDD_PREFERENCE_SUB_GENRAL + 17) #define IDC_CHECK_TAB_HIDE (IDD_PREFERENCE_SUB_GENRAL + 18) diff --git a/PowerEditor/src/WinControls/TabBar/TabBar.cpp b/PowerEditor/src/WinControls/TabBar/TabBar.cpp index 4f6e5f23a208..87cd74812290 100644 --- a/PowerEditor/src/WinControls/TabBar/TabBar.cpp +++ b/PowerEditor/src/WinControls/TabBar/TabBar.cpp @@ -15,6 +15,7 @@ // along with this program. If not, see . #include +#include "Buffer.h" #include "TabBar.h" #include "Parameters.h" #include "DoubleBuffer/DoubleBuffer.h" @@ -28,7 +29,8 @@ bool TabBarPlus::_doDragNDrop = false; bool TabBarPlus::_drawTopBar = true; bool TabBarPlus::_drawInactiveTab = true; -bool TabBarPlus::_drawTabCloseButton = false; +bool TabBarPlus::_drawTabCloseButton = true; +bool TabBarPlus::_drawTabPinButton = true; bool TabBarPlus::_isDbClk2Close = false; bool TabBarPlus::_isCtrlVertical = false; bool TabBarPlus::_isCtrlMultiLine = false; @@ -277,6 +279,12 @@ void TabBarPlus::destroy() ::ImageList_Destroy(_hCloseBtnImgLst); _hCloseBtnImgLst = nullptr; } + + if (_hPinBtnImgLst != nullptr) + { + ::ImageList_Destroy(_hPinBtnImgLst); + _hPinBtnImgLst = nullptr; + } } @@ -285,7 +293,8 @@ void TabBarPlus::init(HINSTANCE hInst, HWND parent, bool isVertical, bool isMult Window::init(hInst, parent); const UINT dpi = DPIManagerV2::getDpiForWindow(_hParent); - _closeButtonZone.setParent(_hParent); + _closeButtonZone.init(_hParent, 0); + _pinButtonZone.init(_hParent, 1); _dpiManager.setDpi(dpi); int vertical = isVertical ? (TCS_VERTICAL | TCS_MULTILINE | TCS_RIGHTJUSTIFY) : 0; @@ -350,6 +359,7 @@ void TabBarPlus::init(HINSTANCE hInst, HWND parent, bool isVertical, bool isMult setFont(); setCloseBtnImageList(); + setPinBtnImageList(); } void TabBar::setFont() @@ -405,9 +415,21 @@ void TabBarPlus::doOwnerDrawTab(TabBarPlus* tbpObj) if (tbpObj) { - const int paddingSizeDynamicW = tbpObj->_dpiManager.scale(6); - const int paddingSizePlusClosebuttonDynamicW = tbpObj->_dpiManager.scale(10); - ::SendMessage(_hwndArray[i], TCM_SETPADDING, 0, MAKELPARAM(_drawTabCloseButton ? paddingSizePlusClosebuttonDynamicW : paddingSizeDynamicW, 0)); + int paddingSize = 0; + if (_drawTabCloseButton && _drawTabPinButton) // 2 buttons + { + paddingSize = 16; + } + else if (!_drawTabCloseButton && !_drawTabPinButton) // no button + { + paddingSize = 6; + } + else // only 1 button + { + paddingSize = 10; + } + const int paddingSizeDynamicW = tbpObj->_dpiManager.scale(paddingSize); + ::SendMessage(_hwndArray[i], TCM_SETPADDING, 0, MAKELPARAM(paddingSizeDynamicW, 0)); } } } @@ -439,27 +461,33 @@ void TabBarPlus::setColour(COLORREF colour2Set, tabColourIndex i, TabBarPlus* tb doOwnerDrawTab(tbpObj); } -void TabBarPlus::currentTabToStart() +void TabBarPlus::tabToStart(int index) { - int currentTabIndex = getCurrentTabIndex(); - if (currentTabIndex <= 0) + if (index < 0 || index >= static_cast(_nbItem)) + index = getCurrentTabIndex(); + + if (index <= 0) return; - for (int i = currentTabIndex, j = currentTabIndex - 1; j >= 0; --i, --j) + for (int i = index, j = index - 1; j >= 0; --i, --j) { - exchangeTabItemData(i, j); + if (!exchangeTabItemData(i, j)) + break; } } -void TabBarPlus::currentTabToEnd() +void TabBarPlus::tabToEnd(int index) { - int currentTabIndex = getCurrentTabIndex(); - if (currentTabIndex >= static_cast(_nbItem)) + if (index < 0 || index >= static_cast(_nbItem)) + index = getCurrentTabIndex(); + + if (index >= static_cast(_nbItem)) return; - for (int i = currentTabIndex, j = currentTabIndex + 1; j < static_cast(_nbItem); ++i, ++j) + for (int i = index, j = index + 1; j < static_cast(_nbItem); ++i, ++j) { - exchangeTabItemData(i, j); + if (!exchangeTabItemData(i, j)) + break; } } @@ -501,6 +529,45 @@ void TabBarPlus::setCloseBtnImageList() _closeButtonZone._height = btnSize; } + +void TabBarPlus::setPinBtnImageList() +{ + int iconSize = 0; + std::vector ids; + + if (NppDarkMode::isEnabled()) + { + iconSize = g_TabPinBtnSize_DM; + ids = { IDR_PINTAB_DM, IDR_PINTAB_HOVER_DM, IDR_PINTAB_PINNED_DM, IDR_PINTAB_PINNEDHOVER_DM }; + } + else + { + iconSize = g_TabPinBtnSize; + ids = { IDR_PINTAB, IDR_PINTAB_HOVER, IDR_PINTAB_PINNED, IDR_PINTAB_PINNEDHOVER }; + } + + if (_hPinBtnImgLst != nullptr) + { + ::ImageList_Destroy(_hPinBtnImgLst); + _hPinBtnImgLst = nullptr; + } + + const int btnSize = _dpiManager.scale(iconSize); + + _hPinBtnImgLst = ::ImageList_Create(btnSize, btnSize, ILC_COLOR32 | ILC_MASK, static_cast(ids.size()), 0); + + for (const auto& id : ids) + { + HICON hIcon = nullptr; + DPIManagerV2::loadIcon(_hInst, MAKEINTRESOURCE(id), btnSize, btnSize, &hIcon); + ::ImageList_AddIcon(_hPinBtnImgLst, hIcon); + ::DestroyIcon(hIcon); + } + + _pinButtonZone._width = btnSize; + _pinButtonZone._height = btnSize; +} + void TabBarPlus::doVertical() { for (int i = 0 ; i < _nbCtrl ; ++i) @@ -566,6 +633,7 @@ LRESULT TabBarPlus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPara { NppDarkMode::setDarkTooltips(hwnd, NppDarkMode::ToolTipsType::tabbar); setCloseBtnImageList(); + setPinBtnImageList(); return TRUE; } @@ -667,9 +735,10 @@ LRESULT TabBarPlus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPara // clear hover state of the close button, // WM_MOUSEMOVE won't handle this properly since the tab position will change - if (_isCloseHover) + if (_isCloseHover || _isPinHover) { _isCloseHover = false; + _isPinHover = false; ::InvalidateRect(_hSelf, &_currentHoverTabRect, false); } @@ -681,9 +750,12 @@ LRESULT TabBarPlus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPara case WM_LBUTTONDOWN : { + int xPos = LOWORD(lParam); + int yPos = HIWORD(lParam); + if (::GetWindowLongPtr(_hSelf, GWL_STYLE) & TCS_BUTTONS) { - int nTab = getTabIndexAt(LOWORD(lParam), HIWORD(lParam)); + int nTab = getTabIndexAt(xPos, yPos); if (nTab != -1 && nTab != static_cast(::SendMessage(_hSelf, TCM_GETCURSEL, 0, 0))) { setActiveTab(nTab); @@ -692,9 +764,6 @@ LRESULT TabBarPlus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPara if (_drawTabCloseButton) { - int xPos = LOWORD(lParam); - int yPos = HIWORD(lParam); - if (_closeButtonZone.isHit(xPos, yPos, _currentHoverTabRect, _isVertical)) { _whichCloseClickDown = getTabIndexAt(xPos, yPos); @@ -703,6 +772,16 @@ LRESULT TabBarPlus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPara } } + if (_drawTabPinButton) + { + if (_pinButtonZone.isHit(xPos, yPos, _currentHoverTabRect, _isVertical)) + { + _whichPinClickDown = getTabIndexAt(xPos, yPos); + ::SendMessage(_hParent, WM_COMMAND, IDM_VIEW_REFRESHTABAR, 0); + return TRUE; + } + } + ::CallWindowProc(_tabBarDefaultProc, hwnd, Message, wParam, lParam); int currentTabOn = static_cast(::SendMessage(_hSelf, TCM_GETCURSEL, 0, 0)); @@ -822,7 +901,7 @@ LRESULT TabBarPlus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPara RECT currentHoverTabRectOld = _currentHoverTabRect; bool isCloseHoverOld = _isCloseHover; - if (_currentHoverTabItem != -1) // is hovering + if (_currentHoverTabItem != -1) // tab item is being hovered { ::SendMessage(_hSelf, TCM_GETITEMRECT, _currentHoverTabItem, reinterpret_cast(&_currentHoverTabRect)); _isCloseHover = _closeButtonZone.isHit(p.x, p.y, _currentHoverTabRect, _isVertical); @@ -848,6 +927,39 @@ LRESULT TabBarPlus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPara trackMouseEvent(TME_LEAVE); } } + + if (_drawTabPinButton) + { + RECT currentHoverTabRectOld = _currentHoverTabRect; + bool isPinHoverOld = _isPinHover; + + if (_currentHoverTabItem != -1) // tab item is being hovered + { + ::SendMessage(_hSelf, TCM_GETITEMRECT, _currentHoverTabItem, reinterpret_cast(&_currentHoverTabRect)); + _isPinHover = _pinButtonZone.isHit(p.x, p.y, _currentHoverTabRect, _isVertical); + _isPinHover = _pinButtonZone.isHit(p.x, p.y, _currentHoverTabRect, _isVertical); + } + else + { + SetRectEmpty(&_currentHoverTabRect); + _isPinHover = false; + } + + if (isFromTabToTab || _isPinHover != isPinHoverOld) + { + if (isPinHoverOld && (isFromTabToTab || !_isPinHover)) + InvalidateRect(hwnd, ¤tHoverTabRectOld, FALSE); + + if (_isPinHover) + InvalidateRect(hwnd, &_currentHoverTabRect, FALSE); + } + + if (_isPinHover) + { + // Mouse moves out from pin zone will send WM_MOUSELEAVE message + trackMouseEvent(TME_LEAVE); + } + } // Mouse moves out from tab zone will send WM_MOUSELEAVE message // but it doesn't track mouse moving from a tab to another trackMouseEvent(TME_LEAVE); @@ -858,13 +970,15 @@ LRESULT TabBarPlus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPara case WM_MOUSELEAVE: { - if (_isCloseHover) + if (_isCloseHover || _isPinHover) InvalidateRect(hwnd, &_currentHoverTabRect, FALSE); _currentHoverTabItem = -1; _whichCloseClickDown = -1; + _whichPinClickDown = -1; SetRectEmpty(&_currentHoverTabRect); _isCloseHover = false; + _isPinHover = false; notify(TCN_MOUSELEAVING, _currentHoverTabItem); break; @@ -915,6 +1029,28 @@ LRESULT TabBarPlus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPara _whichCloseClickDown = -1; } + if (_drawTabPinButton) + { + if ((_whichPinClickDown == currentTabOn) && _pinButtonZone.isHit(xPos, yPos, _currentHoverTabRect, _isVertical)) + { + notify(TCN_TABPINNED, currentTabOn); + _whichPinClickDown = -1; + + // Get the next tab at same position + // If valid tab is found then + // update the current hover tab RECT (_currentHoverTabRect) + // update pin hover flag (_isPinHover), so that x will be highlighted or not based on new _currentHoverTabRect + int nextTab = getTabIndexAt(xPos, yPos); + if (nextTab != -1) + { + ::SendMessage(_hSelf, TCM_GETITEMRECT, nextTab, reinterpret_cast(&_currentHoverTabRect)); + _isPinHover = _pinButtonZone.isHit(xPos, yPos, _currentHoverTabRect, _isVertical); + } + return TRUE; + } + _whichPinClickDown = -1; + } + break; } @@ -1144,30 +1280,23 @@ LRESULT TabBarPlus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPara return ::CallWindowProc(_tabBarDefaultProc, hwnd, Message, wParam, lParam); } -void TabBarPlus::drawItem(DRAWITEMSTRUCT *pDrawItemStruct, bool isDarkMode) +void TabBarPlus::drawItem(DRAWITEMSTRUCT* pDrawItemStruct, bool isDarkMode) { RECT rect = pDrawItemStruct->rcItem; int nTab = pDrawItemStruct->itemID; - if (nTab < 0) - { - ::MessageBox(NULL, L"nTab < 0", L"", MB_OK); - } + assert(nTab >= 0); + bool isSelected = (nTab == ::SendMessage(_hSelf, TCM_GETCURSEL, 0, 0)); wchar_t label[MAX_PATH] = { '\0' }; TCITEM tci{}; - tci.mask = TCIF_TEXT|TCIF_IMAGE; + tci.mask = TCIF_TEXT | TCIF_IMAGE | TCIF_PARAM; tci.pszText = label; tci.cchTextMax = MAX_PATH-1; - if (!::SendMessage(_hSelf, TCM_GETITEM, nTab, reinterpret_cast(&tci))) - { - std::wstring errorMessageTitle = L"TabBarPlus::drawItem wrong: ! TCM_GETITEM"; - std::wstring errorMessage = GetLastErrorAsString(GetLastError()); - ::MessageBox(NULL, errorMessage.c_str(), errorMessageTitle.c_str(), MB_OK); - } - + ::SendMessage(_hSelf, TCM_GETITEM, nTab, reinterpret_cast(&tci)); + const COLORREF colorActiveBg = isDarkMode ? NppDarkMode::getSofterBackgroundColor() : ::GetSysColor(COLOR_BTNFACE); const COLORREF colorInactiveBgBase = isDarkMode ? NppDarkMode::getBackgroundColor() : ::GetSysColor(COLOR_BTNFACE); @@ -1322,22 +1451,22 @@ void TabBarPlus::drawItem(DRAWITEMSTRUCT *pDrawItemStruct, bool isDarkMode) { // 3 status for each inactive tab and selected tab close item : // normal / hover / pushed - int idxCloseImg = 0; // selected + int idxCloseImg = _closeTabIdx; // selected if (_isCloseHover && (_currentHoverTabItem == nTab)) { if (_whichCloseClickDown == -1) // hover { - idxCloseImg += 2; + idxCloseImg = _closeTabHoverIdx; } else if (_whichCloseClickDown == _currentHoverTabItem) // pushed { - idxCloseImg += 3; + idxCloseImg = _closeTabPushIdx; } } else if (!isSelected) // inactive { - idxCloseImg += 1; + idxCloseImg = _closeTabInactIdx; } RECT buttonRect = _closeButtonZone.getButtonRectFrom(rect, _isVertical); @@ -1345,6 +1474,82 @@ void TabBarPlus::drawItem(DRAWITEMSTRUCT *pDrawItemStruct, bool isDarkMode) ::ImageList_Draw(_hCloseBtnImgLst, idxCloseImg, hDC, buttonRect.left, buttonRect.top, ILD_TRANSPARENT); } + // draw pin button + if (_drawTabPinButton && _hPinBtnImgLst != nullptr) + { + // Each tab combined with the following stats : + // (active / inactive) | (pinned / unpinned) | (hover / not hover / pushed) + + + bool isPinned = reinterpret_cast(tci.lParam)->isPinned(); + int idxPinImg = _unpinnedIdx; // current: upinned as default + + + if (isPinned) + { + if (!isSelected) // inactive + { + if (_isPinHover && (_currentHoverTabItem == nTab)) + { + if (_whichPinClickDown == -1) // hover + { + idxPinImg = _pinnedHoverIdx; + } + else if (_whichPinClickDown == _currentHoverTabItem) // pushed + { + idxPinImg = _unpinnedIdx; + } + + } + else // pinned inactive + { + idxPinImg = _pinnedIdx; + } + } + else // current + { + if (_isPinHover && (_currentHoverTabItem == nTab)) // hover + idxPinImg = _pinnedHoverIdx; + else + idxPinImg = _pinnedIdx; + } + + } + else // unpinned + { + if (!isSelected) // inactive + { + if (_isPinHover && (_currentHoverTabItem == nTab)) + { + if (_whichPinClickDown == -1) // hover + { + idxPinImg = _unpinnedHoverIdx; + } + else if (_whichPinClickDown == _currentHoverTabItem) // pushed + { + idxPinImg = _pinnedIdx; + } + + } + else // unpinned inactive + { + idxPinImg = _unpinnedIdx; + } + } + else // current + { + if (_isPinHover && (_currentHoverTabItem == nTab)) // hover + idxPinImg = _unpinnedHoverIdx; + else + idxPinImg = _unpinnedIdx; + } + } + + RECT buttonRect = _pinButtonZone.getButtonRectFrom(rect, _isVertical); + + ::ImageList_Draw(_hPinBtnImgLst, idxPinImg, hDC, buttonRect.left, buttonRect.top, ILD_TRANSPARENT); + } + // draw image HIMAGELIST hImgLst = (HIMAGELIST)::SendMessage(_hSelf, TCM_GETIMAGELIST, 0, 0); @@ -1496,7 +1701,7 @@ void TabBarPlus::setActiveTab(int tabIndex) notify(TCN_SELCHANGE, tabIndex); } -void TabBarPlus::exchangeTabItemData(int oldTab, int newTab) +bool TabBarPlus::exchangeTabItemData(int oldTab, int newTab) { //1. shift their data, and insert the source TCITEM itemData_nDraggedTab{}, itemData_shift{}; @@ -1512,10 +1717,18 @@ void TabBarPlus::exchangeTabItemData(int oldTab, int newTab) itemData_shift.cchTextMax = (stringSize); ::SendMessage(_hSelf, TCM_GETITEM, oldTab, reinterpret_cast(&itemData_nDraggedTab)); + Buffer* chosenBuf = reinterpret_cast(itemData_nDraggedTab.lParam); + + ::SendMessage(_hSelf, TCM_GETITEM, newTab, reinterpret_cast(&itemData_shift)); + Buffer* shiftBuf = reinterpret_cast(itemData_shift.lParam); + + if (chosenBuf->isPinned() != shiftBuf->isPinned()) + return false; + int i = oldTab; if (oldTab > newTab) { - for (int i = oldTab; i > newTab; i--) + for (; i > newTab; i--) { ::SendMessage(_hSelf, TCM_GETITEM, i - 1, reinterpret_cast(&itemData_shift)); ::SendMessage(_hSelf, TCM_SETITEM, i, reinterpret_cast(&itemData_shift)); @@ -1523,12 +1736,13 @@ void TabBarPlus::exchangeTabItemData(int oldTab, int newTab) } else { - for (int i = oldTab; i < newTab; ++i) + for (; i < newTab; ++i) { ::SendMessage(_hSelf, TCM_GETITEM, i + 1, reinterpret_cast(&itemData_shift)); ::SendMessage(_hSelf, TCM_SETITEM, i, reinterpret_cast(&itemData_shift)); } } + ::SendMessage(_hSelf, TCM_SETITEM, newTab, reinterpret_cast(&itemData_nDraggedTab)); // Tell Notepad_plus to notifiy plugins that a D&D operation was done (so doc index has been changed) @@ -1536,6 +1750,8 @@ void TabBarPlus::exchangeTabItemData(int oldTab, int newTab) //2. set to focus setActiveTab(newTab); + + return true; } void TabBarPlus::exchangeItemData(POINT point) @@ -1556,9 +1772,11 @@ void TabBarPlus::exchangeItemData(POINT point) return; } - exchangeTabItemData(_nTabDragged, nTab); - _previousTabSwapped = _nTabDragged; - _nTabDragged = nTab; + if (exchangeTabItemData(_nTabDragged, nTab)) + { + _previousTabSwapped = _nTabDragged; + _nTabDragged = nTab; + } } else { @@ -1571,11 +1789,10 @@ void TabBarPlus::exchangeItemData(POINT point) _previousTabSwapped = -1; _isDraggingInside = false; } - } -bool CloseButtonZone::isHit(int x, int y, const RECT & tabRect, bool isVertical) const +bool TabButtonZone::isHit(int x, int y, const RECT & tabRect, bool isVertical) const { RECT buttonRect = getButtonRectFrom(tabRect, isVertical); @@ -1585,22 +1802,42 @@ bool CloseButtonZone::isHit(int x, int y, const RECT & tabRect, bool isVertical) return false; } -RECT CloseButtonZone::getButtonRectFrom(const RECT & tabRect, bool isVertical) const +RECT TabButtonZone::getButtonRectFrom(const RECT & tabRect, bool isVertical) const { RECT buttonRect{}; + const UINT dpi = DPIManagerV2::getDpiForWindow(_parent); + const int inBetween = DPIManagerV2::scale(NppDarkMode::isEnabled() ? 4 : 8, dpi); int fromBorder = 0; if (isVertical) { fromBorder = (tabRect.right - tabRect.left - _width + 1) / 2; + if (_order == 0) + { + buttonRect.top = tabRect.top + fromBorder; + } + else if (_order == 1) + { + buttonRect.top = tabRect.top + fromBorder + _height + inBetween; + } + buttonRect.left = tabRect.left + fromBorder; } else { fromBorder = (tabRect.bottom - tabRect.top - _height + 1) / 2; - buttonRect.left = tabRect.right - fromBorder - _width; + if (_order == 0) + { + buttonRect.left = tabRect.right - fromBorder - _width; + } + else if (_order == 1) + { + buttonRect.left = tabRect.right - fromBorder - _width * 2 - inBetween; + } + + buttonRect.top = tabRect.top + fromBorder; } - buttonRect.top = tabRect.top + fromBorder; + buttonRect.bottom = buttonRect.top + _height; buttonRect.right = buttonRect.left + _width; diff --git a/PowerEditor/src/WinControls/TabBar/TabBar.h b/PowerEditor/src/WinControls/TabBar/TabBar.h index 226a5734e4c6..d0fe125ce301 100644 --- a/PowerEditor/src/WinControls/TabBar/TabBar.h +++ b/PowerEditor/src/WinControls/TabBar/TabBar.h @@ -36,6 +36,7 @@ #define TCN_MOUSEHOVERING (TCN_FIRST - 13) #define TCN_MOUSELEAVING (TCN_FIRST - 14) #define TCN_MOUSEHOVERSWITCHING (TCN_FIRST - 15) +#define TCN_TABPINNED (TCN_FIRST - 16) #define WM_TABSETSTYLE (WM_APP + 0x024) @@ -65,7 +66,9 @@ constexpr int g_TabHeightLarge = 25; constexpr int g_TabWidth = 45; constexpr int g_TabWidthCloseBtn = 60; constexpr int g_TabCloseBtnSize = 11; +constexpr int g_TabPinBtnSize = 11; constexpr int g_TabCloseBtnSize_DM = 16; +constexpr int g_TabPinBtnSize_DM = 16; struct TBHDR { @@ -148,15 +151,21 @@ class TabBar : public Window }; -struct CloseButtonZone +struct TabButtonZone { + void init(HWND parent, int order) { + _parent = parent; + _order = order; + } + bool isHit(int x, int y, const RECT & tabRect, bool isVertical) const; RECT getButtonRectFrom(const RECT & tabRect, bool isVertical) const; - void setParent(HWND parent) { _parent = parent; } + void setOrder(int newOrder) { _order = newOrder; }; HWND _parent = nullptr; int _width = 0; int _height = 0; + int _order = -1; // from right to left: 0, 1 }; @@ -200,6 +209,7 @@ public : static bool drawTopBar() {return _drawTopBar;}; static bool drawInactiveTab() {return _drawInactiveTab;}; static bool drawTabCloseButton() {return _drawTabCloseButton;}; + static bool drawTabPinButton() {return _drawTabPinButton;}; static bool isDbClk2Close() {return _isDbClk2Close;}; static bool isVertical() { return _isCtrlVertical;}; static bool isMultiLine() { return _isCtrlMultiLine;}; @@ -220,6 +230,11 @@ public : doOwnerDrawTab(tbpObj); } + static void setDrawTabPinButton(bool b, TabBarPlus* tbpObj) { + _drawTabPinButton = b; + doOwnerDrawTab(tbpObj); + } + static void setDbClk2Close(bool b) { _isDbClk2Close = b; } @@ -241,10 +256,19 @@ public : static void setColour(COLORREF colour2Set, tabColourIndex i, TabBarPlus* tbpObj); virtual int getIndividualTabColourId(int tabIndex) = 0; - void currentTabToStart(); - void currentTabToEnd(); + void tabToStart(int index = -1); + void tabToEnd(int index = -1); void setCloseBtnImageList(); + void setPinBtnImageList(); + + void setTabPinButtonOrder(int newOrder) { + _pinButtonZone.setOrder(newOrder); + } + + void setTabCloseButtonOrder(int newOrder) { + _closeButtonZone.setOrder(newOrder); + } protected: // it's the boss to decide if we do the drag N drop @@ -263,10 +287,25 @@ public : RECT _currentHoverTabRect{}; int _currentHoverTabItem = -1; // -1 : no mouse on any tab - CloseButtonZone _closeButtonZone; + TabButtonZone _closeButtonZone; + TabButtonZone _pinButtonZone; + HIMAGELIST _hCloseBtnImgLst = nullptr; + const int _closeTabIdx = 0; + const int _closeTabInactIdx = 1; + const int _closeTabHoverIdx = 2; + const int _closeTabPushIdx = 3; + + HIMAGELIST _hPinBtnImgLst = nullptr; + const int _unpinnedIdx = 0; + const int _unpinnedHoverIdx = 1; + const int _pinnedIdx = 2; + const int _pinnedHoverIdx = 3; + bool _isCloseHover = false; + bool _isPinHover = false; int _whichCloseClickDown = -1; + int _whichPinClickDown = -1; bool _lmbdHit = false; // Left Mouse Button Down Hit HWND _tooltips = nullptr; @@ -276,7 +315,7 @@ public : return (((TabBarPlus *)(::GetWindowLongPtr(hwnd, GWLP_USERDATA)))->runProc(hwnd, Message, wParam, lParam)); }; void setActiveTab(int tabIndex); - void exchangeTabItemData(int oldTab, int newTab); + bool exchangeTabItemData(int oldTab, int newTab); void exchangeItemData(POINT point); @@ -284,6 +323,7 @@ public : static bool _drawInactiveTab; static bool _drawTopBar; static bool _drawTabCloseButton; + static bool _drawTabPinButton; static bool _isDbClk2Close; static bool _isCtrlVertical; static bool _isCtrlMultiLine; diff --git a/PowerEditor/src/icons/dark/tabbar/pinTabButton.ico b/PowerEditor/src/icons/dark/tabbar/pinTabButton.ico new file mode 100644 index 0000000000000000000000000000000000000000..8078bf609d56f60f530dd3f1bded1a0376e17d55 GIT binary patch literal 2809 zcmbuBcTf|^9>+Hj=_MR30zxk0qlz?K4ini!+3nEv~Y zFb+26EVXfXh3Po`j2!|1;OqKskRIPBuFT@mKtuaLYhU+3+!cQ}fWzUGuK9QdV6OPN zDf#+)d7Z%%OW+Wa|fL83?ug~ z=vVuUg@FK0)clc}+{GPSlw$vM&IHCr_pXZ5ZjcW#rbt%lmqkfPrgq+7O z?8e}fqu*-WrLmwf%6VknYFhzNHxD>Y+!XtoV};j(^PD9uc$n(Ma;a%o(VMxGtZ1xG zu`r)gT?*0Gvg}&}UP72w{=mhJo%gC_B({hD=QLy;FVC%19qO}v8y9!;-L>i6`0ObY zIo;i3JZ2{js1^I-kt`}NQ#!(Q;(eF`0TaVtQB~($qW^=$-ysqDOXBgH5D!#RXeZHC7tgw8!wI8@WjzOa_6lTh^08h(c%?QOdJ;zrn) zYJ zo(+RRMK`WjkoKibe2!xBA!I+El|Zc*iv3&CQ*0oG{l(QAkDaOy?fnV9(iV%snv#hH zNs6rFo*KDQ83?~Y?+}Jm(mS@ARBkcMv}vO2JEej?xbH(2bM2rzQ9jL95J8pyao=BUd}olQIseBaUIM#c!~7LzeXut(kEP z(Hpe{JOgKP*12JEyxt^bzOE#HJL29v{5f6oL1Ti-QD7~f&ZZEvu`Oz78JSal6oUt6 zQ{PqFmZRAYg6CVWTwrYGltjRwyZy=tk5`A{o`)S($M!e_-&51l8xVVc1JCyx1^yR2 zvpC(a{|`JY7T@79jwhv?dkR{@W2xDi>6R`29&)$$Vu}b-ukSm`adLQ{i4L-p=%t)A z#eS5p{e6DWo+U{5T|5V=5Zh9tFhw46PC}tNVgrB2MyrKRT_`!JW`fSah3XA%L`bZ; zY2?0;?ShwTMOhoQ6_VOfbsR3|P}7bXq*gNdtM<}fviy^`*9E0DdU5M?76$Ustp6&Wc7k468d&H0*mM`H|3h z7l>A|$~>aR4JH|a5NQ%Y2sK~kJxPrd5J_%9BEj;bYiFN&@6sdN$UTGG;T9+ffzXmP z|3A9JXPgC+7i3HE@H^!<)b1VuQKK}O?8F#srEgN00+NcFk9hW8hNhm{M+Rq8D4v!3 ztPaUIus1$A*`nL)5Fd5E_&p?xW&N67iEX(9a0gx)ro?Ca-GUG_-LzV_ivDYI#U{c4 zMgedp^hqI#h~@p5{WhG$WBs}_sXd^bIJ|^2V%rq2nA241vjHB4B@g=-n!5lWxpzZn z$zxy+Rb*}xjPy4#49#|4s0*H~@~tK@t}}xiO3X z%?ros^qpY)*wsu6tb~n3kKVI0#pXJF=U9bR>gNmN@Cqm{dG-4)hP@56+{ll8F=qd$ zufJ$sh_|n$xYomaO%ykgCprYW@2L;nz37>2HSjyaHQ1)CgtXbv9XPX5Q?FXlGBMRX z6tmy4KD!;^+g`989+{O~S}M2Z@npB`0Du~tnkGlIu4(Bo@-sR`%es1OCND2W21>#eR z%$hAdbow-Lg!_5H%dF$3r51}HK1kAp^(A_$0eh5qgLmXe`E<}!xoN4%Yy)9lHJehp zm6I=ODP(9>Y1?yOrJALhmC(Dp6V^V>|CHWrCn_THKn$YdGqQE#P(z?=C zZ^@`t813nZ(%K4w66U@l*S+MwaMvJ_{SW3YZ|P7sk4r#1<}%#c*juwp2Dgp?o)fFT z&Dv|^?jtk%zntKzA(OKvXf!R(R$d-fM}4Ag`Ikm^vHLI0GTbUzELb0Vl4!!S+fJR# zE=~0E@%bS5$q2%#D2{RGj_su8y)x0QE$v!pkfiS8V5UaA)QC zmgIVP^pZ7e+uQStLrwOzw6wlWMY6%}yeGIhI1lSUJkj(;4|n$iS&@5ZNTYGrnm?rx z9v s1CD7QK^I{4HkORP*4ticn`NhBr7@e66_5DpTKO#fBk3v1eZAAiU0rr literal 0 HcmV?d00001 diff --git a/PowerEditor/src/icons/dark/tabbar/pinTabButton_hover.ico b/PowerEditor/src/icons/dark/tabbar/pinTabButton_hover.ico new file mode 100644 index 0000000000000000000000000000000000000000..7072beefb1dcad6a21eea6694ac88ed0d19e0491 GIT binary patch literal 1592 zcmZQzU}Run5D;Jh0uBaaMg|5qAWK99!p{ftD}h)-0>THeUobH+C@4Vq*Ma;*76yjS z06%wLE-5acD6gl7OAwF-nJB=)1|;P_|4#%`oCO|{#S9F5he4R}c>anMprB-lYeY$K zep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt%^UT^vI!dXsrLI1(1HY*@hUGt0#D z)%*MVcmMnUe|@j(Usg6Yw*Ezn7EL!`R4Wm!|M%zPv4t}m8ygQcOq_U;Ig;TpgPYs2 z!#q4Z{|hBP{J+1y{`g0!fQX2S=ElZ{0({KhM8(DLAIfI9B6_({!az8dVKw6thBa(| zet*}OZLi`f<^Ev9Y-jmAZm|Qy(krnkNXc4%7{0vGq;s9IW~uBr~30_GbU$jSohk++x)Nd zMD3ZKFQWVIsxM-7J~bnJf+B(72Bm2UaBx2;xBWp$a5J)jg4?6>?bW?rM;s(tAAavX zmL^@j@#NnQPfangX+oY&(*-Xr`J$w>Zkkq=^2{)njT@z&Y~Fb1=V>Lgd1Zd*m=hD0 z=y=x|?_SrOIjihhrCdXC!qXMCt6r4`iiC%T*5+!Z=pB#|FQyd&&cKbHRq~ z!c5l$58O37P{;D%ZA*jMmUXMnDkaDqXMUi<(s3g5{`dBi4O_P{esf}&kRBPP&U_&9 zNX3TN%=412hkm_Ss;2q=paD;I!@AdfN&7kPE?WDU|Bvm1nlI+AE^VG%%)s0zRVk?KDupi?r^y zKH|P1K;W89S8K2DH^x7XVy*?VbJp)Y^lp>ct{28Efi53nHyxaRudZ~R?<&{Ho@$fQ z{H>qg`)qh7W}Qo*%WR{y%a|LxH9dtUFMGMOV-CaWzP zfNuk1Opn{*C(<)-%A-?o?Mi62wi@ly!X#~1&()n7}=T+ zYJZ3^jSZFm_4i-9xx>9TyR;e%pDnxc_?8aOVRePo6Xus$&7FRXVb|Stta-72m5k12 z&tg2WRP^uCA~ugnM;L6w_pg$BYI>F-C2|{Y&aPjL2ELcq9%ERuwbl5qd8bEauke8i zn>gW#b5}7qn9TIKwwH0uR@(&y%lb)=IE`WJzjsY`jhBu-zRwWy^@>EW^nq%jU#q^Fe_-D5D85Kw M!t*7-NP!n$0LG7U-2eap literal 0 HcmV?d00001 diff --git a/PowerEditor/src/icons/dark/tabbar/pinTabButton_pinned.ico b/PowerEditor/src/icons/dark/tabbar/pinTabButton_pinned.ico new file mode 100644 index 0000000000000000000000000000000000000000..7072beefb1dcad6a21eea6694ac88ed0d19e0491 GIT binary patch literal 1592 zcmZQzU}Run5D;Jh0uBaaMg|5qAWK99!p{ftD}h)-0>THeUobH+C@4Vq*Ma;*76yjS z06%wLE-5acD6gl7OAwF-nJB=)1|;P_|4#%`oCO|{#S9F5he4R}c>anMprB-lYeY$K zep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt%^UT^vI!dXsrLI1(1HY*@hUGt0#D z)%*MVcmMnUe|@j(Usg6Yw*Ezn7EL!`R4Wm!|M%zPv4t}m8ygQcOq_U;Ig;TpgPYs2 z!#q4Z{|hBP{J+1y{`g0!fQX2S=ElZ{0({KhM8(DLAIfI9B6_({!az8dVKw6thBa(| zet*}OZLi`f<^Ev9Y-jmAZm|Qy(krnkNXc4%7{0vGq;s9IW~uBr~30_GbU$jSohk++x)Nd zMD3ZKFQWVIsxM-7J~bnJf+B(72Bm2UaBx2;xBWp$a5J)jg4?6>?bW?rM;s(tAAavX zmL^@j@#NnQPfangX+oY&(*-Xr`J$w>Zkkq=^2{)njT@z&Y~Fb1=V>Lgd1Zd*m=hD0 z=y=x|?_SrOIjihhrCdXC!qXMCt6r4`iiC%T*5+!Z=pB#|FQyd&&cKbHRq~ z!c5l$58O37P{;D%ZA*jMmUXMnDkaDqXMUi<(s3g5{`dBi4O_P{esf}&kRBPP&U_&9 zNX3TN%=412hkm_Ss;2q=paD;I!@AdfN&7kPE?WDU|Bvm1nlI+AE^VG%%)s0zRVk?KDupi?r^y zKH|P1K;W89S8K2DH^x7XVy*?VbJp)Y^lp>ct{28Efi53nHyxaRudZ~R?<&{Ho@$fQ z{H>qg`)qh7W}Qo*%WR{y%a|LxH9dtUFMGMOV-CaWzP zfNuk1Opn{*C(<)-%A-?o?Mi62wi@ly!X#~1&()n7}=T+ zYJZ3^jSZFm_4i-9xx>9TyR;e%pDnxc_?8aOVRePo6Xus$&7FRXVb|Stta-72m5k12 z&tg2WRP^uCA~ugnM;L6w_pg$BYI>F-C2|{Y&aPjL2ELcq9%ERuwbl5qd8bEauke8i zn>gW#b5}7qn9TIKwwH0uR@(&y%lb)=IE`WJzjsY`jhBu-zRwWy^@>EW^nq%jU#q^Fe_-D5D85Kw M!t*7-NP!n$0LG7U-2eap literal 0 HcmV?d00001 diff --git a/PowerEditor/src/icons/dark/tabbar/pinTabButton_pinnedHover.ico b/PowerEditor/src/icons/dark/tabbar/pinTabButton_pinnedHover.ico new file mode 100644 index 0000000000000000000000000000000000000000..8078bf609d56f60f530dd3f1bded1a0376e17d55 GIT binary patch literal 2809 zcmbuBcTf|^9>+Hj=_MR30zxk0qlz?K4ini!+3nEv~Y zFb+26EVXfXh3Po`j2!|1;OqKskRIPBuFT@mKtuaLYhU+3+!cQ}fWzUGuK9QdV6OPN zDf#+)d7Z%%OW+Wa|fL83?ug~ z=vVuUg@FK0)clc}+{GPSlw$vM&IHCr_pXZ5ZjcW#rbt%lmqkfPrgq+7O z?8e}fqu*-WrLmwf%6VknYFhzNHxD>Y+!XtoV};j(^PD9uc$n(Ma;a%o(VMxGtZ1xG zu`r)gT?*0Gvg}&}UP72w{=mhJo%gC_B({hD=QLy;FVC%19qO}v8y9!;-L>i6`0ObY zIo;i3JZ2{js1^I-kt`}NQ#!(Q;(eF`0TaVtQB~($qW^=$-ysqDOXBgH5D!#RXeZHC7tgw8!wI8@WjzOa_6lTh^08h(c%?QOdJ;zrn) zYJ zo(+RRMK`WjkoKibe2!xBA!I+El|Zc*iv3&CQ*0oG{l(QAkDaOy?fnV9(iV%snv#hH zNs6rFo*KDQ83?~Y?+}Jm(mS@ARBkcMv}vO2JEej?xbH(2bM2rzQ9jL95J8pyao=BUd}olQIseBaUIM#c!~7LzeXut(kEP z(Hpe{JOgKP*12JEyxt^bzOE#HJL29v{5f6oL1Ti-QD7~f&ZZEvu`Oz78JSal6oUt6 zQ{PqFmZRAYg6CVWTwrYGltjRwyZy=tk5`A{o`)S($M!e_-&51l8xVVc1JCyx1^yR2 zvpC(a{|`JY7T@79jwhv?dkR{@W2xDi>6R`29&)$$Vu}b-ukSm`adLQ{i4L-p=%t)A z#eS5p{e6DWo+U{5T|5V=5Zh9tFhw46PC}tNVgrB2MyrKRT_`!JW`fSah3XA%L`bZ; zY2?0;?ShwTMOhoQ6_VOfbsR3|P}7bXq*gNdtM<}fviy^`*9E0DdU5M?76$Ustp6&Wc7k468d&H0*mM`H|3h z7l>A|$~>aR4JH|a5NQ%Y2sK~kJxPrd5J_%9BEj;bYiFN&@6sdN$UTGG;T9+ffzXmP z|3A9JXPgC+7i3HE@H^!<)b1VuQKK}O?8F#srEgN00+NcFk9hW8hNhm{M+Rq8D4v!3 ztPaUIus1$A*`nL)5Fd5E_&p?xW&N67iEX(9a0gx)ro?Ca-GUG_-LzV_ivDYI#U{c4 zMgedp^hqI#h~@p5{WhG$WBs}_sXd^bIJ|^2V%rq2nA241vjHB4B@g=-n!5lWxpzZn z$zxy+Rb*}xjPy4#49#|4s0*H~@~tK@t}}xiO3X z%?ros^qpY)*wsu6tb~n3kKVI0#pXJF=U9bR>gNmN@Cqm{dG-4)hP@56+{ll8F=qd$ zufJ$sh_|n$xYomaO%ykgCprYW@2L;nz37>2HSjyaHQ1)CgtXbv9XPX5Q?FXlGBMRX z6tmy4KD!;^+g`989+{O~S}M2Z@npB`0Du~tnkGlIu4(Bo@-sR`%es1OCND2W21>#eR z%$hAdbow-Lg!_5H%dF$3r51}HK1kAp^(A_$0eh5qgLmXe`E<}!xoN4%Yy)9lHJehp zm6I=ODP(9>Y1?yOrJALhmC(Dp6V^V>|CHWrCn_THKn$YdGqQE#P(z?=C zZ^@`t813nZ(%K4w66U@l*S+MwaMvJ_{SW3YZ|P7sk4r#1<}%#c*juwp2Dgp?o)fFT z&Dv|^?jtk%zntKzA(OKvXf!R(R$d-fM}4Ag`Ikm^vHLI0GTbUzELb0Vl4!!S+fJR# zE=~0E@%bS5$q2%#D2{RGj_su8y)x0QE$v!pkfiS8V5UaA)QC zmgIVP^pZ7e+uQStLrwOzw6wlWMY6%}yeGIhI1lSUJkj(;4|n$iS&@5ZNTYGrnm?rx z9v s1CD7QK^I{4HkORP*4ticn`NhBr7@e66_5DpTKO#fBk3v1eZAAiU0rr literal 0 HcmV?d00001 diff --git a/PowerEditor/src/icons/standard/tabbar/pinTabButton.ico b/PowerEditor/src/icons/standard/tabbar/pinTabButton.ico new file mode 100644 index 0000000000000000000000000000000000000000..b92c30a4f218182c81df9d6f82b2df25c4d6508e GIT binary patch literal 1150 zcmbV~zl*{!9K~~RASyypIS~X8e_&nw2V8D*)e266>p6*wyEr%~w77`>fN)Y21<_5M z6dY8h=0lp6zG9-y<9jqgJc&GtK97ESF2jvh0Xw8U22rc`^DLSxhJtLbKVl=FBH* ztJR9HI~)#e-t+kkx7&?Yt7X$~GuG=hg25oB)2YzIzOmo$Mj`=0y<9HXY&K9;mFF}X4a>XR?Vza|a=9G5Uhl(wm}^F(QBluBV>X)! z>+yIT<#JhAGjnuZ=l5Z|-P(MKL;|H!$)=gi{TPeI@Us_QN~KaL7K@Hp2ITX3>+Yq~ mX%q?t$1LO7KMMo`NG6j|6y;AW<5|-*4V6meU+gvE_x>B8al0@8 literal 0 HcmV?d00001 diff --git a/PowerEditor/src/icons/standard/tabbar/pinTabButton_hover.ico b/PowerEditor/src/icons/standard/tabbar/pinTabButton_hover.ico new file mode 100644 index 0000000000000000000000000000000000000000..144175d953cb2fcf2668a42b6e3f1561b45394e5 GIT binary patch literal 1150 zcmbV~F$%&!5Jg9@71Ai!h;|-BY`lnqC$P7(w6eGG2=>;N;uSoBC}1vy(Mz`7g`N|A)40oAu0W?5C$Z^UZs(i9d^v)1sT-HiJCQr`|u0^L#(+lsaDL zZLPb?f%|coHg>?kvcAizU(2&zF}x2;U+OJ&9{1g-V2SVRx;SyA^q~47i-Q@~In-y& zss}kVlX#}&RYOc1almOl;l80h_sknlSs!w$)~~t3RynFz`Q)Hy)g-2{a_}ze72kx# ap}p6%uIh*1EM@vYhz#zuJz@P!dKp~(AL>x#lH~{5H0rTd~`;SjOG4iFQrFhLC zWd2am|9P6?e^M~IzrQYZ`cDc**AL@=+nVwpABL&JNB=xE;XgKvPY<#jHoYJ*WHtEM UBUwM8G=MMMh)sX^%pg?`0N!FBx&QzG literal 0 HcmV?d00001 diff --git a/PowerEditor/src/icons/standard/tabbar/pinTabButton_pinnedHover.ico b/PowerEditor/src/icons/standard/tabbar/pinTabButton_pinnedHover.ico new file mode 100644 index 0000000000000000000000000000000000000000..478b129fb0a0a18657dd8c523db2df1acb3fc9cc GIT binary patch literal 1150 zcmdUr!3lsc6hk98Ku?}MI)>x8{{s4p1VYJIOHWp6(loD>0#kgYApR?k8CU>pF(ZoP z&O@-rUgtPF`)$4QBWL`H=Uu;Q_Et~trDwN1*X(dj&2sLmx;wZ`8TGE~GG)}euFI5B h@47BiM!oC0Od0jA>oR5NYtMDFoLp6Q-c*?(e*q*xI!XWl literal 0 HcmV?d00001 diff --git a/PowerEditor/src/resource.h b/PowerEditor/src/resource.h index b6f038c1992d..fc9cbae79469 100644 --- a/PowerEditor/src/resource.h +++ b/PowerEditor/src/resource.h @@ -405,6 +405,15 @@ #define IDR_FIND_RESULT_ICO2 1564 #define IDR_FIND_RESULT_ICO_DM 1565 +#define IDR_PINTAB 1566 +#define IDR_PINTAB_HOVER 1567 +#define IDR_PINTAB_PINNED 1568 +#define IDR_PINTAB_PINNEDHOVER 1569 +#define IDR_PINTAB_DM 1570 +#define IDR_PINTAB_HOVER_DM 1571 +#define IDR_PINTAB_PINNED_DM 1572 +#define IDR_PINTAB_PINNEDHOVER_DM 1573 + #define ID_MACRO 20000 // O . // C . @@ -698,6 +707,8 @@ #define NPPM_INTERNAL_LINECUTCOPYWITHOUTSELECTION (NOTEPADPLUS_USER_INTERNAL + 78) #define NPPM_INTERNAL_DOCMODIFIEDBYREPLACEALL (NOTEPADPLUS_USER_INTERNAL + 79) + #define NPPM_INTERNAL_DRAWTABBARPINBOTTUN (NOTEPADPLUS_USER_INTERNAL + 80) + // See Notepad_plus_msgs.h //#define NOTEPADPLUS_USER (WM_USER + 1000) From d9c24ad78f17adc6b16d30111b126b2e7513d8fa Mon Sep 17 00:00:00 2001 From: Don Ho Date: Sat, 9 Nov 2024 14:43:49 +0100 Subject: [PATCH 02/37] Remove dead entry from the localization files Ref: https://github.com/notepad-plus-plus/notepad-plus-plus/commit/ce58b424bdeec3616943f9ea8cd257f66700c3c0#commitcomment-148911101 --- PowerEditor/installer/nativeLang/abkhazian.xml | 1 - PowerEditor/installer/nativeLang/afrikaans.xml | 1 - PowerEditor/installer/nativeLang/albanian.xml | 1 - PowerEditor/installer/nativeLang/arabic.xml | 1 - PowerEditor/installer/nativeLang/aragonese.xml | 1 - PowerEditor/installer/nativeLang/azerbaijani.xml | 1 - PowerEditor/installer/nativeLang/basque.xml | 1 - PowerEditor/installer/nativeLang/belarusian.xml | 1 - PowerEditor/installer/nativeLang/bengali.xml | 1 - PowerEditor/installer/nativeLang/bosnian.xml | 1 - PowerEditor/installer/nativeLang/brazilian_portuguese.xml | 1 - PowerEditor/installer/nativeLang/breton.xml | 1 - PowerEditor/installer/nativeLang/bulgarian.xml | 1 - PowerEditor/installer/nativeLang/catalan.xml | 1 - PowerEditor/installer/nativeLang/chineseSimplified.xml | 1 - PowerEditor/installer/nativeLang/corsican.xml | 1 - PowerEditor/installer/nativeLang/croatian.xml | 1 - PowerEditor/installer/nativeLang/czech.xml | 3 --- PowerEditor/installer/nativeLang/danish.xml | 1 - PowerEditor/installer/nativeLang/dutch.xml | 1 - PowerEditor/installer/nativeLang/english.xml | 1 - PowerEditor/installer/nativeLang/english_customizable.xml | 1 - PowerEditor/installer/nativeLang/esperanto.xml | 1 - PowerEditor/installer/nativeLang/estonian.xml | 1 - PowerEditor/installer/nativeLang/extremaduran.xml | 1 - PowerEditor/installer/nativeLang/farsi.xml | 1 - PowerEditor/installer/nativeLang/finnish.xml | 1 - PowerEditor/installer/nativeLang/french.xml | 1 - PowerEditor/installer/nativeLang/friulian.xml | 1 - PowerEditor/installer/nativeLang/galician.xml | 1 - PowerEditor/installer/nativeLang/georgian.xml | 1 - PowerEditor/installer/nativeLang/german.xml | 1 - PowerEditor/installer/nativeLang/greek.xml | 1 - PowerEditor/installer/nativeLang/gujarati.xml | 1 - PowerEditor/installer/nativeLang/hindi.xml | 1 - PowerEditor/installer/nativeLang/hongKongCantonese.xml | 1 - PowerEditor/installer/nativeLang/hungarian.xml | 1 - PowerEditor/installer/nativeLang/indonesian.xml | 1 - PowerEditor/installer/nativeLang/irish.xml | 1 - PowerEditor/installer/nativeLang/italian.xml | 1 - PowerEditor/installer/nativeLang/japanese.xml | 1 - PowerEditor/installer/nativeLang/kabyle.xml | 1 - PowerEditor/installer/nativeLang/kannada.xml | 1 - PowerEditor/installer/nativeLang/kazakh.xml | 1 - PowerEditor/installer/nativeLang/korean.xml | 1 - PowerEditor/installer/nativeLang/kurdish.xml | 1 - PowerEditor/installer/nativeLang/kyrgyz.xml | 1 - PowerEditor/installer/nativeLang/latvian.xml | 1 - PowerEditor/installer/nativeLang/ligurian.xml | 1 - PowerEditor/installer/nativeLang/lithuanian.xml | 1 - PowerEditor/installer/nativeLang/luxembourgish.xml | 1 - PowerEditor/installer/nativeLang/macedonian.xml | 1 - PowerEditor/installer/nativeLang/malay.xml | 1 - PowerEditor/installer/nativeLang/marathi.xml | 1 - PowerEditor/installer/nativeLang/mongolian.xml | 1 - PowerEditor/installer/nativeLang/nepali.xml | 1 - PowerEditor/installer/nativeLang/norwegian.xml | 1 - PowerEditor/installer/nativeLang/nynorsk.xml | 1 - PowerEditor/installer/nativeLang/occitan.xml | 1 - PowerEditor/installer/nativeLang/piglatin.xml | 1 - PowerEditor/installer/nativeLang/polish.xml | 1 - PowerEditor/installer/nativeLang/portuguese.xml | 1 - PowerEditor/installer/nativeLang/punjabi.xml | 1 - PowerEditor/installer/nativeLang/romanian.xml | 1 - PowerEditor/installer/nativeLang/russian.xml | 1 - PowerEditor/installer/nativeLang/sardinian.xml | 1 - PowerEditor/installer/nativeLang/serbian.xml | 1 - PowerEditor/installer/nativeLang/serbianCyrillic.xml | 1 - PowerEditor/installer/nativeLang/sinhala.xml | 1 - PowerEditor/installer/nativeLang/slovak.xml | 1 - PowerEditor/installer/nativeLang/slovenian.xml | 1 - PowerEditor/installer/nativeLang/spanish.xml | 1 - PowerEditor/installer/nativeLang/spanish_ar.xml | 1 - PowerEditor/installer/nativeLang/swedish.xml | 1 - PowerEditor/installer/nativeLang/tagalog.xml | 1 - PowerEditor/installer/nativeLang/taiwaneseMandarin.xml | 1 - PowerEditor/installer/nativeLang/tajikCyrillic.xml | 1 - PowerEditor/installer/nativeLang/tamil.xml | 1 - PowerEditor/installer/nativeLang/tatar.xml | 1 - PowerEditor/installer/nativeLang/telugu.xml | 1 - PowerEditor/installer/nativeLang/thai.xml | 1 - PowerEditor/installer/nativeLang/turkish.xml | 1 - PowerEditor/installer/nativeLang/ukrainian.xml | 1 - PowerEditor/installer/nativeLang/uyghur.xml | 1 - PowerEditor/installer/nativeLang/uzbek.xml | 1 - PowerEditor/installer/nativeLang/uzbekCyrillic.xml | 1 - PowerEditor/installer/nativeLang/venetian.xml | 1 - PowerEditor/installer/nativeLang/vietnamese.xml | 1 - PowerEditor/installer/nativeLang/welsh.xml | 1 - PowerEditor/installer/nativeLang/zulu.xml | 1 - 90 files changed, 92 deletions(-) diff --git a/PowerEditor/installer/nativeLang/abkhazian.xml b/PowerEditor/installer/nativeLang/abkhazian.xml index d7090d92c8f0..f1208252c544 100644 --- a/PowerEditor/installer/nativeLang/abkhazian.xml +++ b/PowerEditor/installer/nativeLang/abkhazian.xml @@ -1133,7 +1133,6 @@ Updated to v8.2.1: - diff --git a/PowerEditor/installer/nativeLang/afrikaans.xml b/PowerEditor/installer/nativeLang/afrikaans.xml index 25757405708c..fadfef73f5fc 100644 --- a/PowerEditor/installer/nativeLang/afrikaans.xml +++ b/PowerEditor/installer/nativeLang/afrikaans.xml @@ -476,7 +476,6 @@ - diff --git a/PowerEditor/installer/nativeLang/albanian.xml b/PowerEditor/installer/nativeLang/albanian.xml index 5f2b5786f41a..061984a0c3f0 100644 --- a/PowerEditor/installer/nativeLang/albanian.xml +++ b/PowerEditor/installer/nativeLang/albanian.xml @@ -754,7 +754,6 @@ - diff --git a/PowerEditor/installer/nativeLang/arabic.xml b/PowerEditor/installer/nativeLang/arabic.xml index fe3f78639ef4..ee78bdc65ec2 100644 --- a/PowerEditor/installer/nativeLang/arabic.xml +++ b/PowerEditor/installer/nativeLang/arabic.xml @@ -870,7 +870,6 @@ - diff --git a/PowerEditor/installer/nativeLang/aragonese.xml b/PowerEditor/installer/nativeLang/aragonese.xml index 406485e04888..a8cf0cff6d38 100644 --- a/PowerEditor/installer/nativeLang/aragonese.xml +++ b/PowerEditor/installer/nativeLang/aragonese.xml @@ -729,7 +729,6 @@ By Chesús D. Trigo [xuxinho7@gmail.com] & softaragones [softaragones@soft - diff --git a/PowerEditor/installer/nativeLang/azerbaijani.xml b/PowerEditor/installer/nativeLang/azerbaijani.xml index efe1be2463dd..b268e99d4958 100644 --- a/PowerEditor/installer/nativeLang/azerbaijani.xml +++ b/PowerEditor/installer/nativeLang/azerbaijani.xml @@ -550,7 +550,6 @@ - diff --git a/PowerEditor/installer/nativeLang/basque.xml b/PowerEditor/installer/nativeLang/basque.xml index 15a1daa14fa0..9226af20c6fe 100644 --- a/PowerEditor/installer/nativeLang/basque.xml +++ b/PowerEditor/installer/nativeLang/basque.xml @@ -1069,7 +1069,6 @@ Zutabe-markatzaile anitz zehaztu ditzakezu zenbakiak zuriuneen bidez banatuta."/ - diff --git a/PowerEditor/installer/nativeLang/belarusian.xml b/PowerEditor/installer/nativeLang/belarusian.xml index dba216e486d3..ee35732a15be 100644 --- a/PowerEditor/installer/nativeLang/belarusian.xml +++ b/PowerEditor/installer/nativeLang/belarusian.xml @@ -1111,7 +1111,6 @@ The comments are here for explanation, it's not necessary to translate them. - diff --git a/PowerEditor/installer/nativeLang/bengali.xml b/PowerEditor/installer/nativeLang/bengali.xml index 08db1db583f1..a3f61b71fedc 100644 --- a/PowerEditor/installer/nativeLang/bengali.xml +++ b/PowerEditor/installer/nativeLang/bengali.xml @@ -722,7 +722,6 @@ - diff --git a/PowerEditor/installer/nativeLang/bosnian.xml b/PowerEditor/installer/nativeLang/bosnian.xml index 5d53c64ba096..c76c74f1c700 100644 --- a/PowerEditor/installer/nativeLang/bosnian.xml +++ b/PowerEditor/installer/nativeLang/bosnian.xml @@ -532,7 +532,6 @@ - diff --git a/PowerEditor/installer/nativeLang/brazilian_portuguese.xml b/PowerEditor/installer/nativeLang/brazilian_portuguese.xml index 1ee5af80a407..74ede6d2b4bf 100644 --- a/PowerEditor/installer/nativeLang/brazilian_portuguese.xml +++ b/PowerEditor/installer/nativeLang/brazilian_portuguese.xml @@ -1216,7 +1216,6 @@ Translation note: - diff --git a/PowerEditor/installer/nativeLang/breton.xml b/PowerEditor/installer/nativeLang/breton.xml index d2535982ba1d..58cba4efa4be 100644 --- a/PowerEditor/installer/nativeLang/breton.xml +++ b/PowerEditor/installer/nativeLang/breton.xml @@ -862,7 +862,6 @@ - diff --git a/PowerEditor/installer/nativeLang/bulgarian.xml b/PowerEditor/installer/nativeLang/bulgarian.xml index 30510b48c463..128e9f04f98c 100644 --- a/PowerEditor/installer/nativeLang/bulgarian.xml +++ b/PowerEditor/installer/nativeLang/bulgarian.xml @@ -1158,7 +1158,6 @@ - diff --git a/PowerEditor/installer/nativeLang/catalan.xml b/PowerEditor/installer/nativeLang/catalan.xml index f17877e02efe..e8446f265e3e 100644 --- a/PowerEditor/installer/nativeLang/catalan.xml +++ b/PowerEditor/installer/nativeLang/catalan.xml @@ -852,7 +852,6 @@ By Hiro5 - diff --git a/PowerEditor/installer/nativeLang/chineseSimplified.xml b/PowerEditor/installer/nativeLang/chineseSimplified.xml index 1fdeb662a3d9..bbdaaa541a5e 100644 --- a/PowerEditor/installer/nativeLang/chineseSimplified.xml +++ b/PowerEditor/installer/nativeLang/chineseSimplified.xml @@ -1203,7 +1203,6 @@ Translation note: - diff --git a/PowerEditor/installer/nativeLang/corsican.xml b/PowerEditor/installer/nativeLang/corsican.xml index 7aac673d3d01..ca21be850cc4 100644 --- a/PowerEditor/installer/nativeLang/corsican.xml +++ b/PowerEditor/installer/nativeLang/corsican.xml @@ -1242,7 +1242,6 @@ Additionnal information about Corsican localization: - diff --git a/PowerEditor/installer/nativeLang/croatian.xml b/PowerEditor/installer/nativeLang/croatian.xml index 1f7166a368be..cfff33ab6855 100644 --- a/PowerEditor/installer/nativeLang/croatian.xml +++ b/PowerEditor/installer/nativeLang/croatian.xml @@ -1227,7 +1227,6 @@ - diff --git a/PowerEditor/installer/nativeLang/czech.xml b/PowerEditor/installer/nativeLang/czech.xml index aae335137d47..1fa7321a2259 100644 --- a/PowerEditor/installer/nativeLang/czech.xml +++ b/PowerEditor/installer/nativeLang/czech.xml @@ -1236,7 +1236,6 @@ - @@ -1272,8 +1271,6 @@ - - diff --git a/PowerEditor/installer/nativeLang/danish.xml b/PowerEditor/installer/nativeLang/danish.xml index 93bab7e06015..49f66dc8f4c5 100644 --- a/PowerEditor/installer/nativeLang/danish.xml +++ b/PowerEditor/installer/nativeLang/danish.xml @@ -1145,7 +1145,6 @@ Brug mellemrum til at angive flere markører."/> - diff --git a/PowerEditor/installer/nativeLang/dutch.xml b/PowerEditor/installer/nativeLang/dutch.xml index 6ea9b32bad1b..35946ce49061 100644 --- a/PowerEditor/installer/nativeLang/dutch.xml +++ b/PowerEditor/installer/nativeLang/dutch.xml @@ -1212,7 +1212,6 @@ Last modified on 2024-06-06 by Thomas De Rocker (RockyTDR). - diff --git a/PowerEditor/installer/nativeLang/english.xml b/PowerEditor/installer/nativeLang/english.xml index 6a3deb8d176b..81948c429b02 100644 --- a/PowerEditor/installer/nativeLang/english.xml +++ b/PowerEditor/installer/nativeLang/english.xml @@ -1218,7 +1218,6 @@ Translation note: - diff --git a/PowerEditor/installer/nativeLang/english_customizable.xml b/PowerEditor/installer/nativeLang/english_customizable.xml index fb18766b5ce6..4731f5955b41 100644 --- a/PowerEditor/installer/nativeLang/english_customizable.xml +++ b/PowerEditor/installer/nativeLang/english_customizable.xml @@ -1216,7 +1216,6 @@ Translation note: - diff --git a/PowerEditor/installer/nativeLang/esperanto.xml b/PowerEditor/installer/nativeLang/esperanto.xml index e7aef7195195..5698135c9580 100644 --- a/PowerEditor/installer/nativeLang/esperanto.xml +++ b/PowerEditor/installer/nativeLang/esperanto.xml @@ -786,7 +786,6 @@ - diff --git a/PowerEditor/installer/nativeLang/estonian.xml b/PowerEditor/installer/nativeLang/estonian.xml index 007dcb497427..46e715e6295f 100644 --- a/PowerEditor/installer/nativeLang/estonian.xml +++ b/PowerEditor/installer/nativeLang/estonian.xml @@ -797,7 +797,6 @@ https://github.com/AndresTraks/ - diff --git a/PowerEditor/installer/nativeLang/extremaduran.xml b/PowerEditor/installer/nativeLang/extremaduran.xml index 2296b23cbbb6..b8aaceb5d3a5 100644 --- a/PowerEditor/installer/nativeLang/extremaduran.xml +++ b/PowerEditor/installer/nativeLang/extremaduran.xml @@ -399,7 +399,6 @@ - diff --git a/PowerEditor/installer/nativeLang/farsi.xml b/PowerEditor/installer/nativeLang/farsi.xml index d9aec461d067..e8b358c50bbb 100644 --- a/PowerEditor/installer/nativeLang/farsi.xml +++ b/PowerEditor/installer/nativeLang/farsi.xml @@ -781,7 +781,6 @@ - diff --git a/PowerEditor/installer/nativeLang/finnish.xml b/PowerEditor/installer/nativeLang/finnish.xml index 3317b53fbcbe..4914c0f62f0e 100644 --- a/PowerEditor/installer/nativeLang/finnish.xml +++ b/PowerEditor/installer/nativeLang/finnish.xml @@ -1099,7 +1099,6 @@ Updated to v8.6 fixed version - diff --git a/PowerEditor/installer/nativeLang/french.xml b/PowerEditor/installer/nativeLang/french.xml index 4404be224d30..71a509a5e4b1 100644 --- a/PowerEditor/installer/nativeLang/french.xml +++ b/PowerEditor/installer/nativeLang/french.xml @@ -1215,7 +1215,6 @@ Translation note: - diff --git a/PowerEditor/installer/nativeLang/friulian.xml b/PowerEditor/installer/nativeLang/friulian.xml index a1b358152aa2..269d1bcd90d1 100644 --- a/PowerEditor/installer/nativeLang/friulian.xml +++ b/PowerEditor/installer/nativeLang/friulian.xml @@ -538,7 +538,6 @@ - diff --git a/PowerEditor/installer/nativeLang/galician.xml b/PowerEditor/installer/nativeLang/galician.xml index 533811617eaa..f5880b9a3f70 100644 --- a/PowerEditor/installer/nativeLang/galician.xml +++ b/PowerEditor/installer/nativeLang/galician.xml @@ -1216,7 +1216,6 @@ Translation note: - diff --git a/PowerEditor/installer/nativeLang/georgian.xml b/PowerEditor/installer/nativeLang/georgian.xml index c6b38195a98b..978adb890ea9 100644 --- a/PowerEditor/installer/nativeLang/georgian.xml +++ b/PowerEditor/installer/nativeLang/georgian.xml @@ -570,7 +570,6 @@ - diff --git a/PowerEditor/installer/nativeLang/german.xml b/PowerEditor/installer/nativeLang/german.xml index 21d0b09f184f..443834ccc81b 100644 --- a/PowerEditor/installer/nativeLang/german.xml +++ b/PowerEditor/installer/nativeLang/german.xml @@ -1226,7 +1226,6 @@ Translation note: - diff --git a/PowerEditor/installer/nativeLang/greek.xml b/PowerEditor/installer/nativeLang/greek.xml index d5c91befb227..a2c64b92806b 100644 --- a/PowerEditor/installer/nativeLang/greek.xml +++ b/PowerEditor/installer/nativeLang/greek.xml @@ -999,7 +999,6 @@ - diff --git a/PowerEditor/installer/nativeLang/gujarati.xml b/PowerEditor/installer/nativeLang/gujarati.xml index 0d010d1fd9a9..45f88eb56d96 100644 --- a/PowerEditor/installer/nativeLang/gujarati.xml +++ b/PowerEditor/installer/nativeLang/gujarati.xml @@ -720,7 +720,6 @@ - diff --git a/PowerEditor/installer/nativeLang/hindi.xml b/PowerEditor/installer/nativeLang/hindi.xml index 6fdd4b4d398d..56dd394c2841 100644 --- a/PowerEditor/installer/nativeLang/hindi.xml +++ b/PowerEditor/installer/nativeLang/hindi.xml @@ -866,7 +866,6 @@ - diff --git a/PowerEditor/installer/nativeLang/hongKongCantonese.xml b/PowerEditor/installer/nativeLang/hongKongCantonese.xml index 37278a2bbbc8..a86d735efd83 100644 --- a/PowerEditor/installer/nativeLang/hongKongCantonese.xml +++ b/PowerEditor/installer/nativeLang/hongKongCantonese.xml @@ -1242,7 +1242,6 @@ - diff --git a/PowerEditor/installer/nativeLang/hungarian.xml b/PowerEditor/installer/nativeLang/hungarian.xml index 92e5dc87f89d..c39e5df65911 100644 --- a/PowerEditor/installer/nativeLang/hungarian.xml +++ b/PowerEditor/installer/nativeLang/hungarian.xml @@ -1082,7 +1082,6 @@ Több margó is megadható, különböző számok használatával szóközzel el - diff --git a/PowerEditor/installer/nativeLang/indonesian.xml b/PowerEditor/installer/nativeLang/indonesian.xml index 015ba5f22978..a54416618d81 100644 --- a/PowerEditor/installer/nativeLang/indonesian.xml +++ b/PowerEditor/installer/nativeLang/indonesian.xml @@ -1136,7 +1136,6 @@ Anda dapat mendefinisikan beberapa penanda kolom dengan menggunakan spasi putih - diff --git a/PowerEditor/installer/nativeLang/irish.xml b/PowerEditor/installer/nativeLang/irish.xml index bc7f31b7f8f8..bc739ec3bd33 100644 --- a/PowerEditor/installer/nativeLang/irish.xml +++ b/PowerEditor/installer/nativeLang/irish.xml @@ -934,7 +934,6 @@ You can define several column markers by using white space to separate the diffe - diff --git a/PowerEditor/installer/nativeLang/italian.xml b/PowerEditor/installer/nativeLang/italian.xml index 614d72f2b88f..6f06e3d563fd 100644 --- a/PowerEditor/installer/nativeLang/italian.xml +++ b/PowerEditor/installer/nativeLang/italian.xml @@ -1221,7 +1221,6 @@ Translation note: - diff --git a/PowerEditor/installer/nativeLang/japanese.xml b/PowerEditor/installer/nativeLang/japanese.xml index 2e65cf02ff29..402754eeecc4 100644 --- a/PowerEditor/installer/nativeLang/japanese.xml +++ b/PowerEditor/installer/nativeLang/japanese.xml @@ -1222,7 +1222,6 @@ Translation note: - diff --git a/PowerEditor/installer/nativeLang/kabyle.xml b/PowerEditor/installer/nativeLang/kabyle.xml index f966387cc431..766b976f14de 100644 --- a/PowerEditor/installer/nativeLang/kabyle.xml +++ b/PowerEditor/installer/nativeLang/kabyle.xml @@ -715,7 +715,6 @@ - diff --git a/PowerEditor/installer/nativeLang/kannada.xml b/PowerEditor/installer/nativeLang/kannada.xml index fc94a943c9a4..c62cc6c29314 100644 --- a/PowerEditor/installer/nativeLang/kannada.xml +++ b/PowerEditor/installer/nativeLang/kannada.xml @@ -726,7 +726,6 @@ - diff --git a/PowerEditor/installer/nativeLang/kazakh.xml b/PowerEditor/installer/nativeLang/kazakh.xml index 995f688b3c22..a5920e1158e8 100644 --- a/PowerEditor/installer/nativeLang/kazakh.xml +++ b/PowerEditor/installer/nativeLang/kazakh.xml @@ -478,7 +478,6 @@ - diff --git a/PowerEditor/installer/nativeLang/korean.xml b/PowerEditor/installer/nativeLang/korean.xml index 253a1638cb83..8fa2e3ba789e 100644 --- a/PowerEditor/installer/nativeLang/korean.xml +++ b/PowerEditor/installer/nativeLang/korean.xml @@ -1218,7 +1218,6 @@ Translation note: - diff --git a/PowerEditor/installer/nativeLang/kurdish.xml b/PowerEditor/installer/nativeLang/kurdish.xml index 99ec1921a629..036d72eb2ebb 100644 --- a/PowerEditor/installer/nativeLang/kurdish.xml +++ b/PowerEditor/installer/nativeLang/kurdish.xml @@ -801,7 +801,6 @@ - diff --git a/PowerEditor/installer/nativeLang/kyrgyz.xml b/PowerEditor/installer/nativeLang/kyrgyz.xml index e02a5a250a2f..b7b2a1b4f446 100644 --- a/PowerEditor/installer/nativeLang/kyrgyz.xml +++ b/PowerEditor/installer/nativeLang/kyrgyz.xml @@ -520,7 +520,6 @@ - diff --git a/PowerEditor/installer/nativeLang/latvian.xml b/PowerEditor/installer/nativeLang/latvian.xml index 391f44114182..9ce2eef1630a 100644 --- a/PowerEditor/installer/nativeLang/latvian.xml +++ b/PowerEditor/installer/nativeLang/latvian.xml @@ -741,7 +741,6 @@ - diff --git a/PowerEditor/installer/nativeLang/ligurian.xml b/PowerEditor/installer/nativeLang/ligurian.xml index 5cf48eb6377e..09b632885ee7 100644 --- a/PowerEditor/installer/nativeLang/ligurian.xml +++ b/PowerEditor/installer/nativeLang/ligurian.xml @@ -520,7 +520,6 @@ - diff --git a/PowerEditor/installer/nativeLang/lithuanian.xml b/PowerEditor/installer/nativeLang/lithuanian.xml index 9bae518f0a97..4ff63a67fb7c 100644 --- a/PowerEditor/installer/nativeLang/lithuanian.xml +++ b/PowerEditor/installer/nativeLang/lithuanian.xml @@ -827,7 +827,6 @@ - diff --git a/PowerEditor/installer/nativeLang/luxembourgish.xml b/PowerEditor/installer/nativeLang/luxembourgish.xml index 44cc1459f90c..0bb3654a5a4a 100644 --- a/PowerEditor/installer/nativeLang/luxembourgish.xml +++ b/PowerEditor/installer/nativeLang/luxembourgish.xml @@ -412,7 +412,6 @@ - diff --git a/PowerEditor/installer/nativeLang/macedonian.xml b/PowerEditor/installer/nativeLang/macedonian.xml index 93c3ee8585d8..0cc15a8a0403 100644 --- a/PowerEditor/installer/nativeLang/macedonian.xml +++ b/PowerEditor/installer/nativeLang/macedonian.xml @@ -476,7 +476,6 @@ - diff --git a/PowerEditor/installer/nativeLang/malay.xml b/PowerEditor/installer/nativeLang/malay.xml index c5986cb859e1..0bab476801fe 100644 --- a/PowerEditor/installer/nativeLang/malay.xml +++ b/PowerEditor/installer/nativeLang/malay.xml @@ -432,7 +432,6 @@ Desc: Malay translation for Notepad++ - diff --git a/PowerEditor/installer/nativeLang/marathi.xml b/PowerEditor/installer/nativeLang/marathi.xml index ee88025114ce..1d015e40ca65 100644 --- a/PowerEditor/installer/nativeLang/marathi.xml +++ b/PowerEditor/installer/nativeLang/marathi.xml @@ -550,7 +550,6 @@ - diff --git a/PowerEditor/installer/nativeLang/mongolian.xml b/PowerEditor/installer/nativeLang/mongolian.xml index a2e58c0e8a5f..4565f5e81ff2 100644 --- a/PowerEditor/installer/nativeLang/mongolian.xml +++ b/PowerEditor/installer/nativeLang/mongolian.xml @@ -726,7 +726,6 @@ - diff --git a/PowerEditor/installer/nativeLang/nepali.xml b/PowerEditor/installer/nativeLang/nepali.xml index 528d0a53108b..1a91d10e8c39 100644 --- a/PowerEditor/installer/nativeLang/nepali.xml +++ b/PowerEditor/installer/nativeLang/nepali.xml @@ -868,7 +868,6 @@ - diff --git a/PowerEditor/installer/nativeLang/norwegian.xml b/PowerEditor/installer/nativeLang/norwegian.xml index 127d45090a9f..a479f34abaf4 100644 --- a/PowerEditor/installer/nativeLang/norwegian.xml +++ b/PowerEditor/installer/nativeLang/norwegian.xml @@ -1209,7 +1209,6 @@ Translation note: - diff --git a/PowerEditor/installer/nativeLang/nynorsk.xml b/PowerEditor/installer/nativeLang/nynorsk.xml index 054c92c0e12d..de71d773e35b 100644 --- a/PowerEditor/installer/nativeLang/nynorsk.xml +++ b/PowerEditor/installer/nativeLang/nynorsk.xml @@ -587,7 +587,6 @@ - diff --git a/PowerEditor/installer/nativeLang/occitan.xml b/PowerEditor/installer/nativeLang/occitan.xml index adca139d1fff..40c73f723b28 100644 --- a/PowerEditor/installer/nativeLang/occitan.xml +++ b/PowerEditor/installer/nativeLang/occitan.xml @@ -837,7 +837,6 @@ - diff --git a/PowerEditor/installer/nativeLang/piglatin.xml b/PowerEditor/installer/nativeLang/piglatin.xml index bf44397da04d..4c1177c756ce 100644 --- a/PowerEditor/installer/nativeLang/piglatin.xml +++ b/PowerEditor/installer/nativeLang/piglatin.xml @@ -845,7 +845,6 @@ - diff --git a/PowerEditor/installer/nativeLang/polish.xml b/PowerEditor/installer/nativeLang/polish.xml index adcb5340e929..474e7caf5a08 100644 --- a/PowerEditor/installer/nativeLang/polish.xml +++ b/PowerEditor/installer/nativeLang/polish.xml @@ -1227,7 +1227,6 @@ Translation note: - diff --git a/PowerEditor/installer/nativeLang/portuguese.xml b/PowerEditor/installer/nativeLang/portuguese.xml index 385c4fed9a2d..593ef0c0d738 100644 --- a/PowerEditor/installer/nativeLang/portuguese.xml +++ b/PowerEditor/installer/nativeLang/portuguese.xml @@ -1217,7 +1217,6 @@ Nota de tradução: - diff --git a/PowerEditor/installer/nativeLang/punjabi.xml b/PowerEditor/installer/nativeLang/punjabi.xml index d702bd18479d..958e85df196a 100644 --- a/PowerEditor/installer/nativeLang/punjabi.xml +++ b/PowerEditor/installer/nativeLang/punjabi.xml @@ -756,7 +756,6 @@ - diff --git a/PowerEditor/installer/nativeLang/romanian.xml b/PowerEditor/installer/nativeLang/romanian.xml index 2f27777f71f9..d0c433deacef 100644 --- a/PowerEditor/installer/nativeLang/romanian.xml +++ b/PowerEditor/installer/nativeLang/romanian.xml @@ -1220,7 +1220,6 @@ - diff --git a/PowerEditor/installer/nativeLang/russian.xml b/PowerEditor/installer/nativeLang/russian.xml index 94f8e8062669..dc59134194f4 100644 --- a/PowerEditor/installer/nativeLang/russian.xml +++ b/PowerEditor/installer/nativeLang/russian.xml @@ -1355,7 +1355,6 @@ Updated to v8.7.1: - diff --git a/PowerEditor/installer/nativeLang/sardinian.xml b/PowerEditor/installer/nativeLang/sardinian.xml index a83dc87e603d..03ce3536e24e 100644 --- a/PowerEditor/installer/nativeLang/sardinian.xml +++ b/PowerEditor/installer/nativeLang/sardinian.xml @@ -573,7 +573,6 @@ - diff --git a/PowerEditor/installer/nativeLang/serbian.xml b/PowerEditor/installer/nativeLang/serbian.xml index 5306ed61d90c..3007c9b382b3 100644 --- a/PowerEditor/installer/nativeLang/serbian.xml +++ b/PowerEditor/installer/nativeLang/serbian.xml @@ -304,7 +304,6 @@ - diff --git a/PowerEditor/installer/nativeLang/serbianCyrillic.xml b/PowerEditor/installer/nativeLang/serbianCyrillic.xml index b081153f4319..44a101489438 100644 --- a/PowerEditor/installer/nativeLang/serbianCyrillic.xml +++ b/PowerEditor/installer/nativeLang/serbianCyrillic.xml @@ -571,7 +571,6 @@ - diff --git a/PowerEditor/installer/nativeLang/sinhala.xml b/PowerEditor/installer/nativeLang/sinhala.xml index 7933ad9bd51d..d741e3059d4e 100644 --- a/PowerEditor/installer/nativeLang/sinhala.xml +++ b/PowerEditor/installer/nativeLang/sinhala.xml @@ -624,7 +624,6 @@ - diff --git a/PowerEditor/installer/nativeLang/slovak.xml b/PowerEditor/installer/nativeLang/slovak.xml index 630aabf223bd..961ad6de35c2 100644 --- a/PowerEditor/installer/nativeLang/slovak.xml +++ b/PowerEditor/installer/nativeLang/slovak.xml @@ -1214,7 +1214,6 @@ - diff --git a/PowerEditor/installer/nativeLang/slovenian.xml b/PowerEditor/installer/nativeLang/slovenian.xml index 93b4a020ad00..89c3db5d64be 100644 --- a/PowerEditor/installer/nativeLang/slovenian.xml +++ b/PowerEditor/installer/nativeLang/slovenian.xml @@ -1203,7 +1203,6 @@ - diff --git a/PowerEditor/installer/nativeLang/spanish.xml b/PowerEditor/installer/nativeLang/spanish.xml index d18ebdaf87be..d9c01d7dbd59 100644 --- a/PowerEditor/installer/nativeLang/spanish.xml +++ b/PowerEditor/installer/nativeLang/spanish.xml @@ -1216,7 +1216,6 @@ Translation note: - diff --git a/PowerEditor/installer/nativeLang/spanish_ar.xml b/PowerEditor/installer/nativeLang/spanish_ar.xml index 20431364e537..dcb303d23988 100644 --- a/PowerEditor/installer/nativeLang/spanish_ar.xml +++ b/PowerEditor/installer/nativeLang/spanish_ar.xml @@ -709,7 +709,6 @@ - diff --git a/PowerEditor/installer/nativeLang/swedish.xml b/PowerEditor/installer/nativeLang/swedish.xml index 5dfb6641328e..bd625263509f 100644 --- a/PowerEditor/installer/nativeLang/swedish.xml +++ b/PowerEditor/installer/nativeLang/swedish.xml @@ -1216,7 +1216,6 @@ Translation note: - diff --git a/PowerEditor/installer/nativeLang/tagalog.xml b/PowerEditor/installer/nativeLang/tagalog.xml index 7501df35f70a..2029909200ce 100644 --- a/PowerEditor/installer/nativeLang/tagalog.xml +++ b/PowerEditor/installer/nativeLang/tagalog.xml @@ -476,7 +476,6 @@ - diff --git a/PowerEditor/installer/nativeLang/taiwaneseMandarin.xml b/PowerEditor/installer/nativeLang/taiwaneseMandarin.xml index c3a425c9407d..01a20f8a9064 100644 --- a/PowerEditor/installer/nativeLang/taiwaneseMandarin.xml +++ b/PowerEditor/installer/nativeLang/taiwaneseMandarin.xml @@ -1171,7 +1171,6 @@ - diff --git a/PowerEditor/installer/nativeLang/tajikCyrillic.xml b/PowerEditor/installer/nativeLang/tajikCyrillic.xml index 23af37a3429f..2853a2764777 100644 --- a/PowerEditor/installer/nativeLang/tajikCyrillic.xml +++ b/PowerEditor/installer/nativeLang/tajikCyrillic.xml @@ -747,7 +747,6 @@ - diff --git a/PowerEditor/installer/nativeLang/tamil.xml b/PowerEditor/installer/nativeLang/tamil.xml index b5c88281fe4a..858e6ed32148 100644 --- a/PowerEditor/installer/nativeLang/tamil.xml +++ b/PowerEditor/installer/nativeLang/tamil.xml @@ -1048,7 +1048,6 @@ - diff --git a/PowerEditor/installer/nativeLang/tatar.xml b/PowerEditor/installer/nativeLang/tatar.xml index fb0b69558b81..1e57a63236e3 100644 --- a/PowerEditor/installer/nativeLang/tatar.xml +++ b/PowerEditor/installer/nativeLang/tatar.xml @@ -817,7 +817,6 @@ - diff --git a/PowerEditor/installer/nativeLang/telugu.xml b/PowerEditor/installer/nativeLang/telugu.xml index 9fd8a396abd7..47e6fd365034 100644 --- a/PowerEditor/installer/nativeLang/telugu.xml +++ b/PowerEditor/installer/nativeLang/telugu.xml @@ -524,7 +524,6 @@ - diff --git a/PowerEditor/installer/nativeLang/thai.xml b/PowerEditor/installer/nativeLang/thai.xml index 41d00d7c1700..d5b63efdda4f 100644 --- a/PowerEditor/installer/nativeLang/thai.xml +++ b/PowerEditor/installer/nativeLang/thai.xml @@ -544,7 +544,6 @@ - diff --git a/PowerEditor/installer/nativeLang/turkish.xml b/PowerEditor/installer/nativeLang/turkish.xml index 9a1f9192d83d..2006c3917691 100644 --- a/PowerEditor/installer/nativeLang/turkish.xml +++ b/PowerEditor/installer/nativeLang/turkish.xml @@ -1219,7 +1219,6 @@ - diff --git a/PowerEditor/installer/nativeLang/ukrainian.xml b/PowerEditor/installer/nativeLang/ukrainian.xml index 844a60b3e368..329c4e78aa7f 100644 --- a/PowerEditor/installer/nativeLang/ukrainian.xml +++ b/PowerEditor/installer/nativeLang/ukrainian.xml @@ -1215,7 +1215,6 @@ Translation note: - diff --git a/PowerEditor/installer/nativeLang/uyghur.xml b/PowerEditor/installer/nativeLang/uyghur.xml index 146e9167f890..2d259d7c1259 100644 --- a/PowerEditor/installer/nativeLang/uyghur.xml +++ b/PowerEditor/installer/nativeLang/uyghur.xml @@ -553,7 +553,6 @@ - diff --git a/PowerEditor/installer/nativeLang/uzbek.xml b/PowerEditor/installer/nativeLang/uzbek.xml index d3b6c5ebc9fe..b12818b824cc 100644 --- a/PowerEditor/installer/nativeLang/uzbek.xml +++ b/PowerEditor/installer/nativeLang/uzbek.xml @@ -988,7 +988,6 @@ Siz bir necha marker ustunlarini probellar orqali belgilashingiz mumkin."/> - diff --git a/PowerEditor/installer/nativeLang/uzbekCyrillic.xml b/PowerEditor/installer/nativeLang/uzbekCyrillic.xml index a8831e40aa37..10b6c7049621 100644 --- a/PowerEditor/installer/nativeLang/uzbekCyrillic.xml +++ b/PowerEditor/installer/nativeLang/uzbekCyrillic.xml @@ -481,7 +481,6 @@ - diff --git a/PowerEditor/installer/nativeLang/venetian.xml b/PowerEditor/installer/nativeLang/venetian.xml index 819b84dbb9ad..e8ff7d310e4a 100644 --- a/PowerEditor/installer/nativeLang/venetian.xml +++ b/PowerEditor/installer/nativeLang/venetian.xml @@ -1221,7 +1221,6 @@ Translation note: - diff --git a/PowerEditor/installer/nativeLang/vietnamese.xml b/PowerEditor/installer/nativeLang/vietnamese.xml index 612ec9d4b029..b8d697b2e189 100644 --- a/PowerEditor/installer/nativeLang/vietnamese.xml +++ b/PowerEditor/installer/nativeLang/vietnamese.xml @@ -1110,7 +1110,6 @@ Bạn có thể định nghĩa một vài mốc đánh dấu bằng cách sử d - diff --git a/PowerEditor/installer/nativeLang/welsh.xml b/PowerEditor/installer/nativeLang/welsh.xml index d4a7bb9b36f4..8697705c4d98 100644 --- a/PowerEditor/installer/nativeLang/welsh.xml +++ b/PowerEditor/installer/nativeLang/welsh.xml @@ -725,7 +725,6 @@ gan/by Aled Powell - diff --git a/PowerEditor/installer/nativeLang/zulu.xml b/PowerEditor/installer/nativeLang/zulu.xml index e183d717dde6..62413374c938 100644 --- a/PowerEditor/installer/nativeLang/zulu.xml +++ b/PowerEditor/installer/nativeLang/zulu.xml @@ -842,7 +842,6 @@ - From c5094fee8b08e306fb030c14b265edee5c2beff4 Mon Sep 17 00:00:00 2001 From: Don Ho Date: Sat, 9 Nov 2024 17:59:57 +0100 Subject: [PATCH 03/37] Refactoring to move the message definitions to the right place Move the message definitions of toolbar & tabbar to the right place. Close #15775 --- PowerEditor/src/Notepad_plus.cpp | 3 +- PowerEditor/src/Notepad_plus_Window.cpp | 2 +- PowerEditor/src/NppBigSwitch.cpp | 177 +++++++++++++++++- PowerEditor/src/NppCommands.cpp | 174 ----------------- PowerEditor/src/NppIO.cpp | 2 +- .../WinControls/Preference/preferenceDlg.cpp | 38 ++-- PowerEditor/src/WinControls/TabBar/TabBar.cpp | 4 +- PowerEditor/src/menuCmdID.h | 28 +-- PowerEditor/src/resource.h | 18 +- 9 files changed, 230 insertions(+), 216 deletions(-) diff --git a/PowerEditor/src/Notepad_plus.cpp b/PowerEditor/src/Notepad_plus.cpp index 919e4c0d0b7d..eb82b3decc4a 100644 --- a/PowerEditor/src/Notepad_plus.cpp +++ b/PowerEditor/src/Notepad_plus.cpp @@ -6685,7 +6685,8 @@ void Notepad_plus::notifyBufferChanged(Buffer * buffer, int mask) if (mask & (BufferChangeDirty|BufferChangeFilename)) { if (mask & BufferChangeFilename) - command(IDM_VIEW_REFRESHTABAR); + ::SendMessage(_pPublicInterface->getHSelf(), NPPM_INTERNAL_REFRESHTABAR, 0, 0); + checkDocState(); setTitle(); wstring dir(buffer->getFullPathName()); diff --git a/PowerEditor/src/Notepad_plus_Window.cpp b/PowerEditor/src/Notepad_plus_Window.cpp index 7b006fff2612..4c2f5cc0682d 100644 --- a/PowerEditor/src/Notepad_plus_Window.cpp +++ b/PowerEditor/src/Notepad_plus_Window.cpp @@ -146,7 +146,7 @@ void Notepad_plus_Window::init(HINSTANCE hInst, HWND parent, const wchar_t *cmdL } if ((nppGUI._tabStatus & TAB_MULTILINE) != 0) - ::SendMessage(_hSelf, WM_COMMAND, IDM_VIEW_DRAWTABBAR_MULTILINE, 0); + ::SendMessage(_hSelf, NPPM_INTERNAL_MULTILINETABBAR, 0, 0); if (!nppGUI._menuBarShow) ::SetMenu(_hSelf, NULL); diff --git a/PowerEditor/src/NppBigSwitch.cpp b/PowerEditor/src/NppBigSwitch.cpp index 0d3cc1e1ed62..2ce2c1bce028 100644 --- a/PowerEditor/src/NppBigSwitch.cpp +++ b/PowerEditor/src/NppBigSwitch.cpp @@ -3695,7 +3695,7 @@ LRESULT Notepad_plus::process(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa _subDocTab.setCloseBtnImageList(); _mainDocTab.setPinBtnImageList(); _subDocTab.setPinBtnImageList(); - ::SendMessage(_pPublicInterface->getHSelf(), WM_COMMAND, IDM_VIEW_REDUCETABBAR, 0); + ::SendMessage(_pPublicInterface->getHSelf(), NPPM_INTERNAL_REDUCETABBAR, 0, 0); changeDocumentListIconSet(false); @@ -3781,7 +3781,180 @@ LRESULT Notepad_plus::process(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa return fileName.length(); } - case NPPM_INTERNAL_DRAWTABBARPINBOTTUN: + case NPPM_INTERNAL_TOOLBARREDUCE: + { + toolBarStatusType state = _toolBar.getState(); + + if (state != TB_SMALL) + { + _toolBar.reduce(); + } + } + break; + + case NPPM_INTERNAL_TOOLBARENLARGE: + { + toolBarStatusType state = _toolBar.getState(); + + if (state != TB_LARGE) + { + _toolBar.enlarge(); + } + } + break; + + case NPPM_INTERNAL_TOOLBARREDUCESET2: + { + toolBarStatusType state = _toolBar.getState(); + + if (state != TB_SMALL2) + { + _toolBar.reduceToSet2(); + } + } + break; + + case NPPM_INTERNAL_TOOLBARENLARGESET2: + { + toolBarStatusType state = _toolBar.getState(); + + if (state != TB_LARGE2) + { + _toolBar.enlargeToSet2(); + } + } + break; + + case NPPM_INTERNAL_TOOLBARSTANDARD: + { + toolBarStatusType state = _toolBar.getState(); + + if (state != TB_STANDARD) + { + _toolBar.setToBmpIcons(); + } + } + break; + + case NPPM_INTERNAL_REDUCETABBAR: + { + bool isReduceed = TabBarPlus::isReduced(); + + //Resize the tab height + int tabDpiDynamicalWidth = _mainDocTab.dpiManager().scale(TabBarPlus::drawTabCloseButton() ? g_TabWidthCloseBtn : g_TabWidth); + int tabDpiDynamicalHeight = _mainDocTab.dpiManager().scale(isReduceed ? g_TabHeight : g_TabHeightLarge); + + TabCtrl_SetPadding(_mainDocTab.getHSelf(), _mainDocTab.dpiManager().scale(TabBarPlus::drawTabCloseButton() ? 10 : 6), 0); + TabCtrl_SetPadding(_subDocTab.getHSelf(), _subDocTab.dpiManager().scale(TabBarPlus::drawTabCloseButton() ? 10 : 6), 0); + + TabCtrl_SetItemSize(_mainDocTab.getHSelf(), tabDpiDynamicalWidth, tabDpiDynamicalHeight); + TabCtrl_SetItemSize(_subDocTab.getHSelf(), tabDpiDynamicalWidth, tabDpiDynamicalHeight); + + //change the font + const auto& hf = _mainDocTab.getFont(isReduceed); + if (hf) + { + ::SendMessage(_mainDocTab.getHSelf(), WM_SETFONT, reinterpret_cast(hf), MAKELPARAM(TRUE, 0)); + ::SendMessage(_subDocTab.getHSelf(), WM_SETFONT, reinterpret_cast(hf), MAKELPARAM(TRUE, 0)); + } + + ::SendMessage(_pPublicInterface->getHSelf(), WM_SIZE, 0, 0); + break; + } + + case NPPM_INTERNAL_REFRESHTABAR: + { + ::InvalidateRect(_mainDocTab.getHSelf(), NULL, TRUE); + ::InvalidateRect(_subDocTab.getHSelf(), NULL, TRUE); + + break; + } + case NPPM_INTERNAL_LOCKTABBAR: + { + bool isDrag = TabBarPlus::doDragNDropOrNot(); + TabBarPlus::doDragNDrop(!isDrag); + break; + } + + + case NPPM_INTERNAL_DRAWINACIVETAB: + { + TabBarPlus::setDrawInactiveTab(!TabBarPlus::drawInactiveTab(), &_mainDocTab); + break; + } + case NPPM_INTERNAL_DRAWTABTOPBAR: + { + TabBarPlus::setDrawTopBar(!TabBarPlus::drawTopBar(), &_mainDocTab); + break; + } + + case NPPM_INTERNAL_TABDBCLK2CLOSE: + { + TabBarPlus::setDbClk2Close(!TabBarPlus::isDbClk2Close()); + break; + } + + case NPPM_INTERNAL_VERTICALTABBAR: + { + TabBarPlus::setVertical(!TabBarPlus::isVertical()); + ::SendMessage(_pPublicInterface->getHSelf(), WM_SIZE, 0, 0); + break; + } + + case NPPM_INTERNAL_MULTILINETABBAR: + { + TabBarPlus::setMultiLine(!TabBarPlus::isMultiLine()); + ::SendMessage(_pPublicInterface->getHSelf(), WM_SIZE, 0, 0); + break; + } + + case NPPM_INTERNAL_DRAWTABBARCLOSEBUTTON: + { + TabBarPlus::setDrawTabCloseButton(!TabBarPlus::drawTabCloseButton(), &_mainDocTab); + + bool drawTabPinButton = TabBarPlus::drawTabPinButton(); + bool drawTabCloseButton = TabBarPlus::drawTabCloseButton(); + + if (drawTabCloseButton && drawTabPinButton) + { + _mainDocTab.setTabCloseButtonOrder(0); + _mainDocTab.setTabPinButtonOrder(1); + _subDocTab.setTabCloseButtonOrder(0); + _subDocTab.setTabPinButtonOrder(1); + } + else if (!drawTabCloseButton && drawTabPinButton) + { + _mainDocTab.setTabCloseButtonOrder(-1); + _mainDocTab.setTabPinButtonOrder(0); + _subDocTab.setTabCloseButtonOrder(-1); + _subDocTab.setTabPinButtonOrder(0); + } + else if (drawTabCloseButton && !drawTabPinButton) + { + _mainDocTab.setTabCloseButtonOrder(0); + _mainDocTab.setTabPinButtonOrder(-1); + _subDocTab.setTabCloseButtonOrder(0); + _subDocTab.setTabPinButtonOrder(-1); + } + else //if (!drawTabCloseButton && !drawTabPinButton) + { + _mainDocTab.setTabCloseButtonOrder(-1); + _mainDocTab.setTabPinButtonOrder(-1); + _subDocTab.setTabCloseButtonOrder(-1); + _subDocTab.setTabPinButtonOrder(-1); + } + + // This part is just for updating (redraw) the tabs + int tabDpiDynamicalHeight = _mainDocTab.dpiManager().scale(TabBarPlus::isReduced() ? g_TabHeight : g_TabHeightLarge); + int tabDpiDynamicalWidth = _mainDocTab.dpiManager().scale(TabBarPlus::drawTabCloseButton() ? g_TabWidthCloseBtn : g_TabWidth); + TabCtrl_SetItemSize(_mainDocTab.getHSelf(), tabDpiDynamicalWidth, tabDpiDynamicalHeight); + TabCtrl_SetItemSize(_subDocTab.getHSelf(), tabDpiDynamicalWidth, tabDpiDynamicalHeight); + + ::SendMessage(_pPublicInterface->getHSelf(), WM_SIZE, 0, 0); + break; + } + + case NPPM_INTERNAL_DRAWTABBARPINBUTTON: { TabBarPlus::setDrawTabPinButton(!TabBarPlus::drawTabPinButton(), &_mainDocTab); diff --git a/PowerEditor/src/NppCommands.cpp b/PowerEditor/src/NppCommands.cpp index 38d71d0e8544..d7cf45af3fee 100644 --- a/PowerEditor/src/NppCommands.cpp +++ b/PowerEditor/src/NppCommands.cpp @@ -2239,180 +2239,6 @@ void Notepad_plus::command(int id) _isFolding = false; break; - - case IDM_VIEW_TOOLBAR_REDUCE: - { - toolBarStatusType state = _toolBar.getState(); - - if (state != TB_SMALL) - { - _toolBar.reduce(); - } - } - break; - - case IDM_VIEW_TOOLBAR_ENLARGE: - { - toolBarStatusType state = _toolBar.getState(); - - if (state != TB_LARGE) - { - _toolBar.enlarge(); - } - } - break; - - case IDM_VIEW_TOOLBAR_REDUCE_SET2: - { - toolBarStatusType state = _toolBar.getState(); - - if (state != TB_SMALL2) - { - _toolBar.reduceToSet2(); - } - } - break; - - case IDM_VIEW_TOOLBAR_ENLARGE_SET2: - { - toolBarStatusType state = _toolBar.getState(); - - if (state != TB_LARGE2) - { - _toolBar.enlargeToSet2(); - } - } - break; - - case IDM_VIEW_TOOLBAR_STANDARD: - { - toolBarStatusType state = _toolBar.getState(); - - if (state != TB_STANDARD) - { - _toolBar.setToBmpIcons(); - } - } - break; - - case IDM_VIEW_REDUCETABBAR: - { - bool isReduceed = TabBarPlus::isReduced(); - - //Resize the tab height - int tabDpiDynamicalWidth = _mainDocTab.dpiManager().scale(TabBarPlus::drawTabCloseButton() ? g_TabWidthCloseBtn : g_TabWidth); - int tabDpiDynamicalHeight = _mainDocTab.dpiManager().scale(isReduceed ? g_TabHeight : g_TabHeightLarge); - - TabCtrl_SetPadding(_mainDocTab.getHSelf(), _mainDocTab.dpiManager().scale(TabBarPlus::drawTabCloseButton() ? 10 : 6), 0); - TabCtrl_SetPadding(_subDocTab.getHSelf(), _subDocTab.dpiManager().scale(TabBarPlus::drawTabCloseButton() ? 10 : 6), 0); - - TabCtrl_SetItemSize(_mainDocTab.getHSelf(), tabDpiDynamicalWidth, tabDpiDynamicalHeight); - TabCtrl_SetItemSize(_subDocTab.getHSelf(), tabDpiDynamicalWidth, tabDpiDynamicalHeight); - - //change the font - const auto& hf = _mainDocTab.getFont(isReduceed); - if (hf) - { - ::SendMessage(_mainDocTab.getHSelf(), WM_SETFONT, reinterpret_cast(hf), MAKELPARAM(TRUE, 0)); - ::SendMessage(_subDocTab.getHSelf(), WM_SETFONT, reinterpret_cast(hf), MAKELPARAM(TRUE, 0)); - } - - ::SendMessage(_pPublicInterface->getHSelf(), WM_SIZE, 0, 0); - break; - } - - case IDM_VIEW_REFRESHTABAR : - { - ::InvalidateRect(_mainDocTab.getHSelf(), NULL, TRUE); - ::InvalidateRect(_subDocTab.getHSelf(), NULL, TRUE); - - break; - } - case IDM_VIEW_LOCKTABBAR: - { - bool isDrag = TabBarPlus::doDragNDropOrNot(); - TabBarPlus::doDragNDrop(!isDrag); - break; - } - - - case IDM_VIEW_DRAWTABBAR_INACIVETAB: - { - TabBarPlus::setDrawInactiveTab(!TabBarPlus::drawInactiveTab(), &_mainDocTab); - break; - } - case IDM_VIEW_DRAWTABBAR_TOPBAR: - { - TabBarPlus::setDrawTopBar(!TabBarPlus::drawTopBar(), &_mainDocTab); - break; - } - - case IDM_VIEW_DRAWTABBAR_CLOSEBOTTUN: - { - TabBarPlus::setDrawTabCloseButton(!TabBarPlus::drawTabCloseButton(), &_mainDocTab); - - bool drawTabPinButton = TabBarPlus::drawTabPinButton(); - bool drawTabCloseButton = TabBarPlus::drawTabCloseButton(); - - if (drawTabCloseButton && drawTabPinButton) - { - _mainDocTab.setTabCloseButtonOrder(0); - _mainDocTab.setTabPinButtonOrder(1); - _subDocTab.setTabCloseButtonOrder(0); - _subDocTab.setTabPinButtonOrder(1); - } - else if (!drawTabCloseButton && drawTabPinButton) - { - _mainDocTab.setTabCloseButtonOrder(-1); - _mainDocTab.setTabPinButtonOrder(0); - _subDocTab.setTabCloseButtonOrder(-1); - _subDocTab.setTabPinButtonOrder(0); - } - else if (drawTabCloseButton && !drawTabPinButton) - { - _mainDocTab.setTabCloseButtonOrder(0); - _mainDocTab.setTabPinButtonOrder(-1); - _subDocTab.setTabCloseButtonOrder(0); - _subDocTab.setTabPinButtonOrder(-1); - } - else //if (!drawTabCloseButton && !drawTabPinButton) - { - _mainDocTab.setTabCloseButtonOrder(-1); - _mainDocTab.setTabPinButtonOrder(-1); - _subDocTab.setTabCloseButtonOrder(-1); - _subDocTab.setTabPinButtonOrder(-1); - } - - // This part is just for updating (redraw) the tabs - int tabDpiDynamicalHeight = _mainDocTab.dpiManager().scale(TabBarPlus::isReduced() ? g_TabHeight : g_TabHeightLarge); - int tabDpiDynamicalWidth = _mainDocTab.dpiManager().scale(TabBarPlus::drawTabCloseButton() ? g_TabWidthCloseBtn : g_TabWidth); - TabCtrl_SetItemSize(_mainDocTab.getHSelf(), tabDpiDynamicalWidth, tabDpiDynamicalHeight); - TabCtrl_SetItemSize(_subDocTab.getHSelf(), tabDpiDynamicalWidth, tabDpiDynamicalHeight); - - ::SendMessage(_pPublicInterface->getHSelf(), WM_SIZE, 0, 0); - break; - } - - case IDM_VIEW_DRAWTABBAR_DBCLK2CLOSE : - { - TabBarPlus::setDbClk2Close(!TabBarPlus::isDbClk2Close()); - break; - } - - case IDM_VIEW_DRAWTABBAR_VERTICAL : - { - TabBarPlus::setVertical(!TabBarPlus::isVertical()); - ::SendMessage(_pPublicInterface->getHSelf(), WM_SIZE, 0, 0); - break; - } - - case IDM_VIEW_DRAWTABBAR_MULTILINE : - { - TabBarPlus::setMultiLine(!TabBarPlus::isMultiLine()); - ::SendMessage(_pPublicInterface->getHSelf(), WM_SIZE, 0, 0); - break; - } - case IDM_VIEW_FULLSCREENTOGGLE: { if (!_beforeSpecialView._isDistractionFree) diff --git a/PowerEditor/src/NppIO.cpp b/PowerEditor/src/NppIO.cpp index da669484b89c..64336e137df4 100644 --- a/PowerEditor/src/NppIO.cpp +++ b/PowerEditor/src/NppIO.cpp @@ -878,7 +878,7 @@ void Notepad_plus::doClose(BufferID id, int whichOne, bool doDeleteBackup) if (buffID == BUFFER_INVALID && fileFullPath.length() > 0) _lastRecentFileList.add(fileFullPath.c_str()); } - command(IDM_VIEW_REFRESHTABAR); + ::SendMessage(_pPublicInterface->getHSelf(), NPPM_INTERNAL_REFRESHTABAR, 0, 0); if (NppParameters::getInstance().getNppGUI()._tabStatus & TAB_QUITONEMPTY) { diff --git a/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp b/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp index cedd39e8e1fe..cf80c5b1a8fa 100644 --- a/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp +++ b/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp @@ -333,32 +333,32 @@ intptr_t CALLBACK PreferenceDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM case TB_LARGE: { checkOrUncheckBtn(IDC_RADIO_BIGICON, BST_CHECKED); - ::SendMessage(_hParent, WM_COMMAND, IDM_VIEW_TOOLBAR_ENLARGE, 0); + ::SendMessage(::GetParent(_hParent), NPPM_INTERNAL_TOOLBARENLARGE, 0, 0); break; } case TB_SMALL2: { checkOrUncheckBtn(IDC_RADIO_SMALLICON2, BST_CHECKED); - ::SendMessage(_hParent, WM_COMMAND, IDM_VIEW_TOOLBAR_REDUCE_SET2, 0); + ::SendMessage(::GetParent(_hParent), NPPM_INTERNAL_TOOLBARREDUCESET2, 0, 0); break; } case TB_LARGE2: { checkOrUncheckBtn(IDC_RADIO_BIGICON2, BST_CHECKED); - ::SendMessage(_hParent, WM_COMMAND, IDM_VIEW_TOOLBAR_ENLARGE_SET2, 0); + ::SendMessage(::GetParent(_hParent), NPPM_INTERNAL_TOOLBARENLARGESET2, 0, 0); break; } case TB_STANDARD: { checkOrUncheckBtn(IDC_RADIO_STANDARD, BST_CHECKED); - ::SendMessage(_hParent, WM_COMMAND, IDM_VIEW_TOOLBAR_STANDARD, 0); + ::SendMessage(::GetParent(_hParent), NPPM_INTERNAL_TOOLBARSTANDARD, 0, 0); break; } //case TB_SMALL: default: { checkOrUncheckBtn(IDC_RADIO_SMALLICON, BST_CHECKED); - ::SendMessage(_hParent, WM_COMMAND, IDM_VIEW_TOOLBAR_REDUCE, 0); + ::SendMessage(::GetParent(_hParent), NPPM_INTERNAL_TOOLBARREDUCE, 0, 0); } } @@ -710,11 +710,11 @@ intptr_t CALLBACK GeneralSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM } case IDC_CHECK_TAB_VERTICAL: - ::SendMessage(_hParent, WM_COMMAND, IDM_VIEW_DRAWTABBAR_VERTICAL, 0); + ::SendMessage(::GetParent(_hParent), NPPM_INTERNAL_VERTICALTABBAR, 0, 0); return TRUE; case IDC_CHECK_TAB_MULTILINE : - ::SendMessage(_hParent, WM_COMMAND, IDM_VIEW_DRAWTABBAR_MULTILINE, 0); + ::SendMessage(::GetParent(_hParent), NPPM_INTERNAL_MULTILINETABBAR, 0, 0); return TRUE; case IDC_CHECK_TAB_LAST_EXIT: @@ -739,32 +739,32 @@ intptr_t CALLBACK GeneralSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM { const bool isChecked = isCheckedOrNot(IDC_CHECK_REDUCE); TabBarPlus::setReduced(isChecked); - ::SendMessage(_hParent, WM_COMMAND, IDM_VIEW_REDUCETABBAR, 0); + ::SendMessage(::GetParent(_hParent), NPPM_INTERNAL_REDUCETABBAR, 0, 0); return TRUE; } case IDC_CHECK_LOCK : - ::SendMessage(_hParent, WM_COMMAND, IDM_VIEW_LOCKTABBAR, 0); + ::SendMessage(::GetParent(_hParent), NPPM_INTERNAL_LOCKTABBAR, 0, 0); return TRUE; case IDC_CHECK_ORANGE : - ::SendMessage(_hParent, WM_COMMAND, IDM_VIEW_DRAWTABBAR_TOPBAR, 0); + ::SendMessage(::GetParent(_hParent), NPPM_INTERNAL_DRAWTABTOPBAR, 0, 0); return TRUE; case IDC_CHECK_DRAWINACTIVE : - ::SendMessage(_hParent, WM_COMMAND, IDM_VIEW_DRAWTABBAR_INACIVETAB, 0); + ::SendMessage(::GetParent(_hParent), NPPM_INTERNAL_DRAWINACIVETAB, 0, 0); return TRUE; case IDC_CHECK_ENABLETABCLOSE : - ::SendMessage(_hParent, WM_COMMAND, IDM_VIEW_DRAWTABBAR_CLOSEBOTTUN, 0); + ::SendMessage(::GetParent(_hParent), NPPM_INTERNAL_DRAWTABBARCLOSEBUTTON, 0, 0); return TRUE; case IDC_CHECK_ENABLETABPIN: - ::SendMessage(::GetParent(_hParent), NPPM_INTERNAL_DRAWTABBARPINBOTTUN, 0, 0); + ::SendMessage(::GetParent(_hParent), NPPM_INTERNAL_DRAWTABBARPINBUTTON, 0, 0); return TRUE; case IDC_CHECK_DBCLICK2CLOSE : - ::SendMessage(_hParent, WM_COMMAND, IDM_VIEW_DRAWTABBAR_DBCLK2CLOSE, 0); + ::SendMessage(::GetParent(_hParent), NPPM_INTERNAL_TABDBCLK2CLOSE, 0, 0); return TRUE; case IDC_CHECK_HIDE : @@ -775,27 +775,27 @@ intptr_t CALLBACK GeneralSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM return TRUE; case IDC_RADIO_SMALLICON : - ::SendMessage(_hParent, WM_COMMAND, IDM_VIEW_TOOLBAR_REDUCE, 0); + ::SendMessage(::GetParent(_hParent), NPPM_INTERNAL_TOOLBARREDUCE, 0, 0); NppDarkMode::setToolBarIconSet(0, NppDarkMode::isEnabled()); return TRUE; case IDC_RADIO_BIGICON : - ::SendMessage(_hParent, WM_COMMAND, IDM_VIEW_TOOLBAR_ENLARGE, 0); + ::SendMessage(::GetParent(_hParent), NPPM_INTERNAL_TOOLBARENLARGE, 0, 0); NppDarkMode::setToolBarIconSet(1, NppDarkMode::isEnabled()); return TRUE; case IDC_RADIO_SMALLICON2: - ::SendMessage(_hParent, WM_COMMAND, IDM_VIEW_TOOLBAR_REDUCE_SET2, 0); + ::SendMessage(::GetParent(_hParent), NPPM_INTERNAL_TOOLBARREDUCESET2, 0, 0); NppDarkMode::setToolBarIconSet(2, NppDarkMode::isEnabled()); return TRUE; case IDC_RADIO_BIGICON2: - ::SendMessage(_hParent, WM_COMMAND, IDM_VIEW_TOOLBAR_ENLARGE_SET2, 0); + ::SendMessage(::GetParent(_hParent), NPPM_INTERNAL_TOOLBARENLARGESET2, 0, 0); NppDarkMode::setToolBarIconSet(3, NppDarkMode::isEnabled()); return TRUE; case IDC_RADIO_STANDARD : - ::SendMessage(_hParent, WM_COMMAND, IDM_VIEW_TOOLBAR_STANDARD, 0); + ::SendMessage(::GetParent(_hParent), NPPM_INTERNAL_TOOLBARSTANDARD, 0, 0); NppDarkMode::setToolBarIconSet(4, NppDarkMode::isEnabled()); return TRUE; diff --git a/PowerEditor/src/WinControls/TabBar/TabBar.cpp b/PowerEditor/src/WinControls/TabBar/TabBar.cpp index 87cd74812290..a63970cb695d 100644 --- a/PowerEditor/src/WinControls/TabBar/TabBar.cpp +++ b/PowerEditor/src/WinControls/TabBar/TabBar.cpp @@ -767,7 +767,7 @@ LRESULT TabBarPlus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPara if (_closeButtonZone.isHit(xPos, yPos, _currentHoverTabRect, _isVertical)) { _whichCloseClickDown = getTabIndexAt(xPos, yPos); - ::SendMessage(_hParent, WM_COMMAND, IDM_VIEW_REFRESHTABAR, 0); + ::SendMessage(_hParent, NPPM_INTERNAL_REFRESHTABAR, 0, 0); return TRUE; } } @@ -777,7 +777,7 @@ LRESULT TabBarPlus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPara if (_pinButtonZone.isHit(xPos, yPos, _currentHoverTabRect, _isVertical)) { _whichPinClickDown = getTabIndexAt(xPos, yPos); - ::SendMessage(_hParent, WM_COMMAND, IDM_VIEW_REFRESHTABAR, 0); + ::SendMessage(_hParent, NPPM_INTERNAL_REFRESHTABAR, 0, 0); return TRUE; } } diff --git a/PowerEditor/src/menuCmdID.h b/PowerEditor/src/menuCmdID.h index ffe43b6e17c0..1108d1f36bd0 100644 --- a/PowerEditor/src/menuCmdID.h +++ b/PowerEditor/src/menuCmdID.h @@ -274,13 +274,13 @@ #define IDM_VIEW (IDM + 4000) //#define IDM_VIEW_TOOLBAR_HIDE (IDM_VIEW + 1) - #define IDM_VIEW_TOOLBAR_REDUCE (IDM_VIEW + 2) - #define IDM_VIEW_TOOLBAR_ENLARGE (IDM_VIEW + 3) - #define IDM_VIEW_TOOLBAR_STANDARD (IDM_VIEW + 4) - #define IDM_VIEW_REDUCETABBAR (IDM_VIEW + 5) - #define IDM_VIEW_LOCKTABBAR (IDM_VIEW + 6) - #define IDM_VIEW_DRAWTABBAR_TOPBAR (IDM_VIEW + 7) - #define IDM_VIEW_DRAWTABBAR_INACIVETAB (IDM_VIEW + 8) + //#define IDM_VIEW_TOOLBAR_REDUCE (IDM_VIEW + 2) + //#define IDM_VIEW_TOOLBAR_ENLARGE (IDM_VIEW + 3) + //#define IDM_VIEW_TOOLBAR_STANDARD (IDM_VIEW + 4) + //#define IDM_VIEW_REDUCETABBAR (IDM_VIEW + 5) + //#define IDM_VIEW_LOCKTABBAR (IDM_VIEW + 6) + //#define IDM_VIEW_DRAWTABBAR_TOPBAR (IDM_VIEW + 7) + //#define IDM_VIEW_DRAWTABBAR_INACIVETAB (IDM_VIEW + 8) #define IDM_VIEW_POSTIT (IDM_VIEW + 9) #define IDM_VIEW_FOLDALL (IDM_VIEW + 10) #define IDM_VIEW_DISTRACTIONFREE (IDM_VIEW + 11) @@ -299,8 +299,8 @@ #define IDM_VIEW_ZOOMOUT (IDM_VIEW + 24) #define IDM_VIEW_TAB_SPACE (IDM_VIEW + 25) #define IDM_VIEW_EOL (IDM_VIEW + 26) - #define IDM_VIEW_TOOLBAR_REDUCE_SET2 (IDM_VIEW + 27) - #define IDM_VIEW_TOOLBAR_ENLARGE_SET2 (IDM_VIEW + 28) + //#define IDM_VIEW_TOOLBAR_REDUCE_SET2 (IDM_VIEW + 27) + //#define IDM_VIEW_TOOLBAR_ENLARGE_SET2 (IDM_VIEW + 28) #define IDM_VIEW_UNFOLDALL (IDM_VIEW + 29) #define IDM_VIEW_FOLD_CURRENT (IDM_VIEW + 30) #define IDM_VIEW_UNFOLD_CURRENT (IDM_VIEW + 31) @@ -310,13 +310,13 @@ #define IDM_VIEW_SYNSCROLLV (IDM_VIEW + 35) #define IDM_VIEW_SYNSCROLLH (IDM_VIEW + 36) //#define IDM_VIEW_EDGENONE (IDM_VIEW + 37) - #define IDM_VIEW_DRAWTABBAR_CLOSEBOTTUN (IDM_VIEW + 38) - #define IDM_VIEW_DRAWTABBAR_DBCLK2CLOSE (IDM_VIEW + 39) - #define IDM_VIEW_REFRESHTABAR (IDM_VIEW + 40) + //#define IDM_VIEW_DRAWTABBAR_CLOSEBOTTUN (IDM_VIEW + 38) + //#define IDM_VIEW_DRAWTABBAR_DBCLK2CLOSE (IDM_VIEW + 39) + //#define IDM_VIEW_REFRESHTABAR (IDM_VIEW + 40) #define IDM_VIEW_WRAP_SYMBOL (IDM_VIEW + 41) #define IDM_VIEW_HIDELINES (IDM_VIEW + 42) - #define IDM_VIEW_DRAWTABBAR_VERTICAL (IDM_VIEW + 43) - #define IDM_VIEW_DRAWTABBAR_MULTILINE (IDM_VIEW + 44) + //#define IDM_VIEW_DRAWTABBAR_VERTICAL (IDM_VIEW + 43) + //#define IDM_VIEW_DRAWTABBAR_MULTILINE (IDM_VIEW + 44) //#define IDM_VIEW_DOCCHANGEMARGIN (IDM_VIEW + 45) #define IDM_VIEW_LWDEF (IDM_VIEW + 46) #define IDM_VIEW_LWALIGN (IDM_VIEW + 47) diff --git a/PowerEditor/src/resource.h b/PowerEditor/src/resource.h index fc9cbae79469..1d4edc667a19 100644 --- a/PowerEditor/src/resource.h +++ b/PowerEditor/src/resource.h @@ -706,8 +706,22 @@ #define NPPM_INTERNAL_CHECKUNDOREDOSTATE (NOTEPADPLUS_USER_INTERNAL + 77) #define NPPM_INTERNAL_LINECUTCOPYWITHOUTSELECTION (NOTEPADPLUS_USER_INTERNAL + 78) #define NPPM_INTERNAL_DOCMODIFIEDBYREPLACEALL (NOTEPADPLUS_USER_INTERNAL + 79) - - #define NPPM_INTERNAL_DRAWTABBARPINBOTTUN (NOTEPADPLUS_USER_INTERNAL + 80) + #define NPPM_INTERNAL_DRAWTABBARPINBUTTON (NOTEPADPLUS_USER_INTERNAL + 80) + #define NPPM_INTERNAL_DRAWTABBARCLOSEBUTTON (NOTEPADPLUS_USER_INTERNAL + 81) + #define NPPM_INTERNAL_REFRESHTABAR (NOTEPADPLUS_USER_INTERNAL + 82) + #define NPPM_INTERNAL_REDUCETABBAR (NOTEPADPLUS_USER_INTERNAL + 83) + #define NPPM_INTERNAL_LOCKTABBAR (NOTEPADPLUS_USER_INTERNAL + 84) + #define NPPM_INTERNAL_DRAWINACIVETAB (NOTEPADPLUS_USER_INTERNAL + 85) + #define NPPM_INTERNAL_DRAWTABTOPBAR (NOTEPADPLUS_USER_INTERNAL + 86) + #define NPPM_INTERNAL_TABDBCLK2CLOSE (NOTEPADPLUS_USER_INTERNAL + 87) + #define NPPM_INTERNAL_VERTICALTABBAR (NOTEPADPLUS_USER_INTERNAL + 88) + #define NPPM_INTERNAL_MULTILINETABBAR (NOTEPADPLUS_USER_INTERNAL + 89) + + #define NPPM_INTERNAL_TOOLBARREDUCE (NOTEPADPLUS_USER_INTERNAL + 90) + #define NPPM_INTERNAL_TOOLBARREDUCESET2 (NOTEPADPLUS_USER_INTERNAL + 91) + #define NPPM_INTERNAL_TOOLBARENLARGE (NOTEPADPLUS_USER_INTERNAL + 92) + #define NPPM_INTERNAL_TOOLBARENLARGESET2 (NOTEPADPLUS_USER_INTERNAL + 93) + #define NPPM_INTERNAL_TOOLBARSTANDARD (NOTEPADPLUS_USER_INTERNAL + 94) // See Notepad_plus_msgs.h //#define NOTEPADPLUS_USER (WM_USER + 1000) From 55df104606e61bdb3fcb79ee730e4f45ce59b1b5 Mon Sep 17 00:00:00 2001 From: Don Ho Date: Sun, 10 Nov 2024 03:51:33 +0100 Subject: [PATCH 04/37] Refactoring (part 2) --- PowerEditor/src/NppBigSwitch.cpp | 91 +++++++++++++++---- PowerEditor/src/NppCommands.cpp | 73 --------------- .../WinControls/Preference/preferenceDlg.cpp | 26 +++--- PowerEditor/src/menuCmdID.h | 22 ++--- PowerEditor/src/resource.h | 34 +++---- 5 files changed, 113 insertions(+), 133 deletions(-) diff --git a/PowerEditor/src/NppBigSwitch.cpp b/PowerEditor/src/NppBigSwitch.cpp index 2ce2c1bce028..060d2e375601 100644 --- a/PowerEditor/src/NppBigSwitch.cpp +++ b/PowerEditor/src/NppBigSwitch.cpp @@ -2253,22 +2253,6 @@ LRESULT Notepad_plus::process(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa return MainFileManager.getFileNameFromBuffer(reinterpret_cast(wParam), reinterpret_cast(lParam)); } - case NPPM_INTERNAL_ENABLECHECKDOCOPT: - { - NppGUI& nppgui = nppParam.getNppGUI(); - if (wParam == CHECKDOCOPT_NONE) - nppgui._fileAutoDetection = cdDisabled; - else if (wParam == CHECKDOCOPT_UPDATESILENTLY) - nppgui._fileAutoDetection = (cdEnabledOld | cdAutoUpdate); - else if (wParam == CHECKDOCOPT_UPDATEGO2END) - nppgui._fileAutoDetection = (cdEnabledOld | cdGo2end); - else if (wParam == (CHECKDOCOPT_UPDATESILENTLY | CHECKDOCOPT_UPDATEGO2END)) - nppgui._fileAutoDetection = (cdEnabledOld | cdGo2end | cdAutoUpdate); - - return TRUE; - } - - case WM_ACTIVATE: { if (wParam != WA_INACTIVE && _pEditView && _pNonEditView) @@ -3083,7 +3067,7 @@ LRESULT Notepad_plus::process(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa ScintillaViewParams &svp = const_cast(nppParam.getSVP()); svp._lineNumberMarginDynamicWidth = lParam == LINENUMWIDTH_DYNAMIC; - ::SendMessage(hwnd, WM_COMMAND, IDM_VIEW_LINENUMBER, 0); + ::SendMessage(hwnd, NPPM_INTERNAL_LINENUMBER, 0, 0); return TRUE; } @@ -3781,6 +3765,79 @@ LRESULT Notepad_plus::process(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa return fileName.length(); } + case NPPM_INTERNAL_HILITECURRENTLINE: + { + const ScintillaViewParams& svp = nppParam.getSVP(); + + const COLORREF bgColour{ nppParam.getCurLineHilitingColour() }; + const LPARAM frameWidth{ (svp._currentLineHiliteMode == LINEHILITE_FRAME) ? svp._currentLineFrameWidth : 0 }; + + if (svp._currentLineHiliteMode != LINEHILITE_NONE) + { + _mainEditView.setElementColour(SC_ELEMENT_CARET_LINE_BACK, bgColour); + _subEditView.setElementColour(SC_ELEMENT_CARET_LINE_BACK, bgColour); + } + else + { + _mainEditView.execute(SCI_RESETELEMENTCOLOUR, SC_ELEMENT_CARET_LINE_BACK, 0); + _subEditView.execute(SCI_RESETELEMENTCOLOUR, SC_ELEMENT_CARET_LINE_BACK, 0); + } + + _mainEditView.execute(SCI_SETCARETLINEFRAME, frameWidth); + _subEditView.execute(SCI_SETCARETLINEFRAME, frameWidth); + } + break; + + case NPPM_INTERNAL_LINENUMBER: + case NPPM_INTERNAL_SYMBOLMARGIN: + { + int margin; + if (message == NPPM_INTERNAL_LINENUMBER) + margin = ScintillaEditView::_SC_MARGE_LINENUMBER; + else //if (message == IDM_VIEW_SYMBOLMARGIN) + margin = ScintillaEditView::_SC_MARGE_SYMBOL; + + if (_mainEditView.hasMarginShowed(margin)) + { + _mainEditView.showMargin(margin, false); + _subEditView.showMargin(margin, false); + } + else + { + _mainEditView.showMargin(margin); + _subEditView.showMargin(margin); + } + } + break; + + case NPPM_INTERNAL_LWDEF: + case NPPM_INTERNAL_LWALIGN: + case NPPM_INTERNAL_LWINDENT: + { + int mode = (message == NPPM_INTERNAL_LWALIGN) ? SC_WRAPINDENT_SAME : \ + (message == NPPM_INTERNAL_LWINDENT) ? SC_WRAPINDENT_INDENT : SC_WRAPINDENT_FIXED; + _mainEditView.execute(SCI_SETWRAPINDENTMODE, mode); + _subEditView.execute(SCI_SETWRAPINDENTMODE, mode); + } + break; + + case NPPM_INTERNAL_FOLDSYMBOLSIMPLE: + case NPPM_INTERNAL_FOLDSYMBOLARROW: + case NPPM_INTERNAL_FOLDSYMBOLCIRCLE: + case NPPM_INTERNAL_FOLDSYMBOLBOX: + case NPPM_INTERNAL_FOLDSYMBOLNONE: + { + folderStyle fStyle = + (message == NPPM_INTERNAL_FOLDSYMBOLSIMPLE) ? FOLDER_STYLE_SIMPLE : \ + (message == NPPM_INTERNAL_FOLDSYMBOLARROW) ? FOLDER_STYLE_ARROW : \ + (message == NPPM_INTERNAL_FOLDSYMBOLCIRCLE) ? FOLDER_STYLE_CIRCLE : \ + (message == NPPM_INTERNAL_FOLDSYMBOLNONE) ? FOLDER_STYLE_NONE : FOLDER_STYLE_BOX; + + _mainEditView.setMakerStyle(fStyle); + _subEditView.setMakerStyle(fStyle); + } + break; + case NPPM_INTERNAL_TOOLBARREDUCE: { toolBarStatusType state = _toolBar.getState(); diff --git a/PowerEditor/src/NppCommands.cpp b/PowerEditor/src/NppCommands.cpp index d7cf45af3fee..2a1db337a1a7 100644 --- a/PowerEditor/src/NppCommands.cpp +++ b/PowerEditor/src/NppCommands.cpp @@ -3978,79 +3978,6 @@ void Notepad_plus::command(int id) } break; - case IDM_VIEW_LINENUMBER: - case IDM_VIEW_SYMBOLMARGIN: - { - int margin; - if (id == IDM_VIEW_LINENUMBER) - margin = ScintillaEditView::_SC_MARGE_LINENUMBER; - else //if (id == IDM_VIEW_SYMBOLMARGIN) - margin = ScintillaEditView::_SC_MARGE_SYMBOL; - - if (_mainEditView.hasMarginShowed(margin)) - { - _mainEditView.showMargin(margin, false); - _subEditView.showMargin(margin, false); - } - else - { - _mainEditView.showMargin(margin); - _subEditView.showMargin(margin); - } - } - break; - - case IDM_VIEW_FOLDERMAGIN_SIMPLE: - case IDM_VIEW_FOLDERMAGIN_ARROW: - case IDM_VIEW_FOLDERMAGIN_CIRCLE: - case IDM_VIEW_FOLDERMAGIN_BOX: - case IDM_VIEW_FOLDERMAGIN: - { - folderStyle fStyle = (id == IDM_VIEW_FOLDERMAGIN_SIMPLE) ? FOLDER_STYLE_SIMPLE : \ - (id == IDM_VIEW_FOLDERMAGIN_ARROW) ? FOLDER_STYLE_ARROW : \ - (id == IDM_VIEW_FOLDERMAGIN_CIRCLE) ? FOLDER_STYLE_CIRCLE : \ - (id == IDM_VIEW_FOLDERMAGIN) ? FOLDER_STYLE_NONE : FOLDER_STYLE_BOX; - - _mainEditView.setMakerStyle(fStyle); - _subEditView.setMakerStyle(fStyle); - } - break; - - case IDM_VIEW_CURLINE_HILITING: - { - NppParameters& nppParams = NppParameters::getInstance(); - const ScintillaViewParams& svp = nppParams.getSVP(); - - const COLORREF bgColour { nppParams.getCurLineHilitingColour() }; - const LPARAM frameWidth { (svp._currentLineHiliteMode == LINEHILITE_FRAME) ? svp._currentLineFrameWidth : 0 }; - - if (svp._currentLineHiliteMode != LINEHILITE_NONE) - { - _mainEditView.setElementColour(SC_ELEMENT_CARET_LINE_BACK, bgColour); - _subEditView.setElementColour(SC_ELEMENT_CARET_LINE_BACK, bgColour); - } - else - { - _mainEditView.execute(SCI_RESETELEMENTCOLOUR, SC_ELEMENT_CARET_LINE_BACK, 0); - _subEditView.execute(SCI_RESETELEMENTCOLOUR, SC_ELEMENT_CARET_LINE_BACK, 0); - } - - _mainEditView.execute(SCI_SETCARETLINEFRAME, frameWidth); - _subEditView.execute(SCI_SETCARETLINEFRAME, frameWidth); - } - break; - - case IDM_VIEW_LWDEF: - case IDM_VIEW_LWALIGN: - case IDM_VIEW_LWINDENT: - { - int mode = (id == IDM_VIEW_LWALIGN) ? SC_WRAPINDENT_SAME : \ - (id == IDM_VIEW_LWINDENT) ? SC_WRAPINDENT_INDENT : SC_WRAPINDENT_FIXED; - _mainEditView.execute(SCI_SETWRAPINDENTMODE, mode); - _subEditView.execute(SCI_SETWRAPINDENTMODE, mode); - } - break; - default : if (id > IDM_FILEMENU_LASTONE && id < (IDM_FILEMENU_LASTONE + _lastRecentFileList.getMaxNbLRF() + 1)) { diff --git a/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp b/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp index cf80c5b1a8fa..a8c83fc1d7c7 100644 --- a/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp +++ b/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp @@ -892,7 +892,7 @@ void EditingSubDlg::changeLineHiliteMode(bool enableSlider) ::EnableWindow(::GetDlgItem(_hSelf, IDC_CARETLINEFRAME_WIDTH_SLIDER), enableSlider); redrawDlgItem(IDC_CARETLINEFRAME_WIDTH_STATIC); redrawDlgItem(IDC_CARETLINEFRAME_WIDTH_DISPLAY); - ::SendMessage(_hParent, WM_COMMAND, IDM_VIEW_CURLINE_HILITING, 0); + ::SendMessage(::GetParent(_hParent), NPPM_INTERNAL_HILITECURRENTLINE, 0, 0); } bool hasOnlyNumSpaceInClipboard() @@ -1155,17 +1155,17 @@ intptr_t CALLBACK EditingSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM case IDC_RADIO_LWDEF: svp._lineWrapMethod = LINEWRAP_DEFAULT; - ::SendMessage(_hParent, WM_COMMAND, IDM_VIEW_LWDEF, 0); + ::SendMessage(::GetParent(_hParent), NPPM_INTERNAL_LWDEF, 0, 0); return TRUE; case IDC_RADIO_LWALIGN: svp._lineWrapMethod = LINEWRAP_ALIGNED; - ::SendMessage(_hParent, WM_COMMAND, IDM_VIEW_LWALIGN, 0); + ::SendMessage(::GetParent(_hParent), NPPM_INTERNAL_LWALIGN, 0, 0); return TRUE; case IDC_RADIO_LWINDENT: svp._lineWrapMethod = LINEWRAP_INDENT; - ::SendMessage(_hParent, WM_COMMAND, IDM_VIEW_LWINDENT, 0); + ::SendMessage(::GetParent(_hParent), NPPM_INTERNAL_LWINDENT, 0, 0); return TRUE; default : @@ -2236,20 +2236,20 @@ intptr_t CALLBACK MarginsBorderEdgeSubDlg::run_dlgProc(UINT message, WPARAM wPar svp._lineNumberMarginShow = (BST_CHECKED == ::SendDlgItemMessage(_hSelf, IDC_CHECK_LINENUMBERMARGE, BM_GETCHECK, 0, 0)); ::EnableWindow(::GetDlgItem(_hSelf, IDC_RADIO_DYNAMIC), svp._lineNumberMarginShow); ::EnableWindow(::GetDlgItem(_hSelf, IDC_RADIO_CONSTANT), svp._lineNumberMarginShow); - ::SendMessage(_hParent, WM_COMMAND, IDM_VIEW_LINENUMBER, 0); + ::SendMessage(::GetParent(_hParent), NPPM_INTERNAL_LINENUMBER, 0, 0); return TRUE; case IDC_RADIO_DYNAMIC: svp._lineNumberMarginDynamicWidth = (BST_CHECKED == ::SendDlgItemMessage(_hSelf, IDC_RADIO_DYNAMIC, BM_GETCHECK, 0, 0)); - ::SendMessage(_hParent, WM_COMMAND, IDM_VIEW_LINENUMBER, 0); + ::SendMessage(::GetParent(_hParent), NPPM_INTERNAL_LINENUMBER, 0, 0); return TRUE; case IDC_RADIO_CONSTANT: svp._lineNumberMarginDynamicWidth = !(BST_CHECKED == ::SendDlgItemMessage(_hSelf, IDC_RADIO_CONSTANT, BM_GETCHECK, 0, 0)); - ::SendMessage(_hParent, WM_COMMAND, IDM_VIEW_LINENUMBER, 0); + ::SendMessage(::GetParent(_hParent), NPPM_INTERNAL_LINENUMBER, 0, 0); return TRUE; case IDC_CHECK_BOOKMARKMARGE: svp._bookMarkMarginShow = (BST_CHECKED == ::SendDlgItemMessage(_hSelf, IDC_CHECK_BOOKMARKMARGE, BM_GETCHECK, 0, 0)); - ::SendMessage(_hParent, WM_COMMAND, IDM_VIEW_SYMBOLMARGIN, 0); + ::SendMessage(::GetParent(_hParent), NPPM_INTERNAL_SYMBOLMARGIN, 0, 0); return TRUE; case IDC_CHECK_CHANGHISTORYMARGIN: @@ -2323,24 +2323,24 @@ intptr_t CALLBACK MarginsBorderEdgeSubDlg::run_dlgProc(UINT message, WPARAM wPar case IDC_RADIO_SIMPLE: svp._folderStyle = FOLDER_STYLE_SIMPLE; - ::SendMessage(_hParent, WM_COMMAND, IDM_VIEW_FOLDERMAGIN_SIMPLE, 0); + ::SendMessage(::GetParent(_hParent), NPPM_INTERNAL_FOLDSYMBOLSIMPLE, 0, 0); return TRUE; case IDC_RADIO_ARROW: svp._folderStyle = FOLDER_STYLE_ARROW; - ::SendMessage(_hParent, WM_COMMAND, IDM_VIEW_FOLDERMAGIN_ARROW, 0); + ::SendMessage(::GetParent(_hParent), NPPM_INTERNAL_FOLDSYMBOLARROW, 0, 0); return TRUE; case IDC_RADIO_CIRCLE: svp._folderStyle = FOLDER_STYLE_CIRCLE; - ::SendMessage(_hParent, WM_COMMAND, IDM_VIEW_FOLDERMAGIN_CIRCLE, 0); + ::SendMessage(::GetParent(_hParent), NPPM_INTERNAL_FOLDSYMBOLCIRCLE, 0, 0); return TRUE; case IDC_RADIO_BOX: svp._folderStyle = FOLDER_STYLE_BOX; - ::SendMessage(_hParent, WM_COMMAND, IDM_VIEW_FOLDERMAGIN_BOX, 0); + ::SendMessage(::GetParent(_hParent), NPPM_INTERNAL_FOLDSYMBOLBOX, 0, 0); return TRUE; case IDC_RADIO_FOLDMARGENONE: svp._folderStyle = FOLDER_STYLE_NONE; - ::SendMessage(_hParent, WM_COMMAND, IDM_VIEW_FOLDERMAGIN, 0); + ::SendMessage(::GetParent(_hParent), NPPM_INTERNAL_FOLDSYMBOLNONE, 0, 0); return TRUE; case IDC_CHECK_EDGEBGMODE: diff --git a/PowerEditor/src/menuCmdID.h b/PowerEditor/src/menuCmdID.h index 1108d1f36bd0..2d824f2992f6 100644 --- a/PowerEditor/src/menuCmdID.h +++ b/PowerEditor/src/menuCmdID.h @@ -284,16 +284,16 @@ #define IDM_VIEW_POSTIT (IDM_VIEW + 9) #define IDM_VIEW_FOLDALL (IDM_VIEW + 10) #define IDM_VIEW_DISTRACTIONFREE (IDM_VIEW + 11) - #define IDM_VIEW_LINENUMBER (IDM_VIEW + 12) - #define IDM_VIEW_SYMBOLMARGIN (IDM_VIEW + 13) - #define IDM_VIEW_FOLDERMAGIN (IDM_VIEW + 14) - #define IDM_VIEW_FOLDERMAGIN_SIMPLE (IDM_VIEW + 15) - #define IDM_VIEW_FOLDERMAGIN_ARROW (IDM_VIEW + 16) - #define IDM_VIEW_FOLDERMAGIN_CIRCLE (IDM_VIEW + 17) - #define IDM_VIEW_FOLDERMAGIN_BOX (IDM_VIEW + 18) + //#define IDM_VIEW_LINENUMBER (IDM_VIEW + 12) + //#define IDM_VIEW_SYMBOLMARGIN (IDM_VIEW + 13) + //#define IDM_VIEW_FOLDERMAGIN (IDM_VIEW + 14) + //#define IDM_VIEW_FOLDERMAGIN_SIMPLE (IDM_VIEW + 15) + //#define IDM_VIEW_FOLDERMAGIN_ARROW (IDM_VIEW + 16) + //#define IDM_VIEW_FOLDERMAGIN_CIRCLE (IDM_VIEW + 17) + //#define IDM_VIEW_FOLDERMAGIN_BOX (IDM_VIEW + 18) #define IDM_VIEW_ALL_CHARACTERS (IDM_VIEW + 19) #define IDM_VIEW_INDENT_GUIDE (IDM_VIEW + 20) - #define IDM_VIEW_CURLINE_HILITING (IDM_VIEW + 21) + //#define IDM_VIEW_CURLINE_HILITING (IDM_VIEW + 21) #define IDM_VIEW_WRAP (IDM_VIEW + 22) #define IDM_VIEW_ZOOMIN (IDM_VIEW + 23) #define IDM_VIEW_ZOOMOUT (IDM_VIEW + 24) @@ -318,9 +318,9 @@ //#define IDM_VIEW_DRAWTABBAR_VERTICAL (IDM_VIEW + 43) //#define IDM_VIEW_DRAWTABBAR_MULTILINE (IDM_VIEW + 44) //#define IDM_VIEW_DOCCHANGEMARGIN (IDM_VIEW + 45) - #define IDM_VIEW_LWDEF (IDM_VIEW + 46) - #define IDM_VIEW_LWALIGN (IDM_VIEW + 47) - #define IDM_VIEW_LWINDENT (IDM_VIEW + 48) + //#define IDM_VIEW_LWDEF (IDM_VIEW + 46) + //#define IDM_VIEW_LWALIGN (IDM_VIEW + 47) + //#define IDM_VIEW_LWINDENT (IDM_VIEW + 48) #define IDM_VIEW_SUMMARY (IDM_VIEW + 49) #define IDM_VIEW_FOLD (IDM_VIEW + 50) diff --git a/PowerEditor/src/resource.h b/PowerEditor/src/resource.h index 1d4edc667a19..0d0c3c5f4078 100644 --- a/PowerEditor/src/resource.h +++ b/PowerEditor/src/resource.h @@ -716,33 +716,29 @@ #define NPPM_INTERNAL_TABDBCLK2CLOSE (NOTEPADPLUS_USER_INTERNAL + 87) #define NPPM_INTERNAL_VERTICALTABBAR (NOTEPADPLUS_USER_INTERNAL + 88) #define NPPM_INTERNAL_MULTILINETABBAR (NOTEPADPLUS_USER_INTERNAL + 89) - #define NPPM_INTERNAL_TOOLBARREDUCE (NOTEPADPLUS_USER_INTERNAL + 90) #define NPPM_INTERNAL_TOOLBARREDUCESET2 (NOTEPADPLUS_USER_INTERNAL + 91) #define NPPM_INTERNAL_TOOLBARENLARGE (NOTEPADPLUS_USER_INTERNAL + 92) #define NPPM_INTERNAL_TOOLBARENLARGESET2 (NOTEPADPLUS_USER_INTERNAL + 93) #define NPPM_INTERNAL_TOOLBARSTANDARD (NOTEPADPLUS_USER_INTERNAL + 94) + #define NPPM_INTERNAL_LINENUMBER (NOTEPADPLUS_USER_INTERNAL + 95) + #define NPPM_INTERNAL_SYMBOLMARGIN (NOTEPADPLUS_USER_INTERNAL + 96) + #define NPPM_INTERNAL_HILITECURRENTLINE (NOTEPADPLUS_USER_INTERNAL + 97) + #define NPPM_INTERNAL_FOLDSYMBOLSIMPLE (NOTEPADPLUS_USER_INTERNAL + 98) + #define NPPM_INTERNAL_FOLDSYMBOLARROW (NOTEPADPLUS_USER_INTERNAL + 99) + #define NPPM_INTERNAL_FOLDSYMBOLCIRCLE (NOTEPADPLUS_USER_INTERNAL + 100) + #define NPPM_INTERNAL_FOLDSYMBOLBOX (NOTEPADPLUS_USER_INTERNAL + 101) + #define NPPM_INTERNAL_FOLDSYMBOLNONE (NOTEPADPLUS_USER_INTERNAL + 102) + #define NPPM_INTERNAL_LWDEF (NOTEPADPLUS_USER_INTERNAL + 103) + #define NPPM_INTERNAL_LWALIGN (NOTEPADPLUS_USER_INTERNAL + 104) + #define NPPM_INTERNAL_LWINDENT (NOTEPADPLUS_USER_INTERNAL + 105) + #define NPPM_INTERNAL_CHECKDOCSTATUS (NOTEPADPLUS_USER_INTERNAL + 106) -// See Notepad_plus_msgs.h -//#define NOTEPADPLUS_USER (WM_USER + 1000) - - // - // Used by Doc Monitor plugin - // - #define NPPM_INTERNAL_CHECKDOCSTATUS (NPPMSG + 53) - // VOID NPPM_CHECKDOCSTATUS(0, 0) - // check all opened documents status. - // If files are modified, then reloaod (with or without prompt, it depends on settings). - // if files are deleted, then prompt user to close the documents - - #define NPPM_INTERNAL_ENABLECHECKDOCOPT (NPPMSG + 54) - // VOID NPPM_ENABLECHECKDOCOPT(OPT, 0) - // where OPT is : - #define CHECKDOCOPT_NONE 0 - #define CHECKDOCOPT_UPDATESILENTLY 1 - #define CHECKDOCOPT_UPDATEGO2END 2 +// See Notepad_plus_msgs.h +//#define NPPMSG (WM_USER + 1000) + #define SCINTILLA_USER (WM_USER + 2000) From 5f4610293c82c60f8c0d38acb916ec25f938acf3 Mon Sep 17 00:00:00 2001 From: Don Ho Date: Sun, 10 Nov 2024 19:49:35 +0100 Subject: [PATCH 05/37] Hide inactive tab buttons (Close & Pin) Fix #15298, close #15781 --- PowerEditor/src/Notepad_plus.rc | 24 ++- PowerEditor/src/NppBigSwitch.cpp | 5 + PowerEditor/src/WinControls/TabBar/TabBar.cpp | 55 ++++--- PowerEditor/src/WinControls/TabBar/TabBar.h | 29 ++-- .../dark/tabbar/closeTabButton_hover.ico | Bin 2587 -> 0 bytes .../dark/tabbar/closeTabButton_hoverIn.ico | Bin 0 -> 1741 bytes ...nact.ico => closeTabButton_hoverOnTab.ico} | Bin .../icons/dark/tabbar/closeTabButton_push.ico | Bin 2054 -> 2071 bytes .../dark/tabbar/{saved.ico => empty.ico} | Bin ...ton_hover.ico => pinTabButton_hoverIn.ico} | Bin ....ico => pinTabButton_pinnedHoverOnTab.ico} | Bin ...n_hover.ico => closeTabButton_hoverIn.ico} | Bin ...nact.ico => closeTabButton_hoverOnTab.ico} | Bin .../src/icons/standard/tabbar/empty.ico | Bin 0 -> 790 bytes PowerEditor/src/resource.h | 154 +++++++++--------- 15 files changed, 153 insertions(+), 114 deletions(-) delete mode 100644 PowerEditor/src/icons/dark/tabbar/closeTabButton_hover.ico create mode 100644 PowerEditor/src/icons/dark/tabbar/closeTabButton_hoverIn.ico rename PowerEditor/src/icons/dark/tabbar/{closeTabButton_inact.ico => closeTabButton_hoverOnTab.ico} (100%) rename PowerEditor/src/icons/dark/tabbar/{saved.ico => empty.ico} (100%) rename PowerEditor/src/icons/dark/tabbar/{pinTabButton_hover.ico => pinTabButton_hoverIn.ico} (100%) rename PowerEditor/src/icons/dark/tabbar/{pinTabButton_pinnedHover.ico => pinTabButton_pinnedHoverOnTab.ico} (100%) rename PowerEditor/src/icons/standard/tabbar/{closeTabButton_hover.ico => closeTabButton_hoverIn.ico} (100%) rename PowerEditor/src/icons/standard/tabbar/{closeTabButton_inact.ico => closeTabButton_hoverOnTab.ico} (100%) create mode 100644 PowerEditor/src/icons/standard/tabbar/empty.ico diff --git a/PowerEditor/src/Notepad_plus.rc b/PowerEditor/src/Notepad_plus.rc index 12be73eb5975..fb859d01c7c2 100644 --- a/PowerEditor/src/Notepad_plus.rc +++ b/PowerEditor/src/Notepad_plus.rc @@ -275,7 +275,7 @@ IDI_VIEW_MONITORING_DIS_ICON_DM2 ICON "icons/dark/toolbar/filled/monitori IDI_SAVED_ICON ICON "icons/standard/tabbar/saved.ico" -IDI_SAVED_DM_ICON ICON "icons/dark/tabbar/saved.ico" +IDI_SAVED_DM_ICON ICON "icons/dark/tabbar/empty.ico" IDI_SAVED_ALT_ICON ICON "icons/standard/tabbar/saved_alt.ico" IDI_UNSAVED_ICON ICON "icons/standard/tabbar/unsaved.ico" IDI_UNSAVED_DM_ICON ICON "icons/dark/tabbar/unsaved.ico" @@ -327,22 +327,28 @@ IDR_FILEBROWSER BITMAP "icons/standard/toolbar/fileBrowser.bm IDR_FILEMONITORING BITMAP "icons/standard/toolbar/monitoring.bmp" IDR_CLOSETAB ICON "icons/standard/tabbar/closeTabButton.ico" -IDR_CLOSETAB_INACT ICON "icons/standard/tabbar/closeTabButton_inact.ico" -IDR_CLOSETAB_HOVER ICON "icons/standard/tabbar/closeTabButton_hover.ico" +IDR_CLOSETAB_INACT ICON "icons/standard/tabbar/empty.ico" +IDR_CLOSETAB_HOVERIN ICON "icons/standard/tabbar/closeTabButton_hoverIn.ico" +IDR_CLOSETAB_HOVERONTAB ICON "icons/standard/tabbar/closeTabButton_hoverOnTab.ico" IDR_CLOSETAB_PUSH ICON "icons/standard/tabbar/closeTabButton_push.ico" IDR_CLOSETAB_DM ICON "icons/dark/tabbar/closeTabButton.ico" -IDR_CLOSETAB_INACT_DM ICON "icons/dark/tabbar/closeTabButton_inact.ico" -IDR_CLOSETAB_HOVER_DM ICON "icons/dark/tabbar/closeTabButton_hover.ico" +IDR_CLOSETAB_INACT_DM ICON "icons/dark/tabbar/empty.ico" +IDR_CLOSETAB_HOVERIN_DM ICON "icons/dark/tabbar/closeTabButton_hoverIn.ico" +IDR_CLOSETAB_HOVERONTAB_DM ICON "icons/dark/tabbar/closeTabButton_hoverOnTab.ico" IDR_CLOSETAB_PUSH_DM ICON "icons/dark/tabbar/closeTabButton_push.ico" IDR_PINTAB ICON "icons/standard/tabbar/pinTabButton.ico" -IDR_PINTAB_HOVER ICON "icons/standard/tabbar/pinTabButton_pinned.ico" +IDR_PINTAB_INACT ICON "icons/standard/tabbar/empty.ico" +IDR_PINTAB_HOVERIN ICON "icons/standard/tabbar/pinTabButton_pinned.ico" +IDR_PINTAB_HOVERONTAB ICON "icons/standard/tabbar/pinTabButton.ico" IDR_PINTAB_PINNED ICON "icons/standard/tabbar/pinTabButton_pinned.ico" -IDR_PINTAB_PINNEDHOVER ICON "icons/standard/tabbar/pinTabButton.ico" +IDR_PINTAB_PINNEDHOVERIN ICON "icons/standard/tabbar/pinTabButton.ico" IDR_PINTAB_DM ICON "icons/dark/tabbar/pinTabButton.ico" -IDR_PINTAB_HOVER_DM ICON "icons/dark/tabbar/pinTabButton_hover.ico" +IDR_PINTAB_INACT_DM ICON "icons/dark/tabbar/empty.ico" +IDR_PINTAB_HOVERIN_DM ICON "icons/dark/tabbar/pinTabButton_pinned.ico" +IDR_PINTAB_HOVERONTAB_DM ICON "icons/dark/tabbar/pinTabButton.ico" IDR_PINTAB_PINNED_DM ICON "icons/dark/tabbar/pinTabButton_pinned.ico" -IDR_PINTAB_PINNEDHOVER_DM ICON "icons/dark/tabbar/pinTabButton_pinnedHover.ico" +IDR_PINTAB_PINNEDHOVERIN_DM ICON "icons/dark/tabbar/pinTabButton.ico" IDR_DOCMAP_ICO ICON "icons/standard/panels/tabbar/docMap.ico" IDR_DOCMAP_ICO2 ICON "icons/light/panels/tabbar/docMap.ico" diff --git a/PowerEditor/src/NppBigSwitch.cpp b/PowerEditor/src/NppBigSwitch.cpp index 060d2e375601..8e1acec14974 100644 --- a/PowerEditor/src/NppBigSwitch.cpp +++ b/PowerEditor/src/NppBigSwitch.cpp @@ -4008,6 +4008,9 @@ LRESULT Notepad_plus::process(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa TabCtrl_SetItemSize(_subDocTab.getHSelf(), tabDpiDynamicalWidth, tabDpiDynamicalHeight); ::SendMessage(_pPublicInterface->getHSelf(), WM_SIZE, 0, 0); + + _mainDocTab.refresh(); + _subDocTab.refresh(); break; } @@ -4059,6 +4062,8 @@ LRESULT Notepad_plus::process(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa TabCtrl_SetItemSize(_subDocTab.getHSelf(), tabDpiDynamicalWidth, tabDpiDynamicalHeight); ::SendMessage(_pPublicInterface->getHSelf(), WM_SIZE, 0, 0); + _mainDocTab.refresh(); + _subDocTab.refresh(); return TRUE; } diff --git a/PowerEditor/src/WinControls/TabBar/TabBar.cpp b/PowerEditor/src/WinControls/TabBar/TabBar.cpp index a63970cb695d..88714101fdca 100644 --- a/PowerEditor/src/WinControls/TabBar/TabBar.cpp +++ b/PowerEditor/src/WinControls/TabBar/TabBar.cpp @@ -499,12 +499,12 @@ void TabBarPlus::setCloseBtnImageList() if (NppDarkMode::isEnabled()) { iconSize = g_TabCloseBtnSize_DM; - ids = { IDR_CLOSETAB_DM, IDR_CLOSETAB_INACT_DM, IDR_CLOSETAB_HOVER_DM, IDR_CLOSETAB_PUSH_DM }; + ids = { IDR_CLOSETAB_DM, IDR_CLOSETAB_INACT_DM, IDR_CLOSETAB_HOVERIN_DM, IDR_CLOSETAB_HOVERONTAB_DM, IDR_CLOSETAB_PUSH_DM }; } else { iconSize = g_TabCloseBtnSize; - ids = { IDR_CLOSETAB, IDR_CLOSETAB_INACT, IDR_CLOSETAB_HOVER, IDR_CLOSETAB_PUSH }; + ids = { IDR_CLOSETAB, IDR_CLOSETAB_INACT, IDR_CLOSETAB_HOVERIN, IDR_CLOSETAB_HOVERONTAB, IDR_CLOSETAB_PUSH }; } if (_hCloseBtnImgLst != nullptr) @@ -538,12 +538,12 @@ void TabBarPlus::setPinBtnImageList() if (NppDarkMode::isEnabled()) { iconSize = g_TabPinBtnSize_DM; - ids = { IDR_PINTAB_DM, IDR_PINTAB_HOVER_DM, IDR_PINTAB_PINNED_DM, IDR_PINTAB_PINNEDHOVER_DM }; + ids = { IDR_PINTAB_DM, IDR_PINTAB_INACT_DM, IDR_PINTAB_HOVERIN_DM, IDR_PINTAB_HOVERONTAB_DM, IDR_PINTAB_PINNED_DM, IDR_PINTAB_PINNEDHOVERIN_DM }; } else { iconSize = g_TabPinBtnSize; - ids = { IDR_PINTAB, IDR_PINTAB_HOVER, IDR_PINTAB_PINNED, IDR_PINTAB_PINNEDHOVER }; + ids = { IDR_PINTAB, IDR_PINTAB_INACT, IDR_PINTAB_HOVERIN, IDR_PINTAB_HOVERONTAB, IDR_PINTAB_PINNED, IDR_PINTAB_PINNEDHOVERIN }; } if (_hPinBtnImgLst != nullptr) @@ -912,13 +912,21 @@ LRESULT TabBarPlus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPara _isCloseHover = false; } - if (isFromTabToTab || _isCloseHover != isCloseHoverOld) + if (isFromTabToTab || _isCloseHover != isCloseHoverOld || _currentHoverTabItem != -1) { - if (isCloseHoverOld && (isFromTabToTab || !_isCloseHover)) + if (_currentHoverTabItem != -1 || isFromTabToTab) + { InvalidateRect(hwnd, ¤tHoverTabRectOld, FALSE); - - if (_isCloseHover) InvalidateRect(hwnd, &_currentHoverTabRect, FALSE); + } + else + { + if (isCloseHoverOld && (isFromTabToTab || !_isCloseHover)) + InvalidateRect(hwnd, ¤tHoverTabRectOld, FALSE); + + if (_isCloseHover) + InvalidateRect(hwnd, &_currentHoverTabRect, FALSE); + } } if (_isCloseHover) @@ -945,13 +953,21 @@ LRESULT TabBarPlus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPara _isPinHover = false; } - if (isFromTabToTab || _isPinHover != isPinHoverOld) + if (isFromTabToTab || _isPinHover != isPinHoverOld || _currentHoverTabItem != -1) { - if (isPinHoverOld && (isFromTabToTab || !_isPinHover)) + if (_currentHoverTabItem != -1 || isFromTabToTab) + { InvalidateRect(hwnd, ¤tHoverTabRectOld, FALSE); - - if (_isPinHover) InvalidateRect(hwnd, &_currentHoverTabRect, FALSE); + } + else + { + if (isPinHoverOld && (isFromTabToTab || !_isPinHover)) + InvalidateRect(hwnd, ¤tHoverTabRectOld, FALSE); + + if (_isPinHover) + InvalidateRect(hwnd, &_currentHoverTabRect, FALSE); + } } if (_isPinHover) @@ -970,8 +986,7 @@ LRESULT TabBarPlus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPara case WM_MOUSELEAVE: { - if (_isCloseHover || _isPinHover) - InvalidateRect(hwnd, &_currentHoverTabRect, FALSE); + InvalidateRect(hwnd, &_currentHoverTabRect, FALSE); _currentHoverTabItem = -1; _whichCloseClickDown = -1; @@ -1455,9 +1470,9 @@ void TabBarPlus::drawItem(DRAWITEMSTRUCT* pDrawItemStruct, bool isDarkMode) if (_isCloseHover && (_currentHoverTabItem == nTab)) { - if (_whichCloseClickDown == -1) // hover + if (_whichCloseClickDown == -1) // hover in { - idxCloseImg = _closeTabHoverIdx; + idxCloseImg = _closeTabHoverInIdx; } else if (_whichCloseClickDown == _currentHoverTabItem) // pushed { @@ -1466,7 +1481,7 @@ void TabBarPlus::drawItem(DRAWITEMSTRUCT* pDrawItemStruct, bool isDarkMode) } else if (!isSelected) // inactive { - idxCloseImg = _closeTabInactIdx; + idxCloseImg = (_currentHoverTabItem == nTab) ? _closeTabHoverOnTabIdx : _closeTabInactIdx; } RECT buttonRect = _closeButtonZone.getButtonRectFrom(rect, _isVertical); @@ -1523,7 +1538,7 @@ void TabBarPlus::drawItem(DRAWITEMSTRUCT* pDrawItemStruct, bool isDarkMode) { if (_whichPinClickDown == -1) // hover { - idxPinImg = _unpinnedHoverIdx; + idxPinImg = _unpinnedHoverInIdx; } else if (_whichPinClickDown == _currentHoverTabItem) // pushed { @@ -1533,13 +1548,13 @@ void TabBarPlus::drawItem(DRAWITEMSTRUCT* pDrawItemStruct, bool isDarkMode) } else // unpinned inactive { - idxPinImg = _unpinnedIdx; + idxPinImg = (_currentHoverTabItem == nTab) ? _unpinnedHoverOnTabIdx : _unpinnedInactIdx; } } else // current { if (_isPinHover && (_currentHoverTabItem == nTab)) // hover - idxPinImg = _unpinnedHoverIdx; + idxPinImg = _unpinnedHoverInIdx; else idxPinImg = _unpinnedIdx; } diff --git a/PowerEditor/src/WinControls/TabBar/TabBar.h b/PowerEditor/src/WinControls/TabBar/TabBar.h index d0fe125ce301..95abfbba83d6 100644 --- a/PowerEditor/src/WinControls/TabBar/TabBar.h +++ b/PowerEditor/src/WinControls/TabBar/TabBar.h @@ -270,6 +270,13 @@ public : _closeButtonZone.setOrder(newOrder); } + // Hack for forcing the tab width change + // ref: https://github.com/notepad-plus-plus/notepad-plus-plus/pull/15781#issuecomment-2469387409 + void refresh() { + int index = insertAtEnd(L""); + deletItemAt(index); + } + protected: // it's the boss to decide if we do the drag N drop static bool _doDragNDrop; @@ -293,14 +300,17 @@ public : HIMAGELIST _hCloseBtnImgLst = nullptr; const int _closeTabIdx = 0; const int _closeTabInactIdx = 1; - const int _closeTabHoverIdx = 2; - const int _closeTabPushIdx = 3; + const int _closeTabHoverInIdx = 2; // hover inside of box + const int _closeTabHoverOnTabIdx = 3; // hover on the tab, but outside of box + const int _closeTabPushIdx = 4; HIMAGELIST _hPinBtnImgLst = nullptr; const int _unpinnedIdx = 0; - const int _unpinnedHoverIdx = 1; - const int _pinnedIdx = 2; - const int _pinnedHoverIdx = 3; + const int _unpinnedInactIdx = 1; + const int _unpinnedHoverInIdx = 2; // hover inside of box + const int _unpinnedHoverOnTabIdx = 3; // hover on the tab, but outside of box + const int _pinnedIdx = 4; + const int _pinnedHoverIdx = 5; bool _isCloseHover = false; bool _isPinHover = false; @@ -341,21 +351,18 @@ public : void drawItem(DRAWITEMSTRUCT *pDrawItemStruct, bool isDarkMode = false); void draggingCursor(POINT screenPoint); - int getTabIndexAt(const POINT & p) - { + int getTabIndexAt(const POINT & p) const { return getTabIndexAt(p.x, p.y); } - int32_t getTabIndexAt(int x, int y) - { + int32_t getTabIndexAt(int x, int y) const { TCHITTESTINFO hitInfo{}; hitInfo.pt.x = x; hitInfo.pt.y = y; return static_cast(::SendMessage(_hSelf, TCM_HITTEST, 0, reinterpret_cast(&hitInfo))); } - bool isPointInParentZone(POINT screenPoint) const - { + bool isPointInParentZone(POINT screenPoint) const { RECT parentZone{}; ::GetWindowRect(_hParent, &parentZone); return (((screenPoint.x >= parentZone.left) && (screenPoint.x <= parentZone.right)) && diff --git a/PowerEditor/src/icons/dark/tabbar/closeTabButton_hover.ico b/PowerEditor/src/icons/dark/tabbar/closeTabButton_hover.ico deleted file mode 100644 index 8c39f6f5a31ccb8fc0553b5dc4260ec1da63c69a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2587 zcmbuAdoE=P$BO)t@XbDylb6zz3*P@S$ltMmz8vqC(01^oV zO$-b`0N4sfDAW(FBm{t}AkgR^+Eg$$MF60#{zF#^0}#0hfK)e^pQXeV#RXX@dpp=e z&~NOB6cfw=wT1NnLAN==&X)p!bn8YyTyjN_Ah|Wl1{ZaRd^Cz05J>`5D%Ie4cnF0U z5J55^M;4NM6!o1J@;m?7?v(VmMFMNaTiTQ)|EGOT4V>fGie z82#-@AxoJqd>SI06vm$O@eeeLGr4wI5_Y;tpx)43+}EWp_DRhP^53gmj0;h-!$M5e zj<||xGv}W8+x;syh3IwB7V~A^RfKx{tuFGEroCcY!R5MW!0QH}<7hsK&3y=v+&R1# zdA@GfSDJa|+dUwq{YC6ST~W^Rc3EE`i{E-;MBR4EqZX}d`J4pZ#1gw`s41`O<-85b zhA>OZ2%6;loQb|M-D}#fzapbgr&K%7=LF%z*fKFP@}MQ0O`L1O?Ks`eP6n&Hl5gx= zv&G%=1~u$J^4XO1v^!TQVP01lk~TrB3W*_JDhihu7>0Cy?PW`(1&sC0C(za}5DT5O z-nSL>V=i_}f{N+a=-rNt>vP;s>EpYz4+a*N(?VuSJt~`0?bhtL$v3*$uV&U{9wvMi zLCqGl7wBYV3S0s9HZE|rmH)Z_;Ohn%sK0#8NL7&%i2vQ!iXXmqY@pec$$XP{3@+w-Pw$a{1KDVB>Eb(O!I( zeS9dksN@W1gs6g7=4v}sUg$d`$&r4ynRY7%gr=CIzT#90JDuTd=~7!{cq6NcqGt& zp~0h?fBC=AXxl);E_KGs(nZ4(MQcVL^2vTKb+|v*^la>2ddP6Lo0stkJ0`-q%-E}| za3TUo^F)}JOz4j)d`gKgRtMe6w?&(TmFbOEC&Y7pUH@KXaKc#ei&Kg#XlrTVxN1%rYri;Mr8vcc@}w^YxRi zFd-x?&stU1U7>~M?OIOnYjlL!aBqE|?VZ8&`gU?^MOP>B)+zQ~05GiTruMi4)L(*} z;~#VqiRq8uVwyx9D)o-4#^%)N@6Val1fUH)p*>gs!Rr1U0B(9$WvGPCYD&aD(kCB3 zzIy=;`l2C=G1LX2sk^5SmtihKe)tgg+x@5R436JiXpkqde$peb5KKyI)7|Smb+{cy zVkRozrdlKIrI77;HV@6pppz_P0W!5$^YiB5XNqRgS+s^rGt)!S>QzJ<^yktD3LN*+laNb2@ebi7}KL4o}R0%FEWjg1M_AHrY9n$bS5ND#X7v| z)ZL4SvhI5{KR>Uc(YTqH6ZT4qdvf2JT_Tcb&v-53MohnDteEj?=zYw{vbq@H)znLU z5QfL!xN40$^+XZGe&?gN{fR3q=L0_=nmXB5`gQq5imFoJiF>Kf#$iwXo~06zfqISw zEF+N!$rrIhQXeCi8Rdo zRRl&h$hWUar%dweGa=)BSETs?A4y8Lz@?e}axT^rf7&)5aCe~JSje!dCmXe4B{aTa zs}kgD9Iue^`ChY^3R>Yno+IaB^>ow6y)Hj%AHC{36SIHQ{cKHpoMi0p9fIQ?I&^5^ z(Tp7Al-LMwqCoYb%a1L z-&D#{Ejbap9D-r_y=C?TCr6!85z7cihp!J8nr2BUw9yhC^GGoJl|JA?p(Nk>^0m%Y zlk~D+qo)h+LHU#Hr3cP04`U&>z0}T?OM7 c+k{rm($@EXms%{UN;4mk=n`DBe|`S{1T3Fk3jhEB diff --git a/PowerEditor/src/icons/dark/tabbar/closeTabButton_hoverIn.ico b/PowerEditor/src/icons/dark/tabbar/closeTabButton_hoverIn.ico new file mode 100644 index 0000000000000000000000000000000000000000..48440e17c04eab8a0ab84a9bfc8ac35b76506200 GIT binary patch literal 1741 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 FV1nZO{r3O> delta 1681 zcmV;C25$M65QY##000311ON~a000002mp-%002e+000ye000002mq-8007eg000;m z000002mrYO004Xg001B$000002msLn001?SLt%d!NklZrE5Jlf0E7~I@ zJ_7|u;Q~nt7nVymNhGueGU5g_mfUe6B)CGj0w~R@({ z8UYql{lYNBT8pXz{Ar#{aH}Q(P1B&NSZgopTm@*FhAhi`?B6??1(anu>U`QsS(YQf zX^9=M1laHQlTo86;&3?l**W*+6FBFpN!KMm3WA{W35H?V8Dlse({je!Ip?ar?^6J| z_ndzKxutD1>$v)ylTHO6liUGIe>O=(K~y-6&D1e&gD?~Z;Qyhj@)6pc!2{fc3$)o7 z7#Q11;6VDs30P3pT*#7rh2{!DUEC!>pco2OhW?Xf$)DfzlT2|Od&^J9b^S%k%tu1PUQOiRf)*K^r1^7eWBQ2QX-vh+bD>e|?B(dtDFT zux~R-5@@X_0j)KXBpGf!`M^F|mVueQs4)i2j5JNXmw7=cCHDLM4Qj1LRaH<*Aq>Oi zpbxdyqAbf<3>Zv#3ROyhnE~KeY_`I`W)`&8f|;R|^1kUR&=@m%v#CKX0*x`=X)Zy% zVAC{{1CUapCjj5XK|TT40KnmJ@b_~`6h$M@Irnu_p>ysytIQ+_g8pn@Vb^s# zAp|bp*Jh!0a?Tyk=W}`8pnv~k{{YIPg*+i9R27p>1s{`>151BKNklZq} z6o&tYs>(-bIYS1H!UfuH3>g^PN|6KfDJMW;V9kY)>?<@^h}Fein#e{N;z+4F^lg4T zz7Ib?VaoFyw~XYb^xqKNxr^OycQ1rsB6-9QV6BMjgD>O|LlxVF{*EOV+$g(V6FelMkqpGS!_@ZD+5(5WDV>&01Qi7QQ;9@xN zSAG>*YcMmUl(Pqal|U)w^?Yf%q6A8*$x)1v1O*{@tRzt=XxnyiT29l|bzQJ#Jf;T# zDFF0+AAHG;EX%xFYwf4|+}nY*c7G9dCXyua7~T$yF z(qD>iW`&(ZW|H^llTHO{e_lyMK~z|U<(EBg+E5gR-_*7|v=SC;B+FhHP^5O_Ph?ijogap&YAnJ{|`3LQ9Xu2^}&A?#GQbr`ZN@aqD+@ZxX!Qiii3_X+OdwkwU z*XO*xKC9R3c*%J6qUr$X$2SNeEKSo_K@hwLZ~@?TL5<%4egL@Me{420RaGCNi#t1D z7{)n8QQw0gm;$IhfjIuvr~&vyQPhoL80WD7gb>#E{jUJtK7r_=c<1~67eWZT2SC&G z)iaBS5EMmy+ye-L;KK>Tw-IVZd!TwkfQvYQH*uM&s-oF!!f~9`)g8w{qtQUC)jE_C zY9;!>YPG`c?JZ}Rq``3`;e>jZC$%JTj^m)y>A*Bi2!a4X5MbLjG)>E7R=EHk&p9Dv=XE6cL?M7f-JaGb3IQaI zS`mmufV6X-7a|d$+wF!8HV)@*ITK8$chkfoaS(=K983ANy@>9>&&*2sBh-old_Ez-^&Y@xvzY;ypFn)>dERUf zKvmTThG8zB8Dh>b%w@0F3(smhQy@vwo#%Nq01|*3{B6vlaSz}d0Lk;bnj}eg(Z#d> b{_pq?q$W2Fd0Fh%^I=* literal 0 HcmV?d00001 diff --git a/PowerEditor/src/resource.h b/PowerEditor/src/resource.h index 0d0c3c5f4078..af92d2870097 100644 --- a/PowerEditor/src/resource.h +++ b/PowerEditor/src/resource.h @@ -339,80 +339,86 @@ #define IDC_MACRO_RECORDING 1408 -#define IDR_SAVEALL 1500 -#define IDR_CLOSEFILE 1501 -#define IDR_CLOSEALL 1502 -#define IDR_FIND 1503 -#define IDR_REPLACE 1504 -#define IDR_ZOOMIN 1505 -#define IDR_ZOOMOUT 1506 -#define IDR_WRAP 1507 -#define IDR_INVISIBLECHAR 1508 -#define IDR_INDENTGUIDE 1509 -#define IDR_SHOWPANNEL 1510 -#define IDR_STARTRECORD 1511 -#define IDR_STOPRECORD 1512 -#define IDR_PLAYRECORD 1513 -#define IDR_SAVERECORD 1514 -#define IDR_SYNCV 1515 -#define IDR_SYNCH 1516 -#define IDR_FILENEW 1517 -#define IDR_FILEOPEN 1518 -#define IDR_FILESAVE 1519 -#define IDR_PRINT 1520 -#define IDR_CUT 1521 -#define IDR_COPY 1522 -#define IDR_PASTE 1523 -#define IDR_UNDO 1524 -#define IDR_REDO 1525 -#define IDR_M_PLAYRECORD 1526 -#define IDR_DOCMAP 1527 -#define IDR_FUNC_LIST 1528 -#define IDR_FILEBROWSER 1529 -#define IDR_CLOSETAB 1530 -#define IDR_CLOSETAB_INACT 1531 -#define IDR_CLOSETAB_HOVER 1532 -#define IDR_CLOSETAB_PUSH 1533 -#define IDR_FUNC_LIST_ICO 1534 -#define IDR_DOCMAP_ICO 1535 -#define IDR_PROJECTPANEL_ICO 1536 -#define IDR_CLIPBOARDPANEL_ICO 1537 -#define IDR_ASCIIPANEL_ICO 1538 -#define IDR_DOCSWITCHER_ICO 1539 -#define IDR_FILEBROWSER_ICO 1540 -#define IDR_FILEMONITORING 1541 -#define IDR_CLOSETAB_DM 1542 -#define IDR_CLOSETAB_INACT_DM 1543 -#define IDR_CLOSETAB_HOVER_DM 1544 -#define IDR_CLOSETAB_PUSH_DM 1545 -#define IDR_DOCLIST 1546 -#define IDR_DOCLIST_ICO 1547 - -#define IDR_FILEBROWSER_ICO2 1550 -#define IDR_FILEBROWSER_ICO_DM 1551 -#define IDR_FUNC_LIST_ICO2 1552 -#define IDR_FUNC_LIST_ICO_DM 1553 -#define IDR_DOCMAP_ICO2 1554 -#define IDR_DOCMAP_ICO_DM 1555 -#define IDR_DOCLIST_ICO2 1556 -#define IDR_DOCLIST_ICO_DM 1557 -#define IDR_PROJECTPANEL_ICO2 1558 -#define IDR_PROJECTPANEL_ICO_DM 1559 -#define IDR_CLIPBOARDPANEL_ICO2 1560 -#define IDR_CLIPBOARDPANEL_ICO_DM 1561 -#define IDR_ASCIIPANEL_ICO2 1562 -#define IDR_ASCIIPANEL_ICO_DM 1563 -#define IDR_FIND_RESULT_ICO2 1564 -#define IDR_FIND_RESULT_ICO_DM 1565 - -#define IDR_PINTAB 1566 -#define IDR_PINTAB_HOVER 1567 -#define IDR_PINTAB_PINNED 1568 -#define IDR_PINTAB_PINNEDHOVER 1569 -#define IDR_PINTAB_DM 1570 -#define IDR_PINTAB_HOVER_DM 1571 -#define IDR_PINTAB_PINNED_DM 1572 -#define IDR_PINTAB_PINNEDHOVER_DM 1573 +#define IDR_SAVEALL 1500 +#define IDR_CLOSEFILE 1501 +#define IDR_CLOSEALL 1502 +#define IDR_FIND 1503 +#define IDR_REPLACE 1504 +#define IDR_ZOOMIN 1505 +#define IDR_ZOOMOUT 1506 +#define IDR_WRAP 1507 +#define IDR_INVISIBLECHAR 1508 +#define IDR_INDENTGUIDE 1509 +#define IDR_SHOWPANNEL 1510 +#define IDR_STARTRECORD 1511 +#define IDR_STOPRECORD 1512 +#define IDR_PLAYRECORD 1513 +#define IDR_SAVERECORD 1514 +#define IDR_SYNCV 1515 +#define IDR_SYNCH 1516 +#define IDR_FILENEW 1517 +#define IDR_FILEOPEN 1518 +#define IDR_FILESAVE 1519 +#define IDR_PRINT 1520 +#define IDR_CUT 1521 +#define IDR_COPY 1522 +#define IDR_PASTE 1523 +#define IDR_UNDO 1524 +#define IDR_REDO 1525 +#define IDR_M_PLAYRECORD 1526 +#define IDR_DOCMAP 1527 +#define IDR_FUNC_LIST 1528 +#define IDR_FILEBROWSER 1529 +#define IDR_CLOSETAB 1530 +#define IDR_CLOSETAB_INACT 1531 +#define IDR_CLOSETAB_HOVERIN 1532 +#define IDR_CLOSETAB_HOVERONTAB 1533 +#define IDR_CLOSETAB_PUSH 1534 +#define IDR_FUNC_LIST_ICO 1535 +#define IDR_DOCMAP_ICO 1536 +#define IDR_PROJECTPANEL_ICO 1537 +#define IDR_CLIPBOARDPANEL_ICO 1538 +#define IDR_ASCIIPANEL_ICO 1539 +#define IDR_DOCSWITCHER_ICO 1540 +#define IDR_FILEBROWSER_ICO 1541 +#define IDR_FILEMONITORING 1542 +#define IDR_CLOSETAB_DM 1543 +#define IDR_CLOSETAB_INACT_DM 1544 +#define IDR_CLOSETAB_HOVERIN_DM 1545 +#define IDR_CLOSETAB_HOVERONTAB_DM 1546 +#define IDR_CLOSETAB_PUSH_DM 1547 +#define IDR_DOCLIST 1548 +#define IDR_DOCLIST_ICO 1549 + +#define IDR_FILEBROWSER_ICO2 1550 +#define IDR_FILEBROWSER_ICO_DM 1551 +#define IDR_FUNC_LIST_ICO2 1552 +#define IDR_FUNC_LIST_ICO_DM 1553 +#define IDR_DOCMAP_ICO2 1554 +#define IDR_DOCMAP_ICO_DM 1555 +#define IDR_DOCLIST_ICO2 1556 +#define IDR_DOCLIST_ICO_DM 1557 +#define IDR_PROJECTPANEL_ICO2 1558 +#define IDR_PROJECTPANEL_ICO_DM 1559 +#define IDR_CLIPBOARDPANEL_ICO2 1560 +#define IDR_CLIPBOARDPANEL_ICO_DM 1561 +#define IDR_ASCIIPANEL_ICO2 1562 +#define IDR_ASCIIPANEL_ICO_DM 1563 +#define IDR_FIND_RESULT_ICO2 1564 +#define IDR_FIND_RESULT_ICO_DM 1565 + +#define IDR_PINTAB 1566 +#define IDR_PINTAB_INACT 1567 +#define IDR_PINTAB_HOVERIN 1568 +#define IDR_PINTAB_HOVERONTAB 1569 +#define IDR_PINTAB_PINNED 1570 +#define IDR_PINTAB_PINNEDHOVERIN 1571 +#define IDR_PINTAB_DM 1572 +#define IDR_PINTAB_INACT_DM 1573 +#define IDR_PINTAB_HOVERIN_DM 1574 +#define IDR_PINTAB_HOVERONTAB_DM 1575 +#define IDR_PINTAB_PINNED_DM 1576 +#define IDR_PINTAB_PINNEDHOVERIN_DM 1577 #define ID_MACRO 20000 // O . From f607044da0b51d6a2fac992ff9de7df0a5cb2150 Mon Sep 17 00:00:00 2001 From: Don Ho Date: Wed, 13 Nov 2024 02:11:20 +0100 Subject: [PATCH 06/37] Fix wrong position of pin button while close disabled and pin enabled After disable close button and enable pin button, relaunch Notepad++ will make wrong position of pin button on tab. This commit fix the bug. --- PowerEditor/src/Notepad_plus.cpp | 8 +++-- .../src/ScintillaComponent/DocTabView.cpp | 4 +-- .../src/ScintillaComponent/DocTabView.h | 2 +- PowerEditor/src/WinControls/TabBar/TabBar.cpp | 31 +++++++++++++++++-- PowerEditor/src/WinControls/TabBar/TabBar.h | 2 +- 5 files changed, 38 insertions(+), 9 deletions(-) diff --git a/PowerEditor/src/Notepad_plus.cpp b/PowerEditor/src/Notepad_plus.cpp index eb82b3decc4a..722e11af5dcc 100644 --- a/PowerEditor/src/Notepad_plus.cpp +++ b/PowerEditor/src/Notepad_plus.cpp @@ -268,8 +268,12 @@ LRESULT Notepad_plus::init(HWND hwnd) _mainDocTab.dpiManager().setDpiWithParent(hwnd); _subDocTab.dpiManager().setDpiWithParent(hwnd); - _mainDocTab.init(_pPublicInterface->getHinst(), hwnd, &_mainEditView, indexDocTabIcon); - _subDocTab.init(_pPublicInterface->getHinst(), hwnd, &_subEditView, indexDocTabIcon); + unsigned char buttonsStatus = 0; + buttonsStatus |= (tabBarStatus & TAB_CLOSEBUTTON) ? 1 : 0; + buttonsStatus |= (tabBarStatus & TAB_PINBUTTON) ? 2 : 0; + + _mainDocTab.init(_pPublicInterface->getHinst(), hwnd, &_mainEditView, indexDocTabIcon, buttonsStatus); + _subDocTab.init(_pPublicInterface->getHinst(), hwnd, &_subEditView, indexDocTabIcon, buttonsStatus); _mainEditView.display(); diff --git a/PowerEditor/src/ScintillaComponent/DocTabView.cpp b/PowerEditor/src/ScintillaComponent/DocTabView.cpp index 52826230a974..4aff0d42aa13 100644 --- a/PowerEditor/src/ScintillaComponent/DocTabView.cpp +++ b/PowerEditor/src/ScintillaComponent/DocTabView.cpp @@ -32,9 +32,9 @@ int docTabIconIDs_alt[] = { IDI_SAVED_ALT_ICON, IDI_UNSAVED_ALT_ICON, IDI_READON -void DocTabView::init(HINSTANCE hInst, HWND parent, ScintillaEditView* pView, unsigned char indexChoice) +void DocTabView::init(HINSTANCE hInst, HWND parent, ScintillaEditView* pView, unsigned char indexChoice, unsigned char buttonsStatus) { - TabBarPlus::init(hInst, parent); + TabBarPlus::init(hInst, parent, false, false, buttonsStatus); _pView = pView; createIconSets(); diff --git a/PowerEditor/src/ScintillaComponent/DocTabView.h b/PowerEditor/src/ScintillaComponent/DocTabView.h index ffe35cc75762..c8c59d2a4468 100644 --- a/PowerEditor/src/ScintillaComponent/DocTabView.h +++ b/PowerEditor/src/ScintillaComponent/DocTabView.h @@ -35,7 +35,7 @@ public : TabBarPlus::destroy(); }; - void init(HINSTANCE hInst, HWND parent, ScintillaEditView * pView, unsigned char indexChoice); + void init(HINSTANCE hInst, HWND parent, ScintillaEditView * pView, unsigned char indexChoice, unsigned char buttonsStatus); void createIconSets(); diff --git a/PowerEditor/src/WinControls/TabBar/TabBar.cpp b/PowerEditor/src/WinControls/TabBar/TabBar.cpp index 88714101fdca..f041c464dc3d 100644 --- a/PowerEditor/src/WinControls/TabBar/TabBar.cpp +++ b/PowerEditor/src/WinControls/TabBar/TabBar.cpp @@ -288,13 +288,38 @@ void TabBarPlus::destroy() } -void TabBarPlus::init(HINSTANCE hInst, HWND parent, bool isVertical, bool isMultiLine) +void TabBarPlus::init(HINSTANCE hInst, HWND parent, bool isVertical, bool isMultiLine, unsigned char buttonsStatus) { Window::init(hInst, parent); const UINT dpi = DPIManagerV2::getDpiForWindow(_hParent); - _closeButtonZone.init(_hParent, 0); - _pinButtonZone.init(_hParent, 1); + + int closeOrder = -1; + int pinOder = -1; + + if (buttonsStatus == 0) // 0000: both buttons disabled + { + closeOrder = -1; + pinOder = -1; + } + else if (buttonsStatus == 1) // 0001: close enabled, pin disabled + { + closeOrder = 0; + pinOder = -1; + } + else if (buttonsStatus == 2) // 0010: close disabled, pin enabled + { + closeOrder = -1; + pinOder = 0; + } + else if (buttonsStatus == 3) // 0011: both buttons enabled + { + closeOrder = 0; + pinOder = 1; + } + + _closeButtonZone.init(_hParent, closeOrder); + _pinButtonZone.init(_hParent, pinOder); _dpiManager.setDpi(dpi); int vertical = isVertical ? (TCS_VERTICAL | TCS_MULTILINE | TCS_RIGHTJUSTIFY) : 0; diff --git a/PowerEditor/src/WinControls/TabBar/TabBar.h b/PowerEditor/src/WinControls/TabBar/TabBar.h index 95abfbba83d6..9f16368f1b44 100644 --- a/PowerEditor/src/WinControls/TabBar/TabBar.h +++ b/PowerEditor/src/WinControls/TabBar/TabBar.h @@ -186,7 +186,7 @@ public : _doDragNDrop = justDoIt; }; - void init(HINSTANCE hInst, HWND hwnd, bool isVertical = false, bool isMultiLine = false) override; + void init(HINSTANCE hInst, HWND hwnd, bool isVertical, bool isMultiLine, unsigned char buttonsStatus = 0); void destroy() override; From 796b3a40b7eb16be9e128ab5b997d0c558d0bd81 Mon Sep 17 00:00:00 2001 From: Don Ho Date: Wed, 13 Nov 2024 03:00:14 +0100 Subject: [PATCH 07/37] Highlight inactive darken tab on mouse hover Fix #15791, close #15794 --- PowerEditor/src/WinControls/TabBar/TabBar.cpp | 8 +++++++- .../dark/tabbar/closeTabButton_hoverOnTab.ico | Bin 1717 -> 1713 bytes 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/PowerEditor/src/WinControls/TabBar/TabBar.cpp b/PowerEditor/src/WinControls/TabBar/TabBar.cpp index f041c464dc3d..37336ea2b701 100644 --- a/PowerEditor/src/WinControls/TabBar/TabBar.cpp +++ b/PowerEditor/src/WinControls/TabBar/TabBar.cpp @@ -1475,7 +1475,13 @@ void TabBarPlus::drawItem(DRAWITEMSTRUCT* pDrawItemStruct, bool isDarkMode) { brushColour = colorActiveBg; } - + + if (_currentHoverTabItem == nTab && brushColour != colorActiveBg) // hover on a "darker" inactive tab + { + HLSColour hls(brushColour); + brushColour = hls.toRGB4DarkModWithTuning(15, 0); // make it lighter slightly + } + hBrush = ::CreateSolidBrush(brushColour); ::FillRect(hDC, &inactiveRect, hBrush); ::DeleteObject(static_cast(hBrush)); diff --git a/PowerEditor/src/icons/dark/tabbar/closeTabButton_hoverOnTab.ico b/PowerEditor/src/icons/dark/tabbar/closeTabButton_hoverOnTab.ico index 517435b8bc55f966b6d4435fe0260b231376bd6d..58cfcdc4875e4890de82b12bb63a105d145df4a7 100644 GIT binary patch delta 1338 zcmV-A1;zTc4Y3VF000311ON~a000002mmz!002e+000ye000002mogR004Ud000;m z000002mpow0080w001B$000002mna}003x_Lt%fyNklST5WG)PL`st} zDD5r_(6hqZ3xE=_12iy!SD>JZ7{cDjX&@qwQG#f=&ZoQA-M=ZzGHk(NlY5^7nAvKr ztB}`PSIlhxNicZtOQlpZ5lX4XdtU+=LNUdzFq(4!?MUSST4PKRYL7{hd=0SHKBbgr z01r$6wLS z^PGF?;jXlQ;Fq-4-dcM}C0T1PT5G=>2wX!5l`*E72aGXI2%!S5yMbNTRlpf2j4@5$ z_Yz@epa9x`_+}y5+QaCu0NQv}0IhSbOywN1EK35t_isw6C*TCUeg}hnQSwxf@9pnI$as(ce_X10Q6G=otR7i>Kls#(1 zFc5`5B`HFx9K)@;Twr@&LDB_m2oAZyu8Y_wkdNR()w1Laa_iG5jSY#h{6km>VP7eR z_c1eXB+@kHn!3BH`wj570ZJ)vj5)0t7-LRKDZd*4TtWzi*1C!nXsxRdLIGTM1Dd8O zfFqD;t*f?e#l-x72xLG#)b8#8Ywi08an5~=kiq;7sI9g6l84xG$-|g3pdOyGE#?6C zNs_Dry!U4* zbj>NcWTjLogea!wqrCT@Qp#r_>-+wx>$=%vTk7B-geaFD(qgU6g%Blhh}CSmgWu>M zf7ds_s4q)db4)vBr+Sld1ZscQNklEewK3 z2n19$U&=KP&~uAa5{W?0oK_;0+Lzd6@4NtKM6RA3l9gO1#!G3%#dEPdn%VzP^RYIy zS}p9;YI{|$04jhA0Kh?6K)2id%FLGl##-xZV@$d!UIx2BuR4Va1ub^Iq;>12h_qD`vjS zLPSw?pM{W8QW%Cm^5Rzx7G?KU@?%`aI904EkgN=dWXY)C|(bK<9E^8x_m`Z0R1 z#6&a!UaFGyDW!TY;=q3vYiNu~lO#DMqFd`@=FTqSTLAzs?MRa3EDN!V_|^c{(ln*K zkD1^2TI7&vR8@B7Eh{J2~$`JV#_A!_UO`W`^f`iN*kL~{V4g$RP+h?#%7 zLO20PDQUG@4fEnksb0U|pDh-PLja#F#5R>Eoq?h~w*zMfv*>P~C_BHj0-om$i0I6| z6VXI#{l~OVr&9p<6$HT%GVSnv|Kof<|Gnvamn}HSiWjY#F(y??_3Y)8&)o%J0N{y; wzL)K}g|IoV&yD7M75^{W`yWvSPyti`&nd0_<4z&-ZvX%Q07*qoM6N<$f(Pqgx&QzG delta 1342 zcmV-E1;P5U4YdtJ000311ON~a000002mmwz002e+000ye000002mopU004Rc000;m z000002mqM@0086y001B$000002mm+&004cFLt%fxNklE6!Nam7uFQz+^Ie>&u1yHzq-fIv{GBZ1qTnALR zd)7;({a7MNzRqP?vP(CPqUa5V{7V1@fFpo3j^kNf*ZbZGlD2qe&H@AOom|^JbagOq znr2&7)#?F4Cl`{7x2XTWfEy>jJ8pvlB$|_N0cwBuNkl}CVa%!LqE04h~&+O}nctpHR2 zwq}3k#(Fumhf!e#U>j3sSe@#*P0~(EYY}-Txs0hv7%;*C$N?NgqzrKuTI*m5UDv%PNpeR-Yh%o^uIm@Abr0Woco75upedW| z+mr)1_@n;iQ8)nHj?w{$NTHN^C!!~RGzkvOh$#_$o564pdch^1>*1);Qr(lyI~nfCz7A^fXJnlYv;oZEG8t^IM?VkvrX&h6W_ z-GnaqbbS!fW9ZJLJ@}3O@$dR-(CZVlV0OEC^M~q_Zvh{Zdjv~=#Ysd#R9J=WmOF03 zKoExiAtkuTQl!E(6fPHW3>sen1X2|8PztV)23&xYhXe`-NaIM65=F`xvd5ruV_cYm zO#vHO7WUdA5sm-G_GmowX?A98vTYm3ROzVM3xEQk003}eSyrk;qtUoyjJ-0(&P>z% zTrQU~&7X5#DwoTDlWMj4!WgS~p7)jJpQQp<0LlQaeczvP&J*9^oR@sxpAnII=TaA3 z3m~OjsCy#nCP74!cO&LS+%GqP<2W}&^c00ytyc3WgzLH#1i^hgd8JahJs7~YZ8;i^ zE}{?sIts#dT^bID4^qnWSn{3_Vxx;sSwBYmN-U*(2DVjyiP{Xq=x0d|(``(pOtkyvT%Gy8#>`U*ty9vRtA Date: Tue, 5 Nov 2024 06:47:22 -0500 Subject: [PATCH 08/37] Add ability to open/copy selected files from Search-results Add ability to open/copy selected files from Search-results, not always ALL files. Fix #15741, close #15763 --- PowerEditor/installer/nativeLang/english.xml | 4 +- .../nativeLang/english_customizable.xml | 4 +- PowerEditor/src/Notepad_plus.cpp | 2 +- .../src/ScintillaComponent/FindReplaceDlg.cpp | 55 +++++++++++++------ .../src/ScintillaComponent/FindReplaceDlg.h | 2 +- .../ScintillaComponent/ScintillaEditView.cpp | 4 +- .../ScintillaComponent/ScintillaEditView.h | 4 +- 7 files changed, 48 insertions(+), 27 deletions(-) diff --git a/PowerEditor/installer/nativeLang/english.xml b/PowerEditor/installer/nativeLang/english.xml index 81948c429b02..2fc85af17505 100644 --- a/PowerEditor/installer/nativeLang/english.xml +++ b/PowerEditor/installer/nativeLang/english.xml @@ -1719,9 +1719,9 @@ Find in all files but exclude all folders log or logs recursively: - + - + diff --git a/PowerEditor/installer/nativeLang/english_customizable.xml b/PowerEditor/installer/nativeLang/english_customizable.xml index 4731f5955b41..a3f7ee5b2af4 100644 --- a/PowerEditor/installer/nativeLang/english_customizable.xml +++ b/PowerEditor/installer/nativeLang/english_customizable.xml @@ -1717,9 +1717,9 @@ Find in all files but exclude all folders log or logs recursively: - + - + diff --git a/PowerEditor/src/Notepad_plus.cpp b/PowerEditor/src/Notepad_plus.cpp index 722e11af5dcc..ec7fdbfcebcd 100644 --- a/PowerEditor/src/Notepad_plus.cpp +++ b/PowerEditor/src/Notepad_plus.cpp @@ -2055,7 +2055,7 @@ bool Notepad_plus::findInFinderFiles(FindersInfo *findInFolderInfo) _pEditView = &_invisibleEditView; Document oldDoc = _invisibleEditView.execute(SCI_GETDOCPOINTER); - vector fileNames = findInFolderInfo->_pSourceFinder->getResultFilePaths(); + vector fileNames = findInFolderInfo->_pSourceFinder->getResultFilePaths(false); findInFolderInfo->_pDestFinder->beginNewFilesSearch(); findInFolderInfo->_pDestFinder->addSearchLine(findInFolderInfo->_findOption._str2Search.c_str()); diff --git a/PowerEditor/src/ScintillaComponent/FindReplaceDlg.cpp b/PowerEditor/src/ScintillaComponent/FindReplaceDlg.cpp index cbbc6cfe20d8..10f594ddff4b 100644 --- a/PowerEditor/src/ScintillaComponent/FindReplaceDlg.cpp +++ b/PowerEditor/src/ScintillaComponent/FindReplaceDlg.cpp @@ -682,24 +682,45 @@ void Finder::deleteResult() assert(size_t(_scintView.execute(SCI_GETLINECOUNT)) == _pMainFoundInfos->size() + 1); } -vector Finder::getResultFilePaths() const +vector Finder::getResultFilePaths(bool onlyInSelectedText) const { - vector paths; - size_t len = _pMainFoundInfos->size(); - for (size_t i = 0; i < len; ++i) + std::vector paths; + size_t fromLine = 0, toLine = 0; + + if (onlyInSelectedText) { - // make sure that path is not already in - wstring & path2add = (*_pMainFoundInfos)[i]._fullPath; - bool found = path2add.empty(); - for (size_t j = 0; j < paths.size() && !found; ++j) - { - if (paths[j] == path2add) - found = true; + const pair lineRange = _scintView.getSelectionLinesRange(); + fromLine = lineRange.first; + toLine = lineRange.second; + } + else + { + toLine = _scintView.execute(SCI_GETLINECOUNT) - 1; + } + for (size_t line = fromLine; line <= toLine; ++line) + { + const int lineFoldLevel = _scintView.execute(SCI_GETFOLDLEVEL, line) & SC_FOLDLEVELNUMBERMASK; + if (lineFoldLevel == fileHeaderLevel) + { + wstring lineStr = _scintView.getLine(line); + + // fileHeaderLevel line format examples: + // spacespaceD:\folder\file.ext (2 hits) + // spacespacenew 1 (1 hit) + const size_t startIndex = 2; // for number of leading spaces + auto endIndex = lineStr.find_last_of(L'('); + --endIndex; // adjust for space in front of ( + wstring path = lineStr.substr(startIndex, endIndex - startIndex); + + // make sure that path is not already in before adding + if (std::find(paths.begin(), paths.end(), path) == paths.end()) + { + paths.push_back(path); + } } - if (!found) - paths.push_back(path2add); } + return paths; } @@ -5350,7 +5371,7 @@ void Finder::removeAll() void Finder::openAll() { - for (auto&& path : getResultFilePaths()) + for (auto&& path : getResultFilePaths(true)) { ::SendMessage(_hParent, WM_DOOPEN, 0, reinterpret_cast(path.c_str())); } @@ -5359,7 +5380,7 @@ void Finder::openAll() void Finder::copyPathnames() { wstring toClipboard; - for (auto&& path : getResultFilePaths()) + for (auto&& path : getResultFilePaths(true)) { toClipboard += path + L"\r\n"; } @@ -5710,12 +5731,12 @@ intptr_t CALLBACK Finder::run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam wstring copyLines = pNativeSpeaker->getLocalizedStrFromID("finder-copy", L"Copy Selected Line(s)"); wstring copyVerbatim = pNativeSpeaker->getNativeLangMenuString(IDM_EDIT_COPY, L"Copy", true); copyVerbatim += L"\tCtrl+C"; - wstring copyPaths = pNativeSpeaker->getLocalizedStrFromID("finder-copy-paths", L"Copy Pathname(s)"); + wstring copyPaths = pNativeSpeaker->getLocalizedStrFromID("finder-copy-paths", L"Copy Selected Pathname(s)"); wstring selectAll = pNativeSpeaker->getNativeLangMenuString(IDM_EDIT_SELECTALL, L"Select all", true); selectAll += L"\tCtrl+A"; wstring clearAll = pNativeSpeaker->getLocalizedStrFromID("finder-clear-all", L"Clear all"); wstring purgeForEverySearch = pNativeSpeaker->getLocalizedStrFromID("finder-purge-for-every-search", L"Purge for every search"); - wstring openAll = pNativeSpeaker->getLocalizedStrFromID("finder-open-all", L"Open all"); + wstring openAll = pNativeSpeaker->getLocalizedStrFromID("finder-open-all", L"Open Selected Pathname(s)"); wstring wrapLongLines = pNativeSpeaker->getLocalizedStrFromID("finder-wrap-long-lines", L"Word wrap long lines"); tmp.push_back(MenuItemUnit(NPPM_INTERNAL_FINDINFINDERDLG, findInFinder)); diff --git a/PowerEditor/src/ScintillaComponent/FindReplaceDlg.h b/PowerEditor/src/ScintillaComponent/FindReplaceDlg.h index 8428cce95a6f..62b438cc7d27 100644 --- a/PowerEditor/src/ScintillaComponent/FindReplaceDlg.h +++ b/PowerEditor/src/ScintillaComponent/FindReplaceDlg.h @@ -143,7 +143,7 @@ friend class FindReplaceDlg; void gotoNextFoundResult(int direction); std::pair gotoFoundLine(size_t nOccurrence = 0); // value 0 means this argument is not used void deleteResult(); - std::vector getResultFilePaths() const; + std::vector getResultFilePaths(bool onlyInSelectedText) const; bool canFind(const wchar_t *fileName, size_t lineNumber, size_t* indexToStartFrom) const; void setVolatiled(bool val) { _canBeVolatiled = val; }; std::wstring getHitsString(int count) const; diff --git a/PowerEditor/src/ScintillaComponent/ScintillaEditView.cpp b/PowerEditor/src/ScintillaComponent/ScintillaEditView.cpp index a99e61e58910..cbd5ea15d79f 100644 --- a/PowerEditor/src/ScintillaComponent/ScintillaEditView.cpp +++ b/PowerEditor/src/ScintillaComponent/ScintillaEditView.cpp @@ -2801,7 +2801,7 @@ void ScintillaEditView::showCallTip(size_t startPos, const wchar_t * def) execute(SCI_CALLTIPSHOW, startPos, reinterpret_cast(defA)); } -wstring ScintillaEditView::getLine(size_t lineNumber) +wstring ScintillaEditView::getLine(size_t lineNumber) const { size_t lineLen = execute(SCI_LINELENGTH, lineNumber); const size_t bufSize = lineLen + 1; @@ -2810,7 +2810,7 @@ wstring ScintillaEditView::getLine(size_t lineNumber) return buf.get(); } -void ScintillaEditView::getLine(size_t lineNumber, wchar_t * line, size_t lineBufferLen) +void ScintillaEditView::getLine(size_t lineNumber, wchar_t * line, size_t lineBufferLen) const { // make sure the buffer length is enough to get the whole line size_t lineLen = execute(SCI_LINELENGTH, lineNumber); diff --git a/PowerEditor/src/ScintillaComponent/ScintillaEditView.h b/PowerEditor/src/ScintillaComponent/ScintillaEditView.h index b1326ff909e5..fadc47bc6ad7 100644 --- a/PowerEditor/src/ScintillaComponent/ScintillaEditView.h +++ b/PowerEditor/src/ScintillaComponent/ScintillaEditView.h @@ -476,8 +476,8 @@ friend class Finder; intptr_t replaceTargetRegExMode(const wchar_t * re, intptr_t fromTargetPos = -1, intptr_t toTargetPos = -1) const; void showAutoComletion(size_t lenEntered, const wchar_t * list); void showCallTip(size_t startPos, const wchar_t * def); - std::wstring getLine(size_t lineNumber); - void getLine(size_t lineNumber, wchar_t * line, size_t lineBufferLen); + std::wstring getLine(size_t lineNumber) const; + void getLine(size_t lineNumber, wchar_t * line, size_t lineBufferLen) const; void addText(size_t length, const char *buf); void insertNewLineAboveCurrentLine(); From eeb47530449cebabc9c94a8bccefc0f574a2491c Mon Sep 17 00:00:00 2001 From: pawelzwronek Date: Mon, 11 Nov 2024 16:46:30 +0100 Subject: [PATCH 09/37] Add "Minimize / Close to" option for System tray Fix #15771, close #15785 --- PowerEditor/installer/nativeLang/english.xml | 1 + PowerEditor/installer/nativeLang/english_customizable.xml | 1 + PowerEditor/installer/nativeLang/polish.xml | 1 + PowerEditor/src/Notepad_plus.cpp | 2 +- PowerEditor/src/NppBigSwitch.cpp | 7 ++++--- PowerEditor/src/Parameters.cpp | 2 ++ PowerEditor/src/Parameters.h | 2 +- PowerEditor/src/WinControls/Preference/preferenceDlg.cpp | 3 ++- 8 files changed, 13 insertions(+), 6 deletions(-) diff --git a/PowerEditor/installer/nativeLang/english.xml b/PowerEditor/installer/nativeLang/english.xml index 2fc85af17505..0fe080f94c6c 100644 --- a/PowerEditor/installer/nativeLang/english.xml +++ b/PowerEditor/installer/nativeLang/english.xml @@ -1317,6 +1317,7 @@ Translation note: + diff --git a/PowerEditor/installer/nativeLang/english_customizable.xml b/PowerEditor/installer/nativeLang/english_customizable.xml index a3f7ee5b2af4..3e3703fabe18 100644 --- a/PowerEditor/installer/nativeLang/english_customizable.xml +++ b/PowerEditor/installer/nativeLang/english_customizable.xml @@ -1315,6 +1315,7 @@ Translation note: + diff --git a/PowerEditor/installer/nativeLang/polish.xml b/PowerEditor/installer/nativeLang/polish.xml index 474e7caf5a08..2b0a338467df 100644 --- a/PowerEditor/installer/nativeLang/polish.xml +++ b/PowerEditor/installer/nativeLang/polish.xml @@ -1326,6 +1326,7 @@ Translation note: + diff --git a/PowerEditor/src/Notepad_plus.cpp b/PowerEditor/src/Notepad_plus.cpp index ec7fdbfcebcd..9165c0cf9b66 100644 --- a/PowerEditor/src/Notepad_plus.cpp +++ b/PowerEditor/src/Notepad_plus.cpp @@ -453,7 +453,7 @@ LRESULT Notepad_plus::init(HWND hwnd) _dockingManager.init(_pPublicInterface->getHinst(), hwnd, &_pMainWindow); - if ((nppGUI._isMinimizedToTray == sta_minimize || nppGUI._isMinimizedToTray == sta_close) && _pTrayIco == nullptr) + if (nppGUI._isMinimizedToTray != sta_none && _pTrayIco == nullptr) { HICON icon = nullptr; Notepad_plus_Window::loadTrayIcon(_pPublicInterface->getHinst(), &icon); diff --git a/PowerEditor/src/NppBigSwitch.cpp b/PowerEditor/src/NppBigSwitch.cpp index 8e1acec14974..c3dd2e321e4c 100644 --- a/PowerEditor/src/NppBigSwitch.cpp +++ b/PowerEditor/src/NppBigSwitch.cpp @@ -2835,9 +2835,10 @@ LRESULT Notepad_plus::process(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa case WM_SYSCOMMAND: { - const NppGUI & nppgui = (nppParam.getNppGUI()); - if (((nppgui._isMinimizedToTray == sta_minimize || _pPublicInterface->isPrelaunch()) && (wParam == SC_MINIMIZE)) || - (nppgui._isMinimizedToTray == sta_close && wParam == SC_CLOSE) + const NppGUI & nppgui = nppParam.getNppGUI(); + auto toTray = nppgui._isMinimizedToTray; + if (((toTray == sta_minimize || toTray == sta_minimize_close || _pPublicInterface->isPrelaunch()) && (wParam == SC_MINIMIZE)) || + ((toTray == sta_close || toTray == sta_minimize_close) && wParam == SC_CLOSE) ) { if (nullptr == _pTrayIco) diff --git a/PowerEditor/src/Parameters.cpp b/PowerEditor/src/Parameters.cpp index 5b65b9e33a88..73c8b33bfcad 100644 --- a/PowerEditor/src/Parameters.cpp +++ b/PowerEditor/src/Parameters.cpp @@ -5037,6 +5037,8 @@ void NppParameters::feedGUIParameters(TiXmlNode *node) _nppGUI._isMinimizedToTray = sta_minimize; else if (lstrcmp(val, L"2") == 0) _nppGUI._isMinimizedToTray = sta_close; + else if (lstrcmp(val, L"3") == 0) + _nppGUI._isMinimizedToTray = sta_minimize_close; } } } diff --git a/PowerEditor/src/Parameters.h b/PowerEditor/src/Parameters.h index c9cc0fcc55d3..c59f8ca6f84d 100644 --- a/PowerEditor/src/Parameters.h +++ b/PowerEditor/src/Parameters.h @@ -122,7 +122,7 @@ enum urlMode {urlDisable = 0, urlNoUnderLineFg, urlUnderLineFg, urlNoUnderLineBg urlMax = urlUnderLineBg}; enum AutoIndentMode { autoIndent_none = 0, autoIndent_advanced = 1, autoIndent_basic = 2 }; -enum SysTrayAction { sta_none = 0, sta_minimize = 1, sta_close = 2 }; +enum SysTrayAction { sta_none = 0, sta_minimize = 1, sta_close = 2, sta_minimize_close = 3 }; const int LANG_INDEX_INSTR = 0; const int LANG_INDEX_INSTR2 = 1; diff --git a/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp b/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp index a8c83fc1d7c7..fa849211cd50 100644 --- a/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp +++ b/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp @@ -2425,8 +2425,9 @@ intptr_t CALLBACK MiscSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM) ::SendDlgItemMessage(_hSelf, IDC_COMBO_SYSTRAY_ACTION_HOICE, CB_ADDSTRING, 0, reinterpret_cast(L"No action to")); ::SendDlgItemMessage(_hSelf, IDC_COMBO_SYSTRAY_ACTION_HOICE, CB_ADDSTRING, 0, reinterpret_cast(L"Minimize to")); ::SendDlgItemMessage(_hSelf, IDC_COMBO_SYSTRAY_ACTION_HOICE, CB_ADDSTRING, 0, reinterpret_cast(L"Close to")); + ::SendDlgItemMessage(_hSelf, IDC_COMBO_SYSTRAY_ACTION_HOICE, CB_ADDSTRING, 0, reinterpret_cast(L"Minimize / Close to")); - if (nppGUI._isMinimizedToTray < 0 || nppGUI._isMinimizedToTray > sta_close) + if (nppGUI._isMinimizedToTray < 0 || nppGUI._isMinimizedToTray > sta_minimize_close) nppGUI._isMinimizedToTray = sta_none; ::SendDlgItemMessage(_hSelf, IDC_COMBO_SYSTRAY_ACTION_HOICE, CB_SETCURSEL, nppGUI._isMinimizedToTray, 0); From c24444acfe28644af992d5a6253be0b145c300b1 Mon Sep 17 00:00:00 2001 From: Don Ho Date: Sat, 16 Nov 2024 17:52:14 +0100 Subject: [PATCH 10/37] Fix Ctrl-C not doing copy from Search result issue Solution from: https://github.com/notepad-plus-plus/notepad-plus-plus/issues/15739#issuecomment-2479671245 Fix #15739, close #15810 --- .../installer/nativeLang/abkhazian.xml | 1 - PowerEditor/installer/nativeLang/russian.xml | 1 - PowerEditor/src/Notepad_plus.cpp | 27 ++++++++++---- PowerEditor/src/NppBigSwitch.cpp | 4 +-- PowerEditor/src/NppCommands.cpp | 4 +-- .../src/ScintillaComponent/FindReplaceDlg.cpp | 21 ++++++----- .../src/ScintillaComponent/FindReplaceDlg.h | 13 ++++++- .../src/ScintillaComponent/GoToLineDlg.cpp | 2 +- .../src/ScintillaComponent/columnEditor.cpp | 2 +- .../AnsiCharPanel/ansiCharPanel.cpp | 4 +-- .../clipboardHistoryPanel.cpp | 2 +- .../WinControls/ColourPicker/WordStyleDlg.cpp | 2 +- .../WinControls/FileBrowser/fileBrowser.cpp | 2 +- .../WinControls/Preference/preferenceDlg.cpp | 4 +-- PowerEditor/src/WinControls/Window.h | 36 +++++++------------ 15 files changed, 70 insertions(+), 55 deletions(-) diff --git a/PowerEditor/installer/nativeLang/abkhazian.xml b/PowerEditor/installer/nativeLang/abkhazian.xml index f1208252c544..dc85ab502d37 100644 --- a/PowerEditor/installer/nativeLang/abkhazian.xml +++ b/PowerEditor/installer/nativeLang/abkhazian.xml @@ -1484,7 +1484,6 @@ Updated to v8.2.1: - diff --git a/PowerEditor/installer/nativeLang/russian.xml b/PowerEditor/installer/nativeLang/russian.xml index dc59134194f4..b2225da24822 100644 --- a/PowerEditor/installer/nativeLang/russian.xml +++ b/PowerEditor/installer/nativeLang/russian.xml @@ -1762,7 +1762,6 @@ Notepad++ сделает резервную копию вашего старог - diff --git a/PowerEditor/src/Notepad_plus.cpp b/PowerEditor/src/Notepad_plus.cpp index 9165c0cf9b66..cc8be2af0f04 100644 --- a/PowerEditor/src/Notepad_plus.cpp +++ b/PowerEditor/src/Notepad_plus.cpp @@ -880,7 +880,7 @@ LRESULT Notepad_plus::init(HWND hwnd) activateBuffer(_mainEditView.getCurrentBufferID(), MAIN_VIEW); activateBuffer(_subEditView.getCurrentBufferID(), SUB_VIEW); - _mainEditView.getFocus(); + _mainEditView.grabFocus(); return TRUE; } @@ -2566,7 +2566,20 @@ void Notepad_plus::checkClipboard() if (!NppParameters::getInstance().getSVP()._lineCopyCutWithoutSelection) { enableCommand(IDM_EDIT_CUT, hasSelection, MENU | TOOLBAR); - enableCommand(IDM_EDIT_COPY, hasSelection, MENU | TOOLBAR); + + if (hasSelection) + { + enableCommand(IDM_EDIT_COPY, true, MENU | TOOLBAR); + } + else if (_findReplaceDlg.allowCopyAction()) + { + enableCommand(IDM_EDIT_COPY, false, TOOLBAR); + enableCommand(IDM_EDIT_COPY, true, MENU); + } + else + { + enableCommand(IDM_EDIT_COPY, false, MENU | TOOLBAR); + } } enableCommand(IDM_EDIT_PASTE, canPaste, MENU | TOOLBAR); enableCommand(IDM_EDIT_DELETE, hasSelection, MENU | TOOLBAR); @@ -4752,7 +4765,7 @@ int Notepad_plus::switchEditViewTo(int gid) if (currentView() == gid) { //make sure focus is ok, then leave - _pEditView->getFocus(); //set the focus + _pEditView->grabFocus(); //set the focus return gid; } @@ -4768,7 +4781,7 @@ int Notepad_plus::switchEditViewTo(int gid) std::swap(_pEditView, _pNonEditView); _pEditView->beSwitched(); - _pEditView->getFocus(); //set the focus + _pEditView->grabFocus(); //set the focus if (_pDocMap) { @@ -5939,7 +5952,7 @@ void Notepad_plus::fullScreenToggle() int y = nppRect.top; ::MoveWindow(_restoreButton.getHSelf(), x, y, w, h, FALSE); - _pEditView->getFocus(); + _pEditView->grabFocus(); } else //toggle fullscreen off { @@ -6073,7 +6086,7 @@ void Notepad_plus::postItToggle() int y = nppRect.top + 1; ::MoveWindow(_restoreButton.getHSelf(), x, y, w, h, FALSE); - _pEditView->getFocus(); + _pEditView->grabFocus(); } else //PostIt enabled, disable it { @@ -7697,7 +7710,7 @@ void Notepad_plus::launchDocMap() _pDocMap->wrapMap(); _pDocMap->display(); - _pEditView->getFocus(); + _pEditView->grabFocus(); } diff --git a/PowerEditor/src/NppBigSwitch.cpp b/PowerEditor/src/NppBigSwitch.cpp index c3dd2e321e4c..5df0ca6e727f 100644 --- a/PowerEditor/src/NppBigSwitch.cpp +++ b/PowerEditor/src/NppBigSwitch.cpp @@ -2257,7 +2257,7 @@ LRESULT Notepad_plus::process(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa { if (wParam != WA_INACTIVE && _pEditView && _pNonEditView) { - _pEditView->getFocus(); + _pEditView->grabFocus(); auto x = _pEditView->execute(SCI_GETXOFFSET); _pEditView->execute(SCI_SETXOFFSET, x); x = _pNonEditView->execute(SCI_GETXOFFSET); @@ -2880,7 +2880,7 @@ LRESULT Notepad_plus::process(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa //case WM_LBUTTONDBLCLK: case WM_LBUTTONUP : { - _pEditView->getFocus(); + _pEditView->grabFocus(); ::ShowWindow(hwnd, SW_SHOW); _dockingManager.showFloatingContainers(true); restoreMinimizeDialogs(); diff --git a/PowerEditor/src/NppCommands.cpp b/PowerEditor/src/NppCommands.cpp index 2a1db337a1a7..f7a82030460b 100644 --- a/PowerEditor/src/NppCommands.cpp +++ b/PowerEditor/src/NppCommands.cpp @@ -895,7 +895,7 @@ void Notepad_plus::command(int id) { if (_pDocumentListPanel && _pDocumentListPanel->isVisible()) { - _pDocumentListPanel->getFocus(); + _pDocumentListPanel->grabFocus(); } else { @@ -1035,7 +1035,7 @@ void Notepad_plus::command(int id) { if (_pFuncList && _pFuncList->isVisible()) { - _pFuncList->getFocus(); + _pFuncList->grabFocus(); } else { diff --git a/PowerEditor/src/ScintillaComponent/FindReplaceDlg.cpp b/PowerEditor/src/ScintillaComponent/FindReplaceDlg.cpp index 10f594ddff4b..d5476a0d0915 100644 --- a/PowerEditor/src/ScintillaComponent/FindReplaceDlg.cpp +++ b/PowerEditor/src/ScintillaComponent/FindReplaceDlg.cpp @@ -577,10 +577,15 @@ bool Finder::notify(SCNotification *notification) case SCN_PAINTED : if (isDoubleClicked) { - (*_ppEditView)->getFocus(); + (*_ppEditView)->grabFocus(); isDoubleClicked = false; } break; + + case SCN_UPDATEUI: + ::SendMessage(_hParent, NPPM_INTERNAL_CHECKUNDOREDOSTATE, 0, 0); + break; + } return false; } @@ -2352,7 +2357,7 @@ intptr_t CALLBACK FindReplaceDlg::run_dlgProc(UINT message, WPARAM wParam, LPARA setStatusbarMessage(result, FSMessage, reasonMsg); } - getFocus(); + grabFocus(); } } return TRUE; @@ -2401,7 +2406,7 @@ intptr_t CALLBACK FindReplaceDlg::run_dlgProc(UINT message, WPARAM wParam, LPARA if (isMacroRecording) saveInMacro(wParam, FR_OP_FIND); - getFocus(); + grabFocus(); } } return TRUE; @@ -2451,7 +2456,7 @@ intptr_t CALLBACK FindReplaceDlg::run_dlgProc(UINT message, WPARAM wParam, LPARA setStatusbarMessage(result, FSMessage, reasonMsg); } - getFocus(); + grabFocus(); } } return TRUE; @@ -2874,7 +2879,7 @@ bool FindReplaceDlg::processFindNext(const wchar_t *txt2find, const FindOption * // if the dialog is not shown, pass the focus to his parent(ie. Notepad++) if (!::IsWindowVisible(_hSelf)) { - (*_ppEditView)->getFocus(); + (*_ppEditView)->grabFocus(); } else { @@ -3676,7 +3681,7 @@ void FindReplaceDlg::findAllIn(InWhat op) { // Show finder _pFinder->display(); - getFocus(); // no hits + grabFocus(); // no hits } } else // error - search folder doesn't exist @@ -3776,7 +3781,7 @@ Finder * FindReplaceDlg::createFinder() // Show finder pFinder->display(); - pFinder->_scintView.getFocus(); + pFinder->_scintView.grabFocus(); return pFinder; } @@ -5905,7 +5910,7 @@ intptr_t CALLBACK FindIncrementDlg::run_dlgProc(UINT message, WPARAM wParam, LPA { case IDCANCEL : (*(_pFRDlg->_ppEditView))->clearIndicator(SCE_UNIVERSAL_FOUND_STYLE_INC); - (*(_pFRDlg->_ppEditView))->getFocus(); + (*(_pFRDlg->_ppEditView))->grabFocus(); display(false); return TRUE; diff --git a/PowerEditor/src/ScintillaComponent/FindReplaceDlg.h b/PowerEditor/src/ScintillaComponent/FindReplaceDlg.h index 62b438cc7d27..36c278bfed5a 100644 --- a/PowerEditor/src/ScintillaComponent/FindReplaceDlg.h +++ b/PowerEditor/src/ScintillaComponent/FindReplaceDlg.h @@ -352,10 +352,21 @@ public : if (_pFinder) { _pFinder->display(); - _pFinder->_scintView.getFocus(); + _pFinder->_scintView.grabFocus(); } }; + bool allowCopyAction() { + HWND focusedHwnd = GetFocus(); + Finder* finder = getFinderFrom(focusedHwnd); + + if (finder) + { + return finder->_scintView.hasSelection(); + } + return false; + }; + HWND getHFindResults() { if (_pFinder) return _pFinder->_scintView.getHSelf(); diff --git a/PowerEditor/src/ScintillaComponent/GoToLineDlg.cpp b/PowerEditor/src/ScintillaComponent/GoToLineDlg.cpp index 2ddbcfc86994..2f40c4ee7028 100644 --- a/PowerEditor/src/ScintillaComponent/GoToLineDlg.cpp +++ b/PowerEditor/src/ScintillaComponent/GoToLineDlg.cpp @@ -118,7 +118,7 @@ intptr_t CALLBACK GoToLineDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM l notification.nmhdr.idFrom = ::GetDlgCtrlID(_hSelf); ::SendMessage(_hParent, WM_NOTIFY, LINKTRIGGERED, reinterpret_cast(¬ification)); - (*_ppEditView)->getFocus(); + (*_ppEditView)->grabFocus(); return TRUE; } diff --git a/PowerEditor/src/ScintillaComponent/columnEditor.cpp b/PowerEditor/src/ScintillaComponent/columnEditor.cpp index c26302357ae3..f963443a3c43 100644 --- a/PowerEditor/src/ScintillaComponent/columnEditor.cpp +++ b/PowerEditor/src/ScintillaComponent/columnEditor.cpp @@ -353,7 +353,7 @@ intptr_t CALLBACK ColumnEditorDlg::run_dlgProc(UINT message, WPARAM wParam, LPAR } } (*_ppEditView)->execute(SCI_ENDUNDOACTION); - (*_ppEditView)->getFocus(); + (*_ppEditView)->grabFocus(); return TRUE; } case IDC_COL_TEXT_RADIO : diff --git a/PowerEditor/src/WinControls/AnsiCharPanel/ansiCharPanel.cpp b/PowerEditor/src/WinControls/AnsiCharPanel/ansiCharPanel.cpp index 0194025609bb..df3637444fb9 100644 --- a/PowerEditor/src/WinControls/AnsiCharPanel/ansiCharPanel.cpp +++ b/PowerEditor/src/WinControls/AnsiCharPanel/ansiCharPanel.cpp @@ -176,7 +176,7 @@ void AnsiCharPanel::insertChar(unsigned char char2insert) const (*_ppEditView)->execute(SCI_REPLACESEL, 0, reinterpret_cast("")); size_t len = (char2insert < 128) ? 1 : strlen(multiByteStr); (*_ppEditView)->execute(SCI_ADDTEXT, len, reinterpret_cast(multiByteStr)); - (*_ppEditView)->getFocus(); + (*_ppEditView)->grabFocus(); } void AnsiCharPanel::insertString(LPWSTR string2insert) const @@ -203,5 +203,5 @@ void AnsiCharPanel::insertString(LPWSTR string2insert) const (*_ppEditView)->execute(SCI_REPLACESEL, 0, reinterpret_cast("")); size_t len = strlen(multiByteStr); (*_ppEditView)->execute(SCI_ADDTEXT, len, reinterpret_cast(multiByteStr)); - (*_ppEditView)->getFocus(); + (*_ppEditView)->grabFocus(); } diff --git a/PowerEditor/src/WinControls/ClipboardHistory/clipboardHistoryPanel.cpp b/PowerEditor/src/WinControls/ClipboardHistory/clipboardHistoryPanel.cpp index efdffb6cb165..7814c3a8ae99 100644 --- a/PowerEditor/src/WinControls/ClipboardHistory/clipboardHistoryPanel.cpp +++ b/PowerEditor/src/WinControls/ClipboardHistory/clipboardHistoryPanel.cpp @@ -287,7 +287,7 @@ intptr_t CALLBACK ClipboardHistoryPanel::run_dlgProc(UINT message, WPARAM wParam (*_ppEditView)->execute(SCI_REPLACESEL, 0, reinterpret_cast("")); (*_ppEditView)->execute(SCI_ADDTEXT, strlen(c), reinterpret_cast(c)); - (*_ppEditView)->getFocus(); + (*_ppEditView)->grabFocus(); delete[] c; } } diff --git a/PowerEditor/src/WinControls/ColourPicker/WordStyleDlg.cpp b/PowerEditor/src/WinControls/ColourPicker/WordStyleDlg.cpp index 2b636fbcbf94..198768ef1279 100644 --- a/PowerEditor/src/WinControls/ColourPicker/WordStyleDlg.cpp +++ b/PowerEditor/src/WinControls/ColourPicker/WordStyleDlg.cpp @@ -1008,7 +1008,7 @@ bool WordStyleDlg::goToSection(const wchar_t* sectionNames) ::SendDlgItemMessage(_hSelf, IDC_STYLES_LIST, LB_SETCURSEL, i, 0); setVisualFromStyleList(); - getFocus(); + grabFocus(); return true; } diff --git a/PowerEditor/src/WinControls/FileBrowser/fileBrowser.cpp b/PowerEditor/src/WinControls/FileBrowser/fileBrowser.cpp index 1494fb57e11c..e1818b037137 100644 --- a/PowerEditor/src/WinControls/FileBrowser/fileBrowser.cpp +++ b/PowerEditor/src/WinControls/FileBrowser/fileBrowser.cpp @@ -449,7 +449,7 @@ bool FileBrowser::selectItemFromPath(const wstring& itemPath) const if (foundItem) { _treeView.selectItem(foundItem); - _treeView.getFocus(); + _treeView.grabFocus(); return true; } } diff --git a/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp b/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp index fa849211cd50..a8b4ea289156 100644 --- a/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp +++ b/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp @@ -104,7 +104,7 @@ bool PreferenceDlg::goToSection(size_t iPage, intptr_t ctrlID) { ::SendDlgItemMessage(_hSelf, IDC_LIST_DLGTITLE, LB_SETCURSEL, iPage, 0); showDialogByIndex(iPage); - getFocus(); + grabFocus(); if (ctrlID != -1) { @@ -2047,7 +2047,7 @@ intptr_t CALLBACK DarkModeSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARA } NppDarkMode::refreshDarkMode(_hSelf, forceRefresh); - getFocus(); // to make black mode title bar appear + grabFocus(); // to make black mode title bar appear return TRUE; } diff --git a/PowerEditor/src/WinControls/Window.h b/PowerEditor/src/WinControls/Window.h index 5f929792a952..79a7fa349cfc 100644 --- a/PowerEditor/src/WinControls/Window.h +++ b/PowerEditor/src/WinControls/Window.h @@ -29,61 +29,52 @@ class Window //@} - virtual void init(HINSTANCE hInst, HWND parent) - { + virtual void init(HINSTANCE hInst, HWND parent) { _hInst = hInst; _hParent = parent; } virtual void destroy() = 0; - virtual void display(bool toShow = true) const - { + virtual void display(bool toShow = true) const { ::ShowWindow(_hSelf, toShow ? SW_SHOW : SW_HIDE); } - virtual void reSizeTo(RECT & rc) // should NEVER be const !!! - { + virtual void reSizeTo(RECT & rc) { // should NEVER be const !!! ::MoveWindow(_hSelf, rc.left, rc.top, rc.right, rc.bottom, TRUE); redraw(); } - virtual void reSizeToWH(RECT& rc) // should NEVER be const !!! - { + virtual void reSizeToWH(RECT& rc) { // should NEVER be const !!! ::MoveWindow(_hSelf, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, TRUE); redraw(); } - virtual void redraw(bool forceUpdate = false) const - { + virtual void redraw(bool forceUpdate = false) const { ::InvalidateRect(_hSelf, nullptr, TRUE); if (forceUpdate) ::UpdateWindow(_hSelf); } - virtual void getClientRect(RECT & rc) const - { + virtual void getClientRect(RECT & rc) const { ::GetClientRect(_hSelf, &rc); } - virtual void getWindowRect(RECT & rc) const - { + virtual void getWindowRect(RECT & rc) const { ::GetWindowRect(_hSelf, &rc); } - virtual int getWidth() const - { + virtual int getWidth() const { RECT rc; ::GetClientRect(_hSelf, &rc); return (rc.right - rc.left); } - virtual int getHeight() const - { + virtual int getHeight() const { RECT rc; ::GetClientRect(_hSelf, &rc); if (::IsWindowVisible(_hSelf) == TRUE) @@ -96,8 +87,7 @@ class Window return (::IsWindowVisible(_hSelf)?true:false); } - HWND getHSelf() const - { + HWND getHSelf() const { return _hSelf; } @@ -105,13 +95,11 @@ class Window return _hParent; } - void getFocus() const { + void grabFocus() const { ::SetFocus(_hSelf); } - HINSTANCE getHinst() const - { - //assert(_hInst != 0); + HINSTANCE getHinst() const { return _hInst; } From 30e1319ea80589159968aa51d37daa01d8f01572 Mon Sep 17 00:00:00 2001 From: pawelzwronek Date: Sat, 16 Nov 2024 19:40:08 +0100 Subject: [PATCH 11/37] Fix empty.ico - removed random semi-transparent pixel Close #15811 --- PowerEditor/src/icons/dark/tabbar/empty.ico | Bin 790 -> 174 bytes PowerEditor/src/icons/standard/tabbar/empty.ico | Bin 790 -> 174 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/PowerEditor/src/icons/dark/tabbar/empty.ico b/PowerEditor/src/icons/dark/tabbar/empty.ico index 619284cedc96c4930f3a5ce1c55cf5944548c8ac..14a1bc4cf0c46d4b62ceaed50a7976b58012be1c 100644 GIT binary patch literal 174 ocmZQzU<5*5UM4U-gMooT42U&=m=}npfEXlC3-JF30|TiT0B^(^s{jB1 literal 790 zcmZQzU<5*5UIrkkz`(%Fz#zuJz@P!dKp_SxAO?#A=}|B;LqJhck##8h{QnOI2158d Gni>Fh%^I=* diff --git a/PowerEditor/src/icons/standard/tabbar/empty.ico b/PowerEditor/src/icons/standard/tabbar/empty.ico index 619284cedc96c4930f3a5ce1c55cf5944548c8ac..14a1bc4cf0c46d4b62ceaed50a7976b58012be1c 100644 GIT binary patch literal 174 ocmZQzU<5*5UM4U-gMooT42U&=m=}npfEXlC3-JF30|TiT0B^(^s{jB1 literal 790 zcmZQzU<5*5UIrkkz`(%Fz#zuJz@P!dKp_SxAO?#A=}|B;LqJhck##8h{QnOI2158d Gni>Fh%^I=* From 467182602a4331342015f5ad99a295e76b9da8bd Mon Sep 17 00:00:00 2001 From: Don Ho Date: Sun, 17 Nov 2024 05:26:02 +0100 Subject: [PATCH 12/37] Fix selected pathnames in search results localization issue Bug introduced by commit: https://github.com/notepad-plus-plus/notepad-plus-plus/commit/b8224808bdb6f9eaf94c066219634715703828da#diff-a6ac7ceba70d88bf1547fd1defd760bd55052dcdb78c44f9d46d99ef1f450472L1722 Fix by https://github.com/notepad-plus-plus/notepad-plus-plus/issues/15741#issuecomment-2480350071 Close #15813 --- PowerEditor/installer/nativeLang/english.xml | 4 +-- .../nativeLang/english_customizable.xml | 4 +-- PowerEditor/src/Parameters.h | 4 +-- .../src/ScintillaComponent/FindReplaceDlg.cpp | 32 +++++++++++-------- PowerEditor/src/WinControls/TabBar/TabBar.cpp | 2 +- 5 files changed, 25 insertions(+), 21 deletions(-) diff --git a/PowerEditor/installer/nativeLang/english.xml b/PowerEditor/installer/nativeLang/english.xml index 0fe080f94c6c..d624501c98c8 100644 --- a/PowerEditor/installer/nativeLang/english.xml +++ b/PowerEditor/installer/nativeLang/english.xml @@ -1720,9 +1720,9 @@ Find in all files but exclude all folders log or logs recursively: - + - + diff --git a/PowerEditor/installer/nativeLang/english_customizable.xml b/PowerEditor/installer/nativeLang/english_customizable.xml index 3e3703fabe18..8c6a7f9559e3 100644 --- a/PowerEditor/installer/nativeLang/english_customizable.xml +++ b/PowerEditor/installer/nativeLang/english_customizable.xml @@ -1718,9 +1718,9 @@ Find in all files but exclude all folders log or logs recursively: - + - + diff --git a/PowerEditor/src/Parameters.h b/PowerEditor/src/Parameters.h index c59f8ca6f84d..8742c0101cd6 100644 --- a/PowerEditor/src/Parameters.h +++ b/PowerEditor/src/Parameters.h @@ -1396,12 +1396,12 @@ struct HLSColour void loadFromRGB(COLORREF rgb) { ColorRGBToHLS(rgb, &_hue, &_lightness, &_saturation); } COLORREF toRGB() const { return ColorHLSToRGB(_hue, _lightness, _saturation); } - COLORREF toRGB4DarkModWithTuning(int lightnessMore, int saturationLess) const { + COLORREF toRGB4DarkModeWithTuning(int lightnessMore, int saturationLess) const { return ColorHLSToRGB(_hue, static_cast(static_cast(_lightness) + lightnessMore), static_cast(static_cast(_saturation) - saturationLess)); } - COLORREF toRGB4DarkMod() const { return toRGB4DarkModWithTuning(50, 20); } + COLORREF toRGB4DarkMod() const { return toRGB4DarkModeWithTuning(50, 20); } }; struct UdlXmlFileState final { diff --git a/PowerEditor/src/ScintillaComponent/FindReplaceDlg.cpp b/PowerEditor/src/ScintillaComponent/FindReplaceDlg.cpp index d5476a0d0915..aab7f006c4d5 100644 --- a/PowerEditor/src/ScintillaComponent/FindReplaceDlg.cpp +++ b/PowerEditor/src/ScintillaComponent/FindReplaceDlg.cpp @@ -703,29 +703,33 @@ vector Finder::getResultFilePaths(bool onlyInSelectedText) const toLine = _scintView.execute(SCI_GETLINECOUNT) - 1; } + size_t len = _pMainFoundInfos->size(); // First, get the number of elements in the container for (size_t line = fromLine; line <= toLine; ++line) { + bool found = false; // Was it found? const int lineFoldLevel = _scintView.execute(SCI_GETFOLDLEVEL, line) & SC_FOLDLEVELNUMBERMASK; if (lineFoldLevel == fileHeaderLevel) { - wstring lineStr = _scintView.getLine(line); - - // fileHeaderLevel line format examples: - // spacespaceD:\folder\file.ext (2 hits) - // spacespacenew 1 (1 hit) - const size_t startIndex = 2; // for number of leading spaces - auto endIndex = lineStr.find_last_of(L'('); - --endIndex; // adjust for space in front of ( - wstring path = lineStr.substr(startIndex, endIndex - startIndex); - - // make sure that path is not already in before adding - if (std::find(paths.begin(), paths.end(), path) == paths.end()) + line++; // Move to the next line + if (line < len) + found = true; // Found it + } + else if (lineFoldLevel == resultLevel) + { + if (line < len) + found = true; // Found it + } + if (found) + { + wstring& path = (*_pMainFoundInfos)[line]._fullPath; // Get the path from the container + if (path.find('\\') != std::wstring::npos && std::find(paths.begin(), paths.end(), path) == paths.end()) // Contains a path separator and does not exist in the container { paths.push_back(path); } } } + return paths; } @@ -5736,12 +5740,12 @@ intptr_t CALLBACK Finder::run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam wstring copyLines = pNativeSpeaker->getLocalizedStrFromID("finder-copy", L"Copy Selected Line(s)"); wstring copyVerbatim = pNativeSpeaker->getNativeLangMenuString(IDM_EDIT_COPY, L"Copy", true); copyVerbatim += L"\tCtrl+C"; - wstring copyPaths = pNativeSpeaker->getLocalizedStrFromID("finder-copy-paths", L"Copy Selected Pathname(s)"); + wstring copyPaths = pNativeSpeaker->getLocalizedStrFromID("finder-copy-selected-paths", L"Copy Selected Pathname(s)"); wstring selectAll = pNativeSpeaker->getNativeLangMenuString(IDM_EDIT_SELECTALL, L"Select all", true); selectAll += L"\tCtrl+A"; wstring clearAll = pNativeSpeaker->getLocalizedStrFromID("finder-clear-all", L"Clear all"); wstring purgeForEverySearch = pNativeSpeaker->getLocalizedStrFromID("finder-purge-for-every-search", L"Purge for every search"); - wstring openAll = pNativeSpeaker->getLocalizedStrFromID("finder-open-all", L"Open Selected Pathname(s)"); + wstring openAll = pNativeSpeaker->getLocalizedStrFromID("finder-open-selected-paths", L"Open Selected Pathname(s)"); wstring wrapLongLines = pNativeSpeaker->getLocalizedStrFromID("finder-wrap-long-lines", L"Word wrap long lines"); tmp.push_back(MenuItemUnit(NPPM_INTERNAL_FINDINFINDERDLG, findInFinder)); diff --git a/PowerEditor/src/WinControls/TabBar/TabBar.cpp b/PowerEditor/src/WinControls/TabBar/TabBar.cpp index 37336ea2b701..fd6357b6fd6d 100644 --- a/PowerEditor/src/WinControls/TabBar/TabBar.cpp +++ b/PowerEditor/src/WinControls/TabBar/TabBar.cpp @@ -1479,7 +1479,7 @@ void TabBarPlus::drawItem(DRAWITEMSTRUCT* pDrawItemStruct, bool isDarkMode) if (_currentHoverTabItem == nTab && brushColour != colorActiveBg) // hover on a "darker" inactive tab { HLSColour hls(brushColour); - brushColour = hls.toRGB4DarkModWithTuning(15, 0); // make it lighter slightly + brushColour = hls.toRGB4DarkModeWithTuning(15, 0); // make it lighter slightly } hBrush = ::CreateSolidBrush(brushColour); From af2b90f0a586028afb3f26159cfaa4eaf250ed84 Mon Sep 17 00:00:00 2001 From: Don Ho Date: Mon, 18 Nov 2024 16:52:26 +0100 Subject: [PATCH 13/37] Add ability to open/copy selected files from Search-results (2) Restoring the ability of copying untitled document name. ref: https://github.com/notepad-plus-plus/notepad-plus-plus/issues/15741#issuecomment-2481665911 --- PowerEditor/src/ScintillaComponent/FindReplaceDlg.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/PowerEditor/src/ScintillaComponent/FindReplaceDlg.cpp b/PowerEditor/src/ScintillaComponent/FindReplaceDlg.cpp index aab7f006c4d5..fb7a9fc12c85 100644 --- a/PowerEditor/src/ScintillaComponent/FindReplaceDlg.cpp +++ b/PowerEditor/src/ScintillaComponent/FindReplaceDlg.cpp @@ -722,10 +722,7 @@ vector Finder::getResultFilePaths(bool onlyInSelectedText) const if (found) { wstring& path = (*_pMainFoundInfos)[line]._fullPath; // Get the path from the container - if (path.find('\\') != std::wstring::npos && std::find(paths.begin(), paths.end(), path) == paths.end()) // Contains a path separator and does not exist in the container - { - paths.push_back(path); - } + paths.push_back(path); } } From 8f0484caf3e413cd3e28590f8a4e1c11e10f6c39 Mon Sep 17 00:00:00 2001 From: Don Ho Date: Tue, 19 Nov 2024 02:52:48 +0100 Subject: [PATCH 14/37] Fix Ctrl-C not doing copy from Search result issue (part 2) Fix using F7 to switch in Search results not working with Ctrl-C issue. Ref: https://github.com/notepad-plus-plus/notepad-plus-plus/issues/15739#issuecomment-2481400295 --- PowerEditor/src/ScintillaComponent/FindReplaceDlg.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/PowerEditor/src/ScintillaComponent/FindReplaceDlg.cpp b/PowerEditor/src/ScintillaComponent/FindReplaceDlg.cpp index fb7a9fc12c85..84246b11b057 100644 --- a/PowerEditor/src/ScintillaComponent/FindReplaceDlg.cpp +++ b/PowerEditor/src/ScintillaComponent/FindReplaceDlg.cpp @@ -5633,6 +5633,12 @@ intptr_t CALLBACK Finder::run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam { case WM_COMMAND : { + if (HIWORD(wParam) == SCEN_SETFOCUS) + { + ::SendMessage(_hParent, NPPM_INTERNAL_CHECKUNDOREDOSTATE, 0, 0); + return TRUE; + } + switch (wParam) { case NPPM_INTERNAL_FINDINFINDERDLG: From c021c861959765db9efa0a7d6b156538a0e6f4db Mon Sep 17 00:00:00 2001 From: xomx Date: Fri, 15 Nov 2024 17:52:02 +0100 Subject: [PATCH 15/37] Code enhancement for file checking Add missing dwFileAttributes init to INVALID_FILE_ATTRIBUTES. Close #15820 --- PowerEditor/installer/nativeLang/english.xml | 1 + .../nativeLang/english_customizable.xml | 1 + PowerEditor/src/MISC/Common/Common.cpp | 13 ++++---- PowerEditor/src/MISC/Common/Common.h | 4 +-- PowerEditor/src/MISC/Common/FileInterface.cpp | 1 + PowerEditor/src/Parameters.cpp | 2 +- PowerEditor/src/ScintillaComponent/Buffer.cpp | 30 +++++++++++++++---- .../ReadDirectoryChanges/ReadFileChanges.cpp | 14 +++++---- .../ReadDirectoryChanges/ReadFileChanges.h | 5 ++-- 9 files changed, 51 insertions(+), 20 deletions(-) diff --git a/PowerEditor/installer/nativeLang/english.xml b/PowerEditor/installer/nativeLang/english.xml index d624501c98c8..6d68d3319555 100644 --- a/PowerEditor/installer/nativeLang/english.xml +++ b/PowerEditor/installer/nativeLang/english.xml @@ -1552,6 +1552,7 @@ Press the OK button to open the Find dialog or set focus on it. If you require the backward regex searching feature, consult the user manual for instructions on enabling it."/> + diff --git a/PowerEditor/installer/nativeLang/english_customizable.xml b/PowerEditor/installer/nativeLang/english_customizable.xml index 8c6a7f9559e3..2ab6b11331de 100644 --- a/PowerEditor/installer/nativeLang/english_customizable.xml +++ b/PowerEditor/installer/nativeLang/english_customizable.xml @@ -1550,6 +1550,7 @@ Press the OK button to open the Find dialog or set focus on it. If you require the backward regex searching feature, consult the user manual for instructions on enabling it."/> + diff --git a/PowerEditor/src/MISC/Common/Common.cpp b/PowerEditor/src/MISC/Common/Common.cpp index 2f708779c7c3..a89432ef9686 100644 --- a/PowerEditor/src/MISC/Common/Common.cpp +++ b/PowerEditor/src/MISC/Common/Common.cpp @@ -1778,7 +1778,7 @@ struct GetDiskFreeSpaceParamResult { std::wstring _dirPath; ULARGE_INTEGER _freeBytesForUser {}; - DWORD _result = FALSE; + BOOL _result = FALSE; bool _isTimeoutReached = true; GetDiskFreeSpaceParamResult(wstring dirPath) : _dirPath(dirPath) {}; @@ -1792,7 +1792,7 @@ DWORD WINAPI getDiskFreeSpaceExWorker(void* data) return ERROR_SUCCESS; }; -DWORD getDiskFreeSpaceWithTimeout(const wchar_t* dirPath, ULARGE_INTEGER* freeBytesForUser, DWORD milliSec2wait, bool* isTimeoutReached) +BOOL getDiskFreeSpaceWithTimeout(const wchar_t* dirPath, ULARGE_INTEGER* freeBytesForUser, DWORD milliSec2wait, bool* isTimeoutReached) { GetDiskFreeSpaceParamResult data(dirPath); @@ -1833,7 +1833,7 @@ struct GetAttrExParamResult { wstring _filePath; WIN32_FILE_ATTRIBUTE_DATA _attributes{}; - DWORD _result = FALSE; + BOOL _result = FALSE; bool _isTimeoutReached = true; GetAttrExParamResult(wstring filePath): _filePath(filePath) { @@ -1844,12 +1844,12 @@ struct GetAttrExParamResult DWORD WINAPI getFileAttributesExWorker(void* data) { GetAttrExParamResult* inAndOut = static_cast(data); - inAndOut->_result = ::GetFileAttributesEx(inAndOut->_filePath.c_str(), GetFileExInfoStandard, &(inAndOut->_attributes)); + inAndOut->_result = ::GetFileAttributesExW(inAndOut->_filePath.c_str(), GetFileExInfoStandard, &(inAndOut->_attributes)); inAndOut->_isTimeoutReached = false; return ERROR_SUCCESS; }; -DWORD getFileAttributesExWithTimeout(const wchar_t* filePath, WIN32_FILE_ATTRIBUTE_DATA* fileAttr, DWORD milliSec2wait, bool* isTimeoutReached) +BOOL getFileAttributesExWithTimeout(const wchar_t* filePath, WIN32_FILE_ATTRIBUTE_DATA* fileAttr, DWORD milliSec2wait, bool* isTimeoutReached) { GetAttrExParamResult data(filePath); @@ -1886,6 +1886,7 @@ DWORD getFileAttributesExWithTimeout(const wchar_t* filePath, WIN32_FILE_ATTRIBU bool doesFileExist(const wchar_t* filePath, DWORD milliSec2wait, bool* isTimeoutReached) { WIN32_FILE_ATTRIBUTE_DATA attributes{}; + attributes.dwFileAttributes = INVALID_FILE_ATTRIBUTES; getFileAttributesExWithTimeout(filePath, &attributes, milliSec2wait, isTimeoutReached); return (attributes.dwFileAttributes != INVALID_FILE_ATTRIBUTES && !(attributes.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)); } @@ -1893,6 +1894,7 @@ bool doesFileExist(const wchar_t* filePath, DWORD milliSec2wait, bool* isTimeout bool doesDirectoryExist(const wchar_t* dirPath, DWORD milliSec2wait, bool* isTimeoutReached) { WIN32_FILE_ATTRIBUTE_DATA attributes{}; + attributes.dwFileAttributes = INVALID_FILE_ATTRIBUTES; getFileAttributesExWithTimeout(dirPath, &attributes, milliSec2wait, isTimeoutReached); return (attributes.dwFileAttributes != INVALID_FILE_ATTRIBUTES && (attributes.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)); } @@ -1900,6 +1902,7 @@ bool doesDirectoryExist(const wchar_t* dirPath, DWORD milliSec2wait, bool* isTim bool doesPathExist(const wchar_t* path, DWORD milliSec2wait, bool* isTimeoutReached) { WIN32_FILE_ATTRIBUTE_DATA attributes{}; + attributes.dwFileAttributes = INVALID_FILE_ATTRIBUTES; getFileAttributesExWithTimeout(path, &attributes, milliSec2wait, isTimeoutReached); return (attributes.dwFileAttributes != INVALID_FILE_ATTRIBUTES); } diff --git a/PowerEditor/src/MISC/Common/Common.h b/PowerEditor/src/MISC/Common/Common.h index e6b4e972abc1..bb843c05bd52 100644 --- a/PowerEditor/src/MISC/Common/Common.h +++ b/PowerEditor/src/MISC/Common/Common.h @@ -283,8 +283,8 @@ class Version final }; -DWORD getDiskFreeSpaceWithTimeout(const wchar_t* dirPath, ULARGE_INTEGER* freeBytesForUser, DWORD milliSec2wait = 0, bool* isTimeoutReached = nullptr); -DWORD getFileAttributesExWithTimeout(const wchar_t* filePath, WIN32_FILE_ATTRIBUTE_DATA* fileAttr, DWORD milliSec2wait = 0, bool* isTimeoutReached = nullptr); +BOOL getDiskFreeSpaceWithTimeout(const wchar_t* dirPath, ULARGE_INTEGER* freeBytesForUser, DWORD milliSec2wait = 0, bool* isTimeoutReached = nullptr); +BOOL getFileAttributesExWithTimeout(const wchar_t* filePath, WIN32_FILE_ATTRIBUTE_DATA* fileAttr, DWORD milliSec2wait = 0, bool* isTimeoutReached = nullptr); bool doesFileExist(const wchar_t* filePath, DWORD milliSec2wait = 0, bool* isTimeoutReached = nullptr); bool doesDirectoryExist(const wchar_t* dirPath, DWORD milliSec2wait = 0, bool* isTimeoutReached = nullptr); diff --git a/PowerEditor/src/MISC/Common/FileInterface.cpp b/PowerEditor/src/MISC/Common/FileInterface.cpp index 153bc07140de..f7c5850323ac 100644 --- a/PowerEditor/src/MISC/Common/FileInterface.cpp +++ b/PowerEditor/src/MISC/Common/FileInterface.cpp @@ -31,6 +31,7 @@ Win32_IO_File::Win32_IO_File(const wchar_t *fname) _path = converter.to_bytes(fn); WIN32_FILE_ATTRIBUTE_DATA attributes_original{}; + attributes_original.dwFileAttributes = INVALID_FILE_ATTRIBUTES; DWORD dispParam = CREATE_ALWAYS; bool fileExists = false; bool isTimeoutReached = false; diff --git a/PowerEditor/src/Parameters.cpp b/PowerEditor/src/Parameters.cpp index 73c8b33bfcad..1f0c5ed761df 100644 --- a/PowerEditor/src/Parameters.cpp +++ b/PowerEditor/src/Parameters.cpp @@ -1270,7 +1270,7 @@ bool NppParameters::load() if (doesFileExist(langs_xml_path.c_str())) { WIN32_FILE_ATTRIBUTE_DATA attributes{}; - + attributes.dwFileAttributes = INVALID_FILE_ATTRIBUTES; if (GetFileAttributesEx(langs_xml_path.c_str(), GetFileExInfoStandard, &attributes) != 0) { if (attributes.nFileSizeLow == 0 && attributes.nFileSizeHigh == 0) diff --git a/PowerEditor/src/ScintillaComponent/Buffer.cpp b/PowerEditor/src/ScintillaComponent/Buffer.cpp index 863e268692df..1effb8ef4512 100644 --- a/PowerEditor/src/ScintillaComponent/Buffer.cpp +++ b/PowerEditor/src/ScintillaComponent/Buffer.cpp @@ -142,7 +142,8 @@ void Buffer::updateTimeStamp() { FILETIME timeStampLive {}; WIN32_FILE_ATTRIBUTE_DATA attributes{}; - if (getFileAttributesExWithTimeout(_fullPathName.c_str(), &attributes) != FALSE) + attributes.dwFileAttributes = INVALID_FILE_ATTRIBUTES; + if (getFileAttributesExWithTimeout(_fullPathName.c_str(), &attributes)) { timeStampLive = attributes.ftLastWriteTime; } @@ -260,6 +261,7 @@ bool Buffer::checkFileState() // returns true if the status has been changed (it return false; WIN32_FILE_ATTRIBUTE_DATA attributes{}; + attributes.dwFileAttributes = INVALID_FILE_ATTRIBUTES; NppParameters& nppParam = NppParameters::getInstance(); bool fileExists = doesFileExist(_fullPathName.c_str()); @@ -311,7 +313,7 @@ bool Buffer::checkFileState() // returns true if the status has been changed (it isOK = true; } } - else if (getFileAttributesExWithTimeout(_fullPathName.c_str(), &attributes) != FALSE) + else if (getFileAttributesExWithTimeout(_fullPathName.c_str(), &attributes)) { int mask = 0; //status always 'changes', even if from modified to modified bool isFileReadOnly = attributes.dwFileAttributes & FILE_ATTRIBUTE_READONLY; @@ -381,6 +383,7 @@ bool Buffer::checkFileState() // returns true if the status has been changed (it void Buffer::reload() { WIN32_FILE_ATTRIBUTE_DATA attributes{}; + attributes.dwFileAttributes = INVALID_FILE_ATTRIBUTES; if (GetFileAttributesEx(_fullPathName.c_str(), GetFileExInfoStandard, &attributes) != 0) { _timeStamp = attributes.ftLastWriteTime; @@ -395,6 +398,7 @@ int64_t Buffer::getFileLength() const return -1; WIN32_FILE_ATTRIBUTE_DATA attributes{}; + attributes.dwFileAttributes = INVALID_FILE_ATTRIBUTES; if (GetFileAttributesEx(_fullPathName.c_str(), GetFileExInfoStandard, &attributes) != 0) { LARGE_INTEGER size{}; @@ -428,6 +432,7 @@ wstring Buffer::getTimeString(FILETIME rawtime) const wstring Buffer::getFileTime(fileTimeType ftt) const { WIN32_FILE_ATTRIBUTE_DATA attributes{}; + attributes.dwFileAttributes = INVALID_FILE_ATTRIBUTES; if (GetFileAttributesEx(_currentStatus == DOC_UNNAMED ? _backupFileName.c_str() : _fullPathName.c_str(), GetFileExInfoStandard, &attributes) != 0) { FILETIME rawtime; @@ -710,7 +715,8 @@ BufferID FileManager::loadFile(const wchar_t* filename, Document doc, int encodi if (pPath) { WIN32_FILE_ATTRIBUTE_DATA attributes{}; - if (getFileAttributesExWithTimeout(pPath, &attributes) != FALSE) + attributes.dwFileAttributes = INVALID_FILE_ATTRIBUTES; + if (getFileAttributesExWithTimeout(pPath, &attributes)) { LARGE_INTEGER size{}; size.LowPart = attributes.nFileSizeLow; @@ -719,9 +725,21 @@ BufferID FileManager::loadFile(const wchar_t* filename, Document doc, int encodi fileSize = size.QuadPart; } } - + + if (fileSize == -1) + { + // we cannot continue (or Scintilla will throw SC_STATUS_FAILURE in the loadFileData later) + NativeLangSpeaker* pNativeSpeaker = NppParameters::getInstance().getNativeLangSpeaker(); + pNativeSpeaker->messageBox("FileToLoadSizeCheckFailed", + _pNotepadPlus->_pEditView->getHSelf(), + L"Cannot obtain the file size before loading!", + L"File to load size-check failed", + MB_OK | MB_APPLMODAL); + return BUFFER_INVALID; + } + // * the auto-completion feature will be disabled for large files - // * the session snapshotsand periodic backups feature will be disabled for large files + // * the session snapshots and periodic backups feature will be disabled for large files // * the backups on save feature will be disabled for large files const NppGUI& nppGui = NppParameters::getInstance().getNppGUI(); bool isLargeFile = false; @@ -845,6 +863,7 @@ bool FileManager::reloadBuffer(BufferID id) //Get file size int64_t fileSize = 0; WIN32_FILE_ATTRIBUTE_DATA attributes{}; + attributes.dwFileAttributes = INVALID_FILE_ATTRIBUTES; getFileAttributesExWithTimeout(buf->getFullPathName(), &attributes); if (attributes.dwFileAttributes == INVALID_FILE_ATTRIBUTES) { @@ -1209,6 +1228,7 @@ SavingStatus FileManager::saveBuffer(BufferID id, const wchar_t* filename, bool } WIN32_FILE_ATTRIBUTE_DATA attributes{}; + attributes.dwFileAttributes = INVALID_FILE_ATTRIBUTES; getFileAttributesExWithTimeout(fullpath, &attributes); if (attributes.dwFileAttributes != INVALID_FILE_ATTRIBUTES && !(attributes.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { diff --git a/PowerEditor/src/WinControls/ReadDirectoryChanges/ReadFileChanges.cpp b/PowerEditor/src/WinControls/ReadDirectoryChanges/ReadFileChanges.cpp index 8cb036b7d1e5..c96cacf47532 100644 --- a/PowerEditor/src/WinControls/ReadDirectoryChanges/ReadFileChanges.cpp +++ b/PowerEditor/src/WinControls/ReadDirectoryChanges/ReadFileChanges.cpp @@ -2,17 +2,21 @@ -BOOL CReadFileChanges::DetectChanges() { - - WIN32_FILE_ATTRIBUTE_DATA fInfo; +BOOL CReadFileChanges::DetectChanges() +{ + WIN32_FILE_ATTRIBUTE_DATA fInfo{}; + fInfo.dwFileAttributes = INVALID_FILE_ATTRIBUTES; BOOL rValue = FALSE; + ::GetFileAttributesEx(_szFile, GetFileExInfoStandard, &fInfo); - if ((_dwNotifyFilter & FILE_NOTIFY_CHANGE_SIZE) && (fInfo.nFileSizeHigh != _lastFileInfo.nFileSizeHigh || fInfo.nFileSizeLow != _lastFileInfo.nFileSizeLow)) { + if ((_dwNotifyFilter & FILE_NOTIFY_CHANGE_SIZE) && (fInfo.nFileSizeHigh != _lastFileInfo.nFileSizeHigh || fInfo.nFileSizeLow != _lastFileInfo.nFileSizeLow)) + { rValue = TRUE; } - if ((_dwNotifyFilter & FILE_NOTIFY_CHANGE_LAST_WRITE) && (fInfo.ftLastWriteTime.dwHighDateTime != _lastFileInfo.ftLastWriteTime.dwHighDateTime || fInfo.ftLastWriteTime.dwLowDateTime != _lastFileInfo.ftLastWriteTime.dwLowDateTime)) { + if ((_dwNotifyFilter & FILE_NOTIFY_CHANGE_LAST_WRITE) && (fInfo.ftLastWriteTime.dwHighDateTime != _lastFileInfo.ftLastWriteTime.dwHighDateTime || fInfo.ftLastWriteTime.dwLowDateTime != _lastFileInfo.ftLastWriteTime.dwLowDateTime)) + { rValue = TRUE; } diff --git a/PowerEditor/src/WinControls/ReadDirectoryChanges/ReadFileChanges.h b/PowerEditor/src/WinControls/ReadDirectoryChanges/ReadFileChanges.h index e0da0ffd2b12..3de4d6027e06 100644 --- a/PowerEditor/src/WinControls/ReadDirectoryChanges/ReadFileChanges.h +++ b/PowerEditor/src/WinControls/ReadDirectoryChanges/ReadFileChanges.h @@ -14,7 +14,9 @@ class CReadFileChanges { public: - CReadFileChanges() {}; + CReadFileChanges() { + _lastFileInfo.dwFileAttributes = INVALID_FILE_ATTRIBUTES; + }; ~CReadFileChanges() {}; void AddFile(LPCTSTR szDirectory, DWORD dwNotifyFilter); BOOL DetectChanges(); @@ -24,6 +26,5 @@ class CReadFileChanges LPCTSTR _szFile = nullptr; DWORD _dwNotifyFilter = 0; WIN32_FILE_ATTRIBUTE_DATA _lastFileInfo = {}; - }; From dad2353a1b7dd92cdf459d61306317d1fd3a9bd4 Mon Sep 17 00:00:00 2001 From: WildByDesign Date: Sun, 17 Nov 2024 19:56:55 -0500 Subject: [PATCH 16/37] Update Record macro toolbar icon for dark mode Close #15818 --- .../dark/toolbar/filled/startrecord_dis.ico | Bin 14286 -> 19052 bytes .../dark/toolbar/filled/startrecord_off.ico | Bin 13606 -> 17892 bytes .../dark/toolbar/regular/startrecord_dis.ico | Bin 18793 -> 15299 bytes .../dark/toolbar/regular/startrecord_off.ico | Bin 17568 -> 14278 bytes .../light/toolbar/filled/startrecord_dis.ico | Bin 13755 -> 18057 bytes .../light/toolbar/filled/startrecord_off.ico | Bin 13904 -> 18369 bytes .../light/toolbar/regular/startrecord_dis.ico | Bin 17827 -> 14416 bytes .../light/toolbar/regular/startrecord_off.ico | Bin 18087 -> 14605 bytes 8 files changed, 0 insertions(+), 0 deletions(-) diff --git a/PowerEditor/src/icons/dark/toolbar/filled/startrecord_dis.ico b/PowerEditor/src/icons/dark/toolbar/filled/startrecord_dis.ico index 70e4ca2c679edd5ddeb5a21c4be3ea13e845ded2..0502f7519bc022b1cc226e0b913c1b898d9ea4da 100644 GIT binary patch literal 19052 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±(j_+CaiZEeIZJ#O<98*?-ZhLgaLL%5Y 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 literal 13606 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 X{yF}Tyi2G+I diff --git a/PowerEditor/src/icons/dark/toolbar/regular/startrecord_dis.ico b/PowerEditor/src/icons/dark/toolbar/regular/startrecord_dis.ico index c07ce70d1f4ce1b88d42a3114fb51be0554935a0..1926717b072ceac58f3a16399f5a4e77b90cfacf 100644 GIT binary patch literal 15299 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 literal 18793 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 z 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 diff --git a/PowerEditor/src/icons/dark/toolbar/regular/startrecord_off.ico b/PowerEditor/src/icons/dark/toolbar/regular/startrecord_off.ico index aecc2ad813e6b924b71632ce0e7784165272e517..4fd49fd228bb024a7cdb602e7cc062d91c95574f 100644 GIT binary patch literal 14278 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 literal 17568 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 DYJiUB diff --git a/PowerEditor/src/icons/light/toolbar/filled/startrecord_dis.ico b/PowerEditor/src/icons/light/toolbar/filled/startrecord_dis.ico index f061d1e01a415b888837494558aaf96934665091..31ac8d414e4e38bbd69a83d7fbccd10ce8a4cdf9 100644 GIT binary patch literal 18057 zcmbrmcT^M67cM%Xcj+C0(2MjYT?oDRCQZ74^d>DR(go>+4oVBXcZecI2u(y3q$tvR zla6ov{q9=#pSSM4@4l>+m7JN$%$Yg+?EUR;ed&0Q&m>ZT}<&fNxyjF?RoLPl5gD6bFEKeO)zT0($UhfLKEvW(a=%>mex~ zcz%HSQ~aiA#-!{1%gHmbzTM98%6crpyXGg_T*-Hj2+$wKV=Vo_T*PT z@14+qN)@W7Ir@sxFJe1$So44GPFs@Nz^SgTUPhkPUB#^iPlxt%ZRPqsQ#MpK96(Eq zdn|?a)2K`g)2@rx zF71@Lfe3Ttf1) z*YQlCA^zW66voT{T2yUDqaKA1<*>rRgzgU=e>X*8;Ww`8{%g3^H_*D%Nsbv?P>J9zB)QO(i`@X zh|1f@v`R%jE6UIJ@2*=YMcTq+jf{+#`GJKtW=tU5oJU zz4i6=PJih|$SIuzbv3GCnov<5ynR(@>RtaMlK>g=_|t>k-3*feYV*l8UuJhLRg+lQ zyJ~&z-xTp54aDeQW4^VQp&pO$^+WA*<$IqiR}ekDlm;{T7;W7__+ zdiD6$%=hk(O(|d~B8l=0bkS3^f^DTBv@hXWqBkwQ=D>GDW(utIP(s!dZ zj)%;k8Twjg-_;xApQya#qcJp7a&0fLq~JU*6^j!4)O*menP*?~$@pdA?5og;1DSL0 z$%lsAlotvQX11G*c>_WZ2$5Hu-n5%~_4|ONiX&Nvw5aIGbp(CW9HC~JVeEN?wuu(B zsSIh0F{k1v9FDUxzD`b-zekifg1@r$M^)JBGWb&g=7_p+s zGIgrF1NwW{OO56OoCMUz-CYlGX3HDQW?SMZxC##Y$Wp}o^n!};KsSblhr8+Fi;Iit z&?b}WS%C`i$iKF6b9?@c=CZ%?yRkf~xAieupf8bKId@t1mf21U%^GPv3@WKcv-O{s z-0+wn5t{b(jEebUe`ZgEtzm`kII<))?=~t(2=r%_fuS6#;(9uGociKHG5onl8aoF2 zIGk#~T>&MCYeJLyoJN5a$~O*YKsA2Z>VAn~e70b`8jSpYp^}J{rp0VW=q#eS<5znvwJF9_#Sas2!+h$jKsZg#cxfewcgZsMR_ zvi8A^AnYTppDAntB6F6B2;@f258ry-;!NR$^>lX9jgOCeDpa;|6+c^DUA5jaW+YD? zK+fM|fd-|qcjEK2Yc!FnOfz4*wP4-Q{Negg9U-KOWhDQrdUYI+L05u@&5!FVKx4n(dMrP&8%G+O(^ds(3WKyHsnbX@s?!lhFDgQR@;;- z+vGD8DclVC!>6;DEsxW^B;bF*P#>oE-qaA?_7h#q~VHXG4Ze$GVpHps8y>n#+Ku5+$9srXIZMS^uq(jYF4 zfOB9ZxNvU0YhRE9pPd{Z^i>U2- z7(JxLE%%S65Ut1V=4MWQZtgL_QlM)~g7Y!}cmdo8f$RlOf$k(v|79X~syZndQ|h*k z&P>eh`dOXiyz+yj;q`q8RqVIY_fN>my2|R+W5@fqCb;qn|l2~N5 z@-VB<=t6@^0lT34=VaeFmz&!>mk%FG$8Gz@2t-R2Q-%aR1^}ptDJd|;&rpBSOFEs* z`=Yu}hLB~gyOTDG_;`<54v;l}0CA3}gum%}lt^yp2J5gMr@`DAGYcU(^!Y>T z#BdwuFB}|{1bb|yt8cL5>vr_i-cH+UO~BKCaisaRICkL?Xnyhp}FqvY?g z)N{F!nxtH&-B`CH&-#%7`V{BTG2S6S*w0-eZ*gI1=~*_D5G8@!0NM&7`@5=(XhjUp zjChC(z{GG+{D2=s`%jC)7@9$Q=B9@q-e`_qo||jWM3{B|Fw5y2_sN&r^1r(NdBqTO z#7!oS5sZz3nVIBGZp^G61uw@z*iuK>7ur&Q96{?y(UU)ScX#KOR#tx*|9q0Q><-+c z?O*OsMl1tDBtXukJJd2wv+RzWPX7ZF=3#?>L6c{wg>*rmF+q-5jJ-DIArF}xr?m^@ z%OX(|iyc4p$%b#I?&CzjzbV+@kd(47mf27YcOuYSQaCs>I9Oq#aI;U@rz@Cjr_ zOt9;EtIMXu&5{A0iCW3?XRHt?(EV#fX~#`Dzjd|#=gaJ@I5q~v^laMIe;b8DS;1Q9 z;ij9PtbKvqc2AjH-HJ&*7tZt&5Q*slHK03su7J?)Ti?rXH(-cq9Kk-XT|Thgiy_2$ zNu1?$Mmk-sf~peEa?cGM5=z?06eY!LnB1_!UZDhpPIA4aZgv~sU3J%SuH9mPn>@Rh z^yzW( zB(VeMJj0a+Z+`(_cx}u`_2#zU= z%Uhl5ch1SXOXd44a0&p0KEE&b{FH3XaUBy#(Dl`P>CTwPxej54PTM^Y)(D29~JvzBI78E*%zRaREILWCZP zc=$>7L4@+g_Xq9B!C;A40RZy&k7Q7S(zsrCDJh_yEB#Z6mmqmO+RmBkV;~r)ZY8lj zyu8|(hAjlgg<<|I)QOiS;Ub71qi9HyM^|WkrF^C)ac_yMnDl(xUN~?A-tbOu1xZL` z+5@Y$Fi5dZ?ul>bkJx?BVX^U-!2OI0B2zLu5FRXUJBox1v^`n)^9)GQnj@JJ>pu+? z$eC4nJ3Wnwi8=hZ)BSym(cBp?oyY?!CA8x@FThf&g$_%OBeBW~n99=%ozVrjJQpI6 zn=KT;i}x!qprE6$Ba$uJJWHKjfO1#=9W-@>XrWE?O`ZtZnR%8;wr)i|^;3o2>DXx5 zq@9^J4(pz553i;I!fPfs+@04YeQtC1+2I?i{--7E3XbWBxsD%Z@vdBOxz^TJmmiQi zD};7TS6A1%dDblVc_)6|HdC7?E}@RQ23)g5f71GmrakQcyhw8CRTT*l`jIK)NKR1=hL`_UEc(Zd3jHS* znPFUl82$e~7U4Gii$$(cv$>v0k4@-?BPR<27Cw7wk-p(&hPi6#L&Sw6zUd~Yc9rm2 zyS`;^c=R?VaQYK^v7pZW8d|rtFtN1sPOBspuA@lN@Rry-Th%78`TgOegn8hBAw`Cv zYiUDwt4#B`Y($Qq^MP)A_e{9^)nDI(ll<)Kn~nUF{0&(b$FuF($D@Y=Z4e`saesf% znQzNZYGG)QUGg_zb`B{b_b=2)RGUzFX~*N5YP zK8Jfj`~(^jo1wm>!8PEv?#4y~E{EZFco%*BrY4e*qIzz692?wZ2$x9!sUmD0Gf~A6 zfm|BtWc!0&+d9Q)Cs zqjL^t-lrwC~Ir-i~0@(#fLm7QxAabg7)TV zDK==o#LzC@ie;A(&8i|#K5vLw1kiFpl9_#bgX}ijANmE%HZpy5K@68(-e3Q=2 zC#Bq1oyhW>n+QX!KsAGwheQL-x(Lm(It_O6UKBBae6B}|rI$4OK1ZhUOrpQ#*EOfepFJG+*G6j+5vO?bNT3B|?O@bE8p={e=xQ)fLdij2lsY@ZiCmnGULJR2o&e z9rTh#icIv55c;_SS(NwUXXf%X!J#H+dgu48z`gmidy^+$4SeYdUkis;L*IOI{3`To zqx%I*uz>RoIoX!8W2z2U9d@Bknck1iQa@%!q{W|ltD%r@!35G{ZS`jln zJ+EM)F|W88tT2~#m8njLoqW=<`Fn^iEA*aSMH=#1qeQY!aeaL~gyDYWQ-S>r_oq+i zc{+y?L)kI0u>~7!*<-i3cs0TQhHLL=^erB(L!X!JwcKRrx2^DH+o!$b9;_5anxMl8 zg+Jn3VyHLgoci&j2e>Gwiey-JO%i56luvbQe&HaGAJ_fX7k;gl@#_Ix1{~_qYaN6l zrOFr`etc2j705xn3QW)StZ7!@1(4ewxsp;+<_D)oJQ*#MKj-J?Z7TSw6RRsDVheQ9 zDW#hvT$BW_vf+4&FjJ{;1YAx7((^2q2w+%v%%9Qk$u!Df+Vg2^m9626{Bq5vqlE0_ zrMKT>{aFV9+JxTvg;m!wnNC&kSdy*W1VVPH{rHdUfi+;#+f;qX9n><8GJ~O}sojJzop{*lw|NP}k z3!b;azClF_#b#r@_~4W2y-}FKDG^)L7mp|2!NC`ADAv)4W(;+Zwzl!V5{Y`!_>C|h zTYpwumpSIA;;x5mUT_mMsOzizK$B?V9)4GP1Z$Idugjbr zei0rTdQE3$+IdgbxhUY3()+a+4OJ-{NmD047VeLt-^N5QbI!eDWXkYPGF0Ez zcA5BQFd>3B(>I={lzYAg8Cl5l)*-mFzdy2?qUrlC6*3n`f0pf&qpvZTxPi8fDAQ7HRh31z*K!|g1vho#0zAdaN6RT|KVKh;_W~3798b|? z?z(SzW%Pqk*u4v!!+JWQJ0=s)Z=HS{{RPkh-DOs&Ld!3|N2H839%9b?j!BpJWqb2R zv$uT**>699D6}8L7VG)YQyGmOMwRL8mn;`~MqvKL0CQAeLB&FwB5GnB$ngdaADG-m zQPmsH?q9HWgJj~%sHmugC|tz+eFLD4n26|yvlg*DkL_!1xY)r$vFe@tup}> z@v<8@g}*0#=l+)1XHvMaSdMHrl*SvJ+2MklnVexepqYodR>mAfs^PZwks)MTqieqB zMRTZlJSot*8<;E(m7)fq$8a5K9XgQaPk7SUF)m;p^%+}@6swj(toAMe4QN5Ixjb|qlCVwy$ws&`Hc*8o2wfeHMvUc8bZ)2DaeR+w3n1pxf zbN7f%w}O?087Ma0`&jr1?guHI3H&!B12gYYdAW8~073|`h{`xiW`^t)4 z?|9B4Z0q+a{*y>?K-WN8gGqd-$K1?pjwXedE76VBTiEAQg~{E$q9bX-jnXp0{|!h` z1otcc2P7cfe3t$vNRR=mt1=`IbX&iLo(nu5z9SIv!;vQ!mWgVM_;xBEu7;6tccJ!JawXhI}vC@qp4Rt;52 z4Q3b1;QmNi`9j@FoZSsGL*FCHhqXp{NYwAjVeWOe-$C&1Vk=+j!N$X&3AytHMChd4 z2LA)wKE`&DkHIoROBea@qd>c!l8sP|0U>|uIll1add^Y;XjdM>1=2x`Vh4zdX;4&9 z=}9!R$O*1e9LZdOo>cPc`i#QpFz2@)KOTRZnQ8ubewzt9rG_amZ?MgdVuW7YASy_3t4K*!c>C8N?bDO^giMZqb;CCArZUzR^*X3?^ELIM0BQS{u za=4?vX~TBdhz=m$IS3gb|FhVhgL9v`rR6*!ASWlsQMWTes)WW7DvG-g916h~*uF)S zb#w#=fJS&WUE^Sk1twNnGcCP9ADzf94tx>T^0uq%YAS(>?Osp6H8b?(RFWY>jeI45ER`DX~2v_*MdIC?X^rnkpqq&Q^`dmAiwW4zsPq!@bAYCLm+Iyd^N(2$qCJ5Gj_nh4SR^#{f<2*D zy#j7eOJO~?hbbp4N&eSxsetP~LO3ji+?nh{UWz)(R% zM8t2ue!!x#UZB2+3#<^pn}H=vZ*{!J`qtJnOUmx8@Sk{aLC5VlR}1j^6o10FA$by> zynPY3SIeYfXV+pn-3p_EUKU@i`wkS;ULUtIR=^2@X?%Y{`x=OLKL8;rk^sJ~MMs8jnA>_uqbpC$I zuv51H{EMI-47Zphqv<_Aa7{FT=MnhwTa(k+Ffh-K6yFlZX5lCX3sO8U&MzZaKbp?| z2B{bJ(#4U5+(nB@Iio~t4@;j#y5k{ zxT|iV(oi~i2Ajp(gCf;K=MiXoQ}LSy@li}jjR#|0i3sKM7{&pjYf7L8nkr`l+PV_~ zCKe?nWf%i0gUCnE#bv_^`8{kolEmSS9n%Yq+;X{k!@z(5CKzuAeZqqCM1F|Z`ZoYl zxFPq3$6>uaXm5V)6Q{d}M}8WK?+|_U_V)I>PhVT=V@21%k{8D9< z&KiM*$Dpij!jtytcLli*JH|7f5j?z`d9!*O;vOnx7Ki6G-X>)^Vs2@><3#Khj#yaK zVnRZsrW<2gI8p>T79qkEN*S6TQ}Lt(Q^yI99MC6GFG-bdEXo|#yV-yFK^W2=MV(N< z`K9QiMHWPGE?#P~5IztgZmR+aypZIXu z-Ei~3bPQnFCk=MGAf$H^ZJoTTp0aWJ`cH}WL$cm<@QJN-?c-xfepnbA9nG+>IJnM( z5E1S8?t7=l*%{@4^4E>haIbR`U!ff|BCm8t2?=*2N&G z<9lK6W6&jEAMLpi326Y*lC-I%wnLUaz@SHS4UclmJ(UmV4$i_OySM2$APenY{X}+o zuvT{J#7|Fg{=V{D$OcE20*Hv;eG;7qL}Y4nGHdi(Ykqvv=mHrrTn;q1vflJ;=;-Lc zuR`wqg~zp7W|`3a@dynK?e|YaXzhMthAK7>All3bV&9e_?q{|rL66Ho16!s z?Yn5OQYH*=aUj1JZUnsBIdMoJW{~)?aeYUoPCbb};7tE?#T^JGTalU|X8mZW{s;4& zwCEje;^0t?h@-_QuQKqM2lnX%LL7fekILqaaafz93B{2I4;5Oiz^`(cYJB%aNbVEFwCUQ$_AH9a~yN{z>gM07%}OYg|#uNN5KT=~}l zQeaVtY?_A^HvEc^MmPENl$PgM7xh<0UNAYi9dq@yRU!N@AS_eA%<>SU5Cnw(E8gj! z=1%`VkTRL{&s?n$4{d&>>aK#P z9*{ph&BNmvrJp0stG@WWIVk<&GrH2q(mky=Zx2iVi)C54exxni+K9$e#3;qblCD({1bLCeQY1`)O*eiNM=`PY++C&&344_h2Rkw1Rt{n0hZ zuEx&*1?}XvON~}-KANAmbO6clIkIUJm>3~S8(@a$L+nbgX@D!BXYDSW31#mbF)NgW z305_4wbayNMd@#G0s1YCk7DCv!~-2vs0s)_*5MMgde?qk7l_1*9gqQo=`w#;dWaAd zLqb9#If!w?)Y*o3g_CG`>L=;6uJc{ls+0`q5c*@Q3WDfNAv!ZPluBWUIC_XSLtD(3 zn?!^p2@w&ygvYlj(Z{ce65*hZG9*_#Z^2dh9C$AclO>47$ z^lf4dJtQ zcpws*MfZ@QxWrX(aza2z_|4Rn0lR(}+)nSj1ZfTa>%6WW5O7BPmg7F~arFpu7JLDH z5JmCzOfrL5CkxvLEw5knDULN|0pB2JldHtQn8(7MUr7NyN$K=vE0{%mp?K}MP6ZZ1 z8pC$Rtx&FF&nd{{u!|q3_Ez`z|6LEGsVjHWB~$u=wW12meT|OjAW$r`dPjre0qR9h zSXn<7`b*z>h#+LMTx2MS27)mVYbn_f=es8$d<~ZmSm&?<9}_p(-pl77f}xZIwICTO zpQmM=s{Rhy(-T&f;Y&qkUF63l@LL72!ok6jo?lqdTRTSOio1{U@$t0-9XhFt4zxo* zz|3~ecTaHwql>s7SdsR+FIthztPo)(u=5ZsblrQUbcVh$0S-R3zO~rIJWSW;{*s$0 zT+-I|HAlp0lmtL#M^?4B2SwEFe9Y%cO-LYMAUFbc(+s~lQ`A>g@i4wt)fo`F8$xr& z=*qG<{6T6}%+#yCoj$0wXjT>P>G?NPR;4BgfP#eG&dkir2b~i6Gc;g!YxW@e8}?t4 zRrScozr^2%dO!qiVL0ju)J?QH45HA2gsfSEt4C%pM>`#U$pdD=)j-3ywms|b^P^YT zx#e`^N-YC|HVW{y?;o4_-K#QunN`(g!FqywPKYf(bu~V3wl-%s zbeYJHcXVghSDX>!gIw_99&Uin^clf(3HsM{*oS^e`;Ac$yL2auAY3ZT2D?Wxq6Y?! zi>ptIIrLHb+@}GKUmZ49X=57O%F9)^3&DQ!ka^-EL!&i15+gap#l_R&`ba>{r71q^ zR~(ZXswuH?pM8%I2>PZO9JFlA!aT?dE0&eADm^BOdPdA;hu~XVZxJH$rw&)?6(}V+ z>e^_*h*2t8fM}nw%NT0zQARF@pJ&p=G-3`iQxfB5#@PE~=@5aXj0i{cvkg%vZ*P4W zIyY>`b(4hOYA-!px%3KKgkCgzLLM*7&23zp6ubqYk9bgj7zFn2GX`801zzMHV7{x9 zZTReq$(L{6E+EjSpVzVpV5in&O+EcJCnqN9t1i|$Vcgi-6*KMc6=IkyT3l0~mSX@? z$usc3_oK5#GJ)*?#L33wGBK)~hI-52@>2BcZL~tI`hua6(E#!TXwajJ3&~VpRiR`D z+Zez~-)eo&7CI~)*`tR7y)q^W!>h~vgQ1~~O&_^(cRSNF-VZ+yeXYy4t>axAtH-e~ zu<~U?jsp&vsRDxn0^G6%z$d|Cg(RJRYHb6uDDuE!;ctAS3f1BCN4=NNLR7N6w5sVbU3fo}Y(9UFPE5UJ?4T?GE3j4Y8#78b zc~4`EiDOQolb`UI7ZWeE=%H6I#lnMvvW$OwBEIFJ(3ah~p)tao_Rd8t8zon+<)IYD z7&hBFU^L*updVe=HE1H8RtpF*)LfRKNY!J=glBW#592Ck?vy^yfX?@6@t7R!&Zu$} zPu>M=m1Y0I@qZ$gRHpn&?~Px+TxgpeL@*7P7ZPr3rKhJiWk!7(kR?4|;&yX!gsh)2 zv*9SNClz&92ykR%ALd3cuA$s{zjm!jA-&)*e>WDWdv*0~xFuamIKPkq(`*-Ps`wqj&mokD94D5Vf8qn)dREDpWVcZwEpn_21QkYADU_qMaWX6xOkt z#L%nM3D%kL;mid7OwOke;(>1@{dogPAPXAOrTa>$#5C!3{b2#9(M68^0Fwy}$Hz&N z!>NYyb-eYI4InMRO?LT<>jw)p2dKI8BA@QnL&=1nr`@ z6ZRML$q8|CcdriIp-voJhf*{ILttOXDMLtI@5zS#*;NI&PP$afHu#+VwIq{ZetNiA?@5JiO|NGmua?qSC*ksIr+-!!IJNg?ntG z+_(i*L^NLA(>V$xyvDY+k#c0WQ+c|u$lA)vspoGC*s9^597P^P$DzE0xN#fC#l}&} zptvn^0PQE-)O-R)|8<;O4+vO=*6|+@?D641qf;N(;f-u*zXQi21lUWcp^LGXo&EBK za??Bm6huoUpZGY}4IDUYHV^j4-Ki1$+890}6$<%S!3t}+k zH3d2_QNyYIk;I}WHb6@Bz)!Wjyga>)<2MW^=Xh`{s_%>FFl%V)p+#Z9Z>D|v#6kH% zbpK1~sV=Z0oVSQqobTr9nv<_vLDMbz)5GyG_fjn3fc4*3NgB7Lq6eVHW3sKK1uI0m z@=87xQ55~*FBuA+aZKpx>8ZD2W+}4kYBw)>IZ)?lSs9Lrb_ISy;k{g#b zyn3{E`PFLbeV6Bg9$=2ENab-E`Oc!3RVTpMAt|48-hzV|ZuB zz3=wvl{vpeI-;N0PW-gL=@}FmKfD^rUtY`F8C+3P@>6-s|GE2{0jP*%wWq`SYY=k@ zZpz*fa%5^w?=N<5Xz?6ic+0#{9=8!8a8dn_zjqukx- zvUU!%XZ~qKCE*7^hsOxRNJ=`o$40Z06`@Vi>EvoIX!p4Nne||Y&uSk=aa3GJqw~NB zzVni?jmU-1K@&iuQw$ z^1_7mqrJ1d_wKhw%)e%HEPv~Tw?k(eCsZJbzf0jN$IO!-MST1!t^O@=`d=k@cHnNi z|0H<7a)PA5#{YGKM{4~)5{C9by#%pR%R&OX_SjA zD#kUw4SivT5XE?C5X<)7l41~gD-wL1U);cEM6ugZKo{N&tmmJ;lZ(eR=9APISIhed zXHqvj|6;4s^h&{a@Ou5vJ-LmMYv-kXO}^TeKL3@4Rx603p zYp{irza`}kCs?h4@FwMIN-D-u@tM+sl{{+{ng)`i2O|W~xKn@~4m_o!AMj>G*`J?t z!xzz@c=kSUz$hE+trry3F8cGH0hX%>@rP;GQw(5ElGc;G`vzXC`>nk+H!@JhTX;s{b|u`ta=x z$iDjlHjqOKp0(;&5~k;VHO(|Z5&;j%tch3r&|$>D+qlwR^i2vFGkp242V{2{X(=Opn!fACbzzbD6*;-I9U$J~*c2#1}90Ke1EhzEqSK!Uf| zc3&dnKfQepOg;%Nd53{{abHwHcBww7F;4YuQ6LwNR#;Q`2-<$3tv%By$b#6;;;SX} z`4rb!J>pUqj6}u~Wlk`5@=gL24v>A}7|N2VDfd{Qz)2V`GbKl|Qk~1MjP3~>N}~G& zszTBoOr?@RMo6}zzFrV#3pn4Ul0MObrUv(Be5f|7FMJq&bqWHNG|sW}dyG;Ij{HVz!gQ#n8ZolP z+BD%4Nlg?4BLOmkg@u|*I>px2b$6m65s z)GYHaT6#g-3IRn~bAW6ysjz7Kd|Lr`c_By+3_TWb!RR2oLKt=WOy~UI_m;b^}kg!aBtB! z`a-l}Jvk6@^7tPwe)0s~ait1_)jyJK*NYnemmH;CM7!0g(bkQKuIhyt}P%ikhh{vI>QkTG7`E#_C^K8 zbmDuv!-)PSgtjUSN|uMP9Xh1+Z7PAFK-F3r+EJwMmK+ajK2H6t)8gCQoY`k+?WW!v zx7;EzqE#JW<`{NxkC@oH&wd~VVr>!R(~OTgHl#P>AvFjBdC3P6iK<}cM;CL111CI& zJp{5V46AG@-&R*jf(G%%o>mXFaH$MyX^ESdv`g@p2L+=E6kNKFApSlnI=`o0F{2hu zss;Hi`0**=G2$qqQfr+cq6lhLYJoaKF@H}HM3}OfK>DXCT;{MtB6vTK>LmNXa-o#Z zljh|OP~P983%kby8wbnlV}sm0u5fQD*#d;ga;w~M3UmAID7b!;l5Fv@wlXJA7N{)r zx^Qy!@Yscx22qu&CD6Sgr2kiRq=JWBZlP~xLC&3IYZO!iG5{@<$VdVfY7pcW>CMsj zXDgi!gDaZ&2u=3gfpZ30vpAb3&uc2{&S2RHR#62b^-E)jsKV9|KToPQXS=AMD(h2G zotYrXsX5@~%a>!28;gigz%_djl=CqThur7zh}MIku^K*k*@3c(5WInKQF2g|`m?+3 zP#m6NxaN2jwM@yEH@+0}sda>xFz4aa%*!j#J%YXx#@ z)6F33v@s?A{g|k$vzi0b}sq!UDz4*q3hiF*{;^9+w>dfdGud_)kuKWQ^$8 zqYuN7YIg0=+6IU*LM#&kOfm>3cPEFr}SUduNlPkQ;Sg%r6^Uq|?Ghs>aO+6{Ibb6KLd= zS_+}E6QIWlJx+XkdXi`?(=sVg#@Gsx^+KT$qPI(c-km6(B_I`x=zNf2cIwI!I!PgHZ{IFnWCK^h02AX{`?fv7KK7U$GPZJ;TQT;J-x_g8 zZ~pOoO7%gAXiwDrYTIO1L)+SXv^qg-?|x;d{!eZCq~$<|N16I(nMggzYe<}WW=Nx3 zu3vy=SqAnbju~Ox=7O{ZKXo21OED?WTg?m{JS>cUtT&NMtsp2+Wk|3G1J7YH(`;M> z^mAeO8^a|$L5}&*_jdZ7^>t$Kv4fR(pA5sLcSgIug0gk#W@KM!RuK9_U$&)0TlQVg z-we9Firf5b&R<@}%2s*?+|5<^7=iqUx2x->aKVqJ8a~KPNCX%t`l|WfiYrPNMBIbN zu7WGKuKk@rQr;f=bmmiqbTp|?KU*g-Pvs_a!%Z3{=@_@Ep)$W=EyBhD()&f24FmN{ zJPC#C>&}xdmz2MbF3Mo1bN~EZhHY6N&bR)^NJ)4YE;*#b%#4$gpwXU|PguLl@`02R zto_P|8C?5Jy#%zLmu2*^NA}@t?(YXamPUl}H}Y$B3;Ef0F5GSxYTB(Yfc^3EKmI3D z0>TUo_EVL@zF?n6r!Xt@eJVSVBZi$iN--AJ@nvh4_2Cw?gpN|8q!sQLgOrC~G%51? z@)DTny6aIEC_TdT_|f4L7iau(>;^Mwy$Nn^Id+6X1%r?@#=7$b0n7%+7;e zZ9a`AU07M89@pS8qtP-o_kXMp^7Yt?Dib~tpb~X6C_%PBcLPKydq4v8xSE9))uqVd z-E6zjeJVHkehdl#)@Ax4*_1gZAc7)UsUVone*XM<*ge-+C05-sLmz-uTeoOB7Tv?2 zskvyhxeOMB7qArv{m%}-dWyT2fn^#*T3T8c%$p&bli6g`a#>C)gtMvOv($r`f!

0xh4h<}2MFyea+xh5&h207>`#=HM?a!d zuwTB?G2-VHjsv1axQHd&mcv%!&-Cvnwn%#9l2JKSga9Q`7Z|i;j z#gi8^BuElo_76=?togQ=&A92oa+vwSco0f*E=|-Oq{cA#0C7nJJ9Pl_<=Zwg6A(@_ z`&3MJ>CV&RVfD#U(_ahE%ypX?g~uZP+N3+xXZRw<*bPNM4b@(uYL7YI5kAja81!lM zi@rj{b-XK>vhqcL%N$#4>Y7SbiW_`l){!j6Wc2kbIN39)%IX!cvvIq$L}dW@GR3qq zSZ33?I6~{-beyxcJPCeP&9)c{CB@50|Ai5o+Q47ESmyKP!RQiOY4^VZT854r-Sp?r zzOAHBFi%e}(dcs!;<q?9JS`0Mui}njdn{T&s30WpB zs5}#JIvN1@gLzU;K#1JWUiKqHw<1zffY_G|B+1I3A9aPf z{-_s8Qhj@Z2*CtA9T)MWXgOuB;z@sHrgQ1_$$w?g1bNs)<4w zhb;}l0>nTnWbX)A*mU8qIp zD5hoqp8)It6aOjY0wOwf2&)4CQ4~VE_60cv&LnVy#vD}ua%;^VE{Xr`Kf~k4{oi*z4H~n(mWQ6eUzD(yF_>s zMf|asnYTzOzvTv?RSXq3z(}|R+1I+^-PZtUDpS=*0sNeZwgcGS+}!-;M10?i!K5<4 zNMte@@!D&z%{L6=A|hJg`hezRctCA{`YOYt0FJu;pgjQg2qE5Cv}n<<%i%T{4@_DE poGCa<)=^=cH9&=N)&Ld8{{w5khrfep(t7{^002ovPDHLkV1gHbbOZnZ literal 13755 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

G#%Lk;1<4!-@k>HxJ-# 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 Ue~;Tc4`k%4FS;uJ&xGQC0c>agJ^%m! diff --git a/PowerEditor/src/icons/light/toolbar/filled/startrecord_off.ico b/PowerEditor/src/icons/light/toolbar/filled/startrecord_off.ico index e9836d7b2166dd59a3ce456462725758c3d3b47f..6ff1c8cc61371dc546d83aa2807e826a7b284c77 100644 GIT binary patch literal 18369 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 diff --git a/PowerEditor/src/icons/light/toolbar/regular/startrecord_dis.ico b/PowerEditor/src/icons/light/toolbar/regular/startrecord_dis.ico index 8c83c8e57e8187fa0fd906c15f443971835599f6..c6e242bdaf67a4400a1d081ff64aca8d3c685bb9 100644 GIT binary patch literal 14416 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 diff --git a/PowerEditor/src/icons/light/toolbar/regular/startrecord_off.ico b/PowerEditor/src/icons/light/toolbar/regular/startrecord_off.ico index eabae4cf1a6b478f072db382d63c4893881ec363..501c3aefea21e86a91d76dc2b476306ffdf40681 100644 GIT binary patch literal 14605 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 literal 18087 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 ZotCN&VEnT_(CqI*ucjK%p)c?$Y5@2Im|Xw> From 975f0b948ba356fee7eeb4d2971d31d186f1f644 Mon Sep 17 00:00:00 2001 From: yasmise Date: Mon, 11 Nov 2024 19:19:23 +0900 Subject: [PATCH 17/37] [xml] Update japanese.xml Update translation texts for these commits: * Add one comment for localization file (ba8cd8c) * Notepad++ 8.7.1 release (ba3b457) * Add Pin tab feature (ce58b42) Close #15783 --- PowerEditor/installer/nativeLang/japanese.xml | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/PowerEditor/installer/nativeLang/japanese.xml b/PowerEditor/installer/nativeLang/japanese.xml index 402754eeecc4..fd4e750a6f2e 100644 --- a/PowerEditor/installer/nativeLang/japanese.xml +++ b/PowerEditor/installer/nativeLang/japanese.xml @@ -5,7 +5,7 @@ Translation note: 2. All the comments are for explanation, they are not for translation. --> - +

@@ -643,6 +643,7 @@ Translation note: + @@ -963,6 +964,7 @@ Translation note: + @@ -1320,7 +1322,8 @@ Translation note: - + + @@ -1719,9 +1722,9 @@ OKボタンを押すと検索ダイアログが開きます。 - + - + @@ -1816,7 +1819,7 @@ U+FEFF : zero-width no-break space(ゼロ幅改行なしスペース) C、C++、Java、C#、Objective-C、PHP、JavaScript、JSP、CSS、Perl、Rust、PowerShell、JSON を指します。 「高度」を選択しても、上記の言語以外を編集している場合は「基本」と同じになります。"/> - + From 7df8020d1647378c25e02b97a3bf4fac397e6c21 Mon Sep 17 00:00:00 2001 From: ~GOLEM~ Date: Sat, 16 Nov 2024 07:07:12 +0300 Subject: [PATCH 18/37] [xml] russian.xml v8.7.2 Close #15807 --- PowerEditor/installer/nativeLang/russian.xml | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/PowerEditor/installer/nativeLang/russian.xml b/PowerEditor/installer/nativeLang/russian.xml index b2225da24822..cedec4f1ca7f 100644 --- a/PowerEditor/installer/nativeLang/russian.xml +++ b/PowerEditor/installer/nativeLang/russian.xml @@ -1,10 +1,10 @@ - +
@@ -1013,6 +1013,7 @@ Updated to v8.7.1: + @@ -1253,10 +1254,11 @@ Updated to v8.7.1: - - + + + - + @@ -1542,6 +1544,7 @@ Notepad++ сделает резервную копию вашего старог Если вам нужна функция обратного поиска регулярных выражений, обратитесь к руководству пользователя за инструкциями по её включению."/> + @@ -1708,10 +1711,10 @@ Notepad++ сделает резервную копию вашего старог - + - - + + From c21d0daeae3c9db24b63e4f1ecbf856262d592da Mon Sep 17 00:00:00 2001 From: Karlo-F <55917845+Karlo-F@users.noreply.github.com> Date: Tue, 19 Nov 2024 08:14:59 +0100 Subject: [PATCH 19/37] [xml] Update Croatian translation for Notepad++ 8.7.2 Close #15823 --- PowerEditor/installer/nativeLang/croatian.xml | 30 ++++++++++--------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/PowerEditor/installer/nativeLang/croatian.xml b/PowerEditor/installer/nativeLang/croatian.xml index cfff33ab6855..0e600a263da2 100644 --- a/PowerEditor/installer/nativeLang/croatian.xml +++ b/PowerEditor/installer/nativeLang/croatian.xml @@ -1,11 +1,11 @@ - +
@@ -639,15 +639,15 @@ - - - - - - - + + + + + + + - + @@ -967,6 +967,7 @@ + @@ -1330,6 +1331,7 @@ + @@ -1735,9 +1737,9 @@ Nađi u svim datotekama s izuzetkom svih mapa log ili logs rekurzivno: - + - + @@ -1839,8 +1841,8 @@ Postavite vrijednost na 0 za onemogućavanje automatskog uključivanja."/> C, C++, Java, C#, Objective-C, PHP, JavaScript, JSP, CSS, Perl, Rust, PowerShell i JSON. Ako odaberete napredni način, ali ne uređujete datoteke na gore navedenim jezicima, uvlaka će ostati u osnovnom načinu."/> - - + + From 4c9adcb0fad356d688e69bce41423a4326359940 Mon Sep 17 00:00:00 2001 From: pawelzwronek Date: Sat, 16 Nov 2024 15:21:58 +0100 Subject: [PATCH 20/37] [xml] Update polish.xml Close #15809 --- PowerEditor/installer/nativeLang/polish.xml | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/PowerEditor/installer/nativeLang/polish.xml b/PowerEditor/installer/nativeLang/polish.xml index 2b0a338467df..7e4571003770 100644 --- a/PowerEditor/installer/nativeLang/polish.xml +++ b/PowerEditor/installer/nativeLang/polish.xml @@ -649,7 +649,7 @@ Translation note: - + @@ -969,6 +969,7 @@ Translation note: + @@ -1318,8 +1319,8 @@ Translation note: - - + + @@ -1728,9 +1729,9 @@ Szukaj wśród wszystkich plików z wyjątkiem wszystkich zagnieżdżonych folde - + - + @@ -1830,7 +1831,7 @@ Kliknij na przycisk „?” po prawej aby otworzyć stronę z dokumentacją."/> C, C++, Java, C#, Objective-C, PHP, JavaScript, JSP, CSS, Perl, Rust, PowerShell i JSON. Jeśli wybierzesz tryb zaawansowany, ale nie edytujesz plików w wymienionych językach, wcięcie pozostanie w trybie podstawowym."/> - + From 495e95217485cffa171879136b22fcf3fc95d523 Mon Sep 17 00:00:00 2001 From: Patriccollu Date: Sat, 16 Nov 2024 13:16:37 +0100 Subject: [PATCH 21/37] [xml] Update Corsican translation for Notepad++ 8.7.2 Close #15808 --- PowerEditor/installer/nativeLang/corsican.xml | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/PowerEditor/installer/nativeLang/corsican.xml b/PowerEditor/installer/nativeLang/corsican.xml index ca21be850cc4..25fc714b920b 100644 --- a/PowerEditor/installer/nativeLang/corsican.xml +++ b/PowerEditor/installer/nativeLang/corsican.xml @@ -13,7 +13,7 @@ Additionnal information about Corsican localization: 2. History of Corsican translation for Notepad++: - Updated in 2024 by Patriccollu di Santa Maria è Sichè: Feb. 5th (v8.6.3), Mar. 10th (v8.6.5), Apr. 30th (v8.6.6), - June 13th (v8.6.9), Sept. 8th (v8.7), Oct. 21st (v8.7.1) + June 13th (v8.6.9), Sept. 8th (v8.7), Oct. 21st (v8.7.1), Nov. 20th (v8.7.2) - Updated in 2023 by Patriccollu di Santa Maria è Sichè: Feb. 24th (v8.5), Mar. 12th (v8.5.1), Mar. 31st (v8.5.2), May 7th (v8.5.3), June 9th (v8.5.4), Aug. 1st (v8.5.5), Aug. 7th (v8.5.6), Oct. 7th (v8.5.8), Nov. 15th (v8.5.9), Nov. 22nd (v8.6), Dec. 19th (v8.6.1), Dec. 29th (v8.6.1) @@ -34,7 +34,7 @@ Additionnal information about Corsican localization: https://github.com/Patriccollu/Lingua_Corsa-Infurmatica/blob/ceppu/Prughjetti/Notepad%2B%2B/Traduzzione.md --> - +
@@ -666,7 +666,7 @@ Additionnal information about Corsican localization: - + @@ -985,6 +985,7 @@ Additionnal information about Corsican localization: + @@ -1343,6 +1344,7 @@ Additionnal information about Corsican localization: + @@ -1579,6 +1581,7 @@ Appughjate nant’à u buttone Vai per apre a finestra di dialogu di ricerca o p S’è vo avete bisognu di a funzione di ricerca RegEx à l’arritrosa, lighjite l’istruzzioni per attivalla in u manuale di l’utilizatore."/> + @@ -1747,9 +1750,9 @@ Circà in tutti i schedarii ma esclude tutti i cartulari è sottucartulari log o - + - + @@ -1841,7 +1844,7 @@ Impiegà u buttone « ? » à diritta per apre u manuale di l’utilizatore na C, C++, Java, C#, Objective-C, PHP, JavaScript, JSP, CSS, Perl, Rust, PowerShell è JSON. S’è vo selezziunate u modu espertu ma ùn mudificate micca i schedarii in i linguaghji mintulati insù, l’indentazione sterà in modu basicu."/> - + From 62e80fbe3d8a48187b4eb136d51cfedc1e65b38d Mon Sep 17 00:00:00 2001 From: kubalav Date: Tue, 12 Nov 2024 13:53:06 +0100 Subject: [PATCH 22/37] [xml] Update Slovak translation Close #15790 --- PowerEditor/installer/nativeLang/slovak.xml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/PowerEditor/installer/nativeLang/slovak.xml b/PowerEditor/installer/nativeLang/slovak.xml index 961ad6de35c2..d4fd5393fb22 100644 --- a/PowerEditor/installer/nativeLang/slovak.xml +++ b/PowerEditor/installer/nativeLang/slovak.xml @@ -3,7 +3,7 @@ Slovak localization for Notepad++ --> - +
@@ -955,6 +955,7 @@ + @@ -1309,12 +1310,11 @@ - - + @@ -1551,6 +1551,7 @@ Stlačením tlačidla OK otvorte dialógové okno Hľadať alebo ho prepnite do Ak potrebujete funkciu spätného vyhľadávania pomocou regulárnych výrazov, pokyny na jej zapnutie nájdete v používateľskej príručke."/> + @@ -1719,9 +1720,9 @@ Hľadá vo všetkých súboroch okrem všetkých priečinkov log alebo logs reku - + - + From 32732672615fef9bc9cb034dc4e01e4556d0ef4d Mon Sep 17 00:00:00 2001 From: Marcellomco <70959309+Marcellomco@users.noreply.github.com> Date: Mon, 4 Nov 2024 23:00:54 -0300 Subject: [PATCH 23/37] [XML] Update brazilian_portuguese.xml Close #15761 --- .../installer/nativeLang/brazilian_portuguese.xml | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/PowerEditor/installer/nativeLang/brazilian_portuguese.xml b/PowerEditor/installer/nativeLang/brazilian_portuguese.xml index 74ede6d2b4bf..951984378f58 100644 --- a/PowerEditor/installer/nativeLang/brazilian_portuguese.xml +++ b/PowerEditor/installer/nativeLang/brazilian_portuguese.xml @@ -1,11 +1,11 @@ - - +
@@ -638,6 +638,7 @@ Translation note: + @@ -957,6 +958,7 @@ Translation note: + @@ -1315,6 +1317,7 @@ Translation note: + @@ -1550,6 +1553,7 @@ Pressione o botão OK para abrir a caixa de diálogo Localizar ou alterne o foco Se for necessário executar uma busca regex para trás, consulte o manual de usuário para instruções sobre como habilitar este recurso."/> + @@ -1718,9 +1722,9 @@ Procurar em todos os arquivos, excluindo pastas de log ou logs recursivamente: - + - + @@ -1819,7 +1823,7 @@ Clique no botão "?" à direita para abrir o site com o Manual do Usu - + From 4113c85b782df5a7bbd57fc8252aae399944c676 Mon Sep 17 00:00:00 2001 From: rddim Date: Wed, 13 Nov 2024 21:39:53 +0200 Subject: [PATCH 24/37] [xml] Update Bulgarian localization Close #15799 --- .../installer/nativeLang/bulgarian.xml | 35 ++++++++++--------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/PowerEditor/installer/nativeLang/bulgarian.xml b/PowerEditor/installer/nativeLang/bulgarian.xml index 128e9f04f98c..99f82c77e9f5 100644 --- a/PowerEditor/installer/nativeLang/bulgarian.xml +++ b/PowerEditor/installer/nativeLang/bulgarian.xml @@ -3,7 +3,7 @@ | | Translators:.....: 2014–yyyy – Rusi Dimitrov; | 2007–2012 – Milen Metev (Tragedy); -| Last revision:...: 23.10.2024 by Rusi Dimitrov +| Last revision:...: 20.11.2024 by Rusi Dimitrov | \========================================================================== --> @@ -888,6 +888,7 @@ + @@ -1087,7 +1088,7 @@ - + @@ -1242,11 +1243,12 @@ - - - + + + + - + @@ -1275,19 +1277,19 @@ - - + + - - - - - + + + + + @@ -1661,10 +1663,10 @@ - + - + - + @@ -2007,6 +2009,7 @@ Notepad++ ще направи резервно копие на стария фа Ако се нуждаете от функцията за търсене в обратна посока с регулярен израз, направете справка в ръководството на потребителя за инструкции за активирането ѝ."/> + From 76b4045df4d41d17f2cedf90b03452871a98950a Mon Sep 17 00:00:00 2001 From: xomx Date: Thu, 21 Nov 2024 15:10:47 +0100 Subject: [PATCH 25/37] [xml] Update czech.xml to v8.7.2 Close #15835 --- PowerEditor/installer/nativeLang/czech.xml | 26 +++++++++++++--------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/PowerEditor/installer/nativeLang/czech.xml b/PowerEditor/installer/nativeLang/czech.xml index 1fa7321a2259..64a035b24ff4 100644 --- a/PowerEditor/installer/nativeLang/czech.xml +++ b/PowerEditor/installer/nativeLang/czech.xml @@ -1,12 +1,12 @@ - +
@@ -987,14 +987,15 @@ - + - - - - - + + + + + + @@ -1234,6 +1235,7 @@ + @@ -1271,6 +1273,7 @@ + @@ -1545,6 +1548,7 @@ Stisknutím tlačítka OK otevřete dialogové okno Najít nebo ho přepnete do Pokud opravdu potřebujete funkci zpětného vyhledávání při regulárních výrazech, pokyny pro její zapnutí najdete v uživatelské příručce."/> + @@ -1720,15 +1724,15 @@ Hledat ve všech souborech, ale rekurzivně vynechat všechny složky log nebo l - + - + - + From c25a925370548271f4cf64b46f9deb32b2df5a41 Mon Sep 17 00:00:00 2001 From: "A. Regnander" Date: Tue, 5 Nov 2024 00:51:40 +0100 Subject: [PATCH 26/37] Update swedish.xml Close #15760 --- PowerEditor/installer/nativeLang/swedish.xml | 24 ++++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/PowerEditor/installer/nativeLang/swedish.xml b/PowerEditor/installer/nativeLang/swedish.xml index bd625263509f..3cac9eb1b51c 100644 --- a/PowerEditor/installer/nativeLang/swedish.xml +++ b/PowerEditor/installer/nativeLang/swedish.xml @@ -638,6 +638,7 @@ Translation note: + @@ -957,6 +958,7 @@ Translation note: + @@ -1315,6 +1317,7 @@ Translation note: + @@ -1342,7 +1345,7 @@ Translation note: - + @@ -1548,7 +1551,8 @@ OBS: Om du inte skapar platshållarna eller stänger dem senare kommer din sessi Tryck på OK-knappen för att öppna sökdialogen eller sätta fokus på den. Se användarmanualen för instruktioner om hur man aktiverar reguljär bakåtsökning ifall du behöver detta."/> - + + @@ -1684,8 +1688,8 @@ Hitta i alla filer men exkludera mapparna "tests", "bin" och Hitta i alla filer men exkludera mapparna "log" eller "logs" rekursivt: *.* !+\log*"/> - - + + @@ -1699,8 +1703,8 @@ Hitta i alla filer men exkludera mapparna "log" eller "logs" - - + + @@ -1710,16 +1714,16 @@ Hitta i alla filer men exkludera mapparna "log" eller "logs" - - + + - + - + From 241a2dbbf394f0e5388943c418197700e13c78fc Mon Sep 17 00:00:00 2001 From: Krazal Date: Tue, 19 Nov 2024 16:04:42 +0100 Subject: [PATCH 27/37] Update hungarian.xml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Complete and up-to-date re-translation of the Hungarian language file, including: • Translating the missing terms • Adding missing accelerator letters (also for dialogs) • Correcting the previous spelling errors (e.g. capitalization) • Re-translating the inaccurate expressions more accurate • Re-translating the outdated terms Close #15824 --- .../installer/nativeLang/hungarian.xml | 2819 +++++++++-------- 1 file changed, 1538 insertions(+), 1281 deletions(-) diff --git a/PowerEditor/installer/nativeLang/hungarian.xml b/PowerEditor/installer/nativeLang/hungarian.xml index c39e5df65911..ab9e5bc409e2 100644 --- a/PowerEditor/installer/nativeLang/hungarian.xml +++ b/PowerEditor/installer/nativeLang/hungarian.xml @@ -1,12 +1,11 @@ - - - - + + + - + - +
@@ -16,1383 +15,1604 @@ - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + +
- - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
- - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + - - + + - - - - - - - - + + + + + + + + - - + + + + + + + - - - + + + - - - - - - - - - - + + + + + + + + + + - - - - - + + + + + - - + + - - - - - + + + + + - - - - + + + + - - - - + + + + - - - - + + + + + - - - - + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + + + - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + - - - - - + + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + + + - + - - + + - - - + + + - - - - - - - + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - + + + + - - - - - - - + + + + + + - + + - - - - + + + + - - - - + + + + + + - - - - - - - - - + + + + + - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - + + + + - - - + + + - - - - - - + + + + + + + + + - - - - + + + + - - - - + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + - - + + - + - - - + + + - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + - + + + + + + + + + + + + + + - - + + - - - - - + + + + - - - - - - + + + + + + - - - + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - + + + + - + - - - - - + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - + + + + + + - + - - - +Válassza az „Igen, mindig” lehetőséget, ha nem szeretné ismét látni ezt a párbeszédpanelt. +Ebben az esetben a „Gépház” párbeszédpanel „Egyéb” szakasza alatt kapcsolható vissza ez a megerősítés."/> + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - + + + + + + + - - + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + - + - - - + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + + + + - + - + + + - + - - + + - + - + - - + + + - + - + - + - + - + - + - + - + - - - - + + + + - + @@ -1404,170 +1624,207 @@ Folytatja?"/> - + - - + + - + - - - + + + - - + + - - - + + + - - + + - - + + - + - + - + - - - - - - - - - - + + + + + + + + - - - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - - - - + + - - - - - - + + + + + + - + - + + + - - - + + + - + - - - - - - + + + + + + + + + + + - + - + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + From 09202b32709204930a4130454358b6df10d3a883 Mon Sep 17 00:00:00 2001 From: Don Ho Date: Thu, 21 Nov 2024 19:14:24 +0100 Subject: [PATCH 28/37] Update translations --- PowerEditor/installer/nativeLang/english.xml | 2 +- PowerEditor/installer/nativeLang/french.xml | 11 ++++++----- .../installer/nativeLang/taiwaneseMandarin.xml | 10 ++++++---- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/PowerEditor/installer/nativeLang/english.xml b/PowerEditor/installer/nativeLang/english.xml index 6d68d3319555..0fc76d79ad95 100644 --- a/PowerEditor/installer/nativeLang/english.xml +++ b/PowerEditor/installer/nativeLang/english.xml @@ -5,7 +5,7 @@ Translation note: 2. All the comments are for explanation, they are not for translation. --> - +
diff --git a/PowerEditor/installer/nativeLang/french.xml b/PowerEditor/installer/nativeLang/french.xml index 71a509a5e4b1..03bfa9e664cd 100644 --- a/PowerEditor/installer/nativeLang/french.xml +++ b/PowerEditor/installer/nativeLang/french.xml @@ -5,7 +5,7 @@ Translation note: 2. All the comments are for explanation, they are not for translation. --> - +
@@ -535,8 +535,8 @@ Translation note: - - + + @@ -1314,6 +1314,7 @@ Translation note: + @@ -1713,9 +1714,9 @@ Rechercher dans tous les fichiers mais pas dans les dossiers log ou logs récurs - + - + diff --git a/PowerEditor/installer/nativeLang/taiwaneseMandarin.xml b/PowerEditor/installer/nativeLang/taiwaneseMandarin.xml index 01a20f8a9064..c3fb763c8813 100644 --- a/PowerEditor/installer/nativeLang/taiwaneseMandarin.xml +++ b/PowerEditor/installer/nativeLang/taiwaneseMandarin.xml @@ -1,6 +1,6 @@ - +
@@ -1256,6 +1256,7 @@ + @@ -1578,11 +1579,12 @@ + - + - - + + From 780f77b544e99a75f2ce87e8a1f1f841958d241f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rado=C5=A1=20Mili=C4=87ev?= <40705899+rammba@users.noreply.github.com> Date: Thu, 21 Nov 2024 17:58:34 +0100 Subject: [PATCH 29/37] Update Serbian localization to v8.7.2 Close #15836 --- PowerEditor/installer/nativeLang/serbian.xml | 2061 ++++++++++++++--- .../installer/nativeLang/serbianCyrillic.xml | 1886 ++++++++++++--- 2 files changed, 3243 insertions(+), 704 deletions(-) diff --git a/PowerEditor/installer/nativeLang/serbian.xml b/PowerEditor/installer/nativeLang/serbian.xml index 3007c9b382b3..a24448d88b4b 100644 --- a/PowerEditor/installer/nativeLang/serbian.xml +++ b/PowerEditor/installer/nativeLang/serbian.xml @@ -1,437 +1,1830 @@ + - +
- + - + - + - + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + + + + - - - - - - + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + + + + + + + + + + + + + + + + + +
- - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
- - + + + - - - + + + - + - + - - + + - - + - - + + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - + + - - - + + + + + - + - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + + + + - - - + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + - - + + - + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + + + + + + + + + + + + - - - - - - - - - - - - - - + - + - + - - - - - - + + + + + + - + - - - + + + + + + + + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PowerEditor/installer/nativeLang/serbianCyrillic.xml b/PowerEditor/installer/nativeLang/serbianCyrillic.xml index 44a101489438..285de4434a39 100644 --- a/PowerEditor/installer/nativeLang/serbianCyrillic.xml +++ b/PowerEditor/installer/nativeLang/serbianCyrillic.xml @@ -1,57 +1,69 @@ - - +
- + - + + - - + + + + + - - - - - - + + + + + + - - + + + + + + + + + - - + + + - + - + @@ -63,16 +75,28 @@ + + + + + + - - + + + + + - + + + + @@ -82,298 +106,692 @@ - - + + - + + + - + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - + + - - - + + + + + - - - + + + + + + - - - - - + + + + + + + + + + + + + - - - - - - - - - + + + - + - + - + - + - - + + - + - - - - + + + + + + + + + + + + + + + + + + + - - + + + + + + - - - - - - - - + + + + + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + + + + - + - + + + + + + + + + +
- - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
- + + - - - - - + + + + + - - - + + + - - + - - - - + + + + - - - - - - + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + - + - - - + + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - + + + - - - - + + + + + - + - - - - - - - + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - - - + + + + + + - + @@ -390,296 +808,1024 @@ - + + + + + - + - - + + + + + + + + + + + + + + + + + + - + - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + - - - - - + + + + + + + - + - - - - - + + + - + + + + - - - + + + + + + + + - - + + + - - - - - - - - - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + + + + + + + - - - - + + + + - - - - + + + + + + + + + + - - + + + - - - - - - - - + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + - + - + - - - - - + + + + + - + - + - + + + + + + + + + + + - - + + + + + + + + + + + + + + + + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + - - - - - - - - - - - - - - - - - + - + - + - + - + - + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +НАПОМЕНА: Одабиром да их не креирате, или ако их затворите, ваша сесија ЋЕ БИТИ ИЗМЕЊЕНА ПРИ ИЗЛАСКУ! Препоручујемо да направите backup "session.xml" сада."/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - - - + + + + - + - - + + - + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - \ No newline at end of file + From 6282d90db78a9e73719dfc195fb7de0714c7a60d Mon Sep 17 00:00:00 2001 From: artpoli <7978799+artpoli@users.noreply.github.com> Date: Sat, 2 Nov 2024 22:33:37 +0200 Subject: [PATCH 30/37] [xml] Update Ukrainian translation Close #15753 --- .../installer/nativeLang/ukrainian.xml | 40 ++++++++++++------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/PowerEditor/installer/nativeLang/ukrainian.xml b/PowerEditor/installer/nativeLang/ukrainian.xml index 329c4e78aa7f..cb525e7aeff7 100644 --- a/PowerEditor/installer/nativeLang/ukrainian.xml +++ b/PowerEditor/installer/nativeLang/ukrainian.xml @@ -411,8 +411,8 @@ Translation note: - - + +
@@ -630,14 +630,16 @@ Translation note: - - - - - - - + + + + + + + + + @@ -752,8 +754,8 @@ Translation note: - - + + @@ -1309,6 +1311,12 @@ Translation note: + + + + + + @@ -1596,8 +1604,8 @@ Translation note: - - + + @@ -1611,8 +1619,8 @@ Translation note: - - + + @@ -1704,6 +1712,8 @@ Translation note: + + From 5b83d3a24a23ca277aff1b32b50220cac48aafcd Mon Sep 17 00:00:00 2001 From: schnurlos Date: Sun, 3 Nov 2024 16:01:37 +0100 Subject: [PATCH 31/37] [xml] Update german.xml Close #15755 --- PowerEditor/installer/nativeLang/german.xml | 30 +++++++++++---------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/PowerEditor/installer/nativeLang/german.xml b/PowerEditor/installer/nativeLang/german.xml index 443834ccc81b..05273124cf24 100644 --- a/PowerEditor/installer/nativeLang/german.xml +++ b/PowerEditor/installer/nativeLang/german.xml @@ -14,7 +14,7 @@ Translation note: or a copy at: http://www.should.keepfree.de/N++/german.xml.txt (rename to german.xml) --> - +
@@ -639,16 +639,16 @@ Translation note: - - - - - - - + + + + + + + - - + + @@ -967,6 +967,7 @@ Translation note: + @@ -1325,6 +1326,7 @@ Translation note: + @@ -1727,9 +1729,9 @@ Suche in allen Dateien, exkludiere alle Verzeichnisse log oder logs rekursiv: - + - + @@ -1829,8 +1831,8 @@ Ein Klick auf "?" öffnet die Webseite des Benutzerhandbuchs."/> C, C++, Java, C#, Objective-C, PHP, JavaScript, JSP, CSS, Perl, Rust, PowerShell und JSON. Wenn diese 'Intelligente Einrückung' gewählt wird, aber keine Dateien in den oben genannten Sprachen bearbeitet werden, bleibt die Einrückung im Standard-Modus."/> - - + + From ae290d3d29ccfeab3a7f929783fba08a7823492d Mon Sep 17 00:00:00 2001 From: Matteo Concato <59116246+conky77@users.noreply.github.com> Date: Sat, 9 Nov 2024 10:08:31 +0100 Subject: [PATCH 32/37] [xml] Update italian.xml Close #15774 --- PowerEditor/installer/nativeLang/italian.xml | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/PowerEditor/installer/nativeLang/italian.xml b/PowerEditor/installer/nativeLang/italian.xml index 6f06e3d563fd..dd357f0e52de 100644 --- a/PowerEditor/installer/nativeLang/italian.xml +++ b/PowerEditor/installer/nativeLang/italian.xml @@ -1,7 +1,7 @@ - +
@@ -962,6 +962,7 @@ Translation note: + @@ -1320,6 +1321,7 @@ Translation note: + @@ -1554,6 +1556,7 @@ Premere il pulsante Conferma per aprire o attivare la finestra di dialogo Trova. Nel caso fosse necessaria la funzione di ricerca Espressione regolare a ritroso, consultare il manuale dell'utente per istruzioni su come abilitarla."/> + @@ -1722,9 +1725,9 @@ Cerca in tutti i file, ma escludi tutte le cartelle o sottocartelle log o logs: - + - + From 640e4f3432e905da895b83c9347d835a77259ff4 Mon Sep 17 00:00:00 2001 From: Njardarheim-1337 <68544556+Njardarheim-1337@users.noreply.github.com> Date: Wed, 20 Nov 2024 11:11:31 +0100 Subject: [PATCH 33/37] Updated Norwegian translation 8.6.9 Close #15829 --- .../installer/nativeLang/norwegian.xml | 39 ++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/PowerEditor/installer/nativeLang/norwegian.xml b/PowerEditor/installer/nativeLang/norwegian.xml index a479f34abaf4..23e77f2bf347 100644 --- a/PowerEditor/installer/nativeLang/norwegian.xml +++ b/PowerEditor/installer/nativeLang/norwegian.xml @@ -8,7 +8,7 @@ Translation note: --> - +
@@ -358,6 +358,7 @@ Translation note: + @@ -640,6 +641,8 @@ Translation note: + + @@ -1113,6 +1116,20 @@ Translation note: + + + + + + + + + + + + + + @@ -1304,6 +1321,13 @@ Translation note: + + + + + + + @@ -1388,6 +1412,11 @@ Du kan aktivere denne dialogboksen på nytt i Innstillinger senere."/> + + + + + @@ -1794,6 +1823,14 @@ Klikk på "?" knappen til høyre for å åpne nettside med Brukermanua + + + + + From fbff18fbc7d2183e906d28f2635fd01c2420eb67 Mon Sep 17 00:00:00 2001 From: Andrei Miloiu Date: Sun, 17 Nov 2024 14:14:11 +0200 Subject: [PATCH 34/37] [xml] Update Romanian translation for Notepad++ 8.7.2 Close #15814 --- PowerEditor/installer/nativeLang/romanian.xml | 752 +++++++++--------- 1 file changed, 385 insertions(+), 367 deletions(-) diff --git a/PowerEditor/installer/nativeLang/romanian.xml b/PowerEditor/installer/nativeLang/romanian.xml index d0c433deacef..87e7b5c12e09 100644 --- a/PowerEditor/installer/nativeLang/romanian.xml +++ b/PowerEditor/installer/nativeLang/romanian.xml @@ -1,12 +1,12 @@ - +
@@ -26,36 +26,36 @@ - - + + - - + + - - + + - + - + - + - + - - + + @@ -91,59 +91,59 @@ - + - + - + - - - + + + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -152,16 +152,16 @@ - - + + - + - + @@ -192,94 +192,94 @@ - - - - - + + + + + - + - - - - - - - + + + + + + + - + - - - - - - - - - - - - + + + + + + + + + + + + - + - + - - - - - - + + + + + + - + - - - + + + - - - - - + + + + + - - - + + + - - - - - + + + + + @@ -299,21 +299,21 @@ - - - - - - - - - - + + + + + + + + + + - - - - + + + + @@ -343,7 +343,7 @@ - + @@ -355,15 +355,15 @@ - - + + - - + + - - + + @@ -372,24 +372,24 @@ - + - - + + - - - - - - - + + + + + + + @@ -404,82 +404,83 @@
- - - - - + + + + + - - - - + + + + + - - + + - - + + - - - - - - - - - + + + + + + + + + - - - - - - - + + + + + + + - +
- + - + - - + + - + - + - + - - - + + + - + - + @@ -503,11 +504,11 @@ - + - + @@ -665,94 +666,94 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -763,7 +764,7 @@ - + @@ -951,15 +952,16 @@ - - + + - + - - + + + - + @@ -976,9 +978,9 @@ - + - + @@ -1031,7 +1033,7 @@ - + @@ -1041,7 +1043,7 @@ - + @@ -1050,9 +1052,9 @@ - - - + + + @@ -1068,9 +1070,9 @@ - + - + @@ -1121,30 +1123,43 @@ - + + + + + + + + + + + + + + - - + + - - - - - + + + + + - - + + - - + + @@ -1182,81 +1197,82 @@ - + - + - - + + + - - + + - + - - + + - + - + - - - + + + - - + + - + - - + + - - - + + + - + - - + + - + - + @@ -1268,7 +1284,7 @@ - + - - + + - + @@ -1313,21 +1329,22 @@ - + + - + - + @@ -1348,14 +1365,14 @@ - + - - + + @@ -1378,12 +1395,12 @@ - + - - + + @@ -1398,7 +1415,7 @@ - + +
@@ -1633,7 +1651,7 @@ Dacă ai nevoie de funcția de căutare inversă regex, consultă manualul utili - + @@ -1664,7 +1682,7 @@ Dacă ai nevoie de funcția de căutare inversă regex, consultă manualul utili - + @@ -1707,13 +1725,13 @@ Găsește în toate fișierele, dar exclude toate dosarele log sau logs în mod - - - - - - - + + + + + + + @@ -1726,28 +1744,28 @@ Găsește în toate fișierele, dar exclude toate dosarele log sau logs în mod - - - - + + + + - - - + + + - + - - - - - + + + + + @@ -1768,11 +1786,11 @@ Găsește în toate fișierele, dar exclude toate dosarele log sau logs în mod - + - - - + + + @@ -1789,7 +1807,7 @@ Găsește în toate fișierele, dar exclude toate dosarele log sau logs în mod - + @@ -1799,7 +1817,7 @@ NOTĂ: 1. Modificând aici opțiunile necesită repornirea fișierelor mari deschise pentru a obține un comportament adecvat. 2. Dacă "funcția Dezactivează Limitare lungime linii global" este bifată și deschizi un fișier mare, "funcția Limitare lungime linii" va fi dezactivată pentru toate fișierle. O poți reactiva folosind meniul "Afișare->Limitare lungime linii"."/> - - + @@ -1833,7 +1851,7 @@ Apasă pe "?" butonul din dreapta pentru a deschide site-ul web cu Man C, C++, Java, C#, Objective-C, PHP, JavaScript, JSP, CSS, Perl, Rust, PowerShell și JSON. Dacă selectezi modul avansat, dar nu editezi fișiere în limbile menționate mai sus, indentarea va rămâne în modul de bază."/> - + From c1244b076ac1fa49c1130a8b3e181d49a12b1d78 Mon Sep 17 00:00:00 2001 From: Don Ho Date: Fri, 22 Nov 2024 03:10:13 +0100 Subject: [PATCH 35/37] Remove unnecessary translation ref: https://github.com/notepad-plus-plus/notepad-plus-plus/commit/c021c861959765db9efa0a7d6b156538a0e6f4db#r149366417 --- PowerEditor/installer/nativeLang/brazilian_portuguese.xml | 2 -- PowerEditor/installer/nativeLang/bulgarian.xml | 1 - PowerEditor/installer/nativeLang/corsican.xml | 1 - PowerEditor/installer/nativeLang/czech.xml | 1 - PowerEditor/installer/nativeLang/english.xml | 1 - PowerEditor/installer/nativeLang/english_customizable.xml | 1 - PowerEditor/installer/nativeLang/hungarian.xml | 1 - PowerEditor/installer/nativeLang/italian.xml | 1 - PowerEditor/installer/nativeLang/romanian.xml | 1 - PowerEditor/installer/nativeLang/russian.xml | 1 - PowerEditor/installer/nativeLang/serbian.xml | 1 - PowerEditor/installer/nativeLang/serbianCyrillic.xml | 1 - PowerEditor/installer/nativeLang/slovak.xml | 1 - PowerEditor/installer/nativeLang/swedish.xml | 1 - PowerEditor/src/ScintillaComponent/Buffer.cpp | 7 +------ 15 files changed, 1 insertion(+), 21 deletions(-) diff --git a/PowerEditor/installer/nativeLang/brazilian_portuguese.xml b/PowerEditor/installer/nativeLang/brazilian_portuguese.xml index 951984378f58..a9386b6be8d1 100644 --- a/PowerEditor/installer/nativeLang/brazilian_portuguese.xml +++ b/PowerEditor/installer/nativeLang/brazilian_portuguese.xml @@ -1553,8 +1553,6 @@ Pressione o botão OK para abrir a caixa de diálogo Localizar ou alterne o foco Se for necessário executar uma busca regex para trás, consulte o manual de usuário para instruções sobre como habilitar este recurso."/> - - diff --git a/PowerEditor/installer/nativeLang/bulgarian.xml b/PowerEditor/installer/nativeLang/bulgarian.xml index 99f82c77e9f5..eae7a201e933 100644 --- a/PowerEditor/installer/nativeLang/bulgarian.xml +++ b/PowerEditor/installer/nativeLang/bulgarian.xml @@ -2009,7 +2009,6 @@ Notepad++ ще направи резервно копие на стария фа Ако се нуждаете от функцията за търсене в обратна посока с регулярен израз, направете справка в ръководството на потребителя за инструкции за активирането ѝ."/> - diff --git a/PowerEditor/installer/nativeLang/corsican.xml b/PowerEditor/installer/nativeLang/corsican.xml index 25fc714b920b..47fabe56a223 100644 --- a/PowerEditor/installer/nativeLang/corsican.xml +++ b/PowerEditor/installer/nativeLang/corsican.xml @@ -1581,7 +1581,6 @@ Appughjate nant’à u buttone Vai per apre a finestra di dialogu di ricerca o p S’è vo avete bisognu di a funzione di ricerca RegEx à l’arritrosa, lighjite l’istruzzioni per attivalla in u manuale di l’utilizatore."/> - diff --git a/PowerEditor/installer/nativeLang/czech.xml b/PowerEditor/installer/nativeLang/czech.xml index 64a035b24ff4..fd9f1e0f86fb 100644 --- a/PowerEditor/installer/nativeLang/czech.xml +++ b/PowerEditor/installer/nativeLang/czech.xml @@ -1548,7 +1548,6 @@ Stisknutím tlačítka OK otevřete dialogové okno Najít nebo ho přepnete do Pokud opravdu potřebujete funkci zpětného vyhledávání při regulárních výrazech, pokyny pro její zapnutí najdete v uživatelské příručce."/> - diff --git a/PowerEditor/installer/nativeLang/english.xml b/PowerEditor/installer/nativeLang/english.xml index 0fc76d79ad95..4110cb164bc6 100644 --- a/PowerEditor/installer/nativeLang/english.xml +++ b/PowerEditor/installer/nativeLang/english.xml @@ -1552,7 +1552,6 @@ Press the OK button to open the Find dialog or set focus on it. If you require the backward regex searching feature, consult the user manual for instructions on enabling it."/> - diff --git a/PowerEditor/installer/nativeLang/english_customizable.xml b/PowerEditor/installer/nativeLang/english_customizable.xml index 2ab6b11331de..8c6a7f9559e3 100644 --- a/PowerEditor/installer/nativeLang/english_customizable.xml +++ b/PowerEditor/installer/nativeLang/english_customizable.xml @@ -1550,7 +1550,6 @@ Press the OK button to open the Find dialog or set focus on it. If you require the backward regex searching feature, consult the user manual for instructions on enabling it."/> - diff --git a/PowerEditor/installer/nativeLang/hungarian.xml b/PowerEditor/installer/nativeLang/hungarian.xml index ab9e5bc409e2..5fd3d48a82a2 100644 --- a/PowerEditor/installer/nativeLang/hungarian.xml +++ b/PowerEditor/installer/nativeLang/hungarian.xml @@ -1552,7 +1552,6 @@ Nyomja meg az OK gombot a „Keresés” párbeszédpanel megnyitásához vagy a Ha szüksége van a visszafelé történő reguláris keresésre, a Felhasználói kézikönyvben megtalálja a funkció engedélyezésével kapcsolatos útmutatásokat."/> - diff --git a/PowerEditor/installer/nativeLang/italian.xml b/PowerEditor/installer/nativeLang/italian.xml index dd357f0e52de..18c8ed79ad02 100644 --- a/PowerEditor/installer/nativeLang/italian.xml +++ b/PowerEditor/installer/nativeLang/italian.xml @@ -1556,7 +1556,6 @@ Premere il pulsante Conferma per aprire o attivare la finestra di dialogo Trova. Nel caso fosse necessaria la funzione di ricerca Espressione regolare a ritroso, consultare il manuale dell'utente per istruzioni su come abilitarla."/> - diff --git a/PowerEditor/installer/nativeLang/romanian.xml b/PowerEditor/installer/nativeLang/romanian.xml index 87e7b5c12e09..2d15a4e72879 100644 --- a/PowerEditor/installer/nativeLang/romanian.xml +++ b/PowerEditor/installer/nativeLang/romanian.xml @@ -1574,7 +1574,6 @@ Apasă butonul OK pentru a deschide căsuța de dialog Găsește sau pentru a se Dacă ai nevoie de funcția de căutare inversă regex, consultă manualul utilizatorului manualul de utilizare pentru instrucțiuni privind activarea acesteia."/> - diff --git a/PowerEditor/installer/nativeLang/russian.xml b/PowerEditor/installer/nativeLang/russian.xml index cedec4f1ca7f..ffe8fa64fa84 100644 --- a/PowerEditor/installer/nativeLang/russian.xml +++ b/PowerEditor/installer/nativeLang/russian.xml @@ -1544,7 +1544,6 @@ Notepad++ сделает резервную копию вашего старог Если вам нужна функция обратного поиска регулярных выражений, обратитесь к руководству пользователя за инструкциями по её включению."/> - diff --git a/PowerEditor/installer/nativeLang/serbian.xml b/PowerEditor/installer/nativeLang/serbian.xml index a24448d88b4b..acba4be9458f 100644 --- a/PowerEditor/installer/nativeLang/serbian.xml +++ b/PowerEditor/installer/nativeLang/serbian.xml @@ -1552,7 +1552,6 @@ Pritisnite OK da otvorite dijalog za pronalaženje ili da se fokusirate na njega Ako zahtevate obrnuti smer pretrage regularnih izraza, konsultujte uputstvo sa instrukcijama kako da ga omogućite."/> - diff --git a/PowerEditor/installer/nativeLang/serbianCyrillic.xml b/PowerEditor/installer/nativeLang/serbianCyrillic.xml index 285de4434a39..b29eb2655d2e 100644 --- a/PowerEditor/installer/nativeLang/serbianCyrillic.xml +++ b/PowerEditor/installer/nativeLang/serbianCyrillic.xml @@ -1553,7 +1553,6 @@ Notepad++ ће backup-овати старији "shortcuts.xml" и с Ако захтевате обрнути смер претраге регуларних израза, консултујте упутство са инструкцијама како да га омогућите."/> - diff --git a/PowerEditor/installer/nativeLang/slovak.xml b/PowerEditor/installer/nativeLang/slovak.xml index d4fd5393fb22..f346f7b16e01 100644 --- a/PowerEditor/installer/nativeLang/slovak.xml +++ b/PowerEditor/installer/nativeLang/slovak.xml @@ -1551,7 +1551,6 @@ Stlačením tlačidla OK otvorte dialógové okno Hľadať alebo ho prepnite do Ak potrebujete funkciu spätného vyhľadávania pomocou regulárnych výrazov, pokyny na jej zapnutie nájdete v používateľskej príručke."/> - diff --git a/PowerEditor/installer/nativeLang/swedish.xml b/PowerEditor/installer/nativeLang/swedish.xml index 3cac9eb1b51c..9da5ab33bb2a 100644 --- a/PowerEditor/installer/nativeLang/swedish.xml +++ b/PowerEditor/installer/nativeLang/swedish.xml @@ -1552,7 +1552,6 @@ Tryck på OK-knappen för att öppna sökdialogen eller sätta fokus på den. Se användarmanualen för instruktioner om hur man aktiverar reguljär bakåtsökning ifall du behöver detta."/> - diff --git a/PowerEditor/src/ScintillaComponent/Buffer.cpp b/PowerEditor/src/ScintillaComponent/Buffer.cpp index 1effb8ef4512..9f32cd6a4f7a 100644 --- a/PowerEditor/src/ScintillaComponent/Buffer.cpp +++ b/PowerEditor/src/ScintillaComponent/Buffer.cpp @@ -729,12 +729,7 @@ BufferID FileManager::loadFile(const wchar_t* filename, Document doc, int encodi if (fileSize == -1) { // we cannot continue (or Scintilla will throw SC_STATUS_FAILURE in the loadFileData later) - NativeLangSpeaker* pNativeSpeaker = NppParameters::getInstance().getNativeLangSpeaker(); - pNativeSpeaker->messageBox("FileToLoadSizeCheckFailed", - _pNotepadPlus->_pEditView->getHSelf(), - L"Cannot obtain the file size before loading!", - L"File to load size-check failed", - MB_OK | MB_APPLMODAL); + ::MessageBox(_pNotepadPlus->_pEditView->getHSelf(), L"Cannot obtain the file size before loading!", L"File to load size-check failed", MB_OK | MB_APPLMODAL); return BUFFER_INVALID; } From 30c6ac778e0f7f2e9022e00299f36e6d84d1a55e Mon Sep 17 00:00:00 2001 From: Don Ho Date: Fri, 22 Nov 2024 03:20:39 +0100 Subject: [PATCH 36/37] Remove obsolete entries from localization files --- PowerEditor/installer/nativeLang/abkhazian.xml | 2 -- PowerEditor/installer/nativeLang/arabic.xml | 1 - PowerEditor/installer/nativeLang/basque.xml | 2 -- PowerEditor/installer/nativeLang/belarusian.xml | 2 -- PowerEditor/installer/nativeLang/breton.xml | 1 - PowerEditor/installer/nativeLang/catalan.xml | 1 - PowerEditor/installer/nativeLang/chineseSimplified.xml | 2 -- PowerEditor/installer/nativeLang/danish.xml | 2 -- PowerEditor/installer/nativeLang/dutch.xml | 2 -- PowerEditor/installer/nativeLang/finnish.xml | 2 -- PowerEditor/installer/nativeLang/galician.xml | 2 -- PowerEditor/installer/nativeLang/greek.xml | 2 -- PowerEditor/installer/nativeLang/hindi.xml | 1 - PowerEditor/installer/nativeLang/hongKongCantonese.xml | 2 -- PowerEditor/installer/nativeLang/indonesian.xml | 2 -- PowerEditor/installer/nativeLang/irish.xml | 1 - PowerEditor/installer/nativeLang/italian.xml | 2 -- PowerEditor/installer/nativeLang/korean.xml | 2 -- PowerEditor/installer/nativeLang/lithuanian.xml | 1 - PowerEditor/installer/nativeLang/norwegian.xml | 1 - PowerEditor/installer/nativeLang/piglatin.xml | 1 - PowerEditor/installer/nativeLang/polish.xml | 2 -- PowerEditor/installer/nativeLang/portuguese.xml | 2 -- PowerEditor/installer/nativeLang/slovenian.xml | 2 -- PowerEditor/installer/nativeLang/spanish.xml | 2 -- PowerEditor/installer/nativeLang/turkish.xml | 2 -- PowerEditor/installer/nativeLang/ukrainian.xml | 2 -- PowerEditor/installer/nativeLang/uzbek.xml | 1 - PowerEditor/installer/nativeLang/venetian.xml | 2 -- PowerEditor/installer/nativeLang/vietnamese.xml | 2 -- PowerEditor/installer/nativeLang/zulu.xml | 1 - 31 files changed, 52 deletions(-) diff --git a/PowerEditor/installer/nativeLang/abkhazian.xml b/PowerEditor/installer/nativeLang/abkhazian.xml index dc85ab502d37..dd05cb9f89eb 100644 --- a/PowerEditor/installer/nativeLang/abkhazian.xml +++ b/PowerEditor/installer/nativeLang/abkhazian.xml @@ -1437,10 +1437,8 @@ Updated to v8.2.1: - - diff --git a/PowerEditor/installer/nativeLang/arabic.xml b/PowerEditor/installer/nativeLang/arabic.xml index ee78bdc65ec2..882325126004 100644 --- a/PowerEditor/installer/nativeLang/arabic.xml +++ b/PowerEditor/installer/nativeLang/arabic.xml @@ -1194,7 +1194,6 @@ - diff --git a/PowerEditor/installer/nativeLang/basque.xml b/PowerEditor/installer/nativeLang/basque.xml index 9226af20c6fe..80f45d1072aa 100644 --- a/PowerEditor/installer/nativeLang/basque.xml +++ b/PowerEditor/installer/nativeLang/basque.xml @@ -1484,10 +1484,8 @@ Bilatu fitxategi guztietan baina alde batera utzi log ala logs karpetak modu err - - diff --git a/PowerEditor/installer/nativeLang/belarusian.xml b/PowerEditor/installer/nativeLang/belarusian.xml index ee35732a15be..245a3f17ffc0 100644 --- a/PowerEditor/installer/nativeLang/belarusian.xml +++ b/PowerEditor/installer/nativeLang/belarusian.xml @@ -1542,10 +1542,8 @@ The comments are here for explanation, it's not necessary to translate them. - - diff --git a/PowerEditor/installer/nativeLang/breton.xml b/PowerEditor/installer/nativeLang/breton.xml index 58cba4efa4be..e9c3bcdb53d5 100644 --- a/PowerEditor/installer/nativeLang/breton.xml +++ b/PowerEditor/installer/nativeLang/breton.xml @@ -1231,7 +1231,6 @@ Klask en holl restroù paneve exe, obj && log: - diff --git a/PowerEditor/installer/nativeLang/catalan.xml b/PowerEditor/installer/nativeLang/catalan.xml index e8446f265e3e..fb4f3b38ce32 100644 --- a/PowerEditor/installer/nativeLang/catalan.xml +++ b/PowerEditor/installer/nativeLang/catalan.xml @@ -1175,7 +1175,6 @@ By Hiro5 - diff --git a/PowerEditor/installer/nativeLang/chineseSimplified.xml b/PowerEditor/installer/nativeLang/chineseSimplified.xml index bbdaaa541a5e..90c02353761c 100644 --- a/PowerEditor/installer/nativeLang/chineseSimplified.xml +++ b/PowerEditor/installer/nativeLang/chineseSimplified.xml @@ -1688,9 +1688,7 @@ Notepad++ 会备份旧的 “shortcuts.xml”,并将其保存为 “shortcuts. - - diff --git a/PowerEditor/installer/nativeLang/danish.xml b/PowerEditor/installer/nativeLang/danish.xml index 49f66dc8f4c5..85f2bc6d1298 100644 --- a/PowerEditor/installer/nativeLang/danish.xml +++ b/PowerEditor/installer/nativeLang/danish.xml @@ -1613,10 +1613,8 @@ Find i alle filer, undtagen i mapperne log med undermapper: - - diff --git a/PowerEditor/installer/nativeLang/dutch.xml b/PowerEditor/installer/nativeLang/dutch.xml index 35946ce49061..f90ec2b39efc 100644 --- a/PowerEditor/installer/nativeLang/dutch.xml +++ b/PowerEditor/installer/nativeLang/dutch.xml @@ -1697,9 +1697,7 @@ Zoeken in alle bestanden maar alle log- of logs-mappen recursief uitsluiten: - - diff --git a/PowerEditor/installer/nativeLang/finnish.xml b/PowerEditor/installer/nativeLang/finnish.xml index 4914c0f62f0e..4f3829000b59 100644 --- a/PowerEditor/installer/nativeLang/finnish.xml +++ b/PowerEditor/installer/nativeLang/finnish.xml @@ -1487,10 +1487,8 @@ Updated to v8.6 fixed version - - diff --git a/PowerEditor/installer/nativeLang/galician.xml b/PowerEditor/installer/nativeLang/galician.xml index f5880b9a3f70..e074990580c4 100644 --- a/PowerEditor/installer/nativeLang/galician.xml +++ b/PowerEditor/installer/nativeLang/galician.xml @@ -1721,9 +1721,7 @@ Buscar en tódolos arquivos pero excluir tódalas carpetas de rexistro ou rexist - - diff --git a/PowerEditor/installer/nativeLang/greek.xml b/PowerEditor/installer/nativeLang/greek.xml index a2c64b92806b..b9503df48a65 100644 --- a/PowerEditor/installer/nativeLang/greek.xml +++ b/PowerEditor/installer/nativeLang/greek.xml @@ -1382,10 +1382,8 @@ Find in all files except exe, obj && log: - - diff --git a/PowerEditor/installer/nativeLang/hindi.xml b/PowerEditor/installer/nativeLang/hindi.xml index 56dd394c2841..06be7684f952 100644 --- a/PowerEditor/installer/nativeLang/hindi.xml +++ b/PowerEditor/installer/nativeLang/hindi.xml @@ -1215,7 +1215,6 @@ - diff --git a/PowerEditor/installer/nativeLang/hongKongCantonese.xml b/PowerEditor/installer/nativeLang/hongKongCantonese.xml index a86d735efd83..2eb8f3131532 100644 --- a/PowerEditor/installer/nativeLang/hongKongCantonese.xml +++ b/PowerEditor/installer/nativeLang/hongKongCantonese.xml @@ -1709,10 +1709,8 @@ Reload 會放棄你喺 Notepad++ 改過嘅嘢,咁仲繼唔繼續呢?"/> - - diff --git a/PowerEditor/installer/nativeLang/indonesian.xml b/PowerEditor/installer/nativeLang/indonesian.xml index a54416618d81..01eb43dc4c9a 100644 --- a/PowerEditor/installer/nativeLang/indonesian.xml +++ b/PowerEditor/installer/nativeLang/indonesian.xml @@ -1598,10 +1598,8 @@ Temukan dalam semua berkas kecuali semua folder log atau logs secara berulang: - - diff --git a/PowerEditor/installer/nativeLang/irish.xml b/PowerEditor/installer/nativeLang/irish.xml index bc739ec3bd33..2fdcca69e2eb 100644 --- a/PowerEditor/installer/nativeLang/irish.xml +++ b/PowerEditor/installer/nativeLang/irish.xml @@ -1301,7 +1301,6 @@ Find in all files except exe, obj && log: - diff --git a/PowerEditor/installer/nativeLang/italian.xml b/PowerEditor/installer/nativeLang/italian.xml index 18c8ed79ad02..35b1ad915350 100644 --- a/PowerEditor/installer/nativeLang/italian.xml +++ b/PowerEditor/installer/nativeLang/italian.xml @@ -1724,9 +1724,7 @@ Cerca in tutti i file, ma escludi tutte le cartelle o sottocartelle log o logs: - - diff --git a/PowerEditor/installer/nativeLang/korean.xml b/PowerEditor/installer/nativeLang/korean.xml index 8fa2e3ba789e..6b50b83dfa71 100644 --- a/PowerEditor/installer/nativeLang/korean.xml +++ b/PowerEditor/installer/nativeLang/korean.xml @@ -1713,9 +1713,7 @@ log나 logs를 포함한 하위 디렉토리를 제외하고 모든 파일 찾 - - diff --git a/PowerEditor/installer/nativeLang/lithuanian.xml b/PowerEditor/installer/nativeLang/lithuanian.xml index 4ff63a67fb7c..f1bd8f435410 100644 --- a/PowerEditor/installer/nativeLang/lithuanian.xml +++ b/PowerEditor/installer/nativeLang/lithuanian.xml @@ -1168,7 +1168,6 @@ Ar norite paleisti Notepad++ administratoriaus teisėmis?"/> - diff --git a/PowerEditor/installer/nativeLang/norwegian.xml b/PowerEditor/installer/nativeLang/norwegian.xml index 23e77f2bf347..5d3f490125a6 100644 --- a/PowerEditor/installer/nativeLang/norwegian.xml +++ b/PowerEditor/installer/nativeLang/norwegian.xml @@ -1729,7 +1729,6 @@ Finn i alle filer, men ekskluder alle mapper log eller logs rekursivt: - diff --git a/PowerEditor/installer/nativeLang/piglatin.xml b/PowerEditor/installer/nativeLang/piglatin.xml index 4c1177c756ce..a0feecc98f3e 100644 --- a/PowerEditor/installer/nativeLang/piglatin.xml +++ b/PowerEditor/installer/nativeLang/piglatin.xml @@ -1135,7 +1135,6 @@ - diff --git a/PowerEditor/installer/nativeLang/polish.xml b/PowerEditor/installer/nativeLang/polish.xml index 7e4571003770..04e2f43d1954 100644 --- a/PowerEditor/installer/nativeLang/polish.xml +++ b/PowerEditor/installer/nativeLang/polish.xml @@ -1729,9 +1729,7 @@ Szukaj wśród wszystkich plików z wyjątkiem wszystkich zagnieżdżonych folde - - diff --git a/PowerEditor/installer/nativeLang/portuguese.xml b/PowerEditor/installer/nativeLang/portuguese.xml index 593ef0c0d738..03c626a59904 100644 --- a/PowerEditor/installer/nativeLang/portuguese.xml +++ b/PowerEditor/installer/nativeLang/portuguese.xml @@ -1718,9 +1718,7 @@ Localizar em todos os ficheiros mas excluir todos os registos de pastas ou regis - - diff --git a/PowerEditor/installer/nativeLang/slovenian.xml b/PowerEditor/installer/nativeLang/slovenian.xml index 89c3db5d64be..014f2c1b6a36 100644 --- a/PowerEditor/installer/nativeLang/slovenian.xml +++ b/PowerEditor/installer/nativeLang/slovenian.xml @@ -1688,9 +1688,7 @@ Najdi v vseh datotekah, vendar rekurzivno izključite vse mape dnevnikov ali vse - - diff --git a/PowerEditor/installer/nativeLang/spanish.xml b/PowerEditor/installer/nativeLang/spanish.xml index d9c01d7dbd59..33ab6fe84082 100644 --- a/PowerEditor/installer/nativeLang/spanish.xml +++ b/PowerEditor/installer/nativeLang/spanish.xml @@ -1723,9 +1723,7 @@ Buscar en todos los archivos pero excluir todas las carpetas de registro o regis - - diff --git a/PowerEditor/installer/nativeLang/turkish.xml b/PowerEditor/installer/nativeLang/turkish.xml index 2006c3917691..69d1e30c72e5 100644 --- a/PowerEditor/installer/nativeLang/turkish.xml +++ b/PowerEditor/installer/nativeLang/turkish.xml @@ -1709,9 +1709,7 @@ Tüm dosyalarda bul ama şu klasörleri tekrarlı olarak hariç tut - log ya da - - diff --git a/PowerEditor/installer/nativeLang/ukrainian.xml b/PowerEditor/installer/nativeLang/ukrainian.xml index cb525e7aeff7..689aae632bdc 100644 --- a/PowerEditor/installer/nativeLang/ukrainian.xml +++ b/PowerEditor/installer/nativeLang/ukrainian.xml @@ -1637,9 +1637,7 @@ Translation note: - - diff --git a/PowerEditor/installer/nativeLang/uzbek.xml b/PowerEditor/installer/nativeLang/uzbek.xml index b12818b824cc..5a78bdbf8cd7 100644 --- a/PowerEditor/installer/nativeLang/uzbek.xml +++ b/PowerEditor/installer/nativeLang/uzbek.xml @@ -1239,7 +1239,6 @@ Siz bir necha marker ustunlarini probellar orqali belgilashingiz mumkin."/> - diff --git a/PowerEditor/installer/nativeLang/venetian.xml b/PowerEditor/installer/nativeLang/venetian.xml index e8ff7d310e4a..e98d804989fb 100644 --- a/PowerEditor/installer/nativeLang/venetian.xml +++ b/PowerEditor/installer/nativeLang/venetian.xml @@ -1716,9 +1716,7 @@ Runa en tuti i files, ma escludi tute ƚe carteƚe o sotocarteƚe log o logs: - - diff --git a/PowerEditor/installer/nativeLang/vietnamese.xml b/PowerEditor/installer/nativeLang/vietnamese.xml index b8d697b2e189..f7c9935a8271 100644 --- a/PowerEditor/installer/nativeLang/vietnamese.xml +++ b/PowerEditor/installer/nativeLang/vietnamese.xml @@ -1544,10 +1544,8 @@ Tìm trong tất cả các tệp nhưng loại trừ tất cả thư mục log h - - diff --git a/PowerEditor/installer/nativeLang/zulu.xml b/PowerEditor/installer/nativeLang/zulu.xml index 62413374c938..6f37eab03a1a 100644 --- a/PowerEditor/installer/nativeLang/zulu.xml +++ b/PowerEditor/installer/nativeLang/zulu.xml @@ -1171,7 +1171,6 @@ Ingabe ufuna ukuqala i-Notepad ++ kwimodi ye-Administrator?"/> - From 2556c1e56a19d319987e21dc17c5d020c0b9bea4 Mon Sep 17 00:00:00 2001 From: Don Ho Date: Fri, 22 Nov 2024 03:24:54 +0100 Subject: [PATCH 37/37] Fix xml file structure error --- PowerEditor/installer/nativeLang/brazilian_portuguese.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/PowerEditor/installer/nativeLang/brazilian_portuguese.xml b/PowerEditor/installer/nativeLang/brazilian_portuguese.xml index a9386b6be8d1..e90702a98933 100644 --- a/PowerEditor/installer/nativeLang/brazilian_portuguese.xml +++ b/PowerEditor/installer/nativeLang/brazilian_portuguese.xml @@ -1553,6 +1553,7 @@ Pressione o botão OK para abrir a caixa de diálogo Localizar ou alterne o foco Se for necessário executar uma busca regex para trás, consulte o manual de usuário para instruções sobre como habilitar este recurso."/> +