diff --git a/doc/泛读报告.docx b/doc/泛读报告.docx
index 2f3f22c..042fd34 100644
Binary files a/doc/泛读报告.docx and b/doc/泛读报告.docx differ
diff --git a/src/PowerEditor/src/MISC/Exception/MiniDumper.cpp b/src/PowerEditor/src/MISC/Exception/MiniDumper.cpp
index f073d76..f5d03e8 100644
--- a/src/PowerEditor/src/MISC/Exception/MiniDumper.cpp
+++ b/src/PowerEditor/src/MISC/Exception/MiniDumper.cpp
@@ -16,31 +16,31 @@
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
-
+//¸ÃcppÎļþʵÏÖÁË´¦Àí±ÀÀ£µÄÀàMiniDumper.h
#include
#include "MiniDumper.h"
-
+//ÏûÏ¢±êÌâ
LPCTSTR msgTitle = TEXT("Notepad++ crash analysis");
MiniDumper::MiniDumper()
{
}
-
+//дÈë±ÀÀ£×ª´¢µÄº¯Êý
bool MiniDumper::writeDump(EXCEPTION_POINTERS * pExceptionInfo)
{
TCHAR szDumpPath[MAX_PATH];
TCHAR szScratch[MAX_PATH];
LPCTSTR szResult = NULL;
bool retval = false;
-
+ //¼ÓÔØ¶¯Ì¬Á´½Ó¿â
HMODULE hDll = ::LoadLibraryEx(TEXT("DBGHELP.DLL"), nullptr, LOAD_LIBRARY_SEARCH_SYSTEM32); //that wont work on older windows version than XP, #care :)
if (hDll)
{
MINIDUMPWRITEDUMP pDump = (MINIDUMPWRITEDUMP)::GetProcAddress( hDll, "MiniDumpWriteDump" );
if (pDump)
- {
+ {//»ñÈ¡µ±Ç°Ä£¿éµÄÎļþ·¾¶
::GetModuleFileName(NULL, szDumpPath, MAX_PATH);
::PathRemoveFileSpec(szDumpPath);
wcscat_s(szDumpPath, TEXT("\\NppDump.dmp"));
@@ -93,7 +93,7 @@ bool MiniDumper::writeDump(EXCEPTION_POINTERS * pExceptionInfo)
{
szResult = TEXT("Unable to load the debugging DLL,\r\nfind a recent copy of dbghelp.dll and install it.");
}
-
+ //µ¯³öÏûÏ¢¿òÏÔʾ½á¹û
if (szResult)
::MessageBox(NULL, szResult, msgTitle, MB_OK);
diff --git a/src/PowerEditor/src/ScintillaComponent/DocTabView.cpp b/src/PowerEditor/src/ScintillaComponent/DocTabView.cpp
index 5fbc09e..371460e 100644
--- a/src/PowerEditor/src/ScintillaComponent/DocTabView.cpp
+++ b/src/PowerEditor/src/ScintillaComponent/DocTabView.cpp
@@ -25,7 +25,7 @@
bool DocTabView::_hideTabBarStatus = false;
-
+//Ïò±êÇ©ÊÓͼÌí¼ÓÐµĻº³åÇø£¬Ê×Ïȼì²é»º³åÇøÊÇ·ñÓÐЧ£¨²»ÊÇÎÞЧµÄ»º³åÇø£©£¬È»ºó¼ì²éÊÇ·ñÒѾ´æÔÚÏàͬµÄ»º³åÇø¡£Èç¹û»º³åÇøÓÐЧÇÒÉÐδ´æÔÚ£¬Ôò½«ÆäÌí¼Óµ½±êǩҳÊÓͼÖУ¬²¢¸üи¸´°¿ÚµÄ´óС¡£
void DocTabView::addBuffer(BufferID buffer)
{
if (buffer == BUFFER_INVALID) //valid only
@@ -48,25 +48,25 @@ void DocTabView::addBuffer(BufferID buffer)
::SendMessage(_hParent, WM_SIZE, 0, 0);
}
-
+//¹Ø±ÕÖ¸¶¨µÄ»º³åÇø£¬µ½Òª¹Ø±ÕµÄ»º³åÇøµÄË÷Òý£¬È»ºó´Ó±êǩҳÊÓͼÖÐɾ³ýËü£¬²¢Í¨Öª¸¸´°¿Ú½øÐе÷Õû¡£
void DocTabView::closeBuffer(BufferID buffer)
{
int indexToClose = getIndexByBuffer(buffer);
deletItemAt((size_t)indexToClose);
::SendMessage(_hParent, WM_SIZE, 0, 0);
}
-
+//ÎªÌØ¶¨µÄ±êÇ©ÉèÖÃÑÕÉ«¡£¸ù¾ÝÌṩµÄ»º³åÇøID£¬ÉèÖøûº³åÇøÔÚ±êǩҳÖеÄÑÕÉ«¡£
void DocTabView::setIndividualTabColour(BufferID bufferId, int colorId)
{
bufferId->setDocColorId(colorId);
}
-
+//»ñÈ¡ÌØ¶¨±êÇ©µÄÑÕÉ«£¬¸ù¾ÝÌṩµÄ±êÇ©Ë÷Òý£¬·µ»Ø¸Ã±êÇ©µÄÑÕÉ«¡£
int DocTabView::getIndividualTabColour(int tabIndex)
{
BufferID bufferId = getBufferByIndex(tabIndex);
return bufferId->getDocColorId();
}
-
+//¼¤»îÌØ¶¨µÄ»º³åÇø£¬Í¨¹ý»º³åÇøµÄIDÕÒµ½ÆäË÷ÒýλÖò¢³¢ÊÔ¼¤»î¸Ã»º³åÇø£¬Èç¹û³É¹¦Ôò·µ»Øtrue£¬·ñÔò·µ»Øfalse¡£
bool DocTabView::activateBuffer(BufferID buffer)
{
int indexToActivate = getIndexByBuffer(buffer);
@@ -77,14 +77,14 @@ bool DocTabView::activateBuffer(BufferID buffer)
return true;
}
-
+//»ñÈ¡µ±Ç°¼¤»îµÄ»º³åÇø¡£
BufferID DocTabView::activeBuffer()
{
int index = getCurrentTabIndex();
return getBufferByIndex(index);
}
-
+//±éÀúËùÓбêǩҳ£¬¸ù¾ÝÎļþÃû²éÕÒÆ¥ÅäµÄ»º³åÇø£¬ÕÒµ½Ôò·µ»ØÆäID£¬·ñÔò·µ»ØBUFFER_INVALID¡£
BufferID DocTabView::findBufferByName(const TCHAR * fullfilename) //-1 if not found, something else otherwise
{
TCITEM tie{};
@@ -103,7 +103,7 @@ BufferID DocTabView::findBufferByName(const TCHAR * fullfilename) //-1 if not fo
return BUFFER_INVALID;
}
-
+//ͨ¹ý»º³åÇøIDÕÒµ½ÆäÔÚ±êÇ©ÖеÄË÷ÒýλÖã¬Èç¹û²»´æÔÚÔò·µ»Ø - 1¡£
int DocTabView::getIndexByBuffer(BufferID id)
{
TCITEM tie{};
@@ -118,7 +118,7 @@ int DocTabView::getIndexByBuffer(BufferID id)
return -1;
}
-
+//ͨ¹ý»º³åÇøIDÕÒµ½ÆäÔÚ±êÇ©ÖеÄË÷ÒýλÖã¬Èç¹û²»´æÔÚÔò·µ»Ø-1¡£
BufferID DocTabView::getBufferByIndex(size_t index)
{
TCITEM tie{};
@@ -129,7 +129,7 @@ BufferID DocTabView::getBufferByIndex(size_t index)
return reinterpret_cast(tie.lParam);
}
-
+//¸ù¾ÝmaskÖеıê־룬¸üÐÂÓ뻺³åÇøÏà¹ØµÄÐÅÏ¢£¬ÀýÈçÎļþÃû±ä»¯¡¢Ö»¶Á״̬±ä»¯µÈ¡£
void DocTabView::bufferUpdated(Buffer * buffer, int mask)
{
int index = getIndexByBuffer(buffer->getID());
@@ -183,7 +183,7 @@ void DocTabView::bufferUpdated(Buffer * buffer, int mask)
*out = '\0';
}
}
-
+
::SendMessage(_hSelf, TCM_SETITEM, index, reinterpret_cast(&tie));
// send WM_SIZE only when change tab
@@ -192,7 +192,7 @@ void DocTabView::bufferUpdated(Buffer * buffer, int mask)
::SendMessage(_hParent, WM_SIZE, 0, 0);
}
-
+//¸ù¾Ý¸ø¶¨µÄË÷ÒýÉèÖÃÏàÓ¦µÄ»º³åÇøID£¬²¢¸üбêÇ©ÏÔʾµÄÏà¹ØÐÅÏ¢¡£
void DocTabView::setBuffer(size_t index, BufferID id)
{
if (index >= _nbItem)
@@ -208,7 +208,7 @@ void DocTabView::setBuffer(size_t index, BufferID id)
::SendMessage(_hParent, WM_SIZE, 0, 0);
}
-
+//¸ù¾ÝÒþ²Ø/ÏÔʾ±êÇ©À¸×´Ì¬£¬µ÷Õû±êǩҳÊÓͼºÍÎı¾±à¼Æ÷ÊÓͼµÄ´óС£¬²¢¸ù¾ÝÐèÒª·¢ËÍÏûÏ¢ÒÔ¸üпɵã»÷Á´½Ó¡£
void DocTabView::reSizeTo(RECT & rc)
{
int borderWidth = ((NppParameters::getInstance()).getSVP())._borderWidth;
diff --git a/src/PowerEditor/src/ScintillaComponent/DocTabView.h b/src/PowerEditor/src/ScintillaComponent/DocTabView.h
index 2f8f78c..a0b9894 100644
--- a/src/PowerEditor/src/ScintillaComponent/DocTabView.h
+++ b/src/PowerEditor/src/ScintillaComponent/DocTabView.h
@@ -14,11 +14,15 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
+
+
+
+//¸ÃÀà¼Ì³Ð×ÔTabBarPlusÀà¡£¸ÃÀฺÔð¹ÜÀíÎĵµÑ¡ÏÊÓͼ£¬²¢ÌṩһϵÁз½·¨ÓÃÓÚÌí¼Ó¡¢¹Ø±Õ¡¢¼¤»î»º³åÇøÒÔ¼°ÉèÖÃÑ¡ÏµÄ¸öÐÔ»¯Ñ¡ÏîµÈ¹¦ÄÜ¡£
#pragma once
#include "TabBar.h"
#include "Buffer.h"
-
+// ¶¨ÒåһЩ³£Á¿ÓÃ×÷ͼƬË÷Òý
const int SAVED_IMG_INDEX = 0;
const int UNSAVED_IMG_INDEX = 1;
const int REDONLY_IMG_INDEX = 2;
@@ -33,7 +37,7 @@ public :
void destroy() override {
TabBarPlus::destroy();
};
-
+ //³õʼ»¯º¯Êý£¬´«ÈëʵÀý¾ä±ú¡¢¸¸´°¿Ú¾ä±ú¡¢ScintillaEditViewÖ¸Õë¡¢ÒÔ¼°Í¼Æ¬ÁбíºÍÑ¡ÔñµÄͼƬË÷Òý
void init(HINSTANCE hInst, HWND parent, ScintillaEditView * pView, std::vector pIconListVector, unsigned char indexChoice) {
TabBarPlus::init(hInst, parent);
_pView = pView;
@@ -52,45 +56,50 @@ public :
TabBar::setImageList(_pIconListVector[_iconListIndexChoice]->getHandle());
return;
};
-
+ // ¸Ä±äÑ¡ÖеÄͼƬÁбí
void changeIcons(unsigned char choice) {
if (choice >= _pIconListVector.size())
return;
_iconListIndexChoice = choice;
TabBar::setImageList(_pIconListVector[_iconListIndexChoice]->getHandle());
};
-
+ // Ìí¼Ó»º³åÇø
void addBuffer(BufferID buffer);
+ // ¹Ø±Õ»º³åÇø
void closeBuffer(BufferID buffer);
+ // »º³åÇø¸üÐÂ
void bufferUpdated(Buffer * buffer, int mask);
-
+ // ¼¤»î»º³åÇø
bool activateBuffer(BufferID buffer);
-
+ // »ñÈ¡µ±Ç°¼¤»îµÄ»º³åÇø
BufferID activeBuffer();
+ // ¸ù¾ÝÎļþÃû²éÕÒ»º³åÇø£¬·µ»ØË÷ÒýÖµ£¬Èç¹ûδÕÒµ½Ôò·µ»Ø-1
BufferID findBufferByName(const TCHAR * fullfilename); //-1 if not found, something else otherwise
-
+ // ¸ù¾Ý»º³åÇø»ñÈ¡Ë÷ÒýÖµ
int getIndexByBuffer(BufferID id);
+ // ¸ù¾ÝË÷ÒýÖµ»ñÈ¡»º³åÇø
BufferID getBufferByIndex(size_t index);
-
+ // ÉèÖÃÖ¸¶¨Ë÷ÒýλÖõĻº³åÇø
void setBuffer(size_t index, BufferID id);
-
+ // ¾²Ì¬º¯Êý£¬ÓÃÓÚÉèÖÃÒþ²Ø»òÏÔʾѡÏÀ¸µÄ״̬
static bool setHideTabBarStatus(bool hideOrNot) {
bool temp = _hideTabBarStatus;
_hideTabBarStatus = hideOrNot;
return temp;
};
-
+ // ¾²Ì¬º¯Êý£¬»ñÈ¡Òþ²Ø»òÏÔʾѡÏÀ¸µÄ״̬
static bool getHideTabBarStatus() {
return _hideTabBarStatus;
};
-
+ // ÖØÐ´¸¸ÀàµÄreSizeTo·½·¨
void reSizeTo(RECT & rc) override;
-
+ // »ñÈ¡ScintillaEditViewÖ¸Õë
const ScintillaEditView* getScintillaEditView() const {
return _pView;
};
-
+ // ÉèÖÃÖ¸¶¨»º³åÇøµÄ¸öÐÔ»¯Ñ¡ÏÑÕÉ«
void setIndividualTabColour(BufferID bufferId, int colorId);
+ // »ñȡָ¶¨Ë÷ÒýλÖõĸöÐÔ»¯Ñ¡ÏÑÕÉ«
int getIndividualTabColour(int tabIndex) override;
private :
diff --git a/src/PowerEditor/src/WinControls/FileBrowser/fileBrowser.cpp b/src/PowerEditor/src/WinControls/FileBrowser/fileBrowser.cpp
index 3f17025..aa5690d 100644
--- a/src/PowerEditor/src/WinControls/FileBrowser/fileBrowser.cpp
+++ b/src/PowerEditor/src/WinControls/FileBrowser/fileBrowser.cpp
@@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
-
+//fileBrowserÀàµÄ¾ßÌåʵÏÖ
#include "fileBrowser.h"
#include "resource.h"
#include "tinyxml.h"
@@ -41,7 +41,7 @@
#define FB_CMD_FOLDALL 2
#define FB_CMD_EXPANDALL 3
-
+//Í£Ö¹ËùÓÐÎļþ¼àÊÓÆ÷
FileBrowser::~FileBrowser()
{
for (const auto folder : _folderUpdaters)
@@ -55,7 +55,7 @@ FileBrowser::~FileBrowser()
delete cd;
}
}
-
+//½«Ò»¸ö×Ö·û´®·Ö¸î³É¶à¸ö×Ó×Ö·û´®£¬º¯ÊýʹÓÃÁËforÑ»·ÒÀ´Î¼ì²é×Ö·û´®ÖеÄÿ¸ö×Ö·û£¬µ±ÕÒµ½µÈÓÚ`sep`»òÕß¿Õ×Ö·ûµÄ×Ö·ûʱ£¬¾Í°ÑÕâ֮ǰµÄ×Ö·û×÷Ϊһ¸ö×Ó×Ö·û´®´æ´¢ÔÚ`splitedStrings`ÏòÁ¿ÖС£
vector split(const generic_string & string2split, TCHAR sep)
{
vector splitedStrings;
@@ -71,7 +71,7 @@ vector split(const generic_string & string2split, TCHAR sep)
}
return splitedStrings;
}
-
+//¼ì²é×ÓÎļþ¼ÐÊÇ·ñÓë¸ùÎļþÏà¹Ø
bool isRelatedRootFolder(const generic_string & relatedRoot, const generic_string & subFolder)
{
if (relatedRoot.empty())
@@ -91,11 +91,11 @@ bool isRelatedRootFolder(const generic_string & relatedRoot, const generic_strin
return relatedRootArray[index2Compare] == subFolderArray[index2Compare];
}
-
+//ÏûÏ¢´¦Àí
intptr_t CALLBACK FileBrowser::run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
- {
+ {//»á»°¿ò³õʼ»¯£¬°üÀ¨´´½¨¹¤¾ßÌõ£¬Ê÷×´ÊÓͼµÄ³õʼ»¯µÈ¡£
case WM_INITDIALOG :
{
NppParameters& nppParam = NppParameters::getInstance();
@@ -175,7 +175,7 @@ intptr_t CALLBACK FileBrowser::run_dlgProc(UINT message, WPARAM wParam, LPARAM l
return TRUE;
}
-
+ //´¦ÀíºÚ°µÄ£Ê½Ë¢ÐµÄÏûÏ¢
case NPPM_INTERNAL_REFRESHDARKMODE:
{
if (static_cast(lParam) != TRUE)
@@ -185,7 +185,7 @@ intptr_t CALLBACK FileBrowser::run_dlgProc(UINT message, WPARAM wParam, LPARAM l
NppDarkMode::setTreeViewStyle(_treeView.getHSelf());
return TRUE;
}
-
+ //Êó±êÏûÏ¢
case WM_MOUSEMOVE:
if (_treeView.isDragging())
_treeView.dragItem(_hSelf, LOWORD(lParam), HIWORD(lParam));
@@ -197,13 +197,13 @@ intptr_t CALLBACK FileBrowser::run_dlgProc(UINT message, WPARAM wParam, LPARAM l
}
break;
-
+ //֪ͨÏûÏ¢
case WM_NOTIFY:
{
notified((LPNMHDR)lParam);
}
return TRUE;
-
+ //µÃµ½´°ÌåµÄпí¶ÈºÍ¸ß¶È£¬È»ºóµ÷Õû¹¤¾ßÌõºÍÊ÷ÐÎÊÓͼµÄλÖúʹóС¡£
case WM_SIZE:
{
int width = LOWORD(lParam);
@@ -220,28 +220,28 @@ intptr_t CALLBACK FileBrowser::run_dlgProc(UINT message, WPARAM wParam, LPARAM l
::MoveWindow(hwnd, 0, toolbarMenuRect.bottom + extraValue, width, height - toolbarMenuRect.bottom - extraValue, TRUE);
break;
}
-
+ //Îı¾²Ëµ¥
case WM_CONTEXTMENU:
if (!_treeView.isDragging())
showContextMenu(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
return TRUE;
-
+ //À´×Բ˵¥µÄÑ¡Ôñ
case WM_COMMAND:
{
switch (LOWORD(wParam))
- {
+ {//Ñ¡Ôñµ±Ç°ÕýÔڱ༵ÄÎļþ¡£
case FB_CMD_AIMFILE:
{
selectCurrentEditingFile();
break;
}
-
+ //ÕÛµþ
case FB_CMD_FOLDALL:
{
_treeView.foldAll();
break;
}
-
+ //Õ¹¿ª
case FB_CMD_EXPANDALL:
{
_treeView.expandAll();
@@ -253,7 +253,7 @@ intptr_t CALLBACK FileBrowser::run_dlgProc(UINT message, WPARAM wParam, LPARAM l
}
break;
}
-
+ //Ïú»Ù
case WM_DESTROY:
{
::DestroyWindow(_hToolbarMenu);
@@ -261,7 +261,7 @@ intptr_t CALLBACK FileBrowser::run_dlgProc(UINT message, WPARAM wParam, LPARAM l
destroyMenus();
break;
}
-
+ //Ìí¼Ó
case FB_ADDFILE:
{
@@ -274,7 +274,7 @@ intptr_t CALLBACK FileBrowser::run_dlgProc(UINT message, WPARAM wParam, LPARAM l
break;
}
-
+ //ÒÆ³ý
case FB_RMFILE:
{
@@ -287,7 +287,7 @@ intptr_t CALLBACK FileBrowser::run_dlgProc(UINT message, WPARAM wParam, LPARAM l
break;
}
-
+ //ÖØÃüÃû
case FB_RNFILE:
{
const std::vector file2Change = *(std::vector *)lParam;
@@ -324,7 +324,7 @@ intptr_t CALLBACK FileBrowser::run_dlgProc(UINT message, WPARAM wParam, LPARAM l
}
return DockingDlgInterface::run_dlgProc(message, wParam, lParam);
}
-
+//´´½¨Ò»¸öÎļþä¯ÀÀÆ÷µÄʱºò£¬³õʼ»¯µ¯³ö²Ëµ¥¡£Ê×ÏÈÊÕ¼¯¸÷ÖÖÓë²Ëµ¥ÏîÏà¹ØµÄ×Ö·û´®£¬È»ºó´´½¨ÈýÖÖ²»Í¬µÄ²Ëµ¥£ºÈ«¾Ö²Ëµ¥¡¢¸ù²Ëµ¥¡¢Îļþ¼Ð²Ëµ¥ºÍÎļþ²Ëµ¥£¬ÏòÕâЩ²Ëµ¥ÖвåÈë¸÷Öֲ˵¥Ïî¡£
void FileBrowser::initPopupMenus()
{
NativeLangSpeaker* pNativeSpeaker = NppParameters::getInstance().getNativeLangSpeaker();
@@ -370,7 +370,7 @@ void FileBrowser::initPopupMenus()
::InsertMenu(_hFileMenu, 0, MF_BYCOMMAND, IDM_FILEBROWSER_EXPLORERHERE, explorerHere.c_str());
::InsertMenu(_hFileMenu, 0, MF_BYCOMMAND, IDM_FILEBROWSER_CMDHERE, cmdHere.c_str());
}
-
+//ͨ¹ýÒ»¸ö¸ø¶¨µÄ·¾¶Ñ¡ÖÐÎļþä¯ÀÀÆ÷ÖеÄÒ»¸öÏîÄ¿¡£ËüÊ×Ïȼì²é·¾¶ÊÇ·ñΪ¿Õ£¬È»ºóͨ¹ý±éÀúËùÓеÄÎļþ¼ÐÀ´Ñ°ÕÒ¶ÔÓ¦µÄÏîÄ¿¡£
bool FileBrowser::selectItemFromPath(const generic_string& itemPath) const
{
if (itemPath.empty())
@@ -409,7 +409,7 @@ bool FileBrowser::selectItemFromPath(const generic_string& itemPath) const
}
return false;
}
-
+//Ñ¡Ôñµ±Ç°ÕýÔڱ༵ÄÎļþ¡£
bool FileBrowser::selectCurrentEditingFile() const
{
TCHAR currentDocPath[MAX_PATH] = { '\0' };
@@ -418,7 +418,7 @@ bool FileBrowser::selectCurrentEditingFile() const
return selectItemFromPath(currentDocPathStr);
}
-
+//´Ý»Ù´´½¨µÄ²Ëµ¥
void FileBrowser::destroyMenus()
{
::DestroyMenu(_hGlobalMenu);
@@ -426,7 +426,7 @@ void FileBrowser::destroyMenus()
::DestroyMenu(_hFolderMenu);
::DestroyMenu(_hFileMenu);
}
-
+//·µ»ØÒ»¸ö¸ø¶¨½ÚµãµÄÍêÕû·¾¶¡£
generic_string FileBrowser::getNodePath(HTREEITEM node) const
{
if (!node) return TEXT("");
@@ -460,12 +460,12 @@ generic_string FileBrowser::getNodePath(HTREEITEM node) const
return fullPath;
}
-
+//·µ»ØÒ»¸ö¸ø¶¨½ÚµãµÄÃû³Æ¡£
generic_string FileBrowser::getNodeName(HTREEITEM node) const
{
return node ? _treeView.getItemDisplayName(node) : TEXT("");
}
-
+//´ò¿ªÑ¡¶¨µÄÎļþ¡£Èç¹ûÑ¡¶¨µÄÏîÄ¿ÊÇÒ»¸öÎļþ£¬ÄÇô¾Í´ò¿ªËü£»·ñÔò£¬²»Ö´ÐÐÈκβÙ×÷¡£
void FileBrowser::openSelectFile()
{
// Get the selected item
@@ -483,7 +483,7 @@ void FileBrowser::openSelectFile()
::PostMessage(_hParent, NPPM_DOOPEN, 0, reinterpret_cast(_selectedNodeFullPath.c_str()));
}
-
+//´¦Àí¸÷Öֲ˵¥²Ù×÷µÄʼþ¡£ÀýÈ磬Èç¹ûÒ»¸ö²Ëµ¥Ï˫»÷£¬ÄÇô¾Íµ÷Óú¯Êý½øÐжÔÓ¦µÄ´¦Àí£»Èç¹ûÒ»¸ö½Úµã±êÇ©±»±à¼£¬ÄÇôº¯Êý¾Í±£´æÐµıêÇ©¡£
void FileBrowser::notified(LPNMHDR notification)
{
if (notification->code == DMN_CLOSE)
@@ -673,7 +673,7 @@ void FileBrowser::notified(LPNMHDR notification)
}
}
}
-
+//»ñÈ¡¸ø¶¨ÏîÄ¿(`hItem`)µÄ½ÚµãÀàÐÍ¡£º¯ÊýÊ×ÏÈ»ñÈ¡ÏîÄ¿µÄË÷Òý(`iImage`)£¬Èç¹ûË÷ÒýΪ`INDEX_LEAF`£¬Ôò½ÚµãÀàÐÍΪÎļþ£»Èç¹ûÏîÄ¿µÄ²ÎÊý(`lParam`)²»Îª¿Õ²¢ÇÒ`SortingData4lParam`ÀàÖÐ`_rootPath`³ÉÔ±²»Îª¿Õ£¬ÄÇô½ÚµãÀàÐÍΪ¸ù£»·ñÔò£¬½ÚµãÀàÐÍΪÎļþ¼Ð¡£
BrowserNodeType FileBrowser::getNodeType(HTREEITEM hItem)
{
TVITEM tvItem;
@@ -697,7 +697,7 @@ BrowserNodeType FileBrowser::getNodeType(HTREEITEM hItem)
return browserNodeType_folder;
}
}
-
+//(x, y)λÖÃÏÔʾÉÏÏÂÎIJ˵¥¡£º¯ÊýÊ×Ïȼì²â¸ø¶¨Î»ÖÃÊÇ·ñÔÚÒ»¸öÔªËØÉÏ£¬Èç¹ûÊǵϰ¾ÍÑ¡ÖиÃÔªËØ£¬²¢»ñÈ¡¸ÃÔªËØµÄ½ÚµãÀàÐÍ£¬È»ºó¸ù¾Ý½ÚµãÀàÐÍÏÔʾÏàÓ¦µÄÉÏÏÂÎIJ˵¥¡£
void FileBrowser::showContextMenu(int x, int y)
{
TVHITTESTINFO tvHitInfo{};
@@ -735,7 +735,7 @@ void FileBrowser::showContextMenu(int x, int y)
x, y, 0, _hSelf, NULL);
}
}
-
+//Ö´ÐÐÓë¸ø¶¨ÃüÁîID(`cmdID`)¹ØÁªµÄÉÏÏÂÎIJ˵¥ÃüÁî¡£ÀýÈ磬Èç¹ûÃüÁîIDΪ`IDM_FILEBROWSER_REMOVEROOTFOLDER`£¬Ôòº¯Êý½«É¾³ýÑ¡¶¨µÄ¸ùÎļþ¼Ð¡£
void FileBrowser::popupMenuCmd(int cmdID)
{
// get selected item handle
@@ -872,7 +872,7 @@ void FileBrowser::popupMenuCmd(int cmdID)
}
-
+//ÔÚĿ¼`dir`ÖлñÈ¡·ûºÏ`patterns`ģʽµÄËùÓÐÎļþºÍ×ÓĿ¼µÄ½á¹¹ÐÅÏ¢£¬²¢½«Æä±£´æµ½`directoryStructure`ÖС£`isRecursive`²ÎÊýÖ¸¶¨ÊÇ·ñµÝ¹é±éÀú×ÓĿ¼£¬`isInHiddenDir`²ÎÊýָʾµ±Ç°Ä¿Â¼ÊÇ·ñΪÒþ²ØÄ¿Â¼¡£
void FileBrowser::getDirectoryStructure(const TCHAR *dir, const std::vector & patterns, FolderInfo & directoryStructure, bool isRecursive, bool isInHiddenDir)
{
if (directoryStructure._parent == nullptr) // Root!
@@ -954,12 +954,13 @@ void FileBrowser::getDirectoryStructure(const TCHAR *dir, const std::vector_rootFolder._rootPath == rootFolderPath)
return;
else
- {
+ { // ¼ì²éÊÇ·ñ´æÔÚÏà¹ØµÄ¸ùÎļþ¼Ð£¬ÒÔ±ãÑ¡ÔñĿ¼
if (isRelatedRootFolder(f->_rootFolder._rootPath, rootFolderPath))
{
//do nothing, go down to select the dir
@@ -987,9 +988,9 @@ void FileBrowser::addRootFolder(generic_string rootFolderPath)
_treeView.selectItem(foundItem);
return;
}
-
+ // ¼ì²éÊÇ·ñ´æÔÚÏà¶ÔÓÚÒªÌí¼ÓµÄ¸ùÎļþ¼ÐµÄ×ÓÎļþ¼Ð
if (isRelatedRootFolder(rootFolderPath, f->_rootFolder._rootPath))
- {
+ {// ÏÔʾÏûÏ¢¿ò£¬Ö¸Ê¾´æÔÚ×ÓÎļþ¼Ð£¬ÐèÒªÏÈÒÆ³ý
NppParameters::getInstance().getNativeLangSpeaker()->messageBox("FolderAsWorspaceSubfolderExists",
_hParent,
TEXT("A sub-folder of the folder you want to add exists.\rPlease remove its root from the panel before you add folder \"$STR_REPLACE$\"."),
@@ -1001,10 +1002,10 @@ void FileBrowser::addRootFolder(generic_string rootFolderPath)
}
}
}
-
+ // ÉèÖÃҪƥÅäµÄÎļþģʽ
std::vector patterns2Match;
patterns2Match.push_back(TEXT("*.*"));
-
+ // »ñÈ¡¸ùÎļþ¼ÐµÄÃû³Æ²¢´´½¨ÏàÓ¦µÄÎļþ¼ÐÐÅÏ¢¶ÔÏó
TCHAR *label = ::PathFindFileName(rootFolderPath.c_str());
TCHAR rootLabel[MAX_PATH] = {'\0'};
wcscpy_s(rootLabel, label);
@@ -1019,10 +1020,11 @@ void FileBrowser::addRootFolder(generic_string rootFolderPath)
_folderUpdaters.push_back(new FolderUpdater(directoryStructure, this));
_folderUpdaters[_folderUpdaters.size() - 1]->startWatcher();
}
-
+//´´½¨Îļþ¼ÐÏîÄ¿´ÓĿ¼½á¹¹
HTREEITEM FileBrowser::createFolderItemsFromDirStruct(HTREEITEM hParentItem, const FolderInfo & directoryStructure)
{
HTREEITEM hFolderItem = nullptr;
+ // Èç¹ûÊǸùĿ¼£¬Ôò´´½¨¸ù½Úµã
if (directoryStructure._parent == nullptr && hParentItem == nullptr)
{
TCHAR rootPath[MAX_PATH] = { '\0' };
@@ -1033,14 +1035,14 @@ HTREEITEM FileBrowser::createFolderItemsFromDirStruct(HTREEITEM hParentItem, con
SortingData4lParam* customData = new SortingData4lParam(rootPath, TEXT(""), true);
sortingDataArray.push_back(customData);
-
+ // Ìí¼Ó¸ù½Úµãµ½Ê÷ÊÓͼ
hFolderItem = _treeView.addItem(directoryStructure._name.c_str(), TVI_ROOT, INDEX_CLOSE_ROOT, reinterpret_cast(customData));
}
else
{
SortingData4lParam* customData = new SortingData4lParam(TEXT(""), directoryStructure._name, true);
sortingDataArray.push_back(customData);
-
+ // Ìí¼Ó½Úµãµ½Ê÷ÊÓͼ
hFolderItem = _treeView.addItem(directoryStructure._name.c_str(), hParentItem, INDEX_CLOSE_NODE, reinterpret_cast(customData));
}
@@ -1053,7 +1055,7 @@ HTREEITEM FileBrowser::createFolderItemsFromDirStruct(HTREEITEM hParentItem, con
{
SortingData4lParam* customData = new SortingData4lParam(TEXT(""), file._name, false);
sortingDataArray.push_back(customData);
-
+ // Ìí¼ÓÎļþ½Úµãµ½Ê÷ÊÓͼ
_treeView.addItem(file._name.c_str(), hFolderItem, INDEX_LEAF, reinterpret_cast(customData));
}
@@ -1061,7 +1063,7 @@ HTREEITEM FileBrowser::createFolderItemsFromDirStruct(HTREEITEM hParentItem, con
return hFolderItem;
}
-
+//¸ù¾Ý·¾¶ÕÒµ½¸ùĿ¼
HTREEITEM FileBrowser::getRootFromFullPath(const generic_string & rootPath) const
{
HTREEITEM node = nullptr;
@@ -1080,7 +1082,7 @@ HTREEITEM FileBrowser::getRootFromFullPath(const generic_string & rootPath) cons
}
return node;
}
-
+//ÔÚÖ¸¶¨¸¸½ÚµãϲéÕÒ¾ßÓÐÌØ¶¨Ãû³ÆµÄ×ӽڵ㡣
HTREEITEM FileBrowser::findChildNodeFromName(HTREEITEM parent, const generic_string& label) const
{
for (HTREEITEM hItemNode = _treeView.getChildFrom(parent);
@@ -1102,7 +1104,7 @@ HTREEITEM FileBrowser::findChildNodeFromName(HTREEITEM parent, const generic_str
}
return nullptr;
}
-
+//µÃµ½ËùÓиù½ÚµãµÄ·¾¶
vector FileBrowser::getRoots() const
{
vector roots;
@@ -1121,7 +1123,7 @@ vector FileBrowser::getRoots() const
}
return roots;
}
-
+//»ñȡѡÖÐÎļþµÄ·¾¶
generic_string FileBrowser::getSelectedItemPath() const
{
generic_string itemPath;
@@ -1132,7 +1134,7 @@ generic_string FileBrowser::getSelectedItemPath() const
}
return itemPath;
}
-
+//½«´«µÝµÄÎļþ·¾¶ÐÅÏ¢·Ö×飬°´ÕÕ¹²Í¬Â·¾¶ºÍ¸ù·¾¶½øÐзÖÀà¡£
std::vector FileBrowser::getFilesFromParam(LPARAM lParam) const
{
const std::vector filesToChange = *(std::vector*)lParam;
@@ -1189,7 +1191,7 @@ std::vector FileBrowser::getFilesFromParam(LPARAM lP
return groupedFiles;
}
-
+//½«Îļþ×éÌí¼Óµ½Ê÷ÖУ¬¸ù¾ÝÎļþÀàÐÍÔÚÊ÷Öд´½¨ÏàÓ¦µÄ½Úµã¡£
bool FileBrowser::addToTree(FilesToChange & group, HTREEITEM node)
{
if (node == nullptr) // it's a root. Search the right root with rootPath
@@ -1266,7 +1268,7 @@ bool FileBrowser::addToTree(FilesToChange & group, HTREEITEM node)
}
}
-
+//ÔÚÊ÷ÖвéÕÒ²¢É¾³ýÖ¸¶¨µÄÎļþ×é¡£
bool FileBrowser::deleteFromTree(FilesToChange & group)
{
std::vector foundItems = findInTree(group, nullptr);
@@ -1283,7 +1285,7 @@ bool FileBrowser::deleteFromTree(FilesToChange & group)
return true;
}
-
+//ÔÚÊ÷ÐνṹÖвéÕÒÖ¸¶¨Â·¾¶£¬Ê×ÏÈÅжϵ±Ç°½ÚµãÊÇ·ñΪ¸ù½Úµã£¬ÈôÊÇÔò¸ù¾Ý¸ù·¾¶²éÕÒ¶ÔÓ¦µÄ¸ù½Úµã¡£È»ºó¸ù¾Ý·¾¶Êý×éµÄ´óС£¬ÅжÏÊÇ·ñ¼ÌÐø²éÕÒ×Ó½Úµã»òÕß·µ»Øµ±Ç°½Úµã¡£
HTREEITEM FileBrowser::findInTree(const generic_string& rootPath, HTREEITEM node, std::vector linarPathArray) const
{
if (node == nullptr) // it's a root. Search the right root with rootPath
@@ -1326,7 +1328,7 @@ HTREEITEM FileBrowser::findInTree(const generic_string& rootPath, HTREEITEM node
return nullptr;
}
}
-
+//¸Ãº¯ÊýÒ²ÓÃÓÚÔÚÊ÷ÐνṹÖвéÕÒÖ¸¶¨Â·¾¶£¬µ«²ÎÊý²»Í¬¡£²ÎÊýgroupÊÇÒ»¸ö°üº¬ÎļþÐÅÏ¢ºÍ·¾¶µÄ¶ÔÏó£¬node±íʾµ±Ç°½Úµã¡£º¯ÊýÊ×ÏÈÅжϵ±Ç°½ÚµãÊÇ·ñΪ¸ù½Úµã£¬ÈôÊÇÔò¸ù¾Ý·¾¶ÐÅÏ¢²éÕÒ¶ÔÓ¦µÄ¸ù½Úµã¡£È»ºó¸ù¾Ý·¾¶ÐÅÏ¢µÄ´óС£¬ÅжÏÊÇ·ñ¼ÌÐø²éÕÒ×Ó½Úµã»òÕß·µ»ØÕÒµ½µÄ½Úµã¼¯ºÏ¡£
std::vector FileBrowser::findInTree(FilesToChange & group, HTREEITEM node) const
{
if (node == nullptr) // it's a root. Search the right root with rootPath
@@ -1367,7 +1369,7 @@ std::vector FileBrowser::findInTree(FilesToChange & group, HTREEITEM
return {};
}
}
-
+//ÕÒµ½Ö¸¶¨¸¸½ÚµãµÄ×Ó½Úµã
std::vector FileBrowser::findChildNodesFromNames(HTREEITEM parent, std::vector & labels) const
{
std::vector itemNodes;
@@ -1394,6 +1396,7 @@ std::vector FileBrowser::findChildNodesFromNames(HTREEITEM parent, st
}
return itemNodes;
}
+//ÒÆ³ýÒѾÔÚ¸¸½ÚµãÖеÄÃû×Ö¡£Ëü±éÀú¸¸½ÚµãµÄËùÓÐ×ӽڵ㣬²¢½«Óë¸ø¶¨±êÇ©¼¯ºÏÖÐÃû×ÖÏàÆ¥ÅäµÄ±êÇ©Çå³ý¡£
void FileBrowser::removeNamesAlreadyInNode(HTREEITEM parent, std::vector & labels) const
{
@@ -1418,7 +1421,7 @@ void FileBrowser::removeNamesAlreadyInNode(HTREEITEM parent, std::vector& linarPathArrayFrom, const generic_string & renameTo)
{
HTREEITEM foundItem = findInTree(rootPath, node, linarPathArrayFrom);
@@ -1433,7 +1436,7 @@ bool FileBrowser::renameInTree(const generic_string& rootPath, HTREEITEM node, c
return true;
}
-
+//ÅÅÐò»Øµ÷º¯Êý£¬°´ÕÕÎļþ¼ÐºÍÎļþÃû½øÐÐÅÅÐò¡£Ê×ÏÈÊÇÎļþ¼Ð£¬È»ºóÊÇÎļþ¡£Èç¹ûÁ½Õß¶¼ÊÇÎļþ¼Ð»òÎļþ£¬ÄÇô±È½ÏËüÃǵÄÃû×Ö¡£
int CALLBACK FileBrowser::categorySortFunc(LPARAM lParam1, LPARAM lParam2, LPARAM /*lParamSort*/)
{
SortingData4lParam* item1 = reinterpret_cast(lParam1);
@@ -1449,7 +1452,7 @@ int CALLBACK FileBrowser::categorySortFunc(LPARAM lParam1, LPARAM lParam2, LPARA
else
return lstrcmpi(item1->_label.c_str(), item2->_label.c_str());
}
-
+//½«¸ø¶¨µÄÍêÕû·¾¶Ìí¼Óµ½Îļþ¼ÐÐÅÏ¢½á¹¹ÖС£¸Ã·¾¶¿ÉÄÜÊÇÎļþ»òĿ¼£¬Èç¹û¸Ã·¾¶ÒѾ´æÔÚÓڽṹÖУ¬Ôò·µ»Øfalse£¬Èç¹û³É¹¦Ìí¼Ó£¬Ôò·µ»Øtrue¡£
bool FolderInfo::addToStructure(generic_string & fullpath, std::vector linarPathArray)
{
if (linarPathArray.size() == 1) // could be file or folder
@@ -1494,7 +1497,7 @@ bool FolderInfo::addToStructure(generic_string & fullpath, std::vector linarPathArray)
{
if (linarPathArray.size() == 1) // could be file or folder
@@ -1532,7 +1535,7 @@ bool FolderInfo::removeFromStructure(std::vector linarPathArray)
}
return false;
}
-
+//ÔÚÎļþ¼ÐÐÅÏ¢½á¹¹ÖÐÖØÃüÃû¸ø¶¨µÄÏßÐÔ·¾¶¡£Ëü½« "linarPathArrayFrom" Ö¸¶¨µÄ·¾¶µÄÃû×Ö¸ü¸ÄΪ "linarPathArrayTo" Ö¸¶¨µÄÃû×Ö¡£
bool FolderInfo::renameInStructure(std::vector linarPathArrayFrom, std::vector linarPathArrayTo)
{
if (linarPathArrayFrom.size() == 1) // could be file or folder
@@ -1572,6 +1575,7 @@ bool FolderInfo::renameInStructure(std::vector linarPathArrayFro
return false;
}
}
+//´ò¿ª¼àÊÓÆ÷£¬´´½¨Ò»¸öʼþ¶ÔÏ󲢿ªÆôÒ»¸öеÄỊ̈߳¬Ï߳̿ªÊ¼ÔËÐÐ `watching` º¯Êý¡£
void FolderUpdater::startWatcher()
{
@@ -1579,6 +1583,7 @@ void FolderUpdater::startWatcher()
_EventHandle = ::CreateEvent(nullptr, TRUE, FALSE, nullptr);
_watchThreadHandle = ::CreateThread(NULL, 0, watching, this, 0, NULL);
}
+//Í£Ö¹¼àÊÓÆ÷¡£Ëüͨ¹ýÉ趨ʼþºÍ¹Ø±Õ¶ÔÓ¦µÄÏß³ÌʵÏÖ¡£
void FolderUpdater::stopWatcher()
{
@@ -1586,6 +1591,7 @@ void FolderUpdater::stopWatcher()
::CloseHandle(_watchThreadHandle);
::CloseHandle(_EventHandle);
}
+//¸ù¾Ý¶¯×÷ÀàÐ͵ĴúÂë·µ»ØÏàÓ¦µÄ¶¯×÷Ãû×Ö¡£
LPCWSTR explainAction(DWORD dwAction)
{
@@ -1606,6 +1612,7 @@ LPCWSTR explainAction(DWORD dwAction)
}
}
+//¸ºÔð¼àÊÓĿ¼ÏµÄÎļþ±ä»¯¡£µ±ÓÐÎļþ±»´´½¨¡¢É¾³ý¡¢ÖØÃüÃûµÈ²Ù×÷ʱ£¬¾Í»á½«Õâ¸ö¸Ä¶¯·ÅÈë¸Ä¶¯¶ÓÁУ¬²¢Í¨¹ýʼþÌáÐÑÖ÷Ï߳̽øÐд¦Àí¡£
DWORD WINAPI FolderUpdater::watching(void *params)
{
@@ -1704,6 +1711,7 @@ DWORD WINAPI FolderUpdater::watching(void *params)
//printStr(L"Quit watching thread");
return EXIT_SUCCESS;
}
+//¸ù¾Ý¸Ä¶¯µÄÀàÐÍ£¬µ÷Óò»Í¬µÄÎļþä¯ÀÀÆ÷µÄ·½·¨£¬ÀýÈçÎļþ´´½¨¡¢É¾³ý¡¢ÖØÃüÃûµÈ¡£
void FolderUpdater::processChange(DWORD dwAction, std::vector filesToChange, FolderUpdater* thisFolderUpdater)
{
diff --git a/src/PowerEditor/src/WinControls/TabBar/TabBar.cpp b/src/PowerEditor/src/WinControls/TabBar/TabBar.cpp
index 578a0c0..20b6c3d 100644
--- a/src/PowerEditor/src/WinControls/TabBar/TabBar.cpp
+++ b/src/PowerEditor/src/WinControls/TabBar/TabBar.cpp
@@ -40,7 +40,7 @@ COLORREF TabBarPlus::_inactiveBgColour = RGB(192, 192, 192);
HWND TabBarPlus::_hwndArray[nbCtrlMax] = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL};
int TabBarPlus::_nbCtrl = 0;
-
+//³õʼ»¯±êÇ©À¸£¬´´½¨´°¿Ú
void TabBar::init(HINSTANCE hInst, HWND parent, bool isVertical, bool isMultiLine)
{
Window::init(hInst, parent);
@@ -49,7 +49,7 @@ void TabBar::init(HINSTANCE hInst, HWND parent, bool isVertical, bool isMultiLin
_isVertical = isVertical;
_isMultiLine = isMultiLine;
- INITCOMMONCONTROLSEX icce{};
+ INITCOMMONCONTROLSEX icce{};//³õʼ»¯Í¨Óÿؼþ¿â
icce.dwSize = sizeof(icce);
icce.dwICC = ICC_TAB_CLASSES;
InitCommonControlsEx(&icce);
@@ -75,27 +75,27 @@ void TabBar::init(HINSTANCE hInst, HWND parent, bool isVertical, bool isMultiLin
}
}
-
+//ÇåÀíÓëTabBarÏà¹ØµÄ×ÊÔ´
void TabBar::destroy()
{
if (_hFont)
{
::DeleteObject(_hFont);
_hFont = nullptr;
- }
+ }//ɾ³ý×ÖÌå¶ÔÏó
if (_hLargeFont)
{
::DeleteObject(_hLargeFont);
_hLargeFont = nullptr;
- }
+ }//ɾ³ý×ÖÌå´óС¸ñʽ
if (_hVerticalFont)
{
::DeleteObject(_hVerticalFont);
_hVerticalFont = nullptr;
}
-
+ //ɾ³ý´¹Ö±×ÖÌå¶ÔÏó
if (_hVerticalLargeFont)
{
::DeleteObject(_hVerticalLargeFont);
@@ -106,13 +106,13 @@ void TabBar::destroy()
_hSelf = nullptr;
}
-
+//ÔÚTabBarĩβ²åÈëÒ»¸öеÄÑ¡Ï£¬²¢ÉèÖÃÃû³Æ¡£Ê¹ÓÃTCITEM½á¹¹ÉèÖÃÑ¡ÏµÄÊôÐÔ£¬²¢·¢ËÍÏûÏ¢½«Ñ¡Ï²åÈëTabBarÖÐ
int TabBar::insertAtEnd(const TCHAR *subTabName)
{
TCITEM tie{};
tie.mask = TCIF_TEXT | TCIF_IMAGE;
int index = -1;
-
+ //Èç¹û´æÔÚͼÏñÁÐ±í£¬ÄÇôÐÂTabItemÓ¦¸Ã±»·ÅÖÃÔÚÁбíµÄ¿ªÊ¼¡£
if (_hasImgLst)
index = 0;
tie.iImage = index;
@@ -120,7 +120,7 @@ int TabBar::insertAtEnd(const TCHAR *subTabName)
return int(::SendMessage(_hSelf, TCM_INSERTITEM, _nbItem++, reinterpret_cast(&tie)));
}
-
+//»ñÈ¡µ±Ç°Ñ¡¶¨Ñ¡ÏµÄ±êÌâ¡£
void TabBar::getCurrentTitle(TCHAR *title, int titleLen)
{
TCITEM tci{};
@@ -130,7 +130,7 @@ void TabBar::getCurrentTitle(TCHAR *title, int titleLen)
::SendMessage(_hSelf, TCM_GETITEM, getCurrentTabIndex(), reinterpret_cast(&tci));
}
-
+//ΪTabBarÖеÄÑ¡ÏÉèÖÃ×ÖÌå¡£¸ù¾ÝÌṩµÄ²ÎÊý´´½¨ÐÂ×ÖÌ壬²¢·¢ËÍÏûϢΪTabBarÉèÖøÃ×ÖÌå
void TabBar::setFont(const TCHAR *fontName, int fontSize)
{
if (_hFont)
@@ -147,7 +147,7 @@ void TabBar::setFont(const TCHAR *fontName, int fontSize)
::SendMessage(_hSelf, WM_SETFONT, reinterpret_cast(_hFont), 0);
}
-
+//¼¤»îÖ¸¶¨Ë÷Òý´¦µÄÑ¡Ï¡£·¢ËÍÏûÏ¢ÒÔÈ·±£ÔÚTabBarÖ줻îÖ¸¶¨Ë÷Òý´¦µÄÑ¡Ï¡£
void TabBar::activateAt(int index) const
{
if (getCurrentTabIndex() != index)
@@ -163,14 +163,14 @@ void TabBar::activateAt(int index) const
}
}
-
+//ɾ³ýÖ¸¶¨Ë÷Òý´¦µÄÑ¡Ï
void TabBar::deletItemAt(size_t index)
{
if (index == _nbItem - 1)
{
//prevent invisible tabs. If last visible tab is removed, other tabs are put in view but not redrawn
//Therefore, scroll one tab to the left if only one tab visible
- if (_nbItem > 1)
+ if (_nbItem > 1)//ÖÁÉÙÁ½¸ö
{
RECT itemRect{};
::SendMessage(_hSelf, TCM_GETITEMRECT, index, reinterpret_cast(&itemRect));
@@ -182,7 +182,7 @@ void TabBar::deletItemAt(size_t index)
//There seems to be no negative effect on any internal state of the tab control or the up/down control
int wParam = MAKEWPARAM(SB_THUMBPOSITION, index - 1);
::SendMessage(_hSelf, WM_HSCROLL, wParam, 0);
-
+ //TabBar¿Ø¼þÏò×ó¹ö¶¯Ò»¸öTabÏîµÄλÖá£
wParam = MAKEWPARAM(SB_ENDSCROLL, index - 1);
::SendMessage(_hSelf, WM_HSCROLL, wParam, 0);
}
@@ -192,14 +192,14 @@ void TabBar::deletItemAt(size_t index)
_nbItem--;
}
-
+//ÉèÖÃTabBarÖеÄͼÏñÁÐ±í¡£Ê¹ÓÃTCM_SETIMAGELISTÏûÏ¢À´ÉèÖÃͼÏñÁÐ±í¡£
void TabBar::setImageList(HIMAGELIST himl)
{
_hasImgLst = true;
::SendMessage(_hSelf, TCM_SETIMAGELIST, 0, reinterpret_cast(himl));
}
-
+//µ÷ÕûTabBarµÄ´óСÒÔÊÊÓ¦¸ø¶¨µÄ¾ØÐÎÇøÓò¡£µ÷ÕûTabBarµÄÏÔʾ·½Ê½²¢¼ÆËãеĴóС£¬È»ºóµ÷ÕûÌṩµÄ¾ØÐÎÇøÓò¡£
void TabBar::reSizeTo(RECT & rc2Ajust)
{
RECT rowRect{};
@@ -208,6 +208,7 @@ void TabBar::reSizeTo(RECT & rc2Ajust)
// Important to do that!
// Otherwise, the window(s) it contains will take all the resouce of CPU
// We don't need to resize the contained windows if they are even invisible anyway
+ //µ÷ÓÃdisplay·½·¨£¬¸ù¾Ýµ÷Õû¾ØÐεÄÓұ߽çÊÇ·ñ´óÓÚ10À´¾ö¶¨ÊÇ·ñÏÔʾTabBarÖеĴ°¿Ú
display(rc2Ajust.right > 10);
RECT rc = rc2Ajust;
Window::reSizeTo(rc);
@@ -226,7 +227,7 @@ void TabBar::reSizeTo(RECT & rc2Ajust)
if (rowCount == 1)
{
style &= ~TCS_BUTTONS;
- }
+ }// Èç¹ûÓжàÐÐTabÏÖÁÉÙÁ½ÐУ©£¬ÔòÆôÓÃTabCtrlµÄ°´Å¥Ñùʽ£¬²¢¼ÆËã¼ä¾àµÄÖµ
else // (rowCount >= 2)
{
style |= TCS_BUTTONS;
@@ -249,15 +250,19 @@ void TabBar::reSizeTo(RECT & rc2Ajust)
}
}
-
+//Ïú»ÙTabBarPlus¼°Æä×ÊÔ´¡£
void TabBarPlus::destroy()
{
TabBar::destroy();
::DestroyWindow(_tooltips);
_tooltips = NULL;
}
-
-
+/*
+³õʼ»¯TabBarPlus¡£
+´´½¨TabControlºÍ¹¤¾ßÌáʾ´°¿Ú£¬²¢È·±£ËüÃÇÒѳɹ¦´´½¨¡£
+ÉèÖÃËùÐèµÄÑùʽ£¬²¢¸ù¾Ý²ÎÊý´´½¨ÏàÓ¦µÄ×ÖÌå¡£
+½«TabBarPlusÌí¼Óµ½¿Ø¼þÊý×éÖУ¬ÒÔ±ã¸ú×Ù¡£
+*/
void TabBarPlus::init(HINSTANCE hInst, HWND parent, bool isVertical, bool isMultiLine)
{
Window::init(hInst, parent);
@@ -290,7 +295,7 @@ void TabBarPlus::init(HINSTANCE hInst, HWND parent, bool isVertical, bool isMult
{
throw std::runtime_error("TabBarPlus::init : CreateWindowEx() function return null");
}
-
+ //¹¤¾ßÌáʾ
_tooltips = ::CreateWindowEx(
0,
TOOLTIPS_CLASS,
@@ -306,7 +311,7 @@ void TabBarPlus::init(HINSTANCE hInst, HWND parent, bool isVertical, bool isMult
{
throw std::runtime_error("TabBarPlus::init : tooltip CreateWindowEx() function return null");
}
-
+ //°µÉ«Ö÷Ìâ
NppDarkMode::setDarkTooltips(_tooltips, NppDarkMode::ToolTipsType::tooltip);
::SendMessage(_hSelf, TCM_SETTOOLTIPS, reinterpret_cast(_tooltips), 0);
@@ -317,12 +322,13 @@ void TabBarPlus::init(HINSTANCE hInst, HWND parent, bool isVertical, bool isMult
_ctrlID = _nbCtrl;
}
else
- {
+ {//²éÕÒµÚÒ»¸öΪ¿ÕµÄλÖ㬲¢ÉèÖÃ_ctrlIDΪ¸ÃλÖõÄÖµ
int i = 0;
bool found = false;
for ( ; i < nbCtrlMax && !found ; ++i)
if (!_hwndArray[i])
found = true;
+ //ÂúÁËδÕÒµ½£¬Ïú»Ù
if (!found)
{
_ctrlID = -1;
@@ -354,7 +360,7 @@ void TabBarPlus::init(HINSTANCE hInst, HWND parent, bool isVertical, bool isMult
_hVerticalLargeFont = CreateFontIndirect(&lfVer);
}
-
+//´¦ÀíÑ¡Ï¿Ø¼þµÄ×Ô¶¨ÒåÌî³ä¡£
void TabBarPlus::doOwnerDrawTab()
{
::SendMessage(_hwndArray[0], TCM_SETPADDING, 0, MAKELPARAM(6, 0));
@@ -363,6 +369,7 @@ void TabBarPlus::doOwnerDrawTab()
if (_hwndArray[i])
{
LONG_PTR style = ::GetWindowLongPtr(_hwndArray[i], GWL_STYLE);
+ //¼ì²éÊÇ·ñÐèÒª×Ô¶¨Òå
if (isOwnerDrawTab())
style |= TCS_OWNERDRAWFIXED;
else
@@ -378,7 +385,7 @@ void TabBarPlus::doOwnerDrawTab()
}
}
-
+//¸ù¾Ý¸ø¶¨µÄË÷ÒýΪѡÏÀ¸ÉèÖò»Í¬µÄÑÕÉ«(Èç»î¶¯Îı¾ÑÕÉ«¡¢±³¾°ÑÕÉ«µÈ)¡£ÔÚ¸üÐÂÑÕɫ֮ºó£¬Ëüµ÷ÓÃdoOwnerDrawTab()À´Ë¢ÐÂÏÔʾ¡£
void TabBarPlus::setColour(COLORREF colour2Set, tabColourIndex i)
{
switch (i)
@@ -404,7 +411,7 @@ void TabBarPlus::setColour(COLORREF colour2Set, tabColourIndex i)
doOwnerDrawTab();
}
-
+//ÉèÖô¹Ö±Ñ¡Ï
void TabBarPlus::doVertical()
{
for (int i = 0 ; i < _nbCtrl ; ++i)
@@ -414,7 +421,7 @@ void TabBarPlus::doVertical()
}
}
-
+//ÏÔʾ¶àÐÐÑ¡Ï
void TabBarPlus::doMultiLine()
{
for (int i = 0 ; i < _nbCtrl ; ++i)
@@ -423,7 +430,7 @@ void TabBarPlus::doMultiLine()
SendMessage(_hwndArray[i], WM_TABSETSTYLE, isMultiLine(), TCS_MULTILINE);
}
}
-
+//Ïò¸¸´°¿Ú·¢ËÍ֪ͨÏûÏ¢£¬ÆäÖаüº¬ÓйØÑ¡ÏË÷ÒýºÍÌØ¶¨Í¨Öª´úÂëµÄÐÅÏ¢¡£
void TabBarPlus::notify(int notifyCode, int tabIndex)
{
TBHDR nmhdr{};
@@ -433,7 +440,7 @@ void TabBarPlus::notify(int notifyCode, int tabIndex)
nmhdr._tabOrigin = tabIndex;
::SendMessage(_hParent, WM_NOTIFY, 0, reinterpret_cast(&nmhdr));
}
-
+//Æô¶¯¶ÔÑ¡ÏÀ¸¿Ø¼þÉϵÄÊó±êʼþµÄ¸ú×Ù£¬ÀýÈçµ±Êó±ê½øÈë»òÀ뿪¿Ø¼þÇøÓòʱ¡£
void TabBarPlus::trackMouseEvent(DWORD event2check)
{
TRACKMOUSEEVENT tme = {};
@@ -442,12 +449,13 @@ void TabBarPlus::trackMouseEvent(DWORD event2check)
tme.hwndTrack = _hSelf;
TrackMouseEvent(&tme);
}
-
+//ÏûÏ¢´¦Àí£¬´¦Àí´°¿ÚÏûÏ¢
LRESULT TabBarPlus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
{
switch (Message)
{
// Custom window message to change tab control style on the fly
+ //¸Ä±ä´°¿ÚÑùʽ
case WM_TABSETSTYLE:
{
LONG_PTR style = ::GetWindowLongPtr(hwnd, GWL_STYLE);
@@ -465,13 +473,13 @@ LRESULT TabBarPlus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPara
return TRUE;
}
-
+ //Éîɫģʽ
case NPPM_INTERNAL_REFRESHDARKMODE:
{
NppDarkMode::setDarkTooltips(hwnd, NppDarkMode::ToolTipsType::tabbar);
return TRUE;
}
-
+ //Êó±ê¹öÂÖ
case WM_MOUSEWHEEL:
{
// ..............................................................................
@@ -489,7 +497,7 @@ LRESULT TabBarPlus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPara
// CTRL + SHIFT + MOUSEWHEEL:
// will switch to the first/last tab
// ..............................................................................
-
+ //ÊÇ·ñ±»Í϶¯£¬ÈçÊÇ£¬»á½»»»µ±Ç°Êó±êËùÔÚλÖúÍÄ¿±êλÖõÄÊý¾Ý
if (_isDragging)
return TRUE;
@@ -581,7 +589,7 @@ LRESULT TabBarPlus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPara
}
return TRUE;
}
-
+ //×ó¼ü°´ÏÂ
case WM_LBUTTONDOWN :
{
if (::GetWindowLongPtr(_hSelf, GWL_STYLE) & TCS_BUTTONS)
@@ -592,7 +600,7 @@ LRESULT TabBarPlus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPara
setActiveTab(nTab);
}
}
-
+ //ÊÇ·ñ¹Ø±Õ
if (_drawTabCloseButton)
{
int xPos = LOWORD(lParam);
@@ -621,7 +629,7 @@ LRESULT TabBarPlus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPara
return TRUE;
}
-
+ //ÓÒ¼ü°´Ï£¬´¦ÀíÑ¡Ïî
case WM_RBUTTONDOWN : //rightclick selects tab aswell
{
// TCS_BUTTONS doesn't select the tab
@@ -637,7 +645,7 @@ LRESULT TabBarPlus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPara
::CallWindowProc(_tabBarDefaultProc, hwnd, WM_LBUTTONDOWN, wParam, lParam);
return TRUE;
}
-
+ //Êó±êÒÆ¶¯
case WM_MOUSEMOVE :
{
if (_mightBeDragging && !_isDragging)
@@ -670,7 +678,7 @@ LRESULT TabBarPlus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPara
POINT p{};
p.x = LOWORD(lParam);
p.y = HIWORD(lParam);
-
+ //ÊÇ·ñÍ϶¯tag£¬ÊÇ£¬¹â±êÒÆ¶¯£¬tabÊý¾Ý½»»»£¬·ñ£¬Åжϲ¢½øÐÐÏà¹Ø²Ù×÷
if (_isDragging)
{
exchangeItemData(p);
@@ -758,7 +766,7 @@ LRESULT TabBarPlus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPara
break;
}
-
+ //Êó±êÒÆ¿ª£¬ÖØ»æÊó±êÇøÓò£¬ÖØÖÃÏà¹Ø±äÁ¿
case WM_MOUSELEAVE:
{
if (_isCloseHover)
@@ -772,7 +780,7 @@ LRESULT TabBarPlus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPara
notify(TCN_MOUSELEAVING, _currentHoverTabItem);
break;
}
-
+ //ÊÍ·Å×ó¼ü£¬¸æÖª²Ù×÷½áÊø
case WM_LBUTTONUP :
{
_mightBeDragging = false;
@@ -820,7 +828,7 @@ LRESULT TabBarPlus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPara
break;
}
-
+ //ץȡÊó±êÊäÈëµÄ¸Ä±ä
case WM_CAPTURECHANGED :
{
if (_isDragging)
@@ -830,20 +838,20 @@ LRESULT TabBarPlus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPara
}
break;
}
-
+ //ÖØ»ætab
case WM_DRAWITEM :
{
drawItem((DRAWITEMSTRUCT *)lParam);
return TRUE;
}
-
+ //ÊÇ·ñ°´ÏÂcontrol¼ü
case WM_KEYDOWN :
{
if (wParam == VK_LCONTROL)
::SetCursor(::LoadCursor(_hInst, MAKEINTRESOURCE(IDC_DRAG_PLUS_TAB)));
return TRUE;
}
-
+ //Êó±êÖмüÊÍ·Å
case WM_MBUTTONUP:
{
int xPos = LOWORD(lParam);
@@ -852,7 +860,7 @@ LRESULT TabBarPlus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPara
notify(TCN_TABDELETE, currentTabOn);
return TRUE;
}
-
+ //Ë«»÷Êó±ê×ó¼ü
case WM_LBUTTONDBLCLK:
{
if (_isDbClk2Close)
@@ -864,7 +872,7 @@ LRESULT TabBarPlus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPara
}
return TRUE;
}
-
+ //Èç¹û³ÌÐòÕýÔÚʹÓðµºÚģʽ£¬½«»áÓÃÖ¸¶¨µÄ»Ë¢Ìî³äÕû¸öTabµÄ¿Í»§Çø£¬´úÌæÁËϵͳĬÈϵÄÏðÆ¤²Á±³¾°²Ù×÷¡£
case WM_ERASEBKGND:
{
if (!NppDarkMode::isEnabled())
@@ -878,7 +886,7 @@ LRESULT TabBarPlus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPara
return 1;
}
-
+ //ÔÚTab¿Ø¼þÐèÒªÖØ»æÊ±µ÷Óã¬ÕâÀï»á½øÐдóÁ¿µÄ»æÖƲÙ×÷£¬ÄÚÈݰüÀ¨Tab±¾ÉíºÍÿһ¸öTabµÄÎÄ×Ö¡¢¹Ø±Õ°´Å¥µÈÔªËØ¡£
case WM_PAINT:
{
if (!NppDarkMode::isEnabled())
@@ -1049,7 +1057,7 @@ LRESULT TabBarPlus::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPara
return ::CallWindowProc(_tabBarDefaultProc, hwnd, Message, wParam, lParam);
}
-
+//ʵÏÖÁËTabµÄ»æÖƹý³Ì£¬°üÀ¨¶ÔTab±³¾°ÑÕÉ«¡¢ÎÄ×ÖÑÕÉ«µÄµ÷Õû£¬Åжϲ¢´¦Àíµ±Ç°TabµÄ¼¤»î״̬£¬´¦ÀíTabµÄͼ±êºÍ±êÌâµÈ¡£
void TabBarPlus::drawItem(DRAWITEMSTRUCT *pDrawItemStruct, bool isDarkMode)
{
RECT rect = pDrawItemStruct->rcItem;
@@ -1371,7 +1379,7 @@ void TabBarPlus::drawItem(DRAWITEMSTRUCT *pDrawItemStruct, bool isDarkMode)
::RestoreDC(hDC, nSavedDC);
}
-
+//ÓÃÓڸıäÊó±ê¹â±êµÄÐÎ×´£¬¸ù¾ÝÓû§ÍÐ×§±êÇ©µÄ²»Í¬Î»Öã¨ÊÇ·ñÔÚͬһӦÓÃÖС¢ÊÇ·ñÔÚÒ»¸öÓÐЧµÄ·ÅÖÃλÖõȣ©±íÏÖΪ²»Í¬µÄ¹â±êÐÎ×´¡£
void TabBarPlus::draggingCursor(POINT screenPoint)
{
HWND hWin = ::WindowFromPoint(screenPoint);
@@ -1394,7 +1402,7 @@ void TabBarPlus::draggingCursor(POINT screenPoint)
::SetCursor(::LoadCursor(_hInst, MAKEINTRESOURCE(IDC_DRAG_OUT_TAB)));
}
}
-
+//¼òµ¥µØ°ÑÖ¸¶¨µÄ±êÇ©ÉèΪ»î¶¯×´Ì¬¡£
void TabBarPlus::setActiveTab(int tabIndex)
{
// TCM_SETCURFOCUS is busted on WINE/ReactOS for single line (non-TCS_BUTTONS) tabs...
@@ -1407,7 +1415,7 @@ void TabBarPlus::setActiveTab(int tabIndex)
::SendMessage(_hSelf, TCM_SETCURSEL, tabIndex, 0);
notify(TCN_SELCHANGE, tabIndex);
}
-
+//½»»»Á½¸öTabµÄÊý¾Ý£¬ÊµÏÖÁ½¸öTabµÄλÖý»»»¡£
void TabBarPlus::exchangeTabItemData(int oldTab, int newTab)
{
//1. shift their data, and insert the source
@@ -1449,7 +1457,7 @@ void TabBarPlus::exchangeTabItemData(int oldTab, int newTab)
//2. set to focus
setActiveTab(newTab);
}
-
+//ÔÚ½ÓÊÕµ½Êó±êÍÐ×§ÏûÏ¢µÄʱºò±»µ÷Óã¬ÓÃÓÚ¸÷¸ö±êÇ©µÄÅÅÐòºÍ½»»»Î»Öá£
void TabBarPlus::exchangeItemData(POINT point)
{
// Find the destination tab...
@@ -1486,7 +1494,7 @@ void TabBarPlus::exchangeItemData(POINT point)
}
-
+//ÓÃÓÚ´¦ÀíÓë¹Ø±Õ°´Å¥Ïà¹ØµÄ²Ù×÷£¬Èç»ñÈ¡¹Ø±Õ°´Å¥µÄ´óС¼°Î»Öã¬ÅжÏÊÇ·ñµã»÷µ½Á˹رհ´Å¥µÈ¡£
CloseButtonZone::CloseButtonZone()
{
// TODO: get width/height of close button dynamically