Show icons when items are on clipbaord

This commit is contained in:
2023-07-28 00:12:00 +02:00
parent 0d8c5b8766
commit 27ebb1efa8
6 changed files with 40 additions and 21 deletions

View File

@@ -1,3 +1,4 @@
using System.Collections.ObjectModel;
using FileTime.Core.Command;
using FileTime.Core.Models;
@@ -6,7 +7,7 @@ namespace FileTime.App.Core.Services;
public interface IClipboardService
{
Type? CommandFactoryType { get; }
IReadOnlyList<FullName> Content { get; }
ReadOnlyObservableCollection<FullName> Content { get; }
void AddContent(FullName absolutePath);
void RemoveContent(FullName absolutePath);

View File

@@ -1,3 +1,4 @@
using System.Collections.ObjectModel;
using FileTime.Core.Command;
using FileTime.Core.Models;
@@ -5,14 +6,14 @@ namespace FileTime.App.Core.Services;
public class ClipboardService : IClipboardService
{
private List<FullName> _content;
public IReadOnlyList<FullName> Content { get; private set; }
private readonly ObservableCollection<FullName> _content;
public ReadOnlyObservableCollection<FullName> Content { get; }
public Type? CommandFactoryType { get; private set; }
public ClipboardService()
{
_content = new List<FullName>();
Content = _content.AsReadOnly();
_content = new ObservableCollection<FullName>();
Content = new(_content);
}
public void AddContent(FullName absolutePath)
@@ -38,13 +39,10 @@ public class ClipboardService : IClipboardService
public void Clear()
{
_content = new List<FullName>();
Content = _content.AsReadOnly();
_content.Clear();
CommandFactoryType = null;
}
public void SetCommand<T>() where T : ITransportationCommandFactory
{
CommandFactoryType = typeof(T);
}
=> CommandFactoryType = typeof(T);
}

View File

@@ -32,8 +32,9 @@
<converters:FormatSizeConverter x:Key="FormatSizeConverter" />
<converters:DateTimeConverter x:Key="DateTimeConverter" />
<converters:SplitStringConverter x:Key="SplitStringConverter" />
<converters:CompareConverter x:Key="EqualityConverter" />
<converters:CompareConverter x:Key="EqualsConverter" />
<converters:CompareConverter ComparisonCondition="{x:Static converters:ComparisonCondition.NotEqual}" x:Key="NotEqualsConverter" />
<converters:CompareConverter ComparisonCondition="{x:Static converters:ComparisonCondition.GreaterThan}" x:Key="GreaterThanConverter" />
<converters:ExceptionToStringConverter x:Key="ExceptionToStringConverter" />
<converters:CommandToCommandNameConverter x:Key="CommandToCommandNameConverter" />
<converters:ItemToImageConverter x:Key="ItemToImageConverter" />

View File

@@ -16,4 +16,5 @@ public interface IMainWindowViewModel : IMainWindowViewModelBase
ICommandPaletteService CommandPaletteService { get; }
IRefreshSmoothnessCalculator RefreshSmoothnessCalculator { get; }
IAdminElevationManager AdminElevationManager { get; }
IClipboardService ClipboardService { get; }
}

View File

