コード例 #1
0
ファイル: TreeSkeleton.cs プロジェクト: omaragb/tlp182
        static SkeletonItem[] BfsExpand(SkeletonItem skel)
        {
            for (int i = 0; i < skel.displayNodes.Length; ++i)
            {
                BfsExpandCore(skel, i);
            }

            var workItems = new Stack <SkeletonItem>();
            var allNodes  = new List <SkeletonItem>();

            workItems.Push(skel);

            while (workItems.Count > 0)
            {
                var s = workItems.Pop();
                if (!s.isPrimary.Any())
                {
                    continue;
                }
                allNodes.Add(s);
                s.children.Iter(workItems.Push);
            }

            return(allNodes.ToArray());
        }
コード例 #2
0
ファイル: TreeSkeleton.cs プロジェクト: omaragb/tlp182
 internal SkeletonItem(string n, SkeletonItem par)
     : this(par.main, par.displayNodes.Length)
 {
     parent = par;
     name   = n;
     level  = par.level + 1;
 }
コード例 #3
0
ファイル: TreeSkeleton.cs プロジェクト: Chenguang-Zhu/ICE-C5
 internal SkeletonItem(string n, SkeletonItem par)
   : this(par.main, par.displayNodes.Length)
 {
   parent = par;
   name = n;
   level = par.level + 1;
 }
コード例 #4
0
ファイル: TreeSkeleton.cs プロジェクト: omaragb/tlp182
        static void BfsExpandCore(SkeletonItem skel, int idx)
        {
            var visited   = new HashSet <Model.Element>();
            var workItems = new Queue <SkeletonItem>();

            workItems.Enqueue(skel);
            while (workItems.Count > 0)
            {
                var s = workItems.Dequeue();
                if (s.displayNodes[idx] == null)
                {
                    continue;
                }
                var e = s.displayNodes[idx].Element;
                s.isPrimary[idx] = true;
                if (e != null)
                {
                    if (visited.Contains(e))
                    {
                        continue;
                    }
                    visited.Add(e);
                }
                s.ComputeChildren();
                s.children.Iter(workItems.Enqueue);
            }
        }
コード例 #5
0
 private void ExpandParents(SkeletonItem item)
 {
     item = item.parent;
     while (item != null)
     {
         item.Expanded = true;
         item          = item.parent;
     }
 }
コード例 #6
0
 private void GotoNode(SkeletonItem skel)
 {
     ExpandParents(skel);
     SyncCurrentStateView();
     foreach (DisplayItem it in currentStateView.Items)
     {
         if (it.skel == skel)
         {
             it.Selected = true;
             currentStateView.EnsureVisible(it.Index);
             break;
         }
     }
 }
コード例 #7
0
ファイル: TreeSkeleton.cs プロジェクト: omaragb/tlp182
        public void SyncWith(Dictionary <SkeletonItem, SkeletonItem> mapping, SkeletonItem old)
        {
            mapping[old] = this;
            Expanded     = old.Expanded;
            var oldCh = old.children.ToDictionary(c => c.name);

            foreach (var c in children)
            {
                SkeletonItem oc;
                if (oldCh.TryGetValue(c.name, out oc))
                {
                    c.SyncWith(mapping, oc);
                }
            }
        }
コード例 #8
0
        private void stateViewMenu_Opening(object sender, CancelEventArgs e)
        {
            IDisplayNode sel  = null;
            SkeletonItem skel = null;

            if (SelectedNode() != null)
            {
                sel  = SelectedNode().dispNode;
                skel = SelectedNode().skel;
            }

            var items = stateViewMenu.Items;

            items.Clear();

            if (sel == null)
            {
                items.Add(new ToolStripMenuItem("Unavailable")
                {
                    Enabled = false
                });
                return;
            }

            foreach (var x in sel.References.Where(q => q != sel.Element))
            {
                var t = new ToolStripMenuItem(LangModel.CanonicalName(x));
                items.Add(t);
                AddMenuItems(NamesFor(x), t.DropDownItems, "= ", 20);
            }

            if (sel.Element != null)
            {
                var selName = LangModel.CanonicalName(sel.Element);
                items.Add("Find uses...", null, (s, _) => SetSearch("use:" + selName));

                var aliases = NamesFor(sel.Element).Where(s => s != skel).ToArray();
                if (aliases.Length > 0)
                {
                    items.Add("Aliases...", null, (s, _) => SetSearch("eq:" + selName));
                    AddMenuItems(aliases, items, "   = ", 10);
                }
            }
        }
