diff --git a/README.md b/README.md index 0ce6286..6144562 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,7 @@ A application brings the ability to draw on your screen - [Material Design in XAML](https://github.com/MaterialDesignInXAML/MaterialDesignInXamlToolkit) - [ValueConverters.NET](https://github.com/thomasgalliker/ValueConverters.NET) - [WPF.JoshSmith.Controls.DragCanvas](https://github.com/denxorz/WPF.JoshSmith.Controls.DragCanvas) +- [Velopack](https://github.com/velopack/velopack) - Moq.AutoMocker - System.Text.Json - Microsoft.Extensions.Hosting diff --git a/SketchNow/App.xaml.cs b/SketchNow/App.xaml.cs index e3c6ac7..b7ea734 100644 --- a/SketchNow/App.xaml.cs +++ b/SketchNow/App.xaml.cs @@ -1,5 +1,7 @@ using CommunityToolkit.Mvvm.Messaging; + using MaterialDesignThemes.Wpf; + using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; @@ -11,6 +13,7 @@ using System.Windows.Threading; using Velopack; +using Velopack.Sources; namespace SketchNow; @@ -22,10 +25,29 @@ public partial class App : Application [STAThread] private static void Main(string[] args) { +#if !DEBUG VelopackApp.Build().Run(); + UpdateMyApp().GetAwaiter().GetResult(); +#endif MainAsync(args).GetAwaiter().GetResult(); } +#if !DEBUG + private static async Task UpdateMyApp() + { + var mgr = new UpdateManager(new GithubSource("https://github.com/SketchNow/SketchNow.WPF", null, false ,null)); + // check for new version + var newVersion = await mgr.CheckForUpdatesAsync(); + if (newVersion == null) + return; // no update available + + // download new version + await mgr.DownloadUpdatesAsync(newVersion); + + // install new version and restart app + mgr.ApplyUpdatesAndRestart(newVersion); + } +#endif private static async Task MainAsync(string[] args) { using IHost host = CreateHostBuilder(args).Build(); diff --git a/SketchNow/ViewModels/MainWindowViewModel.cs b/SketchNow/ViewModels/MainWindowViewModel.cs index 704c5af..9e17c7e 100644 --- a/SketchNow/ViewModels/MainWindowViewModel.cs +++ b/SketchNow/ViewModels/MainWindowViewModel.cs @@ -15,28 +15,49 @@ public partial class MainWindowViewModel : ObservableObject { [ObservableProperty] private CanvasPages _canvasPages = new(); private int _previousPageIndex = 0; - [ObservableProperty] private ObservableCollection _colorList = [Color.FromRgb(28, 27, 31), Colors.White, Color.FromRgb(255, 26, 0), Color.FromRgb(47, 47, 255), Color.FromRgb(0, 174, 128), Color.FromRgb(157, 118, 241), Color.FromRgb(255, 219, 29), Color.FromRgb(234, 43, 180)]; + + [ObservableProperty] private ObservableCollection _colorList = + [ + Color.FromRgb(28, 27, 31), Colors.White, Color.FromRgb(255, 26, 0), Color.FromRgb(47, 47, 255), + Color.FromRgb(0, 174, 128), Color.FromRgb(157, 118, 241), Color.FromRgb(255, 219, 29), + Color.FromRgb(234, 43, 180) + ]; + [ObservableProperty] private Color _selectedColor = Colors.Transparent; [ObservableProperty] private ObservableCollection _strokeSizeList = [5, 7, 9, 11, 13, 20]; [ObservableProperty] private double _selectedStrokeSize; - [ObservableProperty] private DrawingAttributes _currentDrawingAttributes = new() { Color = Colors.Transparent, IgnorePressure = false, FitToCurve = true, Height = 5, Width = 5 }; + + [ObservableProperty] private DrawingAttributes _currentDrawingAttributes = new() + { + Color = Colors.Transparent, + IgnorePressure = false, + FitToCurve = true, + Height = 5, + Width = 5 + }; + [ObservableProperty] private InkCanvasEditingMode _selectedEditingMode = InkCanvasEditingMode.None; + public enum WhiteBoardMode { Screen = 0, - MuiltPages = 1 + MultiPages = 1 } + [ObservableProperty] private int _selectedToolIndex = 0; [ObservableProperty] private int _selectedCanvasModeIndex = (int)WhiteBoardMode.Screen; [ObservableProperty] private bool _isMultiPageMode = false; [ObservableProperty] private bool _useEraseByStroke = true; [ObservableProperty] private bool _useFitToCurve = true; [ObservableProperty] private Brush _inkCanvasBackground = new SolidColorBrush(Color.FromArgb(0, 0, 0, 0)); - - partial void OnSelectedStrokeSizeChanged(double value) => CurrentDrawingAttributes.Width = CurrentDrawingAttributes.Height = value; + + partial void OnSelectedStrokeSizeChanged(double value) => + CurrentDrawingAttributes.Width = CurrentDrawingAttributes.Height = value; + partial void OnSelectedColorChanged(Color value) => CurrentDrawingAttributes.Color = value; partial void OnUseEraseByStrokeChanged(bool value) => OnSelectedToolIndexChanged(SelectedToolIndex); partial void OnUseFitToCurveChanged(bool value) => CurrentDrawingAttributes.FitToCurve = value; + partial void OnSelectedToolIndexChanged(int value) { SelectedEditingMode = value switch @@ -48,9 +69,13 @@ partial void OnSelectedToolIndexChanged(int value) _ => InkCanvasEditingMode.None }; } + + [RelayCommand] + private void ToggleEditMode(int value) => SelectedToolIndex = value; + partial void OnSelectedCanvasModeIndexChanged(int value) { - IsMultiPageMode = value == (int)WhiteBoardMode.MuiltPages; + IsMultiPageMode = value == (int)WhiteBoardMode.MultiPages; switch (value) { case (int)WhiteBoardMode.Screen: @@ -59,7 +84,7 @@ partial void OnSelectedCanvasModeIndexChanged(int value) _previousPageIndex = CanvasPages.SelectedIndex; CanvasPages.SelectedIndex = 0; break; - case (int)WhiteBoardMode.MuiltPages: + case (int)WhiteBoardMode.MultiPages: InkCanvasBackground = new SolidColorBrush(Colors.White); if (CanvasPages.SelectedIndex == 0) if (CanvasPages.Length == 1) @@ -69,9 +94,14 @@ partial void OnSelectedCanvasModeIndexChanged(int value) break; } } + + [RelayCommand] + private void ToggleMultiPageMode(bool value) => SelectedCanvasModeIndex = + value ? (int)WhiteBoardMode.MultiPages : (int)WhiteBoardMode.Screen; + [RelayCommand] private static void CloseProgram() { Application.Current.Shutdown(); } -} +} \ No newline at end of file diff --git a/SketchNow/Views/MainWindow.xaml b/SketchNow/Views/MainWindow.xaml index 8c02798..0cfad5b 100644 --- a/SketchNow/Views/MainWindow.xaml +++ b/SketchNow/Views/MainWindow.xaml @@ -9,6 +9,7 @@ xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:vms="clr-namespace:SketchNow.ViewModels" + xmlns:system="clr-namespace:System;assembly=System.Runtime" x:Name="window" Title="SketchNow" Width="800" @@ -26,16 +27,49 @@ - - - - + + + 0 + + + + + 1 + + + + + 2 + + + Command="{Binding ToggleEditModeCommand}" + Modifiers="Shift" > + + 3 + + + + + False + + + Command="{Binding ToggleMultiPageModeCommand}" + + Modifiers="Alt"> + + True + + @@ -193,7 +227,8 @@ - +