예제 #1
0
        protected AggtBlocks ReadCode(EntityMeta em, Block mainBlock, ReadCodeTemplateOptions op = null)
        {
            op = op ?? new ReadCodeTemplateOptions
            {
                ReadChildren = true,
                ReadQueryPanels = true
            };

            AggtBlocks result = mainBlock;

            if (op.ReadChildren)
            {
                foreach (var property in em.ChildrenProperties)
                {
                    var childBlock = new ChildBlock(property.ManagedProperty as IListProperty);
                    var childAggt = this.ReadCode(property.ChildType, childBlock);

                    result.Children.Add(childAggt);
                }
            }

            if (op.ReadQueryPanels) { this.ReadQueryPanels(em, result); }

            return result;
        }
예제 #2
0
        protected override AggtBlocks DefineBlocks()
        {
            var entityType = this.EntityType;

            var em = CommonModel.Entities.Get(entityType);

            var mainBlock = new Block(entityType);

            return this.ReadCode(em, mainBlock);
        }
예제 #3
0
 /// <summary>
 /// 当每一个界面块对应的视图元数据生成完成后发生的事件。
 /// </summary>
 /// <param name="block"></param>
 protected virtual void OnViewMetaCreated(Block block)
 {
 }
예제 #4
0
        /// <summary>
        /// 根据 blockInfo 中的 int 生成 LogicalView。
        /// </summary>
        /// <param name="block"></param>
        /// <returns></returns>
        public LogicalView CreateView(Block block)
        {
            var evm = block.ViewMeta as WPFEntityViewMeta;

            //如果是自定义视图,则自成该类的对象
            if (block.CustomViewType != null)
            {
                var viewType = Type.GetType(block.CustomViewType);
                var view = Activator.CreateInstance(viewType, evm) as LogicalView;

                this.OnViewCreated(view);

                return view;
            }

            //特殊处理环绕块
            var sur = block as SurrounderBlock;
            if (sur != null)
            {
                var surrounderType = sur.SurrounderType;
                if (surrounderType == NavigationBlock.Type)
                {
                    return this.CreateNavigationQueryView(evm);
                }

                if (surrounderType == ConditionBlock.Type)
                {
                    return this.CreateConditionQueryView(evm);
                }
            }

            //根据 BlockType 的值来生成 LogicalView
            var blockType = block.BlockType;
            if (blockType == BlockType.List) { return this.CreateListView(evm); }
            if (blockType == BlockType.Detail) { return this.CreateDetailView(evm); }
            if (blockType == BlockType.Report) { return this.CreateReportView(evm); }
            return this.CreateCustomBlockView(evm, blockType);
        }
예제 #5
0
 /// <summary>
 /// 是否能执行某个命令
 /// </summary>
 /// <param name="module"></param>
 /// <param name="block"></param>
 /// <param name="commandName"></param>
 /// <returns></returns>
 protected internal virtual bool HasCommand(ModuleMeta module, Block block, string commandName)
 {
     return true;
 }
예제 #6
0
 /// <summary>
 /// 控制某一个块是否可以显示
 /// </summary>
 /// <param name="module"></param>
 /// <param name="block"></param>
 /// <returns></returns>
 protected internal virtual bool CanShowBlock(ModuleMeta module, Block block)
 {
     return true;
 }
예제 #7
0
파일: Commands.cs 프로젝트: 569550384/Rafy
        public override void Execute(ListLogicalView view)
        {
            var plan = LocateCurrentSummarizingMonth(view);
            if (plan == null)
            {
                App.MessageBox.Show("没有找到本月正在进行中的计划。", MessageBoxButton.OK, MessageBoxImage.Asterisk);
                return;
            }

            var block = new Block(typeof(WeekSummary));

            var ui = AutoUI.AggtUIFactory.GenerateControl(block);

            var weekView = ui.MainView as ListLogicalView;

            MPHelper.ModifyRowStyle(weekView, "WeekSummaryRowStyle");

            SetData(weekView, plan);

            weekView.ExpandAll();

            var btn = App.Windows.ShowDialog(ui.Control, win =>
            {
                win.Title = string.Format("第 {0} 周计划与总结", TimeHelper.CurrentWeekIndex + 1);
                win.Buttons = ViewDialogButtons.YesNo;
            });

            if (btn == WindowButton.Yes)
            {
                ReadData(weekView, plan);
            }
        }
예제 #8
0
 protected override bool HasCommand(ModuleMeta module, Block block, string commandKey)
 {
     return HasModuleOperation(module.KeyLabel, block.KeyLabel, commandKey);
 }
예제 #9
0
 protected override bool CanShowBlock(ModuleMeta module, Block block)
 {
     return HasModuleOperation(module.KeyLabel, block.KeyLabel, SystemOperationKeys.Read);
 }
예제 #10
0
        private void CreateCommandsUI(LogicalView view, Block block)
        {
            if (view == null) throw new ArgumentNullException("view");
            if (block == null) throw new ArgumentNullException("uiInfo");

            var commands = block.ViewMeta.AsWPFView().Commands.Where(c => c.IsVisible).ToList();
            if (commands.Count > 0)
            {
                if (this.NeedPermission)
                {
                    commands = commands.Where(c => PermissionMgr.HasCommand(this.PermissionModule, block, c.Name)).ToList();
                }

                //Toolbar
                view.CommandsContainer = this.CreateCommandsContainer();
                this._viewFactory.BlockUIFactory.AppendCommands(
                    view.CommandsContainer, view, commands
                    );
            }
        }
        private void PopupSelection()
        {
            var refInfo = this.Meta.SelectionViewMeta;

            //界面生成
            var block = new Block(refInfo.SelectionEntityType);
            var title = block.ViewMeta.TitleProperty;
            if (title == null) throw new InvalidOperationException("该实体没有标题属性,不能使用此控件进行编辑。");
            block.ViewMeta.DisableEditing();
            block.ViewMeta.AsWPFView().ClearCommands().UseCommands(typeof(ClearReferenceCommand), typeof(SearchListCommand));
            var ui = AutoUI.AggtUIFactory.GenerateControl(block);
            var listView = ui.MainView as ListLogicalView;
            listView.DataLoader.LoadDataAsync(() =>
            {
                this.SyncValueToSelection(listView);
            });

            //弹出
            var res = App.Windows.ShowDialog(ui.Control, w =>
            {
                w.Title = "选择".Translate() + " " + title.Label.Translate();
                w.Width = 600;
                w.Height = 300;

                listView.Control.MouseDoubleClick += (o, e) =>
                {
                    w.DialogResult = true;
                };
            });

            //确定
            if (res == WindowButton.Yes)
            {
                this.SyncSelectionToValue(listView.SelectedEntities);
            }
        }
예제 #12
0
 /// <summary>
 /// 是否能执行某个命令
 /// </summary>
 /// <param name="module"></param>
 /// <param name="block"></param>
 /// <param name="commandName"></param>
 /// <returns></returns>
 public static bool HasCommand(ModuleMeta module, Block block, string commandName)
 {
     return Provider.HasCommand(module, block, commandName);
 }
예제 #13
0
 /// <summary>
 /// 控制某一个块是否可以显示
 /// </summary>
 /// <param name="module"></param>
 /// <param name="block"></param>
 /// <returns></returns>
 public static bool CanShowBlock(ModuleMeta module, Block block)
 {
     return Provider.CanShowBlock(module, block);
 }