Skip to content

Commit 4d3962f

Browse files
author
David Khristepher Santos
committed
Add Image Type for Video distinction
Try to fix KeyDown events not firing on Grid
1 parent 47b359d commit 4d3962f

13 files changed

Lines changed: 389 additions & 257 deletions

File tree

Diffusion.Common/Model.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,10 @@ public class Model
77
public string Hash { get; set; }
88
public string? SHA256 { get; set; }
99
public bool IsLocal { get; set; }
10+
}
11+
12+
public enum ImageType
13+
{
14+
Image = 0,
15+
Video = 1
1016
}

Diffusion.Database/DataStore.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,8 @@ void SchemaUpdated(object? sender, EventArgs args)
136136
db.CreateIndex<Image>(image => new { image.ForDeletion, image.Unavailable, image.CreatedDate });
137137
db.CreateIndex<Image>(image => new { image.NSFW, image.ForDeletion, image.Unavailable, image.CreatedDate });
138138

139+
db.CreateIndex<Image>(image => image.Type);
140+
139141

140142
db.CreateTable<Album>();
141143
db.CreateIndex<Album>(album => album.Name, true);

Diffusion.Database/Models/Image.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using SQLite;
1+
using Diffusion.Common;
2+
using SQLite;
23

34
namespace Diffusion.Database.Models;
45

@@ -63,6 +64,7 @@ public class Image
6364
public DateTime? ViewedDate { get; set; }
6465
[UserDefined]
6566
public DateTime? TouchedDate { get; set; }
67+
public ImageType Type { get; set; }
6668
}
6769

6870

Diffusion.Scanner/FileParameters.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
namespace Diffusion.IO;
1+
using Diffusion.Common;
2+
3+
namespace Diffusion.IO;
24

35
public class FileParameters
46
{
@@ -34,4 +36,5 @@ public class FileParameters
3436

3537
public IReadOnlyCollection<Node>? Nodes { get; set; }
3638
public string? Hash { get; set; }
39+
public ImageType Type { get; set; }
3740
}

Diffusion.Scanner/Metadata.cs

Lines changed: 134 additions & 124 deletions
Large diffs are not rendered by default.

Diffusion.Toolkit/Controls/PreviewPane.xaml

