[NEW_FEATURE] Automatic Backup System (in progress).

git-svn-id: svn://svn.tuxfamily.org/svnroot/notepadplus/repository/trunk@1220 f5eea248-9336-0410-98b8-ebc06183d4e3
This commit is contained in:
Don Ho 2014-04-13 01:31:02 +00:00
parent 412b0c54e4
commit 4c49b023ca
13 changed files with 135 additions and 84 deletions

View File

@ -3209,8 +3209,8 @@ bool Notepad_plus::activateBuffer(BufferID id, int whichOne)
{ {
//scnN.nmhdr.code = NPPN_DOCSWITCHINGOFF; //superseeded by NPPN_BUFFERACTIVATED //scnN.nmhdr.code = NPPN_DOCSWITCHINGOFF; //superseeded by NPPN_BUFFERACTIVATED
bool isBackupMode = NppParameters::getInstance()->getNppGUI()._isBackupMode; bool isSnapshotMode = NppParameters::getInstance()->getNppGUI()._isSnapshotMode;
if (isBackupMode) if (isSnapshotMode)
{ {
// Before switching off, synchronize backup file // Before switching off, synchronize backup file
MainFileManager->backupCurrentBuffer(); MainFileManager->backupCurrentBuffer();
@ -4474,9 +4474,9 @@ void Notepad_plus::notifyBufferChanged(Buffer * buffer, int mask)
if (doCloseOrNot(buffer->getFullPathName()) == IDNO) if (doCloseOrNot(buffer->getFullPathName()) == IDNO)
{ {
//close in both views, doing current view last since that has to remain opened //close in both views, doing current view last since that has to remain opened
bool isBackupMode = nppGUI._isBackupMode; bool isSnapshotMode = nppGUI._isSnapshotMode;
doClose(buffer->getID(), otherView(), isBackupMode); doClose(buffer->getID(), otherView(), isSnapshotMode);
doClose(buffer->getID(), currentView(), isBackupMode); doClose(buffer->getID(), currentView(), isSnapshotMode);
} }
break; break;
} }
@ -5755,17 +5755,25 @@ void Notepad_plus::showQuoteFromIndex(int index) const
void Notepad_plus::launchDocumentBackupTask() void Notepad_plus::launchDocumentBackupTask()
{ {
size_t timer = NppParameters::getInstance()->getNppGUI()._backupTiming; HANDLE hThread = ::CreateThread(NULL, 0, backupDocument, NULL, 0, NULL);
HANDLE hThread = ::CreateThread(NULL, 0, backupDocument, &timer, 0, NULL);
::CloseHandle(hThread); ::CloseHandle(hThread);
} }
DWORD WINAPI Notepad_plus::backupDocument(void *param) DWORD WINAPI Notepad_plus::backupDocument(void * /*param*/)
{ {
size_t *timer = (size_t *)param; bool isSnapshotMode = true;
while (*timer) while (isSnapshotMode)
{ {
::Sleep(*timer); size_t timer = NppParameters::getInstance()->getNppGUI()._snapshotBackupTiming;
if (timer < 1000)
timer = 1000;
::Sleep(timer);
isSnapshotMode = NppParameters::getInstance()->getNppGUI()._isSnapshotMode;
if (!isSnapshotMode)
break;
MainFileManager->backupCurrentBuffer(); MainFileManager->backupCurrentBuffer();
} }
return TRUE; return TRUE;

View File

@ -235,7 +235,7 @@ public:
}; };
bool fileClose(BufferID id = BUFFER_INVALID, int curView = -1); //use curView to override view to close from bool fileClose(BufferID id = BUFFER_INVALID, int curView = -1); //use curView to override view to close from
bool fileCloseAll(bool doDeleteBackup, bool isBackupMode = false); bool fileCloseAll(bool doDeleteBackup, bool isSnapshotMode = false);
bool fileCloseAllButCurrent(); bool fileCloseAllButCurrent();
bool fileCloseAllGiven(const std::vector<int> &krvecBufferIndexes); bool fileCloseAllGiven(const std::vector<int> &krvecBufferIndexes);
bool fileCloseAllToLeft(); bool fileCloseAllToLeft();
@ -290,11 +290,11 @@ public:
void loadLastSession(){ void loadLastSession(){
Session lastSession = (NppParameters::getInstance())->getSession(); Session lastSession = (NppParameters::getInstance())->getSession();
bool isBackupMode = NppParameters::getInstance()->getNppGUI()._isBackupMode; bool isSnapshotMode = NppParameters::getInstance()->getNppGUI()._isSnapshotMode;
loadSession(lastSession, isBackupMode); loadSession(lastSession, isSnapshotMode);
}; };
bool loadSession(Session & session, bool isBackupMode = false); bool loadSession(Session & session, bool isSnapshotMode = false);
void notifyBufferChanged(Buffer * buffer, int mask); void notifyBufferChanged(Buffer * buffer, int mask);
bool findInFiles(); bool findInFiles();

View File

@ -223,8 +223,8 @@ void Notepad_plus_Window::init(HINSTANCE hInst, HWND parent, const TCHAR *cmdLin
::MessageBoxA(NULL, dest, "", MB_OK); ::MessageBoxA(NULL, dest, "", MB_OK);
} }
bool isBackupMode = nppGUI._isBackupMode; bool isSnapshotMode = nppGUI._isSnapshotMode;
if (isBackupMode) if (isSnapshotMode)
{ {
_notepad_plus_plus_core.checkModifiedDocument(); _notepad_plus_plus_core.checkModifiedDocument();
// Lauch backup task // Lauch backup task

View File

@ -1398,8 +1398,8 @@ LRESULT Notepad_plus::process(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPa
if (_pTrayIco) if (_pTrayIco)
_pTrayIco->doTrayIcon(REMOVE); _pTrayIco->doTrayIcon(REMOVE);
bool isBackupMode = pNppParam->getNppGUI()._isBackupMode; bool isSnapshotMode = pNppParam->getNppGUI()._isSnapshotMode;
if (isBackupMode) if (isSnapshotMode)
MainFileManager->backupCurrentBuffer(); MainFileManager->backupCurrentBuffer();
const NppGUI & nppgui = pNppParam->getNppGUI(); const NppGUI & nppgui = pNppParam->getNppGUI();
@ -1411,7 +1411,7 @@ LRESULT Notepad_plus::process(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lPa
//Causing them to show on restart even though they are loaded by session //Causing them to show on restart even though they are loaded by session
_lastRecentFileList.setLock(true); //only lock when the session is remembered _lastRecentFileList.setLock(true); //only lock when the session is remembered
} }
bool allClosed = fileCloseAll(false, isBackupMode); //try closing files before doing anything else bool allClosed = fileCloseAll(false, isSnapshotMode); //try closing files before doing anything else
if (nppgui._rememberLastSession) if (nppgui._rememberLastSession)
{ {

View File

@ -118,8 +118,8 @@ void Notepad_plus::command(int id)
case IDM_FILE_CLOSEALL: case IDM_FILE_CLOSEALL:
{ {
bool isBackupMode = NppParameters::getInstance()->getNppGUI()._isBackupMode; bool isSnapshotMode = NppParameters::getInstance()->getNppGUI()._isSnapshotMode;
fileCloseAll(isBackupMode, false); fileCloseAll(isSnapshotMode, false);
checkDocState(); checkDocState();
break; break;
} }

View File

@ -43,8 +43,8 @@ BufferID Notepad_plus::doOpen(const TCHAR *fileName, bool isRecursive, bool isRe
::GetFullPathName(fileName, MAX_PATH, longFileName, NULL); ::GetFullPathName(fileName, MAX_PATH, longFileName, NULL);
::GetLongPathName(longFileName, longFileName, MAX_PATH); ::GetLongPathName(longFileName, longFileName, MAX_PATH);
bool isBackupMode = backupFileName != NULL && PathFileExists(backupFileName); bool isSnapshotMode = backupFileName != NULL && PathFileExists(backupFileName);
if (isBackupMode && !PathFileExists(longFileName)) // UNTITLED if (isSnapshotMode && !PathFileExists(longFileName)) // UNTITLED
{ {
lstrcpy(longFileName, fileName); lstrcpy(longFileName, fileName);
} }
@ -98,7 +98,7 @@ BufferID Notepad_plus::doOpen(const TCHAR *fileName, bool isRecursive, bool isRe
bool globbing = wcsrchr(longFileName, TCHAR('*')) || wcsrchr(longFileName, TCHAR('?')); bool globbing = wcsrchr(longFileName, TCHAR('*')) || wcsrchr(longFileName, TCHAR('?'));
if (!isBackupMode) // if not backup mode, or backupfile path is invalid if (!isSnapshotMode) // if not backup mode, or backupfile path is invalid
{ {
if (!PathFileExists(longFileName) && !globbing) if (!PathFileExists(longFileName) && !globbing)
{ {
@ -151,7 +151,7 @@ BufferID Notepad_plus::doOpen(const TCHAR *fileName, bool isRecursive, bool isRe
} }
BufferID buffer; BufferID buffer;
if (isBackupMode) if (isSnapshotMode)
{ {
buffer = MainFileManager->loadFile(longFileName, NULL, encoding, backupFileName, fileNameTimestamp); buffer = MainFileManager->loadFile(longFileName, NULL, encoding, backupFileName, fileNameTimestamp);
} }
@ -597,12 +597,12 @@ bool Notepad_plus::fileClose(BufferID id, int curView)
viewToClose = curView; viewToClose = curView;
//first check amount of documents, we dont want the view to hide if we closed a secondary doc with primary being empty //first check amount of documents, we dont want the view to hide if we closed a secondary doc with primary being empty
//int nrDocs = _pDocTab->nbItem(); //int nrDocs = _pDocTab->nbItem();
bool isBackupMode = NppParameters::getInstance()->getNppGUI()._isBackupMode; bool isSnapshotMode = NppParameters::getInstance()->getNppGUI()._isSnapshotMode;
doClose(bufferID, viewToClose, isBackupMode); doClose(bufferID, viewToClose, isSnapshotMode);
return true; return true;
} }
bool Notepad_plus::fileCloseAll(bool doDeleteBackup, bool isBackupMode) bool Notepad_plus::fileCloseAll(bool doDeleteBackup, bool isSnapshotMode)
{ {
//closes all documents, makes the current view the only one visible //closes all documents, makes the current view the only one visible
@ -617,7 +617,7 @@ bool Notepad_plus::fileCloseAll(bool doDeleteBackup, bool isBackupMode)
} }
else if (buf->isDirty()) else if (buf->isDirty())
{ {
if (isBackupMode) if (isSnapshotMode)
{ {
} }
@ -650,7 +650,7 @@ bool Notepad_plus::fileCloseAll(bool doDeleteBackup, bool isBackupMode)
} }
else if (buf->isDirty()) else if (buf->isDirty())
{ {
if (isBackupMode) if (isSnapshotMode)
{ {
} }
@ -733,9 +733,9 @@ bool Notepad_plus::fileCloseAllGiven(const std::vector<int> &krvecBufferIndexes)
} }
// Now we close. // Now we close.
bool isBackupMode = NppParameters::getInstance()->getNppGUI()._isBackupMode; bool isSnapshotMode = NppParameters::getInstance()->getNppGUI()._isSnapshotMode;
for(std::vector<int>::const_iterator itIndex = krvecBufferIndexes.begin(); itIndex != itIndexesEnd; ++itIndex) { for(std::vector<int>::const_iterator itIndex = krvecBufferIndexes.begin(); itIndex != itIndexesEnd; ++itIndex) {
doClose(_pDocTab->getBufferByIndex(*itIndex), currentView(), isBackupMode); doClose(_pDocTab->getBufferByIndex(*itIndex), currentView(), isSnapshotMode);
} }
return true; return true;
@ -826,7 +826,7 @@ bool Notepad_plus::fileCloseAllButCurrent()
} }
} }
bool isBackupMode = NppParameters::getInstance()->getNppGUI()._isBackupMode; bool isSnapshotMode = NppParameters::getInstance()->getNppGUI()._isSnapshotMode;
//Then start closing, inactive view first so the active is left open //Then start closing, inactive view first so the active is left open
if (bothActive()) if (bothActive())
{ //first close all docs in non-current view, which gets closed automatically { //first close all docs in non-current view, which gets closed automatically
@ -834,7 +834,7 @@ bool Notepad_plus::fileCloseAllButCurrent()
activateBuffer(_pNonDocTab->getBufferByIndex(0), otherView()); activateBuffer(_pNonDocTab->getBufferByIndex(0), otherView());
for(int i = _pNonDocTab->nbItem() - 1; i >= 0; i--) { //close all from right to left for(int i = _pNonDocTab->nbItem() - 1; i >= 0; i--) { //close all from right to left
doClose(_pNonDocTab->getBufferByIndex(i), otherView(), isBackupMode); doClose(_pNonDocTab->getBufferByIndex(i), otherView(), isSnapshotMode);
} }
//hideView(otherView()); //hideView(otherView());
} }
@ -844,7 +844,7 @@ bool Notepad_plus::fileCloseAllButCurrent()
if (i == active) { //dont close active index if (i == active) { //dont close active index
continue; continue;
} }
doClose(_pDocTab->getBufferByIndex(i), currentView(), isBackupMode); doClose(_pDocTab->getBufferByIndex(i), currentView(), isSnapshotMode);
} }
return true; return true;
} }
@ -1059,9 +1059,9 @@ bool Notepad_plus::fileDelete(BufferID id)
MB_OK); MB_OK);
return false; return false;
} }
bool isBackupMode = NppParameters::getInstance()->getNppGUI()._isBackupMode; bool isSnapshotMode = NppParameters::getInstance()->getNppGUI()._isSnapshotMode;
doClose(bufferID, MAIN_VIEW, isBackupMode); doClose(bufferID, MAIN_VIEW, isSnapshotMode);
doClose(bufferID, SUB_VIEW, isBackupMode); doClose(bufferID, SUB_VIEW, isSnapshotMode);
return true; return true;
} }
return false; return false;
@ -1332,7 +1332,7 @@ bool Notepad_plus::loadSession(Session & session)
} }
*/ */
bool Notepad_plus::loadSession(Session & session, bool isBackupMode) bool Notepad_plus::loadSession(Session & session, bool isSnapshotMode)
{ {
NppParameters *pNppParam = NppParameters::getInstance(); NppParameters *pNppParam = NppParameters::getInstance();
bool allSessionFilesLoaded = true; bool allSessionFilesLoaded = true;
@ -1362,12 +1362,12 @@ bool Notepad_plus::loadSession(Session & session, bool isBackupMode)
} }
if (PathFileExists(pFn)) if (PathFileExists(pFn))
{ {
if (isBackupMode && session._mainViewFiles[i]._backupFilePath != TEXT("")) if (isSnapshotMode && session._mainViewFiles[i]._backupFilePath != TEXT(""))
lastOpened = doOpen(pFn, false, false, session._mainViewFiles[i]._encoding, session._mainViewFiles[i]._backupFilePath.c_str(), session._mainViewFiles[i]._originalFileLastModifTimestamp); lastOpened = doOpen(pFn, false, false, session._mainViewFiles[i]._encoding, session._mainViewFiles[i]._backupFilePath.c_str(), session._mainViewFiles[i]._originalFileLastModifTimestamp);
else else
lastOpened = doOpen(pFn, false, false, session._mainViewFiles[i]._encoding); lastOpened = doOpen(pFn, false, false, session._mainViewFiles[i]._encoding);
} }
else if (isBackupMode && PathFileExists(session._mainViewFiles[i]._backupFilePath.c_str())) else if (isSnapshotMode && PathFileExists(session._mainViewFiles[i]._backupFilePath.c_str()))
{ {
lastOpened = doOpen(pFn, false, false, session._mainViewFiles[i]._encoding, session._mainViewFiles[i]._backupFilePath.c_str(), session._mainViewFiles[i]._originalFileLastModifTimestamp); lastOpened = doOpen(pFn, false, false, session._mainViewFiles[i]._encoding, session._mainViewFiles[i]._backupFilePath.c_str(), session._mainViewFiles[i]._originalFileLastModifTimestamp);
} }
@ -1409,7 +1409,7 @@ bool Notepad_plus::loadSession(Session & session, bool isBackupMode)
if (session._mainViewFiles[i]._encoding != -1) if (session._mainViewFiles[i]._encoding != -1)
buf->setEncoding(session._mainViewFiles[i]._encoding); buf->setEncoding(session._mainViewFiles[i]._encoding);
if (isBackupMode && session._mainViewFiles[i]._backupFilePath != TEXT("") && PathFileExists(session._mainViewFiles[i]._backupFilePath.c_str())) if (isSnapshotMode && session._mainViewFiles[i]._backupFilePath != TEXT("") && PathFileExists(session._mainViewFiles[i]._backupFilePath.c_str()))
buf->setDirty(true); buf->setDirty(true);
//Force in the document so we can add the markers //Force in the document so we can add the markers
@ -1456,7 +1456,7 @@ bool Notepad_plus::loadSession(Session & session, bool isBackupMode)
} }
if (PathFileExists(pFn)) if (PathFileExists(pFn))
{ {
if (isBackupMode && session._subViewFiles[i]._backupFilePath != TEXT("")) if (isSnapshotMode && session._subViewFiles[i]._backupFilePath != TEXT(""))
lastOpened = doOpen(pFn, false, false, session._subViewFiles[i]._encoding, session._subViewFiles[i]._backupFilePath.c_str(), session._subViewFiles[i]._originalFileLastModifTimestamp); lastOpened = doOpen(pFn, false, false, session._subViewFiles[i]._encoding, session._subViewFiles[i]._backupFilePath.c_str(), session._subViewFiles[i]._originalFileLastModifTimestamp);
else else
lastOpened = doOpen(pFn, false, false, session._subViewFiles[i]._encoding); lastOpened = doOpen(pFn, false, false, session._subViewFiles[i]._encoding);
@ -1466,7 +1466,7 @@ bool Notepad_plus::loadSession(Session & session, bool isBackupMode)
loadBufferIntoView(lastOpened, SUB_VIEW); loadBufferIntoView(lastOpened, SUB_VIEW);
} }
} }
else if (isBackupMode && PathFileExists(session._subViewFiles[i]._backupFilePath.c_str())) else if (isSnapshotMode && PathFileExists(session._subViewFiles[i]._backupFilePath.c_str()))
{ {
lastOpened = doOpen(pFn, false, false, session._subViewFiles[i]._encoding, session._subViewFiles[i]._backupFilePath.c_str(), session._subViewFiles[i]._originalFileLastModifTimestamp); lastOpened = doOpen(pFn, false, false, session._subViewFiles[i]._encoding, session._subViewFiles[i]._backupFilePath.c_str(), session._subViewFiles[i]._originalFileLastModifTimestamp);
} }
@ -1516,7 +1516,7 @@ bool Notepad_plus::loadSession(Session & session, bool isBackupMode)
buf->setLangType(typeToSet, pLn); buf->setLangType(typeToSet, pLn);
buf->setEncoding(session._subViewFiles[k]._encoding); buf->setEncoding(session._subViewFiles[k]._encoding);
if (isBackupMode && session._subViewFiles[i]._backupFilePath != TEXT("") && PathFileExists(session._subViewFiles[i]._backupFilePath.c_str())) if (isSnapshotMode && session._subViewFiles[i]._backupFilePath != TEXT("") && PathFileExists(session._subViewFiles[i]._backupFilePath.c_str()))
buf->setDirty(true); buf->setDirty(true);
//Force in the document so we can add the markers //Force in the document so we can add the markers

