summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Platform.Tizen/Renderers/MasterDetailPageRenderer.cs
blob: 0608039e639ea038ab6e4c62908778af171e1cc4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
using ElmSharp;

namespace Xamarin.Forms.Platform.Tizen
{
	public class MasterDetailPageRenderer : VisualElementRenderer<MasterDetailPage>
	{
		Native.MasterDetailPage _mdpage;

		/// <summary>
		/// Default constructor.
		/// </summary>
		public MasterDetailPageRenderer()
		{
			RegisterPropertyHandler("Master", UpdateMasterPage);
			RegisterPropertyHandler("Detail", UpdateDetailPage);
			RegisterPropertyHandler(MasterDetailPage.IsPresentedProperty,
				UpdateIsPresented);
			RegisterPropertyHandler(MasterDetailPage.MasterBehaviorProperty,
				UpdateMasterBehavior);
			RegisterPropertyHandler(MasterDetailPage.IsGestureEnabledProperty,
				UpdateIsGestureEnabled);
		}

		protected override void OnElementChanged(ElementChangedEventArgs<MasterDetailPage> e)
		{
			if (_mdpage == null)
			{
				_mdpage = new Native.MasterDetailPage(Forms.Context.MainWindow)
				{
					Master = GetNativePage(e.NewElement.Master),
					Detail = GetNativePage(e.NewElement.Detail),
					IsPresented = e.NewElement.IsPresented,
				};

				_mdpage.IsPresentedChanged += (sender, ev) =>
				{
					Element.IsPresented = _mdpage.IsPresented;
				};
				SetNativeControl(_mdpage);
			}

			if (e.OldElement != null)
			{
				(e.OldElement as IMasterDetailPageController).BackButtonPressed -= OnBackButtonPressed;
			}

			if (e.NewElement != null)
			{
				(e.NewElement as IMasterDetailPageController).BackButtonPressed += OnBackButtonPressed;
			}

			UpdateMasterBehavior();
			base.OnElementChanged(e);
		}

		void OnBackButtonPressed(object sender, BackButtonPressedEventArgs e)
		{
			if ((Element != null) && Element.IsPresented)
			{
				Element.IsPresented = false;
				e.Handled = true;
			}
		}

		EvasObject GetNativePage(Page page)
		{
			var pageRenderer = Platform.GetOrCreateRenderer(page);
			return pageRenderer.NativeView;
		}

		void UpdateMasterBehavior() {
			_mdpage.MasterBehavior = Element.MasterBehavior;
		}

		void UpdateMasterPage()
		{
			_mdpage.Master = GetNativePage(Element.Master);
		}

		void UpdateDetailPage()
		{
			_mdpage.Detail = GetNativePage(Element.Detail);
		}

		void UpdateIsPresented()
		{
			_mdpage.IsPresented = Element.IsPresented;
		}

		void UpdateIsGestureEnabled()
		{
			_mdpage.IsGestureEnabled = Element.IsGestureEnabled;
		}
	}
}