示例#1
0
    private void TreeViewItem_ContextRequested(UIElement sender, ContextRequestedEventArgs args)
    {
        var option = new FlyoutShowOptions();

        if (args.TryGetPosition(sender, out Point p))
        {
            option.Position = p;
        }

        if (((sender as FrameworkElement)?.DataContext as winui.TreeViewNode)?.Content is ViewModels.FileItemViewModel vm)
        {
            var menu = new MenuFlyout();
            foreach (var item in Models.MenuCommand.GetMenuFlyoutItems(vm.MenuCommands))
            {
                menu.Items.Add(item);
            }
            {
                var item = new MenuFlyoutItem()
                {
                    Text = Application.ResourceLoader.Loader.GetString("Command/Property")
                };
                item.DataContext = vm;
                item.Click      += MenuFlyoutItem_Click_Property;
                menu.Items.Add(item);
            }
            menu.ShowAt(sender, option);
        }
        args.Handled = true;
    }
示例#2
0
        public static void ShowAt(this ContextRequestedEventArgs args, MenuFlyout flyout, FrameworkElement element)
        {
            if (flyout.Items.Count > 0 && args.TryGetPosition(element, out Point point))
            {
                if (point.X < 0 || point.Y < 0)
                {
                    point = new Point(Math.Max(point.X, 0), Math.Max(point.Y, 0));
                }

                try
                {
                    flyout.ShowAt(element, point);
                }
                catch { }
            }
            else if (flyout.Items.Count > 0)
            {
                try
                {
                    flyout.ShowAt(element);
                }
                catch { }
            }

            args.Handled = true;
        }
示例#3
0
        private void AudioButton_ContextRequested(UIElement sender, ContextRequestedEventArgs args)
        {
            var b = sender as Button;

            LoadMediaFromTag(b);
            Debug.WriteLine(_fileLoaded);
        }
示例#4
0
        private void Proxy_ContextRequested(UIElement sender, ContextRequestedEventArgs args)
        {
            var flyout = new MenuFlyout();

            var element = sender as FrameworkElement;
            var proxy   = element.DataContext as ProxyViewModel;

            if (proxy.Type is ProxyTypeMtproto || proxy.Type is ProxyTypeSocks5)
            {
                CreateFlyoutItem(ref flyout, ViewModel.ShareCommand, proxy, Strings.Resources.ShareFile);
            }

            CreateFlyoutItem(ref flyout, ViewModel.EditCommand, proxy, Strings.Resources.Edit);
            CreateFlyoutItem(ref flyout, ViewModel.RemoveCommand, proxy, Strings.Resources.Delete);

            if (flyout.Items.Count > 0 && args.TryGetPosition(sender, out Point point))
            {
                if (point.X < 0 || point.Y < 0)
                {
                    point = new Point(Math.Max(point.X, 0), Math.Max(point.Y, 0));
                }

                flyout.ShowAt(sender, point);
            }
        }
示例#5
0
        private void Rate_ContextRequested(UIElement sender, ContextRequestedEventArgs args)
        {
            var flyout = new MenuFlyout();
            var rates  = new double[] { 0.25, 0.5, 0.75, 1, 1.25, 1.50, 1.75, 2 };

            for (int i = 0; i < rates.Length; i++)
            {
                var rate   = rates[i];
                var toggle = new ToggleMenuFlyoutItem
                {
                    Text             = $"{rate}",
                    IsChecked        = _playbackService.PlaybackRate == rate,
                    CommandParameter = rate,
                    Command          = new RelayCommand <double>(x =>
                    {
                        _playbackService.PlaybackRate = rate;
                        RateButton.IsChecked          = rate != 1;
                    })
                };

                flyout.Items.Add(toggle);
            }

            flyout.ShowAt(RateButton, new FlyoutShowOptions {
                Placement = FlyoutPlacementMode.BottomEdgeAlignedRight
            });
        }
