Пример #1
0
        protected override void OnControllerLoadComplete(IMXView fromView, IMXController controller, MXViewPerspective viewPerspective)
        {
            Android.Util.Log.Debug("MXDroidContainer", "OnControllerLoadComplete");

            Type viewType = Views.GetViewType(viewPerspective);
            if (viewType != null)
            {
                // stash the model away so we can get it back when the view shows up!
                ViewModels[controller.ModelType] = controller.GetModel();

                LastContext = fromView as Activity ?? ApplicationContext;
                if (NavigationHandler != null)
                {
                    // allow first crack at the view creation to the person over-riding
                    NavigationHandler(viewType);
                }
                else if (LastContext != null)
                {
                    // use the last context to instantiate the new view
                    Intent intent = new Intent(LastContext, viewType);
                    intent.AddFlags(ActivityFlags.NewTask);
                    LastContext.StartActivity(intent);
                }
                else
                {
                    Android.Util.Log.Debug("MXDroidContainer", "OnControllerLoadComplete: View not found for " + viewPerspective.ToString());
                    throw new TypeLoadException("View not found for " + viewPerspective.ToString());
                }
            }
            else
            {
                Android.Util.Log.Debug("MXDroidContainer", "OnControllerLoadComplete: View not found for " + viewPerspective.ToString());
                throw new TypeLoadException("View not found for " + viewPerspective.ToString());
            }
        }
Пример #2
0
        void LoadController(IMXView fromView, IMXController controller, Dictionary <string, string> parameters)
        {
            string perspective = controller.Load(parameters);

            if (!Instance.CancelLoad && perspective != null) // done if failed
            {
                MXViewPerspective viewPerspective = new MXViewPerspective(controller.ModelType, perspective);
                // quick check (viable for ALL platforms) to see if there is some kind of a mapping set up
                if (!Instance.Views.ContainsKey(viewPerspective))
                {
                    throw new Exception("There is no View mapped for " + viewPerspective.ToString());
                }

                // if we have a view lying around assign it from the map, more of a curtesy to the derived container that anything
                controller.View = Instance.Views.GetView(viewPerspective);
                if (controller.View != null)
                {
                    controller.View.SetModel(controller.GetModel());
                }

                // give the derived container the ability to do something
                // with the fromView if it exists or to create it if it doesn't
                Instance.OnControllerLoadComplete(fromView, controller, viewPerspective);
            }
            // clear CancelLoad, we're done
            Instance.CancelLoad = false;
        }
Пример #3
0
        protected override void OnControllerLoadComplete(IMXView fromView, IMXController controller, MXViewPerspective viewPerspective)
        {
            Debug.WriteLine("OnControllerLoadComplete");

            Type viewType = Views.GetViewType(viewPerspective);

            if (viewType != null)
            {
                // stash the model away so we can get it back when the view shows up!
                ViewModels[controller.ModelType] = controller.GetModel();

                var activity = fromView as Page;
                if (NavigationHandler != null)
                {
                    // allow first crack at the view creation to the person over-riding
                    NavigationHandler(viewType);
                }
                else if (activity != null)
                {
                    // start the next view
                    NavigationFrame.NavigationService.Navigate(activity);
                }
                else
                {
                    RenderViewFromPerspective(controller, viewPerspective);
                    NavigationFrame.NavigationService.Navigate(Views.GetView(viewPerspective) as Page);
                }
            }
            else
            {
                Debug.WriteLine("OnControllerLoadComplete: View not found for " + viewPerspective.ToString());
                throw new TypeLoadException("View not found for " + viewPerspective.ToString());
            }
        }
Пример #4
0
        /// <summary>
        /// Finds the target pane for the layer according to its interface.
        /// </summary>
        /// <param name="layer">The controller implementing a pane management interface.</param>
        /// <returns>The <see cref="Pane"/> to which the controller's view renders.</returns>
        public static Pane FindTarget(this IMXController layer)
        {
            var paneAttribute = Device.Reflector.GetCustomAttribute <PreferredPaneAttribute>(layer.GetType(), true);

            if (paneAttribute != null)
            {
                return(paneAttribute.Pane);
            }

            if (layer is NavigationTabs)
            {
                return(Pane.Tabs);
            }

#pragma warning disable 618

            if (layer is IMasterLayer)
            {
                return(Pane.Master);
            }
            if (layer is IPopoverLayer)
            {
                return(Pane.Popover);
            }

#pragma warning restore 618

            return(Pane.Detail);
        }
        protected void StartViewForController(IMXView fromView, IMXController controller, MXShowViewRequest showViewRequest)
        {
            var  viewPerspective = showViewRequest.ViewPerspective;
            Type viewType        = PhoneContainerInstance.Views.GetViewType(viewPerspective);

            if (viewType == null)
            {
                throw new TypeLoadException("View not found for " + viewPerspective.ToString());
            }

#warning TODO - make this Uri look up better!
            Uri viewUri = new Uri("/" + viewType.Name + ".xaml", UriKind.Relative);

            // get the uri from the MXPhoneView attribute, if present
            object[] attributes = viewType.GetCustomAttributes(true);
            for (int i = 0; i < attributes.Length; i++)
            {
                if (attributes[i] is MXPhoneViewAttribute)
                {
                    viewUri = new Uri(((MXPhoneViewAttribute)attributes[i]).Uri, UriKind.Relative);
                    break;
                }
            }

            // stash the model away so we can get it back when the view shows up!
            _cachedViewModel = showViewRequest.ViewModel;

#warning TODO - make this navigation better - pwn the history stack
            //var page = fromView as PhoneApplicationPage;
            //((MXPhonePage)fromView).NavigationService.n

            _rootFrame.Source = viewUri;

            //_rootFrame.Navigate(viewUri);
        }
