Skip to content

Commit 0e00faa

Browse files
authored
Merge pull request #51 from TheJoeFin/dev
Auto refresh and new TitleBar
2 parents 9e5da22 + 6d5d418 commit 0e00faa

File tree

14 files changed

+221
-178
lines changed

14 files changed

+221
-178
lines changed

Simple Icon File Maker/Simple Icon File Maker (Package)/Package.appxmanifest

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<Identity
1010
Name="40087JoeFinApps.SimpleIconFileMaker"
1111
Publisher="CN=153F3B0F-BA3D-4964-8098-71AC78A1DF6A"
12-
Version="1.12.2.0" />
12+
Version="1.13.0.0" />
1313

1414
<Properties>
1515
<DisplayName>Simple Icon File Maker</DisplayName>

Simple Icon File Maker/Simple Icon File Maker (Package)/Simple Icon File Maker (Package).wapproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,13 +120,13 @@
120120
</ProjectReference>
121121
</ItemGroup>
122122
<ItemGroup>
123-
<PackageReference Include="Microsoft.WindowsAppSDK" Version="1.6.250205002">
123+
<PackageReference Include="Microsoft.WindowsAppSDK" Version="1.7.250606001">
124124
<IncludeAssets>build</IncludeAssets>
125125
</PackageReference>
126-
<PackageReference Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.26100.1742">
126+
<PackageReference Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.26100.4654">
127127
<IncludeAssets>build</IncludeAssets>
128128
</PackageReference>
129-
<PackageReference Include="WinUIEx" Version="2.5.1" />
129+
<PackageReference Include="WinUIEx" Version="2.6.0" />
130130
</ItemGroup>
131131
<Import Project="$(WapProjPath)\Microsoft.DesktopBridge.targets" />
132132
</Project>

Simple Icon File Maker/Simple Icon File Maker/Helpers/TitleBarHelper.cs

Lines changed: 0 additions & 91 deletions
This file was deleted.

