// /// Notifies the views of the current document and the views of any child documents /// of a change. In contrast to QueryViews, NotifyViews sends notification of an /// event to all views and returns true if all views returned a true result. The /// event, EV_OWLNOTIFY, is sent with an event code, which is private to the /// particular document and view class, and a long argument, which can be cast /// appropriately to the actual type passed in the argument of the response /// function. // bool TDocument::NotifyViews(int event, long item, TView* exclude) { bool answer = true; TDocument* pdoc = 0; while ((pdoc = ChildDoc.Next(pdoc)) != 0) answer = (answer && pdoc->NotifyViews(event, item, exclude)); TEventHandler::TEventInfo eventInfo(WM_OWLNOTIFY, event); for (TView* view = ViewList; view != 0; view = view->NextView) if (view != exclude && view->Find(eventInfo)) answer = (answer && (view->Dispatch(eventInfo, 0, item) != 0)); return answer; }
// /// Queries the views of the current document and the views of any child documents /// about a specified event, but stops at the first view that returns true. In /// contrast to NotifyViews(), QueryViews returns a pointer to the first view that /// responded to an event with a true result. The event, EV_OWLNOTIFY, is sent with /// an event code (which is private to the particular document and view class) and a /// long argument (which can be cast appropriately to the actual type passed in the /// argument of the response function). // TView* TDocument::QueryViews(int event, long item, TView* exclude) { TView* view; TDocument* pdoc = 0; while ((pdoc = ChildDoc.Next(pdoc)) != 0) if ((view = pdoc->QueryViews(event, item, exclude)) != 0) return view; TEventHandler::TEventInfo eventInfo(WM_OWLNOTIFY, event); for (view = ViewList; view != 0; view = view->NextView) { if (view != exclude) { if (view->Find(eventInfo)) { if (view->Dispatch(eventInfo, 0, item)) { return view; // Return first acknowledger } } } } return 0; }