/// <summary>
        /// 删除一个Ribbon页,以及其下所有分组和项
        /// </summary>
        /// <param name="id"></param>
        public void RemovePage(ToolStripPageEntity entity)
        {
            Debug.Assert(entity != null, "entity 为 null");

            if (entity == null)
            {
                return;
            }

            //查找其下所有分组,连带删除其下所有分组下的所有项
            ToolStripGroupEntityCollection groups = GetGroupCollection(entity.Id);

            foreach (var groupItem in groups)
            {
                RemoveGroup(groupItem);
            }

            //删除此页
            XElement element = _indexXml.XPathSelectElement(String.Format(XPATH_Index_SelectPage, entity.Id));

            if (element != null)
            {
                element.Remove();
            }

            SaveIndexFile();

            ToolStripPageEventArgs args = new ToolStripPageEventArgs(entity);

            _eventAggregator.GetEvent <ToolStripPageRemovedEvent>().Publish(args);
        }
Example #2
0
 private void btnOK_Click(object sender, EventArgs e)
 {
     if (this.DoValidate() == false)
     {
         return;
     }
     if (this.ToolStripPage == null)
     {
         this.ToolStripPage = new ToolStripPageEntity();
     }
     this.ToolStripPage.Name = txtName.Text;
     this.ToolStripPage.Code = txtCode.Text;
     ToolStripArchive.Instance.Commit(this.ToolStripPage);
     this.DialogResult = DialogResult.OK;
     this.Close();
 }
        /// <summary>
        /// 提交
        /// 根据MenuEntity的Id进行判断,如果已存在,调用update,如果不存在,调用add
        /// </summary>
        /// <param name="dataEntity"></param>
        public void Commit(ToolStripPageEntity entity)
        {
            Debug.Assert(entity != null, "enumEntity 为 null");

            if (entity == null)
            {
                return;
            }

            if (PageExistById(entity.Id))
            {
                UpdatePage(entity);
            }
            else
            {
                AddPage(entity);
            }
        }
        /// <summary>
        /// 添加一个Ribbon页
        /// </summary>
        /// <param name="pageEntity"></param>
        public void AddPage(ToolStripPageEntity entity)
        {
            Debug.Assert(entity != null, "entity 为 null");

            if (entity == null)
            {
                return;
            }

            //添加索引信息
            _indexXml.XPathSelectElement(XPATH_Index_Pages).Add(XElement.Parse(entity.ToXml()));

            SaveIndexFile();

            //发布事件
            ToolStripPageEventArgs args = new ToolStripPageEventArgs(entity);

            _eventAggregator.GetEvent <ToolStripPageAddedEvent>().Publish(args);
        }
        public void UpdatePage(ToolStripPageEntity entity)
        {
            Debug.Assert(entity != null, "ToolStripPageEntity 为 null");

            if (entity == null)
            {
                return;
            }

            //更新索引信息
            XElement element = _indexXml.XPathSelectElement(String.Format(XPATH_Index_SelectPage, entity.Id));

            Debug.Assert(element != null, "更新窗体文件夹索引时未找到指定文件夹的索引记录");
            if (element != null)
            {
                element.ReplaceWith(XElement.Parse(entity.ToXml()));
                SaveIndexFile();

                //发布事件
                ToolStripPageEventArgs args = new ToolStripPageEventArgs(entity);
                _eventAggregator.GetEvent <ToolStripPageUpdatedEvent>().Publish(args);
            }
        }
Example #6
0
 public ToolStripPageEventArgs(ToolStripPageEntity page)
 {
     _entity = page;
 }
        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
        }
Example #8
0
        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
        }
Example #9
0
        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
        }
Example #10
0
        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
        }