Simple Icon File Maker/Simple Icon File Maker/Services/LocalSettingsService.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ private async Task InitializeAsync()
5454
{
5555
if (obj is not string str)
5656
return default;
57+
5758
return JsonSerializer.Deserialize<T>(str);
5859
}
5960
}
@@ -76,13 +77,13 @@ public async Task SaveSettingAsync<T>(string key, T value)
7677
{
7778
if (RuntimeHelper.IsMSIX)
7879
{
79-
ApplicationData.Current.LocalSettings.Values[key] = JsonSerializer.Serialize(value?.ToString());
80+
ApplicationData.Current.LocalSettings.Values[key] = JsonSerializer.Serialize(value);
8081
}
8182
else
8283
{
8384
await InitializeAsync();
8485

85-
_settings[key] = JsonSerializer.Serialize(value?.ToString());
86+
_settings[key] = JsonSerializer.Serialize(value);
8687

8788
await Task.Run(() => _fileService.Save(_applicationDataFolder, _localSettingsFile, _settings));
8889
}

Simple Icon File Maker/Simple Icon File Maker/Simple Icon File Maker.csproj

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,15 +39,16 @@
3939

4040
<ItemGroup>
4141
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.4.0" />
42-
<PackageReference Include="CommunityToolkit.WinUI.Controls.SettingsControls" Version="8.2.241112-preview1" />
43-
<PackageReference Include="CommunityToolkit.WinUI.Converters" Version="8.2.241112-preview1" />
44-
<PackageReference Include="CommunityToolkit.WinUI.Helpers" Version="8.2.241112-preview1" />
45-
<PackageReference Include="Magick.NET-Q16-AnyCPU" Version="14.5.0" />
46-
<PackageReference Include="Microsoft.Extensions.Hosting" Version="9.0.2" />
47-
<PackageReference Include="Microsoft.WindowsAppSDK" Version="1.6.250205002" />
48-
<PackageReference Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.26100.1742" />
42+
<PackageReference Include="CommunityToolkit.WinUI.Controls.SettingsControls" Version="8.2.250402" />
43+
<PackageReference Include="CommunityToolkit.WinUI.Converters" Version="8.2.250402" />
44+
<PackageReference Include="CommunityToolkit.WinUI.Helpers" Version="8.2.250402" />
45+
<PackageReference Include="Magick.NET-Q16-AnyCPU" Version="14.7.0" />
46+
<PackageReference Include="Microsoft.Windows.CsWinRT" Version="2.2.0" />
47+
<PackageReference Include="Microsoft.Extensions.Hosting" Version="9.0.7" />
48+
<PackageReference Include="Microsoft.WindowsAppSDK" Version="1.7.250606001" />
49+
<PackageReference Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.26100.4654" />
4950
<PackageReference Include="PropertyChanged.Fody" Version="4.1.0" />
50-
<PackageReference Include="WinUIEx" Version="2.5.1" />
51+
<PackageReference Include="WinUIEx" Version="2.6.0" />
5152
<Manifest Include="$(ApplicationManifest)" />
5253
</ItemGroup>
5354

Simple Icon File Maker/Simple Icon File Maker/ViewModels/MainViewModel.cs

Lines changed: 93 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,38 @@
55
using Windows.Storage.Pickers;
66
using Windows.Storage;
77
using WinRT.Interop;
8+
using System.Timers;
9+
using Microsoft.UI.Dispatching;
810

911
namespace Simple_Icon_File_Maker.ViewModels;
1012

1113
public partial class MainViewModel : ObservableRecipient, INavigationAware
1214
{
15+
private readonly System.Timers.Timer _countdownTimer;
16+
private readonly DispatcherQueue _dispatcherQueue;
17+
private const int CountdownDurationMs = 3000; // 3 seconds
18+
private const int CountdownIntervalMs = 50; // Update every 50ms for smooth progress
19+
private int _countdownElapsedMs = 0;
20+
private System.Timers.Timer _settingsSaveTimer = new();
21+
22+
[ObservableProperty]
23+
private bool isAutoRefreshEnabled = true;
24+
25+
[ObservableProperty]
26+
private double countdownProgress = 0;
27+
28+
[ObservableProperty]
29+
private bool isCountdownActive = false;
30+
31+
public event EventHandler? CountdownCompleted;
32+
33+
private readonly ILocalSettingsService _localSettingsService;
34+
35+
partial void OnIsAutoRefreshEnabledChanged(bool value)
36+
{
37+
_settingsSaveTimer.Stop();
38+
_settingsSaveTimer.Start();
39+
}
1340

1441
[RelayCommand]
1542
public void NavigateToAbout()
@@ -51,18 +78,80 @@ INavigationService NavigationService
5178
get;
5279
}
5380

54-
public MainViewModel(INavigationService navigationService)
81+
public MainViewModel(INavigationService navigationService, ILocalSettingsService localSettingsService)
5582
{
5683
NavigationService = navigationService;
84+
_localSettingsService = localSettingsService;
85+
_dispatcherQueue = DispatcherQueue.GetForCurrentThread();
86+
87+
_countdownTimer = new System.Timers.Timer(CountdownIntervalMs);
88+
_countdownTimer.Elapsed += OnCountdownTick;
89+
_countdownTimer.AutoReset = true;
90+
91+
_settingsSaveTimer.AutoReset = false; // Only save once after the interval
92+
_settingsSaveTimer.Interval = TimeSpan.FromMilliseconds(300).TotalMilliseconds;
93+
_settingsSaveTimer.Elapsed += SettingsSaveTimer_Elapsed;
94+
}
95+
96+
private async void SettingsSaveTimer_Elapsed(object? sender, ElapsedEventArgs e)
97+
{
98+
_settingsSaveTimer.Stop();
99+
100+
await _localSettingsService.SaveSettingAsync<bool>(nameof(IsAutoRefreshEnabled), IsAutoRefreshEnabled);
57101
}
58102

59103
public void OnNavigatedFrom()
60104
{
61-
105+
StopCountdown();
106+
_countdownTimer.Dispose();
107+
}
108+
109+
public async void OnNavigatedTo(object parameter)
110+
{
111+
try
112+
{
113+
IsAutoRefreshEnabled = await _localSettingsService.ReadSettingAsync<bool>(nameof(IsAutoRefreshEnabled));
114+
}
115+
catch (Exception)
116+
{
117+
IsAutoRefreshEnabled = true;
118+
}
119+
}
120+
121+
public void StartCountdown()
122+
{
123+
if (!IsAutoRefreshEnabled)
124+
return;
125+
126+
_countdownElapsedMs = 0;
127+
CountdownProgress = 0;
128+
IsCountdownActive = true;
129+
_countdownTimer.Start();
130+
}
131+
132+
public void StopCountdown()
133+
{
134+
_countdownTimer.Stop();
135+
IsCountdownActive = false;
136+
CountdownProgress = 0;
137+
_countdownElapsedMs = 0;
62138
}
63139

64-
public void OnNavigatedTo(object parameter)
140+
private void OnCountdownTick(object? sender, ElapsedEventArgs e)
65141
{
66-
142+
_dispatcherQueue.TryEnqueue(() =>
143+
{
144+
_countdownElapsedMs += CountdownIntervalMs;
145+
146+
CountdownProgress = (double)_countdownElapsedMs / CountdownDurationMs;
147+
148+
if (_countdownElapsedMs >= CountdownDurationMs)
149+
{
150+
_countdownTimer.Stop();
151+
IsCountdownActive = false;
152+
CountdownProgress = 1.0;
153+
CountdownCompleted?.Invoke(this, EventArgs.Empty);
154+
}
155+
});
67156
}
68157
}