Lines changed: 100 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
xmlns:behaviors="clr-namespace:Diffusion.Toolkit.Behaviors"
1010
xmlns:converters="clr-namespace:Diffusion.Toolkit.Converters"
1111
xmlns:lex="http://wpflocalizeextension.codeplex.com"
12+
xmlns:models="clr-namespace:Diffusion.Toolkit.Models"
13+
xmlns:common="clr-namespace:Diffusion.Common;assembly=Diffusion.Common"
1214
mc:Ignorable="d"
1315
d:DesignHeight="600" d:DesignWidth="800">
1416
<UserControl.Resources>
@@ -23,6 +25,50 @@
2325
<converters:IntToVisibilityConverter x:Key="intToVis"></converters:IntToVisibilityConverter>
2426
<converters:IfLessThanConverter x:Key="iflessThan"></converters:IfLessThanConverter>
2527
<converters:IfGreaterThanConverter x:Key="ifGreaterThan"></converters:IfGreaterThanConverter>
28+
29+
<DataTemplate x:Key="ImageDataTemplate">
30+
<ScrollViewer Grid.Row="0" Grid.RowSpan="3"
31+
Loaded="ScrollViewer_OnLoaded"
32+
HorizontalScrollBarVisibility="{Binding MainModel.FitToPreview, Converter={StaticResource scrollBarVisibility}, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"
33+
VerticalScrollBarVisibility="{Binding MainModel.FitToPreview, Converter={StaticResource scrollBarVisibility}, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"
34+
>
35+
36+
<Image
37+
DataContext="{Binding Image, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"
38+
Stretch="None"
39+
Opacity="{Binding ForDeletion, Converter={StaticResource BoolToOpacity}}"
40+
RenderOptions.BitmapScalingMode="Fant"
41+
Source="{Binding Image}" >
42+
<Image.Visibility>
43+
<MultiBinding Converter="{StaticResource invBoolToVisMulti}" ConverterParameter="20">
44+
<Binding Path="NSFW"></Binding>
45+
<Binding Path="MainModel.NSFWBlur" RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type UserControl}}" ></Binding>
46+
</MultiBinding>
47+
</Image.Visibility>
48+
<Image.Effect>
49+
<BlurEffect KernelType="Gaussian">
50+
<BlurEffect.Radius>
51+
<MultiBinding Converter="{StaticResource boolToBlurMulti}" ConverterParameter="20">
52+
<Binding Path="NSFW"></Binding>
53+
<Binding Path="MainModel.NSFWBlur" RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type UserControl}}"></Binding>
54+
</MultiBinding>
55+
</BlurEffect.Radius>
56+
</BlurEffect>
57+
</Image.Effect>
58+
</Image>
59+
60+
</ScrollViewer>
61+
</DataTemplate>
62+
<DataTemplate x:Key="VideoDataTemplate" DataType="{x:Type models:ImageViewModel}">
63+
<MediaElement
64+
DataContext="{Binding Image, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"
65+
Source="{Binding Path}"
66+
LoadedBehavior="Play"
67+
Loaded="Player_OnLoaded"
68+
MediaEnded="Player_OnMediaEnded"
69+
SpeedRatio="1"
70+
></MediaElement>
71+
</DataTemplate>
2672
</ResourceDictionary>
2773
</UserControl.Resources>
2874
<Grid x:Name="PreviewGrid" DataContext="{Binding ., RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" Background="Transparent">
@@ -44,7 +90,41 @@
4490
<RowDefinition Height="Auto" />
4591
<RowDefinition/>
4692
</Grid.RowDefinitions>-->
47-
<Grid Style="{StaticResource Preview}" Background="{x:Null}">
93+
<!--<Grid Style="{StaticResource Preview}" Background="{x:Null}"
94+
x:Name="Grid"
95+
MouseMove="Grid_OnMouseMove"
96+
PreviewMouseWheel="UIElement_OnMouseWheel"
97+
PreviewKeyDown="Grid_OnPreviewKeyDown"
98+
PreviewKeyUp="Grid_OnPreviewKeyUp"
99+
KeyDown="Grid_OnKeyDown"
100+
>-->
101+
102+
<Grid Style="{StaticResource Preview}" Background="{x:Null}"
103+
x:Name="Grid"
104+
MouseMove="Grid_OnMouseMove"
105+
PreviewMouseWheel="UIElement_OnMouseWheel"
106+
PreviewKeyDown="Grid_OnPreviewKeyDown"
107+
PreviewKeyUp="Grid_OnPreviewKeyUp"
108+
KeyDown="Grid_OnKeyDown"
109+
Focusable="True"
110+
>
111+
<Grid.ContextMenu>
112+
<ContextMenu>
113+
<MenuItem x:Name="AlbumMenu" ItemsSource="{Binding MainModel.AlbumMenuItems}" Header="{lex:Loc Thumbnail.ContextMenu.AddToAlbum}" >
114+
</MenuItem>
115+
<MenuItem x:Name="SelectionAlbumMenu" ItemsSource="{Binding MainModel.SelectionAlbumMenuItems}" Header="{lex:Loc Thumbnail.ContextMenu.RemoveFromAlbum}"></MenuItem>
116+
<Separator />
117+
<MenuItem ItemsSource="{Binding MainModel.OpenWithMenuItems}" Header="{lex:Loc Thumbnail.ContextMenu.OpenWith}"></MenuItem>
118+
<Separator></Separator>
119+
<MenuItem Header="Fit to Preview" InputGestureText="CTRL+Shift+F" Command="{Binding MainModel.ToggleFitToPreview}" IsChecked="{Binding MainModel.FitToPreview}"></MenuItem>
120+
<MenuItem Header="Actual Size" InputGestureText="CTRL+Shift+A" Command="{Binding MainModel.ToggleActualSize}" IsChecked="{Binding MainModel.ActualSize}"></MenuItem>
121+
<Separator></Separator>
122+
<MenuItem Header="Copy Path" Command="{Binding CopyPathCommand}"></MenuItem>
123+
</ContextMenu>
124+
125+
<!--Stretch="{Binding MainModel.FitToPreview, Converter={StaticResource stretch}, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"-->
126+
127+
</Grid.ContextMenu>
48128
<Grid.RowDefinitions>
49129
<RowDefinition Height="42"/>
50130
<RowDefinition Height="*" />
@@ -57,69 +137,26 @@
57137
<!--HorizontalScrollBarVisibility="Hidden"
58138
VerticalScrollBarVisibility="Hidden"-->
59139

140+
<Grid Background="Transparent" Grid.Row="0" Grid.RowSpan="3">
141+
<ContentControl x:Name="Content" DataContext="{Binding Path=Image}">
142+
<ContentControl.Style>
143+
<Style TargetType="ContentControl">
144+
<Setter Property="ContentTemplate" Value="{StaticResource ImageDataTemplate}" />
145+
<Style.Triggers>
146+
<DataTrigger Binding="{Binding Type}" Value="{x:Static common:ImageType.Image}">
147+
<Setter Property="ContentTemplate" Value="{StaticResource ImageDataTemplate}" />
148+
</DataTrigger>
149+
<DataTrigger Binding="{Binding Type}" Value="{x:Static common:ImageType.Video}">
150+
<Setter Property="ContentTemplate" Value="{StaticResource VideoDataTemplate}" />
151+
</DataTrigger>
152+
</Style.Triggers>
153+
</Style>
154+
</ContentControl.Style>
155+
</ContentControl>
156+
</Grid>
157+
158+
60159

