* feat(aed): migrate ICSharpCode.AvalonEdit → AvaloniaEdit across all views
Replace all ICSharpCode.AvalonEdit.* references with AvaloniaEdit.*
throughout the codebase. This makes the text editor components
cross-platform by using the Avalonia port of the editor.
Files migrated (namespace-only change):
- Extensions/AvalonExtensions.cs
- Extensions/StringExtensions.cs
- ViewModels/TabControlViewModel.cs
- Views/Resources/Controls/EndpointEditor.xaml.cs
- Views/Resources/Controls/DictionaryEditor.xaml.cs
- Views/Resources/Controls/Aed/HexColorElementGenerator.cs
- Views/Resources/Controls/Aed/GamePathElementGenerator.cs
- Views/Resources/Controls/Aed/JumpElementGenerator.cs
- Views/Resources/Controls/Aed/BraceFoldingStrategy.cs
Files migrated (full API migration):
- Views/Resources/Controls/Aed/HexColorVisualLineText.cs
- Add Avalonia.Media.TextFormatting using for TextRun
- CreateTextRun: use base.CreateTextRun() + SetForegroundBrush()
- Remove OnQueryCursor (no Avalonia equivalent)
- Views/Resources/Controls/Aed/GamePathVisualLineText.cs
- Same CreateTextRun pattern
- OnMouseDown → OnPointerPressed(PointerPressedEventArgs)
- Keyboard.Modifiers → e.KeyModifiers parameter
- Views/Resources/Controls/Aed/JumpVisualLineText.cs
- Same pattern as GamePathVisualLineText
- Views/Resources/Controls/PropertiesPopout.xaml.cs
- WPF ToolTip → Avalonia ToolTip.SetTip/SetIsOpen
- MouseEventArgs → PointerEventArgs
- PointerWheelEventArgs (was PointerWheelChangedEventArgs)
- OnPreviewMouseWheel: e.Delta.Y * 2.4
- Views/Resources/Controls/AvalonEditor.xaml
- Namespaces: WPF → Avalonia + AvaloniaEdit
- DataTrigger/ZIndex → IsVisible binding
- AdonisUI watermark → built-in TextBox Watermark property
- AdonisUI brush refs → ThemeForegroundBrush
- ToolTip.Tip attribute syntax
- Remove XAML-bound events (wired in constructor)
- Views/Resources/Controls/AvalonEditor.xaml.cs
- Remove CommandBindings (WPF-only RoutedUICommand)
- Wire events in constructor: PointerHover, PointerHoverStopped,
PointerWheelChangedEvent (tunnel), PointerReleased
- Key.System → Key.Left/Right + Alt modifier check
- OnPointerWheelChanged with PointerWheelEventArgs
Closes #28
* fix(aed): address review findings and PR comments
Critical (C1):
- Migrate PropertiesPopout.xaml from WPF/AdonisUI to Avalonia Window.
Root element: AdonisWindow → Window; namespaces updated; AdonisUI
brushes/watermark/events removed; Width set to 800 (was SystemParameters
screen-relative which has no Avalonia equivalent).
Major (M1):
- Wire PointerHover, PointerHoverStopped and tunnelling
PointerWheelChangedEvent in PropertiesPopout constructor, since
these events live on TextArea.TextView and cannot be bound in XAML
as TextEditor event attributes.
Minor (Min1):
- Rename OnPreviewKeyDown → OnKeyDown in both AvalonEditor.xaml and
.cs; the event is Avalonia KeyDown (bubble), not a WPF tunnel event.
PR comments:
- Fix TabItem ambiguity in AvalonEditor.xaml.cs: add using alias
VmTabItem = FModel.ViewModels.TabItem and update all casts (was
ambiguous with Avalonia.Controls.TabItem).
- Fix FModel.ViewModels.TabItem fully-qualified in PropertiesPopout
constructor parameter (ViewModels.TabItem did not resolve in context).
- Brush leak in VisualLineText.CreateTextRun: add explicit else-branch
TextRunProperties.SetForegroundBrush(null) so the separator token
always resets to the default, preventing colour leakage if the
shared TextRunProperties object is reused across invocations.
- Cache tooltip Border/TextBlock in both AvalonEditor and
PropertiesPopout; update Background/Foreground/Text on each hover
rather than allocating new controls each time.
Suggestion (S2):
- Remove no-op BraceFoldingStrategy constructor eager UpdateFoldings
call (result was discarded; JsonFoldingStrategies.UpdateFoldings
performs the actual FoldingManager installation).
* fix(aed): mark Ctrl+Scroll event handled to prevent scroll-through
Set e.Handled = true in OnPointerWheelChanged in both AvalonEditor
and PropertiesPopout so that Ctrl+Wheel resizes the font only, without
also scrolling the document content.
* fix(aed): remove unused TextEditor parameter from BraceFoldingStrategy
The constructor no longer uses its parameter after the eager
UpdateFoldings call was removed. Drop the parameter entirely and
update the single call site in JsonFoldingStrategies.
|
||
|---|---|---|
| .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.