From 3ba8e1b177253b0a1ab0827f4e735cbacfdd10a5 Mon Sep 17 00:00:00 2001 From: Manuel Kamper Date: Fri, 22 Mar 2019 22:31:50 +0100 Subject: [PATCH] Initial checkin --- Mk0.GUI.Banner.sln | 25 ++++ Mk0.GUI.Banner/Banner.cs | 164 ++++++++++++++++++++++ Mk0.GUI.Banner/BannerObject.cs | 29 ++++ Mk0.GUI.Banner/Mk0.GUI.Banner.csproj | 48 +++++++ Mk0.GUI.Banner/Properties/AssemblyInfo.cs | 36 +++++ Mk0.GUI.Banner/Queue.cs | 14 ++ Mk0.GUI.Banner/Settings.cs | 16 +++ 7 files changed, 332 insertions(+) create mode 100644 Mk0.GUI.Banner.sln create mode 100644 Mk0.GUI.Banner/Banner.cs create mode 100644 Mk0.GUI.Banner/BannerObject.cs create mode 100644 Mk0.GUI.Banner/Mk0.GUI.Banner.csproj create mode 100644 Mk0.GUI.Banner/Properties/AssemblyInfo.cs create mode 100644 Mk0.GUI.Banner/Queue.cs create mode 100644 Mk0.GUI.Banner/Settings.cs diff --git a/Mk0.GUI.Banner.sln b/Mk0.GUI.Banner.sln new file mode 100644 index 0000000..f124feb --- /dev/null +++ b/Mk0.GUI.Banner.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.28307.438 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mk0.GUI.Banner", "Mk0.GUI.Banner\Mk0.GUI.Banner.csproj", "{4B628B83-433B-47C8-AF97-D4BC288168BB}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {4B628B83-433B-47C8-AF97-D4BC288168BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4B628B83-433B-47C8-AF97-D4BC288168BB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4B628B83-433B-47C8-AF97-D4BC288168BB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4B628B83-433B-47C8-AF97-D4BC288168BB}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {A1D6866B-6D2E-401B-BEF7-A00488F69584} + EndGlobalSection +EndGlobal diff --git a/Mk0.GUI.Banner/Banner.cs b/Mk0.GUI.Banner/Banner.cs new file mode 100644 index 0000000..511b1c7 --- /dev/null +++ b/Mk0.GUI.Banner/Banner.cs @@ -0,0 +1,164 @@ +using System; +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; + +namespace Mk0.GUI.Banner +{ + public class Banner + { + private readonly Settings settings; + private readonly Queue queue; + private readonly Timer timerEinblenden; + private readonly Timer timerAnzeigen; + private readonly Timer timerAusblenden; + private readonly Panel bannerPanel; + private bool messagesRunning = false; + private PictureBox pb1; + private PictureBox pb2; + private Label l1; + private Label l2; + + public Banner(IContainer container, Panel bannerPanel, PictureBox pb1, PictureBox pb2, Label l1, Label l2) + { + settings = new Settings(); + queue = new Queue(); + this.bannerPanel = bannerPanel; + this.pb1 = pb1; + this.pb2 = pb2; + this.l1 = l1; + this.l2 = l2; + + timerEinblenden = new Timer(container) + { + Interval = settings.TimerEinblendenIntervall + }; + timerEinblenden.Tick += new EventHandler(TimerEinblenden_Tick); + timerAnzeigen = new Timer(container) + { + Interval = settings.TimerAnzeigenIntervall + }; + timerAnzeigen.Tick += new EventHandler(TimerAnzeigen_Tick); + timerAusblenden = new Timer(container) + { + Interval = settings.TimerAusblendenIntervall + }; + timerAusblenden.Tick += new EventHandler(TimerAusblenden_Tick); + } + + private void TimerEinblenden_Tick(object sender, EventArgs e) + { + //einblenden + if (bannerPanel.Location != new Point(0, 0)) + { + bannerPanel.Location = new Point(bannerPanel.Location.X, bannerPanel.Location.Y + 1); + } + else + { + timerEinblenden.Stop(); + if (queue.bol.Count < 2) + { + timerAnzeigen.Interval = 1500; + } + else if (queue.bol.Count < 5) + { + timerAnzeigen.Interval = 1000; + } + else if (queue.bol.Count < 10) + { + timerAnzeigen.Interval = 750; + } + else if (queue.bol.Count < 15) + { + timerAnzeigen.Interval = 500; + } + else + { + timerAnzeigen.Interval = 250; + } + timerAnzeigen.Start(); + } + } + + private void TimerAnzeigen_Tick(object sender, EventArgs e) + { + //anzeigen + timerAnzeigen.Stop(); + timerAusblenden.Start(); + } + + private void TimerAusblenden_Tick(object sender, EventArgs e) + { + //ausblenden + if (bannerPanel.Location != new Point(0, -(bannerPanel.Height + 2))) + { + bannerPanel.Location = new Point(bannerPanel.Location.X, bannerPanel.Location.Y - 1); + } + else + { + timerAusblenden.Stop(); + if (queue.bol.Count > 0) + { + ShowMessages(true); + } + else + { + messagesRunning = false; + } + } + } + + public void Enqueue(string label1Text, string label2Text, string pb1ImageLocation, Image pb2Image) + { + BannerObject bo = new BannerObject(label1Text, label2Text, pb1ImageLocation, pb2Image); + queue.bol.Enqueue(bo); + } + + public void Enqueue(string label1Text, string label2Text, Image pb1Image, Image pb2Image) + { + BannerObject bo = new BannerObject(label1Text, label2Text, pb1Image, pb2Image); + queue.bol.Enqueue(bo); + } + + public void SetTimerEinblendenIntervall(int intervall) + { + settings.TimerEinblendenIntervall = intervall; + } + + public void SetTimerAnzeigenIntervall(int intervall) + { + settings.TimerAnzeigenIntervall = intervall; + } + + public void SetTimerAusblendenIntervall(int intervall) + { + settings.TimerAusblendenIntervall = intervall; + } + + public void ShowMessages(bool doit = false) + { + if (!messagesRunning || doit) + { + messagesRunning = true; + + if (queue.bol.Count > 0) + { + BannerObject bo = queue.bol.Dequeue(); + if (bo.Pb1ImageLocation != null) + { + pb1.ImageLocation = bo.Pb1ImageLocation; + } + else + { + pb1.Image = bo.Pb1Image; + } + pb2.Image = bo.Pb2Image; + l1.Text = bo.Label1Text; + l2.Text = bo.Label2Text; + bannerPanel.Location = new Point(bannerPanel.Location.X, bannerPanel.Location.Y - (bannerPanel.Height + 2)); + timerEinblenden.Start(); + } + } + } + } +} diff --git a/Mk0.GUI.Banner/BannerObject.cs b/Mk0.GUI.Banner/BannerObject.cs new file mode 100644 index 0000000..21324bb --- /dev/null +++ b/Mk0.GUI.Banner/BannerObject.cs @@ -0,0 +1,29 @@ +using System.Drawing; + +namespace Mk0.GUI.Banner +{ + internal class BannerObject + { + internal string Label1Text { get; } + internal string Label2Text { get; } + internal string Pb1ImageLocation { get; } + internal Image Pb1Image { get; } + internal Image Pb2Image { get; } + + internal BannerObject(string label1Text, string label2Text, string pb1ImageLocation, Image pb2Image) + { + Label1Text = label1Text; + Label2Text = label2Text; + Pb1ImageLocation = pb1ImageLocation; + Pb2Image = pb2Image; + } + + internal BannerObject(string label1Text, string label2Text, Image pb1Image, Image pb2Image) + { + Label1Text = label1Text; + Label2Text = label2Text; + Pb1Image = pb1Image; + Pb2Image = pb2Image; + } + } +} diff --git a/Mk0.GUI.Banner/Mk0.GUI.Banner.csproj b/Mk0.GUI.Banner/Mk0.GUI.Banner.csproj new file mode 100644 index 0000000..7853af6 --- /dev/null +++ b/Mk0.GUI.Banner/Mk0.GUI.Banner.csproj @@ -0,0 +1,48 @@ + + + + + Debug + AnyCPU + {4B628B83-433B-47C8-AF97-D4BC288168BB} + Library + Properties + Mk0.GUI.Banner + Mk0.GUI.Banner + v4.6.1 + 512 + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Mk0.GUI.Banner/Properties/AssemblyInfo.cs b/Mk0.GUI.Banner/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..598e661 --- /dev/null +++ b/Mk0.GUI.Banner/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// Allgemeine Informationen über eine Assembly werden über die folgenden +// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, +// die einer Assembly zugeordnet sind. +[assembly: AssemblyTitle("Mk0.GUI.Banner")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Mk0.GUI.Banner")] +[assembly: AssemblyCopyright("Copyright © 2019 mk0.at")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly +// für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von +// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen. +[assembly: ComVisible(false)] + +// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird +[assembly: Guid("4b628b83-433b-47c8-af97-d4bc288168bb")] + +// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: +// +// Hauptversion +// Nebenversion +// Buildnummer +// Revision +// +// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden, +// indem Sie "*" wie unten gezeigt eingeben: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Mk0.GUI.Banner/Queue.cs b/Mk0.GUI.Banner/Queue.cs new file mode 100644 index 0000000..cd97f55 --- /dev/null +++ b/Mk0.GUI.Banner/Queue.cs @@ -0,0 +1,14 @@ +using System.Collections.Generic; + +namespace Mk0.GUI.Banner +{ + public class Queue + { + internal readonly Queue bol; + + internal Queue() + { + bol = new Queue(); + } + } +} diff --git a/Mk0.GUI.Banner/Settings.cs b/Mk0.GUI.Banner/Settings.cs new file mode 100644 index 0000000..d004b5e --- /dev/null +++ b/Mk0.GUI.Banner/Settings.cs @@ -0,0 +1,16 @@ +namespace Mk0.GUI.Banner +{ + public class Settings + { + internal int TimerEinblendenIntervall { get; set; } + internal int TimerAnzeigenIntervall { get; set; } + internal int TimerAusblendenIntervall { get; set; } + + internal Settings() + { + TimerEinblendenIntervall = 10; + TimerAnzeigenIntervall = 1500; + TimerAusblendenIntervall = 10; + } + } +}