/// <summary> /// Each node in the tree can have an associated tracking object used to indentify it. /// The branch can override this method to return the row index corresponding to the given /// object. /// </summary> /// <param name="locateData"> /// If the object is a direct child of this branch, set locateData.Options = TrackingObjectAction.ThisLevel. /// If the object is deeper in the tree, the branch should set it to TrackingObjectAction.NextLevel, /// locateData.Row should be set to the row where the search should continue. /// </param> /// <param name="tracked">Object to track</param> protected virtual LocateObjectData LocateTrackingObject(object tracked, LocateObjectData locateData) { // base implementation handles searching in this branch, but searching // deeper in the tree requires knowledge not available // in the base class. locateData.Row = -1; locateData.Row = GetIndexForElement(tracked); locateData.Options = locateData.Row >= 0 ? (int)TrackingObjectAction.ThisLevel : (int)TrackingObjectAction.NotTracked; return locateData; }
/// <summary> /// IBranch interface implementation. /// </summary> public LocateObjectData /* IBranch */ LocateObject(object obj, ObjectStyle style, int locateOptions) { var locateData = new LocateObjectData(-1, 0, 0); switch (style) { case ObjectStyle.ExpandedBranch: case ObjectStyle.SubItemExpansion: locateData.Options = (int)BranchLocationAction.DiscardBranch; break; case ObjectStyle.TrackingObject: locateData = LocateTrackingObject(obj, locateData); break; } return locateData; }
LocateObjectData IBranch.LocateObject(object obj, ObjectStyle style, int locateOptions) { var locateData = new LocateObjectData(); locateData.Row = -1; foreach (IBranch branch in _branchList) { locateData = branch.LocateObject(obj, style, locateOptions); if (locateData.Row != -1) { return locateData; } } return locateData; }