Compare commits

..

2 Commits

Author SHA1 Message Date
copilot-swe-agent[bot]
c97f924055 Add OFD file format support to OfficeViewer plugin
Co-authored-by: emako <24737061+emako@users.noreply.github.com>
2025-09-07 07:15:27 +00:00
copilot-swe-agent[bot]
67168e51aa Initial plan 2025-09-07 07:10:57 +00:00
35 changed files with 52 additions and 603 deletions

View File

@@ -72,7 +72,7 @@
<ItemGroup>
<Reference Include="Microsoft.CSharp" />
<PackageReference Include="WixToolset.Dtf.WindowsInstaller" Version="6.0.2" />
<PackageReference Include="WixToolset.Dtf.WindowsInstaller" Version="6.0.1" />
<PackageReference Include="SharpZipLib" Version="1.4.2" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="PureSharpCompress" Version="0.40.0" />

View File

@@ -232,37 +232,4 @@
<TERMINAL>Terminal</TERMINAL>
<VENDOR>Anbieter</VENDOR>
</de>
<sv>
<PRODUCT_VERSION>Produktversion</PRODUCT_VERSION>
<PRODUCT_NAME>Produktnamn</PRODUCT_NAME>
<MANUFACTURER>Tillverkare</MANUFACTURER>
<TOTAL_SIZE>Total storlek</TOTAL_SIZE>
<LAST_MODIFIED>Senast ändrad</LAST_MODIFIED>
<PUBLISHER>Utgivare</PUBLISHER>
<CAPABILITIES>Funktioner</CAPABILITIES>
<ABI>ABI</ABI>
<APP_NAME>Program</APP_NAME>
<APP_VERSION>Version</APP_VERSION>
<APP_VERSION_NAME>Versionsnamn</APP_VERSION_NAME>
<APP_VERSION_CODE>Versionskod</APP_VERSION_CODE>
<PERMISSIONS>Behörigheter</PERMISSIONS>
<PACKAGE_NAME>Paketnamn</PACKAGE_NAME>
<APP_MIN_SDK_VERSION>Minsta SDK-version</APP_MIN_SDK_VERSION>
<APP_TARGET_SDK_VERSION>Mål SDK-version</APP_TARGET_SDK_VERSION>
<APP_MIN_OS_VERSION>Minsta OS-version</APP_MIN_OS_VERSION>
<APP_TARGET_OS_VERSION>Mål OS-version</APP_TARGET_OS_VERSION>
<DEVICE_FAMILY>Enhetsfamilj</DEVICE_FAMILY>
<BUNDLE_NAME>Paketnamn</BUNDLE_NAME>
<DEVICE_TYPES>Enhetstyp</DEVICE_TYPES>
<APP_MIN_API_VERSION>Minsta API-version</APP_MIN_API_VERSION>
<APP_TARGET_API_VERSION>Mål API-version</APP_TARGET_API_VERSION>
<COMPILE_SDK_VERSION>Kompilerad SDK-version</COMPILE_SDK_VERSION>
<ARCHITECTURE>Arkitektur</ARCHITECTURE>
<MAINTAINER>Paketansvarig</MAINTAINER>
<DESCRIPTION>Beskrivning</DESCRIPTION>
<ENVIRONMENT>Miljö</ENVIRONMENT>
<TYPE>Typ</TYPE>
<TERMINAL>Terminal</TERMINAL>
<VENDOR>Leverantör</VENDOR>
</sv>
</Translations>

View File

@@ -53,7 +53,7 @@
<ItemGroup>
<PackageReference Include="PureSharpCompress" Version="0.40.0" />
<PackageReference Include="UTF.Unknown" Version="2.6.0" />
<PackageReference Include="UTF.Unknown" Version="2.5.1" />
</ItemGroup>
<ItemGroup>

View File

@@ -49,10 +49,4 @@
<ConfirmDeleteText>¿Está seguro de que desea eliminar permanentemente estos {0} elemento(s)?</ConfirmDeleteText>
<RecycleBinSizeText>Tamaño total {0}, {1} elementos</RecycleBinSizeText>
</es>
<sv>
<RecycleBinEmptyText>Papperskorgen är tom</RecycleBinEmptyText>
<RecycleBinButton>Töm papperskorgen</RecycleBinButton>
<ConfirmDeleteText>Vill du ta bort de här {0} objekten permanent?</ConfirmDeleteText>
<RecycleBinSizeText>Total storlek: {0} ({1} objekt)</RecycleBinSizeText>
</sv>
</Translations>

View File

@@ -53,7 +53,7 @@
<ItemGroup>
<PackageReference Include="CsvHelper" Version="33.1.0" />
<PackageReference Include="UTF.Unknown" Version="2.6.0" />
<PackageReference Include="UTF.Unknown" Version="2.5.1" />
</ItemGroup>
<ItemGroup>

View File

@@ -43,10 +43,4 @@
<FORMAT_PROFILE>Formatprofil</FORMAT_PROFILE>
<NAME>Name</NAME>
</de>
<sv>
<TOTAL_SIZE>Total storlek</TOTAL_SIZE>
<FORMAT>Format</FORMAT>
<FORMAT_PROFILE>Formatprofil</FORMAT_PROFILE>
<NAME>Namn</NAME>
</sv>
</Translations>

View File

