Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -360,4 +360,4 @@ MigrationBackup/
.ionide/

# Fody - auto-generated XML schema
FodyWeavers.xsd
FodyWeavers.xsd
140 changes: 71 additions & 69 deletions DeskFrame/DeskFrameWindow.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -66,9 +66,9 @@
<!-- DataTemplate to display each file item -->
<DataTemplate x:Key="FileItemTemplate">
<Border Background="{Binding Background}" Margin="4,0,0,5" CornerRadius="5"
MouseLeftButtonDown="FileItem_LeftMouseButtonDown"
MouseEnter="FileItem_MouseEnter" MouseLeave="FileItem_MouseLeave"
BorderThickness="1" MouseRightButtonDown="FileItem_RightClick">
MouseLeftButtonDown="FileItem_LeftMouseButtonDown"
MouseEnter="FileItem_MouseEnter" MouseLeave="FileItem_MouseLeave"
BorderThickness="1" MouseRightButtonDown="FileItem_RightClick">
<Grid>
<Rectangle x:Name="MoveBar"
Visibility="{Binding IsMoveBarVisible, Converter={StaticResource BooleanToVisibilityConverter}}"
Expand All @@ -77,88 +77,90 @@
HorizontalAlignment="Left" RadiusX="3" RadiusY="3"/>
<StackPanel Orientation="Vertical" HorizontalAlignment="Center">
<Image Margin="5" Source="{Binding Thumbnail}"
SnapsToDevicePixels="True"
RenderOptions.BitmapScalingMode="NearestNeighbor"
UseLayoutRounding="True"
Width="{Binding DataContext.Instance.IconSize, RelativeSource={RelativeSource AncestorType=Window}, Converter={StaticResource IconSizeToHeightWidthConverter}}"
Height="{Binding DataContext.Instance.IconSize, RelativeSource={RelativeSource AncestorType=Window}, Converter={StaticResource IconSizeToHeightWidthConverter}}"
VerticalAlignment="Center" HorizontalAlignment="Center"
/>
SnapsToDevicePixels="True"
RenderOptions.BitmapScalingMode="NearestNeighbor"
UseLayoutRounding="True"
Width="{Binding DataContext.Instance.IconSize, RelativeSource={RelativeSource AncestorType=Window}, Converter={StaticResource IconSizeToHeightWidthConverter}}"
Height="{Binding DataContext.Instance.IconSize, RelativeSource={RelativeSource AncestorType=Window}, Converter={StaticResource IconSizeToHeightWidthConverter}}"
VerticalAlignment="Center" HorizontalAlignment="Center"/>

<Grid Margin="0,0,0,2" Visibility="{Binding DataContext.Instance.ShowDisplayName, RelativeSource={RelativeSource AncestorType=Window}, Converter={StaticResource BooleanToVisibilityConverter}}">

<Grid Visibility="{Binding IsNotRenaming, Converter={StaticResource BooleanToVisibilityConverter}}">
<TextBlock FontSize="12" Text="{Binding DisplayName}" Padding="1.8,0,1.8,0" Margin="0,-2.5,0,0"
TextWrapping="Wrap" TextAlignment="Center"
FontFamily="{DynamicResource ItemFont}"
TextTrimming="{Binding TextTrimming}"
HorizontalAlignment="Center" MaxHeight="{Binding MaxHeight}"
Foreground="{Binding DataContext.Instance.ListViewFontShadowColor, RelativeSource={RelativeSource AncestorType=Window}}">
<TextBlock.Effect>
<BlurEffect Radius="2" KernelType="Box"/>
</TextBlock.Effect>
</TextBlock>
<TextBlock FontSize="12" Text="{Binding DisplayName}" Padding="1.8,0,1.8,0" Margin="0,-2.5,0,0"
FontFamily="{DynamicResource ItemFont}"
TextWrapping="Wrap" TextAlignment="Center"
TextTrimming="{Binding TextTrimming}"
HorizontalAlignment="Center" MaxHeight="{Binding MaxHeight}"
Foreground="{Binding DataContext.Instance.ListViewFontShadowColor, RelativeSource={RelativeSource AncestorType=Window}}">
<TextBlock.Effect>
<BlurEffect Radius="2" KernelType="Box"/>
</TextBlock.Effect>
</TextBlock>

<Grid>
<Grid.CacheMode>
<BitmapCache RenderAtScale="1" />
</Grid.CacheMode>