View File

@ -112,8 +112,8 @@ BOOL Notepad_plus::notify(SCNotification *notification)
if (notification->nmhdr.code == SCN_SAVEPOINTREACHED) if (notification->nmhdr.code == SCN_SAVEPOINTREACHED)
{ {
bool isBackupMode = NppParameters::getInstance()->getNppGUI()._isBackupMode; bool isSnapshotMode = NppParameters::getInstance()->getNppGUI()._isSnapshotMode;
if (isBackupMode) if (isSnapshotMode)
{ {
MainFileManager->backupCurrentBuffer(); MainFileManager->backupCurrentBuffer();
} }
@ -276,8 +276,8 @@ BOOL Notepad_plus::notify(SCNotification *notification)
} }
else if (notification->nmhdr.hwndFrom == _mainDocTab.getHSelf() && _activeView == SUB_VIEW) else if (notification->nmhdr.hwndFrom == _mainDocTab.getHSelf() && _activeView == SUB_VIEW)
{ {
bool isBackupMode = NppParameters::getInstance()->getNppGUI()._isBackupMode; bool isSnapshotMode = NppParameters::getInstance()->getNppGUI()._isSnapshotMode;
if (isBackupMode) if (isSnapshotMode)
{ {
// Before switching off, synchronize backup file // Before switching off, synchronize backup file
MainFileManager->backupCurrentBuffer(); MainFileManager->backupCurrentBuffer();
@ -287,8 +287,8 @@ BOOL Notepad_plus::notify(SCNotification *notification)
} }
else if (notification->nmhdr.hwndFrom == _subDocTab.getHSelf() && _activeView == MAIN_VIEW) else if (notification->nmhdr.hwndFrom == _subDocTab.getHSelf() && _activeView == MAIN_VIEW)
{ {
bool isBackupMode = NppParameters::getInstance()->getNppGUI()._isBackupMode; bool isSnapshotMode = NppParameters::getInstance()->getNppGUI()._isSnapshotMode;
if (isBackupMode) if (isSnapshotMode)
{ {
// Before switching off, synchronize backup file // Before switching off, synchronize backup file
MainFileManager->backupCurrentBuffer(); MainFileManager->backupCurrentBuffer();

View File

@ -3860,12 +3860,13 @@ void NppParameters::feedGUIParameters(TiXmlNode *node)
if (pDir) if (pDir)
_nppGUI._backupDir = pDir; _nppGUI._backupDir = pDir;
const TCHAR *isBackupMode = element->Attribute(TEXT("isBackupMode")); const TCHAR *isSnapshotModeStr = element->Attribute(TEXT("isSnapshotMode"));
_nppGUI._isBackupMode = (isBackupMode && !lstrcmp(isBackupMode, TEXT("yes"))); if (isSnapshotModeStr && !lstrcmp(isSnapshotModeStr, TEXT("no")))
_nppGUI._isSnapshotMode = false;
int timing; int timing;
if (element->Attribute(TEXT("backupTiming"), &timing)) if (element->Attribute(TEXT("snapshotBackupTiming"), &timing))
_nppGUI._backupTiming = timing; _nppGUI._snapshotBackupTiming = timing;
} }
else if (!lstrcmp(nm, TEXT("DockingManager"))) else if (!lstrcmp(nm, TEXT("DockingManager")))
@ -4719,8 +4720,8 @@ bool NppParameters::writeGUIParams()
element->SetAttribute(TEXT("useCustumDir"), _nppGUI._useDir?TEXT("yes"):TEXT("no")); element->SetAttribute(TEXT("useCustumDir"), _nppGUI._useDir?TEXT("yes"):TEXT("no"));
element->SetAttribute(TEXT("dir"), _nppGUI._backupDir.c_str()); element->SetAttribute(TEXT("dir"), _nppGUI._backupDir.c_str());
element->SetAttribute(TEXT("isBackupMode"), _nppGUI._isBackupMode?TEXT("yes"):TEXT("no")); element->SetAttribute(TEXT("isSnapshotMode"), _nppGUI._isSnapshotMode?TEXT("yes"):TEXT("no"));
element->SetAttribute(TEXT("backupTiming"), _nppGUI._backupTiming); element->SetAttribute(TEXT("snapshotBackupTiming"), _nppGUI._snapshotBackupTiming);
backExist = true; backExist = true;
} }
else if (!lstrcmp(nm, TEXT("MRU"))) else if (!lstrcmp(nm, TEXT("MRU")))
@ -4997,8 +4998,8 @@ bool NppParameters::writeGUIParams()
GUIConfigElement->SetAttribute(TEXT("useCustumDir"), _nppGUI._useDir?TEXT("yes"):TEXT("no")); GUIConfigElement->SetAttribute(TEXT("useCustumDir"), _nppGUI._useDir?TEXT("yes"):TEXT("no"));
GUIConfigElement->SetAttribute(TEXT("dir"), _nppGUI._backupDir.c_str()); GUIConfigElement->SetAttribute(TEXT("dir"), _nppGUI._backupDir.c_str());
GUIConfigElement->SetAttribute(TEXT("isBackupMode"), _nppGUI._isBackupMode?TEXT("yes"):TEXT("no")); GUIConfigElement->SetAttribute(TEXT("isSnapshotMode"), _nppGUI._isSnapshotMode?TEXT("yes"):TEXT("no"));
GUIConfigElement->SetAttribute(TEXT("backupTiming"), _nppGUI._backupTiming); GUIConfigElement->SetAttribute(TEXT("snapshotBackupTiming"), _nppGUI._snapshotBackupTiming);
} }
if (!doTaskListExist) if (!doTaskListExist)

