[NEW_FEATURE] New feature: auto-complete matched delimiters (in progress).
git-svn-id: svn://svn.tuxfamily.org/svnroot/notepadplus/repository/trunk@1109 f5eea248-9336-0410-98b8-ebc06183d4e3
This commit is contained in:
parent
9863633656
commit
86fd35de42
|
@ -4808,6 +4808,15 @@ bool NppParameters::writeGUIParams()
|
|||
|
||||
TiXmlElement hist_element(TEXT(""));
|
||||
hist_element.SetValue(TEXT("UserDefinePair"));
|
||||
|
||||
// remove all old sub-nodes
|
||||
for (TiXmlNode *subChildNode = childNode->FirstChildElement(TEXT("UserDefinePair"));
|
||||
subChildNode;
|
||||
subChildNode = subChildNode->NextSibling(TEXT("UserDefinePair")) )
|
||||
{
|
||||
childNode->RemoveChild(subChildNode);
|
||||
}
|
||||
|
||||
for (size_t i = 0, nb = _nppGUI._matchedPairConf._matchedPairs.size(); i < nb; ++i)
|
||||
{
|
||||
int open = _nppGUI._matchedPairConf._matchedPairs[i].first;
|
||||
|
@ -5019,6 +5028,32 @@ bool NppParameters::writeGUIParams()
|
|||
autocExist = true;
|
||||
}
|
||||
|
||||
if (!autocInsetExist)
|
||||
{
|
||||
TiXmlElement *GUIConfigElement = (GUIRoot->InsertEndChild(TiXmlElement(TEXT("GUIConfig"))))->ToElement();
|
||||
GUIConfigElement->SetAttribute(TEXT("name"), TEXT("auto-insert"));
|
||||
|
||||
GUIConfigElement->SetAttribute(TEXT("parentheses"), _nppGUI._matchedPairConf._doParentheses?TEXT("yes"):TEXT("no"));
|
||||
GUIConfigElement->SetAttribute(TEXT("brackets"), _nppGUI._matchedPairConf._doBrackets?TEXT("yes"):TEXT("no"));
|
||||
GUIConfigElement->SetAttribute(TEXT("curlyBrackets"), _nppGUI._matchedPairConf._doCurlyBrackets?TEXT("yes"):TEXT("no"));
|
||||
GUIConfigElement->SetAttribute(TEXT("quotes"), _nppGUI._matchedPairConf._doQuotes?TEXT("yes"):TEXT("no"));
|
||||
GUIConfigElement->SetAttribute(TEXT("doubleQuotes"), _nppGUI._matchedPairConf._doDoubleQuotes?TEXT("yes"):TEXT("no"));
|
||||
GUIConfigElement->SetAttribute(TEXT("htmlXmlTag"), _nppGUI._matchedPairConf._doHtmlXmlTag?TEXT("yes"):TEXT("no"));
|
||||
|
||||
TiXmlElement hist_element(TEXT(""));
|
||||
hist_element.SetValue(TEXT("UserDefinePair"));
|
||||
for (size_t i = 0, nb = _nppGUI._matchedPairConf._matchedPairs.size(); i < nb; ++i)
|
||||
{
|
||||
int open = _nppGUI._matchedPairConf._matchedPairs[i].first;
|
||||
int close = _nppGUI._matchedPairConf._matchedPairs[i].second;
|
||||
|
||||
(hist_element.ToElement())->SetAttribute(TEXT("open"), open);
|
||||
(hist_element.ToElement())->SetAttribute(TEXT("close"), close);
|
||||
GUIConfigElement->InsertEndChild(hist_element);
|
||||
}
|
||||
autocInsetExist = true;
|
||||
}
|
||||
|
||||
if (dockingParamNode)
|
||||
{
|
||||
// Rase tout
|
||||
|
|
|
@ -210,7 +210,9 @@ void AutoCompletion::insertMatchedChars(int character, const MatchedPairConf & m
|
|||
{
|
||||
if (int(matchedPairs[i].first) == character)
|
||||
{
|
||||
_pEditView->execute(SCI_INSERTTEXT, caretPos, (LPARAM)matchedPairs[i].second);
|
||||
char userMatchedChar[2] = {'\0', '\0'};
|
||||
userMatchedChar[0] = matchedPairs[i].second;
|
||||
_pEditView->execute(SCI_INSERTTEXT, caretPos, (LPARAM)userMatchedChar);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2293,6 +2293,50 @@ BOOL CALLBACK AutoCompletionDlg::run_dlgProc(UINT Message, WPARAM wParam, LPARAM
|
|||
::EnableWindow(::GetDlgItem(_hSelf, IDD_AUTOC_STATIC_CHAR), FALSE);
|
||||
::EnableWindow(::GetDlgItem(_hSelf, IDD_AUTOC_STATIC_NOTE), FALSE);
|
||||
}
|
||||
|
||||
::SendDlgItemMessage(_hSelf, IDD_AUTOCPARENTHESES_CHECK, BM_SETCHECK, nppGUI._matchedPairConf._doParentheses?BST_CHECKED:BST_UNCHECKED, 0);
|
||||
::SendDlgItemMessage(_hSelf, IDD_AUTOCBRACKET_CHECK, BM_SETCHECK, nppGUI._matchedPairConf._doBrackets?BST_CHECKED:BST_UNCHECKED, 0);
|
||||
::SendDlgItemMessage(_hSelf, IDD_AUTOCCURLYBRACKET_CHECK, BM_SETCHECK, nppGUI._matchedPairConf._doCurlyBrackets?BST_CHECKED:BST_UNCHECKED, 0);
|
||||
::SendDlgItemMessage(_hSelf, IDD_AUTOC_QUOTESCHECK, BM_SETCHECK, nppGUI._matchedPairConf._doQuotes?BST_CHECKED:BST_UNCHECKED, 0);
|
||||
::SendDlgItemMessage(_hSelf, IDD_AUTOC_DOUBLEQUOTESCHECK, BM_SETCHECK, nppGUI._matchedPairConf._doDoubleQuotes?BST_CHECKED:BST_UNCHECKED, 0);
|
||||
::SendDlgItemMessage(_hSelf, IDD_AUTOCTAG_CHECK, BM_SETCHECK, nppGUI._matchedPairConf._doHtmlXmlTag?BST_CHECKED:BST_UNCHECKED, 0);
|
||||
|
||||
::SendDlgItemMessage(_hSelf, IDC_MACHEDPAIROPEN_EDIT1, EM_LIMITTEXT, 1, 0);
|
||||
::SendDlgItemMessage(_hSelf, IDC_MACHEDPAIRCLOSE_EDIT1, EM_LIMITTEXT, 1, 0);
|
||||
::SendDlgItemMessage(_hSelf, IDC_MACHEDPAIROPEN_EDIT2, EM_LIMITTEXT, 1, 0);
|
||||
::SendDlgItemMessage(_hSelf, IDC_MACHEDPAIRCLOSE_EDIT2, EM_LIMITTEXT, 1, 0);
|
||||
::SendDlgItemMessage(_hSelf, IDC_MACHEDPAIROPEN_EDIT3, EM_LIMITTEXT, 1, 0);
|
||||
::SendDlgItemMessage(_hSelf, IDC_MACHEDPAIRCLOSE_EDIT3, EM_LIMITTEXT, 1, 0);
|
||||
|
||||
size_t nbMatchedPair = nppGUI._matchedPairConf._matchedPairs.size();
|
||||
if (nbMatchedPair > 3)
|
||||
nbMatchedPair = 3;
|
||||
for (size_t i = 0; i < nbMatchedPair; ++i)
|
||||
{
|
||||
char openChar[2];
|
||||
openChar[0] = nppGUI._matchedPairConf._matchedPairs[i].first;
|
||||
openChar[1] = '\0';
|
||||
char closeChar[2];
|
||||
closeChar[0] = nppGUI._matchedPairConf._matchedPairs[i].second;
|
||||
closeChar[1] = '\0';
|
||||
|
||||
if (i == 0)
|
||||
{
|
||||
::SendDlgItemMessage(_hSelf, IDC_MACHEDPAIROPEN_EDIT1, WM_SETTEXT, 0, (LPARAM)openChar);
|
||||
::SendDlgItemMessage(_hSelf, IDC_MACHEDPAIRCLOSE_EDIT1, WM_SETTEXT, 0, (LPARAM)closeChar);
|
||||
}
|
||||
else if (i == 1)
|
||||
{
|
||||
::SendDlgItemMessage(_hSelf, IDC_MACHEDPAIROPEN_EDIT2, WM_SETTEXT, 0, (LPARAM)openChar);
|
||||
::SendDlgItemMessage(_hSelf, IDC_MACHEDPAIRCLOSE_EDIT2, WM_SETTEXT, 0, (LPARAM)closeChar);
|
||||
}
|
||||
if (i == 2)
|
||||
{
|
||||
::SendDlgItemMessage(_hSelf, IDC_MACHEDPAIROPEN_EDIT3, WM_SETTEXT, 0, (LPARAM)openChar);
|
||||
::SendDlgItemMessage(_hSelf, IDC_MACHEDPAIRCLOSE_EDIT3, WM_SETTEXT, 0, (LPARAM)closeChar);
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
case WM_COMMAND :
|
||||
|
@ -2301,11 +2345,33 @@ BOOL CALLBACK AutoCompletionDlg::run_dlgProc(UINT Message, WPARAM wParam, LPARAM
|
|||
{
|
||||
switch (LOWORD(wParam))
|
||||
{
|
||||
case IDC_BACKUPDIR_EDIT:
|
||||
case IDC_MACHEDPAIROPEN_EDIT1 :
|
||||
case IDC_MACHEDPAIRCLOSE_EDIT1:
|
||||
case IDC_MACHEDPAIROPEN_EDIT2 :
|
||||
case IDC_MACHEDPAIRCLOSE_EDIT2:
|
||||
case IDC_MACHEDPAIROPEN_EDIT3 :
|
||||
case IDC_MACHEDPAIRCLOSE_EDIT3:
|
||||
{
|
||||
TCHAR inputDir[MAX_PATH];
|
||||
::SendDlgItemMessage(_hSelf, IDC_BACKUPDIR_EDIT, WM_GETTEXT, MAX_PATH, (LPARAM)inputDir);
|
||||
nppGUI._backupDir = inputDir;
|
||||
nppGUI._matchedPairConf._matchedPairs.clear();
|
||||
|
||||
char opener[2] = {'\0', '\0'};
|
||||
char closer[2] = {'\0', '\0'};
|
||||
|
||||
::SendDlgItemMessage(_hSelf, IDC_MACHEDPAIROPEN_EDIT1, WM_GETTEXT, MAX_PATH, (LPARAM)opener);
|
||||
::SendDlgItemMessage(_hSelf, IDC_MACHEDPAIRCLOSE_EDIT1, WM_GETTEXT, MAX_PATH, (LPARAM)closer);
|
||||
if (opener[0] != '\0' && closer[0] != '\0')
|
||||
nppGUI._matchedPairConf._matchedPairs.push_back(pair<char, char>(opener[0], closer[0]));
|
||||
|
||||
::SendDlgItemMessage(_hSelf, IDC_MACHEDPAIROPEN_EDIT2, WM_GETTEXT, MAX_PATH, (LPARAM)opener);
|
||||
::SendDlgItemMessage(_hSelf, IDC_MACHEDPAIRCLOSE_EDIT2, WM_GETTEXT, MAX_PATH, (LPARAM)closer);
|
||||
if (opener[0] != '\0' && closer[0] != '\0')
|
||||
nppGUI._matchedPairConf._matchedPairs.push_back(pair<char, char>(opener[0], closer[0]));
|
||||
|
||||
::SendDlgItemMessage(_hSelf, IDC_MACHEDPAIROPEN_EDIT3, WM_GETTEXT, MAX_PATH, (LPARAM)opener);
|
||||
::SendDlgItemMessage(_hSelf, IDC_MACHEDPAIRCLOSE_EDIT3, WM_GETTEXT, MAX_PATH, (LPARAM)closer);
|
||||
if (opener[0] != '\0' && closer[0] != '\0')
|
||||
nppGUI._matchedPairConf._matchedPairs.push_back(pair<char, char>(opener[0], closer[0]));
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue