diff --git a/src/modules/launcher/PowerLauncher.UI/ResultList.xaml b/src/modules/launcher/PowerLauncher.UI/ResultList.xaml index 1770da807e..33172f1fe9 100644 --- a/src/modules/launcher/PowerLauncher.UI/ResultList.xaml +++ b/src/modules/launcher/PowerLauncher.UI/ResultList.xaml @@ -8,11 +8,16 @@ xmlns:ToolkitBehaviors="using:Microsoft.Toolkit.Uwp.UI.Animations.Behaviors" xmlns:Core="using:Microsoft.Xaml.Interactions.Core" xmlns:Interactivity="using:Microsoft.Xaml.Interactivity" + xmlns:converters="using:Microsoft.Toolkit.Uwp.UI.Converters" d:DesignHeight="300" d:DesignWidth="720"> + + + + Style="{StaticResource ListViewNoAnimations}" + > - - - - - - - - + - + @@ -64,16 +63,12 @@ Grid.Column="1" Margin="0,0,42,0" Height="46" + Visibility="{Binding AreContextButtonsActive, Converter={StaticResource BoolToVisibilityConverter}}" ScrollViewer.VerticalScrollBarVisibility="Disabled" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ItemsSource="{Binding ContextMenuItems}" SelectionMode="Single" SelectedIndex="{Binding ContextMenuSelectedIndex}"> - - - - - diff --git a/src/modules/launcher/Wox/ViewModel/ContextMenuItemViewModel.cs b/src/modules/launcher/Wox/ViewModel/ContextMenuItemViewModel.cs index ceb166c71a..d21f372204 100644 --- a/src/modules/launcher/Wox/ViewModel/ContextMenuItemViewModel.cs +++ b/src/modules/launcher/Wox/ViewModel/ContextMenuItemViewModel.cs @@ -12,6 +12,6 @@ namespace Wox.ViewModel public ICommand Command { get; set; } public string AcceleratorKey { get; set; } public string AcceleratorModifiers { get; set; } - public bool IsEnabled { get; set; } + public bool IsAcceleratorKeyEnabled { get; set; } } } \ No newline at end of file diff --git a/src/modules/launcher/Wox/ViewModel/ResultViewModel.cs b/src/modules/launcher/Wox/ViewModel/ResultViewModel.cs index 3dfb8eaef1..e073e8baca 100644 --- a/src/modules/launcher/Wox/ViewModel/ResultViewModel.cs +++ b/src/modules/launcher/Wox/ViewModel/ResultViewModel.cs @@ -17,12 +17,24 @@ namespace Wox.ViewModel { public class ResultViewModel : BaseModel { + public enum ActivationType + { + Selection, + Hover + }; + public List ContextMenuItems { get; set; } - public ICommand LoadContextMenuCommand { get; set; } + public ICommand ActivateContextButtonsHoverCommand { get; set; } + public ICommand ActivateContextButtonsSelectionCommand { get; set; } + public ICommand DeactivateContextButtonsHoverCommand { get; set; } + + public ICommand DeactivateContextButtonsSelectionCommand { get; set; } public bool IsSelected { get; set; } + public bool AreContextButtonsActive { get; set; } + public int ContextMenuSelectedIndex { get; set; } const int NoSelectionIndex = -1; @@ -34,9 +46,62 @@ namespace Wox.ViewModel Result = result; } ContextMenuSelectedIndex = NoSelectionIndex; - LoadContextMenuCommand = new RelayCommand(LoadContextMenu); + ActivateContextButtonsHoverCommand = new RelayCommand(ActivateContextButtonsHoverAction); + ActivateContextButtonsSelectionCommand = new RelayCommand(ActivateContextButtonsSelectionAction); + DeactivateContextButtonsHoverCommand = new RelayCommand(DeactivateContextButtonsHoverAction); + DeactivateContextButtonsSelectionCommand = new RelayCommand(DeactivateContextButtonsSelectionAction); } - public void LoadContextMenu(object sender=null) + + private void ActivateContextButtonsHoverAction(object sender) + { + ActivateContextButtons(ActivationType.Hover); + } + + private void ActivateContextButtonsSelectionAction(object sender) + { + ActivateContextButtons(ActivationType.Selection); + } + public void ActivateContextButtons(ActivationType activationType) + { + + if (ContextMenuItems == null) + { + LoadContextMenu(); + } + + AreContextButtonsActive = true; + + if (activationType == ActivationType.Selection) + { + IsSelected = true; + EnableContextMenuAcceleratorKeys(); + } + } + + + private void DeactivateContextButtonsHoverAction(object sender) + { + DeactivateContextButtons(ActivationType.Hover); + } + + private void DeactivateContextButtonsSelectionAction(object sender) + { + DeactivateContextButtons(ActivationType.Selection); + } + + public void DeactivateContextButtons(ActivationType activationType) + { + AreContextButtonsActive = false; + + if (activationType == ActivationType.Selection) + { + IsSelected = false; + DisableContextMenuAcceleratorkeys(); + } + } + + + public void LoadContextMenu() { var results = PluginManager.GetContextMenusForPlugin(Result); var newItems = new List(); @@ -68,19 +133,19 @@ namespace Wox.ViewModel ContextMenuItems = newItems; } - internal void EnableContextMenu() + private void EnableContextMenuAcceleratorKeys() { foreach(var i in ContextMenuItems) { - i.IsEnabled = true; + i.IsAcceleratorKeyEnabled = true; } } - internal void DisableContextMenu() + private void DisableContextMenuAcceleratorkeys() { foreach (var i in ContextMenuItems) { - i.IsEnabled = false; + i.IsAcceleratorKeyEnabled = false; } } diff --git a/src/modules/launcher/Wox/ViewModel/ResultsViewModel.cs b/src/modules/launcher/Wox/ViewModel/ResultsViewModel.cs index d237b0b238..c4e7360f13 100644 --- a/src/modules/launcher/Wox/ViewModel/ResultsViewModel.cs +++ b/src/modules/launcher/Wox/ViewModel/ResultsViewModel.cs @@ -59,14 +59,11 @@ namespace Wox.ViewModel { if (_selectedItem != null) { - _selectedItem.IsSelected = false; - _selectedItem.DisableContextMenu(); + _selectedItem.DeactivateContextButtons(ResultViewModel.ActivationType.Selection); } _selectedItem = value; - _selectedItem.LoadContextMenu(); - _selectedItem.EnableContextMenu(); - _selectedItem.IsSelected = true; + _selectedItem.ActivateContextButtons(ResultViewModel.ActivationType.Selection); } } }