Пример #6
0
        public void LoadViewForController(IMXView fromView, IMXController controller, MXViewPerspective viewPerspective)
        {
            HideLoading();

            if (controller.View == null)
            {
                // get the view, create it if it has yet been created
                controller.View = Views.GetOrCreateView(viewPerspective);
                if (controller.View == null)
                {
                    Console.WriteLine("View not found for perspective!" + viewPerspective.ToString());
                    throw new ArgumentException("View creation failed for perspective!" + viewPerspective.ToString());
                }
            }

            // asign the view it's model and render the contents of the view
            controller.View.SetModel(controller.GetModel());
            controller.View.Render();

            // pull the type from the view
            ViewNavigationContext navigationContext = MXTouchNavigation.GetViewNavigationContext(controller.View);
            UIViewController viewController = controller.View as UIViewController;

            // iFactr binding options
            if (viewController == null)
                viewController = RenderLayer(controller.View);

            //slideoutNavigation.PushToModel(viewController);
            Menu.TopView = viewController;

            ShowView();
        }
Пример #7
0
        public void LoadViewForController(IMXView fromView, IMXController controller, MXViewPerspective viewPerspective)
        {
            hideLoading();

            if (controller.View == null)
            {
                // get the view, create it if it has yet been created
                controller.View = Views.GetOrCreateView(viewPerspective);
                if (controller.View == null)
                {
                    //Console.WriteLine("View not found for perspective!" + viewPerspective.ToString());
                    throw new ArgumentException("View creation failed for perspective!" + viewPerspective.ToString());
                }
            }


            // asign the view it's model and render the contents of the view
            controller.View.SetModel(controller.GetModel());
            controller.View.Render();

            // pull the type from the view
            //ViewNavigationContext navigationContext = MXFormsNavigation.GetViewNavigationContext(controller.View);
            Page page = controller.View as Page;

            // iFactr binding options
            if (page == null)
            {
                page = RenderLayer(controller.View);
            }

            ViewNavigationContext navigationContext = MXFormsNavigation.GetViewNavigationContext(controller.View);

            formsNavigation.PushToModel(page);
        }
Пример #8
0
 /// <summary>
 /// Initializes an instance of the <see cref="MXNavigation"/> class.
 /// </summary>
 /// <param name="pattern">The navigation pattern to associate with the controller.</param>
 /// <param name="controller">The controller to add to the navigation list.</param>
 /// <param name="parameters">Any default parameters to include when the controller is loaded.</param>
 public MXNavigation(string pattern, IMXController controller, Dictionary <string, string> parameters)
 {
     _loader    = new TypeLoader(controller);
     Pattern    = pattern;
     Parameters = parameters;
     Parts      = Segment.Split(Pattern);
 }
Пример #9
0
        protected override void OnControllerLoadComplete(IMXView fromView, IMXController controller, MXViewPerspective viewPerspective)
        {
            Debug.WriteLine("OnControllerLoadComplete");

            Type viewType = Views.GetViewType(viewPerspective);
            if (viewType != null)
            {
                // stash the model away so we can get it back when the view shows up!
                ViewModels[controller.ModelType] = controller.GetModel();

                var activity = fromView as Page;
                if (NavigationHandler != null)
                {
                    // allow first crack at the view creation to the person over-riding
                    NavigationHandler(viewType);
                }
                else if (activity != null)
                {
                    // start the next view
                    NavigationFrame.NavigationService.Navigate(activity);
                }
                else
                {
                    RenderViewFromPerspective(controller, viewPerspective);
                    NavigationFrame.NavigationService.Navigate(Views.GetView(viewPerspective) as Page);
                }
            }
            else
            {
                Debug.WriteLine("OnControllerLoadComplete: View not found for " + viewPerspective.ToString());
                throw new TypeLoadException("View not found for " + viewPerspective.ToString());
            }
        }
