Created
May 21, 2014 20:14
-
-
Save ChaseFlorell/c8aae0b8689b1f4bccca to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using Cirrious.MvvmCross.Binding.Touch.Views; | |
using Cirrious.MvvmCross.Touch.Views.Presenters; | |
using FutureState.BreathingRoom.Touch.Ui.Controllers; | |
using FutureState.BreathingRoom.Touch.Ui.Fragments; | |
using MonoTouch.UIKit; | |
using SlidingPanels.Lib.PanelContainers; | |
namespace FutureState.BreathingRoom.Touch.Ui.Presenters | |
{ | |
public class MvxSlidingPanelsViewPresenter : MvxTouchViewPresenter | |
{ | |
private readonly UIWindow _window; | |
public MvxSlidingPanelsViewPresenter(UIApplicationDelegate applicationDelegate, UIWindow window) | |
: base(applicationDelegate, window) | |
{ | |
_window = window; | |
} | |
public SlidingPanelsNavController SlidingNavController { get { return MasterNavigationController as SlidingPanelsNavController; } } | |
public DefaultNavigationController DefaultNavController { get { return new DefaultNavigationController(new UIViewController()); } } | |
public UIViewController RootController { get; private set; } | |
protected override void ShowFirstView(UIViewController viewController) | |
{ | |
// Show the first view | |
base.ShowFirstView(viewController); | |
// create the Sliding Panels View Controller and make it a child controller | |
// of the root controller | |
switch (viewController.GetType().Name) | |
{ | |
case "RootView": | |
RootController.AddChildViewController(SlidingNavController); | |
RootController.View.AddSubview(SlidingNavController.View); | |
// use the first view to create the sliding panels | |
AddPanel<NavigationFragment>(PanelType.LeftPanel, 280); | |
break; | |
default: | |
RootController.AddChildViewController(DefaultNavController); | |
RootController.View.AddSubview(DefaultNavController.View); | |
break; | |
} | |
} | |
protected void AddPanel<T>(PanelType panelType, float width) where T : MvxView | |
{ | |
var controller = new UIViewController(); | |
var frame = UIScreen.MainScreen.Bounds; | |
frame.Width = width; | |
controller.View.Frame = frame; | |
var viewToAdd = (T)Activator.CreateInstance(typeof(T), width, SlidingNavController); | |
controller.Add(viewToAdd); | |
// Insert the view into a new container (of the right type) and insert | |
// that into the sliding panels controller | |
switch (panelType) | |
{ | |
case PanelType.LeftPanel: | |
SlidingNavController.InsertPanel(new LeftPanelContainer(controller)); | |
break; | |
case PanelType.RightPanel: | |
SlidingNavController.InsertPanel(new RightPanelContainer(controller)); | |
break; | |
case PanelType.BottomPanel: | |
SlidingNavController.InsertPanel(new BottomPanelContainer(controller)); | |
break; | |
default: | |
throw new ArgumentException("PanelType is invalid"); | |
} | |
} | |
protected override UINavigationController CreateNavigationController(UIViewController viewController) | |
{ | |
var navController = new SlidingPanelsNavController(viewController); | |
RootController = new UIViewController(); | |
return navController; | |
} | |
protected override void SetWindowRootViewController(UIViewController controller) | |
{ | |
_window.AddSubview(RootController.View); | |
_window.RootViewController = RootController; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment