Flow.Launcher/AVALONIA_MIGRATION_CHECKLIST.md
Shengkai Lin 9c99c7c65a feat(avalonia): implement HighlightTextConverter with theme-aware styling
- Add gold foreground color (#FFD700) for highlighted search matches
- Update HighlightTextConverter to use theme resource with fallback
- Fix TextBlockHelper to preserve Foreground property when copying Runs
- Fix highlight update bug: sync TitleHighlightData/SubTitleHighlightData/Score
  for reused ResultViewModel instances when query changes
- Update migration checklist to mark HighlightTextConverter as done
2026-02-01 13:25:11 +08:00

20 KiB

Flow.Launcher Avalonia Migration Checklist

Overall Progress: ~35-40%
Last Updated: January 2026


Table of Contents

  1. Windows & Dialogs
  2. Settings Pages
  3. Custom Controls
  4. ViewModels
  5. Helpers
  6. Converters
  7. Core Features
  8. Theming
  9. Animations

1. Windows & Dialogs

Window WPF File Status Notes
MainWindow MainWindow.xaml Done Core search UI working
SettingsWindow SettingWindow.xaml Done Navigation frame working
HotkeyControl HotkeyControl.xaml Done Button control
HotkeyRecorderDialog HotkeyControlDialog.xaml Done Global hook + modifier tracking
ResultListBox ResultListBox.xaml Done Results display
WelcomeWindow WelcomeWindow.xaml Missing First-run setup wizard
ReportWindow ReportWindow.xaml Missing Error reporting dialog
ReleaseNotesWindow ReleaseNotesWindow.xaml Missing Changelog display
SelectBrowserWindow SelectBrowserWindow.xaml Missing Browser selection
SelectFileManagerWindow SelectFileManagerWindow.xaml Missing File manager selection
PluginUpdateWindow PluginUpdateWindow.xaml Missing Plugin update progress
MessageBoxEx MessageBoxEx.xaml Missing Custom message box
Msg Msg.xaml Missing Simple message dialog
MsgWithButton MsgWithButton.xaml Missing Message with action button
ProgressBoxEx ProgressBoxEx.xaml Missing Progress dialog
ActionKeywords ActionKeywords.xaml Missing Action keyword editor
CustomQueryHotkeySetting CustomQueryHotkeySetting.xaml Missing Custom hotkey dialog
CustomShortcutSetting CustomShortcutSetting.xaml Missing Shortcut editor

Progress: 5/19 (26%)


2. Settings Pages

2.1 General Settings (SettingsPaneGeneral.xaml - 538 lines)

Avalonia: ~270 lines (~50%)

Setting Status Binding Property
Startup Section
Start on system startup Done StartOnStartup
Use logon task Done UseLogonTaskForStartup
Hide on startup Done HideOnStartup
Behavior Section
Hide when lose focus Done HideWhenDeactivated
Hide notify icon Done HideNotifyIcon
Show at topmost Done ShowAtTopmost
Ignore hotkeys on fullscreen Done IgnoreHotkeysOnFullscreen
Always preview Done AlwaysPreview
Position Section
Search window position Done SelectedSearchWindowScreen
Search window align Done SelectedSearchWindowAlign
Custom position X/Y Missing Settings.CustomWindowLeft/Top
Search Section
Query search precision Done SelectedSearchPrecision
Last query mode Done SelectedLastQueryMode
Search delay toggle Done SearchQueryResultsWithDelay
Search delay time Done SearchDelayTime
Home Page Section
Show home page Done ShowHomePage
History results for home Done ShowHistoryResultsForHomePage
History results count Done MaxHistoryResultsToShow
Updates Section
Auto updates Done AutoUpdates
Auto update plugins Done AutoUpdatePlugins
Miscellaneous
Auto restart after changing Done AutoRestartAfterChanging
Show unknown source warning Done ShowUnknownSourceWarning
Always start English Done AlwaysStartEn
Use Pinyin Done ShouldUsePinyin
Language Section
Language selector Done SelectedLanguage
Paths
Python directory Done PythonPath (display + select)
Node directory Done NodePath (display + select)
Not Yet Implemented
Select browser Missing Opens SelectBrowserWindow
Select file manager Missing Opens SelectFileManagerWindow
Portable mode Missing Toggle
Dialog jump settings Missing ExCard with nested options
Double pinyin settings Missing ExCard with schema selector
Korean IME settings Missing ExCard with registry toggle

2.2 Theme Settings (SettingsPaneTheme.xaml - 803 lines)

Avalonia: 66 lines (~8%)

Setting Status Notes
Theme Selection
Theme list Missing ListView with theme previews
Theme preview Missing Live preview panel
Window Settings
Window size slider Missing Settings.WindowSize
Window height slider Missing Settings.WindowHeightSize
Item height slider Missing Settings.ItemHeightSize
Font Settings
Query box font Missing Settings.QueryBoxFont
Query box font size Missing Settings.QueryBoxFontSize
Result font Missing Settings.ResultFont
Result font size Missing Settings.ResultItemFontSize
Result sub font size Missing Settings.ResultSubItemFontSize
Appearance
Color scheme Done Light/Dark/System
Animation speed Missing Settings.AnimationSpeed
Use clock Missing Settings.UseDate
Clock format Missing Settings.TimeFormat
Date format Missing Settings.DateFormat
Use glyph icons Missing Settings.UseGlyphIcons
Backdrop
Use system backdrop Missing Settings.UseSystemBackdrop
Backdrop type Missing Mica/Acrylic/etc
Icon Settings
Icon theme Missing Settings.ColorScheme
Double-click icon action Missing Settings.DoubleClickIconAction

2.3 Hotkey Settings (SettingsPaneHotkey.xaml - 463 lines)

Avalonia: 26 lines (~6%)

Hotkey Status Setting Property
Toggle Flow Launcher Done Settings.Hotkey
Preview hotkey Missing Settings.PreviewHotkey
Auto-complete hotkey Missing Settings.AutoCompleteHotkey
Select next item Missing Settings.SelectNextItemHotkey
Select prev item Missing Settings.SelectPrevItemHotkey
Select next page Missing Settings.SelectNextPageHotkey
Select prev page Missing Settings.SelectPrevPageHotkey
Open result hotkeys (1-9) Missing Settings.OpenResultHotkey[1-9]
Open context menu Missing Settings.OpenContextMenuHotkey
Cycle history up Missing Settings.CycleHistoryUpHotkey
Cycle history down Missing Settings.CycleHistoryDownHotkey
Custom Query Hotkeys
Custom query list Missing List of user-defined hotkeys
Add custom hotkey Missing Opens editor dialog

2.4 Plugin Settings (SettingsPanePlugins.xaml - 141 lines)

Avalonia: 47 lines (~33%)

Feature Status Notes
Plugin list Done Basic list view
Plugin icon Done Shows icon
Plugin name Done Shows name
Plugin enable/disable Missing Toggle switch
Plugin details panel Missing Description, author, website
Plugin settings UI Missing IPluginSettingProvider integration
Action keywords editor Missing Opens ActionKeywords dialog
Plugin priority Missing Drag to reorder

2.5 Plugin Store (SettingsPanePluginStore.xaml - 400 lines)

Avalonia: 0 lines (0%)

Feature Status Notes
Plugin search Missing Search box
Plugin grid Missing Grid of available plugins
Plugin card Missing Icon, name, description, install button
Install plugin Missing Download and install
Update plugin Missing Update available indicator
Uninstall plugin Missing Remove plugin
Plugin filter Missing Filter by category

2.6 Proxy Settings (SettingsPaneProxy.xaml - 80 lines)

Avalonia: 47 lines (~59%)

Setting Status Notes
Enable proxy Done Toggle
Proxy server Done Text input
Proxy port Done Number input
Proxy username Missing Text input
Proxy password Missing Password input

2.7 About Settings (SettingsPaneAbout.xaml - 184 lines)

Avalonia: 25 lines (~14%)

Feature Status Notes
Version display Done Shows version
Check for updates Missing Button + status
Homepage link Missing HyperLink
Documentation link Missing HyperLink
GitHub link Missing HyperLink
Discord link Missing HyperLink
Release notes Missing Opens ReleaseNotesWindow
Open logs folder Missing Button
Open settings folder Missing Button

Settings Progress: ~550/2609 lines (~21%)


3. Custom Controls

Control WPF File Status Description
Card Card.xaml.cs Done Settings card with icon, title, subtitle
ExCard ExCard.xaml.cs Done Expandable card with nested content
CardGroup CardGroup.xaml.cs Done Groups cards with rounded corners
InfoBar InfoBar.xaml.cs Missing Information/warning banner
HyperLink HyperLink.xaml.cs Missing Clickable link control
HotkeyDisplay HotkeyDisplay.xaml.cs Missing Displays hotkey as key badges
InstalledPluginDisplay InstalledPluginDisplay.xaml.cs Missing Plugin info card
InstalledPluginDisplayKeyword InstalledPluginDisplayKeyword.xaml.cs Missing Keyword badge
InstalledPluginDisplayBottomData InstalledPluginDisplayBottomData.xaml.cs Missing Plugin metadata footer

Progress: 3/9 (33%)

Note: Using FluentAvalonia's SettingsExpander for most settings pages instead of custom Card controls.


4. ViewModels

ViewModel WPF Lines Avalonia Lines Status Notes
MainViewModel 2292 ~420 🟡 18% Core query works, missing history/clipboard
ResultsViewModel ~200 ~150 75% Core functionality done
ResultViewModel ~300 ~200 67% Basic display done
SettingWindowViewModel ~100 ~50 🟡 50% Navigation works
GeneralSettingsViewModel ~100 ~400 95% Most settings implemented
PluginViewModel ~150 ~30 🟡 20% Basic list only
PluginStoreItemViewModel ~100 0 0% Not started
WelcomeViewModel ~80 0 0% Not started
SelectBrowserViewModel ~50 0 0% Not started
SelectFileManagerViewModel ~50 0 0% Not started

MainViewModel Missing Features

  • History cycling (up/down arrow)
  • Clipboard paste handling
  • Auto-complete suggestions
  • Text selection handling
  • Preview panel toggle
  • Dialog jump feature
  • Game mode detection
  • Window position memory
  • IME mode control

Progress: ~25%


5. Helpers

Helper Status Description
HotKeyMapper Done Hotkey registration
ImageLoader Done Image caching/loading
FontLoader Done Font loading
GlobalHotkey Done In Infrastructure project
AutoStartup Missing Windows startup registration
SingleInstance Missing Prevent multiple instances
ErrorReporting Missing Error logging/reporting
ExceptionHelper Missing Exception formatting
SingletonWindowOpener Missing Manage singleton windows
WallpaperPathRetrieval Missing Get desktop wallpaper
WindowsMediaPlayerHelper Missing Preview audio files
DataWebRequestFactory Missing Web requests with proxy
SyntaxSugars Missing Extension methods

Progress: 4/13 (31%)


6. Converters

Converter Status Description
HighlightTextConverter Done Bold gold highlighting for matched characters
QuerySuggestionBoxConverter 🟡 Stub Not implemented
BoolToVisibilityConverter Done Boolean to visibility
TextConverter Missing Text transformations
SizeRatioConverter Missing Size calculations
BadgePositionConverter Missing Badge positioning
StringToKeyBindingConverter Missing String to key gesture
OrdinalConverter Missing Number to ordinal (1st, 2nd)
OpenResultHotkeyVisibilityConverter Missing Hotkey badge visibility
IconRadiusConverter Missing Icon corner radius
DiameterToCenterPointConverter Missing Circle center calculation
DateTimeFormatToNowConverter Missing Date/time formatting
BorderClipConverter Missing Border clipping geometry
BoolToIMEConversionModeConverter Missing IME mode conversion

Progress: 3/14 (21%)


7. Core Features

Search & Results

Feature Status Notes
Basic query Done Text input triggers search
Results display Done Shows results with icons
Result selection Done Keyboard navigation
Result activation Done Enter to execute
Context menu Done Shift+Enter
Text highlighting Missing Match highlighting in results
Auto-complete Missing Tab to complete
Query suggestions Missing Suggestion dropdown
History cycling Missing Up/Down through history
Clipboard paste Missing Paste and search

Window Management

Feature Status Notes
Show/Hide toggle Done Global hotkey works
Window dragging Done Drag to move
Hide on focus loss Missing Deactivate handling
Position memory Missing Remember last position
Multi-monitor Missing Position on specific monitor
Topmost mode Missing Always on top option

System Integration

Feature Status Notes
System tray Done Icon with menu
Global hotkey Done Toggle window
Auto-start Missing Start with Windows
Single instance Missing Prevent duplicates
Portable mode Missing Run from USB

Plugin System

Feature Status Notes
Load plugins Done Via PluginManager
Plugin queries Done Action keywords work
Plugin settings UI Missing IPluginSettingProvider
Plugin install Missing From store
Plugin update Missing Check/apply updates
Python plugins Missing Python path config
Node plugins Missing Node path config

Progress: ~45%


8. Theming

Feature Status Notes
Light/Dark/System Done Basic switching
Custom themes Missing Load from .xaml files
Theme list Missing Browse available themes
Theme preview Missing Live preview in settings
Font customization Missing Query/result fonts
Size customization Missing Window/item sizes
Animation speed Missing Transition speed
Backdrop effects Missing Mica/Acrylic
Icon themes Missing Glyph/image icons

Progress: ~15%


9. Animations

Animation Status Notes
Window show/hide Missing Fade/slide animation
Result list Missing Item entrance animation
Context menu Missing Menu slide animation
Settings navigation Missing Page transitions
Progress indicators Missing Loading spinners

Progress: 0%


Priority Recommendations

High Priority (Core UX)

  1. HighlightTextConverter - Search match highlighting
  2. History cycling - Up/Down arrow through history
  3. GeneralSettingsPage - Essential settings (startup, behavior) - DONE
  4. Card/ExCard controls - Required for all settings pages - DONE (using FluentAvalonia SettingsExpander)
  5. Hide on focus loss - Expected behavior

Medium Priority (Feature Completeness)

  1. HotkeySettingsPage - All keyboard shortcuts
  2. ThemeSettingsPage - Theme selection and customization
  3. Plugin settings UI - IPluginSettingProvider integration
  4. Plugin Store - Install/update plugins
  5. Auto-start - Windows startup registration

Lower Priority (Polish)

  1. WelcomeWindow - First-run experience
  2. Animations - Transitions and effects
  3. Message dialogs - Custom message boxes
  4. Error reporting - ReportWindow
  5. Backdrop effects - Mica/Acrylic

File Reference

WPF Source Files

Flow.Launcher/
├── MainWindow.xaml (+ .cs)
├── SettingWindow.xaml
├── WelcomeWindow.xaml
├── ReportWindow.xaml
├── ... (19 total windows)
├── SettingPages/Views/
│   ├── SettingsPaneGeneral.xaml (538 lines)
│   ├── SettingsPaneTheme.xaml (803 lines)
│   ├── SettingsPaneHotkey.xaml (463 lines)
│   ├── SettingsPanePlugins.xaml (141 lines)
│   ├── SettingsPanePluginStore.xaml (400 lines)
│   ├── SettingsPaneProxy.xaml (80 lines)
│   └── SettingsPaneAbout.xaml (184 lines)
├── ViewModel/
│   └── MainViewModel.cs (2292 lines)
├── Helper/ (10 files)
├── Converters/ (14 files)
└── Resources/Controls/ (10 custom controls)

Avalonia Target Files

Flow.Launcher.Avalonia/
├── MainWindow.axaml (+ .cs)
├── Views/
│   ├── ResultListBox.axaml
│   ├── PreviewPanel.axaml
│   ├── Controls/
│   │   ├── HotkeyControl.axaml
│   │   ├── HotkeyRecorderDialog.axaml
│   │   ├── Card.axaml (+ .cs)
│   │   ├── ExCard.axaml (+ .cs)
│   │   └── CardGroup.axaml (+ .cs)
│   └── SettingPages/
│       ├── SettingsWindow.axaml
│       ├── GeneralSettingsPage.axaml (~270 lines)
│       ├── ThemeSettingsPage.axaml (66 lines)
│       ├── HotkeySettingsPage.axaml (26 lines)
│       ├── PluginsSettingsPage.axaml (47 lines)
│       ├── ProxySettingsPage.axaml (47 lines)
│       └── AboutSettingsPage.axaml (25 lines)
├── ViewModel/
│   ├── MainViewModel.cs (~420 lines)
│   ├── SettingPages/
│   │   └── GeneralSettingsViewModel.cs (~400 lines)
│   └── ...
├── Helper/ (4 files)
├── Converters/ (3 files)
└── Themes/
    ├── Base.axaml
    └── Resources.axaml

Build & Test

# Build
dotnet build Flow.Launcher.Avalonia/Flow.Launcher.Avalonia.csproj

# Run
./Output/Debug/Avalonia/Flow.Launcher.Avalonia.exe