* feat(P2-004): migrate all 19 converters from WPF to Avalonia (#17) Migrates every converter in FModel/Views/Resources/Converters/ off System.Windows.Data / System.Windows.Markup / System.Windows.Shell and onto Avalonia.Data.Converters equivalents. Changes by converter: Simple using-swap only (IValueConverter interface unchanged): AnyItemMeetsConditionConverter, CommitMessageConverter, DateTimeToDateConverter, FolderToSeparatorTagConverter, GameFileMeetsConditionConverter, InvertBooleanConverter, IsNullToBoolReversedConverter, RelativeDateTimeConverter, StringToGameConverter, TrimRightToLeftConverter BoolToRenderModeConverter: System.Windows.Media.BitmapScalingMode → Avalonia.Media.Imaging.BitmapInterpolationMode (NearestNeighbor → None, Linear → HighQuality); typed helper method return type updated accordingly. BorderThicknessToStrokeThicknessConverter: System.Windows.Thickness → Avalonia.Thickness (same properties). InvertBoolToVisibilityConverter: Visibility.Visible/Collapsed/Hidden → bool; Avalonia uses IsVisible (bool). Hidden concept does not exist on Avalonia — both Collapsed and Hidden map to false. RatioConverter: Removed MarkupExtension base class (PresentationFramework — Windows-only). Added Instance singleton; use {x:Static converters:RatioConverter.Instance} in XAML. RatioToGridLengthConverter: System.Windows.GridLength/GridUnitType → Avalonia.GridLength/GridUnitType. IMultiValueConverter signature: object[] → IList<object?>, ConvertBack removed. StatusToTaskbarStateConverter: Stubbed out — System.Windows.Shell.TaskbarItemProgressState has no cross-platform Avalonia equivalent. Returns null; tracked by TODO(P2-015). MarkupExtension removed; added Instance singleton. TabSizeConverter: System.Windows.Controls.TabControl → Avalonia.Controls.TabControl. ActualWidth → Bounds.Width; Items.Count → ItemCount. IMultiValueConverter: object[] → IList<object?>, ConvertBack removed. FileToGeometryConverter: System.Windows.Media.{Geometry,Brush} → Avalonia.Media.{Geometry,IBrush}. Application.Current.FindResource → Application.Current.TryGetResource(key, null, out var r). IMultiValueConverter: object[] → IList<object?>, ConvertBack removed. FolderToGeometryConverter: Same Geometry/IBrush/TryGetResource changes as FileToGeometryConverter. Already migrated (no changes): BoolToToggleConverter, CaseInsensitiveStringEqualsConverter, EndpointToTypeConverter, EnumToStringConverter, IsNotZeroConverter, MultiParameterConverter, SizeToStringConverter Build: 1266 errors baseline → 1174 after this commit (92 fewer). Zero errors introduced in Converters/. * fix(P2-004): address PR #71 review findings M1 (PR comment): FolderToGeometryConverter — remove duplicate if condition (copy-paste artifact: identical guard appeared twice consecutively) M2 (PR comment): TabSizeConverter — two fixes - divisor guard: return 0 when ItemCount == 0 to prevent divide-by-zero - double.Parse now uses CultureInfo.InvariantCulture (XAML ConverterParameter values are always invariant-culture strings; avoids FormatException on locales that use comma as decimal separator) PR comment: BoolToRenderModeConverter — typed helper Convert(bool) now implements the mapping directly instead of delegating to the interface method with null culture; eliminates fragile null-culture call chain m2: StatusToTaskbarStateConverter — reverted from IMultiValueConverter back to IValueConverter to match the original WPF single-value binding contract (EStatusKind → TaskbarItemProgressState was always a single-value binding); also removed unused System.Collections.Generic using m1: Aligned all ten 'simple-swap' IValueConverter implementations to use Avalonia-idiomatic nullable signatures (object? value, object? parameter, object? return) matching the Avalonia interface definition; previously these retained the non-nullable WPF-era signatures which were inconsistent with the nine converters already updated in the same commit S1: Renamed InvertBoolToVisibilityConverter class → InvertBoolConverter to reflect that it returns bool (for IsVisible) not WPF Visibility; file rename is deferred pending terminal access |
||
|---|---|---|
| .github | ||
| .vscode | ||
| CUE4Parse@06fbf1aced | ||
| FModel | ||
| .editorconfig | ||
| .gitignore | ||
| .gitmodules | ||
| LICENSE | ||
| NOTICE | ||
| README.md | ||
FModel Linux — Unreal Engine Archives Explorer for Linux
This is an unofficial Linux port of FModel, originally created by Asval (4sval) and contributors. It is not affiliated with or endorsed by the upstream project or its maintainers. Please do not report Linux-port-specific issues upstream.
Description
FModel Linux is a Linux port of FModel — an archive explorer for Unreal Engine games. It uses CUE4Parse as its core parsing library, providing robust support for the latest UE4 and UE5 archive formats, along with a comprehensive set of tools for previewing and converting game packages.
This fork replaces the Windows-only WPF UI stack with Avalonia UI and removes other Windows-specific dependencies to enable native Linux support. It is maintained by r6e.
Installation
Installation instructions for the Linux port are available in the project wiki (work in progress).
For the upstream Windows release, refer to the official FModel installation guide.
Supporting the Upstream Project
This fork does not accept donations. If you find FModel valuable, please consider supporting the original FModel project and its contributors.
License
FModel Linux is a derivative work licensed under GPL-3. The original FModel project is copyright © Asval and FModel contributors. Licenses of third-party libraries used are listed in NOTICE.