//--------------------------------------------------------------------------- #include #pragma hdrstop #include "common.h" #include "Undo.h" //--------------------------------------------------------------------------- #pragma package(smart_init) //--------------------------------------------------------------------------- __fastcall undodata::undodata(){ udata = CreateFile( (BaseDir+"//temp.und").c_str() , GENERIC_WRITE|GENERIC_READ , 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); rdata = CreateFile( (BaseDir+"//temp.rnd").c_str() , GENERIC_WRITE|GENERIC_READ , 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); uindex = new TList; rindex = new TList; } //--------------------------------------------------------------------------- __fastcall undodata::~undodata(){ CloseHandle(udata); CloseHandle(rdata); DeleteFile((BaseDir+"//temp.und").c_str()); DeleteFile((BaseDir+"//temp.rnd").c_str()); while(uindex->Count){ delete (DWORD *)uindex->Last(); uindex->Remove(uindex->Last()); } while(rindex->Count){ delete (DWORD *)rindex->Last(); rindex->Remove(rindex->Last()); } delete uindex; uindex=NULL; delete rindex; rindex=NULL; } //--------------------------------------------------------------------------- void __fastcall undodata::reset(){ CloseHandle(udata); CloseHandle(rdata); udata = CreateFile( (BaseDir+"//temp.und").c_str() , GENERIC_WRITE|GENERIC_READ , 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); rdata = CreateFile( (BaseDir+"//temp.rnd").c_str() , GENERIC_WRITE|GENERIC_READ , 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); while(uindex->Count){ delete (DWORD *)uindex->Last(); uindex->Remove(uindex->Last()); } while(rindex->Count){ delete (DWORD *)rindex->Last(); rindex->Remove(rindex->Last()); } } //--------------------------------------------------------------------------- bool __fastcall undodata::canundo(){ return uindex->Count!=0; } //--------------------------------------------------------------------------- bool __fastcall undodata::canredo(){ return rindex->Count!=0; } //--------------------------------------------------------------------------- void __fastcall undodata::do_(TexLayer *chart){ //do_´Â actionÀü¿¡ ½ÇÇàÇÑ´Ù DWORD *p = new DWORD; *p = GetFileSize (udata, NULL); uindex->Add(p); chart->SaveToFile(udata); CloseHandle(rdata); rdata = CreateFile( (BaseDir+"//temp.rnd").c_str() , GENERIC_WRITE|GENERIC_READ , 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); while(rindex->Count){ delete (DWORD *)rindex->Last(); rindex->Remove(rindex->Last()); } } //--------------------------------------------------------------------------- void __fastcall undodata::undo(TexLayer *chart){ if(canundo()){ DWORD *pr = new DWORD; *pr = GetFileSize (rdata, NULL); rindex->Add(pr); chart->SaveToFile(rdata); DWORD *p = (DWORD *)uindex->Last(); SetFilePointer (udata, *p, NULL, FILE_BEGIN); chart->ReadFromFile(udata, FILE_VERSION); uindex->Remove(uindex->Last()); SetFilePointer (udata, *p, NULL, FILE_BEGIN); SetEndOfFile(udata); delete p; } } //--------------------------------------------------------------------------- void __fastcall undodata::redo(TexLayer *chart){ if(canredo()){ DWORD *pu = new DWORD; *pu = GetFileSize (udata, NULL); uindex->Add(pu); chart->SaveToFile(udata); DWORD *p = (DWORD *)rindex->Last(); SetFilePointer (rdata, *p, NULL, FILE_BEGIN); chart->ReadFromFile(rdata, FILE_VERSION); rindex->Remove(rindex->Last()); SetFilePointer (rdata, *p, NULL, FILE_BEGIN); SetEndOfFile(rdata); delete p; } } //---------------------------------------------------------------------------