Beispiel #1
0
        private FileListView <TableData> CreateListView()
        {
            var listview = new FileListView <TableData>();

            listview.Name             = "listview";
            listview.HideSelection    = false;
            listview.View             = View.Details;
            listview.FullRowSelect    = true;
            listview.ContextMenuStrip = ListViewContextMenu;
            listview.Dock             = DockStyle.Fill;

            ColumnHeader headerName = new ColumnHeader();

            headerName.Name = "name";
            headerName.Text = "name";
            listview.Columns.Add(headerName);

            ColumnHeader headerSize = new ColumnHeader();

            headerSize.Name = "size";
            headerSize.Text = "size";
            listview.Columns.Add(headerSize);

            ColumnHeader headerExt = new ColumnHeader();

            headerExt.Name = "ext";
            headerExt.Text = "ext";
            listview.Columns.Add(headerExt);

            ColumnHeader headerTags = new ColumnHeader();

            headerTags.Name = "tags";
            headerTags.Text = "tags";
            listview.Columns.Add(headerTags);

            ColumnHeader headerComment = new ColumnHeader();

            headerComment.Name = "comment";
            headerComment.Text = "comment";
            listview.Columns.Add(headerComment);

            ColumnHeader headerCreationTime = new ColumnHeader();

            headerCreationTime.Name = "creationtime";
            headerCreationTime.Text = "creationtime";
            listview.Columns.Add(headerCreationTime);

            ColumnHeader headerLastWriteTime = new ColumnHeader();

            headerLastWriteTime.Name = "lastwritetime";
            headerLastWriteTime.Text = "lastwritetime";
            listview.Columns.Add(headerLastWriteTime);

            listview.LabelFunc = (data, name) => {
                string ret = string.Empty;
                switch (name)
                {
                case "name":
                    ret = data.name;
                    break;

                case "ext":
                    ret = data.ext;
                    break;

                case "size":
                    ret = data.size.ToString();
                    break;

                case "tags":
                    ret = data.TagsToString();
                    break;

                case "comment":
                    ret = data.comment;
                    break;

                case "creationtime":
                    ret = data.creationtime.ToString("yyyy/MM/dd HH:mm:ss");
                    break;

                case "lastwritetime":
                    ret = data.lastwritetime.ToString("yyyy/MM/dd HH:mm:ss");
                    break;
                }
                return(ret);
            };

            listview.ItemSelectionChanged += (sender, e) =>
            {
                if (listview.mySel.Count > 0)
                {
                    selectedIndexQueue.Enqueue(listview.mySel[0]);
                    if (selectedIndexQueue.Count > 2)
                    {
                        selectedIndexQueue.Dequeue();
                    }

                    ListViewItem item = listview.myCol[listview.mySel[0]];
                    detailview.Data = listview.getData(item);
                }
            };

            listview.listViewItemComparer.SortFunc = (x, y, columindex) => {
                int    result    = 0;
                string columname = listview.Columns[columindex].Name;
                switch (columname)
                {
                case "name":
                    result = string.Compare(x.name, y.name);
                    break;

                case "size":
                    result = x.size - y.size > 0?1:-1;
                    break;

                case "ext":
                    result = string.Compare(x.ext, y.ext);
                    break;

                case "comment":
                    result = string.Compare(x.comment, y.comment);
                    break;

                //case "tags":
                //    result = string.Compare(x.tags, y.tags);
                //    break;
                case "creationtime":
                    result = DateTime.Compare(x.creationtime, y.creationtime);
                    break;

                case "lastwritetime":
                    result = DateTime.Compare(x.lastwritetime, y.lastwritetime);
                    break;
                }
                return(result);
            };



            return(listview);
        }
