Example #1
0
        private void LoadTree()
        {
            FolderEntityIndex rootFolder = new FolderEntityIndex(new WindowFolderEntity()
            {
                Id   = String.Empty,
                Name = Language.Current.ExplorerView_RootFolder
            });

            rootFolder.Items = _windowArchive.GetIndexList();

            _navigationTreeController.DataBind(rootFolder);
        }
        private void InitCommands()
        {
            #region Commands

            _addFolderCommand = new AddFolderCommand()
            {
                GetArgumentHandler = () =>
                {
                    FolderEntityIndex folderEntityIndex = _currentFolder;
                    return(folderEntityIndex.Folder);
                }
            };

            _addWindowCommand = new AddWindowCommand()
            {
                CanExcuteHandler = () =>
                {
                    return(_currentFolder != null);
                },
                GetArgumentHandler = () =>
                {
                    FolderEntityIndex folderEntityIndex = _currentFolder;
                    return(folderEntityIndex.Folder);
                }
            };

            _editCommand = new EditCommand()
            {
                CanExcuteHandler = () =>
                {
                    return(_controller.SelectedItemsCount == 1);
                },
                GetArgumentHandler = () =>
                {
                    return(_controller.GetSelectedItem <IEntityIndex>());
                }
            };

            _deleteCommand = new DeleteCommand()
            {
                CanExcuteHandler = () =>
                {
                    return(_controller.SelectedItemsCount > 0);
                },
                GetArgumentHandler = () =>
                {
                    return(_controller.GetSelectedItems <IEntityIndex>());
                }
            };

            #endregion
        }
        /// <summary>
        /// 绑定数据
        /// currentType 表示当前列表中显示的数据的类型,这个不能从contextData上取,因为contextData可能是个ToolStripItemFolder之类
        /// listType是当前显示的list中的数据的类型
        /// contextData是list所属对象(当前列表中的文件夹,窗体的父级文件夹)
        /// </summary>
        /// <param name="list"></param>
        /// <param name="type"></param>
        /// <param name="contextData"></param>
        public void DataBind(Type dataType, IList list, Type listType, object contextData)
        {
            //目前,还有可能是 WindowEntityIndex
            if (contextData is FolderEntityIndex)
            {
                _currentFolder = (FolderEntityIndex)contextData;
            }
            else
            {
                _currentFolder = null;
            }

            _controller.DataBind(list, listType, contextData);
        }
Example #4
0
        private void dataGridViewForms_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (e.RowIndex < 0)
            {
                return;
            }
            IEntityIndex entityIndex = (IEntityIndex)dataGridViewForms.SelectedRows[0].DataBoundItem;

            if (entityIndex is FolderEntityIndex)
            {
                FolderEntityIndex folderIndex = (FolderEntityIndex)entityIndex;
                this.Folder = folderIndex.Folder;
            }
        }
        //此处需要把Folder封装在Index里面了
        /// <summary>
        /// 获取指定目录下的目录和窗体的Index集合
        /// 如果folderId为空串,则从根目录获取
        /// 目录将进行递归,将获取所有子目录下的目录和窗体
        /// </summary>
        /// <param name="folderId"></param>
        /// <returns></returns>
        public List <IEntityIndex> GetIndexList(string folderId)
        {
            List <IEntityIndex> list = new List <IEntityIndex>();

            foreach (XElement element in _indexXml.XPathSelectElements(
                         String.Format(XPATH_Index_SelectFolder_ByParentId, folderId)))
            {
                FolderEntityIndex entity = new FolderEntityIndex();
                entity.FromXml(element.ToString());
                entity.Items = GetIndexList(entity.Id);
                list.Add(entity);
            }

            list.AddRange(GetWindowIndexList(folderId));

            return(list);
        }
 /// <summary>
 /// 清除列,数据源,上下文相关数据
 /// </summary>
 public void Clear()
 {
     _controller.Clear();
     _currentFolder = null;
 }