@@ -1,26 +0,0 @@
using System.IO;
using System.Threading;
using System.Threading.Tasks;
namespace QuickLook.Plugin.FontViewer;
public class ObservableFileStream(string path, FileMode mode, FileAccess access, FileShare share) : FileStream(path, mode, access, share)
{
public bool IsEndOfStream { get; protected set; } = false;
public override int Read(byte[] array, int offset, int count)
{
int result = base.Read(array, offset, count);
if (result == 0)
IsEndOfStream = true;
return result;
}
public override async Task<int> ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken)
{
int result = await base.ReadAsync(buffer, offset, count, cancellationToken);
if (result == 0)
IsEndOfStream = true;
return result;
}
}

View File

@@ -19,7 +19,6 @@ using QuickLook.Common.Plugin;
using System;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
namespace QuickLook.Plugin.FontViewer;
@@ -53,12 +52,7 @@ public class Plugin : IViewer
context.ViewerContent = _panel;
context.Title = Path.GetFileName(path);
_ = Task.Run(() =>
{
_ = _panel.WaitForFontSent();
context.IsBusy = false;
});
context.IsBusy = false;
}
public void Cleanup()

View File

@@ -53,17 +53,17 @@
</PropertyGroup>
<ItemGroup>
<Content Include="$(NuGetPackageRoot)\FreeTypeSharp\3.0.1\runtimes\win-x64\native\freetype.dll">
<Content Include="$(NuGetPackageRoot)\FreeTypeSharp\3.0.0\runtimes\win-x64\native\freetype.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<DestinationFolder>$(OutDir)win-x64\</DestinationFolder>
<Link>runtimes\win-x64\freetype.dll</Link>
</Content>
<Content Include="$(NuGetPackageRoot)\FreeTypeSharp\3.0.1\runtimes\win-x86\native\freetype.dll">
<Content Include="$(NuGetPackageRoot)\FreeTypeSharp\3.0.0\runtimes\win-x86\native\freetype.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<DestinationFolder>$(OutDir)win-x86\</DestinationFolder>
<Link>runtimes\win-x86\freetype.dll</Link>
</Content>
<!--<Content Include="$(NuGetPackageRoot)\FreeTypeSharp\3.0.1\runtimes\win-arm64\native\freetype.dll">
<!--<Content Include="$(NuGetPackageRoot)\FreeTypeSharp\3.0.0\runtimes\win-arm64\native\freetype.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<DestinationFolder>$(OutDir)win-arm64\</DestinationFolder>
<Link>runtimes\win-arm64\freetype.dll</Link>
@@ -71,9 +71,9 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="FreeTypeSharp" Version="3.0.1" />
<PackageReference Include="FreeTypeSharp" Version="3.0.0" />
<PackageReference Include="QuickLook.Typography.OpenFont" Version="1.0.1" />
<PackageReference Include="Microsoft.Web.WebView2" Version="1.0.3405.78">
<PackageReference Include="Microsoft.Web.WebView2" Version="1.0.3351.48">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>

View File

@@ -16,7 +16,4 @@
<de>
<SAMPLE_TEXT>Der schnelle braune Fuchs sprang über den faulen Hund. 1234567890</SAMPLE_TEXT>
</de>
<sv>
<SAMPLE_TEXT>Flygande bäckasiner söka hwila på mjuka tuvor. 1234567890</SAMPLE_TEXT>
</sv>
</Translations>

View File