Beispiel #2
0
        private void TagTreeView_MouseDown(object sender, MouseEventArgs e)
        {
            var      pt = new Point(e.X, e.Y);
            TreeNode DestinationNode = ((TreeView)sender).GetNodeAt(pt);

            ((TreeView)sender).SelectedNode = DestinationNode;

            TreeNode selnode = ((TreeView)sender).SelectedNode;

            if (selnode != null && selnode.Tag != null)
            {
                if (e.Button == MouseButtons.Left)
                {
                    var selecttag = (string)selnode.Tag;
                    var listview  = getActiveListView();
                    if (listview == null)
                    {
                        var tabpage = OpenNewTab(selecttag);
                        listview = tabListviewMap[tabpage];

                        //FileListView<TableData> filelistview = listview as FileListView<TableData>;
                        //filelistview.inputData(datas);
                        //filelistview.setitem();
                        //OpenNewTab(tagdb.selectFileData(new string[] { (string)selnode.Tag }), (string)selnode.Tag);
                    }
                    else
                    {
                        getTabControl().SelectedTab.Text = selecttag;

                        //getTabControl().SelectedTab.Text = (string)selnode.Tag;
                        //listview.Items.Clear();
                        //UpdateListView(listview, tagdb.selectFileData(new string[] { (string)selnode.Tag }));
                    }

                    var datas = new List <TableData>();
                    using (FileDataModelContainer db = new FileDataModelContainer()) {
                        //db.FileTable.Where(c => c.ext == "ok").Select(s => s);
                        var query = from c in db.FileTable
                                    where c.TagTable.Any(t => t.tag.Contains(selecttag))
                                    select c;
                        foreach (FileTable f in query)
                        {
                            string stag = String.Empty;

                            var tagquery = from c in db.TagTable
                                           where c.FileTable.filetableid == f.filetableid
                                           select c.tag;

                            datas.Add(new TableData(f.guid, f.name, f.size, f.ext, tagquery.ToList <string>(), f.comment, f.creationtime, f.lastwritetime));
                        }
                    }

                    FileListView <TableData> filelistview = listview as FileListView <TableData>;
                    filelistview.inputData(datas);
                    filelistview.setitem();
                }
                else if (e.Button == MouseButtons.Middle)
                {
                    //OpenNewTab(tagdb.selectFileData(new string[] { (string)selnode.Tag }), (string)selnode.Tag);
                }
            }
        }