Пример #10
0
        protected void StartViewForController(IMXView fromView, IMXController controller, MXShowViewRequest showViewRequest)
        {
            var viewPerspective = showViewRequest.ViewPerspective;
            Type viewType = PhoneContainerInstance.Views.GetViewType(viewPerspective);
            if (viewType == null)
            {
                throw new TypeLoadException("View not found for " + viewPerspective.ToString());
            }

#warning TODO - make this Uri look up better!
            Uri viewUri = new Uri("/" + viewType.Name + ".xaml", UriKind.Relative);
            
            // get the uri from the MXPhoneView attribute, if present
            object[] attributes = viewType.GetCustomAttributes(true);
            for (int i = 0; i < attributes.Length; i++)
            {
                if (attributes[i] is MXPhoneViewAttribute)
                {
                    viewUri = new Uri(((MXPhoneViewAttribute)attributes[i]).Uri, UriKind.Relative);
                    break;
                }
            }           
            
            // stash the model away so we can get it back when the view shows up!
            _cachedViewModel = showViewRequest.ViewModel;

#warning TODO - make this navigation better - pwn the history stack
            //var page = fromView as PhoneApplicationPage;
            //((MXPhonePage)fromView).NavigationService.n

            _rootFrame.Source = viewUri;

            //_rootFrame.Navigate(viewUri);
        }
        protected override void OnControllerLoadComplete(IMXView fromView, IMXController controller, MXViewPerspective perspective)
        {
            // store of the stack for later
            NavHistory.Push(new NavDetail(controller.Uri, controller.Parameters));

            // render the view
            MXConsoleContainer.RenderViewFromPerspective(controller, perspective);
        }
Пример #12
0
        protected override void OnControllerLoadComplete(IMXView fromView, IMXController controller, string perspective, string navigatedUri)
        {
            // store of the stack for later
            NavHistory.Push(new NavDetail(navigatedUri, null));

            // render the view
            RenderViewFromPerspective(controller.ModelType, perspective, controller.GetModel());
        }
Пример #13
0
        protected override void OnControllerLoadComplete(IMXView fromView, IMXController controller, string perspective, string navigatedUri)
        {
            // store of the stack for later
            NavHistory.Push(new NavDetail(navigatedUri, null));

            // render the view
            RenderViewFromPerspective(controller.ModelType, perspective, controller.GetModel());
        }
Пример #14
0
 public void AddEmptyRoute(IMXController defaultController, string actionName)
 {
     NavigationMap.Add(string.Empty, defaultController,
                       new Dictionary <string, string>()
     {
         { MXConventionConstants.ActionParameterKeyName, actionName }
     });
 }
Пример #15
0
        public void Perform(IMXContainer container, IMXView fromView, IMXController controller)
        {
            // nothing to do
            var viewPerspective = new MXViewPerspective <T>(_viewPerspective);
            var request         = new MXShowViewRequest <T>(viewPerspective, _viewModel);

            container.ShowPerspective(fromView, controller, request);
        }
Пример #16
0
        protected override void OnControllerLoadComplete(IMXView fromView, IMXController controller, MXViewPerspective perspective)
        {
            // store of the stack for later
            NavHistory.Push(new NavDetail(controller.Uri, controller.Parameters));

            // render the view
            MXConsoleContainer.RenderViewFromPerspective(controller, perspective);
        }
Пример #17
0
        protected override void OnControllerLoadBegin(IMXController controller, IMXView fromView)
        {
            base.OnControllerLoadBegin(controller, fromView);

            if (topViewController == null)
            {
                InitializeViews();
            }
        }
        protected override void OnControllerLoadFailed(IMXController controller, Exception ex)
        {
            System.Console.WriteLine("Failed to load controller: " + ex.Message);
            System.Console.WriteLine("Stack Dump");
            System.Console.WriteLine(ex.StackTrace.ToString());

            System.Diagnostics.Debug.WriteLine("Failed to load controller: " + ex.Message);
            System.Diagnostics.Debug.WriteLine("Stack Dump");
            System.Diagnostics.Debug.WriteLine(ex.StackTrace.ToString());
        }
Пример #19
0
		protected override void OnControllerLoadComplete(IMXView fromView, IMXController controller, MXViewPerspective viewPerspective)
		{
			//Console.WriteLine("Controller Load End");
			Xamarin.Forms.Device.BeginInvokeOnMainThread(()=>{
				LoadViewForController(fromView, controller, viewPerspective);
				if (ControllerLoadComplete != null)
					ControllerLoadComplete(controller);
			});

		}
Пример #20
0
		protected override void OnControllerLoadComplete(IMXView fromView, IMXController controller, MXViewPerspective viewPerspective)
		{
			Console.WriteLine("Controller Load End");
			
			_appDelegate.InvokeOnMainThread( delegate {
				LoadViewForController(fromView, controller, viewPerspective);
				if (ControllerLoadComplete != null)
					ControllerLoadComplete(controller);
			});
		}