@@ -26,7 +26,6 @@ using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading;
namespace QuickLook.Plugin.FontViewer;
@@ -35,7 +34,6 @@ public class WebfontPanel : WebpagePanel
protected const string _resourcePrefix = "QuickLook.Plugin.FontViewer.Resources.";
protected internal static readonly Dictionary<string, byte[]> _resources = [];
protected byte[] _homePage;
protected ObservableFileStream _fontStream = null;
static WebfontPanel()
{
@@ -155,11 +153,10 @@ public class WebfontPanel : WebpagePanel
if (File.Exists(localPath))
{
var fileStream = new ObservableFileStream(localPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite | FileShare.Delete);
var fileStream = new FileStream(localPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite | FileShare.Delete);
var response = _webView.CoreWebView2.Environment.CreateWebResourceResponse(
fileStream, 200, "OK", MimeTypes.GetContentType());
args.Response = response;
_fontStream = fileStream; // Only the font request will set this
}
}
}
@@ -171,19 +168,6 @@ public class WebfontPanel : WebpagePanel
}
}
public bool WaitForFontSent()
{
bool timeout = SpinWait.SpinUntil(
() => _fontStream is not null && _fontStream.IsEndOfStream,
TimeSpan.FromSeconds(1.5d) // The prediction is MAX 100MB
);
// Only when the `IsEndOfStream` is true
// Delay 15ms per MB for webview2 to render the font
if (timeout) Thread.Sleep(15 * (int)(_fontStream.Position / 1_048_576));
return timeout;
}
public static bool ContainsKey(string key)
{
return _resources.ContainsKey(key);

View File

@@ -52,8 +52,8 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="HelixToolkit" Version="2.27.3" />
<PackageReference Include="HelixToolkit.Wpf" Version="2.27.3" />
<PackageReference Include="HelixToolkit" Version="2.27.0" />
<PackageReference Include="HelixToolkit.Wpf" Version="2.27.0" />
<PackageReference Include="AssimpNet" Version="5.0.0-beta1" />
<PackageReference Include="PcdSharp" Version="1.0.1" />
</ItemGroup>

View File

@@ -61,7 +61,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Web.WebView2" Version="1.0.3405.78">
<PackageReference Include="Microsoft.Web.WebView2" Version="1.0.3351.48">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>

View File

@@ -40,7 +40,4 @@
<uk-UA>
<WEBVIEW2_NOT_AVAILABLE>Для перегляду цього файлу потрібно встановити Microsoft Edge WebView2.&#10;Натисніть тут, щоб завантажити його.</WEBVIEW2_NOT_AVAILABLE>
</uk-UA>
<sv>
<WEBVIEW2_NOT_AVAILABLE>För att visa denna fil krävs att Microsoft Edge WebView2 är installerat.&#10;Klicka här för att ladda ner det.</WEBVIEW2_NOT_AVAILABLE>
</sv>
</Translations>

View File

@@ -59,13 +59,13 @@
<PackageReference Include="QuickLook.ImageGlass.WebP" Version="1.4.0">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Magick.NET-Q8-AnyCPU" Version="14.8.2">
<PackageReference Include="Magick.NET-Q8-AnyCPU" Version="14.7.0">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.Web.WebView2" Version="1.0.3405.78">
<PackageReference Include="Microsoft.Web.WebView2" Version="1.0.3351.48">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Google.Protobuf" Version="3.32.0">
<PackageReference Include="Google.Protobuf" Version="3.31.1">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="System.Memory" Version="4.6.3">

View File

@@ -55,7 +55,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="MsgReader" Version="6.0.4" />
<PackageReference Include="MsgReader" Version="6.0.1" />
</ItemGroup>
<ItemGroup>

View File

@@ -59,9 +59,9 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="UTF.Unknown" Version="2.6.0" />
<PackageReference Include="UTF.Unknown" Version="2.5.1" />
<Reference Include="WindowsBase" />
<PackageReference Include="Microsoft.Web.WebView2" Version="1.0.3405.78">
<PackageReference Include="Microsoft.Web.WebView2" Version="1.0.3351.48">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>

View File

@@ -34,6 +34,7 @@ public class Plugin : IViewer
".xls", ".xlsx", ".xlsm", ".xlsb", ".ods",
".ppt", ".pptx", ".odp",
".vsd", ".vsdx",
".ofd",
];
private PreviewPanel _panel;

View File

@@ -55,10 +55,4 @@
<ConfirmDeleteText>¿Está seguro de que desea eliminar permanentemente estos {0} elemento(s)?</ConfirmDeleteText>
<RecycleBinSizeText>Tamaño total {0}, {1} elementos</RecycleBinSizeText>
</es>
<sv>
<RecycleBinEmptyText>Papperskorgen är tom</RecycleBinEmptyText>
<RecycleBinButton>Töm papperskorgen</RecycleBinButton>
<ConfirmDeleteText>Vill du ta bort de här {0} objekten permanent?</ConfirmDeleteText>
<RecycleBinSizeText>Total storlek: {0} ({1} objekt)</RecycleBinSizeText>
</sv>
</Translations>

View File

@@ -64,7 +64,7 @@
<ItemGroup>
<PackageReference Include="PdfiumViewer.Updated" Version="2.14.5" />
<PackageReference Include="bblanchon.PDFiumV8.Win32" Version="141.0.7388" />
<PackageReference Include="bblanchon.PDFiumV8.Win32" Version="140.0.7269" />
<Reference Include="WindowsBase" />
</ItemGroup>

View File

@@ -50,11 +50,4 @@
<BTN_OpenFile>Datei öffnen</BTN_OpenFile>
<BTN_Cancel>Abbrechen</BTN_Cancel>
</de>
<sv>
<PW_Title>Ange lösenord</PW_Title>
<Pw_Hint>Filen är lösenordskyddad. Ange lösenordet för att öppna filen.</Pw_Hint>
<PW_Error>Kontrollera lösenordet</PW_Error>
<BTN_OpenFile>Öppna filen</BTN_OpenFile>
<BTN_Cancel>Avbryt</BTN_Cancel>
</sv>
</Translations>

View File

@@ -36,9 +36,4 @@
<FILE_VERSION>Dateiversion</FILE_VERSION>
<PRODUCT_VERSION>Produktversion</PRODUCT_VERSION>
</de>
<sv>
<TOTAL_SIZE>Total storlek</TOTAL_SIZE>
<FILE_VERSION>Filversion</FILE_VERSION>
<PRODUCT_VERSION>Produktversion</PRODUCT_VERSION>
</sv>
</Translations>

View File

@@ -60,7 +60,7 @@
<ItemGroup>
<PackageReference Include="AvalonEdit" Version="6.3.1.120" />
<PackageReference Include="UTF.Unknown" Version="2.6.0" />
<PackageReference Include="UTF.Unknown" Version="2.5.1" />
<Reference Include="WindowsBase" />
<Reference Include="System.ComponentModel.Composition" />
<PackageReference Include="System.Memory" Version="4.6.3" />

View File

