private void btnOK_Click(object sender, EventArgs e) { if (this.DoValidate() == false) { return; } if (this.ToolStripGroup == null) { this.ToolStripGroup = new ToolStripGroupEntity(); } this.ToolStripGroup.Name = txtName.Text; this.ToolStripGroup.Code = txtCode.Text; this.ToolStripGroup.PageId = _pageId; ToolStripArchive.Instance.Commit(this.ToolStripGroup); this.DialogResult = DialogResult.OK; this.Close(); }
/// <summary> /// 提交 /// 根据MenuEntity的Id进行判断,如果已存在,调用update,如果不存在,调用add /// </summary> /// <param name="dataEntity"></param> public void Commit(ToolStripGroupEntity entity) { Debug.Assert(entity != null, "enumEntity 为 null"); if (entity == null) { return; } if (GroupExistById(entity.Id)) { UpdateGroup(entity); } else { AddGroup(entity); } }
/// <summary> /// 添加一个Ribbon页 /// </summary> /// <param name="pageEntity"></param> public void AddGroup(ToolStripGroupEntity entity) { Debug.Assert(entity != null, "entity 为 null"); if (entity == null) { return; } //添加索引信息 _indexXml.XPathSelectElement(XPATH_Index_Groups).Add(XElement.Parse(entity.ToXml())); SaveIndexFile(); //发布事件 ToolStripGroupEventArgs args = new ToolStripGroupEventArgs(entity); _eventAggregator.GetEvent <ToolStripGroupAddedEvent>().Publish(args); }
/// <summary> /// 删除一个Ribbon分组,以及其下所有项 /// </summary> /// <param name="id"></param> public void RemoveGroup(ToolStripGroupEntity entity) { Debug.Assert(entity != null, "entity 为 null"); if (entity == null) { return; } //查找并删除其下所有项,并删除 //避免发布过多删除项事件,所以不调用 Delete(item); XElement[] entityElements = _indexXml.XPathSelectElements( String.Format(XPATH_Index_SelectToolStrip_ByGroupId, entity.Id)).ToArray(); foreach (XElement itemElement in entityElements) { string itemId = itemElement.Attribute("Id").Value; //移除索引信息 itemElement.Remove(); //移除实体文件 _packageService.Current.DeleteFile(Path.Combine(Constant.PACKAGE_NAVIGATION_TOOLSTRIP_FOLDER, itemId)); //移除缓存 _cachingService.Remove(itemId); } //删除该分组 XElement element = _indexXml.XPathSelectElement(String.Format(XPATH_Index_SelectGroup, entity.Id)); if (element != null) { element.Remove(); } SaveIndexFile(); //发布事件 ToolStripGroupEventArgs args = new ToolStripGroupEventArgs(entity); _eventAggregator.GetEvent <ToolStripGroupRemovedEvent>().Publish(args); }
public void UpdateGroup(ToolStripGroupEntity entity) { Debug.Assert(entity != null, "ToolStripGroupEntity 为 null"); if (entity == null) { return; } //更新索引信息 XElement element = _indexXml.XPathSelectElement(String.Format(XPATH_Index_SelectGroup, entity.Id)); Debug.Assert(element != null, "更新窗体文件夹索引时未找到指定文件夹的索引记录"); if (element != null) { element.ReplaceWith(XElement.Parse(entity.ToXml())); SaveIndexFile(); //发布事件 ToolStripGroupEventArgs args = new ToolStripGroupEventArgs(entity); _eventAggregator.GetEvent <ToolStripGroupUpdatedEvent>().Publish(args); } }
public ToolStripGroupEventArgs(ToolStripGroupEntity group) { _entity = group; }
private void InitCommands() { #region MenuStrip #region AddMenuEntityCommand _addMenuEntityCommand = new AddMenuEntityCommand() { CanExcuteHandler = () => { return(_currentDataType != null && _currentDataType.Equals(typeof(MenuEntity))); }, //此项所属的项的Id GetArgumentHandler = () => { if (_contextData is MenuEntity) { MenuEntity entity = (MenuEntity)_contextData; return(entity.Id); } else { //正在添加的项为顶层 return(null); } } }; #endregion #region EditMenuEntityCommand _editMenuEntityCommand = new EditMenuEntityCommand() { CanExcuteHandler = () => { bool currentType = _currentDataType != null && _currentDataType.Equals(typeof(MenuEntity)); return(currentType && (_controller.SelectedItemsCount == 1 && _controller.GetSelectedItem <MenuEntity>() != null)); }, GetArgumentHandler = () => { return(_controller.GetSelectedItem <MenuEntity>()); } }; #endregion #region DeleteMenuEntityCommand _deleteMenuEntityCommand = new DeleteMenuEntityCommand() { CanExcuteHandler = () => { bool currentType = _currentDataType != null && _currentDataType.Equals(typeof(MenuEntity)); return(currentType && (_controller.GetSelectedItems <MenuEntity>().Count > 0)); }, GetArgumentHandler = () => { return(_controller.GetSelectedItems <MenuEntity>()); } }; #endregion #region MoveUpMenuEntityCommand _moveBeforeMenuEntityCommand = new MoveBeforeMenuEntityCommand() { CanExcuteHandler = () => { bool currentType = _currentDataType != null && _currentDataType.Equals(typeof(MenuEntity)); return(currentType && (_controller.SelectedItemsCount == 1 && _controller.SelectedItemIndex > 0 && _controller.GetSelectedItem <MenuEntity>() != null)); }, GetMenuId = () => { return(_controller.GetSelectedItem <MenuEntity>().Id); }, GetBeforeMenuId = () => { return(_controller.GetItem <MenuEntity>( _controller.SelectedItemIndex - 1).Id); } }; #endregion #region MoveDownMenuEntityCommand _moveAfterMenuEntityCommand = new MoveAfterMenuEntityCommand() { CanExcuteHandler = () => { bool currentType = _currentDataType != null && _currentDataType.Equals(typeof(MenuEntity)); return(currentType && (_controller.SelectedItemsCount == 1 && _controller.SelectedItemIndex < _controller.ItemsCount - 1 && _controller.GetSelectedItem <MenuEntity>() != null)); }, GetMenuId = () => { return(_controller.GetSelectedItem <MenuEntity>().Id); }, GetAfterMenuId = () => { return(_controller.GetItem <MenuEntity>( _controller.SelectedItemIndex + 1).Id); } }; #endregion #endregion #region ToolStrip #region Page _addToolStripPageCommand = new AddToolStripPageCommand(); _editToolStripPageCommand = new EditToolStripPageCommand() { CanExcuteHandler = () => { bool currentType = _currentDataType != null && _currentDataType.Equals(typeof(ToolStripPageEntity)); return(currentType && (_controller.SelectedItemsCount == 1 && _controller.GetSelectedItem <ToolStripPageEntity>() != null)); }, GetArgumentHandler = () => { return(_controller.GetSelectedItem <ToolStripPageEntity>()); } }; _removeToolStripPageCommand = new RemoveToolStripPageCommand() { CanExcuteHandler = () => { bool currentType = _currentDataType != null && _currentDataType.Equals(typeof(ToolStripPageEntity)); return(currentType && (_controller.GetSelectedItems <ToolStripPageEntity>().Count > 0)); }, GetArgumentHandler = () => { return(_controller.GetSelectedItems <ToolStripPageEntity>()); } }; _moveBeforeToolStripPageCommand = new MoveBeforeToolStripPageCommand() { CanExcuteHandler = () => { bool currentType = _currentDataType != null && _currentDataType.Equals(typeof(ToolStripPageEntity)); return(currentType && (_controller.SelectedItemsCount == 1 && _controller.SelectedItemIndex > 0 && _controller.GetSelectedItem <ToolStripPageEntity>() != null)); }, GetId = () => { return(_controller.GetSelectedItem <ToolStripPageEntity>().Id); }, GetBeforeId = () => { return(_controller.GetItem <ToolStripPageEntity>( _controller.SelectedItemIndex - 1).Id); } }; _moveAfterToolStripPageCommand = new MoveAfterToolStripPageCommand() { CanExcuteHandler = () => { bool currentType = _currentDataType != null && _currentDataType.Equals(typeof(ToolStripPageEntity)); return(currentType && (_controller.SelectedItemsCount == 1 && _controller.SelectedItemIndex < _controller.ItemsCount - 1 && _controller.GetSelectedItem <ToolStripPageEntity>() != null)); }, GetId = () => { return(_controller.GetSelectedItem <ToolStripPageEntity>().Id); }, GetAfterId = () => { return(_controller.GetItem <ToolStripPageEntity>( _controller.SelectedItemIndex + 1).Id); } }; #endregion #region Group _addToolStripGroupCommand = new AddToolStripGroupCommand() { CanExcuteHandler = () => { return(_currentDataType != null && _currentDataType.Equals(typeof(ToolStripGroupEntity)) && _contextData != null && _contextData is ToolStripPageEntity); }, //此项所属的项的Id GetArgumentHandler = () => { if (_contextData is ToolStripPageEntity) { ToolStripPageEntity entity = (ToolStripPageEntity)_contextData; return(entity.Id); } else { return(null); } } }; _editToolStripGroupCommand = new EditToolStripGroupCommand() { CanExcuteHandler = () => { bool currentType = _currentDataType != null && _currentDataType.Equals(typeof(ToolStripGroupEntity)); return(currentType && (_controller.SelectedItemsCount == 1 && _controller.GetSelectedItem <ToolStripGroupEntity>() != null)); }, GetArgumentHandler = () => { return(_controller.GetSelectedItem <ToolStripGroupEntity>()); } }; _removeToolStripGroupCommand = new RemoveToolStripGroupCommand() { CanExcuteHandler = () => { bool currentType = _currentDataType != null && _currentDataType.Equals(typeof(ToolStripGroupEntity)); return(currentType && (_controller.GetSelectedItems <ToolStripGroupEntity>().Count > 0)); }, GetArgumentHandler = () => { return(_controller.GetSelectedItems <ToolStripGroupEntity>()); } }; _moveBeforeToolStripGroupCommand = new MoveBeforeToolStripGroupCommand() { CanExcuteHandler = () => { bool currentType = _currentDataType != null && _currentDataType.Equals(typeof(ToolStripGroupEntity)); return(currentType && (_controller.SelectedItemsCount == 1 && _controller.SelectedItemIndex > 0 && _controller.GetSelectedItem <ToolStripGroupEntity>() != null)); }, GetId = () => { return(_controller.GetSelectedItem <ToolStripGroupEntity>().Id); }, GetBeforeId = () => { return(_controller.GetItem <ToolStripGroupEntity>( _controller.SelectedItemIndex - 1).Id); } }; _moveAfterToolStripGroupCommand = new MoveAfterToolStripGroupCommand() { CanExcuteHandler = () => { bool currentType = _currentDataType != null && _currentDataType.Equals(typeof(ToolStripGroupEntity)); return(currentType && (_controller.SelectedItemsCount == 1 && _controller.SelectedItemIndex < _controller.ItemsCount - 1 && _controller.GetSelectedItem <ToolStripGroupEntity>() != null)); }, GetId = () => { return(_controller.GetSelectedItem <ToolStripGroupEntity>().Id); }, GetAfterId = () => { return(_controller.GetItem <ToolStripGroupEntity>( _controller.SelectedItemIndex + 1).Id); } }; #endregion #region Items #region AddToolStripItemCommand _addToolStripItemCommand = new AddToolStripItemCommand() { CanExcuteHandler = () => { return(_currentDataType != null && _currentDataType.Equals(typeof(ToolStripItemAbstract)) && _contextData != null && _contextData is ToolStripGroupEntity); }, //此项所属的项的Id GetArgumentHandler = () => { if (_contextData is ToolStripGroupEntity) { ToolStripGroupEntity entity = (ToolStripGroupEntity)_contextData; return(entity.Id); } else { return(null); } } }; #endregion #region EditToolStripItemCommand _editToolStripItemCommand = new EditToolStripItemCommand() { CanExcuteHandler = () => { bool currentType = _currentDataType != null && _currentDataType.Equals(typeof(ToolStripItemAbstract)); return(currentType && (_controller.SelectedItemsCount == 1 && _controller.GetSelectedItem <ToolStripItemAbstract>() != null)); }, GetArgumentHandler = () => { return(_controller.GetSelectedItem <ToolStripItemAbstract>()); } }; #endregion #region DeleteToolStripItemCommand _deleteToolStripItemCommand = new DeleteToolStripItemCommand() { CanExcuteHandler = () => { bool currentType = _currentDataType != null && _currentDataType.Equals(typeof(ToolStripItemAbstract)); return(currentType && (_controller.GetSelectedItems <ToolStripItemAbstract>().Count > 0)); }, GetArgumentHandler = () => { return(_controller.GetSelectedItems <ToolStripItemAbstract>()); } }; #endregion #region MoveBeforeToolStripItemCommand _moveBeforeToolStripItemCommand = new MoveBeforeToolStripItemCommand() { CanExcuteHandler = () => { bool currentType = _currentDataType != null && _currentDataType.Equals(typeof(ToolStripItemAbstract)); return(currentType && (_controller.SelectedItemsCount == 1 && _controller.SelectedItemIndex > 0 && _controller.GetSelectedItem <ToolStripItemAbstract>() != null)); }, GetMenuId = () => { return(_controller.GetSelectedItem <ToolStripItemAbstract>().Id); }, GetBeforeMenuId = () => { return(_controller.GetItem <ToolStripItemAbstract>( _controller.SelectedItemIndex - 1).Id); } }; #endregion #region MoveAfterToolStripItemCommand _moveAfterToolStripItemCommand = new MoveAfterToolStripItemCommand() { CanExcuteHandler = () => { bool currentType = _currentDataType != null && _currentDataType.Equals(typeof(ToolStripItemAbstract)); return(currentType && (_controller.SelectedItemsCount == 1 && _controller.SelectedItemIndex < _controller.ItemsCount - 1 && _controller.GetSelectedItem <ToolStripItemAbstract>() != null)); }, GetMenuId = () => { return(_controller.GetSelectedItem <ToolStripItemAbstract>().Id); }, GetAfterMenuId = () => { return(_controller.GetItem <ToolStripItemAbstract>( _controller.SelectedItemIndex + 1).Id); } }; #endregion #endregion #endregion }
private void SubscribeEvent() { //订阅数据实体的增删改事件,以更新呈现 #region Page #region ToolStripPageAddedEvent SubscriptionToken toolStripPageAddedEventToken = _eventAggregator.GetEvent <ToolStripPageAddedEvent>().Subscribe((e) => { _controller.Add(e.Entity, (node) => { if (node.Codon.DataBoundType == typeof(ToolStripItemFolder)) { return(true); } else { return(false); } }); }); #endregion #region ToolStripPageUpdatedEvent SubscriptionToken toolStripPageUpdatedEventToken = _eventAggregator.GetEvent <ToolStripPageUpdatedEvent>().Subscribe((e) => { _controller.Update(e.Entity); }); #endregion #region ToolStripPageRemovedEvent SubscriptionToken toolStripPageRemovedEventToken = _eventAggregator.GetEvent <ToolStripPageRemovedEvent>().Subscribe((e) => { _controller.Remove(e.Entity); }); #endregion #region ToolStripPageMoveBeforeEvent SubscriptionToken toolStripPageMoveBeforeEventToken = _eventAggregator.GetEvent <ToolStripPageMoveBeforeEvent>().Subscribe((e) => { _controller.MoveBefore( (source) => { if (source.Codon.DataBoundType == typeof(ToolStripPageEntity)) { ToolStripPageEntity toolStripPageEntity = (ToolStripPageEntity)source.DataBoundItem; return(toolStripPageEntity.Id == e.Id); } else { return(false); } }, (target) => { if (target.Codon.DataBoundType == typeof(ToolStripPageEntity)) { ToolStripPageEntity toolStripPageEntity = (ToolStripPageEntity)target.DataBoundItem; return(toolStripPageEntity.Id == e.BeforeId); } else { return(false); } } ); }); #endregion #region ToolStripPageMoveAfterEvent SubscriptionToken toolStripPageMoveAfterEventToken = _eventAggregator.GetEvent <ToolStripPageMoveAfterEvent>().Subscribe((e) => { _controller.MoveAfter( (source) => { if (source.Codon.DataBoundType == typeof(ToolStripPageEntity)) { ToolStripPageEntity toolStripPageEntity = (ToolStripPageEntity)source.DataBoundItem; return(toolStripPageEntity.Id == e.Id); } else { return(false); } }, (target) => { if (target.Codon.DataBoundType == typeof(ToolStripPageEntity)) { ToolStripPageEntity toolStripPageEntity = (ToolStripPageEntity)target.DataBoundItem; return(toolStripPageEntity.Id == e.AfterId); } else { return(false); } } ); }); #endregion #endregion #region Group #region ToolStripGroupAddedEvent SubscriptionToken toolStripGroupAddedEventToken = _eventAggregator.GetEvent <ToolStripGroupAddedEvent>().Subscribe((e) => { _controller.Add(e.Entity, (node) => { if (node.Codon.DataBoundType == typeof(ToolStripPageEntity)) { ToolStripPageEntity entity = (ToolStripPageEntity)node.DataBoundItem; return(e.Entity.PageId == entity.Id); } else { return(false); } }); }); #endregion #region ToolStripGroupUpdatedEvent SubscriptionToken toolStripGroupUpdatedEventToken = _eventAggregator.GetEvent <ToolStripGroupUpdatedEvent>().Subscribe((e) => { _controller.Update(e.Entity); }); #endregion #region ToolStripGroupRemovedEvent SubscriptionToken toolStripGroupRemovedEventToken = _eventAggregator.GetEvent <ToolStripGroupRemovedEvent>().Subscribe((e) => { _controller.Remove(e.Entity); }); #endregion #region ToolStripGroupMoveBeforeEvent SubscriptionToken toolStripGroupMoveBeforeEventToken = _eventAggregator.GetEvent <ToolStripGroupMoveBeforeEvent>().Subscribe((e) => { _controller.MoveBefore( (source) => { if (source.Codon.DataBoundType == typeof(ToolStripGroupEntity)) { ToolStripGroupEntity toolStripGroupEntity = (ToolStripGroupEntity)source.DataBoundItem; return(toolStripGroupEntity.Id == e.Id); } else { return(false); } }, (target) => { if (target.Codon.DataBoundType == typeof(ToolStripGroupEntity)) { ToolStripGroupEntity toolStripGroupEntity = (ToolStripGroupEntity)target.DataBoundItem; return(toolStripGroupEntity.Id == e.BeforeId); } else { return(false); } } ); }); #endregion #region ToolStripGroupMoveAfterEvent SubscriptionToken toolStripGroupMoveAfterEventToken = _eventAggregator.GetEvent <ToolStripGroupMoveAfterEvent>().Subscribe((e) => { _controller.MoveAfter( (source) => { if (source.Codon.DataBoundType == typeof(ToolStripGroupEntity)) { ToolStripGroupEntity toolStripGroupEntity = (ToolStripGroupEntity)source.DataBoundItem; return(toolStripGroupEntity.Id == e.Id); } else { return(false); } }, (target) => { if (target.Codon.DataBoundType == typeof(ToolStripGroupEntity)) { ToolStripGroupEntity toolStripGroupEntity = (ToolStripGroupEntity)target.DataBoundItem; return(toolStripGroupEntity.Id == e.AfterId); } else { return(false); } } ); }); #endregion #endregion #region Items #region ToolStripItemAddedEvent SubscriptionToken toolStripItemAddedEventToken = _eventAggregator.GetEvent <ToolStripItemAddedEvent>().Subscribe((e) => { _controller.Add(e.Entity, (node) => { if (node.Codon.DataBoundType == typeof(ToolStripGroupEntity)) { ToolStripGroupEntity entity = (ToolStripGroupEntity)node.DataBoundItem; return(e.Entity.GroupId == entity.Id); } else { return(false); } }); }); #endregion #region ToolStripItemRemovedEvent SubscriptionToken toolStripItemRemovedEventToken = _eventAggregator.GetEvent <ToolStripItemRemovedEvent>().Subscribe((e) => { _controller.Remove(e.Entity); }); #endregion #region ToolStripItemUpdatedEvent SubscriptionToken toolStripItemUpdatedEventToken = _eventAggregator.GetEvent <ToolStripItemUpdatedEvent>().Subscribe((e) => { _controller.Update(e.Entity); }); #endregion #region ToolStripItemMoveBeforeEvent SubscriptionToken toolStripItemMoveBeforeEventToken = _eventAggregator.GetEvent <ToolStripItemMoveBeforeEvent>().Subscribe((e) => { _controller.MoveBefore( (source) => { if (source.Codon.DataBoundType == typeof(ToolStripItemAbstract)) { ToolStripItemAbstract toolStripEntity = (ToolStripItemAbstract)source.DataBoundItem; return(toolStripEntity.Id == e.Id); } else { return(false); } }, (target) => { if (target.Codon.DataBoundType == typeof(ToolStripItemAbstract)) { ToolStripItemAbstract toolStripEntity = (ToolStripItemAbstract)target.DataBoundItem; return(toolStripEntity.Id == e.BeforeId); } else { return(false); } } ); //_navigationTreeController.Select((node) => //{ // if (node.Codon.DataBoundType == typeof(ToolStripItemAbstract)) // { // ToolStripItemAbstract menuEntity = (ToolStripItemAbstract)node.DataBoundItem; // return menuEntity.Id == e.Id; // } // else // return false; //}); }); #endregion #region ToolStripItemMoveAfterEvent SubscriptionToken toolStripItemMoveAfterEventToken = _eventAggregator.GetEvent <ToolStripItemMoveAfterEvent>().Subscribe((e) => { _controller.MoveAfter( (source) => { if (source.Codon.DataBoundType == typeof(ToolStripItemAbstract)) { ToolStripItemAbstract toolStripEntity = (ToolStripItemAbstract)source.DataBoundItem; return(toolStripEntity.Id == e.Id); } else { return(false); } }, (target) => { if (target.Codon.DataBoundType == typeof(ToolStripItemAbstract)) { ToolStripItemAbstract toolStripEntity = (ToolStripItemAbstract)target.DataBoundItem; return(toolStripEntity.Id == e.AfterId); } else { return(false); } } ); //_navigationTreeController.Select((node) => //{ // if (node.Codon.DataBoundType == typeof(ToolStripItemAbstract)) // { // ToolStripItemAbstract menuEntity = (ToolStripItemAbstract)node.DataBoundItem; // return menuEntity.Id == e.Id; // } // else // return false; //}); }); #endregion #endregion #region * Unsubscribe * this.Disposed += (sender, e) => { _eventAggregator.GetEvent <ToolStripPageAddedEvent>().Unsubscribe(toolStripPageAddedEventToken); _eventAggregator.GetEvent <ToolStripPageUpdatedEvent>().Unsubscribe(toolStripPageUpdatedEventToken); _eventAggregator.GetEvent <ToolStripPageRemovedEvent>().Unsubscribe(toolStripPageRemovedEventToken); _eventAggregator.GetEvent <ToolStripPageMoveBeforeEvent>().Unsubscribe(toolStripPageMoveBeforeEventToken); _eventAggregator.GetEvent <ToolStripPageMoveAfterEvent>().Unsubscribe(toolStripPageMoveAfterEventToken); _eventAggregator.GetEvent <ToolStripGroupAddedEvent>().Unsubscribe(toolStripGroupAddedEventToken); _eventAggregator.GetEvent <ToolStripGroupUpdatedEvent>().Unsubscribe(toolStripGroupUpdatedEventToken); _eventAggregator.GetEvent <ToolStripGroupRemovedEvent>().Unsubscribe(toolStripGroupRemovedEventToken); _eventAggregator.GetEvent <ToolStripGroupMoveBeforeEvent>().Unsubscribe(toolStripGroupMoveBeforeEventToken); _eventAggregator.GetEvent <ToolStripGroupMoveAfterEvent>().Unsubscribe(toolStripGroupMoveAfterEventToken); _eventAggregator.GetEvent <ToolStripItemAddedEvent>().Unsubscribe(toolStripItemAddedEventToken); _eventAggregator.GetEvent <ToolStripItemRemovedEvent>().Unsubscribe(toolStripItemRemovedEventToken); _eventAggregator.GetEvent <ToolStripItemUpdatedEvent>().Unsubscribe(toolStripItemUpdatedEventToken); _eventAggregator.GetEvent <ToolStripItemMoveBeforeEvent>().Unsubscribe(toolStripItemMoveBeforeEventToken); _eventAggregator.GetEvent <ToolStripItemMoveAfterEvent>().Unsubscribe(toolStripItemMoveAfterEventToken); }; #endregion }
private void InitController() { _controller = new TypeBinderTreeViewController(this.treeView); #region ImageList //节点的小图标ImageList ImageList _imageList = new ImageList(); _imageList.Images.Add(IconsLibrary.Folder); //0 _imageList.Images.Add(IconsLibrary.ActiveTabItem); //1 _imageList.Images.Add(IconsLibrary.GroupItem); //2 _imageList.Images.Add(IconsLibrary.Menu); //3 _controller.ImageList = _imageList; #endregion #region Codon _controller.AddNodeCodon(new TypeBinderTreeViewNodeCodon( typeof(ToolStripItemFolder), typeof(ToolStripPageEntity), ToolStripItemFolder.Property_Text, ToolStripItemFolder.Property_Items) { ImageIndex = TreeImages.Folder, ContextMenuStrip = _treeMenuToolStripItemFolder.View }); TypeBinderTreeViewNodeCodon pageCodon = new TypeBinderTreeViewNodeCodon( typeof(ToolStripPageEntity), typeof(ToolStripGroupEntity), ToolStripItemAbstract.Property_Name) { ImageIndex = TreeImages.ToolStripPageEntity, ActOnSubClass = true, ContextMenuStrip = _treeMenuToolStripPage.View, RelationChildMember = ToolStripPageEntity.Property_Id }; pageCodon.GetItemsFunc = (pageEntity) => { return(ToolStripArchive.Instance.GetGroupCollection(((ToolStripPageEntity)pageEntity).Id)); }; _controller.AddNodeCodon(pageCodon); TypeBinderTreeViewNodeCodon groupCodon = new TypeBinderTreeViewNodeCodon( typeof(ToolStripGroupEntity), typeof(ToolStripItemAbstract), ToolStripItemAbstract.Property_Name) { ImageIndex = TreeImages.ToolStripGroupEntity, ActOnSubClass = true, ContextMenuStrip = _treeMenuToolStripGroup.View, RelationParentMember = ToolStripGroupEntity.Property_PageId, RelationChildMember = ToolStripGroupEntity.Property_Id }; groupCodon.GetItemsFunc = (groupEntity) => { return(ToolStripArchive.Instance.GetEntityList(((ToolStripGroupEntity)groupEntity).Id)); }; _controller.AddNodeCodon(groupCodon); _controller.AddNodeCodon(new TypeBinderTreeViewNodeCodon( typeof(ToolStripItemAbstract), ToolStripItemAbstract.Property_Name) { ActOnSubClass = true,//因为实际运行是Dev结尾的类型 ImageIndex = TreeImages.ToolStripItemAbstract, ContextMenuStrip = _treeMenuToolStripItem.View, RelationParentMember = ToolStripItemAbstract.Property_GroupId }); #endregion _controller.AfterSelect += new TypeBinderTreeViewController.OnAfterSelectHandler(_controller_AfterSelect); #region 处理拖放 treeView.AllowDrop = true; #region CanDragFunc treeView.CanDragFunc = (dragNode) => { //总文件夹不允许拖动 ITypeBinderTreeViewNode binderDragNode = (ITypeBinderTreeViewNode)dragNode; if (binderDragNode.Codon.DataBoundType == typeof(ToolStripItemFolder)) { return(false); } else { return(true); } }; #endregion #region CanDropFunc treeView.CanDropFunc = (dragNode, dropNode) => { ITypeBinderTreeViewNode binderDragNode = (ITypeBinderTreeViewNode)dragNode; ITypeBinderTreeViewNode binderDropNode = (ITypeBinderTreeViewNode)dropNode; //如果拖的是页,那只允许放在页上 if (binderDragNode.Codon.DataBoundType == typeof(ToolStripPageEntity)) { if (binderDropNode.Codon.DataBoundType == typeof(ToolStripPageEntity)) { return(true); } } //如果拖的是分组,允许放在页和分组上 if (binderDragNode.Codon.DataBoundType == typeof(ToolStripGroupEntity)) { if (binderDropNode.Codon.DataBoundType == typeof(ToolStripPageEntity) || binderDropNode.Codon.DataBoundType == typeof(ToolStripGroupEntity)) { return(true); } } //如果拖的是项,允许放在分组和项上 if (binderDragNode.Codon.DataBoundType == typeof(ToolStripItemAbstract)) { if (binderDropNode.Codon.DataBoundType == typeof(ToolStripGroupEntity) || binderDropNode.Codon.DataBoundType == typeof(ToolStripItemAbstract)) { return(true); } } return(false); }; #endregion #region DragDropAction treeView.DragDropAction = (dragNode, dropNode) => { ITypeBinderTreeViewNode binderDragNode = (ITypeBinderTreeViewNode)dragNode; ITypeBinderTreeViewNode binderDropNode = (ITypeBinderTreeViewNode)dropNode; #region 如果拖的是页 //如果拖的是页,那只允许放在页上 //移动拖动的页到放置的页后面 if (binderDragNode.Codon.DataBoundType == typeof(ToolStripPageEntity)) { if (binderDropNode.Codon.DataBoundType == typeof(ToolStripPageEntity)) { //只要调用 _toolStripArchive.MovePageAfter 就行了 //树节点的移动会由相关事件引发 ToolStripPageEntity dragPage = (ToolStripPageEntity)binderDragNode.DataBoundItem; ToolStripPageEntity dropPage = (ToolStripPageEntity)binderDropNode.DataBoundItem; _toolStripArchive.MovePageAfter(dragPage.Id, dropPage.Id); } } #endregion #region 如果拖的是分组 //如果拖的是分组,允许放在页和分组上 if (binderDragNode.Codon.DataBoundType == typeof(ToolStripGroupEntity)) { ToolStripGroupEntity dragGroup = (ToolStripGroupEntity)binderDragNode.DataBoundItem; //放在放置页的最后面 if (binderDropNode.Codon.DataBoundType == typeof(ToolStripPageEntity)) { ToolStripPageEntity dropPage = (ToolStripPageEntity)binderDropNode.DataBoundItem; dragGroup.PageId = dropPage.Id; //确保拖的分组在放的页的最后一项 if (binderDropNode.Items.Count > 0) { ToolStripGroupEntity lastGroup = (ToolStripGroupEntity)binderDropNode.Items[binderDropNode.Items.Count - 1]; _toolStripArchive.MoveGroupAfter(dragGroup.Id, lastGroup.Id); } _toolStripArchive.UpdateGroup(dragGroup); } //放在放置分组的后面,同时注意修改拖动分组所属页到放置分组所属的页上 else if (binderDropNode.Codon.DataBoundType == typeof(ToolStripGroupEntity)) { ToolStripGroupEntity dropGroup = (ToolStripGroupEntity)binderDropNode.DataBoundItem; _toolStripArchive.MoveGroupAfter(dragGroup.Id, dropGroup.Id); if (dragGroup.PageId != dropGroup.PageId) { dragGroup.PageId = dropGroup.PageId; _toolStripArchive.UpdateGroup(dragGroup); } } } #endregion #region 如果拖的是项 //如果拖的是项,允许放在分组和项上 if (binderDragNode.Codon.DataBoundType == typeof(ToolStripItemAbstract)) { ToolStripItemAbstract dragItem = (ToolStripItemAbstract)binderDragNode.DataBoundItem; //放在放置分组的最后面,同时修改拖动项所属分组 //放置分组肯定不是项原来的分组,因为如果把树子节点拖到自己的父节点上什么也不会发生,SETreeView里不允许这种操作 if (binderDropNode.Codon.DataBoundType == typeof(ToolStripGroupEntity)) { ToolStripGroupEntity dropGroup = (ToolStripGroupEntity)binderDropNode.DataBoundItem; dragItem.GroupId = dropGroup.Id; //确保拖的分组在放的页的最后一项 if (binderDropNode.Items.Count > 0) { ToolStripItemAbstract lastItem = (ToolStripItemAbstract)binderDropNode.Items[binderDropNode.Items.Count - 1]; _toolStripArchive.MoveAfter(dragItem.Id, lastItem.Id); } _toolStripArchive.Update(dragItem); } //放在放置项的后面,同时修改拖动项所属分组为放置项所属的分组,如果他们不在一个分组 if (binderDropNode.Codon.DataBoundType == typeof(ToolStripItemAbstract)) { ToolStripItemAbstract dropItem = (ToolStripItemAbstract)binderDropNode.DataBoundItem; _toolStripArchive.MoveAfter(dragItem.Id, dropItem.Id); if (dragItem.GroupId != dropItem.GroupId) { dragItem.GroupId = dropItem.GroupId; _toolStripArchive.Update(dragItem); } } } #endregion }; #endregion #endregion }
private void InitCommands() { #region Commands #region Page _addToolStripPageCommand = new AddToolStripPageCommand(); _editToolStripPageCommand = new EditToolStripPageCommand() { GetArgumentHandler = () => { ToolStripPageEntity selectedItem = _controller.GetSelectedData <ToolStripPageEntity>(); if (selectedItem == null) { return(null); } else { return(selectedItem); } } }; _removeToolStripPageCommand = new RemoveToolStripPageCommand() { CanExcuteHandler = () => { return(_controller.GetSelectedData <ToolStripPageEntity>() != null); }, GetArgumentHandler = () => { return(new List <ToolStripPageEntity>() { _controller.GetSelectedData <ToolStripPageEntity>() }); } }; _moveBeforeToolStripPageCommand = new MoveBeforeToolStripPageCommand() { CanExcuteHandler = () => { return(_controller.GetSelectedData <ToolStripPageEntity>() != null && _controller.GetPreSelectedData <ToolStripPageEntity>() != null); }, GetId = () => { return(_controller.GetSelectedData <ToolStripPageEntity>().Id); }, GetBeforeId = () => { return(_controller.GetPreSelectedData <ToolStripPageEntity>().Id); } }; _moveAfterToolStripPageCommand = new MoveAfterToolStripPageCommand() { CanExcuteHandler = () => { return(_controller.GetSelectedData <ToolStripPageEntity>(true) != null && _controller.GetNextSelectedData <ToolStripPageEntity>() != null); }, GetId = () => { return(_controller.GetSelectedData <ToolStripPageEntity>().Id); }, GetAfterId = () => { return(_controller.GetNextSelectedData <ToolStripPageEntity>().Id); } }; #endregion #region Group _addToolStripGroupCommand = new AddToolStripGroupCommand() { GetArgumentHandler = () => { ToolStripPageEntity selectedItem = _controller.GetSelectedData <ToolStripPageEntity>(); if (selectedItem == null) { return(String.Empty); } else { return(selectedItem.Id); } } }; _editToolStripGroupCommand = new EditToolStripGroupCommand() { CanExcuteHandler = () => { return(_controller.GetSelectedData <ToolStripGroupEntity>() != null); }, GetArgumentHandler = () => { return(_controller.GetSelectedData <ToolStripGroupEntity>()); } }; _removeToolStripGroupCommand = new RemoveToolStripGroupCommand() { CanExcuteHandler = () => { return(_controller.GetSelectedData <ToolStripGroupEntity>() != null); }, GetArgumentHandler = () => { return(new List <ToolStripGroupEntity>() { _controller.GetSelectedData <ToolStripGroupEntity>() }); } }; _moveBeforeToolStripGroupCommand = new MoveBeforeToolStripGroupCommand() { CanExcuteHandler = () => { return(_controller.GetSelectedData <ToolStripGroupEntity>() != null && _controller.GetPreSelectedData <ToolStripGroupEntity>() != null); }, GetId = () => { return(_controller.GetSelectedData <ToolStripGroupEntity>().Id); }, GetBeforeId = () => { return(_controller.GetPreSelectedData <ToolStripGroupEntity>().Id); } }; _moveAfterToolStripGroupCommand = new MoveAfterToolStripGroupCommand() { CanExcuteHandler = () => { return(_controller.GetSelectedData <ToolStripGroupEntity>(true) != null && _controller.GetNextSelectedData <ToolStripGroupEntity>() != null); }, GetId = () => { return(_controller.GetSelectedData <ToolStripGroupEntity>().Id); }, GetAfterId = () => { return(_controller.GetNextSelectedData <ToolStripGroupEntity>().Id); } }; #endregion #region Items _addToolStripItemCommand = new AddToolStripItemCommand() { GetArgumentHandler = () => { ToolStripGroupEntity selectedItem = _controller.GetSelectedData <ToolStripGroupEntity>(); if (selectedItem == null) { return(String.Empty); } else { return(selectedItem.Id); } } }; _editToolStripItemCommand = new EditToolStripItemCommand() { CanExcuteHandler = () => { return(_controller.GetSelectedData <ToolStripItemAbstract>() != null); }, GetArgumentHandler = () => { return(_controller.GetSelectedData <ToolStripItemAbstract>()); } }; _deleteToolStripItemCommand = new DeleteToolStripItemCommand() { CanExcuteHandler = () => { return(_controller.GetSelectedData <ToolStripItemAbstract>() != null); }, GetArgumentHandler = () => { return(new List <ToolStripItemAbstract>() { _controller.GetSelectedData <ToolStripItemAbstract>() }); } }; _moveBeforeToolStripItemCommand = new MoveBeforeToolStripItemCommand() { CanExcuteHandler = () => { return(_controller.GetSelectedData <ToolStripItemAbstract>() != null && _controller.GetPreSelectedData <ToolStripItemAbstract>() != null); }, GetMenuId = () => { return(_controller.GetSelectedData <ToolStripItemAbstract>().Id); }, GetBeforeMenuId = () => { return(_controller.GetPreSelectedData <ToolStripItemAbstract>().Id); } }; _moveAfterToolStripItemCommand = new MoveAfterToolStripItemCommand() { CanExcuteHandler = () => { return(_controller.GetSelectedData <ToolStripItemAbstract>(true) != null && _controller.GetNextSelectedData <ToolStripItemAbstract>() != null); }, GetMenuId = () => { return(_controller.GetSelectedData <ToolStripItemAbstract>().Id); }, GetAfterMenuId = () => { return(_controller.GetNextSelectedData <ToolStripItemAbstract>().Id); } }; #endregion #endregion }