<TextBlock FontSize="12" Text="{Binding DisplayName}" Padding="1.8,0,1.8,0" Margin="0,-2.5,0,0"
TextWrapping="Wrap" TextAlignment="Center"
FontFamily="{DynamicResource ItemFont}"
TextTrimming="{Binding TextTrimming}"
HorizontalAlignment="Center" MaxHeight="{Binding MaxHeight}"
Foreground="{Binding DataContext.Instance.ListViewFontShadowColor, RelativeSource={RelativeSource AncestorType=Window}}">
<TextBlock.Effect>
<BlurEffect Radius="2" KernelType="Box"/>
</TextBlock.Effect>
</TextBlock>
<TextBlock FontSize="12" Text="{Binding DisplayName}" Padding="1.8,0,1.8,0" Margin="0,-2.5,0,0"
FontFamily="{DynamicResource ItemFont}"
TextWrapping="Wrap" TextAlignment="Center"
TextTrimming="{Binding TextTrimming}"
HorizontalAlignment="Center" MaxHeight="{Binding MaxHeight}"
Foreground="{Binding DataContext.Instance.ListViewFontShadowColor, RelativeSource={RelativeSource AncestorType=Window}}">
<TextBlock.Effect>
<BlurEffect Radius="2" KernelType="Box"/>
</TextBlock.Effect>
</TextBlock>
</Grid>

<TextBlock FontSize="12" Text="{Binding DisplayName}" Padding="1.8,0,1.8,0" Margin="0,-3,0,0"
TextWrapping="Wrap" TextAlignment="Center"
FontFamily="{DynamicResource ItemFont}"
TextTrimming="{Binding TextTrimming}"
HorizontalAlignment="Center" MaxHeight="{Binding MaxHeight}"
Foreground="{Binding DataContext.Instance.ListViewFontColor, RelativeSource={RelativeSource AncestorType=Window}}"
/>
TextWrapping="Wrap" TextAlignment="Center"
FontFamily="{DynamicResource ItemFont}"
TextTrimming="{Binding TextTrimming}"
HorizontalAlignment="Center" MaxHeight="{Binding MaxHeight}"
Foreground="{Binding DataContext.Instance.ListViewFontColor, RelativeSource={RelativeSource AncestorType=Window}}"
/>
</Grid>

<Border x:Name="RenameBorder"
Visibility="{Binding IsRenaming, Converter={StaticResource BooleanToVisibilityConverter}}"
BorderThickness="0"
CornerRadius="4"
Background="#32FFFFFF"
Padding="3,5,3,3" Margin="3,-5,3,3">
<Grid>

<TextBox FontSize="12"
Padding="1.8,0,1.8,0"
Margin="0,-3,0,0"
TextWrapping="Wrap"
TextAlignment="Center"
FontFamily="{DynamicResource ItemFont}"
x:Name="RenameTextBox"
KeyDown="RenameTextBox_KeyDown"
HorizontalAlignment="Center"
MaxHeight="{Binding MaxHeight}">
<TextBox.Style>
<Style TargetType="TextBox">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Foreground" Value="{Binding DataContext.Instance.ListViewFontColor, RelativeSource={RelativeSource AncestorType=Window}}"/>
<Setter Property="BorderBrush" Value="Black"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="FontSize" Value="10"/>
<Setter Property="Padding" Value="2"/>
<Setter Property="Margin" Value="0,-2.5,0,0"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
</Style>
</TextBox.Style>
</TextBox>

</Grid>

<TextBox FontSize="12"
Padding="1.8,0,1.8,0"
Margin="0,-3,0,0"
TextWrapping="Wrap"
TextAlignment="Center"
FontFamily="{DynamicResource ItemFont}"
x:Name="RenameTextBox"
KeyDown="RenameTextBox_KeyDown"
HorizontalAlignment="Center"
MaxHeight="{Binding MaxHeight}">
<TextBox.Style>
<Style TargetType="TextBox">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Foreground" Value="{Binding DataContext.Instance.ListViewFontColor, RelativeSource={RelativeSource AncestorType=Window}}"/>
<Setter Property="BorderBrush" Value="Black"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="FontSize" Value="10"/>
<Setter Property="Padding" Value="2"/>
<Setter Property="Margin" Value="0,-2.5,0,0"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
</Style>
</TextBox.Style>
</TextBox>
</Border>
</Grid>
</StackPanel>
</Grid>
</Border>
</DataTemplate>





</Window.Resources>
<WindowChrome.WindowChrome>
<WindowChrome GlassFrameThickness="0,5,0,5" CaptionHeight="0" ResizeBorderThickness="5" CornerRadius="0" />
Expand Down
85 changes: 55 additions & 30 deletions DeskFrame/DeskFrameWindow.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,7 @@ public int ItemPerRow
private bool _fixIsOnBottomInit = true;
private bool _didFixIsOnBottom = false;
private bool _isMinimized = false;
private bool _animLock = false;
private bool _isIngrid = true;
private bool _grabbedOnLeft;
private int _snapDistance = 8;
Expand Down Expand Up @@ -1757,37 +1758,60 @@ private void AnimateChevron(bool flip, bool onLoad, double animationSpeed)
rotateTransform.BeginAnimation(RotateTransform.AngleProperty, rotateAnimation);
}