@@ -1,124 +0,0 @@
// Copyright © 2017-2025 QL-Win Contributors
//
// This file is part of QuickLook program.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
using ICSharpCode.AvalonEdit.Document;
using ICSharpCode.AvalonEdit.Highlighting;
using ICSharpCode.AvalonEdit.Rendering;
using System.Collections.Generic;
using System.Text.RegularExpressions;
namespace QuickLook.Plugin.TextViewer.Themes.HighlightingDefinitions.Dark;
public class DiffHighlightingDefinition : DarkHighlightingDefinition
{
public override string Name => "Diff";
public override string Extension => ".diff";
public override HighlightingRuleSet MainRuleSet => new()
{
Rules =
{
// Diff header (diff --git, index, etc.)
new HighlightingRule
{
Regex = new Regex(@"^(diff --git|index|---|\+\+\+)", RegexOptions.Compiled),
Color = GetNamedColor("Header")
},
// File mode and other metadata
new HighlightingRule
{
Regex = new Regex(@"^(new file mode|deleted file mode|old mode|new mode|similarity index|dissimilarity index|rename from|rename to|copy from|copy to)", RegexOptions.Compiled),
Color = GetNamedColor("Metadata")
},
// Hunk headers (@@ ... @@)
new HighlightingRule
{
Regex = new Regex(@"^@@.*@@$", RegexOptions.Compiled),
Color = GetNamedColor("HunkHeader")
},
// Added lines (+)
new HighlightingRule
{
Regex = new Regex(@"^\+.*$", RegexOptions.Compiled),
Color = GetNamedColor("Added")
},
// Removed lines (-)
new HighlightingRule
{
Regex = new Regex(@"^-.*$", RegexOptions.Compiled),
Color = GetNamedColor("Removed")
},
// Context lines (unchanged)
new HighlightingRule
{
Regex = new Regex(@"^ .*", RegexOptions.Compiled),
Color = GetNamedColor("Context")
}
}
};
public override HighlightingColor GetNamedColor(string name)
{
return name switch
{
"Header" => new HighlightingColor
{
Name = "Header",
Foreground = new SimpleHighlightingBrush("#569CD6".ToColor()), // Blue for headers
},
"Metadata" => new HighlightingColor
{
Name = "Metadata",
Foreground = new SimpleHighlightingBrush("#808080".ToColor()), // Gray for metadata
},
"HunkHeader" => new HighlightingColor
{
Name = "HunkHeader",
Foreground = new SimpleHighlightingBrush("#C586C0".ToColor()), // Purple for hunk headers
},
"Added" => new HighlightingColor
{
Name = "Added",
Foreground = new SimpleHighlightingBrush("#6A9949".ToColor()), // Green for added lines
},
"Removed" => new HighlightingColor
{
Name = "Removed",
Foreground = new SimpleHighlightingBrush("#F44747".ToColor()), // Red for removed lines
},
"Context" => new HighlightingColor
{
Name = "Context",
Foreground = new SimpleHighlightingBrush("#D4D4D4".ToColor()), // Light gray for context
},
_ => null,
};
}
public override IEnumerable<HighlightingColor> NamedHighlightingColors =>
[
GetNamedColor("Header"),
GetNamedColor("Metadata"),
GetNamedColor("HunkHeader"),
GetNamedColor("Added"),
GetNamedColor("Removed"),
GetNamedColor("Context"),
];
public override DocumentColorizingTransformer[] LineTransformers { get; } = [];
}

View File

@@ -1,124 +0,0 @@
// Copyright © 2017-2025 QL-Win Contributors
//
// This file is part of QuickLook program.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
using ICSharpCode.AvalonEdit.Document;
using ICSharpCode.AvalonEdit.Highlighting;
using ICSharpCode.AvalonEdit.Rendering;
using System.Collections.Generic;
using System.Text.RegularExpressions;
namespace QuickLook.Plugin.TextViewer.Themes.HighlightingDefinitions.Light;
public class DiffHighlightingDefinition : LightHighlightingDefinition
{
public override string Name => "Diff";
public override string Extension => ".diff";
public override HighlightingRuleSet MainRuleSet => new()
{
Rules =
{
// Diff header (diff --git, index, etc.)
new HighlightingRule
{
Regex = new Regex(@"^(diff --git|index|---|\+\+\+)", RegexOptions.Compiled),
Color = GetNamedColor("Header")
},
// File mode and other metadata
new HighlightingRule
{
Regex = new Regex(@"^(new file mode|deleted file mode|old mode|new mode|similarity index|dissimilarity index|rename from|rename to|copy from|copy to)", RegexOptions.Compiled),
Color = GetNamedColor("Metadata")
},
// Hunk headers (@@ ... @@)
new HighlightingRule
{
Regex = new Regex(@"^@@.*@@$", RegexOptions.Compiled),
Color = GetNamedColor("HunkHeader")
},
// Added lines (+)
new HighlightingRule
{
Regex = new Regex(@"^\+.*$", RegexOptions.Compiled),
Color = GetNamedColor("Added")
},
// Removed lines (-)
new HighlightingRule
{
Regex = new Regex(@"^-.*$", RegexOptions.Compiled),
Color = GetNamedColor("Removed")
},
// Context lines (unchanged)
new HighlightingRule
{
Regex = new Regex(@"^ .*", RegexOptions.Compiled),
Color = GetNamedColor("Context")
}
}
};
public override HighlightingColor GetNamedColor(string name)
{
return name switch
{
"Header" => new HighlightingColor
{
Name = "Header",
Foreground = new SimpleHighlightingBrush("#2563EB".ToColor()), // Blue for headers
},
"Metadata" => new HighlightingColor
{
Name = "Metadata",
Foreground = new SimpleHighlightingBrush("#6B7280".ToColor()), // Gray for metadata
},
"HunkHeader" => new HighlightingColor
{
Name = "HunkHeader",
Foreground = new SimpleHighlightingBrush("#7C3AED".ToColor()), // Purple for hunk headers
},
"Added" => new HighlightingColor
{
Name = "Added",
Foreground = new SimpleHighlightingBrush("#15803D".ToColor()), // Green for added lines
},
"Removed" => new HighlightingColor
{
Name = "Removed",
Foreground = new SimpleHighlightingBrush("#DC2626".ToColor()), // Red for removed lines
},
"Context" => new HighlightingColor
{
Name = "Context",
Foreground = new SimpleHighlightingBrush("#374151".ToColor()), // Gray for context
},
_ => null,
};
}
public override IEnumerable<HighlightingColor> NamedHighlightingColors =>
[
GetNamedColor("Header"),
GetNamedColor("Metadata"),
GetNamedColor("HunkHeader"),
GetNamedColor("Added"),
GetNamedColor("Removed"),
GetNamedColor("Context"),
];
public override DocumentColorizingTransformer[] LineTransformers { get; } = [];
}