コード例 #9
0
ファイル: TreeSkeleton.cs プロジェクト: Chenguang-Zhu/ICE-C5
    static SkeletonItem[] BfsExpand(SkeletonItem skel)
    {
      for (int i = 0; i < skel.displayNodes.Length; ++i)
        BfsExpandCore(skel, i);

      var workItems = new Stack<SkeletonItem>();
      var allNodes = new List<SkeletonItem>();
      workItems.Push(skel);

      while (workItems.Count > 0) {
        var s = workItems.Pop();
        if (!s.isPrimary.Any())
          continue;
        allNodes.Add(s);
        s.children.Iter(workItems.Push);
      }

      return allNodes.ToArray();
    }
コード例 #10
0
ファイル: TreeSkeleton.cs プロジェクト: omaragb/tlp182
        private void ComputeChildren()
        {
            if (wasExpanded)
            {
                return;
            }
            wasExpanded = true;

            var created = new Dictionary <string, SkeletonItem>();
            var names   = new List <IDisplayNode>();

            for (int i = 0; i < displayNodes.Length; ++i)
            {
                var dn = displayNodes[i];
                if (dn == null)
                {
                    continue;
                }
                foreach (var child in dn.Children)
                {
                    if (child.ViewLevel > main.viewOpts.ViewLevel)
                    {
                        continue;
                    }
                    SkeletonItem skelChild;
                    var          name = child.Name;
                    if (!created.TryGetValue(name, out skelChild))
                    {
                        skelChild = new SkeletonItem(child.Name, this);
                        created.Add(name, skelChild);
                        names.Add(child);
                    }
                    skelChild.displayNodes[i] = child;
                }
            }

            foreach (var name in main.LangModel.SortFields(names))
            {
                children.Add(created[name]);
            }
        }
コード例 #11
0
ファイル: Main.cs プロジェクト: Chenguang-Zhu/ICE-C5
        internal void Set(SkeletonItem s, int id, int prevId)
        {
            if (skel == s && stateId == id)
            return;
              skel = s;
              stateId = id;

              dispNode = skel.displayNodes[stateId];
              active = dispNode != null;

              var closeStateId = stateId;

              if (dispNode == null) {
            while (closeStateId < skel.displayNodes.Length && skel.displayNodes[closeStateId] == null)
              closeStateId++;
            if (closeStateId >= skel.displayNodes.Length) {
              closeStateId = stateId;
              while (closeStateId >= 0 && skel.displayNodes[closeStateId] == null)
            closeStateId--;
            }
            dispNode = skel.displayNodes[closeStateId];
              }

              var fullName = skel.LongName(closeStateId);
              var tooltip = dispNode.ToolTip;
              if (tooltip == null)
            tooltip = "";
              if(tooltip.Length > 0 && tooltip[tooltip.Length - 1] != '\n')
            tooltip += "\n";
              tooltip += "Full name: " + fullName;
              if (tooltip != null) {
            this.ToolTipText = tooltip;
              }

              var name = dispNode.Name;
              if (name != dispNode.ShortName)
              {
            name = dispNode.ShortName;
              }

              if (IsMatchListItem) {
            Util.Assert(active);
            name = fullName;
              }

              this.SubItems[0].Text = name;
              this.SubItems[1].Text = active ? dispNode.Value : "";

              var prev = "";

              if (!IsMatchListItem && prevId >= 0 && skel.displayNodes[prevId] != null) {
            prev = skel.displayNodes[prevId].Value;
              }

              this.SubItems[2].Text = prev;
        }
コード例 #12
0
ファイル: Main.cs プロジェクト: Chenguang-Zhu/ICE-C5
 private void GotoNode(SkeletonItem skel)
 {
     ExpandParents(skel);
       SyncCurrentStateView();
       foreach (DisplayItem it in currentStateView.Items) {
     if (it.skel == skel) {
       it.Selected = true;
       currentStateView.EnsureVisible(it.Index);
       break;
     }
       }
 }
コード例 #13
0
ファイル: Main.cs プロジェクト: Chenguang-Zhu/ICE-C5
 private void ExpandParents(SkeletonItem item)
 {
     item = item.parent;
       while (item != null) {
     item.Expanded = true;
     item = item.parent;
       }
 }
