void TDrawDocument::RePaintViews(TRect* rect) { if(rect) NotifyViews(vnRePaint, (long) rect); else NotifyViews(vnRePaint); }
// /// Performs the reverse of Commit() and cancels any changes made to the document /// since the last commit. If clear is true, data is not reloaded for views. Revert /// also checks all child documents and cancels any changes if all children return /// true. When a file is closed, the document manager calls either Commit() or Revert. /// Returns true if the operation is successful. // bool TDocument::Revert(bool clear) { TDocument* pdoc = 0; while ((pdoc = ChildDoc.Next(pdoc)) != 0) { if (!pdoc->Revert(clear)) return false; } return NotifyViews(vnRevert, clear); }
// /// Saves the current data to storage. When a file is closed, the document manager /// calls either Commit or Revert. If force is true, all data is written to storage. /// Commit checks any child documents and commits their changes to storage also. /// Before the current data is saved, all child documents must return true. If all /// child documents return true, Commit flushes the views for operations that /// occurred since the last time the view was checked. After all data for the /// document is updated and saved, Commit returns true. // bool TDocument::Commit(bool force) { TDocument* pdoc = 0; while ((pdoc = ChildDoc.Next(pdoc)) != 0) { if (!pdoc->Commit(force)) return false; } WARNX(OwlDocView, !DocPath, 0, _T("Commit(): 0 DocPath!")); return NotifyViews(vnCommit, force); }
// /// Called from TView constructor. // void TDocument::AttachView(TView& view) { TView** ppview; for (ppview = &ViewList; *ppview; ppview = &(*ppview)->NextView) ; *ppview = &view; // insert at end of list view.NextView = 0; view.Doc = this; NotifyViews(vnViewOpened, (long)&view, &view); }
// /// DetachView is invoked from TView's destructor so that the view can detach /// itself from this document. True is returned if the detachment is successful /// indicating that this document should be deleted. // bool TDocument::DetachView(TView& view) { TView** plist = &ViewList; for (; *plist; plist = &(*plist)->NextView) { if (*plist == &view) { // Found the view, now detach it and notify app and other views // DocManager->PostEvent(dnClose, view); *plist = view.NextView; NotifyViews(vnViewClosed, (long)&view, &view); // Cleanup doc if last view was just closed and dtAutoDelete // or dtAutoOpen is set. dtAutoOpen will cause an autoclose, while // dtAutoDelete will delete this doc also. // if (!ViewList) { if (Template && ((Template->Flags & dtAutoDelete) || (Template->Flags & dtAutoOpen))) { // Close document streams // if (IsOpen()) Close(); // Returning true will cause ~TView to delete document. Using // 'view.IsOK()' caters for cases where TView's construction failed. // return (Template->Flags & dtAutoDelete) && view.IsOK(); } } else { ReindexFrames(); } break; } } return false; }