From f18fcd2a14f0e680daf790e49d33479a5ef6dd39 Mon Sep 17 00:00:00 2001 From: Vitalii Ganzha Date: Fri, 12 Jun 2015 14:09:04 -0700 Subject: [PATCH] version 1.5, taskbar notificaitons --- README.md | 9 +++ VsDingExtension.sln | 1 + .../source.extension.vsixmanifest | 2 +- VsDingExtensionProject/OptionsDialog.cs | 21 ++++--- VsDingExtensionProject/ReleaseNotes.txt | 8 ++- .../VsDingExtensionProjectPackage.cs | 60 +++++++++++++++---- .../source.extension.vsixmanifest | 2 +- 7 files changed, 81 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 147c3d0..187ec8d 100644 --- a/README.md +++ b/README.md @@ -14,3 +14,12 @@ Useful when working with big solutions or when build/test run/hitting a breakpoi This is an open source project, join! Twitter: @GanzhaVitalii + +Version 1.5: +* Added Task bar notifications. (https://github.com/thecoderok/vsdingextension/issues/1) + It can be disabled in Tools->Options->Ding->Show tray notifications + +Version 1.4: +* Added options dialog (Tools->Options->Ding). Now it is possible to enable/disable what sounds to play. Thanks to https://github.com/dannoh +* Added option to play sounds only if Visual Studio in background. Thanks to https://github.com/dannoh +* Support for Visual studio 2015 \ No newline at end of file diff --git a/VsDingExtension.sln b/VsDingExtension.sln index 43557f0..061d5db 100644 --- a/VsDingExtension.sln +++ b/VsDingExtension.sln @@ -6,6 +6,7 @@ MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{5BD9D4DB-8683-4698-8D24-01EE7306F73A}" ProjectSection(SolutionItems) = preProject IntegrationTests.testsettings = IntegrationTests.testsettings + README.md = README.md UnitTests.testsettings = UnitTests.testsettings EndProjectSection EndProject diff --git a/VsDingExtensionFor2012/source.extension.vsixmanifest b/VsDingExtensionFor2012/source.extension.vsixmanifest index c46da4f..f901a41 100644 --- a/VsDingExtensionFor2012/source.extension.vsixmanifest +++ b/VsDingExtensionFor2012/source.extension.vsixmanifest @@ -1,7 +1,7 @@  - + Visual Studio Ding extension for VS 2012 This small extension will play notification sounds when following events occur: - Build Complete diff --git a/VsDingExtensionProject/OptionsDialog.cs b/VsDingExtensionProject/OptionsDialog.cs index d1f1d9a..ad73042 100644 --- a/VsDingExtensionProject/OptionsDialog.cs +++ b/VsDingExtensionProject/OptionsDialog.cs @@ -12,28 +12,33 @@ namespace VitaliiGanzha.VsDingExtension [Category("Beeps")] [DisplayName("Breakpoint")] [Description("Beep when a breakpoint is hit")] - public bool BreakpointBeep { get; set; } + public bool IsBeepOnBreakpointHit { get; set; } [Category("Beeps")] [DisplayName("Build")] [Description("Beep when a build is completed")] - public bool BuildBeep { get; set; } + public bool IsBeepOnBuildComplete { get; set; } [Category("Beeps")] [DisplayName("Tests")] [Description("Beep when a test run is completed")] - public bool TestBeep { get; set; } + public bool IsBuildOnTestComplete { get; set; } [DisplayName("Only when in background")] [Description("Beep only when Visual Studio does not have focus")] - public bool BeepOnUnfocus { get; set; } + public bool IsBeepOnlyWhenVisualStudioIsInBackground { get; set; } + + [DisplayName("Show tray notifications")] + [Description("Show tray notifications for enabled events")] + public bool ShowTrayNotifications { get; set; } public OptionsDialog() { - BreakpointBeep = true; - BuildBeep = true; - TestBeep = true; - BeepOnUnfocus = false; + IsBeepOnBreakpointHit = true; + IsBeepOnBuildComplete = true; + IsBuildOnTestComplete = true; + ShowTrayNotifications = true; + IsBeepOnlyWhenVisualStudioIsInBackground = false; } } } diff --git a/VsDingExtensionProject/ReleaseNotes.txt b/VsDingExtensionProject/ReleaseNotes.txt index 27cf99b..dc32b66 100644 --- a/VsDingExtensionProject/ReleaseNotes.txt +++ b/VsDingExtensionProject/ReleaseNotes.txt @@ -1,4 +1,8 @@ -Version 1.4: +Version 1.5: +* Added Task bar notifications. (https://github.com/thecoderok/vsdingextension/issues/1) + It can be disabled in Tools->Options->Ding->Show tray notifications + +Version 1.4: * Added options dialog (Tools->Options->Ding). Now it is possible to enable/disable what sounds to play. Thanks to https://github.com/dannoh * Added option to play sounds only if Visual Studio in background. Thanks to https://github.com/dannoh -* Support for Visual studio 2015 +* Support for Visual studio 2015 \ No newline at end of file diff --git a/VsDingExtensionProject/VsDingExtensionProjectPackage.cs b/VsDingExtensionProject/VsDingExtensionProjectPackage.cs index cb0e258..5b5f895 100644 --- a/VsDingExtensionProject/VsDingExtensionProjectPackage.cs +++ b/VsDingExtensionProject/VsDingExtensionProjectPackage.cs @@ -2,9 +2,11 @@ { using System; using System.Diagnostics; + using System.Drawing; using System.Globalization; using System.Media; using System.Runtime.InteropServices; + using System.Windows.Forms; using EnvDTE; @@ -59,14 +61,17 @@ buildEvents.OnBuildDone += (scope, action) => { - if (Options.BuildBeep) - PlaySafe(buildCompleteSoundPlayer); + if (Options.IsBeepOnBuildComplete) + { + HandleEventSafe(buildCompleteSoundPlayer, "Build has been completed."); + } }; + debugEvents.OnEnterBreakMode += delegate(dbgEventReason reason, ref dbgExecutionAction action) { - if (reason != dbgEventReason.dbgEventReasonStep && Options.BreakpointBeep) + if (reason != dbgEventReason.dbgEventReasonStep && Options.IsBeepOnBreakpointHit) { - PlaySafe(debugSoundPlayer); + HandleEventSafe(debugSoundPlayer, "Breakpoint was hit."); } }; @@ -95,7 +100,42 @@ } } - private void PlaySafe(SoundPlayer soundPlayer) + private void HandleEventSafe(SoundPlayer soundPlayer, string messageText) + { + PlaySoundSafe(soundPlayer); + ShowNotifyMessage(messageText); + } + + private void ShowNotifyMessage(string messageText) + { + if (!_options.ShowTrayNotifications) + { + return; + } + + string autoAppendMessage = System.Environment.NewLine + "You can disable this notification in:" + System.Environment.NewLine + "Tools->Options->Ding->Show tray notifications"; + messageText = string.Format("{0}{1}", messageText, autoAppendMessage); + + System.Threading.Tasks.Task.Run(async () => + { + var tray = new NotifyIcon + { + Icon = SystemIcons.Application, + BalloonTipIcon = ToolTipIcon.Info, + BalloonTipText = messageText, + BalloonTipTitle = "Visual Studio Ding extension", + Visible = true + }; + + tray.ShowBalloonTip(5000); + await System.Threading.Tasks.Task.Delay(5000); + tray.Icon = (Icon)null; + tray.Visible = false; + tray.Dispose(); + }); + } + + private void PlaySoundSafe(SoundPlayer soundPlayer) { if (ShouldPlaySound()) { @@ -112,23 +152,23 @@ private bool ShouldPlaySound() { - if (!Options.BeepOnUnfocus) + if (!Options.IsBeepOnlyWhenVisualStudioIsInBackground) { return true; } - return Options.BeepOnUnfocus && !ApplicationIsActivated(); + return Options.IsBeepOnlyWhenVisualStudioIsInBackground && !ApplicationIsActivated(); } private void OperationStateOnStateChanged(object sender, OperationStateChangedEventArgs operationStateChangedEventArgs) { - if (Options.TestBeep && operationStateChangedEventArgs.State.HasFlag(TestOperationStates.TestExecutionFinished)) + if (Options.IsBuildOnTestComplete && operationStateChangedEventArgs.State.HasFlag(TestOperationStates.TestExecutionFinished)) { - PlaySafe(testCompleteSoundPlayer); + HandleEventSafe(testCompleteSoundPlayer, "Test execution has been completed."); } } #endregion - public bool ApplicationIsActivated() + private bool ApplicationIsActivated() { var activatedHandle = GetForegroundWindow(); if (activatedHandle == IntPtr.Zero) diff --git a/VsDingExtensionProject/source.extension.vsixmanifest b/VsDingExtensionProject/source.extension.vsixmanifest index 975ac3f..3737064 100644 --- a/VsDingExtensionProject/source.extension.vsixmanifest +++ b/VsDingExtensionProject/source.extension.vsixmanifest @@ -1,7 +1,7 @@  - + Visual Studio Ding extension This small extension will play notification sounds when following events occur: - Build Complete