Beispiel #3
0
        public MainForm()
        {
            InitializeComponent();

            setDetailView();

            AddTagMenuItem.Click += (sender, e) =>
            {
                InputForm    input = new InputForm();
                DialogResult res   = input.ShowDialog(this);
                if (res == DialogResult.OK)
                {
                    string tag = input.input;
                    if (tag.Length > 0)
                    {
                        //tagdb.insertTag(new string[] { input.input });
                        //IEnumerable<string> newtags = insertTags(new string[] { input.input });
                        string[] newtags = tag.Split(' ');
                        foreach (string newtag in newtags)
                        {
                            TreeNode tagnode = TagTreeView.Nodes["TagNode"].Nodes.Add(newtag);
                            tagnode.Tag = newtag;
                        }
                    }
                }
            };

            ToolStripMenuItem openfolder = new ToolStripMenuItem("open folder");

            openfolder.Click += (sender, e) => {
                var listview = getActiveListView() as FileListView <TableData>;
                var datas    = listview.getSelectItemData();
                if (datas.Count() > 0)
                {
                    string guid = datas.ElementAt(0).guid;
                    string path = Win32.getFullPathByObjectID(Win32.FILEGUID.parse(guid));

                    //ProcessStartInfo psi = new ProcessStartInfo();

                    //FileInfo info = new FileInfo(path);
                    //psi.FileName = info.Directory.FullName;
                    //psi.Verb = "open";
                    //System.Diagnostics.Process.Start(psi);
                    System.Diagnostics.Process.Start("EXPLORER.EXE", @"/select," + path);
                }
            };
            ListViewContextMenu.Items.Add(openfolder);

            ToolStripMenuItem openitem = new ToolStripMenuItem("open");

            openitem.Click += (sender, e) =>
            {
                var listview = getActiveListView() as FileListView <TableData>;
                var datas    = listview.getSelectItemData();
                if (datas.Count() > 0)
                {
                    string guid = datas.ElementAt(0).guid;
                    string path = Win32.getFullPathByObjectID(Win32.FILEGUID.parse(guid));
                    System.Diagnostics.Process.Start("Notepad", path);
                }
            };
            ListViewContextMenu.Items.Add(openitem);

            //tagdb.Connection();
            //tagdb.createTable();

            //sqlitewrap.Connection();
            createTable();

            //string[] tags = tagdb.getAllTags();
            IEnumerable <string> tags = getAllTags();
            TreeNode             node = TagTreeView.Nodes["TagNode"];

            foreach (string tag in tags)
            {
                TreeNode tagnode = node.Nodes.Add(tag);
                tagnode.Tag = tag;
            }

            getTabControl().Selecting += (sender, e) =>
            {
                if (tabListviewMap.ContainsKey(e.TabPage))
                {
                    ListViewPanel.Controls.Remove(tabListviewMap[e.TabPage]);
                }
            };

            getTabControl().Selected += (sender, e) =>
            {
                var control = ListViewPanel.Controls[0];
                if (control != null)
                {
                    ListViewPanel.Controls.Remove(control);
                }

                if (tabListviewMap.ContainsKey(e.TabPage))
                {
                    ListViewPanel.Controls.Add(tabListviewMap[e.TabPage]);
                }
            };

            SearchComboBox.KeyPress += (sender, e) =>
            {
                if (e.KeyChar == '\r')
                {
                    e.Handled = true;
                    string text = SearchComboBox.Text;

                    var tabpage  = OpenNewTab(text);
                    var listview = tabListviewMap[tabpage];
                    if (text.IndexOf(",") == -1)
                    {
                        var values = text.Split(' ', ' ');

                        var datas = new List <TableData>();

                        using (FileDataModelContainer db = new FileDataModelContainer()) {
                            //db.FileTable.Where(c => c.ext == "ok").Select(s => s);
                            //var query = from c in db.FileTable
                            //            where c.comment.Contains(text) || c.name.Contains(text) || c.TagTable.Any(t => t.tag.Contains(text))
                            //            select c;
                            //foreach (FileTable f in query) {
                            //    string stag = String.Empty;

                            //    var tagquery = from c in db.TagTable
                            //                   where c.FileTable.filetableid == f.filetableid
                            //                   select c.tag;

                            //    datas.Add(new TableData(f.guid, f.name, f.size, f.ext, tagquery.ToList<string>(), f.comment, f.creationtime, f.lastwritetime));
                            //}
                            string[] targets = { "name", "comment", "ext" };
                            var      query   = from c in db.FileTable
                                               select c;
                            var        contains  = typeof(string).GetMethod("Contains");
                            var        paramExpr = Expression.Parameter(typeof(FileTable), "c");
                            Expression mainExpr  = null;

                            foreach (string target in targets)
                            {
                                Expression bodyExpr = null;
                                foreach (var o in values)
                                {
                                    if (o.Length == 0)
                                    {
                                        continue;
                                    }

                                    if (bodyExpr == null)
                                    {
                                        // d.FileName.Contains("値")のコードと等価
                                        bodyExpr = Expression.Call(
                                            Expression.Property(paramExpr, target), contains, Expression.Constant(o)
                                            );
                                    }
                                    else
                                    {
                                        // 既に式があればOR演算する
                                        bodyExpr = Expression.AndAlso(
                                            bodyExpr,
                                            Expression.Call(
                                                Expression.Property(paramExpr, target), contains, Expression.Constant(o)
                                                )
                                            );
                                    }
                                }
                                if (mainExpr == null)
                                {
                                    mainExpr = bodyExpr;
                                }
                                else
                                {
                                    mainExpr = Expression.OrElse(mainExpr, bodyExpr);
                                }
                            }

                            if (values.Length != 0)
                            {
                                var res = query.Where(Expression.Lambda <Func <FileTable, bool> >(mainExpr, paramExpr));

                                foreach (FileTable f in res)
                                {
                                    string stag = String.Empty;

                                    var tagquery = from c in db.TagTable
                                                   where c.FileTable.filetableid == f.filetableid
                                                   select c.tag;

                                    datas.Add(new TableData(f.guid, f.name, f.size, f.ext, tagquery.ToList <string>(), f.comment, f.creationtime, f.lastwritetime));
                                }
                            }
                        }

                        FileListView <TableData> filelistview = listview as FileListView <TableData>;
                        filelistview.inputData(datas);
                        filelistview.setitem();
                    }
                    else
                    {
                        string[] strs = text.Split(',');
                    }
                    //OpenNewTab();
                }
            };
        }