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
--- /dev/null
+<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>
--- /dev/null
+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";
+ }
+ }
+}
--- /dev/null
+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);
+ }
+ }
+}
--- /dev/null
+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);
+ }
+ }
+}
--- /dev/null
+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 */
+ }
+ }
+ }
+}
--- /dev/null
+/*
+ * 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);
+ }
+ }
+}
--- /dev/null
+/*
+ * 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);
+ }
+ }
+}
--- /dev/null
+/*
+ * 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;
+ }
+ }
+}
--- /dev/null
+/*
+ * 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;
+ }
+ }
+}
[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")]
--- /dev/null
+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);
+ }
+ }
+}
--- /dev/null
+<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>
--- /dev/null
+
+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
--- /dev/null
+<?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>