コード例 #14
0
ファイル: Main.cs プロジェクト: Chenguang-Zhu/ICE-C5
        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);
              }
        }
コード例 #15
0
        internal void Set(SkeletonItem s, int id, int prevId)
        {
            if (skel == s && stateId == id)
            {
                return;
            }
            skel    = s;
            stateId = id;

            dispNode = skel.displayNodes[stateId];
            active   = dispNode != null;

            var closeStateId = stateId;

            if (dispNode == null)
            {
                while (closeStateId < skel.displayNodes.Length && skel.displayNodes[closeStateId] == null)
                {
                    closeStateId++;
                }
                if (closeStateId >= skel.displayNodes.Length)
                {
                    closeStateId = stateId;
                    while (closeStateId >= 0 && skel.displayNodes[closeStateId] == null)
                    {
                        closeStateId--;
                    }
                }
                dispNode = skel.displayNodes[closeStateId];
            }

            var fullName = skel.LongName(closeStateId);
            var tooltip  = dispNode.ToolTip;

            if (tooltip == null)
            {
                tooltip = "";
            }
            if (tooltip.Length > 0 && tooltip[tooltip.Length - 1] != '\n')
            {
                tooltip += "\n";
            }
            tooltip += "Full name: " + fullName;
            if (tooltip != null)
            {
                this.ToolTipText = tooltip;
            }

            var name = dispNode.Name;

            if (name != dispNode.ShortName)
            {
                name = dispNode.ShortName;
            }

            if (IsMatchListItem)
            {
                Util.Assert(active);
                name = fullName;
            }

            this.SubItems[0].Text = name;
            this.SubItems[1].Text = active ? dispNode.Value : "";

            var prev = "";

            if (!IsMatchListItem && prevId >= 0 && skel.displayNodes[prevId] != null)
            {
                prev = skel.displayNodes[prevId].Value;
            }

            this.SubItems[2].Text = prev;
        }
コード例 #16
0
ファイル: TreeSkeleton.cs プロジェクト: Chenguang-Zhu/ICE-C5
    static void BfsExpandCore(SkeletonItem skel, int idx)
    {
      var visited = new HashSet<Model.Element>();
      var workItems = new Queue<SkeletonItem>();

      workItems.Enqueue(skel);
      while (workItems.Count > 0) {
        var s = workItems.Dequeue();
        if (s.displayNodes[idx] == null)
          continue;
        var e = s.displayNodes[idx].Element;
        s.isPrimary[idx] = true;
        if (e != null) {
          if (visited.Contains(e))
            continue;
          visited.Add(e);
        }
        s.ComputeChildren();
        s.children.Iter(workItems.Enqueue);
      }
    }
コード例 #17
0
ファイル: TreeSkeleton.cs プロジェクト: Chenguang-Zhu/ICE-C5
    private void ComputeChildren()
    {
      if (wasExpanded) return;
      wasExpanded = true;

      var created = new Dictionary<string, SkeletonItem>();
      var names = new List<IDisplayNode>();
      for (int i = 0; i < displayNodes.Length; ++i) {
        var dn = displayNodes[i];
        if (dn == null) continue;
        foreach (var child in dn.Children) {
          if (child.ViewLevel > main.viewOpts.ViewLevel)
            continue;
          SkeletonItem skelChild;
          var name = child.Name;
          if (!created.TryGetValue(name, out skelChild)) {
            skelChild = new SkeletonItem(child.Name, this);
            created.Add(name, skelChild);
            names.Add(child);
          }
          skelChild.displayNodes[i] = child;
        }
      }

      foreach (var name in main.LangModel.SortFields(names)) {
        children.Add(created[name]);
      }
    }
コード例 #18
0
ファイル: TreeSkeleton.cs プロジェクト: Chenguang-Zhu/ICE-C5
 public void SyncWith(Dictionary<SkeletonItem, SkeletonItem> mapping, SkeletonItem old)
 {
   mapping[old] = this;
   Expanded = old.Expanded;
   var oldCh = old.children.ToDictionary(c => c.name);
   foreach (var c in children) {
     SkeletonItem oc;
     if (oldCh.TryGetValue(c.name, out oc))
       c.SyncWith(mapping, oc);
   }
 }
コード例 #19
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);
            }
        }