Пример #21
0
        protected override void OnControllerLoadFailed(IMXController controller, Exception ex)
        {
            System.Console.WriteLine("Failed to load controller: " + ex.Message);
            System.Console.WriteLine("Stack Dump");
            System.Console.WriteLine(ex.StackTrace.ToString());

            System.Diagnostics.Debug.WriteLine("Failed to load controller: " + ex.Message);
            System.Diagnostics.Debug.WriteLine("Stack Dump");
            System.Diagnostics.Debug.WriteLine(ex.StackTrace.ToString());
        }
Пример #22
0
        private static void InternalNavigate(IMXView fromView, string url, Dictionary <string, string> parameters)
        {
            Console.WriteLine("InternalNavigation navigating to: " + url);

            MXContainer container = Instance;   // optimization for the server size, property reference is a hashed lookup

            // fetch and allocate a viable controller
            IMXController controller = container.GetController(url, parameters);

            // Initiate load for the associated controller passing all parameters
            if (controller != null)
            {
                container.OnControllerLoadBegin(controller);

                container.CancelLoad = false;

                // synchronize load layer to prevent collisions on web-based targets.
                lock (container)
                {
                    // Console.WriteLine("InternalNavigate: Locked");

                    // if there is no synchronization, don't launch a new thread
                    if (container.ThreadedLoad)
                    {
                        // new thread to execute the Load() method for the layer
//	                    new Thread((object args) =>
//	                    {
                        try
                        {
                            //Dictionary<string, string> parameters = (Dictionary<string, string>)args;
                            container.LoadController(fromView, controller, parameters);
                        }
                        catch (Exception ex)
                        {
                            container.OnControllerLoadFailed(controller, ex);
                        }
//
//						}).Start(parameters);
                    }
                    else
                    {
                        try
                        {
                            container.LoadController(fromView, controller, parameters);
                        }
                        catch (Exception ex)
                        {
                            container.OnControllerLoadFailed(controller, ex);
                        }
                    }

                    // Console.WriteLine("InternalNavigate: Unlocking");
                }
            }
        }
Пример #23
0
 static void TryLoadController(MXContainer container, IMXView fromView, IMXController controller, Dictionary <string, string> parameters)
 {
     try
     {
         container.LoadController(fromView, controller, parameters);
     }
     catch (Exception ex)
     {
         container.OnControllerLoadFailed(controller, ex);
     }
 }
Пример #24
0
 protected override void OnControllerLoadComplete(IMXView fromView, IMXController controller, MXViewPerspective viewPerspective)
 {
     //Console.WriteLine("Controller Load End");
     Xamarin.Forms.Device.BeginInvokeOnMainThread(() => {
         LoadViewForController(fromView, controller, viewPerspective);
         if (ControllerLoadComplete != null)
         {
             ControllerLoadComplete(controller);
         }
     });
 }
Пример #25
0
        private void LoadController(IMXView fromView, IMXController controller, string uri, Dictionary <string, string> parameters)
        {
            string perspective = controller.Load(uri, parameters);

            // give the derived container the ability to do something
            // with the fromView if it exists or to create it if it doesn't
            OnControllerLoadComplete(fromView, controller, CancelLoad ? null : perspective, uri);

            // clear CancelLoad, we're done
            CancelLoad = false;
        }
Пример #26
0
		protected override void OnControllerLoadBegin(IMXController controller)
		{
			Console.WriteLine("Controller Load Begin");
			
			if (ControllerLoadBegin != null) {
				ControllerLoadBegin(controller);
				return;
			}

			ShowLoading();
		}
        public void LoadViewForController(IMXView fromView, IMXController controller, MXViewPerspective viewPerspective)
        {
            HideLoading();

            if (controller.View == null)
            {
                // get the view, create it if it has yet been created
                controller.View = Views.GetOrCreateView(viewPerspective);
                if (controller.View == null)
                {
                    Console.WriteLine("View not found for perspective!" + viewPerspective.ToString());
                    throw new ArgumentException("View creation failed for perspective!" + viewPerspective.ToString());
                }
            }


            // asign the view it's model and render the contents of the view
            controller.View.SetModel(controller.GetModel());
            controller.View.Render();

            // pull the type from the view
            ViewNavigationContext navigationContext = MXTouchNavigation.GetViewNavigationContext(controller.View);
            UIViewController      viewController    = controller.View as UIViewController;

            // iFactr binding options
            if (viewController == null)
            {
                viewController = RenderLayer(controller.View);
            }


            if (Menu.NavigationController != null && fromView != null)
            {
                if (Menu.NavigationController.ViewControllers.Contains(viewController))
                {
                    Menu.NavigationController.PopToViewController(viewController, true);
                }
                else
                {
                    Menu.NavigationController.PushViewController(viewController, true);
                }
            }
            else
            {
                if (Menu.NavigationController != null)
                {
                    Menu.NavigationController.PopToRootViewController(true);
                }

                Menu.TopView = viewController;
            }

            ShowView();
        }
        public override void ShowError(IMXView fromView, IMXController controller, Exception exception)
        {
            if (fromView != null)
            {
                var activity = fromView as Activity;
                if (activity != null)
                    activity.RunOnUiThread(
                        () => Toast.MakeText(activity, "Error: " + exception.Message, ToastLength.Long).Show());
            }

            base.ShowError(fromView, controller, exception);
        }