Example #7
0
        private void InitCommands()
        {
            #region Commands

            _addFolderCommand = new AddFolderCommand()
            {
                GetArgumentHandler = () =>
                {
                    FolderEntityIndex folderEntityIndex =
                        _navigationTreeController.GetSelectedData <FolderEntityIndex>(true);
                    return(folderEntityIndex.Folder);
                }
            };
            _editFolderCommand = new EditFolderCommand()
            {
                CanExcuteHandler = () =>
                {
                    return(_navigationTreeController.GetSelectedData <FolderEntityIndex>() != null);
                },
                GetArgumentHandler = () =>
                {
                    FolderEntityIndex folderEntityIndex =
                        _navigationTreeController.GetSelectedData <FolderEntityIndex>(true);
                    return(folderEntityIndex.Folder);
                }
            };
            _deleteFolderCommand = new DeleteFolderCommand()
            {
                CanExcuteHandler = () =>
                {
                    return(_navigationTreeController.GetSelectedData <FolderEntityIndex>() != null);
                },
                GetArgumentHandler = () =>
                {
                    FolderEntityIndex folderEntityIndex =
                        _navigationTreeController.GetSelectedData <FolderEntityIndex>(true);
                    return(new List <WindowFolderEntity>()
                    {
                        folderEntityIndex.Folder
                    });
                }
            };

            _addWindowCommand = new  AddWindowCommand()
            {
                CanExcuteHandler = () =>
                {
                    return(_navigationTreeController.GetSelectedData <FolderEntityIndex>(true) != null);
                },
                GetArgumentHandler = () =>
                {
                    FolderEntityIndex folderEntityIndex =
                        _navigationTreeController.GetSelectedData <FolderEntityIndex>(true);
                    return(folderEntityIndex.Folder);
                }
            };
            _editWindowCommand = new EditWindowCommand()
            {
                CanExcuteHandler = () =>
                {
                    return(_navigationTreeController.GetSelectedData <WindowEntityIndex>() != null);
                },
                GetArgumentHandler = () =>
                {
                    WindowEntityIndex windowEntityIndex =
                        _navigationTreeController.GetSelectedData <WindowEntityIndex>();
                    return(windowEntityIndex.Window);
                }
            };
            _deleteWindowCommand = new DeleteWindowCommand()
            {
                CanExcuteHandler = () =>
                {
                    return(_navigationTreeController.GetSelectedData <WindowEntityIndex>() != null);
                },
                GetArgumentHandler = () =>
                {
                    WindowEntityIndex windowEntityIndex =
                        _navigationTreeController.GetSelectedData <WindowEntityIndex>();
                    return(new List <WindowEntity>()
                    {
                        windowEntityIndex.Window
                    });
                }
            };

            #endregion
        }
Example #8
0
        private void SubscribeEvent()
        {
            //订阅数据实体的增删改事件,以更新呈现

            SubscriptionToken windowFolderAddedEventToken =
                _eventAggregator.GetEvent <WindowFolderAddedEvent>().Subscribe((e) =>
            {
                _navigationTreeController.Add(new FolderEntityIndex(e.Folder), (node) =>
                {
                    if (node.Codon.DataBoundType == typeof(FolderEntityIndex))
                    {
                        FolderEntityIndex folderEntityIndex = (FolderEntityIndex)node.DataBoundItem;
                        return(folderEntityIndex.Id == e.Folder.Parent);
                    }
                    else
                    {
                        return(false);
                    }
                });

                //发出添加了文件夹或窗体的事件通知
                OnNodeAdded();
            });
            SubscriptionToken windowFolderRemovedEventToken =
                _eventAggregator.GetEvent <WindowFolderRemovedEvent>().Subscribe((e) =>
            {
                _navigationTreeController.Remove(
                    (node) =>
                {
                    if (node.Codon.DataBoundType == typeof(FolderEntityIndex))
                    {
                        FolderEntityIndex folderEntityIndex = (FolderEntityIndex)node.DataBoundItem;
                        return(folderEntityIndex.Id == e.Folder.Id);
                    }
                    else
                    {
                        return(false);
                    }
                });
            });
            SubscriptionToken windowFolderUpdatedEventToken =
                _eventAggregator.GetEvent <WindowFolderUpdatedEvent>().Subscribe((e) =>
            {
                _navigationTreeController.Update((node) =>
                {
                    if (node.Codon.DataBoundType == typeof(FolderEntityIndex))
                    {
                        FolderEntityIndex folderEntityIndex = (FolderEntityIndex)node.DataBoundItem;
                        return(folderEntityIndex.Id == e.Folder.Id);
                    }
                    else
                    {
                        return(false);
                    }
                });
            });

            SubscriptionToken windowAddedEventToken =
                _eventAggregator.GetEvent <WindowAddedEvent>().Subscribe((e) =>
            {
                _navigationTreeController.Add(new WindowEntityIndex(e.Entity),
                                              (node) =>
                {
                    if (node.Codon.DataBoundType == typeof(FolderEntityIndex))
                    {
                        FolderEntityIndex folderEntityIndex = (FolderEntityIndex)node.DataBoundItem;
                        return(folderEntityIndex.Id == e.Entity.FolderId);
                    }
                    else
                    {
                        return(false);
                    }
                });

                //发出添加了文件夹或窗体的事件通知
                OnNodeAdded();
            });
            SubscriptionToken windowRemovedEventToken =
                _eventAggregator.GetEvent <WindowRemovedEvent>().Subscribe((e) =>
            {
                _navigationTreeController.Remove(
                    (node) =>
                {
                    if (node.Codon.DataBoundType == typeof(WindowEntityIndex))
                    {
                        WindowEntityIndex windowEntityIndex = (WindowEntityIndex)node.DataBoundItem;
                        return(windowEntityIndex.Id == e.Id);
                    }
                    else
                    {
                        return(false);
                    }
                });
            });
            SubscriptionToken windowUpdatedEventToken =
                _eventAggregator.GetEvent <WindowUpdatedEvent>().Subscribe((e) =>
            {
                _navigationTreeController.Update((node) =>
                {
                    if (node.Codon.DataBoundType == typeof(WindowEntityIndex))
                    {
                        WindowEntityIndex windowEntityIndex = (WindowEntityIndex)node.DataBoundItem;
                        return(windowEntityIndex.Id == e.Entity.Id);
                    }
                    else
                    {
                        return(false);
                    }
                });
            });

            this.Disposed += (sender, e) =>
            {
                _eventAggregator.GetEvent <WindowFolderAddedEvent>().Unsubscribe(windowFolderAddedEventToken);
                _eventAggregator.GetEvent <WindowFolderRemovedEvent>().Unsubscribe(windowFolderRemovedEventToken);
                _eventAggregator.GetEvent <WindowFolderUpdatedEvent>().Unsubscribe(windowFolderUpdatedEventToken);

                _eventAggregator.GetEvent <WindowAddedEvent>().Unsubscribe(windowAddedEventToken);
                _eventAggregator.GetEvent <WindowRemovedEvent>().Unsubscribe(windowRemovedEventToken);
                _eventAggregator.GetEvent <WindowUpdatedEvent>().Unsubscribe(windowUpdatedEventToken);
            };
        }
