From a7dcf3611c3d5b57d4f474636eccc2a2c646a58f Mon Sep 17 00:00:00 2001 From: mshafer1 <2565361+mshafer1@users.noreply.github.com> Date: Fri, 20 Dec 2024 11:29:22 -0600 Subject: [PATCH] make tray pop up and make it work --- ntfysh_client/MainForm.cs | 7 +- ntfysh_client/NotificationDialog.Designer.cs | 85 +++++++++++++ ntfysh_client/NotificationDialog.cs | 84 +++++++++++++ ntfysh_client/NotificationDialog.resx | 120 +++++++++++++++++++ 4 files changed, 295 insertions(+), 1 deletion(-) create mode 100644 ntfysh_client/NotificationDialog.Designer.cs create mode 100644 ntfysh_client/NotificationDialog.cs create mode 100644 ntfysh_client/NotificationDialog.resx diff --git a/ntfysh_client/MainForm.cs b/ntfysh_client/MainForm.cs index cc2cdfa..465c960 100644 --- a/ntfysh_client/MainForm.cs +++ b/ntfysh_client/MainForm.cs @@ -16,6 +16,7 @@ namespace ntfysh_client private readonly NotificationListener _notificationListener; private bool _startInTray; private bool _trueExit; + private NotificationDialog notificationDialog; public MainForm(NotificationListener notificationListener, bool startInTray = false) { @@ -32,6 +33,8 @@ namespace ntfysh_client { LoadSettings(); LoadTopics(); + + this.notificationDialog = new NotificationDialog(); } protected override void SetVisibleCore(bool value) @@ -70,7 +73,9 @@ namespace ntfysh_client string finalTitle = string.IsNullOrWhiteSpace(e.Title) ? $"{e.Sender.TopicId}@{e.Sender.ServerUrl}" : e.Title; - notifyIcon.ShowBalloonTip((int)TimeSpan.FromSeconds((double)Program.Settings.Timeout).TotalMilliseconds, finalTitle, e.Message, priorityIcon); + //notifyIcon.ShowBalloonTip((int)TimeSpan.FromSeconds((double)Program.Settings.Timeout).TotalMilliseconds, finalTitle, e.Message, priorityIcon); + //this.notificationDialog.IsVisible = true; + this.notificationDialog.ShowNotification(finalTitle, e.Message); } private void OnConnectionMultiAttemptFailure(NotificationListener sender, SubscribedTopic topic) diff --git a/ntfysh_client/NotificationDialog.Designer.cs b/ntfysh_client/NotificationDialog.Designer.cs new file mode 100644 index 0000000..8025dd2 --- /dev/null +++ b/ntfysh_client/NotificationDialog.Designer.cs @@ -0,0 +1,85 @@ +namespace ntfysh_client +{ + partial class NotificationDialog + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + tbTitle = new System.Windows.Forms.TextBox(); + button1 = new System.Windows.Forms.Button(); + tbMessage = new System.Windows.Forms.TextBox(); + SuspendLayout(); + // + // tbTitle + // + tbTitle.Location = new System.Drawing.Point(12, 58); + tbTitle.Name = "tbTitle"; + tbTitle.ReadOnly = true; + tbTitle.Size = new System.Drawing.Size(725, 23); + tbTitle.TabIndex = 0; + // + // button1 + // + button1.Location = new System.Drawing.Point(759, 7); + button1.Name = "button1"; + button1.Size = new System.Drawing.Size(29, 38); + button1.TabIndex = 1; + button1.Text = "x"; + button1.UseVisualStyleBackColor = true; + button1.Click += btnClose_Click; + // + // tbMessage + // + tbMessage.Location = new System.Drawing.Point(12, 97); + tbMessage.Multiline = true; + tbMessage.Name = "tbMessage"; + tbMessage.ReadOnly = true; + tbMessage.Size = new System.Drawing.Size(725, 253); + tbMessage.TabIndex = 2; + // + // NotificationDialog + // + AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + BackColor = System.Drawing.SystemColors.ControlDark; + ClientSize = new System.Drawing.Size(800, 450); + Controls.Add(tbMessage); + Controls.Add(button1); + Controls.Add(tbTitle); + FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + Name = "NotificationDialog"; + Text = "NotificationDialog"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private System.Windows.Forms.TextBox tbTitle; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.TextBox tbMessage; + } +} \ No newline at end of file diff --git a/ntfysh_client/NotificationDialog.cs b/ntfysh_client/NotificationDialog.cs new file mode 100644 index 0000000..81767e2 --- /dev/null +++ b/ntfysh_client/NotificationDialog.cs @@ -0,0 +1,84 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Runtime.InteropServices; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using static System.Windows.Forms.VisualStyles.VisualStyleElement; + +namespace ntfysh_client +{ + public partial class NotificationDialog : Form + { + [DllImport("user32.dll", CharSet = CharSet.Auto)] + private static extern bool AnimateWindow(IntPtr hWnd, int time, int flags); + + private const int ScreenMargin = 20; + + private void SetWindowPosition() + { + int workingtop = Screen.PrimaryScreen.WorkingArea.Height - this.Height; + this.Top = workingtop - NotificationDialog.ScreenMargin; + + int workingleft = Screen.PrimaryScreen.WorkingArea.Width - this.Width; + this.Left = workingleft - NotificationDialog.ScreenMargin; + } + + protected override void SetVisibleCore(bool value) + { + //base.SetVisibleCore(false); + this.SetWindowPosition(); + if (value) + { + this.BringToFront(); + AnimateWindow(this.Handle, 250, 0x00040000 | 0x00000008); + } + base.SetVisibleCore(value); + } + + public void ShowNotification(string title, string message) + { + this.tbTitle.Text = title; + this.tbMessage.Text = message; + this.Show(); + this.SetWindowPosition(); + } + + public bool IsVisible + { + get { return this.Visible; } + set { this.Visible = value; } + } + + protected override void OnShown(EventArgs e) + { + + base.OnShown(e); + } + + public NotificationDialog() + { + this.IsVisible = false; + InitializeComponent(); + InitializeWindowHidden(); + } + + private void InitializeWindowHidden() + { + this.Opacity = 0; + this.ShowNotification("Title", "Message"); + this.IsVisible = false; + this.Opacity = 1; + } + + private void btnClose_Click(object sender, EventArgs e) + { + this.IsVisible = false; + } + } +} diff --git a/ntfysh_client/NotificationDialog.resx b/ntfysh_client/NotificationDialog.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/ntfysh_client/NotificationDialog.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file