View File

@@ -96,9 +96,4 @@
<Editor_Copy>Aντιγραφή</Editor_Copy>
<Editor_SelectAll>Επιλογή όλων</Editor_SelectAll>
</el>
<sv>
<Editor_FontFamily>Consolas</Editor_FontFamily>
<Editor_Copy>Kopiera</Editor_Copy>
<Editor_SelectAll>Markera allt</Editor_SelectAll>
</sv>
</Translations>

View File

@@ -48,8 +48,8 @@
<Reference Include="DirectShowLib-2005, Version=2.1.0.26626, Culture=neutral, PublicKeyToken=67e7b740cdfc2d3f, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
</Reference>
<PackageReference Include="UTF.Unknown" Version="2.6.0" />
<PackageReference Include="Melanchall.DryWetMidi" Version="8.0.2" />
<PackageReference Include="UTF.Unknown" Version="2.5.1" />
<PackageReference Include="Melanchall.DryWetMidi" Version="8.0.1" />
</ItemGroup>
<ItemGroup>

View File

@@ -1,88 +0,0 @@
// Copyright © 2017-2025 QL-Win Contributors
//
// This file is part of QuickLook program.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
using Microsoft.Xaml.Behaviors;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
namespace QuickLook.Controls;
public sealed class LeftContextMenuBehavior : Behavior<FrameworkElement>
{
public Point? PlacementOffset { get; set; } = null;
public PlacementMode Placement { get; set; } = PlacementMode.Bottom;
public double? PlacementOffsetX
{
get => PlacementOffset?.X;
set => PlacementOffset = value != null ? new(value ?? 0d, PlacementOffset?.Y ?? 0d) : null;
}
public double? PlacementOffsetY
{
get => PlacementOffset?.Y;
set => PlacementOffset = value != null ? new(PlacementOffset?.X ?? 0d, value ?? 0d) : null;
}
public LeftContextMenuBehavior()
{
}
protected override void OnAttached()
{
base.OnAttached();
Register(AssociatedObject, PlacementOffset, Placement);
}
protected override void OnDetaching()
{
base.OnDetaching();
Unregister(AssociatedObject);
}
public static void Register(FrameworkElement frameworkElement, Point? placementOffset = null, PlacementMode placement = PlacementMode.Bottom)
{
if (frameworkElement?.ContextMenu == null)
{
return;
}
frameworkElement.PreviewMouseRightButtonUp += (_, e) => e.Handled = true;
frameworkElement.MouseRightButtonUp += (_, e) => e.Handled = true;
frameworkElement.PreviewMouseLeftButtonDown += (_, _) =>
{
ContextMenu contextMenu = frameworkElement.ContextMenu;
if (contextMenu != null)
{
if (contextMenu.PlacementTarget != frameworkElement)
{
contextMenu.PlacementTarget = frameworkElement;
contextMenu.PlacementRectangle = new Rect(placementOffset ?? new Point(), new Size(frameworkElement.ActualWidth, frameworkElement.ActualHeight));
contextMenu.Placement = placement;
contextMenu.StaysOpen = false;
}
contextMenu.IsOpen = !contextMenu.IsOpen;
}
};
}
public static void Unregister(FrameworkElement frameworkElement)
{
_ = frameworkElement;
}
}

View File

@@ -102,10 +102,10 @@
<PackageReference Include="Microsoft.Xaml.Behaviors.Wpf" Version="1.1.135">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="WPF-UI.Violeta" Version="4.0.3.6">
<PackageReference Include="WPF-UI.Violeta" Version="4.0.3.2">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Lib.Harmony" Version="2.4.1">
<PackageReference Include="Lib.Harmony" Version="2.3.6">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="UnblockZoneIdentifier" Version="1.0.0">

View File