View File

@ -714,7 +714,7 @@ struct NppGUI
_autocStatus(autoc_both), _autocFromLen(1), _funcParams(false), _definedSessionExt(TEXT("")),\ _autocStatus(autoc_both), _autocFromLen(1), _funcParams(false), _definedSessionExt(TEXT("")),\
_doesExistUpdater(false), _caretBlinkRate(250), _caretWidth(1), _enableMultiSelection(false), _shortTitlebar(false), _themeName(TEXT("")), _isLangMenuCompact(false),\ _doesExistUpdater(false), _caretBlinkRate(250), _caretWidth(1), _enableMultiSelection(false), _shortTitlebar(false), _themeName(TEXT("")), _isLangMenuCompact(false),\
_smartHiliteCaseSensitive(false), _leftmostDelimiter('('), _rightmostDelimiter(')'), _delimiterSelectionOnEntireDocument(false), _multiInstSetting(monoInst),\ _smartHiliteCaseSensitive(false), _leftmostDelimiter('('), _rightmostDelimiter(')'), _delimiterSelectionOnEntireDocument(false), _multiInstSetting(monoInst),\
_fileSwitcherWithoutExtColumn(false), _isBackupMode(false), _backupTiming(7000) { _fileSwitcherWithoutExtColumn(false), _isSnapshotMode(true), _snapshotBackupTiming(7000) {
_appPos.left = 0; _appPos.left = 0;
_appPos.top = 0; _appPos.top = 0;
_appPos.right = 700; _appPos.right = 700;
@ -815,13 +815,13 @@ struct NppGUI
MultiInstSetting _multiInstSetting; MultiInstSetting _multiInstSetting;
bool _fileSwitcherWithoutExtColumn; bool _fileSwitcherWithoutExtColumn;
/* /*
bool isBackupMode() const {return _isBackupMode;}; bool isSnapshotMode() const {return _isSnapshotMode;};
void setBackupMode(bool doBackup) {_isBackupMode = doBackup;}; void setBackupMode(bool doBackup) {_isSnapshotMode = doBackup;};
size_t getBackupTiming() const {return _backupTiming;}; size_t getBackupTiming() const {return _snapshotBackupTiming;};
void setBackupTiming(size_t timing) {_backupTiming = timing;}; void setBackupTiming(size_t timing) {_snapshotBackupTiming = timing;};
*/ */
bool _isBackupMode; bool _isSnapshotMode;
size_t _backupTiming; size_t _snapshotBackupTiming;
}; };
struct ScintillaViewParams struct ScintillaViewParams

