File: Handlers\Picker\PickerHandler.Tizen.cs
Web Access
Project: src\src\Core\src\Core.csproj (Microsoft.Maui)
using Tizen.NUI;
using Tizen.UIExtensions.NUI;
using NColor = Tizen.NUI.Color;
using NEntry = Tizen.UIExtensions.NUI.Entry;
using NPosition = Tizen.NUI.Position;
using NView = Tizen.NUI.BaseComponents.View;
 
namespace Microsoft.Maui.Handlers
{
	public partial class PickerHandler : ViewHandler<IPicker, NEntry>
	{
		protected override NEntry CreatePlatformView() => new MauiPicker();
 
		protected override void ConnectHandler(NEntry platformView)
		{
			platformView.TouchEvent += OnTouch;
			platformView.KeyEvent += OnKeyEvent;
			base.ConnectHandler(platformView);
		}
 
		protected override void DisconnectHandler(NEntry platformView)
		{
			if (!platformView.HasBody())
				return;
 
			platformView.TouchEvent -= OnTouch;
			platformView.KeyEvent -= OnKeyEvent;
			base.DisconnectHandler(platformView);
		}
 
		// TODO Uncomment me on NET8 [Obsolete]
		public static void MapReload(IPickerHandler handler, IPicker picker, object? args) => Reload(handler);
 
		internal static void MapItems(IPickerHandler handler, IPicker picker) => Reload(handler);
 
		public static void MapTitleColor(IPickerHandler handler, IPicker picker)
		{
			handler.PlatformView.UpdateTitleColor(picker);
		}
 
		public static void MapFont(IPickerHandler handler, IPicker picker)
		{
			var fontManager = handler.GetRequiredService<IFontManager>();
			handler.PlatformView.UpdateFont(picker, fontManager);
		}
 
		public static void MapHorizontalTextAlignment(IPickerHandler handler, IPicker picker)
		{
			handler.PlatformView.UpdateHorizontalTextAlignment(picker);
		}
 
		public static void MapVerticalTextAlignment(IPickerHandler handler, IPicker picker)
		{
			handler.PlatformView.UpdateVerticalTextAlignment(picker);
		}
 
		public static void MapTextColor(IPickerHandler handler, IPicker picker)
		{
			handler.PlatformView.UpdateTextColor(picker);
		}
 
		public static void MapTitle(IPickerHandler handler, IPicker picker)
		{
			handler.PlatformView.UpdateTitle(picker);
		}
 
		public static void MapSelectedIndex(IPickerHandler handler, IPicker picker)
		{
			handler.PlatformView.UpdateSelectedIndex(picker);
		}
 
		public static void MapCharacterSpacing(IPickerHandler handler, IPicker picker)
		{
			handler.PlatformView.UpdateCharacterSpacing(picker);
		}
 
		static void Reload(IPickerHandler handler)
		{
			if (handler.VirtualView == null || handler.PlatformView == null)
				return;
 
			handler.PlatformView.UpdatePicker(handler.VirtualView);
		}
 
		bool OnTouch(object source, Tizen.NUI.BaseComponents.View.TouchEventArgs e)
		{
			if (e.Touch.GetState(0) != Tizen.NUI.PointStateType.Up)
				return false;
 
			if (VirtualView == null)
				return false;
 
			OpenPopupAsync();
			return true;
		}
 
		bool OnKeyEvent(object source, Tizen.NUI.BaseComponents.View.KeyEventArgs e)
		{
			if (e.Key.State == Tizen.NUI.Key.StateType.Up && (e.Key.KeyPressedName == "Return" || e.Key.KeyPressedName == "Enter"))
			{
				OpenPopupAsync();
				return true;
			}
			return false;
		}
 
 
		async void OpenPopupAsync()
		{
			if (VirtualView == null)
				return;
 
			var modalStack = MauiContext?.GetModalStack();
			if (modalStack != null)
			{
				await modalStack.PushDummyPopupPage(async () =>
				{
					try
					{
						using var popup = new ActionSheetPopup(VirtualView.Title, "Cancel", null, VirtualView.GetItemsAsArray());
						VirtualView.SelectedIndex = VirtualView.GetItemsAsArray().IndexOf(await popup.Open());
					}
					catch
					{
						// Cancel
					}
				});
			}
		}
 
	}
}