示例#6
0
        private void ListView_ContextRequested(UIElement sender, ContextRequestedEventArgs e)
        {
            // Walk up the tree to find the ListViewItem.
            // There may not be one if the click wasn't on an item.
            var requestedElement = (FrameworkElement)e.OriginalSource;

            while ((requestedElement != sender) && !(requestedElement is ListViewItem))
            {
                requestedElement = (FrameworkElement)VisualTreeHelper.GetParent(requestedElement);
            }
            if (requestedElement != sender)
            {
                // The context menu request was indeed for a ListViewItem.
                var   model = (SampleDataModel)ItemListView.ItemFromContainer(requestedElement);
                Point point;
                if (e.TryGetPosition(requestedElement, out point))
                {
                    rootPage.NotifyUser($"Showing flyout for {model.Title} at {point}", NotifyType.StatusMessage);
                    sharedFlyout.ShowAt(requestedElement, point);
                }
                else
                {
                    // Not invoked via pointer, so let XAML choose a default location.
                    rootPage.NotifyUser($"Showing flyout for {model.Title} at default location", NotifyType.StatusMessage);
                    sharedFlyout.ShowAt(requestedElement);
                }

                e.Handled = true;
            }
        }
        private void Message_ContextRequested(UIElement sender, ContextRequestedEventArgs args)
        {
            var flyout = new MenuFlyout();

            var element = sender as FrameworkElement;
            var message = element.Tag as Message;

            flyout.CreateFlyoutItem(MessageView_Loaded, ViewModel.MessageViewCommand, message, Strings.Resources.ShowInChat, new FontIcon {
                Glyph = Icons.Message
            });
            flyout.CreateFlyoutItem(MessageDelete_Loaded, ViewModel.MessageDeleteCommand, message, Strings.Resources.Delete, new FontIcon {
                Glyph = Icons.Delete
            });
            flyout.CreateFlyoutItem(MessageForward_Loaded, ViewModel.MessageForwardCommand, message, Strings.Resources.Forward, new FontIcon {
                Glyph = Icons.Forward
            });
            flyout.CreateFlyoutItem(MessageSelect_Loaded, ViewModel.MessageSelectCommand, message, Strings.Additional.Select, new FontIcon {
                Glyph = Icons.Select
            });
            flyout.CreateFlyoutItem(MessageSave_Loaded, ViewModel.MessageSaveCommand, message, Strings.Additional.SaveAs, new FontIcon {
                Glyph = Icons.SaveAs
            });

            args.ShowAt(flyout, element);
        }
        private void ImageView_ContextRequested(UIElement sender, ContextRequestedEventArgs args)
        {
            var flyout = new MenuFlyout();

            var element = sender as FrameworkElement;
            var item    = element.Tag as GalleryItem;

            if (item == null)
            {
                return;
            }

            CreateFlyoutItem(ref flyout, item.CanView, ViewModel.ViewCommand, item, Strings.Resources.ShowInChat);
            CreateFlyoutItem(ref flyout, ViewModel.CanSave, ViewModel.SaveCommand, item, Strings.Additional.SaveAs);
            CreateFlyoutItem(ref flyout, ViewModel.CanOpenWith, ViewModel.OpenWithCommand, item, Strings.Resources.OpenInExternalApp);
            CreateFlyoutItem(ref flyout, ViewModel.CanDelete, ViewModel.DeleteCommand, item, Strings.Resources.Delete);

            if (flyout.Items.Count > 0 && args.TryGetPosition(sender, out Point point))
            {
                if (point.X < 0 || point.Y < 0)
                {
                    point = new Point(Math.Max(point.X, 0), Math.Max(point.Y, 0));
                }

                flyout.ShowAt(sender, point);
            }
        }