@@ -31,6 +31,7 @@ namespace FileTime.GuiApp.ViewModels;
[Inject(typeof(ICommandPaletteService), PropertyAccessModifier = AccessModifier.Public)]
[Inject(typeof(IRefreshSmoothnessCalculator), PropertyAccessModifier = AccessModifier.Public)]
[Inject(typeof(IAdminElevationManager), PropertyAccessModifier = AccessModifier.Public)]
[Inject(typeof(IClipboardService), PropertyAccessModifier = AccessModifier.Public)]
public partial class MainWindowViewModel : IMainWindowViewModel
{
public bool Loading => false;

View File

@@ -70,9 +70,26 @@
Height="20"
HorizontalAlignment="Left"
IsVisible="{Binding AdminElevationManager.IsAdminInstanceRunning}"
Margin="10,0,0,0"
Source="{SvgImage /Assets/material/security.svg}"
VerticalAlignment="Center"
Width="20" />
<Image
Height="20"
HorizontalAlignment="Left"
IsVisible="{Binding ClipboardService.Content.Count, Converter={StaticResource EqualsConverter}, ConverterParameter=1}"
Margin="10,0,0,0"
Source="{SvgImage /Assets/material/clipboard-outline.svg}"
VerticalAlignment="Center"
Width="20" />
<Image
Height="20"
HorizontalAlignment="Left"
IsVisible="{Binding ClipboardService.Content.Count, Converter={StaticResource GreaterThanConverter}, ConverterParameter=1}"
Margin="10,0,0,0"
Source="{SvgImage /Assets/material/clipboard-multiple-outline.svg}"
VerticalAlignment="Center"
Width="20" />
</StackPanel>
</Grid>
</Grid>
@@ -458,7 +475,7 @@
Foreground="{DynamicResource ErrorBrush}"
Grid.Row="1"
HorizontalAlignment="Center"
IsVisible="{Binding AppState.SelectedTab^.CurrentItems.Value.Count, Converter={StaticResource EqualityConverter}, ConverterParameter=0}"
IsVisible="{Binding AppState.SelectedTab^.CurrentItems.Value.Count, Converter={StaticResource EqualsConverter}, ConverterParameter=0}"
Margin="10"
x:Name="CurrentEmpty">
Empty
@@ -517,7 +534,7 @@
FontWeight="Bold"
Foreground="{DynamicResource ErrorBrush}"
HorizontalAlignment="Center"
IsVisible="{Binding AppState.SelectedTab^.SelectedsChildren.Value.Count, Converter={StaticResource EqualityConverter}, ConverterParameter=0}"
IsVisible="{Binding AppState.SelectedTab^.SelectedsChildren.Value.Count, Converter={StaticResource EqualsConverter}, ConverterParameter=0}"
Margin="10"
x:Name="ChildEmpty">
Empty
@@ -547,13 +564,13 @@
<Grid IsVisible="{Binding ItemPreviewService.ItemPreview^, Converter={x:Static ObjectConverters.IsNotNull}}">
<TextBlock
HorizontalAlignment="Center"
IsVisible="{Binding ItemPreviewService.ItemPreview^.Mode, Converter={StaticResource EqualityConverter}, ConverterParameter={x:Static appCoreModels:ItemPreviewMode.Unknown}, FallbackValue={x:Static appCoreModels:ItemPreviewMode.Unknown}}"
IsVisible="{Binding ItemPreviewService.ItemPreview^.Mode, Converter={StaticResource EqualsConverter}, ConverterParameter={x:Static appCoreModels:ItemPreviewMode.Unknown}, FallbackValue={x:Static appCoreModels:ItemPreviewMode.Unknown}}"
Text="Don't know how to preview this item." />
<TextBlock
HorizontalAlignment="Center"
IsVisible="{Binding ItemPreviewService.ItemPreview^.Mode, Converter={StaticResource EqualityConverter}, ConverterParameter={x:Static appCoreModels:ItemPreviewMode.Empty}, FallbackValue={x:Static appCoreModels:ItemPreviewMode.Unknown}}"
IsVisible="{Binding ItemPreviewService.ItemPreview^.Mode, Converter={StaticResource EqualsConverter}, ConverterParameter={x:Static appCoreModels:ItemPreviewMode.Empty}, FallbackValue={x:Static appCoreModels:ItemPreviewMode.Unknown}}"
Text="Empty" />
<Grid IsVisible="{Binding ItemPreviewService.ItemPreview^.Mode, Converter={StaticResource EqualityConverter}, ConverterParameter={x:Static appCoreModels:ItemPreviewMode.Text}, FallbackValue={x:Static appCoreModels:ItemPreviewMode.Unknown}}" RowDefinitions="*, Auto">
<Grid IsVisible="{Binding ItemPreviewService.ItemPreview^.Mode, Converter={StaticResource EqualsConverter}, ConverterParameter={x:Static appCoreModels:ItemPreviewMode.Text}, FallbackValue={x:Static appCoreModels:ItemPreviewMode.Unknown}}" RowDefinitions="*, Auto">
<ScrollViewer>
<TextBox
IsReadOnly="True"
@@ -607,7 +624,7 @@
</Grid>
<Grid Grid.Row="3">
<Grid IsVisible="{Binding AppState.ViewMode^, Converter={StaticResource EqualityConverter}, ConverterParameter=RapidTravel}" RowDefinitions="1,Auto">
<Grid IsVisible="{Binding AppState.ViewMode^, Converter={StaticResource EqualsConverter}, ConverterParameter=RapidTravel}" RowDefinitions="1,Auto">
<Rectangle
Fill="{DynamicResource ContentSeparatorBrush}"
@@ -692,13 +709,13 @@
VerticalAlignment="Top" />
<Grid Grid.Column="1">
<TextBox
IsVisible="{Binding Type, Converter={StaticResource EqualityConverter}, ConverterParameter={x:Static interactions:InputType.Text}}"
IsVisible="{Binding Type, Converter={StaticResource EqualsConverter}, ConverterParameter={x:Static interactions:InputType.Text}}"
Tag="InputItem"
Text="{Binding Value, Mode=TwoWay}"
VerticalAlignment="Top"
x:DataType="interactions:TextInputElement" />
<TextBox
IsVisible="{Binding Type, Converter={StaticResource EqualityConverter}, ConverterParameter={x:Static interactions:InputType.Password}}"
IsVisible="{Binding Type, Converter={StaticResource EqualsConverter}, ConverterParameter={x:Static interactions:InputType.Password}}"
PasswordChar="{Binding PasswordChar}"
Tag="InputItem"
Text="{Binding Value, Mode=TwoWay}"
@@ -706,7 +723,7 @@
x:DataType="interactions:PasswordInputElement" />
<ListBox
Classes="RadioButtonListBox"
IsVisible="{Binding Type, Converter={StaticResource EqualityConverter}, ConverterParameter={x:Static interactions:InputType.Options}}"
IsVisible="{Binding Type, Converter={StaticResource EqualsConverter}, ConverterParameter={x:Static interactions:InputType.Options}}"
ItemsSource="{Binding Options}"
SelectedItem="{Binding Value}"
Tag="InputItem"
@@ -721,7 +738,7 @@
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid IsVisible="{Binding PreviewType, Converter={StaticResource EqualityConverter}, ConverterParameter={x:Static appInteractions:PreviewType.DoubleTextList}}">
<Grid IsVisible="{Binding PreviewType, Converter={StaticResource EqualsConverter}, ConverterParameter={x:Static appInteractions:PreviewType.DoubleTextList}}">
<ItemsControl ItemsSource="{Binding Items}" x:DataType="appInteractions:DoubleTextListPreview">
<ItemsControl.ItemTemplate>
<DataTemplate>