Ejemplo n.º 1
0
        private void GetNextTag(out GUTag oldCurrentTag, out GUTag newCurrentTag)
        {
            oldCurrentTag = SelectedTag;
            List <GUTag> parents = TagDB.QueryTagParent(oldCurrentTag);

            //当前节点删除了,找到一个合适的节点作为删除后的新的当前节点
            newCurrentTag = NavigateTagBox(Key.Left);
            if (parents.Count == 1)
            {
                int i = parents[0].GetChildPos(oldCurrentTag);
                newCurrentTag = null;
                if (parents[0].Children.Count > 1)
                {
                    if (i >= parents[0].Children.Count - 1)//当前节点是所在父节点的最后一个节点
                    {
                        newCurrentTag = TagDB.GetTag(parents[0].Children[i - 1]);
                    }
                    else //i < count - 1 == 》 i<=count-2
                    {
                        newCurrentTag = TagDB.GetTag(parents[0].Children[i + 1]);
                    }
                }

                if (newCurrentTag == null)
                {
                    newCurrentTag = parents[0];
                }
            }
            if (newCurrentTag == null)
            {
                newCurrentTag = TagDB.GetTag(StaticCfg.Ins.DefaultTagID);
            }
        }
Ejemplo n.º 2
0
        public void ITagDB_Test_Reopen()//关闭后重新打开
        {
            GUTag p1 = db.NewTag("p1");
            GUTag c1 = db.NewTag("c1");

            db.SetParent(p1, c1);
            List <string> alias = db.QueryTagAlias(p1);

            foreach (string a in alias)
            {
                Logger.D(a);
            }
            Assert.AreEqual(1, alias.Count);
            Assert.AreEqual("p1", alias[0]);
            Logger.D("end test reopen");

            IDisposableFactory.DisposeAll();
            db = null;

            db = TagDBFactory.CreateTagDB("sql");
            List <GUTag> p1new = db.QueryTags("p1");

            alias = db.QueryTagAlias(p1new[0]);
            Assert.AreEqual(1, alias.Count);
            Assert.AreEqual("p1", alias[0]);
        }
Ejemplo n.º 3
0
 }                                                   // GConfig.InnerBoxYPadding_MAX;
 //私有成员变量************************************************************
 //公有成员方法************************************************************
 public TagBoxSizeInf(GUTag tag, int dis, string fname)
 {
     Tag      = tag;
     Distance = dis;
     PreCalcBoxSize();
     CalcBoxSize(fname);
 }
Ejemplo n.º 4
0
 public void Add(GUTag tag, GTagBoxTree obj)
 {
     if (null == Get(tag))
     {
         all.Add(tag, obj);
     }
 }
Ejemplo n.º 5
0
        public Size Calc(GUTag gutag, double fsize, string fname)
        {
            Size   tmp;
            string tag = gutag.Title;

            if (cache[tag] == null)
            {
                //cache内容过多,直接将所有数据全部老化。
                if (cache.Keys.Count > 2000)
                {
                    cache.Clear();
                }
                FormattedText formattedText = new FormattedText(
                    tag,
                    System.Globalization.CultureInfo.InvariantCulture,
                    FlowDirection.LeftToRight,
                    new Typeface(fname),
                    StaticCfg.Ins.FontSize,
                    Brushes.Black
                    );
                tmp = new Size(formattedText.WidthIncludingTrailingWhitespace, formattedText.Height);
                cache.Add(tag, tmp);
            }
            tmp        = (Size)cache[tag];
            tmp.Width  = tmp.Width * fsize / StaticCfg.Ins.FontSize + StaticCfg.Ins.XContentPadding;
            tmp.Height = tmp.Height * fsize / StaticCfg.Ins.FontSize + StaticCfg.Ins.YContentPadding;
            return(tmp);
        }