示例#9
0
        private void TreeView_ContextRequested(UIElement sender, ContextRequestedEventArgs e)
        {
            var datacontext = (e.OriginalSource as FrameworkElement)?.DataContext;

            if (datacontext != null && (sender as FrameworkElement).DataContext != datacontext)
            {
                var args = new ContextMenuRequestedEventArgs(datacontext);
                ContextMenuRequested?.Invoke(this, args);
                if (args.MenuItems != null && args.MenuItems.Count > 0)
                {
                    var menu = new MenuFlyout();
                    foreach (var item in args.MenuItems)
                    {
                        menu.Items.Add(item);
                    }
                    if (e.TryGetPosition(e.OriginalSource as UIElement, out Point p))
                    {
                        menu.ShowAt(e.OriginalSource as UIElement, p);
                    }
                    else
                    {
                        menu.ShowAt(e.OriginalSource as UIElement, new FlyoutShowOptions()
                        {
                            Placement = FlyoutPlacementMode.Auto
                        });
                    }
                    e.Handled = true;
                }
            }
        }
        private void StickerSet_ContextRequested(UIElement sender, ContextRequestedEventArgs args)
        {
            var flyout = new MenuFlyout();

            var element    = sender as FrameworkElement;
            var stickerSet = element.Tag as StickerSetInfo;

            if (stickerSet == null || stickerSet.Id == 0)
            {
                return;
            }

            if (stickerSet.IsOfficial)
            {
                flyout.CreateFlyoutItem(ViewModel.StickerSetHideCommand, stickerSet, Strings.Resources.StickersHide, new FontIcon {
                    Glyph = Icons.Archive
                });
            }
            else
            {
                flyout.CreateFlyoutItem(ViewModel.StickerSetHideCommand, stickerSet, Strings.Resources.StickersHide, new FontIcon {
                    Glyph = Icons.Archive
                });
                flyout.CreateFlyoutItem(ViewModel.StickerSetRemoveCommand, stickerSet, Strings.Resources.StickersRemove, new FontIcon {
                    Glyph = Icons.Delete
                });
                //CreateFlyoutItem(ref flyout, ViewModel.StickerSetShareCommand, stickerSet, Strings.Resources.StickersShare);
                //CreateFlyoutItem(ref flyout, ViewModel.StickerSetCopyCommand, stickerSet, Strings.Resources.StickersCopy);
            }

            args.ShowAt(flyout, element);
        }
