From 05098f3ad63e22c96d6921ce84d8a70a8cec30e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dongmin=20Jang=20=28=EC=9E=A5=EB=8F=99=EB=AF=BC=29?= <37837785+dogzz9445@users.noreply.github.com> Date: Fri, 7 Jun 2024 01:25:47 +0900 Subject: [PATCH] Add logo 256 and settings view --- docs/images/logo_256.png | Bin 0 -> 3821 bytes .../Corathing.Organizer/Assets/logo_256.png | Bin 0 -> 3821 bytes .../Controls/BaseWindow.xaml | 15 +- .../Corathing.Organizer.csproj | 9 + src/Apps/Corathing.Organizer/MainWindow.xaml | 41 +- .../Corathing.Organizer/MainWindow.xaml.cs | 24 +- .../ViewModels/DashboardViewModel.cs | 2 + .../ViewModels/OrganizerSettingsViewModel.cs | 8 + .../Views/DashboardView.xaml | 364 ++++++++-------- .../Views/OrganizerSettingsView.xaml | 411 ++++++++++++------ 10 files changed, 543 insertions(+), 331 deletions(-) create mode 100644 docs/images/logo_256.png create mode 100644 src/Apps/Corathing.Organizer/Assets/logo_256.png diff --git a/docs/images/logo_256.png b/docs/images/logo_256.png new file mode 100644 index 0000000000000000000000000000000000000000..0be5d4837bdc406511ad7766aac07b090a866581 GIT binary patch literal 3821 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 Ha(?t5ibLMy literal 0 HcmV?d00001 diff --git a/src/Apps/Corathing.Organizer/Assets/logo_256.png b/src/Apps/Corathing.Organizer/Assets/logo_256.png new file mode 100644 index 0000000000000000000000000000000000000000..0be5d4837bdc406511ad7766aac07b090a866581 GIT binary patch literal 3821 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 Ha(?t5ibLMy literal 0 HcmV?d00001 diff --git a/src/Apps/Corathing.Organizer/Controls/BaseWindow.xaml b/src/Apps/Corathing.Organizer/Controls/BaseWindow.xaml index 2b9b0cb..c23f7e6 100644 --- a/src/Apps/Corathing.Organizer/Controls/BaseWindow.xaml +++ b/src/Apps/Corathing.Organizer/Controls/BaseWindow.xaml @@ -4,13 +4,16 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + xmlns:ui="http://schemas.lepo.co/wpfui/2022/xaml" xmlns:local="clr-namespace:Corathing.Organizer.Controls" mc:Ignorable="d" - Title="BaseWindow" ShowTitleBar="False" - Height="1000" - Width="1600"> - - - + ShowCloseButton="False" + IsWindowDraggable="False" + Background="{DynamicResource ApplicationBackgroundBrush}" + Foreground="{DynamicResource TextFillColorPrimaryBrush}" + WindowStartupLocation="CenterOwner" + ResizeMode="NoResize" + Height="800" + Width="1280"> \ No newline at end of file diff --git a/src/Apps/Corathing.Organizer/Corathing.Organizer.csproj b/src/Apps/Corathing.Organizer/Corathing.Organizer.csproj index 4898bf9..9d0e7c2 100644 --- a/src/Apps/Corathing.Organizer/Corathing.Organizer.csproj +++ b/src/Apps/Corathing.Organizer/Corathing.Organizer.csproj @@ -16,6 +16,10 @@ + + + + @@ -27,6 +31,7 @@ + @@ -34,4 +39,8 @@ + + + + diff --git a/src/Apps/Corathing.Organizer/MainWindow.xaml b/src/Apps/Corathing.Organizer/MainWindow.xaml index 0828cca..68906c1 100644 --- a/src/Apps/Corathing.Organizer/MainWindow.xaml +++ b/src/Apps/Corathing.Organizer/MainWindow.xaml @@ -1,14 +1,33 @@  - + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + xmlns:local="clr-namespace:Corathing.Organizer" + xmlns:views="clr-namespace:Corathing.Organizer.Views" + xmlns:tray="http://schemas.lepo.co/wpfui/2022/xaml/tray" + xmlns:ui="http://schemas.lepo.co/wpfui/2022/xaml" + mc:Ignorable="d" + ShowTitleBar="False" + ShowMinButton="False" + ShowMaxRestoreButton="False" + ShowCloseButton="False" + IsWindowDraggable="True" + Height="1000" + Width="1600"> + + + + + + + + + + diff --git a/src/Apps/Corathing.Organizer/MainWindow.xaml.cs b/src/Apps/Corathing.Organizer/MainWindow.xaml.cs index c431a40..84dbd8d 100644 --- a/src/Apps/Corathing.Organizer/MainWindow.xaml.cs +++ b/src/Apps/Corathing.Organizer/MainWindow.xaml.cs @@ -11,16 +11,38 @@ using MahApps.Metro.Controls; +using Wpf.Ui.Controls; + namespace Corathing.Organizer { /// /// Interaction logic for MainWindow.xaml - /// + /// public partial class MainWindow : MetroWindow { public MainWindow() { InitializeComponent(); + + MouseDown += Window_MouseDown; + MouseDoubleClick += Window_MouseDoubleClick; + } + + private void Window_MouseDoubleClick(object sender, MouseButtonEventArgs e) + { + if (e.ChangedButton == MouseButton.Left) + { + if (WindowState == WindowState.Normal) + WindowState = WindowState.Maximized; + else + WindowState = WindowState.Normal; + } + } + + private void Window_MouseDown(object sender, MouseButtonEventArgs e) + { + if (e.ChangedButton == MouseButton.Left) + this.DragMove(); } } } diff --git a/src/Apps/Corathing.Organizer/ViewModels/DashboardViewModel.cs b/src/Apps/Corathing.Organizer/ViewModels/DashboardViewModel.cs index 0ee7dd9..e452080 100644 --- a/src/Apps/Corathing.Organizer/ViewModels/DashboardViewModel.cs +++ b/src/Apps/Corathing.Organizer/ViewModels/DashboardViewModel.cs @@ -93,7 +93,9 @@ public void OpenOrganizerSettings() var window = new BaseWindow(); window.Content = new OrganizerSettingsView(); window.Owner = Application.Current.MainWindow; + Application.Current.MainWindow.Effect = new BlurEffect(); window.ShowDialog(); + Application.Current.MainWindow.Effect = null; } [RelayCommand] diff --git a/src/Apps/Corathing.Organizer/ViewModels/OrganizerSettingsViewModel.cs b/src/Apps/Corathing.Organizer/ViewModels/OrganizerSettingsViewModel.cs index 62b8b95..4e5a0d1 100644 --- a/src/Apps/Corathing.Organizer/ViewModels/OrganizerSettingsViewModel.cs +++ b/src/Apps/Corathing.Organizer/ViewModels/OrganizerSettingsViewModel.cs @@ -4,9 +4,11 @@ using System.Reflection; using System.Text; using System.Threading.Tasks; +using System.Windows; using System.Windows.Media; using CommunityToolkit.Mvvm.ComponentModel; +using CommunityToolkit.Mvvm.Input; using Corathing.Contracts.Services; @@ -63,6 +65,12 @@ private void OnThemeChanged(ApplicationTheme currentApplicationTheme, Color syst } } + [RelayCommand] + public void Close(Window window) + { + window.Close(); + } + private static string GetAssemblyVersion() { return Assembly.GetExecutingAssembly().GetName().Version?.ToString() ?? string.Empty; diff --git a/src/Apps/Corathing.Organizer/Views/DashboardView.xaml b/src/Apps/Corathing.Organizer/Views/DashboardView.xaml index 593290c..a4bba74 100644 --- a/src/Apps/Corathing.Organizer/Views/DashboardView.xaml +++ b/src/Apps/Corathing.Organizer/Views/DashboardView.xaml @@ -1,17 +1,19 @@  + Background="{DynamicResource ApplicationBackgroundBrush}" + Foreground="{DynamicResource TextFillColorPrimaryBrush}" + d:DesignHeight="1000" + d:DesignWidth="1600"> @@ -22,47 +24,42 @@ - - + + + + + + + + - + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + - - + + - - + - - + - - + + - - + + - - - - + + + + - - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - + + + + + + - + - - - - - - + + + + + + - - - - - - + + + - - - - - - + + + - - - - + + + + + + + + + + + + + + + - - + diff --git a/src/Apps/Corathing.Organizer/Views/OrganizerSettingsView.xaml b/src/Apps/Corathing.Organizer/Views/OrganizerSettingsView.xaml index 81ff6fd..77e267c 100644 --- a/src/Apps/Corathing.Organizer/Views/OrganizerSettingsView.xaml +++ b/src/Apps/Corathing.Organizer/Views/OrganizerSettingsView.xaml @@ -8,53 +8,212 @@ xmlns:converters="clr-namespace:Corathing.Organizer.Converters" xmlns:ui="http://schemas.lepo.co/wpfui/2022/xaml" mc:Ignorable="d" - ui:Design.Background="{DynamicResource ApplicationBackgroundBrush}" - ui:Design.Foreground="{DynamicResource TextFillColorPrimaryBrush}" - d:DesignHeight="450" - d:DesignWidth="800" + Background="{DynamicResource ApplicationBackgroundBrush}" + Foreground="{DynamicResource TextFillColorPrimaryBrush}" d:DataContext="{d:DesignInstance viewmodels:OrganizerSettingsViewModel, IsDesignTimeCreatable=False}" + Margin="24" Title="OrganizerSettingsView"> - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + \ No newline at end of file