Ejemplo n.º 6
0
        public void DelSqlDBTest()
        {
            Guid  id = Guid.NewGuid(), pid = Guid.NewGuid(), cid = Guid.NewGuid();
            GUTag tag = new GUTag();

            tag.Id  = id;
            tag.PId = pid;
            tag.AddAlias("TITLE");
            tag.AddAlias("Alias");
            tag.AddChild(cid);

            db.AddUptSqlDB(tag);

            GUTag tag2 = db.QuerySqlDB(id);

            Assert.IsNotNull(tag2);
            Assert.AreEqual(tag2.Id, tag.Id);
            Assert.AreEqual(tag2.PId, tag.PId);
            Assert.AreEqual(tag2.Title, tag.Title);
            CheckListEqual(tag2.Children, tag.Children);
            CheckListEqual(tag2.Alias, tag.Alias);

            db.DelSqlDB(tag);
            Assert.IsNull(db.QuerySqlDB(id));
        }
Ejemplo n.º 7
0
        private void test_Click(object sender, RoutedEventArgs e)
        {
            if (MessageBox.Show("开始20次show根节点", "测试", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
            {
                DateTime t1 = DateTime.Now;
                for (int i = 0; i < 20; i++)
                {
                    GUTag tag = GUTag.Parse(StaticCfg.Ins.DefaultTagID.ToString(), tagDB);
                    ShowTagGraph(tag, tag);
                }
                DateTime t2 = DateTime.Now;
                MessageBox.Show("总共耗时:" + (t2 - t1).TotalSeconds + TreeLayoutEnv.StatInf);
            }
            else
            {
                string    dir = @"E:\testall\testgitee";
                string    git = @"https://gitee.com/kummerwu/testlibgit2sharp.git";
                GitHelper h   = new GitHelper();
                h.Connect(git, dir);
                //h.Clone();
                //File.WriteAllText(Path.Combine(dir,  "test.txt"),DateTime.Now.ToLongDateString()+DateTime.Now.ToLongTimeString());

                h.Pull();
            }
        }
Ejemplo n.º 8
0
        public void ITagDB_Test_AliasAddAndQuery2()
        {
            GUTag p1 = db.NewTag("p1");
            GUTag p2 = db.NewTag("p2");
            GUTag c1 = db.NewTag("c1");
            GUTag c2 = db.NewTag("c2");

            db.SetParent(p1, c1);
            db.SetParent(p2, c2);
            db.MergeAlias(p1, p2);
            List <string> alias = db.QueryTagAlias(p1);

            Assert.AreEqual(2, alias.Count);
            Assert.AreEqual(true, alias.Contains("p1"));
            Assert.AreEqual(true, alias.Contains("p2"));

            alias = db.QueryTagAlias(p2);
            Assert.AreEqual(0, alias.Count);
            //Assert.AreEqual(true, alias.Contains("p1"));
            //Assert.AreEqual(true, alias.Contains("p2"));

            List <GUTag> child = db.QueryTagChildren(p1);

            Assert.AreEqual(2, child.Count);
            Assert.AreEqual(true, child.Contains(c1));
            Assert.AreEqual(true, child.Contains(c2));


            child = db.QueryTagChildren(p2);
            Assert.AreEqual(0, child.Count);
            //Assert.AreEqual(true, child.Contains("c1"));
            //Assert.AreEqual(true, child.Contains("c2"));
        }
Ejemplo n.º 9
0
        public void ITagDB_Test_SetRelation4() //添加不存在的节点
        {
            GUTag P1 = db.NewTag("P1");
            GUTag P2 = db.NewTag("P2");
            GUTag P3 = db.NewTag("P3");
            GUTag C1 = db.NewTag("C1");
            GUTag C2 = db.NewTag("C2");

            db.SetParent(P1, C1);
            db.SetParent(P2, C1);
            db.SetParent(P3, C2);
            List <GUTag> parents = db.QueryTagParent(C1);

            AssertListEqual(new List <string>()
            {
                "P1", "P2"
            }, parents);


            db.ResetParent(P3, C1);
            parents = db.QueryTagParent(C1);
            AssertListEqual(new List <string>()
            {
                "P3"
            }, parents);
        }
Ejemplo n.º 10
0
        private string GetTagInf(GUTag tag, ITagDB db)
        {
            StringBuilder sb = new StringBuilder();

            sb.Append("当前选中标签:" + tag);

            List <GUTag> parents = db.QueryTagParent(tag);

            if (parents.Count > 0)
            {
                sb.Append(" Parent::= ");
                foreach (GUTag s in parents)
                {
                    sb.Append(" " + s.Title);
                }
            }


            List <GUTag> children = TagDB.QueryTagChildren(tag);

            if (children.Count > 0)
            {
                sb.Append(" Children::= ");
                foreach (GUTag s in children)
                {
                    sb.Append(" " + s.Title);
                }
            }
            return(sb.ToString().Trim());
        }
Ejemplo n.º 11
0
        public void miPasteFile_Click(object sender, RoutedEventArgs e)
        {
            UpdateCurrentTagByContextMenu();


            string[] token = Clipboard.GetText().Split(new char[] { ClipboardConst.CommandSplitToken }, StringSplitOptions.RemoveEmptyEntries);

            if (token.Length == 2)
            {
                string arg = token[1];

                string[] args = arg.Split(new char[] { ClipboardConst.ArgsSplitToken }, StringSplitOptions.RemoveEmptyEntries);
                switch (token[0])
                {
                case ClipboardConst.KUMMERWU_TAG_COPY:
                {
                    GUTag argTag = TagDB.GetTag(Guid.Parse(arg));
                    if (argTag != null)
                    {
                        TagDB.SetParent(SelectedTag, argTag);
                        RedrawGraph();
                    }
                }
                break;

                case ClipboardConst.KUMMERWU_TAG_CUT:
                {
                    GUTag argTag = TagDB.GetTag(Guid.Parse(arg));
                    if (argTag != null)
                    {
                        TagDB.ResetParent(SelectedTag, argTag);
                        RedrawGraph();
                    }
                }
                break;

                case ClipboardConst.KUMMERWU_URI_CUT:
                    MoveUris(args);
                    break;

                case ClipboardConst.KUMMERWU_URI_COPY:
                    UriDB.AddUris(args, new List <string>()
                    {
                        SelectedTag.Title
                    });
                    //foreach (string uri in args)
                    //{
                    //    UriDB.AddUri(uri, new List<string>() { currentTag });
                    //}
                    break;

                default: PasteFiles(); break;
                }
            }
            else
            {
                PasteFiles();
            }
        }
Ejemplo n.º 12
0
        private static int GetTagTreeWidth(GUTag tag, ITagDB db, int level, int maxlevel)
        {
            int          ret      = -1;
            List <GUTag> children = db.QueryTagChildren(tag);

            if (level > maxlevel)
            {
                ret = 1;
            }
            else if (level == maxlevel)
            {
                ret = children.Count + 1; //所有子节点+自己
            }

            //只有两种情况下不需要换行:
            //1. 父节点 -- 子, 孙,重孙
            //2. 父节点 -- 子,子,子,子
            else if (children.Count <= 1) //情况1:
            {
                //只有一列子孙节点,所有都是独生子
                ret = 1;
                GUTag tmp = tag;
                for (int i = level; i < maxlevel; i++)
                {
                    children = db.QueryTagChildren(tmp);
                    if (children.Count > 1)
                    {
                        ret = -1;
                        break;
                    }
                    else if (children.Count == 0)
                    {
                        ret++;
                        break;
                    }
                    else if (children.Count == 1)
                    {
                        tmp = children[0];
                        ret++;
                    }
                }
                return(ret);
            }
            else
            {
                //情况2:只有一层子节点,所有子节点都是叶子(显示为子,子,子,子)
                ret = children.Count;
                foreach (GUTag ctag in children)
                {
                    if (db.QueryChildrenCount(ctag) > 0) //有子节点非叶子,并且自己子节点数量>1,表示不能在一行内显示
                    {
                        ret = -1;
                    }
                }
            }

            Logger.D("GetTagTreeWidth : {0} {1}", tag.ToString(), ret);
            return(ret);
        }
Ejemplo n.º 13
0
 public void Add(GUTag tag, GTagBoxTree obj)
 {
     //if (null == Get(tag))
     //{
     //    all.Add(tag, obj);
     //}
     all.Add(obj);
 }
Ejemplo n.º 14
0
 public override void Layout(ITagDB db, GUTag tag, Size size, TreeLayoutEnv env)
 {
     oriSize = size;
     env.Reset();
     tags    = new List <TagBox>();
     this.db = db;
     root    = GTagBoxTree.ExpandNode(tag, 0, db, 0, 0, 1, oriSize, env, myLayoutMode);
     tags    = env.GetAllTagBox();
     lines   = env.GetAllLines().Cast <UIElement>();
 }
Ejemplo n.º 15
0
        private void ShowRootPath()
        {
            //如果配置不需要显示,则直接返回
            if (!NeedShowRootPath())
            {
                return;
            }
            if (RootTag == null)
            {
                return;
            }

            connectCanvas.Children.Clear();

            //需要显示从全局根到当前视图根节点之间的路径
            //查找出所有从当前视图根节点到全局根节点之间的中间节点
            List <GUTag> connect = new List <GUTag>();
            GUTag        from    = RootTag;
            GUTag        tmp     = from;

            connect.Add(from);
            while (connect.Count < 20 && tmp != null)
            {
                List <GUTag> ps = TagDB.QueryTagParent(tmp);
                if (ps.Count > 0)
                {
                    tmp = ps[0];
                    connect.Add(tmp);
                }
                else
                {
                    break;
                }
            }
            connect.Reverse();

            //显示所有中间节点
            double X = 0;

            foreach (GUTag u in connect)
            {
                GTagBox gt = new GTagBox(5, u, X, 0, 1);
                TagBox  tx = UIElementFactory.CreateTagBox(gt, null);
                tx.HideCircle();

                X += gt.OutterBox.Width;
                if (tx.ContextMenu == null)
                {
                    tx.ContextMenu          = TagAreaMenu;
                    tx.MouseLeftButtonDown += Tag_MouseLeftButtonDown;
                    tx.MouseDoubleClick    += Tag_MouseDoubleClick;
                }
                connectCanvas.Children.Add(tx);
            }
        }
Ejemplo n.º 16
0
 private void SaveRootTag(GUTag rootTag)
 {
     if (MyCanvasType == LayoutCanvas.MAIN_CANVAS)
     {
         DynamicCfg.Ins.MainCanvasRoot = (rootTag.ToString());
     }
     else
     {
         DynamicCfg.Ins.SubCanvasRoot = (rootTag.ToString());
     }
 }
Ejemplo n.º 17
0
        public void SelectedTagChanged_Callback(GUTag tag)
        {
            SearchBox.Text = tag.Title;
            //现在自己的这个richtextbox非常不好用,将其暂时废除,除非有一个好用的再说
            string uri = CfgPath.GetFileByTag(tag.Title, "note.rtf"); //uri可能不存在

            richTxt.Load(uri);
            ShowUrlListByText();
            //修改text后,会自动触发 TextBox_TextChanged
            //进一步触发             ShowUrlListByText
        }
Ejemplo n.º 18
0
        public TagBox ChangeSelectd(GUTag tag)
        {
            DbgShowTagBox();
            TagBox target = FindTagBox(tag);

            if (target != null)
            {
                SetCurrentTag(tag);
            }
            return(target);
        }
Ejemplo n.º 19
0
        public void ITagDB_Test_AddBase()//简单添加
        {
            GUTag p  = db.NewTag("p");
            GUTag c1 = db.NewTag("c1");

            db.SetParent(p, c1);

            List <GUTag> c = db.QueryTagChildren(p);

            Assert.AreEqual(1, c.Count);
            Assert.AreEqual("c1", c[0].Title);
        }
Ejemplo n.º 20
0
 public void ChangeRoot(GUTag root, GUTag sub, GUTag subsel)
 {
     if (root != null)
     {
         MainCanvas.ChangeRoot(root, sub);
     }
     if (sub != null)
     {
         MainCanvas.ClearSelected();
         SubCanvas.ChangeRoot(sub, subsel);
     }
 }
Ejemplo n.º 21
0
 private void TagEdit_TitleChanged(Canvas Parent, GUTag tag, string NewString)
 {
     if (canvas == Parent && tag != null && NewString != null)
     {
         tag = TagDB.ChangeTitle(tag, NewString);
         if (tag != null)
         {
             RedrawGraph();
             SetCurrentTag(tag, true);
         }
     }
 }
Ejemplo n.º 22
0
        public void emty()
        {
            Guid  id = Guid.NewGuid(), pid = Guid.NewGuid(), cid = Guid.NewGuid();
            GUTag tag = new GUTag();

            tag.Id  = id;
            tag.PId = pid;
            tag.AddAlias("TITLE");
            tag.AddAlias("Alias");
            tag.AddChild(cid);

            db.AddUptSqlDB(tag);
        }
Ejemplo n.º 23
0
        private bool Match(TagBox t, AutoCompleteTipsItem aItem)
        {
            GUTag tag = aItem.Data as GUTag;

            if (tag != null)
            {
                return(tag == t.GUTag);
            }
            else
            {
                return(t.Text == aItem.Content);
            }
        }
Ejemplo n.º 24
0
        private void ComplateEdit()
        {
            if (!IsVisible)
            {
                return;
            }

            //合法性检查
            string err = CfgPath.CheckTagFormat(Edit.Text);

            if (err != null)
            {
                MessageBox.Show(err, "标签不合法,请重新输入", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }


            //第一步,先将编辑器隐藏起来,否则后面有TextChangedCallback导致业务流程处理后,
            //会有很多意想不到的流程发生,导致多次递归调用本函数(HideEdit)。
            //比如:HideEdit=>lostfocus=>HideEdit
            GUTag  tag       = NoEdit.GUTag;
            string oldTitle  = NoEdit.Text;
            string newTitle  = Edit.Text;
            Canvas parentBak = Parent;



            //将这两个置空,表示该编辑器不可见了(IsVisible = false)。
            Parent = null;
            NoEdit = null;

            try
            {
                //隐藏编辑框
                parentBak.Children.Remove(Edit);
                System.Diagnostics.Debug.WriteLine("HideFloat1");

                //如果文本内容发生修改,通知观察者

                if (oldTitle != newTitle && oldTitle != null && newTitle != null)
                {
                    TextChangedCallback?.Invoke(parentBak, tag, newTitle);
                    System.Diagnostics.Debug.WriteLine("HideFloat2");
                }
            }
            finally
            {
                parentBak?.Focus();   //因为编辑框失去焦点时会有相应的处理,所以这儿设置焦点的处理必须放在所有处理完成之后
                //否则可能形成递归调用
            }
        }
Ejemplo n.º 25
0
 //当根节点或选中节点变化时,需要保存下来,以便程序重启后能恢复重启前的状态
 public void ChangeRoot(GUTag aRoot, GUTag aSelect)
 {
     if (aRoot != null)
     {
         SaveRootTag(aRoot);
     }
     else
     {
         aRoot = LoadRootTag();
     }
     RootTag = aRoot;
     SetCurrentTag(aSelect == null ? aRoot : aSelect);
     RedrawGraph();
     ShowRootPath();
 }
Ejemplo n.º 26
0
        public void SearchByTxt(AutoCompleteTipsItem aItem)
        {
            //先在main中查找,如果有,切换焦点后返回
            if (MainCanvas.ChangeSelectedByTxt(aItem) != null)
            {
                return;
            }
            //再在sub中查找,如果有,切换焦点后返回
            if (SubCanvas.ChangeSelectedByTxt(aItem) != null)
            {
                MainCanvas.ClearSelected();
                return;
            }

            //如果item精确对应到一个GUTag,直接使用该GUTag
            GUTag tag = aItem.Data as GUTag;

            if (tag == null)
            {
                List <GUTag> tags = TagDB.QueryTags(aItem.Content);
                if (tags.Count > 0)
                {
                    tag = tags[0];
                }
            }

            //如果不在视图中,但数据库中存在,TODO:如何有效的切换??是一个需要考虑的问题
            if (tag != null)
            {
                GUTag        mainRoot = TagDB.GetTag(StaticCfg.Ins.DefaultTagID);
                GUTag        subRoot  = mainRoot;
                GUTag        subSel   = subRoot;
                List <GUTag> parents  = QueryParentHistory(tag);
                int          cnt      = parents.Count;
                if (cnt > 0)
                {
                    subSel   = parents[0];
                    subRoot  = parents[Math.Min(3, cnt - 1)];
                    mainRoot = parents[Math.Min(6, cnt - 1)];
                }

                ChangeRoot(mainRoot, subRoot, subSel);
            }
            //不存在精确匹配的tag
            else
            {
            }
        }
Ejemplo n.º 27
0
        public void ITagDB_Test_AddDel()//添加后删除
        {
            GUTag p  = db.NewTag("p");
            GUTag c1 = db.NewTag("c1");

            db.SetParent(p, c1);

            List <string> a = db.QueryTagAlias(p);

            Assert.AreEqual(1, a.Count);
            Assert.AreEqual("p", a[0]);

            db.RemoveTag(p);
            a = db.QueryTagAlias(p);
            Assert.AreEqual(0, a.Count);
        }
Ejemplo n.º 28
0
        private void UpdateSelectedStatus(GUTag tag, TagBox.Status stat)
        {
            foreach (UIElement u in allTagBox)
            {
                TagBox tb = u as TagBox;

                if (tb != null)
                {
                    tb.Stat = TagBox.Status.None;
                    if (tb.GUTag == tag)
                    {
                        tb.Stat = stat;
                    }
                }
            }
        }
Ejemplo n.º 29
0
 private TagBox FindTagBox(GUTag tag)
 {
     foreach (UIElement u in allTagBox)//此处不能在Canvas.Children中查找,因为为了性能做了特殊优化,一些不可见的tagbox仍然存在于Canvas.Children中。
     {
         TagBox t = u as TagBox;
         if (t != null)
         {
             if (t.GUTag == tag)
             {
                 Logger.D("FindTagBox:{0} - POS:{1}-{2}", tag, t.Margin.Left, t.Margin.Top);
                 return(t);
             }
         }
     }
     return(null);
 }
Ejemplo n.º 30
0
        public void ITagDB_Test_AliasAddAndQuery()
        {
            GUTag p1 = db.NewTag("p1");
            GUTag p2 = db.NewTag("p2");

            db.MergeAlias(p1, p2);
            List <string> alias = db.QueryTagAlias(p1);

            Assert.AreEqual(2, alias.Count);
            Assert.AreEqual(true, alias.Contains("p1"));
            Assert.AreEqual(true, alias.Contains("p2"));

            alias = db.QueryTagAlias(p2);
            Assert.AreEqual(0, alias.Count);
            //Assert.AreEqual(true, alias.Contains("p1"));
            //Assert.AreEqual(true, alias.Contains("p2"));
        }