From 1cfc7a3b31462320020a3252e07a1adfcd28d9da Mon Sep 17 00:00:00 2001 From: Darth Affe Date: Wed, 2 Aug 2017 22:14:21 +0200 Subject: [PATCH] Added tons of basic stuff --- .gitattributes | 63 +++++++ KeyboardAudioVisualizer.sln | 22 +++ KeyboardAudioVisualizer/App.config | 6 + KeyboardAudioVisualizer/App.xaml | 27 +++ KeyboardAudioVisualizer/App.xaml.cs | 62 ++++++ KeyboardAudioVisualizer/ApplicationManager.cs | 48 +++++ .../Controls/BlurredDecorationWindow.cs | 91 +++++++++ .../Controls/ImageButton.cs | 51 +++++ .../Helper/ActionCommand.cs | 50 +++++ .../Helper/ExceptionExtension.cs | 21 +++ .../Helper/SerializationHelper.cs | 54 ++++++ .../KeyboardAudioVisualizer.csproj | 177 ++++++++++++++++++ .../Properties/AssemblyInfo.cs | 55 ++++++ .../Properties/Resources.Designer.cs | 71 +++++++ .../Properties/Resources.resx | 117 ++++++++++++ .../Properties/Settings.Designer.cs | 30 +++ .../Properties/Settings.settings | 7 + KeyboardAudioVisualizer/Resources/Icon.ico | Bin 0 -> 370070 bytes .../Resources/KeyboardAudioVisualizer.xaml | 21 +++ .../Resources/background.png | Bin 0 -> 279849 bytes KeyboardAudioVisualizer/Resources/close.png | Bin 0 -> 4800 bytes KeyboardAudioVisualizer/Resources/font.ttf | Bin 0 -> 56228 bytes .../Resources/minimize.png | Bin 0 -> 1821 bytes KeyboardAudioVisualizer/Settings.cs | 6 + .../Styles/BlurredDecorationWindow.xaml | 126 +++++++++++++ .../Styles/CachedResourceDictionary.cs | 56 ++++++ .../Styles/FrameworkElement.xaml | 13 ++ .../Styles/ImageButton.xaml | 119 ++++++++++++ KeyboardAudioVisualizer/Styles/Theme.xaml | 28 +++ KeyboardAudioVisualizer/Styles/ToolTip.xaml | 36 ++++ .../UI/ConfigurationViewModel.cs | 29 +++ .../UI/ConfigurationWindow.xaml | 20 ++ .../UI/ConfigurationWindow.xaml.cs | 9 + KeyboardAudioVisualizer/packages.config | 10 + NuGet.Config | 13 ++ 35 files changed, 1438 insertions(+) create mode 100644 .gitattributes create mode 100644 KeyboardAudioVisualizer.sln create mode 100644 KeyboardAudioVisualizer/App.config create mode 100644 KeyboardAudioVisualizer/App.xaml create mode 100644 KeyboardAudioVisualizer/App.xaml.cs create mode 100644 KeyboardAudioVisualizer/ApplicationManager.cs create mode 100644 KeyboardAudioVisualizer/Controls/BlurredDecorationWindow.cs create mode 100644 KeyboardAudioVisualizer/Controls/ImageButton.cs create mode 100644 KeyboardAudioVisualizer/Helper/ActionCommand.cs create mode 100644 KeyboardAudioVisualizer/Helper/ExceptionExtension.cs create mode 100644 KeyboardAudioVisualizer/Helper/SerializationHelper.cs create mode 100644 KeyboardAudioVisualizer/KeyboardAudioVisualizer.csproj create mode 100644 KeyboardAudioVisualizer/Properties/AssemblyInfo.cs create mode 100644 KeyboardAudioVisualizer/Properties/Resources.Designer.cs create mode 100644 KeyboardAudioVisualizer/Properties/Resources.resx create mode 100644 KeyboardAudioVisualizer/Properties/Settings.Designer.cs create mode 100644 KeyboardAudioVisualizer/Properties/Settings.settings create mode 100644 KeyboardAudioVisualizer/Resources/Icon.ico create mode 100644 KeyboardAudioVisualizer/Resources/KeyboardAudioVisualizer.xaml create mode 100644 KeyboardAudioVisualizer/Resources/background.png create mode 100644 KeyboardAudioVisualizer/Resources/close.png create mode 100644 KeyboardAudioVisualizer/Resources/font.ttf create mode 100644 KeyboardAudioVisualizer/Resources/minimize.png create mode 100644 KeyboardAudioVisualizer/Settings.cs create mode 100644 KeyboardAudioVisualizer/Styles/BlurredDecorationWindow.xaml create mode 100644 KeyboardAudioVisualizer/Styles/CachedResourceDictionary.cs create mode 100644 KeyboardAudioVisualizer/Styles/FrameworkElement.xaml create mode 100644 KeyboardAudioVisualizer/Styles/ImageButton.xaml create mode 100644 KeyboardAudioVisualizer/Styles/Theme.xaml create mode 100644 KeyboardAudioVisualizer/Styles/ToolTip.xaml create mode 100644 KeyboardAudioVisualizer/UI/ConfigurationViewModel.cs create mode 100644 KeyboardAudioVisualizer/UI/ConfigurationWindow.xaml create mode 100644 KeyboardAudioVisualizer/UI/ConfigurationWindow.xaml.cs create mode 100644 KeyboardAudioVisualizer/packages.config create mode 100644 NuGet.Config diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..1ff0c42 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,63 @@ +############################################################################### +# Set default behavior to automatically normalize line endings. +############################################################################### +* text=auto + +############################################################################### +# Set default behavior for command prompt diff. +# +# This is need for earlier builds of msysgit that does not have it on by +# default for csharp files. +# Note: This is only used by command line +############################################################################### +#*.cs diff=csharp + +############################################################################### +# Set the merge driver for project and solution files +# +# Merging from the command prompt will add diff markers to the files if there +# are conflicts (Merging from VS is not affected by the settings below, in VS +# the diff markers are never inserted). Diff markers may cause the following +# file extensions to fail to load in VS. An alternative would be to treat +# these files as binary and thus will always conflict and require user +# intervention with every merge. To do so, just uncomment the entries below +############################################################################### +#*.sln merge=binary +#*.csproj merge=binary +#*.vbproj merge=binary +#*.vcxproj merge=binary +#*.vcproj merge=binary +#*.dbproj merge=binary +#*.fsproj merge=binary +#*.lsproj merge=binary +#*.wixproj merge=binary +#*.modelproj merge=binary +#*.sqlproj merge=binary +#*.wwaproj merge=binary + +############################################################################### +# behavior for image files +# +# image files are treated as binary by default. +############################################################################### +#*.jpg binary +#*.png binary +#*.gif binary + +############################################################################### +# diff behavior for common document formats +# +# Convert binary document formats to text before diffing them. This feature +# is only available from the command line. Turn it on by uncommenting the +# entries below. +############################################################################### +#*.doc diff=astextplain +#*.DOC diff=astextplain +#*.docx diff=astextplain +#*.DOCX diff=astextplain +#*.dot diff=astextplain +#*.DOT diff=astextplain +#*.pdf diff=astextplain +#*.PDF diff=astextplain +#*.rtf diff=astextplain +#*.RTF diff=astextplain diff --git a/KeyboardAudioVisualizer.sln b/KeyboardAudioVisualizer.sln new file mode 100644 index 0000000..d69b599 --- /dev/null +++ b/KeyboardAudioVisualizer.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.26430.15 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KeyboardAudioVisualizer", "KeyboardAudioVisualizer\KeyboardAudioVisualizer.csproj", "{0AC4E8B1-4D4D-447F-B9FD-38A74ED1F243}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {0AC4E8B1-4D4D-447F-B9FD-38A74ED1F243}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0AC4E8B1-4D4D-447F-B9FD-38A74ED1F243}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0AC4E8B1-4D4D-447F-B9FD-38A74ED1F243}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0AC4E8B1-4D4D-447F-B9FD-38A74ED1F243}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/KeyboardAudioVisualizer/App.config b/KeyboardAudioVisualizer/App.config new file mode 100644 index 0000000..731f6de --- /dev/null +++ b/KeyboardAudioVisualizer/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/KeyboardAudioVisualizer/App.xaml b/KeyboardAudioVisualizer/App.xaml new file mode 100644 index 0000000..083b6f0 --- /dev/null +++ b/KeyboardAudioVisualizer/App.xaml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + diff --git a/KeyboardAudioVisualizer/App.xaml.cs b/KeyboardAudioVisualizer/App.xaml.cs new file mode 100644 index 0000000..b154184 --- /dev/null +++ b/KeyboardAudioVisualizer/App.xaml.cs @@ -0,0 +1,62 @@ +using System; +using System.IO; +using System.Windows; +using Hardcodet.Wpf.TaskbarNotification; +using KeyboardAudioVisualizer.Helper; + +namespace KeyboardAudioVisualizer +{ + public partial class App : Application + { + #region Constants + + private const string PATH_SETTINGS = "Settings.xaml"; + + #endregion + + #region Properties & Fields + + private TaskbarIcon _taskbarIcon; + + #endregion + + #region Constructors + + #endregion + + #region Methods + + protected override void OnStartup(StartupEventArgs e) + { + base.OnStartup(e); + + try + { + _taskbarIcon = (TaskbarIcon)FindResource("TaskbarIcon"); + + Settings settings = SerializationHelper.LoadObjectFromFile(PATH_SETTINGS); + if (settings == null) + { + settings = new Settings(); + _taskbarIcon.ShowBalloonTip("Keyboard Audio-Visualizer is starting in the tray!", "Click on the icon to open the configuration.", BalloonIcon.Info); + } + ApplicationManager.Instance.Settings = settings; + } + catch (Exception ex) + { + File.WriteAllText("error.log", $"[{DateTime.Now:G}] Exception!\r\n\r\nMessage:\r\n{ex.GetFullMessage()}\r\n\r\nStackTrace:\r\n{ex.StackTrace}\r\n\r\n"); + MessageBox.Show("An error occured while starting the Keyboard Audio-Visualizer.\r\nPlease double check if SDK-support for your devices is enabled.\r\nMore information can be found in the error.log file in the application directory.", "Can't start Keyboard Audio-Visualizer."); + Shutdown(); + } + } + + protected override void OnExit(ExitEventArgs e) + { + base.OnExit(e); + + SerializationHelper.SaveObjectToFile(ApplicationManager.Instance.Settings, PATH_SETTINGS); + } + + #endregion + } +} diff --git a/KeyboardAudioVisualizer/ApplicationManager.cs b/KeyboardAudioVisualizer/ApplicationManager.cs new file mode 100644 index 0000000..ee7a083 --- /dev/null +++ b/KeyboardAudioVisualizer/ApplicationManager.cs @@ -0,0 +1,48 @@ +using System.Windows; +using KeyboardAudioVisualizer.Helper; +using KeyboardAudioVisualizer.UI; + +namespace KeyboardAudioVisualizer +{ + public class ApplicationManager + { + #region Properties & Fields + + public static ApplicationManager Instance { get; } = new ApplicationManager(); + + private ConfigurationWindow _configurationWindow; + + public Settings Settings { get; set; } + + #endregion + + #region Commands + + private ActionCommand _openConfiguration; + public ActionCommand OpenConfigurationCommand => _openConfiguration ?? (_openConfiguration = new ActionCommand(OpenConfiguration)); + + private ActionCommand _exitCommand; + public ActionCommand ExitCommand => _exitCommand ?? (_exitCommand = new ActionCommand(Exit)); + + #endregion + + #region Constructors + + private ApplicationManager() + { } + + #endregion + + #region Methods + + private void OpenConfiguration() + { + if (_configurationWindow == null) _configurationWindow = new ConfigurationWindow(); + _configurationWindow.Show(); + } + + private void Exit() => Application.Current.Shutdown(); + + #endregion + } +} diff --git a/KeyboardAudioVisualizer/Controls/BlurredDecorationWindow.cs b/KeyboardAudioVisualizer/Controls/BlurredDecorationWindow.cs new file mode 100644 index 0000000..649ccac --- /dev/null +++ b/KeyboardAudioVisualizer/Controls/BlurredDecorationWindow.cs @@ -0,0 +1,91 @@ +using System.Windows; +using System.Windows.Controls; +using System.Windows.Input; +using System.Windows.Media; + +namespace KeyboardAudioVisualizer.Controls +{ + [TemplatePart(Name = "PART_Decoration", Type = typeof(FrameworkElement))] + [TemplatePart(Name = "PART_Content", Type = typeof(FrameworkElement))] + [TemplatePart(Name = "PART_CloseButton", Type = typeof(Button))] + [TemplatePart(Name = "PART_MinimizeButton", Type = typeof(Button))] + [TemplatePart(Name = "PART_IconButton", Type = typeof(Button))] + public class BlurredDecorationWindow : System.Windows.Window + { + #region DependencyProperties + // ReSharper disable InconsistentNaming + + public static readonly DependencyProperty BackgroundImageProperty = DependencyProperty.Register( + "BackgroundImage", typeof(ImageSource), typeof(BlurredDecorationWindow), new PropertyMetadata(default(ImageSource))); + + public ImageSource BackgroundImage + { + get => (ImageSource)GetValue(BackgroundImageProperty); + set => SetValue(BackgroundImageProperty, value); + } + + public static readonly DependencyProperty DecorationHeightProperty = DependencyProperty.Register( + "DecorationHeight", typeof(double), typeof(BlurredDecorationWindow), new PropertyMetadata(20.0)); + + public double DecorationHeight + { + get => (double)GetValue(DecorationHeightProperty); + set => SetValue(DecorationHeightProperty, value); + } + + public static readonly DependencyProperty IconToolTipProperty = DependencyProperty.Register( + "IconToolTip", typeof(string), typeof(BlurredDecorationWindow), new PropertyMetadata(default(string))); + + public string IconToolTip + { + get => (string)GetValue(IconToolTipProperty); + set => SetValue(IconToolTipProperty, value); + } + + public static readonly DependencyProperty IconCommandProperty = DependencyProperty.Register( + "IconCommand", typeof(ICommand), typeof(BlurredDecorationWindow), new PropertyMetadata(default(ICommand))); + + public ICommand IconCommand + { + get => (ICommand)GetValue(IconCommandProperty); + set => SetValue(IconCommandProperty, value); + } + + // ReSharper restore InconsistentNaming + #endregion + + #region Constructors + + static BlurredDecorationWindow() + { + DefaultStyleKeyProperty.OverrideMetadata(typeof(BlurredDecorationWindow), new FrameworkPropertyMetadata(typeof(BlurredDecorationWindow))); + } + + #endregion + + #region Methods + + public override void OnApplyTemplate() + { + base.OnApplyTemplate(); + + FrameworkElement decoration = GetTemplateChild("PART_Decoration") as FrameworkElement; + if (decoration != null) + decoration.MouseLeftButtonDown += (sender, args) => DragMove(); + + Button closeButton = GetTemplateChild("PART_CloseButton") as Button; + if (closeButton != null) + closeButton.Click += (sender, args) => Application.Current.Shutdown(); + + Button minimizeButton = GetTemplateChild("PART_MinimizeButton") as Button; + if (minimizeButton != null) + minimizeButton.Click += (sender, args) => Application.Current.MainWindow.WindowState = WindowState.Minimized; + + Button iconButton = GetTemplateChild("PART_IconButton") as Button; + if (iconButton != null) + iconButton.Click += (sender, args) => IconCommand?.Execute(null); + } + + #endregion + } +} diff --git a/KeyboardAudioVisualizer/Controls/ImageButton.cs b/KeyboardAudioVisualizer/Controls/ImageButton.cs new file mode 100644 index 0000000..184536a --- /dev/null +++ b/KeyboardAudioVisualizer/Controls/ImageButton.cs @@ -0,0 +1,51 @@ +using System.Windows; +using System.Windows.Controls; +using System.Windows.Media; + +namespace KeyboardAudioVisualizer.Controls +{ + public class ImageButton : Button + { + #region Properties & Fields + // ReSharper disable InconsistentNaming + + public static readonly DependencyProperty ImageProperty = DependencyProperty.Register( + "Image", typeof(ImageSource), typeof(ImageButton), new PropertyMetadata(default(ImageSource))); + + public ImageSource Image + { + get => (ImageSource)GetValue(ImageProperty); + set => SetValue(ImageProperty, value); + } + + public static readonly DependencyProperty HoverImageProperty = DependencyProperty.Register( + "HoverImage", typeof(ImageSource), typeof(ImageButton), new PropertyMetadata(default(ImageSource))); + + public ImageSource HoverImage + { + get => (ImageSource)GetValue(HoverImageProperty); + set => SetValue(HoverImageProperty, value); + } + + public static readonly DependencyProperty PressedImageProperty = DependencyProperty.Register( + "PressedImage", typeof(ImageSource), typeof(ImageButton), new PropertyMetadata(default(ImageSource))); + + public ImageSource PressedImage + { + get => (ImageSource)GetValue(PressedImageProperty); + set => SetValue(PressedImageProperty, value); + } + + // ReSharper restore InconsistentNaming + #endregion + + #region Constructors + + static ImageButton() + { + DefaultStyleKeyProperty.OverrideMetadata(typeof(ImageButton), new FrameworkPropertyMetadata(typeof(ImageButton))); + } + + #endregion + } +} diff --git a/KeyboardAudioVisualizer/Helper/ActionCommand.cs b/KeyboardAudioVisualizer/Helper/ActionCommand.cs new file mode 100644 index 0000000..1b6ee2a --- /dev/null +++ b/KeyboardAudioVisualizer/Helper/ActionCommand.cs @@ -0,0 +1,50 @@ +using System; +using System.Windows.Input; + +namespace KeyboardAudioVisualizer.Helper +{ + public class ActionCommand : ICommand + { + #region Properties & Fields + + private readonly Func _canExecute; + private readonly Action _command; + + #endregion + + #region Events + + public event EventHandler CanExecuteChanged; + + #endregion + + #region Constructors + + public ActionCommand(Action command, Func canExecute = null) + { + this._command = command; + this._canExecute = canExecute; + } + + #endregion + + #region Methods + + public bool CanExecute(object parameter) + { + return _canExecute?.Invoke() ?? true; + } + + public void Execute(object parameter) + { + _command?.Invoke(); + } + + public void RaiseCanExecuteChanged() + { + CanExecuteChanged?.Invoke(this, new EventArgs()); + } + + #endregion + } +} diff --git a/KeyboardAudioVisualizer/Helper/ExceptionExtension.cs b/KeyboardAudioVisualizer/Helper/ExceptionExtension.cs new file mode 100644 index 0000000..1931e57 --- /dev/null +++ b/KeyboardAudioVisualizer/Helper/ExceptionExtension.cs @@ -0,0 +1,21 @@ +using System; + +namespace KeyboardAudioVisualizer.Helper +{ + public static class ExceptionExtension + { + #region Methods + + public static string GetFullMessage(this Exception ex, string message = "") + { + if (ex == null) return string.Empty; + + if (ex.InnerException != null) + message += "\r\nInnerException: " + GetFullMessage(ex.InnerException); + + return message; + } + + #endregion + } +} diff --git a/KeyboardAudioVisualizer/Helper/SerializationHelper.cs b/KeyboardAudioVisualizer/Helper/SerializationHelper.cs new file mode 100644 index 0000000..4b64b0c --- /dev/null +++ b/KeyboardAudioVisualizer/Helper/SerializationHelper.cs @@ -0,0 +1,54 @@ +using System.IO; +using System.Xml; +using System.Xml.Serialization; + +namespace KeyboardAudioVisualizer.Helper +{ + public static class SerializationHelper + { + #region Methods + + public static void SaveObjectToFile(T serializableObject, string path) + { + if (serializableObject == null) return; + + try + { + XmlDocument xmlDocument = new XmlDocument(); + XmlSerializer serializer = new XmlSerializer(serializableObject.GetType()); + using (MemoryStream stream = new MemoryStream()) + { + serializer.Serialize(stream, serializableObject); + stream.Seek(0, SeekOrigin.Begin); + xmlDocument.Load(stream); + xmlDocument.Save(path); + } + } + catch {/* Catch'em all */} + } + + public static T LoadObjectFromFile(string fileName) + { + if (string.IsNullOrEmpty(fileName)) return default(T); + + try + { + XmlDocument xmlDocument = new XmlDocument(); + xmlDocument.Load(fileName); + string xmlString = xmlDocument.OuterXml; + + using (StringReader sr = new StringReader(xmlString)) + { + XmlSerializer serializer = new XmlSerializer(typeof(T)); + using (XmlReader reader = new XmlTextReader(sr)) + return (T)serializer.Deserialize(reader); + } + } + catch {/* Catch'em all */} + + return default(T); + } + + #endregion + } +} diff --git a/KeyboardAudioVisualizer/KeyboardAudioVisualizer.csproj b/KeyboardAudioVisualizer/KeyboardAudioVisualizer.csproj new file mode 100644 index 0000000..326dc9d --- /dev/null +++ b/KeyboardAudioVisualizer/KeyboardAudioVisualizer.csproj @@ -0,0 +1,177 @@ + + + + + Debug + AnyCPU + {0AC4E8B1-4D4D-447F-B9FD-38A74ED1F243} + WinExe + KeyboardAudioVisualizer + KeyboardAudioVisualizer + v4.6.1 + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 4 + true + + + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + Resources\Icon.ico + + + + ..\packages\CSCore.1.2.1.1\lib\net35-client\CSCore.dll + + + ..\packages\Hardcodet.NotifyIcon.Wpf.1.0.8\lib\net451\Hardcodet.Wpf.TaskbarNotification.dll + + + ..\packages\MathNet.Numerics.3.20.0\lib\net40\MathNet.Numerics.dll + + + ..\packages\RGB.NET.Brushes.1.0.0\lib\net45\RGB.NET.Brushes.dll + + + ..\packages\RGB.NET.Core.1.0.0\lib\net45\RGB.NET.Core.dll + + + ..\packages\RGB.NET.Devices.Corsair.1.0.0\lib\net45\RGB.NET.Devices.Corsair.dll + + + ..\packages\RGB.NET.Groups.1.0.0\lib\net45\RGB.NET.Groups.dll + + + + + + + + + + + + 4.0 + + + + + + + + MSBuild:Compile + Designer + + + App.xaml + Code + + + + + + + + + + ConfigurationWindow.xaml + + + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + Designer + MSBuild:Compile + + + + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + \ No newline at end of file diff --git a/KeyboardAudioVisualizer/Properties/AssemblyInfo.cs b/KeyboardAudioVisualizer/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..48fc08f --- /dev/null +++ b/KeyboardAudioVisualizer/Properties/AssemblyInfo.cs @@ -0,0 +1,55 @@ +using System.Reflection; +using System.Resources; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Windows; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("KeyboardAudioVisualizer")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("KeyboardAudioVisualizer")] +[assembly: AssemblyCopyright("Copyright © 2017")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +//In order to begin building localizable applications, set +//CultureYouAreCodingWith in your .csproj file +//inside a . For example, if you are using US english +//in your source files, set the to en-US. Then uncomment +//the NeutralResourceLanguage attribute below. Update the "en-US" in +//the line below to match the UICulture setting in the project file. + +//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] + + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/KeyboardAudioVisualizer/Properties/Resources.Designer.cs b/KeyboardAudioVisualizer/Properties/Resources.Designer.cs new file mode 100644 index 0000000..e690458 --- /dev/null +++ b/KeyboardAudioVisualizer/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace KeyboardAudioVisualizer.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("KeyboardAudioVisualizer.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/KeyboardAudioVisualizer/Properties/Resources.resx b/KeyboardAudioVisualizer/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/KeyboardAudioVisualizer/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/KeyboardAudioVisualizer/Properties/Settings.Designer.cs b/KeyboardAudioVisualizer/Properties/Settings.Designer.cs new file mode 100644 index 0000000..bd09016 --- /dev/null +++ b/KeyboardAudioVisualizer/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace KeyboardAudioVisualizer.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/KeyboardAudioVisualizer/Properties/Settings.settings b/KeyboardAudioVisualizer/Properties/Settings.settings new file mode 100644 index 0000000..033d7a5 --- /dev/null +++ b/KeyboardAudioVisualizer/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/KeyboardAudioVisualizer/Resources/Icon.ico b/KeyboardAudioVisualizer/Resources/Icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..0f5afd286277499d9ff9b713342673ddf882de63 GIT binary patch literal 370070 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