@@ -182,7 +182,6 @@
<MW_Run>{0} ausführen</MW_Run>
<MW_Share>Freigeben</MW_Share>
<MW_Reload>Neu laden</MW_Reload>
<MW_More>Mehr</MW_More>
<Icon_RunAtStartup>Beim Systemstart &amp;ausführen</Icon_RunAtStartup>
<Icon_ToolTip>QuickLook v{0}</Icon_ToolTip>
<Icon_CheckUpdate>Nach &amp;Updates suchen</Icon_CheckUpdate>
@@ -217,7 +216,6 @@
<MW_Run>Run {0}</MW_Run>
<MW_Share>Share</MW_Share>
<MW_Reload>Reload</MW_Reload>
<MW_More>More</MW_More>
<Icon_RunAtStartup>Run at &amp;Startup</Icon_RunAtStartup>
<Icon_ToolTip>QuickLook v{0}</Icon_ToolTip>
<Icon_CheckUpdate>Check for &amp;Updates...</Icon_CheckUpdate>
@@ -236,8 +234,6 @@
<InfoPanel_Files>{0} files</InfoPanel_Files>
<InfoPanel_FolderAndFile>({0} and {1})</InfoPanel_FolderAndFile>
<InfoPanel_CantPreventClosing>Cancellation of "Prevent Closing" is not supported</InfoPanel_CantPreventClosing>
<InfoPanelMoreItem_CopyAsPath>Copy as path</InfoPanelMoreItem_CopyAsPath>
<InfoPanelMoreItem_CopySucc>Copy successfully</InfoPanelMoreItem_CopySucc>
</en>
<es>
<UI_FontFamily>Segoe UI</UI_FontFamily>
@@ -254,7 +250,6 @@
<MW_Run>Iniciar {0}</MW_Run>
<MW_Share>Compartir</MW_Share>
<MW_Reload>Recargar</MW_Reload>
<MW_More>Más</MW_More>
<Icon_RunAtStartup>Iniciar con el &amp;sistema</Icon_RunAtStartup>
<Icon_ToolTip>QuickLook v{0}</Icon_ToolTip>
<Icon_CheckUpdate>Buscar &amp;Actualizaciones...</Icon_CheckUpdate>
@@ -284,7 +279,6 @@
<MW_OpenWith>Ouvrir avec {0}</MW_OpenWith>
<MW_Run>Exécuter {0}</MW_Run>
<MW_Reload>Recharger</MW_Reload>
<MW_More>Plus</MW_More>
<Icon_RunAtStartup>Exécuter au &amp;démarrage</Icon_RunAtStartup>
<Icon_ToolTip>QuickLook v{0}</Icon_ToolTip>
<Icon_CheckUpdate>Vérifier s'il existe des &amp;mises à jour...</Icon_CheckUpdate>
@@ -314,7 +308,6 @@
<MW_OpenWith>Apri con {0}</MW_OpenWith>
<MW_Run>Esegui {0}</MW_Run>
<MW_Reload>Ricarica</MW_Reload>
<MW_More>Altro</MW_More>
<Icon_RunAtStartup>Esegui all'&amp;Avvio</Icon_RunAtStartup>
<Icon_ToolTip>QuickLook v{0}</Icon_ToolTip>
<Icon_CheckUpdate>Verifica &amp;Aggiornamenti...</Icon_CheckUpdate>
@@ -347,7 +340,6 @@
<MW_Run>{0} を起動</MW_Run>
<MW_Share>シェア</MW_Share>
<MW_Reload>再読み込み</MW_Reload>
<MW_More>その他</MW_More>
<Icon_RunAtStartup>スタートアップ時に起動</Icon_RunAtStartup>
<Icon_ToolTip>QuickLook v{0}</Icon_ToolTip>
<Icon_CheckUpdate>更新を確認する... (&amp;U)</Icon_CheckUpdate>
@@ -432,7 +424,6 @@
<MW_Run>Uruchom {0}</MW_Run>
<MW_Share>Udostępnij</MW_Share>
<MW_Reload>Przeładuj</MW_Reload>
<MW_More>Więcej</MW_More>
<Icon_RunAtStartup>Uruchamiaj automatycznie z systemem</Icon_RunAtStartup>
<Icon_ToolTip>QuickLook v{0}</Icon_ToolTip>
<Icon_CheckUpdate>Sprawdź &amp;aktualizacje...</Icon_CheckUpdate>
@@ -467,7 +458,6 @@
<MW_Run>Executar {0}</MW_Run>
<MW_Share>Compartilhar</MW_Share>
<MW_Reload>Recarregar</MW_Reload>
<MW_More>Mais</MW_More>
<Icon_RunAtStartup>Executar na &amp;Inicialização</Icon_RunAtStartup>
<Icon_ToolTip>QuickLook v{0}</Icon_ToolTip>
<Icon_CheckUpdate>Procurar por &amp;Atualizações...</Icon_CheckUpdate>
@@ -525,7 +515,6 @@
<MW_PreventClosing>Закрепить</MW_PreventClosing>
<MW_Share>Поделиться</MW_Share>
<MW_Reload>Перезагрузить</MW_Reload>
<MW_More>Еще</MW_More>
<Icon_RunAtStartup>Автозапуск</Icon_RunAtStartup>
<Icon_ToolTip>QuickLook v{0}</Icon_ToolTip>
<Icon_CheckUpdate>Проверить &amp;обновления…</Icon_CheckUpdate>
@@ -586,7 +575,6 @@
<MW_Run>Запустити {0}</MW_Run>
<MW_Share>Поширити</MW_Share>
<MW_Reload>Перезавантажити</MW_Reload>
<MW_More>Більше</MW_More>
<Icon_RunAtStartup>Запускати під час &amp;старту</Icon_RunAtStartup>
<Icon_ToolTip>QuickLook v{0}</Icon_ToolTip>
<Icon_CheckUpdate>Перевірити наявність &amp;оновлення…</Icon_CheckUpdate>
@@ -646,7 +634,6 @@
<MW_Run>运行 {0}</MW_Run>
<MW_Share>分享</MW_Share>
<MW_Reload>重新加载</MW_Reload>
<MW_More>更多</MW_More>
<Icon_RunAtStartup>启动时自动运行 (&amp;S)</Icon_RunAtStartup>
<Icon_ToolTip>QuickLook v{0}</Icon_ToolTip>
<Icon_CheckUpdate>检查更新... (&amp;U)</Icon_CheckUpdate>
@@ -681,7 +668,6 @@
<MW_Run>執行 {0}</MW_Run>
<MW_Share>分享</MW_Share>
<MW_Reload>重新載入</MW_Reload>
<MW_More>更多</MW_More>
<Icon_RunAtStartup>系統啟動時自動執行 (&amp;S)</Icon_RunAtStartup>
<Icon_ToolTip>QuickLook v{0}</Icon_ToolTip>
<Icon_CheckUpdate>檢查更新... (&amp;U)</Icon_CheckUpdate>
@@ -811,38 +797,4 @@
<InfoPanel_Files>{0} αρχεία</InfoPanel_Files>
<InfoPanel_FolderAndFile>({0} και {1})</InfoPanel_FolderAndFile>
</el>
<sv>
<UI_FontFamily>Segoe UI</UI_FontFamily>
<APP_START>QuickLook körs i bakgrunden.</APP_START>
<APP_SECOND>QuickLook körs redan</APP_SECOND>
<APP_SECOND_TEXT>QuickLook möjliggör snabb förhandsgranskning av vissa filtyper genom att trycka ned mellanslag när filen är markerad.</APP_SECOND_TEXT>
<APP_PATH_NOT_WRITABLE>Sökvägen "{0}" är inte skrivbar. Kontrollera att du har rätt behörigheter.</APP_PATH_NOT_WRITABLE>
<MW_StayTop>Behåll överst</MW_StayTop>
<MW_PreventClosing>Behåll öppet</MW_PreventClosing>
<MW_BrowseFolder>Bläddra i {0}</MW_BrowseFolder>
<MW_Open>Öppna {0}</MW_Open>
<MW_OpenWith>Öppna med {0}</MW_OpenWith>
<MW_OpenWithMenu>Öppna med…</MW_OpenWithMenu>
<MW_Run>Kör {0}</MW_Run>
<MW_Share>Dela</MW_Share>
<MW_Reload>Ladda om</MW_Reload>
<Icon_RunAtStartup>Kör vid &amp;start</Icon_RunAtStartup>
<Icon_ToolTip>QuickLook v{0}</Icon_ToolTip>
<Icon_CheckUpdate>Leta efter &amp;uppdateringar...</Icon_CheckUpdate>
<Icon_GetPlugin>Hitta nya &amp;tillägg...</Icon_GetPlugin>
<Icon_OpenDataFolder>Öppna datamappen</Icon_OpenDataFolder>
<Icon_Restart>&amp;Starta om</Icon_Restart>
<Icon_Quit>&amp;Avsluta</Icon_Quit>
<Update_NoUpdate>Du har den senaste versionen.</Update_NoUpdate>
<Update_Found>QuickLook {0} har lanserats. Klicka här för att öppna nedladdningssidan.</Update_Found>
<Update_Error>Det gick inte att leta efter uppdateringar: {0}</Update_Error>
<InfoPanel_LastModified>Senast ändrad: {0}</InfoPanel_LastModified>
<InfoPanel_DriveSize>Kapacitet: {0} ({1} ledigt)</InfoPanel_DriveSize>
<InfoPanel_Folder>{0} mapp</InfoPanel_Folder>
<InfoPanel_Folders>{0} mappar</InfoPanel_Folders>
<InfoPanel_File>{0} fil</InfoPanel_File>
<InfoPanel_Files>{0} filer</InfoPanel_Files>
<InfoPanel_FolderAndFile>({0} och {1})</InfoPanel_FolderAndFile>
<InfoPanel_CantPreventClosing>Det är inte möjligt att avbryta "Behåll öppet", stäng fönstret istället.</InfoPanel_CantPreventClosing>
</sv>
</Translations>

