Show icons when items are on clipbaord
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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" />
|
||||
|
||||
@@ -16,4 +16,5 @@ public interface IMainWindowViewModel : IMainWindowViewModelBase
|
||||
ICommandPaletteService CommandPaletteService { get; }
|
||||
IRefreshSmoothnessCalculator RefreshSmoothnessCalculator { get; }
|
||||
IAdminElevationManager AdminElevationManager { get; }
|
||||
IClipboardService ClipboardService { get; }
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user