Commit graph

10 commits

Author SHA1 Message Date
Hongtao Zhang
dda587493b Migrate Program plugin settings to Avalonia and fix scroll issues
- Update ISettingProvider to support CreateSettingPanelAvalonia
- Create native Avalonia settings UI for Program Plugin (ProgramSetting.axaml)
- Implement ProgramSettingViewModel using CommunityToolkit.Mvvm
- Update PluginsSettingsViewModel to detect and load native Avalonia settings
- Replace ListBox with ItemsControl in PluginsSettingsPage to fix auto-scroll issues when expanding settings
- Align Avalonia package versions (11.2.3) across projects to fix type load errors
2026-01-19 00:06:36 -08:00
Hongtao Zhang
fb9721c7f2 refactor: move history storage to infrastructure and implement WPF settings window host in Avalonia 2026-01-18 23:28:56 -08:00
Hongtao Zhang
0e1af2279b Implement WPF plugin settings hosting in Avalonia
- Created WpfControlHost to host WPF controls using HwndSource

- Updated PluginItemViewModel to load settings via ISettingProvider

- Updated PluginsSettingsPage to display settings in an expander
2026-01-18 20:01:00 -08:00
Hongtao Zhang
1209ca5194 Fix flickering & add result highlighting
- Implemented channel-based debouncing (20ms) in MainViewModel to fix result flickering (matches WPF behavior)

- Added ResultForUpdate struct and ProcessResultUpdatesAsync for batching updates

- Added HighlightTextConverter and TextBlockHelper for bolding matched query terms

- Updated ResultListBox to display highlighted title and subtitle
2026-01-18 13:13:05 -08:00
Hongtao Zhang
1d945654c1 Expand GeneralSettingsPage with ~25 settings using FluentAvalonia SettingsExpander
- Add Card, ExCard, CardGroup custom controls for settings pages
- Update GeneralSettingsViewModel with new properties:
  - Startup: UseLogonTaskForStartup, HideOnStartup
  - Behavior: HideNotifyIcon, IgnoreHotkeysOnFullscreen, AlwaysPreview
  - Updates: AutoUpdates, AutoUpdatePlugins
  - Search: SearchPrecision, LastQueryMode, SearchDelay
  - Home: ShowHomePage, ShowHistoryResults, MaxHistoryResults
  - Misc: AutoRestart, ShowWarning, AlwaysStartEn, ShouldUsePinyin
- Rewrite GeneralSettingsPage.axaml using SettingsExpander pattern
- Update migration checklist to ~35-40% progress
2026-01-18 02:25:47 -08:00
Hongtao Zhang
0f9b9329dd Add hotkey recorder with manual modifier tracking
- Add HotkeyRecorderDialog with global keyboard hook for capturing hotkeys
- Implement manual modifier state tracking to handle swallowed key events
- Add HotkeyControl button that opens the recorder dialog
- Add CheckAvailability and RemoveToggleHotkey to HotKeyMapper
- Expose GetKeyFromVk helper in GlobalHotkey infrastructure
- Add Settings pages (General, Plugin, Theme, Proxy, About)
- Add PreviewPanel for result previews in main window
- Fix hook reuse issue by clearing callback on close instead of disposing
2026-01-18 02:10:53 -08:00
Hongtao Zhang
29b26643cc Improve glyph support and embed Segoe Fluent Icons
- Embed SegoeFluentIcons.ttf as an AvaloniaResource
- Register SegoeFluentIcons FontFamily in App.axaml using avares URI
- Create FontLoader helper for robust font resolution (Embedded > System > File)
- Add safety checks to FontLoader to prevent rendering crashes if fonts are invalid
- Update ResultViewModel and ResultListBox to use resolved GlyphFontFamily
2026-01-17 12:50:07 -08:00
Hongtao Zhang
ed668f3716 Add glyph icon support for results
- Add Glyph and GlyphAvailable properties to ResultViewModel
- Set Glyph from plugin Result when creating result items
- Add resultGlyph style matching icon size (32x32)
- Update ResultListBox to show glyph or image icon based on ShowGlyph property
- ShowGlyph = true when UseGlyphIcons is enabled AND glyph is available
2026-01-15 23:41:11 -08:00
Hongtao Zhang
f3d3f80db8 Add DynamicData sorting, result persistence, and Windows Shell icon loading
- Use DynamicData SourceList with automatic sorting by score descending
- Add ReplaceResults() with EditDiff for minimal UI updates (reduces flickering)
- Keep previous results visible while typing until new results arrive
- Add ImageLoader with Windows Shell API (IShellItemImageFactory) for exe/ico icons
- Use AlphaFormat.Unpremul to correctly render transparent icons without white borders
- Query all plugins in parallel and merge/sort results globally
2026-01-15 00:26:27 -08:00
Hongtao Zhang
4120407ac3 Add initial Avalonia UI project for migration
Create Flow.Launcher.Avalonia project as foundation for migrating from WPF to Avalonia UI framework.

Key components:
- MainWindow with query box and results list (matching WPF layout)
- ViewModels: MainViewModel, ResultsViewModel, ResultViewModel
- Themes/Base.axaml with converted styles from WPF
- FluentAvaloniaUI for Windows 11 styling
- References existing Core/Infrastructure/Plugin projects

The project builds and runs alongside the existing WPF application.
This is Phase 1 of the incremental migration approach.
2026-01-14 23:01:35 -08:00