Пример #29
0
        protected override void OnControllerLoadBegin(IMXController controller)
        {
            Console.WriteLine("Controller Load Begin");

            if (ControllerLoadBegin != null)
            {
                ControllerLoadBegin(controller);
                return;
            }

            ShowLoading();
        }
Пример #30
0
        protected static void SetModelFromParameters(string url, Dictionary <string, string> parameters)
        {
            IMXController controller = Instance.GetController(url, ref parameters);

            if (controller.GetModel() != null)
            {
                foreach (string key in parameters.Keys)
                {
                    SetPropertyOnModel(key, controller.GetModel(), parameters[key]);
                }
            }
        }
Пример #31
0
        protected override void OnControllerLoadComplete(IMXView fromView, IMXController controller, MXViewPerspective viewPerspective)
        {
            Console.WriteLine("Controller Load End");

            _appDelegate.InvokeOnMainThread(delegate {
                LoadViewForController(fromView, controller, viewPerspective);
                if (ControllerLoadComplete != null)
                {
                    ControllerLoadComplete(controller);
                }
            });
        }
Пример #32
0
        public override void ShowError(IMXView fromView, IMXController controller, Exception exception)
        {
            if (fromView != null)
            {
                var activity = fromView as Activity;
                if (activity != null)
                {
                    activity.RunOnUiThread(
                        () => Toast.MakeText(activity, "Error: " + exception.Message, ToastLength.Long).Show());
                }
            }

            base.ShowError(fromView, controller, exception);
        }
Пример #33
0
        protected override void OnControllerLoadComplete(IMXView fromView, IMXController controller, string viewPerspective, string navigatedUri)
        {
            try
            {
                RenderViewFromPerspective(controller.ModelType, viewPerspective, controller.GetModel());
            }
            catch (ArgumentException ae)
            {
#if DEBUG
                System.Diagnostics.Debug.WriteLine("Failed to Render a view");
#endif
                throw new Exception("Webkit container failed to find a view", ae);
            }
        }
        protected override void OnControllerLoadFailed(IMXController controller, Exception ex)
        {
            if (ControllerLoadFailed != null)
            {
                ControllerLoadFailed(controller, ex);
                return;
            }

            HideLoading();

            UIAlertView alert = new UIAlertView("Load Failed", ex.Message, null, "OK", null);

            alert.Show();
        }
Пример #35
0
        protected static void StartViewForController(IMXView fromView, IMXController controller, MXViewPerspective viewPerspective)
        {
            Type viewType = Instance.Views.GetViewType(viewPerspective);

            if (viewType == null)
            {
                Console.WriteLine("View not found for " + viewPerspective.ToString());
                throw new TypeLoadException("View not found for " + viewPerspective.ToString());
            }

            Uri viewUri = new Uri("/" + viewType.Name + ".xaml", UriKind.Relative);

            // get the uri from the MXPhoneView attribute, if present
            object[] attributes = viewType.GetCustomAttributes(true);
            for (int i = 0; i < attributes.Length; i++)
            {
                if (attributes[i] is MXPhoneViewAttribute)
                {
                    viewUri = new Uri(((MXPhoneViewAttribute)attributes[i]).Uri, UriKind.Relative);
                    break;
                }
            }

            // stash the model away so we can get it back when the view shows up!
            ViewModels[controller.ModelType] = controller.GetModel();

            var page = fromView as PhoneApplicationPage;

            if (!(controller.View is PhoneApplicationPage) && controller.View != null && RenderLayer != null)
            {
                controller.View.Render();
                viewUri = RenderLayer(controller.View);
            }

            if (page != null)
            {
                // NOTE: assumes XAML file matches type name and no sub directories
                page.NavigationService.Navigate(viewUri);
            }
            else
            {
                if (_rootFrame != null)
                {
                    _rootFrame.Navigate(viewUri);
                }

                // failure, called too early or Something Very Bad Happened(tm)...
            }
        }
Пример #36
0
        static void TryLoadController(MXContainer container, IMXView fromView, IMXController controller, Dictionary <string, object> parameters)
        {
            try
            {
                NSObject nso = new NSObject();

                nso.InvokeOnMainThread(() => {
                    container.LoadController(fromView, controller, parameters);
                });
            }
            catch (Exception ex)
            {
                container.OnControllerLoadFailed(controller, ex);
            }
        }