Simple Icon File Maker/Simple Icon File Maker/Views/AboutPage.xaml

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,28 @@
8585
<SymbolIcon Symbol="List" />
8686
</controls:SettingsExpander.HeaderIcon>
8787
<controls:SettingsExpander.Items>
88+
<controls:SettingsCard Header="v 1.13">
89+
<controls:SettingsCard.Description>
90+
<TextBlock>
91+
<LineBreak />
92+
● Auto refresh<LineBreak />
93+
● Use new TitleBar control<LineBreak />
94+
● Show Pro in the TitleBar when it is owned<LineBreak />
95+
● Update packages<LineBreak />
96+
● Bug fixes<LineBreak />
97+
</TextBlock>
98+
</controls:SettingsCard.Description>
99+
</controls:SettingsCard>
100+
<controls:SettingsCard Header="v 1.12">
101+
<controls:SettingsCard.Description>
102+
<TextBlock>
103+
<LineBreak />
104+
● Now make icon files up to 512 x 512<LineBreak />
105+
● Update packages<LineBreak />
106+
● Bug fixes<LineBreak />
107+
</TextBlock>
108+
</controls:SettingsCard.Description>
109+
</controls:SettingsCard>
88110
<controls:SettingsCard Header="v 1.11">
89111
<controls:SettingsCard.Description>
90112
<TextBlock>

Simple Icon File Maker/Simple Icon File Maker/Views/MainPage.xaml

Lines changed: 41 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,13 @@
88
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
99
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
1010
xmlns:models="using:Simple_Icon_File_Maker.Models"
11+
xmlns:toolkitConverters="using:CommunityToolkit.WinUI.Converters"
1112
Loaded="Page_Loaded"
1213
SizeChanged="Page_SizeChanged"
1314
mc:Ignorable="d">
1415
<Page.Resources>
16+
<toolkitConverters:BoolToVisibilityConverter x:Key="BoolVis" />
17+
1518
<Style x:Key="CardStyle" TargetType="Grid">
1619
<Style.Setters>
1720
<Setter Property="BorderThickness" Value="1" />
@@ -405,14 +408,17 @@
405408
<ListView
406409
x:Name="IconSizesListView"
407410
Grid.Row="2"
408-
ItemsSource="{x:Bind IconSizes, Mode=OneWay}"
411+
ItemsSource="{x:Bind IconSizes,
412+
Mode=OneWay}"
409413
SelectionMode="None">
410414
<ListView.ItemTemplate>
411415
<DataTemplate x:DataType="models:IconSize">
412416
<CheckBox
413417
Content="{x:Bind Tooltip}"
414-
IsChecked="{x:Bind IsSelected, Mode=TwoWay}"
415-
IsEnabled="{x:Bind IsEnabled, Mode=OneWay}"
418+
IsChecked="{x:Bind IsSelected,
419+
Mode=TwoWay}"
420+
IsEnabled="{x:Bind IsEnabled,
421+
Mode=OneWay}"
416422
Tapped="CheckBox_Tapped" />
417423
</DataTemplate>
418424
</ListView.ItemTemplate>
@@ -485,11 +491,39 @@
485491
HorizontalAlignment="Center"
486492
VerticalAlignment="Center"
487493
Click="RefreshButton_Click"
488-
Content="&#xE72C;"
489-
FontFamily="{StaticResource SymbolThemeFontFamily}"
490-
FontSize="16"
491494
Style="{StaticResource DefaultButtonStyle}"
492-
ToolTipService.ToolTip="Refresh icon previews" />
495+
ToolTipService.ToolTip="Refresh icon previews, Right-click to change auto refresh option">
496+
<StackPanel Orientation="Horizontal" Spacing="10">
497+
<Viewbox Height="16">
498+
<SymbolIcon Symbol="Refresh" />
499+
</Viewbox>
500+
<TextBlock Text="Refresh" />
501+
<ProgressRing
502+
x:Name="CountdownRing"
503+
Width="16"
504+
Height="16"
505+
Foreground="{ThemeResource SystemColorButtonTextBrush}"
506+
IsActive="{x:Bind ViewModel.IsCountdownActive,
507+
Mode=OneWay}"
508+
IsIndeterminate="False"
509+
Maximum="1"
510+
Minimum="0"
511+
Visibility="{x:Bind ViewModel.IsCountdownActive,
512+
Converter={StaticResource BoolVis},
513+
Mode=OneWay}"
514+
Value="{x:Bind ViewModel.CountdownProgress,
515+
Mode=OneWay}" />
516+
</StackPanel>
517+
<Button.ContextFlyout>
518+
<MenuFlyout>
519+
<ToggleMenuFlyoutItem
520+
x:Name="IsAutoRefreshing"
521+
IsChecked="{x:Bind ViewModel.IsAutoRefreshEnabled,
522+
Mode=TwoWay}"
523+
Text="Auto Refresh" />
524+
</MenuFlyout>
525+
</Button.ContextFlyout>
526+
</Button>
493527
<TextBlock
494528
VerticalAlignment="Center"
495529
Style="{StaticResource BodyStrongTextBlockStyle}"

0 commit comments

Comments
 (0)