예제 #1
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();
            }
        }
예제 #2
0
        public static GUTag Parse(string strGutag, ITagDB db)
        {
            Guid id = Guid.Empty;

            if (strGutag.IndexOf(SplitToken) != -1)
            {
                string sID = strGutag.Split(SplitToken)[0];
                id = Guid.Parse(sID);
            }
            return(db.GetTag(id));
        }
예제 #3
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
            {
            }
        }