Пример #37
0
		protected override void OnControllerLoadFailed (IMXController controller, Exception ex)
		{
			//Console.WriteLine("Controller Load Failed: " + ex.Message);

			if (ControllerLoadFailed != null) {
				ControllerLoadFailed(controller, ex);
				return;
			}

			hideLoading();

			Xamarin.Forms.Device.BeginInvokeOnMainThread(()=>{
				this.formsNavigation.NavigationPage.DisplayAlert("Load Failed", ex.Message, null, "OK");
			});
		}
        public void OnControllerLoadComplete(IMXController controller, MXShowViewRequest showViewRequest)
        {
            if (_lastSeenViewModel != null)
            {
                // TODO - this requestStop is possibly called too late... but not sure we have any 
                _lastSeenViewModel.RequestStop();
                _lastSeenViewModel = null;
            }

            var model = showViewRequest.ViewModel;
            _lastSeenViewModel = model as IMXViewModel;
            if (_lastSeenViewModel != null)
            {
                _lastSeenViewModel.ViewDispatcher = _dispatcherFactory();
            }
        }
Пример #39
0
        /// <summary>
        /// Called when an <see cref="IMXController"/> instance is about to be loaded.
        /// </summary>
        /// <param name="controller">The controller that is about to be loaded.</param>
        /// <param name="fromView">The view that initiated that navigation to the controller.</param>
        protected override void OnControllerLoadBegin(IMXController controller, IMXView fromView)
        {
            var browser = controller as Browser;

            if (browser == null || browser.Url == null || !browser.Url.StartsWith("audio:"))
            {
                BeginBlockingUserInput();
            }

            var layer = controller as iLayer;

            if (layer != null)
            {
                layer.Clear();
            }
        }
Пример #40
0
 protected override void OnControllerLoadComplete(IMXView fromView, IMXController controller, MXViewPerspective viewPerspective)
 {
     controller.RenderView();
     if (controller.View.GetType().BaseType.GetGenericTypeDefinition() != typeof(MXWebkitView <>) && RenderLayer != null)
     {
         HtmlGenericControl control = RenderLayer(controller.View);
         if (controller.Uri == App.NavigateOnLoad)
         {
             MXWebkitView <object> .WriteToResponse(controller.ModelType.ToString(), control.Attributes["title"], control);
         }
         else
         {
             MXWebkitView <object> .WriteAjaxToResponse(controller.ModelType.ToString(), control.Attributes["title"], control);
         }
     }
 }
Пример #41
0
        protected override void OnControllerLoadFailed(IMXController controller, Exception ex)
        {
            //Console.WriteLine("Controller Load Failed: " + ex.Message);

            if (ControllerLoadFailed != null)
            {
                ControllerLoadFailed(controller, ex);
                return;
            }

            hideLoading();

            Xamarin.Forms.Device.BeginInvokeOnMainThread(() => {
                this.formsNavigation.NavigationPage.DisplayAlert("Load Failed", ex.Message, null, "OK");
            });
        }
Пример #42
0
        protected static void StartViewForController(IMXView fromView, IMXController controller, MXViewPerspective viewPerspective)
        {
            Type viewType = Instance.Views.GetViewType(viewPerspective);
            if (viewType == null)
            {
                Console.WriteLine("View not found for " + viewPerspective.ToString());
                throw new TypeLoadException("View not found for " + viewPerspective.ToString());
            }

            Uri viewUri = new Uri("/" + viewType.Name + ".xaml", UriKind.Relative);

            // get the uri from the MXPhoneView attribute, if present
            object[] attributes = viewType.GetCustomAttributes(true);
            for (int i = 0; i < attributes.Length; i++)
            {
                if (attributes[i] is MXPhoneViewAttribute)
                {
                    viewUri = new Uri(((MXPhoneViewAttribute)attributes[i]).Uri, UriKind.Relative);
                    break;
                }
            }

            // stash the model away so we can get it back when the view shows up!
            ViewModels[controller.ModelType] = controller.GetModel();

            var page = fromView as PhoneApplicationPage;
            if (!(controller.View is PhoneApplicationPage) && controller.View != null && RenderLayer != null)
            {
                controller.View.Render();
                viewUri = RenderLayer(controller.View);
            }

            if (page != null)
            {
                // NOTE: assumes XAML file matches type name and no sub directories
                page.NavigationService.Navigate(viewUri);
            }
            else
            {
                if (_rootFrame != null)
                {
                    _rootFrame.Navigate(viewUri);
                }

                // failure, called too early or Something Very Bad Happened(tm)...
            }
        }
        public void OnControllerLoadComplete(IMXController controller, MXShowViewRequest showViewRequest)
        {
            if (_lastSeenViewModel != null)
            {
                // TODO - this requestStop is possibly called too late... but not sure we have any
                _lastSeenViewModel.RequestStop();
                _lastSeenViewModel = null;
            }

            var model = showViewRequest.ViewModel;

            _lastSeenViewModel = model as IMXViewModel;
            if (_lastSeenViewModel != null)
            {
                _lastSeenViewModel.ViewDispatcher = _dispatcherFactory();
            }
        }
