/** * update contents. */ private IEnumerator Update(TagTree tree, Vector2 viewRect, string[] appendedTreeIds, GameObject eventReceiverGameObj = null, Action onAfterUpdate = null) { var usingIds = TagTree.CorrectTrees(tree); IEnumerator materialize = null; var layout = layoutMachine.Layout( tree, viewRect, newLayoutedTree => { // update layouted tree. this.layoutedTree = newLayoutedTree; UpdateParentViewSizeIfExist(); resLoader.BackGameObjects(usingIds); materialize = materializeMachine.Materialize( view.GetGameObject(), this, this.layoutedTree, viewRect, 0f, () => { // done updating. viewState = ViewState.Ready; if (onAfterUpdate != null) { onAfterUpdate(); } if (eventReceiverGameObj != null) { ExecuteEvents.Execute <IUUebViewEventHandler>(eventReceiverGameObj, null, (handler, data) => handler.OnUpdated(appendedTreeIds)); } } ); } ); while (layout.MoveNext()) { yield return(null); } Debug.Assert(materialize != null, "materialize is null."); while (materialize.MoveNext()) { yield return(null); } }
/* * TreeQL関連、実際に操作できるタイミングは非アップデート中とかそんな感じなので、 * stateに関する制約が必要。 */ public void AppendContentToLast(string htmlContent, string query = "") { if (viewState != ViewState.Ready) { return; } TagTree.CorrectTrees(layoutedTree); var parser = new HTMLParser(resLoader); var parse = parser.ParseRoot( htmlContent, parsedTagTree => { if (parsedTagTree.errors.Any()) { Debug.LogError("parse errors:" + parsedTagTree.errors.Count); foreach (var error in parsedTagTree.errors) { Debug.LogError("code:" + error.code + " reason:" + error.reason); } return; } // parse succeeded. var newTreeIds = TagTree.CollectTreeIds(parsedTagTree); var currentTreeIds = TagTree.CollectTreeIds(layoutedTree); var appendedTreeIds = newTreeIds.Except(currentTreeIds).ToArray(); var children = parsedTagTree.GetChildren(); // add to content. if (string.IsNullOrEmpty(query)) { layoutedTree.AddChildren(children.ToArray()); } else { var targetTreeFamily = GetTreeFamily(new List <TagTree> { layoutedTree }, GetQuery(query)); targetTreeFamily.Last().AddChildren(children.ToArray()); } // relayout. Update(appendedTreeIds, () => { }); } ); CoroutineExecutor(parse); }
/** * layout -> materialize. * if parsedTagTree was changed, materialize dirty flagged content only. */ private IEnumerator Load(TagTree tree, Vector2 viewRect, float offsetY, GameObject eventReceiverGameObj = null) { var usingIds = TagTree.CorrectTrees(tree); IEnumerator materialize = null; var layout = layoutMachine.Layout( tree, viewRect, layoutedTree => { // update layouted tree. this.layoutedTree = layoutedTree; var newIds = TagTree.CollectTreeIds(this.layoutedTree); UpdateParentViewSizeIfExist(); resLoader.BackGameObjects(usingIds); materialize = materializeMachine.Materialize( view.GetGameObject(), this, this.layoutedTree, viewRect, offsetY, () => { StartCalculateProgress(newIds); } ); } ); { while (layout.MoveNext()) { yield return(null); } } { while (materialize.MoveNext()) { yield return(null); } } }
public void DeleteByPoint(string query) { if (viewState != ViewState.Ready) { return; } TagTree.CorrectTrees(layoutedTree); var queryArray = GetQuery(query); var targetTreeFamily = GetTreeFamily(new List <TagTree> { layoutedTree }, queryArray); if (targetTreeFamily.Any()) { var deleteTargetTree = targetTreeFamily.Last(); targetTreeFamily[targetTreeFamily.Length - 2].GetChildren().Remove(deleteTargetTree); } Update(new string[0], () => { }); }