summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Platform.Tizen/Native/Window.cs
blob: 3e982ae5a495e0540f0f283134b5b83b17828e98 (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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
using System;
using ElmSharp;
using EWindow = ElmSharp.Window;
using ELayout = ElmSharp.Layout;

namespace Xamarin.Forms.Platform.Tizen.Native
{
	public class Window : EWindow
	{
		ELayout _layout;
		Conformant _conformant;

		/// <summary>
		/// Initializes a new instance of the Window class.
		/// </summary>
		public Window() : base("FormsWindow")
		{
			Initialize();
		}

		/// <summary>
		/// Notifies that the window has been closed.
		/// </summary>
		public event EventHandler Closed;

		/// <summary>
		/// Gets the current orientation.
		/// </summary>
		public DisplayOrientations CurrentOrientation
		{
			get
			{
				if (IsRotationSupported)
				{
					return GetDisplayOrientation();
				}
				else
				{
					return DisplayOrientations.None;
				}
			}
		}

		/// <summary>
		/// Gets or sets the orientation of a rectangular screen.
		/// </summary>
		public DisplayOrientations AvailableOrientations
		{
			get
			{
				if (IsRotationSupported)
				{
					return (DisplayOrientations)AvailableRotations;
				}
				else
				{
					return DisplayOrientations.None;
				}
			}
			set
			{
				if (IsRotationSupported)
				{
					AvailableRotations = (DisplayRotation)value;
				}
			}
		}

		public ELayout BaseLayout
		{
			get
			{
				return _layout;
			}

			private set
			{
				_layout = value;
			}
		}

		/// <summary>
		/// Sets the main page of Window.
		/// </summary>
		/// <param name="content">ElmSharp.EvasObject type page to be set.</param>
		public void SetMainPage(EvasObject content)
		{
			_layout.SetContent(content);
		}

		void Initialize()
		{
			// events
			Deleted += (sender, e) =>
			{
				Closed?.Invoke(this, EventArgs.Empty);
			};
			CloseRequested += (sender, e) =>
			{
				Unrealize();
			};

			Active();
			AutoDeletion = false;
			Show();

			_conformant = new Conformant(this);
			_conformant.Show();

			// Create the base (default) layout for the application
			_layout = new ELayout(_conformant);
			_layout.SetTheme("layout", "application", "default");
			_layout.Show();

			_conformant.SetContent(_layout);
			BaseLayout = _layout;
			AvailableOrientations = DisplayOrientations.Portrait | DisplayOrientations.Landscape | DisplayOrientations.PortraitFlipped | DisplayOrientations.LandscapeFlipped;
		}
		DisplayOrientations GetDisplayOrientation()
		{
			switch (Rotation)
			{
				case 0:
				return Native.DisplayOrientations.Portrait;

				case 90:
				return Native.DisplayOrientations.Landscape;

				case 180:
				return Native.DisplayOrientations.PortraitFlipped;

				case 270:
				return Native.DisplayOrientations.LandscapeFlipped;

				default:
				return Native.DisplayOrientations.None;
			}
		}
	}
}