Пример #44
0
        protected override void OnControllerLoadFailed(IMXController controller, Exception ex)
        {
            Console.WriteLine("Controller Load Failed: " + ex.Message);

            if (ControllerLoadFailed != null)
            {
                ControllerLoadFailed(controller, ex);
                return;
            }

            HideLoading();

            UIApplication.SharedApplication.InvokeOnMainThread(() => {
                UIAlertView alert = new UIAlertView("Load Failed", ex.Message, null, "OK", null);
                alert.Show();
            });
        }
Пример #45
0
        protected void StartViewForController(IMXView fromView, IMXController controller, string viewPerspective)
        {
            Type viewType = Views.GetViewType(controller.ModelType, viewPerspective);
            if (viewType == null)
            {
                Console.WriteLine("View not found for " + viewPerspective);
                throw new TypeLoadException("View not found for " + viewPerspective);
            }

            var viewUri = new Uri("/" + viewType.Name + ".xaml", UriKind.Relative);

            // get the uri from the MXPhoneView attribute, if present
            object[] attributes = viewType.GetCustomAttributes(true);
            foreach (MXPhoneViewAttribute t in attributes.OfType<MXPhoneViewAttribute>())
            {
                viewUri = new Uri((t).Uri, UriKind.Relative);
                break;
            }

            // stash the model away so we can get it back when the view shows up!
            ViewModels[controller.ModelType] = controller.GetModel();

            var page = fromView as PhoneApplicationPage;
            if (page != null)
            {
                // NOTE: assumes XAML file matches type name and no sub directories
                page.NavigationService.Navigate(viewUri);
            }
            else
            {
                if (_rootFrame != null)
                {
                    _rootFrame.Navigate(viewUri);
                }

                // failure, called too early or Something Very Bad Happened(tm)...
            }
        }
Пример #46
0
 /// <summary>
 /// Raises the controller load failed event.
 /// </summary>
 /// <param name="controller">The controller that failed to load.</param>
 /// <param name="ex">The exception that caused the load to fail.</param>
 protected override void OnControllerLoadFailed(IMXController controller, Exception ex)
 {
     Debug.WriteLine("OnControllerLoadFailed: " + ex.Message);
 }
 public override void Perform(IMXContainer container, IMXView fromView, IMXController controller)
 {
     container.Redirect(_redirectUrl);
 }
Пример #48
0
		protected override void OnControllerLoadFailed (IMXController controller, Exception ex)
		{
			Console.WriteLine("Controller Load Failed: " + ex.Message);
			
			if (ControllerLoadFailed != null) {
				ControllerLoadFailed(controller, ex);
				return;
			}

			HideLoading();
			
			UIAlertView alert = new UIAlertView("Load Failed", ex.Message, null, "OK", null);
			alert.Show();
		}
Пример #49
0
 protected override void OnControllerLoadComplete(IMXView fromView, IMXController controller, string viewPerspective, string navigatedUri)
 {
     Deployment.Current.Dispatcher.BeginInvoke(() => StartViewForController(fromView, controller, viewPerspective));
 }
Пример #50
0
 protected override void OnControllerLoadComplete(IMXView fromView, IMXController controller, MXViewPerspective viewPerspective)
 {
     controller.RenderView();
     if (controller.View.GetType().BaseType.GetGenericTypeDefinition() != typeof(MXWebkitView<>) && RenderLayer != null)
     {
        HtmlGenericControl control = RenderLayer(controller.View);
        if (controller.Uri == App.NavigateOnLoad)
        {
            MXWebkitView<object>.WriteToResponse(controller.ModelType.ToString(), control.Attributes["title"], control);
        }
        else
        {
            MXWebkitView<object>.WriteAjaxToResponse(controller.ModelType.ToString(), control.Attributes["title"], control);
        }
     }
 }
