예제 #1
0
 public NavigateInterceptor(
     IHandler handler, NavigationStyle style)
     : base(typeof(C))
 {
     _handler = handler;
     _style   = style;
 }
 public void CssClassWellFormattedForStyle(NavigationStyle style, string expected)
 {
     new Navigation {
         Style = style
     }
     .CssClasses.Should().Be(expected);
 }
예제 #3
0
 public NavigationRequest(Type controllerType, MethodInfo action,
                          object[] args, NavigationStyle style)
 {
     ControllerType = controllerType;
     Action         = action;
     Args           = args;
     Style          = style;
 }
예제 #4
0
 public static C Navigate <C>(this IHandler handler, NavigationStyle style)
     where C : class, IController
 {
     if (handler == null)
     {
         throw new ArgumentNullException(nameof(handler));
     }
     return((C) new NavigateInterceptor <C>(handler, style)
            .GetTransparentProxy());
 }
예제 #5
0
        public void Register(ActionBase action)
        {
            NavigationStyle navigationStyle = NavigationStyle.NavBar;

            if (action.Application != null)
            {
                navigationStyle = NavigationHelper.GetControlStyle(action.Application.Model);
            }
            Register(action, navigationStyle);
        }
 protected virtual IWebNavigationControl CreateNavigationControl(NavigationStyle controlStyle){
     switch (controlStyle){
         case NavigationStyle.TreeList:
             return new TreeViewNavigationControl();
         case NavigationStyle.NavBar:{
             var navControl = new ASPxMenuNavigationControl();
             ((ASPxMenu) navControl.Control).Width = Width;
             return navControl;
         }
         default:
             return null;
     }
 }
예제 #7
0
        protected virtual IWebNavigationControl CreateNavigationControl(NavigationStyle controlStyle)
        {
            switch (controlStyle)
            {
            case NavigationStyle.TreeList: return(new TreeViewNavigationControl());

            case NavigationStyle.NavBar:
            {
                ASPxMenuNavigationControl navControl = new ASPxMenuNavigationControl();
                ((ASPxMenu)navControl.Control).Width = Width;
                return(navControl);
            }

            default: return(null);
            }
        }
 public void Register(ActionBase action, NavigationStyle navigationStyle){
     UnsubscribeFromCallbackStartupScriptRegistering();
     var disposable = _mainNavControl as IDisposable;
     if (disposable != null){
         disposable.Dispose();
     }
     Controls.Clear();
     if (navigationStyle == NavigationStyle.NavBar){
         CssClass += " NavBarLiteAC";
     }
     _mainNavControl = CreateNavigationControl(navigationStyle);
     _mainNavControl.Control.Unload += Control_Unload;
     SubscribeToCallbackStartupScriptRegistering();
     _mainNavControl.SetNavigationActionItems(((ChoiceActionBase) action).Items, (SingleChoiceAction) action);
     Controls.Add(_mainNavControl.Control);
     _singleChoiceAction = action as SingleChoiceAction;
 }
예제 #9
0
        public void Register(ActionBase action, NavigationStyle navigationStyle)
        {
            UnsubscribeFromCallbackStartupScriptRegistering();
            var disposable = _mainNavControl as IDisposable;

            if (disposable != null)
            {
                disposable.Dispose();
            }
            Controls.Clear();
            if (navigationStyle == NavigationStyle.NavBar)
            {
                CssClass += " NavBarLiteAC";
            }
            _mainNavControl = CreateNavigationControl(navigationStyle);
            _mainNavControl.Control.Unload += Control_Unload;
            SubscribeToCallbackStartupScriptRegistering();
            _mainNavControl.SetNavigationActionItems(((ChoiceActionBase)action).Items, (SingleChoiceAction)action);
            Controls.Add(_mainNavControl.Control);
            _singleChoiceAction = action as SingleChoiceAction;
        }
예제 #10
0
        private static object Navigate <C>(Func <C, object> action, NavigationStyle style)
            where C : class, IController
        {
            if (action == null)
            {
                throw new ArgumentNullException(nameof(action));
            }

            var composer = Composer;
            var context  = composer?.Resolve <IContext>();

            if (context == null)
            {
                throw new InvalidOperationException(
                          "A context is required for controller navigation");
            }

            var initiator = composer.Resolve <IController>();

            var ctx = style != NavigationStyle.Next
                    ? context.CreateChild()
                    : context;

            C controller;

            try
            {
                controller = (C)ResolveController(ctx, typeof(C));
                if (initiator != null && initiator != controller &&
                    initiator.Context != ctx)
                {
                    initiator.DependsOn(controller);
                }
            }
            catch
            {
                if (style != NavigationStyle.Next)
                {
                    ctx.End();
                }
                throw;
            }

            var ctrl = controller as Controller;

            try
            {
                if (style == NavigationStyle.Push)
                {
                    composer = composer.PushLayer();
                }
                else
                {
                    var init = initiator as Controller;
                    if (ctrl != null && init != null)
                    {
                        ctrl._lastAction  = h => P <INavigate>(h).Next(action);
                        ctrl._retryAction = init._lastAction;
                    }
                }

                var oldIo = ctrl?._io;

                if (ctrl != null)
                {
                    // Propogate composer options
                    var io = ReferenceEquals(context, ctx)
                           ? composer : ctx.Self().Chain(composer);
                    var prepare = Controller.GlobalPrepare;
                    if (prepare != null)
                    {
                        io = prepare.GetInvocationList().Cast <FilterBuilder>()
                             .Aggregate(io, (current, builder) => builder(current) ?? current);
                    }
                    ctrl._io = io;
                }

                try
                {
                    return(action(controller));
                }
                finally
                {
                    if (ctrl != null)
                    {
                        ctrl._io = oldIo;
                    }
                    if (initiator != null && initiator.Context == ctx &&
                        initiator != controller)
                    {
                        initiator.Release();
                        initiator.Context = null;
                    }
                }
            }
            catch
            {
                if (style != NavigationStyle.Next)
                {
                    ctx.End();
                }
                else if (initiator != null && initiator.Context == ctx)
                {
                    controller.DependsOn(initiator);
                }
                throw;
            }
        }
예제 #11
0
 object INavigate.Navigate <C>(Func <C, object> action, NavigationStyle style)
 {
     return(Navigate(action, style));
 }
예제 #12
0
 protected C Navigate <C>(IHandler handler, NavigationStyle style)
     where C : class, IController
 {
     return(handler.Navigate <C>(style));
 }
예제 #13
0
 protected C Navigate <C>(NavigationStyle style)
     where C : class, IController
 {
     return(Push <C>(IO));
 }