View File

@@ -35,7 +35,19 @@ internal partial class TrayIconManager : IDisposable
private readonly TrayIconHost _icon;
private readonly TrayMenuItem _itemAutorun = null!;
private readonly TrayMenuItem _itemAutorun =
new()
{
Header = TranslationHelper.Get("Icon_RunAtStartup"),
Command = new RelayCommand(() =>
{
if (AutoStartupHelper.IsAutorun())
AutoStartupHelper.RemoveAutorunShortcut();
else
AutoStartupHelper.CreateAutorunShortcut();
}),
IsEnabled = !App.IsUWP,
};
private TrayIconManager()
{
@@ -67,18 +79,7 @@ internal partial class TrayIconManager : IDisposable
Header = TranslationHelper.Get("Icon_OpenDataFolder"),
Command = new RelayCommand(() => Process.Start("explorer.exe", SettingHelper.LocalDataPath)),
},
_itemAutorun = new TrayMenuItem()
{
Header = TranslationHelper.Get("Icon_RunAtStartup"),
Command = new RelayCommand(() =>
{
if (AutoStartupHelper.IsAutorun())
AutoStartupHelper.RemoveAutorunShortcut();
else
AutoStartupHelper.CreateAutorunShortcut();
}),
IsEnabled = !App.IsUWP,
},
_itemAutorun,
new TrayMenuItem()
{
Header = TranslationHelper.Get("Icon_Restart"),
@@ -93,10 +94,7 @@ internal partial class TrayIconManager : IDisposable
IsVisible = SettingHelper.Get("ShowTrayIcon", true)
};
_icon.RightDown += (_, _) =>
{
_itemAutorun.IsChecked = AutoStartupHelper.IsAutorun();
};
_icon.RightDown += (sender, e) => { _itemAutorun.IsChecked = AutoStartupHelper.IsAutorun(); };
}
public void Dispose()

