private void TaskBackgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) { if (e.UserState is AddBrowsingItemTask) { AddBrowsingItemTask task = e.UserState as AddBrowsingItemTask; if (browsingTreeView.Visible) { if (browsingFilter.ShouldFilter(new KeyValuePair <string, BrowsingItem>(task.Uri, task.Item))) { browsingTreeView.AddItem(task.Uri, task.Item); } } } else if (e.UserState is AddBookmarkItemTask) { AddBookmarkItemTask task = e.UserState as AddBookmarkItemTask; if (bookmarksTreeView.Visible) { if (bookmarksFilter.ShouldFilter(task.Item)) { bookmarksTreeView.AddItem(task.Path, task.Item); } } } }
private void TreeView_NodeActivated(object sender, TreeViewExEventArgs e) { AddBookmarkItemTask item = e.Node.Tag as AddBookmarkItemTask; BookmarkFolder folder = e.Node.Tag as BookmarkFolder; if (item != null) { SearchHandler.ParseAndExecuteSearchText(item.Item.Value); } else if (folder != null) { if (e.Action == TreeViewAction.ByKeyboard) { e.Node.ToggleCollapse(); } } }
private void ItemContentNodeContextMenu_Popup(object sender, EventArgs e) { ContextMenu contextMenu = sender as ContextMenu; TreeNode treeNode = contextMenu.Tag as TreeNode; AddBookmarkItemTask item = treeNode.Tag as AddBookmarkItemTask; contextMenu.MenuItems.Clear(); if (item != null) { string[] tokens = item.Item.Value.Split(new char[] { ':' }); int galleryId; int pageIndex; string query; int tagId; string tagType; string tagName; if (QueryParser.ParseDetailsSearch(tokens, out galleryId)) { contextMenu.MenuItems.Add(new MenuItem("&Show Details", (sender2, e2) => { SearchHandler.ParseAndExecuteSearchText(item.Item.Value); })); contextMenu.MenuItems.Add("-"); contextMenu.MenuItems.Add(new MenuItem("&Read", (sender2, e2) => { CacheFileSystem.OpenFirstCachedPage(galleryId); })); contextMenu.MenuItems.Add(new MenuItem("&Browse", (sender2, e2) => { CacheFileSystem.SelectFirstCachedPage(galleryId); })); contextMenu.MenuItems.Add(new MenuItem("&Show in Explorer", (sender2, e2) => { CacheFileSystem.SelectPagesFolder(galleryId); })); } else if (QueryParser.ParseDownloadSearch(tokens, out galleryId)) { contextMenu.MenuItems.Add(new MenuItem("&Show Download", (sender2, e2) => { SearchHandler.ParseAndExecuteSearchText(item.Item.Value); })); contextMenu.MenuItems.Add("-"); contextMenu.MenuItems.Add(new MenuItem("&Read", (sender2, e2) => { CacheFileSystem.OpenFirstCachedPage(galleryId); })); contextMenu.MenuItems.Add(new MenuItem("&Browse", (sender2, e2) => { CacheFileSystem.SelectFirstCachedPage(galleryId); })); contextMenu.MenuItems.Add(new MenuItem("&Show in Explorer", (sender2, e2) => { CacheFileSystem.SelectPagesFolder(galleryId); })); } else if (QueryParser.ParseRecentSearch(tokens, out pageIndex)) { contextMenu.MenuItems.Add(new MenuItem("&Recent Search", (sender2, e2) => { SearchHandler.ParseAndExecuteSearchText(item.Item.Value); })); } else if (QueryParser.ParseQuerySearch(tokens, out query, out pageIndex)) { contextMenu.MenuItems.Add(new MenuItem("&Query Search", (sender2, e2) => { SearchHandler.ParseAndExecuteSearchText(item.Item.Value); })); } else if (QueryParser.ParseTaggedSearch(tokens, out tagId, out tagType, out tagName, out pageIndex)) { contextMenu.MenuItems.Add(new MenuItem("&Tagged Search", (sender2, e2) => { SearchHandler.ParseAndExecuteSearchText(item.Item.Value); })); } else if (QueryParser.ParseLibrarySearch(tokens, out pageIndex)) { contextMenu.MenuItems.Add(new MenuItem("&Show in Library", (sender2, e2) => { SearchHandler.ParseAndExecuteSearchText(item.Item.Value); })); } contextMenu.MenuItems.Add("-"); contextMenu.MenuItems.Add(new MenuItem("&Remove bookmark", (sender2, e2) => { WebBrowserToolTip.RemoveToolTip(treeNode); treeNode.Remove(); BookmarksModel.RemoveBookmark(item.Path); }) { Name = "remove" }); // TODO: "move to..." command (to change the bookmark path) } }
private bool CanDragTreeNodeOver(object sender, DragEventArgs e) { TreeView treeView = (TreeView)sender; TreeNode draggedNode = (TreeNode)e.Data.GetData(typeof(TreeNode)); Point targetPoint = treeView.PointToClient(new Point(e.X, e.Y)); TreeNode targetNode = treeView.GetNodeAt(targetPoint); if (draggedNode.Equals(targetNode)) { return(false); } BookmarkFolder draggedFolder = draggedNode.Tag as BookmarkFolder; AddBookmarkItemTask draggedBookmark = draggedNode.Tag as AddBookmarkItemTask; BookmarkFolder targetFolder = targetNode?.Tag as BookmarkFolder; AddBookmarkItemTask targetBookmark = targetNode?.Tag as AddBookmarkItemTask; if (draggedFolder != null) { string targetPath = null; if (targetFolder != null) { targetPath = targetFolder.Path; } else if (targetBookmark != null) { return(false); } else { targetPath = ""; } if (targetPath != null) { // can't move folder onto itself. if (draggedFolder.Path.Equals(targetPath, StringComparison.InvariantCulture)) { return(false); } // can't move folder to any of its own child subfolders. if (!string.IsNullOrEmpty(targetPath) && targetPath.StartsWith(draggedFolder.Path, StringComparison.InvariantCulture)) { return(false); } int lastPathSeparatorIndex = draggedFolder.Path.LastIndexOf('/'); // can't move folder to its own parent folder. if (lastPathSeparatorIndex != -1 && !string.IsNullOrEmpty(targetPath) && draggedFolder.Path.Substring(0, lastPathSeparatorIndex).Equals(targetPath, StringComparison.InvariantCulture)) { return(false); } } } else if (draggedBookmark != null) { string targetPath = null; if (targetFolder != null) { targetPath = targetFolder.Path; } else if (targetBookmark != null) { return(false); } else { targetPath = ""; } if (targetPath != null) { // can't move bookmark to its own parent folder. if (draggedNode.Level > 0 && !string.IsNullOrEmpty(targetPath) && draggedBookmark.Path.Substring(0, draggedBookmark.Path.LastIndexOf('/')).Equals(targetPath, StringComparison.InvariantCulture)) { return(false); } string combinedTargetPath = string.IsNullOrEmpty(targetPath) ? draggedBookmark.Item.Value : string.Format("{0}/{1}", targetPath, draggedBookmark.Item.Value); // can't move bookmark to a folder containing the same bookmark value. if (BookmarksModel.Bookmarks.ContainsKey(combinedTargetPath)) { return(false); } } } return(true); }
private void TreeView_DragDropTreeNode(object sender, DragEventArgs e) { TreeView treeView = (TreeView)sender; TreeNode draggedNode = (TreeNode)e.Data.GetData(typeof(TreeNode)); Point targetPoint = treeView.PointToClient(new Point(e.X, e.Y)); TreeNode targetNode = treeView.GetNodeAt(targetPoint); if (draggedNode.Equals(targetNode)) { return; } BookmarkFolder draggedFolder = draggedNode.Tag as BookmarkFolder; AddBookmarkItemTask draggedBookmark = draggedNode.Tag as AddBookmarkItemTask; BookmarkFolder targetFolder = targetNode?.Tag as BookmarkFolder; AddBookmarkItemTask targetBookmark = targetNode?.Tag as AddBookmarkItemTask; if (draggedFolder != null) { string targetPath = null; if (targetFolder != null) { targetPath = targetFolder.Path; } else if (targetBookmark != null) { // Error: dropping a folder on a bookmark is not allowed. } else { targetPath = ""; } if (targetPath != null) { if (e.Effect.HasFlag(DragDropEffects.Copy)) { BookmarksModel.CopyBookmarks(draggedNode.Level, draggedFolder.Path, targetPath); } else if (e.Effect.HasFlag(DragDropEffects.Move)) { BookmarksModel.MoveBookmarks(draggedNode.Level, draggedFolder.Path, targetPath); BookmarksModel.RemovePath(draggedFolder.Path); draggedNode.Remove(); } } } else if (draggedBookmark != null) { string targetPath = null; if (targetFolder != null) { targetPath = targetFolder.Path; } else if (targetBookmark != null) { // Error: dropping a bookmark on another bookmark is not allowed. } else { targetPath = ""; } if (targetPath != null) { if (e.Effect.HasFlag(DragDropEffects.Copy)) { BookmarksModel.CopyBookmark(draggedBookmark.Path, targetPath); } else if (e.Effect.HasFlag(DragDropEffects.Move)) { BookmarksModel.MoveBookmark(draggedBookmark.Path, targetPath); draggedNode.Remove(); } } } }