[NUI] Add WindowSystem's quickpanel APIs (#1715)
authorjeon <42333230+jhyuni@users.noreply.github.com>
Fri, 10 Jul 2020 06:01:07 +0000 (15:01 +0900)
committerGitHub <noreply@github.com>
Fri, 10 Jul 2020 06:01:07 +0000 (15:01 +0900)
16 files changed:
packaging/PlatformFileList.txt
src/Tizen.NUI.WindowSystem/Tizen.NUI.WindowSystem.csproj [new file with mode: 0644]
src/Tizen.NUI.WindowSystem/src/internal/Interop/Interop.QuickPanelClient.cs [new file with mode: 0644]
src/Tizen.NUI.WindowSystem/src/internal/Interop/Interop.QuickPanelService.cs [new file with mode: 0644]
src/Tizen.NUI.WindowSystem/src/internal/Interop/Interop.TizenRegion.cs [new file with mode: 0644]
src/Tizen.NUI.WindowSystem/src/internal/Interop/Interop.TizenShell.cs [new file with mode: 0644]
src/Tizen.NUI.WindowSystem/src/public/QuickPanelClient.cs [new file with mode: 0644]
src/Tizen.NUI.WindowSystem/src/public/QuickPanelService.cs [new file with mode: 0644]
src/Tizen.NUI.WindowSystem/src/public/TizenRegion.cs [new file with mode: 0644]
src/Tizen.NUI.WindowSystem/src/public/TizenShell.cs [new file with mode: 0644]
src/Tizen.NUI/Properties/AssemblyInfo.cs
test/Tizen.NUI.WindowSystem.Samples/Tizen.NUI.WindowSystem.Samples.cs [new file with mode: 0644]
test/Tizen.NUI.WindowSystem.Samples/Tizen.NUI.WindowSystem.Samples.csproj [new file with mode: 0644]
test/Tizen.NUI.WindowSystem.Samples/Tizen.NUI.WindowSystem.Samples.sln [new file with mode: 0644]
test/Tizen.NUI.WindowSystem.Samples/shared/res/Tizen.NUI.WindowSystem.Samples.png [new file with mode: 0644]
test/Tizen.NUI.WindowSystem.Samples/tizen-manifest.xml [new file with mode: 0644]

index 98c2a6d..dd4a523 100755 (executable)
@@ -92,6 +92,7 @@ Tizen.Nlp.dll                                      #mobile #mobile-emul
 Tizen.NUI.dll                                      #common #mobile #mobile-emul #tv #wearable
 Tizen.NUI.Components.dll                           #common #mobile #mobile-emul #tv #wearable
 Tizen.NUI.Wearable.dll                             #wearable
+Tizen.NUI.WindowSystem.dll                         #common #mobile #mobile-emul #wearable
 Tizen.PhonenumberUtils.dll                         #mobile #mobile-emul #wearable
 Tizen.Pims.Calendar.dll                            #common #mobile #mobile-emul #tv #wearable
 Tizen.Pims.Contacts.dll                            #mobile #mobile-emul #wearable