View File

@@ -22,13 +22,12 @@ using System;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Windows;
using System.Windows.Input;
namespace QuickLook;
public partial class ViewerWindow : INotifyPropertyChanged
{
private readonly ResourceDictionary _darkDict = new()
private readonly ResourceDictionary _darkDict = new ResourceDictionary
{
Source = new Uri("pack://application:,,,/QuickLook.Common;component/Styles/MainWindowStyles.Dark.xaml")
};
@@ -51,8 +50,6 @@ public partial class ViewerWindow : INotifyPropertyChanged
public ContextObject ContextObject { get; private set; }
public Themes CurrentTheme { get; private set; }
public ICommand CloseCommand { get; private set; }
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]

View File

@@ -6,10 +6,7 @@
xmlns:converters="clr-namespace:QuickLook.Converters"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:glassLayer="clr-namespace:QuickLook.Controls.GlassLayer"
xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:ui="http://schemas.lepo.co/wpfui/2022/xaml"
xmlns:vio="http://schemas.lepo.co/wpfui/2022/xaml/violeta"
x:Name="mainWindow"
Title="QuickLook"
MinWidth="400"
@@ -125,32 +122,15 @@
DockPanel.Dock="Right"
Style="{StaticResource CaptionButtonStyle}"
ToolTip="Reload" />
<Button x:Name="buttonMore"
Content="&#xE712;"
DockPanel.Dock="Right"
Style="{StaticResource CaptionButtonStyle}"
ToolTip="More">
<Button.ContextMenu>
<ContextMenu FontSize="12">
<MenuItem x:Name="moreItemCopyAsPath">
<MenuItem.Icon>
<ui:FontIcon FontFamily="{DynamicResource SymbolThemeFontFamily}" Glyph="{x:Static ui:FontSymbols.Copy}" />
</MenuItem.Icon>
</MenuItem>
<Separator Visibility="Collapsed" />
<MenuItem x:Name="moreItemOpenSettings"
Header="Settings"
Visibility="Collapsed">
<MenuItem.Icon>
<ui:FontIcon FontFamily="{DynamicResource SymbolThemeFontFamily}" Glyph="{x:Static ui:FontSymbols.Settings}" />
</MenuItem.Icon>
</MenuItem>
</ContextMenu>
</Button.ContextMenu>
<i:Interaction.Behaviors>
<controls:LeftContextMenuBehavior />
</i:Interaction.Behaviors>
</Button>
<!--<Button x:Name="buttonOpen" DockPanel.Dock="Right"
Style="{StaticResource CaptionTextButtonStyle}"
Visibility="{Binding ActualWidth, ElementName=windowCaptionContainer, Converter={StaticResource WidthToVisibilityCollapsedConverter}}">
<Button.Content>
<TextBlock x:Name="buttonOpenText" VerticalAlignment="Center">
Open with <Bold>AppName</Bold>
</TextBlock>
</Button.Content>
</Button>-->
<Button x:Name="buttonTop"
DockPanel.Dock="Left"
Tag="Auto"

View File

@@ -20,7 +20,6 @@ using QuickLook.Common.Helpers;
using QuickLook.Common.Plugin;
using QuickLook.Helpers;
using System;
using System.Diagnostics;
using System.IO;
using System.Windows;
using System.Windows.Input;
@@ -111,32 +110,12 @@ public partial class ViewerWindow : Window
buttonReload.Visibility = SettingHelper.Get("ShowReload", false) ? Visibility.Visible : Visibility.Collapsed;
moreItemCopyAsPath.Click += (_, _) =>
{
try
{
Clipboard.SetText(_path);
Toast.Success(TranslationHelper.Get("InfoPanelMoreItem_CopySucc"));
}
catch (Exception e)
{
Debug.WriteLine(e);
}
};
moreItemOpenSettings.Click += (_, _) =>
{
Toast.Warning("Coming soon...");
};
// Set UI translations
buttonTop.ToolTip = TranslationHelper.Get("MW_StayTop");
buttonPin.ToolTip = TranslationHelper.Get("MW_PreventClosing");
buttonOpenWith.ToolTip = TranslationHelper.Get("MW_OpenWithMenu");
buttonShare.ToolTip = TranslationHelper.Get("MW_Share");
buttonReload.ToolTip = TranslationHelper.Get("MW_Reload", failsafe: "Reload");
buttonMore.ToolTip = TranslationHelper.Get("MW_More", failsafe: "More");
moreItemCopyAsPath.Header = TranslationHelper.Get("InfoPanelMoreItem_CopyAsPath");
}
public new void Close()