From b07457b53cfd85ee9afb8ca6077ea3c1d679c048 Mon Sep 17 00:00:00 2001 From: Paddy Xu Date: Mon, 8 May 2017 23:23:33 +0300 Subject: [PATCH] Add application icons --- .../PluginInterface.cs | 2 +- .../ViewerPanel.xaml.cs | 13 ++-- QuickLook/App.xaml.cs | 20 ++++++ QuickLook/Plugin/ContextObject.cs | 11 ++++ QuickLook/Properties/Resources.Designer.cs | 62 +++++++++++------- QuickLook/Properties/Resources.resx | 20 ++++-- QuickLook/QuickLook.csproj | 10 +++ QuickLook/Resources/app.ico | Bin 0 -> 107562 bytes QuickLook/Resources/app_white.ico | Bin 0 -> 103746 bytes QuickLook/TrayIcon.cs | 36 ++++++++++ README.md | 6 +- 11 files changed, 143 insertions(+), 37 deletions(-) create mode 100644 QuickLook/Resources/app.ico create mode 100644 QuickLook/Resources/app_white.ico create mode 100644 QuickLook/TrayIcon.cs diff --git a/QuickLook.Plugin/QuickLook.Plugin.VideoViewer/PluginInterface.cs b/QuickLook.Plugin/QuickLook.Plugin.VideoViewer/PluginInterface.cs index def0646..ec1076e 100644 --- a/QuickLook.Plugin/QuickLook.Plugin.VideoViewer/PluginInterface.cs +++ b/QuickLook.Plugin/QuickLook.Plugin.VideoViewer/PluginInterface.cs @@ -41,7 +41,7 @@ namespace QuickLook.Plugin.VideoViewer public void View(string path, ContextObject context) { - _vp = new ViewerPanel(); + _vp = new ViewerPanel(context); context.ViewerContent = _vp; diff --git a/QuickLook.Plugin/QuickLook.Plugin.VideoViewer/ViewerPanel.xaml.cs b/QuickLook.Plugin/QuickLook.Plugin.VideoViewer/ViewerPanel.xaml.cs index b245c11..f0635e4 100644 --- a/QuickLook.Plugin/QuickLook.Plugin.VideoViewer/ViewerPanel.xaml.cs +++ b/QuickLook.Plugin/QuickLook.Plugin.VideoViewer/ViewerPanel.xaml.cs @@ -13,7 +13,9 @@ namespace QuickLook.Plugin.VideoViewer /// public partial class ViewerPanel : UserControl, IDisposable { - public ViewerPanel() + private ContextObject _context; + + public ViewerPanel(ContextObject context) { InitializeComponent(); @@ -21,8 +23,8 @@ namespace QuickLook.Plugin.VideoViewer mediaElement.PropertyChanged += ChangePlayPauseButton; mediaElement.MouseLeftButtonUp += TogglePlayPause; - mediaElement.MediaErrored += ShowErrorOverlay; - mediaElement.MediaFailed += ShowErrorOverlay; + mediaElement.MediaErrored += ShowErrorNotification; + mediaElement.MediaFailed += ShowErrorNotification; } public void Dispose() @@ -48,10 +50,11 @@ namespace QuickLook.Plugin.VideoViewer : FontAwesomeIcon.PlayCircleOutline; } - private void ShowErrorOverlay(object sender, MediaErrorRoutedEventArgs e) + private void ShowErrorNotification(object sender, MediaErrorRoutedEventArgs e) { mediaElement.Stop(); - errorOverlay.Visibility = Visibility.Visible; + + _context.ShowNotification("", "An error occurred while loading the video."); } public void LoadAndPlay(string path) diff --git a/QuickLook/App.xaml.cs b/QuickLook/App.xaml.cs index b6e84b2..6e101a5 100644 --- a/QuickLook/App.xaml.cs +++ b/QuickLook/App.xaml.cs @@ -1,6 +1,8 @@ using System; using System.IO; +using System.Linq; using System.Reflection; +using System.Threading; using System.Windows; namespace QuickLook @@ -13,6 +15,8 @@ namespace QuickLook public static readonly string AppFullPath = Assembly.GetExecutingAssembly().Location; public static readonly string AppPath = Path.GetDirectoryName(AppFullPath); + private Mutex isRunning; + protected override void OnStartup(StartupEventArgs e) { AppDomain.CurrentDomain.UnhandledException += @@ -24,9 +28,25 @@ namespace QuickLook private void Application_Startup(object sender, StartupEventArgs e) { + EnsureSingleInstance(); + + if (!e.Args.Contains("/autorun")) + TrayIcon.GetInstance().ShowNotification("", "QuickLook is running in the background."); + PluginManager.GetInstance(); BackgroundListener.GetInstance(); } + + private void EnsureSingleInstance() + { + bool isNew = false; + isRunning = new Mutex(true, "QuickLook.App", out isNew); + if (!isNew) + { + MessageBox.Show("QuickLook is already running in the background."); + Current.Shutdown(); + } + } } } \ No newline at end of file diff --git a/QuickLook/Plugin/ContextObject.cs b/QuickLook/Plugin/ContextObject.cs index e83d0a6..c476d09 100644 --- a/QuickLook/Plugin/ContextObject.cs +++ b/QuickLook/Plugin/ContextObject.cs @@ -30,6 +30,17 @@ namespace QuickLook.Plugin } } + /// + /// Show a notification balloon. + /// + /// Title of the notification. + /// The content. + /// Is this indicates a error? + public void ShowNotification(string title, string content, bool isError = false) + { + TrayIcon.GetInstance().ShowNotification(title, content, isError); + } + /// /// Get or set the viewer content control. /// diff --git a/QuickLook/Properties/Resources.Designer.cs b/QuickLook/Properties/Resources.Designer.cs index b98ee60..ee5fc6d 100644 --- a/QuickLook/Properties/Resources.Designer.cs +++ b/QuickLook/Properties/Resources.Designer.cs @@ -8,10 +8,10 @@ // //------------------------------------------------------------------------------ -namespace QuickLook.Properties -{ - - +namespace QuickLook.Properties { + using System; + + /// /// A strongly-typed resource class, for looking up localized strings, etc. /// @@ -22,50 +22,62 @@ namespace QuickLook.Properties [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 - { - + 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() - { + 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)) - { + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("QuickLook.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 - { + internal static global::System.Globalization.CultureInfo Culture { + get { return resourceCulture; } - set - { + set { resourceCulture = value; } } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon app { + get { + object obj = ResourceManager.GetObject("app", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon app_white { + get { + object obj = ResourceManager.GetObject("app_white", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } } } diff --git a/QuickLook/Properties/Resources.resx b/QuickLook/Properties/Resources.resx index af7dbeb..c156f27 100644 --- a/QuickLook/Properties/Resources.resx +++ b/QuickLook/Properties/Resources.resx @@ -46,7 +46,7 @@ mimetype: application/x-microsoft.net.object.binary.base64 value : The object must be serialized with - : System.Serialization.Formatters.Binary.BinaryFormatter + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter : and then encoded with base64 encoding. mimetype: application/x-microsoft.net.object.soap.base64 @@ -60,6 +60,7 @@ : and then encoded with base64 encoding. --> + @@ -68,9 +69,10 @@ - + + @@ -85,9 +87,10 @@ - + + @@ -109,9 +112,16 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\Resources\app.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\app_white.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/QuickLook/QuickLook.csproj b/QuickLook/QuickLook.csproj index c9b7589..6604217 100644 --- a/QuickLook/QuickLook.csproj +++ b/QuickLook/QuickLook.csproj @@ -48,6 +48,9 @@ prompt 4 + + Resources\app.ico + ..\packages\FontAwesome.WPF.4.7.0.9\lib\net40\FontAwesome.WPF.dll @@ -90,6 +93,7 @@ + ViewContentContainer.xaml @@ -172,5 +176,11 @@ false + + + + + + \ No newline at end of file diff --git a/QuickLook/Resources/app.ico b/QuickLook/Resources/app.ico new file mode 100644 index 0000000000000000000000000000000000000000..dc7e486dadc2c298d4c3bc2c362dea0c819feb8b GIT binary patch literal 107562 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 I81tR~2kbv^hX4Qo literal 0 HcmV?d00001 diff --git a/QuickLook/Resources/app_white.ico b/QuickLook/Resources/app_white.ico new file mode 100644 index 0000000000000000000000000000000000000000..e0652e86835d26740db9377817b5d65cfb87423d GIT binary patch literal 103746 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 literal 0 HcmV?d00001 diff --git a/QuickLook/TrayIcon.cs b/QuickLook/TrayIcon.cs new file mode 100644 index 0000000..95e2146 --- /dev/null +++ b/QuickLook/TrayIcon.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace QuickLook +{ + public class TrayIcon + { + private static TrayIcon _instance; + + private NotifyIcon _icon; + + internal TrayIcon() + { + _icon = new NotifyIcon + { + Icon = Properties.Resources.app_white, + Visible = true + }; + } + + public void ShowNotification(string title, string content, bool isError = false) + { + _icon.ShowBalloonTip(5000, title, content, isError ? ToolTipIcon.Error : ToolTipIcon.Info); + } + + internal static TrayIcon GetInstance() + { + return _instance ?? (_instance = new TrayIcon()); + } + } +} diff --git a/README.md b/README.md index 2e6428a..e43d0b8 100644 --- a/README.md +++ b/README.md @@ -29,5 +29,9 @@ Hotkeys in preview window: ## Development -The previewing ability can be extended by new plugins. Read the [plugin interface](https://github.com/xupefei/QuickLook/blob/master/QuickLook/Plugin/IViewer.cs), [context object](https://github.com/xupefei/QuickLook/blob/master/QuickLook/Plugin/ContextObject.cs) for more information. [Pre-shipped plugins](https://github.com/xupefei/QuickLook/tree/master/QuickLook.Plugin) contains more detailed implementation. +The previewing ability can be extended by new plugins. Read the [plugin interface](https://github.com/xupefei/QuickLook/blob/master/QuickLook/Plugin/IViewer.cs), [context object](https://github.com/xupefei/QuickLook/blob/master/QuickLook/Plugin/ContextObject.cs) for more information. [Pre-shipped plugins](https://github.com/xupefei/QuickLook/tree/master/QuickLook.Plugin) contains more detailed implementation. Note that any plugin must be under the `QuickLook.Plugin` namespace, has the filename similar to `QuickLook.Plugin.YourPlugin.dll` and placed under `\Plugins\QuickLook.Plugin.YourPlugin\` subfolder. + +## Licenses + +Application icons made by Freepik from www.flaticon.com. Used under the [Flaticon Basic License](http://file000.flaticon.com/downloads/license/license.pdf).