diff --git a/src/ClipCMD/App.axaml b/src/ClipCMD/App.axaml index 0d29022..9f19caa 100644 --- a/src/ClipCMD/App.axaml +++ b/src/ClipCMD/App.axaml @@ -20,4 +20,16 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/src/ClipCMD/App.axaml.cs b/src/ClipCMD/App.axaml.cs index fea6b25..524f3f5 100644 --- a/src/ClipCMD/App.axaml.cs +++ b/src/ClipCMD/App.axaml.cs @@ -56,4 +56,23 @@ public partial class App : Application base.OnFrameworkInitializationCompleted(); } + + private void TrayIcon_Clicked(object? sender, EventArgs e) + { + if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop && desktop.MainWindow is not null) + { + desktop.MainWindow.WindowState = Avalonia.Controls.WindowState.Normal; + desktop.MainWindow.Show(); + desktop.MainWindow.Activate(); + } + } + + private void NativeMenuItem_Click_Quit(object? sender, EventArgs e) + { + if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) + { + Settings.SaveSettings(); + desktop.Shutdown(); + } + } } \ No newline at end of file diff --git a/src/ClipCMD/Assets/avalonia-logo.ico b/src/ClipCMD/Assets/avalonia-logo.ico deleted file mode 100644 index da8d49f..0000000 Binary files a/src/ClipCMD/Assets/avalonia-logo.ico and /dev/null differ diff --git a/src/ClipCMD/Assets/logo.ico b/src/ClipCMD/Assets/logo.ico new file mode 100644 index 0000000..6d06cd8 Binary files /dev/null and b/src/ClipCMD/Assets/logo.ico differ diff --git a/src/ClipCMD/ClipCmd.csproj b/src/ClipCMD/ClipCmd.csproj index 30ab02a..17a6b6a 100644 --- a/src/ClipCMD/ClipCmd.csproj +++ b/src/ClipCMD/ClipCmd.csproj @@ -4,12 +4,18 @@ enable latest true + 1.0.0.0 + false + + + + diff --git a/src/ClipCMD/ViewModels/EditorViewModel.cs b/src/ClipCMD/ViewModels/EditorViewModel.cs index 30aa479..aea18bd 100644 --- a/src/ClipCMD/ViewModels/EditorViewModel.cs +++ b/src/ClipCMD/ViewModels/EditorViewModel.cs @@ -8,7 +8,7 @@ internal class EditorViewModel : ViewModelBase { private readonly ClipCmdCommandHandler clipCmdCommandHandler; - public string Title => $"ClipCMD Editor - {Name}"; + public new string Title => $"{base.Title} - Editing {Name}"; public string Name { get; } diff --git a/src/ClipCMD/ViewModels/InputDialogViewModel.cs b/src/ClipCMD/ViewModels/InputDialogViewModel.cs index 1d44928..de8e1c8 100644 --- a/src/ClipCMD/ViewModels/InputDialogViewModel.cs +++ b/src/ClipCMD/ViewModels/InputDialogViewModel.cs @@ -8,7 +8,7 @@ namespace ClipCmd.ViewModels; internal class InputDialogViewModel(string title, string defaultValue = "") : ViewModelBase { - public string Title { get; set; } = title; + public new string Title { get; set; } = title; public string Value { get; set; } = defaultValue; diff --git a/src/ClipCMD/ViewModels/ViewModelBase.cs b/src/ClipCMD/ViewModels/ViewModelBase.cs index 1ee54b7..62c4e32 100644 --- a/src/ClipCMD/ViewModels/ViewModelBase.cs +++ b/src/ClipCMD/ViewModels/ViewModelBase.cs @@ -1,7 +1,26 @@ using ReactiveUI; +using System.Diagnostics; +using System.Reflection; + namespace ClipCmd.ViewModels; public class ViewModelBase : ReactiveObject { + public string Title + { + get + { + string title = "ClipCMD"; + Assembly assembly = Assembly.GetExecutingAssembly(); + FileVersionInfo fileVersionInfo = FileVersionInfo.GetVersionInfo(assembly.Location); + string? version = fileVersionInfo.ProductVersion; + +#if DEBUG + return $"{title} - Dev {version}"; +#else + return $"{title} - {version}"; +#endif + } + } } \ No newline at end of file diff --git a/src/ClipCMD/Views/EditorWindow.axaml b/src/ClipCMD/Views/EditorWindow.axaml index fc5b5ce..80297e3 100644 --- a/src/ClipCMD/Views/EditorWindow.axaml +++ b/src/ClipCMD/Views/EditorWindow.axaml @@ -8,6 +8,7 @@ x:Class="ClipCmd.Views.EditorWindow" x:DataType="vm:EditorViewModel" Title="{Binding Title}" + Icon="/Assets/logo.ico" Width="800" Height="450" WindowStartupLocation="CenterScreen" Loaded="Window_Loaded"> diff --git a/src/ClipCMD/Views/MainWindow.axaml b/src/ClipCMD/Views/MainWindow.axaml index 4e81e1c..74a8ad7 100644 --- a/src/ClipCMD/Views/MainWindow.axaml +++ b/src/ClipCMD/Views/MainWindow.axaml @@ -7,8 +7,10 @@ xmlns:views="clr-namespace:ClipCmd.Views" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" x:Class="ClipCmd.Views.MainWindow" - Icon="/Assets/avalonia-logo.ico" - Title="ClipCmd" Width="800" Height="450"> + x:DataType="vm:ViewModelBase" + Icon="/Assets/logo.ico" + Title="{Binding Title}" Width="800" Height="450" + Closing="Window_Closing"> \ No newline at end of file diff --git a/src/ClipCMD/Views/MainWindow.axaml.cs b/src/ClipCMD/Views/MainWindow.axaml.cs index b8ead51..04378a1 100644 --- a/src/ClipCMD/Views/MainWindow.axaml.cs +++ b/src/ClipCMD/Views/MainWindow.axaml.cs @@ -1,10 +1,21 @@ using Avalonia.Controls; +using Avalonia.Controls.ApplicationLifetimes; namespace ClipCmd.Views; + public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } + + private void Window_Closing(object? sender, WindowClosingEventArgs e) + { + if (Avalonia.Application.Current?.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop && desktop.MainWindow is not null) + { + desktop.MainWindow.Hide(); + e.Cancel = true; + } + } } \ No newline at end of file