U)(;^5Z|wK`z5ww*@xR6Ypd!_5DY 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 literal 0 HcmV?d00001 diff --git a/KeyboardAudioVisualizer/Resources/KeyboardAudioVisualizer.xaml b/KeyboardAudioVisualizer/Resources/KeyboardAudioVisualizer.xaml new file mode 100644 index 0000000..6342872 --- /dev/null +++ b/KeyboardAudioVisualizer/Resources/KeyboardAudioVisualizer.xaml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/KeyboardAudioVisualizer/Styles/CachedResourceDictionary.cs b/KeyboardAudioVisualizer/Styles/CachedResourceDictionary.cs new file mode 100644 index 0000000..f476a96 --- /dev/null +++ b/KeyboardAudioVisualizer/Styles/CachedResourceDictionary.cs @@ -0,0 +1,56 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Windows; + +namespace KeyboardAudioVisualizer.Styles +{ + public class CachedResourceDictionary : ResourceDictionary + { + #region Properties & Fields + + // ReSharper disable InconsistentNaming + private static readonly List _cachedDictionaries = new List(); + private static readonly ResourceDictionary _innerDictionary = new ResourceDictionary(); + // ReSharper restore + + public new Uri Source + { + get => null; + set + { + lock (_innerDictionary) + { + UpdateCache(value); + + MergedDictionaries.Clear(); + MergedDictionaries.Add(_innerDictionary); + } + } + } + + #endregion + + #region Methods + + private static void UpdateCache(Uri source) + { + string uriPath = source.OriginalString; + if (_cachedDictionaries.Contains(uriPath)) return; + + _cachedDictionaries.Add(uriPath); + + ResourceDictionary newDictionary = new ResourceDictionary { Source = new Uri(uriPath, source.IsAbsoluteUri ? UriKind.Absolute : UriKind.Relative) }; + CopyDictionaryEntries(newDictionary, _innerDictionary); + } + + private static void CopyDictionaryEntries(IDictionary source, IDictionary target) + { + foreach (object key in source.Keys) + if (!target.Contains(key)) + target.Add(key, source[key]); + } + + #endregion + } +} diff --git a/KeyboardAudioVisualizer/Styles/FrameworkElement.xaml b/KeyboardAudioVisualizer/Styles/FrameworkElement.xaml new file mode 100644 index 0000000..557eeca --- /dev/null +++ b/KeyboardAudioVisualizer/Styles/FrameworkElement.xaml @@ -0,0 +1,13 @@ + + + + + + diff --git a/KeyboardAudioVisualizer/Styles/ImageButton.xaml b/KeyboardAudioVisualizer/Styles/ImageButton.xaml new file mode 100644 index 0000000..08f0250 --- /dev/null +++ b/KeyboardAudioVisualizer/Styles/ImageButton.xaml @@ -0,0 +1,119 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/KeyboardAudioVisualizer/Styles/Theme.xaml b/KeyboardAudioVisualizer/Styles/Theme.xaml new file mode 100644 index 0000000..d774c2b --- /dev/null +++ b/KeyboardAudioVisualizer/Styles/Theme.xaml @@ -0,0 +1,28 @@ + + + + #FFD0D0D0 + #111111 + #A0111111 + #50000000 + + + + + + + + + + + + + + + + 13 + 14 + diff --git a/KeyboardAudioVisualizer/Styles/ToolTip.xaml b/KeyboardAudioVisualizer/Styles/ToolTip.xaml new file mode 100644 index 0000000..83f228d --- /dev/null +++ b/KeyboardAudioVisualizer/Styles/ToolTip.xaml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/KeyboardAudioVisualizer/UI/ConfigurationViewModel.cs b/KeyboardAudioVisualizer/UI/ConfigurationViewModel.cs new file mode 100644 index 0000000..437e377 --- /dev/null +++ b/KeyboardAudioVisualizer/UI/ConfigurationViewModel.cs @@ -0,0 +1,29 @@ +using System.Diagnostics; +using KeyboardAudioVisualizer.Helper; + +namespace KeyboardAudioVisualizer.UI +{ + public class ConfigurationViewModel + { + #region Properties & Fields + + #endregion + + #region Commands + + private ActionCommand _openHomepageCommand; + public ActionCommand OpenHomepageCommand => _openHomepageCommand ?? (_openHomepageCommand = new ActionCommand(OpenHomepage)); + + #endregion + + #region Constructors + + #endregion + + #region Methods + + private void OpenHomepage() => Process.Start("https://github.com/DarthAffe/KeyboardAudioVisualizer"); + + #endregion + } +} diff --git a/KeyboardAudioVisualizer/UI/ConfigurationWindow.xaml b/KeyboardAudioVisualizer/UI/ConfigurationWindow.xaml new file mode 100644 index 0000000..78a4f2c --- /dev/null +++ b/KeyboardAudioVisualizer/UI/ConfigurationWindow.xaml @@ -0,0 +1,20 @@ + + + + + + + + + diff --git a/KeyboardAudioVisualizer/UI/ConfigurationWindow.xaml.cs b/KeyboardAudioVisualizer/UI/ConfigurationWindow.xaml.cs new file mode 100644 index 0000000..3fa71ce --- /dev/null +++ b/KeyboardAudioVisualizer/UI/ConfigurationWindow.xaml.cs @@ -0,0 +1,9 @@ +using KeyboardAudioVisualizer.Controls; + +namespace KeyboardAudioVisualizer.UI +{ + public partial class ConfigurationWindow : BlurredDecorationWindow + { + public ConfigurationWindow() => InitializeComponent(); + } +} diff --git a/KeyboardAudioVisualizer/packages.config b/KeyboardAudioVisualizer/packages.config new file mode 100644 index 0000000..4850754 --- /dev/null +++ b/KeyboardAudioVisualizer/packages.config @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/NuGet.Config b/NuGet.Config new file mode 100644 index 0000000..c58398e --- /dev/null +++ b/NuGet.Config @@ -0,0 +1,13 @@ + + + + + + + + + + + + +