mirror of
https://github.com/Stone-Red-Code/DesktopMagic.git
synced 2026-09-04 00:46:12 +02:00
@@ -7,11 +7,11 @@
|
|||||||
<ApplicationIcon>icon.ico</ApplicationIcon>
|
<ApplicationIcon>icon.ico</ApplicationIcon>
|
||||||
<RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
|
<RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
|
||||||
<Authors>Stone_Red</Authors>
|
<Authors>Stone_Red</Authors>
|
||||||
<Version>1.1.0.0</Version>
|
<Version>1.2.0.0</Version>
|
||||||
<PackageProjectUrl>https://github.com/Stone-Red-Code/DesktopMagic</PackageProjectUrl>
|
<PackageProjectUrl>https://github.com/Stone-Red-Code/DesktopMagic</PackageProjectUrl>
|
||||||
<RepositoryUrl>https://github.com/Stone-Red-Code/DesktopMagic</RepositoryUrl>
|
<RepositoryUrl>https://github.com/Stone-Red-Code/DesktopMagic</RepositoryUrl>
|
||||||
<AssemblyVersion>1.1.0.0</AssemblyVersion>
|
<AssemblyVersion>1.2.0.0</AssemblyVersion>
|
||||||
<FileVersion>1.1.0.0</FileVersion>
|
<FileVersion>1.2.0.0</FileVersion>
|
||||||
<TargetFramework>net8.0-windows7.0</TargetFramework>
|
<TargetFramework>net8.0-windows7.0</TargetFramework>
|
||||||
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
|
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
|
|||||||
@@ -0,0 +1,76 @@
|
|||||||
|
<Window x:Class="DesktopMagic.Dialogs.ThemeDialog"
|
||||||
|
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:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
|
||||||
|
xmlns:local="clr-namespace:DesktopMagic.Dialogs"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
ResizeMode="NoResize"
|
||||||
|
Title="ThemeDialog"
|
||||||
|
WindowStartupLocation="CenterOwner"
|
||||||
|
SizeToContent="WidthAndHeight">
|
||||||
|
<Grid>
|
||||||
|
<StackPanel Margin="15">
|
||||||
|
<Label x:Name="label" Content="Label" HorizontalAlignment="Left" VerticalAlignment="Top" />
|
||||||
|
<Grid>
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="*"/>
|
||||||
|
<ColumnDefinition Width="*"/>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<Grid Grid.Column="0" Margin="{StaticResource DefaultMargin}" HorizontalAlignment="Stretch">
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="Auto" />
|
||||||
|
<ColumnDefinition Width="*" />
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
|
||||||
|
<TextBlock Text="Display Font: " Grid.Column="0" Grid.Row="0" VerticalAlignment="Center" Loaded="TextBlock_Loaded"/>
|
||||||
|
<ComboBox x:Name="fontComboBox" Grid.Column="1" Grid.Row="0" HorizontalAlignment="Stretch" VerticalAlignment="Top" SelectionChanged="FontComboBox_SelectionChanged" Margin="0,0,0,5" />
|
||||||
|
|
||||||
|
<TextBlock Text="Corner Radius: " Grid.Column="0" Grid.Row="1" VerticalAlignment="Center"></TextBlock>
|
||||||
|
<TextBox x:Name="cornerRadiusTextBox" Grid.Column="1" Grid.Row="1" TextChanged="CornerRadiusTextBox_TextChanged" materialDesign:HintAssist.Hint="Enter a number">
|
||||||
|
<materialDesign:TextFieldAssist.CharacterCounterStyle>
|
||||||
|
<Style TargetType="TextBlock" />
|
||||||
|
</materialDesign:TextFieldAssist.CharacterCounterStyle>
|
||||||
|
</TextBox>
|
||||||
|
|
||||||
|
<TextBlock Text="Margin: " Grid.Column="0" Grid.Row="3" VerticalAlignment="Center"></TextBlock>
|
||||||
|
<TextBox x:Name="marginTextBox" Grid.Column="1" Grid.Row="3" TextChanged="MarginTextBox_TextChanged" materialDesign:HintAssist.Hint="Enter a number">
|
||||||
|
<materialDesign:TextFieldAssist.CharacterCounterStyle>
|
||||||
|
<Style TargetType="TextBlock" />
|
||||||
|
</materialDesign:TextFieldAssist.CharacterCounterStyle>
|
||||||
|
</TextBox>
|
||||||
|
</Grid>
|
||||||
|
<StackPanel Grid.Column="1" Margin="{StaticResource DefaultMargin}" HorizontalAlignment="Stretch">
|
||||||
|
<DockPanel Margin="0,0,0,5">
|
||||||
|
<Border CornerRadius="1" BorderThickness="1.5" BorderBrush="Gray" Height="23" Width="23" Margin="0,0,5,0">
|
||||||
|
<Rectangle x:Name="primaryColorRechtangle" Fill="White" />
|
||||||
|
</Border>
|
||||||
|
<Button Content="Change Primary Color" Height="23" FontSize="12" FontWeight="Regular" Click="ChangePrimaryColorButton_Click" />
|
||||||
|
</DockPanel>
|
||||||
|
<DockPanel Margin="0,0,0,5">
|
||||||
|
<Border CornerRadius="1" BorderThickness="1.5" BorderBrush="Gray" Height="23" Width="23" Margin="0,0,5,0">
|
||||||
|
<Rectangle x:Name="secondaryColorRechtangle" Fill="White" />
|
||||||
|
</Border>
|
||||||
|
<Button Content="Change Secondary Color" Height="23" FontSize="12" FontWeight="Regular" Click="ChangeSecondaryColorButton_Click" />
|
||||||
|
</DockPanel>
|
||||||
|
<DockPanel>
|
||||||
|
<Border CornerRadius="1" BorderThickness="1.5" BorderBrush="Gray" Height="23" Width="23" Margin="0,0,5,0">
|
||||||
|
<Rectangle x:Name="backgroundColorRechtangle" Fill="White" />
|
||||||
|
</Border>
|
||||||
|
<Button Content="Change Background Color" Height="23" FontSize="12" FontWeight="Regular" Click="ChangeBackgroundColorButton_Click" />
|
||||||
|
</DockPanel>
|
||||||
|
</StackPanel>
|
||||||
|
</Grid>
|
||||||
|
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,10,0,0">
|
||||||
|
<Button x:Name="okButton" Content="{DynamicResource ok }" HorizontalAlignment="Left" Margin="0,0,10,0" VerticalAlignment="Top" Width="100" Click="OkButton_Click" Cursor="Hand" />
|
||||||
|
<Button x:Name="cancelButton" Content="{DynamicResource cancel }" HorizontalAlignment="Left" Margin="0,0,0,0" VerticalAlignment="Top" Width="100" Click="CancelButton_Click" />
|
||||||
|
</StackPanel>
|
||||||
|
</StackPanel>
|
||||||
|
</Grid>
|
||||||
|
</Window>
|
||||||
@@ -0,0 +1,143 @@
|
|||||||
|
using DesktopMagic.Helpers;
|
||||||
|
using DesktopMagic.Plugins;
|
||||||
|
|
||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Controls;
|
||||||
|
using System.Windows.Media;
|
||||||
|
|
||||||
|
namespace DesktopMagic.Dialogs;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Interaction logic for ColorDialog.xaml
|
||||||
|
/// </summary>
|
||||||
|
public partial class ThemeDialog : Window
|
||||||
|
{
|
||||||
|
private readonly Theme theme;
|
||||||
|
|
||||||
|
public ThemeDialog(string content, Theme theme, string title = App.AppName)
|
||||||
|
{
|
||||||
|
this.theme = theme;
|
||||||
|
|
||||||
|
InitializeComponent();
|
||||||
|
|
||||||
|
Resources.MergedDictionaries.Add(App.LanguageDictionary);
|
||||||
|
|
||||||
|
cornerRadiusTextBox.Text = theme.CornerRadius.ToString();
|
||||||
|
marginTextBox.Text = theme.Margin.ToString();
|
||||||
|
primaryColorRechtangle.Fill = new SolidColorBrush(MultiColorConverter.ConvertToMediaColor(theme.PrimaryColor));
|
||||||
|
secondaryColorRechtangle.Fill = new SolidColorBrush(MultiColorConverter.ConvertToMediaColor(theme.SecondaryColor));
|
||||||
|
backgroundColorRechtangle.Fill = new SolidColorBrush(MultiColorConverter.ConvertToMediaColor(theme.BackgroundColor));
|
||||||
|
|
||||||
|
label.Content = content;
|
||||||
|
Title = title;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OkButton_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
DialogResult = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CancelButton_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
DialogResult = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void TextBlock_Loaded(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
int index = 0;
|
||||||
|
foreach (FontFamily ff in Fonts.SystemFontFamilies)
|
||||||
|
{
|
||||||
|
ComboBoxItem comboBoxItem = new()
|
||||||
|
{
|
||||||
|
FontFamily = ff,
|
||||||
|
Content = ff.ToString()
|
||||||
|
};
|
||||||
|
_ = fontComboBox.Items.Add(comboBoxItem);
|
||||||
|
|
||||||
|
if (ff.ToString() == theme.Font)
|
||||||
|
{
|
||||||
|
fontComboBox.SelectedIndex = index;
|
||||||
|
}
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
if (fontComboBox.SelectedIndex == -1)
|
||||||
|
{
|
||||||
|
fontComboBox.SelectedIndex = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void FontComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
||||||
|
{
|
||||||
|
theme.Font = fontComboBox.SelectedValue.ToString()!.Replace("System.Windows.Controls.ComboBoxItem: ", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ChangePrimaryColorButton_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
ColorDialog colorDialog = new ColorDialog("Set Primary Color", theme.PrimaryColor)
|
||||||
|
{
|
||||||
|
Owner = this
|
||||||
|
};
|
||||||
|
|
||||||
|
if (colorDialog.ShowDialog() == true)
|
||||||
|
{
|
||||||
|
theme.PrimaryColor = colorDialog.ResultColor;
|
||||||
|
primaryColorRechtangle.Fill = colorDialog.ResultBrush;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ChangeSecondaryColorButton_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
ColorDialog colorDialog = new ColorDialog("Set Secondary Color", theme.SecondaryColor)
|
||||||
|
{
|
||||||
|
Owner = this
|
||||||
|
};
|
||||||
|
|
||||||
|
if (colorDialog.ShowDialog() == true)
|
||||||
|
{
|
||||||
|
theme.SecondaryColor = colorDialog.ResultColor;
|
||||||
|
secondaryColorRechtangle.Fill = colorDialog.ResultBrush;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ChangeBackgroundColorButton_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
ColorDialog colorDialog = new ColorDialog("Set Background Color", theme.BackgroundColor)
|
||||||
|
{
|
||||||
|
Owner = this
|
||||||
|
};
|
||||||
|
|
||||||
|
if (colorDialog.ShowDialog() == true)
|
||||||
|
{
|
||||||
|
theme.BackgroundColor = colorDialog.ResultColor;
|
||||||
|
backgroundColorRechtangle.Fill = colorDialog.ResultBrush;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CornerRadiusTextBox_TextChanged(object? sender, TextChangedEventArgs? e)
|
||||||
|
{
|
||||||
|
bool success = int.TryParse(cornerRadiusTextBox.Text, out int cornerRadius);
|
||||||
|
if (success)
|
||||||
|
{
|
||||||
|
cornerRadiusTextBox.Foreground = Brushes.Black;
|
||||||
|
theme.CornerRadius = cornerRadius;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cornerRadiusTextBox.Foreground = Brushes.Red;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void MarginTextBox_TextChanged(object? sender, TextChangedEventArgs? e)
|
||||||
|
{
|
||||||
|
bool success = int.TryParse(marginTextBox.Text, out int margin);
|
||||||
|
if (success)
|
||||||
|
{
|
||||||
|
marginTextBox.Foreground = Brushes.Black;
|
||||||
|
theme.Margin = margin;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
marginTextBox.Foreground = Brushes.Red;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -206,7 +206,8 @@ internal class SettingElementGenerator(ComboBox optionsComboBox)
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
eComboBox.Value = comboBox.SelectedItem.ToString() ?? string.Empty;
|
comboBox.SelectedItem ??= eComboBox.Value;
|
||||||
|
eComboBox.Value = comboBox.SelectedItem?.ToString() ?? eComboBox.Value;
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
|
|
||||||
<busyIndicator:BusyMask x:Name="BusyIndicator" IsBusy="{Binding IsLoading}" IndicatorType="Cogs" BusyContent="Please wait..." BusyContentMargin="0,20,0,0" IsBusyAtStartup="False">
|
<busyIndicator:BusyMask x:Name="BusyIndicator" IsBusy="{Binding IsLoading}" IndicatorType="Cogs" BusyContent="Please wait..." BusyContentMargin="0,20,0,0" IsBusyAtStartup="False">
|
||||||
<Grid>
|
<Grid>
|
||||||
<TextBlock TextWrapping="Wrap" Text="0" VerticalAlignment="Top" FontFamily="Comic Sans MS" Loaded="TextBlock_Loaded" Foreground="Transparent" />
|
<TextBlock TextWrapping="Wrap" Text="0" VerticalAlignment="Top" FontFamily="Comic Sans MS" Foreground="Transparent" />
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
<RowDefinition Height="*" />
|
<RowDefinition Height="*" />
|
||||||
@@ -38,7 +38,7 @@
|
|||||||
<DockPanel Margin="0,0,2.5,0">
|
<DockPanel Margin="0,0,2.5,0">
|
||||||
<Grid DockPanel.Dock="Top">
|
<Grid DockPanel.Dock="Top">
|
||||||
<Rectangle Grid.Row="1" Fill="#FFECECEC" Height="24" />
|
<Rectangle Grid.Row="1" Fill="#FFECECEC" Height="24" />
|
||||||
<CheckBox x:Name="editCheckBox" VerticalAlignment="Center" Grid.Row="1" Content="{DynamicResource edit}" Click="EditCheckBox_Click" Foreground="Black" BorderBrush="#FF323232" Style="{StaticResource MaterialDesignDarkCheckBox}" IsChecked="True" />
|
<CheckBox x:Name="editCheckBox" VerticalAlignment="Center" Grid.Row="1" Content="{DynamicResource editLayout}" Click="EditCheckBox_Click" Foreground="Black" BorderBrush="#FF323232" Style="{StaticResource MaterialDesignDarkCheckBox}" IsChecked="True" />
|
||||||
</Grid>
|
</Grid>
|
||||||
<ScrollViewer Background="#FFBBBBBB" PreviewMouseWheel="ScrollViewer_PreviewMouseWheel">
|
<ScrollViewer Background="#FFBBBBBB" PreviewMouseWheel="ScrollViewer_PreviewMouseWheel">
|
||||||
<ItemsControl ItemsSource="{Binding Settings.CurrentLayout.Plugins}">
|
<ItemsControl ItemsSource="{Binding Settings.CurrentLayout.Plugins}">
|
||||||
@@ -75,53 +75,26 @@
|
|||||||
<ColumnDefinition />
|
<ColumnDefinition />
|
||||||
<ColumnDefinition />
|
<ColumnDefinition />
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
<Grid Grid.Column="0" Margin="{StaticResource DefaultMargin}" HorizontalAlignment="Stretch">
|
<ListBox x:Name="themesListBox" Grid.Row="0" Grid.ColumnSpan="1" Margin="{StaticResource DefaultMargin}" ItemsSource="{Binding Settings.Themes}" DisplayMemberPath="Name" SelectedValue="{Binding Settings.CurrentLayout.CurrentThemeName}" SelectedValuePath="Name" />
|
||||||
<Grid.ColumnDefinitions>
|
<StackPanel Grid.Row="0" Grid.Column="1" VerticalAlignment="Center" Margin="{StaticResource DefaultMargin}">
|
||||||
<ColumnDefinition Width="Auto" />
|
<Button x:Name="addThemeButton" Margin="0,0,0,5" HorizontalAlignment="Stretch" Click="AddThemeButton_Click" FontWeight="Regular">
|
||||||
<ColumnDefinition Width="*" />
|
<StackPanel Orientation="Horizontal">
|
||||||
</Grid.ColumnDefinitions>
|
<materialDesign:PackIcon Kind="Add" Margin="0 0 10 0" />
|
||||||
<Grid.RowDefinitions>
|
<TextBlock Text="{DynamicResource newTheme}" />
|
||||||
<RowDefinition Height="Auto" />
|
</StackPanel>
|
||||||
<RowDefinition Height="Auto" />
|
</Button>
|
||||||
<RowDefinition Height="Auto" />
|
<Button x:Name="deleteThemeButton" Margin="0,0,0,5" HorizontalAlignment="Stretch" Click="DeleteThemeButton_Click" FontWeight="Regular">
|
||||||
</Grid.RowDefinitions>
|
<StackPanel Orientation="Horizontal">
|
||||||
|
<materialDesign:PackIcon Kind="DeleteOutline" Margin="0 0 10 0" />
|
||||||
<TextBlock Text="Display Font: " Grid.Column="0" Grid.Row="0" VerticalAlignment="Center"></TextBlock>
|
<TextBlock Text="{DynamicResource deleteTheme}" />
|
||||||
<ComboBox x:Name="fontComboBox" Grid.Column="1" Grid.Row="0" HorizontalAlignment="Stretch" VerticalAlignment="Top" SelectionChanged="FontComboBox_SelectionChanged" Margin="0,0,0,5" />
|
</StackPanel>
|
||||||
|
</Button>
|
||||||
<TextBlock Text="Corner Radius: " Grid.Column="0" Grid.Row="1" VerticalAlignment="Center"></TextBlock>
|
<Button x:Name="changeThemeButton" Margin="0,0,0,5" HorizontalAlignment="Stretch" Click="ChangeThemeButton_Click" FontWeight="Regular">
|
||||||
<TextBox x:Name="cornerRadiusTextBox" Grid.Column="1" Grid.Row="1" TextChanged="CornerRadiusTextBox_TextChanged" materialDesign:HintAssist.Hint="Enter a number">
|
<StackPanel Orientation="Horizontal">
|
||||||
<materialDesign:TextFieldAssist.CharacterCounterStyle>
|
<materialDesign:PackIcon Kind="PaletteOutline" Margin="0 0 10 0" />
|
||||||
<Style TargetType="TextBlock" />
|
<TextBlock Text="{DynamicResource changeTheme}" />
|
||||||
</materialDesign:TextFieldAssist.CharacterCounterStyle>
|
</StackPanel>
|
||||||
</TextBox>
|
</Button>
|
||||||
|
|
||||||
<TextBlock Text="Margin: " Grid.Column="0" Grid.Row="3" VerticalAlignment="Center"></TextBlock>
|
|
||||||
<TextBox x:Name="marginTextBox" Grid.Column="1" Grid.Row="3" TextChanged="MarginTextBox_TextChanged" materialDesign:HintAssist.Hint="Enter a number">
|
|
||||||
<materialDesign:TextFieldAssist.CharacterCounterStyle>
|
|
||||||
<Style TargetType="TextBlock" />
|
|
||||||
</materialDesign:TextFieldAssist.CharacterCounterStyle>
|
|
||||||
</TextBox>
|
|
||||||
</Grid>
|
|
||||||
<StackPanel Grid.Column="1" Margin="{StaticResource DefaultMargin}" HorizontalAlignment="Stretch">
|
|
||||||
<DockPanel Margin="0,0,0,5">
|
|
||||||
<Border CornerRadius="1" BorderThickness="1.5" BorderBrush="Gray" Height="23" Width="23" Margin="0,0,5,0">
|
|
||||||
<Rectangle x:Name="primaryColorRechtangle" Fill="White" />
|
|
||||||
</Border>
|
|
||||||
<Button Content="Change Primary Color" Height="23" FontSize="12" FontWeight="Regular" Click="ChangePrimaryColorButton_Click" />
|
|
||||||
</DockPanel>
|
|
||||||
<DockPanel Margin="0,0,0,5">
|
|
||||||
<Border CornerRadius="1" BorderThickness="1.5" BorderBrush="Gray" Height="23" Width="23" Margin="0,0,5,0">
|
|
||||||
<Rectangle x:Name="secondaryColorRechtangle" Fill="White" />
|
|
||||||
</Border>
|
|
||||||
<Button Content="Change Secondary Color" Height="23" FontSize="12" FontWeight="Regular" Click="ChangeSecondaryColorButton_Click" />
|
|
||||||
</DockPanel>
|
|
||||||
<DockPanel>
|
|
||||||
<Border CornerRadius="1" BorderThickness="1.5" BorderBrush="Gray" Height="23" Width="23" Margin="0,0,5,0">
|
|
||||||
<Rectangle x:Name="backgroundColorRechtangle" Fill="White" />
|
|
||||||
</Border>
|
|
||||||
<Button Content="Change Background Color" Height="23" FontSize="12" FontWeight="Regular" Click="ChangeBackgroundColorButton_Click" />
|
|
||||||
</DockPanel>
|
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<Grid Grid.Row="1" Grid.ColumnSpan="2" VerticalAlignment="Bottom">
|
<Grid Grid.Row="1" Grid.ColumnSpan="2" VerticalAlignment="Bottom">
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
|
|||||||
@@ -11,10 +11,8 @@ using System.Diagnostics;
|
|||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using System.Threading;
|
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Controls;
|
using System.Windows.Controls;
|
||||||
using System.Windows.Media;
|
|
||||||
|
|
||||||
namespace DesktopMagic
|
namespace DesktopMagic
|
||||||
{
|
{
|
||||||
@@ -301,9 +299,49 @@ namespace DesktopMagic
|
|||||||
|
|
||||||
#region Options
|
#region Options
|
||||||
|
|
||||||
private void FontComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
private void AddThemeButton_Click(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
Settings.CurrentLayout.Theme.Font = fontComboBox.SelectedValue.ToString()!.Replace("System.Windows.Controls.ComboBoxItem: ", "");
|
InputDialog inputDialog = new((string)FindResource("enterThemeName"))
|
||||||
|
{
|
||||||
|
Owner = this
|
||||||
|
};
|
||||||
|
|
||||||
|
if (inputDialog.ShowDialog() == true)
|
||||||
|
{
|
||||||
|
if (Settings.Themes.Any(l => l.Name.Trim() == inputDialog.ResponseText.Trim()))
|
||||||
|
{
|
||||||
|
_ = MessageBox.Show((string)FindResource("themeAlreadyExists"), App.AppName, MessageBoxButton.OK, MessageBoxImage.Warning);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Settings.Themes.Add(new Theme(inputDialog.ResponseText.Trim()));
|
||||||
|
Settings.CurrentLayout.CurrentThemeName = inputDialog.ResponseText.Trim();
|
||||||
|
SaveSettings();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void DeleteThemeButton_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
if (Settings.Themes.Count <= 1)
|
||||||
|
{
|
||||||
|
_ = MessageBox.Show((string)FindResource("cannotDeleteLastTheme"), App.AppName, MessageBoxButton.OK, MessageBoxImage.Warning);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Settings.Themes.Remove((Theme)themesListBox.SelectedItem);
|
||||||
|
SaveSettings();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ChangeThemeButton_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
Theme theme = themesListBox.SelectedItem as Theme ?? Settings.CurrentLayout.Theme;
|
||||||
|
|
||||||
|
ThemeDialog themeDialog = new(theme.Name, theme, App.AppName)
|
||||||
|
{
|
||||||
|
Owner = this
|
||||||
|
};
|
||||||
|
|
||||||
|
themeDialog.ShowDialog();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OptionsComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
private void OptionsComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
||||||
@@ -381,100 +419,6 @@ namespace DesktopMagic
|
|||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void TextBlock_Loaded(object sender, RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
int index = 0;
|
|
||||||
foreach (FontFamily ff in Fonts.SystemFontFamilies)
|
|
||||||
{
|
|
||||||
ComboBoxItem comboBoxItem = new()
|
|
||||||
{
|
|
||||||
FontFamily = ff,
|
|
||||||
Content = ff.ToString()
|
|
||||||
};
|
|
||||||
_ = fontComboBox.Items.Add(comboBoxItem);
|
|
||||||
|
|
||||||
if (ff.ToString() == Settings.CurrentLayout.Theme.Font)
|
|
||||||
{
|
|
||||||
fontComboBox.SelectedIndex = index;
|
|
||||||
}
|
|
||||||
index++;
|
|
||||||
}
|
|
||||||
if (fontComboBox.SelectedIndex == -1)
|
|
||||||
{
|
|
||||||
fontComboBox.SelectedIndex = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void ChangePrimaryColorButton_Click(object sender, RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
ColorDialog colorDialog = new ColorDialog("Set Primary Color", Settings.CurrentLayout.Theme.PrimaryColor)
|
|
||||||
{
|
|
||||||
Owner = this
|
|
||||||
};
|
|
||||||
|
|
||||||
if (colorDialog.ShowDialog() == true)
|
|
||||||
{
|
|
||||||
Settings.CurrentLayout.Theme.PrimaryColor = colorDialog.ResultColor;
|
|
||||||
primaryColorRechtangle.Fill = colorDialog.ResultBrush;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void ChangeSecondaryColorButton_Click(object sender, RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
ColorDialog colorDialog = new ColorDialog("Set Secondary Color", Settings.CurrentLayout.Theme.SecondaryColor)
|
|
||||||
{
|
|
||||||
Owner = this
|
|
||||||
};
|
|
||||||
|
|
||||||
if (colorDialog.ShowDialog() == true)
|
|
||||||
{
|
|
||||||
Settings.CurrentLayout.Theme.SecondaryColor = colorDialog.ResultColor;
|
|
||||||
secondaryColorRechtangle.Fill = colorDialog.ResultBrush;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void ChangeBackgroundColorButton_Click(object sender, RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
ColorDialog colorDialog = new ColorDialog("Set Background Color", Settings.CurrentLayout.Theme.BackgroundColor)
|
|
||||||
{
|
|
||||||
Owner = this
|
|
||||||
};
|
|
||||||
|
|
||||||
if (colorDialog.ShowDialog() == true)
|
|
||||||
{
|
|
||||||
Settings.CurrentLayout.Theme.BackgroundColor = colorDialog.ResultColor;
|
|
||||||
backgroundColorRechtangle.Fill = colorDialog.ResultBrush;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void CornerRadiusTextBox_TextChanged(object? sender, TextChangedEventArgs? e)
|
|
||||||
{
|
|
||||||
bool success = int.TryParse(cornerRadiusTextBox.Text, out int cornerRadius);
|
|
||||||
if (success)
|
|
||||||
{
|
|
||||||
cornerRadiusTextBox.Foreground = Brushes.Black;
|
|
||||||
Settings.CurrentLayout.Theme.CornerRadius = cornerRadius;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
cornerRadiusTextBox.Foreground = Brushes.Red;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void MarginTextBox_TextChanged(object? sender, TextChangedEventArgs? e)
|
|
||||||
{
|
|
||||||
bool success = int.TryParse(marginTextBox.Text, out int margin);
|
|
||||||
if (success)
|
|
||||||
{
|
|
||||||
marginTextBox.Foreground = Brushes.Black;
|
|
||||||
Settings.CurrentLayout.Theme.Margin = margin;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
marginTextBox.Foreground = Brushes.Red;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Layout
|
#region Layout
|
||||||
|
|
||||||
private readonly JsonSerializerOptions jsonSettingsOptions = new()
|
private readonly JsonSerializerOptions jsonSettingsOptions = new()
|
||||||
@@ -517,6 +461,12 @@ namespace DesktopMagic
|
|||||||
|
|
||||||
private void RemoveLayoutButton_Click(object sender, RoutedEventArgs e)
|
private void RemoveLayoutButton_Click(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
|
if (Settings.Layouts.Count <= 1)
|
||||||
|
{
|
||||||
|
_ = MessageBox.Show((string)FindResource("cannotDeleteLastLayout"), App.AppName, MessageBoxButton.OK, MessageBoxImage.Warning);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Settings.Layouts.Remove(Settings.CurrentLayout);
|
Settings.Layouts.Remove(Settings.CurrentLayout);
|
||||||
SaveSettings();
|
SaveSettings();
|
||||||
}
|
}
|
||||||
@@ -536,42 +486,34 @@ namespace DesktopMagic
|
|||||||
{
|
{
|
||||||
if (!File.Exists(Path.Combine(App.ApplicationDataPath, "settings.json")))
|
if (!File.Exists(Path.Combine(App.ApplicationDataPath, "settings.json")))
|
||||||
{
|
{
|
||||||
Settings = new DesktopMagicSettings()
|
Settings = new DesktopMagicSettings();
|
||||||
{
|
|
||||||
Layouts =
|
Settings.Layouts.Add(new Layout((string)FindResource("default")));
|
||||||
[
|
Settings.Themes.Add(new Theme((string)FindResource("default")));
|
||||||
new Layout((string)FindResource("default"))
|
|
||||||
]
|
|
||||||
};
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
string json = File.ReadAllText(Path.Combine(App.ApplicationDataPath, "settings.json"));
|
string json = File.ReadAllText(Path.Combine(App.ApplicationDataPath, "settings.json"));
|
||||||
|
|
||||||
Settings = JsonSerializer.Deserialize<DesktopMagicSettings>(json, jsonSettingsOptions) ?? new DesktopMagicSettings()
|
Settings = JsonSerializer.Deserialize<DesktopMagicSettings>(json, jsonSettingsOptions) ?? new DesktopMagicSettings();
|
||||||
|
|
||||||
|
if(Settings.Layouts.Count == 0)
|
||||||
{
|
{
|
||||||
Layouts =
|
Settings.Layouts.Add(new Layout((string)FindResource("default")));
|
||||||
[
|
}
|
||||||
new Layout((string)FindResource("default"))
|
|
||||||
]
|
if (Settings.Themes.Count == 0)
|
||||||
};
|
{
|
||||||
|
Settings.Themes.Add(new Theme((string)FindResource("default")));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void LoadLayout(bool minimize = true)
|
private void LoadLayout(bool minimize = true)
|
||||||
{
|
{
|
||||||
mainWindowDataContext.IsLoading = true;
|
mainWindowDataContext.IsLoading = true;
|
||||||
cornerRadiusTextBox.Text = Settings.CurrentLayout.Theme.CornerRadius.ToString();
|
|
||||||
marginTextBox.Text = Settings.CurrentLayout.Theme.Margin.ToString();
|
|
||||||
blockWindowsClosing = false;
|
blockWindowsClosing = false;
|
||||||
|
|
||||||
primaryColorRechtangle.Fill = new SolidColorBrush(MultiColorConverter.ConvertToMediaColor(Settings.CurrentLayout.Theme.PrimaryColor));
|
|
||||||
secondaryColorRechtangle.Fill = new SolidColorBrush(MultiColorConverter.ConvertToMediaColor(Settings.CurrentLayout.Theme.SecondaryColor));
|
|
||||||
backgroundColorRechtangle.Fill = new SolidColorBrush(MultiColorConverter.ConvertToMediaColor(Settings.CurrentLayout.Theme.BackgroundColor));
|
|
||||||
|
|
||||||
CornerRadiusTextBox_TextChanged(null, null);
|
|
||||||
MarginTextBox_TextChanged(null, null);
|
|
||||||
|
|
||||||
foreach (Window window in Windows)
|
foreach (Window window in Windows)
|
||||||
{
|
{
|
||||||
window.Close();
|
window.Close();
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ internal class PluginData(PluginWindow window, PluginSettings pluginSettings) :
|
|||||||
{
|
{
|
||||||
private readonly PluginWindow window = window;
|
private readonly PluginWindow window = window;
|
||||||
|
|
||||||
public ITheme Theme { get; } = pluginSettings.Theme;
|
public ITheme Theme => pluginSettings.Theme;
|
||||||
|
|
||||||
public Size WindowSize => new Size((int)window.ActualWidth, (int)window.ActualHeight);
|
public Size WindowSize => new Size((int)window.ActualWidth, (int)window.ActualHeight);
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
using DesktopMagic.Api;
|
using DesktopMagic.Api;
|
||||||
using DesktopMagic.Api.Drawing;
|
using DesktopMagic.Api.Drawing;
|
||||||
using DesktopMagic.Api.Settings;
|
using DesktopMagic.Api.Settings;
|
||||||
|
using DesktopMagic.DataContexts;
|
||||||
using DesktopMagic.Helpers;
|
using DesktopMagic.Helpers;
|
||||||
using DesktopMagic.Plugins;
|
using DesktopMagic.Plugins;
|
||||||
using DesktopMagic.Settings;
|
using DesktopMagic.Settings;
|
||||||
@@ -56,7 +57,17 @@ public partial class PluginWindow : Window
|
|||||||
|
|
||||||
Owner = w;
|
Owner = w;
|
||||||
|
|
||||||
settings.Theme.PropertyChanged += (e, s) => ThemeChanged();
|
settings.PropertyChanged += (e, s) =>
|
||||||
|
{
|
||||||
|
if (s.PropertyName == nameof(PluginSettings.CurrentThemeName))
|
||||||
|
{
|
||||||
|
settings.Theme.PropertyChanged += (se, ev) =>
|
||||||
|
{
|
||||||
|
ThemeChanged();
|
||||||
|
};
|
||||||
|
ThemeChanged();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
PluginMetadata = pluginMetadata;
|
PluginMetadata = pluginMetadata;
|
||||||
this.settings = settings;
|
this.settings = settings;
|
||||||
@@ -240,9 +251,15 @@ public partial class PluginWindow : Window
|
|||||||
{
|
{
|
||||||
SetHorizontalAlignment();
|
SetHorizontalAlignment();
|
||||||
SetVerticalAlignment();
|
SetVerticalAlignment();
|
||||||
|
SetThemeOverride();
|
||||||
|
SetThemeOverrideItems();
|
||||||
|
|
||||||
pluginClassInstance.horizontalAlignment.OnValueChanged += SetHorizontalAlignment;
|
pluginClassInstance.horizontalAlignment.OnValueChanged += SetHorizontalAlignment;
|
||||||
pluginClassInstance.verticalAlignment.OnValueChanged += SetVerticalAlignment;
|
pluginClassInstance.verticalAlignment.OnValueChanged += SetVerticalAlignment;
|
||||||
|
pluginClassInstance.themeOverride.OnValueChanged += SetThemeOverride;
|
||||||
|
|
||||||
|
DesktopMagicSettings desktopMagicSettings = MainWindowDataContext.GetSettings();
|
||||||
|
desktopMagicSettings.Themes.CollectionChanged += (s, e) => SetThemeOverrideItems();
|
||||||
});
|
});
|
||||||
|
|
||||||
void SetVerticalAlignment()
|
void SetVerticalAlignment()
|
||||||
@@ -272,6 +289,31 @@ public partial class PluginWindow : Window
|
|||||||
viewBox.HorizontalAlignment = horizontalAlignment;
|
viewBox.HorizontalAlignment = horizontalAlignment;
|
||||||
border.HorizontalAlignment = horizontalAlignment;
|
border.HorizontalAlignment = horizontalAlignment;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SetThemeOverride()
|
||||||
|
{
|
||||||
|
if (pluginClassInstance.themeOverride.Value == "<None>")
|
||||||
|
{
|
||||||
|
settings.CurrentThemeName = null;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
settings.CurrentThemeName = pluginClassInstance.themeOverride.Value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetThemeOverrideItems()
|
||||||
|
{
|
||||||
|
DesktopMagicSettings desktopMagicSettings = MainWindowDataContext.GetSettings();
|
||||||
|
|
||||||
|
pluginClassInstance.themeOverride.Items.Clear();
|
||||||
|
pluginClassInstance.themeOverride.Items.Add("<None>");
|
||||||
|
|
||||||
|
foreach (Theme theme in desktopMagicSettings.Themes)
|
||||||
|
{
|
||||||
|
pluginClassInstance.themeOverride.Items.Add(theme.Name);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void LoadOptions(object instance)
|
private void LoadOptions(object instance)
|
||||||
|
|||||||
@@ -11,17 +11,27 @@ using Color = System.Drawing.Color;
|
|||||||
|
|
||||||
namespace DesktopMagic.Plugins;
|
namespace DesktopMagic.Plugins;
|
||||||
|
|
||||||
public class Theme : ITheme, INotifyPropertyChanged
|
public class Theme(string name) : ITheme, INotifyPropertyChanged
|
||||||
{
|
{
|
||||||
public event PropertyChangedEventHandler? PropertyChanged;
|
public event PropertyChangedEventHandler? PropertyChanged;
|
||||||
|
|
||||||
private Color primaryColor = Color.White;
|
private Color primaryColor = Color.White;
|
||||||
private Color secondaryColor = Color.White;
|
private Color secondaryColor = Color.LightGray;
|
||||||
private Color backgroundColor = Color.Transparent;
|
private Color backgroundColor = Color.Transparent;
|
||||||
private string font = "Segoe UI";
|
private string font = "Segoe UI";
|
||||||
private int cornerRadius;
|
private int cornerRadius;
|
||||||
private int margin;
|
private int margin;
|
||||||
|
|
||||||
|
public string Name
|
||||||
|
{
|
||||||
|
get => name;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
name = value;
|
||||||
|
OnPropertyChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public Color PrimaryColor
|
public Color PrimaryColor
|
||||||
{
|
{
|
||||||
get => primaryColor;
|
get => primaryColor;
|
||||||
|
|||||||
@@ -26,7 +26,7 @@
|
|||||||
<system:String x:Key="default">Standard</system:String>
|
<system:String x:Key="default">Standard</system:String>
|
||||||
<system:String x:Key="wantToCloseProgram">Wollen sie das Programm wirklich schließen?</system:String>
|
<system:String x:Key="wantToCloseProgram">Wollen sie das Programm wirklich schließen?</system:String>
|
||||||
<system:String x:Key="noOptions">Keine Optionen!</system:String>
|
<system:String x:Key="noOptions">Keine Optionen!</system:String>
|
||||||
<system:String x:Key="edit">Bearbeiten</system:String>
|
<system:String x:Key="editLayout">Layout Bearbeiten</system:String>
|
||||||
<system:String x:Key="time">Uhrzeit</system:String>
|
<system:String x:Key="time">Uhrzeit</system:String>
|
||||||
<system:String x:Key="date">Datum</system:String>
|
<system:String x:Key="date">Datum</system:String>
|
||||||
<system:String x:Key="cpuUsage">CPU Auslastung</system:String>
|
<system:String x:Key="cpuUsage">CPU Auslastung</system:String>
|
||||||
@@ -34,10 +34,15 @@
|
|||||||
<system:String x:Key="amplifier">Signalverstärkung:</system:String>
|
<system:String x:Key="amplifier">Signalverstärkung:</system:String>
|
||||||
<system:String x:Key="newLayout">Neues Layout</system:String>
|
<system:String x:Key="newLayout">Neues Layout</system:String>
|
||||||
<system:String x:Key="deleteLayout">Layout Löschen</system:String>
|
<system:String x:Key="deleteLayout">Layout Löschen</system:String>
|
||||||
|
<system:String x:Key="newTheme">Neues Theme</system:String>
|
||||||
|
<system:String x:Key="deleteTheme">Theme Löschen</system:String>
|
||||||
|
<system:String x:Key="changeTheme">Theme Ändern</system:String>
|
||||||
<system:String x:Key="ok">Ok</system:String>
|
<system:String x:Key="ok">Ok</system:String>
|
||||||
<system:String x:Key="cancel">Abbrechen</system:String>
|
<system:String x:Key="cancel">Abbrechen</system:String>
|
||||||
<system:String x:Key="enterLayoutName">Layoutnamen eingeben:</system:String>
|
<system:String x:Key="enterLayoutName">Layoutnamen eingeben:</system:String>
|
||||||
<system:String x:Key="layoutAlreadyExists">Layout existiert bereits!</system:String>
|
<system:String x:Key="layoutAlreadyExists">Layout existiert bereits!</system:String>
|
||||||
|
<system:String x:Key="enterThemeName">Themenamen eingeben:</system:String>
|
||||||
|
<system:String x:Key="themeAlreadyExists">Theme existiert bereits!</system:String>
|
||||||
<system:String x:Key="install">Installieren</system:String>
|
<system:String x:Key="install">Installieren</system:String>
|
||||||
<system:String x:Key="uninstall">Deinstallieren</system:String>
|
<system:String x:Key="uninstall">Deinstallieren</system:String>
|
||||||
<system:String x:Key="remove">Entfernen</system:String>
|
<system:String x:Key="remove">Entfernen</system:String>
|
||||||
|
|||||||
@@ -26,7 +26,7 @@
|
|||||||
<system:String x:Key="default">Default</system:String>
|
<system:String x:Key="default">Default</system:String>
|
||||||
<system:String x:Key="wantToCloseProgram">Do you really want to close the program?</system:String>
|
<system:String x:Key="wantToCloseProgram">Do you really want to close the program?</system:String>
|
||||||
<system:String x:Key="noOptions">No Options!</system:String>
|
<system:String x:Key="noOptions">No Options!</system:String>
|
||||||
<system:String x:Key="edit">Edit</system:String>
|
<system:String x:Key="editLayout">Edit Layout</system:String>
|
||||||
<system:String x:Key="time">Time</system:String>
|
<system:String x:Key="time">Time</system:String>
|
||||||
<system:String x:Key="date">Date</system:String>
|
<system:String x:Key="date">Date</system:String>
|
||||||
<system:String x:Key="cpuUsage">CPU Usage</system:String>
|
<system:String x:Key="cpuUsage">CPU Usage</system:String>
|
||||||
@@ -34,10 +34,17 @@
|
|||||||
<system:String x:Key="amplifier">Signal Amplification:</system:String>
|
<system:String x:Key="amplifier">Signal Amplification:</system:String>
|
||||||
<system:String x:Key="newLayout">New Layout</system:String>
|
<system:String x:Key="newLayout">New Layout</system:String>
|
||||||
<system:String x:Key="deleteLayout">Delete Layout</system:String>
|
<system:String x:Key="deleteLayout">Delete Layout</system:String>
|
||||||
|
<system:String x:Key="newTheme">New Theme</system:String>
|
||||||
|
<system:String x:Key="deleteTheme">Delete Theme</system:String>
|
||||||
|
<system:String x:Key="changeTheme">Change Theme</system:String>
|
||||||
<system:String x:Key="ok">Ok</system:String>
|
<system:String x:Key="ok">Ok</system:String>
|
||||||
<system:String x:Key="cancel">Cancel</system:String>
|
<system:String x:Key="cancel">Cancel</system:String>
|
||||||
<system:String x:Key="enterLayoutName">Enter layout name</system:String>
|
<system:String x:Key="enterLayoutName">Enter layout name</system:String>
|
||||||
<system:String x:Key="layoutAlreadyExists">Layout already exists!</system:String>
|
<system:String x:Key="layoutAlreadyExists">Layout already exists!</system:String>
|
||||||
|
<system:String x:Key="cannotDeleteLastLayout">Can't delete last layout!</system:String>
|
||||||
|
<system:String x:Key="enterThemeName">Enter theme name</system:String>
|
||||||
|
<system:String x:Key="themeAlreadyExists">Theme already exists!</system:String>
|
||||||
|
<system:String x:Key="cannotDeleteLastTheme">Can't delete last theme!</system:String>
|
||||||
<system:String x:Key="install">Install</system:String>
|
<system:String x:Key="install">Install</system:String>
|
||||||
<system:String x:Key="uninstall">Uninstall</system:String>
|
<system:String x:Key="uninstall">Uninstall</system:String>
|
||||||
<system:String x:Key="remove">Remove</system:String>
|
<system:String x:Key="remove">Remove</system:String>
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
using System.Collections.ObjectModel;
|
using DesktopMagic.Plugins;
|
||||||
|
|
||||||
|
using System.Collections.ObjectModel;
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
@@ -11,14 +13,28 @@ internal class DesktopMagicSettings : INotifyPropertyChanged
|
|||||||
public event PropertyChangedEventHandler? PropertyChanged;
|
public event PropertyChangedEventHandler? PropertyChanged;
|
||||||
|
|
||||||
private ObservableCollection<Layout> layouts = [];
|
private ObservableCollection<Layout> layouts = [];
|
||||||
|
private ObservableCollection<Theme> themes = [];
|
||||||
private string? currentLayoutName;
|
private string? currentLayoutName;
|
||||||
|
|
||||||
|
public ObservableCollection<Theme> Themes
|
||||||
|
{
|
||||||
|
get => themes;
|
||||||
|
init
|
||||||
|
{
|
||||||
|
themes = value;
|
||||||
|
themes.CollectionChanged += (s, e) => CurrentLayout.UpdateTheme();
|
||||||
|
OnPropertyChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public ObservableCollection<Layout> Layouts
|
public ObservableCollection<Layout> Layouts
|
||||||
{
|
{
|
||||||
get => layouts;
|
get => layouts;
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
layouts = value;
|
layouts = value;
|
||||||
|
layouts.CollectionChanged += (s, e) => OnPropertyChanged(nameof(CurrentLayout));
|
||||||
|
layouts.CollectionChanged += (s, e) => OnPropertyChanged(nameof(CurrentLayoutName));
|
||||||
OnPropertyChanged();
|
OnPropertyChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -39,6 +55,14 @@ internal class DesktopMagicSettings : INotifyPropertyChanged
|
|||||||
|
|
||||||
public string? ModIoAccessToken { get; set; }
|
public string? ModIoAccessToken { get; set; }
|
||||||
|
|
||||||
|
public DesktopMagicSettings()
|
||||||
|
{
|
||||||
|
themes.CollectionChanged += (s, e) => CurrentLayout.UpdateTheme();
|
||||||
|
|
||||||
|
layouts.CollectionChanged += (s, e) => OnPropertyChanged(nameof(CurrentLayout));
|
||||||
|
layouts.CollectionChanged += (s, e) => OnPropertyChanged(nameof(CurrentLayoutName));
|
||||||
|
}
|
||||||
|
|
||||||
protected void OnPropertyChanged([CallerMemberName] string? name = null)
|
protected void OnPropertyChanged([CallerMemberName] string? name = null)
|
||||||
{
|
{
|
||||||
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
|
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
using DesktopMagic.Plugins;
|
using DesktopMagic.DataContexts;
|
||||||
|
using DesktopMagic.Plugins;
|
||||||
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
namespace DesktopMagic.Settings;
|
namespace DesktopMagic.Settings;
|
||||||
|
|
||||||
@@ -12,16 +14,29 @@ internal class Layout(string name) : INotifyPropertyChanged
|
|||||||
public event PropertyChangedEventHandler? PropertyChanged;
|
public event PropertyChangedEventHandler? PropertyChanged;
|
||||||
|
|
||||||
private string name = name;
|
private string name = name;
|
||||||
private Theme theme = new Theme();
|
private string? currentThemeName = null;
|
||||||
private Dictionary<uint, PluginSettings> plugins = [];
|
private Dictionary<uint, PluginSettings> plugins = [];
|
||||||
|
|
||||||
|
[JsonIgnore]
|
||||||
public Theme Theme
|
public Theme Theme
|
||||||
{
|
{
|
||||||
get => theme;
|
get
|
||||||
|
{
|
||||||
|
DesktopMagicSettings settings = MainWindowDataContext.GetSettings();
|
||||||
|
return settings.Themes.FirstOrDefault(theme => theme.Name == currentThemeName) ?? settings.Themes.FirstOrDefault() ?? new Theme("ERROR");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string? CurrentThemeName
|
||||||
|
{
|
||||||
|
get => Theme.Name;
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
theme = value;
|
if (currentThemeName != value)
|
||||||
OnPropertyChanged();
|
{
|
||||||
|
currentThemeName = value;
|
||||||
|
UpdateTheme();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -47,7 +62,19 @@ internal class Layout(string name) : INotifyPropertyChanged
|
|||||||
|
|
||||||
public void UpdatePlugins()
|
public void UpdatePlugins()
|
||||||
{
|
{
|
||||||
Plugins = Plugins.ToDictionary();
|
plugins = plugins.ToDictionary();
|
||||||
|
OnPropertyChanged(nameof(Plugins));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void UpdateTheme()
|
||||||
|
{
|
||||||
|
OnPropertyChanged(nameof(Theme));
|
||||||
|
OnPropertyChanged(nameof(CurrentThemeName));
|
||||||
|
|
||||||
|
foreach (PluginSettings pluginSettings in plugins.Values)
|
||||||
|
{
|
||||||
|
pluginSettings.UpdateTheme();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void OnPropertyChanged([CallerMemberName] string? propertyName = null)
|
protected void OnPropertyChanged([CallerMemberName] string? propertyName = null)
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ using DesktopMagic.Plugins;
|
|||||||
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
|
using System.Linq;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
@@ -13,19 +14,40 @@ public class PluginSettings : INotifyPropertyChanged
|
|||||||
{
|
{
|
||||||
public event PropertyChangedEventHandler? PropertyChanged;
|
public event PropertyChangedEventHandler? PropertyChanged;
|
||||||
|
|
||||||
private readonly Theme? theme;
|
private string? currentThemeName;
|
||||||
private List<SettingElement> settings = [];
|
private List<SettingElement> settings = [];
|
||||||
private bool enabled = false;
|
private bool enabled = false;
|
||||||
private Point position = new Point(100, 100);
|
private Point position = new Point(100, 100);
|
||||||
private Point size = new Point(300, 300);
|
private Point size = new Point(300, 300);
|
||||||
|
|
||||||
[JsonIgnore]
|
|
||||||
public Theme Theme => theme is null ? MainWindowDataContext.GetSettings().CurrentLayout.Theme : theme;
|
|
||||||
|
|
||||||
// Only for internal use to show the name of the plugin in the main window
|
// Only for internal use to show the name of the plugin in the main window
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public string Name { get; set; } = string.Empty;
|
public string Name { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
[JsonIgnore]
|
||||||
|
public Theme Theme
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
DesktopMagicSettings settings = MainWindowDataContext.GetSettings();
|
||||||
|
return settings.Themes.FirstOrDefault(t => t.Name == currentThemeName) ?? settings.CurrentLayout.Theme;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string? CurrentThemeName
|
||||||
|
{
|
||||||
|
get => currentThemeName;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (currentThemeName != value)
|
||||||
|
{
|
||||||
|
currentThemeName = value;
|
||||||
|
OnPropertyChanged();
|
||||||
|
OnPropertyChanged(nameof(Theme));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public List<SettingElement> Settings
|
public List<SettingElement> Settings
|
||||||
{
|
{
|
||||||
get => settings;
|
get => settings;
|
||||||
@@ -78,6 +100,12 @@ public class PluginSettings : INotifyPropertyChanged
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void UpdateTheme()
|
||||||
|
{
|
||||||
|
OnPropertyChanged(nameof(Theme));
|
||||||
|
OnPropertyChanged(nameof(CurrentThemeName));
|
||||||
|
}
|
||||||
|
|
||||||
protected void OnPropertyChanged([CallerMemberName] string? propertyName = null)
|
protected void OnPropertyChanged([CallerMemberName] string? propertyName = null)
|
||||||
{
|
{
|
||||||
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
|
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
|
||||||
|
|||||||
@@ -17,6 +17,9 @@ public abstract class Plugin
|
|||||||
[Setting("desktopmagic-vertical-alignment", "Vertical Alignment", -998)]
|
[Setting("desktopmagic-vertical-alignment", "Vertical Alignment", -998)]
|
||||||
internal ComboBox verticalAlignment = new ComboBox("Center", "Top", "Bottom");
|
internal ComboBox verticalAlignment = new ComboBox("Center", "Top", "Bottom");
|
||||||
|
|
||||||
|
[Setting("theme-override", "Theme Override", -997)]
|
||||||
|
internal ComboBox themeOverride = new ComboBox("<None>");
|
||||||
|
|
||||||
private IPluginData application = null!;
|
private IPluginData application = null!;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
<Identity
|
<Identity
|
||||||
Name="StoneRed.DesktopMagic"
|
Name="StoneRed.DesktopMagic"
|
||||||
Publisher="CN=6D1FD759-1951-428A-9B03-964461C7DBF5"
|
Publisher="CN=6D1FD759-1951-428A-9B03-964461C7DBF5"
|
||||||
Version="1.1.0.0" />
|
Version="1.2.0.0" />
|
||||||
|
|
||||||
<Properties>
|
<Properties>
|
||||||
<DisplayName>Desktop Magic</DisplayName>
|
<DisplayName>Desktop Magic</DisplayName>
|
||||||
|
|||||||
Reference in New Issue
Block a user