commit dc7ee1b321579b63e1feba0aa2481abbbd6abeac Author: BlubbFish Date: Wed Jan 20 17:21:55 2016 +0000 Init of TimeKeeper diff --git a/TimeKeeper.sln b/TimeKeeper.sln new file mode 100644 index 0000000..0c45a0d --- /dev/null +++ b/TimeKeeper.sln @@ -0,0 +1,26 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2012 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TimeKeeper", "TimeKeeper\TimeKeeper.csproj", "{25F58397-71CB-4298-979E-BAACE80C61CB}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Utils", "..\Utils\Utils\Utils.csproj", "{FAC8CE64-BF13-4ECE-8097-AEB5DD060098}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {25F58397-71CB-4298-979E-BAACE80C61CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {25F58397-71CB-4298-979E-BAACE80C61CB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {25F58397-71CB-4298-979E-BAACE80C61CB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {25F58397-71CB-4298-979E-BAACE80C61CB}.Release|Any CPU.Build.0 = Release|Any CPU + {FAC8CE64-BF13-4ECE-8097-AEB5DD060098}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FAC8CE64-BF13-4ECE-8097-AEB5DD060098}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FAC8CE64-BF13-4ECE-8097-AEB5DD060098}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FAC8CE64-BF13-4ECE-8097-AEB5DD060098}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/TimeKeeper/Controller/CTray.cs b/TimeKeeper/Controller/CTray.cs new file mode 100644 index 0000000..3610f85 --- /dev/null +++ b/TimeKeeper/Controller/CTray.cs @@ -0,0 +1,47 @@ +using BlubbFish.Utils; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace TimeKeeper.Controller { + class Tray : OwnController { + private static View.Tray tray; + private static Controller.Window window; + + override protected void init() { + tray = new View.Tray(); + window = new Controller.Window(); + } + + /// + /// User klickt Doppelt auf das TrayIcon + /// + /// + /// + internal static void Click_Tray(object sender, EventArgs e) { + Click_Open(sender, e); + } + + /// + /// User klickt auf den Eintrag Öffnen + /// + /// + /// + internal static void Click_Open(object sender, EventArgs e) { + window.execute(); + } + + /// + /// User klickt auf den Eintrag Beenden + /// + /// + /// + internal static void Click_Quit(object sender, EventArgs e) { + tray.Dispose(); + Application.Exit(); + } + } +} diff --git a/TimeKeeper/Controller/CWindow.cs b/TimeKeeper/Controller/CWindow.cs new file mode 100644 index 0000000..07b488e --- /dev/null +++ b/TimeKeeper/Controller/CWindow.cs @@ -0,0 +1,25 @@ +using BlubbFish.Utils; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace TimeKeeper.Controller { + class Window : OwnController { + private static View.Window window; + + public Window() { + + } + + override protected void init() { + window = new View.Window(); + } + + public static void FormClosed(object sender, FormClosedEventArgs e) { + window.Dispose(); + } + } +} diff --git a/TimeKeeper/Models/MTray.cs b/TimeKeeper/Models/MTray.cs new file mode 100644 index 0000000..2af7116 --- /dev/null +++ b/TimeKeeper/Models/MTray.cs @@ -0,0 +1,16 @@ +using BlubbFish.Utils; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace TimeKeeper.Models { + class Tray : OwnModel { + private Tray() { + this.init(); + } + override protected void init() { + } + } +} diff --git a/TimeKeeper/Models/MWindow.cs b/TimeKeeper/Models/MWindow.cs new file mode 100644 index 0000000..46a463f --- /dev/null +++ b/TimeKeeper/Models/MWindow.cs @@ -0,0 +1,19 @@ +using BlubbFish.Utils; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace TimeKeeper.Models { + class Window : OwnModel { + + private Window() { + this.init(); + } + + override protected void init() { + + } + } +} diff --git a/TimeKeeper/Program.cs b/TimeKeeper/Program.cs new file mode 100644 index 0000000..953e0e5 --- /dev/null +++ b/TimeKeeper/Program.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace TimeKeeper { + class Program { + static void Main(string[] args) { + try { + Controller.Tray t = new Controller.Tray(); + t.execute(); + Application.Run(); + } catch(Exception e) { + MessageBox.Show("Fehler: " + e.Message + "\nStack: " + e.StackTrace, "Exception: " + e.GetType().ToString(), MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } +} diff --git a/TimeKeeper/Properties/AssemblyInfo.cs b/TimeKeeper/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..9f8cf30 --- /dev/null +++ b/TimeKeeper/Properties/AssemblyInfo.cs @@ -0,0 +1,38 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Resources; + +// Allgemeine Informationen über eine Assembly werden über die folgenden +// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, +// die mit einer Assembly verknüpft sind. +[assembly: AssemblyTitle("TimeKeeper")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("TimeKeeper")] +[assembly: AssemblyCopyright("Copyright BlubbFish © 2016")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar +// für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von +// COM zugreifen müssen, legen Sie das ComVisible-Attribut für diesen Typ auf "true" fest. +[assembly: ComVisible(false)] + +// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird +[assembly: Guid("7df6ab3d-639f-4549-a770-10ba3540a26b")] + +// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: +// +// Hauptversion +// Nebenversion +// Buildnummer +// Revision +// +// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern +// übernehmen, indem Sie "*" eingeben: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: NeutralResourcesLanguageAttribute("de-DE")] diff --git a/TimeKeeper/Properties/Resources.Designer.cs b/TimeKeeper/Properties/Resources.Designer.cs new file mode 100644 index 0000000..89df8a1 --- /dev/null +++ b/TimeKeeper/Properties/Resources.Designer.cs @@ -0,0 +1,83 @@ +//------------------------------------------------------------------------------ +// +// Dieser Code wurde von einem Tool generiert. +// Laufzeitversion:4.0.30319.34209 +// +// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn +// der Code erneut generiert wird. +// +//------------------------------------------------------------------------------ + +namespace TimeKeeper.Properties { + using System; + + + /// + /// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. + /// + // Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert + // -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert. + // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen + // mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu. + [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 { + + 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() { + } + + /// + /// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("TimeKeeper.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle + /// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Icon ähnlich wie (Symbol). + /// + internal static System.Drawing.Icon IconMain { + get { + object obj = ResourceManager.GetObject("IconMain", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// + /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap MenuImagesQuit { + get { + object obj = ResourceManager.GetObject("MenuImagesQuit", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/TimeKeeper/Properties/Resources.resx b/TimeKeeper/Properties/Resources.resx new file mode 100644 index 0000000..a567d56 --- /dev/null +++ b/TimeKeeper/Properties/Resources.resx @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + ..\Resources\Icons\main.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Icons\door_open.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/TimeKeeper/Resources/Icons/door_open.png b/TimeKeeper/Resources/Icons/door_open.png new file mode 100644 index 0000000..64bab57 Binary files /dev/null and b/TimeKeeper/Resources/Icons/door_open.png differ diff --git a/TimeKeeper/Resources/Icons/main.ico b/TimeKeeper/Resources/Icons/main.ico new file mode 100644 index 0000000..d87a506 Binary files /dev/null and b/TimeKeeper/Resources/Icons/main.ico differ diff --git a/TimeKeeper/TimeKeeper.csproj b/TimeKeeper/TimeKeeper.csproj new file mode 100644 index 0000000..e2cd890 --- /dev/null +++ b/TimeKeeper/TimeKeeper.csproj @@ -0,0 +1,98 @@ + + + + + Debug + AnyCPU + {25F58397-71CB-4298-979E-BAACE80C61CB} + WinExe + Properties + TimeKeeper + TimeKeeper + v4.5 + 512 + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + TimeKeeper.Program + + + Resources\Icons\main.ico + + + + + + + + + + + + + + + + + + + + + True + True + Resources.resx + + + Form + + + ViewWindowForm.cs + + + + + + + {fac8ce64-bf13-4ece-8097-aeb5dd060098} + Utils + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + + + + + + + + \ No newline at end of file diff --git a/TimeKeeper/View/VTray.cs b/TimeKeeper/View/VTray.cs new file mode 100644 index 0000000..d26c7cc --- /dev/null +++ b/TimeKeeper/View/VTray.cs @@ -0,0 +1,69 @@ +using BlubbFish.Utils; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using TimeKeeper.Properties; +using System.Drawing; + +namespace TimeKeeper.View { + class Tray : OwnView { + public Models.Tray Model { get; private set; } + private NotifyIcon trayi; + + + public Tray() { + this.init(); + this.Model = Models.Tray.Instance; + this.Model.setObserver(this); + } + + public override void update() { + this.trayi.ContextMenuStrip = this.genMenu(); + } + + override protected void init() { + this.trayi = new NotifyIcon(); + this.trayi.Visible = true; + this.trayi.Icon = new Icon(Resources.IconMain, 40, 40); + this.trayi.Text = "TimeKeeper"; + this.trayi.DoubleClick += Controller.Tray.Click_Tray; + } + + override public void Dispose() { + this.trayi.Visible = false; + Application.ExitThread(); + } + + private ContextMenuStrip genMenu() { + ContextMenuStrip menu = new ContextMenuStrip(); + ToolStripMenuItem mo = new ToolStripMenuItem("Öffnen"); + mo.Image = Resources.MenuImagesQuit; + mo.Click += Controller.Tray.Click_Open; + mo.Name = "Open"; + menu.Items.Add(mo); + + menu.Items.Add(new ToolStripSeparator()); + + ToolStripMenuItem mq = new ToolStripMenuItem("Beenden"); + mq.Image = Resources.MenuImagesQuit; + mq.Click += Controller.Tray.Click_Quit; + mq.Name = "Quit"; + menu.Items.Add(mq); + return menu; + } + + private void showBallonTooltip(string text, ToolTipIcon toolTipIcon, string title = "TimeKeeper Tray") { + this.trayi.BalloonTipIcon = toolTipIcon; + this.trayi.BalloonTipText = text; + this.trayi.BalloonTipTitle = title; + this.trayi.ShowBalloonTip(100); + } + + internal void showError(string text) { + this.showBallonTooltip(text, ToolTipIcon.Error); + } + } +} diff --git a/TimeKeeper/View/VWindow.cs b/TimeKeeper/View/VWindow.cs new file mode 100644 index 0000000..29be588 --- /dev/null +++ b/TimeKeeper/View/VWindow.cs @@ -0,0 +1,35 @@ +using BlubbFish.Utils; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace TimeKeeper.View { + class Window : OwnView { + private ViewWindowForm form; + public Window() { + this.form = new ViewWindowForm(); + this.init(); + this.Model.setObserver(this); + } + + public override void update() { + this.form.UpdateForm(); + } + + protected override void init() { + this.Model = Models.Window.Instance; + this.form.SetModel(this.Model); + this.form.Show(); + } + + public override void Dispose() { + this.form.BeginInvoke((Action)(() => { + this.form.Dispose(); + })); + } + + public Models.Window Model { get; private set; } + } +} diff --git a/TimeKeeper/View/ViewWindowForm.Designer.cs b/TimeKeeper/View/ViewWindowForm.Designer.cs new file mode 100644 index 0000000..fb607e9 --- /dev/null +++ b/TimeKeeper/View/ViewWindowForm.Designer.cs @@ -0,0 +1,33 @@ +namespace TimeKeeper.View { + partial class ViewWindowForm { + /// + /// 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() { + this.components = new System.ComponentModel.Container(); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Text = "ViewWindowForm"; + } + + #endregion + } +} \ No newline at end of file diff --git a/TimeKeeper/View/ViewWindowForm.cs b/TimeKeeper/View/ViewWindowForm.cs new file mode 100644 index 0000000..29b6b94 --- /dev/null +++ b/TimeKeeper/View/ViewWindowForm.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace TimeKeeper.View { + public partial class ViewWindowForm : Form { + private Models.Window model; + + public ViewWindowForm() { + InitializeComponent(); + this.FormClosed += Controller.Window.FormClosed; + this.Icon = TimeKeeper.Properties.Resources.IconMain; + } + + public void UpdateForm() { + this.BeginInvoke((Action)(() => { + + })); + } + + internal void SetModel(Models.Window window) { + this.model = window; + } + } +} diff --git a/TimeKeeper/bin/Release/TimeKeeper.exe b/TimeKeeper/bin/Release/TimeKeeper.exe new file mode 100644 index 0000000..714e311 Binary files /dev/null and b/TimeKeeper/bin/Release/TimeKeeper.exe differ diff --git a/TimeKeeper/bin/Release/Utils.dll b/TimeKeeper/bin/Release/Utils.dll new file mode 100644 index 0000000..914f560 Binary files /dev/null and b/TimeKeeper/bin/Release/Utils.dll differ