Пример #51
0
		public void LoadViewForController(IMXView fromView, IMXController controller, MXViewPerspective viewPerspective)
		{
			hideLoading();

			if (controller.View == null)
			{
				// get the view, create it if it has yet been created
				controller.View = Views.GetOrCreateView(viewPerspective);
				if (controller.View == null)
				{
					//Console.WriteLine("View not found for perspective!" + viewPerspective.ToString());
					throw new ArgumentException("View creation failed for perspective!" + viewPerspective.ToString());
				}
			}


			// asign the view it's model and render the contents of the view
			controller.View.SetModel(controller.GetModel());
			controller.View.Render();

			// pull the type from the view
			//ViewNavigationContext navigationContext = MXFormsNavigation.GetViewNavigationContext(controller.View);
			Page page = controller.View as Page;

			// iFactr binding options
			if (page == null)
				page = RenderLayer(controller.View);

			ViewNavigationContext navigationContext = MXFormsNavigation.GetViewNavigationContext(controller.View);
			formsNavigation.PushToModel(page);



		}
 protected override void OnControllerLoadBegin(IMXController controller)
 {
     Android.Util.Log.Debug("MXDroidContainer", "OnControllerLoadBegin");
 }
Пример #53
0
		/*
		public static IMXController NavigateFromButton(string url, Dictionary<string, string> parameters, UIBarButtonItem button)
		{
			//_stashButton = button;

			return Navigate(url, parameters);
		}
		*/
		
		void LoadViewForController(IMXView fromView, IMXController controller, MXViewPerspective viewPerspective)
		{
			HideLoading();
			
			if (controller.View == null)
			{
				// get the view, create it if it has yet been created
				controller.View = Views.GetOrCreateView(viewPerspective);
				if (controller.View == null)
				{
					Console.WriteLine("View not found for perspective!" + viewPerspective.ToString());
					throw new ArgumentException("View creation failed for perspective!" + viewPerspective.ToString());
				}
			}

			// asign the view it's model and render the contents of the view
			controller.View.SetModel(controller.GetModel());
			controller.View.Render();
			
			// pull the type from the view
			ViewNavigationContext navigationContext = MXTouchNavigation.GetViewNavigationContext(controller.View);
			UIViewController viewController = controller.View as UIViewController;
			
			if (navigationContext == ViewNavigationContext.Modal)
			{
				// treat as a modal/popup view
				_touchNavigation.PushToModel(viewController);
			}
			else if (navigationContext == ViewNavigationContext.InContext)
			{
				// it's just an in-context view, just slap it on top of the view that navigated it here!
				UIViewController parentViewController = fromView as UIViewController;
				parentViewController.NavigationController.PushViewController(viewController, true);
			}
			else 
			{
				// if the view is one of the views in the group
				MXTouchViewGroup viewGroup = null;
				MXTouchViewGroupItem viewGroupItem = null;
	
				foreach (MXTouchViewGroup vg in ViewGroups)
				{
					viewGroupItem = vg.Items.Find( item => item.ViewType == controller.View.GetType() );
					if (viewGroupItem != null) {
						viewGroup = vg;
						break;
					}
				}
				
				if (viewGroup != null)
				{
					// activate the group!
					_touchNavigation.PushToViewGroup(viewGroup, viewGroupItem, controller.View as UIViewController);
				}
				else
				{
					switch (navigationContext)
					{
					case ViewNavigationContext.Detail:
						_touchNavigation.PushToDetail(viewController);
						break;
					case ViewNavigationContext.Master:
						_touchNavigation.PushToMaster(viewController);
						break;
					}
				}
			}
			
            // handle initial view display if not already handled
			ShowView();
		}
 // currently this class adds no value whatsoever... but it does make the inheritance tree look nice!
 // keep this class for now - just in case there is future common functionality here
 public abstract void Perform(IMXContainer container, IMXView fromView, IMXController controller);
 protected override void OnControllerLoadFailed(IMXController controller, Exception ex)
 {
     Android.Util.Log.Debug("MXDroidContainer", "OnControllerLoadFailed: " + ex.Message);
 }
 public void AddEmptyRoute(IMXController defaultController, string actionName)
 {
     NavigationMap.Add(string.Empty, defaultController,
                       new Dictionary<string, string>()
                           {{MXConventionConstants.ActionParameterKeyName, actionName}});
 }
 public void AddEmptyRoute(IMXController defaultController)
 {
     NavigationMap.Add(string.Empty, defaultController);
 }
Пример #58
0
 public MXNavigation(string pattern, IMXController controller, Dictionary<string, string> parameters)
 {
     Controller = controller;
     Pattern = pattern;
     Parameters = parameters;
 }
Пример #59
0
 /// <summary>
 /// Called when a controller is about to be loaded.
 /// </summary>
 /// <param name="controller">The controller to be loaded.</param>
 /// <param name="fromView">The view that initiated the navigation that resulted in the controller being loaded.</param>
 protected override void OnControllerLoadBegin(IMXController controller, IMXView fromView)
 {
     Debug.WriteLine("OnControllerLoadBegin");
 }
 protected override void OnControllerLoadComplete(IMXView fromView, IMXController controller, MXViewPerspective viewPerspective)
 {
     _viewModelLifeCycleHelper.OnControllerLoadComplete(controller);
     base.OnControllerLoadComplete(fromView, controller, viewPerspective);
 }