View File

@ -470,8 +470,8 @@ BufferID FileManager::loadFile(const TCHAR * filename, Document doc, int encodin
::GetFullPathName(filename, MAX_PATH, fullpath, NULL); ::GetFullPathName(filename, MAX_PATH, fullpath, NULL);
::GetLongPathName(fullpath, fullpath, MAX_PATH); ::GetLongPathName(fullpath, fullpath, MAX_PATH);
bool isBackupMode = backupFileName != NULL && PathFileExists(backupFileName); bool isSnapshotMode = backupFileName != NULL && PathFileExists(backupFileName);
if (isBackupMode && !PathFileExists(fullpath)) // if backup mode and fullpath doesn't exist, we guess is UNTITLED if (isSnapshotMode && !PathFileExists(fullpath)) // if backup mode and fullpath doesn't exist, we guess is UNTITLED
{ {
lstrcpy(fullpath, filename); // we restore fullpath with filename, in our case is "new #" lstrcpy(fullpath, filename); // we restore fullpath with filename, in our case is "new #"
} }

View File

@ -289,15 +289,20 @@ IDD_PREFERENCE_BACKUP_BOX DIALOGEX 0, 0, 455, 185
STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
FONT 8, "MS Shell Dlg", 0, 0, 0x1 FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN BEGIN
GROUPBOX "Backup",IDC_BACKUPDIR_GRP_STATIC,79,19,289,128,BS_CENTER GROUPBOX "Backup on save",IDC_BACKUPDIR_GRP_STATIC,79,69,289,110,BS_CENTER
CONTROL "None",IDC_RADIO_BKNONE,"Button",BS_AUTORADIOBUTTON | WS_GROUP,104,32,87,10 CONTROL "None",IDC_RADIO_BKNONE,"Button",BS_AUTORADIOBUTTON | WS_GROUP,104,80,87,10
CONTROL "Simple backup",IDC_RADIO_BKSIMPLE,"Button",BS_AUTORADIOBUTTON,104,46,111,10 CONTROL "Simple backup",IDC_RADIO_BKSIMPLE,"Button",BS_AUTORADIOBUTTON,104,94,111,10
CONTROL "Verbose backup",IDC_RADIO_BKVERBOSE,"Button",BS_AUTORADIOBUTTON,104,60,111,10 CONTROL "Verbose backup",IDC_RADIO_BKVERBOSE,"Button",BS_AUTORADIOBUTTON,104,108,111,10
GROUPBOX "Custom Backup Directory",IDC_BACKUPDIR_USERCUSTOMDIR_GRPSTATIC,95,87,260,40 GROUPBOX "Custom Backup Directory",IDC_BLINKRATE_STATIC,95,129,260,40
CONTROL "",IDC_BACKUPDIR_CHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,91,87,8,10 CONTROL "",IDC_BACKUPDIR_CHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,91,129,8,10
RTEXT "Directory :",IDD_BACKUPDIR_STATIC,99,98,40,8 RTEXT "Directory :",IDD_BACKUPDIR_STATIC,99,146,40,8
EDITTEXT IDC_BACKUPDIR_EDIT,146,102,179,14,ES_AUTOHSCROLL EDITTEXT IDC_BACKUPDIR_EDIT,146,144,179,14,ES_AUTOHSCROLL
PUSHBUTTON "...",IDD_BACKUPDIR_BROWSE_BUTTON,332,102,16,14 PUSHBUTTON "...",IDD_BACKUPDIR_BROWSE_BUTTON,332,144,16,14
GROUPBOX "Snapshot and periodic backup",IDC_BACKUPDIR_RESTORESESSION_GRP_STATIC,79,1,289,59,BS_CENTER
CONTROL "Enable",IDC_BACKUPDIR_RESTORESESSION_CHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,105,17,101,10
EDITTEXT IDC_BACKUPDIR_RESTORESESSION_EDIT,164,35,21,14,ES_NUMBER
RTEXT "Backup in every",IDD_BACKUPDIR_RESTORESESSION_STATIC1,82,37,78,8
LTEXT "seconds",IDD_BACKUPDIR_RESTORESESSION_STATIC2,190,37,66,8
END END
IDD_PREFERENCE_AUTOCOMPLETION_BOX DIALOGEX 0, 0, 455, 185 IDD_PREFERENCE_AUTOCOMPLETION_BOX DIALOGEX 0, 0, 455, 185

View File

@ -2163,7 +2163,6 @@ BOOL CALLBACK PrintSettingsDlg::run_dlgProc(UINT Message, WPARAM wParam, LPARAM)
} }
BOOL CALLBACK BackupDlg::run_dlgProc(UINT Message, WPARAM wParam, LPARAM) BOOL CALLBACK BackupDlg::run_dlgProc(UINT Message, WPARAM wParam, LPARAM)
{ {
NppParameters *pNppParam = NppParameters::getInstance(); NppParameters *pNppParam = NppParameters::getInstance();
@ -2172,21 +2171,26 @@ BOOL CALLBACK BackupDlg::run_dlgProc(UINT Message, WPARAM wParam, LPARAM)
{ {
case WM_INITDIALOG : case WM_INITDIALOG :
{ {
int ID2Check = 0; bool snapshotCheck = nppGUI._isSnapshotMode;
::SendDlgItemMessage(_hSelf, IDC_BACKUPDIR_RESTORESESSION_CHECK, BM_SETCHECK, snapshotCheck?BST_CHECKED:BST_UNCHECKED, 0);
int periodicBackupInSec = nppGUI._snapshotBackupTiming/1000;
::SetDlgItemInt(_hSelf, IDC_BACKUPDIR_RESTORESESSION_EDIT, periodicBackupInSec, FALSE);
int ID2CheckBackupOnSave = 0;
switch (nppGUI._backup) switch (nppGUI._backup)
{ {
case bak_simple : case bak_simple :
ID2Check = IDC_RADIO_BKSIMPLE; ID2CheckBackupOnSave = IDC_RADIO_BKSIMPLE;
break; break;
case bak_verbose : case bak_verbose :
ID2Check = IDC_RADIO_BKVERBOSE; ID2CheckBackupOnSave = IDC_RADIO_BKVERBOSE;
break; break;
default : //bak_none default : //bak_none
ID2Check = IDC_RADIO_BKNONE; ID2CheckBackupOnSave = IDC_RADIO_BKNONE;
} }
::SendDlgItemMessage(_hSelf, ID2Check, BM_SETCHECK, BST_CHECKED, 0); ::SendDlgItemMessage(_hSelf, ID2CheckBackupOnSave, BM_SETCHECK, BST_CHECKED, 0);
if (nppGUI._useDir) if (nppGUI._useDir)
::SendDlgItemMessage(_hSelf, IDC_BACKUPDIR_CHECK, BM_SETCHECK, BST_CHECKED, 0); ::SendDlgItemMessage(_hSelf, IDC_BACKUPDIR_CHECK, BM_SETCHECK, BST_CHECKED, 0);
@ -2209,11 +2213,34 @@ BOOL CALLBACK BackupDlg::run_dlgProc(UINT Message, WPARAM wParam, LPARAM)
nppGUI._backupDir = inputDir; nppGUI._backupDir = inputDir;
return TRUE; return TRUE;
} }
case IDC_BACKUPDIR_RESTORESESSION_EDIT:
{
nppGUI._snapshotBackupTiming = ::GetDlgItemInt(_hSelf, IDC_BACKUPDIR_RESTORESESSION_EDIT, NULL, FALSE) * 1000;
if (!nppGUI._snapshotBackupTiming)
{
nppGUI._snapshotBackupTiming = 1000;
::SetDlgItemInt(_hSelf, IDC_BACKUPDIR_RESTORESESSION_EDIT, 1, FALSE);
}
return TRUE;
}
} }
} }
switch (wParam) switch (wParam)
{ {
case IDC_BACKUPDIR_RESTORESESSION_CHECK:
{
nppGUI._isSnapshotMode = BST_CHECKED == ::SendDlgItemMessage(_hSelf, IDC_BACKUPDIR_RESTORESESSION_CHECK, BM_GETCHECK, 0, 0);
updateBackupGUI();
if (nppGUI._isSnapshotMode)
{
// Launch thread
}
return TRUE;
}
case IDC_RADIO_BKSIMPLE: case IDC_RADIO_BKSIMPLE:
{ {
nppGUI._backup = bak_simple; nppGUI._backup = bak_simple;
@ -2259,6 +2286,11 @@ BOOL CALLBACK BackupDlg::run_dlgProc(UINT Message, WPARAM wParam, LPARAM)
void BackupDlg::updateBackupGUI() void BackupDlg::updateBackupGUI()
{ {
bool isSnapshot = BST_CHECKED == ::SendDlgItemMessage(_hSelf, IDC_BACKUPDIR_RESTORESESSION_CHECK, BM_GETCHECK, 0, 0);
::EnableWindow(::GetDlgItem(_hSelf, IDD_BACKUPDIR_RESTORESESSION_STATIC1), isSnapshot);
::EnableWindow(::GetDlgItem(_hSelf, IDC_BACKUPDIR_RESTORESESSION_EDIT), isSnapshot);
::EnableWindow(::GetDlgItem(_hSelf, IDD_BACKUPDIR_RESTORESESSION_STATIC2), isSnapshot);
bool noBackup = BST_CHECKED == ::SendDlgItemMessage(_hSelf, IDC_RADIO_BKNONE, BM_GETCHECK, 0, 0); bool noBackup = BST_CHECKED == ::SendDlgItemMessage(_hSelf, IDC_RADIO_BKNONE, BM_GETCHECK, 0, 0);
bool isEnableGlobableCheck = false; bool isEnableGlobableCheck = false;
bool isEnableLocalCheck = false; bool isEnableLocalCheck = false;

View File

@ -280,6 +280,11 @@
#define IDD_AUTOC_STATIC_NOTE (IDD_PREFERENCE_BACKUP_BOX + 14) #define IDD_AUTOC_STATIC_NOTE (IDD_PREFERENCE_BACKUP_BOX + 14)
#define IDD_FUNC_CHECK (IDD_PREFERENCE_BACKUP_BOX + 15) #define IDD_FUNC_CHECK (IDD_PREFERENCE_BACKUP_BOX + 15)
#define IDD_AUTOC_BOTHRADIO (IDD_PREFERENCE_BACKUP_BOX + 16) #define IDD_AUTOC_BOTHRADIO (IDD_PREFERENCE_BACKUP_BOX + 16)
#define IDC_BACKUPDIR_RESTORESESSION_GRP_STATIC (IDD_PREFERENCE_BACKUP_BOX + 17)
#define IDC_BACKUPDIR_RESTORESESSION_CHECK (IDD_PREFERENCE_BACKUP_BOX + 18)
#define IDD_BACKUPDIR_RESTORESESSION_STATIC1 (IDD_PREFERENCE_BACKUP_BOX + 19)
#define IDC_BACKUPDIR_RESTORESESSION_EDIT (IDD_PREFERENCE_BACKUP_BOX + 20)
#define IDD_BACKUPDIR_RESTORESESSION_STATIC2 (IDD_PREFERENCE_BACKUP_BOX + 21)
#define IDD_PREFERENCE_AUTOCOMPLETION_BOX 6850 //(IDD_PREFERENCE_BOX + 850) #define IDD_PREFERENCE_AUTOCOMPLETION_BOX 6850 //(IDD_PREFERENCE_BOX + 850)
#define IDD_AUTOCINSERT_GRPSTATIC (IDD_PREFERENCE_AUTOCOMPLETION_BOX + 1) #define IDD_AUTOCINSERT_GRPSTATIC (IDD_PREFERENCE_AUTOCOMPLETION_BOX + 1)