1010using Avalonia . Layout ;
1111using Avalonia . LogicalTree ;
1212using Avalonia . Media ;
13+ using MultiRPC . Extensions ;
1314using MultiRPC . Setting ;
1415using MultiRPC . Setting . Settings ;
1516using MultiRPC . Theming ;
1617using MultiRPC . UI . Controls ;
1718
1819namespace MultiRPC . UI . Pages . Theme ;
1920
21+ //TODO: Make it faster when loading in the theme
2022//TODO: Add Showing/Active/Editing Text
2123//TODO: Disable Remove button on active theme
2224//TODO: Add Edit button when theme editor has progress
@@ -41,9 +43,11 @@ public void Initialize(bool loadXaml)
4143 return ;
4244 }
4345
44- wppThemes . Children . AddRange (
45- Directory . EnumerateFiles ( _themeLocation )
46- . Select ( MakePreviewUI ) ) ;
46+ _ = Task . Run ( ( ) =>
47+ {
48+ var files = Directory . GetFiles ( _themeLocation ) ;
49+ MakePreviewUIs ( files ) ;
50+ } ) ;
4751 }
4852
4953 private void OnAttachedToLogicalTree ( object ? sender , LogicalTreeAttachmentEventArgs e )
@@ -64,7 +68,22 @@ private void OnDetachedFromLogicalTree(object? sender, LogicalTreeAttachmentEven
6468 private async void BtnAdd_OnClick ( object ? sender , RoutedEventArgs e ) => await GetTheme ( false ) ;
6569 private async void BtnAddAndApply_OnClick ( object ? sender , RoutedEventArgs e ) => await GetTheme ( true ) ;
6670
67- private Control MakePreviewUI ( string file ) => MakePreviewUI ( Theming . Theme . Load ( file ) , file ) ;
71+ private async void MakePreviewUIs ( string [ ] files )
72+ {
73+ foreach ( var file in files )
74+ {
75+ /*Funnily enough, if we load in things too
76+ fast then it'll make the whole UI unresponsive*/
77+ await Task . Delay ( 50 ) ;
78+ var theme = Theming . Theme . Load ( file ) ;
79+ this . RunUILogic ( ( ) =>
80+ {
81+ var control = MakePreviewUI ( theme , file ) ;
82+ wppThemes . Children . Add ( control ) ;
83+ } ) ;
84+ }
85+ }
86+
6887 private Control MakePreviewUI ( Theming . Theme ? theme , string ? file = null )
6988 {
7089 if ( theme == null )
@@ -90,7 +109,7 @@ private Control MakePreviewUI(Theming.Theme? theme, string? file = null)
90109 {
91110 DataContext = Language . GetLanguage ( "Remove" ) ,
92111 [ ! ContentProperty ] = new Binding ( "TextObservable^" ) ,
93- IsEnabled = editButton . IsEnabled ,
112+ IsEnabled = false , // editButton.IsEnabled,
94113 Tag = theme ,
95114 } ;
96115 removeButton . Click += RemoveButtonOnClick ;
@@ -123,10 +142,14 @@ private Control MakePreviewUI(Theming.Theme? theme, string? file = null)
123142 } ;
124143
125144 var themeUI = new ThemePreview ( theme )
126- { Margin = new Thickness ( 0 , 0 , 15 , 15 ) } ;
145+ {
146+ Margin = new Thickness ( 0 , 0 , 15 , 15 )
147+ } ;
127148 themeUI . PointerEnter += ThemeUIOnPointerEnter ;
128149 themeUI . PointerLeave += ThemeUIOnPointerLeave ;
129150 themeUI . DoubleTapped += ThemeUIOnDoubleTapped ;
151+ themeUI . AttachedToLogicalTree += ( sender , args ) => _ = Task . Run ( theme . ReloadAssets ) ;
152+ themeUI . DetachedFromLogicalTree += ( sender , args ) => _ = Task . Run ( theme . UnloadAssets ) ;
130153 return new StackPanel
131154 {
132155 Children =
@@ -137,25 +160,33 @@ private Control MakePreviewUI(Theming.Theme? theme, string? file = null)
137160 } ;
138161 }
139162
163+ private Theming . Theme ? _tmpTheme ;
140164 private void ThemeUIOnPointerLeave ( object ? sender , PointerEventArgs e )
141165 {
142166 //We want to restore the old theme if it didn't become the new active theme
143167 var th = ( ThemePreview ) sender ! ;
144- if ( _activeTheme != th . Theme )
168+ if ( _tmpTheme != null
169+ && _activeTheme != th . Theme )
145170 {
146171 _activeTheme ? . Apply ( ) ;
172+ _tmpTheme = null ;
147173 }
148174 }
149175
150176 private async void ThemeUIOnPointerEnter ( object ? sender , PointerEventArgs e )
151177 {
152- await Task . Delay ( 1000 ) ;
178+ await Task . Delay ( 500 ) ;
153179 var th = ( ThemePreview ) sender ! ;
154- if ( _activeTheme != th . Theme
155- && th . IsPointerOver )
180+
181+ this . RunUILogic ( ( ) =>
156182 {
157- th . Theme . Apply ( ) ;
158- }
183+ if ( _activeTheme != th . Theme
184+ && th . IsPointerOver )
185+ {
186+ _tmpTheme = th . Theme ;
187+ th . Theme . Apply ( ) ;
188+ }
189+ } ) ;
159190 }
160191
161192 private readonly GeneralSettings _generalSettings = SettingManager < GeneralSettings > . Setting ;
0 commit comments