/// <summary>
        /// Creates a new context menu popup
        /// </summary>
        /// <param name="viewModel">view model for the popup</param>
        public ContextMenuPopupPage(ContextMenuPopupViewModel viewModel)
        {
            this.CloseWhenBackgroundIsClicked = true;

            this.BindingContext = viewModel;
            this.InitializeComponent();
        }
Esempio n. 2
0
        /// <summary>
        /// Shows the context menu
        /// </summary>
        /// <param name="point">map point where the long-tap occurred</param>
        /// <param name="appSettings">app settings</param>
        /// <returns>task to wait on</returns>
        public static async ValueTask <Result> ShowAsync(MapPoint point, AppSettings appSettings)
        {
            string latitudeText  = GeoDataFormatter.FormatLatLong(point.Latitude, appSettings.CoordinateDisplayFormat);
            string longitudeText = GeoDataFormatter.FormatLatLong(point.Longitude, appSettings.CoordinateDisplayFormat);

            string caption =
                $"Selected point at Latitude: {latitudeText}, Longitude: {longitudeText}, Altitude {point.Altitude.GetValueOrDefault(0.0)} m";

            var tcs = new TaskCompletionSource <Result>();

            var items = new List <MenuItem>
            {
                new MenuItem
                {
                    Text            = "Add new waypoint",
                    IconImageSource = SvgImageCache.GetImageSource("info/images/playlist-plus.svg"),
                    Command         = new Command(() => tcs.TrySetResult(Result.AddNewWaypoint)),
                },
                new MenuItem
                {
                    Text            = "Navigate here",
                    IconImageSource = SvgImageCache.GetImageSource("info/images/directions.svg"),
                    Command         = new Command(() => tcs.TrySetResult(Result.NavigateHere)),
                },
                new MenuItem
                {
                    Text            = "Show flying range",
                    IconImageSource = SvgImageCache.GetImageSource("info/images/arrow-expand-horizontal.svg"),
                    Command         = new Command(() => tcs.TrySetResult(Result.ShowFlyingRange)),
                },
            };

            ContextMenuPopupPage popupPage = null;

            EventHandler backgroundClicked =
                (sender, args) => tcs.TrySetResult(Result.Cancel);

            var viewModel = new ContextMenuPopupViewModel(
                caption,
                items,
                () =>
            {
                popupPage.Navigation.PopPopupAsync(true);
                popupPage.BackgroundClicked -= backgroundClicked;
            });

            popupPage = new ContextMenuPopupPage(viewModel);
            popupPage.BackgroundClicked += backgroundClicked;

            await popupPage.Navigation.PushPopupAsync(popupPage, true);

            return(await tcs.Task);
        }
Esempio n. 3
0
        /// <summary>
        /// Shows context menu
        /// </summary>
        /// <returns>task to wait on</returns>
        private async Task ShowContextMenu()
        {
            foreach (var item in this.Items)
            {
                item.IsEnabled &= item.Command.CanExecute(item.CommandParameter);
            }

            var viewModel = new ContextMenuPopupViewModel(
                this.Caption,
                this.Items,
                () => { this.Navigation.PopPopupAsync(true); });

            var popupPage = new ContextMenuPopupPage(viewModel);

            await popupPage.Navigation.PushPopupAsync(popupPage, true);
        }
Esempio n. 4
0
 public ShowContextMenuPopupCommand(Workspace workspace, ContextMenuPopupViewModel contextMenuPopup)
 {
     _workspace        = workspace;
     _contextMenuPopup = contextMenuPopup;
 }