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.Command;
|
||||||
using FileTime.Core.Models;
|
using FileTime.Core.Models;
|
||||||
|
|
||||||
@@ -6,7 +7,7 @@ namespace FileTime.App.Core.Services;
|
|||||||
public interface IClipboardService
|
public interface IClipboardService
|
||||||
{
|
{
|
||||||
Type? CommandFactoryType { get; }
|
Type? CommandFactoryType { get; }
|
||||||
IReadOnlyList<FullName> Content { get; }
|
ReadOnlyObservableCollection<FullName> Content { get; }
|
||||||
|
|
||||||
void AddContent(FullName absolutePath);
|
void AddContent(FullName absolutePath);
|
||||||
void RemoveContent(FullName absolutePath);
|
void RemoveContent(FullName absolutePath);
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
using System.Collections.ObjectModel;
|
||||||
using FileTime.Core.Command;
|
using FileTime.Core.Command;
|
||||||
using FileTime.Core.Models;
|
using FileTime.Core.Models;
|
||||||
|
|
||||||
@@ -5,14 +6,14 @@ namespace FileTime.App.Core.Services;
|
|||||||
|
|
||||||
public class ClipboardService : IClipboardService
|
public class ClipboardService : IClipboardService
|
||||||
{
|
{
|
||||||
private List<FullName> _content;
|
private readonly ObservableCollection<FullName> _content;
|
||||||
public IReadOnlyList<FullName> Content { get; private set; }
|
public ReadOnlyObservableCollection<FullName> Content { get; }
|
||||||
public Type? CommandFactoryType { get; private set; }
|
public Type? CommandFactoryType { get; private set; }
|
||||||
|
|
||||||
public ClipboardService()
|
public ClipboardService()
|
||||||
{
|
{
|
||||||
_content = new List<FullName>();
|
_content = new ObservableCollection<FullName>();
|
||||||
Content = _content.AsReadOnly();
|
Content = new(_content);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddContent(FullName absolutePath)
|
public void AddContent(FullName absolutePath)
|
||||||
@@ -38,13 +39,10 @@ public class ClipboardService : IClipboardService
|
|||||||
|
|
||||||
public void Clear()
|
public void Clear()
|
||||||
{
|
{
|
||||||
_content = new List<FullName>();
|
_content.Clear();
|
||||||
Content = _content.AsReadOnly();
|
|
||||||
CommandFactoryType = null;
|
CommandFactoryType = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetCommand<T>() where T : ITransportationCommandFactory
|
public void SetCommand<T>() where T : ITransportationCommandFactory
|
||||||
{
|
=> CommandFactoryType = typeof(T);
|
||||||
CommandFactoryType = typeof(T);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -32,8 +32,9 @@
|
|||||||
<converters:FormatSizeConverter x:Key="FormatSizeConverter" />
|
<converters:FormatSizeConverter x:Key="FormatSizeConverter" />
|
||||||
<converters:DateTimeConverter x:Key="DateTimeConverter" />
|
<converters:DateTimeConverter x:Key="DateTimeConverter" />
|
||||||
<converters:SplitStringConverter x:Key="SplitStringConverter" />
|
<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.NotEqual}" x:Key="NotEqualsConverter" />
|
||||||
|
<converters:CompareConverter ComparisonCondition="{x:Static converters:ComparisonCondition.GreaterThan}" x:Key="GreaterThanConverter" />
|
||||||
<converters:ExceptionToStringConverter x:Key="ExceptionToStringConverter" />
|
<converters:ExceptionToStringConverter x:Key="ExceptionToStringConverter" />
|
||||||
<converters:CommandToCommandNameConverter x:Key="CommandToCommandNameConverter" />
|
<converters:CommandToCommandNameConverter x:Key="CommandToCommandNameConverter" />
|
||||||
<converters:ItemToImageConverter x:Key="ItemToImageConverter" />
|
<converters:ItemToImageConverter x:Key="ItemToImageConverter" />
|
||||||
|
|||||||
@@ -16,4 +16,5 @@ public interface IMainWindowViewModel : IMainWindowViewModelBase
|
|||||||
ICommandPaletteService CommandPaletteService { get; }
|
ICommandPaletteService CommandPaletteService { get; }
|
||||||
IRefreshSmoothnessCalculator RefreshSmoothnessCalculator { get; }
|
IRefreshSmoothnessCalculator RefreshSmoothnessCalculator { get; }
|
||||||
IAdminElevationManager AdminElevationManager { get; }
|
IAdminElevationManager AdminElevationManager { get; }
|
||||||
|
IClipboardService ClipboardService { get; }
|
||||||
}
|
}
|
||||||
@@ -31,6 +31,7 @@ namespace FileTime.GuiApp.ViewModels;
|
|||||||
[Inject(typeof(ICommandPaletteService), PropertyAccessModifier = AccessModifier.Public)]
|
[Inject(typeof(ICommandPaletteService), PropertyAccessModifier = AccessModifier.Public)]
|
||||||
[Inject(typeof(IRefreshSmoothnessCalculator), PropertyAccessModifier = AccessModifier.Public)]
|
[Inject(typeof(IRefreshSmoothnessCalculator), PropertyAccessModifier = AccessModifier.Public)]
|
||||||
[Inject(typeof(IAdminElevationManager), PropertyAccessModifier = AccessModifier.Public)]
|
[Inject(typeof(IAdminElevationManager), PropertyAccessModifier = AccessModifier.Public)]
|
||||||
|
[Inject(typeof(IClipboardService), PropertyAccessModifier = AccessModifier.Public)]
|
||||||
public partial class MainWindowViewModel : IMainWindowViewModel
|
public partial class MainWindowViewModel : IMainWindowViewModel
|
||||||
{
|
{
|
||||||
public bool Loading => false;
|
public bool Loading => false;
|
||||||
|
|||||||
@@ -70,9 +70,26 @@
|
|||||||
Height="20"
|
Height="20"
|
||||||
HorizontalAlignment="Left"
|
HorizontalAlignment="Left"
|
||||||
IsVisible="{Binding AdminElevationManager.IsAdminInstanceRunning}"
|
IsVisible="{Binding AdminElevationManager.IsAdminInstanceRunning}"
|
||||||
|
Margin="10,0,0,0"
|
||||||
Source="{SvgImage /Assets/material/security.svg}"
|
Source="{SvgImage /Assets/material/security.svg}"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
Width="20" />
|
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>
|
</StackPanel>
|
||||||
</Grid>
|
</Grid>
|
||||||
</Grid>
|
</Grid>
|
||||||
@@ -458,7 +475,7 @@
|
|||||||
Foreground="{DynamicResource ErrorBrush}"
|
Foreground="{DynamicResource ErrorBrush}"
|
||||||
Grid.Row="1"
|
Grid.Row="1"
|
||||||
HorizontalAlignment="Center"
|
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"
|
Margin="10"
|
||||||
x:Name="CurrentEmpty">
|
x:Name="CurrentEmpty">
|
||||||
Empty
|
Empty
|
||||||
@@ -517,7 +534,7 @@
|
|||||||
FontWeight="Bold"
|
FontWeight="Bold"
|
||||||
Foreground="{DynamicResource ErrorBrush}"
|
Foreground="{DynamicResource ErrorBrush}"
|
||||||
HorizontalAlignment="Center"
|
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"
|
Margin="10"
|
||||||
x:Name="ChildEmpty">
|
x:Name="ChildEmpty">
|
||||||
Empty
|
Empty
|
||||||
@@ -547,13 +564,13 @@
|
|||||||
<Grid IsVisible="{Binding ItemPreviewService.ItemPreview^, Converter={x:Static ObjectConverters.IsNotNull}}">
|
<Grid IsVisible="{Binding ItemPreviewService.ItemPreview^, Converter={x:Static ObjectConverters.IsNotNull}}">
|
||||||
<TextBlock
|
<TextBlock
|
||||||
HorizontalAlignment="Center"
|
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." />
|
Text="Don't know how to preview this item." />
|
||||||
<TextBlock
|
<TextBlock
|
||||||
HorizontalAlignment="Center"
|
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" />
|
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>
|
<ScrollViewer>
|
||||||
<TextBox
|
<TextBox
|
||||||
IsReadOnly="True"
|
IsReadOnly="True"
|
||||||
@@ -607,7 +624,7 @@
|
|||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
<Grid Grid.Row="3">
|
<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
|
<Rectangle
|
||||||
Fill="{DynamicResource ContentSeparatorBrush}"
|
Fill="{DynamicResource ContentSeparatorBrush}"
|
||||||
@@ -692,13 +709,13 @@
|
|||||||
VerticalAlignment="Top" />
|
VerticalAlignment="Top" />
|
||||||
<Grid Grid.Column="1">
|
<Grid Grid.Column="1">
|
||||||
<TextBox
|
<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"
|
Tag="InputItem"
|
||||||
Text="{Binding Value, Mode=TwoWay}"
|
Text="{Binding Value, Mode=TwoWay}"
|
||||||
VerticalAlignment="Top"
|
VerticalAlignment="Top"
|
||||||
x:DataType="interactions:TextInputElement" />
|
x:DataType="interactions:TextInputElement" />
|
||||||
<TextBox
|
<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}"
|
PasswordChar="{Binding PasswordChar}"
|
||||||
Tag="InputItem"
|
Tag="InputItem"
|
||||||
Text="{Binding Value, Mode=TwoWay}"
|
Text="{Binding Value, Mode=TwoWay}"
|
||||||
@@ -706,7 +723,7 @@
|
|||||||
x:DataType="interactions:PasswordInputElement" />
|
x:DataType="interactions:PasswordInputElement" />
|
||||||
<ListBox
|
<ListBox
|
||||||
Classes="RadioButtonListBox"
|
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}"
|
ItemsSource="{Binding Options}"
|
||||||
SelectedItem="{Binding Value}"
|
SelectedItem="{Binding Value}"
|
||||||
Tag="InputItem"
|
Tag="InputItem"
|
||||||
@@ -721,7 +738,7 @@
|
|||||||
<ItemsControl.ItemTemplate>
|
<ItemsControl.ItemTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate>
|
||||||
<Grid>
|
<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 ItemsSource="{Binding Items}" x:DataType="appInteractions:DoubleTextListPreview">
|
||||||
<ItemsControl.ItemTemplate>
|
<ItemsControl.ItemTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate>
|
||||||
|
|||||||
Reference in New Issue
Block a user