Beispiel #1
0
        private void BuildModel()
        {
            stateList.Items.Clear();

            var items = new List <ListViewItem>();

            LangModel = langProvider.GetLanguageSpecificModel(currentModel, viewOpts);
            states    = LangModel.States.ToArray();
            var          oldRoot      = unfoldingRoot;
            SkeletonItem selectedSkel = null;

            if (oldRoot != null && SelectedNode() != null)
            {
                selectedSkel = SelectedNode().skel;
            }
            unfoldingRoot = new SkeletonItem(this, states.Length);
            allItems      = unfoldingRoot.PopulateRoot(states);

            var idx = 0;

            foreach (var i in states)
            {
                var it = new ListViewItem(new string[] { idx.ToString(), i.Name, "" });
                it.Tag = i;
                items.Add(it);
                idx++;
            }
            stateList.Items.AddRange(items.ToArray());
            unfoldingRoot.Expanded = true;

            if (oldRoot == null)
            {
                SetState(0);
                stateList.Items[0].Selected = true;
                SetColumnSizes();
            }
            else
            {
                var mapping = new Dictionary <SkeletonItem, SkeletonItem>();
                unfoldingRoot.SyncWith(mapping, oldRoot);
                SkeletonItem newIt = null;
                while (selectedSkel != null)
                {
                    if (mapping.TryGetValue(selectedSkel, out newIt))
                    {
                        break;
                    }
                    selectedSkel = selectedSkel.parent;
                }
                if (CurrentState >= stateList.Items.Count)
                {
                    CurrentState = 0;
                }
                if (PreviousState >= stateList.Items.Count)
                {
                    PreviousState = -1;
                }
                if (newIt != null)
                {
                    GotoNode(newIt);
                }
                SyncStateListValues();
                UpdateMatches(true);
            }
        }