mirror of
https://github.com/Flow-Launcher/Flow.Launcher.git
synced 2026-03-11 08:54:32 +00:00
Text highlighting was already implemented via HighlightTextConverter
and TitleHighlightData/SubTitleHighlightData in ResultViewModel.
💘 Generated with Crush
Assisted-by: Kimi for Coding via Crush <crush@charm.land>
24 KiB
24 KiB
Flow.Launcher Avalonia Migration Checklist
Overall Progress: ~60-65%
Last Updated: February 2026
Table of Contents
- Windows & Dialogs
- Settings Pages
- Custom Controls
- ViewModels
- Helpers
- Converters
- Core Features
- Theming
- 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 |
| PreviewPanel | PreviewPanel.xaml |
✅ Done | Result preview |
| 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 (using dialog instead) |
| CustomQueryHotkeySetting | CustomQueryHotkeySetting.xaml |
❌ Missing | Custom hotkey dialog |
| CustomShortcutSetting | CustomShortcutSetting.xaml |
❌ Missing | Shortcut editor |
Progress: 6/19 (32%)
2. Settings Pages
2.1 General Settings (SettingsPaneGeneral.xaml - 538 lines)
Avalonia: ~270 lines (~95% DONE)
| 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) |
| Node directory | ✅ Done | NodePath (display) |
| 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: ~70 lines (~35% DONE)
| 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 (font family) |
| Query box font size | ✅ Done | Settings.QueryBoxFontSize |
| Result font | ❌ Missing | Settings.ResultFont (font family) |
| Result font size | ✅ Done | 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 | ✅ Done | Settings.UseGlyphIcons |
| Max results | ✅ Done | Settings.MaxResultsToShow |
| 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 (~10% DONE)
| 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: ~170 lines (~90% DONE)
| Feature | Status | Notes |
|---|---|---|
| Plugin list | ✅ Done | Expandable list view |
| Plugin icon | ✅ Done | Shows icon |
| Plugin name | ✅ Done | Shows name |
| Plugin enable/disable | ✅ Done | Toggle switch |
| Plugin details panel | ✅ Done | Description, author, version, init/query time |
| Plugin settings UI | ✅ Done | IPluginSettingProvider integration (Avalonia + WPF fallback) |
| Action keywords editor | ✅ Done | Dialog-based editor |
| Plugin priority | ✅ Done | Number box |
| Search delay per plugin | ✅ Done | Number box |
| Home page enable/disable | ✅ Done | Toggle switch |
| Display mode selector | ✅ Done | OnOff/Priority/SearchDelay/HomeOnOff |
| Plugin directory button | ✅ Done | Opens folder |
| Source code link | ✅ Done | Opens website |
| Uninstall plugin | ✅ Done | With confirmation dialog |
| Help dialog | ✅ Done | Priority/search delay/home tips |
2.5 Plugin Store (SettingsPanePluginStore.xaml - 400 lines)
Avalonia: ~200 lines (~95% DONE)
| Feature | Status | Notes |
|---|---|---|
| Plugin search | ✅ Done | Search box with fuzzy search |
| Plugin grid | ✅ Done | ItemsRepeater with UniformGridLayout |
| Plugin card | ✅ Done | Icon, name, description, author |
| Install plugin | ✅ Done | Download and install |
| Update plugin | ✅ Done | Update available indicator + button |
| Uninstall plugin | ✅ Done | Remove plugin |
| Plugin filter | ✅ Done | Filter by language (.NET/Python/Node/Executable) |
| Refresh plugins | ✅ Done | Button to refresh manifest |
| Check updates | ✅ Done | Check for plugin updates |
| Local install | ✅ Done | Install from .zip file |
| Loading indicator | ✅ Done | Progress ring while loading |
| Flyout details | ✅ Done | Full details on click |
| Website/Source links | ✅ Done | Open in browser |
2.6 Proxy Settings (SettingsPaneProxy.xaml - 80 lines)
Avalonia: ~47 lines (~100% DONE)
| Setting | Status | Notes |
|---|---|---|
| Enable proxy | ✅ Done | Toggle |
| Proxy server | ✅ Done | Text input |
| Proxy port | ✅ Done | Number input |
| Proxy username | ✅ Done | Text input |
| Proxy password | ✅ Done | Password input (masked) |
2.7 About Settings (SettingsPaneAbout.xaml - 184 lines)
Avalonia: ~25 lines (~40% DONE)
| Feature | Status | Notes |
|---|---|---|
| Version display | ✅ Done | Shows version |
| Check for updates | ❌ Missing | Button + status |
| Homepage link | ✅ Done | Button |
| Documentation link | ❌ Missing | HyperLink |
| GitHub link | ✅ Done | Button |
| Discord link | ❌ Missing | HyperLink |
| Release notes | ❌ Missing | Opens ReleaseNotesWindow |
| Open logs folder | ❌ Missing | Button |
| Open settings folder | ❌ Missing | Button |
Settings Progress: ~1100/2609 lines (~42%)
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 |
| HotkeyControl | HotkeyControl.xaml |
✅ Done | Hotkey display and recording |
| HotkeyRecorderDialog | HotkeyControlDialog.xaml |
✅ Done | Dialog for recording hotkeys |
| 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 (replaced by Expander) |
| InstalledPluginDisplayKeyword | InstalledPluginDisplayKeyword.xaml.cs |
❌ Missing | Keyword badge (integrated) |
| InstalledPluginDisplayBottomData | InstalledPluginDisplayBottomData.xaml.cs |
❌ Missing | Plugin metadata footer (integrated) |
Progress: 5/9 (56%)
Note: Using FluentAvalonia's
SettingsExpanderfor most settings pages instead of custom Card controls. Plugin display uses native Avalonia Expander.
4. ViewModels
| ViewModel | WPF Lines | Avalonia Lines | Status | Notes |
|---|---|---|---|---|
| MainViewModel | 2292 | ~490 | 🟡 21% | 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 | ~390 | ✅ 95% | Most settings implemented |
| ThemeSettingsViewModel | ~150 | ~116 | 🟡 77% | Basic theme + fonts done |
| HotkeySettingsViewModel | ~200 | ~31 | 🟡 15% | Only toggle hotkey done |
| PluginsSettingsViewModel | ~300 | ~220 | ✅ 73% | Full plugin management |
| PluginStoreSettingsViewModel | ~250 | ~200 | ✅ 80% | Store functionality complete |
| PluginStoreItemViewModel | ~100 | ~113 | ✅ 95% | Item display + actions |
| PluginItemViewModel | N/A | ~277 | ✅ 90% | Individual plugin management |
| ProxySettingsViewModel | ~80 | ~81 | ✅ 100% | All proxy settings |
| AboutSettingsViewModel | ~100 | ~28 | 🟡 28% | Basic version + links |
| 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: ~45%
5. Helpers
| Helper | Status | Description |
|---|---|---|
| HotKeyMapper | ✅ Done | Hotkey registration |
| ImageLoader | ✅ Done | Image caching/loading |
| FontLoader | ✅ Done | Font loading |
| GlobalHotkey | ✅ Done | In Infrastructure project |
| TextBlockHelper | ✅ Done | Text formatting helpers |
| 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: 5/13 (38%)
6. Converters
| Converter | Status | Description |
|---|---|---|
| BoolToIsVisibleConverter | ✅ Done | Boolean to IsVisible |
| TranslationConverter | ✅ Done | Localization converter |
| CommonConverters | ✅ Done | Various common converters |
| HighlightTextConverter | ❌ Missing | Bold gold highlighting for matched characters |
| QuerySuggestionBoxConverter | 🟡 Stub | Not implemented |
| 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/16 (19%)
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 | ✅ Done | Match highlighting in results (bold gold) |
| 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 | ✅ Done | Deactivate handling |
| Position memory | ❌ Missing | Remember last position |
| Multi-monitor | ❌ Missing | Position on specific monitor |
| Topmost mode | ✅ Done | 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 | ✅ Done | IPluginSettingProvider (Avalonia native + WPF fallback) |
| Plugin install | ✅ Done | From store |
| Plugin update | ✅ Done | Check/apply updates |
| Plugin uninstall | ✅ Done | With confirmation |
| Python plugins | ✅ Partial | Python path config (display only) |
| Node plugins | ✅ Partial | Node path config (display only) |
Progress: ~55%
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 | 🟡 Partial | Font sizes done, font families missing |
| Size customization | ❌ Missing | Window/item sizes |
| Animation speed | ❌ Missing | Transition speed |
| Backdrop effects | ❌ Missing | Mica/Acrylic |
| Icon themes | ❌ Missing | Glyph/image icons |
Progress: ~20%
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 | ✅ Done | Loading spinners (FluentAvalonia) |
Progress: ~10%
Priority Recommendations
High Priority (Core UX)
- HighlightTextConverter - Search match highlighting
- History cycling - Up/Down arrow through history
- GeneralSettingsPage - Essential settings (startup, behavior) - DONE
- Card/ExCard controls - Required for all settings pages - DONE (using FluentAvalonia SettingsExpander)
- Hide on focus loss - Expected behavior - DONE
Medium Priority (Feature Completeness)
- HotkeySettingsPage - All keyboard shortcuts (only toggle done)
- ThemeSettingsPage - Theme selection and customization (partial)
- Plugin settings UI - IPluginSettingProvider integration - DONE
- Plugin Store - Install/update plugins - DONE
- Auto-start - Windows startup registration
Lower Priority (Polish)
- WelcomeWindow - First-run experience
- Animations - Transitions and effects
- Message dialogs - Custom message boxes
- Error reporting - ReportWindow
- 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 (~70 lines)
│ ├── HotkeySettingsPage.axaml (~26 lines)
│ ├── PluginsSettingsPage.axaml (~170 lines)
│ ├── PluginStoreSettingsPage.axaml (~200 lines)
│ ├── ProxySettingsPage.axaml (~47 lines)
│ └── AboutSettingsPage.axaml (~25 lines)
├── ViewModel/
│ ├── MainViewModel.cs (~490 lines)
│ ├── SettingPages/
│ │ ├── GeneralSettingsViewModel.cs (~390 lines)
│ │ ├── ThemeSettingsViewModel.cs (~116 lines)
│ │ ├── HotkeySettingsViewModel.cs (~31 lines)
│ │ ├── PluginsSettingsViewModel.cs (~220 lines)
│ │ ├── PluginStoreSettingsViewModel.cs (~200 lines)
│ │ ├── PluginStoreItemViewModel.cs (~113 lines)
│ │ ├── PluginItemViewModel.cs (~277 lines)
│ │ ├── ProxySettingsViewModel.cs (~81 lines)
│ │ └── AboutSettingsViewModel.cs (~28 lines)
│ └── ...
├── Helper/
│ ├── FontLoader.cs
│ ├── GlobalHotkey.cs
│ ├── HotKeyMapper.cs
│ ├── ImageLoader.cs
│ └── TextBlockHelper.cs
├── Converters/
│ ├── BoolToIsVisibleConverter.cs
│ ├── CommonConverters.cs
│ └── TranslationConverter.cs
└── 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