diff --git a/Configuration/UserConfig.cs b/Configuration/UserConfig.cs index 10179735..814e373e 100644 --- a/Configuration/UserConfig.cs +++ b/Configuration/UserConfig.cs @@ -27,6 +27,7 @@ sealed class UserConfig{ public Point CustomNotificationPosition { get; set; } public int NotificationEdgeDistance { get; set; } public int NotificationDisplay { get; set; } + public int NotificationIdlePauseSeconds { get; set; } public int NotificationDurationValue { get; set; } public bool EnableSpellCheck { get; set; } diff --git a/Core/Notification/FormNotificationTweet.Designer.cs b/Core/Notification/FormNotificationTweet.Designer.cs index 8b4b5638..43cca641 100644 --- a/Core/Notification/FormNotificationTweet.Designer.cs +++ b/Core/Notification/FormNotificationTweet.Designer.cs @@ -31,6 +31,7 @@ protected override void Dispose(bool disposing) { private void InitializeComponent() { this.components = new System.ComponentModel.Container(); this.timerCursorCheck = new System.Windows.Forms.Timer(this.components); + this.timerIdlePauseCheck = new System.Windows.Forms.Timer(this.components); this.SuspendLayout(); // // timerCursorCheck @@ -38,6 +39,11 @@ private void InitializeComponent() { this.timerCursorCheck.Interval = 200; this.timerCursorCheck.Tick += new System.EventHandler(this.timerCursorCheck_Tick); // + // timerIdlePauseCheck + // + this.timerIdlePauseCheck.Interval = 750; + this.timerIdlePauseCheck.Tick += new System.EventHandler(this.timerIdlePauseCheck_Tick); + // // FormNotificationTweet // this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FormNotificationTweet_FormClosing); @@ -48,5 +54,6 @@ private void InitializeComponent() { #endregion private System.Windows.Forms.Timer timerCursorCheck; + private System.Windows.Forms.Timer timerIdlePauseCheck; } } \ No newline at end of file diff --git a/Core/Notification/FormNotificationTweet.cs b/Core/Notification/FormNotificationTweet.cs index 6775539e..a8464fe8 100644 --- a/Core/Notification/FormNotificationTweet.cs +++ b/Core/Notification/FormNotificationTweet.cs @@ -52,6 +52,13 @@ private void timerCursorCheck_Tick(object sender, EventArgs e){ } } + private void timerIdlePauseCheck_Tick(object sender, EventArgs e){ + if (NativeMethods.GetIdleSeconds() < Program.UserConfig.NotificationIdlePauseSeconds){ + ResumeNotification(); + timerIdlePauseCheck.Stop(); + } + } + // notification methods public override void ShowNotification(TweetNotification notification){ @@ -87,15 +94,26 @@ public override void ResumeNotification(){ } private void LoadNextNotification(){ - if (Program.UserConfig.NotificationNonIntrusiveMode && !IsNotificationVisible && IsCursorOverNotificationArea && NativeMethods.GetIdleSeconds() < NonIntrusiveIdleLimit){ - if (!timerCursorCheck.Enabled){ - PauseNotification(); - timerCursorCheck.Start(); + if (!IsNotificationVisible){ + if (Program.UserConfig.NotificationNonIntrusiveMode && IsCursorOverNotificationArea && NativeMethods.GetIdleSeconds() < NonIntrusiveIdleLimit){ + if (!timerCursorCheck.Enabled){ + PauseNotification(); + timerCursorCheck.Start(); + } + + return; + } + else if (Program.UserConfig.NotificationIdlePauseSeconds > 0 && NativeMethods.GetIdleSeconds() >= Program.UserConfig.NotificationIdlePauseSeconds){ + if (!timerIdlePauseCheck.Enabled){ + PauseNotification(); + timerIdlePauseCheck.Start(); + } + + return; } } - else{ - LoadTweet(tweetQueue.Dequeue()); - } + + LoadTweet(tweetQueue.Dequeue()); } protected override void UpdateTitle(){ diff --git a/Core/Other/Settings/TabSettingsNotifications.Designer.cs b/Core/Other/Settings/TabSettingsNotifications.Designer.cs index 80ded6b7..1b01b970 100644 --- a/Core/Other/Settings/TabSettingsNotifications.Designer.cs +++ b/Core/Other/Settings/TabSettingsNotifications.Designer.cs @@ -43,6 +43,8 @@ private void InitializeComponent() { this.labelDurationValue = new System.Windows.Forms.Label(); this.trackBarDuration = new System.Windows.Forms.TrackBar(); this.groupUserInterface = new System.Windows.Forms.GroupBox(); + this.labelIdlePause = new System.Windows.Forms.Label(); + this.comboBoxIdlePause = new System.Windows.Forms.ComboBox(); this.checkNonIntrusive = new System.Windows.Forms.CheckBox(); this.checkTimerCountDown = new System.Windows.Forms.CheckBox(); this.checkNotificationTimer = new System.Windows.Forms.CheckBox(); @@ -192,7 +194,7 @@ private void InitializeComponent() { this.groupNotificationDuration.Controls.Add(this.tableLayoutDurationButtons); this.groupNotificationDuration.Controls.Add(this.labelDurationValue); this.groupNotificationDuration.Controls.Add(this.trackBarDuration); - this.groupNotificationDuration.Location = new System.Drawing.Point(9, 106); + this.groupNotificationDuration.Location = new System.Drawing.Point(9, 160); this.groupNotificationDuration.Name = "groupNotificationDuration"; this.groupNotificationDuration.Size = new System.Drawing.Size(183, 89); this.groupNotificationDuration.TabIndex = 9; @@ -290,16 +292,40 @@ private void InitializeComponent() { // // groupUserInterface // + this.groupUserInterface.Controls.Add(this.labelIdlePause); + this.groupUserInterface.Controls.Add(this.comboBoxIdlePause); this.groupUserInterface.Controls.Add(this.checkNonIntrusive); this.groupUserInterface.Controls.Add(this.checkTimerCountDown); this.groupUserInterface.Controls.Add(this.checkNotificationTimer); this.groupUserInterface.Location = new System.Drawing.Point(9, 9); this.groupUserInterface.Name = "groupUserInterface"; - this.groupUserInterface.Size = new System.Drawing.Size(183, 91); + this.groupUserInterface.Size = new System.Drawing.Size(183, 145); this.groupUserInterface.TabIndex = 10; this.groupUserInterface.TabStop = false; this.groupUserInterface.Text = "General"; // + // labelIdlePause + // + this.labelIdlePause.AutoSize = true; + this.labelIdlePause.Location = new System.Drawing.Point(3, 99); + this.labelIdlePause.Margin = new System.Windows.Forms.Padding(3, 12, 3, 0); + this.labelIdlePause.Name = "labelIdlePause"; + this.labelIdlePause.Size = new System.Drawing.Size(89, 13); + this.labelIdlePause.TabIndex = 10; + this.labelIdlePause.Text = "Pause When Idle"; + // + // comboBoxIdlePause + // + this.comboBoxIdlePause.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.comboBoxIdlePause.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBoxIdlePause.FormattingEnabled = true; + this.comboBoxIdlePause.Location = new System.Drawing.Point(6, 115); + this.comboBoxIdlePause.Name = "comboBoxIdlePause"; + this.comboBoxIdlePause.Size = new System.Drawing.Size(171, 21); + this.comboBoxIdlePause.TabIndex = 9; + this.toolTip.SetToolTip(this.comboBoxIdlePause, "Pauses new notifications after going idle for a set amount of time."); + // // checkNonIntrusive // this.checkNonIntrusive.AutoSize = true; @@ -383,5 +409,7 @@ private void InitializeComponent() { private TweetDck.Core.Controls.FlatButton btnDurationLong; private TweetDck.Core.Controls.FlatButton btnDurationShort; private System.Windows.Forms.CheckBox checkNonIntrusive; + private System.Windows.Forms.Label labelIdlePause; + private System.Windows.Forms.ComboBox comboBoxIdlePause; } } diff --git a/Core/Other/Settings/TabSettingsNotifications.cs b/Core/Other/Settings/TabSettingsNotifications.cs index f1be196c..de671c2a 100644 --- a/Core/Other/Settings/TabSettingsNotifications.cs +++ b/Core/Other/Settings/TabSettingsNotifications.cs @@ -6,6 +6,8 @@ namespace TweetDck.Core.Other.Settings{ partial class TabSettingsNotifications : BaseTabSettings{ + private static readonly int[] IdlePauseSeconds = { 0, 30, 60, 120, 300 }; + private readonly FormNotificationMain notification; public TabSettingsNotifications(FormNotificationMain notification){ @@ -38,6 +40,13 @@ public TabSettingsNotifications(FormNotificationMain notification){ trackBarDuration.SetValueSafe(Config.NotificationDurationValue); labelDurationValue.Text = Config.NotificationDurationValue+" ms/c"; + comboBoxIdlePause.Items.Add("Disabled"); + comboBoxIdlePause.Items.Add("30 seconds"); + comboBoxIdlePause.Items.Add("1 minute"); + comboBoxIdlePause.Items.Add("2 minutes"); + comboBoxIdlePause.Items.Add("5 minutes"); + comboBoxIdlePause.SelectedIndex = Math.Max(0, Array.FindIndex(IdlePauseSeconds, val => val == Config.NotificationIdlePauseSeconds)); + comboBoxDisplay.Items.Add("(Same As "+Program.BrandName+")"); foreach(Screen screen in Screen.AllScreens){ @@ -73,6 +82,8 @@ public override void OnReady(){ checkTimerCountDown.CheckedChanged += checkTimerCountDown_CheckedChanged; checkNonIntrusive.CheckedChanged += checkNonIntrusive_CheckedChanged; + comboBoxIdlePause.SelectedValueChanged += comboBoxIdlePause_SelectedValueChanged; + comboBoxDisplay.SelectedValueChanged += comboBoxDisplay_SelectedValueChanged; trackBarEdgeDistance.ValueChanged += trackBarEdgeDistance_ValueChanged; } @@ -142,6 +153,10 @@ private void checkNonIntrusive_CheckedChanged(object sender, EventArgs e){ Config.NotificationNonIntrusiveMode = checkNonIntrusive.Checked; } + private void comboBoxIdlePause_SelectedValueChanged(object sender, EventArgs e){ + Config.NotificationIdlePauseSeconds = IdlePauseSeconds[comboBoxIdlePause.SelectedIndex]; + } + private void comboBoxDisplay_SelectedValueChanged(object sender, EventArgs e){ Config.NotificationDisplay = comboBoxDisplay.SelectedIndex; notification.ShowNotificationForSettings(false);