private void Minimize_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
private async void Minimize_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{

AnimateChevron(_isMinimized, false, Instance.AnimationSpeed);
if (_animLock) return;

// Check if we even can minimize before locking
if (showFolder.Visibility == Visibility.Hidden && showFolderInGrid.Visibility == Visibility.Hidden)
{
return;
}
if (!_isMinimized)

_animLock = true;

try
{
_originalHeight = this.ActualHeight;
_isMinimized = true;
Instance.Minimized = true;
// Debug.WriteLine("minimize: " + Instance.Height);
AnimateWindowHeight(titleBar.Height, Instance.AnimationSpeed);
_isMinimized = !_isMinimized;
Instance.Minimized = _isMinimized;

AnimateChevron(_isMinimized, false, Instance.AnimationSpeed);

if (_isMinimized)
{
_originalHeight = this.ActualHeight;
AnimateWindowHeight(titleBar.Height, Instance.AnimationSpeed);
}
else
{
WindowBackground.CornerRadius = new CornerRadius(
topLeft: WindowBackground.CornerRadius.TopLeft,
topRight: WindowBackground.CornerRadius.TopRight,
bottomRight: 5.0,
bottomLeft: 5.0
);
AnimateWindowHeight(Instance.Height, Instance.AnimationSpeed);
}

HandleWindowMove(false);



var waitTime = 50;

if (Instance.AnimationSpeed > 0)
{
waitTime += (int)((0.2 / Instance.AnimationSpeed) * 1000);
}

await Task.Delay(waitTime);

}
else
finally
{
WindowBackground.CornerRadius = new CornerRadius(
topLeft: WindowBackground.CornerRadius.TopLeft,
topRight: WindowBackground.CornerRadius.TopRight,
bottomRight: 5.0,
bottomLeft: 5.0
);
_isMinimized = false;
Instance.Minimized = false;

// Debug.WriteLine("unminimize: " + Instance.Height);
AnimateWindowHeight(Instance.Height, Instance.AnimationSpeed);
// Always unlock, even if an error occurred
_animLock = false;
}
HandleWindowMove(false);
}

private void ToggleFileExtension_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
Expand Down Expand Up @@ -2233,6 +2257,9 @@ public async void LoadFiles(string path)
loadFilesCancellationToken.Dispose();
loadFilesCancellationToken = new CancellationTokenSource();
CancellationToken loadFiles_cts = loadFilesCancellationToken.Token;
var fileFilterHideRegex = string.IsNullOrEmpty(Instance.FileFilterHideRegex)
? null
: new Regex(Instance.FileFilterHideRegex);
try
{
if (!Directory.Exists(path))
Expand All @@ -2252,7 +2279,7 @@ public async void LoadFiles(string path)
var files = dirInfo.GetFiles();
var directories = dirInfo.GetDirectories();
_folderCount = directories.Count();
_fileCount = dirInfo.GetFiles().Count().ToString();
_fileCount = files.Count().ToString();
_folderSize = !Instance.CheckFolderSize ? "" : Task.Run(() => BytesToStringAsync(dirInfo.EnumerateFiles("*", SearchOption.AllDirectories).Sum(file => file.Length))).Result; var filteredFiles = files.Cast<FileSystemInfo>()
.Concat(directories)
.OrderBy(entry => entry.Name, StringComparer.OrdinalIgnoreCase)
Expand Down Expand Up @@ -2314,7 +2341,7 @@ await Dispatcher.InvokeAsync(async () =>
FileItems.RemoveAt(i);
}
}

var existingLookup = FileItems.ToDictionary(f => f.FullPath, f => f);
foreach (var entry in fileEntries)
{
if (loadFiles_cts.IsCancellationRequested)
Expand All @@ -2323,7 +2350,6 @@ await Dispatcher.InvokeAsync(async () =>
return;
}

var existingItem = FileItems.FirstOrDefault(item => item.FullPath == entry.FullName);

long size = 0;
if (entry is FileInfo fileInfo)
Expand All @@ -2338,10 +2364,10 @@ await Dispatcher.InvokeAsync(async () =>
var thumbnail = await GetThumbnailAsync(entry.FullName);
bool isFile = entry is FileInfo;
string actualExt = isFile ? Path.GetExtension(entry.Name) : string.Empty;
if (existingItem == null)

if (!existingLookup.TryGetValue(entry.FullName, out var existingItem))
{
if (!string.IsNullOrEmpty(Instance.FileFilterHideRegex) &&
new Regex(Instance.FileFilterHideRegex).IsMatch(entry.Name))
if (fileFilterHideRegex?.IsMatch(entry.Name) == true)
{
continue;
}
Expand Down Expand Up @@ -2381,8 +2407,7 @@ await Dispatcher.InvokeAsync(async () =>
FileItems.Clear();
foreach (var fileItem in sortedList)
{
if (Instance.FileFilterHideRegex != null && Instance.FileFilterHideRegex != ""
&& new Regex(Instance.FileFilterHideRegex).IsMatch(fileItem.Name))
if (fileFilterHideRegex?.IsMatch(fileItem.Name) == true)
{
continue;
}
Expand Down