Example #9
0
        private void InitController()
        {
            _navigationTreeController = new TypeBinderTreeViewController(this.navigationTree);

            #region ImageList

            //节点的小图标ImageList
            ImageList _imageList = new ImageList();
            _imageList.Images.Add(IconsLibrary.Folder); //0
            _imageList.Images.Add(IconsLibrary.Form);   //1
            _navigationTreeController.ImageList = _imageList;

            #endregion

            #region Codon



            _navigationTreeController.AddNodeCodon(new TypeBinderTreeViewNodeCodon(
                                                       typeof(FolderEntityIndex), typeof(WindowEntityIndex),
                                                       FolderEntityIndex.Property_Name, FolderEntityIndex.Property_Items)
            {
                ImageIndex       = TreeImages.Folder,
                ContextMenuStrip = _treeMenuFolder.View
                                   //GetItemsFunc = (folderEntity) =>
                                   //{
                                   //    return WindowArchive.Instance.GetIndexList(((FolderEntityIndex)folderEntity).Id);
                                   //}
            });

            _navigationTreeController.AddNodeCodon(new TypeBinderTreeViewNodeCodon(
                                                       typeof(WindowEntityIndex), WindowEntityIndex.Property_Name)
            {
                ImageIndex       = TreeImages.Form,
                ContextMenuStrip = _treeMenuWindowEntity.View
            });

            #endregion

            _navigationTreeController.AfterSelect +=
                new TypeBinderTreeViewController.OnAfterSelectHandler(_navigationTreeController_AfterSelect);

            #region 处理拖放

            navigationTree.AllowDrop = true;

            navigationTree.CanDropFunc = (dragNode, dropNode) =>
            {
                //只有在放置节点为目录时,才允许放置
                ITypeBinderTreeViewNode binderDropNode = (ITypeBinderTreeViewNode)dropNode;
                if (binderDropNode.Codon.DataBoundType == typeof(FolderEntityIndex))
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            };

            navigationTree.DragDropAction = (dragNode, dropNode) =>
            {
                ITypeBinderTreeViewNode binderDragNode = (ITypeBinderTreeViewNode)dragNode;
                ITypeBinderTreeViewNode binderDropNode = (ITypeBinderTreeViewNode)dropNode;
                FolderEntityIndex       dropFolder     = (FolderEntityIndex)binderDropNode.DataBoundItem;

                if (binderDragNode.Codon.DataBoundType == typeof(FolderEntityIndex))
                {
                    FolderEntityIndex dragFolder = (FolderEntityIndex)binderDragNode.DataBoundItem;
                    _windowArchive.MoveFolder(dragFolder.Id, dropFolder.Id);
                }
                else if (binderDragNode.Codon.DataBoundType == typeof(WindowEntityIndex))
                {
                    WindowEntityIndex dragWindow = (WindowEntityIndex)binderDragNode.DataBoundItem;
                    _windowArchive.MoveWindow(dragWindow.Id, dropFolder.Id);
                }
                else
                {
                    Debug.Assert(false, "未处理的节点类型");
                }

                binderDragNode.Parent.Items.Remove(binderDragNode.DataBoundItem);
                binderDropNode.Items.Add(binderDragNode.DataBoundItem);

                navigationTree.MoveNode(dragNode, dropNode);
            };

            #endregion
        }