61-
<ScrollViewer x:Name="ScrollViewer" Grid.Row="0" Grid.RowSpan="3"
62-
HorizontalScrollBarVisibility="{Binding MainModel.FitToPreview, Converter={StaticResource scrollBarVisibility}, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"
63-
VerticalScrollBarVisibility="{Binding MainModel.FitToPreview, Converter={StaticResource scrollBarVisibility}, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"
64-
MouseMove="ScrollViewer_OnMouseMove"
65-
PreviewKeyDown="ScrollViewer_OnPreviewKeyDown"
66-
PreviewMouseWheel="UIElement_OnMouseWheel"
67-
PreviewKeyUp="ScrollViewer_OnPreviewKeyUp"
68-
KeyDown="ScrollViewer_OnKeyDown"
69-
>
70-
<ScrollViewer.ContextMenu>
71-
<ContextMenu>
72-
<MenuItem x:Name="AlbumMenu" ItemsSource="{Binding MainModel.AlbumMenuItems}" Header="{lex:Loc Thumbnail.ContextMenu.AddToAlbum}" >
73-
</MenuItem>
74-
<MenuItem x:Name="SelectionAlbumMenu" ItemsSource="{Binding MainModel.SelectionAlbumMenuItems}" Header="{lex:Loc Thumbnail.ContextMenu.RemoveFromAlbum}"></MenuItem>
75-
<Separator />
76-
<MenuItem ItemsSource="{Binding MainModel.OpenWithMenuItems}" Header="{lex:Loc Thumbnail.ContextMenu.OpenWith}"></MenuItem>
77-
<Separator></Separator>
78-
<MenuItem Header="Fit to Preview" InputGestureText="CTRL+Shift+F" Command="{Binding MainModel.ToggleFitToPreview}" IsChecked="{Binding MainModel.FitToPreview}"></MenuItem>
79-
<MenuItem Header="Actual Size" InputGestureText="CTRL+Shift+A" Command="{Binding MainModel.ToggleActualSize}" IsChecked="{Binding MainModel.ActualSize}"></MenuItem>
80-
<Separator></Separator>
81-
<MenuItem Header="Copy Path" Command="{Binding CopyPathCommand}"></MenuItem>
82-
</ContextMenu>
83-
84-
<!--Stretch="{Binding MainModel.FitToPreview, Converter={StaticResource stretch}, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"-->
85-
86-
</ScrollViewer.ContextMenu>
87-
<Image x:Name="Preview"
88-
DataContext="{Binding Image, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"
89-
Stretch="None"
90-
Opacity="{Binding ForDeletion, Converter={StaticResource BoolToOpacity}}"
91-
RenderOptions.BitmapScalingMode="Fant"
92-
Source="{Binding Image}" >
93-
<Image.Visibility>
94-
<MultiBinding Converter="{StaticResource invBoolToVisMulti}" ConverterParameter="20">
95-
<Binding Path="NSFW"></Binding>
96-
<Binding Path="MainModel.NSFWBlur" RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type UserControl}}" ></Binding>
97-
</MultiBinding>
98-
</Image.Visibility>
99-
<Image.Effect>
100-
<BlurEffect KernelType="Gaussian">
101-
<BlurEffect.Radius>
102-
<MultiBinding Converter="{StaticResource boolToBlurMulti}" ConverterParameter="20">
103-
<Binding Path="NSFW"></Binding>
104-
<Binding Path="MainModel.NSFWBlur" RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type UserControl}}"></Binding>
105-
</MultiBinding>
106-
</BlurEffect.Radius>
107-
</BlurEffect>
108-
</Image.Effect>
109-
</Image>
110-
111-
</ScrollViewer>
112-
113-
<MediaElement x:Name="Player" Grid.Row="0" Grid.RowSpan="3"
114-
MouseMove="ScrollViewer_OnMouseMove"
115-
PreviewKeyDown="ScrollViewer_OnPreviewKeyDown"
116-
PreviewMouseWheel="UIElement_OnMouseWheel"
117-
PreviewKeyUp="ScrollViewer_OnPreviewKeyUp"
118-
KeyDown="ScrollViewer_OnKeyDown"
119-
LoadedBehavior="Manual"
120-
Loaded="Player_OnLoaded"
121-
MediaEnded="Player_OnMediaEnded"
122-
></MediaElement>
123160

124161
<Grid Grid.Row="0" RowSpan="3" Background="Transparent" IsHitTestVisible="False"
125162
DataContext="{Binding Image, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"

0 commit comments

Comments
 (0)