示例#11
0
        private async void Chat_ContextRequested(UIElement sender, ContextRequestedEventArgs args)
        {
            var viewModel = ViewModel;

            if (viewModel == null)
            {
                return;
            }

            var flyout = new MenuFlyout();

            var element = sender as FrameworkElement;
            var chat    = element.Tag as Chat;

            var position = chat.GetPosition(ViewModel.Items.ChatList);

            if (position == null)
            {
                return;
            }

            var muted = ViewModel.CacheService.GetNotificationSettingsMuteFor(chat) > 0;

            flyout.CreateFlyoutItem(DialogArchive_Loaded, viewModel.ChatArchiveCommand, chat, chat.Positions.Any(x => x.List is ChatListArchive) ? Strings.Resources.Unarchive : Strings.Resources.Archive, new FontIcon {
                Glyph = Icons.Archive
            });
            flyout.CreateFlyoutItem(DialogPin_Loaded, viewModel.ChatPinCommand, chat, position.IsPinned ? Strings.Resources.UnpinFromTop : Strings.Resources.PinToTop, new FontIcon {
                Glyph = position.IsPinned ? Icons.Unpin : Icons.Pin
            });

            if (viewModel.Items.ChatList is ChatListFilter chatListFilter)
            {
                flyout.CreateFlyoutItem(viewModel.FolderRemoveCommand, (chatListFilter.ChatFilterId, chat), Strings.Resources.FilterRemoveFrom, new FontIcon {
                    Glyph = "\uE92B", FontFamily = App.Current.Resources["TelegramThemeFontFamily"] as FontFamily
                });
            }
            else
            {
                var response = await ViewModel.ProtoService.SendAsync(new GetChatListsToAddChat(chat.Id)) as ChatLists;

                if (response != null && response.ChatListsValue.Count > 0)
                {
                    var filters = ViewModel.CacheService.ChatFilters;

                    var item = new MenuFlyoutSubItem();
                    item.Text = Strings.Resources.FilterAddTo;
                    item.Icon = new FontIcon {
                        Glyph = "\uE929", FontFamily = App.Current.Resources["TelegramThemeFontFamily"] as FontFamily
                    };

                    foreach (var chatList in response.ChatListsValue.OfType <ChatListFilter>())
                    {
                        var filter = filters.FirstOrDefault(x => x.Id == chatList.ChatFilterId);
                        if (filter != null)
                        {
                            item.Items.Add(new MenuFlyoutItem {
                                Command = ViewModel.FolderAddCommand, CommandParameter = (filter.Id, chat), Text = filter.Title, Icon = new FontIcon {
                                    Glyph = Icons.FromFilter(Icons.ParseFilter(filter.IconName)), FontFamily = App.Current.Resources["TelegramThemeFontFamily"] as FontFamily
                                }
                            });
        private void SubscriptionVideoList_ContextRequested(UIElement sender, ContextRequestedEventArgs args)
        {
            if (sender == args.OriginalSource)
            {
                return;
            }

            if (sender is ListViewBase listViewBase)
            {
                if (args.OriginalSource is SelectorItem selectorItem)
                {
                    selectorItem.DataContext = selectorItem.Content;
                }

                var subscVM = (listViewBase.DataContext as SubscriptionViewModel);
                var flyout  = new VideoItemFlyout()
                {
                    SourceVideoItems = subscVM.Videos,
                    AllowSelection   = false,
                };

                flyout.ShowAt(args.OriginalSource as FrameworkElement);
                args.Handled = true;
            }
        }
示例#13
0
        private void Theme_ContextRequested(UIElement sender, ContextRequestedEventArgs args)
        {
            var element = sender as FrameworkElement;
            var theme   = element.Tag as ThemeInfoBase;

            if (theme is ThemeSystemInfo)
            {
                return;
            }

            var flyout = new MenuFlyout();

            flyout.CreateFlyoutItem(ViewModel.ThemeCreateCommand, theme, Strings.Resources.CreateNewThemeMenu, new FontIcon {
                Glyph = Icons.Theme
            });

            if (!theme.IsOfficial)
            {
                flyout.CreateFlyoutSeparator();
                flyout.CreateFlyoutItem(ViewModel.ThemeShareCommand, theme, Strings.Resources.ShareFile, new FontIcon {
                    Glyph = Icons.Share
                });
                flyout.CreateFlyoutItem(ViewModel.ThemeEditCommand, theme, Strings.Resources.Edit, new FontIcon {
                    Glyph = Icons.Edit
                });
                flyout.CreateFlyoutItem(ViewModel.ThemeDeleteCommand, theme, Strings.Resources.Delete, new FontIcon {
                    Glyph = Icons.Delete
                });
            }

            args.ShowAt(flyout, element);
        }
示例#14
0
        private void Proxy_ContextRequested(UIElement sender, ContextRequestedEventArgs args)
        {
            var flyout  = new MenuFlyout();
            var element = sender as FrameworkElement;

            var proxy = List.ItemFromContainer(element) as ProxyViewModel;

            if (proxy is null or SystemProxyViewModel)
            {
                return;
            }

            if (proxy.Type is ProxyTypeMtproto or ProxyTypeSocks5)
            {
                flyout.CreateFlyoutItem(ViewModel.ShareCommand, proxy, Strings.Resources.ShareFile, new FontIcon {
                    Glyph = Icons.Share
                });
            }

            flyout.CreateFlyoutItem(ViewModel.EditCommand, proxy, Strings.Resources.Edit, new FontIcon {
                Glyph = Icons.Edit
            });
            flyout.CreateFlyoutItem(ViewModel.RemoveCommand, proxy, Strings.Resources.Delete, new FontIcon {
                Glyph = Icons.Delete
            });

            args.ShowAt(flyout, element);
        }
示例#15
0
 private void RootCanas_ContextRuested(Windows.UI.Xaml.UIElement sender, ContextRequestedEventArgs args)
 {
     if (args.TryGetPosition(RootCanvas, out Point p))
     {
         args.Handled = true;
         PostEvent(DrawEvent.ContextMenu);
     }
 }
        private void Message_ContextRequested(UIElement sender, ContextRequestedEventArgs args)
        {
            var flyout = new MenuFlyout();

            var element = sender as FrameworkElement;
            var message = element.Tag as MessageWithOwner;

            var selected = ViewModel.SelectedItems;

            if (selected.Count > 0)
            {
                if (selected.Contains(message))
                {
                    flyout.CreateFlyoutItem(ViewModel.MessagesForwardCommand, "Forward Selected", new FontIcon {
                        Glyph = Icons.Share
                    });

                    //if (chat.CanBeReported)
                    //{
                    //    flyout.CreateFlyoutItem(ViewModel.MessagesReportCommand, "Report Selected", new FontIcon { Glyph = Icons.ShieldError });
                    //}

                    flyout.CreateFlyoutItem(ViewModel.MessagesDeleteCommand, "Delete Selected", new FontIcon {
                        Glyph = Icons.Delete
                    });
                    flyout.CreateFlyoutItem(ViewModel.MessagesUnselectCommand, "Clear Selection");
                    //flyout.CreateFlyoutSeparator();
                    //flyout.CreateFlyoutItem(ViewModel.MessagesCopyCommand, "Copy Selected as Text", new FontIcon { Glyph = Icons.DocumentCopy });
                }
                else
                {
                    flyout.CreateFlyoutItem(MessageSelect_Loaded, ViewModel.MessageSelectCommand, message, Strings.Resources.lng_context_select_msg, new FontIcon {
                        Glyph = Icons.CheckmarkCircle
                    });
                }
            }
            else
            {
                flyout.CreateFlyoutItem(MessageView_Loaded, ViewModel.MessageViewCommand, message, Strings.Resources.ShowInChat, new FontIcon {
                    Glyph = Icons.Comment
                });
                flyout.CreateFlyoutItem(MessageDelete_Loaded, ViewModel.MessageDeleteCommand, message, Strings.Resources.Delete, new FontIcon {
                    Glyph = Icons.Delete
                });
                flyout.CreateFlyoutItem(MessageForward_Loaded, ViewModel.MessageForwardCommand, message, Strings.Resources.Forward, new FontIcon {
                    Glyph = Icons.Share
                });
                flyout.CreateFlyoutItem(MessageSelect_Loaded, ViewModel.MessageSelectCommand, message, Strings.Resources.lng_context_select_msg, new FontIcon {
                    Glyph = Icons.CheckmarkCircle
                });
                flyout.CreateFlyoutItem(MessageSave_Loaded, ViewModel.MessageSaveCommand, message, Strings.Resources.lng_mediaview_save_as, new FontIcon {
                    Glyph = Icons.SaveAs
                });
            }

            args.ShowAt(flyout, element);
        }
示例#17
0
        private void Sticker_ContextRequested(UIElement sender, ContextRequestedEventArgs args)
        {
            var element = sender as FrameworkElement;
            var sticker = element.Tag as StickerViewModel;

            if (sticker.StickerValue is File file && // Download for preview
                !file.Local.IsDownloadingCompleted &&
                file.Local.CanBeDownloaded && !file.Local.IsDownloadingActive)
            {
                _stickers[file.Id].Add(sticker);
                sticker.ProtoService.DownloadFile(file.Id, 1);
            }

            var flyout = new MenuFlyout();

            _previewFlyout = new Controls.MenuFlyoutMediaItem(sticker);
            flyout.Items.Add(_previewFlyout);
            flyout.CreateFlyoutSeparator();
            flyout.CreateFlyoutItem(ViewModel.StickerViewCommand, (Sticker)sticker, Strings.Resources.ViewPackPreview, new FontIcon {
                Glyph = Icons.Stickers, FontFamily = Constants.SymbolThemeFontFamily
            });

            if (ViewModel.ProtoService.IsStickerFavorite(sticker.StickerValue.Id))
            {
                flyout.CreateFlyoutItem(ViewModel.StickerUnfaveCommand, (Sticker)sticker, Strings.Resources.DeleteFromFavorites, new FontIcon {
                    Glyph = Icons.Unfavorite
                });
            }
            else
            {
                flyout.CreateFlyoutItem(ViewModel.StickerFaveCommand, (Sticker)sticker, Strings.Resources.AddToFavorites, new FontIcon {
                    Glyph = Icons.Favorite
                });
            }

            if (ViewModel.Type == ViewModels.DialogType.History)
            {
                var chat = ViewModel.Chat;
                if (chat == null)
                {
                    return;
                }

                var self = ViewModel.CacheService.IsSavedMessages(chat);

                flyout.CreateFlyoutSeparator();
                flyout.CreateFlyoutItem(new RelayCommand <Sticker>(anim => ViewModel.StickerSendExecute(anim, null, true)), (Sticker)sticker, Strings.Resources.SendWithoutSound, new FontIcon {
                    Glyph = Icons.Mute
                });
                //flyout.CreateFlyoutItem(new RelayCommand<Sticker>(anim => ViewModel.StickerSendExecute(anim, true, null)), sticker.Get(), self ? Strings.Resources.SetReminder : Strings.Resources.ScheduleMessage, new FontIcon { Glyph = Icons.Schedule });
                flyout.CreateFlyoutItem(new RelayCommand <Sticker>(anim => ViewModel.StickerSendExecute(anim)), (Sticker)sticker, Strings.Resources.Send, new FontIcon {
                    Glyph = Icons.Send, FontFamily = Constants.TelegramThemeFontFamily
                });
            }

            args.ShowAt(flyout, element);
        }
示例#18
0
        // This is not even remotely good MVVM but is the least-bad option given the way MenuFlyout and MenuFlyoutSubItem works
        public void Device_ContextRequested(UIElement sender, ContextRequestedEventArgs args)
        {
            Windows.Foundation.Point clickPoint;
            if (!args.TryGetPosition(sender, out clickPoint))
            {
                return;
            }

            _contextActionProvider.HandleDeviceContextRequested(this, sender, clickPoint);
        }
示例#19
0
 public void CustomContextRequested(object?sender, ContextRequestedEventArgs e)
 {
     if (sender is Border border && border.Child is TextBlock textBlock)
     {
         textBlock.Text = e.TryGetPosition(border, out var point)
             ? $"Context was requested with pointer at: {point.X:N0}, {point.Y:N0}"
             : "Context was requested without pointer";
         e.Handled = true;
     }
 }
示例#20
0
        public void CustomContextRequested(object sender, ContextRequestedEventArgs e)
        {
            var border    = (Border)sender;
            var textBlock = (TextBlock)border.Child;

            textBlock.Text = e.TryGetPosition(border, out var point)
                ? $"Context was requested with pointer at: {point.X:N0}, {point.Y:N0}"
                : "Context was requested without pointer";
            e.Handled = true;
        }
        private void Member_ContextRequested(UIElement sender, ContextRequestedEventArgs args)
        {
            var flyout = new MenuFlyout();

            var element = sender as FrameworkElement;
            var member  = element.Tag as ChatMember;

            flyout.CreateFlyoutItem(ViewModel.MemberUnbanCommand, member, Strings.Resources.Unban);

            args.ShowAt(flyout, element);
        }
示例#22
0
        private void OnContextRequested(UIElement sender, ContextRequestedEventArgs args)
        {
            var animation = List.ItemFromContainer(sender) as Animation;

            if (animation == null)
            {
                return;
            }

            ItemContextRequested?.Invoke(sender, new ItemContextRequestedEventArgs <Animation>(animation, args));
        }
示例#23
0
        private void Grid_ContextRequested(UIElement sender, ContextRequestedEventArgs args)
        {
            var requestedElement = sender as FrameworkElement;

            if (args.TryGetPosition(requestedElement, out Point point))
            {
                sharedFlyout.ShowAt(requestedElement, point);
            }
            else
            {
                sharedFlyout.ShowAt(requestedElement);
            }
        }
示例#24
0
        private void Item_ContextRequested(UIElement sender, ContextRequestedEventArgs args)
        {
            var flyout = new MenuFlyout();

            var element = sender as FrameworkElement;
            var chat    = element.DataContext as ChatFilterInfo;

            flyout.CreateFlyoutItem(ViewModel.DeleteCommand, chat, Strings.Resources.FilterDeleteItem, new FontIcon {
                Glyph = Icons.Delete
            });

            args.ShowAt(flyout, element);
        }
    private void flipView_ContextRequested(UIElement sender, ContextRequestedEventArgs args)
    {
        var option = new FlyoutShowOptions();

        if (args.TryGetPosition(this, out Point p))
        {
            option.Position = p;
        }
        if (sender is FrameworkElement fe && fe.Resources["ContextFlyout"] is MenuFlyout menuFlyout)
        {
            menuFlyout.ShowAt(this, option);
        }
        args.Handled = true;
    }
示例#26
0
        private void Member_ContextRequested(UIElement sender, ContextRequestedEventArgs args)
        {
            var flyout = new MenuFlyout();

            var element = sender as FrameworkElement;
            var member  = element.Tag as ChatMember;

            var chat = ViewModel.Chat;

            if (chat == null)
            {
                return;
            }

            ChatMemberStatus status = null;

            if (chat.Type is ChatTypeBasicGroup basic)
            {
                status = ViewModel.ProtoService.GetBasicGroup(basic.BasicGroupId)?.Status;
            }
            else if (chat.Type is ChatTypeSupergroup super)
            {
                status = ViewModel.ProtoService.GetSupergroup(super.SupergroupId)?.Status;
            }

            if (status == null)
            {
                return;
            }

            CreateFlyoutItem(ref flyout, MemberPromote_Loaded, ViewModel.MemberPromoteCommand, status, member, Strings.Resources.SetAsAdmin);

            if (chat.Type is ChatTypeSupergroup)
            {
                CreateFlyoutItem(ref flyout, MemberRestrict_Loaded, ViewModel.MemberRestrictCommand, status, member, Strings.Resources.KickFromSupergroup);
            }

            CreateFlyoutItem(ref flyout, MemberRemove_Loaded, ViewModel.MemberRemoveCommand, status, member, Strings.Resources.KickFromGroup);

            if (flyout.Items.Count > 0 && args.TryGetPosition(sender, out Point point))
            {
                if (point.X < 0 || point.Y < 0)
                {
                    point = new Point(Math.Max(point.X, 0), Math.Max(point.Y, 0));
                }

                flyout.ShowAt(sender, point);
            }
        }
示例#27
0
        private void Sticker_ContextRequested(UIElement sender, ContextRequestedEventArgs args)
        {
            var element = sender as FrameworkElement;
            var sticker = element.Tag as StickerViewModel;

            if (sticker == null)
            {
                return;
            }

            var flyout = new MenuFlyout();

            flyout.CreateFlyoutItem(ViewModel.StickerViewCommand, (Sticker)sticker, Strings.Resources.ViewPackPreview, new FontIcon {
                Glyph = Icons.Stickers
            });

            if (ViewModel.ProtoService.IsStickerFavorite(sticker.StickerValue.Id))
            {
                flyout.CreateFlyoutItem(ViewModel.StickerUnfaveCommand, (Sticker)sticker, Strings.Resources.DeleteFromFavorites, new FontIcon {
                    Glyph = Icons.Unfavorite
                });
            }
            else
            {
                flyout.CreateFlyoutItem(ViewModel.StickerFaveCommand, (Sticker)sticker, Strings.Resources.AddToFavorites, new FontIcon {
                    Glyph = Icons.Favorite
                });
            }

            if (ViewModel.Type == ViewModels.DialogType.History)
            {
                var chat = ViewModel.Chat;
                if (chat == null)
                {
                    return;
                }

                var self = ViewModel.CacheService.IsSavedMessages(chat);

                flyout.CreateFlyoutSeparator();
                flyout.CreateFlyoutItem(new RelayCommand <Sticker>(anim => ViewModel.StickerSendExecute(anim, null, true)), (Sticker)sticker, Strings.Resources.SendWithoutSound, new FontIcon {
                    Glyph = Icons.Mute
                });
                //flyout.CreateFlyoutItem(new RelayCommand<Sticker>(anim => ViewModel.StickerSendExecute(anim, true, null)), sticker.Get(), self ? Strings.Resources.SetReminder : Strings.Resources.ScheduleMessage, new FontIcon { Glyph = Icons.Schedule });
            }

            args.ShowAt(flyout, element);
        }
示例#28
0
        private void Member_ContextRequested(UIElement sender, ContextRequestedEventArgs args)
        {
            var flyout = new MenuFlyout();

            var element = sender as FrameworkElement;
            var member  = element.Tag as ChatMember;

            var chat = ViewModel.Chat;

            if (chat == null || member == null)
            {
                return;
            }

            ChatMemberStatus status = null;

            if (chat.Type is ChatTypeBasicGroup basic)
            {
                status = ViewModel.ProtoService.GetBasicGroup(basic.BasicGroupId)?.Status;
            }
            else if (chat.Type is ChatTypeSupergroup super)
            {
                status = ViewModel.ProtoService.GetSupergroup(super.SupergroupId)?.Status;
            }

            if (status == null)
            {
                return;
            }

            if (chat.Type is ChatTypeSupergroup)
            {
                flyout.CreateFlyoutItem(MemberPromote_Loaded, ViewModel.MemberPromoteCommand, chat.Type, status, member, Strings.Resources.SetAsAdmin, new FontIcon {
                    Glyph = Icons.Star
                });
                flyout.CreateFlyoutItem(MemberRestrict_Loaded, ViewModel.MemberRestrictCommand, chat.Type, status, member, Strings.Resources.KickFromSupergroup, new FontIcon {
                    Glyph = Icons.LockClosed
                });
            }

            flyout.CreateFlyoutItem(MemberRemove_Loaded, ViewModel.MemberRemoveCommand, chat.Type, status, member, Strings.Resources.KickFromGroup, new FontIcon {
                Glyph = Icons.Block
            });

            args.ShowAt(flyout, element);
        }
        private async void ContactGrid_ContextRequested(UIElement sender, ContextRequestedEventArgs args)
        {
            _pinnedContactManager = PinnedContactManager.GetDefault();

            if (PinnedContactManager.IsSupported() && _pinnedContactManager.IsPinSurfaceSupported(PinnedContactSurface.Taskbar))
            {
                Grid       grid       = sender as Grid;
                AppContact appContact = grid.DataContext as AppContact;

                if (appContact != null)
                {
                    MenuFlyout menuFlyout = new MenuFlyout();
                    menuFlyout.Closed += MenuFlyout_Closed;

                    string menuText = $"{Constants.CONTACT_CONTEXT_MENU_TEXT_PIN} {appContact.FirstName}";
                    string menuTag  = Constants.CONTACT_CONTEXT_MENU_TAG_PIN;

                    Contact contactToPinUnpin = await GetAggregateContactFromAppContactAsync(appContact);

                    if (_pinnedContactManager.IsContactPinned(contactToPinUnpin, PinnedContactSurface.Taskbar))
                    {
                        menuText = $"{Constants.CONTACT_CONTEXT_MENU_TEXT_UNPIN} {appContact.FirstName}";
                        menuTag  = Constants.CONTACT_CONTEXT_MENU_TAG_UNPIN;
                    }

                    var menuFlyoutItem = new MenuFlyoutItem
                    {
                        Text = menuText,
                        Tag  = menuTag
                    };

                    menuFlyoutItem.Click += MenuFlyoutItem_Click;
                    menuFlyout.Items.Add(menuFlyoutItem);

                    grid.ContextFlyout = menuFlyout;

                    Point point;
                    bool  succeeded = args.TryGetPosition(grid, out point);

                    if (succeeded)
                    {
                        menuFlyout.ShowAt(grid, point);
                    }
                }
            }
        }
示例#30
0
        private void Chat_ContextRequested(UIElement sender, ContextRequestedEventArgs args)
        {
            var viewModel = ViewModel;

            if (viewModel == null)
            {
                return;
            }

            var flyout = new MenuFlyout();

            var element = sender as FrameworkElement;
            var chat    = element.Tag as Chat;

            var muted = ViewModel.CacheService.GetNotificationSettingsMuteFor(chat) > 0;

            flyout.CreateFlyoutItem(DialogPin_Loaded, viewModel.ChatPinCommand, chat, chat.IsPinned ? Strings.Resources.UnpinFromTop : Strings.Resources.PinToTop, new FontIcon {
                Glyph = chat.IsPinned ? Icons.Unpin : Icons.Pin
            });
            flyout.CreateFlyoutItem(DialogArchive_Loaded, viewModel.ChatArchiveCommand, chat, chat.ChatList is ChatListArchive ? Strings.Resources.Unarchive : Strings.Resources.Archive, new FontIcon {
                Glyph = Icons.Archive
            });
            flyout.CreateFlyoutItem(DialogNotify_Loaded, viewModel.ChatNotifyCommand, chat, muted ? Strings.Resources.UnmuteNotifications : Strings.Resources.MuteNotifications, new FontIcon {
                Glyph = muted ? Icons.Unmute : Icons.Mute
            });
            flyout.CreateFlyoutItem(DialogMark_Loaded, viewModel.ChatMarkCommand, chat, chat.IsUnread() ? Strings.Resources.MarkAsRead : Strings.Resources.MarkAsUnread, new FontIcon {
                Glyph = chat.IsUnread() ? Icons.MarkAsRead : Icons.MarkAsUnread, FontFamily = App.Current.Resources["TelegramThemeFontFamily"] as FontFamily
            });
            flyout.CreateFlyoutItem(DialogClear_Loaded, viewModel.ChatClearCommand, chat, Strings.Resources.ClearHistory, new FontIcon {
                Glyph = Icons.Clear
            });
            flyout.CreateFlyoutItem(DialogDelete_Loaded, viewModel.ChatDeleteCommand, chat, DialogDelete_Text(chat), new FontIcon {
                Glyph = Icons.Delete
            });

            if (AllowSelection && viewModel.SelectionMode != ListViewSelectionMode.Multiple)
            {
                flyout.CreateFlyoutSeparator();
                flyout.CreateFlyoutItem(viewModel.ChatSelectCommand, chat, Strings.Additional.Select, new FontIcon {
                    Glyph = Icons.Select
                });
            }

            args.ShowAt(flyout, element);
        }