diff --git a/src/Tizen.NUI.WindowSystem/Tizen.NUI.WindowSystem.csproj b/src/Tizen.NUI.WindowSystem/Tizen.NUI.WindowSystem.csproj
new file mode 100644 (file)
index 0000000..bea1f4c
--- /dev/null
@@ -0,0 +1,21 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+       <PropertyGroup>
+               <TargetFramework>netstandard2.0</TargetFramework>
+               <TizenCreateTpkOnBuild>false</TizenCreateTpkOnBuild>
+       </PropertyGroup>
+
+       <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+               <DebugType>portable</DebugType>
+       </PropertyGroup>
+
+       <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+               <DebugType>None</DebugType>
+       </PropertyGroup>
+
+       <ItemGroup>
+               <ProjectReference Include="..\Tizen.NUI\Tizen.NUI.csproj" />
+               <ProjectReference Include="..\Tizen.System.Information\Tizen.System.Information.csproj" />
+       </ItemGroup>
+
+</Project>
diff --git a/src/Tizen.NUI.WindowSystem/src/internal/Interop/Interop.QuickPanelClient.cs b/src/Tizen.NUI.WindowSystem/src/internal/Interop/Interop.QuickPanelClient.cs
new file mode 100644 (file)
index 0000000..b8536c7
--- /dev/null
@@ -0,0 +1,55 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Tizen.NUI
+{
+    internal static partial class Interop
+    {
+        internal static partial class QuickPanelClient
+        {
+            const string lib = "libtzsh_quickpanel.so.0";
+
+            [global::System.Runtime.InteropServices.DllImport(lib, EntryPoint = "tzsh_quickpanel_create_with_type")]
+            internal static extern IntPtr CreateWithType(IntPtr tzsh, IntPtr win, int type);
+
+            [global::System.Runtime.InteropServices.DllImport(lib, EntryPoint = "tzsh_quickpanel_destroy")]
+            internal static extern int Destroy(IntPtr qpClient);
+
+            [global::System.Runtime.InteropServices.DllImport(lib, EntryPoint = "tzsh_quickpanel_visible_get")]
+            internal static extern int GetVisible(IntPtr qpClient, out int vis);
+
+            [global::System.Runtime.InteropServices.DllImport(lib, EntryPoint = "tzsh_quickpanel_scrollable_state_get")]
+            internal static extern int GetScrollableState(IntPtr qpClient, out int scroll);
+
+            [global::System.Runtime.InteropServices.DllImport(lib, EntryPoint = "tzsh_quickpanel_scrollable_state_set")]
+            internal static extern int SetScrollableState(IntPtr qpClient, int scroll);
+
+            [global::System.Runtime.InteropServices.DllImport(lib, EntryPoint = "tzsh_quickpanel_orientation_get")]
+            internal static extern int GetOrientation(IntPtr qpClient, out int orientation);
+
+            [global::System.Runtime.InteropServices.DllImport(lib, EntryPoint = "tzsh_quickpanel_show")]
+            internal static extern int Show(IntPtr qpClient);
+
+            [global::System.Runtime.InteropServices.DllImport(lib, EntryPoint = "tzsh_quickpanel_hide")]
+            internal static extern int Hide(IntPtr qpClient);
+
+            internal delegate void QuickPanelEventCallback(int type, IntPtr ev_info, IntPtr data);
+
+            [global::System.Runtime.InteropServices.DllImport(lib, EntryPoint = "tzsh_quickpanel_event_handler_add")]
+            internal static extern IntPtr AddEventHandler(IntPtr qpClient, int type, QuickPanelEventCallback func, IntPtr data);
+
+            [global::System.Runtime.InteropServices.DllImport(lib, EntryPoint = "tzsh_quickpanel_event_handler_del")]
+            internal static extern int DelEventHandler(IntPtr qpClient, IntPtr eventHandler);
+
+            [global::System.Runtime.InteropServices.DllImport(lib, EntryPoint = "tzsh_quickpanel_event_visible_get")]
+            internal static extern int GetEventVisible(IntPtr ev_info, out int state);
+
+            [global::System.Runtime.InteropServices.DllImport(lib, EntryPoint = "tzsh_quickpanel_event_orientation_get")]
+            internal static extern int GetEventOrientation(IntPtr ev_info, out int state);
+
+            internal const string EventStringVisible = "tzsh_quickpanel_event_visible";
+            internal const string EventStringOrientation = "tzsh_quickpanel_event_orientation";
+        }
+    }
+}
diff --git a/src/Tizen.NUI.WindowSystem/src/internal/Interop/Interop.QuickPanelService.cs b/src/Tizen.NUI.WindowSystem/src/internal/Interop/Interop.QuickPanelService.cs
new file mode 100644 (file)
index 0000000..5e67c48
--- /dev/null
@@ -0,0 +1,41 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Tizen.NUI
+{
+    internal static partial class Interop
+    {
+        internal static partial class QuickPanelService
+        {
+            const string lib = "libtzsh_quickpanel_service.so.0";
+
+            [global::System.Runtime.InteropServices.DllImport(lib, EntryPoint = "tzsh_quickpanel_service_create_with_type")]
+            internal static extern IntPtr CreateWithType(IntPtr tzsh, IntPtr win, int type);
+
+            [global::System.Runtime.InteropServices.DllImport(lib, EntryPoint = "tzsh_quickpanel_service_destroy")]
+            internal static extern int Destroy(IntPtr service);
+
+            [global::System.Runtime.InteropServices.DllImport(lib, EntryPoint = "tzsh_quickpanel_service_type_get")]
+            internal static extern int GetType(IntPtr service, out int type);
+
+            [global::System.Runtime.InteropServices.DllImport(lib, EntryPoint = "tzsh_quickpanel_service_show")]
+            internal static extern int Show(IntPtr service);
+
+            [global::System.Runtime.InteropServices.DllImport(lib, EntryPoint = "tzsh_quickpanel_service_hide")]
+            internal static extern int Hide(IntPtr service);
+
+            [global::System.Runtime.InteropServices.DllImport(lib, EntryPoint = "tzsh_quickpanel_service_content_region_set")]
+            internal static extern int SetContentRegion(IntPtr service, uint angle, IntPtr region);
+
+            [global::System.Runtime.InteropServices.DllImport(lib, EntryPoint = "tzsh_quickpanel_service_handler_region_set")]
+            internal static extern int SetHandlerRegion(IntPtr service, uint angle, IntPtr region);
+
+            [global::System.Runtime.InteropServices.DllImport(lib, EntryPoint = "tzsh_quickpanel_service_effect_type_set")]
+            internal static extern int SetEffectType(IntPtr service, int type);
+
+            [global::System.Runtime.InteropServices.DllImport(lib, EntryPoint = "tzsh_quickpanel_service_scroll_lock")]
+            internal static extern int LockScroll(IntPtr service, bool locked);
+        }
+    }
+}
diff --git a/src/Tizen.NUI.WindowSystem/src/internal/Interop/Interop.TizenRegion.cs b/src/Tizen.NUI.WindowSystem/src/internal/Interop/Interop.TizenRegion.cs
new file mode 100644 (file)
index 0000000..c42297a
--- /dev/null
@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Tizen.NUI
+{
+    internal static partial class Interop
+    {
+        internal static partial class TizenRegion
+        {
+            const string lib = "libtzsh_common.so.0";
+
+            [global::System.Runtime.InteropServices.DllImport(lib, EntryPoint = "tzsh_region_create")]
+            internal static extern IntPtr Create(IntPtr tzsh);
+
+            [global::System.Runtime.InteropServices.DllImport(lib, EntryPoint = "tzsh_region_destroy")]
+            internal static extern int Destroy(IntPtr region);
+
+            [global::System.Runtime.InteropServices.DllImport(lib, EntryPoint = "tzsh_region_add")]
+            internal static extern int Add(IntPtr region, int x, int y, int w, int h);
+
+            [global::System.Runtime.InteropServices.DllImport(lib, EntryPoint = "tzsh_region_subtract")]
+            internal static extern int Subtract(IntPtr region, int x, int y, int w, int h);
+        }
+    }
+}
diff --git a/src/Tizen.NUI.WindowSystem/src/internal/Interop/Interop.TizenShell.cs b/src/Tizen.NUI.WindowSystem/src/internal/Interop/Interop.TizenShell.cs
new file mode 100644 (file)
index 0000000..4e1cb18
--- /dev/null
@@ -0,0 +1,41 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Tizen.NUI
+{
+    internal static partial class Interop
+    {
+        internal static partial class TizenShell
+        {
+            const string lib = "libtzsh_common.so.0";
+
+            [global::System.Runtime.InteropServices.DllImport(lib, EntryPoint = "tzsh_create")]
+            internal static extern IntPtr Create(int type);
+
+            [global::System.Runtime.InteropServices.DllImport(lib, EntryPoint = "tzsh_destroy")]
+            internal static extern int Destroy(IntPtr tzsh);
+
+            [global::System.Runtime.InteropServices.DllImport(lib, EntryPoint = "tzsh_event_type_new")]
+            internal static extern int NewEventType(IntPtr tzsh, string name);
+
+            internal enum ToolKitType
+            {
+                Unknown = 0,
+                Efl = 1,
+            }
+
+            private const int ErrorTzsh = -0x02860000;
+
+            internal enum ErrorCode
+            {
+                None = Tizen.Internals.Errors.ErrorCode.None,                            /* Successful */
+                OutOfMemory = Tizen.Internals.Errors.ErrorCode.OutOfMemory,              /* Out of memory */
+                InvalidParameter = Tizen.Internals.Errors.ErrorCode.InvalidParameter,    /* Invalid parameter */
+                PermissionDenied = Tizen.Internals.Errors.ErrorCode.PermissionDenied,    /* Permission denied */
+                NotSupported = Tizen.Internals.Errors.ErrorCode.NotSupported,            /* NOT supported */
+                NoService = ErrorTzsh | 0x01,                                            /* Service does not exist */
+            }
+        }
+    }
+}
diff --git a/src/Tizen.NUI.WindowSystem/src/public/QuickPanelClient.cs b/src/Tizen.NUI.WindowSystem/src/public/QuickPanelClient.cs
new file mode 100644 (file)
index 0000000..756ba3c
--- /dev/null
@@ -0,0 +1,510 @@
+/*
+ * Copyright(c) 2020 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Tizen.Applications.Exceptions;
+using Tizen.System;
+
+namespace Tizen.NUI.WindowSystem.Shell
+{
+    /// <summary>
+    /// Class for the Tizen quickpanel client.
+    /// </summary>
+    /// <since_tizen> 8 </since_tizen>
+    public class QuickPanelClient : IDisposable
+    {
+        private TizenShell _tzsh;
+        private IntPtr _tzshQpClient;
+        private int _tzshWin;
+        private bool disposed = false;
+        private bool isDisposeQueued = false;
+        private Window.WindowOrientation _screenOrientation = Window.WindowOrientation.Portrait;
+
+        private int _visibleEventType;
+        private IntPtr _visibleEventHandler;
+        private Interop.QuickPanelClient.QuickPanelEventCallback _onVisibleChanged;
+        private event EventHandler<VisibleState> _visibleChanged;
+        /// <summary>
+        /// Emits the event when the visible state of the quickpanel service window is changed.
+        /// </summary>
+        /// <exception cref="ArgumentException">Thrown when failed of invalid argument.</exception>
+        /// <since_tizen> 8 </since_tizen>
+        public event EventHandler<VisibleState> VisibleChanged
+        {
+            add
+            {
+                if (_visibleChanged == null)
+                {
+                    if (_visibleEventType == 0)
+                    {
+                        _visibleEventType = Interop.TizenShell.NewEventType(_tzsh.GetNativeHandle(), Interop.QuickPanelClient.EventStringVisible);
+                    }
+                    _onVisibleChanged = OnVisibleChanged;
+                    _visibleEventHandler = Interop.QuickPanelClient.AddEventHandler(_tzshQpClient, _visibleEventType, _onVisibleChanged, IntPtr.Zero);
+                    if (_visibleEventHandler == IntPtr.Zero)
+                    {
+                        int err = Tizen.Internals.Errors.ErrorFacts.GetLastResult();
+                        _tzsh.ErrorCodeThrow(err);
+                    }
+                }
+                _visibleChanged += value;
+            }
+            remove
+            {
+                int _res;
+                _visibleChanged -= value;
+                if (_visibleChanged == null)
+                {
+                    _res = Interop.QuickPanelClient.DelEventHandler(_tzshQpClient, _visibleEventHandler);
+                    _tzsh.ErrorCodeThrow(_res);
+                }
+            }
+        }
+
+        private int _orientationEventType;
+        private IntPtr _orientationEventHandler;
+        private Interop.QuickPanelClient.QuickPanelEventCallback _onOrientationChanged;
+        private event EventHandler<Window.WindowOrientation> _orientationChanged;
+        /// <summary>
+        /// Emits the event when the orientation of the quickpanel service window is changed.
+        /// </summary>
+        /// <exception cref="ArgumentException">Thrown when failed of invalid argument.</exception>
+        /// <since_tizen> 8 </since_tizen>
+        public event EventHandler<Window.WindowOrientation> OrientationChanged
+        {
+            add
+            {
+                if (_orientationChanged == null)
+                {
+                    if (_orientationEventType == 0)
+                    {
+                        _orientationEventType = Interop.TizenShell.NewEventType(_tzsh.GetNativeHandle(), Interop.QuickPanelClient.EventStringOrientation);
+                    }
+                    _onOrientationChanged = OnOrientationChanged;
+                    _orientationEventHandler = Interop.QuickPanelClient.AddEventHandler(_tzshQpClient, _orientationEventType, _onOrientationChanged, IntPtr.Zero);
+                    if (_orientationEventHandler == IntPtr.Zero)
+                    {
+                        int err = Tizen.Internals.Errors.ErrorFacts.GetLastResult();
+                        _tzsh.ErrorCodeThrow(err);
+                    }
+                }
+                _orientationChanged += value;
+            }
+            remove
+            {
+                int _res;
+                _orientationChanged -= value;
+                if (_orientationChanged == null)
+                {
+                    _res = Interop.QuickPanelClient.DelEventHandler(_tzshQpClient, _orientationEventHandler);
+                    _tzsh.ErrorCodeThrow(_res);
+                }
+            }
+        }
+
+        /// <summary>
+        /// Enumeration for type of quickpanel service window.
+        /// </summary>
+        /// <since_tizen> 8 </since_tizen>
+        public enum Types
+        {
+            /// <summary>
+            /// Unknown type. There is no quickpanel service.
+            /// </summary>
+            Unknown = 0x0,
+            /// <summary>
+            /// System default type.
+            /// </summary>
+            SystemDefault = 0x1,
+            /// <summary>
+            /// Context menu type.
+            /// </summary>
+            ContextMenu = 0x2,
+            /// <summary>
+            /// Apps menu type.
+            /// </summary>
+            AppsMenu = 0x3,
+        }
+
+        /// <summary>
+        /// Enumeration for visible state of quickpanel service window.
+        /// </summary>
+        /// <since_tizen> 8 </since_tizen>
+        public enum VisibleState
+        {
+            /// <summary>
+            /// Unknown state. There is no quickpanel service.
+            /// </summary>
+            /// <since_tizen> 8 </since_tizen>
+            Unknown = 0x0,
+            /// <summary>
+            /// Shown state.
+            /// </summary>
+            /// <since_tizen> 8 </since_tizen>
+            Shown = 0x1,
+            /// <summary>
+            /// Hidden state.
+            /// </summary>
+            /// <since_tizen> 8 </since_tizen>
+            Hidden = 0x2,
+        }
+
+        /// <summary>
+        /// Enumeration for scrollable state of quickpanel service window.
+        /// </summary>
+        /// <since_tizen> 8 </since_tizen>
+        public enum ScrollableState
+        {
+            /// <summary>
+            /// Unknown state. There is no quickpanel service.
+            /// </summary>
+            /// <since_tizen> 8 </since_tizen>
+            Unknown = 0x0,
+            /// <summary>
+            /// Scrollable state.
+            /// </summary>
+            /// <since_tizen> 8 </since_tizen>
+            Set = 0x1,
+            /// <summary>
+            /// Not scrollable state.
+            /// </summary>
+            /// <since_tizen> 8 </since_tizen>
+            Unset = 0x2,
+            /// <summary>
+            /// Retain scrollable state.
+            /// </summary>
+            /// <since_tizen> 8 </since_tizen>
+            Retain = 0x3,
+        }
+
+        /// <summary>
+        /// Enumeration for orientation state of quickpanel service window.
+        /// </summary>
+        private enum OrientationState
+        {
+            /// <summary>
+            /// Unknown state. There is no quickpanel service.
+            /// </summary>
+            Unknown = 0x0,
+            /// <summary>
+            /// Radius 0
+            /// </summary>
+            Angle_0 = 0x1,
+            /// <summary>
+            /// 90
+            /// </summary>
+            Angle_90 = 0x2,
+            /// <summary>
+            /// 180
+            /// </summary>
+            Angle_180 = 0x3,
+            /// <summary>
+            /// 270
+            /// </summary>
+            Angle_270 = 0x4,
+        }
+
+        /// <summary>
+        /// Creates a new Quickpanel Client handle.
+        /// </summary>
+        /// <param name="tzShell">The TizenShell instance.</param>
+        /// <param name="win">The window to provide service of the quickpanel.</param>
+        /// <param name="type">The type of quickpanel service.</param>
+        /// <exception cref="Tizen.Applications.Exceptions.OutOfMemoryException">Thrown when the memory is not enough to allocate.</exception>
+        /// <exception cref="ArgumentException">Thrown when failed of invalid argument.</exception>
+        /// <exception cref="ArgumentNullException">Thrown when a argument is null.</exception>
+        /// <since_tizen> 8 </since_tizen>
+        public QuickPanelClient(TizenShell tzShell, Window win, Types type)
+        {
+            int width = 0, height = 0;
+            if (tzShell == null)
+            {
+                throw new ArgumentNullException((string)"tzShell");
+            }
+            if (tzShell.GetNativeHandle() == IntPtr.Zero)
+            {
+                throw new ArgumentException("tzShell is not initialized.");
+            }
+            if (win == null)
+            {
+                throw new ArgumentNullException((string)"win");
+            }
+
+            _tzsh = tzShell;
+            _tzshWin = win.GetNativeId();
+            _tzshQpClient = Interop.QuickPanelClient.CreateWithType(_tzsh.GetNativeHandle(), (IntPtr)_tzshWin, (int)type);
+            if (_tzshQpClient == IntPtr.Zero)
+            {
+                int err = Tizen.Internals.Errors.ErrorFacts.GetLastResult();
+                _tzsh.ErrorCodeThrow(err);
+            }
+
+            Information.TryGetValue("http://tizen.org/feature/screen.width", out width);
+            Information.TryGetValue("http://tizen.org/feature/screen.height", out height);
+            if (width > height) _screenOrientation = Window.WindowOrientation.Landscape;
+        }
+
+        /// <summary>
+        /// Destructor.
+        /// </summary>
+        /// <since_tizen> 8 </since_tizen>
+        ~QuickPanelClient()
+        {
+            if (!isDisposeQueued)
+            {
+                isDisposeQueued = true;
+                DisposeQueue.Instance.Add(this);
+            }
+        }
+
+        /// <summary>
+        /// Dispose.
+        /// </summary>
+        /// <exception cref="MemberAccessException">Thrown when private memeber is a corrupted.</exception>
+        /// <since_tizen> 8 </since_tizen>
+        public void Dispose()
+        {
+            if (isDisposeQueued)
+            {
+                Dispose(DisposeTypes.Implicit);
+            }
+            else
+            {
+                Dispose(DisposeTypes.Explicit);
+                GC.SuppressFinalize(this);
+            }
+        }
+
+        /// <inheritdoc/>
+        protected virtual void Dispose(DisposeTypes type)
+        {
+            int res;
+            if (!disposed)
+            {
+                if (_tzshQpClient != IntPtr.Zero)
+                {
+                    res = Interop.QuickPanelClient.Destroy(_tzshQpClient);
+                    try
+                    {
+                        _tzsh.ErrorCodeThrow(res);
+                    }
+                    catch (ArgumentException e)
+                    {
+                        throw new MemberAccessException("QuickPanelClient is a corrupted");
+                    }
+                    _tzshQpClient = IntPtr.Zero;
+                }
+                disposed = true;
+            }
+        }
+
+        private Window.WindowOrientation ConvertOrientation(OrientationState state)
+        {
+            if (_screenOrientation == Window.WindowOrientation.Portrait)
+            {
+                if (state == OrientationState.Angle_90)
+                {
+                    return Window.WindowOrientation.Landscape;
+                }
+                else if (state == OrientationState.Angle_180)
+                {
+                    return Window.WindowOrientation.PortraitInverse;
+                }
+                else if (state == OrientationState.Angle_270)
+                {
+                    return Window.WindowOrientation.LandscapeInverse;
+                }
+                else
+                {
+                    return Window.WindowOrientation.Portrait;
+                }
+            }
+            else
+            {
+                if (state == OrientationState.Angle_90)
+                {
+                    return Window.WindowOrientation.Portrait;
+                }
+                else if (state == OrientationState.Angle_180)
+                {
+                    return Window.WindowOrientation.LandscapeInverse;
+                }
+                else if (state == OrientationState.Angle_270)
+                {
+                    return Window.WindowOrientation.PortraitInverse;
+                }
+                else
+                {
+                    return Window.WindowOrientation.Landscape;
+                }
+            }
+        }
+
+        /// <exception cref="ArgumentException" > Thrown when failed of invalid argument.</exception>
+        private void OnVisibleChanged(int type, IntPtr ev_info, IntPtr data)
+        {
+            int res;
+            int state;
+
+            res = Interop.QuickPanelClient.GetEventVisible(ev_info, out state);
+            _tzsh.ErrorCodeThrow(res);
+
+            _visibleChanged?.Invoke(this, (VisibleState)state);
+        }
+
+        /// <exception cref="ArgumentException" > Thrown when failed of invalid argument.</exception>
+        private void OnOrientationChanged(int type, IntPtr ev_info, IntPtr data)
+        {
+            int res;
+            int state;
+            Window.WindowOrientation orientation;
+
+            res = Interop.QuickPanelClient.GetEventOrientation(ev_info, out state);
+            _tzsh.ErrorCodeThrow(res);
+
+            orientation = ConvertOrientation((OrientationState)state);
+
+            _orientationChanged?.Invoke(this, orientation);
+        }
+
+        /// <summary>
+        /// Gets the visible state of the quickpanel.
+        /// </summary>
+        /// <returns>The visible state of the quickpanel service window.</returns>
+        /// <exception cref="ArgumentException" > Thrown when failed of invalid argument.</exception>
+        /// <exception cref="InvalidOperationException">Thrown when failed because of an invalid operation or no service.</exception>
+        /// <since_tizen> 8 </since_tizen>
+        public VisibleState Visible
+        {
+            get
+            {
+                return GetVisible();
+            }
+        }
+
+        private VisibleState GetVisible()
+        {
+            int res;
+            int vis;
+
+            res = Interop.QuickPanelClient.GetVisible(_tzshQpClient, out vis);
+
+            _tzsh.ErrorCodeThrow(res);
+
+            return (VisibleState)vis;
+        }
+
+        /// <summary>
+        /// Gets or sets the window's scrollable state of the quickpanel service window.
+        /// </summary>
+        /// <returns>The scrollable state of the quickpanel service window.</returns>
+        /// <exception cref="ArgumentException" > Thrown when failed of invalid argument.</exception>
+        /// <exception cref="InvalidOperationException">Thrown when failed because of an invalid operation or no service.</exception>
+        /// <since_tizen> 8 </since_tizen>
+        public ScrollableState Scrollable
+        {
+            get
+            {
+                return GetScrollable();
+            }
+            set
+            {
+                SetScrollable(value);
+            }
+        }
+
+        private ScrollableState GetScrollable()
+        {
+            int res;
+            int scroll;
+
+            res = Interop.QuickPanelClient.GetScrollableState(_tzshQpClient, out scroll);
+
+            _tzsh.ErrorCodeThrow(res);
+
+            return (ScrollableState)scroll;
+        }
+
+        private void SetScrollable(ScrollableState scroll)
+        {
+            int res;
+
+            res = Interop.QuickPanelClient.SetScrollableState(_tzshQpClient, (int)scroll);
+
+            _tzsh.ErrorCodeThrow(res);
+        }
+
+        /// <summary>
+        /// Gets the current orientation of the quickpanel service window.
+        /// </summary>
+        /// <returns>The orientation of the quickpanel service window.</returns>
+        /// <exception cref="ArgumentException" > Thrown when failed of invalid argument.</exception>
+        /// <exception cref="InvalidOperationException">Thrown when failed because of an invalid operation or no service.</exception>
+        /// <since_tizen> 8 </since_tizen>
+        public Window.WindowOrientation Orientation
+        {
+            get
+            {
+                return GetOrientation();
+            }
+        }
+
+        private Window.WindowOrientation GetOrientation()
+        {
+            int res;
+            int state;
+            Window.WindowOrientation orientation;
+
+            res = Interop.QuickPanelClient.GetOrientation(_tzshQpClient, out state);
+
+            _tzsh.ErrorCodeThrow(res);
+            orientation = ConvertOrientation((OrientationState)state);
+
+            return orientation;
+        }
+
+        /// <summary>
+        /// Shows the quickpanel service window if it is currently scrollable.
+        /// </summary>
+        /// <exception cref="ArgumentException" > Thrown when failed of invalid argument.</exception>
+        /// <exception cref="InvalidOperationException">Thrown when failed because of an invalid operation or no service.</exception>
+        /// <since_tizen> 8 </since_tizen>
+        public void Show()
+        {
+            int res;
+
+            res = Interop.QuickPanelClient.Show(_tzshQpClient);
+            _tzsh.ErrorCodeThrow(res);
+        }
+
+        /// <summary>
+        /// Hides the quickpanel service window.
+        /// </summary>
+        /// <exception cref="ArgumentException" > Thrown when failed of invalid argument.</exception>
+        /// <exception cref="InvalidOperationException">Thrown when failed because of an invalid operation or no service.</exception>
+        /// <since_tizen> 8 </since_tizen>
+        public void Hide()
+        {
+            int res;
+
+            res = Interop.QuickPanelClient.Hide(_tzshQpClient);
+            _tzsh.ErrorCodeThrow(res);
+        }
+    }
+}
diff --git a/src/Tizen.NUI.WindowSystem/src/public/QuickPanelService.cs b/src/Tizen.NUI.WindowSystem/src/public/QuickPanelService.cs
new file mode 100644 (file)
index 0000000..7eac68c
--- /dev/null
@@ -0,0 +1,280 @@
+/*
+ * Copyright(c) 2020 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Text;
+
+namespace Tizen.NUI.WindowSystem.Shell
+{
+    /// <summary>
+    /// Class for the Tizen quickpanel service.
+    /// </summary>
+    /// This class is need to be hidden as inhouse API.
+    [EditorBrowsable(EditorBrowsableState.Never)]
+    public class QuickPanelService : IDisposable
+    {
+        private TizenShell _tzsh;
+        private IntPtr _tzshQpService;
+        private int _tzshWin;
+        private bool disposed = false;
+        private bool isDisposeQueued = false;
+
+        /// <summary>
+        /// QuickPanel Type.
+        /// </summary>
+        public enum Types
+        {
+            /// <summary>
+            /// Unknown type. There is no quickpanel service.
+            /// </summary>
+            Unknown = 0x0,
+            /// <summary>
+            /// System default type.
+            /// </summary>
+            SystemDefault = 0x1,
+            /// <summary>
+            /// Context menu type.
+            /// </summary>
+            ContextMenu = 0x2,
+            /// <summary>
+            /// Apps menu type.
+            /// </summary>
+            AppsMenu = 0x3,
+        }
+
+        /// <summary>
+        /// Effect type.
+        /// </summary>
+        public enum EffectType
+        {
+            /// <summary>
+            /// Swipe effect
+            /// </summary>
+            Swipe = 0,
+            /// <summary>
+            /// Move effect
+            /// </summary>
+            Move = 1,
+            /// <summary>
+            /// App control effect
+            /// </summary>
+            Custom = 2,
+        }
+
+        /// <summary>
+        /// Creates a new Quickpanel Service handle.
+        /// </summary>
+        /// <param name="tzShell">The TzShell instance.</param>
+        /// <param name="win">The window to provide service of the quickpanel.</param>
+        /// <param name="type">The type of quickpanel service.</param>
+        /// <exception cref="Tizen.Applications.Exceptions.OutOfMemoryException">Thrown when the memory is not enough to allocate.</exception>
+        /// <exception cref="ArgumentException">Thrown when failed of invalid argument.</exception>
+        /// <exception cref="ArgumentNullException">Thrown when a argument is null.</exception>
+        public QuickPanelService(TizenShell tzShell, Window win, Types type)
+        {
+            if (tzShell == null)
+            {
+                throw new ArgumentNullException(nameof(tzShell));
+            }
+            if (tzShell.GetNativeHandle() == IntPtr.Zero)
+            {
+                throw new ArgumentException("tzShell is not initialized.");
+            }
+            if (win == null)
+            {
+                throw new ArgumentNullException(nameof(win));
+            }
+
+            _tzsh = tzShell;
+            _tzshWin = win.GetNativeId();
+            _tzshQpService = Interop.QuickPanelService.CreateWithType(_tzsh.GetNativeHandle(), (IntPtr)_tzshWin, (int)type);
+            if (_tzshQpService == IntPtr.Zero)
+            {
+                int err = Tizen.Internals.Errors.ErrorFacts.GetLastResult();
+                _tzsh.ErrorCodeThrow(err);
+            }
+        }
+
+        /// <summary>
+        /// Destructor.
+        /// </summary>
+        /// <exception cref="ArgumentException">Thrown when failed of invalid argument.</exception>
+        ~QuickPanelService()
+        {
+            if (!isDisposeQueued)
+            {
+                isDisposeQueued = true;
+                DisposeQueue.Instance.Add(this);
+            }
+        }
+
+        /// <summary>
+        /// Dispose.
+        /// </summary>
+        /// <exception cref="MemberAccessException">Thrown when private memeber is a corrupted.</exception>
+        public void Dispose()
+        {
+            if (isDisposeQueued)
+            {
+                Dispose(DisposeTypes.Implicit);
+            }
+            else
+            {
+                Dispose(DisposeTypes.Explicit);
+                GC.SuppressFinalize(this);
+            }
+        }
+
+        /// <inheritdoc/>
+        protected virtual void Dispose(DisposeTypes disposing)
+        {
+            int res;
+            if (!disposed)
+            {
+                if (_tzshQpService != IntPtr.Zero)
+                {
+                    res = Interop.QuickPanelService.Destroy(_tzshQpService);
+                    try
+                    {
+                        _tzsh.ErrorCodeThrow(res);
+                    }
+                    catch (ArgumentException e)
+                    {
+                        throw new MemberAccessException("QuickPanelService is a corrupted");
+                    }
+                    _tzshQpService = IntPtr.Zero;
+                }
+                disposed = true;
+            }
+        }
+
+        /// <summary>
+        /// Gets the type of the quickpanel service handle.
+        /// </summary>
+        /// <returns>The type of the quickpanel service handle</returns>
+        /// <exception cref="ArgumentException">Thrown when failed of invalid argument.</exception>
+        public Types ServiceType
+        {
+            get
+            {
+                return GetType();
+            }
+        }
+
+        private new Types GetType()
+        {
+            int res;
+            int type;
+
+            res = Interop.QuickPanelService.GetType(_tzshQpService, out type);
+
+            _tzsh.ErrorCodeThrow(res);
+
+            return (Types)type;
+        }
+
+        /// <summary>
+        /// Requests to show the quickpanel service window.
+        /// </summary>
+        /// <exception cref="ArgumentException">Thrown when failed of invalid argument.</exception>
+        public void Show()
+        {
+            int res;
+
+            res = Interop.QuickPanelService.Show(_tzshQpService);
+            _tzsh.ErrorCodeThrow(res);
+        }
+
+        /// <summary>
+        /// Requests to hide the quickpanel service window.
+        /// </summary>
+        /// <exception cref="ArgumentException">Thrown when failed of invalid argument.</exception>
+        public void Hide()
+        {
+            int res;
+
+            res = Interop.QuickPanelService.Hide(_tzshQpService);
+            _tzsh.ErrorCodeThrow(res);
+        }
+
+        /// <summary>
+        /// Sets the content region of the quickpanel service handle.
+        /// </summary>
+        /// <param name="angle">The angle setting the region</param>
+        /// <param name="region">The region of the content</param>
+        /// <exception cref="ArgumentException">Thrown when failed of invalid argument.</exception>
+        /// <exception cref="ArgumentNullException">Thrown when a argument is null.</exception>
+        public void SetContentRegion(uint angle, TizenRegion region)
+        {
+            int res;
+
+            if (region == null)
+            {
+                throw new ArgumentNullException(nameof(region));
+            }
+            res = Interop.QuickPanelService.SetContentRegion(_tzshQpService, angle, region.GetNativeHandle());
+            _tzsh.ErrorCodeThrow(res);
+        }
+
+        /// <summary>
+        /// Sets the handler region of the quickpanel service handle.
+        /// </summary>
+        /// <param name="angle">The angle setting the region</param>
+        /// <param name="region">The region of the content</param>
+        /// <exception cref="ArgumentException">Thrown when failed of invalid argument.</exception>
+        /// <exception cref="ArgumentNullException">Thrown when a argument is null.</exception>
+        public void SetHandlerRegion(uint angle, TizenRegion region)
+        {
+            int res;
+
+            if (region == null)
+            {
+                throw new ArgumentNullException(nameof(region));
+            }
+            res = Interop.QuickPanelService.SetHandlerRegion(_tzshQpService, angle, region.GetNativeHandle());
+            _tzsh.ErrorCodeThrow(res);
+        }
+
+        /// <summary>
+        /// Requests to change the effect of animation.
+        /// </summary>
+        /// <param name="type">The type of effect, enumeration for effect type.</param>
+        /// <exception cref="ArgumentException">Thrown when failed of invalid argument.</exception>
+        public void SetEffectType(EffectType type)
+        {
+            int res;
+
+            res = Interop.QuickPanelService.SetEffectType(_tzshQpService, (int)type);
+            _tzsh.ErrorCodeThrow(res);
+        }
+
+        /// <summary>
+        /// Requests to lock/unlock scrolling the quickpanel service window.
+        /// </summary>
+        /// <param name="locked">The scroll lock state</param>
+        /// <exception cref="ArgumentException">Thrown when failed of invalid argument.</exception>
+        public void LockScroll(bool locked)
+        {
+            int res;
+
+            res = Interop.QuickPanelService.LockScroll(_tzshQpService, locked);
+            _tzsh.ErrorCodeThrow(res);
+        }
+    }
+}
diff --git a/src/Tizen.NUI.WindowSystem/src/public/TizenRegion.cs b/src/Tizen.NUI.WindowSystem/src/public/TizenRegion.cs
new file mode 100644 (file)
index 0000000..b7a2a32
--- /dev/null
@@ -0,0 +1,154 @@
+/*
+ * Copyright(c) 2020 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Text;
+
+namespace Tizen.NUI.WindowSystem.Shell
+{
+    /// <summary>
+    /// Tizen Window System Shell.
+    /// This is a basic handle class for others in WsShell.
+    /// Others class in WsShell using this basic class to use TIzen Window System Shell.
+    /// </summary>
+    [EditorBrowsable(EditorBrowsableState.Never)]
+    public class TizenRegion : IDisposable
+    {
+        private TizenShell _tzsh;
+        private IntPtr _region;
+        private bool disposed = false;
+        private bool isDisposeQueued = false;
+
+        /// <summary>
+        /// Creates a new Tizen region object.
+        /// </summary>
+        /// <param name="tzShell">The TzShell instance.</param>
+        /// <exception cref="Tizen.Applications.Exceptions.OutOfMemoryException">Thrown when the memory is not enough to allocate.</exception>
+        /// <exception cref="ArgumentException">Thrown when failed of invalid argument.</exception>
+        /// <exception cref="ArgumentNullException">Thrown when a argument is null.</exception>
+        public TizenRegion(TizenShell tzShell)
+        {
+            if (tzShell == null)
+            {
+                throw new ArgumentNullException(nameof(tzShell));
+            }
+            if (tzShell.GetNativeHandle() == IntPtr.Zero)
+            {
+                throw new ArgumentException("tzShell is not initialized.");
+            }
+
+            _tzsh = tzShell;
+            _region = Interop.TizenRegion.Create(_tzsh.GetNativeHandle());
+            if (_region == IntPtr.Zero)
+            {
+                int err = Tizen.Internals.Errors.ErrorFacts.GetLastResult();
+                _tzsh.ErrorCodeThrow(err);
+            }
+        }
+
+        /// <summary>
+        /// Destructor.
+        /// </summary>
+        ~TizenRegion()
+        {
+            if (!isDisposeQueued)
+            {
+                isDisposeQueued = true;
+                DisposeQueue.Instance.Add(this);
+            }
+        }
+
+        /// <summary>
+        /// Dispose.
+        /// </summary>
+        /// <exception cref="MemberAccessException">Thrown when private memeber is a corrupted.</exception>
+        public void Dispose()
+        {
+            if (isDisposeQueued)
+            {
+                Dispose(DisposeTypes.Implicit);
+            }
+            else
+            {
+                Dispose(DisposeTypes.Explicit);
+                GC.SuppressFinalize(this);
+            }
+        }
+
+        /// <inheritdoc/>
+        protected virtual void Dispose(DisposeTypes type)
+        {
+            int res;
+            if (!disposed)
+            {
+                if (_region != IntPtr.Zero)
+                {
+                    res = Interop.TizenRegion.Destroy(_region);
+                    try
+                    {
+                        _tzsh.ErrorCodeThrow(res);
+                    }
+                    catch (ArgumentException e)
+                    {
+                        throw new MemberAccessException("TizenRegion is a corrupted");
+                    }
+                    _region = IntPtr.Zero;
+                }
+                disposed = true;
+            }
+        }
+
+        /// <summary>
+        /// Adds the rectangle to the region.
+        /// </summary>
+        /// <param name="x">The x coordinate</param>
+        /// <param name="y">The y coordinate</param>
+        /// <param name="w">The width</param>
+        /// <param name="h">The height</param>
+        /// <exception cref="ArgumentException">Thrown when failed of invalid argument.</exception>
+        public void Add(int x, int y, int w, int h)
+        {
+            int res;
+
+            res = Interop.TizenRegion.Add(_region, x, y, w, h);
+            _tzsh.ErrorCodeThrow(res);
+        }
+
+        /// <summary>
+        /// Substracts the rectangle to the tizen region.
+        /// </summary>
+        /// <param name="x">The x coordinate</param>
+        /// <param name="y">The y coordinate</param>
+        /// <param name="w">The width</param>
+        /// <param name="h">The height</param>
+        /// <exception cref="ArgumentException">Thrown when failed of invalid argument.</exception>
+        public void Subtract(int x, int y, int w, int h)
+        {
+            int res;
+
+            res = Interop.TizenRegion.Subtract(_region, x, y, w, h);
+            _tzsh.ErrorCodeThrow(res);
+        }
+
+        internal IntPtr GetNativeHandle()
+        {
+            return _region;
+        }
+    }
+}
diff --git a/src/Tizen.NUI.WindowSystem/src/public/TizenShell.cs b/src/Tizen.NUI.WindowSystem/src/public/TizenShell.cs
new file mode 100644 (file)
index 0000000..efc38ae
--- /dev/null
@@ -0,0 +1,146 @@
+/*
+ * Copyright(c) 2020 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using System.Text;
+using Tizen.Applications.Exceptions;
+
+namespace Tizen.NUI.WindowSystem.Shell
+{
+    /// <summary>
+    /// Tizen Window System Shell.
+    /// This is a basic handle class for others in WsShell.
+    /// Others class in WsShell using this basic class to use TIzen Window System Shell.
+    /// </summary>
+    /// <since_tizen> 8 </since_tizen>
+    public class TizenShell : IDisposable
+    {
+        private IntPtr _tzsh;
+        private bool disposed = false;
+        private bool isDisposeQueued = false;
+
+        internal void ErrorCodeThrow(int error)
+        {
+            if (error == (int)Interop.TizenShell.ErrorCode.None)
+            {
+                return;
+            }
+            else if (error == (int)Interop.TizenShell.ErrorCode.OutOfMemory)
+            {
+                throw new Tizen.Applications.Exceptions.OutOfMemoryException("Out of Memory");
+            }
+            else if (error == (int)Interop.TizenShell.ErrorCode.InvalidParameter)
+            {
+                throw new ArgumentException("Invalid Parameter");
+            }
+            else if (error == (int)Interop.TizenShell.ErrorCode.PermissionDenied)
+            {
+                throw new PermissionDeniedException("Permission denied");
+            }
+            else if (error == (int)Interop.TizenShell.ErrorCode.NotSupported)
+            {
+                throw new NotSupportedException("Not Supported");
+            }
+            else if (error == (int)Interop.TizenShell.ErrorCode.NoService)
+            {
+                throw new InvalidOperationException("No Service");
+            }
+            else
+            {
+                throw new InvalidOperationException("Unknown Error");
+            }
+        }
+
+        /// <summary>
+        /// Creates a new Tizen Shell handle.
+        /// </summary>
+        /// <exception cref="Tizen.Applications.Exceptions.OutOfMemoryException">Thrown when the memory is not enough to allocate.</exception>
+        /// <exception cref="ArgumentException">Thrown when failed of invalid argument.</exception>
+        /// <since_tizen> 8 </since_tizen>
+        public TizenShell()
+        {
+            _tzsh = Interop.TizenShell.Create((int)Interop.TizenShell.ToolKitType.Efl);
+            if (_tzsh == IntPtr.Zero)
+            {
+                int err = Tizen.Internals.Errors.ErrorFacts.GetLastResult();
+                ErrorCodeThrow(err);
+            }
+        }
+
+        /// <summary>
+        /// Destructor.
+        /// </summary>
+        /// <since_tizen> 8 </since_tizen>
+        ~TizenShell()
+        {
+            if (!isDisposeQueued)
+            {
+                isDisposeQueued = true;
+                DisposeQueue.Instance.Add(this);
+            }
+        }
+
+        /// <summary>
+        /// Dispose.
+        /// </summary>
+        /// <exception cref="MemberAccessException">Thrown when private memeber is a corrupted.</exception>
+        /// <since_tizen> 8 </since_tizen>
+        public void Dispose()
+        {
+            if (isDisposeQueued)
+            {
+                Dispose(DisposeTypes.Implicit);
+            }
+            else
+            {
+                Dispose(DisposeTypes.Explicit);
+                GC.SuppressFinalize(this);
+            }
+        }
+
+        /// <inheritdoc/>
+        protected virtual void Dispose(DisposeTypes type)
+        {
+            int res;
+
+            if (!disposed)
+            {
+                if (_tzsh != IntPtr.Zero)
+                {
+                    res = Interop.TizenShell.Destroy(_tzsh);
+                    try
+                    {
+                        ErrorCodeThrow(res);
+                    }
+                    catch (ArgumentException e)
+                    {
+                        throw new MemberAccessException("TizehShell is a corrupted");
+                    }
+                    _tzsh = IntPtr.Zero;
+                }
+                disposed = true;
+            }
+        }
+
+        internal IntPtr GetNativeHandle()
+        {
+            return _tzsh;
+        }
+    }
+}
index e35eae3..856162f 100755 (executable)
@@ -5,6 +5,7 @@ using Tizen.NUI;
 [assembly: InternalsVisibleTo("Tizen.NUI.Design, Publickey=0024000004800000940000000602000000240000525341310004000001000100d115b1004248416b12d21b626cfb17149c9303fe394693fd3b32d7872e89559a4fa96c98110c2e62eea48aca693bddbe17094ca8ea2e2cd79970ca590fb672b9b371b5d7002076817321f62d6483ea50c56dbd1f37b185a4c24c47718876e6ae6d266508c551170d4cbdda3f82edaff9405ee3d7857282d8269e8e518d2f0fb2")]
 [assembly: InternalsVisibleTo("Tizen.NUI.Components, Publickey=0024000004800000940000000602000000240000525341310004000001000100d115b1004248416b12d21b626cfb17149c9303fe394693fd3b32d7872e89559a4fa96c98110c2e62eea48aca693bddbe17094ca8ea2e2cd79970ca590fb672b9b371b5d7002076817321f62d6483ea50c56dbd1f37b185a4c24c47718876e6ae6d266508c551170d4cbdda3f82edaff9405ee3d7857282d8269e8e518d2f0fb2")]
 [assembly: InternalsVisibleTo("Tizen.NUI.Components.DA, Publickey=0024000004800000940000000602000000240000525341310004000001000100d115b1004248416b12d21b626cfb17149c9303fe394693fd3b32d7872e89559a4fa96c98110c2e62eea48aca693bddbe17094ca8ea2e2cd79970ca590fb672b9b371b5d7002076817321f62d6483ea50c56dbd1f37b185a4c24c47718876e6ae6d266508c551170d4cbdda3f82edaff9405ee3d7857282d8269e8e518d2f0fb2")]
+[assembly: InternalsVisibleTo("Tizen.NUI.WindowSystem, Publickey=0024000004800000940000000602000000240000525341310004000001000100d115b1004248416b12d21b626cfb17149c9303fe394693fd3b32d7872e89559a4fa96c98110c2e62eea48aca693bddbe17094ca8ea2e2cd79970ca590fb672b9b371b5d7002076817321f62d6483ea50c56dbd1f37b185a4c24c47718876e6ae6d266508c551170d4cbdda3f82edaff9405ee3d7857282d8269e8e518d2f0fb2")]
 
 // Xamarin.Forms.Loader.dll Xamarin.Forms.Xaml.XamlLoader.Load(object, string), kzu@microsoft.com
 [assembly: XmlnsDefinition("http://tizen.org/Tizen.NUI/2018/XAML", "Tizen.NUI")]
diff --git a/test/Tizen.NUI.WindowSystem.Samples/Tizen.NUI.WindowSystem.Samples.cs b/test/Tizen.NUI.WindowSystem.Samples/Tizen.NUI.WindowSystem.Samples.cs
new file mode 100644 (file)
index 0000000..9d7044f
--- /dev/null
@@ -0,0 +1,332 @@
+using System;
+using Tizen.NUI;
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI.Components;
+using Tizen.NUI.WindowSystem;
+
+namespace Tizen.NUI.WindowSystem.Samples
+{
+    class Program : NUIApplication
+    {
+        Shell.TizenShell tzShell;
+        Shell.QuickPanelClient qpClient;
+        Button BtnClient;
+        TextLabel textClientVisible;
+        TextLabel textClientScrollable;
+        TextLabel textClientOrientation;
+
+        Shell.QuickPanelService qpService;
+        Shell.TizenRegion qpRegion;
+        Button BtnService;
+
+        protected override void OnCreate()
+        {
+            base.OnCreate();
+            Initialize();
+        }
+
+        void Initialize()
+        {
+            Window window = NUIApplication.GetDefaultWindow();
+            window.KeyEvent += OnKeyEvent;
+            window.BackgroundColor = Color.White;
+
+            BtnClient = new Button()
+            {
+                Text = "QuickPanelClient",
+                Size = new Size(400, 100),
+                Position = new Position(100, 200),
+                Margin = 10,
+            };
+
+            BtnService = new Button()
+            {
+                Text = "QuickPanelService",
+                Size = new Size(400, 100),
+                Position = new Position(100, 500),
+                Margin = 10,
+            };
+
+            window.Add(BtnClient);
+            window.Add(BtnService);
+
+            BtnClient.ClickEvent += BtnClient_ClickEvent;
+            BtnService.ClickEvent += BtnService_ClickEvent;
+
+            tzShell = new Shell.TizenShell();
+
+            window.AddAvailableOrientation(Window.WindowOrientation.Portrait);
+            window.AddAvailableOrientation(Window.WindowOrientation.Landscape);
+            window.AddAvailableOrientation(Window.WindowOrientation.PortraitInverse);
+            window.AddAvailableOrientation(Window.WindowOrientation.LandscapeInverse);
+        }
+
+        public void OnKeyEvent(object sender, Window.KeyEventArgs e)
+        {
+            if (e.Key.State == Key.StateType.Down && (e.Key.KeyPressedName == "XF86Back" || e.Key.KeyPressedName == "Escape"))
+            {
+                Exit();
+            }
+        }
+
+        public void OnVisibleEvent(object sender, Shell.QuickPanelClient.VisibleState state)
+        {
+            textClientVisible.Text = $"Visible: {qpClient.Visible}";
+        }
+
+        public void OnOrientationEvent(object sender, Window.WindowOrientation state)
+        {
+            textClientOrientation.Text = $"Orientation: {qpClient.Orientation}";
+        }
+
+        private void BtnClient_ClickEvent(object sender, Button.ClickEventArgs e)
+        {
+            Window window = NUIApplication.GetDefaultWindow();
+
+            window.Remove(BtnService);
+            window.Remove(BtnClient);
+            qpClient = new Shell.QuickPanelClient(tzShell, window, Shell.QuickPanelClient.Types.SystemDefault);
+
+            qpClient.VisibleChanged += OnVisibleEvent;
+            qpClient.OrientationChanged += OnOrientationEvent;
+
+            textClientVisible = new TextLabel($"Visible: {qpClient.Visible}");
+            textClientVisible.Position = new Position(0, -100);
+            textClientVisible.HorizontalAlignment = HorizontalAlignment.Center;
+            textClientVisible.VerticalAlignment = VerticalAlignment.Center;
+            textClientVisible.TextColor = Color.Blue;
+            textClientVisible.PointSize = 12.0f;
+            textClientVisible.HeightResizePolicy = ResizePolicyType.FillToParent;
+            textClientVisible.WidthResizePolicy = ResizePolicyType.FillToParent;
+            window.Add(textClientVisible);
+
+            textClientScrollable = new TextLabel($"Scrollable: {qpClient.Scrollable}");
+            textClientScrollable.HorizontalAlignment = HorizontalAlignment.Center;
+            textClientScrollable.VerticalAlignment = VerticalAlignment.Center;
+            textClientScrollable.TextColor = Color.Blue;
+            textClientScrollable.PointSize = 12.0f;
+            textClientScrollable.HeightResizePolicy = ResizePolicyType.FillToParent;
+            textClientScrollable.WidthResizePolicy = ResizePolicyType.FillToParent;
+            window.Add(textClientScrollable);
+
+            textClientOrientation = new TextLabel($"Orientation: {qpClient.Orientation}");
+            textClientOrientation.Position = new Position(0, 100);
+            textClientOrientation.HorizontalAlignment = HorizontalAlignment.Center;
+            textClientOrientation.VerticalAlignment = VerticalAlignment.Center;
+            textClientOrientation.TextColor = Color.Blue;
+            textClientOrientation.PointSize = 12.0f;
+            textClientOrientation.HeightResizePolicy = ResizePolicyType.FillToParent;
+            textClientOrientation.WidthResizePolicy = ResizePolicyType.FillToParent;
+            window.Add(textClientOrientation);
+
+            Button BtnScrollableSet = new Button()
+            {
+                Text = "Scrollable Set",
+                Size = new Size(400, 100),
+                Position = new Position(50, 800),
+                Margin = 10,
+            };
+            Button BtnScrollableUnset = new Button()
+            {
+                Text = "Scrollable Unset",
+                Size = new Size(400, 100),
+                Position = new Position(50, 920),
+                Margin = 10,
+            };
+            Button BtnScrollableRetain = new Button()
+            {
+                Text = "Scrollable Retain",
+                Size = new Size(400, 100),
+                Position = new Position(50, 1040),
+                Margin = 10,
+            };
+            Button BtnShow = new Button()
+            {
+                Text = "Show",
+                Size = new Size(200, 100),
+                Position = new Position(470, 850),
+                Margin = 10,
+            };
+            Button BtnHide = new Button()
+            {
+                Text = "Hide",
+                Size = new Size(200, 100),
+                Position = new Position(470, 990),
+                Margin = 10,
+            };
+
+            BtnScrollableSet.ClickEvent += BtnScrollableSet_ClickEvent;
+            BtnScrollableUnset.ClickEvent += BtnScrollableUnset_ClickEvent;
+            BtnScrollableRetain.ClickEvent += BtnScrollableRetain_ClickEvent;
+            BtnShow.ClickEvent += BtnClientShow_ClickEvent;
+            BtnHide.ClickEvent += BtnClientHide_ClickEvent;
+
+            window.Add(BtnScrollableSet);
+            window.Add(BtnScrollableUnset);
+            window.Add(BtnScrollableRetain);
+            window.Add(BtnShow);
+            window.Add(BtnHide);
+        }
+
+        private void BtnScrollableSet_ClickEvent(object sender, Button.ClickEventArgs e)
+        {
+            qpClient.Scrollable = Shell.QuickPanelClient.ScrollableState.Set;
+            textClientScrollable.Text = $"Scrollable: {qpClient.Scrollable}";
+        }
+        private void BtnScrollableUnset_ClickEvent(object sender, Button.ClickEventArgs e)
+        {
+            qpClient.Scrollable = Shell.QuickPanelClient.ScrollableState.Unset;
+            textClientScrollable.Text = $"Scrollable: {qpClient.Scrollable}";
+        }
+        private void BtnScrollableRetain_ClickEvent(object sender, Button.ClickEventArgs e)
+        {
+            qpClient.Scrollable = Shell.QuickPanelClient.ScrollableState.Retain;
+            textClientScrollable.Text = $"Scrollable: {qpClient.Scrollable}";
+        }
+        private void BtnClientShow_ClickEvent(object sender, Button.ClickEventArgs e)
+        {
+            qpClient.Show();
+        }
+        private void BtnClientHide_ClickEvent(object sender, Button.ClickEventArgs e)
+        {
+            qpClient.Hide();
+        }
+
+        private void BtnService_ClickEvent(object sender, Button.ClickEventArgs e)
+        {
+            Window window = NUIApplication.GetDefaultWindow();
+
+            window.Remove(BtnService);
+            window.Remove(BtnClient);
+            qpService = new Shell.QuickPanelService(tzShell, window, Shell.QuickPanelService.Types.SystemDefault);
+
+            TextLabel textServiceType = new TextLabel($"Type: {qpService.ServiceType}");
+            textServiceType.Position = new Position(0, -300);
+            textServiceType.HorizontalAlignment = HorizontalAlignment.Center;
+            textServiceType.VerticalAlignment = VerticalAlignment.Center;
+            textServiceType.TextColor = Color.Blue;
+            textServiceType.PointSize = 12.0f;
+            textServiceType.HeightResizePolicy = ResizePolicyType.FillToParent;
+            textServiceType.WidthResizePolicy = ResizePolicyType.FillToParent;
+            window.Add(textServiceType);
+
+            Button BtnShow = new Button()
+            {
+                Text = "Show",
+                Size = new Size(200, 100),
+                Position = new Position(50, 500),
+                Margin = 10,
+            };
+            Button BtnHide = new Button()
+            {
+                Text = "Hide",
+                Size = new Size(200, 100),
+                Position = new Position(410, 500),
+                Margin = 10,
+            };
+
+            Button BtnEffectSwipe = new Button()
+            {
+                Text = "EffectSwipe",
+                Size = new Size(400, 80),
+                Position = new Position(50, 700),
+                Margin = 10,
+            };
+            Button BtnEffectMove = new Button()
+            {
+                Text = "EffectMove",
+                Size = new Size(400, 80),
+                Position = new Position(50, 800),
+                Margin = 10,
+            };
+            Button BtnEffectAppCustom = new Button()
+            {
+                Text = "EffectAppCustom",
+                Size = new Size(400, 80),
+                Position = new Position(50, 900),
+                Margin = 10,
+            };
+
+            Button BtnLockTrue = new Button()
+            {
+                Text = "LockTrue",
+                Size = new Size(300, 80),
+                Position = new Position(50, 1000),
+                Margin = 10,
+            };
+            Button BtnLockFalse = new Button()
+            {
+                Text = "LockFalse",
+                Size = new Size(300, 80),
+                Position = new Position(400, 1000),
+                Margin = 10,
+            };
+
+            BtnShow.ClickEvent += BtnServiceShow_ClickEvent;
+            BtnHide.ClickEvent += BtnServiceHide_ClickEvent;
+
+            BtnEffectSwipe.ClickEvent += BtnEffectSwipe_ClickEvent;
+            BtnEffectMove.ClickEvent += BtnEffectMove_ClickEvent;
+            BtnEffectAppCustom.ClickEvent += BtnEffectAppCustom_ClickEvent;
+
+            BtnLockTrue.ClickEvent += BtnLockTrue_ClickEvent;
+            BtnLockFalse.ClickEvent += BtnLockFalse_ClickEvent;
+
+            window.Add(BtnShow);
+            window.Add(BtnHide);
+
+            window.Add(BtnEffectSwipe);
+            window.Add(BtnEffectMove);
+            window.Add(BtnEffectAppCustom);
+
+            window.Add(BtnLockTrue);
+            window.Add(BtnLockFalse);
+
+            qpRegion = new Shell.TizenRegion(tzShell);
+            qpRegion.Add(window.WindowPosition.X, window.WindowPosition.Y, window.WindowSize.Width, window.WindowSize.Height - 50);
+            qpService.SetContentRegion(0, qpRegion);
+            qpRegion.Dispose();
+
+            qpRegion = new Shell.TizenRegion(tzShell);
+            qpRegion.Add(window.WindowPosition.X, window.WindowPosition.Y + window.WindowSize.Height - 50, window.WindowSize.Width, 50);
+            qpService.SetHandlerRegion(0, qpRegion);
+            qpRegion.Dispose();
+        }
+
+        private void BtnServiceShow_ClickEvent(object sender, Button.ClickEventArgs e)
+        {
+            qpService.Show();
+        }
+        private void BtnServiceHide_ClickEvent(object sender, Button.ClickEventArgs e)
+        {
+            qpService.Hide();
+        }
+
+        private void BtnEffectSwipe_ClickEvent(object sender, Button.ClickEventArgs e)
+        {
+            qpService.SetEffectType(Shell.QuickPanelService.EffectType.Swipe);
+        }
+        private void BtnEffectMove_ClickEvent(object sender, Button.ClickEventArgs e)
+        {
+            qpService.SetEffectType(Shell.QuickPanelService.EffectType.Move);
+        }
+        private void BtnEffectAppCustom_ClickEvent(object sender, Button.ClickEventArgs e)
+        {
+            qpService.SetEffectType(Shell.QuickPanelService.EffectType.Custom);
+        }
+        private void BtnLockTrue_ClickEvent(object sender, Button.ClickEventArgs e)
+        {
+            qpService.LockScroll(true);
+        }
+        private void BtnLockFalse_ClickEvent(object sender, Button.ClickEventArgs e)
+        {
+            qpService.LockScroll(false);
+        }
+
+        static void Main(string[] args)
+        {
+            var app = new Program();
+            app.Run(args);
+        }
+    }
+}
diff --git a/test/Tizen.NUI.WindowSystem.Samples/Tizen.NUI.WindowSystem.Samples.csproj b/test/Tizen.NUI.WindowSystem.Samples/Tizen.NUI.WindowSystem.Samples.csproj
new file mode 100644 (file)
index 0000000..0828444
--- /dev/null
@@ -0,0 +1,27 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+       <PropertyGroup>
+               <OutputType>Exe</OutputType>
+               <TargetFramework>netcoreapp2.0</TargetFramework>
+       </PropertyGroup>
+
+       <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+               <DebugType>portable</DebugType>
+       </PropertyGroup>
+       <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+               <DebugType>None</DebugType>
+       </PropertyGroup>
+
+       <ItemGroup>
+               <PackageReference Include="Tizen.NET.Sdk" Version="1.0.9" />
+               <ProjectReference Include="../../src/Tizen/Tizen.csproj" />
+               <ProjectReference Include="../../src/Tizen.Applications.Common/Tizen.Applications.Common.csproj" />
+               <ProjectReference Include="../../src/Tizen.Applications.ComponentBased/Tizen.Applications.ComponentBased.csproj" />
+               <ProjectReference Include="../../src/Tizen.Log/Tizen.Log.csproj" />
+               <ProjectReference Include="../../src/Tizen.System.SystemSettings/Tizen.System.SystemSettings.csproj" />
+               <ProjectReference Include="../../src/Tizen.NUI/Tizen.NUI.csproj" />
+               <ProjectReference Include="../../src/Tizen.NUI.WindowSystem/Tizen.NUI.WindowSystem.csproj" />
+               <ProjectReference Include="../../src/Tizen.NUI.Components/Tizen.NUI.Components.csproj" />
+       </ItemGroup>
+
+</Project>
diff --git a/test/Tizen.NUI.WindowSystem.Samples/Tizen.NUI.WindowSystem.Samples.sln b/test/Tizen.NUI.WindowSystem.Samples/Tizen.NUI.WindowSystem.Samples.sln
new file mode 100644 (file)
index 0000000..28d09d9
--- /dev/null
@@ -0,0 +1,97 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.29920.165
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.NUI.WindowSystem.Samples", "Tizen.NUI.WindowSystem.Samples.csproj", "{D9453A34-5DEE-4CDD-9F0C-8C9530B6576E}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen", "..\..\src\Tizen\Tizen.csproj", "{92437C3E-E01E-42F3-93DB-CF7680942867}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.Applications.Common", "..\..\src\Tizen.Applications.Common\Tizen.Applications.Common.csproj", "{45707C86-C0ED-43ED-9D90-4220227A3594}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.Applications.ComponentBased", "..\..\src\Tizen.Applications.ComponentBased\Tizen.Applications.ComponentBased.csproj", "{5989CACE-99D0-4451-AFAE-F1D58513F036}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.Log", "..\..\src\Tizen.Log\Tizen.Log.csproj", "{4B9C1B77-04A2-4C01-ACCF-55BDD5AE100A}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.System.SystemSettings", "..\..\src\Tizen.System.SystemSettings\Tizen.System.SystemSettings.csproj", "{13C02599-ECD1-4473-9483-25B3120A169C}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.NUI", "..\..\src\Tizen.NUI\Tizen.NUI.csproj", "{F57A3CDB-3480-4C48-A007-FDCE0E673850}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.NUI.Components", "..\..\src\Tizen.NUI.Components\Tizen.NUI.Components.csproj", "{FD4A9BED-A316-477E-B12B-D462138661CB}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.System.Information", "..\..\src\Tizen.System.Information\Tizen.System.Information.csproj", "{1C93CF1D-452C-4EF8-BE4F-01023FC7318A}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.NUI.Tests", "..\..\..\charp_api\tct-suite-vs\Tizen.NUI.Tests\Tizen.NUI.Tests.csproj", "{1F9B16FA-115C-4592-9EE2-18F011BBDEA1}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "nunit.framework", "..\..\..\charp_api\tct-suite-vs\nunit.framework\nunit.framework.csproj", "{37B85E87-6F6B-410A-9471-0774C3263033}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "nunitlite", "..\..\..\charp_api\tct-suite-vs\nunitlite\nunitlite.csproj", "{5E92B3C2-BF09-4C15-943C-8E251D0A7B58}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.NUI.WindowSystem", "..\..\src\Tizen.NUI.WindowSystem\Tizen.NUI.WindowSystem.csproj", "{FB1E79E8-90E1-4AB4-8C69-D3A17E33865E}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               Debug|Any CPU = Debug|Any CPU
+               Release|Any CPU = Release|Any CPU
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {D9453A34-5DEE-4CDD-9F0C-8C9530B6576E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+               {D9453A34-5DEE-4CDD-9F0C-8C9530B6576E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+               {D9453A34-5DEE-4CDD-9F0C-8C9530B6576E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+               {D9453A34-5DEE-4CDD-9F0C-8C9530B6576E}.Release|Any CPU.Build.0 = Release|Any CPU
+               {92437C3E-E01E-42F3-93DB-CF7680942867}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+               {92437C3E-E01E-42F3-93DB-CF7680942867}.Debug|Any CPU.Build.0 = Debug|Any CPU
+               {92437C3E-E01E-42F3-93DB-CF7680942867}.Release|Any CPU.ActiveCfg = Release|Any CPU
+               {92437C3E-E01E-42F3-93DB-CF7680942867}.Release|Any CPU.Build.0 = Release|Any CPU
+               {45707C86-C0ED-43ED-9D90-4220227A3594}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+               {45707C86-C0ED-43ED-9D90-4220227A3594}.Debug|Any CPU.Build.0 = Debug|Any CPU
+               {45707C86-C0ED-43ED-9D90-4220227A3594}.Release|Any CPU.ActiveCfg = Release|Any CPU
+               {45707C86-C0ED-43ED-9D90-4220227A3594}.Release|Any CPU.Build.0 = Release|Any CPU
+               {5989CACE-99D0-4451-AFAE-F1D58513F036}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+               {5989CACE-99D0-4451-AFAE-F1D58513F036}.Debug|Any CPU.Build.0 = Debug|Any CPU
+               {5989CACE-99D0-4451-AFAE-F1D58513F036}.Release|Any CPU.ActiveCfg = Release|Any CPU
+               {5989CACE-99D0-4451-AFAE-F1D58513F036}.Release|Any CPU.Build.0 = Release|Any CPU
+               {4B9C1B77-04A2-4C01-ACCF-55BDD5AE100A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+               {4B9C1B77-04A2-4C01-ACCF-55BDD5AE100A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+               {4B9C1B77-04A2-4C01-ACCF-55BDD5AE100A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+               {4B9C1B77-04A2-4C01-ACCF-55BDD5AE100A}.Release|Any CPU.Build.0 = Release|Any CPU
+               {13C02599-ECD1-4473-9483-25B3120A169C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+               {13C02599-ECD1-4473-9483-25B3120A169C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+               {13C02599-ECD1-4473-9483-25B3120A169C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+               {13C02599-ECD1-4473-9483-25B3120A169C}.Release|Any CPU.Build.0 = Release|Any CPU
+               {F57A3CDB-3480-4C48-A007-FDCE0E673850}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+               {F57A3CDB-3480-4C48-A007-FDCE0E673850}.Debug|Any CPU.Build.0 = Debug|Any CPU
+               {F57A3CDB-3480-4C48-A007-FDCE0E673850}.Release|Any CPU.ActiveCfg = Release|Any CPU
+               {F57A3CDB-3480-4C48-A007-FDCE0E673850}.Release|Any CPU.Build.0 = Release|Any CPU
+               {FD4A9BED-A316-477E-B12B-D462138661CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+               {FD4A9BED-A316-477E-B12B-D462138661CB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+               {FD4A9BED-A316-477E-B12B-D462138661CB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+               {FD4A9BED-A316-477E-B12B-D462138661CB}.Release|Any CPU.Build.0 = Release|Any CPU
+               {1C93CF1D-452C-4EF8-BE4F-01023FC7318A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+               {1C93CF1D-452C-4EF8-BE4F-01023FC7318A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+               {1C93CF1D-452C-4EF8-BE4F-01023FC7318A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+               {1C93CF1D-452C-4EF8-BE4F-01023FC7318A}.Release|Any CPU.Build.0 = Release|Any CPU
+               {1F9B16FA-115C-4592-9EE2-18F011BBDEA1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+               {1F9B16FA-115C-4592-9EE2-18F011BBDEA1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+               {1F9B16FA-115C-4592-9EE2-18F011BBDEA1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+               {1F9B16FA-115C-4592-9EE2-18F011BBDEA1}.Release|Any CPU.Build.0 = Release|Any CPU
+               {37B85E87-6F6B-410A-9471-0774C3263033}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+               {37B85E87-6F6B-410A-9471-0774C3263033}.Debug|Any CPU.Build.0 = Debug|Any CPU
+               {37B85E87-6F6B-410A-9471-0774C3263033}.Release|Any CPU.ActiveCfg = Release|Any CPU
+               {37B85E87-6F6B-410A-9471-0774C3263033}.Release|Any CPU.Build.0 = Release|Any CPU
+               {5E92B3C2-BF09-4C15-943C-8E251D0A7B58}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+               {5E92B3C2-BF09-4C15-943C-8E251D0A7B58}.Debug|Any CPU.Build.0 = Debug|Any CPU
+               {5E92B3C2-BF09-4C15-943C-8E251D0A7B58}.Release|Any CPU.ActiveCfg = Release|Any CPU
+               {5E92B3C2-BF09-4C15-943C-8E251D0A7B58}.Release|Any CPU.Build.0 = Release|Any CPU
+               {FB1E79E8-90E1-4AB4-8C69-D3A17E33865E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+               {FB1E79E8-90E1-4AB4-8C69-D3A17E33865E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+               {FB1E79E8-90E1-4AB4-8C69-D3A17E33865E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+               {FB1E79E8-90E1-4AB4-8C69-D3A17E33865E}.Release|Any CPU.Build.0 = Release|Any CPU
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+       GlobalSection(ExtensibilityGlobals) = postSolution
+               SolutionGuid = {C8F1B77A-A04F-43CB-A820-348A59F27E77}
+       EndGlobalSection
+EndGlobal
diff --git a/test/Tizen.NUI.WindowSystem.Samples/shared/res/Tizen.NUI.WindowSystem.Samples.png b/test/Tizen.NUI.WindowSystem.Samples/shared/res/Tizen.NUI.WindowSystem.Samples.png
new file mode 100644 (file)
index 0000000..9f3cb98
Binary files /dev/null and b/test/Tizen.NUI.WindowSystem.Samples/shared/res/Tizen.NUI.WindowSystem.Samples.png differ
diff --git a/test/Tizen.NUI.WindowSystem.Samples/tizen-manifest.xml b/test/Tizen.NUI.WindowSystem.Samples/tizen-manifest.xml
new file mode 100644 (file)
index 0000000..c6640ad
--- /dev/null
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns="http://tizen.org/ns/packages" api-version="5.5" package="org.tizen.example.Tizen.NUI.WindowSystem.Samples" version="1.0.0">
+  <profile name="common" />
+  <ui-application appid="org.tizen.example.Tizen.NUI.WindowSystem.Samples"
+                                       exec="Tizen.NUI.WindowSystem.Samples.dll"
+                                       type="dotnet"
+                                       multiple="false"
+                                       taskmanage="true"
+                                       nodisplay="false"
+                                       launch_mode="single"
+                                       api-version="6">
+    <label>Tizen.NUI.WindowSystem.Samples</label>
+    <icon>Tizen.NUI.WindowSystem.Samples.png</icon>
+    <metadata key="http://tizen.org/metadata/prefer_dotnet_aot" value="true" />
+  </ui-application>
+</manifest>