📄 notepad_plus.cpp.svn-base
字号:
case L_DIFF :
fn = "diff"; break;
/*
case L_PROPS :
fn = "Properties file"; break;
*/
case L_PS :
fn = "postscript"; break;
case L_RUBY :
fn = "ruby"; break;
case L_SMALLTALK :
fn = "smalltalk"; break;
case L_VHDL :
fn = "vhdl"; break;
case L_KIX :
fn = "kix"; break;
case L_AU3 :
fn = "autoit"; break;
case L_CAML :
fn = "caml"; break;
case L_ADA :
fn = "ada"; break;
case L_VERILOG :
fn = "verilog"; break;
case L_MATLAB :
fn = "matlab"; break;
case L_HASKELL :
fn = "haskell"; break;
case L_INNO :
fn = "inno"; break;
case L_CMAKE :
fn = "cmake"; break;
case L_USER :
{
Buffer & currentBuf = _pEditView->getCurrentBuffer();
if (currentBuf.isUserDefineLangExt())
{
fn = currentBuf.getUserDefineLangName();
}
break;
}
default:
fn = "text";
}
}
BOOL Notepad_plus::notify(SCNotification *notification)
{
switch (notification->nmhdr.code)
{
case SCN_MODIFIED:
{
if ((notification->modificationType & SC_MOD_DELETETEXT) || (notification->modificationType & SC_MOD_INSERTTEXT))
{
_linkTriggered = true;
_isDocModifing = true;
::InvalidateRect(_pEditView->getHSelf(), NULL, TRUE);
}
}
break;
case SCN_DOUBLECLICK :
{
if (_isHotspotDblClicked)
{
int pos = _pEditView->execute(SCI_GETCURRENTPOS);
_pEditView->execute(SCI_SETCURRENTPOS, pos);
_pEditView->execute(SCI_SETANCHOR, pos);
_isHotspotDblClicked = false;
}
}
//
break;
case SCN_SAVEPOINTREACHED:
_pEditView->setCurrentDocState(false);
_pDocTab->updateCurrentTabItem();
checkDocState();
synchronise();
break;
case SCN_SAVEPOINTLEFT:
_pEditView->setCurrentDocState(true);
_pDocTab->updateCurrentTabItem();
checkDocState();
synchronise();
break;
case SCN_MODIFYATTEMPTRO :
// on fout rien
break;
case SCN_KEY:
break;
case TCN_TABDROPPEDOUTSIDE:
case TCN_TABDROPPED:
{
TabBarPlus *sender = reinterpret_cast<TabBarPlus *>(notification->nmhdr.idFrom);
int destIndex = sender->getTabDraggedIndex();
int scrIndex = sender->getSrcTabIndex();
// if the dragNdrop tab is not the current view tab,
// we have to set it to the current view tab
if (notification->nmhdr.hwndFrom != _pDocTab->getHSelf())
switchEditViewTo((getCurrentView() == MAIN_VIEW)?SUB_VIEW:MAIN_VIEW);
_pEditView->sortBuffer(destIndex, scrIndex);
_pEditView->setCurrentIndex(destIndex);
if (notification->nmhdr.code == TCN_TABDROPPEDOUTSIDE)
{
POINT p = sender->getDraggingPoint();
//It's the coordinate of screen, so we can call
//"WindowFromPoint" function without converting the point
HWND hWin = ::WindowFromPoint(p);
if (hWin == _pEditView->getHSelf()) // In the same view group
{
if (!_tabPopupDropMenu.isCreated())
{
char goToView[64] = "Go to another View";
char cloneToView[64] = "Clone to another View";
const char *pGoToView = goToView;
const char *pCloneToView = cloneToView;
if (_nativeLang)
{
TiXmlNode *tabBarMenu = _nativeLang->FirstChild("Menu");
tabBarMenu = tabBarMenu->FirstChild("TabBar");
if (tabBarMenu)
{
for (TiXmlNode *childNode = tabBarMenu->FirstChildElement("Item");
childNode ;
childNode = childNode->NextSibling("Item") )
{
TiXmlElement *element = childNode->ToElement();
int ordre;
element->Attribute("order", &ordre);
if (ordre == 5)
pGoToView = element->Attribute("name");
else if (ordre == 6)
pCloneToView = element->Attribute("name");
}
}
if (!pGoToView || !pGoToView[0])
pGoToView = goToView;
if (!pCloneToView || !pCloneToView[0])
pCloneToView = cloneToView;
}
vector<MenuItemUnit> itemUnitArray;
itemUnitArray.push_back(MenuItemUnit(IDC_DOC_GOTO_ANOTHER_VIEW, pGoToView));
itemUnitArray.push_back(MenuItemUnit(IDC_DOC_CLONE_TO_ANOTHER_VIEW, pCloneToView));
_tabPopupDropMenu.create(_hSelf, itemUnitArray);
}
_tabPopupDropMenu.display(p);
}
else if ((hWin == getNonCurrentDocTab()->getHSelf()) ||
(hWin == getNonCurrentEditView()->getHSelf())) // In the another view group
{
if (::GetKeyState(VK_LCONTROL) & 0x80000000)
docGotoAnotherEditView(MODE_CLONE);
else
docGotoAnotherEditView(MODE_TRANSFER);
}
//else on fout rien!!! // It's non view group
}
break;
}
case TCN_TABDELETE:
{
if (notification->nmhdr.hwndFrom != _pDocTab->getHSelf())
switchEditViewTo((getCurrentView() == MAIN_VIEW)?SUB_VIEW:MAIN_VIEW);
fileClose();
break;
}
case TCN_SELCHANGE:
{
char fullPath[MAX_PATH];
if (notification->nmhdr.hwndFrom == _mainDocTab.getHSelf())
{
strcpy(fullPath, _mainDocTab.clickedUpdate());
switchEditViewTo(MAIN_VIEW);
}
else if (notification->nmhdr.hwndFrom == _subDocTab.getHSelf())
{
strcpy(fullPath, _subDocTab.clickedUpdate());
switchEditViewTo(SUB_VIEW);
}
PathRemoveFileSpec(fullPath);
setWorkingDir(fullPath);
//_pEditView->execute(SCI_SETLEXER, SCLEX_CONTAINER)
_linkTriggered = true;
break;
}
case NM_CLICK :
{
if (notification->nmhdr.hwndFrom == _statusBar.getHSelf())
{
LPNMMOUSE lpnm = (LPNMMOUSE)notification;
if (lpnm->dwItemSpec == DWORD(STATUSBAR_TYPING_MODE))
{
bool isOverTypeMode = (_pEditView->execute(SCI_GETOVERTYPE) != 0);
_pEditView->execute(SCI_SETOVERTYPE, !isOverTypeMode);
_statusBar.setText((_pEditView->execute(SCI_GETOVERTYPE))?"OVR":"INS", STATUSBAR_TYPING_MODE);
}
}
break;
}
case NM_DBLCLK :
{
if (notification->nmhdr.hwndFrom == _statusBar.getHSelf())
{
LPNMMOUSE lpnm = (LPNMMOUSE)notification;
if (lpnm->dwItemSpec == DWORD(STATUSBAR_CUR_POS))
{
bool isFirstTime = !_goToLineDlg.isCreated();
_goToLineDlg.doDialog(_isRTL);
if (isFirstTime)
changeDlgLang(_goToLineDlg.getHSelf(), "GoToLine");
}
}
break;
}
case NM_RCLICK :
{
if (notification->nmhdr.hwndFrom == _mainDocTab.getHSelf())
{
switchEditViewTo(MAIN_VIEW);
}
else if (notification->nmhdr.hwndFrom == _subDocTab.getHSelf())
{
switchEditViewTo(SUB_VIEW);
}
else // From tool bar or Status Bar
return TRUE;
//break;
POINT p, clientPoint;
::GetCursorPos(&p);
clientPoint.x = p.x;
clientPoint.y = p.y;
if (!_tabPopupMenu.isCreated())
{
char close[32] = "Close me";
char closeBut[32] = "Close all but me";
char save[32] = "Save me";
char saveAs[32] = "Save me As...";
char print[32] = "Print me";
char readOnly[32] = "Read only";
char clearReadOnly[32] = "Clear read only flag";
char goToView[32] = "Go to another View";
char cloneToView[32] = "Clone to another View";
char cilpFullPath[32] = "Full file path to Clipboard";
char cilpFileName[32] = "File name to Clipboard";
char cilpCurrentDir[32] = "Current dir path to Clipboard";
const char *pClose = close;
const char *pCloseBut = closeBut;
const char *pSave = save;
const char *pSaveAs = saveAs;
const char *pPrint = print;
const char *pReadOnly = readOnly;
const char *pClearReadOnly = clearReadOnly;
const char *pGoToView = goToView;
const char *pCloneToView = cloneToView;
const char *pCilpFullPath = cilpFullPath;
const char *pCilpFileName = cilpFileName;
const char *pCilpCurrentDir = cilpCurrentDir;
if (_nativeLang)
{
TiXmlNode *tabBarMenu = _nativeLang->FirstChild("Menu");
if (tabBarMenu)
{
tabBarMenu = tabBarMenu->FirstChild("TabBar");
if (tabBarMenu)
{
for (TiXmlNode *childNode = tabBarMenu->FirstChildElement("Item");
childNode ;
childNode = childNode->NextSibling("Item") )
{
TiXmlElement *element = childNode->ToElement();
int ordre;
element->Attribute("order", &ordre);
switch (ordre)
{
case 0 :
pClose = element->Attribute("name"); break;
case 1 :
pCloseBut = element->Attribute("name"); break;
case 2 :
pSave = element->Attribute("name"); break;
case 3 :
pSaveAs = element->Attribute("name"); break;
case 4 :
pPrint = element->Attribute("name"); break;
case 5 :
pGoToView = element->Attribute("name"); break;
case 6 :
pCloneToView = element->Attribute("name"); break;
}
}
}
}
if (!pClose || !pClose[0])
pClose = close;
if (!pCloseBut || !pCloseBut[0])
pCloseBut = cloneToView;
if (!pSave || !pSave[0])
pSave = save;
if (!pSaveAs || !pSaveAs[0])
pSaveAs = saveAs;
if (!pPrint || !pPrint[0])
pPrint = print;
if (!pGoToView || !pGoToView[0])
pGoToView = goToView;
if (!pCloneToView || !pCloneToView[0])
pCloneToView = cloneToView;
}
vector<MenuItemUnit> itemUnitArray;
itemUnitArray.push_back(MenuItemUnit(IDM_FILE_CLOSE, pClose));
itemUnitArray.push_back(MenuItemUnit(IDM_FILE_CLOSEALL_BUT_CURRENT, pCloseBut));
itemUnitArray.push_back(MenuItemUnit(IDM_FILE_SAVE, pSave));
itemUnitArray.push_back(MenuItemUnit(IDM_FILE_SAVEAS, pSaveAs));
itemUnitArray.push_back(MenuItemUnit(IDM_FILE_PRINT, pPrint));
itemUnitArray.push_back(MenuItemUnit(0, NULL));
itemUnitArray.push_back(MenuItemUnit(IDM_EDIT_SETREADONLY, pReadOnly));
itemUnitArray.push_back(MenuItemUnit(IDM_EDIT_CLEARREADONLY, pClearReadOnly));
itemUnitArray.push_back(MenuItemUnit(0, NULL));
itemUnitArray.push_back(MenuItemUnit(IDM_EDIT_FULLPATHTOCLIP, pCilpFullPath));
itemUnitArray.push_back(MenuItemUnit(IDM_EDIT_FILENAMETOCLIP, pCilpFileName));
itemUnitArray.push_back(MenuItemUnit(IDM_EDIT_CURRENTDIRTOCLIP, pCilpCurrentDir));
itemUnitArray.push_back(MenuItemUnit(0, NULL));
itemUnitArray.push_back(MenuItemUnit(IDC_DOC_GOTO_ANOTHER_VIEW, pGoToView));
itemUnitArray.push_back(MenuItemUnit(IDC_DOC_CLONE_TO_ANOTHER_VIEW, pCloneToView));
_tabPopupMenu.create(_hSelf, itemUnitArray);
}
::ScreenToClient(_pDocTab->getHSelf(), &clientPoint);
::SendMessage(_pDocTab->getHSelf(), WM_LBUTTONDOWN, 2, MAKELONG(clientPoint.x, clientPoint.y));
bool isEnable = ((::GetMenuState(::GetMenu(_hSelf), IDM_FILE_SAVE, MF_BYCOMMAND)&MF_DISABLED) == 0);
_tabPopupMenu.enableItem(IDM_FILE_SAVE, isEnable);
bool isUserReadOnly = _pEditView->isCurrentBufUserReadOnly();
_tabPopupMenu.checkItem(IDM_EDIT_SETREADONLY, isUserReadOnly);
bool isSysReadOnly = _pEditView->isCurrentBufSysReadOnly();
_tabPopupMenu.enableItem(IDM_EDIT_SETREADONLY, !isSysReadOnly);
_tabPopupMenu.enableItem(IDM_EDIT_CLEARREADONLY, isSysReadOnly);
_tabPopupMenu.display(p);
return TRUE;
}
case SCN_MARGINCLICK:
{
if (notification->nmhdr.hwndFrom == _mainEditView.getHSelf())
switchEditViewTo(MAIN_VIEW);
else if (notification->nmhdr.hwndFrom == _subEditView.getHSelf())
switchEditViewTo(SUB_VIEW);
if (notification->margin == ScintillaEditView::_SC_MARGE_FOLDER)
{
_pEditView->marginClick(notification->position, notification->modifiers);
}
else if (notification->margin == ScintillaEditView::_SC_MARGE_SYBOLE)
{
int lineClick = int(_pEditView->execute(SCI_LINEFROMPOSITION, notification->position));
bookmarkToggle(lineClick);
}
break;
}
case SCN_CHARADDED:
charAdded(static_cast<char>(notification->ch));
break;
case SCN_UPDATEUI:
braceMatch();
updateStatusBar();
break;
case TTN_GETDISPINFO:
{
LPTOOLTIPTEXT lpttt;
lpttt = (LPTOOLTIPTEXT)notification;
lpttt->hinst = _hInst;
// Specify the resource identifier of the descriptive
// text for the given button.
int idButton = int(lpttt->hdr.idFrom);
static string tip;
getNameStrFromCmd(idButton, tip);
lpttt->lpszText = (LPSTR)tip.c_str();
}
break;
case SCN_ZOOM:
_pEditView->setLineNumberWidth(_pEditView->hasMarginShowed(ScintillaEditView::_SC_MARGE_LINENUMBER));
break;
case SCN_MACRORECORD:
_macro.push_back(recordedMacroStep(notification->message, notification->wParam, notification->lParam));
break;
/*
case SCN_STYLENEEDED:
{
}
break;
*/
case SCN_PAINTED:
{
if (_syncInfo.doSync())
doSynScorll(HWND(notification->nmhdr.hwndFrom));
if (_linkTriggered)
{
int urlAction = (NppParameters::getInstance())->getNppGUI()._styleURL;
if ((urlAction == 1) || (urlAction == 2))
addHotSpot(_isDocModifing);
_linkTriggered = false;
_isDocModifing = false;
}
break;
}
case SCN_HOTSPOTDOUBLECLICK :
{
_pEditView->execute(SCI_SETWORDCHARS, 0, (LPARAM)"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-+.:?&@=/%#");
int pos = _pEditView->execute(SCI_GETCURRENTPOS);
int startPos = static_cast<int>(_pEditView->execute(SCI_WORDSTARTPOSITION, pos, false));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -