// Set full path file name in buffer object, // and determinate its language by its extension. // If the ext is not in the list, the defaultLang passed as argument will be set. void Buffer::setFileName(const TCHAR *fn, LangType defaultLang) { NppParameters *pNppParamInst = NppParameters::getInstance(); if (_fullPathName == fn) { updateTimeStamp(); doNotify(BufferChangeTimestamp); return; } _fullPathName = fn; _fileName = PathFindFileName(_fullPathName.c_str()); // for _lang LangType newLang = defaultLang; TCHAR *ext = PathFindExtension(_fullPathName.c_str()); if (*ext == '.') // extension found { ext += 1; // Define User Lang firstly const TCHAR* langName = pNppParamInst->getUserDefinedLangNameFromExt(ext, _fileName); if (langName) { newLang = L_USER; _userLangExt = langName; } else // if it's not user lang, then check if it's supported lang { _userLangExt.clear(); newLang = pNppParamInst->getLangFromExt(ext); } } if (newLang == defaultLang || newLang == L_TEXT) //language can probably be refined { if ((!generic_stricmp(_fileName, TEXT("makefile"))) || (!generic_stricmp(_fileName, TEXT("GNUmakefile")))) newLang = L_MAKEFILE; else if (!generic_stricmp(_fileName, TEXT("CmakeLists.txt"))) newLang = L_CMAKE; else if ((!generic_stricmp(_fileName, TEXT("SConstruct"))) || (!generic_stricmp(_fileName, TEXT("SConscript"))) || (!generic_stricmp(_fileName, TEXT("wscript")))) newLang = L_PYTHON; else if (!generic_stricmp(_fileName, TEXT("Rakefile"))) newLang = L_RUBY; } updateTimeStamp(); if (newLang != _lang || _lang == L_USER) { _lang = newLang; doNotify(BufferChangeFilename | BufferChangeLanguage | BufferChangeTimestamp); return; } doNotify(BufferChangeFilename | BufferChangeTimestamp); }
bool Buffer::checkFileState() { //returns true if the status has been changed (it can change into DOC_REGULAR too). false otherwise struct _stat buf; if (_currentStatus == DOC_UNNAMED) //unsaved document cannot change by environment return false; if (_currentStatus != DOC_DELETED && !PathFileExists(_fullPathName)) //document has been deleted { _currentStatus = DOC_DELETED; _isFileReadOnly = false; _isDirty = true; //dirty sicne no match with filesystem _timeStamp = 0; doNotify(BufferChangeStatus | BufferChangeReadonly | BufferChangeTimestamp); return true; } if (_currentStatus == DOC_DELETED && PathFileExists(_fullPathName)) { //document has returned from its grave if (!_stat(_fullPathName, &buf)) { _isFileReadOnly = (bool)(!(buf.st_mode & _S_IWRITE)); _currentStatus = DOC_MODIFIED; _timeStamp = buf.st_mtime; doNotify(BufferChangeStatus | BufferChangeReadonly | BufferChangeTimestamp); return true; } } if (!_stat(_fullPathName, &buf)) { int mask = 0; //status always 'changes', even if from modified to modified bool isFileReadOnly = (bool)(!(buf.st_mode & _S_IWRITE)); if (isFileReadOnly != _isFileReadOnly) { _isFileReadOnly = isFileReadOnly; mask |= BufferChangeReadonly; } if (_timeStamp != buf.st_mtime) { _timeStamp = buf.st_mtime; mask |= BufferChangeTimestamp; _currentStatus = DOC_MODIFIED; mask |= BufferChangeStatus; //status always 'changes', even if from modified to modified } if (mask != 0) { doNotify(mask); return true; } return false; } return false; }
// Set full path file name in buffer object, // and determinate its language by its extension. // If the ext is not in the list, the defaultLang passed as argument will be set. void Buffer::setFileName(const char *fn, LangType defaultLang) { NppParameters *pNppParamInst = NppParameters::getInstance(); if (!strcmpi(fn, _fullPathName)) { updateTimeStamp(); doNotify(BufferChangeTimestamp); return; } strcpy(_fullPathName, fn); _fileName = PathFindFileName(_fullPathName); // for _lang LangType newLang = defaultLang; char *ext = PathFindExtension(_fullPathName); if (*ext == '.') { //extension found ext += 1; // Define User Lang firstly const char *langName = NULL; if ((langName = pNppParamInst->getUserDefinedLangNameFromExt(ext))) { newLang = L_USER; strcpy(_userLangExt, langName); } else // if it's not user lang, then check if it's supported lang { _userLangExt[0] = '\0'; newLang = getLangFromExt(ext); } } if (newLang == defaultLang || newLang == L_TXT) //language can probably be refined { if ((!_stricmp(_fileName, "makefile")) || (!_stricmp(_fileName, "GNUmakefile"))) newLang = L_MAKEFILE; else if (!_stricmp(_fileName, "CmakeLists.txt")) newLang = L_CMAKE; } updateTimeStamp(); if (newLang != _lang || _lang == L_USER) { _lang = newLang; doNotify(BufferChangeFilename | BufferChangeLanguage | BufferChangeTimestamp); return; } doNotify(BufferChangeFilename | BufferChangeTimestamp); }
void Buffer::determinateFormat(char *data) { _format = WIN_FORMAT; size_t len = strlen(data); for (size_t i = 0 ; i < len ; i++) { if (data[i] == CR) { if (data[i+1] == LF) { _format = WIN_FORMAT; break; } else { _format = MAC_FORMAT; break; } } if (data[i] == LF) { _format = UNIX_FORMAT; break; } } doNotify(BufferChangeFormat); return; };
void Buffer::updateTimeStamp() { struct _stat buf; time_t timeStamp = (generic_stat(_fullPathName.c_str(), &buf)==0)?buf.st_mtime:0; if (timeStamp != _timeStamp) { _timeStamp = timeStamp; doNotify(BufferChangeTimestamp); } };
void Buffer::reload() { struct _stat buf; if (PathFileExists(_fullPathName.c_str()) && not generic_stat(_fullPathName.c_str(), &buf)) { _timeStamp = buf.st_mtime; _currentStatus = DOC_NEEDRELOAD; doNotify(BufferChangeTimestamp | BufferChangeStatus); } }
void Buffer::setLangType(LangType lang, const TCHAR* userLangName) { if (lang == _lang && lang != L_USER) return; _lang = lang; if (_lang == L_USER) _userLangExt = userLangName; _needLexer = true; //change of lang means lexern needs updating doNotify(BufferChangeLanguage|BufferChangeLexing); }
bool Notifies::doNotify(const QString &title, const QString &message, const int ms, const int iconId) { QPixmap pixmap; if (iconId > 0) { const QIcon icon = QApplication::style()->standardIcon((QStyle::StandardPixmap)((int)QStyle::SP_MessageBoxInformation + iconId - 1)); const QList<QSize> iconSizes = icon.availableSizes(); if (!iconSizes.isEmpty()) pixmap = icon.pixmap(iconSizes.last()); } return doNotify(title, message, ms, pixmap, iconId); }
LRESULT CUIDialog::doPrivateMessage1( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { LRESULT lResult; if (doPrivateForward(hWnd, message, wParam, lParam, lResult)) { return lResult; } else { return doNotify((int)(short)LOWORD(wParam), (LPNMHDR)lParam); } }
void notify(MemoryBuffer &mb) { bool aborted; mb.read(aborted); doNotify(aborted); }
void Buffer::setDeferredReload() // triggers a reload on the next Document access { _isDirty = false; //when reloading, just set to false, since it sohuld be marked as clean _needReloading = true; doNotify(BufferChangeDirty); }
bool Buffer::checkFileState() //eturns true if the status has been changed (it can change into DOC_REGULAR too). false otherwise { if (_currentStatus == DOC_UNNAMED) //unsaved document cannot change by environment return false; struct _stat buf; bool isWow64Off = false; NppParameters *pNppParam = NppParameters::getInstance(); if (!PathFileExists(_fullPathName.c_str())) { pNppParam->safeWow64EnableWow64FsRedirection(FALSE); isWow64Off = true; } bool isOK = false; if (_currentStatus != DOC_DELETED && !PathFileExists(_fullPathName.c_str())) //document has been deleted { _currentStatus = DOC_DELETED; _isFileReadOnly = false; _isDirty = true; //dirty sicne no match with filesystem _timeStamp = 0; doNotify(BufferChangeStatus | BufferChangeReadonly | BufferChangeTimestamp); isOK = true; } else if (_currentStatus == DOC_DELETED && PathFileExists(_fullPathName.c_str())) { //document has returned from its grave if (!generic_stat(_fullPathName.c_str(), &buf)) { _isFileReadOnly = (bool)(!(buf.st_mode & _S_IWRITE)); _currentStatus = DOC_MODIFIED; _timeStamp = buf.st_mtime; doNotify(BufferChangeStatus | BufferChangeReadonly | BufferChangeTimestamp); isOK = true; } } else if (!generic_stat(_fullPathName.c_str(), &buf)) { int mask = 0; //status always 'changes', even if from modified to modified bool isFileReadOnly = (bool)(!(buf.st_mode & _S_IWRITE)); if (isFileReadOnly != _isFileReadOnly) { _isFileReadOnly = isFileReadOnly; mask |= BufferChangeReadonly; } if (_timeStamp != buf.st_mtime) { _timeStamp = buf.st_mtime; mask |= BufferChangeTimestamp; _currentStatus = DOC_MODIFIED; mask |= BufferChangeStatus; //status always 'changes', even if from modified to modified } if (mask != 0) { doNotify(mask); isOK = true; } isOK = false; } if (isWow64Off) { pNppParam->safeWow64EnableWow64FsRedirection(TRUE); //isWow64Off = false; } return isOK; }
void Buffer::setUnicodeMode(UniMode mode) { _unicodeMode = mode; doNotify(BufferChangeUnicode | BufferChangeDirty); }
void Buffer::setEncoding(int encoding) { _encoding = encoding; doNotify(BufferChangeUnicode | BufferChangeDirty); }
void Buffer::setDirty(bool dirty) { _isDirty = dirty; doNotify(BufferChangeDirty); }