LangType Buffer::getLangFromExt(const char *ext) { NppParameters *pNppParam = NppParameters::getInstance(); int i = pNppParam->getNbLang(); i--; while (i >= 0) { Lang *l = pNppParam->getLangFromIndex(i--); const char *defList = l->getDefaultExtList(); const char *userList = NULL; LexerStylerArray &lsa = pNppParam->getLStylerArray(); const char *lName = l->getLangName(); LexerStyler *pLS = lsa.getLexerStylerByName(lName); if (pLS) userList = pLS->getLexerUserExt(); std::string list(""); if (defList) list += defList; if (userList) { list += " "; list += userList; } if (isInList(ext, list.c_str())) return l->getLangID(); } return L_TXT; }
INT_PTR CALLBACK WindowsDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_INITDIALOG : { changeDlgLang(); return MyBaseClass::run_dlgProc(message, wParam, lParam); } case WM_COMMAND : { switch (wParam) { case IDOK: { activateCurrent(); return TRUE; } case IDCANCEL: { ::GetWindowRect(_hSelf, &_lastKnownLocation); EndDialog(_hSelf, IDCANCEL); return TRUE; } case IDC_WINDOWS_SAVE: { doSave(); return TRUE; } case IDC_WINDOWS_CLOSE: { doClose(); return TRUE; } case IDC_WINDOWS_SORT: { doSortToTabs(); _isSorted = false; updateButtonState(); break; } } break; } case WM_DESTROY: { //destroy(); return TRUE; } case WM_NOTIFY : { if (wParam == IDC_WINDOWS_LIST) { NMHDR* pNMHDR = (NMHDR*)lParam; if (pNMHDR->code == LVN_GETDISPINFO) { NMLVDISPINFO *pLvdi = (NMLVDISPINFO *)pNMHDR; //if(pLvdi->item.mask & LVIF_IMAGE) // ; if(pLvdi->item.mask & LVIF_TEXT) { pLvdi->item.pszText[0] = 0; int index = pLvdi->item.iItem; if (index >= _pTab->nbItem() || index >= (int)_idxMap.size()) return FALSE; index = _idxMap[index]; //const Buffer& buffer = _pView->getBufferAt(index); BufferID bufID = _pTab->getBufferByIndex(index); Buffer * buf = MainFileManager->getBufferByID(bufID); if (pLvdi->item.iSubItem == 0) // file name { int len = pLvdi->item.cchTextMax; const TCHAR *fileName = buf->getFileName(); generic_strncpy(pLvdi->item.pszText, fileName, len-1); pLvdi->item.pszText[len-1] = 0; len = lstrlen(pLvdi->item.pszText); if (buf->isDirty()) { if (len < pLvdi->item.cchTextMax) { pLvdi->item.pszText[len++] = '*'; pLvdi->item.pszText[len] = 0; } } else if (buf->isReadOnly()) { len += lstrlen(readonlyString); if (len <= pLvdi->item.cchTextMax) lstrcat(pLvdi->item.pszText, readonlyString); } } else if (pLvdi->item.iSubItem == 1) // directory { const TCHAR *fullName = buf->getFullPathName(); const TCHAR *fileName = buf->getFileName(); int len = lstrlen(fullName)-lstrlen(fileName); if (!len) { len = 1; fullName = TEXT(""); } if (pLvdi->item.cchTextMax < len) len = pLvdi->item.cchTextMax; generic_strncpy(pLvdi->item.pszText, fullName, len-1); pLvdi->item.pszText[len-1] = 0; } else if (pLvdi->item.iSubItem == 2) // Type { int len = pLvdi->item.cchTextMax; NppParameters *pNppParameters = NppParameters::getInstance(); Lang *lang = pNppParameters->getLangFromID(buf->getLangType()); if (NULL != lang) { generic_strncpy(pLvdi->item.pszText, lang->getLangName(), len-1); } } } return TRUE; } else if (pNMHDR->code == LVN_COLUMNCLICK) // sort columns with stable sort { NMLISTVIEW *pNMLV = (NMLISTVIEW *)pNMHDR; if (pNMLV->iItem == -1) { bool reverse = false; int iColumn = pNMLV->iSubItem; if (_lastSort == iColumn) { reverse = true; _lastSort = -1; } else { _lastSort = iColumn; } int i; int n = _idxMap.size(); vector<int> sortMap; sortMap.resize(n); for (i=0; i<n; ++i) sortMap[_idxMap[i]] = ListView_GetItemState(_hList, i, LVIS_SELECTED); stable_sort(_idxMap.begin(), _idxMap.end(), BufferEquivalent(_pTab, iColumn, reverse)); for (i=0; i<n; ++i) ListView_SetItemState(_hList, i, sortMap[_idxMap[i]] ? LVIS_SELECTED : 0, LVIS_SELECTED); ::InvalidateRect(_hList, &_rc, FALSE); _isSorted = true; updateButtonState(); } return TRUE; } else if (pNMHDR->code == LVN_ITEMACTIVATE || pNMHDR->code == LVN_ITEMCHANGED || pNMHDR->code == LVN_ODSTATECHANGED) { updateButtonState(); return TRUE; } else if (pNMHDR->code == NM_DBLCLK) { ::PostMessage(_hSelf, WM_COMMAND, IDOK, 0); return TRUE; } else if (pNMHDR->code == LVN_KEYDOWN) { NMLVKEYDOWN *lvkd = (NMLVKEYDOWN *)pNMHDR; // Ctrl+A short ctrl = GetKeyState(VK_CONTROL); short alt = GetKeyState(VK_MENU); short shift = GetKeyState(VK_SHIFT); if (lvkd->wVKey == 0x41/*a*/ && ctrl<0 && alt>=0 && shift>=0) { for (int i=0, n=ListView_GetItemCount(_hList); i<n; ++i) ListView_SetItemState(_hList, i, LVIS_SELECTED, LVIS_SELECTED); } return TRUE; } } break; } } return MyBaseClass::run_dlgProc(message, wParam, lParam); }
int Notepad_plus::setFileOpenSaveDlgFilters(FileDialog & fDlg, int langType) { NppParameters *pNppParam = NppParameters::getInstance(); NppGUI & nppGUI = (NppGUI & )pNppParam->getNppGUI(); int i = 0; Lang *l = NppParameters::getInstance()->getLangFromIndex(i++); int ltIndex = 0; bool ltFound = false; while (l) { LangType lid = l->getLangID(); bool inExcludedList = false; for (size_t j = 0 ; j < nppGUI._excludedLangList.size() ; j++) { if (lid == nppGUI._excludedLangList[j]._langType) { inExcludedList = true; break; } } if (!inExcludedList) { const TCHAR *defList = l->getDefaultExtList(); const TCHAR *userList = NULL; LexerStylerArray &lsa = (NppParameters::getInstance())->getLStylerArray(); const TCHAR *lName = l->getLangName(); LexerStyler *pLS = lsa.getLexerStylerByName(lName); if (pLS) userList = pLS->getLexerUserExt(); generic_string list(TEXT("")); if (defList) list += defList; if (userList) { list += TEXT(" "); list += userList; } generic_string stringFilters = exts2Filters(list); const TCHAR *filters = stringFilters.c_str(); if (filters[0]) { fDlg.setExtsFilter(getLangDesc(lid, true).c_str(), filters); // // Get index of lang type to find // if (langType != -1 && !ltFound) { ltFound = langType == lid; } if (langType != -1 && !ltFound) { ltIndex++; } } } l = (NppParameters::getInstance())->getLangFromIndex(i++); } if (!ltFound) return -1; return ltIndex; }