[NUI] TCSACR-226 code change (#1032)
[platform/core/csapi/tizenfx.git] / src / ElmSharp / ElmSharp / Panel.cs
1 /*
2  * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  * Licensed under the Apache License, Version 2.0 (the License);
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an AS IS BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 using System;
18
19 namespace ElmSharp
20 {
21     /// <summary>
22     /// Enumeration for the PanelDirection types.
23     /// </summary>
24     /// <since_tizen> preview </since_tizen>
25     public enum PanelDirection
26     {
27         /// <summary>
28         /// Top to bottom.
29         /// </summary>
30         Top = 0,
31         /// <summary>
32         /// Bottom to top.
33         /// </summary>
34         Bottom,
35         /// <summary>
36         /// Left to right.
37         /// </summary>
38         Left,
39         /// <summary>
40         /// Right to left.
41         /// </summary>
42         Right,
43     }
44
45     /// <summary>
46     /// The Panel is a container that can contain subobjects.
47     /// </summary>
48     /// <since_tizen> preview </since_tizen>
49     public class Panel : Layout
50     {
51         SmartEvent _toggled;
52         SmartEvent _scrolled;
53
54         /// <summary>
55         /// Creates and initializes a new instance of the Panel class.
56         /// </summary>
57         /// <param name="parent">The EvasObject to which the new panel will be attached as a child.</param>
58         /// <since_tizen> preview </since_tizen>
59         public Panel(EvasObject parent) : base(parent)
60         {
61             _toggled = new SmartEvent(this, this.RealHandle, "toggled");
62             _scrolled = new SmartEvent(this, this.RealHandle, "scroll");
63
64             _toggled.On += (s, e) => Toggled?.Invoke(this, EventArgs.Empty);
65             _scrolled.On += (s, e) => Scrolled?.Invoke(this, EventArgs.Empty);
66         }
67
68         /// <summary>
69         /// Sets or gets the hidden status of a given Panel widget.
70         /// </summary>
71         /// <since_tizen> preview </since_tizen>
72         public bool IsOpen
73         {
74             get
75             {
76                 return !Interop.Elementary.elm_panel_hidden_get(RealHandle);
77             }
78             set
79             {
80                 Interop.Elementary.elm_panel_hidden_set(RealHandle, !value);
81             }
82         }
83
84         /// <summary>
85         /// Sets or gets the direction of a given Panel widget.
86         /// </summary>
87         /// <since_tizen> preview </since_tizen>
88         public PanelDirection Direction
89         {
90             get
91             {
92                 return (PanelDirection)Interop.Elementary.elm_panel_orient_get(RealHandle);
93             }
94             set
95             {
96                 Interop.Elementary.elm_panel_orient_set(RealHandle, (int)value);
97             }
98         }
99
100         /// <summary>
101         /// Toggled will be triggered when the panel is toggled.
102         /// </summary>
103         /// <since_tizen> preview </since_tizen>
104         public event EventHandler Toggled;
105
106         /// <summary>
107         /// Scrolled will be triggered when the panel has been scrolled. This event is emitted only when the panel is scrollable
108         /// </summary>
109         /// <since_tizen> preview </since_tizen>
110         public event EventHandler Scrolled;
111
112         /// <summary>
113         /// Enable or disable scrolling in the panel.
114         /// </summary>
115         /// <param name="enable">
116         /// Bool value can be false or true.
117         /// </param>
118         /// <since_tizen> preview </since_tizen>
119         public void SetScrollable(bool enable)
120         {
121             Interop.Elementary.elm_panel_scrollable_set(RealHandle, enable);
122         }
123
124         /// <summary>
125         /// Sets the scroll size of the panel.
126         /// </summary>
127         /// <param name="ratio">
128         /// The size of the scroll area.
129         /// </param>
130         /// <since_tizen> preview </since_tizen>
131         public void SetScrollableArea(double ratio)
132         {
133             Interop.Elementary.elm_panel_scrollable_content_size_set(RealHandle, ratio);
134         }
135
136         /// <summary>
137         /// Toggles the hidden state of the panel.
138         /// </summary>
139         /// <since_tizen> preview </since_tizen>
140         public void Toggle()
141         {
142             Interop.Elementary.elm_panel_toggle(RealHandle);
143         }
144
145         /// <summary>
146         /// Creates a widget handle.
147         /// </summary>
148         /// <param name="parent">Parent EvasObject.</param>
149         /// <returns>Handle IntPtr.</returns>
150         /// <since_tizen> preview </since_tizen>
151         protected override IntPtr CreateHandle(EvasObject parent)
152         {
153             IntPtr handle = Interop.Elementary.elm_layout_add(parent.Handle);
154             Interop.Elementary.elm_layout_theme_set(handle, "layout", "elm_widget", "default");
155
156             RealHandle = Interop.Elementary.elm_panel_add(handle);
157             Interop.Elementary.elm_object_part_content_set(handle, "elm.swallow.content", RealHandle);
158
159             return handle;
160         }
161     }
162 }