* Added icon to "Recent >" menu item. * Refactored app menu implementation, and implemented keyboard accelerators. Still doesn't work though. * Few things fixed, but still doesn't work. * Clicking menu items works. * Fixing an issue with resources. * New menu binding implemented. Still doesn't work though. * Menu displayed properly, except for "Settings". * Menu works, but it doesn't refresh. * Works. But needs to be polished. * All known issues with the new app menu solved. * Significantly simplifying app menu binding. * Removing some obsolete classes. * Menu binding mechanism additionally optimized for performances. * Removing unused translations. * Further refactoring app menu binding, in order to make it more general. * New window mechanism simplified. Terminal-launching code refactored to be more readable. A bug with "SSH Info" fixed. * Merging the latest changed.
40 lines
1.7 KiB
C#
40 lines
1.7 KiB
C#
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using Windows.UI.Xaml;
|
|
using Windows.UI.Xaml.Controls;
|
|
using FluentTerminal.App.Converters;
|
|
using FluentTerminal.App.ViewModels.Menu;
|
|
|
|
namespace FluentTerminal.App.Views
|
|
{
|
|
// https://stackoverflow.com/questions/33839279/bind-obserable-collection-to-menuflyoutsubitem-in-uwp
|
|
public static class MenuExtension
|
|
{
|
|
private static readonly MenuItemViewModelBaseToMenuFlayoutItemBaseConverter Converter =
|
|
new MenuItemViewModelBaseToMenuFlayoutItemBaseConverter();
|
|
|
|
public static IEnumerable<MenuItemViewModelBase> GetSubItems(DependencyObject obj) =>
|
|
(IEnumerable<MenuItemViewModelBase>) obj.GetValue(SubItemsProperty);
|
|
|
|
public static void SetSubItems(DependencyObject obj, IEnumerable<MenuItemViewModelBase> value) =>
|
|
obj.SetValue(SubItemsProperty, value);
|
|
|
|
public static readonly DependencyProperty SubItemsProperty =
|
|
DependencyProperty.Register("SubItems", typeof(IEnumerable<MenuItemViewModelBase>), typeof(MenuExtension),
|
|
new PropertyMetadata(new List<MenuItemViewModelBase>(), (sender, e) =>
|
|
{
|
|
if (sender is MenuFlyoutSubItem menuSubItem)
|
|
{
|
|
menuSubItem.Items?.Clear();
|
|
|
|
if (e.NewValue is IEnumerable<MenuItemViewModelBase> viewModels)
|
|
{
|
|
foreach (var item in viewModels.Select(vm => (MenuFlyoutItemBase) Converter.Convert(vm)))
|
|
{
|
|
menuSubItem.Items?.Add(item);
|
|
}
|
|
}
|
|
}
|
|
}));
|
|
}
|
|
} |