summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Platform.Tizen/Renderers/MasterDetailPageRenderer.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Xamarin.Forms.Platform.Tizen/Renderers/MasterDetailPageRenderer.cs')
-rw-r--r--Xamarin.Forms.Platform.Tizen/Renderers/MasterDetailPageRenderer.cs96
1 files changed, 96 insertions, 0 deletions
diff --git a/Xamarin.Forms.Platform.Tizen/Renderers/MasterDetailPageRenderer.cs b/Xamarin.Forms.Platform.Tizen/Renderers/MasterDetailPageRenderer.cs
new file mode 100644
index 00000000..9da812e9
--- /dev/null
+++ b/Xamarin.Forms.Platform.Tizen/Renderers/MasterDetailPageRenderer.cs
@@ -0,0 +1,96 @@
+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;
+ };
+ }
+
+ if (e.OldElement != null)
+ {
+ (e.OldElement as IMasterDetailPageController).BackButtonPressed -= BackButtonPressedHandler;
+ }
+
+ if (e.NewElement != null)
+ {
+ (e.NewElement as IMasterDetailPageController).BackButtonPressed += BackButtonPressedHandler;
+ }
+
+ UpdateMasterBehavior();
+ SetNativeControl(_mdpage);
+
+ base.OnElementChanged(e);
+ }
+
+ void BackButtonPressedHandler(object sender, BackButtonPressedEventArgs e)
+ {
+ if ((Element != null) && !Element.IsPresented)
+ {
+ Element.IsPresented = true;
+ 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;
+ }
+ }
+}