mirror of
https://github.com/Stone-Red-Code/DesktopMagic.git
synced 2026-09-04 17:06:12 +02:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ae2bee3125 | ||
|
|
3d48777224 | ||
|
|
0a3b4060de | ||
|
|
b2dfec2ed3 | ||
|
|
d1c598505e | ||
|
|
441a8b00cc | ||
|
|
7a8503ea9f | ||
|
|
de80a58b54 | ||
|
|
f62ea316a1 | ||
|
|
668c393a1b | ||
|
|
ed84fe37ed | ||
|
|
24dac76057 | ||
|
|
5e3642e539 | ||
|
|
2f6662caea | ||
|
|
aeb31af2f9 | ||
|
|
8f650ac35a | ||
|
|
b69bba68bb | ||
|
|
d75aef7460 | ||
|
|
9dd40c7ae8 | ||
|
|
921d6dfc20 | ||
|
|
520f145eb0 | ||
|
|
77a1383e7b | ||
|
|
4e5502977d | ||
|
|
7761f505b1 | ||
|
|
05271e5f51 | ||
|
|
3d7caf2011 | ||
|
|
c25c270bd9 | ||
|
|
c29d70ef0d | ||
|
|
528d1161fe |
@@ -12,6 +12,7 @@ obj/
|
|||||||
*.user
|
*.user
|
||||||
*.userosscache
|
*.userosscache
|
||||||
*.sln.docstates
|
*.sln.docstates
|
||||||
|
*GPUCache/
|
||||||
|
|
||||||
# User-specific files (MonoDevelop/Xamarin Studio)
|
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||||
*.userprefs
|
*.userprefs
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
- [Plugin Documentation](https://github.com/Stone-Red-Code/DesktopMagic/wiki)
|
- [Plugin Documentation](https://github.com/Stone-Red-Code/DesktopMagic/wiki)
|
||||||
- [Licence](https://github.com/Stone-Red-Code/DesktopMagic/blob/main/LICENSE)
|
- [Licence](https://github.com/Stone-Red-Code/DesktopMagic/blob/main/LICENSE)
|
||||||
|
|
||||||
## Usage
|
## Setup
|
||||||
|
|
||||||
1. Download one of the [releases](https://github.com/Stone-Red-Code/DesktopMagic/releases).
|
1. Download one of the [releases](https://github.com/Stone-Red-Code/DesktopMagic/releases).
|
||||||
1. Follow one of the steps below.
|
1. Follow one of the steps below.
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
@@ -2,14 +2,14 @@
|
|||||||
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
|
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
|
||||||
|
|
||||||
#define MyAppName "DesktopMagic"
|
#define MyAppName "DesktopMagic"
|
||||||
#define MyAppVersion "0.0.3.0"
|
#define MyAppVersion "0.0.3.2"
|
||||||
#define MyAppPublisher "Stone_Red"
|
#define MyAppPublisher "Stone_Red"
|
||||||
#define MyAppExeName "DesktopMagic.exe"
|
#define MyAppExeName "DesktopMagic.exe"
|
||||||
|
|
||||||
[Setup]
|
[Setup]
|
||||||
; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications.
|
; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications.
|
||||||
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
|
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
|
||||||
AppId={{61FE5CE9-47C3-4255-A1F4-5BCF4ACA0876}
|
AppId={{61FE5CE9-47C3-4255-A1F4-5BCF4ACA0879}
|
||||||
AppName={#MyAppName}
|
AppName={#MyAppName}
|
||||||
AppVersion={#MyAppVersion}
|
AppVersion={#MyAppVersion}
|
||||||
;AppVerName={#MyAppName} {#MyAppVersion}
|
;AppVerName={#MyAppName} {#MyAppVersion}
|
||||||
@@ -36,7 +36,7 @@ Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{
|
|||||||
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 6.1; Check: not IsAdminInstallMode
|
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 6.1; Check: not IsAdminInstallMode
|
||||||
|
|
||||||
[Files]
|
[Files]
|
||||||
Source: "..\DesktopMagic\bin\Release\net5.0-windows\publish\DesktopMagic.exe"; DestDir: "{app}"; Flags: ignoreversion
|
Source: "..\DesktopMagic\bin\Release\net6.0-windows\publish\*"; DestDir: "{app}"; Flags: ignoreversion
|
||||||
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
|
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
|
||||||
|
|
||||||
[Icons]
|
[Icons]
|
||||||
|
|||||||
@@ -1,13 +1,14 @@
|
|||||||
using AlwaysUpToDate;
|
global using Stone_Red_Utilities.Logging;
|
||||||
|
|
||||||
using Stone_Red_Utilities.Logging;
|
using AlwaysUpToDate;
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
using System.IO;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
|
|
||||||
namespace DesktopMagic
|
namespace DesktopMagic;
|
||||||
{
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Interaction logic for App.xaml
|
/// Interaction logic for App.xaml
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -18,7 +19,7 @@ namespace DesktopMagic
|
|||||||
#if DEBUG
|
#if DEBUG
|
||||||
private readonly Updater updater = new Updater(TimeSpan.FromDays(1), "https://raw.githubusercontent.com/Stone-Red-Code/DesktopMagic/develop/update/updateInfo.json");
|
private readonly Updater updater = new Updater(TimeSpan.FromDays(1), "https://raw.githubusercontent.com/Stone-Red-Code/DesktopMagic/develop/update/updateInfo.json");
|
||||||
#else
|
#else
|
||||||
private readonly Updater updater = new Updater(TimeSpan.FromHours(1), "https://raw.githubusercontent.com/Stone-Red-Code/DesktopMagic/main/update/updateInfo.json");
|
private readonly Updater updater = new Updater(TimeSpan.FromDays(1), "https://raw.githubusercontent.com/Stone-Red-Code/DesktopMagic/main/update/updateInfo.json");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
public const string AppName = "Desktop Magic";
|
public const string AppName = "Desktop Magic";
|
||||||
@@ -29,19 +30,21 @@ namespace DesktopMagic
|
|||||||
public App()
|
public App()
|
||||||
{
|
{
|
||||||
logFilePath = ApplicationDataPath + "\\Log.log";
|
logFilePath = ApplicationDataPath + "\\Log.log";
|
||||||
Setup();
|
|
||||||
// Try to grab mutex
|
// Try to grab mutex
|
||||||
_mutex = new Mutex(true, $"Stone_Red{AppName}", out bool createdNew);
|
_mutex = new Mutex(true, $"Stone_Red{AppName}", out bool createdNew);
|
||||||
|
|
||||||
//check if creating new was succesfull
|
//check if creating new was successful
|
||||||
if (!createdNew)
|
if (!createdNew)
|
||||||
{
|
{
|
||||||
|
Setup(false);
|
||||||
Logger.Log("Shutting down because other instance already running.", "Setup");
|
Logger.Log("Shutting down because other instance already running.", "Setup");
|
||||||
//Shutdown Aplication
|
//Shutdown Application
|
||||||
Current.Shutdown();
|
Current.Shutdown();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
Setup(true);
|
||||||
Exit += CloseMutexHandler;
|
Exit += CloseMutexHandler;
|
||||||
|
|
||||||
updater.ProgressChanged += Updater_ProgressChanged;
|
updater.ProgressChanged += Updater_ProgressChanged;
|
||||||
@@ -59,7 +62,7 @@ namespace DesktopMagic
|
|||||||
|
|
||||||
private void Updater_NoUpdateAvailible()
|
private void Updater_NoUpdateAvailible()
|
||||||
{
|
{
|
||||||
Logger.Log("No update avalible.", "Updater");
|
Logger.Log("No update available", "Updater");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Updater_OnException(Exception exception)
|
private void Updater_OnException(Exception exception)
|
||||||
@@ -69,7 +72,7 @@ namespace DesktopMagic
|
|||||||
|
|
||||||
private void Updater_ProgressChanged(long? totalFileSize, long totalBytesDownloaded, double? progressPercentage)
|
private void Updater_ProgressChanged(long? totalFileSize, long totalBytesDownloaded, double? progressPercentage)
|
||||||
{
|
{
|
||||||
Logger.Log($"{progressPercentage}% {totalBytesDownloaded}/{totalFileSize}", "Updater");
|
Logger.Log($"Downloading: {progressPercentage}% {totalBytesDownloaded}/{totalFileSize}", "Updater");
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void CloseMutexHandler(object sender, EventArgs e)
|
protected void CloseMutexHandler(object sender, EventArgs e)
|
||||||
@@ -77,7 +80,7 @@ namespace DesktopMagic
|
|||||||
_mutex?.Close();
|
_mutex?.Close();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Setup()
|
private void Setup(bool clearLogFile)
|
||||||
{
|
{
|
||||||
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
|
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
|
||||||
|
|
||||||
@@ -104,7 +107,7 @@ namespace DesktopMagic
|
|||||||
InfoConfig = new OutputConfig()
|
InfoConfig = new OutputConfig()
|
||||||
{
|
{
|
||||||
Color = ConsoleColor.White,
|
Color = ConsoleColor.White,
|
||||||
LogTarget = LogTarget.Console | LogTarget.File,
|
LogTarget = LogTarget.DebugConsole | LogTarget.File,
|
||||||
FilePath = logFilePath
|
FilePath = logFilePath
|
||||||
},
|
},
|
||||||
DebugConfig = new OutputConfig()
|
DebugConfig = new OutputConfig()
|
||||||
@@ -114,11 +117,30 @@ namespace DesktopMagic
|
|||||||
},
|
},
|
||||||
FormatConfig = new FormatConfig()
|
FormatConfig = new FormatConfig()
|
||||||
{
|
{
|
||||||
DebugConsoleFormat = $"> {{{LogFormatType.DateTime}:hh:mm:ss}} | {{{LogFormatType.LogSeverity},-5}} | {{{LogFormatType.Message}}}\n> at {{{LogFormatType.LineNumber},3}} | {{{LogFormatType.FilePath}}}"
|
DebugConsoleFormat = $"> {{{LogFormatType.DateTime}:hh:mm:ss}} | {{{LogFormatType.LogSeverity},-5}} | {{{LogFormatType.Message}}}\nat {{{LogFormatType.LineNumber}}} | {{{LogFormatType.FilePath}}}"
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (!Directory.Exists(ApplicationDataPath))
|
||||||
|
{
|
||||||
|
_ = Directory.CreateDirectory(ApplicationDataPath);
|
||||||
|
}
|
||||||
|
Logger.Log("Created ApplicationData Folder", "Main");
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_ = MessageBox.Show(ex.ToString());
|
||||||
|
Logger.Log(ex.Message, "Setup", LogSeverity.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clearLogFile)
|
||||||
|
{
|
||||||
Logger.ClearLogFile(LogSeverity.Info);
|
Logger.ClearLogFile(LogSeverity.Info);
|
||||||
Logger.Log("Log setup complete.", "Setup");
|
}
|
||||||
|
|
||||||
|
Logger.Log("Log setup complete", "Setup");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
|
private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
|
||||||
@@ -127,4 +149,3 @@ namespace DesktopMagic
|
|||||||
Logger.Log(exception + (e.IsTerminating ? "\t Process terminating!" : ""), exception.Source, LogSeverity.Fatal);
|
Logger.Log(exception + (e.IsTerminating ? "\t Process terminating!" : ""), exception.Source, LogSeverity.Fatal);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
+9
-2
@@ -14,8 +14,15 @@
|
|||||||
x:Name="window">
|
x:Name="window">
|
||||||
<Grid>
|
<Grid>
|
||||||
<Rectangle x:Name="panel" Fill="#4CBAFFEF" Stroke="White" Margin="0,0,0,0" Visibility="Collapsed" />
|
<Rectangle x:Name="panel" Fill="#4CBAFFEF" Stroke="White" Margin="0,0,0,0" Visibility="Collapsed" />
|
||||||
<Viewbox StretchDirection="DownOnly" Stretch="Uniform">
|
<Border x:Name="border"/>
|
||||||
<TextBlock x:Name="textBlock" FontSize="999" Foreground="White" Text="CPU: 000%" IsHitTestVisible="False" />
|
<Viewbox x:Name="viewBox" StretchDirection="Both" Stretch="Uniform">
|
||||||
|
<Viewbox.Clip>
|
||||||
|
<RectangleGeometry x:Name="rectangleGeometry" RadiusX="{Binding ElementName=border, Path=CornerRadius.TopLeft}" RadiusY="{Binding ElementName=border, Path=CornerRadius.TopLeft}" Rect="{Binding ElementName=border}"/>
|
||||||
|
</Viewbox.Clip>
|
||||||
|
<DockPanel x:Name="dockPanel">
|
||||||
|
<TextBlock x:Name="textBlock" Foreground="White" FontSize="100" Text="CPU: " IsHitTestVisible="False" />
|
||||||
|
<TextBlock x:Name="valueTextBlock" TextAlignment="Right" FontSize="100" Foreground="White" Text="000%" IsHitTestVisible="False" />
|
||||||
|
</DockPanel>
|
||||||
</Viewbox>
|
</Viewbox>
|
||||||
</Grid>
|
</Grid>
|
||||||
<WindowChrome.WindowChrome>
|
<WindowChrome.WindowChrome>
|
||||||
+35
-10
@@ -1,4 +1,6 @@
|
|||||||
using Microsoft.Win32;
|
using DesktopMagic.Helpers;
|
||||||
|
|
||||||
|
using Microsoft.Win32;
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
@@ -6,12 +8,10 @@ using System.Timers;
|
|||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Interop;
|
using System.Windows.Interop;
|
||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
|
using System.Windows.Threading;
|
||||||
|
|
||||||
namespace DesktopMagic
|
namespace DesktopMagic
|
||||||
{
|
{
|
||||||
/// <summary>
|
|
||||||
/// Interaktionslogik für TimeWindow.xaml
|
|
||||||
/// </summary>
|
|
||||||
public partial class CpuUsageWindow : Window
|
public partial class CpuUsageWindow : Window
|
||||||
{
|
{
|
||||||
private RegistryKey key;
|
private RegistryKey key;
|
||||||
@@ -41,7 +41,7 @@ namespace DesktopMagic
|
|||||||
|
|
||||||
Timer t = new Timer();
|
Timer t = new Timer();
|
||||||
t.Interval = 100;
|
t.Interval = 100;
|
||||||
t.Elapsed += T_Elapsed;
|
t.Elapsed += UpdateTimer_Elapsed;
|
||||||
t.Start();
|
t.Start();
|
||||||
|
|
||||||
Timer valueTimer = new Timer();
|
Timer valueTimer = new Timer();
|
||||||
@@ -68,23 +68,37 @@ namespace DesktopMagic
|
|||||||
WindowPos.GetWindowLong(helper.Handle, WindowPos.GWL_EXSTYLE) | WindowPos.WS_EX_NOACTIVATE);
|
WindowPos.GetWindowLong(helper.Handle, WindowPos.GWL_EXSTYLE) | WindowPos.WS_EX_NOACTIVATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void T_Elapsed(object sender, ElapsedEventArgs e)
|
private void UpdateTimer_Elapsed(object sender, ElapsedEventArgs e)
|
||||||
{
|
{
|
||||||
Dispatcher.Invoke(() =>
|
Dispatcher.Invoke(() =>
|
||||||
{
|
{
|
||||||
if (MainWindow.EditMode)
|
if (MainWindow.EditMode)
|
||||||
{
|
{
|
||||||
panel.Visibility = Visibility.Visible;
|
panel.Visibility = Visibility.Visible;
|
||||||
|
tileBar.CaptionHeight = tileBar.CaptionHeight = ActualHeight - 10 < 0 ? 0 : ActualHeight - 10;
|
||||||
WindowPos.SetIsLocked(this, false);
|
WindowPos.SetIsLocked(this, false);
|
||||||
|
ResizeMode = ResizeMode.CanResize;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
panel.Visibility = Visibility.Collapsed;
|
panel.Visibility = Visibility.Collapsed;
|
||||||
|
tileBar.CaptionHeight = 0;
|
||||||
WindowPos.SetIsLocked(this, true);
|
WindowPos.SetIsLocked(this, true);
|
||||||
|
ResizeMode = ResizeMode.NoResize;
|
||||||
}
|
}
|
||||||
|
|
||||||
textBlock.FontFamily = new FontFamily(MainWindow.GlobalFont);
|
rectangleGeometry.Rect = new Rect(0, 0, border.ActualWidth, border.ActualHeight);
|
||||||
textBlock.Foreground = MainWindow.GlobalColor;
|
border.Background = MainWindow.Theme.BackgroundBrush;
|
||||||
|
border.CornerRadius = new CornerRadius(MainWindow.Theme.CornerRadius);
|
||||||
|
viewBox.Margin = new Thickness(MainWindow.Theme.Margin);
|
||||||
|
border.Width = viewBox.ActualWidth + MainWindow.Theme.Margin * 2;
|
||||||
|
border.Height = viewBox.ActualHeight + MainWindow.Theme.Margin * 2;
|
||||||
|
textBlock.FontFamily = new FontFamily(MainWindow.Theme.Font);
|
||||||
|
textBlock.Foreground = MainWindow.Theme.PrimaryBrush;
|
||||||
|
valueTextBlock.FontFamily = new FontFamily(MainWindow.Theme.Font);
|
||||||
|
valueTextBlock.Foreground = MainWindow.Theme.PrimaryBrush;
|
||||||
|
|
||||||
|
ClculateWidth();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -93,13 +107,24 @@ namespace DesktopMagic
|
|||||||
string cpuUsage = GetCpuUsage();
|
string cpuUsage = GetCpuUsage();
|
||||||
Dispatcher.Invoke(() =>
|
Dispatcher.Invoke(() =>
|
||||||
{
|
{
|
||||||
textBlock.Text = cpuUsage;
|
valueTextBlock.Text = cpuUsage;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void ClculateWidth()
|
||||||
|
{
|
||||||
|
string template = "CPU: ###%";
|
||||||
|
double lenght = 0;
|
||||||
|
for (int i = 0; i < 9; i++)
|
||||||
|
{
|
||||||
|
lenght = Math.Max(StringUtilities.MeasureString(template.Replace('#', i.ToString()[0]), textBlock).Width, lenght);
|
||||||
|
}
|
||||||
|
dockPanel.Width = lenght;
|
||||||
|
}
|
||||||
|
|
||||||
private string GetCpuUsage()
|
private string GetCpuUsage()
|
||||||
{
|
{
|
||||||
return "CPU: " + ((int)cpuCounter.NextValue()).ToString().PadLeft(3, '0') + "%";
|
return $"{(int)cpuCounter.NextValue()}%";
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Window_LocationChanged(object sender, EventArgs e)
|
private void Window_LocationChanged(object sender, EventArgs e)
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
using DesktopMagicPluginAPI;
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Drawing.Text;
|
||||||
|
|
||||||
|
namespace DesktopMagic.BuiltInWindowElements
|
||||||
|
{
|
||||||
|
internal class DatePlugin : Plugin
|
||||||
|
{
|
||||||
|
public override int UpdateInterval => 1000;
|
||||||
|
|
||||||
|
private DateTime oldDateTime = new DateTime();
|
||||||
|
private Color oldColor = Color.White;
|
||||||
|
private string oldFont;
|
||||||
|
|
||||||
|
public override Bitmap Main()
|
||||||
|
{
|
||||||
|
if (oldDateTime.Date == DateTime.Now.Date && oldColor == Application.Theme.PrimaryColor && oldFont == Application.Theme.Font)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
oldDateTime = DateTime.Now;
|
||||||
|
oldColor = Application.Theme.PrimaryColor;
|
||||||
|
oldFont = Application.Theme.Font;
|
||||||
|
|
||||||
|
string date = DateTime.Now.ToLongDateString();
|
||||||
|
|
||||||
|
Font font = new Font(Application.Theme.Font, 200);
|
||||||
|
|
||||||
|
Bitmap bmp = new Bitmap(1, 1);
|
||||||
|
bmp.SetResolution(100, 100);
|
||||||
|
using Graphics tmpGr = Graphics.FromImage(bmp);
|
||||||
|
tmpGr.TextRenderingHint = TextRenderingHint.AntiAlias;
|
||||||
|
|
||||||
|
SizeF size = tmpGr.MeasureString(date, font);
|
||||||
|
|
||||||
|
bmp = new Bitmap((int)size.Width, (int)size.Height);
|
||||||
|
bmp.SetResolution(100, 100);
|
||||||
|
|
||||||
|
using Graphics gr = Graphics.FromImage(bmp);
|
||||||
|
|
||||||
|
gr.TextRenderingHint = TextRenderingHint.AntiAlias;
|
||||||
|
gr.DrawString(date, font, new SolidBrush(Application.Theme.PrimaryColor), 0, 0);
|
||||||
|
|
||||||
|
return bmp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+31
-139
@@ -1,111 +1,33 @@
|
|||||||
using Microsoft.Win32;
|
using DesktopMagicPluginAPI;
|
||||||
|
|
||||||
using NAudio.Wave;
|
using NAudio.Wave;
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.Drawing.Drawing2D;
|
|
||||||
using System.Drawing.Imaging;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
using System.Timers;
|
|
||||||
using System.Windows;
|
|
||||||
using System.Windows.Interop;
|
|
||||||
using System.Windows.Media.Imaging;
|
|
||||||
using System.Windows.Threading;
|
|
||||||
|
|
||||||
namespace DesktopMagic
|
namespace DesktopMagic.BuiltInWindowElements
|
||||||
{
|
{
|
||||||
public partial class MusicVisualizerWindow : Window
|
internal class MusicVisualizerPlugin : Plugin
|
||||||
{
|
{
|
||||||
[DllImport("user32.dll")]
|
private IWaveIn waveIn;
|
||||||
private static extern void SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
|
|
||||||
|
|
||||||
private readonly RegistryKey key;
|
|
||||||
private readonly IWaveIn waveIn;
|
|
||||||
private const int fftLength = 1024; // NAudio fft wants powers of two!
|
private const int fftLength = 1024; // NAudio fft wants powers of two!
|
||||||
private readonly SampleAggregator sampleAggregator = new SampleAggregator(fftLength);
|
private readonly SampleAggregator sampleAggregator = new SampleAggregator(fftLength);
|
||||||
private volatile bool calculate = true;
|
private volatile bool calculate = true;
|
||||||
|
private Bitmap output = new Bitmap(880, 300);
|
||||||
|
|
||||||
public MusicVisualizerWindow()
|
public override int UpdateInterval => 0;
|
||||||
|
|
||||||
|
public override void Start()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
sampleAggregator.FftCalculated += FftCalculated;
|
||||||
|
|
||||||
Window w = new()
|
|
||||||
{
|
|
||||||
Top = -100,
|
|
||||||
Left = -100,
|
|
||||||
Width = 0,
|
|
||||||
Height = 0,
|
|
||||||
WindowStyle = WindowStyle.ToolWindow,
|
|
||||||
ShowInTaskbar = false
|
|
||||||
};
|
|
||||||
|
|
||||||
w.Show();
|
|
||||||
Owner = w;
|
|
||||||
w.Hide();
|
|
||||||
|
|
||||||
sampleAggregator.FftCalculated += new EventHandler<FftEventArgs>(FftCalculated);
|
|
||||||
sampleAggregator.PerformFFT = true;
|
sampleAggregator.PerformFFT = true;
|
||||||
|
|
||||||
waveIn = new WasapiLoopbackCapture();
|
waveIn = new WasapiLoopbackCapture();
|
||||||
|
|
||||||
waveIn.DataAvailable += OnDataAvailable;
|
waveIn.DataAvailable += OnDataAvailable;
|
||||||
waveIn.StartRecording();
|
waveIn.StartRecording();
|
||||||
|
|
||||||
Timer t = new Timer();
|
|
||||||
t.Interval = 100;
|
|
||||||
t.Elapsed += T_Elapsed;
|
|
||||||
t.Start();
|
|
||||||
|
|
||||||
key = Registry.CurrentUser.CreateSubKey(@"Software\" + App.AppName);
|
|
||||||
|
|
||||||
Top = double.Parse(key.GetValue("MusicVisualizerWindowTop", 100).ToString());
|
|
||||||
|
|
||||||
Left = double.Parse(key.GetValue("MusicVisualizerWindowLeft", 100).ToString());
|
|
||||||
|
|
||||||
Height = double.Parse(key.GetValue("MusicVisualizerWindowHeight", 200).ToString());
|
|
||||||
|
|
||||||
Width = double.Parse(key.GetValue("MusicVisualizerWindowWidth", 500).ToString());
|
|
||||||
|
|
||||||
IsEnabled = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void OnSourceInitialized(EventArgs e)
|
|
||||||
{
|
|
||||||
base.OnSourceInitialized(e);
|
|
||||||
|
|
||||||
//Set the window style to noactivate.
|
|
||||||
WindowInteropHelper helper = new WindowInteropHelper(this);
|
|
||||||
WindowPos.SetWindowLong(helper.Handle, WindowPos.GWL_EXSTYLE,
|
|
||||||
WindowPos.GetWindowLong(helper.Handle, WindowPos.GWL_EXSTYLE) | WindowPos.WS_EX_NOACTIVATE);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void T_Elapsed(object sender, ElapsedEventArgs e)
|
|
||||||
{
|
|
||||||
Dispatcher.Invoke(() =>
|
|
||||||
{
|
|
||||||
if (MainWindow.EditMode)
|
|
||||||
{
|
|
||||||
panel.Visibility = Visibility.Visible;
|
|
||||||
WindowPos.SetIsLocked(this, false);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
panel.Visibility = Visibility.Collapsed;
|
|
||||||
WindowPos.SetIsLocked(this, true);
|
|
||||||
}
|
|
||||||
if (!IsLoaded)
|
|
||||||
{
|
|
||||||
calculate = false;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
calculate = true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnDataAvailable(object sender, WaveInEventArgs e)
|
private void OnDataAvailable(object sender, WaveInEventArgs e)
|
||||||
@@ -134,7 +56,7 @@ namespace DesktopMagic
|
|||||||
}
|
}
|
||||||
|
|
||||||
List<double> fft = new List<double>();
|
List<double> fft = new List<double>();
|
||||||
for (int i = 0; i < e.Result.Length / 2 - 70; i++)
|
for (int i = 0; i < (e.Result.Length / 2) - 70; i++)
|
||||||
{
|
{
|
||||||
int v = i;
|
int v = i;
|
||||||
if (v < 20)
|
if (v < 20)
|
||||||
@@ -142,7 +64,7 @@ namespace DesktopMagic
|
|||||||
v = 20;
|
v = 20;
|
||||||
}
|
}
|
||||||
|
|
||||||
int multiplier = 100 - MainWindow.AmplifierLevel * 2;
|
int multiplier = 100 - (MainWindow.AmplifierLevel * 2);
|
||||||
multiplier = multiplier == 0 ? 1 : multiplier;
|
multiplier = multiplier == 0 ? 1 : multiplier;
|
||||||
fft.Add(Math.Abs(e.Result[i].Y * v / multiplier));
|
fft.Add(Math.Abs(e.Result[i].Y * v / multiplier));
|
||||||
}
|
}
|
||||||
@@ -173,7 +95,7 @@ namespace DesktopMagic
|
|||||||
{
|
{
|
||||||
double temp = 0;
|
double temp = 0;
|
||||||
int j;
|
int j;
|
||||||
for (j = i * count; j < count + i * count; j++)
|
for (j = i * count; j < count + (i * count); j++)
|
||||||
{
|
{
|
||||||
temp += fft[j];
|
temp += fft[j];
|
||||||
}
|
}
|
||||||
@@ -227,9 +149,6 @@ namespace DesktopMagic
|
|||||||
lastFft = fft;
|
lastFft = fft;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Stopwatch sw = new Stopwatch();
|
|
||||||
sw.Start();
|
|
||||||
Bitmap bm = new Bitmap(885, 300);
|
|
||||||
int offset = 0;
|
int offset = 0;
|
||||||
|
|
||||||
if (!MainWindow.MirrorMode && MainWindow.SpectrumMode != 1)
|
if (!MainWindow.MirrorMode && MainWindow.SpectrumMode != 1)
|
||||||
@@ -242,9 +161,9 @@ namespace DesktopMagic
|
|||||||
offset = 1;
|
offset = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
using (Graphics gr = Graphics.FromImage(bm))
|
using (Graphics gr = Graphics.FromImage(output))
|
||||||
{
|
{
|
||||||
gr.SmoothingMode = SmoothingMode.None;
|
gr.Clear(Color.Transparent);
|
||||||
PointF[] points = new PointF[scaledFft.Count + 2];
|
PointF[] points = new PointF[scaledFft.Count + 2];
|
||||||
|
|
||||||
int fftIndex = 0;
|
int fftIndex = 0;
|
||||||
@@ -264,8 +183,8 @@ namespace DesktopMagic
|
|||||||
|
|
||||||
if (!fftIndexReverse)
|
if (!fftIndexReverse)
|
||||||
{
|
{
|
||||||
points[pointIndex + 1] = new PointF(bm.Width - 4 * pointIndex, bm.Height / 2 + value);
|
points[pointIndex + 1] = new PointF(output.Width - (4 * pointIndex), (output.Height / 2) + value);
|
||||||
points[points.Length / 2 + pointIndex + 1] = new PointF(bm.Width - 4 * pointIndex, bm.Height / 2 - value);
|
points[(points.Length / 2) + pointIndex + 1] = new PointF(output.Width - (4 * pointIndex), (output.Height / 2) - value);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -274,7 +193,7 @@ namespace DesktopMagic
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
points[pointIndex + 1] = new PointF(2 * pointIndex, bm.Height - value - 1 + offset);
|
points[pointIndex + 1] = new PointF(2 * pointIndex, output.Height - value - 1 + offset);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -296,17 +215,11 @@ namespace DesktopMagic
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SetPoints(points, bm.Width, bm.Height, offset);
|
SetPoints(points, output.Width, output.Height, offset);
|
||||||
|
|
||||||
Brush brush;
|
Brush brush = MainWindow.MusicVisualzerColor.HasValue
|
||||||
if (MainWindow.MusicVisualzerColor == null)
|
? new SolidBrush(MainWindow.MusicVisualzerColor.Value)
|
||||||
{
|
: new SolidBrush(MainWindow.Theme.PrimaryColor);
|
||||||
brush = MainWindow.GlobalSystemColor;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
brush = MainWindow.MusicVisualzerColor;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (MainWindow.LineMode)
|
if (MainWindow.LineMode)
|
||||||
{
|
{
|
||||||
@@ -326,10 +239,7 @@ namespace DesktopMagic
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Dispatcher.BeginInvoke((Action)delegate
|
Application.UpdateWindow();
|
||||||
{
|
|
||||||
image.Source = BitmapToImageSource(bm);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
catch { }
|
catch { }
|
||||||
}
|
}
|
||||||
@@ -340,51 +250,33 @@ namespace DesktopMagic
|
|||||||
{
|
{
|
||||||
case 1:
|
case 1:
|
||||||
points[0] = new PointF(width, height / 2);
|
points[0] = new PointF(width, height / 2);
|
||||||
points[points.Length - 1] = new PointF(0, height / 2);
|
points[^1] = new PointF(0, height / 2);
|
||||||
|
|
||||||
points[points.Length / 2] = new PointF(width, height / 2);
|
points[points.Length / 2] = new PointF(width, height / 2);
|
||||||
points[points.Length / 2 - 1] = new PointF(0, height / 2);
|
points[(points.Length / 2) - 1] = new PointF(0, height / 2);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
points[0] = new PointF(0, 0 - offset);
|
points[0] = new PointF(0, 0 - offset);
|
||||||
points[points.Length - 1] = new PointF(points[points.Length - 2].X, 0 - offset);
|
points[^1] = new PointF(points[^2].X, 0 - offset);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
points[0] = new PointF(0, height);
|
points[0] = new PointF(0, height);
|
||||||
points[points.Length - 1] = new PointF(points[points.Length - 2].X, height);
|
points[^1] = new PointF(points[^2].X, height);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private BitmapSource BitmapToImageSource(Bitmap bitmap)
|
public override Bitmap Main()
|
||||||
{
|
{
|
||||||
BitmapData bitmapData = bitmap.LockBits(
|
return output;
|
||||||
new Rectangle(0, 0, bitmap.Width, bitmap.Height),
|
|
||||||
ImageLockMode.ReadOnly, bitmap.PixelFormat);
|
|
||||||
|
|
||||||
BitmapSource bitmapSource = BitmapSource.Create(
|
|
||||||
bitmapData.Width, bitmapData.Height,
|
|
||||||
bitmap.HorizontalResolution, bitmap.VerticalResolution,
|
|
||||||
System.Windows.Media.PixelFormats.Bgra32, null,
|
|
||||||
bitmapData.Scan0, bitmapData.Stride * bitmapData.Height, bitmapData.Stride);
|
|
||||||
|
|
||||||
bitmap.UnlockBits(bitmapData);
|
|
||||||
return bitmapSource;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Window_LocationChanged(object sender, EventArgs e)
|
public override void Stop()
|
||||||
{
|
{
|
||||||
key.SetValue("MusicVisualizerWindowTop", this.Top);
|
calculate = false;
|
||||||
key.SetValue("MusicVisualizerWindowLeft", this.Left);
|
waveIn?.StopRecording();
|
||||||
}
|
|
||||||
|
|
||||||
private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
|
|
||||||
{
|
|
||||||
key.SetValue("MusicVisualizerWindowHeight", Height);
|
|
||||||
key.SetValue("MusicVisualizerWindowWidth", Width);
|
|
||||||
tileBar.CaptionHeight = ActualHeight - 10;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
using DesktopMagicPluginAPI;
|
||||||
|
using DesktopMagicPluginAPI.Drawing;
|
||||||
|
using DesktopMagicPluginAPI.Inputs;
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Drawing.Text;
|
||||||
|
|
||||||
|
namespace DesktopMagic.BuiltInWindowElements
|
||||||
|
{
|
||||||
|
internal class TimePlugin : Plugin
|
||||||
|
{
|
||||||
|
[Element("Display Seconds:")]
|
||||||
|
private CheckBox checkBox = new CheckBox(true);
|
||||||
|
|
||||||
|
public override int UpdateInterval => 1000;
|
||||||
|
|
||||||
|
public override Bitmap Main()
|
||||||
|
{
|
||||||
|
string time = checkBox.Value ? DateTime.Now.ToLongTimeString() : DateTime.Now.ToShortTimeString();
|
||||||
|
|
||||||
|
Font font = new Font(Application.Theme.Font, 200);
|
||||||
|
|
||||||
|
Bitmap bmp = new Bitmap(1, 1);
|
||||||
|
using Graphics tmpGr = Graphics.FromImage(bmp);
|
||||||
|
tmpGr.TextRenderingHint = TextRenderingHint.AntiAlias;
|
||||||
|
|
||||||
|
SizeF size = CalculateSize(tmpGr, font);
|
||||||
|
|
||||||
|
bmp = new Bitmap((int)size.Width, (int)size.Height);
|
||||||
|
bmp.SetResolution(100, 100);
|
||||||
|
|
||||||
|
using Graphics gr = Graphics.FromImage(bmp);
|
||||||
|
|
||||||
|
gr.TextRenderingHint = TextRenderingHint.AntiAlias;
|
||||||
|
gr.DrawStringNoLeftPadding(time, font, new SolidBrush(Application.Theme.PrimaryColor), 0, 0);
|
||||||
|
|
||||||
|
return bmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
private SizeF CalculateSize(Graphics graphics, Font font)
|
||||||
|
{
|
||||||
|
string template = checkBox.Value ? "##:##:##" : "##:##";
|
||||||
|
SizeF size = new SizeF();
|
||||||
|
for (int i = 0; i < 9; i++)
|
||||||
|
{
|
||||||
|
SizeF newSize = graphics.MeasureStringNoLeftPadding(template.Replace("#", i.ToString()), font);
|
||||||
|
|
||||||
|
size.Width = Math.Max(size.Width, newSize.Width);
|
||||||
|
size.Height = Math.Max(size.Height, newSize.Height);
|
||||||
|
}
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,91 +0,0 @@
|
|||||||
using Google.Apis.Auth.OAuth2;
|
|
||||||
using Google.Apis.Calendar.v3;
|
|
||||||
using Google.Apis.Calendar.v3.Data;
|
|
||||||
using Google.Apis.Services;
|
|
||||||
using Google.Apis.Util.Store;
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Diagnostics;
|
|
||||||
using System.IO;
|
|
||||||
using System.Threading;
|
|
||||||
|
|
||||||
namespace DesktopMagic
|
|
||||||
{
|
|
||||||
internal class CalendarManagment
|
|
||||||
{
|
|
||||||
private static string[] Scopes = { CalendarService.Scope.CalendarReadonly };
|
|
||||||
|
|
||||||
private static string ApplicationName = "Google Calendar API .NET " + App.AppName;
|
|
||||||
|
|
||||||
[Obsolete]
|
|
||||||
public (List<string>, List<string>) GetEvents()
|
|
||||||
{
|
|
||||||
List<string> upcomingEventNames = new List<string>();
|
|
||||||
List<string> upcomingEventTimes = new List<string>();
|
|
||||||
UserCredential credential;
|
|
||||||
|
|
||||||
if (!File.Exists("credentials.json"))
|
|
||||||
{
|
|
||||||
return (new(), new());
|
|
||||||
}
|
|
||||||
|
|
||||||
using (FileStream stream = new FileStream("credentials.json", FileMode.Open, FileAccess.Read))
|
|
||||||
{
|
|
||||||
// The file token.json stores the user's access and refresh tokens, and is created
|
|
||||||
// automatically when the authorization flow completes for the first time.
|
|
||||||
string credPath = "token.json";
|
|
||||||
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
|
|
||||||
GoogleClientSecrets.Load(stream).Secrets,
|
|
||||||
Scopes,
|
|
||||||
"user",
|
|
||||||
CancellationToken.None,
|
|
||||||
new FileDataStore(credPath, true)).Result;
|
|
||||||
Debug.WriteLine("Credential file saved to: " + credPath);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create Google Calendar API service.
|
|
||||||
CalendarService service = new CalendarService(new BaseClientService.Initializer()
|
|
||||||
{
|
|
||||||
HttpClientInitializer = credential,
|
|
||||||
ApplicationName = ApplicationName,
|
|
||||||
});
|
|
||||||
|
|
||||||
// Define parameters of request.
|
|
||||||
EventsResource.ListRequest request = service.Events.List("primary");
|
|
||||||
request.TimeMin = DateTime.Now;
|
|
||||||
request.ShowDeleted = false;
|
|
||||||
request.SingleEvents = true;
|
|
||||||
request.MaxResults = 10;
|
|
||||||
request.OrderBy = EventsResource.ListRequest.OrderByEnum.StartTime;
|
|
||||||
|
|
||||||
// List events.
|
|
||||||
Events events = request.Execute();
|
|
||||||
if (events.Items != null && events.Items.Count > 0)
|
|
||||||
{
|
|
||||||
foreach (Event eventItem in events.Items)
|
|
||||||
{
|
|
||||||
if (upcomingEventNames.Count < 10)
|
|
||||||
{
|
|
||||||
string when = eventItem.Start.DateTime.ToString();
|
|
||||||
if (string.IsNullOrEmpty(when))
|
|
||||||
{
|
|
||||||
when = eventItem.Start.Date;
|
|
||||||
}
|
|
||||||
upcomingEventNames.Add(eventItem.Summary);
|
|
||||||
upcomingEventTimes.Add(when);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return (upcomingEventNames, upcomingEventTimes);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
internal class CalendarItems
|
|
||||||
{
|
|
||||||
public string eventname { get; set; }
|
|
||||||
public string dateTime { get; set; }
|
|
||||||
public string font { get; set; }
|
|
||||||
public string color { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
<Window x:Class="DesktopMagic.CalendarWindow"
|
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
|
||||||
mc:Ignorable="d"
|
|
||||||
Title="CalendarWindow" Height="450" Width="800"
|
|
||||||
Background="Transparent"
|
|
||||||
WindowStyle="None"
|
|
||||||
AllowsTransparency="True"
|
|
||||||
LocationChanged="Window_LocationChanged"
|
|
||||||
SizeChanged="Window_SizeChanged"
|
|
||||||
x:Name="window">
|
|
||||||
<Grid>
|
|
||||||
<Rectangle x:Name="panel" Fill="#4CBAFFEF" Stroke="White" Margin="0,0,0,0" Visibility="Collapsed" />
|
|
||||||
<Viewbox StretchDirection="Both" Stretch="Uniform">
|
|
||||||
<ListView x:Name="listBox" Height="Auto" Width="Auto" Background="Transparent" BorderBrush="Transparent" FontSize="999" Foreground="White">
|
|
||||||
<ListView.ItemTemplate>
|
|
||||||
<DataTemplate>
|
|
||||||
<Grid>
|
|
||||||
<Grid.ColumnDefinitions>
|
|
||||||
<ColumnDefinition />
|
|
||||||
<ColumnDefinition />
|
|
||||||
</Grid.ColumnDefinitions>
|
|
||||||
<StackPanel>
|
|
||||||
<TextBlock Text="{Binding eventname}" FontSize="10" FontFamily="{Binding font}" Foreground="{Binding color}" Margin="0,0" />
|
|
||||||
<TextBlock Text="{Binding dateTime}" FontSize="7" FontFamily="{Binding font}" Foreground="Gray" Margin="0,-3" />
|
|
||||||
</StackPanel>
|
|
||||||
</Grid>
|
|
||||||
</DataTemplate>
|
|
||||||
</ListView.ItemTemplate>
|
|
||||||
</ListView>
|
|
||||||
</Viewbox>
|
|
||||||
</Grid>
|
|
||||||
<WindowChrome.WindowChrome>
|
|
||||||
<WindowChrome x:Name="tileBar" CaptionHeight="3000" ResizeBorderThickness="{x:Static SystemParameters.WindowResizeBorderThickness}" />
|
|
||||||
</WindowChrome.WindowChrome>
|
|
||||||
</Window>
|
|
||||||
@@ -1,159 +0,0 @@
|
|||||||
using Microsoft.Win32;
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Timers;
|
|
||||||
using System.Windows;
|
|
||||||
using System.Windows.Interop;
|
|
||||||
using System.Windows.Media;
|
|
||||||
|
|
||||||
namespace DesktopMagic
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Interaktionslogik für TimeWindow.xaml
|
|
||||||
/// </summary>
|
|
||||||
public partial class CalendarWindow : Window
|
|
||||||
{
|
|
||||||
private RegistryKey key;
|
|
||||||
private string oldFont = "";
|
|
||||||
private Brush oldColor;
|
|
||||||
private List<string> upcomingEventNames = new List<string>();
|
|
||||||
private List<string> upcomingEventTimes = new List<string>();
|
|
||||||
|
|
||||||
public CalendarWindow()
|
|
||||||
{
|
|
||||||
InitializeComponent();
|
|
||||||
|
|
||||||
Window w = new Window();
|
|
||||||
w.Top = -100;
|
|
||||||
w.Left = -100;
|
|
||||||
w.Width = 0;
|
|
||||||
w.Height = 0;
|
|
||||||
|
|
||||||
w.WindowStyle = WindowStyle.ToolWindow;
|
|
||||||
w.ShowInTaskbar = false;
|
|
||||||
w.Show();
|
|
||||||
Owner = w;
|
|
||||||
w.Hide();
|
|
||||||
|
|
||||||
Timer t = new Timer();
|
|
||||||
t.Interval = 100;
|
|
||||||
t.Elapsed += T_Elapsed;
|
|
||||||
t.Start();
|
|
||||||
|
|
||||||
Timer valueTimer = new Timer();
|
|
||||||
valueTimer.Interval = 600000;
|
|
||||||
valueTimer.Elapsed += ValueTimer_Elapsed;
|
|
||||||
;
|
|
||||||
valueTimer.Start();
|
|
||||||
|
|
||||||
key = Registry.CurrentUser.CreateSubKey(@"Software\" + App.AppName);
|
|
||||||
Top = double.Parse(key.GetValue("CalendarWindowTop", 100).ToString());
|
|
||||||
Left = double.Parse(key.GetValue("CalendarWindowLeft", 100).ToString());
|
|
||||||
Height = double.Parse(key.GetValue("CalendarWindowHeight", 200).ToString());
|
|
||||||
Width = double.Parse(key.GetValue("CalendarWindowWidth", 500).ToString());
|
|
||||||
//this.IsEnabled = false;
|
|
||||||
|
|
||||||
Task.Run(() =>
|
|
||||||
{
|
|
||||||
(upcomingEventNames, upcomingEventTimes) = new CalendarManagment().GetEvents();
|
|
||||||
Dispatcher.Invoke(() =>
|
|
||||||
{
|
|
||||||
LoadEvents();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void OnSourceInitialized(EventArgs e)
|
|
||||||
{
|
|
||||||
base.OnSourceInitialized(e);
|
|
||||||
|
|
||||||
//Set the window style to noactivate.
|
|
||||||
WindowInteropHelper helper = new WindowInteropHelper(this);
|
|
||||||
WindowPos.SetWindowLong(helper.Handle, WindowPos.GWL_EXSTYLE,
|
|
||||||
WindowPos.GetWindowLong(helper.Handle, WindowPos.GWL_EXSTYLE) | WindowPos.WS_EX_NOACTIVATE);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void ValueTimer_Elapsed(object sender, ElapsedEventArgs e)
|
|
||||||
{
|
|
||||||
Task.Run(() =>
|
|
||||||
{
|
|
||||||
(upcomingEventNames, upcomingEventTimes) = new CalendarManagment().GetEvents();
|
|
||||||
Dispatcher.Invoke(() =>
|
|
||||||
{
|
|
||||||
LoadEvents();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private void T_Elapsed(object sender, ElapsedEventArgs e)
|
|
||||||
{
|
|
||||||
Dispatcher.Invoke(() =>
|
|
||||||
{
|
|
||||||
if (MainWindow.EditMode)
|
|
||||||
{
|
|
||||||
panel.Visibility = Visibility.Visible;
|
|
||||||
WindowPos.SetIsLocked(this, false);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
panel.Visibility = Visibility.Collapsed;
|
|
||||||
WindowPos.SetIsLocked(this, true);
|
|
||||||
}
|
|
||||||
if (MainWindow.GlobalFont != oldFont || MainWindow.GlobalColor != oldColor)
|
|
||||||
{
|
|
||||||
oldColor = MainWindow.GlobalColor;
|
|
||||||
oldFont = MainWindow.GlobalFont;
|
|
||||||
LoadEvents();
|
|
||||||
}
|
|
||||||
listBox.SelectedIndex = -1;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private void LoadEvents()
|
|
||||||
{
|
|
||||||
listBox.Items.Clear();
|
|
||||||
CalendarItems calendarItem = new CalendarItems();
|
|
||||||
calendarItem.eventname = "Termine: ";
|
|
||||||
calendarItem.font = MainWindow.GlobalFont;
|
|
||||||
calendarItem.color = MainWindow.GlobalColor.ToString();
|
|
||||||
listBox.Items.Add(calendarItem);
|
|
||||||
|
|
||||||
for (int i = 0; i < upcomingEventNames.Count; i++)
|
|
||||||
{
|
|
||||||
DateTime dateTime = DateTime.Now;
|
|
||||||
DateTime.TryParse(upcomingEventTimes[i], out dateTime);
|
|
||||||
|
|
||||||
calendarItem = new CalendarItems();
|
|
||||||
calendarItem.eventname = upcomingEventNames[i];
|
|
||||||
calendarItem.dateTime = dateTime.ToString("dd-MM-yyyy");
|
|
||||||
calendarItem.font = MainWindow.GlobalFont;
|
|
||||||
calendarItem.color = MainWindow.GlobalColor.ToString();
|
|
||||||
|
|
||||||
if (dateTime < DateTime.Today.AddMonths(12) || upcomingEventTimes[i] == "-")
|
|
||||||
{
|
|
||||||
listBox.Items.Add(calendarItem);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
while (listBox.Items.Count < 10)
|
|
||||||
{
|
|
||||||
listBox.Items.Add("");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Window_LocationChanged(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
key.SetValue("CalendarWindowTop", Top);
|
|
||||||
key.SetValue("CalendarWindowLeft", Left);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
|
|
||||||
{
|
|
||||||
key.SetValue("CalendarWindowHeight", Height);
|
|
||||||
key.SetValue("CalendarWindowWidth", Width);
|
|
||||||
tileBar.CaptionHeight = ActualHeight - 10;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
<Window x:Class="DesktopMagic.DateWindow"
|
|
||||||
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"
|
|
||||||
mc:Ignorable="d"
|
|
||||||
Title="DateWindow" Height="450" Width="800"
|
|
||||||
Background="Transparent"
|
|
||||||
WindowStyle="None"
|
|
||||||
AllowsTransparency="True"
|
|
||||||
LocationChanged="Window_LocationChanged"
|
|
||||||
SizeChanged="Window_SizeChanged"
|
|
||||||
x:Name="window">
|
|
||||||
<Grid>
|
|
||||||
<Rectangle x:Name="panel" Fill="#4CBAFFEF" Stroke="White" Margin="0,0,0,0" Visibility="Collapsed" />
|
|
||||||
<Viewbox StretchDirection="DownOnly" Stretch="Uniform">
|
|
||||||
<TextBlock x:Name="textBlock" FontSize="999" Foreground="White" Text=" " IsHitTestVisible="False" />
|
|
||||||
</Viewbox>
|
|
||||||
</Grid>
|
|
||||||
<WindowChrome.WindowChrome>
|
|
||||||
<WindowChrome x:Name="tileBar" CaptionHeight="3000" ResizeBorderThickness="{x:Static SystemParameters.WindowResizeBorderThickness}" />
|
|
||||||
</WindowChrome.WindowChrome>
|
|
||||||
</Window>
|
|
||||||
@@ -1,90 +0,0 @@
|
|||||||
using Microsoft.Win32;
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Timers;
|
|
||||||
using System.Windows;
|
|
||||||
using System.Windows.Interop;
|
|
||||||
using System.Windows.Media;
|
|
||||||
|
|
||||||
namespace DesktopMagic
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Interaktionslogik für TimeWindow.xaml
|
|
||||||
/// </summary>
|
|
||||||
public partial class DateWindow : Window
|
|
||||||
{
|
|
||||||
private RegistryKey key;
|
|
||||||
|
|
||||||
public DateWindow()
|
|
||||||
{
|
|
||||||
InitializeComponent();
|
|
||||||
|
|
||||||
Window w = new Window();
|
|
||||||
w.Top = -100;
|
|
||||||
w.Left = -100;
|
|
||||||
w.Width = 0;
|
|
||||||
w.Height = 0;
|
|
||||||
|
|
||||||
w.WindowStyle = WindowStyle.ToolWindow;
|
|
||||||
w.ShowInTaskbar = false;
|
|
||||||
w.Show();
|
|
||||||
Owner = w;
|
|
||||||
w.Hide();
|
|
||||||
|
|
||||||
Timer t = new Timer();
|
|
||||||
t.Interval = 100;
|
|
||||||
t.Elapsed += T_Elapsed;
|
|
||||||
t.Start();
|
|
||||||
|
|
||||||
key = Registry.CurrentUser.CreateSubKey(@"Software\" + App.AppName);
|
|
||||||
Top = double.Parse(key.GetValue("DateWindowTop", 100).ToString());
|
|
||||||
Left = double.Parse(key.GetValue("DateWindowLeft", 100).ToString());
|
|
||||||
Height = double.Parse(key.GetValue("DateWindowHeight", 200).ToString());
|
|
||||||
Width = double.Parse(key.GetValue("DateWindowWidth", 500).ToString());
|
|
||||||
IsEnabled = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void OnSourceInitialized(EventArgs e)
|
|
||||||
{
|
|
||||||
base.OnSourceInitialized(e);
|
|
||||||
|
|
||||||
//Set the window style to noactivate.
|
|
||||||
WindowInteropHelper helper = new WindowInteropHelper(this);
|
|
||||||
WindowPos.SetWindowLong(helper.Handle, WindowPos.GWL_EXSTYLE,
|
|
||||||
WindowPos.GetWindowLong(helper.Handle, WindowPos.GWL_EXSTYLE) | WindowPos.WS_EX_NOACTIVATE);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void T_Elapsed(object sender, ElapsedEventArgs e)
|
|
||||||
{
|
|
||||||
Dispatcher.Invoke(() =>
|
|
||||||
{
|
|
||||||
if (MainWindow.EditMode)
|
|
||||||
{
|
|
||||||
panel.Visibility = Visibility.Visible;
|
|
||||||
WindowPos.SetIsLocked(this, false);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
panel.Visibility = Visibility.Collapsed;
|
|
||||||
WindowPos.SetIsLocked(this, true);
|
|
||||||
}
|
|
||||||
textBlock.FontFamily = new FontFamily(MainWindow.GlobalFont);
|
|
||||||
textBlock.Foreground = MainWindow.GlobalColor;
|
|
||||||
textBlock.Text = DateTime.Now.ToString("D");
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Window_LocationChanged(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
key.SetValue("DateWindowTop", Top);
|
|
||||||
key.SetValue("DateWindowLeft", Left);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
|
|
||||||
{
|
|
||||||
key.SetValue("DateWindowHeight", Height);
|
|
||||||
key.SetValue("DateWindowWidth", Width);
|
|
||||||
tileBar.CaptionHeight = ActualHeight - 10;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -2,17 +2,17 @@
|
|||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<OutputType>WinExe</OutputType>
|
<OutputType>WinExe</OutputType>
|
||||||
<TargetFramework>net5.0-windows</TargetFramework>
|
|
||||||
<UseWPF>true</UseWPF>
|
<UseWPF>true</UseWPF>
|
||||||
<RootNamespace>DesktopMagic</RootNamespace>
|
<RootNamespace>DesktopMagic</RootNamespace>
|
||||||
<ApplicationIcon>icon.ico</ApplicationIcon>
|
<ApplicationIcon>icon.ico</ApplicationIcon>
|
||||||
<RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
|
<RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
|
||||||
<Authors>Stone_Red</Authors>
|
<Authors>Stone_Red</Authors>
|
||||||
<Version>0.0.3.0</Version>
|
<Version>0.0.3.2</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>0.0.3.0</AssemblyVersion>
|
<AssemblyVersion>0.0.3.2</AssemblyVersion>
|
||||||
<FileVersion>0.0.3.0</FileVersion>
|
<FileVersion>0.0.3.2</FileVersion>
|
||||||
|
<TargetFramework>net6.0-windows</TargetFramework>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||||
|
|||||||
@@ -0,0 +1,49 @@
|
|||||||
|
<Window x:Class="DesktopMagic.Dialogs.ColorDialog"
|
||||||
|
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="ColorDialog"
|
||||||
|
SizeToContent="WidthAndHeight">
|
||||||
|
<Grid>
|
||||||
|
<StackPanel Margin="15">
|
||||||
|
<Label x:Name="label" Content="Label" HorizontalAlignment="Left" VerticalAlignment="Top"/>
|
||||||
|
|
||||||
|
<DockPanel>
|
||||||
|
<Label Content="A:" Width="20" />
|
||||||
|
<Slider x:Name="alphaSlider" VerticalAlignment="Center" Maximum="255" ValueChanged="ColorSliders_ValueChanged" TickFrequency="1" IsSnapToTickEnabled="True" Background="#00030000" />
|
||||||
|
</DockPanel>
|
||||||
|
<DockPanel>
|
||||||
|
<Label Content="R:" Width="20" />
|
||||||
|
<Slider x:Name="redSlider" VerticalAlignment="Center" Maximum="255" ValueChanged="ColorSliders_ValueChanged" TickFrequency="1" IsSnapToTickEnabled="True" Background="#00030000" />
|
||||||
|
</DockPanel>
|
||||||
|
<DockPanel>
|
||||||
|
<Label Content="G:" Width="20" />
|
||||||
|
<Slider x:Name="greenSlider" VerticalAlignment="Center" Maximum="255" ValueChanged="ColorSliders_ValueChanged" TickFrequency="1" IsSnapToTickEnabled="True" Background="#0000FF00" />
|
||||||
|
</DockPanel>
|
||||||
|
<DockPanel>
|
||||||
|
<Label Content="B:" Width="20" />
|
||||||
|
<Slider x:Name="blueSlider" VerticalAlignment="Center" Maximum="255" ValueChanged="ColorSliders_ValueChanged" TickFrequency="1" IsSnapToTickEnabled="True" Background="#000000FF" />
|
||||||
|
</DockPanel>
|
||||||
|
|
||||||
|
<StackPanel Orientation="Horizontal">
|
||||||
|
<Border CornerRadius="1" BorderThickness="1.5" BorderBrush="Gray" Height="23" Width="23" Margin="0,0,5,0">
|
||||||
|
<Rectangle x:Name="colorRechtangle" Fill="White" />
|
||||||
|
</Border>
|
||||||
|
<TextBox x:Name="colorHexTextBox" MaxLength="9" CharacterCasing="Upper" Height="23" TextWrapping="Wrap" Width="350" TextChanged="ColorHexTextBox_TextChanged" RenderTransformOrigin="0.5,0.5" VerticalContentAlignment="Center">
|
||||||
|
<materialDesign:TextFieldAssist.CharacterCounterStyle>
|
||||||
|
<Style TargetType="TextBlock" />
|
||||||
|
</materialDesign:TextFieldAssist.CharacterCounterStyle>
|
||||||
|
</TextBox>
|
||||||
|
</StackPanel>
|
||||||
|
<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,130 @@
|
|||||||
|
using DesktopMagic.Helpers;
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Controls;
|
||||||
|
using System.Windows.Media;
|
||||||
|
|
||||||
|
namespace DesktopMagic.Dialogs
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Interaction logic for ColorDialog.xaml
|
||||||
|
/// </summary>
|
||||||
|
public partial class ColorDialog : Window
|
||||||
|
{
|
||||||
|
public ColorDialog(string content, System.Drawing.Color defaultColor, string title = "ColorDialog")
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
label.Content = content;
|
||||||
|
Title = title;
|
||||||
|
SetLanguageDictionary();
|
||||||
|
|
||||||
|
alphaSlider.Value = defaultColor.A;
|
||||||
|
redSlider.Value = defaultColor.R;
|
||||||
|
greenSlider.Value = defaultColor.G;
|
||||||
|
blueSlider.Value = defaultColor.B;
|
||||||
|
}
|
||||||
|
|
||||||
|
public System.Drawing.Color ResultColor { get; private set; }
|
||||||
|
|
||||||
|
public Brush ResultBrush { get; private set; }
|
||||||
|
|
||||||
|
private void OkButton_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
DialogResult = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CancelButton_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
DialogResult = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ColorSliders_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
|
||||||
|
{
|
||||||
|
colorHexTextBox.Select(colorHexTextBox.Text.Length, 0);
|
||||||
|
SetColorText();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ColorHexTextBox_TextChanged(object sender, TextChangedEventArgs e)
|
||||||
|
{
|
||||||
|
if (colorHexTextBox.Text.Length > 0)
|
||||||
|
{
|
||||||
|
if (colorHexTextBox.Text.ToCharArray()[0] != '#')
|
||||||
|
{
|
||||||
|
colorHexTextBox.Text = "#" + colorHexTextBox.Text.Replace("#", "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
colorHexTextBox.Text = "#";
|
||||||
|
colorHexTextBox.Select(colorHexTextBox.Text.Length, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (colorHexTextBox.SelectionStart == 0)
|
||||||
|
{
|
||||||
|
if (colorHexTextBox.Text.Length <= 2)
|
||||||
|
{
|
||||||
|
colorHexTextBox.Select(colorHexTextBox.Text.Length, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
colorHexTextBox.Select(1, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
string hex = colorHexTextBox.Text;
|
||||||
|
|
||||||
|
if (MultiColorConverter.TryConvertToMediaColor(hex, out Color color) && MultiColorConverter.TryConvertToSystemColor(hex, out System.Drawing.Color systemColor))
|
||||||
|
{
|
||||||
|
alphaSlider.Value = color.A;
|
||||||
|
redSlider.Value = color.R;
|
||||||
|
greenSlider.Value = color.G;
|
||||||
|
blueSlider.Value = color.B;
|
||||||
|
|
||||||
|
Brush brush = new SolidColorBrush(color);
|
||||||
|
|
||||||
|
ResultBrush = brush;
|
||||||
|
ResultColor = systemColor;
|
||||||
|
colorRechtangle.Fill = brush;
|
||||||
|
colorHexTextBox.Foreground = Brushes.Black;
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
colorHexTextBox.Foreground = Brushes.Red;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetColorText()
|
||||||
|
{
|
||||||
|
if (alphaSlider.Value == 255)
|
||||||
|
{
|
||||||
|
colorHexTextBox.Text = "#";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
colorHexTextBox.Text = "#" + ((int)alphaSlider.Value).ToString("X2");
|
||||||
|
}
|
||||||
|
|
||||||
|
colorHexTextBox.Text += ((int)redSlider.Value).ToString("X2") + ((int)greenSlider.Value).ToString("X2") + ((int)blueSlider.Value).ToString("X2");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetLanguageDictionary()
|
||||||
|
{
|
||||||
|
ResourceDictionary dict = new ResourceDictionary();
|
||||||
|
string currentCulture = Thread.CurrentThread.CurrentCulture.ToString();
|
||||||
|
|
||||||
|
if (currentCulture.Contains("de"))
|
||||||
|
{
|
||||||
|
dict.Source = new Uri("..\\Resources\\StringResources.de.xaml", UriKind.Relative);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dict.Source = new Uri("..\\Resources\\StringResources.en.xaml", UriKind.Relative);
|
||||||
|
}
|
||||||
|
Resources.MergedDictionaries.Add(dict);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,16 +1,17 @@
|
|||||||
<Window x:Class="DesktopMagic.InputDialog"
|
<Window x:Class="DesktopMagic.Dialogs.InputDialog"
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
xmlns:local="clr-namespace:DesktopMagic"
|
xmlns:local="clr-namespace:DesktopMagic.Dialogs"
|
||||||
mc:Ignorable="d"
|
mc:Ignorable="d"
|
||||||
Title="InputDialog" Height="152.812" Width="322.812"
|
Title="InputDialog"
|
||||||
ResizeMode="NoResize">
|
ResizeMode="NoResize"
|
||||||
|
SizeToContent="WidthAndHeight">
|
||||||
<Grid>
|
<Grid>
|
||||||
<StackPanel VerticalAlignment="Center" HorizontalAlignment="Center" Margin="10">
|
<StackPanel VerticalAlignment="Center" HorizontalAlignment="Center" Margin="15">
|
||||||
<Label x:Name="label" Content="Label" HorizontalAlignment="Left" VerticalAlignment="Top"/>
|
<Label x:Name="label" Content="Label" HorizontalAlignment="Left" VerticalAlignment="Top"/>
|
||||||
<TextBox x:Name="textBox" HorizontalAlignment="Left" Height="23" TextWrapping="Wrap" VerticalAlignment="Top" Width="279" VerticalContentAlignment="Center"/>
|
<TextBox x:Name="textBox" HorizontalAlignment="Left" Height="23" TextWrapping="Wrap" VerticalAlignment="Top" Width="280" VerticalContentAlignment="Center"/>
|
||||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,10,0,0">
|
<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="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"/>
|
<Button x:Name="cancelButton" Content="{DynamicResource cancel }" HorizontalAlignment="Left" Margin="0,0,0,0" VerticalAlignment="Top" Width="100" Click="CancelButton_Click"/>
|
||||||
@@ -2,25 +2,22 @@
|
|||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
|
|
||||||
namespace DesktopMagic
|
namespace DesktopMagic.Dialogs
|
||||||
{
|
{
|
||||||
/// <summary>
|
|
||||||
/// Interaktionslogik für InputDialog.xaml
|
|
||||||
/// </summary>
|
|
||||||
public partial class InputDialog : Window
|
public partial class InputDialog : Window
|
||||||
{
|
{
|
||||||
public InputDialog(string content, string title = "InputDialog")
|
public InputDialog(string content, string title = "InputDialog")
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
label.Content = content;
|
label.Content = content;
|
||||||
this.Title = title;
|
Title = title;
|
||||||
SetLanguageDictionary();
|
SetLanguageDictionary();
|
||||||
}
|
}
|
||||||
|
|
||||||
public string ResponseText
|
public string ResponseText
|
||||||
{
|
{
|
||||||
get { return textBox.Text; }
|
get => textBox.Text;
|
||||||
set { textBox.Text = value; }
|
set => textBox.Text = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OkButton_Click(object sender, RoutedEventArgs e)
|
private void OkButton_Click(object sender, RoutedEventArgs e)
|
||||||
@@ -46,7 +43,7 @@ namespace DesktopMagic
|
|||||||
{
|
{
|
||||||
dict.Source = new Uri("..\\Resources\\StringResources.en.xaml", UriKind.Relative);
|
dict.Source = new Uri("..\\Resources\\StringResources.en.xaml", UriKind.Relative);
|
||||||
}
|
}
|
||||||
this.Resources.MergedDictionaries.Add(dict);
|
Resources.MergedDictionaries.Add(dict);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -5,5 +5,5 @@
|
|||||||
|
|
||||||
using System.Diagnostics.CodeAnalysis;
|
using System.Diagnostics.CodeAnalysis;
|
||||||
|
|
||||||
[assembly: SuppressMessage("Performance", "CA1822:Member als statisch markieren", Justification = "<Ausstehend>", Scope = "member", Target = "~M:DesktopMagic.PluginWindow.LoadOptions(System.Object)")]
|
[assembly: SuppressMessage("Interoperability", "CA1416:Validate platform compatibility", Justification = "Windows only application")]
|
||||||
[assembly: SuppressMessage("Style", "IDE0090:Use 'new(...)'", Justification = "<Pending>", Scope = "member", Target = "~M:DesktopMagic.MainWindow.GithubButton_Click(System.Object,System.Windows.RoutedEventArgs)")]
|
[assembly: SuppressMessage("Performance", "CA1822:Mark members as static", Justification = "No need to")]
|
||||||
@@ -0,0 +1,76 @@
|
|||||||
|
using System.Globalization;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
|
namespace DesktopMagic.Helpers
|
||||||
|
{
|
||||||
|
internal static class MultiColorConverter
|
||||||
|
{
|
||||||
|
public static string ConvertToHex(System.Drawing.Color color)
|
||||||
|
{
|
||||||
|
return $"#{color.A:X2}{color.R:X2}{color.G:X2}{color.B:X2}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string ConvertToHex(System.Windows.Media.Color color)
|
||||||
|
{
|
||||||
|
return $"#{color.A:X2}{color.R:X2}{color.G:X2}{color.B:X2}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool TryConvertToSystemColor(string hex, out System.Drawing.Color color)
|
||||||
|
{
|
||||||
|
hex = hex.Replace("#", "");
|
||||||
|
|
||||||
|
if (hex.Length == 8 && Regex.IsMatch(hex, "(?:[0-9a-fA-F]{8})"))
|
||||||
|
{
|
||||||
|
int a = int.Parse(hex.Substring(0, 2), NumberStyles.HexNumber, CultureInfo.InvariantCulture);
|
||||||
|
int r = int.Parse(hex.Substring(2, 2), NumberStyles.HexNumber, CultureInfo.InvariantCulture);
|
||||||
|
int g = int.Parse(hex.Substring(4, 2), NumberStyles.HexNumber, CultureInfo.InvariantCulture);
|
||||||
|
int b = int.Parse(hex.Substring(6, 2), NumberStyles.HexNumber, CultureInfo.InvariantCulture);
|
||||||
|
color = System.Drawing.Color.FromArgb((byte)a, (byte)r, (byte)g, (byte)b);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (hex.Length == 6 && Regex.IsMatch(hex, "(?:[0-9a-fA-F]{6})"))
|
||||||
|
{
|
||||||
|
int a = 255;
|
||||||
|
int r = int.Parse(hex.Substring(0, 2), NumberStyles.HexNumber, CultureInfo.InvariantCulture);
|
||||||
|
int g = int.Parse(hex.Substring(2, 2), NumberStyles.HexNumber, CultureInfo.InvariantCulture);
|
||||||
|
int b = int.Parse(hex.Substring(4, 2), NumberStyles.HexNumber, CultureInfo.InvariantCulture);
|
||||||
|
color = System.Drawing.Color.FromArgb((byte)a, (byte)r, (byte)g, (byte)b);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
color = System.Drawing.Color.Transparent;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool TryConvertToMediaColor(string hex, out System.Windows.Media.Color color)
|
||||||
|
{
|
||||||
|
hex = hex.Replace("#", "");
|
||||||
|
|
||||||
|
if (hex.Length == 8 && Regex.IsMatch(hex, "(?:[0-9a-fA-F]{8})"))
|
||||||
|
{
|
||||||
|
int a = int.Parse(hex.Substring(0, 2), NumberStyles.HexNumber, CultureInfo.InvariantCulture);
|
||||||
|
int r = int.Parse(hex.Substring(2, 2), NumberStyles.HexNumber, CultureInfo.InvariantCulture);
|
||||||
|
int g = int.Parse(hex.Substring(4, 2), NumberStyles.HexNumber, CultureInfo.InvariantCulture);
|
||||||
|
int b = int.Parse(hex.Substring(6, 2), NumberStyles.HexNumber, CultureInfo.InvariantCulture);
|
||||||
|
color = System.Windows.Media.Color.FromArgb((byte)a, (byte)r, (byte)g, (byte)b);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (hex.Length == 6 && Regex.IsMatch(hex, "(?:[0-9a-fA-F]{6})"))
|
||||||
|
{
|
||||||
|
int a = 255;
|
||||||
|
int r = int.Parse(hex.Substring(0, 2), NumberStyles.HexNumber, CultureInfo.InvariantCulture);
|
||||||
|
int g = int.Parse(hex.Substring(2, 2), NumberStyles.HexNumber, CultureInfo.InvariantCulture);
|
||||||
|
int b = int.Parse(hex.Substring(4, 2), NumberStyles.HexNumber, CultureInfo.InvariantCulture);
|
||||||
|
color = System.Windows.Media.Color.FromArgb((byte)a, (byte)r, (byte)g, (byte)b);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
color = System.Windows.Media.Colors.Transparent;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,238 @@
|
|||||||
|
using DesktopMagic.Plugins;
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Controls;
|
||||||
|
|
||||||
|
namespace DesktopMagic.Helpers
|
||||||
|
{
|
||||||
|
internal class SettingElementGenerator
|
||||||
|
{
|
||||||
|
private readonly ComboBox optionsComboBox;
|
||||||
|
|
||||||
|
public SettingElementGenerator(ComboBox optionsComboBox)
|
||||||
|
{
|
||||||
|
this.optionsComboBox = optionsComboBox;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Generate(SettingElement settingElement, DockPanel dockPanel, TextBlock textBlock)
|
||||||
|
{
|
||||||
|
dockPanel.UpdateLayout();
|
||||||
|
textBlock.UpdateLayout();
|
||||||
|
if (settingElement.Element is DesktopMagicPluginAPI.Inputs.Label eLabel)
|
||||||
|
{
|
||||||
|
textBlock.Text = eLabel.Value;
|
||||||
|
textBlock.Margin = new Thickness(0, 5, 3, 0);
|
||||||
|
textBlock.HorizontalAlignment = HorizontalAlignment.Stretch;
|
||||||
|
textBlock.TextWrapping = TextWrapping.WrapWithOverflow;
|
||||||
|
|
||||||
|
if (eLabel.Bold)
|
||||||
|
{
|
||||||
|
textBlock.FontWeight = FontWeights.Bold;
|
||||||
|
}
|
||||||
|
eLabel.OnValueChanged += () =>
|
||||||
|
{
|
||||||
|
textBlock.Dispatcher.Invoke(() =>
|
||||||
|
{
|
||||||
|
textBlock.Text = eLabel.Value;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
}
|
||||||
|
else if (settingElement.Element is DesktopMagicPluginAPI.Inputs.Button eButton)
|
||||||
|
{
|
||||||
|
Button button = new()
|
||||||
|
{
|
||||||
|
Content = eButton.Value,
|
||||||
|
FontSize = 10,
|
||||||
|
Height = 20,
|
||||||
|
Margin = new Thickness(0, 10, 0, 10),
|
||||||
|
Padding = new Thickness(0),
|
||||||
|
VerticalAlignment = VerticalAlignment.Center,
|
||||||
|
HorizontalAlignment = HorizontalAlignment.Stretch
|
||||||
|
};
|
||||||
|
button.Click += (_s, _e) =>
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
eButton.Click();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
DisplayException(ex.Message);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
eButton.OnValueChanged += () =>
|
||||||
|
{
|
||||||
|
button.Dispatcher.Invoke(() =>
|
||||||
|
{
|
||||||
|
button.Content = eButton.Value;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
_ = dockPanel.Children.Add(button);
|
||||||
|
}
|
||||||
|
else if (settingElement.Element is DesktopMagicPluginAPI.Inputs.CheckBox eCheckBox)
|
||||||
|
{
|
||||||
|
CheckBox checkBox = new()
|
||||||
|
{
|
||||||
|
IsChecked = eCheckBox.Value,
|
||||||
|
Style = (Style)dockPanel.FindResource("MaterialDesignDarkCheckBox"),
|
||||||
|
VerticalAlignment = VerticalAlignment.Center,
|
||||||
|
HorizontalAlignment = HorizontalAlignment.Stretch
|
||||||
|
};
|
||||||
|
checkBox.Click += (_s, _e) =>
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
eCheckBox.Value = checkBox.IsChecked.GetValueOrDefault();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
DisplayException(ex.Message);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
eCheckBox.OnValueChanged += () =>
|
||||||
|
{
|
||||||
|
checkBox.Dispatcher.Invoke(() =>
|
||||||
|
{
|
||||||
|
checkBox.IsChecked = eCheckBox.Value;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
_ = dockPanel.Children.Add(checkBox);
|
||||||
|
}
|
||||||
|
else if (settingElement.Element is DesktopMagicPluginAPI.Inputs.TextBox eTextBox)
|
||||||
|
{
|
||||||
|
TextBox textBox = new()
|
||||||
|
{
|
||||||
|
Text = eTextBox.Value,
|
||||||
|
TextWrapping = TextWrapping.Wrap,
|
||||||
|
VerticalAlignment = VerticalAlignment.Center,
|
||||||
|
HorizontalAlignment = HorizontalAlignment.Stretch
|
||||||
|
};
|
||||||
|
textBox.TextChanged += (_s, _e) =>
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
eTextBox.Value = textBox.Text;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
DisplayException(ex.Message);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
eTextBox.OnValueChanged += () =>
|
||||||
|
{
|
||||||
|
textBox.Dispatcher.Invoke(() =>
|
||||||
|
{
|
||||||
|
textBox.Text = eTextBox.Value;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
_ = dockPanel.Children.Add(textBox);
|
||||||
|
}
|
||||||
|
else if (settingElement.Element is DesktopMagicPluginAPI.Inputs.IntegerUpDown eIntegerUpDown)
|
||||||
|
{
|
||||||
|
Xceed.Wpf.Toolkit.IntegerUpDown integerUpDown = new()
|
||||||
|
{
|
||||||
|
Value = eIntegerUpDown.Value,
|
||||||
|
Minimum = eIntegerUpDown.Minimum,
|
||||||
|
Maximum = eIntegerUpDown.Maximum,
|
||||||
|
VerticalAlignment = VerticalAlignment.Center,
|
||||||
|
HorizontalAlignment = HorizontalAlignment.Stretch
|
||||||
|
};
|
||||||
|
integerUpDown.ValueChanged += (_s, _e) =>
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
eIntegerUpDown.Value = integerUpDown.Value.GetValueOrDefault();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
DisplayException(ex.Message);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
eIntegerUpDown.OnValueChanged += () =>
|
||||||
|
{
|
||||||
|
integerUpDown.Dispatcher.Invoke(() =>
|
||||||
|
{
|
||||||
|
integerUpDown.Value = eIntegerUpDown.Value;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
_ = dockPanel.Children.Add(integerUpDown);
|
||||||
|
}
|
||||||
|
else if (settingElement.Element is DesktopMagicPluginAPI.Inputs.Slider eSlider)
|
||||||
|
{
|
||||||
|
Slider slider = new()
|
||||||
|
{
|
||||||
|
Value = eSlider.Value,
|
||||||
|
Minimum = eSlider.Minimum,
|
||||||
|
Maximum = eSlider.Maximum,
|
||||||
|
TickFrequency = 1,
|
||||||
|
IsSnapToTickEnabled = true,
|
||||||
|
VerticalAlignment = VerticalAlignment.Center,
|
||||||
|
HorizontalAlignment = HorizontalAlignment.Stretch
|
||||||
|
};
|
||||||
|
slider.ValueChanged += (_s, _e) =>
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
eSlider.Value = slider.Value;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
DisplayException(ex.Message);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
eSlider.OnValueChanged += () =>
|
||||||
|
{
|
||||||
|
slider.Dispatcher.Invoke(() =>
|
||||||
|
{
|
||||||
|
slider.Value = eSlider.Value;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
_ = dockPanel.Children.Add(slider);
|
||||||
|
}
|
||||||
|
else if (settingElement.Element is DesktopMagicPluginAPI.Inputs.ComboBox eComboBox)
|
||||||
|
{
|
||||||
|
ComboBox comboBox = new()
|
||||||
|
{
|
||||||
|
ItemsSource = eComboBox.Items,
|
||||||
|
IsEditable = false,
|
||||||
|
VerticalAlignment = VerticalAlignment.Center,
|
||||||
|
HorizontalAlignment = HorizontalAlignment.Stretch,
|
||||||
|
SelectedIndex = 0
|
||||||
|
};
|
||||||
|
|
||||||
|
comboBox.SelectionChanged += (_s, _e) =>
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
eComboBox.Value = comboBox.Text;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
DisplayException(ex.Message);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
eComboBox.OnValueChanged += () =>
|
||||||
|
{
|
||||||
|
comboBox.SelectedItem = eComboBox.Value;
|
||||||
|
};
|
||||||
|
|
||||||
|
_ = dockPanel.Children.Add(comboBox);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void DisplayException(string message)
|
||||||
|
{
|
||||||
|
App.Logger.Log(message, "PluginInput");
|
||||||
|
_ = MessageBox.Show("File execution error:\n" + message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||||
|
int index = MainWindow.WindowNames.IndexOf(optionsComboBox.SelectedItem.ToString());
|
||||||
|
|
||||||
|
PluginWindow window = MainWindow.Windows[index];
|
||||||
|
window?.Exit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
using System.Globalization;
|
||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Controls;
|
||||||
|
using System.Windows.Media;
|
||||||
|
|
||||||
|
namespace DesktopMagic.Helpers
|
||||||
|
{
|
||||||
|
internal static class StringUtilities
|
||||||
|
{
|
||||||
|
public static Size MeasureString(string input, TextBlock element)
|
||||||
|
{
|
||||||
|
FormattedText formattedText = new FormattedText(
|
||||||
|
input,
|
||||||
|
CultureInfo.CurrentCulture,
|
||||||
|
FlowDirection.LeftToRight,
|
||||||
|
new Typeface(element.FontFamily, element.FontStyle, element.FontWeight, element.FontStretch),
|
||||||
|
element.FontSize,
|
||||||
|
Brushes.Black,
|
||||||
|
new NumberSubstitution(),
|
||||||
|
1);
|
||||||
|
|
||||||
|
return new Size(formattedText.Width, formattedText.Height);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -541,7 +541,7 @@ namespace DesktopMagic
|
|||||||
public static extern int GetSystemMetrics(int abc);
|
public static extern int GetSystemMetrics(int abc);
|
||||||
|
|
||||||
[DllImport("user32.dll", EntryPoint = "GetWindowDC")]
|
[DllImport("user32.dll", EntryPoint = "GetWindowDC")]
|
||||||
public static extern IntPtr GetWindowDC(Int32 ptr);
|
public static extern IntPtr GetWindowDC(int ptr);
|
||||||
|
|
||||||
[DllImport("user32.dll")]
|
[DllImport("user32.dll")]
|
||||||
public static extern bool IsWindowVisible(IntPtr hWnd);
|
public static extern bool IsWindowVisible(IntPtr hWnd);
|
||||||
@@ -559,7 +559,7 @@ namespace DesktopMagic
|
|||||||
public static extern IntPtr SelectObject(IntPtr hdc, IntPtr bmp);
|
public static extern IntPtr SelectObject(IntPtr hdc, IntPtr bmp);
|
||||||
|
|
||||||
[DllImport("user32.dll", CharSet = CharSet.Auto)]
|
[DllImport("user32.dll", CharSet = CharSet.Auto)]
|
||||||
public static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, int wParam, IntPtr lParam);
|
public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, IntPtr lParam);
|
||||||
|
|
||||||
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
|
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
|
||||||
public static extern IntPtr SendMessageTimeout(IntPtr windowHandle, uint Msg, IntPtr wParam, IntPtr lParam, SendMessageTimeoutFlags flags, uint timeout, out IntPtr result);
|
public static extern IntPtr SendMessageTimeout(IntPtr windowHandle, uint Msg, IntPtr wParam, IntPtr lParam, SendMessageTimeoutFlags flags, uint timeout, out IntPtr result);
|
||||||
@@ -590,7 +590,7 @@ namespace DesktopMagic
|
|||||||
public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, SetWindowPosFlags uFlags);
|
public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, SetWindowPosFlags uFlags);
|
||||||
|
|
||||||
[DllImport("user32.dll", CharSet = CharSet.Auto)]
|
[DllImport("user32.dll", CharSet = CharSet.Auto)]
|
||||||
public static extern Int32 SystemParametersInfo(UInt32 action, UInt32 uParam, string vParam, UInt32 winIni);
|
public static extern int SystemParametersInfo(uint action, uint uParam, string vParam, uint winIni);
|
||||||
|
|
||||||
[StructLayout(LayoutKind.Sequential)]
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
public struct BbStruct //Blur Behind Structure
|
public struct BbStruct //Blur Behind Structure
|
||||||
@@ -642,37 +642,37 @@ namespace DesktopMagic
|
|||||||
|
|
||||||
public int X
|
public int X
|
||||||
{
|
{
|
||||||
get { return Left; }
|
get => Left;
|
||||||
set { Right -= (Left - value); Left = value; }
|
set { Right -= (Left - value); Left = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public int Y
|
public int Y
|
||||||
{
|
{
|
||||||
get { return Top; }
|
get => Top;
|
||||||
set { Bottom -= (Top - value); Top = value; }
|
set { Bottom -= (Top - value); Top = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public int Height
|
public int Height
|
||||||
{
|
{
|
||||||
get { return Bottom - Top; }
|
get => Bottom - Top;
|
||||||
set { Bottom = value + Top; }
|
set => Bottom = value + Top;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int Width
|
public int Width
|
||||||
{
|
{
|
||||||
get { return Right - Left; }
|
get => Right - Left;
|
||||||
set { Right = value + Left; }
|
set => Right = value + Left;
|
||||||
}
|
}
|
||||||
|
|
||||||
public System.Drawing.Point Location
|
public System.Drawing.Point Location
|
||||||
{
|
{
|
||||||
get { return new System.Drawing.Point(Left, Top); }
|
get => new System.Drawing.Point(Left, Top);
|
||||||
set { X = value.X; Y = value.Y; }
|
set { X = value.X; Y = value.Y; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public System.Drawing.Size Size
|
public System.Drawing.Size Size
|
||||||
{
|
{
|
||||||
get { return new System.Drawing.Size(Width, Height); }
|
get => new System.Drawing.Size(Width, Height);
|
||||||
set { Width = value.Width; Height = value.Height; }
|
set { Width = value.Width; Height = value.Height; }
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -703,10 +703,15 @@ namespace DesktopMagic
|
|||||||
|
|
||||||
public override bool Equals(object obj)
|
public override bool Equals(object obj)
|
||||||
{
|
{
|
||||||
if (obj is RECT)
|
if (obj is RECT rECT)
|
||||||
return Equals((RECT)obj);
|
{
|
||||||
else if (obj is System.Drawing.Rectangle)
|
return Equals(rECT);
|
||||||
return Equals(new RECT((System.Drawing.Rectangle)obj));
|
}
|
||||||
|
else if (obj is System.Drawing.Rectangle rectangle)
|
||||||
|
{
|
||||||
|
return Equals(new RECT(rectangle));
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -29,8 +29,8 @@ namespace DesktopMagic
|
|||||||
int cy,
|
int cy,
|
||||||
uint uFlags);
|
uint uFlags);
|
||||||
|
|
||||||
private const UInt32 SWP_NOSIZE1 = 0x0001;
|
private const uint SWP_NOSIZE1 = 0x0001;
|
||||||
private const UInt32 SWP_NOMOVE1 = 0x0002;
|
private const uint SWP_NOMOVE1 = 0x0002;
|
||||||
|
|
||||||
private static readonly IntPtr HWND_BOTTOM = new IntPtr(1);
|
private static readonly IntPtr HWND_BOTTOM = new IntPtr(1);
|
||||||
|
|
||||||
@@ -42,7 +42,7 @@ namespace DesktopMagic
|
|||||||
|
|
||||||
public static void SendWpfWindowBack(Window window)
|
public static void SendWpfWindowBack(Window window)
|
||||||
{
|
{
|
||||||
var hWnd = new WindowInteropHelper(window).Handle;
|
IntPtr hWnd = new WindowInteropHelper(window).Handle;
|
||||||
SetWindowPos(hWnd, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOSIZE1 | SWP_NOMOVE1);
|
SetWindowPos(hWnd, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOSIZE1 | SWP_NOMOVE1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -62,12 +62,12 @@ namespace DesktopMagic
|
|||||||
|
|
||||||
private static void IsLocked_Changed(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
private static void IsLocked_Changed(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
||||||
{
|
{
|
||||||
var window = (Window)d;
|
Window window = (Window)d;
|
||||||
var isHooked = d.GetValue(IsHookedProperty) != null;
|
bool isHooked = d.GetValue(IsHookedProperty) != null;
|
||||||
|
|
||||||
if (!isHooked)
|
if (!isHooked)
|
||||||
{
|
{
|
||||||
var hook = new WindowLockHook(window);
|
WindowLockHook hook = new WindowLockHook(window);
|
||||||
d.SetValue(IsHookedProperty, hook);
|
d.SetValue(IsHookedProperty, hook);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -82,10 +82,9 @@ namespace DesktopMagic
|
|||||||
|
|
||||||
public WindowLockHook(Window window)
|
public WindowLockHook(Window window)
|
||||||
{
|
{
|
||||||
this.Window = window;
|
Window = window;
|
||||||
|
|
||||||
var source = PresentationSource.FromVisual(window) as HwndSource;
|
if (PresentationSource.FromVisual(window) is not HwndSource source)
|
||||||
if (source == null)
|
|
||||||
{
|
{
|
||||||
// If there is no hWnd, we need to wait until there is
|
// If there is no hWnd, we need to wait until there is
|
||||||
window.SourceInitialized += Window_SourceInitialized;
|
window.SourceInitialized += Window_SourceInitialized;
|
||||||
@@ -98,7 +97,7 @@ namespace DesktopMagic
|
|||||||
|
|
||||||
private void Window_SourceInitialized(object sender, EventArgs e)
|
private void Window_SourceInitialized(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
var source = (HwndSource)PresentationSource.FromVisual(Window);
|
HwndSource source = (HwndSource)PresentationSource.FromVisual(Window);
|
||||||
source.AddHook(WndProc);
|
source.AddHook(WndProc);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -106,7 +105,7 @@ namespace DesktopMagic
|
|||||||
{
|
{
|
||||||
if (msg == WM_WINDOWPOSCHANGING && GetIsLocked(Window))
|
if (msg == WM_WINDOWPOSCHANGING && GetIsLocked(Window))
|
||||||
{
|
{
|
||||||
var wp = Marshal.PtrToStructure<WINDOWPOS>(lParam);
|
WINDOWPOS wp = Marshal.PtrToStructure<WINDOWPOS>(lParam);
|
||||||
wp.flags |= SWP_NOMOVE | SWP_NOSIZE;
|
wp.flags |= SWP_NOMOVE | SWP_NOSIZE;
|
||||||
Marshal.StructureToPtr(wp, lParam, false);
|
Marshal.StructureToPtr(wp, lParam, false);
|
||||||
}
|
}
|
||||||
@@ -38,14 +38,15 @@
|
|||||||
<CheckBox x:Name="TimeCb" Content="{DynamicResource time}" Click="CheckBox_Click" Style="{StaticResource MaterialDesignDarkCheckBox}" />
|
<CheckBox x:Name="TimeCb" Content="{DynamicResource time}" Click="CheckBox_Click" Style="{StaticResource MaterialDesignDarkCheckBox}" />
|
||||||
<CheckBox x:Name="DateCb" Content="{DynamicResource date}" Click="CheckBox_Click" Style="{StaticResource MaterialDesignDarkCheckBox}" />
|
<CheckBox x:Name="DateCb" Content="{DynamicResource date}" Click="CheckBox_Click" Style="{StaticResource MaterialDesignDarkCheckBox}" />
|
||||||
<CheckBox x:Name="CpuUsageCb" Content="{DynamicResource cpuUsage}" Click="CheckBox_Click" Style="{StaticResource MaterialDesignDarkCheckBox}" />
|
<CheckBox x:Name="CpuUsageCb" Content="{DynamicResource cpuUsage}" Click="CheckBox_Click" Style="{StaticResource MaterialDesignDarkCheckBox}" />
|
||||||
<CheckBox x:Name="CalendarCb" Content="{DynamicResource googleCalendar}" Click="CheckBox_Click" Style="{StaticResource MaterialDesignDarkCheckBox}" Visibility="Collapsed"/> <!--Currently disabled because it's not working-->
|
<CheckBox x:Name="CalendarCb" Content="{DynamicResource googleCalendar}" Click="CheckBox_Click" Style="{StaticResource MaterialDesignDarkCheckBox}" Visibility="Collapsed"/>
|
||||||
|
<!--Currently disabled because it's not working-->
|
||||||
<CheckBox x:Name="MusicVisualizerCb" Content="{DynamicResource musicVisualizer}" HorizontalAlignment="Left" VerticalAlignment="Top" Click="CheckBox_Click" Style="{StaticResource MaterialDesignDarkCheckBox}" />
|
<CheckBox x:Name="MusicVisualizerCb" Content="{DynamicResource musicVisualizer}" HorizontalAlignment="Left" VerticalAlignment="Top" Click="CheckBox_Click" Style="{StaticResource MaterialDesignDarkCheckBox}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ScrollViewer>
|
</ScrollViewer>
|
||||||
</DockPanel>
|
</DockPanel>
|
||||||
|
|
||||||
<DockPanel Grid.Column="1" Margin="2.5,0,0,0">
|
<DockPanel Grid.Column="1" Margin="2.5,0,0,0">
|
||||||
<ComboBox x:Name="optionsComboBox" DockPanel.Dock="Top" Height="24" SelectedIndex="0" DisplayMemberPath="Item1" SelectionChanged="OptionsComboBox_SelectionChanged" Background="#FFECECEC" Padding="4" VerticalAlignment="Center"/>
|
<ComboBox x:Name="optionsComboBox" DockPanel.Dock="Top" Height="24" SelectedIndex="0" SelectionChanged="OptionsComboBox_SelectionChanged" Background="#FFECECEC" Padding="4" VerticalAlignment="Center"/>
|
||||||
<ScrollViewer Background="#FFBBBBBB">
|
<ScrollViewer Background="#FFBBBBBB">
|
||||||
<Grid>
|
<Grid>
|
||||||
<StackPanel x:Name="optionsPanel" Margin="3,3,3,0" HorizontalAlignment="Stretch" Visibility="Collapsed" >
|
<StackPanel x:Name="optionsPanel" Margin="3,3,3,0" HorizontalAlignment="Stretch" Visibility="Collapsed" >
|
||||||
@@ -57,11 +58,11 @@
|
|||||||
<Style TargetType="TextBlock" />
|
<Style TargetType="TextBlock" />
|
||||||
</materialDesign:TextFieldAssist.CharacterCounterStyle>
|
</materialDesign:TextFieldAssist.CharacterCounterStyle>
|
||||||
</TextBox>
|
</TextBox>
|
||||||
<ComboBox x:Name="spectrumPlugineComboBox" ItemsSource="{DynamicResource musicVisualizerOptionsComboboxItems}" HorizontalAlignment="Left" VerticalAlignment="Top" Width="120" SelectionChanged="SpectrumPlugineComboBox_SelectionChanged" />
|
<ComboBox x:Name="spectrumModeComboBox" ItemsSource="{DynamicResource musicVisualizerOptionsComboboxItems}" HorizontalAlignment="Left" VerticalAlignment="Top" Width="120" SelectionChanged="SpectrumModeComboBox_SelectionChanged" />
|
||||||
<CheckBox x:Name="mirrorPlugineCheckBox" Content="{DynamicResource mirrorPlugine}" Click="MirrorPlugineCheckBox_Click" Style="{StaticResource MaterialDesignDarkCheckBox}" />
|
<CheckBox x:Name="mirrorModeCheckBox" Content="{DynamicResource mirrorMode}" Click="MirrorModeCheckBox_Click" Style="{StaticResource MaterialDesignDarkCheckBox}" />
|
||||||
<CheckBox x:Name="linePlugineCheckBox" Content="{DynamicResource linePlugine}" Click="LinePlugineCheckBox_Click" Style="{StaticResource MaterialDesignDarkCheckBox}" />
|
<CheckBox x:Name="lineModeCheckBox" Content="{DynamicResource lineMode}" Click="LineModeCheckBox_Click" Style="{StaticResource MaterialDesignDarkCheckBox}" />
|
||||||
<Label Content="{DynamicResource amplifier}" HorizontalAlignment="Left" VerticalAlignment="Top" Padding="0,1" />
|
<Label Content="{DynamicResource amplifier}" HorizontalAlignment="Left" VerticalAlignment="Top" Padding="0,1" />
|
||||||
<Slider x:Name="amplifierLevelSlider" Margin="-2,0,10,0" HorizontalAlignment="Stretch" VerticalAlignment="Top" ValueChanged="AmplifierLevelSlider_ValueChanged" Maximum="50" Minimum="-50" SmallChange="1" LargeChange="5" Foreground="Gray" />
|
<Slider x:Name="amplifierLevelSlider" HorizontalAlignment="Stretch" VerticalAlignment="Top" ValueChanged="AmplifierLevelSlider_ValueChanged" Maximum="50" Minimum="-50" SmallChange="1" LargeChange="5" Foreground="Gray" />
|
||||||
<Label x:Name="amplifierLevelLabel" Content="Label" HorizontalAlignment="Left" VerticalAlignment="Top" Padding="0,1" />
|
<Label x:Name="amplifierLevelLabel" Content="Label" HorizontalAlignment="Left" VerticalAlignment="Top" Padding="0,1" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Grid>
|
</Grid>
|
||||||
@@ -73,34 +74,59 @@
|
|||||||
<RowDefinition Height="*" />
|
<RowDefinition Height="*" />
|
||||||
<RowDefinition Height="110" />
|
<RowDefinition Height="110" />
|
||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
<StackPanel DockPanel.Dock="Top" Margin="{StaticResource DefaultMargin}">
|
<Grid.ColumnDefinitions>
|
||||||
<ComboBox x:Name="fontComboBox" HorizontalAlignment="Left" VerticalAlignment="Top" Width="181" SelectionChanged="FontComboBox_SelectionChanged" Margin="0,0,0,5" />
|
<ColumnDefinition/>
|
||||||
|
<ColumnDefinition/>
|
||||||
|
</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>
|
||||||
|
|
||||||
<DockPanel>
|
<TextBlock Text="Display Font: " Grid.Column="0" Grid.Row="0" VerticalAlignment="Center"></TextBlock>
|
||||||
<Label Content="R:" Width="20" />
|
<ComboBox x:Name="fontComboBox" Grid.Column="1" Grid.Row="0" HorizontalAlignment="Stretch" VerticalAlignment="Top" SelectionChanged="FontComboBox_SelectionChanged" Margin="0,0,0,5" />
|
||||||
<Slider x:Name="redSlider" Maximum="255" ValueChanged="ColorSliders_ValueChanged" TickFrequency="1" IsSnapToTickEnabled="True" Background="#00030000" />
|
|
||||||
</DockPanel>
|
|
||||||
<DockPanel>
|
|
||||||
<Label Content="G:" Width="20" />
|
|
||||||
<Slider x:Name="greenSlider" Maximum="255" ValueChanged="ColorSliders_ValueChanged" TickFrequency="1" IsSnapToTickEnabled="True" Background="#0000FF00" />
|
|
||||||
</DockPanel>
|
|
||||||
<DockPanel>
|
|
||||||
<Label Content="B:" Width="20" />
|
|
||||||
<Slider x:Name="blueSlider" Maximum="255" ValueChanged="ColorSliders_ValueChanged" TickFrequency="1" IsSnapToTickEnabled="True" Background="#000000FF" />
|
|
||||||
</DockPanel>
|
|
||||||
|
|
||||||
<StackPanel Orientation="Horizontal">
|
<TextBlock Text="Corner Radius: " Grid.Column="0" Grid.Row="1" VerticalAlignment="Center"></TextBlock>
|
||||||
<Border CornerRadius="1" BorderThickness="1.5" BorderBrush="Gray" Height="23" Width="23" Margin="0,0,5,0">
|
<TextBox x:Name="cornerRadiusTextBox" Grid.Column="1" Grid.Row="1" TextChanged="CornerRadiusTextBox_TextChanged" materialDesign:HintAssist.Hint="Enter a number">
|
||||||
<Rectangle x:Name="colorRechtangle" Fill="White" />
|
|
||||||
</Border>
|
|
||||||
<TextBox x:Name="colorHexTextBox" MaxLength="7" CharacterCasing="Upper" Height="23" TextWrapping="Wrap" Text="colorHexTextBox" Width="120" TextChanged="ColorHexTextBox_TextChanged" RenderTransformOrigin="0.5,0.5" VerticalContentAlignment="Center">
|
|
||||||
<materialDesign:TextFieldAssist.CharacterCounterStyle>
|
<materialDesign:TextFieldAssist.CharacterCounterStyle>
|
||||||
<Style TargetType="TextBlock" />
|
<Style TargetType="TextBlock" />
|
||||||
</materialDesign:TextFieldAssist.CharacterCounterStyle>
|
</materialDesign:TextFieldAssist.CharacterCounterStyle>
|
||||||
</TextBox>
|
</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>
|
</StackPanel>
|
||||||
</StackPanel>
|
<Grid Grid.Row="1" Grid.ColumnSpan="2" VerticalAlignment="Bottom">
|
||||||
<Grid Grid.Row="1" VerticalAlignment="Bottom">
|
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition />
|
<ColumnDefinition />
|
||||||
<ColumnDefinition />
|
<ColumnDefinition />
|
||||||
|
|||||||
+230
-373
@@ -1,8 +1,14 @@
|
|||||||
using Microsoft.Win32;
|
using DesktopMagic.BuiltInWindowElements;
|
||||||
|
using DesktopMagic.Dialogs;
|
||||||
|
using DesktopMagic.Helpers;
|
||||||
|
using DesktopMagic.Plugins;
|
||||||
|
|
||||||
|
using Microsoft.Win32;
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
using System.Globalization;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
@@ -14,39 +20,33 @@ using System.Windows.Media;
|
|||||||
|
|
||||||
namespace DesktopMagic
|
namespace DesktopMagic
|
||||||
{
|
{
|
||||||
/// <summary>
|
|
||||||
/// Interaktionslogik für MainWindow.xaml
|
|
||||||
/// </summary>
|
|
||||||
|
|
||||||
public partial class MainWindow : Window
|
public partial class MainWindow : Window
|
||||||
{
|
{
|
||||||
#region Global settings
|
#region Global settings
|
||||||
|
|
||||||
public static string GlobalFont { get; protected set; } = "Segoe UI";
|
internal static Theme Theme = new Theme();
|
||||||
public static Brush GlobalColor { get; protected set; } = Brushes.White;
|
public static bool EditMode { get; private set; } = false;
|
||||||
public static System.Drawing.Brush GlobalSystemColor { get; protected set; } = System.Drawing.Brushes.White;
|
|
||||||
public static bool EditMode { get; protected set; } = false;
|
|
||||||
|
|
||||||
#endregion Global settings
|
#endregion Global settings
|
||||||
|
|
||||||
#region Music Visualizer Settings
|
#region Music Visualizer Settings
|
||||||
|
|
||||||
public static int SpectrumMode { get; protected set; } = 0;
|
public static int SpectrumMode { get; private set; } = 0;
|
||||||
public static int AmplifierLevel { get; protected set; } = 0;
|
public static int AmplifierLevel { get; private set; } = 0;
|
||||||
public static bool MirrorMode { get; protected set; } = false;
|
public static bool MirrorMode { get; private set; } = false;
|
||||||
public static bool LineMode { get; protected set; } = false;
|
public static bool LineMode { get; private set; } = false;
|
||||||
public static System.Drawing.Brush MusicVisualzerColor { get; protected set; }
|
public static System.Drawing.Color? MusicVisualzerColor { get; private set; }
|
||||||
|
|
||||||
#endregion Music Visualizer Settings
|
#endregion Music Visualizer Settings
|
||||||
|
|
||||||
#region Plugins settings
|
#region Plugins settings
|
||||||
|
|
||||||
internal static Dictionary<string, List<SettingElement>> PluginsSettings { get; set; } = new Dictionary<string, List<SettingElement>>();
|
internal static Dictionary<string, List<SettingElement>> PluginsSettings { get; } = new Dictionary<string, List<SettingElement>>();
|
||||||
|
|
||||||
#endregion Plugins settings
|
#endregion Plugins settings
|
||||||
|
|
||||||
public static List<Window> Windows { get; protected set; } = new List<Window>();
|
public static List<PluginWindow> Windows { get; } = new List<PluginWindow>();
|
||||||
public static List<string> WindowNames { get; protected set; } = new List<string>();
|
public static List<string> WindowNames { get; } = new List<string>();
|
||||||
private readonly RegistryKey key;
|
private readonly RegistryKey key;
|
||||||
private readonly System.Windows.Forms.NotifyIcon notifyIcon = new();
|
private readonly System.Windows.Forms.NotifyIcon notifyIcon = new();
|
||||||
|
|
||||||
@@ -65,12 +65,16 @@ namespace DesktopMagic
|
|||||||
notifyIcon.Visible = true;
|
notifyIcon.Visible = true;
|
||||||
notifyIcon.Text = App.AppName;
|
notifyIcon.Text = App.AppName;
|
||||||
notifyIcon.Icon = new System.Drawing.Icon(iconStream);
|
notifyIcon.Icon = new System.Drawing.Icon(iconStream);
|
||||||
notifyIcon.ContextMenuStrip = new System.Windows.Forms.ContextMenuStrip();
|
|
||||||
|
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
SetLanguageDictionary();
|
SetLanguageDictionary();
|
||||||
|
|
||||||
|
#if DEBUG
|
||||||
|
Title = $"{App.AppName} - Dev {Assembly.GetExecutingAssembly().GetName().Version}";
|
||||||
|
#else
|
||||||
Title = $"{App.AppName} - {Assembly.GetExecutingAssembly().GetName().Version}";
|
Title = $"{App.AppName} - {Assembly.GetExecutingAssembly().GetName().Version}";
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@@ -78,18 +82,12 @@ namespace DesktopMagic
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#region load
|
#region Load
|
||||||
|
|
||||||
private void Window_Loaded(object sender, RoutedEventArgs e)
|
private void Window_Loaded(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (!Directory.Exists(App.ApplicationDataPath))
|
|
||||||
{
|
|
||||||
_ = Directory.CreateDirectory(App.ApplicationDataPath);
|
|
||||||
}
|
|
||||||
App.Logger.Log("Created ApplicationData Folder", "Main");
|
|
||||||
|
|
||||||
if (!Directory.Exists(App.ApplicationDataPath + "\\Plugins"))
|
if (!Directory.Exists(App.ApplicationDataPath + "\\Plugins"))
|
||||||
{
|
{
|
||||||
_ = Directory.CreateDirectory(App.ApplicationDataPath + "\\Plugins");
|
_ = Directory.CreateDirectory(App.ApplicationDataPath + "\\Plugins");
|
||||||
@@ -102,8 +100,6 @@ namespace DesktopMagic
|
|||||||
}
|
}
|
||||||
App.Logger.Log("Created layouts.save file", "Main");
|
App.Logger.Log("Created layouts.save file", "Main");
|
||||||
|
|
||||||
_ = optionsComboBox.Items.Add(new Tuple<string, int>((string)FindResource("musicVisualizer"), 0));
|
|
||||||
|
|
||||||
//Write To Log File and Load Elements
|
//Write To Log File and Load Elements
|
||||||
|
|
||||||
App.Logger.Log("Loading Plugin names", "Main");
|
App.Logger.Log("Loading Plugin names", "Main");
|
||||||
@@ -118,7 +114,8 @@ namespace DesktopMagic
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
MessageBox.Show(ex.ToString());
|
App.Logger.Log(ex.Message, "Main", LogSeverity.Error);
|
||||||
|
_ = MessageBox.Show(ex.ToString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -134,7 +131,10 @@ namespace DesktopMagic
|
|||||||
_ = Directory.CreateDirectory(PluginsPath + "\\" + PluginName);
|
_ = Directory.CreateDirectory(PluginsPath + "\\" + PluginName);
|
||||||
File.Move(fileName, $"{PluginsPath}\\{PluginName}\\{PluginName}.dll");
|
File.Move(fileName, $"{PluginsPath}\\{PluginName}\\{PluginName}.dll");
|
||||||
}
|
}
|
||||||
catch { }
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
App.Logger.Log(ex.Message, "Main", LogSeverity.Error);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (string directory in Directory.GetDirectories(PluginsPath))
|
foreach (string directory in Directory.GetDirectories(PluginsPath))
|
||||||
@@ -160,17 +160,17 @@ namespace DesktopMagic
|
|||||||
checkBox.Style = (Style)FindResource("MaterialDesignDarkCheckBox");
|
checkBox.Style = (Style)FindResource("MaterialDesignDarkCheckBox");
|
||||||
checkBox.Click += CheckBox_Click;
|
checkBox.Click += CheckBox_Click;
|
||||||
|
|
||||||
bool exsists = false;
|
bool exists = false;
|
||||||
foreach (UIElement item in stackPanel.Children)
|
foreach (UIElement item in stackPanel.Children)
|
||||||
{
|
{
|
||||||
if (((CheckBox)item).Name == "_PluginCb_" + clearPluginName)
|
if (((CheckBox)item).Name == "_PluginCb_" + clearPluginName)
|
||||||
{
|
{
|
||||||
exsists = true;
|
exists = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!exsists)
|
if (!exists)
|
||||||
{
|
{
|
||||||
_ = stackPanel.Children.Add(checkBox);
|
_ = stackPanel.Children.Add(checkBox);
|
||||||
}
|
}
|
||||||
@@ -179,7 +179,7 @@ namespace DesktopMagic
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion load
|
#endregion Load
|
||||||
|
|
||||||
#region Windows
|
#region Windows
|
||||||
|
|
||||||
@@ -192,83 +192,72 @@ namespace DesktopMagic
|
|||||||
private void CheckBox_Click(object sender, RoutedEventArgs e)
|
private void CheckBox_Click(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
CheckBox checkBox = (CheckBox)sender;
|
CheckBox checkBox = (CheckBox)sender;
|
||||||
Window window;
|
PluginWindow window = null;
|
||||||
blockWindowsClosing = false;
|
blockWindowsClosing = false;
|
||||||
|
|
||||||
switch (checkBox.Name)
|
switch (checkBox.Name)
|
||||||
{
|
{
|
||||||
case "TimeCb":
|
case "TimeCb":
|
||||||
window = new TimeWindow();
|
window = new PluginWindow(new TimePlugin(), checkBox.Content.ToString());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "DateCb":
|
case "DateCb":
|
||||||
window = new DateWindow();
|
window = new PluginWindow(new DatePlugin(), checkBox.Content.ToString());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "CpuUsageCb":
|
case "CpuUsageCb":
|
||||||
window = new CpuUsageWindow();
|
//window = new PluginWindow();
|
||||||
break;
|
|
||||||
|
|
||||||
case "CalendarCb":
|
|
||||||
window = new CalendarWindow();
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "MusicVisualizerCb":
|
case "MusicVisualizerCb":
|
||||||
window = new MusicVisualizerWindow();
|
window = new PluginWindow(new MusicVisualizerPlugin(), checkBox.Content.ToString());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
if (checkBox.Name.Contains("_PluginCb_"))
|
if (!checkBox.Name.Contains("_PluginCb_"))
|
||||||
{
|
|
||||||
window = new PluginWindow(checkBox.Content.ToString())
|
|
||||||
{
|
|
||||||
Title = checkBox.Content.ToString()
|
|
||||||
};
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
window = new PluginWindow(checkBox.Content.ToString());
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!WindowNames.Contains(window.Title))
|
if (window is null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
window.Title = checkBox.Content.ToString();
|
||||||
|
if (!WindowNames.Contains(window.Title) && checkBox.IsChecked == true)
|
||||||
{
|
{
|
||||||
_ = Task.Run(() =>
|
_ = Task.Run(() =>
|
||||||
{
|
{
|
||||||
Dispatcher.Invoke(() =>
|
Dispatcher.Invoke(() =>
|
||||||
{
|
|
||||||
if (window is PluginWindow pluginWindow)
|
|
||||||
{
|
{
|
||||||
Action onPluginLoaded = null;
|
Action onPluginLoaded = null;
|
||||||
onPluginLoaded = () =>
|
onPluginLoaded = () =>
|
||||||
{
|
{
|
||||||
Dispatcher.Invoke(() =>
|
Dispatcher.Invoke(() =>
|
||||||
{
|
{
|
||||||
if (!optionsComboBox.Items.Contains(new Tuple<string, int>(checkBox.Content.ToString(), 0)))
|
if (!optionsComboBox.Items.Contains(checkBox.Content.ToString()))
|
||||||
{
|
{
|
||||||
_ = optionsComboBox.Items.Add(new Tuple<string, int>(checkBox.Content.ToString(), 0));
|
_ = optionsComboBox.Items.Add(checkBox.Content.ToString());
|
||||||
}
|
}
|
||||||
optionsComboBox.SelectedIndex = -1;
|
optionsComboBox.SelectedIndex = -1;
|
||||||
optionsComboBox.SelectedIndex = optionsComboBox.Items.IndexOf(new Tuple<string, int>(checkBox.Content.ToString(), 0));
|
optionsComboBox.SelectedIndex = optionsComboBox.Items.IndexOf(checkBox.Content.ToString());
|
||||||
pluginWindow.PluginLoaded -= onPluginLoaded;
|
window.PluginLoaded -= onPluginLoaded;
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
pluginWindow.OnExit += () =>
|
window.OnExit += () =>
|
||||||
{
|
{
|
||||||
checkBox.IsChecked = false;
|
checkBox.IsChecked = false;
|
||||||
CheckBox_Click(checkBox, null);
|
CheckBox_Click(checkBox, null);
|
||||||
};
|
};
|
||||||
pluginWindow.PluginLoaded += onPluginLoaded;
|
window.PluginLoaded += onPluginLoaded;
|
||||||
}
|
|
||||||
else if (window is MusicVisualizerWindow musicVisualizerWindow)
|
|
||||||
{
|
|
||||||
optionsComboBox.SelectedIndex = optionsComboBox.Items.IndexOf(new Tuple<string, int>(checkBox.Content.ToString(), 0));
|
|
||||||
}
|
|
||||||
|
|
||||||
window.ShowInTaskbar = false;
|
window.ShowInTaskbar = false;
|
||||||
window.Show();
|
window.Show();
|
||||||
window.ContentRendered += PluginWindow_ContentRendered;
|
window.ContentRendered += DisplayWindow_ContentRendered;
|
||||||
window.Closing += DisplayWindow_Closing;
|
window.Closing += DisplayWindow_Closing;
|
||||||
Windows.Add(window);
|
Windows.Add(window);
|
||||||
WindowNames.Add(window.Title);
|
WindowNames.Add(window.Title);
|
||||||
@@ -279,17 +268,25 @@ namespace DesktopMagic
|
|||||||
{
|
{
|
||||||
int index = WindowNames.IndexOf(window.Title);
|
int index = WindowNames.IndexOf(window.Title);
|
||||||
|
|
||||||
|
if (index >= 0)
|
||||||
|
{
|
||||||
|
//Not sure how to handle this
|
||||||
|
try
|
||||||
|
{
|
||||||
Windows[index].Close();
|
Windows[index].Close();
|
||||||
|
|
||||||
Windows.RemoveAt(index);
|
Windows.RemoveAt(index);
|
||||||
WindowNames.RemoveAt(index);
|
WindowNames.RemoveAt(index);
|
||||||
window.Close();
|
}
|
||||||
|
catch { }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
key.SetValue(checkBox.Name, checkBox.IsChecked.ToString());
|
key.SetValue(checkBox.Name, checkBox.IsChecked.ToString());
|
||||||
blockWindowsClosing = true;
|
blockWindowsClosing = true;
|
||||||
SaveLayout();
|
SaveLayout();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void PluginWindow_ContentRendered(object sender, EventArgs e)
|
private void DisplayWindow_ContentRendered(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
WindowPos.SendWpfWindowBack(sender as Window);
|
WindowPos.SendWpfWindowBack(sender as Window);
|
||||||
WindowPos.SendWpfWindowBack(sender as Window);
|
WindowPos.SendWpfWindowBack(sender as Window);
|
||||||
@@ -335,7 +332,7 @@ namespace DesktopMagic
|
|||||||
|
|
||||||
#endregion Windows
|
#endregion Windows
|
||||||
|
|
||||||
#region options
|
#region Options
|
||||||
|
|
||||||
private void AmplifierLevelSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
|
private void AmplifierLevelSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
|
||||||
{
|
{
|
||||||
@@ -345,25 +342,23 @@ namespace DesktopMagic
|
|||||||
SaveLayout();
|
SaveLayout();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void MirrorPlugineCheckBox_Click(object sender, RoutedEventArgs e)
|
private void MirrorModeCheckBox_Click(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
MirrorMode = (bool)mirrorPlugineCheckBox.IsChecked;
|
MirrorMode = (bool)mirrorModeCheckBox.IsChecked;
|
||||||
key.SetValue("MirrorPlugine", mirrorPlugineCheckBox.IsChecked.ToString());
|
key.SetValue("MirrorMode", mirrorModeCheckBox.IsChecked.ToString());
|
||||||
SaveLayout();
|
SaveLayout();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void LinePlugineCheckBox_Click(object sender, RoutedEventArgs e)
|
private void LineModeCheckBox_Click(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
LineMode = (bool)linePlugineCheckBox.IsChecked;
|
LineMode = (bool)lineModeCheckBox.IsChecked;
|
||||||
key.SetValue("LinePlugine", linePlugineCheckBox.IsChecked.ToString());
|
key.SetValue("LineMode", lineModeCheckBox.IsChecked.ToString());
|
||||||
SaveLayout();
|
SaveLayout();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void MusicVisualizerColorTextBox_TextChanged(object sender, TextChangedEventArgs e)
|
private void MusicVisualizerColorTextBox_TextChanged(object sender, TextChangedEventArgs e)
|
||||||
{
|
{
|
||||||
if (!string.IsNullOrWhiteSpace(musicVisualizerColorTextBox.Text) && musicVisualizerColorTextBox.Text != "Default")
|
if (!string.IsNullOrWhiteSpace(musicVisualizerColorTextBox.Text) && musicVisualizerColorTextBox.Text != "Default")
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
{
|
||||||
if (musicVisualizerColorTextBox.Text.Length > 0)
|
if (musicVisualizerColorTextBox.Text.Length > 0)
|
||||||
{
|
{
|
||||||
@@ -391,18 +386,16 @@ namespace DesktopMagic
|
|||||||
}
|
}
|
||||||
|
|
||||||
string hex = musicVisualizerColorTextBox.Text;
|
string hex = musicVisualizerColorTextBox.Text;
|
||||||
hex = hex.Replace("#", "");
|
|
||||||
|
|
||||||
System.Drawing.Color systemColor = System.Drawing.Color.FromArgb((byte)int.Parse(hex.Substring(0, 2), System.Globalization.NumberStyles.HexNumber), (byte)int.Parse(hex.Substring(2, 2), System.Globalization.NumberStyles.HexNumber), (byte)int.Parse(hex.Substring(4, 2), System.Globalization.NumberStyles.HexNumber));
|
if (MultiColorConverter.TryConvertToSystemColor(hex, out System.Drawing.Color systemColor))
|
||||||
System.Drawing.Brush systemBrush = new System.Drawing.SolidBrush(systemColor);
|
{
|
||||||
|
MusicVisualzerColor = systemColor;
|
||||||
MusicVisualzerColor = systemBrush;
|
|
||||||
musicVisualizerColorTextBox.Foreground = Brushes.Black;
|
musicVisualizerColorTextBox.Foreground = Brushes.Black;
|
||||||
|
|
||||||
key.SetValue("MusicVisualizerColor", musicVisualizerColorTextBox.Text);
|
key.SetValue("MusicVisualizerColor", musicVisualizerColorTextBox.Text);
|
||||||
SaveLayout();
|
SaveLayout();
|
||||||
}
|
}
|
||||||
catch
|
else
|
||||||
{
|
{
|
||||||
musicVisualizerColorTextBox.Foreground = Brushes.Red;
|
musicVisualizerColorTextBox.Foreground = Brushes.Red;
|
||||||
}
|
}
|
||||||
@@ -417,17 +410,17 @@ namespace DesktopMagic
|
|||||||
|
|
||||||
private void FontComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
private void FontComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
||||||
{
|
{
|
||||||
GlobalFont = fontComboBox.SelectedValue.ToString().Replace("System.Windows.Controls.ComboBoxItem: ", "");
|
Theme.Font = fontComboBox.SelectedValue.ToString().Replace("System.Windows.Controls.ComboBoxItem: ", "");
|
||||||
key.SetValue("Font", GlobalFont);
|
key.SetValue("Font", Theme.Font);
|
||||||
SaveLayout();
|
SaveLayout();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SpectrumPlugineComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
private void SpectrumModeComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
||||||
{
|
{
|
||||||
SpectrumMode = spectrumPlugineComboBox.SelectedIndex;
|
SpectrumMode = spectrumModeComboBox.SelectedIndex;
|
||||||
key.SetValue("SpectrumPlugine", spectrumPlugineComboBox.SelectedIndex);
|
key.SetValue("SpectrumMode", spectrumModeComboBox.SelectedIndex);
|
||||||
|
|
||||||
mirrorPlugineCheckBox.IsEnabled = spectrumPlugineComboBox.SelectedIndex != 1;
|
mirrorModeCheckBox.IsEnabled = spectrumModeComboBox.SelectedIndex != 1;
|
||||||
SaveLayout();
|
SaveLayout();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -448,222 +441,38 @@ namespace DesktopMagic
|
|||||||
optionsPanel.Children.Clear();
|
optionsPanel.Children.Clear();
|
||||||
optionsPanel.UpdateLayout();
|
optionsPanel.UpdateLayout();
|
||||||
|
|
||||||
bool succ = PluginsSettings.TryGetValue(((Tuple<string, int>)optionsComboBox.SelectedItem).Item1.ToString(), out List<SettingElement> settingElements);
|
bool success = PluginsSettings.TryGetValue(optionsComboBox.SelectedItem.ToString(), out List<SettingElement> settingElements);
|
||||||
if (!succ || settingElements?.Count == 0)
|
if (!success || settingElements?.Count == 0)
|
||||||
{
|
{
|
||||||
_ = optionsPanel.Children.Add(new TextBlock() { Text = (string)FindResource("noOptions") });
|
_ = optionsPanel.Children.Add(new TextBlock() { Text = (string)FindResource("noOptions") });
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SettingElementGenerator settingElementGenerator = new SettingElementGenerator(optionsComboBox);
|
||||||
|
|
||||||
foreach (SettingElement settingElement in settingElements)
|
foreach (SettingElement settingElement in settingElements)
|
||||||
{
|
{
|
||||||
DockPanel stackPanel = new()
|
DockPanel dockPanel = new()
|
||||||
{
|
{
|
||||||
LastChildFill = true,
|
LastChildFill = true,
|
||||||
HorizontalAlignment = HorizontalAlignment.Stretch
|
HorizontalAlignment = HorizontalAlignment.Stretch
|
||||||
};
|
};
|
||||||
_ = optionsPanel.Children.Add(stackPanel);
|
_ = optionsPanel.Children.Add(dockPanel);
|
||||||
|
|
||||||
TextBlock label = new()
|
TextBlock textBlock = new()
|
||||||
{
|
{
|
||||||
Text = settingElement.Name,
|
Text = settingElement.Name,
|
||||||
Padding = new Thickness(0, 0, 3, 0),
|
Padding = new Thickness(0, 0, 3, 0),
|
||||||
VerticalAlignment = VerticalAlignment.Center
|
VerticalAlignment = VerticalAlignment.Center
|
||||||
};
|
};
|
||||||
|
|
||||||
_ = stackPanel.Children.Add(label);
|
_ = dockPanel.Children.Add(textBlock);
|
||||||
stackPanel.UpdateLayout();
|
settingElementGenerator.Generate(settingElement, dockPanel, textBlock);
|
||||||
label.UpdateLayout();
|
|
||||||
|
|
||||||
if (settingElement.Element is DesktopMagicPluginAPI.Inputs.Label eLabel)
|
|
||||||
{
|
|
||||||
label.Text = eLabel.Value;
|
|
||||||
label.Margin = new Thickness(0, 5, 3, 0);
|
|
||||||
label.HorizontalAlignment = HorizontalAlignment.Stretch;
|
|
||||||
label.TextWrapping = TextWrapping.WrapWithOverflow;
|
|
||||||
|
|
||||||
if (eLabel.Bold)
|
|
||||||
{
|
|
||||||
label.FontWeight = FontWeights.Bold;
|
|
||||||
}
|
|
||||||
eLabel.OnValueChanged += () =>
|
|
||||||
{
|
|
||||||
Dispatcher.Invoke(() =>
|
|
||||||
{
|
|
||||||
label.Text = eLabel.Value;
|
|
||||||
});
|
|
||||||
};
|
|
||||||
}
|
|
||||||
else if (settingElement.Element is DesktopMagicPluginAPI.Inputs.Button eButton)
|
|
||||||
{
|
|
||||||
Button button = new()
|
|
||||||
{
|
|
||||||
Content = eButton.Value,
|
|
||||||
FontSize = 10,
|
|
||||||
Height = 20,
|
|
||||||
Margin = new Thickness(0, 10, 0, 10),
|
|
||||||
Padding = new Thickness(0),
|
|
||||||
VerticalAlignment = VerticalAlignment.Center,
|
|
||||||
HorizontalAlignment = HorizontalAlignment.Stretch
|
|
||||||
};
|
|
||||||
button.Click += (_s, _e) =>
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
eButton.Click();
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
DisplayException(ex.Message);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
eButton.OnValueChanged += () =>
|
|
||||||
{
|
|
||||||
Dispatcher.Invoke(() =>
|
|
||||||
{
|
|
||||||
button.Content = eButton.Value;
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
_ = stackPanel.Children.Add(button);
|
|
||||||
}
|
|
||||||
else if (settingElement.Element is DesktopMagicPluginAPI.Inputs.CheckBox eCheckBox)
|
|
||||||
{
|
|
||||||
CheckBox checkBox = new()
|
|
||||||
{
|
|
||||||
IsChecked = eCheckBox.Value,
|
|
||||||
Style = (Style)FindResource("MaterialDesignDarkCheckBox"),
|
|
||||||
VerticalAlignment = VerticalAlignment.Center,
|
|
||||||
HorizontalAlignment = HorizontalAlignment.Stretch
|
|
||||||
};
|
|
||||||
checkBox.Click += (_s, _e) =>
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
eCheckBox.Value = checkBox.IsChecked.GetValueOrDefault();
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
DisplayException(ex.Message);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
eCheckBox.OnValueChanged += () =>
|
|
||||||
{
|
|
||||||
Dispatcher.Invoke(() =>
|
|
||||||
{
|
|
||||||
checkBox.IsChecked = eCheckBox.Value;
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
_ = stackPanel.Children.Add(checkBox);
|
|
||||||
}
|
|
||||||
else if (settingElement.Element is DesktopMagicPluginAPI.Inputs.TextBox eTextBox)
|
|
||||||
{
|
|
||||||
TextBox textBox = new()
|
|
||||||
{
|
|
||||||
Text = eTextBox.Value,
|
|
||||||
TextWrapping = TextWrapping.Wrap,
|
|
||||||
VerticalAlignment = VerticalAlignment.Center,
|
|
||||||
HorizontalAlignment = HorizontalAlignment.Stretch
|
|
||||||
};
|
|
||||||
textBox.TextChanged += (_s, _e) =>
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
eTextBox.Value = textBox.Text;
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
DisplayException(ex.Message);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
eTextBox.OnValueChanged += () =>
|
|
||||||
{
|
|
||||||
Dispatcher.Invoke(() =>
|
|
||||||
{
|
|
||||||
textBox.Text = eTextBox.Value;
|
|
||||||
});
|
|
||||||
};
|
|
||||||
_ = stackPanel.Children.Add(textBox);
|
|
||||||
}
|
|
||||||
else if (settingElement.Element is DesktopMagicPluginAPI.Inputs.IntegerUpDown eIntegerUpDown)
|
|
||||||
{
|
|
||||||
Xceed.Wpf.Toolkit.IntegerUpDown integerUpDown = new()
|
|
||||||
{
|
|
||||||
Value = eIntegerUpDown.Value,
|
|
||||||
Minimum = eIntegerUpDown.Minimum,
|
|
||||||
Maximum = eIntegerUpDown.Maximum,
|
|
||||||
VerticalAlignment = VerticalAlignment.Center,
|
|
||||||
HorizontalAlignment = HorizontalAlignment.Stretch
|
|
||||||
};
|
|
||||||
integerUpDown.ValueChanged += (_s, _e) =>
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
eIntegerUpDown.Value = integerUpDown.Value.GetValueOrDefault();
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
DisplayException(ex.Message);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
eIntegerUpDown.OnValueChanged += () =>
|
|
||||||
{
|
|
||||||
Dispatcher.Invoke(() =>
|
|
||||||
{
|
|
||||||
integerUpDown.Value = eIntegerUpDown.Value;
|
|
||||||
});
|
|
||||||
};
|
|
||||||
_ = stackPanel.Children.Add(integerUpDown);
|
|
||||||
}
|
|
||||||
else if (settingElement.Element is DesktopMagicPluginAPI.Inputs.Slider eSlider)
|
|
||||||
{
|
|
||||||
Slider slider = new()
|
|
||||||
{
|
|
||||||
Value = eSlider.Value,
|
|
||||||
Minimum = eSlider.Minimum,
|
|
||||||
Maximum = eSlider.Maximum,
|
|
||||||
TickFrequency = 1,
|
|
||||||
IsSnapToTickEnabled = true,
|
|
||||||
VerticalAlignment = VerticalAlignment.Center,
|
|
||||||
HorizontalAlignment = HorizontalAlignment.Stretch
|
|
||||||
};
|
|
||||||
slider.ValueChanged += (_s, _e) =>
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
eSlider.Value = slider.Value;
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
DisplayException(ex.Message);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
eSlider.OnValueChanged += () =>
|
|
||||||
{
|
|
||||||
Dispatcher.Invoke(() =>
|
|
||||||
{
|
|
||||||
slider.Value = eSlider.Value;
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
_ = stackPanel.Children.Add(slider);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void DisplayException(string message)
|
#endregion Options
|
||||||
{
|
|
||||||
App.Logger.Log(message, "PluginInput");
|
|
||||||
_ = MessageBox.Show("File execution error:\n" + message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
|
|
||||||
int index = WindowNames.IndexOf(((Tuple<string, int>)optionsComboBox.SelectedItem).Item1.ToString());
|
|
||||||
|
|
||||||
PluginWindow window = Windows[index] as PluginWindow;
|
|
||||||
window?.Exit();
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion options
|
|
||||||
|
|
||||||
private void TextBlock_Loaded(object sender, RoutedEventArgs e)
|
private void TextBlock_Loaded(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
@@ -677,7 +486,7 @@ namespace DesktopMagic
|
|||||||
};
|
};
|
||||||
_ = fontComboBox.Items.Add(comboBoxItem);
|
_ = fontComboBox.Items.Add(comboBoxItem);
|
||||||
|
|
||||||
if (ff.ToString() == GlobalFont)
|
if (ff.ToString() == Theme.Font)
|
||||||
{
|
{
|
||||||
fontComboBox.SelectedIndex = index;
|
fontComboBox.SelectedIndex = index;
|
||||||
}
|
}
|
||||||
@@ -689,70 +498,79 @@ namespace DesktopMagic
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#region color
|
private void ChangePrimaryColorButton_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
ColorDialog colorDialog = new ColorDialog("Set Primary Color", Theme.PrimaryColor);
|
||||||
|
if (colorDialog.ShowDialog() == true)
|
||||||
|
{
|
||||||
|
Theme.PrimaryBrush = colorDialog.ResultBrush;
|
||||||
|
Theme.PrimaryColor = colorDialog.ResultColor;
|
||||||
|
primaryColorRechtangle.Fill = colorDialog.ResultBrush;
|
||||||
|
|
||||||
private void ColorSliders_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
|
key.SetValue("PrimaryColor", MultiColorConverter.ConvertToHex(Theme.PrimaryColor));
|
||||||
{
|
|
||||||
colorHexTextBox.Text = "#" + ((int)redSlider.Value).ToString("X2") + ((int)greenSlider.Value).ToString("X2") + ((int)blueSlider.Value).ToString("X2");
|
|
||||||
colorHexTextBox.Select(colorHexTextBox.Text.Length, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void ColorHexTextBox_TextChanged(object sender, TextChangedEventArgs e)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (colorHexTextBox.Text.Length > 0)
|
|
||||||
{
|
|
||||||
if (colorHexTextBox.Text.ToCharArray()[0] != '#')
|
|
||||||
{
|
|
||||||
colorHexTextBox.Text = "#" + colorHexTextBox.Text.Replace("#", "");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
colorHexTextBox.Text = "#";
|
|
||||||
colorHexTextBox.Select(colorHexTextBox.Text.Length, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (colorHexTextBox.SelectionStart == 0)
|
|
||||||
{
|
|
||||||
if (colorHexTextBox.Text.Length <= 2)
|
|
||||||
{
|
|
||||||
colorHexTextBox.Select(colorHexTextBox.Text.Length, 0);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
colorHexTextBox.Select(1, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
string hex = colorHexTextBox.Text;
|
|
||||||
hex = hex.Replace("#", "");
|
|
||||||
Color color = Color.FromRgb((byte)int.Parse(hex.Substring(0, 2), System.Globalization.NumberStyles.HexNumber), (byte)int.Parse(hex.Substring(2, 2), System.Globalization.NumberStyles.HexNumber), (byte)int.Parse(hex.Substring(4, 2), System.Globalization.NumberStyles.HexNumber));
|
|
||||||
System.Drawing.Color systemColor = System.Drawing.Color.FromArgb((byte)int.Parse(hex.Substring(0, 2), System.Globalization.NumberStyles.HexNumber), (byte)int.Parse(hex.Substring(2, 2), System.Globalization.NumberStyles.HexNumber), (byte)int.Parse(hex.Substring(4, 2), System.Globalization.NumberStyles.HexNumber));
|
|
||||||
|
|
||||||
redSlider.Value = color.R;
|
|
||||||
greenSlider.Value = color.G;
|
|
||||||
blueSlider.Value = color.B;
|
|
||||||
|
|
||||||
Brush brush = new SolidColorBrush(color);
|
|
||||||
System.Drawing.Brush systemBrush = new System.Drawing.SolidBrush(systemColor);
|
|
||||||
|
|
||||||
GlobalColor = brush;
|
|
||||||
GlobalSystemColor = systemBrush;
|
|
||||||
colorRechtangle.Fill = brush;
|
|
||||||
colorHexTextBox.Foreground = Brushes.Black;
|
|
||||||
|
|
||||||
key.SetValue("Color", colorHexTextBox.Text);
|
|
||||||
SaveLayout();
|
SaveLayout();
|
||||||
}
|
}
|
||||||
catch
|
}
|
||||||
|
|
||||||
|
private void ChangeSecondaryColorButton_Click(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
colorHexTextBox.Foreground = Brushes.Red;
|
ColorDialog colorDialog = new ColorDialog("Set Secondary Color", Theme.SecondaryColor);
|
||||||
|
if (colorDialog.ShowDialog() == true)
|
||||||
|
{
|
||||||
|
Theme.SecondaryBrush = colorDialog.ResultBrush;
|
||||||
|
Theme.SecondaryColor = colorDialog.ResultColor;
|
||||||
|
secondaryColorRechtangle.Fill = colorDialog.ResultBrush;
|
||||||
|
|
||||||
|
key.SetValue("SecondaryColor", MultiColorConverter.ConvertToHex(Theme.SecondaryColor));
|
||||||
|
SaveLayout();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion color
|
private void ChangeBackgroundColorButton_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
ColorDialog colorDialog = new ColorDialog("Set Background Color", Theme.BackgroundColor);
|
||||||
|
if (colorDialog.ShowDialog() == true)
|
||||||
|
{
|
||||||
|
Theme.BackgroundBrush = colorDialog.ResultBrush;
|
||||||
|
Theme.BackgroundColor = colorDialog.ResultColor;
|
||||||
|
backgroundColorRechtangle.Fill = colorDialog.ResultBrush;
|
||||||
|
|
||||||
|
key.SetValue("BackgroundColor", MultiColorConverter.ConvertToHex(Theme.BackgroundColor));
|
||||||
|
SaveLayout();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CornerRadiusTextBox_TextChanged(object sender, TextChangedEventArgs e)
|
||||||
|
{
|
||||||
|
bool sucess = int.TryParse(cornerRadiusTextBox.Text, out int cornerRadius);
|
||||||
|
if (sucess)
|
||||||
|
{
|
||||||
|
cornerRadiusTextBox.Foreground = Brushes.Black;
|
||||||
|
Theme.CornerRadius = cornerRadius;
|
||||||
|
key.SetValue("CornerRadius", cornerRadius);
|
||||||
|
SaveLayout();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cornerRadiusTextBox.Foreground = Brushes.Red;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void MarginTextBox_TextChanged(object sender, TextChangedEventArgs e)
|
||||||
|
{
|
||||||
|
bool sucess = int.TryParse(marginTextBox.Text, out int margin);
|
||||||
|
if (sucess)
|
||||||
|
{
|
||||||
|
marginTextBox.Foreground = Brushes.Black;
|
||||||
|
Theme.Margin = margin;
|
||||||
|
key.SetValue("Margin", margin);
|
||||||
|
SaveLayout();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
marginTextBox.Foreground = Brushes.Red;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#region Layout
|
#region Layout
|
||||||
|
|
||||||
@@ -782,7 +600,7 @@ namespace DesktopMagic
|
|||||||
for (int i = 0; i < fontComboBox.Items.Count; i++)
|
for (int i = 0; i < fontComboBox.Items.Count; i++)
|
||||||
{
|
{
|
||||||
ComboBoxItem comboBoxItem = (ComboBoxItem)fontComboBox.Items[i];
|
ComboBoxItem comboBoxItem = (ComboBoxItem)fontComboBox.Items[i];
|
||||||
if (comboBoxItem.FontFamily.ToString() == GlobalFont)
|
if (comboBoxItem.FontFamily.ToString() == Theme.Font)
|
||||||
{
|
{
|
||||||
fontComboBox.SelectedIndex = i;
|
fontComboBox.SelectedIndex = i;
|
||||||
}
|
}
|
||||||
@@ -827,6 +645,11 @@ namespace DesktopMagic
|
|||||||
|
|
||||||
private void SaveLayout()
|
private void SaveLayout()
|
||||||
{
|
{
|
||||||
|
if (!loaded)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
_ = Task.Run(() =>
|
_ = Task.Run(() =>
|
||||||
{
|
{
|
||||||
lock (App.ApplicationDataPath)
|
lock (App.ApplicationDataPath)
|
||||||
@@ -860,25 +683,52 @@ namespace DesktopMagic
|
|||||||
string name = line[(line.LastIndexOf(";", StringComparison.InvariantCulture) + 1)..];
|
string name = line[(line.LastIndexOf(";", StringComparison.InvariantCulture) + 1)..];
|
||||||
_ = layoutsComboBox.Items.Add(name);
|
_ = layoutsComboBox.Items.Add(name);
|
||||||
}
|
}
|
||||||
layoutsComboBox.SelectedIndex = int.Parse(key.GetValue("SelectedLayout", "0").ToString());
|
layoutsComboBox.SelectedIndex = int.Parse(key.GetValue("SelectedLayout", "0").ToString(), CultureInfo.InvariantCulture);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void LoadLayout(bool minimize = true)
|
private void LoadLayout(bool minimize = true)
|
||||||
{
|
{
|
||||||
GlobalFont = key.GetValue("Font", "Segoe UI").ToString();
|
Theme.Font = key.GetValue("Font", "Segoe UI").ToString();
|
||||||
spectrumPlugineComboBox.SelectedIndex = int.Parse(key.GetValue("SpectrumPlugine", "0").ToString());
|
spectrumModeComboBox.SelectedIndex = int.Parse(key.GetValue("SpectrumMode", "0").ToString(), CultureInfo.InvariantCulture);
|
||||||
amplifierLevelSlider.Value = int.Parse(key.GetValue("AmplifierLevel", "0").ToString());
|
amplifierLevelSlider.Value = int.Parse(key.GetValue("AmplifierLevel", "0").ToString(), CultureInfo.InvariantCulture);
|
||||||
mirrorPlugineCheckBox.IsChecked = bool.Parse(key.GetValue("MirrorPlugine", "false").ToString());
|
mirrorModeCheckBox.IsChecked = bool.Parse(key.GetValue("MirrorMode", "false").ToString());
|
||||||
linePlugineCheckBox.IsChecked = bool.Parse(key.GetValue("LinePlugine", "false").ToString());
|
lineModeCheckBox.IsChecked = bool.Parse(key.GetValue("LineMode", "false").ToString());
|
||||||
musicVisualizerColorTextBox.Text = key.GetValue("MusicVisualizerColor", "").ToString();
|
musicVisualizerColorTextBox.Text = key.GetValue("MusicVisualizerColor", "").ToString();
|
||||||
colorHexTextBox.Text = key.GetValue("Color", "#FFFFFF").ToString();
|
cornerRadiusTextBox.Text = key.GetValue("CornerRadius", "0").ToString();
|
||||||
|
marginTextBox.Text = key.GetValue("Margin", "0").ToString();
|
||||||
blockWindowsClosing = false;
|
blockWindowsClosing = false;
|
||||||
|
|
||||||
|
string primaryColorHex = key.GetValue("PrimaryColor", "#FFFFFFFF").ToString();
|
||||||
|
string secondaryColorHex = key.GetValue("SecondaryColor", "#FFFFFFFF").ToString();
|
||||||
|
string backgroundColorHex = key.GetValue("BackgroundColor", "#00FFFFFF").ToString();
|
||||||
|
|
||||||
|
_ = MultiColorConverter.TryConvertToSystemColor(primaryColorHex, out System.Drawing.Color primarySystemColor);
|
||||||
|
_ = MultiColorConverter.TryConvertToMediaColor(primaryColorHex, out Color primaryMediaColor);
|
||||||
|
_ = MultiColorConverter.TryConvertToSystemColor(secondaryColorHex, out System.Drawing.Color secondarySystemColor);
|
||||||
|
_ = MultiColorConverter.TryConvertToMediaColor(secondaryColorHex, out Color secondaryMediaColor);
|
||||||
|
_ = MultiColorConverter.TryConvertToSystemColor(backgroundColorHex, out System.Drawing.Color backgroundSystemColor);
|
||||||
|
_ = MultiColorConverter.TryConvertToMediaColor(backgroundColorHex, out Color backgroundMediaColor);
|
||||||
|
|
||||||
|
Theme.PrimaryColor = primarySystemColor;
|
||||||
|
Theme.PrimaryBrush = new SolidColorBrush(primaryMediaColor);
|
||||||
|
|
||||||
|
Theme.SecondaryColor = secondarySystemColor;
|
||||||
|
Theme.SecondaryBrush = new SolidColorBrush(secondaryMediaColor);
|
||||||
|
|
||||||
|
Theme.BackgroundColor = backgroundSystemColor;
|
||||||
|
Theme.BackgroundBrush = new SolidColorBrush(backgroundMediaColor);
|
||||||
|
|
||||||
|
primaryColorRechtangle.Fill = Theme.PrimaryBrush;
|
||||||
|
secondaryColorRechtangle.Fill = Theme.SecondaryBrush;
|
||||||
|
backgroundColorRechtangle.Fill = Theme.BackgroundBrush;
|
||||||
|
|
||||||
MusicVisualizerColorTextBox_TextChanged(null, null);
|
MusicVisualizerColorTextBox_TextChanged(null, null);
|
||||||
MirrorPlugineCheckBox_Click(null, null);
|
MirrorModeCheckBox_Click(null, null);
|
||||||
LinePlugineCheckBox_Click(null, null);
|
LineModeCheckBox_Click(null, null);
|
||||||
SpectrumPlugineComboBox_SelectionChanged(null, null);
|
SpectrumModeComboBox_SelectionChanged(null, null);
|
||||||
AmplifierLevelSlider_ValueChanged(null, null);
|
AmplifierLevelSlider_ValueChanged(null, null);
|
||||||
|
CornerRadiusTextBox_TextChanged(null, null);
|
||||||
|
MarginTextBox_TextChanged(null, null);
|
||||||
|
|
||||||
foreach (Window window in Windows)
|
foreach (Window window in Windows)
|
||||||
{
|
{
|
||||||
@@ -890,6 +740,9 @@ namespace DesktopMagic
|
|||||||
blockWindowsClosing = true;
|
blockWindowsClosing = true;
|
||||||
Windows.Clear();
|
Windows.Clear();
|
||||||
WindowNames.Clear();
|
WindowNames.Clear();
|
||||||
|
optionsComboBox.Items.Clear();
|
||||||
|
|
||||||
|
_ = optionsComboBox.Items.Add((string)FindResource("musicVisualizer"));
|
||||||
|
|
||||||
IEnumerable<CheckBox> list = stackPanel.Children.OfType<CheckBox>();
|
IEnumerable<CheckBox> list = stackPanel.Children.OfType<CheckBox>();
|
||||||
bool showWindow = true;
|
bool showWindow = true;
|
||||||
@@ -914,7 +767,7 @@ namespace DesktopMagic
|
|||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
App.Logger.Log(ex.ToString(), "Main");
|
App.Logger.Log(ex.ToString(), "Main");
|
||||||
MessageBox.Show(ex.ToString());
|
_ = MessageBox.Show(ex.ToString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -941,7 +794,7 @@ namespace DesktopMagic
|
|||||||
private void UpdatePluginsButton_Click(object sender, RoutedEventArgs e)
|
private void UpdatePluginsButton_Click(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
LoadPlugins();
|
LoadPlugins();
|
||||||
Task.Run(() =>
|
_ = Task.Run(() =>
|
||||||
{
|
{
|
||||||
foreach (Window window in Windows.ToArray())
|
foreach (Window window in Windows.ToArray())
|
||||||
{
|
{
|
||||||
@@ -973,11 +826,33 @@ namespace DesktopMagic
|
|||||||
Visibility = Visibility.Visible;
|
Visibility = Visibility.Visible;
|
||||||
SystemCommands.RestoreWindow(this);
|
SystemCommands.RestoreWindow(this);
|
||||||
Topmost = true;
|
Topmost = true;
|
||||||
Activate();
|
_ = Activate();
|
||||||
Topmost = false;
|
Topmost = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void GithubButton_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
string uri = "https://github.com/Stone-Red-Code/DesktopMagic";
|
||||||
|
ProcessStartInfo psi = new ProcessStartInfo
|
||||||
|
{
|
||||||
|
UseShellExecute = true,
|
||||||
|
FileName = uri
|
||||||
|
};
|
||||||
|
_ = Process.Start(psi);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void DownloadPluginsButton_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
string uri = "https://github.com/Stone-Red-Code/DesktopMagic-Plugins";
|
||||||
|
ProcessStartInfo psi = new ProcessStartInfo
|
||||||
|
{
|
||||||
|
UseShellExecute = true,
|
||||||
|
FileName = uri
|
||||||
|
};
|
||||||
|
_ = Process.Start(psi);
|
||||||
|
}
|
||||||
|
|
||||||
private void SetLanguageDictionary()
|
private void SetLanguageDictionary()
|
||||||
{
|
{
|
||||||
ResourceDictionary dict = new ResourceDictionary();
|
ResourceDictionary dict = new ResourceDictionary();
|
||||||
@@ -993,23 +868,5 @@ namespace DesktopMagic
|
|||||||
}
|
}
|
||||||
Resources.MergedDictionaries.Add(dict);
|
Resources.MergedDictionaries.Add(dict);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void GithubButton_Click(object sender, RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
string uri = "https://github.com/Stone-Red-Code/DesktopMagic";
|
|
||||||
ProcessStartInfo psi = new ProcessStartInfo();
|
|
||||||
psi.UseShellExecute = true;
|
|
||||||
psi.FileName = uri;
|
|
||||||
_ = Process.Start(psi);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void DownloadPluginsButton_Click(object sender, RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
string uri = "https://github.com/Stone-Red-Code/DesktopMagic-Plugins";
|
|
||||||
ProcessStartInfo psi = new ProcessStartInfo();
|
|
||||||
psi.UseShellExecute = true;
|
|
||||||
psi.FileName = uri;
|
|
||||||
_ = Process.Start(psi);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
<Window
|
|
||||||
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:System="clr-namespace:System;assembly=mscorlib" x:Class="DesktopMagic.MusicVisualizerWindow"
|
|
||||||
mc:Ignorable="d"
|
|
||||||
Title="MusicVisualizerWindow" Height="450" Width="800"
|
|
||||||
Background="Transparent"
|
|
||||||
WindowStyle="None"
|
|
||||||
AllowsTransparency="True"
|
|
||||||
LocationChanged="Window_LocationChanged"
|
|
||||||
SizeChanged="Window_SizeChanged"
|
|
||||||
x:Name="window">
|
|
||||||
<WindowChrome.WindowChrome>
|
|
||||||
<WindowChrome x:Name="tileBar" CaptionHeight="30" ResizeBorderThickness="{x:Static SystemParameters.WindowResizeBorderThickness}" />
|
|
||||||
</WindowChrome.WindowChrome>
|
|
||||||
<Grid x:Name="grid">
|
|
||||||
<Rectangle x:Name="panel" Fill="#4CBAFFEF" Stroke="White" Margin="0,0,0,0" Visibility="Collapsed" />
|
|
||||||
<Viewbox StretchDirection="Both" Stretch="Uniform">
|
|
||||||
<Image x:Name="image" HorizontalAlignment="Left" Height="759" Margin="0,0,0,0" VerticalAlignment="Top" Width="1747" RenderTransformOrigin="0.5,0.5" Stretch="Fill" />
|
|
||||||
</Viewbox>
|
|
||||||
</Grid>
|
|
||||||
</Window>
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
using DesktopMagicPluginAPI;
|
|
||||||
using System.Drawing;
|
|
||||||
|
|
||||||
namespace DesktopMagic
|
|
||||||
{
|
|
||||||
internal class PluginData : IPluginData
|
|
||||||
{
|
|
||||||
private readonly PluginWindow window;
|
|
||||||
|
|
||||||
public PluginData(PluginWindow win)
|
|
||||||
{
|
|
||||||
window = win;
|
|
||||||
}
|
|
||||||
|
|
||||||
public string Font => MainWindow.GlobalFont;
|
|
||||||
|
|
||||||
public Color Color => (MainWindow.GlobalSystemColor as SolidBrush).Color;
|
|
||||||
|
|
||||||
public Point WindowSize => new Point((int)window.ActualWidth, (int)window.ActualHeight);
|
|
||||||
|
|
||||||
public Point WindowPosition => new Point((int)window.Left, (int)window.Top);
|
|
||||||
|
|
||||||
public string PluginName => window.PluginName;
|
|
||||||
|
|
||||||
public string PluginPath => window.PluginFolderPath;
|
|
||||||
|
|
||||||
public void UpdateWindow() => window.UpdatePluginWindow();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,384 +0,0 @@
|
|||||||
using DesktopMagicPluginAPI;
|
|
||||||
using DesktopMagicPluginAPI.Drawing;
|
|
||||||
using DesktopMagicPluginAPI.Inputs;
|
|
||||||
|
|
||||||
using Microsoft.Win32;
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Drawing;
|
|
||||||
using System.Drawing.Imaging;
|
|
||||||
using System.IO;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Reflection;
|
|
||||||
using System.Threading;
|
|
||||||
using System.Timers;
|
|
||||||
using System.Windows;
|
|
||||||
using System.Windows.Interop;
|
|
||||||
using System.Windows.Media;
|
|
||||||
using System.Windows.Media.Imaging;
|
|
||||||
|
|
||||||
namespace DesktopMagic
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Interaktionslogik für PluginWindow.xaml
|
|
||||||
/// </summary>
|
|
||||||
///
|
|
||||||
public partial class PluginWindow : Window
|
|
||||||
{
|
|
||||||
private readonly RegistryKey key;
|
|
||||||
private Thread pluginThread;
|
|
||||||
private System.Timers.Timer valueTimer;
|
|
||||||
|
|
||||||
private Plugin pluginClassInstance;
|
|
||||||
public string PluginName { get; private set; }
|
|
||||||
public string PluginFolderPath { get; private set; }
|
|
||||||
private bool stop = false;
|
|
||||||
|
|
||||||
public event Action PluginLoaded;
|
|
||||||
|
|
||||||
public event Action OnExit;
|
|
||||||
|
|
||||||
public PluginWindow(string pluginName)
|
|
||||||
{
|
|
||||||
InitializeComponent();
|
|
||||||
|
|
||||||
Window w = new()
|
|
||||||
{
|
|
||||||
Top = -100,
|
|
||||||
Left = -100,
|
|
||||||
Width = 0,
|
|
||||||
Height = 0,
|
|
||||||
|
|
||||||
WindowStyle = WindowStyle.ToolWindow,
|
|
||||||
ShowInTaskbar = false
|
|
||||||
};
|
|
||||||
w.Show();
|
|
||||||
Owner = w;
|
|
||||||
w.Hide();
|
|
||||||
|
|
||||||
System.Timers.Timer t = new System.Timers.Timer();
|
|
||||||
t.Interval = 100;
|
|
||||||
t.Elapsed += Elapsed;
|
|
||||||
t.Start();
|
|
||||||
|
|
||||||
PluginName = pluginName;
|
|
||||||
|
|
||||||
key = Registry.CurrentUser.CreateSubKey(@"Software\" + App.AppName);
|
|
||||||
Top = double.Parse(key.GetValue(pluginName + "WindowTop", 100).ToString());
|
|
||||||
Left = double.Parse(key.GetValue(pluginName + "WindowLeft", 100).ToString());
|
|
||||||
Height = double.Parse(key.GetValue(pluginName + "WindowHeight", 200).ToString());
|
|
||||||
Width = double.Parse(key.GetValue(pluginName + "WindowWidth", 500).ToString());
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void OnSourceInitialized(EventArgs e)
|
|
||||||
{
|
|
||||||
base.OnSourceInitialized(e);
|
|
||||||
|
|
||||||
//Set the window style to noactivate.
|
|
||||||
WindowInteropHelper helper = new(this);
|
|
||||||
WindowPos.SetWindowLong(helper.Handle, WindowPos.GWL_EXSTYLE,
|
|
||||||
WindowPos.GetWindowLong(helper.Handle, WindowPos.GWL_EXSTYLE) | WindowPos.WS_EX_NOACTIVATE);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Window_ContentRendered(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
pluginThread = new Thread(() =>
|
|
||||||
{
|
|
||||||
LoadPlugin();
|
|
||||||
});
|
|
||||||
pluginThread.Start();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void UpdatePluginWindow()
|
|
||||||
{
|
|
||||||
ValueTimer_Elapsed(valueTimer, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Elapsed(object sender, ElapsedEventArgs e)
|
|
||||||
{
|
|
||||||
Dispatcher.Invoke(() =>
|
|
||||||
{
|
|
||||||
if (MainWindow.EditMode)
|
|
||||||
{
|
|
||||||
panel.Visibility = Visibility.Visible;
|
|
||||||
WindowPos.SetIsLocked(this, false);
|
|
||||||
tileBar.CaptionHeight = tileBar.CaptionHeight = ActualHeight - 10 < 0 ? 0 : ActualHeight - 10;
|
|
||||||
ResizeMode = ResizeMode.CanResize;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
panel.Visibility = Visibility.Collapsed;
|
|
||||||
WindowPos.SetIsLocked(this, true);
|
|
||||||
tileBar.CaptionHeight = 0;
|
|
||||||
ResizeMode = ResizeMode.NoResize;
|
|
||||||
}
|
|
||||||
if (stop)
|
|
||||||
{
|
|
||||||
((System.Timers.Timer)sender).Stop();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private void LoadPlugin()
|
|
||||||
{
|
|
||||||
PluginFolderPath = $"{Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)}\\{App.AppName}\\Plugins\\{PluginName}";
|
|
||||||
|
|
||||||
if (!File.Exists($"{PluginFolderPath}\\{PluginName}.dll"))
|
|
||||||
{
|
|
||||||
_ = MessageBox.Show("File does not exist!", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
|
|
||||||
Exit();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
ExecuteSource();
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
App.Logger.Log(ex.ToString(), "Plugin");
|
|
||||||
_ = MessageBox.Show("File execution error:\n" + ex, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
|
|
||||||
Exit();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
PluginLoaded?.Invoke();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void ExecuteSource()
|
|
||||||
{
|
|
||||||
byte[] assemblyBytes = File.ReadAllBytes($"{PluginFolderPath}\\{PluginName}.dll");
|
|
||||||
Assembly dll = Assembly.Load(assemblyBytes);
|
|
||||||
Type instanceType = dll.GetTypes().FirstOrDefault(type => type.GetTypeInfo().BaseType == typeof(Plugin));
|
|
||||||
|
|
||||||
if (instanceType is null)
|
|
||||||
{
|
|
||||||
_ = MessageBox.Show($"The \"Plugin\" class could not be found! It has to inherit from \"{typeof(Plugin).FullName}\"", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
|
|
||||||
Exit();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
object instance = Activator.CreateInstance(instanceType);
|
|
||||||
if (instance is Plugin)
|
|
||||||
{
|
|
||||||
pluginClassInstance = instance as Plugin;
|
|
||||||
pluginClassInstance.Application = new PluginData(this);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_ = MessageBox.Show($"The \"Plugin\" class has to inherit from \"{typeof(Plugin).FullName}\"", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
|
|
||||||
Exit();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
LoadOptions(instance);
|
|
||||||
|
|
||||||
valueTimer = new System.Timers.Timer();
|
|
||||||
valueTimer.Interval = 1000;
|
|
||||||
valueTimer.Elapsed += ValueTimer_Elapsed;
|
|
||||||
|
|
||||||
pluginClassInstance.Start();
|
|
||||||
UpdatePluginWindow();
|
|
||||||
|
|
||||||
if (pluginClassInstance.UpdateInterval > 0)
|
|
||||||
{
|
|
||||||
valueTimer.Interval = pluginClassInstance.UpdateInterval;
|
|
||||||
valueTimer.Start();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void LoadOptions(object instance)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
FieldInfo[] props = instance.GetType().GetFields(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.GetField);
|
|
||||||
|
|
||||||
List<SettingElement> settingElements = new List<SettingElement>();
|
|
||||||
foreach (FieldInfo prop in props)
|
|
||||||
{
|
|
||||||
if (prop.GetValue(instance) is Element element)
|
|
||||||
{
|
|
||||||
object[] attrs = prop.GetCustomAttributes(true);
|
|
||||||
foreach (object attr in attrs)
|
|
||||||
{
|
|
||||||
if (attr is ElementAttribute elementAttribute)
|
|
||||||
{
|
|
||||||
settingElements.Add(new SettingElement(element, elementAttribute.Name, elementAttribute.OrderIndex));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
settingElements = settingElements.OrderBy(x => x.OrderIndex).ToList();
|
|
||||||
if (MainWindow.PluginsSettings.ContainsKey(PluginName))
|
|
||||||
{
|
|
||||||
MainWindow.PluginsSettings[PluginName] = settingElements;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
MainWindow.PluginsSettings.Add(PluginName, settingElements);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
stop = true;
|
|
||||||
App.Logger.Log(ex.ToString(), "Plugin");
|
|
||||||
_ = MessageBox.Show("File execution error:\n" + ex, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
|
|
||||||
Exit();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void ValueTimer_Elapsed(object sender, ElapsedEventArgs e)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (!stop)
|
|
||||||
{
|
|
||||||
Bitmap result = pluginClassInstance.Main();
|
|
||||||
|
|
||||||
if (pluginClassInstance.UpdateInterval > 0)
|
|
||||||
{
|
|
||||||
valueTimer.Interval = pluginClassInstance.UpdateInterval;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
valueTimer.Stop();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (result is not null)
|
|
||||||
{
|
|
||||||
BitmapScalingMode renderOptions = pluginClassInstance.RenderQuality switch
|
|
||||||
{
|
|
||||||
RenderQuality.High => BitmapScalingMode.HighQuality,
|
|
||||||
RenderQuality.Low => BitmapScalingMode.LowQuality,
|
|
||||||
RenderQuality.Performance => BitmapScalingMode.NearestNeighbor,
|
|
||||||
_ => BitmapScalingMode.Unspecified
|
|
||||||
};
|
|
||||||
|
|
||||||
//Update Image
|
|
||||||
Dispatcher.Invoke(() =>
|
|
||||||
{
|
|
||||||
RenderOptions.SetBitmapScalingMode(image, renderOptions);
|
|
||||||
image.Source = BitmapToImageSource(result);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
stop = true;
|
|
||||||
App.Logger.Log(ex.ToString(), "Plugin");
|
|
||||||
_ = MessageBox.Show("File execution error:\n" + ex, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
|
|
||||||
Exit();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (stop)
|
|
||||||
{
|
|
||||||
valueTimer.Stop();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private BitmapSource BitmapToImageSource(Bitmap bitmap)
|
|
||||||
{
|
|
||||||
BitmapData bitmapData = bitmap.LockBits(
|
|
||||||
new Rectangle(0, 0, bitmap.Width, bitmap.Height),
|
|
||||||
ImageLockMode.ReadOnly, bitmap.PixelFormat);
|
|
||||||
|
|
||||||
BitmapSource bitmapSource = BitmapSource.Create(
|
|
||||||
bitmapData.Width, bitmapData.Height,
|
|
||||||
bitmap.HorizontalResolution, bitmap.VerticalResolution,
|
|
||||||
System.Windows.Media.PixelFormats.Bgra32, null,
|
|
||||||
bitmapData.Scan0, bitmapData.Stride * bitmapData.Height, bitmapData.Stride);
|
|
||||||
|
|
||||||
bitmap.UnlockBits(bitmapData);
|
|
||||||
return bitmapSource;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Exit()
|
|
||||||
{
|
|
||||||
stop = true;
|
|
||||||
Dispatcher.Invoke(() =>
|
|
||||||
{
|
|
||||||
OnExit?.Invoke();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Window Events
|
|
||||||
|
|
||||||
private void Window_LocationChanged(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
key.SetValue(PluginName + "WindowTop", Top);
|
|
||||||
key.SetValue(PluginName + "WindowLeft", Left);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
|
|
||||||
{
|
|
||||||
key.SetValue(PluginName + "WindowHeight", Height);
|
|
||||||
key.SetValue(PluginName + "WindowWidth", Width);
|
|
||||||
tileBar.CaptionHeight = ActualHeight - 10;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
|
|
||||||
{
|
|
||||||
stop = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Window_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
|
|
||||||
{
|
|
||||||
ImageSource imageSource = image.Source;
|
|
||||||
BitmapSource bitmapImage = (BitmapSource)imageSource;
|
|
||||||
double pixelMousePositionX = e.GetPosition(image).X * bitmapImage.PixelWidth / image.ActualHeight;
|
|
||||||
double pixelMousePositionY = e.GetPosition(image).Y * bitmapImage.PixelHeight / image.ActualHeight;
|
|
||||||
|
|
||||||
MouseButton mouseButton;
|
|
||||||
|
|
||||||
switch (e.ChangedButton)
|
|
||||||
{
|
|
||||||
case System.Windows.Input.MouseButton.Left:
|
|
||||||
mouseButton = MouseButton.Left;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case System.Windows.Input.MouseButton.Middle:
|
|
||||||
mouseButton = MouseButton.Middle;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case System.Windows.Input.MouseButton.Right:
|
|
||||||
mouseButton = MouseButton.Right;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return;
|
|
||||||
};
|
|
||||||
|
|
||||||
System.Drawing.Point point = new System.Drawing.Point((int)pixelMousePositionX, (int)pixelMousePositionY);
|
|
||||||
pluginClassInstance.OnMouseClick(point, mouseButton);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Window_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
|
|
||||||
{
|
|
||||||
ImageSource imageSource = image.Source;
|
|
||||||
BitmapSource bitmapImage = (BitmapSource)imageSource;
|
|
||||||
double pixelMousePositionX = e.GetPosition(image).X * bitmapImage.PixelWidth / image.ActualHeight;
|
|
||||||
double pixelMousePositionY = e.GetPosition(image).Y * bitmapImage.PixelHeight / image.ActualHeight;
|
|
||||||
|
|
||||||
System.Drawing.Point point = new System.Drawing.Point((int)pixelMousePositionX, (int)pixelMousePositionY);
|
|
||||||
pluginClassInstance.OnMouseMove(point);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Window_MouseWheel(object sender, System.Windows.Input.MouseWheelEventArgs e)
|
|
||||||
{
|
|
||||||
ImageSource imageSource = image.Source;
|
|
||||||
BitmapSource bitmapImage = (BitmapSource)imageSource;
|
|
||||||
double pixelMousePositionX = e.GetPosition(image).X * bitmapImage.PixelWidth / image.ActualHeight;
|
|
||||||
double pixelMousePositionY = e.GetPosition(image).Y * bitmapImage.PixelHeight / image.ActualHeight;
|
|
||||||
|
|
||||||
System.Drawing.Point point = new System.Drawing.Point((int)pixelMousePositionX, (int)pixelMousePositionY);
|
|
||||||
pluginClassInstance.OnMouseWheel(point, e.Delta);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Window Events
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
using DesktopMagicPluginAPI.Inputs;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace DesktopMagic
|
|
||||||
{
|
|
||||||
internal class SettingElement
|
|
||||||
{
|
|
||||||
public Element Element { get; }
|
|
||||||
public string Name { get; }
|
|
||||||
public int OrderIndex { get; }
|
|
||||||
|
|
||||||
public SettingElement(Element element, string name, int orderIndex)
|
|
||||||
{
|
|
||||||
Element = element;
|
|
||||||
Name = name;
|
|
||||||
OrderIndex = orderIndex;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
using DesktopMagicPluginAPI;
|
||||||
|
|
||||||
|
using System.Drawing;
|
||||||
|
|
||||||
|
namespace DesktopMagic.Plugins;
|
||||||
|
|
||||||
|
internal class PluginData : IPluginData
|
||||||
|
{
|
||||||
|
private readonly PluginWindow window;
|
||||||
|
|
||||||
|
public PluginData(PluginWindow window)
|
||||||
|
{
|
||||||
|
this.window = window;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Font => Theme.Font;
|
||||||
|
|
||||||
|
public Color Color => Theme.PrimaryColor;
|
||||||
|
|
||||||
|
public ITheme Theme { get; } = MainWindow.Theme;
|
||||||
|
|
||||||
|
public Size WindowSize => new Size((int)window.ActualWidth, (int)window.ActualHeight);
|
||||||
|
|
||||||
|
public Point WindowPosition => new Point((int)window.Left, (int)window.Top);
|
||||||
|
|
||||||
|
public string PluginName => window.PluginName;
|
||||||
|
|
||||||
|
public string PluginPath => window.PluginFolderPath;
|
||||||
|
|
||||||
|
public void UpdateWindow()
|
||||||
|
{
|
||||||
|
window.UpdatePluginWindow();
|
||||||
|
}
|
||||||
|
}
|
||||||
+6
-1
@@ -16,7 +16,12 @@
|
|||||||
x:Name="window">
|
x:Name="window">
|
||||||
<Grid>
|
<Grid>
|
||||||
<Rectangle x:Name="panel" Fill="#4CBAFFEF" Stroke="White" Margin="0,0,0,0" Visibility="Collapsed" />
|
<Rectangle x:Name="panel" Fill="#4CBAFFEF" Stroke="White" Margin="0,0,0,0" Visibility="Collapsed" />
|
||||||
<Viewbox StretchDirection="Both" Stretch="Uniform">
|
|
||||||
|
<Border x:Name="border"/>
|
||||||
|
<Viewbox x:Name="viewBox" StretchDirection="Both" Stretch="Uniform">
|
||||||
|
<Viewbox.Clip>
|
||||||
|
<RectangleGeometry x:Name="rectangleGeometry" RadiusX="{Binding ElementName=border, Path=CornerRadius.TopLeft}" RadiusY="{Binding ElementName=border, Path=CornerRadius.TopLeft}"/>
|
||||||
|
</Viewbox.Clip>
|
||||||
<Image x:Name="image" HorizontalAlignment="Left" RenderOptions.EdgeMode="Aliased" Margin="0,0,0,0" VerticalAlignment="Top" RenderTransformOrigin="0.5,0.5" Stretch="Uniform" MouseDown="Window_MouseDown" MouseMove="Window_MouseMove" MouseWheel="Window_MouseWheel"/>
|
<Image x:Name="image" HorizontalAlignment="Left" RenderOptions.EdgeMode="Aliased" Margin="0,0,0,0" VerticalAlignment="Top" RenderTransformOrigin="0.5,0.5" Stretch="Uniform" MouseDown="Window_MouseDown" MouseMove="Window_MouseMove" MouseWheel="Window_MouseWheel"/>
|
||||||
</Viewbox>
|
</Viewbox>
|
||||||
</Grid>
|
</Grid>
|
||||||
@@ -0,0 +1,410 @@
|
|||||||
|
using DesktopMagic.Plugins;
|
||||||
|
|
||||||
|
using DesktopMagicPluginAPI;
|
||||||
|
using DesktopMagicPluginAPI.Drawing;
|
||||||
|
using DesktopMagicPluginAPI.Inputs;
|
||||||
|
|
||||||
|
using Microsoft.Win32;
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Drawing.Imaging;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Timers;
|
||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Interop;
|
||||||
|
using System.Windows.Media;
|
||||||
|
using System.Windows.Media.Imaging;
|
||||||
|
|
||||||
|
namespace DesktopMagic;
|
||||||
|
|
||||||
|
public partial class PluginWindow : Window
|
||||||
|
{
|
||||||
|
private readonly RegistryKey key;
|
||||||
|
private Thread pluginThread;
|
||||||
|
private System.Timers.Timer valueTimer;
|
||||||
|
|
||||||
|
private Plugin pluginClassInstance;
|
||||||
|
|
||||||
|
public bool IsRunning { get; private set; } = true;
|
||||||
|
public string PluginName { get; private set; }
|
||||||
|
public string PluginFolderPath { get; private set; }
|
||||||
|
|
||||||
|
public event Action PluginLoaded;
|
||||||
|
|
||||||
|
public event Action OnExit;
|
||||||
|
|
||||||
|
public PluginWindow(string pluginName)
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
|
||||||
|
Window w = new()
|
||||||
|
{
|
||||||
|
Top = -100,
|
||||||
|
Left = -100,
|
||||||
|
Width = 0,
|
||||||
|
Height = 0,
|
||||||
|
|
||||||
|
WindowStyle = WindowStyle.ToolWindow,
|
||||||
|
ShowInTaskbar = false
|
||||||
|
};
|
||||||
|
w.Show();
|
||||||
|
Owner = w;
|
||||||
|
w.Hide();
|
||||||
|
|
||||||
|
System.Timers.Timer t = new System.Timers.Timer
|
||||||
|
{
|
||||||
|
Interval = 100
|
||||||
|
};
|
||||||
|
t.Elapsed += UpdateTimer_Elapsed;
|
||||||
|
t.Start();
|
||||||
|
|
||||||
|
PluginName = pluginName;
|
||||||
|
|
||||||
|
key = Registry.CurrentUser.CreateSubKey(@"Software\" + App.AppName);
|
||||||
|
Top = double.Parse(key.GetValue(pluginName + "WindowTop", 100).ToString());
|
||||||
|
Left = double.Parse(key.GetValue(pluginName + "WindowLeft", 100).ToString());
|
||||||
|
Height = double.Parse(key.GetValue(pluginName + "WindowHeight", 200).ToString());
|
||||||
|
Width = double.Parse(key.GetValue(pluginName + "WindowWidth", 500).ToString());
|
||||||
|
}
|
||||||
|
|
||||||
|
public PluginWindow(Plugin pluginClassInstance, string pluginName) : this(pluginName)
|
||||||
|
{
|
||||||
|
this.pluginClassInstance = pluginClassInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnSourceInitialized(EventArgs e)
|
||||||
|
{
|
||||||
|
base.OnSourceInitialized(e);
|
||||||
|
|
||||||
|
//Set the window style to noactivate.
|
||||||
|
WindowInteropHelper helper = new(this);
|
||||||
|
_ = WindowPos.SetWindowLong(helper.Handle, WindowPos.GWL_EXSTYLE,
|
||||||
|
WindowPos.GetWindowLong(helper.Handle, WindowPos.GWL_EXSTYLE) | WindowPos.WS_EX_NOACTIVATE);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Window_ContentRendered(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
pluginThread = new Thread(() =>
|
||||||
|
{
|
||||||
|
LoadPlugin();
|
||||||
|
});
|
||||||
|
pluginThread.Start();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void UpdatePluginWindow()
|
||||||
|
{
|
||||||
|
ValueTimer_Elapsed(valueTimer, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void UpdateTimer_Elapsed(object sender, ElapsedEventArgs e)
|
||||||
|
{
|
||||||
|
Dispatcher.Invoke(() =>
|
||||||
|
{
|
||||||
|
if (MainWindow.EditMode)
|
||||||
|
{
|
||||||
|
panel.Visibility = Visibility.Visible;
|
||||||
|
WindowPos.SetIsLocked(this, false);
|
||||||
|
tileBar.CaptionHeight = tileBar.CaptionHeight = ActualHeight - 10 < 0 ? 0 : ActualHeight - 10;
|
||||||
|
ResizeMode = ResizeMode.CanResize;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
panel.Visibility = Visibility.Collapsed;
|
||||||
|
WindowPos.SetIsLocked(this, true);
|
||||||
|
tileBar.CaptionHeight = 0;
|
||||||
|
ResizeMode = ResizeMode.NoResize;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!IsRunning)
|
||||||
|
{
|
||||||
|
((System.Timers.Timer)sender).Stop();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
viewBox.Margin = new Thickness(MainWindow.Theme.Margin);
|
||||||
|
border.Width = viewBox.ActualWidth + (MainWindow.Theme.Margin * 2);
|
||||||
|
border.Height = viewBox.ActualHeight + (MainWindow.Theme.Margin * 2);
|
||||||
|
rectangleGeometry.Rect = new Rect(-MainWindow.Theme.Margin, -MainWindow.Theme.Margin, border.ActualWidth, border.ActualHeight);
|
||||||
|
border.Background = MainWindow.Theme.BackgroundBrush;
|
||||||
|
border.CornerRadius = new CornerRadius(MainWindow.Theme.CornerRadius);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void LoadPlugin()
|
||||||
|
{
|
||||||
|
if (pluginClassInstance is null)
|
||||||
|
{
|
||||||
|
PluginFolderPath = $"{Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)}\\{App.AppName}\\Plugins\\{PluginName}";
|
||||||
|
|
||||||
|
if (!File.Exists($"{PluginFolderPath}\\{PluginName}.dll"))
|
||||||
|
{
|
||||||
|
_ = MessageBox.Show("File does not exist!", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||||
|
Exit();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ExecuteSource();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
App.Logger.Log(ex.ToString(), "Plugin", LogSeverity.Error);
|
||||||
|
_ = MessageBox.Show("File execution error:\n" + ex, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||||
|
Exit();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
PluginLoaded?.Invoke();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ExecuteSource()
|
||||||
|
{
|
||||||
|
object instance = pluginClassInstance;
|
||||||
|
if (instance is null)
|
||||||
|
{
|
||||||
|
byte[] assemblyBytes = File.ReadAllBytes($"{PluginFolderPath}\\{PluginName}.dll");
|
||||||
|
Assembly dll = Assembly.Load(assemblyBytes);
|
||||||
|
Type instanceType = dll.GetTypes().FirstOrDefault(type => type.GetTypeInfo().BaseType == typeof(Plugin));
|
||||||
|
|
||||||
|
if (instanceType is null)
|
||||||
|
{
|
||||||
|
_ = MessageBox.Show($"The \"Plugin\" class could not be found! It has to inherit from \"{typeof(Plugin).FullName}\"", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||||
|
Exit();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
instance = Activator.CreateInstance(instanceType);
|
||||||
|
}
|
||||||
|
if (instance is Plugin)
|
||||||
|
{
|
||||||
|
pluginClassInstance = instance as Plugin;
|
||||||
|
pluginClassInstance.Application = new PluginData(this);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_ = MessageBox.Show($"The \"Plugin\" class has to inherit from \"{typeof(Plugin).FullName}\"", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||||
|
Exit();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
LoadOptions(instance);
|
||||||
|
|
||||||
|
valueTimer = new System.Timers.Timer
|
||||||
|
{
|
||||||
|
Interval = 1000
|
||||||
|
};
|
||||||
|
valueTimer.Elapsed += ValueTimer_Elapsed;
|
||||||
|
|
||||||
|
pluginClassInstance.Start();
|
||||||
|
UpdatePluginWindow();
|
||||||
|
|
||||||
|
if (pluginClassInstance.UpdateInterval > 0)
|
||||||
|
{
|
||||||
|
valueTimer.Interval = pluginClassInstance.UpdateInterval;
|
||||||
|
valueTimer.Start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void LoadOptions(object instance)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
FieldInfo[] props = instance.GetType().GetFields(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.GetField);
|
||||||
|
|
||||||
|
List<SettingElement> settingElements = new List<SettingElement>();
|
||||||
|
foreach (FieldInfo prop in props)
|
||||||
|
{
|
||||||
|
if (prop.GetValue(instance) is Element element)
|
||||||
|
{
|
||||||
|
object[] attributes = prop.GetCustomAttributes(true);
|
||||||
|
foreach (object attribute in attributes)
|
||||||
|
{
|
||||||
|
if (attribute is ElementAttribute elementAttribute)
|
||||||
|
{
|
||||||
|
settingElements.Add(new SettingElement(element, elementAttribute.Name, elementAttribute.OrderIndex));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
settingElements = settingElements.OrderBy(x => x.OrderIndex).ToList();
|
||||||
|
if (MainWindow.PluginsSettings.ContainsKey(PluginName))
|
||||||
|
{
|
||||||
|
MainWindow.PluginsSettings[PluginName] = settingElements;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MainWindow.PluginsSettings.Add(PluginName, settingElements);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
IsRunning = false;
|
||||||
|
App.Logger.Log(ex.ToString(), "Plugin", LogSeverity.Error);
|
||||||
|
_ = MessageBox.Show("File execution error:\n" + ex, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||||
|
Exit();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ValueTimer_Elapsed(object sender, ElapsedEventArgs e)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (IsRunning)
|
||||||
|
{
|
||||||
|
Bitmap result = pluginClassInstance.Main();
|
||||||
|
|
||||||
|
if (pluginClassInstance.UpdateInterval > 0)
|
||||||
|
{
|
||||||
|
valueTimer.Interval = pluginClassInstance.UpdateInterval;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
valueTimer.Stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (result is not null)
|
||||||
|
{
|
||||||
|
BitmapScalingMode renderOptions = pluginClassInstance.RenderQuality switch
|
||||||
|
{
|
||||||
|
RenderQuality.High => BitmapScalingMode.HighQuality,
|
||||||
|
RenderQuality.Low => BitmapScalingMode.LowQuality,
|
||||||
|
RenderQuality.Performance => BitmapScalingMode.NearestNeighbor,
|
||||||
|
_ => BitmapScalingMode.Unspecified
|
||||||
|
};
|
||||||
|
|
||||||
|
//Update Image
|
||||||
|
Dispatcher.Invoke(() =>
|
||||||
|
{
|
||||||
|
RenderOptions.SetBitmapScalingMode(image, renderOptions);
|
||||||
|
image.Source = BitmapToImageSource(result);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
IsRunning = false;
|
||||||
|
App.Logger.Log(ex.ToString(), "Plugin", LogSeverity.Error);
|
||||||
|
_ = MessageBox.Show("File execution error:\n" + ex, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||||
|
Exit();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!IsRunning)
|
||||||
|
{
|
||||||
|
valueTimer.Stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static BitmapSource BitmapToImageSource(Bitmap bitmap)
|
||||||
|
{
|
||||||
|
BitmapData bitmapData = bitmap.LockBits(
|
||||||
|
new Rectangle(0, 0, bitmap.Width, bitmap.Height),
|
||||||
|
ImageLockMode.ReadOnly, bitmap.PixelFormat);
|
||||||
|
|
||||||
|
BitmapSource bitmapSource = BitmapSource.Create(
|
||||||
|
bitmapData.Width, bitmapData.Height,
|
||||||
|
bitmap.HorizontalResolution, bitmap.VerticalResolution,
|
||||||
|
PixelFormats.Bgra32, null,
|
||||||
|
bitmapData.Scan0, bitmapData.Stride * bitmapData.Height, bitmapData.Stride);
|
||||||
|
|
||||||
|
bitmap.UnlockBits(bitmapData);
|
||||||
|
return bitmapSource;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Exit()
|
||||||
|
{
|
||||||
|
IsRunning = false;
|
||||||
|
|
||||||
|
Dispatcher.Invoke(() =>
|
||||||
|
{
|
||||||
|
OnExit?.Invoke();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
|
||||||
|
{
|
||||||
|
pluginClassInstance?.Stop();
|
||||||
|
IsRunning = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Window Events
|
||||||
|
|
||||||
|
private void Window_LocationChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
key.SetValue(PluginName + "WindowTop", Top);
|
||||||
|
key.SetValue(PluginName + "WindowLeft", Left);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
|
||||||
|
{
|
||||||
|
key.SetValue(PluginName + "WindowHeight", Height);
|
||||||
|
key.SetValue(PluginName + "WindowWidth", Width);
|
||||||
|
tileBar.CaptionHeight = ActualHeight - 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Window_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
|
||||||
|
{
|
||||||
|
ImageSource imageSource = image.Source;
|
||||||
|
BitmapSource bitmapImage = (BitmapSource)imageSource;
|
||||||
|
double pixelMousePositionX = e.GetPosition(image).X * bitmapImage.PixelWidth / image.ActualHeight;
|
||||||
|
double pixelMousePositionY = e.GetPosition(image).Y * bitmapImage.PixelHeight / image.ActualHeight;
|
||||||
|
|
||||||
|
MouseButton mouseButton;
|
||||||
|
|
||||||
|
switch (e.ChangedButton)
|
||||||
|
{
|
||||||
|
case System.Windows.Input.MouseButton.Left:
|
||||||
|
mouseButton = MouseButton.Left;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case System.Windows.Input.MouseButton.Middle:
|
||||||
|
mouseButton = MouseButton.Middle;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case System.Windows.Input.MouseButton.Right:
|
||||||
|
mouseButton = MouseButton.Right;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
|
||||||
|
System.Drawing.Point point = new System.Drawing.Point((int)pixelMousePositionX, (int)pixelMousePositionY);
|
||||||
|
pluginClassInstance.OnMouseClick(point, mouseButton);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Window_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
|
||||||
|
{
|
||||||
|
ImageSource imageSource = image.Source;
|
||||||
|
BitmapSource bitmapImage = (BitmapSource)imageSource;
|
||||||
|
double pixelMousePositionX = e.GetPosition(image).X * bitmapImage.PixelWidth / image.ActualHeight;
|
||||||
|
double pixelMousePositionY = e.GetPosition(image).Y * bitmapImage.PixelHeight / image.ActualHeight;
|
||||||
|
|
||||||
|
System.Drawing.Point point = new System.Drawing.Point((int)pixelMousePositionX, (int)pixelMousePositionY);
|
||||||
|
pluginClassInstance.OnMouseMove(point);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Window_MouseWheel(object sender, System.Windows.Input.MouseWheelEventArgs e)
|
||||||
|
{
|
||||||
|
ImageSource imageSource = image.Source;
|
||||||
|
BitmapSource bitmapImage = (BitmapSource)imageSource;
|
||||||
|
double pixelMousePositionX = e.GetPosition(image).X * bitmapImage.PixelWidth / image.ActualHeight;
|
||||||
|
double pixelMousePositionY = e.GetPosition(image).Y * bitmapImage.PixelHeight / image.ActualHeight;
|
||||||
|
|
||||||
|
System.Drawing.Point point = new System.Drawing.Point((int)pixelMousePositionX, (int)pixelMousePositionY);
|
||||||
|
pluginClassInstance.OnMouseWheel(point, e.Delta);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Window Events
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
using DesktopMagicPluginAPI.Inputs;
|
||||||
|
|
||||||
|
namespace DesktopMagic.Plugins;
|
||||||
|
|
||||||
|
internal class SettingElement
|
||||||
|
{
|
||||||
|
public Element Element { get; }
|
||||||
|
public string Name { get; }
|
||||||
|
public int OrderIndex { get; }
|
||||||
|
|
||||||
|
public SettingElement(Element element, string name, int orderIndex)
|
||||||
|
{
|
||||||
|
Element = element;
|
||||||
|
Name = name;
|
||||||
|
OrderIndex = orderIndex;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
using DesktopMagicPluginAPI;
|
||||||
|
|
||||||
|
using System.Drawing;
|
||||||
|
|
||||||
|
namespace DesktopMagic.Plugins;
|
||||||
|
|
||||||
|
internal class Theme : ITheme
|
||||||
|
{
|
||||||
|
public Color PrimaryColor { get; set; } = Color.White;
|
||||||
|
public Color SecondaryColor { get; set; } = Color.White;
|
||||||
|
public Color BackgroundColor { get; set; } = Color.Transparent;
|
||||||
|
|
||||||
|
public string Font { get; set; } = "Segoe UI";
|
||||||
|
public int CornerRadius { get; set; }
|
||||||
|
public int Margin { get; set; }
|
||||||
|
|
||||||
|
public System.Windows.Media.Brush PrimaryBrush { get; set; } = System.Windows.Media.Brushes.White;
|
||||||
|
public System.Windows.Media.Brush SecondaryBrush { get; set; } = System.Windows.Media.Brushes.White;
|
||||||
|
public System.Windows.Media.Brush BackgroundBrush { get; set; } = System.Windows.Media.Brushes.Transparent;
|
||||||
|
}
|
||||||
@@ -3,8 +3,8 @@
|
|||||||
xmlns:col="clr-namespace:System.Collections;assembly=mscorlib"
|
xmlns:col="clr-namespace:System.Collections;assembly=mscorlib"
|
||||||
xmlns:system="clr-namespace:System;assembly=mscorlib">
|
xmlns:system="clr-namespace:System;assembly=mscorlib">
|
||||||
|
|
||||||
<system:String x:Key="linePlugine">Linie</system:String>
|
<system:String x:Key="lineMode">Linie</system:String>
|
||||||
<system:String x:Key="mirrorPlugine">Spiegeln</system:String>
|
<system:String x:Key="mirrorMode">Spiegeln</system:String>
|
||||||
<system:String x:Key="updatePlugins">Plugins Neu Laden</system:String>
|
<system:String x:Key="updatePlugins">Plugins Neu Laden</system:String>
|
||||||
<system:String x:Key="openPluginsFolder">Plugins Ordner Öffnen</system:String>
|
<system:String x:Key="openPluginsFolder">Plugins Ordner Öffnen</system:String>
|
||||||
<system:String x:Key="downloadPlugins">Plugins Herunterladen</system:String>
|
<system:String x:Key="downloadPlugins">Plugins Herunterladen</system:String>
|
||||||
|
|||||||
@@ -3,8 +3,8 @@
|
|||||||
xmlns:col="clr-namespace:System.Collections;assembly=mscorlib"
|
xmlns:col="clr-namespace:System.Collections;assembly=mscorlib"
|
||||||
xmlns:system="clr-namespace:System;assembly=mscorlib">
|
xmlns:system="clr-namespace:System;assembly=mscorlib">
|
||||||
|
|
||||||
<system:String x:Key="linePlugine">Line</system:String>
|
<system:String x:Key="lineMode">Line</system:String>
|
||||||
<system:String x:Key="mirrorPlugine">Mirror</system:String>
|
<system:String x:Key="mirrorMode">Mirror</system:String>
|
||||||
<system:String x:Key="updatePlugins">Reload Plugins</system:String>
|
<system:String x:Key="updatePlugins">Reload Plugins</system:String>
|
||||||
<system:String x:Key="openPluginsFolder">Open Plugins Folder</system:String>
|
<system:String x:Key="openPluginsFolder">Open Plugins Folder</system:String>
|
||||||
<system:String x:Key="downloadPlugins">Download Plugins</system:String>
|
<system:String x:Key="downloadPlugins">Download Plugins</system:String>
|
||||||
|
|||||||
@@ -1,23 +0,0 @@
|
|||||||
<Window x:Class="DesktopMagic.TimeWindow"
|
|
||||||
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"
|
|
||||||
mc:Ignorable="d"
|
|
||||||
Title="TimeWindow" Height="450" Width="800"
|
|
||||||
Background="Transparent"
|
|
||||||
WindowStyle="None"
|
|
||||||
AllowsTransparency="True"
|
|
||||||
LocationChanged="Window_LocationChanged"
|
|
||||||
SizeChanged="Window_SizeChanged"
|
|
||||||
x:Name="window">
|
|
||||||
<Grid>
|
|
||||||
<Rectangle x:Name="panel" Fill="#4CBAFFEF" Stroke="White" Margin="0,0,0,0" Visibility="Collapsed" />
|
|
||||||
<Viewbox StretchDirection="DownOnly" Stretch="Uniform">
|
|
||||||
<TextBlock x:Name="textBlock" FontSize="999" Foreground="White" Text=" " IsHitTestVisible="False" />
|
|
||||||
</Viewbox>
|
|
||||||
</Grid>
|
|
||||||
<WindowChrome.WindowChrome>
|
|
||||||
<WindowChrome x:Name="tileBar" CaptionHeight="30" ResizeBorderThickness="{x:Static SystemParameters.WindowResizeBorderThickness}" />
|
|
||||||
</WindowChrome.WindowChrome>
|
|
||||||
</Window>
|
|
||||||
@@ -1,92 +0,0 @@
|
|||||||
using Microsoft.Win32;
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Timers;
|
|
||||||
using System.Windows;
|
|
||||||
using System.Windows.Interop;
|
|
||||||
using System.Windows.Media;
|
|
||||||
|
|
||||||
namespace DesktopMagic
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Interaktionslogik für TimeWindow.xaml
|
|
||||||
/// </summary>
|
|
||||||
public partial class TimeWindow : Window
|
|
||||||
{
|
|
||||||
private RegistryKey key;
|
|
||||||
|
|
||||||
public TimeWindow()
|
|
||||||
{
|
|
||||||
InitializeComponent();
|
|
||||||
|
|
||||||
Window w = new Window();
|
|
||||||
w.Top = -100;
|
|
||||||
w.Left = -100;
|
|
||||||
w.Width = 0;
|
|
||||||
w.Height = 0;
|
|
||||||
|
|
||||||
w.WindowStyle = WindowStyle.ToolWindow;
|
|
||||||
w.ShowInTaskbar = false;
|
|
||||||
w.Show();
|
|
||||||
Owner = w;
|
|
||||||
w.Hide();
|
|
||||||
|
|
||||||
Timer t = new Timer();
|
|
||||||
t.Interval = 100;
|
|
||||||
t.Elapsed += T_Elapsed;
|
|
||||||
t.Start();
|
|
||||||
|
|
||||||
key = Registry.CurrentUser.CreateSubKey(@"Software\" + App.AppName);
|
|
||||||
Top = double.Parse(key.GetValue("TimeWindowTop", 100).ToString());
|
|
||||||
Left = double.Parse(key.GetValue("TimeWindowLeft", 100).ToString());
|
|
||||||
Height = double.Parse(key.GetValue("TimeWindowHeight", 200).ToString());
|
|
||||||
Width = double.Parse(key.GetValue("TimeWindowWidth", 500).ToString());
|
|
||||||
IsEnabled = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void OnSourceInitialized(EventArgs e)
|
|
||||||
{
|
|
||||||
base.OnSourceInitialized(e);
|
|
||||||
|
|
||||||
//Set the window style to noactivate.
|
|
||||||
WindowInteropHelper helper = new WindowInteropHelper(this);
|
|
||||||
WindowPos.SetWindowLong(helper.Handle, WindowPos.GWL_EXSTYLE,
|
|
||||||
WindowPos.GetWindowLong(helper.Handle, WindowPos.GWL_EXSTYLE) | WindowPos.WS_EX_NOACTIVATE);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void T_Elapsed(object sender, ElapsedEventArgs e)
|
|
||||||
{
|
|
||||||
Dispatcher.Invoke(() =>
|
|
||||||
{
|
|
||||||
if (MainWindow.EditMode)
|
|
||||||
{
|
|
||||||
panel.Visibility = Visibility.Visible;
|
|
||||||
WindowPos.SetIsLocked(this, false);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
panel.Visibility = Visibility.Collapsed;
|
|
||||||
WindowPos.SetIsLocked(this, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
textBlock.FontFamily = new FontFamily(MainWindow.GlobalFont);
|
|
||||||
textBlock.Foreground = MainWindow.GlobalColor;
|
|
||||||
//textBlock.Text = DateTime.Now.ToString("hh:mm:ss tt");
|
|
||||||
textBlock.Text = DateTime.Now.ToString("HH:mm:ss");
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Window_LocationChanged(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
key.SetValue("TimeWindowTop", Top);
|
|
||||||
key.SetValue("TimeWindowLeft", Left);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
|
|
||||||
{
|
|
||||||
key.SetValue("TimeWindowHeight", Height);
|
|
||||||
key.SetValue("TimeWindowWidth", Width);
|
|
||||||
tileBar.CaptionHeight = ActualHeight - 10;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net5.0</TargetFramework>
|
<TargetFramework>net6.0</TargetFramework>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
using DesktopMagicPluginAPI;
|
using DesktopMagicPluginAPI;
|
||||||
using DesktopMagicPluginAPI.Inputs;
|
using DesktopMagicPluginAPI.Inputs;
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.Drawing.Imaging;
|
using System.Drawing.Imaging;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System;
|
|
||||||
|
|
||||||
namespace DesktopMagicPlugin.Test
|
namespace DesktopMagicPlugin.Test
|
||||||
{
|
{
|
||||||
@@ -71,12 +72,16 @@ namespace DesktopMagicPlugin.Test
|
|||||||
public override Bitmap Main()
|
public override Bitmap Main()
|
||||||
{
|
{
|
||||||
if (bitmaps.Count == 0)
|
if (bitmaps.Count == 0)
|
||||||
|
{
|
||||||
return new Bitmap(1, 1);
|
return new Bitmap(1, 1);
|
||||||
|
}
|
||||||
|
|
||||||
frameCount++;
|
frameCount++;
|
||||||
|
|
||||||
if (frameCount >= bitmaps.Count)
|
if (frameCount >= bitmaps.Count)
|
||||||
|
{
|
||||||
frameCount = 0;
|
frameCount = 0;
|
||||||
|
}
|
||||||
|
|
||||||
return bitmaps[frameCount];
|
return bitmaps[frameCount];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
###############
|
||||||
|
# folder #
|
||||||
|
###############
|
||||||
|
/**/DROP/
|
||||||
|
/**/TEMP/
|
||||||
|
/**/packages/
|
||||||
|
/**/bin/
|
||||||
|
/**/obj/
|
||||||
|
_site
|
||||||
@@ -1,16 +1,16 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net5.0</TargetFramework>
|
<TargetFramework>net6.0</TargetFramework>
|
||||||
<Company>Stone_Red</Company>
|
<Company>Stone_Red</Company>
|
||||||
<Product>Stone_Red</Product>
|
<Product>Stone_Red</Product>
|
||||||
<Version>0.0.0.4</Version>
|
<Version>0.0.0.5</Version>
|
||||||
<RepositoryUrl>https://github.com/Stone-Red-Code/DesktopMagic</RepositoryUrl>
|
<RepositoryUrl>https://github.com/Stone-Red-Code/DesktopMagic</RepositoryUrl>
|
||||||
<PackageLicenseFile>LICENSE</PackageLicenseFile>
|
<PackageLicenseFile>LICENSE</PackageLicenseFile>
|
||||||
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
||||||
<AssemblyVersion>0.0.0.4</AssemblyVersion>
|
<AssemblyVersion>0.0.0.5</AssemblyVersion>
|
||||||
<PackageProjectUrl></PackageProjectUrl>
|
<PackageProjectUrl></PackageProjectUrl>
|
||||||
<FileVersion>0.0.0.4</FileVersion>
|
<FileVersion>0.0.0.5</FileVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||||
@@ -22,11 +22,11 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="System.Drawing.Common" Version="5.0.2" />
|
<PackageReference Include="docfx.console" Version="2.58.9">
|
||||||
<PackageReference Include="Vsxmd" Version="1.4.5">
|
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
|
<PackageReference Include="System.Drawing.Common" Version="5.0.2" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@@ -1,705 +0,0 @@
|
|||||||
<a name='assembly'></a>
|
|
||||||
# DesktopMagicPluginAPI
|
|
||||||
|
|
||||||
## Contents
|
|
||||||
|
|
||||||
- [Button](#T-DesktopMagicPluginAPI-Inputs-Button 'DesktopMagicPluginAPI.Inputs.Button')
|
|
||||||
- [#ctor(value)](#M-DesktopMagicPluginAPI-Inputs-Button-#ctor-System-String- 'DesktopMagicPluginAPI.Inputs.Button.#ctor(System.String)')
|
|
||||||
- [Value](#P-DesktopMagicPluginAPI-Inputs-Button-Value 'DesktopMagicPluginAPI.Inputs.Button.Value')
|
|
||||||
- [Click()](#M-DesktopMagicPluginAPI-Inputs-Button-Click 'DesktopMagicPluginAPI.Inputs.Button.Click')
|
|
||||||
- [CheckBox](#T-DesktopMagicPluginAPI-Inputs-CheckBox 'DesktopMagicPluginAPI.Inputs.CheckBox')
|
|
||||||
- [#ctor(value)](#M-DesktopMagicPluginAPI-Inputs-CheckBox-#ctor-System-Boolean- 'DesktopMagicPluginAPI.Inputs.CheckBox.#ctor(System.Boolean)')
|
|
||||||
- [Value](#P-DesktopMagicPluginAPI-Inputs-CheckBox-Value 'DesktopMagicPluginAPI.Inputs.CheckBox.Value')
|
|
||||||
- [Element](#T-DesktopMagicPluginAPI-Inputs-Element 'DesktopMagicPluginAPI.Inputs.Element')
|
|
||||||
- [ValueChanged()](#M-DesktopMagicPluginAPI-Inputs-Element-ValueChanged 'DesktopMagicPluginAPI.Inputs.Element.ValueChanged')
|
|
||||||
- [ElementAttribute](#T-DesktopMagicPluginAPI-Inputs-ElementAttribute 'DesktopMagicPluginAPI.Inputs.ElementAttribute')
|
|
||||||
- [#ctor(name,orderIndex)](#M-DesktopMagicPluginAPI-Inputs-ElementAttribute-#ctor-System-String,System-Int32- 'DesktopMagicPluginAPI.Inputs.ElementAttribute.#ctor(System.String,System.Int32)')
|
|
||||||
- [#ctor(orderIndex)](#M-DesktopMagicPluginAPI-Inputs-ElementAttribute-#ctor-System-Int32- 'DesktopMagicPluginAPI.Inputs.ElementAttribute.#ctor(System.Int32)')
|
|
||||||
- [#ctor()](#M-DesktopMagicPluginAPI-Inputs-ElementAttribute-#ctor 'DesktopMagicPluginAPI.Inputs.ElementAttribute.#ctor')
|
|
||||||
- [Name](#P-DesktopMagicPluginAPI-Inputs-ElementAttribute-Name 'DesktopMagicPluginAPI.Inputs.ElementAttribute.Name')
|
|
||||||
- [OrderIndex](#P-DesktopMagicPluginAPI-Inputs-ElementAttribute-OrderIndex 'DesktopMagicPluginAPI.Inputs.ElementAttribute.OrderIndex')
|
|
||||||
- [GraphicsExtentions](#T-DesktopMagicPluginAPI-Drawing-GraphicsExtentions 'DesktopMagicPluginAPI.Drawing.GraphicsExtentions')
|
|
||||||
- [DrawStringFixedWidth(graphics,s,font,brush,x,y,width)](#M-DesktopMagicPluginAPI-Drawing-GraphicsExtentions-DrawStringFixedWidth-System-Drawing-Graphics,System-String,System-Drawing-Font,System-Drawing-Brush,System-Single,System-Single,System-Single- 'DesktopMagicPluginAPI.Drawing.GraphicsExtentions.DrawStringFixedWidth(System.Drawing.Graphics,System.String,System.Drawing.Font,System.Drawing.Brush,System.Single,System.Single,System.Single)')
|
|
||||||
- [DrawStringFixedWidth(graphics,s,font,brush,point,width)](#M-DesktopMagicPluginAPI-Drawing-GraphicsExtentions-DrawStringFixedWidth-System-Drawing-Graphics,System-String,System-Drawing-Font,System-Drawing-Brush,System-Drawing-PointF,System-Single- 'DesktopMagicPluginAPI.Drawing.GraphicsExtentions.DrawStringFixedWidth(System.Drawing.Graphics,System.String,System.Drawing.Font,System.Drawing.Brush,System.Drawing.PointF,System.Single)')
|
|
||||||
- [DrawStringMonospace(graphics,s,font,brush,x,y)](#M-DesktopMagicPluginAPI-Drawing-GraphicsExtentions-DrawStringMonospace-System-Drawing-Graphics,System-String,System-Drawing-Font,System-Drawing-Brush,System-Single,System-Single- 'DesktopMagicPluginAPI.Drawing.GraphicsExtentions.DrawStringMonospace(System.Drawing.Graphics,System.String,System.Drawing.Font,System.Drawing.Brush,System.Single,System.Single)')
|
|
||||||
- [DrawStringMonospace(graphics,s,font,brush,point)](#M-DesktopMagicPluginAPI-Drawing-GraphicsExtentions-DrawStringMonospace-System-Drawing-Graphics,System-String,System-Drawing-Font,System-Drawing-Brush,System-Drawing-PointF- 'DesktopMagicPluginAPI.Drawing.GraphicsExtentions.DrawStringMonospace(System.Drawing.Graphics,System.String,System.Drawing.Font,System.Drawing.Brush,System.Drawing.PointF)')
|
|
||||||
- [IPluginData](#T-DesktopMagicPluginAPI-IPluginData 'DesktopMagicPluginAPI.IPluginData')
|
|
||||||
- [Color](#P-DesktopMagicPluginAPI-IPluginData-Color 'DesktopMagicPluginAPI.IPluginData.Color')
|
|
||||||
- [Font](#P-DesktopMagicPluginAPI-IPluginData-Font 'DesktopMagicPluginAPI.IPluginData.Font')
|
|
||||||
- [PluginName](#P-DesktopMagicPluginAPI-IPluginData-PluginName 'DesktopMagicPluginAPI.IPluginData.PluginName')
|
|
||||||
- [PluginPath](#P-DesktopMagicPluginAPI-IPluginData-PluginPath 'DesktopMagicPluginAPI.IPluginData.PluginPath')
|
|
||||||
- [WindowPosition](#P-DesktopMagicPluginAPI-IPluginData-WindowPosition 'DesktopMagicPluginAPI.IPluginData.WindowPosition')
|
|
||||||
- [WindowSize](#P-DesktopMagicPluginAPI-IPluginData-WindowSize 'DesktopMagicPluginAPI.IPluginData.WindowSize')
|
|
||||||
- [UpdateWindow()](#M-DesktopMagicPluginAPI-IPluginData-UpdateWindow 'DesktopMagicPluginAPI.IPluginData.UpdateWindow')
|
|
||||||
- [IntegerUpDown](#T-DesktopMagicPluginAPI-Inputs-IntegerUpDown 'DesktopMagicPluginAPI.Inputs.IntegerUpDown')
|
|
||||||
- [#ctor(min,max,value)](#M-DesktopMagicPluginAPI-Inputs-IntegerUpDown-#ctor-System-Int32,System-Int32,System-Int32- 'DesktopMagicPluginAPI.Inputs.IntegerUpDown.#ctor(System.Int32,System.Int32,System.Int32)')
|
|
||||||
- [Maximum](#P-DesktopMagicPluginAPI-Inputs-IntegerUpDown-Maximum 'DesktopMagicPluginAPI.Inputs.IntegerUpDown.Maximum')
|
|
||||||
- [Minimum](#P-DesktopMagicPluginAPI-Inputs-IntegerUpDown-Minimum 'DesktopMagicPluginAPI.Inputs.IntegerUpDown.Minimum')
|
|
||||||
- [Value](#P-DesktopMagicPluginAPI-Inputs-IntegerUpDown-Value 'DesktopMagicPluginAPI.Inputs.IntegerUpDown.Value')
|
|
||||||
- [Label](#T-DesktopMagicPluginAPI-Inputs-Label 'DesktopMagicPluginAPI.Inputs.Label')
|
|
||||||
- [#ctor(value,bold)](#M-DesktopMagicPluginAPI-Inputs-Label-#ctor-System-String,System-Boolean- 'DesktopMagicPluginAPI.Inputs.Label.#ctor(System.String,System.Boolean)')
|
|
||||||
- [Bold](#P-DesktopMagicPluginAPI-Inputs-Label-Bold 'DesktopMagicPluginAPI.Inputs.Label.Bold')
|
|
||||||
- [Value](#P-DesktopMagicPluginAPI-Inputs-Label-Value 'DesktopMagicPluginAPI.Inputs.Label.Value')
|
|
||||||
- [MouseButton](#T-DesktopMagicPluginAPI-Inputs-MouseButton 'DesktopMagicPluginAPI.Inputs.MouseButton')
|
|
||||||
- [Left](#F-DesktopMagicPluginAPI-Inputs-MouseButton-Left 'DesktopMagicPluginAPI.Inputs.MouseButton.Left')
|
|
||||||
- [Middle](#F-DesktopMagicPluginAPI-Inputs-MouseButton-Middle 'DesktopMagicPluginAPI.Inputs.MouseButton.Middle')
|
|
||||||
- [Right](#F-DesktopMagicPluginAPI-Inputs-MouseButton-Right 'DesktopMagicPluginAPI.Inputs.MouseButton.Right')
|
|
||||||
- [Plugin](#T-DesktopMagicPluginAPI-Plugin 'DesktopMagicPluginAPI.Plugin')
|
|
||||||
- [Application](#P-DesktopMagicPluginAPI-Plugin-Application 'DesktopMagicPluginAPI.Plugin.Application')
|
|
||||||
- [RenderQuality](#P-DesktopMagicPluginAPI-Plugin-RenderQuality 'DesktopMagicPluginAPI.Plugin.RenderQuality')
|
|
||||||
- [UpdateInterval](#P-DesktopMagicPluginAPI-Plugin-UpdateInterval 'DesktopMagicPluginAPI.Plugin.UpdateInterval')
|
|
||||||
- [Main()](#M-DesktopMagicPluginAPI-Plugin-Main 'DesktopMagicPluginAPI.Plugin.Main')
|
|
||||||
- [OnMouseClick(position,mouseButton)](#M-DesktopMagicPluginAPI-Plugin-OnMouseClick-System-Drawing-Point,DesktopMagicPluginAPI-Inputs-MouseButton- 'DesktopMagicPluginAPI.Plugin.OnMouseClick(System.Drawing.Point,DesktopMagicPluginAPI.Inputs.MouseButton)')
|
|
||||||
- [OnMouseMove(position)](#M-DesktopMagicPluginAPI-Plugin-OnMouseMove-System-Drawing-Point- 'DesktopMagicPluginAPI.Plugin.OnMouseMove(System.Drawing.Point)')
|
|
||||||
- [OnMouseWheel(position,Delta)](#M-DesktopMagicPluginAPI-Plugin-OnMouseWheel-System-Drawing-Point,System-Int32- 'DesktopMagicPluginAPI.Plugin.OnMouseWheel(System.Drawing.Point,System.Int32)')
|
|
||||||
- [Start()](#M-DesktopMagicPluginAPI-Plugin-Start 'DesktopMagicPluginAPI.Plugin.Start')
|
|
||||||
- [RenderQuality](#T-DesktopMagicPluginAPI-Drawing-RenderQuality 'DesktopMagicPluginAPI.Drawing.RenderQuality')
|
|
||||||
- [High](#F-DesktopMagicPluginAPI-Drawing-RenderQuality-High 'DesktopMagicPluginAPI.Drawing.RenderQuality.High')
|
|
||||||
- [Low](#F-DesktopMagicPluginAPI-Drawing-RenderQuality-Low 'DesktopMagicPluginAPI.Drawing.RenderQuality.Low')
|
|
||||||
- [Performance](#F-DesktopMagicPluginAPI-Drawing-RenderQuality-Performance 'DesktopMagicPluginAPI.Drawing.RenderQuality.Performance')
|
|
||||||
- [Slider](#T-DesktopMagicPluginAPI-Inputs-Slider 'DesktopMagicPluginAPI.Inputs.Slider')
|
|
||||||
- [#ctor(min,max,value)](#M-DesktopMagicPluginAPI-Inputs-Slider-#ctor-System-Double,System-Double,System-Double- 'DesktopMagicPluginAPI.Inputs.Slider.#ctor(System.Double,System.Double,System.Double)')
|
|
||||||
- [Maximum](#P-DesktopMagicPluginAPI-Inputs-Slider-Maximum 'DesktopMagicPluginAPI.Inputs.Slider.Maximum')
|
|
||||||
- [Minimum](#P-DesktopMagicPluginAPI-Inputs-Slider-Minimum 'DesktopMagicPluginAPI.Inputs.Slider.Minimum')
|
|
||||||
- [Value](#P-DesktopMagicPluginAPI-Inputs-Slider-Value 'DesktopMagicPluginAPI.Inputs.Slider.Value')
|
|
||||||
- [TextBox](#T-DesktopMagicPluginAPI-Inputs-TextBox 'DesktopMagicPluginAPI.Inputs.TextBox')
|
|
||||||
- [#ctor(value)](#M-DesktopMagicPluginAPI-Inputs-TextBox-#ctor-System-String- 'DesktopMagicPluginAPI.Inputs.TextBox.#ctor(System.String)')
|
|
||||||
- [Value](#P-DesktopMagicPluginAPI-Inputs-TextBox-Value 'DesktopMagicPluginAPI.Inputs.TextBox.Value')
|
|
||||||
|
|
||||||
<a name='T-DesktopMagicPluginAPI-Inputs-Button'></a>
|
|
||||||
## Button `type`
|
|
||||||
|
|
||||||
##### Namespace
|
|
||||||
|
|
||||||
DesktopMagicPluginAPI.Inputs
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Represents a button control.
|
|
||||||
|
|
||||||
<a name='M-DesktopMagicPluginAPI-Inputs-Button-#ctor-System-String-'></a>
|
|
||||||
### #ctor(value) `constructor`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Initializes a new instance of the [Button](#T-DesktopMagicPluginAPI-Inputs-Button 'DesktopMagicPluginAPI.Inputs.Button') class with the provided `value`.
|
|
||||||
|
|
||||||
##### Parameters
|
|
||||||
|
|
||||||
| Name | Type | Description |
|
|
||||||
| ---- | ---- | ----------- |
|
|
||||||
| value | [System.String](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.String 'System.String') | The text caption displayed in the [Button](#T-DesktopMagicPluginAPI-Inputs-Button 'DesktopMagicPluginAPI.Inputs.Button') control. |
|
|
||||||
|
|
||||||
<a name='P-DesktopMagicPluginAPI-Inputs-Button-Value'></a>
|
|
||||||
### Value `property`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Gets or sets the text caption displayed in the [Button](#T-DesktopMagicPluginAPI-Inputs-Button 'DesktopMagicPluginAPI.Inputs.Button') element.
|
|
||||||
|
|
||||||
<a name='M-DesktopMagicPluginAPI-Inputs-Button-Click'></a>
|
|
||||||
### Click() `method`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Triggers the [](#E-DesktopMagicPluginAPI-Inputs-Button-OnClick 'DesktopMagicPluginAPI.Inputs.Button.OnClick') event.
|
|
||||||
|
|
||||||
##### Parameters
|
|
||||||
|
|
||||||
This method has no parameters.
|
|
||||||
|
|
||||||
<a name='T-DesktopMagicPluginAPI-Inputs-CheckBox'></a>
|
|
||||||
## CheckBox `type`
|
|
||||||
|
|
||||||
##### Namespace
|
|
||||||
|
|
||||||
DesktopMagicPluginAPI.Inputs
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Represents a check box control.
|
|
||||||
|
|
||||||
<a name='M-DesktopMagicPluginAPI-Inputs-CheckBox-#ctor-System-Boolean-'></a>
|
|
||||||
### #ctor(value) `constructor`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Initializes a new instance of the [CheckBox](#T-DesktopMagicPluginAPI-Inputs-CheckBox 'DesktopMagicPluginAPI.Inputs.CheckBox') class with the provided `value`.
|
|
||||||
|
|
||||||
##### Parameters
|
|
||||||
|
|
||||||
| Name | Type | Description |
|
|
||||||
| ---- | ---- | ----------- |
|
|
||||||
| value | [System.Boolean](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Boolean 'System.Boolean') | A value indicating whether the [CheckBox](#T-DesktopMagicPluginAPI-Inputs-CheckBox 'DesktopMagicPluginAPI.Inputs.CheckBox') is in the checked state. |
|
|
||||||
|
|
||||||
<a name='P-DesktopMagicPluginAPI-Inputs-CheckBox-Value'></a>
|
|
||||||
### Value `property`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Gets or set a value indicating whether the [CheckBox](#T-DesktopMagicPluginAPI-Inputs-CheckBox 'DesktopMagicPluginAPI.Inputs.CheckBox') is in the checked state.
|
|
||||||
|
|
||||||
<a name='T-DesktopMagicPluginAPI-Inputs-Element'></a>
|
|
||||||
## Element `type`
|
|
||||||
|
|
||||||
##### Namespace
|
|
||||||
|
|
||||||
DesktopMagicPluginAPI.Inputs
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
The element base class.
|
|
||||||
|
|
||||||
<a name='M-DesktopMagicPluginAPI-Inputs-Element-ValueChanged'></a>
|
|
||||||
### ValueChanged() `method`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Triggers the [](#E-DesktopMagicPluginAPI-Inputs-Element-OnValueChanged 'DesktopMagicPluginAPI.Inputs.Element.OnValueChanged') event.
|
|
||||||
|
|
||||||
##### Parameters
|
|
||||||
|
|
||||||
This method has no parameters.
|
|
||||||
|
|
||||||
<a name='T-DesktopMagicPluginAPI-Inputs-ElementAttribute'></a>
|
|
||||||
## ElementAttribute `type`
|
|
||||||
|
|
||||||
##### Namespace
|
|
||||||
|
|
||||||
DesktopMagicPluginAPI.Inputs
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Marks a Property as element.
|
|
||||||
|
|
||||||
<a name='M-DesktopMagicPluginAPI-Inputs-ElementAttribute-#ctor-System-String,System-Int32-'></a>
|
|
||||||
### #ctor(name,orderIndex) `constructor`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Marks a Property as element with the provided `name` and `orderIndex`.
|
|
||||||
|
|
||||||
##### Parameters
|
|
||||||
|
|
||||||
| Name | Type | Description |
|
|
||||||
| ---- | ---- | ----------- |
|
|
||||||
| name | [System.String](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.String 'System.String') | The name of the element. |
|
|
||||||
| orderIndex | [System.Int32](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Int32 'System.Int32') | The order index of the element. |
|
|
||||||
|
|
||||||
<a name='M-DesktopMagicPluginAPI-Inputs-ElementAttribute-#ctor-System-Int32-'></a>
|
|
||||||
### #ctor(orderIndex) `constructor`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Marks a Property as element with the provided `orderIndex`.
|
|
||||||
|
|
||||||
##### Parameters
|
|
||||||
|
|
||||||
| Name | Type | Description |
|
|
||||||
| ---- | ---- | ----------- |
|
|
||||||
| orderIndex | [System.Int32](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Int32 'System.Int32') | The order index of the element. |
|
|
||||||
|
|
||||||
<a name='M-DesktopMagicPluginAPI-Inputs-ElementAttribute-#ctor'></a>
|
|
||||||
### #ctor() `constructor`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
*Inherit from parent.*
|
|
||||||
|
|
||||||
##### Parameters
|
|
||||||
|
|
||||||
This constructor has no parameters.
|
|
||||||
|
|
||||||
<a name='P-DesktopMagicPluginAPI-Inputs-ElementAttribute-Name'></a>
|
|
||||||
### Name `property`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
The name of the element.
|
|
||||||
|
|
||||||
<a name='P-DesktopMagicPluginAPI-Inputs-ElementAttribute-OrderIndex'></a>
|
|
||||||
### OrderIndex `property`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
The order index of the element.
|
|
||||||
|
|
||||||
<a name='T-DesktopMagicPluginAPI-Drawing-GraphicsExtentions'></a>
|
|
||||||
## GraphicsExtentions `type`
|
|
||||||
|
|
||||||
##### Namespace
|
|
||||||
|
|
||||||
DesktopMagicPluginAPI.Drawing
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Extentions for the [Graphics](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Drawing.Graphics 'System.Drawing.Graphics') class.
|
|
||||||
|
|
||||||
<a name='M-DesktopMagicPluginAPI-Drawing-GraphicsExtentions-DrawStringFixedWidth-System-Drawing-Graphics,System-String,System-Drawing-Font,System-Drawing-Brush,System-Single,System-Single,System-Single-'></a>
|
|
||||||
### DrawStringFixedWidth(graphics,s,font,brush,x,y,width) `method`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Draws the specified text string at the specified location with the specified [Brush](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Drawing.Brush 'System.Drawing.Brush') and [Font](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Drawing.Font 'System.Drawing.Font') objects.
|
|
||||||
|
|
||||||
##### Parameters
|
|
||||||
|
|
||||||
| Name | Type | Description |
|
|
||||||
| ---- | ---- | ----------- |
|
|
||||||
| graphics | [System.Drawing.Graphics](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Drawing.Graphics 'System.Drawing.Graphics') | Graphics object. |
|
|
||||||
| s | [System.String](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.String 'System.String') | String to draw. |
|
|
||||||
| font | [System.Drawing.Font](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Drawing.Font 'System.Drawing.Font') | [Font](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Drawing.Font 'System.Drawing.Font') that defines the text format of the string. |
|
|
||||||
| brush | [System.Drawing.Brush](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Drawing.Brush 'System.Drawing.Brush') | [Brush](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Drawing.Brush 'System.Drawing.Brush') that determines the color and texture of the drawn text. |
|
|
||||||
| x | [System.Single](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Single 'System.Single') | The x-coordinate of the upper-left corner of the drawn text. |
|
|
||||||
| y | [System.Single](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Single 'System.Single') | The y-coordinate of the upper-left corner of the drawn text. |
|
|
||||||
| width | [System.Single](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Single 'System.Single') | The specified width. |
|
|
||||||
|
|
||||||
<a name='M-DesktopMagicPluginAPI-Drawing-GraphicsExtentions-DrawStringFixedWidth-System-Drawing-Graphics,System-String,System-Drawing-Font,System-Drawing-Brush,System-Drawing-PointF,System-Single-'></a>
|
|
||||||
### DrawStringFixedWidth(graphics,s,font,brush,point,width) `method`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Draws the specified text string at the specified location with the specified [Brush](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Drawing.Brush 'System.Drawing.Brush') and [Font](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Drawing.Font 'System.Drawing.Font') objects.
|
|
||||||
|
|
||||||
##### Parameters
|
|
||||||
|
|
||||||
| Name | Type | Description |
|
|
||||||
| ---- | ---- | ----------- |
|
|
||||||
| graphics | [System.Drawing.Graphics](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Drawing.Graphics 'System.Drawing.Graphics') | Graphics object. |
|
|
||||||
| s | [System.String](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.String 'System.String') | String to draw. |
|
|
||||||
| font | [System.Drawing.Font](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Drawing.Font 'System.Drawing.Font') | [Font](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Drawing.Font 'System.Drawing.Font') that defines the text format of the string. |
|
|
||||||
| brush | [System.Drawing.Brush](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Drawing.Brush 'System.Drawing.Brush') | [Brush](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Drawing.Brush 'System.Drawing.Brush') that determines the color and texture of the drawn text. |
|
|
||||||
| point | [System.Drawing.PointF](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Drawing.PointF 'System.Drawing.PointF') | [PointF](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Drawing.PointF 'System.Drawing.PointF') structure that specifies the upper-left corner of the drawn text. |
|
|
||||||
| width | [System.Single](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Single 'System.Single') | The specified width. |
|
|
||||||
|
|
||||||
<a name='M-DesktopMagicPluginAPI-Drawing-GraphicsExtentions-DrawStringMonospace-System-Drawing-Graphics,System-String,System-Drawing-Font,System-Drawing-Brush,System-Single,System-Single-'></a>
|
|
||||||
### DrawStringMonospace(graphics,s,font,brush,x,y) `method`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Draws the specified text string at the specified location with the specified [Brush](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Drawing.Brush 'System.Drawing.Brush') and [Font](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Drawing.Font 'System.Drawing.Font') objects.
|
|
||||||
|
|
||||||
##### Parameters
|
|
||||||
|
|
||||||
| Name | Type | Description |
|
|
||||||
| ---- | ---- | ----------- |
|
|
||||||
| graphics | [System.Drawing.Graphics](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Drawing.Graphics 'System.Drawing.Graphics') | Graphics object. |
|
|
||||||
| s | [System.String](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.String 'System.String') | String to draw. |
|
|
||||||
| font | [System.Drawing.Font](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Drawing.Font 'System.Drawing.Font') | [Font](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Drawing.Font 'System.Drawing.Font') that defines the text format of the string. |
|
|
||||||
| brush | [System.Drawing.Brush](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Drawing.Brush 'System.Drawing.Brush') | [Brush](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Drawing.Brush 'System.Drawing.Brush') that determines the color and texture of the drawn text. |
|
|
||||||
| x | [System.Single](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Single 'System.Single') | The x-coordinate of the upper-left corner of the drawn text. |
|
|
||||||
| y | [System.Single](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Single 'System.Single') | The y-coordinate of the upper-left corner of the drawn text. |
|
|
||||||
|
|
||||||
<a name='M-DesktopMagicPluginAPI-Drawing-GraphicsExtentions-DrawStringMonospace-System-Drawing-Graphics,System-String,System-Drawing-Font,System-Drawing-Brush,System-Drawing-PointF-'></a>
|
|
||||||
### DrawStringMonospace(graphics,s,font,brush,point) `method`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Draws the specified text string at the specified location with the specified [Brush](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Drawing.Brush 'System.Drawing.Brush') and [Font](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Drawing.Font 'System.Drawing.Font') objects.
|
|
||||||
|
|
||||||
##### Parameters
|
|
||||||
|
|
||||||
| Name | Type | Description |
|
|
||||||
| ---- | ---- | ----------- |
|
|
||||||
| graphics | [System.Drawing.Graphics](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Drawing.Graphics 'System.Drawing.Graphics') | Graphics object. |
|
|
||||||
| s | [System.String](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.String 'System.String') | String to draw. |
|
|
||||||
| font | [System.Drawing.Font](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Drawing.Font 'System.Drawing.Font') | [Font](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Drawing.Font 'System.Drawing.Font') that defines the text format of the string. |
|
|
||||||
| brush | [System.Drawing.Brush](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Drawing.Brush 'System.Drawing.Brush') | [Brush](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Drawing.Brush 'System.Drawing.Brush') that determines the color and texture of the drawn text. |
|
|
||||||
| point | [System.Drawing.PointF](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Drawing.PointF 'System.Drawing.PointF') | [PointF](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Drawing.PointF 'System.Drawing.PointF') structure that specifies the upper-left corner of the drawn text. |
|
|
||||||
|
|
||||||
<a name='T-DesktopMagicPluginAPI-IPluginData'></a>
|
|
||||||
## IPluginData `type`
|
|
||||||
|
|
||||||
##### Namespace
|
|
||||||
|
|
||||||
DesktopMagicPluginAPI
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Defines properties and methods that provide information about the main application.
|
|
||||||
|
|
||||||
<a name='P-DesktopMagicPluginAPI-IPluginData-Color'></a>
|
|
||||||
### Color `property`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Gets the color of the main application.
|
|
||||||
|
|
||||||
<a name='P-DesktopMagicPluginAPI-IPluginData-Font'></a>
|
|
||||||
### Font `property`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Gets the font of the main application.
|
|
||||||
|
|
||||||
<a name='P-DesktopMagicPluginAPI-IPluginData-PluginName'></a>
|
|
||||||
### PluginName `property`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Gets the name of the plugin.
|
|
||||||
|
|
||||||
<a name='P-DesktopMagicPluginAPI-IPluginData-PluginPath'></a>
|
|
||||||
### PluginPath `property`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Gets the path of the parent directory of the plugin.
|
|
||||||
|
|
||||||
<a name='P-DesktopMagicPluginAPI-IPluginData-WindowPosition'></a>
|
|
||||||
### WindowPosition `property`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Gets the window position of the plugin window.
|
|
||||||
|
|
||||||
<a name='P-DesktopMagicPluginAPI-IPluginData-WindowSize'></a>
|
|
||||||
### WindowSize `property`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Gets the window size of the plugin window.
|
|
||||||
|
|
||||||
<a name='M-DesktopMagicPluginAPI-IPluginData-UpdateWindow'></a>
|
|
||||||
### UpdateWindow() `method`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Updates the plugin window.
|
|
||||||
|
|
||||||
##### Parameters
|
|
||||||
|
|
||||||
This method has no parameters.
|
|
||||||
|
|
||||||
<a name='T-DesktopMagicPluginAPI-Inputs-IntegerUpDown'></a>
|
|
||||||
## IntegerUpDown `type`
|
|
||||||
|
|
||||||
##### Namespace
|
|
||||||
|
|
||||||
DesktopMagicPluginAPI.Inputs
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Represents a up-down control.
|
|
||||||
|
|
||||||
<a name='M-DesktopMagicPluginAPI-Inputs-IntegerUpDown-#ctor-System-Int32,System-Int32,System-Int32-'></a>
|
|
||||||
### #ctor(min,max,value) `constructor`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Initializes a new instance of the [IntegerUpDown](#T-DesktopMagicPluginAPI-Inputs-IntegerUpDown 'DesktopMagicPluginAPI.Inputs.IntegerUpDown') class with the provided `min` value, `max` value and `value`.
|
|
||||||
|
|
||||||
##### Parameters
|
|
||||||
|
|
||||||
| Name | Type | Description |
|
|
||||||
| ---- | ---- | ----------- |
|
|
||||||
| min | [System.Int32](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Int32 'System.Int32') | The maximum value for the [IntegerUpDown](#T-DesktopMagicPluginAPI-Inputs-IntegerUpDown 'DesktopMagicPluginAPI.Inputs.IntegerUpDown') element. |
|
|
||||||
| max | [System.Int32](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Int32 'System.Int32') | The minimum value for the [IntegerUpDown](#T-DesktopMagicPluginAPI-Inputs-IntegerUpDown 'DesktopMagicPluginAPI.Inputs.IntegerUpDown') element. |
|
|
||||||
| value | [System.Int32](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Int32 'System.Int32') | The value assigned to the [IntegerUpDown](#T-DesktopMagicPluginAPI-Inputs-IntegerUpDown 'DesktopMagicPluginAPI.Inputs.IntegerUpDown') element. |
|
|
||||||
|
|
||||||
##### Exceptions
|
|
||||||
|
|
||||||
| Name | Description |
|
|
||||||
| ---- | ----------- |
|
|
||||||
| [System.ArgumentException](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.ArgumentException 'System.ArgumentException') | |
|
|
||||||
|
|
||||||
<a name='P-DesktopMagicPluginAPI-Inputs-IntegerUpDown-Maximum'></a>
|
|
||||||
### Maximum `property`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Gets or sets the maximum value for the [IntegerUpDown](#T-DesktopMagicPluginAPI-Inputs-IntegerUpDown 'DesktopMagicPluginAPI.Inputs.IntegerUpDown') element.
|
|
||||||
|
|
||||||
<a name='P-DesktopMagicPluginAPI-Inputs-IntegerUpDown-Minimum'></a>
|
|
||||||
### Minimum `property`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Gets or sets the minimum value for the [IntegerUpDown](#T-DesktopMagicPluginAPI-Inputs-IntegerUpDown 'DesktopMagicPluginAPI.Inputs.IntegerUpDown') element.
|
|
||||||
|
|
||||||
<a name='P-DesktopMagicPluginAPI-Inputs-IntegerUpDown-Value'></a>
|
|
||||||
### Value `property`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Gets or sets the value assigned to the [IntegerUpDown](#T-DesktopMagicPluginAPI-Inputs-IntegerUpDown 'DesktopMagicPluginAPI.Inputs.IntegerUpDown') element.
|
|
||||||
|
|
||||||
<a name='T-DesktopMagicPluginAPI-Inputs-Label'></a>
|
|
||||||
## Label `type`
|
|
||||||
|
|
||||||
##### Namespace
|
|
||||||
|
|
||||||
DesktopMagicPluginAPI.Inputs
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Represents a label control.
|
|
||||||
|
|
||||||
<a name='M-DesktopMagicPluginAPI-Inputs-Label-#ctor-System-String,System-Boolean-'></a>
|
|
||||||
### #ctor(value,bold) `constructor`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Initializes a new instance of the [Label](#T-DesktopMagicPluginAPI-Inputs-Label 'DesktopMagicPluginAPI.Inputs.Label') class with the provided `value`.
|
|
||||||
|
|
||||||
##### Parameters
|
|
||||||
|
|
||||||
| Name | Type | Description |
|
|
||||||
| ---- | ---- | ----------- |
|
|
||||||
| value | [System.String](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.String 'System.String') | The text associated with this [Label](#T-DesktopMagicPluginAPI-Inputs-Label 'DesktopMagicPluginAPI.Inputs.Label') |
|
|
||||||
| bold | [System.Boolean](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Boolean 'System.Boolean') | A value indicating whether the content of the [Label](#T-DesktopMagicPluginAPI-Inputs-Label 'DesktopMagicPluginAPI.Inputs.Label') is bold or not. |
|
|
||||||
|
|
||||||
<a name='P-DesktopMagicPluginAPI-Inputs-Label-Bold'></a>
|
|
||||||
### Bold `property`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Gets or set a value indicating whether the content of the [Label](#T-DesktopMagicPluginAPI-Inputs-Label 'DesktopMagicPluginAPI.Inputs.Label') is bold or not.
|
|
||||||
|
|
||||||
<a name='P-DesktopMagicPluginAPI-Inputs-Label-Value'></a>
|
|
||||||
### Value `property`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Gets or sets the text associated with this [Label](#T-DesktopMagicPluginAPI-Inputs-Label 'DesktopMagicPluginAPI.Inputs.Label').
|
|
||||||
|
|
||||||
<a name='T-DesktopMagicPluginAPI-Inputs-MouseButton'></a>
|
|
||||||
## MouseButton `type`
|
|
||||||
|
|
||||||
##### Namespace
|
|
||||||
|
|
||||||
DesktopMagicPluginAPI.Inputs
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Mouse Buttons
|
|
||||||
|
|
||||||
<a name='F-DesktopMagicPluginAPI-Inputs-MouseButton-Left'></a>
|
|
||||||
### Left `constants`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
The left mouse button.
|
|
||||||
|
|
||||||
<a name='F-DesktopMagicPluginAPI-Inputs-MouseButton-Middle'></a>
|
|
||||||
### Middle `constants`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
The middle mouse button.
|
|
||||||
|
|
||||||
<a name='F-DesktopMagicPluginAPI-Inputs-MouseButton-Right'></a>
|
|
||||||
### Right `constants`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
The right mouse button.
|
|
||||||
|
|
||||||
<a name='T-DesktopMagicPluginAPI-Plugin'></a>
|
|
||||||
## Plugin `type`
|
|
||||||
|
|
||||||
##### Namespace
|
|
||||||
|
|
||||||
DesktopMagicPluginAPI
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
The plugin class.
|
|
||||||
|
|
||||||
<a name='P-DesktopMagicPluginAPI-Plugin-Application'></a>
|
|
||||||
### Application `property`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Informations about the main application.
|
|
||||||
|
|
||||||
<a name='P-DesktopMagicPluginAPI-Plugin-RenderQuality'></a>
|
|
||||||
### RenderQuality `property`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Gets or sets the render quality of the bitmap image.
|
|
||||||
|
|
||||||
<a name='P-DesktopMagicPluginAPI-Plugin-UpdateInterval'></a>
|
|
||||||
### UpdateInterval `property`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Gets or sets the interval, expressed in milliseconds, at which to call the [Main](#M-DesktopMagicPluginAPI-Plugin-Main 'DesktopMagicPluginAPI.Plugin.Main') method.
|
|
||||||
|
|
||||||
<a name='M-DesktopMagicPluginAPI-Plugin-Main'></a>
|
|
||||||
### Main() `method`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Occurs when the [UpdateInterval](#P-DesktopMagicPluginAPI-Plugin-UpdateInterval 'DesktopMagicPluginAPI.Plugin.UpdateInterval') elapses.
|
|
||||||
|
|
||||||
##### Returns
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
##### Parameters
|
|
||||||
|
|
||||||
This method has no parameters.
|
|
||||||
|
|
||||||
<a name='M-DesktopMagicPluginAPI-Plugin-OnMouseClick-System-Drawing-Point,DesktopMagicPluginAPI-Inputs-MouseButton-'></a>
|
|
||||||
### OnMouseClick(position,mouseButton) `method`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Occurs when the window is clicked by the mouse.
|
|
||||||
|
|
||||||
##### Parameters
|
|
||||||
|
|
||||||
| Name | Type | Description |
|
|
||||||
| ---- | ---- | ----------- |
|
|
||||||
| position | [System.Drawing.Point](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Drawing.Point 'System.Drawing.Point') | The x- and y-coordinates of the mouse pointer position relative to the plugin window. |
|
|
||||||
| mouseButton | [DesktopMagicPluginAPI.Inputs.MouseButton](#T-DesktopMagicPluginAPI-Inputs-MouseButton 'DesktopMagicPluginAPI.Inputs.MouseButton') | The button associated with the event. |
|
|
||||||
|
|
||||||
<a name='M-DesktopMagicPluginAPI-Plugin-OnMouseMove-System-Drawing-Point-'></a>
|
|
||||||
### OnMouseMove(position) `method`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Occurs when the mouse pointer is moved over the control.
|
|
||||||
|
|
||||||
##### Parameters
|
|
||||||
|
|
||||||
| Name | Type | Description |
|
|
||||||
| ---- | ---- | ----------- |
|
|
||||||
| position | [System.Drawing.Point](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Drawing.Point 'System.Drawing.Point') | The x- and y-coordinates of the mouse pointer position relative to the plugin window. |
|
|
||||||
|
|
||||||
<a name='M-DesktopMagicPluginAPI-Plugin-OnMouseWheel-System-Drawing-Point,System-Int32-'></a>
|
|
||||||
### OnMouseWheel(position,Delta) `method`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Occurs when the user rotates the mouse wheel while the mouse pointer is over this element.
|
|
||||||
|
|
||||||
##### Parameters
|
|
||||||
|
|
||||||
| Name | Type | Description |
|
|
||||||
| ---- | ---- | ----------- |
|
|
||||||
| position | [System.Drawing.Point](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Drawing.Point 'System.Drawing.Point') | The x- and y-coordinates of the mouse pointer position relative to the plugin window. |
|
|
||||||
| Delta | [System.Int32](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Int32 'System.Int32') | A value that indicates the amount that the mouse wheel has changed. |
|
|
||||||
|
|
||||||
<a name='M-DesktopMagicPluginAPI-Plugin-Start'></a>
|
|
||||||
### Start() `method`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Occurs once when the pugin gets activated.
|
|
||||||
|
|
||||||
##### Parameters
|
|
||||||
|
|
||||||
This method has no parameters.
|
|
||||||
|
|
||||||
<a name='T-DesktopMagicPluginAPI-Drawing-RenderQuality'></a>
|
|
||||||
## RenderQuality `type`
|
|
||||||
|
|
||||||
##### Namespace
|
|
||||||
|
|
||||||
DesktopMagicPluginAPI.Drawing
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Specifies which render quality is used to display the bitmap images.
|
|
||||||
|
|
||||||
<a name='F-DesktopMagicPluginAPI-Drawing-RenderQuality-High'></a>
|
|
||||||
### High `constants`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Slower then [Low](#F-DesktopMagicPluginAPI-Drawing-RenderQuality-Low 'DesktopMagicPluginAPI.Drawing.RenderQuality.Low') but produces higher quality output.
|
|
||||||
|
|
||||||
<a name='F-DesktopMagicPluginAPI-Drawing-RenderQuality-Low'></a>
|
|
||||||
### Low `constants`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Faster then [High](#F-DesktopMagicPluginAPI-Drawing-RenderQuality-High 'DesktopMagicPluginAPI.Drawing.RenderQuality.High') but produces lower quality output.
|
|
||||||
|
|
||||||
<a name='F-DesktopMagicPluginAPI-Drawing-RenderQuality-Performance'></a>
|
|
||||||
### Performance `constants`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Provides performance benefits over [Low](#F-DesktopMagicPluginAPI-Drawing-RenderQuality-Low 'DesktopMagicPluginAPI.Drawing.RenderQuality.Low')
|
|
||||||
|
|
||||||
<a name='T-DesktopMagicPluginAPI-Inputs-Slider'></a>
|
|
||||||
## Slider `type`
|
|
||||||
|
|
||||||
##### Namespace
|
|
||||||
|
|
||||||
DesktopMagicPluginAPI.Inputs
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Represents a slider control.
|
|
||||||
|
|
||||||
<a name='M-DesktopMagicPluginAPI-Inputs-Slider-#ctor-System-Double,System-Double,System-Double-'></a>
|
|
||||||
### #ctor(min,max,value) `constructor`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Initializes a new instance of the [Slider](#T-DesktopMagicPluginAPI-Inputs-Slider 'DesktopMagicPluginAPI.Inputs.Slider') class with the provided `min` value, `max` value and `value`.
|
|
||||||
|
|
||||||
##### Parameters
|
|
||||||
|
|
||||||
| Name | Type | Description |
|
|
||||||
| ---- | ---- | ----------- |
|
|
||||||
| min | [System.Double](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Double 'System.Double') | The maximum value for the [Slider](#T-DesktopMagicPluginAPI-Inputs-Slider 'DesktopMagicPluginAPI.Inputs.Slider') element. |
|
|
||||||
| max | [System.Double](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Double 'System.Double') | The minimum value for the [Slider](#T-DesktopMagicPluginAPI-Inputs-Slider 'DesktopMagicPluginAPI.Inputs.Slider') element. |
|
|
||||||
| value | [System.Double](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.Double 'System.Double') | The value assigned to the [Slider](#T-DesktopMagicPluginAPI-Inputs-Slider 'DesktopMagicPluginAPI.Inputs.Slider') element. |
|
|
||||||
|
|
||||||
<a name='P-DesktopMagicPluginAPI-Inputs-Slider-Maximum'></a>
|
|
||||||
### Maximum `property`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Gets or sets the maximum value for the [Slider](#T-DesktopMagicPluginAPI-Inputs-Slider 'DesktopMagicPluginAPI.Inputs.Slider') element.
|
|
||||||
|
|
||||||
<a name='P-DesktopMagicPluginAPI-Inputs-Slider-Minimum'></a>
|
|
||||||
### Minimum `property`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Gets or sets the minimum value for the [Slider](#T-DesktopMagicPluginAPI-Inputs-Slider 'DesktopMagicPluginAPI.Inputs.Slider') element.
|
|
||||||
|
|
||||||
<a name='P-DesktopMagicPluginAPI-Inputs-Slider-Value'></a>
|
|
||||||
### Value `property`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Gets or sets the value assigned to the [Slider](#T-DesktopMagicPluginAPI-Inputs-Slider 'DesktopMagicPluginAPI.Inputs.Slider') element.
|
|
||||||
|
|
||||||
<a name='T-DesktopMagicPluginAPI-Inputs-TextBox'></a>
|
|
||||||
## TextBox `type`
|
|
||||||
|
|
||||||
##### Namespace
|
|
||||||
|
|
||||||
DesktopMagicPluginAPI.Inputs
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Represents a text box control.
|
|
||||||
|
|
||||||
<a name='M-DesktopMagicPluginAPI-Inputs-TextBox-#ctor-System-String-'></a>
|
|
||||||
### #ctor(value) `constructor`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Initializes a new instance of the [TextBox](#T-DesktopMagicPluginAPI-Inputs-TextBox 'DesktopMagicPluginAPI.Inputs.TextBox') class with the provided `value`.
|
|
||||||
|
|
||||||
##### Parameters
|
|
||||||
|
|
||||||
| Name | Type | Description |
|
|
||||||
| ---- | ---- | ----------- |
|
|
||||||
| value | [System.String](http://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k:System.String 'System.String') | The text associated with this control. |
|
|
||||||
|
|
||||||
<a name='P-DesktopMagicPluginAPI-Inputs-TextBox-Value'></a>
|
|
||||||
### Value `property`
|
|
||||||
|
|
||||||
##### Summary
|
|
||||||
|
|
||||||
Gets or sets the text associated with this [TextBox](#T-DesktopMagicPluginAPI-Inputs-TextBox 'DesktopMagicPluginAPI.Inputs.TextBox').
|
|
||||||
@@ -6,12 +6,12 @@
|
|||||||
<members>
|
<members>
|
||||||
<member name="T:DesktopMagicPluginAPI.Drawing.GraphicsExtentions">
|
<member name="T:DesktopMagicPluginAPI.Drawing.GraphicsExtentions">
|
||||||
<summary>
|
<summary>
|
||||||
Extentions for the <see cref="T:System.Drawing.Graphics"/> class.
|
Extensions for the <see cref="T:System.Drawing.Graphics"/> class.
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:DesktopMagicPluginAPI.Drawing.GraphicsExtentions.DrawStringMonospace(System.Drawing.Graphics,System.String,System.Drawing.Font,System.Drawing.Brush,System.Single,System.Single)">
|
<member name="M:DesktopMagicPluginAPI.Drawing.GraphicsExtentions.DrawStringMonospace(System.Drawing.Graphics,System.String,System.Drawing.Font,System.Drawing.Brush,System.Single,System.Single)">
|
||||||
<summary>
|
<summary>
|
||||||
Draws the specified text string at the specified location with the specified <see cref="T:System.Drawing.Brush"/> and <see cref="T:System.Drawing.Font"/> objects.
|
<inheritdoc cref="M:System.Drawing.Graphics.DrawString(System.String,System.Drawing.Font,System.Drawing.Brush,System.Single,System.Single)"/>
|
||||||
</summary>
|
</summary>
|
||||||
<param name="graphics">Graphics object.</param>
|
<param name="graphics">Graphics object.</param>
|
||||||
<param name="s">String to draw.</param>
|
<param name="s">String to draw.</param>
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
</member>
|
</member>
|
||||||
<member name="M:DesktopMagicPluginAPI.Drawing.GraphicsExtentions.DrawStringMonospace(System.Drawing.Graphics,System.String,System.Drawing.Font,System.Drawing.Brush,System.Drawing.PointF)">
|
<member name="M:DesktopMagicPluginAPI.Drawing.GraphicsExtentions.DrawStringMonospace(System.Drawing.Graphics,System.String,System.Drawing.Font,System.Drawing.Brush,System.Drawing.PointF)">
|
||||||
<summary>
|
<summary>
|
||||||
Draws the specified text string at the specified location with the specified <see cref="T:System.Drawing.Brush"/> and <see cref="T:System.Drawing.Font"/> objects.
|
<inheritdoc cref="M:System.Drawing.Graphics.DrawString(System.String,System.Drawing.Font,System.Drawing.Brush,System.Drawing.PointF)"/>
|
||||||
</summary>
|
</summary>
|
||||||
<param name="graphics">Graphics object.</param>
|
<param name="graphics">Graphics object.</param>
|
||||||
<param name="s">String to draw.</param>
|
<param name="s">String to draw.</param>
|
||||||
@@ -32,7 +32,7 @@
|
|||||||
</member>
|
</member>
|
||||||
<member name="M:DesktopMagicPluginAPI.Drawing.GraphicsExtentions.DrawStringFixedWidth(System.Drawing.Graphics,System.String,System.Drawing.Font,System.Drawing.Brush,System.Single,System.Single,System.Single)">
|
<member name="M:DesktopMagicPluginAPI.Drawing.GraphicsExtentions.DrawStringFixedWidth(System.Drawing.Graphics,System.String,System.Drawing.Font,System.Drawing.Brush,System.Single,System.Single,System.Single)">
|
||||||
<summary>
|
<summary>
|
||||||
Draws the specified text string at the specified location with the specified <see cref="T:System.Drawing.Brush"/> and <see cref="T:System.Drawing.Font"/> objects.
|
<inheritdoc cref="M:System.Drawing.Graphics.DrawString(System.String,System.Drawing.Font,System.Drawing.Brush,System.Single,System.Single)"/>
|
||||||
</summary>
|
</summary>
|
||||||
<param name="graphics">Graphics object.</param>
|
<param name="graphics">Graphics object.</param>
|
||||||
<param name="s">String to draw.</param>
|
<param name="s">String to draw.</param>
|
||||||
@@ -44,7 +44,7 @@
|
|||||||
</member>
|
</member>
|
||||||
<member name="M:DesktopMagicPluginAPI.Drawing.GraphicsExtentions.DrawStringFixedWidth(System.Drawing.Graphics,System.String,System.Drawing.Font,System.Drawing.Brush,System.Drawing.PointF,System.Single)">
|
<member name="M:DesktopMagicPluginAPI.Drawing.GraphicsExtentions.DrawStringFixedWidth(System.Drawing.Graphics,System.String,System.Drawing.Font,System.Drawing.Brush,System.Drawing.PointF,System.Single)">
|
||||||
<summary>
|
<summary>
|
||||||
Draws the specified text string at the specified location with the specified <see cref="T:System.Drawing.Brush"/> and <see cref="T:System.Drawing.Font"/> objects.
|
<inheritdoc cref="M:System.Drawing.Graphics.DrawString(System.String,System.Drawing.Font,System.Drawing.Brush,System.Drawing.PointF)"/>
|
||||||
</summary>
|
</summary>
|
||||||
<param name="graphics">Graphics object.</param>
|
<param name="graphics">Graphics object.</param>
|
||||||
<param name="s">String to draw.</param>
|
<param name="s">String to draw.</param>
|
||||||
@@ -53,6 +53,36 @@
|
|||||||
<param name="point"><see cref="T:System.Drawing.PointF"/> structure that specifies the upper-left corner of the drawn text.</param>
|
<param name="point"><see cref="T:System.Drawing.PointF"/> structure that specifies the upper-left corner of the drawn text.</param>
|
||||||
<param name="width">The specified width.</param>
|
<param name="width">The specified width.</param>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:DesktopMagicPluginAPI.Drawing.GraphicsExtentions.DrawStringNoLeftPadding(System.Drawing.Graphics,System.String,System.Drawing.Font,System.Drawing.Brush,System.Single,System.Single)">
|
||||||
|
<summary>
|
||||||
|
<inheritdoc cref="M:System.Drawing.Graphics.DrawString(System.String,System.Drawing.Font,System.Drawing.Brush,System.Single,System.Single)"/>
|
||||||
|
</summary>
|
||||||
|
<param name="graphics">Graphics object.</param>
|
||||||
|
<param name="s">String to draw.</param>
|
||||||
|
<param name="font"><see cref="T:System.Drawing.Font"/> that defines the text format of the string.</param>
|
||||||
|
<param name="brush"><see cref="T:System.Drawing.Brush"/> that determines the color and texture of the drawn text.</param>
|
||||||
|
<param name="x">The x-coordinate of the upper-left corner of the drawn text.</param>
|
||||||
|
<param name="y">The y-coordinate of the upper-left corner of the drawn text.</param>
|
||||||
|
</member>
|
||||||
|
<member name="M:DesktopMagicPluginAPI.Drawing.GraphicsExtentions.DrawStringNoLeftPadding(System.Drawing.Graphics,System.String,System.Drawing.Font,System.Drawing.Brush,System.Drawing.PointF)">
|
||||||
|
<summary>
|
||||||
|
<inheritdoc cref="M:System.Drawing.Graphics.DrawString(System.String,System.Drawing.Font,System.Drawing.Brush,System.Drawing.PointF)"/>
|
||||||
|
</summary>
|
||||||
|
<param name="graphics">Graphics object.</param>
|
||||||
|
<param name="s">String to draw.</param>
|
||||||
|
<param name="font"><see cref="T:System.Drawing.Font"/> that defines the text format of the string.</param>
|
||||||
|
<param name="brush"><see cref="T:System.Drawing.Brush"/> that determines the color and texture of the drawn text.</param>
|
||||||
|
<param name="point"><see cref="T:System.Drawing.PointF"/> structure that specifies the upper-left corner of the drawn text.</param>
|
||||||
|
</member>
|
||||||
|
<member name="M:DesktopMagicPluginAPI.Drawing.GraphicsExtentions.MeasureStringNoLeftPadding(System.Drawing.Graphics,System.String,System.Drawing.Font)">
|
||||||
|
<summary>
|
||||||
|
<inheritdoc cref="M:System.Drawing.Graphics.MeasureString(System.String,System.Drawing.Font)"/>
|
||||||
|
</summary>
|
||||||
|
<param name="graphics">Graphics object.</param>
|
||||||
|
<param name="text">String to measure.</param>
|
||||||
|
<param name="font"><see cref="T:System.Drawing.Font"/> that defines the text format of the string.</param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
<member name="T:DesktopMagicPluginAPI.Drawing.RenderQuality">
|
<member name="T:DesktopMagicPluginAPI.Drawing.RenderQuality">
|
||||||
<summary>
|
<summary>
|
||||||
Specifies which render quality is used to display the bitmap images.
|
Specifies which render quality is used to display the bitmap images.
|
||||||
@@ -115,6 +145,28 @@
|
|||||||
</summary>
|
</summary>
|
||||||
<param name="value">A value indicating whether the <see cref="T:DesktopMagicPluginAPI.Inputs.CheckBox"/> is in the checked state.</param>
|
<param name="value">A value indicating whether the <see cref="T:DesktopMagicPluginAPI.Inputs.CheckBox"/> is in the checked state.</param>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="T:DesktopMagicPluginAPI.Inputs.ComboBox">
|
||||||
|
<summary>
|
||||||
|
Represents a selection control with a drop-down list.
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:DesktopMagicPluginAPI.Inputs.ComboBox.Items">
|
||||||
|
<summary>
|
||||||
|
Gets the collection used to generate the content of the <see cref="T:DesktopMagicPluginAPI.Inputs.ComboBox"/>.
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:DesktopMagicPluginAPI.Inputs.ComboBox.Value">
|
||||||
|
<summary>
|
||||||
|
Gets the currently selected item associated with this <see cref="T:DesktopMagicPluginAPI.Inputs.ComboBox"/>.
|
||||||
|
</summary>
|
||||||
|
<remarks>If you assign a value to this property, the displayed text in the user interface will not be changed.</remarks>
|
||||||
|
</member>
|
||||||
|
<member name="M:DesktopMagicPluginAPI.Inputs.ComboBox.#ctor(System.String[])">
|
||||||
|
<summary>
|
||||||
|
Initializes a new instance of the <see cref="T:DesktopMagicPluginAPI.Inputs.Label"/> class with the provided <paramref name="items"/>.
|
||||||
|
</summary>
|
||||||
|
<param name="items"></param>
|
||||||
|
</member>
|
||||||
<member name="T:DesktopMagicPluginAPI.Inputs.Element">
|
<member name="T:DesktopMagicPluginAPI.Inputs.Element">
|
||||||
<summary>
|
<summary>
|
||||||
The element base class.
|
The element base class.
|
||||||
@@ -283,12 +335,17 @@
|
|||||||
</member>
|
</member>
|
||||||
<member name="P:DesktopMagicPluginAPI.IPluginData.Font">
|
<member name="P:DesktopMagicPluginAPI.IPluginData.Font">
|
||||||
<summary>
|
<summary>
|
||||||
Gets the font of the main application.
|
Gets the current font of the current theme.
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
<member name="P:DesktopMagicPluginAPI.IPluginData.Color">
|
<member name="P:DesktopMagicPluginAPI.IPluginData.Color">
|
||||||
<summary>
|
<summary>
|
||||||
Gets the color of the main application.
|
Gets the current color of the current theme.
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:DesktopMagicPluginAPI.IPluginData.Theme">
|
||||||
|
<summary>
|
||||||
|
Gets the current theme setting of the main application.
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
<member name="P:DesktopMagicPluginAPI.IPluginData.WindowSize">
|
<member name="P:DesktopMagicPluginAPI.IPluginData.WindowSize">
|
||||||
@@ -316,6 +373,41 @@
|
|||||||
Updates the plugin window.
|
Updates the plugin window.
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="T:DesktopMagicPluginAPI.ITheme">
|
||||||
|
<summary>
|
||||||
|
The theme settings of the main application.
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:DesktopMagicPluginAPI.ITheme.PrimaryColor">
|
||||||
|
<summary>
|
||||||
|
Gets the primary color of the current theme.
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:DesktopMagicPluginAPI.ITheme.SecondaryColor">
|
||||||
|
<summary>
|
||||||
|
Gets the secondary color of the current theme.
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:DesktopMagicPluginAPI.ITheme.BackgroundColor">
|
||||||
|
<summary>
|
||||||
|
Gets the background color of the current theme.
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:DesktopMagicPluginAPI.ITheme.Font">
|
||||||
|
<summary>
|
||||||
|
Gets the font of the current theme.
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:DesktopMagicPluginAPI.ITheme.CornerRadius">
|
||||||
|
<summary>
|
||||||
|
Gets the corner radius of the current theme.
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:DesktopMagicPluginAPI.ITheme.Margin">
|
||||||
|
<summary>
|
||||||
|
Gets the corner radius of the current theme.
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
<member name="T:DesktopMagicPluginAPI.Plugin">
|
<member name="T:DesktopMagicPluginAPI.Plugin">
|
||||||
<summary>
|
<summary>
|
||||||
The plugin class.
|
The plugin class.
|
||||||
@@ -338,7 +430,12 @@
|
|||||||
</member>
|
</member>
|
||||||
<member name="M:DesktopMagicPluginAPI.Plugin.Start">
|
<member name="M:DesktopMagicPluginAPI.Plugin.Start">
|
||||||
<summary>
|
<summary>
|
||||||
Occurs once when the pugin gets activated.
|
Occurs once when the plugin gets activated.
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:DesktopMagicPluginAPI.Plugin.Stop">
|
||||||
|
<summary>
|
||||||
|
Occurs once when the plugin gets deactivated.
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:DesktopMagicPluginAPI.Plugin.Main">
|
<member name="M:DesktopMagicPluginAPI.Plugin.Main">
|
||||||
@@ -365,7 +462,7 @@
|
|||||||
Occurs when the user rotates the mouse wheel while the mouse pointer is over this element.
|
Occurs when the user rotates the mouse wheel while the mouse pointer is over this element.
|
||||||
</summary>
|
</summary>
|
||||||
<param name="position">The x- and y-coordinates of the mouse pointer position relative to the plugin window.</param>
|
<param name="position">The x- and y-coordinates of the mouse pointer position relative to the plugin window.</param>
|
||||||
<param name="Delta">A value that indicates the amount that the mouse wheel has changed.</param>
|
<param name="delta">A value that indicates the amount that the mouse wheel has changed.</param>
|
||||||
</member>
|
</member>
|
||||||
</members>
|
</members>
|
||||||
</doc>
|
</doc>
|
||||||
|
|||||||
@@ -5,14 +5,14 @@ using System.Drawing;
|
|||||||
namespace DesktopMagicPluginAPI.Drawing
|
namespace DesktopMagicPluginAPI.Drawing
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Extentions for the <see cref="Graphics"/> class.
|
/// Extensions for the <see cref="Graphics"/> class.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static class GraphicsExtentions
|
public static class GraphicsExtentions
|
||||||
{
|
{
|
||||||
private static readonly Dictionary<Font, int> fonts = new Dictionary<Font, int>(new FontComparer());
|
private static readonly Dictionary<Font, int> fonts = new Dictionary<Font, int>(new FontComparer());
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Draws the specified text string at the specified location with the specified <see cref="Brush"/> and <see cref="Font"/> objects.
|
/// <inheritdoc cref="Graphics.DrawString(string?, Font, Brush, float, float)"/>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="graphics">Graphics object.</param>
|
/// <param name="graphics">Graphics object.</param>
|
||||||
/// <param name="s">String to draw.</param>
|
/// <param name="s">String to draw.</param>
|
||||||
@@ -22,7 +22,7 @@ namespace DesktopMagicPluginAPI.Drawing
|
|||||||
/// <param name="y">The y-coordinate of the upper-left corner of the drawn text.</param>
|
/// <param name="y">The y-coordinate of the upper-left corner of the drawn text.</param>
|
||||||
public static void DrawStringMonospace(this Graphics graphics, string s, Font font, Brush brush, float x, float y)
|
public static void DrawStringMonospace(this Graphics graphics, string s, Font font, Brush brush, float x, float y)
|
||||||
{
|
{
|
||||||
int widest = GetWidestChar(font);
|
int widest = graphics.GetWidestChar(font);
|
||||||
|
|
||||||
for (int i = 0; i < s.Length; i++)
|
for (int i = 0; i < s.Length; i++)
|
||||||
{
|
{
|
||||||
@@ -33,7 +33,7 @@ namespace DesktopMagicPluginAPI.Drawing
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Draws the specified text string at the specified location with the specified <see cref="Brush"/> and <see cref="Font"/> objects.
|
/// <inheritdoc cref="Graphics.DrawString(string?, Font, Brush, PointF)"/>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="graphics">Graphics object.</param>
|
/// <param name="graphics">Graphics object.</param>
|
||||||
/// <param name="s">String to draw.</param>
|
/// <param name="s">String to draw.</param>
|
||||||
@@ -42,7 +42,7 @@ namespace DesktopMagicPluginAPI.Drawing
|
|||||||
/// <param name="point"><see cref="PointF"/> structure that specifies the upper-left corner of the drawn text.</param>
|
/// <param name="point"><see cref="PointF"/> structure that specifies the upper-left corner of the drawn text.</param>
|
||||||
public static void DrawStringMonospace(this Graphics graphics, string s, Font font, Brush brush, PointF point)
|
public static void DrawStringMonospace(this Graphics graphics, string s, Font font, Brush brush, PointF point)
|
||||||
{
|
{
|
||||||
int widest = GetWidestChar(font);
|
int widest = graphics.GetWidestChar(font);
|
||||||
|
|
||||||
for (int i = 0; i < s.Length; i++)
|
for (int i = 0; i < s.Length; i++)
|
||||||
{
|
{
|
||||||
@@ -53,7 +53,7 @@ namespace DesktopMagicPluginAPI.Drawing
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Draws the specified text string at the specified location with the specified <see cref="Brush"/> and <see cref="Font"/> objects.
|
/// <inheritdoc cref="Graphics.DrawString(string?, Font, Brush, float, float)"/>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="graphics">Graphics object.</param>
|
/// <param name="graphics">Graphics object.</param>
|
||||||
/// <param name="s">String to draw.</param>
|
/// <param name="s">String to draw.</param>
|
||||||
@@ -73,7 +73,7 @@ namespace DesktopMagicPluginAPI.Drawing
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Draws the specified text string at the specified location with the specified <see cref="Brush"/> and <see cref="Font"/> objects.
|
/// <inheritdoc cref="Graphics.DrawString(string?, Font, Brush, PointF)"/>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="graphics">Graphics object.</param>
|
/// <param name="graphics">Graphics object.</param>
|
||||||
/// <param name="s">String to draw.</param>
|
/// <param name="s">String to draw.</param>
|
||||||
@@ -91,12 +91,76 @@ namespace DesktopMagicPluginAPI.Drawing
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int GetWidestChar(Font font)
|
/// <summary>
|
||||||
|
///<inheritdoc cref="Graphics.DrawString(string?, Font, Brush, float, float)"/>
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="graphics">Graphics object.</param>
|
||||||
|
/// <param name="s">String to draw.</param>
|
||||||
|
/// <param name="font"><see cref="Font"/> that defines the text format of the string.</param>
|
||||||
|
/// <param name="brush"><see cref="Brush"/> that determines the color and texture of the drawn text.</param>
|
||||||
|
/// <param name="x">The x-coordinate of the upper-left corner of the drawn text.</param>
|
||||||
|
/// <param name="y">The y-coordinate of the upper-left corner of the drawn text.</param>
|
||||||
|
public static void DrawStringNoLeftPadding(this Graphics graphics, string s, Font font, Brush brush, float x, float y)
|
||||||
|
{
|
||||||
|
// measure left padding
|
||||||
|
StringFormat sf = new StringFormat(StringFormatFlags.NoClip);
|
||||||
|
sf.SetMeasurableCharacterRanges(new CharacterRange[] { new CharacterRange(0, 1) });
|
||||||
|
Region[] r = graphics.MeasureCharacterRanges(s, font, new RectangleF(0, 0, 1000, 100), sf);
|
||||||
|
float leftPadding = r[0].GetBounds(graphics).Left;
|
||||||
|
|
||||||
|
// draw string
|
||||||
|
sf = new StringFormat(StringFormatFlags.NoClip);
|
||||||
|
graphics.DrawString(s, font, brush, x - leftPadding, y, sf);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// <inheritdoc cref="Graphics.DrawString(string?, Font, Brush, PointF)"/>
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="graphics">Graphics object.</param>
|
||||||
|
/// <param name="s">String to draw.</param>
|
||||||
|
/// <param name="font"><see cref="Font"/> that defines the text format of the string.</param>
|
||||||
|
/// <param name="brush"><see cref="Brush"/> that determines the color and texture of the drawn text.</param>
|
||||||
|
/// <param name="point"><see cref="PointF"/> structure that specifies the upper-left corner of the drawn text.</param>
|
||||||
|
public static void DrawStringNoLeftPadding(this Graphics graphics, string s, Font font, Brush brush, PointF point)
|
||||||
|
{
|
||||||
|
// measure left padding
|
||||||
|
StringFormat sf = new StringFormat(StringFormatFlags.NoClip);
|
||||||
|
sf.SetMeasurableCharacterRanges(new CharacterRange[] { new CharacterRange(0, 1) });
|
||||||
|
Region[] r = graphics.MeasureCharacterRanges(s, font, new RectangleF(0, 0, 1000, 100), sf);
|
||||||
|
float leftPadding = r[0].GetBounds(graphics).Left;
|
||||||
|
|
||||||
|
// draw string
|
||||||
|
sf = new StringFormat(StringFormatFlags.NoClip);
|
||||||
|
graphics.DrawString(s, font, brush, point.X - leftPadding, point.Y, sf);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// <inheritdoc cref="Graphics.MeasureString(string, Font)"/>
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="graphics">Graphics object.</param>
|
||||||
|
/// <param name="text">String to measure.</param>
|
||||||
|
/// <param name="font"><see cref="Font"/> that defines the text format of the string.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static SizeF MeasureStringNoLeftPadding(this Graphics graphics, string text, Font font)
|
||||||
|
{
|
||||||
|
SizeF size = graphics.MeasureString(text, font, int.MaxValue);
|
||||||
|
|
||||||
|
StringFormat sf = new StringFormat(StringFormatFlags.NoClip);
|
||||||
|
sf.SetMeasurableCharacterRanges(new CharacterRange[] { new CharacterRange(0, 1) });
|
||||||
|
Region[] r = graphics.MeasureCharacterRanges(text, font, new RectangleF(0, 0, 1000, 100), sf);
|
||||||
|
float leftPadding = r[0].GetBounds(graphics).Left;
|
||||||
|
|
||||||
|
size.Width -= leftPadding / 1.5f;
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int GetWidestChar(this Graphics graphics, Font font)
|
||||||
{
|
{
|
||||||
if (fonts.ContainsKey(font))
|
if (fonts.ContainsKey(font))
|
||||||
|
{
|
||||||
return fonts[font];
|
return fonts[font];
|
||||||
|
}
|
||||||
|
|
||||||
Graphics graphics = Graphics.FromImage(new Bitmap(1, 1));
|
|
||||||
float max = 0;
|
float max = 0;
|
||||||
char maxx = ' ';
|
char maxx = ' ';
|
||||||
for (int i = 0; i <= 255; i++)
|
for (int i = 0; i <= 255; i++)
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using System.Drawing;
|
using System;
|
||||||
|
using System.Drawing;
|
||||||
|
|
||||||
namespace DesktopMagicPluginAPI
|
namespace DesktopMagicPluginAPI
|
||||||
{
|
{
|
||||||
@@ -8,19 +9,26 @@ namespace DesktopMagicPluginAPI
|
|||||||
public interface IPluginData
|
public interface IPluginData
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the font of the main application.
|
/// Gets the current font of the current theme.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
[Obsolete("Use the \"Theme\" property instead")]
|
||||||
string Font { get; }
|
string Font { get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the color of the main application.
|
/// Gets the current color of the current theme.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
[Obsolete("Use the \"Theme\" property instead")]
|
||||||
Color Color { get; }
|
Color Color { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the current theme setting of the main application.
|
||||||
|
/// </summary>
|
||||||
|
ITheme Theme { get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the window size of the plugin window.
|
/// Gets the window size of the plugin window.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
Point WindowSize { get; }
|
Size WindowSize { get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the window position of the plugin window.
|
/// Gets the window position of the plugin window.
|
||||||
|
|||||||
@@ -0,0 +1,40 @@
|
|||||||
|
using System.Drawing;
|
||||||
|
|
||||||
|
namespace DesktopMagicPluginAPI
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The theme settings of the main application.
|
||||||
|
/// </summary>
|
||||||
|
public interface ITheme
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the primary color of the current theme.
|
||||||
|
/// </summary>
|
||||||
|
Color PrimaryColor { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the secondary color of the current theme.
|
||||||
|
/// </summary>
|
||||||
|
Color SecondaryColor { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the background color of the current theme.
|
||||||
|
/// </summary>
|
||||||
|
Color BackgroundColor { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the font of the current theme.
|
||||||
|
/// </summary>
|
||||||
|
string Font { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the corner radius of the current theme.
|
||||||
|
/// </summary>
|
||||||
|
int CornerRadius { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the corner radius of the current theme.
|
||||||
|
/// </summary>
|
||||||
|
int Margin { get; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
using System.Collections.ObjectModel;
|
||||||
|
|
||||||
|
namespace DesktopMagicPluginAPI.Inputs
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Represents a selection control with a drop-down list.
|
||||||
|
/// </summary>
|
||||||
|
public class ComboBox : Element
|
||||||
|
{
|
||||||
|
private string _value;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the collection used to generate the content of the <see cref="ComboBox"/>.
|
||||||
|
/// </summary>
|
||||||
|
public ObservableCollection<string> Items { get; } = new ObservableCollection<string>();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the currently selected item associated with this <see cref="ComboBox"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>If you assign a value to this property, the displayed text in the user interface will not be changed.</remarks>
|
||||||
|
public string Value
|
||||||
|
{
|
||||||
|
get => _value;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (_value != value)
|
||||||
|
{
|
||||||
|
_value = value;
|
||||||
|
ValueChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="Label"/> class with the provided <paramref name="items"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="items"></param>
|
||||||
|
public ComboBox(params string[] items)
|
||||||
|
{
|
||||||
|
foreach (string item in items)
|
||||||
|
{
|
||||||
|
Items.Add(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -19,17 +19,7 @@ namespace DesktopMagicPluginAPI
|
|||||||
public IPluginData Application
|
public IPluginData Application
|
||||||
{
|
{
|
||||||
get => application;
|
get => application;
|
||||||
set
|
set => application = application is null ? value : throw new InvalidOperationException($"You cannot set the value of the {nameof(Application)} property");
|
||||||
{
|
|
||||||
if (application is null)
|
|
||||||
{
|
|
||||||
application = value;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
throw new InvalidOperationException($"You cannot set the value of the {nameof(Application)} property");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -43,12 +33,19 @@ namespace DesktopMagicPluginAPI
|
|||||||
public virtual RenderQuality RenderQuality { get; set; } = RenderQuality.High;
|
public virtual RenderQuality RenderQuality { get; set; } = RenderQuality.High;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Occurs once when the pugin gets activated.
|
/// Occurs once when the plugin gets activated.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public virtual void Start()
|
public virtual void Start()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Occurs once when the plugin gets deactivated.
|
||||||
|
/// </summary>
|
||||||
|
public virtual void Stop()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Occurs when the <see cref="UpdateInterval"/> elapses.
|
/// Occurs when the <see cref="UpdateInterval"/> elapses.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -76,8 +73,8 @@ namespace DesktopMagicPluginAPI
|
|||||||
/// Occurs when the user rotates the mouse wheel while the mouse pointer is over this element.
|
/// Occurs when the user rotates the mouse wheel while the mouse pointer is over this element.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="position">The x- and y-coordinates of the mouse pointer position relative to the plugin window.</param>
|
/// <param name="position">The x- and y-coordinates of the mouse pointer position relative to the plugin window.</param>
|
||||||
/// <param name="Delta">A value that indicates the amount that the mouse wheel has changed.</param>
|
/// <param name="delta">A value that indicates the amount that the mouse wheel has changed.</param>
|
||||||
public virtual void OnMouseWheel(Point position, int Delta)
|
public virtual void OnMouseWheel(Point position, int delta)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
###############
|
||||||
|
# temp file #
|
||||||
|
###############
|
||||||
|
*.yml
|
||||||
|
.manifest
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
# PLACEHOLDER
|
||||||
|
TODO: Add .NET projects to the *src* folder and run `docfx` to generate **REAL** *API Documentation*!
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
# Add your introductions here!
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
- name: Introduction
|
||||||
|
href: intro.md
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
{
|
||||||
|
"metadata": [
|
||||||
|
{
|
||||||
|
"src": [
|
||||||
|
{
|
||||||
|
"files": [
|
||||||
|
"**.csproj"
|
||||||
|
],
|
||||||
|
"src": "C:\\Users\\David\\Programmieren\\DesktopMagic\\src\\DesktopMagicPluginAPI"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"dest": "api",
|
||||||
|
"disableGitFeatures": false,
|
||||||
|
"disableDefaultFilter": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"build": {
|
||||||
|
"content": [
|
||||||
|
{
|
||||||
|
"files": [
|
||||||
|
"api/**.yml",
|
||||||
|
"api/index.md"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"files": [
|
||||||
|
"articles/**.md",
|
||||||
|
"articles/**/toc.yml",
|
||||||
|
"toc.yml",
|
||||||
|
"*.md"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"resource": [
|
||||||
|
{
|
||||||
|
"files": [
|
||||||
|
"images/**"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"overwrite": [
|
||||||
|
{
|
||||||
|
"files": [
|
||||||
|
"apidoc/**.md"
|
||||||
|
],
|
||||||
|
"exclude": [
|
||||||
|
"obj/**",
|
||||||
|
"_site/**"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"dest": "_site",
|
||||||
|
"globalMetadataFiles": [],
|
||||||
|
"fileMetadataFiles": [],
|
||||||
|
"template": [
|
||||||
|
"default"
|
||||||
|
],
|
||||||
|
"postProcessors": [],
|
||||||
|
"markdownEngineName": "markdig",
|
||||||
|
"noLangKeyword": false,
|
||||||
|
"keepFileLink": false,
|
||||||
|
"cleanupCacheHistory": false,
|
||||||
|
"disableGitFeatures": false
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
# This is the **HOMEPAGE**.
|
||||||
|
Refer to [Markdown](http://daringfireball.net/projects/markdown/) for how to write markdown files.
|
||||||
|
## Quick Start Notes:
|
||||||
|
1. Add images to the *images* folder if the file is referencing an image.
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
- name: Articles
|
||||||
|
href: articles/
|
||||||
|
- name: Api Documentation
|
||||||
|
href: api/
|
||||||
|
homepage: api/index.md
|
||||||
Binary file not shown.
@@ -1,4 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version":"0.0.2.3",
|
"Version":"0.0.3.1",
|
||||||
"FileUrl":"http://github.com/Stone-Red-Code/DesktopMagic/blob/develop/update/DesktopMagic.zip?raw=true"
|
"FileUrl":"http://github.com/Stone-Red-Code/DesktopMagic/blob/main/update/DesktopMagic.zip?raw=true"
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user