From 10dbb90a7971186d6665c64842d9ab66f88d4364 Mon Sep 17 00:00:00 2001 From: Matthias Beerens Date: Sat, 25 Mar 2017 20:22:41 +0100 Subject: [PATCH 01/31] Updated progress --- UpdateLib/TestApp/Program.cs | 19 +++++- .../UpdateLib.Generator/Files/ProjectFile.cs | 22 +++++++ .../UpdateLib.Generator/MainForm.Designer.cs | 62 +++++++++---------- UpdateLib/UpdateLib.Generator/Program.cs | 6 +- .../UpdateLib.Generator.csproj | 1 + .../UpdateLib.Tests/Tasks/AsyncTaskTest.cs | 12 ++-- UpdateLib/UpdateLib/Files/UpdateFile.cs | 9 ++- UpdateLib/UpdateLib/Tasks/AsyncTaskBase.cs | 6 +- UpdateLib/UpdateLib/Updater.cs | 12 +++- 9 files changed, 102 insertions(+), 47 deletions(-) create mode 100644 UpdateLib/UpdateLib.Generator/Files/ProjectFile.cs diff --git a/UpdateLib/TestApp/Program.cs b/UpdateLib/TestApp/Program.cs index 6f8cc2f..421a787 100644 --- a/UpdateLib/TestApp/Program.cs +++ b/UpdateLib/TestApp/Program.cs @@ -1,4 +1,7 @@ -using System; +using MatthiWare.UpdateLib; +using MatthiWare.UpdateLib.Logging; +using MatthiWare.UpdateLib.Logging.Writers; +using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; @@ -13,9 +16,23 @@ static class Program [STAThread] static void Main() { + SetupLogging(); + InitializeUpdater(); + Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } + + private static void InitializeUpdater() + { + Updater.Instance.Initialize(); + } + + private static void SetupLogging() + { + Logger.Writers.Add(new ConsoleLogWriter()); + Logger.Writers.Add(new FileLogWriter()); + } } } diff --git a/UpdateLib/UpdateLib.Generator/Files/ProjectFile.cs b/UpdateLib/UpdateLib.Generator/Files/ProjectFile.cs new file mode 100644 index 0000000..fedc0af --- /dev/null +++ b/UpdateLib/UpdateLib.Generator/Files/ProjectFile.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace UpdateLib.Generator.Files +{ + [Serializable] + public class ProjectFile + { + + #region General Info + #endregion + + #region Files + #endregion + + #region Registry + #endregion + + } +} diff --git a/UpdateLib/UpdateLib.Generator/MainForm.Designer.cs b/UpdateLib/UpdateLib.Generator/MainForm.Designer.cs index 714c732..7d6147e 100644 --- a/UpdateLib/UpdateLib.Generator/MainForm.Designer.cs +++ b/UpdateLib/UpdateLib.Generator/MainForm.Designer.cs @@ -28,18 +28,20 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { - System.Windows.Forms.TreeNode treeNode9 = new System.Windows.Forms.TreeNode("General Information"); - System.Windows.Forms.TreeNode treeNode10 = new System.Windows.Forms.TreeNode("Files"); - System.Windows.Forms.TreeNode treeNode11 = new System.Windows.Forms.TreeNode("Registry"); - System.Windows.Forms.TreeNode treeNode12 = new System.Windows.Forms.TreeNode("Project", new System.Windows.Forms.TreeNode[] { - treeNode9, - treeNode10, - treeNode11}); + System.Windows.Forms.TreeNode treeNode1 = new System.Windows.Forms.TreeNode("General Information"); + System.Windows.Forms.TreeNode treeNode2 = new System.Windows.Forms.TreeNode("Files"); + System.Windows.Forms.TreeNode treeNode3 = new System.Windows.Forms.TreeNode("Registry"); + System.Windows.Forms.TreeNode treeNode4 = new System.Windows.Forms.TreeNode("Project", new System.Windows.Forms.TreeNode[] { + treeNode1, + treeNode2, + treeNode3}); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); this.splitContainer = new System.Windows.Forms.SplitContainer(); this.tvProject = new System.Windows.Forms.TreeView(); this.lvItems = new System.Windows.Forms.ListView(); this.clmnName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.clmnDate = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.clmnPath = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.menuStrip = new System.Windows.Forms.MenuStrip(); this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.newToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -57,8 +59,6 @@ private void InitializeComponent() this.saveToolStripButton = new System.Windows.Forms.ToolStripButton(); this.toolStripSeparator = new System.Windows.Forms.ToolStripSeparator(); this.buildToolStripButton = new System.Windows.Forms.ToolStripButton(); - this.clmnDate = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.clmnPath = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.splitContainer.Panel1.SuspendLayout(); this.splitContainer.Panel2.SuspendLayout(); this.splitContainer.SuspendLayout(); @@ -82,8 +82,8 @@ private void InitializeComponent() // splitContainer.Panel2 // this.splitContainer.Panel2.Controls.Add(this.lvItems); - this.splitContainer.Size = new System.Drawing.Size(626, 315); - this.splitContainer.SplitterDistance = 228; + this.splitContainer.Size = new System.Drawing.Size(968, 308); + this.splitContainer.SplitterDistance = 352; this.splitContainer.TabIndex = 0; // // tvProject @@ -91,17 +91,17 @@ private void InitializeComponent() this.tvProject.Dock = System.Windows.Forms.DockStyle.Fill; this.tvProject.Location = new System.Drawing.Point(0, 0); this.tvProject.Name = "tvProject"; - treeNode9.Name = "nodeInfo"; - treeNode9.Text = "General Information"; - treeNode10.Name = "nodeFiles"; - treeNode10.Text = "Files"; - treeNode11.Name = "nodeRegistry"; - treeNode11.Text = "Registry"; - treeNode12.Name = "root"; - treeNode12.Text = "Project"; + treeNode1.Name = "nodeInfo"; + treeNode1.Text = "General Information"; + treeNode2.Name = "nodeFiles"; + treeNode2.Text = "Files"; + treeNode3.Name = "nodeRegistry"; + treeNode3.Text = "Registry"; + treeNode4.Name = "root"; + treeNode4.Text = "Project"; this.tvProject.Nodes.AddRange(new System.Windows.Forms.TreeNode[] { - treeNode12}); - this.tvProject.Size = new System.Drawing.Size(228, 315); + treeNode4}); + this.tvProject.Size = new System.Drawing.Size(352, 308); this.tvProject.TabIndex = 0; this.tvProject.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.tvProject_AfterSelect); // @@ -116,7 +116,7 @@ private void InitializeComponent() this.lvItems.Location = new System.Drawing.Point(0, 0); this.lvItems.MultiSelect = false; this.lvItems.Name = "lvItems"; - this.lvItems.Size = new System.Drawing.Size(394, 315); + this.lvItems.Size = new System.Drawing.Size(612, 308); this.lvItems.TabIndex = 0; this.lvItems.UseCompatibleStateImageBehavior = false; this.lvItems.View = System.Windows.Forms.View.Details; @@ -127,6 +127,10 @@ private void InitializeComponent() this.clmnName.Text = "Name"; this.clmnName.Width = 139; // + // clmnPath + // + this.clmnPath.Text = "Path"; + // // menuStrip // this.menuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -134,7 +138,7 @@ private void InitializeComponent() this.helpToolStripMenuItem}); this.menuStrip.Location = new System.Drawing.Point(0, 0); this.menuStrip.Name = "menuStrip"; - this.menuStrip.Size = new System.Drawing.Size(626, 24); + this.menuStrip.Size = new System.Drawing.Size(968, 24); this.menuStrip.TabIndex = 1; this.menuStrip.Text = "menuStrip1"; // @@ -190,9 +194,9 @@ private void InitializeComponent() this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.lblStatus, this.progressBar}); - this.statusStrip.Location = new System.Drawing.Point(0, 370); + this.statusStrip.Location = new System.Drawing.Point(0, 363); this.statusStrip.Name = "statusStrip"; - this.statusStrip.Size = new System.Drawing.Size(626, 22); + this.statusStrip.Size = new System.Drawing.Size(968, 22); this.statusStrip.TabIndex = 2; this.statusStrip.Text = "statusStrip1"; // @@ -221,7 +225,7 @@ private void InitializeComponent() this.buildToolStripButton}); this.toolStrip.Location = new System.Drawing.Point(0, 24); this.toolStrip.Name = "toolStrip"; - this.toolStrip.Size = new System.Drawing.Size(626, 25); + this.toolStrip.Size = new System.Drawing.Size(968, 25); this.toolStrip.TabIndex = 3; this.toolStrip.Text = "toolStrip1"; // @@ -267,15 +271,11 @@ private void InitializeComponent() this.buildToolStripButton.Text = "C&ut"; this.buildToolStripButton.Click += new System.EventHandler(this.buildToolStripButton_Click); // - // clmnPath - // - this.clmnPath.Text = "Path"; - // // MainForm // this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(626, 392); + this.ClientSize = new System.Drawing.Size(968, 385); this.Controls.Add(this.toolStrip); this.Controls.Add(this.statusStrip); this.Controls.Add(this.splitContainer); diff --git a/UpdateLib/UpdateLib.Generator/Program.cs b/UpdateLib/UpdateLib.Generator/Program.cs index 555b408..d851e0c 100644 --- a/UpdateLib/UpdateLib.Generator/Program.cs +++ b/UpdateLib/UpdateLib.Generator/Program.cs @@ -1,4 +1,6 @@ -using System; +using MatthiWare.UpdateLib.Logging; +using MatthiWare.UpdateLib.Logging.Writers; +using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; @@ -13,6 +15,8 @@ static class Program [STAThread] static void Main() { + Logger.Writers.Add(new ConsoleLogWriter()); + Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new MainForm()); diff --git a/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj b/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj index d4e5e3e..1c80097 100644 --- a/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj +++ b/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj @@ -46,6 +46,7 @@ + Form diff --git a/UpdateLib/UpdateLib.Tests/Tasks/AsyncTaskTest.cs b/UpdateLib/UpdateLib.Tests/Tasks/AsyncTaskTest.cs index 4b45b50..6f6dfa4 100644 --- a/UpdateLib/UpdateLib.Tests/Tasks/AsyncTaskTest.cs +++ b/UpdateLib/UpdateLib.Tests/Tasks/AsyncTaskTest.cs @@ -17,7 +17,7 @@ namespace UpdateLib.Tests.Tasks public class AsyncTaskTest { - [Test] + [Test, Parallelizable] public void CancelledTaskIsCancelled() { TestTask task = new TestTask(1000); @@ -32,7 +32,7 @@ public void CancelledTaskIsCancelled() Assert.True(task.IsCancelled, "Task did not cancel"); } - [Test] + [Test, Parallelizable] public void FaultyTaskReturnsException() { ErrorTask task = new ErrorTask(); @@ -50,7 +50,7 @@ public void FaultyTaskReturnsException() wait.WaitOne(); } - [Test] + [Test, Parallelizable] public void TestMethod() { Object o = new Object(); @@ -63,7 +63,7 @@ public void TestMethod() Assert.AreEqual(o, task.AwaitTask()); } - [Test] + [Test, Parallelizable] public void TestResultReturnsCorrectObject() { TestResultTask(false); @@ -86,7 +86,7 @@ private void TestResultTask(T input) Assert.AreEqual(input, task.AwaitTask()); } - [Test] + [Test, Parallelizable] public void CheckDoubleWait() { TestTask task = new TestTask(500); @@ -95,7 +95,7 @@ public void CheckDoubleWait() task.AwaitTask(); } - [Test] + [Test, Parallelizable] public void TestAwaitWorker() { WorkerTestTask task = new WorkerTestTask(); diff --git a/UpdateLib/UpdateLib/Files/UpdateFile.cs b/UpdateLib/UpdateLib/Files/UpdateFile.cs index 8b701f5..fde1b41 100644 --- a/UpdateLib/UpdateLib/Files/UpdateFile.cs +++ b/UpdateLib/UpdateLib/Files/UpdateFile.cs @@ -80,8 +80,11 @@ public void Save(Stream output) if (!output.CanWrite) throw new ArgumentException("Stream is not writable", "output"); - XmlSerializer serializer = new XmlSerializer(typeof(UpdateFile)); - serializer.Serialize(output, this); + XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); + ns.Add(string.Empty, string.Empty); + + XmlSerializer serializer = new XmlSerializer(typeof(UpdateFile), string.Empty); + serializer.Serialize(output, this, ns); } /// @@ -114,7 +117,7 @@ public static UpdateFile Load(Stream input) if (!input.CanRead) throw new ArgumentException("Stream is not readable", "input"); - + XmlSerializer xml = new XmlSerializer(typeof(UpdateFile)); UpdateFile file = (UpdateFile)xml.Deserialize(input); diff --git a/UpdateLib/UpdateLib/Tasks/AsyncTaskBase.cs b/UpdateLib/UpdateLib/Tasks/AsyncTaskBase.cs index 6f5bec8..30dbea7 100644 --- a/UpdateLib/UpdateLib/Tasks/AsyncTaskBase.cs +++ b/UpdateLib/UpdateLib/Tasks/AsyncTaskBase.cs @@ -196,7 +196,7 @@ protected void Enqueue(Delegate action, params object[] args) { LastException = ex?.InnerException ?? ex; - Console.WriteLine(ex); + Logger.Error(GetType().Name, LastException); } }); @@ -246,8 +246,8 @@ protected void AwaitWorkers() /// The total amount of work. protected virtual void OnTaskProgressChanged(int done, int total) { - int progress = (done / total) * 100; - TaskProgressChanged?.Invoke(this, new ProgressChangedEventArgs(progress, null)); + double progress = ((double)done / total) * 100; + TaskProgressChanged?.Invoke(this, new ProgressChangedEventArgs((int)progress, null)); } /// diff --git a/UpdateLib/UpdateLib/Updater.cs b/UpdateLib/UpdateLib/Updater.cs index b17f563..f49654b 100644 --- a/UpdateLib/UpdateLib/Updater.cs +++ b/UpdateLib/UpdateLib/Updater.cs @@ -68,8 +68,8 @@ private Updater() { Converter = new PathVariableConverter(); - Logger.Writers.Add(new ConsoleLogWriter()); - Logger.Writers.Add(new FileLogWriter()); + //Logger.Writers.Add(new ConsoleLogWriter()); + //Logger.Writers.Add(new FileLogWriter()); } public void Initialize() @@ -99,6 +99,14 @@ public void CheckForUpdates() task.Start(); } + /// + /// Start the update process asynchronously + /// + public void CheckForUpdatesAsync() + { + + } + public HashCacheFile GetCache() { return UpdateCacheTask.AwaitTask(); From c32fdbe421ae47349e94b0ff0d68985e76cf3556 Mon Sep 17 00:00:00 2001 From: Matthias Beerens Date: Sun, 26 Mar 2017 23:23:35 +0200 Subject: [PATCH 02/31] Changed the generic type of the task --- .../CheckForUpdatesCompletedEventArgs.cs | 10 ++--- .../UpdateLib/Tasks/CheckForUpdatesTask.cs | 23 +++++++---- UpdateLib/UpdateLib/Updater.cs | 39 ++++++++++++------- 3 files changed, 47 insertions(+), 25 deletions(-) diff --git a/UpdateLib/UpdateLib/Tasks/CheckForUpdatesCompletedEventArgs.cs b/UpdateLib/UpdateLib/Tasks/CheckForUpdatesCompletedEventArgs.cs index 809833e..fb24e69 100644 --- a/UpdateLib/UpdateLib/Tasks/CheckForUpdatesCompletedEventArgs.cs +++ b/UpdateLib/UpdateLib/Tasks/CheckForUpdatesCompletedEventArgs.cs @@ -8,15 +8,15 @@ public class CheckForUpdatesCompletedEventArgs : AsyncCompletedEventArgs public string LatestVersion { get; set; } public bool UpdateAvailable { get; set; } - public CheckForUpdatesCompletedEventArgs(string version, bool update, Exception error, bool cancelled, object userState) + public CheckForUpdatesCompletedEventArgs(CheckForUpdatesTask.Data result, Exception error, bool cancelled, object userState) : base(error, cancelled, userState) { - LatestVersion = version; - UpdateAvailable = update; + LatestVersion = result.Version; + UpdateAvailable = result.UpdateAvailable; } - public CheckForUpdatesCompletedEventArgs(string version, bool update, AsyncCompletedEventArgs e) - : this(version, update, e.Error, e.Cancelled, e.UserState) + public CheckForUpdatesCompletedEventArgs(CheckForUpdatesTask.Data result, AsyncCompletedEventArgs e) + : this(result, e.Error, e.Cancelled, e.UserState) { } diff --git a/UpdateLib/UpdateLib/Tasks/CheckForUpdatesTask.cs b/UpdateLib/UpdateLib/Tasks/CheckForUpdatesTask.cs index 7c79627..62978b1 100644 --- a/UpdateLib/UpdateLib/Tasks/CheckForUpdatesTask.cs +++ b/UpdateLib/UpdateLib/Tasks/CheckForUpdatesTask.cs @@ -4,15 +4,14 @@ using System.Windows.Forms; using System.Drawing; using MatthiWare.UpdateLib.UI; +using static MatthiWare.UpdateLib.Tasks.CheckForUpdatesTask; namespace MatthiWare.UpdateLib.Tasks { - public class CheckForUpdatesTask : AsyncTaskBase + public class CheckForUpdatesTask : AsyncTaskBase { public string Url { get; set; } - public string Version { get; set; } - private WebClient wcDownloader; public CheckForUpdatesTask(string url) @@ -28,6 +27,8 @@ protected override void DoWork() { if (string.IsNullOrEmpty(Url)) throw new WebException("Invalid Url"); + Result = new Data(); + // Getting the file name from the url string localFile = GetLocalFileName(); @@ -36,7 +37,7 @@ protected override void DoWork() // load the updatefile from disk UpdateFile file = UpdateFile.Load(localFile); - Version = file.VersionString; + Result.Version = file.VersionString; // lets wait for the Cache update to complete and get the task HashCacheFile cache = Updater.Instance.GetCache(); @@ -48,14 +49,16 @@ protected override void DoWork() * Start a task to get all the files that need to be updated * Returns if there is anything to update */ - Result = CheckForUpdatedFiles(file, cache).AwaitTask(); + Result.UpdateAvailable = CheckForUpdatedFiles(file, cache).AwaitTask(); + + - if (!Result) // no updates available + if (!Result.UpdateAvailable) // no updates available return; DialogResult result = new MessageDialog( "Update available", - $"Version {file.VersionString} available", + $"Version {Result.Version} available", "Update now?\nPress yes to update or no to cancel.", SystemIcons.Question).ShowDialog(); @@ -82,5 +85,11 @@ private string GetLocalFileName() string[] tokens = Url.Split('/'); return string.Concat("./", tokens[tokens.Length - 1]); } + + public class Data + { + public string Version { get; set; } = ""; + public bool UpdateAvailable { get; set; } = false; + } } } diff --git a/UpdateLib/UpdateLib/Updater.cs b/UpdateLib/UpdateLib/Updater.cs index f49654b..521d2f5 100644 --- a/UpdateLib/UpdateLib/Updater.cs +++ b/UpdateLib/UpdateLib/Updater.cs @@ -54,7 +54,14 @@ public string UpdateURL public bool ShowErrorMessage { get; set; } = true; public PathVariableConverter Converter { get; private set; } + /// + /// Gets the clean up task + /// public CleanUpTask CleanUpTask { get; private set; } + + /// + /// Gets the update cache task + /// public UpdateCacheTask UpdateCacheTask { get; private set; } private bool initialized = false; @@ -67,11 +74,11 @@ public string UpdateURL private Updater() { Converter = new PathVariableConverter(); - - //Logger.Writers.Add(new ConsoleLogWriter()); - //Logger.Writers.Add(new FileLogWriter()); } + /// + /// Initializes the updater + /// public void Initialize() { CleanUpTask = new CleanUpTask("."); @@ -86,27 +93,33 @@ public void Initialize() /// /// Starting the update process /// - public void CheckForUpdates() + /// Whether or not there is an update available and the latest version + public CheckForUpdatesTask.Data CheckForUpdates() + { + return CheckForUpdatesAsync().AwaitTask(); + } + + /// + /// Start the update process asynchronously + /// + /// The Task object + public CheckForUpdatesTask CheckForUpdatesAsync() { if (!initialized) throw new InvalidOperationException("The updater needs to be initialized first."); if (string.IsNullOrEmpty(UpdateURL)) - throw new ArgumentException("You need to specifify a update url", "UpdateURL"); + throw new ArgumentException("You need to specifify a update url", nameof(UpdateURL)); CheckForUpdatesTask task = new CheckForUpdatesTask(UpdateURL); - task.TaskCompleted += (o, e) => { CheckForUpdatesCompleted?.Invoke(task, new CheckForUpdatesCompletedEventArgs(task.Version, task.Result, e)); }; - task.Start(); + task.TaskCompleted += (o, e) => { CheckForUpdatesCompleted?.Invoke(task, new CheckForUpdatesCompletedEventArgs(task.Result, e)); }; + return (CheckForUpdatesTask)task.Start(); } /// - /// Start the update process asynchronously + /// Gets the cached index of the current application /// - public void CheckForUpdatesAsync() - { - - } - + /// The of the current application public HashCacheFile GetCache() { return UpdateCacheTask.AwaitTask(); From 92cb0c63f4b64634f4d0b7c7a46cc1374492a908 Mon Sep 17 00:00:00 2001 From: Matthias Beerens Date: Mon, 27 Mar 2017 00:27:18 +0200 Subject: [PATCH 03/31] Added the test form --- UpdateLib/UpdateLib.Generator/Program.cs | 2 +- .../UpdateLib.Generator/TestForm.Designer.cs | 60 +++++++++ UpdateLib/UpdateLib.Generator/TestForm.cs | 19 +++ UpdateLib/UpdateLib.Generator/TestForm.resx | 120 ++++++++++++++++++ .../UpdateLib.Generator.csproj | 12 ++ 5 files changed, 212 insertions(+), 1 deletion(-) create mode 100644 UpdateLib/UpdateLib.Generator/TestForm.Designer.cs create mode 100644 UpdateLib/UpdateLib.Generator/TestForm.cs create mode 100644 UpdateLib/UpdateLib.Generator/TestForm.resx diff --git a/UpdateLib/UpdateLib.Generator/Program.cs b/UpdateLib/UpdateLib.Generator/Program.cs index d851e0c..48b8df3 100644 --- a/UpdateLib/UpdateLib.Generator/Program.cs +++ b/UpdateLib/UpdateLib.Generator/Program.cs @@ -19,7 +19,7 @@ static void Main() Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); - Application.Run(new MainForm()); + Application.Run(new TestForm()); } } } diff --git a/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs b/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs new file mode 100644 index 0000000..7701462 --- /dev/null +++ b/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs @@ -0,0 +1,60 @@ +namespace UpdateLib.Generator +{ + partial class TestForm + { + /// + /// 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.panel1 = new System.Windows.Forms.Panel(); + this.SuspendLayout(); + // + // panel1 + // + this.panel1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(43)))), ((int)(((byte)(129)))), ((int)(((byte)(181))))); + this.panel1.Dock = System.Windows.Forms.DockStyle.Left; + this.panel1.Location = new System.Drawing.Point(0, 0); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(200, 350); + this.panel1.TabIndex = 0; + // + // TestForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(732, 350); + this.Controls.Add(this.panel1); + this.Name = "TestForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "TestForm"; + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + } +} \ No newline at end of file diff --git a/UpdateLib/UpdateLib.Generator/TestForm.cs b/UpdateLib/UpdateLib.Generator/TestForm.cs new file mode 100644 index 0000000..07a5cd9 --- /dev/null +++ b/UpdateLib/UpdateLib.Generator/TestForm.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace UpdateLib.Generator +{ + public partial class TestForm : Form + { + public TestForm() + { + InitializeComponent(); + } + } +} diff --git a/UpdateLib/UpdateLib.Generator/TestForm.resx b/UpdateLib/UpdateLib.Generator/TestForm.resx new file mode 100644 index 0000000..7080a7d --- /dev/null +++ b/UpdateLib/UpdateLib.Generator/TestForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj b/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj index 1c80097..71f5bbc 100644 --- a/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj +++ b/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj @@ -34,6 +34,9 @@ Generator_logo.ico + + UpdateLib.Generator.Program + @@ -57,6 +60,12 @@ + + Form + + + TestForm.cs + MainForm.cs @@ -70,6 +79,9 @@ Resources.resx True + + TestForm.cs + SettingsSingleFileGenerator Settings.Designer.cs From b96b42a04c08208bdd29d9c02bd89f92a95f1de7 Mon Sep 17 00:00:00 2001 From: Matthias Beerens Date: Mon, 27 Mar 2017 20:14:20 +0200 Subject: [PATCH 04/31] Making the form eliptical --- .../UpdateLib.Generator/TestForm.Designer.cs | 13 +- UpdateLib/UpdateLib.Generator/TestForm.resx | 3 + .../UpdateLib.Generator/UI/ElipseComponent.cs | 118 ++++++++++++++++++ .../UpdateLib.Generator.csproj | 3 + 4 files changed, 135 insertions(+), 2 deletions(-) create mode 100644 UpdateLib/UpdateLib.Generator/UI/ElipseComponent.cs diff --git a/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs b/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs index 7701462..42e1782 100644 --- a/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs +++ b/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs @@ -28,24 +28,32 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { + this.components = new System.ComponentModel.Container(); this.panel1 = new System.Windows.Forms.Panel(); + this.elipseComponent1 = new UpdateLib.Generator.UI.ElipseComponent(this.components); this.SuspendLayout(); // // panel1 // - this.panel1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(43)))), ((int)(((byte)(129)))), ((int)(((byte)(181))))); + this.panel1.BackColor = System.Drawing.SystemColors.ActiveCaption; this.panel1.Dock = System.Windows.Forms.DockStyle.Left; this.panel1.Location = new System.Drawing.Point(0, 0); this.panel1.Name = "panel1"; this.panel1.Size = new System.Drawing.Size(200, 350); this.panel1.TabIndex = 0; // + // elipseComponent1 + // + this.elipseComponent1.Control = this; + this.elipseComponent1.Radius = 5; + // // TestForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(732, 350); + this.ClientSize = new System.Drawing.Size(893, 350); this.Controls.Add(this.panel1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; this.Name = "TestForm"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "TestForm"; @@ -55,6 +63,7 @@ private void InitializeComponent() #endregion + private UI.ElipseComponent elipseComponent1; private System.Windows.Forms.Panel panel1; } } \ No newline at end of file diff --git a/UpdateLib/UpdateLib.Generator/TestForm.resx b/UpdateLib/UpdateLib.Generator/TestForm.resx index 7080a7d..bd5a4d5 100644 --- a/UpdateLib/UpdateLib.Generator/TestForm.resx +++ b/UpdateLib/UpdateLib.Generator/TestForm.resx @@ -117,4 +117,7 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 17, 17 + \ No newline at end of file diff --git a/UpdateLib/UpdateLib.Generator/UI/ElipseComponent.cs b/UpdateLib/UpdateLib.Generator/UI/ElipseComponent.cs new file mode 100644 index 0000000..90ce415 --- /dev/null +++ b/UpdateLib/UpdateLib.Generator/UI/ElipseComponent.cs @@ -0,0 +1,118 @@ +using System; +using System.ComponentModel; +using System.ComponentModel.Design; +using System.Drawing; +using System.Runtime.InteropServices; +using System.Windows.Forms; + +namespace UpdateLib.Generator.UI +{ + public class ElipseComponent : Component + { + #region PInvoke CreateRoundRectRgn + + [DllImport("gdi32.dll", EntryPoint = "CreateRoundRectRgn")] + private static extern IntPtr CreateRoundRectRgn(int x, int y, int width, int height, int curveX, int curveY); + + private static void MakeRound(Form form, int elipse) + { + if (form == null) + return; + + form.FormBorderStyle = FormBorderStyle.None; + Region region = Region.FromHrgn(CreateRoundRectRgn(0, 0, form.Width, form.Height, elipse, elipse)); + form.Region = region; + } + + #endregion + + private int m_radius; + + public int Radius + { + get { return m_radius; } + set + { + m_radius = value; + ApplyRadius(); + } + } + + private ContainerControl m_control; + + public ContainerControl Control + { + get { return m_control; } + set + { + if (m_control != null && m_control is Form) + { + m_control.Resize -= M_control_Resize; + } + + m_control = value; + + m_control.Resize += M_control_Resize; + + ApplyRadius(); + } + } + + private void M_control_Resize(object sender, EventArgs e) + { + ApplyRadius(); + } + + public ElipseComponent() + { + m_radius = 5; + } + + public ElipseComponent(IContainer container) + : this() + { + container.Add(this); + } + + public void ApplyRadius() + { + if (Control == null) + return; + + if (!(Control is Form)) + return; + + MakeRound(Control as Form, Radius); + } + + public override ISite Site + { + get + { + return base.Site; + } + + set + { + base.Site = value; + + if (value == null) + return; + + IComponent rootComponent; + Type serviceType = typeof(IDesignerHost); + IDesignerHost service = Site.GetService(serviceType) as IDesignerHost; + + if (service == null) + return; + + rootComponent = service.RootComponent; + + if (!(rootComponent is ContainerControl)) + return; + + Control = rootComponent as ContainerControl; + } + } + } +} diff --git a/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj b/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj index 71f5bbc..aa68019 100644 --- a/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj +++ b/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj @@ -66,6 +66,9 @@ TestForm.cs + + Component + MainForm.cs From 672aba016f7b2f4351f3a5b1e274d42e68adf334 Mon Sep 17 00:00:00 2001 From: Matthias Beerens Date: Tue, 28 Mar 2017 17:13:00 +0200 Subject: [PATCH 05/31] Made a gradient panel --- .../UpdateLib.Generator/TestForm.Designer.cs | 31 +++-- UpdateLib/UpdateLib.Generator/TestForm.cs | 5 + UpdateLib/UpdateLib.Generator/TestForm.resx | 69 ++++++++++ .../UpdateLib.Generator/UI/GradientPanel.cs | 120 ++++++++++++++++++ .../UpdateLib.Generator.csproj | 3 + 5 files changed, 217 insertions(+), 11 deletions(-) create mode 100644 UpdateLib/UpdateLib.Generator/UI/GradientPanel.cs diff --git a/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs b/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs index 42e1782..10f2627 100644 --- a/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs +++ b/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs @@ -29,18 +29,25 @@ protected override void Dispose(bool disposing) private void InitializeComponent() { this.components = new System.ComponentModel.Container(); - this.panel1 = new System.Windows.Forms.Panel(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TestForm)); + this.gradientPanel1 = new UpdateLib.Generator.UI.GradientPanel(); this.elipseComponent1 = new UpdateLib.Generator.UI.ElipseComponent(this.components); this.SuspendLayout(); // - // panel1 + // gradientPanel1 // - this.panel1.BackColor = System.Drawing.SystemColors.ActiveCaption; - this.panel1.Dock = System.Windows.Forms.DockStyle.Left; - this.panel1.Location = new System.Drawing.Point(0, 0); - this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(200, 350); - this.panel1.TabIndex = 0; + this.gradientPanel1.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("gradientPanel1.BackgroundImage"))); + this.gradientPanel1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.gradientPanel1.Dock = System.Windows.Forms.DockStyle.Left; + this.gradientPanel1.GradientBottomLeft = System.Drawing.Color.FromArgb(((int)(((byte)(97)))), ((int)(((byte)(67)))), ((int)(((byte)(133))))); + this.gradientPanel1.GradientBottomRight = System.Drawing.Color.FromArgb(((int)(((byte)(81)))), ((int)(((byte)(99)))), ((int)(((byte)(149))))); + this.gradientPanel1.GradientTopLeft = System.Drawing.Color.FromArgb(((int)(((byte)(81)))), ((int)(((byte)(99)))), ((int)(((byte)(149))))); + this.gradientPanel1.GradientTopRight = System.Drawing.Color.FromArgb(((int)(((byte)(97)))), ((int)(((byte)(67)))), ((int)(((byte)(133))))); + this.gradientPanel1.Location = new System.Drawing.Point(0, 0); + this.gradientPanel1.Name = "gradientPanel1"; + this.gradientPanel1.Quality = 200; + this.gradientPanel1.Size = new System.Drawing.Size(200, 350); + this.gradientPanel1.TabIndex = 0; // // elipseComponent1 // @@ -51,12 +58,14 @@ private void InitializeComponent() // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(893, 350); - this.Controls.Add(this.panel1); + this.ClientSize = new System.Drawing.Size(729, 350); + this.Controls.Add(this.gradientPanel1); + this.DoubleBuffered = true; this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; this.Name = "TestForm"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "TestForm"; + this.Click += new System.EventHandler(this.TestForm_Click); this.ResumeLayout(false); } @@ -64,6 +73,6 @@ private void InitializeComponent() #endregion private UI.ElipseComponent elipseComponent1; - private System.Windows.Forms.Panel panel1; + private UI.GradientPanel gradientPanel1; } } \ No newline at end of file diff --git a/UpdateLib/UpdateLib.Generator/TestForm.cs b/UpdateLib/UpdateLib.Generator/TestForm.cs index 07a5cd9..f96d07a 100644 --- a/UpdateLib/UpdateLib.Generator/TestForm.cs +++ b/UpdateLib/UpdateLib.Generator/TestForm.cs @@ -15,5 +15,10 @@ public TestForm() { InitializeComponent(); } + + private void TestForm_Click(object sender, EventArgs e) + { + WindowState = (WindowState == FormWindowState.Maximized) ? FormWindowState.Normal : FormWindowState.Maximized; + } } } diff --git a/UpdateLib/UpdateLib.Generator/TestForm.resx b/UpdateLib/UpdateLib.Generator/TestForm.resx index bd5a4d5..8be594d 100644 --- a/UpdateLib/UpdateLib.Generator/TestForm.resx +++ b/UpdateLib/UpdateLib.Generator/TestForm.resx @@ -117,6 +117,75 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAA6DSURBVHhe7d1ZEuTWDUTRXp8sy9Y8e9yMPM/rlZMiX5kE + kQCqQoqWwvfj7CDvB+IVo968//v/fHvxu+jftd9efTD1m+VfM7/efTj1q8w/va+vPpr6avnHzJe7j6e+ + iP7e+/x/Ppn6bPnbzKe7T6c+if5a+/jqs6mPlr/MfLj73CCQRWMnkE0IwdHoCYRAegQyQyC7NIYMgcwQ + CIGMaPQEsjmF4GjwBBJCcBQBgRBIj0BSBLJo7ASyCSE4Gv3/RyC3IKI8BOceQCcPwZmF4NxDcO4BdPIQ + nD4E5x5B5R5AJw/B6UNw8hCcewCdPATnFscHOwIxCOSg0VcIhECGNHwCCRFUNHwCmdDwCSREUNHwCWRA + wyeQbfTPyGPIEMhBo68QCIEMafgEEiKoaPgEMqHhE0iIoKLhE8iAhv/9BKJhFz5YzuMvacibOHzjwyiL + 4EIDPttGP/TR5jz+koa8icM3Po6yCC404LM1/MYny3n8JQ15E4dvfBplEVxowGdr+I3PlvP4SxryJg7f + +DzKIrj489UHOwKxNHwCOSKoaPAEcg6go+ETyBFBRYMnkBBBRcMnkC2AjsZOICGCioZPIEcElWkgGnl6 + dDvd0e1o7OnR7ZwP7QmN3B7eme7odjT29Oh24rHd0cjTo7tSHd2Oxp4e3U48tjsaeXp0O93R7Wjs6dHt + HMf4CiIikIVACCRBIAuBEEiCQBYCIZAEgSwEQiAJAlkIhEASBLIQCIEkCGQhEAJJEMhCIASSIJCFQAgk + 8SYGEfkQnGsAHR+Co7E3ITh5CM41gI4PwTkCMCE4eQSVawAdH4JzBGBCcHwIzjWAjg/BCXG8vyMQS8Mn + kCOCigZPIOcAOho+gRwRVDR4AgkRVDR8AtkC6GjsBBIiqGj4BHJEUCEQAhkgEAIZ0vAJ5IigosETyDmA + joZPIEcEFQ2eQEIEFQ3/bQTyCMDSkF/5QjAbf0rjfeILwe++Cjxbwx/RmNfwG/MvAxcN+IkvBB9fBi7n + 8Zc05Fe+EMzGn9KAn/hC8PFl4HIef0lD3qzhN+ZfBi4aePKFoPNFpDg2BGIQyEGjrxAIgQxp+AQSIqho + +AQyoeETSIigouETyICG/4ME4o5uRyMvj27HHd2OBv44tCeqwzujkZdHt+OObkcjvxzbHXd0VzR0e3Q7 + 7uh2NPLLsd1xR7ejkZdHt+OObkcRbFYQEYEsGjuBbEIIjkZPIATSI5AZAtmlMWQIZIZACGREoyeQzSkE + R4MnkBCCowgIhEB6BJIikEVjJ5BNCMHR6AmEQHoEMkMguzSGDIHMEAiBjGj0BLI5heBo8AQSQnAUAYEQ + SI9AUgSyaOwEsgkhOBo9gRBIj0BmCGSXxpAhkBkCecuB3IKI8hCcewCdPARnFoJzD8G5B9DJQ3D6EJx7 + BJV7AJ08BKcPwclDcO4BdPIQnFscv9wRiEEgB42+QiAEMqThE0iIoKLh/zQC0bALL38hGIdvPP+FoAZ8 + tm6IgZe+EIzDN57/QlADPlvDb7z8hWAcvvH8F4Ia8NkafuPlLwTj8A33haD3p6tf7gjE0vAJ5IigosET + yDmAjoZPIEcEFQ2eQEIEFQ2fQLYAOho7gYQIKho+gRwRVAiEQAYIhECGNHwCOSKoaPAEcg6go+ETyBFB + RYMnkBBBRcP/UQSikafvGk73ruFo7Om7hnN+y5jQyO3bRqZ713A09vRdw4nvGR2NPH3XqFTvGo7Gnr5r + OPE9o6ORp+8aTveu4Wjs6buGc7x3rCAiAlkIhEASBLIQCIEkCGQhEAJJEMhCIASSIJCFQAgkQSALgRBI + gkAWAiGQBIEsBEIgCQJZCIRAEgSyEAiBJN7EICIfgnMNoONDcDT2JgQnD8G5BtDxIThHACYEJ4+gcg2g + 40NwjgBMCI4PwbkG0PEhOCGOX+wIxNLwCeSIoKLBE8g5gI6GTyBHBBUNnkBCBBUN/20E8gjA0pBf+fl6 + Nv6UxvvEz9e/+8n62Rr+iMa8ht+Y/2x90YCf+Pn642fry3n8JQ35lZ+vZ+NPacBP/Hz98bP15Tz+kob8 + ys/Xs/GnNPDk5+vOl5Hi2BCIQSAHjb5CIAQypOETSIigouETyISGTyAhgoqGTyADGj6BbKN/Rh5DhkAO + Gn2FQAhkSMMnkBBBRcMnkAkNn0BCBBUNn0AGNPwfJBD3ruFo5OW7huPeNRwN/PGWMVG9bWQ08vJdw3Hv + Go5GfnnP6Lh3jYqGbt81HPeu4Wjkl/eMjnvXcDTy8l3Dce8ajiLYrCAiAlk0dgLZhBAcjZ5ACKRHIDME + sktjyBDIDIEQyIhGTyCbUwiOBk8gIQRHERAIgfQIJEUgi8ZOIJsQgqPREwiB9AhkhkB2aQwZApkhEAIZ + 0egJZHMKwdHgCSSE4CgCAiGQHoGk3tyDiPIQnHsAnTwEZxaCcw/BuQfQyUNw+hCcewSVewCdPASnD8HJ + Q3DuAXTyEJxbHO/tCMQgkINGXyEQAhnS8AkkRFDR8AlkQsMnkBBBRcMnkAENn0C20T8jjyFDIAeNvkIg + BDKk4RNIiKCi4RPIhIZPICGCioZPIAMa/vcTiIZdePkT2jh84/lPaDXgs230Qy99QhuHbzz/Ca0GfLaG + 33j5E9o4fOP5T2g14LM1/MbLn9DG4RvuE1rvj1fv7QjE0vAJ5IigosETyDmAjoZPIEcEFQ2eQEIEFQ3/ + RxGIRp7eFE53Uzgae3pTOOc7YkIjt3dFprspHI09vSmceEt0NPL0pqhUN4Wjsac3hRNviY5Gnt4UTndT + OBp7elM4x62xgogIZCEQAkkQyEIgBJIgkIVACCRBIAuBEEiCQBYCIZAEgSwEQiAJAlkIhEASBLIQCIEk + CGQhEAJJEMhCIASSeBODiHwIzjWAjg/B0dibEJw8BOcaQMeH4BwBmBCcPILKNYCOD8E5AjAhOD4E5xpA + x4fghDh+viMQS8MnkCOCigZPIOcAOho+gRwRVDR4AgkRVDR8AtkC6GjsBBIiqGj4BHJEUCEQAhkgEAIZ + 0vAJ5IigosETyDmAjoZPIEcEFQ2eQEIEFQ3/bQTyCMDSkF/5hDYbf0rjfeIT2sf/ly9r+CMa8xp+Y/7p + 7KIBP/EJ7ePT2eU8/pKG/MontNn4UxrwE5/QPj6dXc7jL2nIr3xCm40/pYEnn9A6X0WKY0MgBoEcNPoK + gRDIkIZPICGCiob/kwzE3RSORl7eFI67KRwN/HFHTFR3RUYjL28Kx90UjkZ+uSU67qaoaOj2pnDcTeFo + 5JdbouNuCkcjL28Kx90UjiLYrCAiAlk0dgLZhBAcjZ5ACKRHIDMEsktjyBDIDIEQyIhGTyCbUwiOBk8g + IQRHERAIgfQIJEUgi8ZOIJsQgqPREwiB9AhkhkB2aQwZApkhEAIZ0egJZHMKwdHgCSSE4CgCAiGQHoGk + CGTR2AlkE0JwNHoCIZAegcwQyC6NIUMgMwTylgO5BRHlITj3ADp5CM4sBOcegnMPoJOH4PQhOPcIKvcA + OnkITh+Ck4fg3APo5CE4tzje3RGIQSAHjb5CIAQypOETSIigouETyISGTyAhgoqGTyADGv73E4iGXXj5 + E9o4fOP5T2g14LNt9EMvfUIbh288/wmtBny2ht94+RPaOHzj+U9oNeCzNfzGy5/QxuEb7hNa7w9X7+4I + xNLwCeSIoKLBE8g5gI6GTyBHBBUNnkBCBBUNn0C2ADoaO4GECCoaPoEcEVQIhEAGCIRAhjR8AjkiqGjw + BHIOoKPhE8gRQUWDJ5AQQUXD/1EEopGn7xpO967haOzpu4ZzfsuY0Mjt20ame9dwNPb0XcOJ7xkdjTx9 + 16hU7xqOxp6+azjxPaOjkafvGk73ruFo7Om7hnO8d6wgIgJZCIRAEgSyEAiBJAhkIRACSRDIQiAEkiCQ + hUAIJEEgC4EQSIJAFgIhkASBLARCIAkCWQiEQBJvYhCRD8G5BtDxITgaexOCk4fgXAPo+BCcIwATgpNH + ULkG0PEhOEcAJgTHh+BcA+j4EJwQx892BGJp+ARyRFDR4AnkHEBHwyeQI4KKBk8gIYKKhk8gWwAdjZ1A + QgQVDZ9AjggqJpBHAJaG/MrP17PxpzTeJ36+/t1P1s/W8Ec05jX8xvxn64sG/MTP1x8/W1/O4y9pyK/8 + fD0bf0oDfuLn64+frS/n8Zc05Fd+vp6NP6WBJz9fd76OFMeGQAwCOWj0FQIhkCENn0BCBBUNn0AmNHwC + CRFUNHwCGdDwCWQb/TPyGDIEctDoKwRCIEMaPoGECCoaPoFMaPgEEiKoaPgEMqDh/yCBuHcNRyMv3zUc + 967haOCPt4yJ6m0jo5GX7xqOe9dwNPLLe0bHvWtUNHT7ruG4dw1HI7+8Z3Tcu4ajkZfvGo5713AUwWYF + ERHIorETyCaE4Gj0BEIgPQKZIZBdGkOGQGYIhEBGNHoC2ZxCcDR4AgkhOIqAQAikRyApAlk0dgLZhBAc + jZ5ACKRHIDMEsktjyBDIDIEQyIhGTyCbUwiOBk8gIQRHEdSB3IKI8hCcewCdPARnFoJzD8G5B9DJQ3D6 + EJx7BJV7AJ08BKcPwclDcO4BdPIQnFsc7+wIxCCQg0ZfIRACGdLwCSREUNHwCWRCwyeQEEFFwyeQAQ2f + QLbRPyOPIUMgB42+QiAEMqThE0iIoKLhE8iEhk8gIYKKhk8gAxr+9xOIhl14+QvBOHzj+S8ENeCzbfRD + L30hGIdvPP+FoAZ8tobfePkLwTh84/kvBDXgszX8xstfCMbhG+4LQe+bq3d2BGJp+ARyRFDR4AnkHEBH + wyeQI4KKBk8gIYKKhk8gWwAdjZ1AQgQVDZ9Ajggq00A08vTodrqj29HY06PbOR/aExq5Pbwz3dHtaOzp + 0e3EY7ujkadHd6U6uh2NPT26nXhsdzTy9Oh2uqPb0djTo9s5jvEVREQgC4EQSIJAFgIhkASBLARCIAkC + WQiEQBIEshAIgSQIZCEQArn55tv/AuYLgAAUp6MpAAAAAElFTkSuQmCC + + 17, 17 diff --git a/UpdateLib/UpdateLib.Generator/UI/GradientPanel.cs b/UpdateLib/UpdateLib.Generator/UI/GradientPanel.cs new file mode 100644 index 0000000..68c2854 --- /dev/null +++ b/UpdateLib/UpdateLib.Generator/UI/GradientPanel.cs @@ -0,0 +1,120 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace UpdateLib.Generator.UI +{ + public class GradientPanel : Panel + { + + public GradientPanel() + : base() + { + + } + + private int m_quality = 100; + + public int Quality + { + get { return m_quality; } + set { m_quality = value; SetGradient(); } + } + + + private Color m_gradientTopRight = SystemColors.Control; + + public Color GradientTopRight + { + get { return m_gradientTopRight; } + set { m_gradientTopRight = value; SetGradient(); } + } + + private Color m_gradientTopLeft = SystemColors.Control; + + public Color GradientTopLeft + { + get { return m_gradientTopLeft; } + set { m_gradientTopLeft = value; SetGradient(); } + } + + private Color m_gradientBottomLeft = SystemColors.Control; + + public Color GradientBottomLeft + { + get { return m_gradientBottomLeft; } + set { m_gradientBottomLeft = value; SetGradient(); } + } + + private Color m_gradientBottomRight = SystemColors.Control; + + public Color GradientBottomRight + { + get { return m_gradientBottomRight; } + set { m_gradientBottomRight = value; SetGradient(); } + } + + protected override void OnResize(EventArgs eventargs) + { + base.OnResize(eventargs); + + SetGradient(); + } + + private void SetGradient() + { + Bitmap buffer = new Bitmap(Quality, Quality); + for (int x = 0; x < Quality; x++) + { + int percentX = (int)(((double)x / Width) * 100); + + Color c1 = GetColorScale(percentX, GradientTopLeft, GradientTopRight); + + for (int y = 0; y < Quality; y++) + { + int percentY = (int)(((double)y / Height) * 100); + + Color c2 = GetColorScale(percentY, GradientTopLeft, GradientTopRight); + + buffer.SetPixel(x, y, DiffuseColors(c1, c2)); + } + } + + if (BackgroundImageLayout != ImageLayout.Stretch) + BackgroundImageLayout = ImageLayout.Stretch; + + SuspendLayout(); + + BackgroundImage = buffer; + + ResumeLayout(true); + } + + private Color GetColorScale(int percentage, Color start, Color end) + { + byte red = GetByte(percentage, start.R, end.R); + byte green = GetByte(percentage, start.G, end.G); + byte blue = GetByte(percentage, start.B, end.B); + + return Color.FromArgb(red, green, blue); + } + + private byte GetByte(int percentage, byte begin, byte end) + { + return (byte)(Math.Round((begin + ((end - begin) * percentage) * 0.01), 0)); + } + + private Color DiffuseColors(Color a, Color b) + { + int red = (a.R + b.R) / 2; + int green = (a.G + b.G) / 2; + int blue = (a.B + b.B) / 2; + return Color.FromArgb(red, green, blue); + } + + + } +} diff --git a/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj b/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj index aa68019..3776c66 100644 --- a/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj +++ b/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj @@ -69,6 +69,9 @@ Component + + Component + MainForm.cs From d52f1507d4c34c80f56935c4e5132d923bddf5f8 Mon Sep 17 00:00:00 2001 From: Matthias Beerens Date: Tue, 28 Mar 2017 22:03:16 +0200 Subject: [PATCH 06/31] Starting the basics of the form design --- .../UpdateLib.Generator/TestForm.Designer.cs | 94 +++++++++++++++---- UpdateLib/UpdateLib.Generator/TestForm.cs | 5 + UpdateLib/UpdateLib.Generator/TestForm.resx | 78 +++------------ 3 files changed, 94 insertions(+), 83 deletions(-) diff --git a/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs b/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs index 10f2627..13b041d 100644 --- a/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs +++ b/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs @@ -30,42 +30,96 @@ private void InitializeComponent() { this.components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TestForm)); - this.gradientPanel1 = new UpdateLib.Generator.UI.GradientPanel(); + this.panel1 = new System.Windows.Forms.Panel(); + this.label1 = new System.Windows.Forms.Label(); + this.panel2 = new System.Windows.Forms.Panel(); + this.panel3 = new System.Windows.Forms.Panel(); this.elipseComponent1 = new UpdateLib.Generator.UI.ElipseComponent(this.components); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); this.SuspendLayout(); // - // gradientPanel1 + // panel1 // - this.gradientPanel1.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("gradientPanel1.BackgroundImage"))); - this.gradientPanel1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; - this.gradientPanel1.Dock = System.Windows.Forms.DockStyle.Left; - this.gradientPanel1.GradientBottomLeft = System.Drawing.Color.FromArgb(((int)(((byte)(97)))), ((int)(((byte)(67)))), ((int)(((byte)(133))))); - this.gradientPanel1.GradientBottomRight = System.Drawing.Color.FromArgb(((int)(((byte)(81)))), ((int)(((byte)(99)))), ((int)(((byte)(149))))); - this.gradientPanel1.GradientTopLeft = System.Drawing.Color.FromArgb(((int)(((byte)(81)))), ((int)(((byte)(99)))), ((int)(((byte)(149))))); - this.gradientPanel1.GradientTopRight = System.Drawing.Color.FromArgb(((int)(((byte)(97)))), ((int)(((byte)(67)))), ((int)(((byte)(133))))); - this.gradientPanel1.Location = new System.Drawing.Point(0, 0); - this.gradientPanel1.Name = "gradientPanel1"; - this.gradientPanel1.Quality = 200; - this.gradientPanel1.Size = new System.Drawing.Size(200, 350); - this.gradientPanel1.TabIndex = 0; + this.panel1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(78)))), ((int)(((byte)(99)))), ((int)(((byte)(133))))); + this.panel1.Controls.Add(this.pictureBox1); + this.panel1.Controls.Add(this.label1); + this.panel1.Dock = System.Windows.Forms.DockStyle.Top; + this.panel1.Location = new System.Drawing.Point(0, 0); + this.panel1.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(719, 33); + this.panel1.TabIndex = 1; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.BackColor = System.Drawing.Color.Transparent; + this.label1.Font = new System.Drawing.Font("Century Gothic", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.ForeColor = System.Drawing.Color.WhiteSmoke; + this.label1.Location = new System.Drawing.Point(33, 6); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(157, 21); + this.label1.TabIndex = 0; + this.label1.Text = "Update Generator"; + this.label1.Click += new System.EventHandler(this.label1_Click); + // + // panel2 + // + this.panel2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(83)))), ((int)(((byte)(92)))), ((int)(((byte)(156))))); + this.panel2.Dock = System.Windows.Forms.DockStyle.Left; + this.panel2.Location = new System.Drawing.Point(0, 33); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(170, 275); + this.panel2.TabIndex = 1; + // + // panel3 + // + this.panel3.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.panel3.BackColor = System.Drawing.Color.WhiteSmoke; + this.panel3.Location = new System.Drawing.Point(178, 42); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(529, 254); + this.panel3.TabIndex = 2; // // elipseComponent1 // this.elipseComponent1.Control = this; this.elipseComponent1.Radius = 5; // + // pictureBox1 + // + this.pictureBox1.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pictureBox1.BackgroundImage"))); + this.pictureBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.pictureBox1.Location = new System.Drawing.Point(3, 6); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(24, 24); + this.pictureBox1.TabIndex = 1; + this.pictureBox1.TabStop = false; + // // TestForm // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(729, 350); - this.Controls.Add(this.gradientPanel1); + this.BackColor = System.Drawing.SystemColors.ControlLight; + this.ClientSize = new System.Drawing.Size(719, 308); + this.Controls.Add(this.panel3); + this.Controls.Add(this.panel2); + this.Controls.Add(this.panel1); this.DoubleBuffered = true; + this.Font = new System.Drawing.Font("Century Gothic", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); this.Name = "TestForm"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "TestForm"; this.Click += new System.EventHandler(this.TestForm_Click); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); this.ResumeLayout(false); } @@ -73,6 +127,10 @@ private void InitializeComponent() #endregion private UI.ElipseComponent elipseComponent1; - private UI.GradientPanel gradientPanel1; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Panel panel3; + private System.Windows.Forms.PictureBox pictureBox1; } } \ No newline at end of file diff --git a/UpdateLib/UpdateLib.Generator/TestForm.cs b/UpdateLib/UpdateLib.Generator/TestForm.cs index f96d07a..150419c 100644 --- a/UpdateLib/UpdateLib.Generator/TestForm.cs +++ b/UpdateLib/UpdateLib.Generator/TestForm.cs @@ -20,5 +20,10 @@ private void TestForm_Click(object sender, EventArgs e) { WindowState = (WindowState == FormWindowState.Maximized) ? FormWindowState.Normal : FormWindowState.Maximized; } + + private void label1_Click(object sender, EventArgs e) + { + + } } } diff --git a/UpdateLib/UpdateLib.Generator/TestForm.resx b/UpdateLib/UpdateLib.Generator/TestForm.resx index 8be594d..95a00c2 100644 --- a/UpdateLib/UpdateLib.Generator/TestForm.resx +++ b/UpdateLib/UpdateLib.Generator/TestForm.resx @@ -118,72 +118,20 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + - 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 From f0a2b4908b727c1e69fc339638c292ba25a17486 Mon Sep 17 00:00:00 2001 From: Matthias Beerens Date: Sun, 2 Apr 2017 16:13:43 +0200 Subject: [PATCH 07/31] Added minimize, maximize and close button --- .../UpdateLib.Generator/TestForm.Designer.cs | 193 +++++++++++------- UpdateLib/UpdateLib.Generator/TestForm.cs | 16 ++ UpdateLib/UpdateLib.Generator/TestForm.resx | 54 +++-- 3 files changed, 178 insertions(+), 85 deletions(-) diff --git a/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs b/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs index 13b041d..7001668 100644 --- a/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs +++ b/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs @@ -30,85 +30,128 @@ private void InitializeComponent() { this.components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TestForm)); - this.panel1 = new System.Windows.Forms.Panel(); - this.label1 = new System.Windows.Forms.Label(); - this.panel2 = new System.Windows.Forms.Panel(); - this.panel3 = new System.Windows.Forms.Panel(); + this.HeaderPanel = new System.Windows.Forms.Panel(); + this.pbMinimize = new System.Windows.Forms.PictureBox(); + this.pbMaximize = new System.Windows.Forms.PictureBox(); + this.pbClose = new System.Windows.Forms.PictureBox(); + this.pbIcon = new System.Windows.Forms.PictureBox(); + this.lblTitle = new System.Windows.Forms.Label(); + this.SidebarPanel = new System.Windows.Forms.Panel(); + this.ContentPanel = new System.Windows.Forms.Panel(); this.elipseComponent1 = new UpdateLib.Generator.UI.ElipseComponent(this.components); - this.pictureBox1 = new System.Windows.Forms.PictureBox(); - this.panel1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.HeaderPanel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbMinimize)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbMaximize)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbClose)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbIcon)).BeginInit(); this.SuspendLayout(); // - // panel1 - // - this.panel1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(78)))), ((int)(((byte)(99)))), ((int)(((byte)(133))))); - this.panel1.Controls.Add(this.pictureBox1); - this.panel1.Controls.Add(this.label1); - this.panel1.Dock = System.Windows.Forms.DockStyle.Top; - this.panel1.Location = new System.Drawing.Point(0, 0); - this.panel1.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(719, 33); - this.panel1.TabIndex = 1; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.BackColor = System.Drawing.Color.Transparent; - this.label1.Font = new System.Drawing.Font("Century Gothic", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label1.ForeColor = System.Drawing.Color.WhiteSmoke; - this.label1.Location = new System.Drawing.Point(33, 6); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(157, 21); - this.label1.TabIndex = 0; - this.label1.Text = "Update Generator"; - this.label1.Click += new System.EventHandler(this.label1_Click); - // - // panel2 - // - this.panel2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(83)))), ((int)(((byte)(92)))), ((int)(((byte)(156))))); - this.panel2.Dock = System.Windows.Forms.DockStyle.Left; - this.panel2.Location = new System.Drawing.Point(0, 33); - this.panel2.Name = "panel2"; - this.panel2.Size = new System.Drawing.Size(170, 275); - this.panel2.TabIndex = 1; - // - // panel3 - // - this.panel3.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.panel3.BackColor = System.Drawing.Color.WhiteSmoke; - this.panel3.Location = new System.Drawing.Point(178, 42); - this.panel3.Name = "panel3"; - this.panel3.Size = new System.Drawing.Size(529, 254); - this.panel3.TabIndex = 2; + // HeaderPanel + // + this.HeaderPanel.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(78)))), ((int)(((byte)(99)))), ((int)(((byte)(133))))); + this.HeaderPanel.Controls.Add(this.pbMinimize); + this.HeaderPanel.Controls.Add(this.pbMaximize); + this.HeaderPanel.Controls.Add(this.pbClose); + this.HeaderPanel.Controls.Add(this.pbIcon); + this.HeaderPanel.Controls.Add(this.lblTitle); + this.HeaderPanel.Dock = System.Windows.Forms.DockStyle.Top; + this.HeaderPanel.Location = new System.Drawing.Point(0, 0); + this.HeaderPanel.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.HeaderPanel.Name = "HeaderPanel"; + this.HeaderPanel.Size = new System.Drawing.Size(719, 33); + this.HeaderPanel.TabIndex = 1; + // + // pbMinimize + // + this.pbMinimize.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.pbMinimize.Image = ((System.Drawing.Image)(resources.GetObject("pbMinimize.Image"))); + this.pbMinimize.Location = new System.Drawing.Point(645, 3); + this.pbMinimize.Name = "pbMinimize"; + this.pbMinimize.Size = new System.Drawing.Size(24, 24); + this.pbMinimize.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.pbMinimize.TabIndex = 4; + this.pbMinimize.TabStop = false; + this.pbMinimize.Click += new System.EventHandler(this.pbMinimize_Click); + // + // pbMaximize + // + this.pbMaximize.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.pbMaximize.Image = ((System.Drawing.Image)(resources.GetObject("pbMaximize.Image"))); + this.pbMaximize.Location = new System.Drawing.Point(668, 3); + this.pbMaximize.Name = "pbMaximize"; + this.pbMaximize.Size = new System.Drawing.Size(24, 24); + this.pbMaximize.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.pbMaximize.TabIndex = 3; + this.pbMaximize.TabStop = false; + this.pbMaximize.Click += new System.EventHandler(this.pbMaximize_Click); + // + // pbClose + // + this.pbClose.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.pbClose.Image = ((System.Drawing.Image)(resources.GetObject("pbClose.Image"))); + this.pbClose.Location = new System.Drawing.Point(691, 3); + this.pbClose.Name = "pbClose"; + this.pbClose.Size = new System.Drawing.Size(24, 24); + this.pbClose.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.pbClose.TabIndex = 2; + this.pbClose.TabStop = false; + this.pbClose.Click += new System.EventHandler(this.pbClose_Click); + // + // pbIcon + // + this.pbIcon.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pbIcon.BackgroundImage"))); + this.pbIcon.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.pbIcon.Location = new System.Drawing.Point(5, 4); + this.pbIcon.Name = "pbIcon"; + this.pbIcon.Size = new System.Drawing.Size(24, 24); + this.pbIcon.TabIndex = 1; + this.pbIcon.TabStop = false; + // + // lblTitle + // + this.lblTitle.AutoSize = true; + this.lblTitle.BackColor = System.Drawing.Color.Transparent; + this.lblTitle.Font = new System.Drawing.Font("Century Gothic", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lblTitle.ForeColor = System.Drawing.Color.WhiteSmoke; + this.lblTitle.Location = new System.Drawing.Point(31, 5); + this.lblTitle.Name = "lblTitle"; + this.lblTitle.Size = new System.Drawing.Size(157, 21); + this.lblTitle.TabIndex = 0; + this.lblTitle.Text = "Update Generator"; + this.lblTitle.Click += new System.EventHandler(this.label1_Click); + // + // SidebarPanel + // + this.SidebarPanel.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(83)))), ((int)(((byte)(92)))), ((int)(((byte)(156))))); + this.SidebarPanel.Dock = System.Windows.Forms.DockStyle.Left; + this.SidebarPanel.Location = new System.Drawing.Point(0, 33); + this.SidebarPanel.Name = "SidebarPanel"; + this.SidebarPanel.Size = new System.Drawing.Size(170, 275); + this.SidebarPanel.TabIndex = 1; + // + // ContentPanel + // + this.ContentPanel.BackColor = System.Drawing.Color.WhiteSmoke; + this.ContentPanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.ContentPanel.Location = new System.Drawing.Point(170, 33); + this.ContentPanel.Name = "ContentPanel"; + this.ContentPanel.Size = new System.Drawing.Size(549, 275); + this.ContentPanel.TabIndex = 2; // // elipseComponent1 // this.elipseComponent1.Control = this; this.elipseComponent1.Radius = 5; // - // pictureBox1 - // - this.pictureBox1.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pictureBox1.BackgroundImage"))); - this.pictureBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; - this.pictureBox1.Location = new System.Drawing.Point(3, 6); - this.pictureBox1.Name = "pictureBox1"; - this.pictureBox1.Size = new System.Drawing.Size(24, 24); - this.pictureBox1.TabIndex = 1; - this.pictureBox1.TabStop = false; - // // TestForm // this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BackColor = System.Drawing.SystemColors.ControlLight; this.ClientSize = new System.Drawing.Size(719, 308); - this.Controls.Add(this.panel3); - this.Controls.Add(this.panel2); - this.Controls.Add(this.panel1); + this.Controls.Add(this.ContentPanel); + this.Controls.Add(this.SidebarPanel); + this.Controls.Add(this.HeaderPanel); this.DoubleBuffered = true; this.Font = new System.Drawing.Font("Century Gothic", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; @@ -117,9 +160,12 @@ private void InitializeComponent() this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "TestForm"; this.Click += new System.EventHandler(this.TestForm_Click); - this.panel1.ResumeLayout(false); - this.panel1.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.HeaderPanel.ResumeLayout(false); + this.HeaderPanel.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbMinimize)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbMaximize)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbClose)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbIcon)).EndInit(); this.ResumeLayout(false); } @@ -127,10 +173,13 @@ private void InitializeComponent() #endregion private UI.ElipseComponent elipseComponent1; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Panel panel2; - private System.Windows.Forms.Panel panel1; - private System.Windows.Forms.Panel panel3; - private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.Label lblTitle; + private System.Windows.Forms.Panel SidebarPanel; + private System.Windows.Forms.Panel HeaderPanel; + private System.Windows.Forms.Panel ContentPanel; + private System.Windows.Forms.PictureBox pbIcon; + private System.Windows.Forms.PictureBox pbClose; + private System.Windows.Forms.PictureBox pbMinimize; + private System.Windows.Forms.PictureBox pbMaximize; } } \ No newline at end of file diff --git a/UpdateLib/UpdateLib.Generator/TestForm.cs b/UpdateLib/UpdateLib.Generator/TestForm.cs index 150419c..8cf06e5 100644 --- a/UpdateLib/UpdateLib.Generator/TestForm.cs +++ b/UpdateLib/UpdateLib.Generator/TestForm.cs @@ -25,5 +25,21 @@ private void label1_Click(object sender, EventArgs e) { } + + private void pbMinimize_Click(object sender, EventArgs e) + { + WindowState = FormWindowState.Minimized; + } + + private void pbMaximize_Click(object sender, EventArgs e) + { + MaximumSize = Screen.FromControl(this).WorkingArea.Size; + WindowState = (WindowState == FormWindowState.Normal ? FormWindowState.Maximized : FormWindowState.Normal); + } + + private void pbClose_Click(object sender, EventArgs e) + { + Close(); + } } } diff --git a/UpdateLib/UpdateLib.Generator/TestForm.resx b/UpdateLib/UpdateLib.Generator/TestForm.resx index 95a00c2..ade62ce 100644 --- a/UpdateLib/UpdateLib.Generator/TestForm.resx +++ b/UpdateLib/UpdateLib.Generator/TestForm.resx @@ -118,20 +118,48 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAJsSURBVFhH7ZY7ixRBFIVHVFjQQE18458xFBTFByYiJquIYqSCKIKJihqJmJhoYiSyvtd/IIji - A1cRNBPXZR47szM9Onv9qjnV1s5sT1cnC8IcOHT3rXPuramu6bqVEUYog1bLNtY7dqzWsefwI5yutW2G - 65dqxyZqiZ2dmbOtkg+A8TO6LQeSbqHIbdiFVsDf1cTuTrdsk+wpiF9243qMB8l2Y2wquWcHvoYv4SSr - 8IprAkNNw3ldDu6v+HiaNBYs6ylM894M37GM+3+arZYkg5mN1RM7iOdDoO/xyl4Ez/ETYPY7XQIZe+79 - UWS5hnOBZiUTOY/nj7wLKNlw/JqzzYgbMrniezQUDSbx2BcNqeHhoOAdbyDROYWjwbJfC4uGlCQf1bZt - Q+iXb4olXaGhKFD8ui+2GCXLBwlOeDGTOaRwIZjoMrw3wmKLUfJ8IHoqcbdqtkbhQvwwW4VnexElzwei - Kegm8EahpQWFZzWBJwr9/+DH+NfaUGhpQeG3msAnhfLBN2BvIc3WSl6Iutk6CqeHGJ/pRwrnQzPNZ2Kn - JY0Cf+XDgX9c4XwE4kGWLO7OBXyf5e+6fkJD+ciK9bNkcQd+/cUgx02FhyMw/GPb7ms4GniO4PVHea3Z - tA0aGo6s6ELOk/BSzLmAZgz91cDba3Rsh4aLERiNb/tDrllDwvN7TscDrojkGbTbx+F3r4c9dv5JSeKQ - mfXOue7j2X8dPRO1YZPQtWWuPevvF2dpanalScsgNfdtONeUsqHuMRbTlDrNLdfUyF4OLPEF3Q6AjbSe - 13CcAg/gN+gaUdegfoXP4NHozTbCCCkqlb/tLyiYAPrvlwAAAABJRU5ErkJggg== + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAALGPC/xhBQAAAHhJREFUSEtj + GAUkgffv3wt8/vzZgRIMMgNqHCYAKfj69et/SjDIDKhxmABmwbdv3wpgLiIWg/QQbQFeRTgAUXpHLRi1 + AC8YgRZ8//7dDsQmBgPVO5FjgTyQ3UAMBqpVJNkCqBDRgCQLaF7YUYLxWkDzCmcUYAIGBgDTAbB9WZmz + lgAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAALGPC/xhBQAAAN9JREFUSEvt + VTkOwjAQzA/gBRQ8hOs/CERDm5Jn8MK4sBO7g11pLY20TrSO24w08ioz40mR2N2GKjjn9jHGcwuHYdjJ + dhre+9s4jr8WUslJttPIBdM0PWi+1pAyL3PBomkGpiyaUkpHequPheytLqD5wrOF7F1dwKvICujBrMga + aMrhEMKX1r5E0doKLGwq4FVkBfRgVmQNNGFYZAX0YFZkDTRhWGQF9GBWZA005bCFqwqIB/pK3hayt7pA + HplRVUC//52MxeN4jpR5mgtauFjAFw6VFI9jKxcvnA0aXfcH9fiuLoI2qioAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAALGPC/xhBQAAATNJREFUSEvt + lc1qwkAUhVO79ocudOOzVPR9SqWbbtNi60YUXLizLvs6voHbQkhCyN8yPXc4EUJimMxs/eDg3Js75zhR + EudOJ8IwHOV5PrNREARD2tWJ43iRpmlhI4Q8065OGZBl2SvW8y7CnjftgNahG2jtbRryfX/AZYWiKB48 + z+uzNAtAPUZ9gVw1QMQcvT10LkOMT4B6JT3c443UMO+hPkoP+lRDwDhAQO9L+kmSbPFZmn/wssIqQED/ + m8Y1c8EqgLflh+bqJLx0xTiA5ieau5A6CUJ2HFEYBcD8EUa/NHxXQwA/+LoMkX+U9IwCYDRF/SeGaoCI + KfoH6BJF0ZP0jAIEfMsJlxUkBPNjluYBunQKwC15wWDj4/iWsGepHWCj1gB54SCk8XGsq9YXzp06jvMP + ywAf8wYrhBkAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAmxJREFUWEft + ljuLFEEUhUdUWNBATXzjnzEUFMUHJiImq4hipIIogomKGomYmGhiJLK+138giOIDVxE0E9dlHjuzMz06 + e/2qOdXWzmxPVycLwhw4dPetc+6tqa7pupURRiiDVss21jt2rNax5/AjnK61bYbrl2rHJmqJnZ2Zs62S + D4DxM7otB5Juocht2IVWwN/VxO5Ot2yT7CmIX3bjeowHyXZjbCq5Zwe+hi/hJKvwimsCQ03DeV0O7q/4 + eJo0FizrKUzz3gzfsYz7f5qtliSDmY3VEzuI50Og7/HKXgTP8RNg9jtdAhl77v1RZLmGc4FmJRM5j+eP + vAso2XD8mrPNiBsyueJ7NBQNJvHYFw2p4eGg4B1vINE5haPBsl8Li4aUJB/Vtm1D6JdviiVdoaEoUPy6 + L7YYJcsHCU54MZM5pHAhmOgyvDfCYotR8nwgeipxt2q2RuFC/DBbhWd7ESXPB6Ip6CbwRqGlBYVnNYEn + Cv3/4Mf419pQaGlB4beawCeF8sE3YG8hzdZKXoi62ToKp4cYn+lHCudDM81nYqcljQJ/5cOBf1zhfATi + QZYs7s4FfJ/l77p+QkP5yIr1s2RxB379xSDHTYWHIzD8Y9vuazgaeI7g9Ud5rdm0DRoajqzoQs6T8FLM + uYBmDP3VwNtrdGyHhosRGI1v+0OuWUPC83tOxwOuiOQZtNvH4Xevhz12/klJ4pCZ9c657uPZfx09E7Vh + k9C1Za496+8XZ2lqdqVJyyA1920415Syoe4xFtOUOs0t19TIXg4s8QXdDoCNtJ7XcJwCD+A36BpR16B+ + hc/g0ejNNsIIKSqVv+0vKJgA+u+XAAAAAElFTkSuQmCC From c4a684edb4e801cdabdaf3c786205a92b66a0167 Mon Sep 17 00:00:00 2001 From: Matthias Beerens Date: Mon, 3 Apr 2017 16:22:00 +0200 Subject: [PATCH 08/31] Make Form Movable --- .../UpdateLib.Generator/TestForm.Designer.cs | 67 +++++++------- UpdateLib/UpdateLib.Generator/TestForm.cs | 10 +-- .../UpdateLib.Generator/UI/HoverPictureBox.cs | 90 +++++++++++++++++++ .../UpdateLib.Generator/UI/MoveablePanel.cs | 36 ++++++++ .../UpdateLib.Generator.csproj | 6 ++ 5 files changed, 172 insertions(+), 37 deletions(-) create mode 100644 UpdateLib/UpdateLib.Generator/UI/HoverPictureBox.cs create mode 100644 UpdateLib/UpdateLib.Generator/UI/MoveablePanel.cs diff --git a/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs b/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs index 7001668..fae5b41 100644 --- a/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs +++ b/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs @@ -30,14 +30,14 @@ private void InitializeComponent() { this.components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TestForm)); - this.HeaderPanel = new System.Windows.Forms.Panel(); - this.pbMinimize = new System.Windows.Forms.PictureBox(); - this.pbMaximize = new System.Windows.Forms.PictureBox(); - this.pbClose = new System.Windows.Forms.PictureBox(); - this.pbIcon = new System.Windows.Forms.PictureBox(); - this.lblTitle = new System.Windows.Forms.Label(); this.SidebarPanel = new System.Windows.Forms.Panel(); this.ContentPanel = new System.Windows.Forms.Panel(); + this.HeaderPanel = new UpdateLib.Generator.UI.MoveablePanel(); + this.pbMinimize = new UpdateLib.Generator.UI.HoverPictureBox(); + this.pbMaximize = new UpdateLib.Generator.UI.HoverPictureBox(); + this.pbClose = new UpdateLib.Generator.UI.HoverPictureBox(); + this.pbIcon = new System.Windows.Forms.PictureBox(); + this.lblTitle = new System.Windows.Forms.Label(); this.elipseComponent1 = new UpdateLib.Generator.UI.ElipseComponent(this.components); this.HeaderPanel.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.pbMinimize)).BeginInit(); @@ -46,6 +46,26 @@ private void InitializeComponent() ((System.ComponentModel.ISupportInitialize)(this.pbIcon)).BeginInit(); this.SuspendLayout(); // + // SidebarPanel + // + this.SidebarPanel.BackColor = System.Drawing.Color.WhiteSmoke; + this.SidebarPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.SidebarPanel.Dock = System.Windows.Forms.DockStyle.Left; + this.SidebarPanel.Location = new System.Drawing.Point(0, 33); + this.SidebarPanel.Name = "SidebarPanel"; + this.SidebarPanel.Size = new System.Drawing.Size(170, 275); + this.SidebarPanel.TabIndex = 1; + // + // ContentPanel + // + this.ContentPanel.BackColor = System.Drawing.Color.WhiteSmoke; + this.ContentPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.ContentPanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.ContentPanel.Location = new System.Drawing.Point(170, 33); + this.ContentPanel.Name = "ContentPanel"; + this.ContentPanel.Size = new System.Drawing.Size(549, 275); + this.ContentPanel.TabIndex = 2; + // // HeaderPanel // this.HeaderPanel.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(78)))), ((int)(((byte)(99)))), ((int)(((byte)(133))))); @@ -58,6 +78,7 @@ private void InitializeComponent() this.HeaderPanel.Location = new System.Drawing.Point(0, 0); this.HeaderPanel.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); this.HeaderPanel.Name = "HeaderPanel"; + this.HeaderPanel.ParentForm = this; this.HeaderPanel.Size = new System.Drawing.Size(719, 33); this.HeaderPanel.TabIndex = 1; // @@ -65,7 +86,7 @@ private void InitializeComponent() // this.pbMinimize.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.pbMinimize.Image = ((System.Drawing.Image)(resources.GetObject("pbMinimize.Image"))); - this.pbMinimize.Location = new System.Drawing.Point(645, 3); + this.pbMinimize.Location = new System.Drawing.Point(645, 5); this.pbMinimize.Name = "pbMinimize"; this.pbMinimize.Size = new System.Drawing.Size(24, 24); this.pbMinimize.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; @@ -76,8 +97,9 @@ private void InitializeComponent() // pbMaximize // this.pbMaximize.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.pbMaximize.BackColor = System.Drawing.Color.Transparent; this.pbMaximize.Image = ((System.Drawing.Image)(resources.GetObject("pbMaximize.Image"))); - this.pbMaximize.Location = new System.Drawing.Point(668, 3); + this.pbMaximize.Location = new System.Drawing.Point(668, 5); this.pbMaximize.Name = "pbMaximize"; this.pbMaximize.Size = new System.Drawing.Size(24, 24); this.pbMaximize.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; @@ -89,7 +111,7 @@ private void InitializeComponent() // this.pbClose.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.pbClose.Image = ((System.Drawing.Image)(resources.GetObject("pbClose.Image"))); - this.pbClose.Location = new System.Drawing.Point(691, 3); + this.pbClose.Location = new System.Drawing.Point(691, 5); this.pbClose.Name = "pbClose"; this.pbClose.Size = new System.Drawing.Size(24, 24); this.pbClose.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; @@ -118,25 +140,6 @@ private void InitializeComponent() this.lblTitle.Size = new System.Drawing.Size(157, 21); this.lblTitle.TabIndex = 0; this.lblTitle.Text = "Update Generator"; - this.lblTitle.Click += new System.EventHandler(this.label1_Click); - // - // SidebarPanel - // - this.SidebarPanel.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(83)))), ((int)(((byte)(92)))), ((int)(((byte)(156))))); - this.SidebarPanel.Dock = System.Windows.Forms.DockStyle.Left; - this.SidebarPanel.Location = new System.Drawing.Point(0, 33); - this.SidebarPanel.Name = "SidebarPanel"; - this.SidebarPanel.Size = new System.Drawing.Size(170, 275); - this.SidebarPanel.TabIndex = 1; - // - // ContentPanel - // - this.ContentPanel.BackColor = System.Drawing.Color.WhiteSmoke; - this.ContentPanel.Dock = System.Windows.Forms.DockStyle.Fill; - this.ContentPanel.Location = new System.Drawing.Point(170, 33); - this.ContentPanel.Name = "ContentPanel"; - this.ContentPanel.Size = new System.Drawing.Size(549, 275); - this.ContentPanel.TabIndex = 2; // // elipseComponent1 // @@ -175,11 +178,11 @@ private void InitializeComponent() private UI.ElipseComponent elipseComponent1; private System.Windows.Forms.Label lblTitle; private System.Windows.Forms.Panel SidebarPanel; - private System.Windows.Forms.Panel HeaderPanel; + private UI.MoveablePanel HeaderPanel; private System.Windows.Forms.Panel ContentPanel; private System.Windows.Forms.PictureBox pbIcon; - private System.Windows.Forms.PictureBox pbClose; - private System.Windows.Forms.PictureBox pbMinimize; - private System.Windows.Forms.PictureBox pbMaximize; + private UI.HoverPictureBox pbClose; + private UI.HoverPictureBox pbMinimize; + private UI.HoverPictureBox pbMaximize; } } \ No newline at end of file diff --git a/UpdateLib/UpdateLib.Generator/TestForm.cs b/UpdateLib/UpdateLib.Generator/TestForm.cs index 8cf06e5..5378b40 100644 --- a/UpdateLib/UpdateLib.Generator/TestForm.cs +++ b/UpdateLib/UpdateLib.Generator/TestForm.cs @@ -21,11 +21,6 @@ private void TestForm_Click(object sender, EventArgs e) WindowState = (WindowState == FormWindowState.Maximized) ? FormWindowState.Normal : FormWindowState.Maximized; } - private void label1_Click(object sender, EventArgs e) - { - - } - private void pbMinimize_Click(object sender, EventArgs e) { WindowState = FormWindowState.Minimized; @@ -41,5 +36,10 @@ private void pbClose_Click(object sender, EventArgs e) { Close(); } + + private void label1_Click(object sender, EventArgs e) + { + + } } } diff --git a/UpdateLib/UpdateLib.Generator/UI/HoverPictureBox.cs b/UpdateLib/UpdateLib.Generator/UI/HoverPictureBox.cs new file mode 100644 index 0000000..77ee5da --- /dev/null +++ b/UpdateLib/UpdateLib.Generator/UI/HoverPictureBox.cs @@ -0,0 +1,90 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace UpdateLib.Generator.UI +{ + public class HoverPictureBox : PictureBox + { + private int alpha = 255; + private bool mouseInBox = false; + private bool mouseDown = false; + + protected override void OnMouseEnter(EventArgs e) + { + base.OnMouseEnter(e); + + if (!mouseInBox) + { + mouseInBox = true; + SwitchBackgroundColor(); + } + } + + private void SwitchBackgroundColor() + { + alpha = (mouseInBox ? 100 : 0); + alpha = (mouseDown ? 150 : alpha); + BackColor = Color.FromArgb(alpha, Color.WhiteSmoke); + } + + protected override void OnMouseHover(EventArgs e) + { + base.OnMouseHover(e); + + if (!mouseInBox) + { + mouseInBox = true; + SwitchBackgroundColor(); + } + } + + protected override void OnMouseLeave(EventArgs e) + { + base.OnMouseLeave(e); + + if (mouseInBox) + { + mouseInBox = false; + SwitchBackgroundColor(); + } + } + + protected override void OnMouseMove(MouseEventArgs e) + { + base.OnMouseMove(e); + + if (!mouseInBox) + { + mouseInBox = true; + SwitchBackgroundColor(); + } + } + + protected override void OnMouseDown(MouseEventArgs e) + { + base.OnMouseDown(e); + + if (!mouseDown) + { + mouseDown = true; + SwitchBackgroundColor(); + } + } + + protected override void OnMouseUp(MouseEventArgs e) + { + base.OnMouseUp(e); + + if (mouseDown) + { + mouseDown = false; + SwitchBackgroundColor(); + } + } + + } +} diff --git a/UpdateLib/UpdateLib.Generator/UI/MoveablePanel.cs b/UpdateLib/UpdateLib.Generator/UI/MoveablePanel.cs new file mode 100644 index 0000000..3b1a3d2 --- /dev/null +++ b/UpdateLib/UpdateLib.Generator/UI/MoveablePanel.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Windows.Forms; + +namespace UpdateLib.Generator.UI +{ + public class MoveablePanel : Panel + { + public Form ParentForm { get; set; } + + private const int WM_NCLBUTTONDOWN = 0xA1; + private const int HT_CAPTION = 0x2; + + [DllImport("user32.dll")] + public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam); + [DllImport("user32.dll")] + public static extern bool ReleaseCapture(); + + protected override void OnMouseMove(MouseEventArgs e) + { + base.OnMouseMove(e); + + if (ParentForm != null) + { + ReleaseCapture(); + SendMessage(this.ParentForm.Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0); + } + + } + } +} diff --git a/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj b/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj index 3776c66..9ec3cb2 100644 --- a/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj +++ b/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj @@ -72,6 +72,12 @@ Component + + Component + + + Component + MainForm.cs From bcf3bd65eb6771381997a538a7f104cea03d3a4e Mon Sep 17 00:00:00 2001 From: Matthias Beerens Date: Sun, 9 Apr 2017 13:12:18 +0200 Subject: [PATCH 09/31] Working some more on the FlatButton design --- .../UpdateLib.Generator/TestForm.Designer.cs | 32 +++- .../UpdateLib.Generator/UI/FlatButton.cs | 142 ++++++++++++++++++ .../UpdateLib.Generator.csproj | 3 + 3 files changed, 176 insertions(+), 1 deletion(-) create mode 100644 UpdateLib/UpdateLib.Generator/UI/FlatButton.cs diff --git a/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs b/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs index fae5b41..2f7220e 100644 --- a/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs +++ b/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs @@ -32,6 +32,7 @@ private void InitializeComponent() System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TestForm)); this.SidebarPanel = new System.Windows.Forms.Panel(); this.ContentPanel = new System.Windows.Forms.Panel(); + this.flatButton1 = new UpdateLib.Generator.UI.FlatButton(); this.HeaderPanel = new UpdateLib.Generator.UI.MoveablePanel(); this.pbMinimize = new UpdateLib.Generator.UI.HoverPictureBox(); this.pbMaximize = new UpdateLib.Generator.UI.HoverPictureBox(); @@ -39,6 +40,8 @@ private void InitializeComponent() this.pbIcon = new System.Windows.Forms.PictureBox(); this.lblTitle = new System.Windows.Forms.Label(); this.elipseComponent1 = new UpdateLib.Generator.UI.ElipseComponent(this.components); + this.flatButton2 = new UpdateLib.Generator.UI.FlatButton(); + this.SidebarPanel.SuspendLayout(); this.HeaderPanel.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.pbMinimize)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.pbMaximize)).BeginInit(); @@ -48,8 +51,10 @@ private void InitializeComponent() // // SidebarPanel // - this.SidebarPanel.BackColor = System.Drawing.Color.WhiteSmoke; + this.SidebarPanel.BackColor = System.Drawing.Color.DarkGray; this.SidebarPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.SidebarPanel.Controls.Add(this.flatButton2); + this.SidebarPanel.Controls.Add(this.flatButton1); this.SidebarPanel.Dock = System.Windows.Forms.DockStyle.Left; this.SidebarPanel.Location = new System.Drawing.Point(0, 33); this.SidebarPanel.Name = "SidebarPanel"; @@ -66,6 +71,17 @@ private void InitializeComponent() this.ContentPanel.Size = new System.Drawing.Size(549, 275); this.ContentPanel.TabIndex = 2; // + // flatButton1 + // + this.flatButton1.ActiveItem = false; + this.flatButton1.BackHoverColor = System.Drawing.Color.LightGray; + this.flatButton1.BackSelectedColor = System.Drawing.Color.DimGray; + this.flatButton1.Location = new System.Drawing.Point(0, 0); + this.flatButton1.Name = "flatButton1"; + this.flatButton1.Size = new System.Drawing.Size(169, 63); + this.flatButton1.TabIndex = 0; + this.flatButton1.Text = "flatButton1"; + // // HeaderPanel // this.HeaderPanel.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(78)))), ((int)(((byte)(99)))), ((int)(((byte)(133))))); @@ -146,6 +162,17 @@ private void InitializeComponent() this.elipseComponent1.Control = this; this.elipseComponent1.Radius = 5; // + // flatButton2 + // + this.flatButton2.ActiveItem = false; + this.flatButton2.BackHoverColor = System.Drawing.Color.LightGray; + this.flatButton2.BackSelectedColor = System.Drawing.Color.DimGray; + this.flatButton2.Location = new System.Drawing.Point(-1, 63); + this.flatButton2.Name = "flatButton2"; + this.flatButton2.Size = new System.Drawing.Size(169, 63); + this.flatButton2.TabIndex = 1; + this.flatButton2.Text = "flatButton2"; + // // TestForm // this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F); @@ -163,6 +190,7 @@ private void InitializeComponent() this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "TestForm"; this.Click += new System.EventHandler(this.TestForm_Click); + this.SidebarPanel.ResumeLayout(false); this.HeaderPanel.ResumeLayout(false); this.HeaderPanel.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.pbMinimize)).EndInit(); @@ -184,5 +212,7 @@ private void InitializeComponent() private UI.HoverPictureBox pbClose; private UI.HoverPictureBox pbMinimize; private UI.HoverPictureBox pbMaximize; + private UI.FlatButton flatButton1; + private UI.FlatButton flatButton2; } } \ No newline at end of file diff --git a/UpdateLib/UpdateLib.Generator/UI/FlatButton.cs b/UpdateLib/UpdateLib.Generator/UI/FlatButton.cs new file mode 100644 index 0000000..a4c0c01 --- /dev/null +++ b/UpdateLib/UpdateLib.Generator/UI/FlatButton.cs @@ -0,0 +1,142 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Drawing.Text; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace UpdateLib.Generator.UI +{ + [DefaultEvent(nameof(Click))] + public class FlatButton : Control + { + private bool mouseInside = false; + + private Bitmap buffer; + + private bool m_activeItem; + + private Color m_backColor; + + public bool ActiveItem + { + get { return m_activeItem; } + set { m_activeItem = value; UpdateBackgroundColor(); } + } + + private Color m_hoveColor; + + public Color BackHoverColor + { + get { return m_hoveColor; } + set { m_hoveColor = value; } + } + + private Color m_selectedColor; + + public Color BackSelectedColor + { + get { return m_selectedColor; } + set { m_selectedColor = value; } + } + + + public FlatButton() + : base() + { + SetStyle(ControlStyles.AllPaintingInWmPaint + | ControlStyles.UserPaint + | ControlStyles.ResizeRedraw + | ControlStyles.OptimizedDoubleBuffer + | ControlStyles.SupportsTransparentBackColor, true); + + DoubleBuffered = true; + } + + protected override void OnClick(EventArgs e) + { + ActiveItem = true; + + foreach (Control c in Parent.Controls) + { + FlatButton button = c as FlatButton; + + if (button == null || button == this) + continue; + + button.ActiveItem = false; + } + + base.OnClick(e); + } + + protected override void OnMouseEnter(EventArgs e) + { + base.OnMouseEnter(e); + + if (!mouseInside) + { + mouseInside = true; + UpdateBackgroundColor(); + } + } + + protected override void OnMouseLeave(EventArgs e) + { + base.OnMouseLeave(e); + + if (mouseInside) + { + mouseInside = false; + UpdateBackgroundColor(); + } + } + + private void UpdateBackgroundColor() + { + m_backColor = (mouseInside ? m_hoveColor : BackColor); + m_backColor = (m_activeItem ? m_selectedColor : m_backColor); + + Invalidate(); + } + + protected override void OnResize(EventArgs e) + { + base.OnResize(e); + + buffer = new Bitmap(Width, Height); + } + + protected override void OnPaint(PaintEventArgs e) + { + Rectangle rect = new Rectangle(0, 0, Width , Height ); + + buffer = buffer ?? new Bitmap(Width, Height); + + using (Graphics g = Graphics.FromImage(buffer)) + { + g.SmoothingMode = SmoothingMode.HighQuality; + g.PixelOffsetMode = PixelOffsetMode.HighQuality; + g.TextRenderingHint = TextRenderingHint.ClearTypeGridFit; + + g.Clear(Color.White); + + g.FillRectangle(new SolidBrush(m_backColor), rect); + + SizeF textSize = g.MeasureString(Text, Font, Width); + + float x = (Width / 2) - (textSize.Width / 2); + float y = (Height / 2) - (textSize.Height / 2); + + g.DrawString(Text, Font, new SolidBrush(ForeColor), x, y); + + base.OnPaint(e); + e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; + e.Graphics.DrawImageUnscaled(buffer, 0, 0); + } + } + } +} diff --git a/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj b/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj index 9ec3cb2..29af0b6 100644 --- a/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj +++ b/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj @@ -69,6 +69,9 @@ Component + + Component + Component From f90a039cd99139802e011436ff871c449bdc4304 Mon Sep 17 00:00:00 2001 From: Matthias Beerens Date: Sun, 9 Apr 2017 23:15:20 +0200 Subject: [PATCH 10/31] Added a loader control --- .../UpdateLib.Generator/TestForm.Designer.cs | 26 +- UpdateLib/UpdateLib.Generator/TestForm.cs | 11 + .../UpdateLib.Generator/UI/FlatButton.cs | 5 +- .../UI/LoaderControl.Designer.cs | 67 + .../UpdateLib.Generator/UI/LoaderControl.cs | 76 + .../UpdateLib.Generator/UI/LoaderControl.resx | 1773 +++++++++++++++++ .../UpdateLib.Generator/UI/MoveablePanel.cs | 26 +- .../UpdateLib.Generator.csproj | 9 + 8 files changed, 1976 insertions(+), 17 deletions(-) create mode 100644 UpdateLib/UpdateLib.Generator/UI/LoaderControl.Designer.cs create mode 100644 UpdateLib/UpdateLib.Generator/UI/LoaderControl.cs create mode 100644 UpdateLib/UpdateLib.Generator/UI/LoaderControl.resx diff --git a/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs b/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs index 2f7220e..bb9e25d 100644 --- a/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs +++ b/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs @@ -32,6 +32,7 @@ private void InitializeComponent() System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TestForm)); this.SidebarPanel = new System.Windows.Forms.Panel(); this.ContentPanel = new System.Windows.Forms.Panel(); + this.flatButton2 = new UpdateLib.Generator.UI.FlatButton(); this.flatButton1 = new UpdateLib.Generator.UI.FlatButton(); this.HeaderPanel = new UpdateLib.Generator.UI.MoveablePanel(); this.pbMinimize = new UpdateLib.Generator.UI.HoverPictureBox(); @@ -40,7 +41,6 @@ private void InitializeComponent() this.pbIcon = new System.Windows.Forms.PictureBox(); this.lblTitle = new System.Windows.Forms.Label(); this.elipseComponent1 = new UpdateLib.Generator.UI.ElipseComponent(this.components); - this.flatButton2 = new UpdateLib.Generator.UI.FlatButton(); this.SidebarPanel.SuspendLayout(); this.HeaderPanel.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.pbMinimize)).BeginInit(); @@ -71,6 +71,18 @@ private void InitializeComponent() this.ContentPanel.Size = new System.Drawing.Size(549, 275); this.ContentPanel.TabIndex = 2; // + // flatButton2 + // + this.flatButton2.ActiveItem = false; + this.flatButton2.BackHoverColor = System.Drawing.Color.LightGray; + this.flatButton2.BackSelectedColor = System.Drawing.Color.DimGray; + this.flatButton2.Location = new System.Drawing.Point(-1, 63); + this.flatButton2.Name = "flatButton2"; + this.flatButton2.Size = new System.Drawing.Size(169, 63); + this.flatButton2.TabIndex = 1; + this.flatButton2.Text = "flatButton2"; + this.flatButton2.Click += new System.EventHandler(this.flatButton2_Click); + // // flatButton1 // this.flatButton1.ActiveItem = false; @@ -81,6 +93,7 @@ private void InitializeComponent() this.flatButton1.Size = new System.Drawing.Size(169, 63); this.flatButton1.TabIndex = 0; this.flatButton1.Text = "flatButton1"; + this.flatButton1.Click += new System.EventHandler(this.flatButton1_Click); // // HeaderPanel // @@ -162,17 +175,6 @@ private void InitializeComponent() this.elipseComponent1.Control = this; this.elipseComponent1.Radius = 5; // - // flatButton2 - // - this.flatButton2.ActiveItem = false; - this.flatButton2.BackHoverColor = System.Drawing.Color.LightGray; - this.flatButton2.BackSelectedColor = System.Drawing.Color.DimGray; - this.flatButton2.Location = new System.Drawing.Point(-1, 63); - this.flatButton2.Name = "flatButton2"; - this.flatButton2.Size = new System.Drawing.Size(169, 63); - this.flatButton2.TabIndex = 1; - this.flatButton2.Text = "flatButton2"; - // // TestForm // this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F); diff --git a/UpdateLib/UpdateLib.Generator/TestForm.cs b/UpdateLib/UpdateLib.Generator/TestForm.cs index 5378b40..ffde5d8 100644 --- a/UpdateLib/UpdateLib.Generator/TestForm.cs +++ b/UpdateLib/UpdateLib.Generator/TestForm.cs @@ -6,6 +6,7 @@ using System.Linq; using System.Text; using System.Windows.Forms; +using UpdateLib.Generator.UI; namespace UpdateLib.Generator { @@ -41,5 +42,15 @@ private void label1_Click(object sender, EventArgs e) { } + + private void flatButton1_Click(object sender, EventArgs e) + { + LoaderControl.Show(ContentPanel); + } + + private void flatButton2_Click(object sender, EventArgs e) + { + LoaderControl.Hide(ContentPanel); + } } } diff --git a/UpdateLib/UpdateLib.Generator/UI/FlatButton.cs b/UpdateLib/UpdateLib.Generator/UI/FlatButton.cs index a4c0c01..93cc045 100644 --- a/UpdateLib/UpdateLib.Generator/UI/FlatButton.cs +++ b/UpdateLib/UpdateLib.Generator/UI/FlatButton.cs @@ -97,8 +97,9 @@ protected override void OnMouseLeave(EventArgs e) private void UpdateBackgroundColor() { - m_backColor = (mouseInside ? m_hoveColor : BackColor); - m_backColor = (m_activeItem ? m_selectedColor : m_backColor); + m_backColor = (m_activeItem ? m_selectedColor : BackColor); + m_backColor = (mouseInside ? m_hoveColor : m_backColor); + Invalidate(); } diff --git a/UpdateLib/UpdateLib.Generator/UI/LoaderControl.Designer.cs b/UpdateLib/UpdateLib.Generator/UI/LoaderControl.Designer.cs new file mode 100644 index 0000000..efc6d4e --- /dev/null +++ b/UpdateLib/UpdateLib.Generator/UI/LoaderControl.Designer.cs @@ -0,0 +1,67 @@ +namespace UpdateLib.Generator.UI +{ + partial class LoaderControl + { + /// + /// 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 Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LoaderControl)); + this.pbLoading = new System.Windows.Forms.PictureBox(); + ((System.ComponentModel.ISupportInitialize)(this.pbLoading)).BeginInit(); + this.SuspendLayout(); + // + // pbLoading + // + this.pbLoading.BackColor = System.Drawing.Color.Transparent; + this.pbLoading.Dock = System.Windows.Forms.DockStyle.Fill; + this.pbLoading.Image = ((System.Drawing.Image)(resources.GetObject("pbLoading.Image"))); + this.pbLoading.Location = new System.Drawing.Point(0, 0); + this.pbLoading.Name = "pbLoading"; + this.pbLoading.Size = new System.Drawing.Size(300, 300); + this.pbLoading.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbLoading.TabIndex = 0; + this.pbLoading.TabStop = false; + // + // LoaderControl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.White; + this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center; + this.Controls.Add(this.pbLoading); + this.DoubleBuffered = true; + this.Name = "LoaderControl"; + this.Size = new System.Drawing.Size(300, 300); + ((System.ComponentModel.ISupportInitialize)(this.pbLoading)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.PictureBox pbLoading; + } +} diff --git a/UpdateLib/UpdateLib.Generator/UI/LoaderControl.cs b/UpdateLib/UpdateLib.Generator/UI/LoaderControl.cs new file mode 100644 index 0000000..8d79c56 --- /dev/null +++ b/UpdateLib/UpdateLib.Generator/UI/LoaderControl.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace UpdateLib.Generator.UI +{ + + public partial class LoaderControl : UserControl + { + private static Dictionary loaders = new Dictionary(); + + public LoaderControl() + { + InitializeComponent(); + } + + + public static void Show(Control parent) + { + if (!loaders.ContainsKey(parent)) + loaders.Add(parent, new LoaderControl()); + + loaders[parent].ShowLoader(parent); + } + + public void ShowLoader(Control parent) + { + parent.SuspendLayout(); + + parent.Controls.Add(this); + + Size = parent.Size; + Location = new Point(0, 0); + + parent.Resize += ParentResize; + + BringToFront(); + + parent.ResumeLayout(); + } + + private void ParentResize(object sender, EventArgs e) + { + Control parent = sender as Control; + + if (parent == null) + return; + + Size = parent.Size; + } + + public static void Hide(Control parent) + { + if (!loaders.ContainsKey(parent)) + return; + + loaders[parent].HideLoader(parent); + } + + public void HideLoader(Control parent) + { + SuspendLayout(); + + parent.Controls.Remove(this); + + parent.Resize -= ParentResize; + + ResumeLayout(); + } + } +} diff --git a/UpdateLib/UpdateLib.Generator/UI/LoaderControl.resx b/UpdateLib/UpdateLib.Generator/UI/LoaderControl.resx new file mode 100644 index 0000000..18581d8 --- /dev/null +++ b/UpdateLib/UpdateLib.Generator/UI/LoaderControl.resx @@ -0,0 +1,1773 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + R0lGODlh3QDdAMQfAIXJ/2a7/3fC/1i0//P6/0Ws/+Tz/5rS/9Pr/+r2/7Td/8Lk/ySd/6za/xya//3+ + /zKk/7vh//j8/6LV/83p/yug/9nu/5HO/93w/z2p/8jm/zmn/02w/+/4/6bY/////yH/C05FVFNDQVBF + Mi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6 + cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9 + IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAg + ICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1z + eW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6 + Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29t + L3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20v + eGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTY0QTA4MjE5RDhEMTFFMzhCOTBBRjVB + MDVFNTlCODciIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTY0QTA4MjA5RDhEMTFFMzhCOTBBRjVB + MDVFNTlCODciIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIFdpbmRvd3MiPiA8 + eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmRpZDpBMkQ4NTI0QTg2OURFMzEx + OUQ2MjlFOTY5Q0VBRDgxMCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBMkQ4NTI0QTg2OURFMzEx + OUQ2MjlFOTY5Q0VBRDgxMCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0 + YT4gPD94cGFja2V0IGVuZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb + 2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHAv769vLu6ubi3trW0s7KxsK+urayrqqmop6alpKOioaCf + np2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRj + YmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgn + JiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAUDAB8ALAAAAADdAN0AQAX/ + 4CeOZGmeaKqubOtOIvx88+zeeK7vfO+zAgjD4RgOicikcslUPp7QqBQqeVYl1yx2y8X+vuAwWMgom8/l + YtoIAYjfqy6WMKcT7vi8BM7vlzgMFYFohAwQfoiJIhJ5HQSOkI8dkx2KliQFFZqbnJqBl6ChK5Skkwmm + p6I7EBAVra2dFaqztDgECbi5urkEtR+swMHAF77FxjoGCcnLysoGisLRAcfU1TwdBtna289gG98bEOHj + G9bm5z3ZGAbr7ew6AeDy4Oj19jwY+fr73SoZ/wD/bchwr6DBHPosYFDIEEXAhwQPSpy4woLFixhLZCiw + sWOBAtMoihxJAgOCkyhR/z6L8LGlywIkY5JMSRPBhwkvW3IYILPnRAsUEFAIOlSoCA5Ikyr1ybTg0KdQ + KYxQSpVDg6ZYqyXQwLWrVxNKB+xMmrVsLa9oNagQO6Ct27YCzMpNhGCB3bt4b7zd23au3y8LIgTGe9eH + 2wCH3f5dzCKC48eQI/AJgLjyAMshGfuNoICz586dF4i6fJmyadNuNI/krKC169cKzB04Tfs0MdXHIjTY + zXu3gga/FYge2eC0AMrHAxxffht3GAUeontoML13b9welCtfLqA7d+/dY6tWMKG8efMeJkhff9W5DwDg + 48eHT18A/fsADnxQiwjDhwYHXBDgAQQWaOCBB0yQYP+C54nn3jkNXGAfAPhRaOGFGAJwAYUbXtChhyCG + KCKIAwp4gAf8PdhUEE206OIUME5RxQNY0HiFDSpaUwAaahTh448uOgBTc37UYOORciQ5Rx2M7JEjDgIU + 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 + AAA7 + + + \ No newline at end of file diff --git a/UpdateLib/UpdateLib.Generator/UI/MoveablePanel.cs b/UpdateLib/UpdateLib.Generator/UI/MoveablePanel.cs index 3b1a3d2..43f0f64 100644 --- a/UpdateLib/UpdateLib.Generator/UI/MoveablePanel.cs +++ b/UpdateLib/UpdateLib.Generator/UI/MoveablePanel.cs @@ -17,20 +17,40 @@ public class MoveablePanel : Panel private const int HT_CAPTION = 0x2; [DllImport("user32.dll")] - public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam); + private static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam); + [DllImport("user32.dll")] - public static extern bool ReleaseCapture(); + private static extern bool ReleaseCapture(); protected override void OnMouseMove(MouseEventArgs e) { base.OnMouseMove(e); + MoveParentForm(this, e); + } + + private void MoveParentForm(object sender, MouseEventArgs e) + { if (ParentForm != null) { ReleaseCapture(); SendMessage(this.ParentForm.Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0); } - } + + protected override void OnControlAdded(ControlEventArgs e) + { + base.OnControlAdded(e); + + e.Control.MouseMove += MoveParentForm; + } + + protected override void OnControlRemoved(ControlEventArgs e) + { + base.OnControlRemoved(e); + + e.Control.MouseMove -= MoveParentForm; + } + } } diff --git a/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj b/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj index 29af0b6..f15da21 100644 --- a/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj +++ b/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj @@ -78,6 +78,12 @@ Component + + UserControl + + + LoaderControl.cs + Component @@ -97,6 +103,9 @@ TestForm.cs + + LoaderControl.cs + SettingsSingleFileGenerator Settings.Designer.cs From 5c81f7ab4e7882feee0de3a93523a898130e96d3 Mon Sep 17 00:00:00 2001 From: Matthias Beerens Date: Mon, 10 Apr 2017 17:39:53 +0200 Subject: [PATCH 11/31] Added loading.gif --- .../Properties/Resources.Designer.cs | 10 ++++++++++ .../Properties/Resources.resx | 3 +++ .../UpdateLib.Generator/Resources/loading.gif | Bin 0 -> 98823 bytes .../UpdateLib.Generator/UI/MoveablePanel.cs | 3 +++ .../UpdateLib.Generator.csproj | 1 + 5 files changed, 17 insertions(+) create mode 100644 UpdateLib/UpdateLib.Generator/Resources/loading.gif diff --git a/UpdateLib/UpdateLib.Generator/Properties/Resources.Designer.cs b/UpdateLib/UpdateLib.Generator/Properties/Resources.Designer.cs index 9a32315..5693320 100644 --- a/UpdateLib/UpdateLib.Generator/Properties/Resources.Designer.cs +++ b/UpdateLib/UpdateLib.Generator/Properties/Resources.Designer.cs @@ -69,5 +69,15 @@ internal static System.Drawing.Bitmap gears { return ((System.Drawing.Bitmap)(obj)); } } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap loading { + get { + object obj = ResourceManager.GetObject("loading", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } } } diff --git a/UpdateLib/UpdateLib.Generator/Properties/Resources.resx b/UpdateLib/UpdateLib.Generator/Properties/Resources.resx index 878dd82..c0c8fe8 100644 --- a/UpdateLib/UpdateLib.Generator/Properties/Resources.resx +++ b/UpdateLib/UpdateLib.Generator/Properties/Resources.resx @@ -121,4 +121,7 @@ ..\Resources\gears.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\loading.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/UpdateLib/UpdateLib.Generator/Resources/loading.gif b/UpdateLib/UpdateLib.Generator/Resources/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..62d8e4e54726c2634af80e1396191c15e645941c GIT binary patch literal 98823 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 literal 0 HcmV?d00001 diff --git a/UpdateLib/UpdateLib.Generator/UI/MoveablePanel.cs b/UpdateLib/UpdateLib.Generator/UI/MoveablePanel.cs index 43f0f64..1ab213c 100644 --- a/UpdateLib/UpdateLib.Generator/UI/MoveablePanel.cs +++ b/UpdateLib/UpdateLib.Generator/UI/MoveablePanel.cs @@ -42,6 +42,9 @@ protected override void OnControlAdded(ControlEventArgs e) { base.OnControlAdded(e); + if (typeof(HoverPictureBox) == e.Control.GetType()) + return; + e.Control.MouseMove += MoveParentForm; } diff --git a/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj b/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj index f15da21..5cfb3cc 100644 --- a/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj +++ b/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj @@ -127,6 +127,7 @@ + & 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 literal 0 HcmV?d00001 diff --git a/UpdateLib/UpdateLib.Generator/UI/LoaderControl.Designer.cs b/UpdateLib/UpdateLib.Generator/UI/LoaderControl.Designer.cs index efc6d4e..be96d5f 100644 --- a/UpdateLib/UpdateLib.Generator/UI/LoaderControl.Designer.cs +++ b/UpdateLib/UpdateLib.Generator/UI/LoaderControl.Designer.cs @@ -28,40 +28,36 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LoaderControl)); - this.pbLoading = new System.Windows.Forms.PictureBox(); - ((System.ComponentModel.ISupportInitialize)(this.pbLoading)).BeginInit(); + this.pbLoader = new System.Windows.Forms.PictureBox(); + ((System.ComponentModel.ISupportInitialize)(this.pbLoader)).BeginInit(); this.SuspendLayout(); // - // pbLoading + // pbLoader // - this.pbLoading.BackColor = System.Drawing.Color.Transparent; - this.pbLoading.Dock = System.Windows.Forms.DockStyle.Fill; - this.pbLoading.Image = ((System.Drawing.Image)(resources.GetObject("pbLoading.Image"))); - this.pbLoading.Location = new System.Drawing.Point(0, 0); - this.pbLoading.Name = "pbLoading"; - this.pbLoading.Size = new System.Drawing.Size(300, 300); - this.pbLoading.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; - this.pbLoading.TabIndex = 0; - this.pbLoading.TabStop = false; + this.pbLoader.Anchor = System.Windows.Forms.AnchorStyles.None; + this.pbLoader.Image = global::UpdateLib.Generator.Properties.Resources.loading_gear; + this.pbLoader.Location = new System.Drawing.Point(0, 0); + this.pbLoader.Name = "pbLoader"; + this.pbLoader.Size = new System.Drawing.Size(150, 150); + this.pbLoader.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.pbLoader.TabIndex = 0; + this.pbLoader.TabStop = false; // // LoaderControl // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.BackColor = System.Drawing.Color.White; - this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center; - this.Controls.Add(this.pbLoading); - this.DoubleBuffered = true; + this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(249)))), ((int)(((byte)(249)))), ((int)(((byte)(249))))); + this.Controls.Add(this.pbLoader); + this.MinimumSize = new System.Drawing.Size(150, 150); this.Name = "LoaderControl"; - this.Size = new System.Drawing.Size(300, 300); - ((System.ComponentModel.ISupportInitialize)(this.pbLoading)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbLoader)).EndInit(); this.ResumeLayout(false); } #endregion - private System.Windows.Forms.PictureBox pbLoading; + private System.Windows.Forms.PictureBox pbLoader; } } diff --git a/UpdateLib/UpdateLib.Generator/UI/LoaderControl.cs b/UpdateLib/UpdateLib.Generator/UI/LoaderControl.cs index 8d79c56..dd609a3 100644 --- a/UpdateLib/UpdateLib.Generator/UI/LoaderControl.cs +++ b/UpdateLib/UpdateLib.Generator/UI/LoaderControl.cs @@ -9,7 +9,6 @@ namespace UpdateLib.Generator.UI { - public partial class LoaderControl : UserControl { private static Dictionary loaders = new Dictionary(); @@ -17,8 +16,10 @@ public partial class LoaderControl : UserControl public LoaderControl() { InitializeComponent(); - } + SetStyle(ControlStyles.SupportsTransparentBackColor, true); + DoubleBuffered = true; + } public static void Show(Control parent) { diff --git a/UpdateLib/UpdateLib.Generator/UI/LoaderControl.resx b/UpdateLib/UpdateLib.Generator/UI/LoaderControl.resx index 18581d8..7080a7d 100644 --- a/UpdateLib/UpdateLib.Generator/UI/LoaderControl.resx +++ b/UpdateLib/UpdateLib.Generator/UI/LoaderControl.resx @@ -117,1657 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - R0lGODlh3QDdAMQfAIXJ/2a7/3fC/1i0//P6/0Ws/+Tz/5rS/9Pr/+r2/7Td/8Lk/ySd/6za/xya//3+ - /zKk/7vh//j8/6LV/83p/yug/9nu/5HO/93w/z2p/8jm/zmn/02w/+/4/6bY/////yH/C05FVFNDQVBF - Mi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6 - cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9 - IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAg - ICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1z - eW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6 - Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29t - L3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20v - eGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTY0QTA4MjE5RDhEMTFFMzhCOTBBRjVB - MDVFNTlCODciIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTY0QTA4MjA5RDhEMTFFMzhCOTBBRjVB - MDVFNTlCODciIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIFdpbmRvd3MiPiA8 - eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmRpZDpBMkQ4NTI0QTg2OURFMzEx - OUQ2MjlFOTY5Q0VBRDgxMCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBMkQ4NTI0QTg2OURFMzEx - OUQ2MjlFOTY5Q0VBRDgxMCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0 - YT4gPD94cGFja2V0IGVuZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb - 2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHAv769vLu6ubi3trW0s7KxsK+urayrqqmop6alpKOioaCf - np2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRj - YmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgn - JiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAUDAB8ALAAAAADdAN0AQAX/ - 4CeOZGmeaKqubOtOIvx88+zeeK7vfO+zAgjD4RgOicikcslUPp7QqBQqeVYl1yx2y8X+vuAwWMgom8/l - YtoIAYjfqy6WMKcT7vi8BM7vlzgMFYFohAwQfoiJIhJ5HQSOkI8dkx2KliQFFZqbnJqBl6ChK5Skkwmm - p6I7EBAVra2dFaqztDgECbi5urkEtR+swMHAF77FxjoGCcnLysoGisLRAcfU1TwdBtna289gG98bEOHj - G9bm5z3ZGAbr7ew6AeDy4Oj19jwY+fr73SoZ/wD/bchwr6DBHPosYFDIEEXAhwQPSpy4woLFixhLZCiw - sWOBAtMoihxJAgOCkyhR/z6L8LGlywIkY5JMSRPBhwkvW3IYILPnRAsUEFAIOlSoCA5Ikyr1ybTg0KdQ - KYxQSpVDg6ZYqyXQwLWrVxNKB+xMmrVsLa9oNagQO6Ct27YCzMpNhGCB3bt4b7zd23au3y8LIgTGe9eH - 2wCH3f5dzCKC48eQI/AJgLjyAMshGfuNoICz586dF4i6fJmyadNuNI/krKC169cKzB04Tfs0MdXHIjTY - zXu3gga/FYge2eC0AMrHAxxffht3GAUeontoML13b9welCtfLqA7d+/dY6tWMKG8efMeJkhff9W5DwDg - 48eHT18A/fsADnxQiwjDhwYHXBDgAQQWaOCBB0yQYP+C54nn3jkNXGAfAPhRaOGFGAJwAYUbXtChhyCG - KCKIAwp4gAf8PdhUEE206OIUME5RxQNY0HiFDSpaUwAaahTh448uOgBTc37UYOORciQ5Rx2M7JEjDgIU - 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 - AAA7 - - \ No newline at end of file diff --git a/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj b/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj index 5cfb3cc..bcd0c0c 100644 --- a/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj +++ b/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj @@ -122,11 +122,10 @@ UpdateLib - - - + + From 6a29acafbf422308a5c289b8cda91d450b234194 Mon Sep 17 00:00:00 2001 From: Matthias Beerens Date: Tue, 11 Apr 2017 22:07:13 +0200 Subject: [PATCH 13/31] FadeOut --- .../UpdateLib.Generator/TestForm.Designer.cs | 16 +++- .../UI/LoaderControl.Designer.cs | 1 + .../UpdateLib.Generator/UI/LoaderControl.cs | 74 ++++++++++++++++++- .../UpdateLib.Generator/UI/LoaderControl.resx | 6 ++ UpdateLib/UpdateLib/Tasks/AsyncTaskBase.cs | 19 +++++ UpdateLib/UpdateLib/Tasks/AsyncTaskFactory.cs | 10 +++ 6 files changed, 123 insertions(+), 3 deletions(-) diff --git a/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs b/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs index bb9e25d..412666f 100644 --- a/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs +++ b/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs @@ -32,6 +32,7 @@ private void InitializeComponent() System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TestForm)); this.SidebarPanel = new System.Windows.Forms.Panel(); this.ContentPanel = new System.Windows.Forms.Panel(); + this.button1 = new System.Windows.Forms.Button(); this.flatButton2 = new UpdateLib.Generator.UI.FlatButton(); this.flatButton1 = new UpdateLib.Generator.UI.FlatButton(); this.HeaderPanel = new UpdateLib.Generator.UI.MoveablePanel(); @@ -42,6 +43,7 @@ private void InitializeComponent() this.lblTitle = new System.Windows.Forms.Label(); this.elipseComponent1 = new UpdateLib.Generator.UI.ElipseComponent(this.components); this.SidebarPanel.SuspendLayout(); + this.ContentPanel.SuspendLayout(); this.HeaderPanel.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.pbMinimize)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.pbMaximize)).BeginInit(); @@ -63,14 +65,24 @@ private void InitializeComponent() // // ContentPanel // - this.ContentPanel.BackColor = System.Drawing.Color.WhiteSmoke; + this.ContentPanel.BackColor = System.Drawing.SystemColors.ButtonShadow; this.ContentPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.ContentPanel.Controls.Add(this.button1); this.ContentPanel.Dock = System.Windows.Forms.DockStyle.Fill; this.ContentPanel.Location = new System.Drawing.Point(170, 33); this.ContentPanel.Name = "ContentPanel"; this.ContentPanel.Size = new System.Drawing.Size(549, 275); this.ContentPanel.TabIndex = 2; // + // button1 + // + this.button1.Location = new System.Drawing.Point(73, 40); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 23); + this.button1.TabIndex = 0; + this.button1.Text = "button1"; + this.button1.UseVisualStyleBackColor = true; + // // flatButton2 // this.flatButton2.ActiveItem = false; @@ -193,6 +205,7 @@ private void InitializeComponent() this.Text = "TestForm"; this.Click += new System.EventHandler(this.TestForm_Click); this.SidebarPanel.ResumeLayout(false); + this.ContentPanel.ResumeLayout(false); this.HeaderPanel.ResumeLayout(false); this.HeaderPanel.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.pbMinimize)).EndInit(); @@ -216,5 +229,6 @@ private void InitializeComponent() private UI.HoverPictureBox pbMaximize; private UI.FlatButton flatButton1; private UI.FlatButton flatButton2; + private System.Windows.Forms.Button button1; } } \ No newline at end of file diff --git a/UpdateLib/UpdateLib.Generator/UI/LoaderControl.Designer.cs b/UpdateLib/UpdateLib.Generator/UI/LoaderControl.Designer.cs index be96d5f..66b4700 100644 --- a/UpdateLib/UpdateLib.Generator/UI/LoaderControl.Designer.cs +++ b/UpdateLib/UpdateLib.Generator/UI/LoaderControl.Designer.cs @@ -35,6 +35,7 @@ private void InitializeComponent() // pbLoader // this.pbLoader.Anchor = System.Windows.Forms.AnchorStyles.None; + this.pbLoader.BackColor = System.Drawing.Color.Transparent; this.pbLoader.Image = global::UpdateLib.Generator.Properties.Resources.loading_gear; this.pbLoader.Location = new System.Drawing.Point(0, 0); this.pbLoader.Name = "pbLoader"; diff --git a/UpdateLib/UpdateLib.Generator/UI/LoaderControl.cs b/UpdateLib/UpdateLib.Generator/UI/LoaderControl.cs index dd609a3..70662ab 100644 --- a/UpdateLib/UpdateLib.Generator/UI/LoaderControl.cs +++ b/UpdateLib/UpdateLib.Generator/UI/LoaderControl.cs @@ -6,6 +6,8 @@ using System.Linq; using System.Text; using System.Windows.Forms; +using MatthiWare.UpdateLib.Tasks; +using System.Threading; namespace UpdateLib.Generator.UI { @@ -13,14 +15,54 @@ public partial class LoaderControl : UserControl { private static Dictionary loaders = new Dictionary(); + private const int WS_EX_TRANSPARENT = 0x20; + + private int m_opacity = 100; + + private AsyncTaskBase m_fadeOutTask; + + public int Opacity + { + get + { + return m_opacity; + } + set + { + m_opacity = value; + + if (m_opacity > 100) + m_opacity = 100; + + if (m_opacity < 0) + m_opacity = 1; + + var alpha = (m_opacity * 255) / 100; + BackColor = Color.FromArgb(alpha, BackColor); + Invalidate(); + } + } + + public LoaderControl() { InitializeComponent(); SetStyle(ControlStyles.SupportsTransparentBackColor, true); + //SetStyle(ControlStyles.Opaque, true); DoubleBuffered = true; } + protected override CreateParams CreateParams + { + get + { + CreateParams cp = base.CreateParams; + cp.ExStyle |= WS_EX_TRANSPARENT; + return cp; + } + } + public static void Show(Control parent) { if (!loaders.ContainsKey(parent)) @@ -33,6 +75,8 @@ public void ShowLoader(Control parent) { parent.SuspendLayout(); + Opacity = 100; + parent.Controls.Add(this); Size = parent.Size; @@ -64,14 +108,40 @@ public static void Hide(Control parent) } public void HideLoader(Control parent) + { + if (m_fadeOutTask == null) + { + m_fadeOutTask = AsyncTaskFactory.From(new Action(FadeOut)); + m_fadeOutTask.TaskCompleted += (o, e) => HideControls(parent); + } + + if (m_fadeOutTask.IsRunning) + return; + + m_fadeOutTask.Start(); + } + + private void HideControls(Control parent) { SuspendLayout(); - parent.Controls.Remove(this); + parent.Invoke(new Action(() => + { + parent.Controls.Remove(this); - parent.Resize -= ParentResize; + parent.Resize -= ParentResize; + })); ResumeLayout(); } + + private void FadeOut() + { + while (Opacity != 1) + { + Opacity -= 5; + Thread.Sleep(200); + } + } } } diff --git a/UpdateLib/UpdateLib.Generator/UI/LoaderControl.resx b/UpdateLib/UpdateLib.Generator/UI/LoaderControl.resx index 7080a7d..750e8d2 100644 --- a/UpdateLib/UpdateLib.Generator/UI/LoaderControl.resx +++ b/UpdateLib/UpdateLib.Generator/UI/LoaderControl.resx @@ -117,4 +117,10 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + True + + + True + \ No newline at end of file diff --git a/UpdateLib/UpdateLib/Tasks/AsyncTaskBase.cs b/UpdateLib/UpdateLib/Tasks/AsyncTaskBase.cs index 30dbea7..50dba04 100644 --- a/UpdateLib/UpdateLib/Tasks/AsyncTaskBase.cs +++ b/UpdateLib/UpdateLib/Tasks/AsyncTaskBase.cs @@ -26,6 +26,7 @@ public abstract class AsyncTaskBase private WaitHandle mainWait; private readonly object sync = new object(); + private bool m_running = false; private bool m_cancelled = false; #endregion @@ -88,6 +89,21 @@ private set } } + + public bool IsRunning + { + get + { + lock (sync) + return m_running; + } + private set + { + lock (sync) + m_running = value; + } + } + #endregion #region static methods @@ -112,6 +128,7 @@ public static void WaitAll(IEnumerable tasks) private void Reset() { IsCancelled = false; + IsRunning = false; m_lastException = null; mainWait = null; @@ -130,6 +147,7 @@ public AsyncTaskBase Start() { try { + IsRunning = true; DoWork(); } catch (Exception ex) @@ -141,6 +159,7 @@ public AsyncTaskBase Start() finally { AwaitWorkers(); + IsRunning = false; } }); diff --git a/UpdateLib/UpdateLib/Tasks/AsyncTaskFactory.cs b/UpdateLib/UpdateLib/Tasks/AsyncTaskFactory.cs index ec0e0cc..786c280 100644 --- a/UpdateLib/UpdateLib/Tasks/AsyncTaskFactory.cs +++ b/UpdateLib/UpdateLib/Tasks/AsyncTaskFactory.cs @@ -20,6 +20,16 @@ public static AsyncTaskBase StartNew(Delegate action, params object[] args return task.Start(); } + public static AsyncTaskBase From(Delegate action, params object[] args) + { + return new GenericTask(action, args); + } + + public static AsyncTaskBase From(Delegate action, params object[] args) + { + return new GenericFuncTask(action, args); + } + private class GenericFuncTask : AsyncTaskBase { private Delegate action; From c0e422f9b5ea3f5d080fb53df6f08ae626f9ad28 Mon Sep 17 00:00:00 2001 From: Matthias Beerens Date: Thu, 13 Apr 2017 20:40:53 +0200 Subject: [PATCH 14/31] Allowed to add picture to flatbutton --- .../UpdateLib.Generator/TestForm.Designer.cs | 93 ++++++++++++------- UpdateLib/UpdateLib.Generator/TestForm.resx | 34 +++++++ .../UpdateLib.Generator/UI/FlatButton.cs | 51 +++++++++- 3 files changed, 138 insertions(+), 40 deletions(-) diff --git a/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs b/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs index 412666f..f7b598a 100644 --- a/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs +++ b/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs @@ -33,8 +33,9 @@ private void InitializeComponent() this.SidebarPanel = new System.Windows.Forms.Panel(); this.ContentPanel = new System.Windows.Forms.Panel(); this.button1 = new System.Windows.Forms.Button(); - this.flatButton2 = new UpdateLib.Generator.UI.FlatButton(); - this.flatButton1 = new UpdateLib.Generator.UI.FlatButton(); + this.btnTabBuild = new UpdateLib.Generator.UI.FlatButton(); + this.btnTabFiles = new UpdateLib.Generator.UI.FlatButton(); + this.btnTabInformation = new UpdateLib.Generator.UI.FlatButton(); this.HeaderPanel = new UpdateLib.Generator.UI.MoveablePanel(); this.pbMinimize = new UpdateLib.Generator.UI.HoverPictureBox(); this.pbMaximize = new UpdateLib.Generator.UI.HoverPictureBox(); @@ -55,23 +56,24 @@ private void InitializeComponent() // this.SidebarPanel.BackColor = System.Drawing.Color.DarkGray; this.SidebarPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.SidebarPanel.Controls.Add(this.flatButton2); - this.SidebarPanel.Controls.Add(this.flatButton1); + this.SidebarPanel.Controls.Add(this.btnTabBuild); + this.SidebarPanel.Controls.Add(this.btnTabFiles); + this.SidebarPanel.Controls.Add(this.btnTabInformation); this.SidebarPanel.Dock = System.Windows.Forms.DockStyle.Left; this.SidebarPanel.Location = new System.Drawing.Point(0, 33); this.SidebarPanel.Name = "SidebarPanel"; - this.SidebarPanel.Size = new System.Drawing.Size(170, 275); + this.SidebarPanel.Size = new System.Drawing.Size(233, 275); this.SidebarPanel.TabIndex = 1; // // ContentPanel // - this.ContentPanel.BackColor = System.Drawing.SystemColors.ButtonShadow; + this.ContentPanel.BackColor = System.Drawing.SystemColors.Control; this.ContentPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.ContentPanel.Controls.Add(this.button1); this.ContentPanel.Dock = System.Windows.Forms.DockStyle.Fill; - this.ContentPanel.Location = new System.Drawing.Point(170, 33); + this.ContentPanel.Location = new System.Drawing.Point(233, 33); this.ContentPanel.Name = "ContentPanel"; - this.ContentPanel.Size = new System.Drawing.Size(549, 275); + this.ContentPanel.Size = new System.Drawing.Size(486, 275); this.ContentPanel.TabIndex = 2; // // button1 @@ -83,29 +85,49 @@ private void InitializeComponent() this.button1.Text = "button1"; this.button1.UseVisualStyleBackColor = true; // - // flatButton2 - // - this.flatButton2.ActiveItem = false; - this.flatButton2.BackHoverColor = System.Drawing.Color.LightGray; - this.flatButton2.BackSelectedColor = System.Drawing.Color.DimGray; - this.flatButton2.Location = new System.Drawing.Point(-1, 63); - this.flatButton2.Name = "flatButton2"; - this.flatButton2.Size = new System.Drawing.Size(169, 63); - this.flatButton2.TabIndex = 1; - this.flatButton2.Text = "flatButton2"; - this.flatButton2.Click += new System.EventHandler(this.flatButton2_Click); - // - // flatButton1 - // - this.flatButton1.ActiveItem = false; - this.flatButton1.BackHoverColor = System.Drawing.Color.LightGray; - this.flatButton1.BackSelectedColor = System.Drawing.Color.DimGray; - this.flatButton1.Location = new System.Drawing.Point(0, 0); - this.flatButton1.Name = "flatButton1"; - this.flatButton1.Size = new System.Drawing.Size(169, 63); - this.flatButton1.TabIndex = 0; - this.flatButton1.Text = "flatButton1"; - this.flatButton1.Click += new System.EventHandler(this.flatButton1_Click); + // btnTabBuild + // + this.btnTabBuild.ActiveItem = false; + this.btnTabBuild.BackHoverColor = System.Drawing.Color.LightGray; + this.btnTabBuild.BackSelectedColor = System.Drawing.Color.DimGray; + this.btnTabBuild.Dock = System.Windows.Forms.DockStyle.Top; + this.btnTabBuild.Font = new System.Drawing.Font("Century Gothic", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnTabBuild.InfoImage = ((System.Drawing.Image)(resources.GetObject("btnTabBuild.InfoImage"))); + this.btnTabBuild.Location = new System.Drawing.Point(0, 126); + this.btnTabBuild.Name = "btnTabBuild"; + this.btnTabBuild.Size = new System.Drawing.Size(231, 63); + this.btnTabBuild.TabIndex = 2; + this.btnTabBuild.Text = "Build"; + // + // btnTabFiles + // + this.btnTabFiles.ActiveItem = false; + this.btnTabFiles.BackHoverColor = System.Drawing.Color.LightGray; + this.btnTabFiles.BackSelectedColor = System.Drawing.Color.DimGray; + this.btnTabFiles.Dock = System.Windows.Forms.DockStyle.Top; + this.btnTabFiles.Font = new System.Drawing.Font("Century Gothic", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnTabFiles.InfoImage = ((System.Drawing.Image)(resources.GetObject("btnTabFiles.InfoImage"))); + this.btnTabFiles.Location = new System.Drawing.Point(0, 63); + this.btnTabFiles.Name = "btnTabFiles"; + this.btnTabFiles.Size = new System.Drawing.Size(231, 63); + this.btnTabFiles.TabIndex = 1; + this.btnTabFiles.Text = "Files"; + this.btnTabFiles.Click += new System.EventHandler(this.flatButton2_Click); + // + // btnTabInformation + // + this.btnTabInformation.ActiveItem = false; + this.btnTabInformation.BackHoverColor = System.Drawing.Color.LightGray; + this.btnTabInformation.BackSelectedColor = System.Drawing.Color.DimGray; + this.btnTabInformation.Dock = System.Windows.Forms.DockStyle.Top; + this.btnTabInformation.Font = new System.Drawing.Font("Century Gothic", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnTabInformation.InfoImage = ((System.Drawing.Image)(resources.GetObject("btnTabInformation.InfoImage"))); + this.btnTabInformation.Location = new System.Drawing.Point(0, 0); + this.btnTabInformation.Name = "btnTabInformation"; + this.btnTabInformation.Size = new System.Drawing.Size(231, 63); + this.btnTabInformation.TabIndex = 0; + this.btnTabInformation.Text = "Update Information"; + this.btnTabInformation.Click += new System.EventHandler(this.flatButton1_Click); // // HeaderPanel // @@ -164,7 +186,7 @@ private void InitializeComponent() // this.pbIcon.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pbIcon.BackgroundImage"))); this.pbIcon.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; - this.pbIcon.Location = new System.Drawing.Point(5, 4); + this.pbIcon.Location = new System.Drawing.Point(5, 5); this.pbIcon.Name = "pbIcon"; this.pbIcon.Size = new System.Drawing.Size(24, 24); this.pbIcon.TabIndex = 1; @@ -176,7 +198,7 @@ private void InitializeComponent() this.lblTitle.BackColor = System.Drawing.Color.Transparent; this.lblTitle.Font = new System.Drawing.Font("Century Gothic", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.lblTitle.ForeColor = System.Drawing.Color.WhiteSmoke; - this.lblTitle.Location = new System.Drawing.Point(31, 5); + this.lblTitle.Location = new System.Drawing.Point(31, 6); this.lblTitle.Name = "lblTitle"; this.lblTitle.Size = new System.Drawing.Size(157, 21); this.lblTitle.TabIndex = 0; @@ -227,8 +249,9 @@ private void InitializeComponent() private UI.HoverPictureBox pbClose; private UI.HoverPictureBox pbMinimize; private UI.HoverPictureBox pbMaximize; - private UI.FlatButton flatButton1; - private UI.FlatButton flatButton2; + private UI.FlatButton btnTabInformation; + private UI.FlatButton btnTabFiles; private System.Windows.Forms.Button button1; + private UI.FlatButton btnTabBuild; } } \ No newline at end of file diff --git a/UpdateLib/UpdateLib.Generator/TestForm.resx b/UpdateLib/UpdateLib.Generator/TestForm.resx index ade62ce..f6759bb 100644 --- a/UpdateLib/UpdateLib.Generator/TestForm.resx +++ b/UpdateLib/UpdateLib.Generator/TestForm.resx @@ -118,6 +118,40 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAfpJREFUWEft + 1ctLFVEAx/GJjB5UZGkPopAWYYG1cO+/oP4BbiMkLagEV27qP+gPyb3to8iKSlFX4kIUNTUz6KXf7zgH + LsPcuo8zBHF/8GFmzpw758ycx01a+d9yAt0Hp2mu4vDBafm5hc/4lF4lySHMYAnXLSg7bVjFd2xmfmEZ + pX6F27CBCdjgXo5lIziCHkRNJ77BN/+dnT/ARVzGY/zED6xjA8cRLb2YhY37tsPI5ym8ZyecEzcQNY69 + b6mjFuTSBTvgXCglf+vAFdiBlfQqcm5iDs58GxlCPk/gPYdpEs6bhuODFOKEcmLJ8m04D47hFMbg2LsS + 7OQial6SPiDf23wHTB/O4hnC/bxxXIJ1a8o5TGMe1/AI7xDG+i0ewglmnTdwt/Mtd+Fy9Oj1GpwndcU3 + /wB7/yU7FtnJjnbO8bfh5wj5CLdnt+m6cwFbsAEn2gA6MoNYgPescx7GofCrhPjH5B9UQ7kHG3CjOWNB + Lu2wY9a5b0HsvIIP70+viuOXsM7L9CpSfKCcbB5dDdVyGtYJW7GaTnhQ6MBJVEspHQj5Z0MQUs8kHLUg + dlxObiY2EJah88HPXrkMXfuVSy9KXOvvYQNhsynyNTta199Ei5vHC7yGm8zd7NzJJs/vwB3T8yk0vOFU + S61/Rtb501KNmqIOtNJKE0mSfboRqJMj/kopAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAUhJREFUWEft + lj1KA1EUhUdJb6VuwEpBXIOlK7ASCwsLtbVzBVZWbkG0cwVWbkAlZdogWFjY+fOd4l2GcS5zr7wEBT/4 + irycc3hMYEjzz2/lc0aG6SvXMEwpHOIVTltnRZ1d4zEOUTphuoUF3MAjvMFnLJnIcDRnDBV0oU2MDkdz + Ru3haM6oPRzNGbWHozmj9nA0Z9QcXsHonhEtDOVW8QGVedRBlFoXeEJ9r0voMmGiF/hA5by3YdnRz5Ai + eoF9fEdlT3XQIbrzjUzxBJXV0+gylwsIL5/dMbJFL5/dMbJFL5/dMbJFL5/dMbJFL5/dMbJFL5/dMbJF + L5/dMbJFL5/dMUrxFs9wB5fRo+Q907xg39AE9adUr91tXELRl237I9ZwF8/xDl+xO6zX77j1eaYs4jru + 4QXe4xu2LzR3RriFB3ipgz9G03wB6snjVo1zIMAAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAL9JREFUWEft + k0sOwjAMRHMPfoLDl88a7sMCyga4AsyEIFlWoiJUuxs/6UmxNzPpJwXBnyzhHp6LPC+gCwx/wpfyAV1K + 7CADj3ANN/BUdh005woZJm+7gtxd8mTMDTJslqcPLMNdnydjtpBhfAUsQXnmzuUV8Lb84Bgo5W4OXeCf + cID3Is9uv+Gk6MeuNacWKjWnFeReQAfq2QwZLgP1bE4UiAKTFfgG6cDWfnRaQa396AwFuBUY0oxaWM0g + +JGU3jM+gGF3vCP8AAAAAElFTkSuQmCC + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAALGPC/xhBQAAAHhJREFUSEtj diff --git a/UpdateLib/UpdateLib.Generator/UI/FlatButton.cs b/UpdateLib/UpdateLib.Generator/UI/FlatButton.cs index 93cc045..a28b8a5 100644 --- a/UpdateLib/UpdateLib.Generator/UI/FlatButton.cs +++ b/UpdateLib/UpdateLib.Generator/UI/FlatButton.cs @@ -13,6 +13,13 @@ namespace UpdateLib.Generator.UI [DefaultEvent(nameof(Click))] public class FlatButton : Control { + private const float PADDING_WIDTH = 0.0625f; + private const float PADDING_HEIGHT = 0.25f; + private const float IMG_SIZE_WIDTH = 0.125f; + private const float IMG_SIZE_HEIGHT = 0.5f; + private const float TEXT_SIZE_WIDTH = 1f - (PADDING_WIDTH * 3) - IMG_SIZE_WIDTH; + private const float TEXT_SIZE_HEIGHT = 1f - (PADDING_HEIGHT * 2); + private bool mouseInside = false; private Bitmap buffer; @@ -43,6 +50,25 @@ public Color BackSelectedColor set { m_selectedColor = value; } } + private Image m_infoImage; + + public Image InfoImage + { + get { return m_infoImage; } + set + { + m_infoImage = value; + + Rectangle rect = new Rectangle( + (int)(Width * PADDING_WIDTH), + (int)(Height * PADDING_HEIGHT), + (int)(Width * IMG_SIZE_WIDTH), + (int)(Height * IMG_SIZE_HEIGHT)); + + Invalidate(rect); + } + } + public FlatButton() : base() @@ -99,7 +125,7 @@ private void UpdateBackgroundColor() { m_backColor = (m_activeItem ? m_selectedColor : BackColor); m_backColor = (mouseInside ? m_hoveColor : m_backColor); - + Invalidate(); } @@ -113,7 +139,7 @@ protected override void OnResize(EventArgs e) protected override void OnPaint(PaintEventArgs e) { - Rectangle rect = new Rectangle(0, 0, Width , Height ); + Rectangle rect = new Rectangle(0, 0, Width, Height); buffer = buffer ?? new Bitmap(Width, Height); @@ -127,10 +153,25 @@ protected override void OnPaint(PaintEventArgs e) g.FillRectangle(new SolidBrush(m_backColor), rect); - SizeF textSize = g.MeasureString(Text, Font, Width); + RectangleF imgRect = new RectangleF( + Width * PADDING_WIDTH, + Height * PADDING_HEIGHT, + Width * IMG_SIZE_WIDTH, + Height * IMG_SIZE_HEIGHT); + + if (InfoImage != null) + g.DrawImage(InfoImage, imgRect); + + SizeF textSize = g.MeasureString(Text, Font, (int)(Width * TEXT_SIZE_WIDTH)); + + float offsetX = ((Width * PADDING_WIDTH) * 2) + imgRect.Width; + float offsetY = imgRect.Y; + + float availableTextWidth = Width - offsetX - (Width * PADDING_WIDTH); + float availableTextHeight = Height - (offsetY * 2); - float x = (Width / 2) - (textSize.Width / 2); - float y = (Height / 2) - (textSize.Height / 2); + float x = offsetX + (availableTextWidth / 2) - (textSize.Width / 2); + float y = offsetY + (availableTextHeight / 2) - (textSize.Height / 2); g.DrawString(Text, Font, new SolidBrush(ForeColor), x, y); From 5b6ed23e8853ac4759164dec5da6bb160ee8d82f Mon Sep 17 00:00:00 2001 From: Matthias Beerens Date: Thu, 13 Apr 2017 21:00:54 +0200 Subject: [PATCH 15/31] InfoImage scales better now --- UpdateLib/UpdateLib.Generator/UI/FlatButton.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/UpdateLib/UpdateLib.Generator/UI/FlatButton.cs b/UpdateLib/UpdateLib.Generator/UI/FlatButton.cs index a28b8a5..640003c 100644 --- a/UpdateLib/UpdateLib.Generator/UI/FlatButton.cs +++ b/UpdateLib/UpdateLib.Generator/UI/FlatButton.cs @@ -153,11 +153,13 @@ protected override void OnPaint(PaintEventArgs e) g.FillRectangle(new SolidBrush(m_backColor), rect); + float imgSize = Math.Min(Width * IMG_SIZE_WIDTH, Height * IMG_SIZE_HEIGHT); + RectangleF imgRect = new RectangleF( Width * PADDING_WIDTH, Height * PADDING_HEIGHT, - Width * IMG_SIZE_WIDTH, - Height * IMG_SIZE_HEIGHT); + imgSize, + imgSize); if (InfoImage != null) g.DrawImage(InfoImage, imgRect); From b4d2ed2625d7e7300c229d86fe107de54d5adbc8 Mon Sep 17 00:00:00 2001 From: Matthias Beerens Date: Thu, 13 Apr 2017 22:06:56 +0200 Subject: [PATCH 16/31] Added PageCache --- .../UpdateLib.Generator/TestForm.Designer.cs | 14 -- UpdateLib/UpdateLib.Generator/TestForm.cs | 35 ++++- .../UI/Pages/InformationPage.Designer.cs | 46 +++++++ .../UI/Pages/InformationPage.cs | 19 +++ .../UI/Pages/InformationPage.resx | 120 ++++++++++++++++++ .../UpdateLib.Generator.csproj | 9 ++ 6 files changed, 228 insertions(+), 15 deletions(-) create mode 100644 UpdateLib/UpdateLib.Generator/UI/Pages/InformationPage.Designer.cs create mode 100644 UpdateLib/UpdateLib.Generator/UI/Pages/InformationPage.cs create mode 100644 UpdateLib/UpdateLib.Generator/UI/Pages/InformationPage.resx diff --git a/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs b/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs index f7b598a..6d3566a 100644 --- a/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs +++ b/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs @@ -32,7 +32,6 @@ private void InitializeComponent() System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TestForm)); this.SidebarPanel = new System.Windows.Forms.Panel(); this.ContentPanel = new System.Windows.Forms.Panel(); - this.button1 = new System.Windows.Forms.Button(); this.btnTabBuild = new UpdateLib.Generator.UI.FlatButton(); this.btnTabFiles = new UpdateLib.Generator.UI.FlatButton(); this.btnTabInformation = new UpdateLib.Generator.UI.FlatButton(); @@ -44,7 +43,6 @@ private void InitializeComponent() this.lblTitle = new System.Windows.Forms.Label(); this.elipseComponent1 = new UpdateLib.Generator.UI.ElipseComponent(this.components); this.SidebarPanel.SuspendLayout(); - this.ContentPanel.SuspendLayout(); this.HeaderPanel.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.pbMinimize)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.pbMaximize)).BeginInit(); @@ -69,22 +67,12 @@ private void InitializeComponent() // this.ContentPanel.BackColor = System.Drawing.SystemColors.Control; this.ContentPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.ContentPanel.Controls.Add(this.button1); this.ContentPanel.Dock = System.Windows.Forms.DockStyle.Fill; this.ContentPanel.Location = new System.Drawing.Point(233, 33); this.ContentPanel.Name = "ContentPanel"; this.ContentPanel.Size = new System.Drawing.Size(486, 275); this.ContentPanel.TabIndex = 2; // - // button1 - // - this.button1.Location = new System.Drawing.Point(73, 40); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(75, 23); - this.button1.TabIndex = 0; - this.button1.Text = "button1"; - this.button1.UseVisualStyleBackColor = true; - // // btnTabBuild // this.btnTabBuild.ActiveItem = false; @@ -227,7 +215,6 @@ private void InitializeComponent() this.Text = "TestForm"; this.Click += new System.EventHandler(this.TestForm_Click); this.SidebarPanel.ResumeLayout(false); - this.ContentPanel.ResumeLayout(false); this.HeaderPanel.ResumeLayout(false); this.HeaderPanel.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.pbMinimize)).EndInit(); @@ -251,7 +238,6 @@ private void InitializeComponent() private UI.HoverPictureBox pbMaximize; private UI.FlatButton btnTabInformation; private UI.FlatButton btnTabFiles; - private System.Windows.Forms.Button button1; private UI.FlatButton btnTabBuild; } } \ No newline at end of file diff --git a/UpdateLib/UpdateLib.Generator/TestForm.cs b/UpdateLib/UpdateLib.Generator/TestForm.cs index ffde5d8..da5f93a 100644 --- a/UpdateLib/UpdateLib.Generator/TestForm.cs +++ b/UpdateLib/UpdateLib.Generator/TestForm.cs @@ -7,14 +7,19 @@ using System.Text; using System.Windows.Forms; using UpdateLib.Generator.UI; +using UpdateLib.Generator.UI.Pages; namespace UpdateLib.Generator { public partial class TestForm : Form { + private Dictionary pageCache; + public TestForm() { InitializeComponent(); + + pageCache = new Dictionary(); } private void TestForm_Click(object sender, EventArgs e) @@ -45,12 +50,40 @@ private void label1_Click(object sender, EventArgs e) private void flatButton1_Click(object sender, EventArgs e) { - LoaderControl.Show(ContentPanel); + var name = nameof(InformationPage); + //LoaderControl.Show(ContentPanel); + + if (!LoadPage(name)) + { + pageCache.Add(name, new InformationPage()); + LoadPage(name); + } + } private void flatButton2_Click(object sender, EventArgs e) { LoaderControl.Hide(ContentPanel); } + + private bool LoadPage(string pageName) + { + UserControl control = null; + bool success = pageCache.TryGetValue(pageName, out control); + + if (control != null) + { + ContentPanel.SuspendLayout(); + + ContentPanel.Controls.Clear(); + ContentPanel.Controls.Add(control); + + control.Dock = DockStyle.Fill; + + ContentPanel.ResumeLayout(); + } + + return success; + } } } diff --git a/UpdateLib/UpdateLib.Generator/UI/Pages/InformationPage.Designer.cs b/UpdateLib/UpdateLib.Generator/UI/Pages/InformationPage.Designer.cs new file mode 100644 index 0000000..2aab77a --- /dev/null +++ b/UpdateLib/UpdateLib.Generator/UI/Pages/InformationPage.Designer.cs @@ -0,0 +1,46 @@ +namespace UpdateLib.Generator.UI.Pages +{ + partial class InformationPage + { + /// + /// 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 Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.SuspendLayout(); + // + // InformationPage + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.SystemColors.Control; + this.Name = "InformationPage"; + this.Size = new System.Drawing.Size(672, 349); + this.ResumeLayout(false); + + } + + #endregion + } +} diff --git a/UpdateLib/UpdateLib.Generator/UI/Pages/InformationPage.cs b/UpdateLib/UpdateLib.Generator/UI/Pages/InformationPage.cs new file mode 100644 index 0000000..075e94e --- /dev/null +++ b/UpdateLib/UpdateLib.Generator/UI/Pages/InformationPage.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace UpdateLib.Generator.UI.Pages +{ + public partial class InformationPage : UserControl + { + public InformationPage() + { + InitializeComponent(); + } + } +} diff --git a/UpdateLib/UpdateLib.Generator/UI/Pages/InformationPage.resx b/UpdateLib/UpdateLib.Generator/UI/Pages/InformationPage.resx new file mode 100644 index 0000000..7080a7d --- /dev/null +++ b/UpdateLib/UpdateLib.Generator/UI/Pages/InformationPage.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj b/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj index bcd0c0c..bdea2bc 100644 --- a/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj +++ b/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj @@ -87,6 +87,12 @@ Component + + UserControl + + + InformationPage.cs + MainForm.cs @@ -106,6 +112,9 @@ LoaderControl.cs + + InformationPage.cs + SettingsSingleFileGenerator Settings.Designer.cs From 743c8c3fc6921a540a76cb617a5c6159d1d8dd3b Mon Sep 17 00:00:00 2001 From: Matthias Beerens Date: Fri, 14 Apr 2017 17:44:15 +0200 Subject: [PATCH 17/31] Changing ranges --- codecov.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/codecov.yml b/codecov.yml index 7585d12..8eda530 100644 --- a/codecov.yml +++ b/codecov.yml @@ -5,7 +5,7 @@ codecov: coverage: precision: 2 round: down - range: "50...100" + range: "25...75" status: project: yes From ff26caf40d6ab7ed14820f44a622e8c13da0887e Mon Sep 17 00:00:00 2001 From: Matthias Beerens Date: Fri, 14 Apr 2017 21:41:20 +0200 Subject: [PATCH 18/31] More Unit Tests --- .../UpdateLib.Tests/Files/FileEntryTest.cs | 34 ++++++ .../Files/HashCacheEntryTest.cs | 44 +++++++ .../UpdateLib.Tests/Files/UpdateFileTest.cs | 115 ++++++++++++++++++ .../UpdateLib.Tests/UpdateLib.Tests.csproj | 2 + UpdateLib/UpdateLib/Files/DirectoryEntry.cs | 1 - UpdateLib/UpdateLib/Files/FileEntry.cs | 16 --- UpdateLib/UpdateLib/Files/HashCacheEntry.cs | 2 +- UpdateLib/UpdateLib/Files/UpdateFile.cs | 49 +++----- UpdateLib/UpdateLib/Logging/Logger.cs | 14 +-- 9 files changed, 212 insertions(+), 65 deletions(-) create mode 100644 UpdateLib/UpdateLib.Tests/Files/FileEntryTest.cs create mode 100644 UpdateLib/UpdateLib.Tests/Files/UpdateFileTest.cs diff --git a/UpdateLib/UpdateLib.Tests/Files/FileEntryTest.cs b/UpdateLib/UpdateLib.Tests/Files/FileEntryTest.cs new file mode 100644 index 0000000..7e293af --- /dev/null +++ b/UpdateLib/UpdateLib.Tests/Files/FileEntryTest.cs @@ -0,0 +1,34 @@ +using MatthiWare.UpdateLib.Files; +using NUnit.Framework; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace UpdateLib.Tests.Files +{ + [TestFixture] + public class FileEntryTest + { + [Test] + public void ShouldGiveCorrectSourceAndDestination() + { + DirectoryEntry root = new DirectoryEntry("%root%"); + DirectoryEntry subFolder = new DirectoryEntry("sub"); + FileEntry file = new FileEntry("myfile.txt"); + + root.Directories.Add(subFolder); + subFolder.Parent = root; + + subFolder.Files.Add(file); + file.Parent = subFolder; + + string outputSource = "sub/myfile.txt"; + string outputDest = "%root%\\sub\\myfile.txt"; + + Assert.AreEqual(outputSource, file.SourceLocation); + Assert.AreEqual(outputDest, file.DestinationLocation); + } + } +} diff --git a/UpdateLib/UpdateLib.Tests/Files/HashCacheEntryTest.cs b/UpdateLib/UpdateLib.Tests/Files/HashCacheEntryTest.cs index 9215d75..6055345 100644 --- a/UpdateLib/UpdateLib.Tests/Files/HashCacheEntryTest.cs +++ b/UpdateLib/UpdateLib.Tests/Files/HashCacheEntryTest.cs @@ -2,12 +2,24 @@ using NUnit.Framework; using System; using System.IO; +using System.Text; namespace UpdateLib.Tests.Files { [TestFixture] public class HashCacheEntryTest { + private string temp_file; + [SetUp] + public void Before() + { + temp_file = Path.GetTempPath() + Guid.NewGuid().ToString() + "hash_util_test.tmp"; + using (StreamWriter sw = new StreamWriter(File.Open(temp_file, FileMode.OpenOrCreate, FileAccess.Write), Encoding.Default)) + { + sw.WriteLine("This is a test"); + } + } + [Test] public void NullEntryShouldThrowArgumentNullException() { @@ -19,5 +31,37 @@ public void NotExistingFileShouldThrowFileNotFoundException() { Assert.Catch(() => new HashCacheEntry("notexistingfile.dll")); } + + [Test] + public void TestHashing() + { + string hash = "07849dc26fcbb2f3bd5f57bdf214bae374575f1bd4e6816482324799417cb379".ToUpper(); + HashCacheEntry entry = new HashCacheEntry(temp_file); + Assert.AreEqual(hash, entry.Hash); + long ticks = entry.Ticks; + + EditTempFile(); + + entry.Recalculate(File.GetLastWriteTime(temp_file).Ticks); + + Assert.AreNotEqual(ticks, entry.Ticks); + Assert.AreNotEqual(hash, entry.Hash); + } + + private void EditTempFile() + { + using (StreamWriter sw = new StreamWriter(File.Open(temp_file, FileMode.Open, FileAccess.Write), Encoding.Default)) + { + sw.WriteLine("edited file"); + } + } + + + [TearDown] + public void CleanUp() + { + if (File.Exists(temp_file)) + File.Delete(temp_file); + } } } diff --git a/UpdateLib/UpdateLib.Tests/Files/UpdateFileTest.cs b/UpdateLib/UpdateLib.Tests/Files/UpdateFileTest.cs new file mode 100644 index 0000000..e17b995 --- /dev/null +++ b/UpdateLib/UpdateLib.Tests/Files/UpdateFileTest.cs @@ -0,0 +1,115 @@ +using MatthiWare.UpdateLib.Files; +using Moq; +using NUnit.Framework; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace UpdateLib.Tests.Files +{ + [TestFixture] + public class UpdateFileTest + { + private string temp_file; + [SetUp] + public void Before() + { + temp_file = Path.GetTempPath() + Guid.NewGuid().ToString() + "updatefile.xml"; + } + + [Test] + public void SaveAndLoadUpdateFileShouldBeTheSame() + { + UpdateFile file = MakeUpdateFile(); + file.Save(temp_file); + + UpdateFile loadedFile = UpdateFile.Load(temp_file); + + Assert.AreEqual(file.ApplicationName, loadedFile.ApplicationName); + Assert.AreEqual(file.VersionString, loadedFile.VersionString); + Assert.AreEqual(file.Count, loadedFile.Count); + } + + [Test] + public void SaveInvalidParamterShouldThrowExceptions() + { + Stream nullStream = null; + + UpdateFile file = new UpdateFile(); + + Assert.Catch(() => { file.Save(nullStream); }); + Assert.Catch(() => { file.Save(""); }); + + Mock unwritableStream = new Mock(); + unwritableStream.SetupGet(s => s.CanWrite).Returns(false); + + Assert.Catch(() => { file.Save(unwritableStream.Object); }); + } + + [Test] + public void LoadInvalidParameterShouldThrowExceptions() + { + Stream nullStream = null; + + Assert.Catch(() => { UpdateFile.Load(nullStream); }); + Assert.Catch(() => { UpdateFile.Load(""); }); + + CleanUp(); + + Assert.Catch(() => { UpdateFile.Load(temp_file); }); + + Mock unreadableStream = new Mock(); + unreadableStream.SetupGet(s => s.CanRead).Returns(false); + + Assert.Catch(() => { UpdateFile.Load(unreadableStream.Object); }); + } + + private UpdateFile MakeUpdateFile() + { + UpdateFile file = new UpdateFile(); + + file.ApplicationName = nameof(UpdateFileTest); + file.VersionString = "9.9.9.9"; + + DirectoryEntry appSubFolder = new DirectoryEntry("AppSubFolder"); + DirectoryEntry otherSubFolder = new DirectoryEntry("OtherSubFolder"); + + FileEntry appFile = new FileEntry() + { + Name = "application.exe", + Description = "my desc", + Hash = "AAA", + Parent = appSubFolder + }; + + FileEntry otherFile = new FileEntry() + { + Name = "data.xml", + Description = "my data file", + Hash = "BBB", + Parent = otherSubFolder + }; + + appSubFolder.Files.Add(appFile); + otherSubFolder.Files.Add(otherFile); + + file.ApplicationDirectory.Directories.Add(appSubFolder); + file.OtherDirectory.Directories.Add(otherSubFolder); + + Assert.AreEqual(2, file.Count); + + return file; + } + + [TearDown] + public void CleanUp() + { + if (File.Exists(temp_file)) + File.Delete(temp_file); + } + + } +} diff --git a/UpdateLib/UpdateLib.Tests/UpdateLib.Tests.csproj b/UpdateLib/UpdateLib.Tests/UpdateLib.Tests.csproj index f70bd5c..cf49866 100644 --- a/UpdateLib/UpdateLib.Tests/UpdateLib.Tests.csproj +++ b/UpdateLib/UpdateLib.Tests/UpdateLib.Tests.csproj @@ -55,8 +55,10 @@ + + diff --git a/UpdateLib/UpdateLib/Files/DirectoryEntry.cs b/UpdateLib/UpdateLib/Files/DirectoryEntry.cs index 2b46271..407976f 100644 --- a/UpdateLib/UpdateLib/Files/DirectoryEntry.cs +++ b/UpdateLib/UpdateLib/Files/DirectoryEntry.cs @@ -66,6 +66,5 @@ public DirectoryEntry(string name) Files = new List(); Directories = new List(); } - } } diff --git a/UpdateLib/UpdateLib/Files/FileEntry.cs b/UpdateLib/UpdateLib/Files/FileEntry.cs index 2cfde59..7efdf1f 100644 --- a/UpdateLib/UpdateLib/Files/FileEntry.cs +++ b/UpdateLib/UpdateLib/Files/FileEntry.cs @@ -93,21 +93,5 @@ public FileEntry(string name) { Name = name; } - - public override bool Equals(object obj) - { - FileEntry file = obj as FileEntry; - if (file == null) - return false; - - return this.Name == file.Name; - } - - public override int GetHashCode() - { - int hash = 13; - hash = (hash * 7) + Name.GetHashCode(); - return hash; - } } } diff --git a/UpdateLib/UpdateLib/Files/HashCacheEntry.cs b/UpdateLib/UpdateLib/Files/HashCacheEntry.cs index 508451a..ca7c91d 100644 --- a/UpdateLib/UpdateLib/Files/HashCacheEntry.cs +++ b/UpdateLib/UpdateLib/Files/HashCacheEntry.cs @@ -22,7 +22,7 @@ public HashCacheEntry() { } public HashCacheEntry(string file) { - if (String.IsNullOrEmpty(file)) + if (string.IsNullOrEmpty(file)) throw new ArgumentNullException("file"); FilePath = Path.GetFullPath(file); diff --git a/UpdateLib/UpdateLib/Files/UpdateFile.cs b/UpdateLib/UpdateLib/Files/UpdateFile.cs index fde1b41..4925b73 100644 --- a/UpdateLib/UpdateLib/Files/UpdateFile.cs +++ b/UpdateLib/UpdateLib/Files/UpdateFile.cs @@ -44,30 +44,6 @@ public UpdateFile() { } - public override bool Equals(object obj) - { - UpdateFile file = obj as UpdateFile; - if (file == null) - return false; - - if (!file.VersionString.Equals(this.VersionString)) - return false; - - - - return true; - - } - - public override int GetHashCode() - { - int hash = 7; - - hash = (hash * 7) + VersionString.GetHashCode(); - - return hash; - } - /// /// Saves the current to the output /// @@ -75,10 +51,10 @@ public override int GetHashCode() public void Save(Stream output) { if (output == null) - throw new ArgumentNullException("output"); + throw new ArgumentNullException(nameof(output)); if (!output.CanWrite) - throw new ArgumentException("Stream is not writable", "output"); + throw new ArgumentException("Stream is not writable", nameof(output)); XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add(string.Empty, string.Empty); @@ -94,8 +70,8 @@ public void Save(Stream output) /// The path of the file where to save public void Save(string path) { - if (path == null) - throw new ArgumentNullException("path"); + if (string.IsNullOrEmpty(path)) + throw new ArgumentNullException(nameof(path)); if (File.Exists(path)) File.Delete(path); @@ -113,14 +89,19 @@ public void Save(string path) public static UpdateFile Load(Stream input) { if (input == null) - throw new ArgumentNullException("input"); + throw new ArgumentNullException(nameof(input)); if (!input.CanRead) - throw new ArgumentException("Stream is not readable", "input"); + throw new ArgumentException("Stream is not readable", nameof(input)); - XmlSerializer xml = new XmlSerializer(typeof(UpdateFile)); + XmlSerializer serializer = new XmlSerializer(typeof(UpdateFile)); + + XmlReader xml = new XmlTextReader(input); + + if (!serializer.CanDeserialize(xml)) + throw new InvalidOperationException("The current stream cannot be deserialized"); - UpdateFile file = (UpdateFile)xml.Deserialize(input); + UpdateFile file = (UpdateFile)serializer.Deserialize(xml); UpdateFileProcessorTask processor = new UpdateFileProcessorTask(file); processor.Start(); @@ -137,8 +118,8 @@ public static UpdateFile Load(Stream input) /// The loaded instance of public static UpdateFile Load(string path) { - if (path == null) - throw new ArgumentNullException("path"); + if (string.IsNullOrEmpty(path)) + throw new ArgumentNullException(nameof(path)); if (!File.Exists(path)) throw new FileNotFoundException("The UpdateFile doesn't exist.", path); diff --git a/UpdateLib/UpdateLib/Logging/Logger.cs b/UpdateLib/UpdateLib/Logging/Logger.cs index a3505cd..0f4876c 100644 --- a/UpdateLib/UpdateLib/Logging/Logger.cs +++ b/UpdateLib/UpdateLib/Logging/Logger.cs @@ -43,19 +43,7 @@ public static void Error(string tag, string msg) public static void Error(string tag, Exception e) { - StringBuilder sb = new StringBuilder(); - sb.Append(e.GetBaseException().GetType().Name); - sb.AppendLine(e.Message); - sb.AppendLine(e.StackTrace); - - Exception inner = e; - while ((inner = inner.InnerException) != null) - { - sb.AppendLine(inner.Message); - sb.AppendLine(inner.StackTrace); - } - - Error(tag, sb.ToString()); + Error(tag, e.ToString()); } } } From f389dc11fa6c3f17ce6c844ae5d9bee7fcd1e890 Mon Sep 17 00:00:00 2001 From: Matthias Beerens Date: Sat, 15 Apr 2017 16:12:02 +0200 Subject: [PATCH 19/31] InformationPage --- .../UI/Pages/InformationPage.Designer.cs | 70 ++++++++++++++++++- .../UI/Pages/InformationPage.cs | 24 +++++++ .../UpdateLib.Tests/Logging/LoggingTests.cs | 3 +- 3 files changed, 94 insertions(+), 3 deletions(-) diff --git a/UpdateLib/UpdateLib.Generator/UI/Pages/InformationPage.Designer.cs b/UpdateLib/UpdateLib.Generator/UI/Pages/InformationPage.Designer.cs index 2aab77a..bed52aa 100644 --- a/UpdateLib/UpdateLib.Generator/UI/Pages/InformationPage.Designer.cs +++ b/UpdateLib/UpdateLib.Generator/UI/Pages/InformationPage.Designer.cs @@ -28,19 +28,85 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.txtAppName = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.txtAppVersion = new System.Windows.Forms.TextBox(); this.SuspendLayout(); // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("Century Gothic", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.Location = new System.Drawing.Point(14, 16); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(153, 20); + this.label1.TabIndex = 0; + this.label1.Text = "Update Information"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(15, 59); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(121, 17); + this.label2.TabIndex = 1; + this.label2.Text = "Application name: "; + // + // txtAppName + // + this.txtAppName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txtAppName.Location = new System.Drawing.Point(160, 56); + this.txtAppName.Name = "txtAppName"; + this.txtAppName.Size = new System.Drawing.Size(212, 22); + this.txtAppName.TabIndex = 3; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(15, 97); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(130, 17); + this.label3.TabIndex = 4; + this.label3.Text = "Application version: "; + // + // txtAppVersion + // + this.txtAppVersion.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txtAppVersion.Location = new System.Drawing.Point(160, 94); + this.txtAppVersion.Name = "txtAppVersion"; + this.txtAppVersion.Size = new System.Drawing.Size(212, 22); + this.txtAppVersion.TabIndex = 5; + // // InformationPage // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BackColor = System.Drawing.SystemColors.Control; + this.Controls.Add(this.txtAppVersion); + this.Controls.Add(this.label3); + this.Controls.Add(this.txtAppName); + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.Font = new System.Drawing.Font("Century Gothic", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.MinimumSize = new System.Drawing.Size(396, 144); this.Name = "InformationPage"; - this.Size = new System.Drawing.Size(672, 349); + this.Size = new System.Drawing.Size(396, 144); this.ResumeLayout(false); + this.PerformLayout(); } #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox txtAppName; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox txtAppVersion; } } diff --git a/UpdateLib/UpdateLib.Generator/UI/Pages/InformationPage.cs b/UpdateLib/UpdateLib.Generator/UI/Pages/InformationPage.cs index 075e94e..f0400db 100644 --- a/UpdateLib/UpdateLib.Generator/UI/Pages/InformationPage.cs +++ b/UpdateLib/UpdateLib.Generator/UI/Pages/InformationPage.cs @@ -11,6 +11,30 @@ namespace UpdateLib.Generator.UI.Pages { public partial class InformationPage : UserControl { + public string ApplicationName + { + get + { + return txtAppName.Text; + } + set + { + txtAppName.Text = value; + } + } + + public string ApplicationVersion + { + get + { + return txtAppVersion.Text; + } + set + { + txtAppVersion.Text = value; + } + } + public InformationPage() { InitializeComponent(); diff --git a/UpdateLib/UpdateLib.Tests/Logging/LoggingTests.cs b/UpdateLib/UpdateLib.Tests/Logging/LoggingTests.cs index 33901b2..d9bacf1 100644 --- a/UpdateLib/UpdateLib.Tests/Logging/LoggingTests.cs +++ b/UpdateLib/UpdateLib.Tests/Logging/LoggingTests.cs @@ -6,6 +6,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; +using MatthiWare.UpdateLib.Logging.Writers; namespace UpdateLib.Tests.Logging { @@ -68,7 +69,7 @@ public void ErrorLogLevelShouldNotLogAnyLowerLevel() private Mock SetUpWriter(LoggingLevel level) { Mock writer = new Mock(); - writer.SetupGet(w => w.LoggingLevel).Returns(level); + writer.SetupGet(w => w.LoggingLevel).Returns(level); return writer; } From 5aded3b2e758d72b8ae93dd420aa1f4346e1f0fd Mon Sep 17 00:00:00 2001 From: Matthias Beerens Date: Sat, 15 Apr 2017 21:48:56 +0200 Subject: [PATCH 20/31] Builder page + Extension methods --- UpdateLib/UpdateLib.Generator/MainForm.cs | 3 + .../Properties/Resources.Designer.cs | 4 +- .../Properties/Settings.Designer.cs | 22 ++-- .../UpdateLib.Generator/TestForm.Designer.cs | 23 ++-- UpdateLib/UpdateLib.Generator/TestForm.cs | 7 +- .../UI/Pages/BuilderPage.Designer.cs | 87 +++++++++++++ .../UI/Pages/BuilderPage.cs | 19 +++ .../UI/Pages/BuilderPage.resx | 120 ++++++++++++++++++ .../UI/Pages/InformationPage.cs | 1 + .../UpdateLib.Generator.csproj | 11 +- .../UpdateLib/UI/Components/UpdatePage.cs | 50 ++++---- UpdateLib/UpdateLib/UI/UIExtensions.cs | 27 ++++ UpdateLib/UpdateLib/UI/UpdaterForm.cs | 38 ++++-- UpdateLib/UpdateLib/UpdateLib.csproj | 1 + 14 files changed, 348 insertions(+), 65 deletions(-) create mode 100644 UpdateLib/UpdateLib.Generator/UI/Pages/BuilderPage.Designer.cs create mode 100644 UpdateLib/UpdateLib.Generator/UI/Pages/BuilderPage.cs create mode 100644 UpdateLib/UpdateLib.Generator/UI/Pages/BuilderPage.resx create mode 100644 UpdateLib/UpdateLib/UI/UIExtensions.cs diff --git a/UpdateLib/UpdateLib.Generator/MainForm.cs b/UpdateLib/UpdateLib.Generator/MainForm.cs index 775ea6f..40e4691 100644 --- a/UpdateLib/UpdateLib.Generator/MainForm.cs +++ b/UpdateLib/UpdateLib.Generator/MainForm.cs @@ -4,6 +4,7 @@ using System.IO; using System.Windows.Forms; using UpdateLib.Generator.Tasks; +using MatthiWare.UpdateLib.UI; namespace UpdateLib.Generator { @@ -62,6 +63,8 @@ private void Generate() private void SetWaitCursor(bool val) { + this.INvokeOnUi + if (this.InvokeRequired) { this.Invoke(new Action(SetWaitCursor), val); diff --git a/UpdateLib/UpdateLib.Generator/Properties/Resources.Designer.cs b/UpdateLib/UpdateLib.Generator/Properties/Resources.Designer.cs index 4d88d1b..056cb61 100644 --- a/UpdateLib/UpdateLib.Generator/Properties/Resources.Designer.cs +++ b/UpdateLib/UpdateLib.Generator/Properties/Resources.Designer.cs @@ -8,7 +8,7 @@ // //------------------------------------------------------------------------------ -namespace UpdateLib.Generator.Properties { +namespace MatthiWare.UpdateLib.Generator.Properties { using System; @@ -39,7 +39,7 @@ internal Resources() { internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("UpdateLib.Generator.Properties.Resources", typeof(Resources).Assembly); + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MatthiWare.UpdateLib.Generator.Properties.Resources", typeof(Resources).Assembly); resourceMan = temp; } return resourceMan; diff --git a/UpdateLib/UpdateLib.Generator/Properties/Settings.Designer.cs b/UpdateLib/UpdateLib.Generator/Properties/Settings.Designer.cs index 42da2b5..58bfc72 100644 --- a/UpdateLib/UpdateLib.Generator/Properties/Settings.Designer.cs +++ b/UpdateLib/UpdateLib.Generator/Properties/Settings.Designer.cs @@ -8,21 +8,17 @@ // //------------------------------------------------------------------------------ -namespace UpdateLib.Generator.Properties -{ - - +namespace MatthiWare.UpdateLib.Generator.Properties { + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] - internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase - { - + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); - - public static Settings Default - { - get - { + + public static Settings Default { + get { return defaultInstance; } } diff --git a/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs b/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs index 6d3566a..4afe4a1 100644 --- a/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs +++ b/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs @@ -31,10 +31,10 @@ private void InitializeComponent() this.components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TestForm)); this.SidebarPanel = new System.Windows.Forms.Panel(); - this.ContentPanel = new System.Windows.Forms.Panel(); this.btnTabBuild = new UpdateLib.Generator.UI.FlatButton(); this.btnTabFiles = new UpdateLib.Generator.UI.FlatButton(); this.btnTabInformation = new UpdateLib.Generator.UI.FlatButton(); + this.ContentPanel = new System.Windows.Forms.Panel(); this.HeaderPanel = new UpdateLib.Generator.UI.MoveablePanel(); this.pbMinimize = new UpdateLib.Generator.UI.HoverPictureBox(); this.pbMaximize = new UpdateLib.Generator.UI.HoverPictureBox(); @@ -63,16 +63,6 @@ private void InitializeComponent() this.SidebarPanel.Size = new System.Drawing.Size(233, 275); this.SidebarPanel.TabIndex = 1; // - // ContentPanel - // - this.ContentPanel.BackColor = System.Drawing.SystemColors.Control; - this.ContentPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.ContentPanel.Dock = System.Windows.Forms.DockStyle.Fill; - this.ContentPanel.Location = new System.Drawing.Point(233, 33); - this.ContentPanel.Name = "ContentPanel"; - this.ContentPanel.Size = new System.Drawing.Size(486, 275); - this.ContentPanel.TabIndex = 2; - // // btnTabBuild // this.btnTabBuild.ActiveItem = false; @@ -86,6 +76,7 @@ private void InitializeComponent() this.btnTabBuild.Size = new System.Drawing.Size(231, 63); this.btnTabBuild.TabIndex = 2; this.btnTabBuild.Text = "Build"; + this.btnTabBuild.Click += new System.EventHandler(this.btnTabBuild_Click); // // btnTabFiles // @@ -117,6 +108,16 @@ private void InitializeComponent() this.btnTabInformation.Text = "Update Information"; this.btnTabInformation.Click += new System.EventHandler(this.flatButton1_Click); // + // ContentPanel + // + this.ContentPanel.BackColor = System.Drawing.SystemColors.Control; + this.ContentPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.ContentPanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.ContentPanel.Location = new System.Drawing.Point(233, 33); + this.ContentPanel.Name = "ContentPanel"; + this.ContentPanel.Size = new System.Drawing.Size(486, 275); + this.ContentPanel.TabIndex = 2; + // // HeaderPanel // this.HeaderPanel.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(78)))), ((int)(((byte)(99)))), ((int)(((byte)(133))))); diff --git a/UpdateLib/UpdateLib.Generator/TestForm.cs b/UpdateLib/UpdateLib.Generator/TestForm.cs index da5f93a..39a6268 100644 --- a/UpdateLib/UpdateLib.Generator/TestForm.cs +++ b/UpdateLib/UpdateLib.Generator/TestForm.cs @@ -21,6 +21,7 @@ public TestForm() pageCache = new Dictionary(); } + private void TestForm_Click(object sender, EventArgs e) { @@ -51,7 +52,6 @@ private void label1_Click(object sender, EventArgs e) private void flatButton1_Click(object sender, EventArgs e) { var name = nameof(InformationPage); - //LoaderControl.Show(ContentPanel); if (!LoadPage(name)) { @@ -85,5 +85,10 @@ private bool LoadPage(string pageName) return success; } + + private void btnTabBuild_Click(object sender, EventArgs e) + { + + } } } diff --git a/UpdateLib/UpdateLib.Generator/UI/Pages/BuilderPage.Designer.cs b/UpdateLib/UpdateLib.Generator/UI/Pages/BuilderPage.Designer.cs new file mode 100644 index 0000000..f53966a --- /dev/null +++ b/UpdateLib/UpdateLib.Generator/UI/Pages/BuilderPage.Designer.cs @@ -0,0 +1,87 @@ +namespace UpdateLib.Generator.UI.Pages +{ + partial class BuilderPage + { + /// + /// 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 Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.btnBuild = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("Century Gothic", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.Location = new System.Drawing.Point(14, 16); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(143, 20); + this.label1.TabIndex = 1; + this.label1.Text = "Update generator"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(15, 59); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(121, 17); + this.label2.TabIndex = 2; + this.label2.Text = "Make new version: "; + // + // btnBuild + // + this.btnBuild.Location = new System.Drawing.Point(142, 56); + this.btnBuild.Name = "btnBuild"; + this.btnBuild.Size = new System.Drawing.Size(75, 23); + this.btnBuild.TabIndex = 3; + this.btnBuild.Text = "Build"; + this.btnBuild.UseVisualStyleBackColor = true; + // + // BuilderPage + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.btnBuild); + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.Font = new System.Drawing.Font("Century Gothic", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.MinimumSize = new System.Drawing.Size(239, 104); + this.Name = "BuilderPage"; + this.Size = new System.Drawing.Size(239, 104); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Button btnBuild; + } +} diff --git a/UpdateLib/UpdateLib.Generator/UI/Pages/BuilderPage.cs b/UpdateLib/UpdateLib.Generator/UI/Pages/BuilderPage.cs new file mode 100644 index 0000000..f36ec44 --- /dev/null +++ b/UpdateLib/UpdateLib.Generator/UI/Pages/BuilderPage.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace UpdateLib.Generator.UI.Pages +{ + public partial class BuilderPage : UserControl + { + public BuilderPage() + { + InitializeComponent(); + } + } +} diff --git a/UpdateLib/UpdateLib.Generator/UI/Pages/BuilderPage.resx b/UpdateLib/UpdateLib.Generator/UI/Pages/BuilderPage.resx new file mode 100644 index 0000000..7080a7d --- /dev/null +++ b/UpdateLib/UpdateLib.Generator/UI/Pages/BuilderPage.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/UpdateLib/UpdateLib.Generator/UI/Pages/InformationPage.cs b/UpdateLib/UpdateLib.Generator/UI/Pages/InformationPage.cs index f0400db..4f65cdc 100644 --- a/UpdateLib/UpdateLib.Generator/UI/Pages/InformationPage.cs +++ b/UpdateLib/UpdateLib.Generator/UI/Pages/InformationPage.cs @@ -11,6 +11,7 @@ namespace UpdateLib.Generator.UI.Pages { public partial class InformationPage : UserControl { + public string ApplicationName { get diff --git a/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj b/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj index bdea2bc..c785564 100644 --- a/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj +++ b/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj @@ -7,7 +7,7 @@ {5194FF71-49F6-4ADB-9B0E-4BEB418DC6F3} WinExe Properties - UpdateLib.Generator + MatthiWare.UpdateLib.Generator UpdateLib.Generator v3.5 512 @@ -87,6 +87,12 @@ Component + + UserControl + + + BuilderPage.cs + UserControl @@ -112,6 +118,9 @@ LoaderControl.cs + + BuilderPage.cs + InformationPage.cs diff --git a/UpdateLib/UpdateLib/UI/Components/UpdatePage.cs b/UpdateLib/UpdateLib/UI/Components/UpdatePage.cs index b4bfcbf..5b09f1a 100644 --- a/UpdateLib/UpdateLib/UI/Components/UpdatePage.cs +++ b/UpdateLib/UpdateLib/UI/Components/UpdatePage.cs @@ -29,7 +29,7 @@ public UpdatePage(UpdaterForm parent) ImageList ilItems = MakeImageList(); lvItems.SmallImageList = ilItems; - + FillListView(); @@ -67,9 +67,9 @@ private void FillListView() private void AddDirectoryToListView(DirectoryEntry dir) { - foreach(FileEntry file in dir.Files) + foreach (FileEntry file in dir.Files) { - + ListViewItem lvItem = new ListViewItem(new string[] { "", file.Name, "Ready to download", "0%", file.Description, Updater.Instance.Converter.Replace(file.DestinationLocation) }); lvItem.Tag = file; @@ -113,9 +113,9 @@ private void Task_TaskCompleted(object sender, AsyncCompletedEventArgs e) { Logger.Info(nameof(DownloadTask), $"Cancelled -> '{task.Entry.Name}'"); - SetSubItemText(task.Item.SubItems[2], "Cancelled"); + SetSubItemText(task.Item.SubItems[2], "Cancelled"); - SetImageKey(task.Item,"status_warning"); + SetImageKey(task.Item, "status_warning"); return; } @@ -173,14 +173,14 @@ public void CancelUpdate() private void StartDownloadItem(ListViewItem item) { - + //Test(item); } Random rnd = new Random(); - + private void Test(ListViewItem item) { @@ -195,7 +195,7 @@ private void Test(ListViewItem item) wait = rnd.Next(100); for (int i = 0; i <= 100; i++) { - + Thread.Sleep(wait); } @@ -203,7 +203,7 @@ private void Test(ListViewItem item) SetSubItemText(item.SubItems[2], val ? "Done" : "Error"); SetImageKey(item, val ? "status_done" : "status_error"); - + int amountLeft = Interlocked.Decrement(ref amountToDownload); @@ -215,26 +215,28 @@ private void Test(ListViewItem item) PageUpdate?.Invoke(this, new EventArgs()); } - + private void SetImageKey(ListViewItem item, string key) { - if (InvokeRequired) - { - Invoke(new Action(SetImageKey), item, key); - return; - } - item.ImageKey = key; + this.InvokeOnUI((c) => item.ImageKey = key); + //if (InvokeRequired) + //{ + // Invoke(new Action(SetImageKey), item, key); + // return; + //} + //item.ImageKey = key; } - + private void SetSubItemText(ListViewItem.ListViewSubItem item, string key) { - if (InvokeRequired) - { - Invoke(new Action(SetSubItemText), item, key); - return; - } - - item.Text = key; + this.InvokeOnUI((c) => item.Text = key); + //if (InvokeRequired) + //{ + // Invoke(new Action(SetSubItemText), item, key); + // return; + //} + + //item.Text = key; } public void Cancel() diff --git a/UpdateLib/UpdateLib/UI/UIExtensions.cs b/UpdateLib/UpdateLib/UI/UIExtensions.cs new file mode 100644 index 0000000..050924f --- /dev/null +++ b/UpdateLib/UpdateLib/UI/UIExtensions.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace MatthiWare.UpdateLib.UI +{ + public static class UIExtensions + { + public static void InvokeOnUI(this T control, Action action) where T : ISynchronizeInvoke + { + if (control.InvokeRequired) + { + + control.Invoke(new Action(() => action(control)), null); + } + else + { + action(control); + } + + } + + } +} diff --git a/UpdateLib/UpdateLib/UI/UpdaterForm.cs b/UpdateLib/UpdateLib/UI/UpdaterForm.cs index 06e2889..5352875 100644 --- a/UpdateLib/UpdateLib/UI/UpdaterForm.cs +++ b/UpdateLib/UpdateLib/UI/UpdaterForm.cs @@ -61,20 +61,32 @@ private void Page_PageUpdate(object sender, EventArgs e) delegate void _OnPageUpdate(IWizardPage page); private void OnPageUpdate(IWizardPage page) { - if (this.InvokeRequired) + this.InvokeOnUI((c) => { - Invoke(new _OnPageUpdate(OnPageUpdate), page); - return; - } - - if (page.IsDone && !page.IsBusy) - { - btnNext.Enabled = true; - if (page == pages.CurrentPage) - btnNext.Focus(); - if (page.NeedsExecution) - btnNext.Text = "Next >"; - } + if (page.IsDone && !page.IsBusy) + { + btnNext.Enabled = true; + if (page == pages.CurrentPage) + btnNext.Focus(); + if (page.NeedsExecution) + btnNext.Text = "Next >"; + } + + }); + //if (this.InvokeRequired) + //{ + // Invoke(new _OnPageUpdate(OnPageUpdate), page); + // return; + //} + + //if (page.IsDone && !page.IsBusy) + //{ + // btnNext.Enabled = true; + // if (page == pages.CurrentPage) + // btnNext.Focus(); + // if (page.NeedsExecution) + // btnNext.Text = "Next >"; + //} } private void btnPrevious_Click(object sender, EventArgs e) diff --git a/UpdateLib/UpdateLib/UpdateLib.csproj b/UpdateLib/UpdateLib/UpdateLib.csproj index 0948b01..5da2e9c 100644 --- a/UpdateLib/UpdateLib/UpdateLib.csproj +++ b/UpdateLib/UpdateLib/UpdateLib.csproj @@ -114,6 +114,7 @@ MessageDialog.cs + Form From 91d951b4ec6a8b3cbdc1025a51c66041c7372a1e Mon Sep 17 00:00:00 2001 From: Matthias Beerens Date: Sat, 15 Apr 2017 21:54:52 +0200 Subject: [PATCH 21/31] Changed Namespace from UpdateLib.Generator -> MatthiWare.UpdateLib.Generator --- UpdateLib/TestApp/Form1.cs | 2 +- .../UpdateLib.Generator/Files/ProjectFile.cs | 2 +- .../UpdateLib.Generator/MainForm.Designer.cs | 4 ++-- UpdateLib/UpdateLib.Generator/MainForm.cs | 5 ++--- UpdateLib/UpdateLib.Generator/Program.cs | 2 +- .../Properties/AssemblyInfo.cs | 10 +++++----- .../Tasks/LoadDirectoryTask.cs | 2 +- .../Tasks/UpdateGenerator.cs | 2 +- .../UpdateLib.Generator/TestForm.Designer.cs | 18 +++++++++--------- UpdateLib/UpdateLib.Generator/TestForm.cs | 6 +++--- .../UpdateLib.Generator/UI/ElipseComponent.cs | 2 +- UpdateLib/UpdateLib.Generator/UI/FlatButton.cs | 2 +- .../UpdateLib.Generator/UI/GradientPanel.cs | 2 +- .../UpdateLib.Generator/UI/HoverPictureBox.cs | 2 +- .../UI/LoaderControl.Designer.cs | 4 ++-- .../UpdateLib.Generator/UI/LoaderControl.cs | 2 +- .../UpdateLib.Generator/UI/MoveablePanel.cs | 2 +- .../UI/Pages/BuilderPage.Designer.cs | 2 +- .../UI/Pages/BuilderPage.cs | 2 +- .../UI/Pages/InformationPage.Designer.cs | 2 +- .../UI/Pages/InformationPage.cs | 2 +- .../UpdateLib.Generator.csproj | 2 +- 22 files changed, 39 insertions(+), 40 deletions(-) diff --git a/UpdateLib/TestApp/Form1.cs b/UpdateLib/TestApp/Form1.cs index ca74c9d..4ed4519 100644 --- a/UpdateLib/TestApp/Form1.cs +++ b/UpdateLib/TestApp/Form1.cs @@ -71,7 +71,7 @@ private void button2_Click(object sender, EventArgs e) private void button3_Click(object sender, EventArgs e) { - UpdateFile file = UpdateFile.Load("../../../UpdateLib.Generator/bin/Debug/Output/updatefile.xml"); + UpdateFile file = UpdateFile.Load("../../../MatthiWare.UpdateLib.Generator/bin/Debug/Output/updatefile.xml"); UpdaterForm updaterForm = new UpdaterForm(file); updaterForm.ShowDialog(this); } diff --git a/UpdateLib/UpdateLib.Generator/Files/ProjectFile.cs b/UpdateLib/UpdateLib.Generator/Files/ProjectFile.cs index fedc0af..9199822 100644 --- a/UpdateLib/UpdateLib.Generator/Files/ProjectFile.cs +++ b/UpdateLib/UpdateLib.Generator/Files/ProjectFile.cs @@ -3,7 +3,7 @@ using System.Linq; using System.Text; -namespace UpdateLib.Generator.Files +namespace MatthiWare.UpdateLib.Generator.Files { [Serializable] public class ProjectFile diff --git a/UpdateLib/UpdateLib.Generator/MainForm.Designer.cs b/UpdateLib/UpdateLib.Generator/MainForm.Designer.cs index 7d6147e..d874028 100644 --- a/UpdateLib/UpdateLib.Generator/MainForm.Designer.cs +++ b/UpdateLib/UpdateLib.Generator/MainForm.Designer.cs @@ -1,4 +1,4 @@ -namespace UpdateLib.Generator +namespace MatthiWare.UpdateLib.Generator { partial class MainForm { @@ -264,7 +264,7 @@ private void InitializeComponent() // buildToolStripButton // this.buildToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.buildToolStripButton.Image = global::UpdateLib.Generator.Properties.Resources.gears; + this.buildToolStripButton.Image = global::MatthiWare.UpdateLib.Generator.Properties.Resources.gears; this.buildToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; this.buildToolStripButton.Name = "buildToolStripButton"; this.buildToolStripButton.Size = new System.Drawing.Size(23, 22); diff --git a/UpdateLib/UpdateLib.Generator/MainForm.cs b/UpdateLib/UpdateLib.Generator/MainForm.cs index 40e4691..9c54f2e 100644 --- a/UpdateLib/UpdateLib.Generator/MainForm.cs +++ b/UpdateLib/UpdateLib.Generator/MainForm.cs @@ -3,10 +3,10 @@ using System.Drawing; using System.IO; using System.Windows.Forms; -using UpdateLib.Generator.Tasks; +using MatthiWare.UpdateLib.Generator.Tasks; using MatthiWare.UpdateLib.UI; -namespace UpdateLib.Generator +namespace MatthiWare.UpdateLib.Generator { public partial class MainForm : Form { @@ -63,7 +63,6 @@ private void Generate() private void SetWaitCursor(bool val) { - this.INvokeOnUi if (this.InvokeRequired) { diff --git a/UpdateLib/UpdateLib.Generator/Program.cs b/UpdateLib/UpdateLib.Generator/Program.cs index 48b8df3..bfe5e27 100644 --- a/UpdateLib/UpdateLib.Generator/Program.cs +++ b/UpdateLib/UpdateLib.Generator/Program.cs @@ -5,7 +5,7 @@ using System.Linq; using System.Windows.Forms; -namespace UpdateLib.Generator +namespace MatthiWare.UpdateLib.Generator { static class Program { diff --git a/UpdateLib/UpdateLib.Generator/Properties/AssemblyInfo.cs b/UpdateLib/UpdateLib.Generator/Properties/AssemblyInfo.cs index d93d7d8..0e3eea2 100644 --- a/UpdateLib/UpdateLib.Generator/Properties/AssemblyInfo.cs +++ b/UpdateLib/UpdateLib.Generator/Properties/AssemblyInfo.cs @@ -5,12 +5,12 @@ // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. -[assembly: AssemblyTitle("UpdateLib.Generator")] -[assembly: AssemblyDescription("")] +[assembly: AssemblyTitle("UpdateLib Generator")] +[assembly: AssemblyDescription("Update Generator")] [assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("UpdateLib.Generator")] -[assembly: AssemblyCopyright("Copyright © 2017")] +[assembly: AssemblyCompany("MatthiWare")] +[assembly: AssemblyProduct("UpdateLib")] +[assembly: AssemblyCopyright("Copyright © MatthiWare 2017")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] diff --git a/UpdateLib/UpdateLib.Generator/Tasks/LoadDirectoryTask.cs b/UpdateLib/UpdateLib.Generator/Tasks/LoadDirectoryTask.cs index 0c44ead..c8a897e 100644 --- a/UpdateLib/UpdateLib.Generator/Tasks/LoadDirectoryTask.cs +++ b/UpdateLib/UpdateLib.Generator/Tasks/LoadDirectoryTask.cs @@ -4,7 +4,7 @@ using System.IO; using System.Windows.Forms; -namespace UpdateLib.Generator.Tasks +namespace MatthiWare.UpdateLib.Generator.Tasks { public class LoadDirectoryTask : AsyncTaskBase { diff --git a/UpdateLib/UpdateLib.Generator/Tasks/UpdateGenerator.cs b/UpdateLib/UpdateLib.Generator/Tasks/UpdateGenerator.cs index e012095..a4bf190 100644 --- a/UpdateLib/UpdateLib.Generator/Tasks/UpdateGenerator.cs +++ b/UpdateLib/UpdateLib.Generator/Tasks/UpdateGenerator.cs @@ -5,7 +5,7 @@ using System.IO; using MatthiWare.UpdateLib.Tasks; -namespace UpdateLib.Generator.Tasks +namespace MatthiWare.UpdateLib.Generator.Tasks { public class UpdateGeneratorTask : AsyncTaskBase { diff --git a/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs b/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs index 4afe4a1..a181a0f 100644 --- a/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs +++ b/UpdateLib/UpdateLib.Generator/TestForm.Designer.cs @@ -1,4 +1,4 @@ -namespace UpdateLib.Generator +namespace MatthiWare.UpdateLib.Generator { partial class TestForm { @@ -31,17 +31,17 @@ private void InitializeComponent() this.components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TestForm)); this.SidebarPanel = new System.Windows.Forms.Panel(); - this.btnTabBuild = new UpdateLib.Generator.UI.FlatButton(); - this.btnTabFiles = new UpdateLib.Generator.UI.FlatButton(); - this.btnTabInformation = new UpdateLib.Generator.UI.FlatButton(); + this.btnTabBuild = new MatthiWare.UpdateLib.Generator.UI.FlatButton(); + this.btnTabFiles = new MatthiWare.UpdateLib.Generator.UI.FlatButton(); + this.btnTabInformation = new MatthiWare.UpdateLib.Generator.UI.FlatButton(); this.ContentPanel = new System.Windows.Forms.Panel(); - this.HeaderPanel = new UpdateLib.Generator.UI.MoveablePanel(); - this.pbMinimize = new UpdateLib.Generator.UI.HoverPictureBox(); - this.pbMaximize = new UpdateLib.Generator.UI.HoverPictureBox(); - this.pbClose = new UpdateLib.Generator.UI.HoverPictureBox(); + this.HeaderPanel = new MatthiWare.UpdateLib.Generator.UI.MoveablePanel(); + this.pbMinimize = new MatthiWare.UpdateLib.Generator.UI.HoverPictureBox(); + this.pbMaximize = new MatthiWare.UpdateLib.Generator.UI.HoverPictureBox(); + this.pbClose = new MatthiWare.UpdateLib.Generator.UI.HoverPictureBox(); this.pbIcon = new System.Windows.Forms.PictureBox(); this.lblTitle = new System.Windows.Forms.Label(); - this.elipseComponent1 = new UpdateLib.Generator.UI.ElipseComponent(this.components); + this.elipseComponent1 = new MatthiWare.UpdateLib.Generator.UI.ElipseComponent(this.components); this.SidebarPanel.SuspendLayout(); this.HeaderPanel.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.pbMinimize)).BeginInit(); diff --git a/UpdateLib/UpdateLib.Generator/TestForm.cs b/UpdateLib/UpdateLib.Generator/TestForm.cs index 39a6268..5b33a9e 100644 --- a/UpdateLib/UpdateLib.Generator/TestForm.cs +++ b/UpdateLib/UpdateLib.Generator/TestForm.cs @@ -6,10 +6,10 @@ using System.Linq; using System.Text; using System.Windows.Forms; -using UpdateLib.Generator.UI; -using UpdateLib.Generator.UI.Pages; +using MatthiWare.UpdateLib.Generator.UI; +using MatthiWare.UpdateLib.Generator.UI.Pages; -namespace UpdateLib.Generator +namespace MatthiWare.UpdateLib.Generator { public partial class TestForm : Form { diff --git a/UpdateLib/UpdateLib.Generator/UI/ElipseComponent.cs b/UpdateLib/UpdateLib.Generator/UI/ElipseComponent.cs index 90ce415..0543019 100644 --- a/UpdateLib/UpdateLib.Generator/UI/ElipseComponent.cs +++ b/UpdateLib/UpdateLib.Generator/UI/ElipseComponent.cs @@ -5,7 +5,7 @@ using System.Runtime.InteropServices; using System.Windows.Forms; -namespace UpdateLib.Generator.UI +namespace MatthiWare.UpdateLib.Generator.UI { public class ElipseComponent : Component { diff --git a/UpdateLib/UpdateLib.Generator/UI/FlatButton.cs b/UpdateLib/UpdateLib.Generator/UI/FlatButton.cs index 640003c..5ff2bd1 100644 --- a/UpdateLib/UpdateLib.Generator/UI/FlatButton.cs +++ b/UpdateLib/UpdateLib.Generator/UI/FlatButton.cs @@ -8,7 +8,7 @@ using System.Text; using System.Windows.Forms; -namespace UpdateLib.Generator.UI +namespace MatthiWare.UpdateLib.Generator.UI { [DefaultEvent(nameof(Click))] public class FlatButton : Control diff --git a/UpdateLib/UpdateLib.Generator/UI/GradientPanel.cs b/UpdateLib/UpdateLib.Generator/UI/GradientPanel.cs index 68c2854..348ba2a 100644 --- a/UpdateLib/UpdateLib.Generator/UI/GradientPanel.cs +++ b/UpdateLib/UpdateLib.Generator/UI/GradientPanel.cs @@ -5,7 +5,7 @@ using System.Text; using System.Windows.Forms; -namespace UpdateLib.Generator.UI +namespace MatthiWare.UpdateLib.Generator.UI { public class GradientPanel : Panel { diff --git a/UpdateLib/UpdateLib.Generator/UI/HoverPictureBox.cs b/UpdateLib/UpdateLib.Generator/UI/HoverPictureBox.cs index 77ee5da..b711d6d 100644 --- a/UpdateLib/UpdateLib.Generator/UI/HoverPictureBox.cs +++ b/UpdateLib/UpdateLib.Generator/UI/HoverPictureBox.cs @@ -5,7 +5,7 @@ using System.Text; using System.Windows.Forms; -namespace UpdateLib.Generator.UI +namespace MatthiWare.UpdateLib.Generator.UI { public class HoverPictureBox : PictureBox { diff --git a/UpdateLib/UpdateLib.Generator/UI/LoaderControl.Designer.cs b/UpdateLib/UpdateLib.Generator/UI/LoaderControl.Designer.cs index 66b4700..dbca2f9 100644 --- a/UpdateLib/UpdateLib.Generator/UI/LoaderControl.Designer.cs +++ b/UpdateLib/UpdateLib.Generator/UI/LoaderControl.Designer.cs @@ -1,4 +1,4 @@ -namespace UpdateLib.Generator.UI +namespace MatthiWare.UpdateLib.Generator.UI { partial class LoaderControl { @@ -36,7 +36,7 @@ private void InitializeComponent() // this.pbLoader.Anchor = System.Windows.Forms.AnchorStyles.None; this.pbLoader.BackColor = System.Drawing.Color.Transparent; - this.pbLoader.Image = global::UpdateLib.Generator.Properties.Resources.loading_gear; + this.pbLoader.Image = global::MatthiWare.UpdateLib.Generator.Properties.Resources.loading_gear; this.pbLoader.Location = new System.Drawing.Point(0, 0); this.pbLoader.Name = "pbLoader"; this.pbLoader.Size = new System.Drawing.Size(150, 150); diff --git a/UpdateLib/UpdateLib.Generator/UI/LoaderControl.cs b/UpdateLib/UpdateLib.Generator/UI/LoaderControl.cs index 70662ab..5c5cc6e 100644 --- a/UpdateLib/UpdateLib.Generator/UI/LoaderControl.cs +++ b/UpdateLib/UpdateLib.Generator/UI/LoaderControl.cs @@ -9,7 +9,7 @@ using MatthiWare.UpdateLib.Tasks; using System.Threading; -namespace UpdateLib.Generator.UI +namespace MatthiWare.UpdateLib.Generator.UI { public partial class LoaderControl : UserControl { diff --git a/UpdateLib/UpdateLib.Generator/UI/MoveablePanel.cs b/UpdateLib/UpdateLib.Generator/UI/MoveablePanel.cs index 1ab213c..13a8289 100644 --- a/UpdateLib/UpdateLib.Generator/UI/MoveablePanel.cs +++ b/UpdateLib/UpdateLib.Generator/UI/MoveablePanel.cs @@ -7,7 +7,7 @@ using System.Text; using System.Windows.Forms; -namespace UpdateLib.Generator.UI +namespace MatthiWare.UpdateLib.Generator.UI { public class MoveablePanel : Panel { diff --git a/UpdateLib/UpdateLib.Generator/UI/Pages/BuilderPage.Designer.cs b/UpdateLib/UpdateLib.Generator/UI/Pages/BuilderPage.Designer.cs index f53966a..2836096 100644 --- a/UpdateLib/UpdateLib.Generator/UI/Pages/BuilderPage.Designer.cs +++ b/UpdateLib/UpdateLib.Generator/UI/Pages/BuilderPage.Designer.cs @@ -1,4 +1,4 @@ -namespace UpdateLib.Generator.UI.Pages +namespace MatthiWare.UpdateLib.Generator.UI.Pages { partial class BuilderPage { diff --git a/UpdateLib/UpdateLib.Generator/UI/Pages/BuilderPage.cs b/UpdateLib/UpdateLib.Generator/UI/Pages/BuilderPage.cs index f36ec44..bb38cc8 100644 --- a/UpdateLib/UpdateLib.Generator/UI/Pages/BuilderPage.cs +++ b/UpdateLib/UpdateLib.Generator/UI/Pages/BuilderPage.cs @@ -7,7 +7,7 @@ using System.Text; using System.Windows.Forms; -namespace UpdateLib.Generator.UI.Pages +namespace MatthiWare.UpdateLib.Generator.UI.Pages { public partial class BuilderPage : UserControl { diff --git a/UpdateLib/UpdateLib.Generator/UI/Pages/InformationPage.Designer.cs b/UpdateLib/UpdateLib.Generator/UI/Pages/InformationPage.Designer.cs index bed52aa..22b31ec 100644 --- a/UpdateLib/UpdateLib.Generator/UI/Pages/InformationPage.Designer.cs +++ b/UpdateLib/UpdateLib.Generator/UI/Pages/InformationPage.Designer.cs @@ -1,4 +1,4 @@ -namespace UpdateLib.Generator.UI.Pages +namespace MatthiWare.UpdateLib.Generator.UI.Pages { partial class InformationPage { diff --git a/UpdateLib/UpdateLib.Generator/UI/Pages/InformationPage.cs b/UpdateLib/UpdateLib.Generator/UI/Pages/InformationPage.cs index 4f65cdc..7799e71 100644 --- a/UpdateLib/UpdateLib.Generator/UI/Pages/InformationPage.cs +++ b/UpdateLib/UpdateLib.Generator/UI/Pages/InformationPage.cs @@ -7,7 +7,7 @@ using System.Text; using System.Windows.Forms; -namespace UpdateLib.Generator.UI.Pages +namespace MatthiWare.UpdateLib.Generator.UI.Pages { public partial class InformationPage : UserControl { diff --git a/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj b/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj index c785564..e507b82 100644 --- a/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj +++ b/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj @@ -35,7 +35,7 @@ Generator_logo.ico - UpdateLib.Generator.Program + MatthiWare.UpdateLib.Generator.Program From 92499737ca4dbed940fddff029232ac298a8e546 Mon Sep 17 00:00:00 2001 From: Matthias Beerens Date: Sat, 15 Apr 2017 22:02:40 +0200 Subject: [PATCH 22/31] Using extensionmethods --- UpdateLib/UpdateLib.Generator/MainForm.cs | 42 ++++--------------- .../Tasks/LoadDirectoryTask.cs | 41 +++--------------- 2 files changed, 15 insertions(+), 68 deletions(-) diff --git a/UpdateLib/UpdateLib.Generator/MainForm.cs b/UpdateLib/UpdateLib.Generator/MainForm.cs index 9c54f2e..dd9c58b 100644 --- a/UpdateLib/UpdateLib.Generator/MainForm.cs +++ b/UpdateLib/UpdateLib.Generator/MainForm.cs @@ -48,7 +48,7 @@ private void Generate() { UpdateGeneratorTask generator = new UpdateGeneratorTask(applicationFolder); - + generator.TaskCompleted += Generator_TaskCompleted; generator.TaskProgressChanged += Generator_TaskProgressChanged; @@ -63,47 +63,22 @@ private void Generate() private void SetWaitCursor(bool val) { - - if (this.InvokeRequired) - { - this.Invoke(new Action(SetWaitCursor), val); - return; - } - - UseWaitCursor = val; + this.InvokeOnUI((form) => form.UseWaitCursor = val); } private void SetProgressBarVisible(bool val) { - if (statusStrip.InvokeRequired) - { - statusStrip.Invoke(new Action(SetProgressBarVisible), val); - return; - } - - progressBar.Visible = val; + this.InvokeOnUI((form) => form.progressBar.Visible = val); } private void SetProgressBarValue(int val) { - if (statusStrip.InvokeRequired) - { - statusStrip.Invoke(new Action(SetProgressBarValue), val); - return; - } - - progressBar.Value = val; + this.InvokeOnUI((form) => form.progressBar.Value = val); } private void SetStatusMessage(string msg) { - if (statusStrip.InvokeRequired) - { - statusStrip.Invoke(new Action(SetStatusMessage), msg); - return; - } - - lblStatus.Text = msg; + this.InvokeOnUI((form) => form.lblStatus.Text = msg); } private void Generator_TaskProgressChanged(object sender, ProgressChangedEventArgs e) @@ -127,7 +102,7 @@ private void Generator_TaskCompleted(object sender, AsyncCompletedEventArgs e) private void MainForm_Load(object sender, EventArgs e) { - tvProject.ExpandAll(); + tvProject.ExpandAll(); tvProject.SelectedNode = tvProject.Nodes["root"].Nodes["nodeInfo"]; } @@ -151,8 +126,9 @@ private void tvProject_AfterSelect(object sender, TreeViewEventArgs e) private void buildToolStripButton_Click(object sender, EventArgs e) { Action generateAction = new Action(Generate); - - generateAction.BeginInvoke(new AsyncCallback(r => { + + generateAction.BeginInvoke(new AsyncCallback(r => + { SetWaitCursor(false); //SetProgressBarVisible(false); generateAction.EndInvoke(r); diff --git a/UpdateLib/UpdateLib.Generator/Tasks/LoadDirectoryTask.cs b/UpdateLib/UpdateLib.Generator/Tasks/LoadDirectoryTask.cs index c8a897e..5b5bb3f 100644 --- a/UpdateLib/UpdateLib.Generator/Tasks/LoadDirectoryTask.cs +++ b/UpdateLib/UpdateLib.Generator/Tasks/LoadDirectoryTask.cs @@ -1,4 +1,5 @@ using MatthiWare.UpdateLib.Tasks; +using MatthiWare.UpdateLib.UI; using System; using System.Drawing; using System.IO; @@ -62,57 +63,27 @@ protected override void DoWork() private void SetColumnAutoSize(int clmn) { - if (ItemsListView.InvokeRequired) - { - ItemsListView.Invoke(new Action(SetColumnAutoSize), clmn); - return; - } - - ItemsListView.Columns[clmn].Width = -1; + UIExtensions.InvokeOnUI(ItemsListView, (lv) => lv.Columns[clmn].Width = -1); } private void EndUpdate() { - if (ItemsListView.InvokeRequired) - { - ItemsListView.Invoke(new Action(EndUpdate)); - return; - } - - ItemsListView.EndUpdate(); + UIExtensions.InvokeOnUI(ItemsListView, (lv) => lv.EndUpdate()); } private void BeginUpdate() { - if (ItemsListView.InvokeRequired) - { - ItemsListView.Invoke(new Action(BeginUpdate)); - return; - } - - ItemsListView.BeginUpdate(); + UIExtensions.InvokeOnUI(ItemsListView, (lv) => lv.BeginUpdate()); } private void Clear() { - if (ItemsListView.InvokeRequired) - { - ItemsListView.Invoke(new Action(Clear)); - return; - } - - ItemsListView.Items.Clear(); + UIExtensions.InvokeOnUI(ItemsListView, (lv) => lv.Items.Clear()); } private void AddItem(ListViewItem item) { - if (ItemsListView.InvokeRequired) - { - ItemsListView.Invoke(new Action(AddItem), item); - return; - } - - ItemsListView.Items.Add(item); + UIExtensions.InvokeOnUI(ItemsListView, (lv) => lv.Items.Add(item)); } } } From 466435b3258eae30ee72ad49bacba6ed401d4015 Mon Sep 17 00:00:00 2001 From: Matthias Beerens Date: Sun, 16 Apr 2017 14:46:44 +0200 Subject: [PATCH 23/31] Rename to AsyncTask --- UpdateLib/TestApp/Form1.cs | 2 +- .../Tasks/LoadDirectoryTask.cs | 2 +- .../Tasks/UpdateGenerator.cs | 2 +- UpdateLib/UpdateLib.Generator/TestForm.cs | 56 ++++++++++++++----- .../UI/LoaderControl.Designer.cs | 2 +- .../UpdateLib.Generator/UI/LoaderControl.cs | 17 +++--- .../UI/Pages/BuilderPage.cs | 2 +- .../UI/Pages/InformationPage.cs | 2 +- .../UI/Pages/PageControlBase.cs | 12 ++++ .../UpdateLib.Generator.csproj | 3 + .../UpdateLib.Tests/Tasks/AsyncTaskTest.cs | 8 +-- .../Tasks/{AsyncTaskBase.cs => AsyncTask.cs} | 31 +++++----- UpdateLib/UpdateLib/Tasks/AsyncTaskFactory.cs | 24 ++++---- .../Tasks/CheckForUpdatedFilesTask.cs | 2 +- .../UpdateLib/Tasks/CheckForUpdatesTask.cs | 2 +- UpdateLib/UpdateLib/Tasks/CleanUpTask.cs | 2 +- UpdateLib/UpdateLib/Tasks/DownloadTask.cs | 2 +- UpdateLib/UpdateLib/Tasks/UpdateCacheTask.cs | 2 +- .../Tasks/UpdateFileProcessorTask.cs | 2 +- UpdateLib/UpdateLib/UpdateLib.csproj | 2 +- 20 files changed, 112 insertions(+), 65 deletions(-) create mode 100644 UpdateLib/UpdateLib.Generator/UI/Pages/PageControlBase.cs rename UpdateLib/UpdateLib/Tasks/{AsyncTaskBase.cs => AsyncTask.cs} (91%) diff --git a/UpdateLib/TestApp/Form1.cs b/UpdateLib/TestApp/Form1.cs index 4ed4519..6fdf046 100644 --- a/UpdateLib/TestApp/Form1.cs +++ b/UpdateLib/TestApp/Form1.cs @@ -87,7 +87,7 @@ private void Form1_Load(object sender, EventArgs e) Func test2 = new Func((i) => { return i%2==0; }); - AsyncTaskBase task = AsyncTaskFactory.StartNew(test2, 2); + AsyncTask task = AsyncTaskFactory.StartNew(test2, 2); Console.WriteLine(task.GetType().FullName); } diff --git a/UpdateLib/UpdateLib.Generator/Tasks/LoadDirectoryTask.cs b/UpdateLib/UpdateLib.Generator/Tasks/LoadDirectoryTask.cs index 5b5bb3f..c30ee65 100644 --- a/UpdateLib/UpdateLib.Generator/Tasks/LoadDirectoryTask.cs +++ b/UpdateLib/UpdateLib.Generator/Tasks/LoadDirectoryTask.cs @@ -7,7 +7,7 @@ namespace MatthiWare.UpdateLib.Generator.Tasks { - public class LoadDirectoryTask : AsyncTaskBase + public class LoadDirectoryTask : AsyncTask { public ListView ItemsListView { get; set; } public ImageList IconList { get; set; } diff --git a/UpdateLib/UpdateLib.Generator/Tasks/UpdateGenerator.cs b/UpdateLib/UpdateLib.Generator/Tasks/UpdateGenerator.cs index a4bf190..2e64f97 100644 --- a/UpdateLib/UpdateLib.Generator/Tasks/UpdateGenerator.cs +++ b/UpdateLib/UpdateLib.Generator/Tasks/UpdateGenerator.cs @@ -7,7 +7,7 @@ namespace MatthiWare.UpdateLib.Generator.Tasks { - public class UpdateGeneratorTask : AsyncTaskBase + public class UpdateGeneratorTask : AsyncTask { private delegate void AddDirRecursiveDelegate(DirectoryInfo dir, DirectoryEntry entry); diff --git a/UpdateLib/UpdateLib.Generator/TestForm.cs b/UpdateLib/UpdateLib.Generator/TestForm.cs index 5b33a9e..5586e1c 100644 --- a/UpdateLib/UpdateLib.Generator/TestForm.cs +++ b/UpdateLib/UpdateLib.Generator/TestForm.cs @@ -8,20 +8,57 @@ using System.Windows.Forms; using MatthiWare.UpdateLib.Generator.UI; using MatthiWare.UpdateLib.Generator.UI.Pages; +using MatthiWare.UpdateLib.Tasks; +using System.Threading; namespace MatthiWare.UpdateLib.Generator { public partial class TestForm : Form { - private Dictionary pageCache; + private Dictionary pageCache; + private AsyncTask loadTask; public TestForm() { InitializeComponent(); - pageCache = new Dictionary(); + pageCache = new Dictionary(); + + LoadPagesTask().Start(); + } + + private AsyncTask LoadPagesTask() + { + if (loadTask == null) + { + LoaderControl.Show(ContentPanel); + + Action loadAction = new Action(()=> + { + var pageType = typeof(PageControlBase); + var types = AppDomain.CurrentDomain.GetAssemblies() + .SelectMany(asm => asm.GetTypes()) + .Where(type => pageType.IsAssignableFrom(type) && !type.IsAbstract && type.IsClass && pageType != type); + + foreach (Type type in types) + { + var name = type.Name; + PageControlBase page = Activator.CreateInstance(type) as PageControlBase; + Thread.Sleep(5000); + pageCache.Add(name, page); + } + }); + + loadTask = AsyncTaskFactory.From(loadAction, null); + + loadTask.TaskCompleted += (o, e) => + { + LoaderControl.Hide(ContentPanel); + }; + } + + return loadTask; } - private void TestForm_Click(object sender, EventArgs e) { @@ -51,14 +88,7 @@ private void label1_Click(object sender, EventArgs e) private void flatButton1_Click(object sender, EventArgs e) { - var name = nameof(InformationPage); - - if (!LoadPage(name)) - { - pageCache.Add(name, new InformationPage()); - LoadPage(name); - } - + LoadPage(nameof(InformationPage)); } private void flatButton2_Click(object sender, EventArgs e) @@ -68,7 +98,7 @@ private void flatButton2_Click(object sender, EventArgs e) private bool LoadPage(string pageName) { - UserControl control = null; + PageControlBase control = null; bool success = pageCache.TryGetValue(pageName, out control); if (control != null) @@ -88,7 +118,7 @@ private bool LoadPage(string pageName) private void btnTabBuild_Click(object sender, EventArgs e) { - + LoadPage(nameof(BuilderPage)); } } } diff --git a/UpdateLib/UpdateLib.Generator/UI/LoaderControl.Designer.cs b/UpdateLib/UpdateLib.Generator/UI/LoaderControl.Designer.cs index dbca2f9..6b90a43 100644 --- a/UpdateLib/UpdateLib.Generator/UI/LoaderControl.Designer.cs +++ b/UpdateLib/UpdateLib.Generator/UI/LoaderControl.Designer.cs @@ -40,7 +40,7 @@ private void InitializeComponent() this.pbLoader.Location = new System.Drawing.Point(0, 0); this.pbLoader.Name = "pbLoader"; this.pbLoader.Size = new System.Drawing.Size(150, 150); - this.pbLoader.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.pbLoader.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; this.pbLoader.TabIndex = 0; this.pbLoader.TabStop = false; // diff --git a/UpdateLib/UpdateLib.Generator/UI/LoaderControl.cs b/UpdateLib/UpdateLib.Generator/UI/LoaderControl.cs index 5c5cc6e..069f980 100644 --- a/UpdateLib/UpdateLib.Generator/UI/LoaderControl.cs +++ b/UpdateLib/UpdateLib.Generator/UI/LoaderControl.cs @@ -19,7 +19,7 @@ public partial class LoaderControl : UserControl private int m_opacity = 100; - private AsyncTaskBase m_fadeOutTask; + private AsyncTask m_fadeOutTask; public int Opacity { @@ -109,16 +109,15 @@ public static void Hide(Control parent) public void HideLoader(Control parent) { - if (m_fadeOutTask == null) - { - m_fadeOutTask = AsyncTaskFactory.From(new Action(FadeOut)); - m_fadeOutTask.TaskCompleted += (o, e) => HideControls(parent); - } + //if (m_fadeOutTask == null) + //{ + // m_fadeOutTask = AsyncTaskFactory.From(new Action(FadeOut)); + // m_fadeOutTask.TaskCompleted += (o, e) => HideControls(parent); + //} - if (m_fadeOutTask.IsRunning) - return; + //m_fadeOutTask.Start(); - m_fadeOutTask.Start(); + HideControls(parent); } private void HideControls(Control parent) diff --git a/UpdateLib/UpdateLib.Generator/UI/Pages/BuilderPage.cs b/UpdateLib/UpdateLib.Generator/UI/Pages/BuilderPage.cs index bb38cc8..ef9d99e 100644 --- a/UpdateLib/UpdateLib.Generator/UI/Pages/BuilderPage.cs +++ b/UpdateLib/UpdateLib.Generator/UI/Pages/BuilderPage.cs @@ -9,7 +9,7 @@ namespace MatthiWare.UpdateLib.Generator.UI.Pages { - public partial class BuilderPage : UserControl + public partial class BuilderPage : PageControlBase { public BuilderPage() { diff --git a/UpdateLib/UpdateLib.Generator/UI/Pages/InformationPage.cs b/UpdateLib/UpdateLib.Generator/UI/Pages/InformationPage.cs index 7799e71..75093b7 100644 --- a/UpdateLib/UpdateLib.Generator/UI/Pages/InformationPage.cs +++ b/UpdateLib/UpdateLib.Generator/UI/Pages/InformationPage.cs @@ -9,7 +9,7 @@ namespace MatthiWare.UpdateLib.Generator.UI.Pages { - public partial class InformationPage : UserControl + public partial class InformationPage : PageControlBase { public string ApplicationName diff --git a/UpdateLib/UpdateLib.Generator/UI/Pages/PageControlBase.cs b/UpdateLib/UpdateLib.Generator/UI/Pages/PageControlBase.cs new file mode 100644 index 0000000..5fd8b13 --- /dev/null +++ b/UpdateLib/UpdateLib.Generator/UI/Pages/PageControlBase.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace MatthiWare.UpdateLib.Generator.UI.Pages +{ + public class PageControlBase : UserControl + { + } +} diff --git a/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj b/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj index e507b82..ff069a9 100644 --- a/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj +++ b/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj @@ -99,6 +99,9 @@ InformationPage.cs + + UserControl + MainForm.cs diff --git a/UpdateLib/UpdateLib.Tests/Tasks/AsyncTaskTest.cs b/UpdateLib/UpdateLib.Tests/Tasks/AsyncTaskTest.cs index 6f6dfa4..1a490f2 100644 --- a/UpdateLib/UpdateLib.Tests/Tasks/AsyncTaskTest.cs +++ b/UpdateLib/UpdateLib.Tests/Tasks/AsyncTaskTest.cs @@ -108,7 +108,7 @@ public void TestAwaitWorker() task.AwaitTask(); } - private class WorkerTestTask : AsyncTaskBase + private class WorkerTestTask : AsyncTask { protected override void DoWork() { @@ -130,7 +130,7 @@ protected override void DoWork() } } - private class TestTask : AsyncTaskBase + private class TestTask : AsyncTask { public int Sleep { get; set; } public TestTask(int sleep) @@ -144,7 +144,7 @@ protected override void DoWork() } } - private class ErrorTask : AsyncTaskBase + private class ErrorTask : AsyncTask { protected override void DoWork() { @@ -158,7 +158,7 @@ protected override void DoWork() } } - private class ResultTask : AsyncTaskBase + private class ResultTask : AsyncTask { private T returnObj; diff --git a/UpdateLib/UpdateLib/Tasks/AsyncTaskBase.cs b/UpdateLib/UpdateLib/Tasks/AsyncTask.cs similarity index 91% rename from UpdateLib/UpdateLib/Tasks/AsyncTaskBase.cs rename to UpdateLib/UpdateLib/Tasks/AsyncTask.cs index 50dba04..681aa2b 100644 --- a/UpdateLib/UpdateLib/Tasks/AsyncTaskBase.cs +++ b/UpdateLib/UpdateLib/Tasks/AsyncTask.cs @@ -11,7 +11,7 @@ namespace MatthiWare.UpdateLib.Tasks /// /// Base class for all Tasks that need to be run Async /// - public abstract class AsyncTaskBase + public abstract class AsyncTask { #region private fields @@ -34,11 +34,11 @@ public abstract class AsyncTaskBase #region events /// - /// Raises when this is completed. + /// Raises when this is completed. /// public event EventHandler TaskCompleted; /// - /// Raises when the progress changed. + /// Raises when the progress changed. /// public event EventHandler TaskProgressChanged; @@ -73,7 +73,7 @@ public bool HasErrors } /// - /// Gets if the current is cancelled. + /// Gets if the current is cancelled. /// public bool IsCancelled { @@ -109,12 +109,12 @@ private set #region static methods /// - /// Blocks the calling threads and calls on each in . + /// Blocks the calling threads and calls on each in . /// /// The tasks to await. - public static void WaitAll(IEnumerable tasks) + public static void WaitAll(IEnumerable tasks) { - foreach (AsyncTaskBase task in tasks) + foreach (AsyncTask task in tasks) { task.AwaitTask(); } @@ -139,8 +139,11 @@ private void Reset() /// Starts the task /// /// Returns the current Task. - public AsyncTaskBase Start() + public AsyncTask Start() { + if (IsRunning) + return this; + Reset(); Action worker = new Action(() => @@ -190,8 +193,8 @@ public AsyncTaskBase Start() protected abstract void DoWork(); /// - /// Cancels the current - /// Check in the worker code to see if the got cancelled. + /// Cancels the current + /// Check in the worker code to see if the got cancelled. /// public virtual void Cancel() { @@ -291,7 +294,7 @@ protected virtual void OnTaskProgressChanged(ProgressChangedEventArgs e) /// Raises the event. /// /// If an occured pass the object. - /// Indicates whether the got cancelled. + /// Indicates whether the got cancelled. protected virtual void OnTaskCompleted(Exception e, bool cancelled = false) { TaskCompleted?.Invoke(this, new AsyncCompletedEventArgs(e, cancelled, null)); @@ -311,7 +314,7 @@ protected virtual void OnTaskCompleted(AsyncCompletedEventArgs e) /// Base class for all Tasks that need to be run Async /// /// The type of the Result object - public abstract class AsyncTaskBase : AsyncTaskBase + public abstract class AsyncTask : AsyncTask { /// /// Gets or sets the result @@ -322,7 +325,7 @@ public abstract class AsyncTaskBase : AsyncTaskBase /// Starts the task /// /// Returns the current Task. - public new AsyncTaskBase Start() + public new AsyncTask Start() { base.Start(); return this; @@ -330,7 +333,7 @@ public abstract class AsyncTaskBase : AsyncTaskBase /// /// Blocks the calling thread until the complete task is done. - /// DO NOT call this in the worker method use method instead. + /// DO NOT call this in the worker method use method instead. /// /// public new T AwaitTask() diff --git a/UpdateLib/UpdateLib/Tasks/AsyncTaskFactory.cs b/UpdateLib/UpdateLib/Tasks/AsyncTaskFactory.cs index 786c280..f8a3561 100644 --- a/UpdateLib/UpdateLib/Tasks/AsyncTaskFactory.cs +++ b/UpdateLib/UpdateLib/Tasks/AsyncTaskFactory.cs @@ -8,34 +8,34 @@ namespace MatthiWare.UpdateLib.Tasks public class AsyncTaskFactory { - public static AsyncTaskBase StartNew(Delegate action, params object[] args) + public static AsyncTask StartNew(Delegate action, params object[] args) { - GenericTask task = new GenericTask(action, args); + AnonymousTask task = new AnonymousTask(action, args); return task.Start(); } - public static AsyncTaskBase StartNew(Delegate action, params object[] args) + public static AsyncTask StartNew(Delegate action, params object[] args) { - GenericFuncTask task = new GenericFuncTask(action, args); + AnonymousTask task = new AnonymousTask(action, args); return task.Start(); } - public static AsyncTaskBase From(Delegate action, params object[] args) + public static AsyncTask From(Delegate action, params object[] args) { - return new GenericTask(action, args); + return new AnonymousTask(action, args); } - public static AsyncTaskBase From(Delegate action, params object[] args) + public static AsyncTask From(Delegate action, params object[] args) { - return new GenericFuncTask(action, args); + return new AnonymousTask(action, args); } - private class GenericFuncTask : AsyncTaskBase + private class AnonymousTask : AsyncTask { private Delegate action; private object[] args; - public GenericFuncTask(Delegate action, params object[] args) + public AnonymousTask(Delegate action, params object[] args) { this.action = action; this.args = args; @@ -47,12 +47,12 @@ protected override void DoWork() } } - private class GenericTask : AsyncTaskBase + private class AnonymousTask : AsyncTask { private Delegate action; private object[] args; - public GenericTask(Delegate action, params object[] args) + public AnonymousTask(Delegate action, params object[] args) { this.action = action; this.args = args; diff --git a/UpdateLib/UpdateLib/Tasks/CheckForUpdatedFilesTask.cs b/UpdateLib/UpdateLib/Tasks/CheckForUpdatedFilesTask.cs index ded02e7..aba9666 100644 --- a/UpdateLib/UpdateLib/Tasks/CheckForUpdatedFilesTask.cs +++ b/UpdateLib/UpdateLib/Tasks/CheckForUpdatedFilesTask.cs @@ -3,7 +3,7 @@ namespace MatthiWare.UpdateLib.Tasks { - public class CheckForUpdatedFilesTask : AsyncTaskBase + public class CheckForUpdatedFilesTask : AsyncTask { private UpdateFile updateFile; private HashCacheFile cacheFile; diff --git a/UpdateLib/UpdateLib/Tasks/CheckForUpdatesTask.cs b/UpdateLib/UpdateLib/Tasks/CheckForUpdatesTask.cs index 62978b1..2d4add3 100644 --- a/UpdateLib/UpdateLib/Tasks/CheckForUpdatesTask.cs +++ b/UpdateLib/UpdateLib/Tasks/CheckForUpdatesTask.cs @@ -8,7 +8,7 @@ namespace MatthiWare.UpdateLib.Tasks { - public class CheckForUpdatesTask : AsyncTaskBase + public class CheckForUpdatesTask : AsyncTask { public string Url { get; set; } diff --git a/UpdateLib/UpdateLib/Tasks/CleanUpTask.cs b/UpdateLib/UpdateLib/Tasks/CleanUpTask.cs index 79d8414..7555892 100644 --- a/UpdateLib/UpdateLib/Tasks/CleanUpTask.cs +++ b/UpdateLib/UpdateLib/Tasks/CleanUpTask.cs @@ -4,7 +4,7 @@ namespace MatthiWare.UpdateLib.Tasks { - public class CleanUpTask : AsyncTaskBase + public class CleanUpTask : AsyncTask { public string PathToClean { get; set; } public string SearchPattern { get; set; } diff --git a/UpdateLib/UpdateLib/Tasks/DownloadTask.cs b/UpdateLib/UpdateLib/Tasks/DownloadTask.cs index 1c79535..800bc48 100644 --- a/UpdateLib/UpdateLib/Tasks/DownloadTask.cs +++ b/UpdateLib/UpdateLib/Tasks/DownloadTask.cs @@ -8,7 +8,7 @@ namespace MatthiWare.UpdateLib.Tasks { - public class DownloadTask : AsyncTaskBase + public class DownloadTask : AsyncTask { private WebClient webClient; private ManualResetEvent wait; diff --git a/UpdateLib/UpdateLib/Tasks/UpdateCacheTask.cs b/UpdateLib/UpdateLib/Tasks/UpdateCacheTask.cs index 9464411..e97badb 100644 --- a/UpdateLib/UpdateLib/Tasks/UpdateCacheTask.cs +++ b/UpdateLib/UpdateLib/Tasks/UpdateCacheTask.cs @@ -6,7 +6,7 @@ namespace MatthiWare.UpdateLib.Tasks { - public class UpdateCacheTask : AsyncTaskBase + public class UpdateCacheTask : AsyncTask { protected override void DoWork() { diff --git a/UpdateLib/UpdateLib/Tasks/UpdateFileProcessorTask.cs b/UpdateLib/UpdateLib/Tasks/UpdateFileProcessorTask.cs index 035e59f..bc09982 100644 --- a/UpdateLib/UpdateLib/Tasks/UpdateFileProcessorTask.cs +++ b/UpdateLib/UpdateLib/Tasks/UpdateFileProcessorTask.cs @@ -3,7 +3,7 @@ namespace MatthiWare.UpdateLib.Tasks { - public class UpdateFileProcessorTask : AsyncTaskBase + public class UpdateFileProcessorTask : AsyncTask { private UpdateFile file; diff --git a/UpdateLib/UpdateLib/UpdateLib.csproj b/UpdateLib/UpdateLib/UpdateLib.csproj index 5da2e9c..123b358 100644 --- a/UpdateLib/UpdateLib/UpdateLib.csproj +++ b/UpdateLib/UpdateLib/UpdateLib.csproj @@ -73,7 +73,7 @@ - + From dcc72d44e6c7eb463dd4f490dc84ce750147aebb Mon Sep 17 00:00:00 2001 From: Matthias Beerens Date: Sun, 16 Apr 2017 23:15:36 +0200 Subject: [PATCH 24/31] Added filespage --- UpdateLib/UpdateLib.Generator/TestForm.cs | 2 +- .../UI/Pages/FilesPage.Designer.cs | 72 +++++++++++ .../UpdateLib.Generator/UI/Pages/FilesPage.cs | 19 +++ .../UI/Pages/FilesPage.resx | 120 ++++++++++++++++++ .../UpdateLib.Generator.csproj | 9 ++ 5 files changed, 221 insertions(+), 1 deletion(-) create mode 100644 UpdateLib/UpdateLib.Generator/UI/Pages/FilesPage.Designer.cs create mode 100644 UpdateLib/UpdateLib.Generator/UI/Pages/FilesPage.cs create mode 100644 UpdateLib/UpdateLib.Generator/UI/Pages/FilesPage.resx diff --git a/UpdateLib/UpdateLib.Generator/TestForm.cs b/UpdateLib/UpdateLib.Generator/TestForm.cs index 5586e1c..6872c5f 100644 --- a/UpdateLib/UpdateLib.Generator/TestForm.cs +++ b/UpdateLib/UpdateLib.Generator/TestForm.cs @@ -44,7 +44,7 @@ private AsyncTask LoadPagesTask() { var name = type.Name; PageControlBase page = Activator.CreateInstance(type) as PageControlBase; - Thread.Sleep(5000); + //Thread.Sleep(5000); pageCache.Add(name, page); } }); diff --git a/UpdateLib/UpdateLib.Generator/UI/Pages/FilesPage.Designer.cs b/UpdateLib/UpdateLib.Generator/UI/Pages/FilesPage.Designer.cs new file mode 100644 index 0000000..a8eede3 --- /dev/null +++ b/UpdateLib/UpdateLib.Generator/UI/Pages/FilesPage.Designer.cs @@ -0,0 +1,72 @@ +namespace MatthiWare.UpdateLib.Generator.UI.Pages +{ + partial class FilesPage + { + /// + /// 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 Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.label1 = new System.Windows.Forms.Label(); + this.treeView1 = new System.Windows.Forms.TreeView(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("Century Gothic", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.Location = new System.Drawing.Point(14, 16); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(128, 20); + this.label1.TabIndex = 1; + this.label1.Text = " Files and folders"; + // + // treeView1 + // + this.treeView1.Location = new System.Drawing.Point(18, 54); + this.treeView1.Name = "treeView1"; + this.treeView1.Size = new System.Drawing.Size(121, 97); + this.treeView1.TabIndex = 2; + // + // FilesPage + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.treeView1); + this.Controls.Add(this.label1); + this.Font = new System.Drawing.Font("Century Gothic", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.Name = "FilesPage"; + this.Size = new System.Drawing.Size(761, 418); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TreeView treeView1; + } +} diff --git a/UpdateLib/UpdateLib.Generator/UI/Pages/FilesPage.cs b/UpdateLib/UpdateLib.Generator/UI/Pages/FilesPage.cs new file mode 100644 index 0000000..a8d1ba2 --- /dev/null +++ b/UpdateLib/UpdateLib.Generator/UI/Pages/FilesPage.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace MatthiWare.UpdateLib.Generator.UI.Pages +{ + public partial class FilesPage : PageControlBase + { + public FilesPage() + { + InitializeComponent(); + } + } +} diff --git a/UpdateLib/UpdateLib.Generator/UI/Pages/FilesPage.resx b/UpdateLib/UpdateLib.Generator/UI/Pages/FilesPage.resx new file mode 100644 index 0000000..7080a7d --- /dev/null +++ b/UpdateLib/UpdateLib.Generator/UI/Pages/FilesPage.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj b/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj index ff069a9..d6b0847 100644 --- a/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj +++ b/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj @@ -93,6 +93,12 @@ BuilderPage.cs + + UserControl + + + FilesPage.cs + UserControl @@ -124,6 +130,9 @@ BuilderPage.cs + + FilesPage.cs + InformationPage.cs From 26632757b2713b7670513d0c01353388a3789c38 Mon Sep 17 00:00:00 2001 From: Matthias Beerens Date: Mon, 17 Apr 2017 18:16:10 +0200 Subject: [PATCH 25/31] Added page initialization --- UpdateLib/UpdateLib.Generator/TestForm.cs | 94 ++++++++++++++++--- .../UpdateLib.Generator/UI/LoaderControl.cs | 58 +++++------- .../UI/Pages/BuilderPage.cs | 5 + .../UI/Pages/FilesPage.Designer.cs | 34 +++++-- .../UpdateLib.Generator/UI/Pages/FilesPage.cs | 6 ++ .../UI/Pages/InformationPage.cs | 5 + .../UI/Pages/PageControlBase.cs | 24 ++++- 7 files changed, 169 insertions(+), 57 deletions(-) diff --git a/UpdateLib/UpdateLib.Generator/TestForm.cs b/UpdateLib/UpdateLib.Generator/TestForm.cs index 6872c5f..920a1f0 100644 --- a/UpdateLib/UpdateLib.Generator/TestForm.cs +++ b/UpdateLib/UpdateLib.Generator/TestForm.cs @@ -10,13 +10,14 @@ using MatthiWare.UpdateLib.Generator.UI.Pages; using MatthiWare.UpdateLib.Tasks; using System.Threading; +using MatthiWare.UpdateLib.UI; namespace MatthiWare.UpdateLib.Generator { public partial class TestForm : Form { private Dictionary pageCache; - private AsyncTask loadTask; + private AsyncTask loadTask; public TestForm() { @@ -33,7 +34,7 @@ private AsyncTask LoadPagesTask() { LoaderControl.Show(ContentPanel); - Action loadAction = new Action(()=> + Action loadAction = new Action(() => { var pageType = typeof(PageControlBase); var types = AppDomain.CurrentDomain.GetAssemblies() @@ -51,7 +52,7 @@ private AsyncTask LoadPagesTask() loadTask = AsyncTaskFactory.From(loadAction, null); - loadTask.TaskCompleted += (o, e) => + loadTask.TaskCompleted += (o, e) => { LoaderControl.Hide(ContentPanel); }; @@ -93,27 +94,98 @@ private void flatButton1_Click(object sender, EventArgs e) private void flatButton2_Click(object sender, EventArgs e) { - LoaderControl.Hide(ContentPanel); + LoadPage(nameof(FilesPage)); } private bool LoadPage(string pageName) { - PageControlBase control = null; - bool success = pageCache.TryGetValue(pageName, out control); + loadTask.AwaitTask(); - if (control != null) + PageControlBase page = null; + bool success = pageCache.TryGetValue(pageName, out page); + + if (success) + { + if (page.IsPageInitialized) + { + AddControlToContentPanel(page); + } + else + { + AddControlToContentPanel(null); + + LoaderControl.Show(ContentPanel); + + page.InitializePage((o, e) => + { + LoaderControl.Hide(ContentPanel); + + if (e.Cancelled) + { + ShowMessageBox( + "Page Load", + "Task cancelled", + "The loading of the page got cancelled.", + SystemIcons.Warning, + MessageBoxButtons.OK); + + return; + } + + if (e.Error != null) + { + ShowMessageBox( + "Page Load", + "Error occured when loading the page", + "Check the log files for more information!", + SystemIcons.Error, + MessageBoxButtons.OK); + + return; + } + + AddControlToContentPanel(page); + }); + } + } + + return success; + } + + private void ShowMessageBox(string title, string header, string desc, Icon icon, MessageBoxButtons buttons = MessageBoxButtons.YesNo) + { + this.InvokeOnUI((form) => + { + new MessageDialog( + title, + header, + desc, + icon, + buttons) + .ShowDialog(); + }); + } + + private void AddControlToContentPanel(Control toAdd) + { + + + this.InvokeOnUI((form) => { ContentPanel.SuspendLayout(); ContentPanel.Controls.Clear(); - ContentPanel.Controls.Add(control); - control.Dock = DockStyle.Fill; + if (toAdd != null) + { + toAdd.Dock = DockStyle.Fill; + ContentPanel.Controls.Add(toAdd); + } ContentPanel.ResumeLayout(); - } + }); - return success; + } private void btnTabBuild_Click(object sender, EventArgs e) diff --git a/UpdateLib/UpdateLib.Generator/UI/LoaderControl.cs b/UpdateLib/UpdateLib.Generator/UI/LoaderControl.cs index 069f980..7371630 100644 --- a/UpdateLib/UpdateLib.Generator/UI/LoaderControl.cs +++ b/UpdateLib/UpdateLib.Generator/UI/LoaderControl.cs @@ -8,6 +8,7 @@ using System.Windows.Forms; using MatthiWare.UpdateLib.Tasks; using System.Threading; +using MatthiWare.UpdateLib.UI; namespace MatthiWare.UpdateLib.Generator.UI { @@ -19,8 +20,6 @@ public partial class LoaderControl : UserControl private int m_opacity = 100; - private AsyncTask m_fadeOutTask; - public int Opacity { get @@ -67,26 +66,33 @@ public static void Show(Control parent) { if (!loaders.ContainsKey(parent)) loaders.Add(parent, new LoaderControl()); - + loaders[parent].ShowLoader(parent); } public void ShowLoader(Control parent) { - parent.SuspendLayout(); + - Opacity = 100; + UIExtensions.InvokeOnUI(parent, (c) => + { + parent.SuspendLayout(); - parent.Controls.Add(this); + Opacity = 100; - Size = parent.Size; - Location = new Point(0, 0); + c.Controls.Add(this); + + Size = parent.Size; + Location = new Point(0, 0); - parent.Resize += ParentResize; + c.Resize += ParentResize; - BringToFront(); + BringToFront(); - parent.ResumeLayout(); + parent.ResumeLayout(); + }); + + } private void ParentResize(object sender, EventArgs e) @@ -109,38 +115,20 @@ public static void Hide(Control parent) public void HideLoader(Control parent) { - //if (m_fadeOutTask == null) - //{ - // m_fadeOutTask = AsyncTaskFactory.From(new Action(FadeOut)); - // m_fadeOutTask.TaskCompleted += (o, e) => HideControls(parent); - //} - - //m_fadeOutTask.Start(); - - HideControls(parent); - } - - private void HideControls(Control parent) - { - SuspendLayout(); + parent.Invoke(new Action(() => { + SuspendLayout(); + parent.Controls.Remove(this); parent.Resize -= ParentResize; - })); - ResumeLayout(); - } + ResumeLayout(); + })); - private void FadeOut() - { - while (Opacity != 1) - { - Opacity -= 5; - Thread.Sleep(200); - } + } } } diff --git a/UpdateLib/UpdateLib.Generator/UI/Pages/BuilderPage.cs b/UpdateLib/UpdateLib.Generator/UI/Pages/BuilderPage.cs index ef9d99e..ac37191 100644 --- a/UpdateLib/UpdateLib.Generator/UI/Pages/BuilderPage.cs +++ b/UpdateLib/UpdateLib.Generator/UI/Pages/BuilderPage.cs @@ -15,5 +15,10 @@ public BuilderPage() { InitializeComponent(); } + + protected override void OnPageInitialize() + { + + } } } diff --git a/UpdateLib/UpdateLib.Generator/UI/Pages/FilesPage.Designer.cs b/UpdateLib/UpdateLib.Generator/UI/Pages/FilesPage.Designer.cs index a8eede3..45835a8 100644 --- a/UpdateLib/UpdateLib.Generator/UI/Pages/FilesPage.Designer.cs +++ b/UpdateLib/UpdateLib.Generator/UI/Pages/FilesPage.Designer.cs @@ -29,7 +29,8 @@ protected override void Dispose(bool disposing) private void InitializeComponent() { this.label1 = new System.Windows.Forms.Label(); - this.treeView1 = new System.Windows.Forms.TreeView(); + this.tvFolders = new System.Windows.Forms.TreeView(); + this.tvFiles = new System.Windows.Forms.ListView(); this.SuspendLayout(); // // label1 @@ -42,23 +43,37 @@ private void InitializeComponent() this.label1.TabIndex = 1; this.label1.Text = " Files and folders"; // - // treeView1 + // tvFolders // - this.treeView1.Location = new System.Drawing.Point(18, 54); - this.treeView1.Name = "treeView1"; - this.treeView1.Size = new System.Drawing.Size(121, 97); - this.treeView1.TabIndex = 2; + this.tvFolders.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.tvFolders.Location = new System.Drawing.Point(18, 53); + this.tvFolders.Name = "tvFolders"; + this.tvFolders.Size = new System.Drawing.Size(191, 331); + this.tvFolders.TabIndex = 2; + // + // tvFiles + // + this.tvFiles.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tvFiles.Location = new System.Drawing.Point(215, 53); + this.tvFiles.Name = "tvFiles"; + this.tvFiles.Size = new System.Drawing.Size(514, 331); + this.tvFiles.TabIndex = 3; + this.tvFiles.UseCompatibleStateImageBehavior = false; // // FilesPage // this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.treeView1); + this.Controls.Add(this.tvFiles); + this.Controls.Add(this.tvFolders); this.Controls.Add(this.label1); this.Font = new System.Drawing.Font("Century Gothic", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); this.Name = "FilesPage"; - this.Size = new System.Drawing.Size(761, 418); + this.Size = new System.Drawing.Size(747, 402); this.ResumeLayout(false); this.PerformLayout(); @@ -67,6 +82,7 @@ private void InitializeComponent() #endregion private System.Windows.Forms.Label label1; - private System.Windows.Forms.TreeView treeView1; + private System.Windows.Forms.TreeView tvFolders; + private System.Windows.Forms.ListView tvFiles; } } diff --git a/UpdateLib/UpdateLib.Generator/UI/Pages/FilesPage.cs b/UpdateLib/UpdateLib.Generator/UI/Pages/FilesPage.cs index a8d1ba2..ee796cb 100644 --- a/UpdateLib/UpdateLib.Generator/UI/Pages/FilesPage.cs +++ b/UpdateLib/UpdateLib.Generator/UI/Pages/FilesPage.cs @@ -6,6 +6,7 @@ using System.Linq; using System.Text; using System.Windows.Forms; +using System.Threading; namespace MatthiWare.UpdateLib.Generator.UI.Pages { @@ -15,5 +16,10 @@ public FilesPage() { InitializeComponent(); } + + protected override void OnPageInitialize() + { + Thread.Sleep(3000); + } } } diff --git a/UpdateLib/UpdateLib.Generator/UI/Pages/InformationPage.cs b/UpdateLib/UpdateLib.Generator/UI/Pages/InformationPage.cs index 75093b7..6f0b719 100644 --- a/UpdateLib/UpdateLib.Generator/UI/Pages/InformationPage.cs +++ b/UpdateLib/UpdateLib.Generator/UI/Pages/InformationPage.cs @@ -40,5 +40,10 @@ public InformationPage() { InitializeComponent(); } + + protected override void OnPageInitialize() + { + + } } } diff --git a/UpdateLib/UpdateLib.Generator/UI/Pages/PageControlBase.cs b/UpdateLib/UpdateLib.Generator/UI/Pages/PageControlBase.cs index 5fd8b13..579f459 100644 --- a/UpdateLib/UpdateLib.Generator/UI/Pages/PageControlBase.cs +++ b/UpdateLib/UpdateLib.Generator/UI/Pages/PageControlBase.cs @@ -1,12 +1,32 @@ -using System; +using MatthiWare.UpdateLib.Tasks; +using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using System.Text; using System.Windows.Forms; namespace MatthiWare.UpdateLib.Generator.UI.Pages { - public class PageControlBase : UserControl + public abstract class PageControlBase : UserControl { + public bool IsPageInitialized { get; private set; } = false; + + public AsyncTask InitializePage(EventHandler callBack) + { + AsyncTask task = AsyncTaskFactory.From(new Action(() => OnPageInitialize()), null); + + task.TaskCompleted += (o, e) => + { + IsPageInitialized = !e.Cancelled && e.Error == null; + + callBack?.Invoke(this, e); + }; + + return task.Start(); + } + + protected abstract void OnPageInitialize(); + } } From d0e67d36e2c25da89cd6840594cc0ad2db3aa82a Mon Sep 17 00:00:00 2001 From: Matthias Beerens Date: Mon, 17 Apr 2017 19:23:14 +0200 Subject: [PATCH 26/31] Fixed page change bug on long initialize with extra check --- UpdateLib/UpdateLib.Generator/TestForm.cs | 10 +++-- .../UI/Pages/BuilderPage.cs | 5 ++- .../UpdateLib/UI/MessageDialog.Designer.cs | 45 ++++++++++--------- 3 files changed, 34 insertions(+), 26 deletions(-) diff --git a/UpdateLib/UpdateLib.Generator/TestForm.cs b/UpdateLib/UpdateLib.Generator/TestForm.cs index 920a1f0..a34c2e7 100644 --- a/UpdateLib/UpdateLib.Generator/TestForm.cs +++ b/UpdateLib/UpdateLib.Generator/TestForm.cs @@ -18,6 +18,7 @@ public partial class TestForm : Form { private Dictionary pageCache; private AsyncTask loadTask; + private bool shouldShowNewPage = false; public TestForm() { @@ -106,6 +107,8 @@ private bool LoadPage(string pageName) if (success) { + shouldShowNewPage = true; + if (page.IsPageInitialized) { AddControlToContentPanel(page); @@ -168,7 +171,8 @@ private void ShowMessageBox(string title, string header, string desc, Icon icon, private void AddControlToContentPanel(Control toAdd) { - + if (!shouldShowNewPage) + return; this.InvokeOnUI((form) => { @@ -180,12 +184,12 @@ private void AddControlToContentPanel(Control toAdd) { toAdd.Dock = DockStyle.Fill; ContentPanel.Controls.Add(toAdd); + + shouldShowNewPage = false; } ContentPanel.ResumeLayout(); }); - - } private void btnTabBuild_Click(object sender, EventArgs e) diff --git a/UpdateLib/UpdateLib.Generator/UI/Pages/BuilderPage.cs b/UpdateLib/UpdateLib.Generator/UI/Pages/BuilderPage.cs index ac37191..fac9320 100644 --- a/UpdateLib/UpdateLib.Generator/UI/Pages/BuilderPage.cs +++ b/UpdateLib/UpdateLib.Generator/UI/Pages/BuilderPage.cs @@ -6,6 +6,8 @@ using System.Linq; using System.Text; using System.Windows.Forms; +using System.Threading; +using System.IO; namespace MatthiWare.UpdateLib.Generator.UI.Pages { @@ -18,7 +20,8 @@ public BuilderPage() protected override void OnPageInitialize() { - + Thread.Sleep(1000); + throw new FileNotFoundException("Config file missing"); } } } diff --git a/UpdateLib/UpdateLib/UI/MessageDialog.Designer.cs b/UpdateLib/UpdateLib/UI/MessageDialog.Designer.cs index 67c1306..ef98053 100644 --- a/UpdateLib/UpdateLib/UI/MessageDialog.Designer.cs +++ b/UpdateLib/UpdateLib/UI/MessageDialog.Designer.cs @@ -30,12 +30,12 @@ private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MessageDialog)); this.panel1 = new System.Windows.Forms.Panel(); + this.btn2 = new System.Windows.Forms.Button(); + this.btn1 = new System.Windows.Forms.Button(); this.btn3 = new System.Windows.Forms.Button(); this.pbIcon = new System.Windows.Forms.PictureBox(); this.lblHeader = new System.Windows.Forms.Label(); this.lblDesc = new System.Windows.Forms.Label(); - this.btn1 = new System.Windows.Forms.Button(); - this.btn2 = new System.Windows.Forms.Button(); this.panel1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.pbIcon)).BeginInit(); this.SuspendLayout(); @@ -52,6 +52,26 @@ private void InitializeComponent() this.panel1.Size = new System.Drawing.Size(401, 46); this.panel1.TabIndex = 0; // + // btn2 + // + this.btn2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.btn2.Location = new System.Drawing.Point(227, 11); + this.btn2.Name = "btn2"; + this.btn2.Size = new System.Drawing.Size(75, 23); + this.btn2.TabIndex = 3; + this.btn2.UseVisualStyleBackColor = true; + this.btn2.Visible = false; + // + // btn1 + // + this.btn1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.btn1.Location = new System.Drawing.Point(146, 11); + this.btn1.Name = "btn1"; + this.btn1.Size = new System.Drawing.Size(75, 23); + this.btn1.TabIndex = 2; + this.btn1.UseVisualStyleBackColor = true; + this.btn1.Visible = false; + // // btn3 // this.btn3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); @@ -92,26 +112,6 @@ private void InitializeComponent() this.lblDesc.TabIndex = 3; this.lblDesc.Text = "Update now?\r\nPress yes to update or no to cancel."; // - // btn1 - // - this.btn1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.btn1.Location = new System.Drawing.Point(146, 11); - this.btn1.Name = "btn1"; - this.btn1.Size = new System.Drawing.Size(75, 23); - this.btn1.TabIndex = 2; - this.btn1.UseVisualStyleBackColor = true; - this.btn1.Visible = false; - // - // btn2 - // - this.btn2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.btn2.Location = new System.Drawing.Point(227, 11); - this.btn2.Name = "btn2"; - this.btn2.Size = new System.Drawing.Size(75, 23); - this.btn2.TabIndex = 3; - this.btn2.UseVisualStyleBackColor = true; - this.btn2.Visible = false; - // // MessageDialog // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -130,6 +130,7 @@ private void InitializeComponent() this.MinimizeBox = false; this.Name = "MessageDialog"; this.ShowIcon = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "Message Dialog"; this.panel1.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.pbIcon)).EndInit(); From 91124a739f461d102b98aaf77bd7af170b44c8f9 Mon Sep 17 00:00:00 2001 From: Matthias Beerens Date: Tue, 18 Apr 2017 22:17:21 +0200 Subject: [PATCH 27/31] View for FilesPage + Bug where multiple tasks would run for the same page. --- UpdateLib/UpdateLib.Generator/TestForm.cs | 5 -- .../UI/Pages/BuilderPage.cs | 4 +- .../UI/Pages/FilesPage.Designer.cs | 83 ++++++++++++++++--- .../UI/Pages/FilesPage.resx | 3 + .../UI/Pages/PageControlBase.cs | 15 ++-- 5 files changed, 88 insertions(+), 22 deletions(-) diff --git a/UpdateLib/UpdateLib.Generator/TestForm.cs b/UpdateLib/UpdateLib.Generator/TestForm.cs index a34c2e7..9e17c6b 100644 --- a/UpdateLib/UpdateLib.Generator/TestForm.cs +++ b/UpdateLib/UpdateLib.Generator/TestForm.cs @@ -83,11 +83,6 @@ private void pbClose_Click(object sender, EventArgs e) Close(); } - private void label1_Click(object sender, EventArgs e) - { - - } - private void flatButton1_Click(object sender, EventArgs e) { LoadPage(nameof(InformationPage)); diff --git a/UpdateLib/UpdateLib.Generator/UI/Pages/BuilderPage.cs b/UpdateLib/UpdateLib.Generator/UI/Pages/BuilderPage.cs index fac9320..efc2ddb 100644 --- a/UpdateLib/UpdateLib.Generator/UI/Pages/BuilderPage.cs +++ b/UpdateLib/UpdateLib.Generator/UI/Pages/BuilderPage.cs @@ -20,8 +20,8 @@ public BuilderPage() protected override void OnPageInitialize() { - Thread.Sleep(1000); - throw new FileNotFoundException("Config file missing"); + //Thread.Sleep(1000); + //throw new FileNotFoundException("Config file missing"); } } } diff --git a/UpdateLib/UpdateLib.Generator/UI/Pages/FilesPage.Designer.cs b/UpdateLib/UpdateLib.Generator/UI/Pages/FilesPage.Designer.cs index 45835a8..44ddcd5 100644 --- a/UpdateLib/UpdateLib.Generator/UI/Pages/FilesPage.Designer.cs +++ b/UpdateLib/UpdateLib.Generator/UI/Pages/FilesPage.Designer.cs @@ -28,9 +28,21 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { + this.components = new System.ComponentModel.Container(); + System.Windows.Forms.TreeNode treeNode1 = new System.Windows.Forms.TreeNode("Application Folder"); + System.Windows.Forms.TreeNode treeNode2 = new System.Windows.Forms.TreeNode("AppData"); + System.Windows.Forms.TreeNode treeNode3 = new System.Windows.Forms.TreeNode("Update Project", new System.Windows.Forms.TreeNode[] { + treeNode1, + treeNode2}); this.label1 = new System.Windows.Forms.Label(); this.tvFolders = new System.Windows.Forms.TreeView(); - this.tvFiles = new System.Windows.Forms.ListView(); + this.lvFiles = new System.Windows.Forms.ListView(); + this.clmnName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.clmnType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.clmnDate = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.clmnSize = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.clmnIcon = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.ilIcons = new System.Windows.Forms.ImageList(this.components); this.SuspendLayout(); // // label1 @@ -47,27 +59,72 @@ private void InitializeComponent() // this.tvFolders.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left))); + this.tvFolders.ImageIndex = 0; + this.tvFolders.ImageList = this.ilIcons; this.tvFolders.Location = new System.Drawing.Point(18, 53); this.tvFolders.Name = "tvFolders"; + treeNode1.Name = "nodeProjectFiles"; + treeNode1.Text = "Application Folder"; + treeNode2.Name = "nodeAppData"; + treeNode2.Text = "AppData"; + treeNode3.Name = "nodeProject"; + treeNode3.Text = "Update Project"; + this.tvFolders.Nodes.AddRange(new System.Windows.Forms.TreeNode[] { + treeNode3}); + this.tvFolders.SelectedImageIndex = 0; this.tvFolders.Size = new System.Drawing.Size(191, 331); this.tvFolders.TabIndex = 2; // - // tvFiles + // lvFiles // - this.tvFiles.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + this.lvFiles.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.tvFiles.Location = new System.Drawing.Point(215, 53); - this.tvFiles.Name = "tvFiles"; - this.tvFiles.Size = new System.Drawing.Size(514, 331); - this.tvFiles.TabIndex = 3; - this.tvFiles.UseCompatibleStateImageBehavior = false; + this.lvFiles.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.clmnIcon, + this.clmnName, + this.clmnDate, + this.clmnType, + this.clmnSize}); + this.lvFiles.Location = new System.Drawing.Point(215, 53); + this.lvFiles.Name = "lvFiles"; + this.lvFiles.Size = new System.Drawing.Size(514, 331); + this.lvFiles.SmallImageList = this.ilIcons; + this.lvFiles.TabIndex = 3; + this.lvFiles.UseCompatibleStateImageBehavior = false; + this.lvFiles.View = System.Windows.Forms.View.Details; + // + // clmnName + // + this.clmnName.Text = "Name"; + // + // clmnType + // + this.clmnType.Text = "Type"; + // + // clmnDate + // + this.clmnDate.Text = "Last Modified"; + // + // clmnSize + // + this.clmnSize.Text = "Size"; + // + // clmnIcon + // + this.clmnIcon.Text = ""; + // + // ilIcons + // + this.ilIcons.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit; + this.ilIcons.ImageSize = new System.Drawing.Size(16, 16); + this.ilIcons.TransparentColor = System.Drawing.Color.Transparent; // // FilesPage // this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.tvFiles); + this.Controls.Add(this.lvFiles); this.Controls.Add(this.tvFolders); this.Controls.Add(this.label1); this.Font = new System.Drawing.Font("Century Gothic", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); @@ -83,6 +140,12 @@ private void InitializeComponent() private System.Windows.Forms.Label label1; private System.Windows.Forms.TreeView tvFolders; - private System.Windows.Forms.ListView tvFiles; + private System.Windows.Forms.ListView lvFiles; + private System.Windows.Forms.ColumnHeader clmnIcon; + private System.Windows.Forms.ColumnHeader clmnName; + private System.Windows.Forms.ColumnHeader clmnDate; + private System.Windows.Forms.ColumnHeader clmnType; + private System.Windows.Forms.ColumnHeader clmnSize; + private System.Windows.Forms.ImageList ilIcons; } } diff --git a/UpdateLib/UpdateLib.Generator/UI/Pages/FilesPage.resx b/UpdateLib/UpdateLib.Generator/UI/Pages/FilesPage.resx index 7080a7d..be67fa0 100644 --- a/UpdateLib/UpdateLib.Generator/UI/Pages/FilesPage.resx +++ b/UpdateLib/UpdateLib.Generator/UI/Pages/FilesPage.resx @@ -117,4 +117,7 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 17, 17 + \ No newline at end of file diff --git a/UpdateLib/UpdateLib.Generator/UI/Pages/PageControlBase.cs b/UpdateLib/UpdateLib.Generator/UI/Pages/PageControlBase.cs index 579f459..c4c08c2 100644 --- a/UpdateLib/UpdateLib.Generator/UI/Pages/PageControlBase.cs +++ b/UpdateLib/UpdateLib.Generator/UI/Pages/PageControlBase.cs @@ -8,25 +8,30 @@ namespace MatthiWare.UpdateLib.Generator.UI.Pages { - public abstract class PageControlBase : UserControl + public class PageControlBase : UserControl { public bool IsPageInitialized { get; private set; } = false; + private AsyncTask taskInitialize; + public AsyncTask InitializePage(EventHandler callBack) { - AsyncTask task = AsyncTaskFactory.From(new Action(() => OnPageInitialize()), null); + if (IsPageInitialized || (taskInitialize != null && taskInitialize.IsRunning)) + return taskInitialize; + + taskInitialize = AsyncTaskFactory.From(new Action(() => OnPageInitialize()), null); - task.TaskCompleted += (o, e) => + taskInitialize.TaskCompleted += (o, e) => { IsPageInitialized = !e.Cancelled && e.Error == null; callBack?.Invoke(this, e); }; - return task.Start(); + return taskInitialize.Start(); } - protected abstract void OnPageInitialize(); + protected virtual void OnPageInitialize() { } } } From 5bebbf3ef0c8f129437f66fb13e1c5c400cd540a Mon Sep 17 00:00:00 2001 From: Matthias Beerens Date: Fri, 21 Apr 2017 23:14:33 +0200 Subject: [PATCH 28/31] Added context menu for files page. --- .../Data/ListViewItemFile.cs | 13 ++++ .../Data/ListViewItemFolder.cs | 12 +++ .../Data/TreeViewFileNode.cs | 12 +++ .../Data/TreeViewFolderNode.cs | 21 +++++ .../Properties/Resources.Designer.cs | 20 +++++ .../Properties/Resources.resx | 13 +++- .../Resources/folder_transparent_16px.png | Bin 0 -> 436 bytes .../Resources/image_transparent_16px.png | Bin 0 -> 484 bytes .../UI/Pages/FilesPage.Designer.cs | 72 +++++++++++------- .../UpdateLib.Generator/UI/Pages/FilesPage.cs | 7 +- .../UI/Pages/FilesPage.resx | 3 + .../UpdateLib.Generator.csproj | 7 ++ 12 files changed, 150 insertions(+), 30 deletions(-) create mode 100644 UpdateLib/UpdateLib.Generator/Data/ListViewItemFile.cs create mode 100644 UpdateLib/UpdateLib.Generator/Data/ListViewItemFolder.cs create mode 100644 UpdateLib/UpdateLib.Generator/Data/TreeViewFileNode.cs create mode 100644 UpdateLib/UpdateLib.Generator/Data/TreeViewFolderNode.cs create mode 100644 UpdateLib/UpdateLib.Generator/Resources/folder_transparent_16px.png create mode 100644 UpdateLib/UpdateLib.Generator/Resources/image_transparent_16px.png diff --git a/UpdateLib/UpdateLib.Generator/Data/ListViewItemFile.cs b/UpdateLib/UpdateLib.Generator/Data/ListViewItemFile.cs new file mode 100644 index 0000000..834bef0 --- /dev/null +++ b/UpdateLib/UpdateLib.Generator/Data/ListViewItemFile.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace MatthiWare.UpdateLib.Generator.Data +{ + public class ListViewItemFile : ListViewItem + { + + } +} diff --git a/UpdateLib/UpdateLib.Generator/Data/ListViewItemFolder.cs b/UpdateLib/UpdateLib.Generator/Data/ListViewItemFolder.cs new file mode 100644 index 0000000..7a86489 --- /dev/null +++ b/UpdateLib/UpdateLib.Generator/Data/ListViewItemFolder.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace MatthiWare.UpdateLib.Generator.Data +{ + public class ListViewItemFolder : ListViewItem + { + } +} diff --git a/UpdateLib/UpdateLib.Generator/Data/TreeViewFileNode.cs b/UpdateLib/UpdateLib.Generator/Data/TreeViewFileNode.cs new file mode 100644 index 0000000..4a9c416 --- /dev/null +++ b/UpdateLib/UpdateLib.Generator/Data/TreeViewFileNode.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace MatthiWare.UpdateLib.Generator.Data +{ + public class TreeViewFileNode : TreeNode + { + } +} diff --git a/UpdateLib/UpdateLib.Generator/Data/TreeViewFolderNode.cs b/UpdateLib/UpdateLib.Generator/Data/TreeViewFolderNode.cs new file mode 100644 index 0000000..6a869d1 --- /dev/null +++ b/UpdateLib/UpdateLib.Generator/Data/TreeViewFolderNode.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace MatthiWare.UpdateLib.Generator.Data +{ + public class TreeViewFolderNode : TreeNode + { + private const string FOLDER_KEY = "folderimagekey"; + + + public TreeViewFolderNode(string folderName) + { + Name = folderName; + ImageKey = FOLDER_KEY; + } + + } +} diff --git a/UpdateLib/UpdateLib.Generator/Properties/Resources.Designer.cs b/UpdateLib/UpdateLib.Generator/Properties/Resources.Designer.cs index 056cb61..892886a 100644 --- a/UpdateLib/UpdateLib.Generator/Properties/Resources.Designer.cs +++ b/UpdateLib/UpdateLib.Generator/Properties/Resources.Designer.cs @@ -60,6 +60,16 @@ internal Resources() { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap folder_transparent_16px { + get { + object obj = ResourceManager.GetObject("folder_transparent_16px", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -70,6 +80,16 @@ internal static System.Drawing.Bitmap gears { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap image_transparent_16px { + get { + object obj = ResourceManager.GetObject("image_transparent_16px", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// diff --git a/UpdateLib/UpdateLib.Generator/Properties/Resources.resx b/UpdateLib/UpdateLib.Generator/Properties/Resources.resx index a77078a..e7eae8a 100644 --- a/UpdateLib/UpdateLib.Generator/Properties/Resources.resx +++ b/UpdateLib/UpdateLib.Generator/Properties/Resources.resx @@ -117,14 +117,21 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + + ..\Resources\loading.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\gears.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\loading.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\folder_transparent_16px.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\loading_gear.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\image_transparent_16px.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/UpdateLib/UpdateLib.Generator/Resources/folder_transparent_16px.png b/UpdateLib/UpdateLib.Generator/Resources/folder_transparent_16px.png new file mode 100644 index 0000000000000000000000000000000000000000..e7d89f46b59c83eceb1a66c916c49cb3e6be7ef2 GIT binary patch literal 436 zcmV;l0ZaagP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E-^DS16z6k00AUPL_t(IPmPjEPQySDMRPgE7{QV&u;m5_ zF$n|$Ay5zq1SbiEc}k9e@o0yj*wJwhO>@_~uANUkS_1-fG& z_%~dmRU0L6z(ku;s(D%CELnZgN^*fV%mvfju&4jLE#Z>UH%*g`(=1 eou)P?7^Oev)Ia1+K1=NY00009<7rA literal 0 HcmV?d00001 diff --git a/UpdateLib/UpdateLib.Generator/Resources/image_transparent_16px.png b/UpdateLib/UpdateLib.Generator/Resources/image_transparent_16px.png new file mode 100644 index 0000000000000000000000000000000000000000..3e26c140daf90a9e7a06563ad80f28f2b47ab3ab GIT binary patch literal 484 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33 zJwsy?=IAP*sUe;&jv*HQy^~KCH93g5{{5`tS9l=7p&^d*Z|5&ya=4MV{l~2w0T#w41|ulGz@!e6#qw(q#|wAG=GlQ=V;A3P$V(&;!yrQlE#{unI)He z{7zQ+mIRxb2O=C5uU*N`clr;EeR%a-C*s#&sK}^*t-SAD+Y3W%$;1naKW{V ztb+*_B94(+a$Kvv?h-4oeQN)M{ruHgK-SL07@>1B7bk7MX>jdKw(-pN`Ejet8MW;H XtaX0-T$L#t7zqrXu6{1-oD!M<*f7VI literal 0 HcmV?d00001 diff --git a/UpdateLib/UpdateLib.Generator/UI/Pages/FilesPage.Designer.cs b/UpdateLib/UpdateLib.Generator/UI/Pages/FilesPage.Designer.cs index 44ddcd5..e0ea722 100644 --- a/UpdateLib/UpdateLib.Generator/UI/Pages/FilesPage.Designer.cs +++ b/UpdateLib/UpdateLib.Generator/UI/Pages/FilesPage.Designer.cs @@ -29,20 +29,19 @@ protected override void Dispose(bool disposing) private void InitializeComponent() { this.components = new System.ComponentModel.Container(); - System.Windows.Forms.TreeNode treeNode1 = new System.Windows.Forms.TreeNode("Application Folder"); - System.Windows.Forms.TreeNode treeNode2 = new System.Windows.Forms.TreeNode("AppData"); - System.Windows.Forms.TreeNode treeNode3 = new System.Windows.Forms.TreeNode("Update Project", new System.Windows.Forms.TreeNode[] { - treeNode1, - treeNode2}); this.label1 = new System.Windows.Forms.Label(); this.tvFolders = new System.Windows.Forms.TreeView(); + this.ilIcons = new System.Windows.Forms.ImageList(this.components); this.lvFiles = new System.Windows.Forms.ListView(); + this.clmnIcon = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.clmnName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.clmnType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.clmnDate = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.clmnType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.clmnSize = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.clmnIcon = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.ilIcons = new System.Windows.Forms.ImageList(this.components); + this.contextMenuRightClick = new System.Windows.Forms.ContextMenuStrip(this.components); + this.menuAddFiles = new System.Windows.Forms.ToolStripMenuItem(); + this.menuAddFolder = new System.Windows.Forms.ToolStripMenuItem(); + this.contextMenuRightClick.SuspendLayout(); this.SuspendLayout(); // // label1 @@ -59,22 +58,21 @@ private void InitializeComponent() // this.tvFolders.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left))); + this.tvFolders.ContextMenuStrip = this.contextMenuRightClick; this.tvFolders.ImageIndex = 0; this.tvFolders.ImageList = this.ilIcons; this.tvFolders.Location = new System.Drawing.Point(18, 53); this.tvFolders.Name = "tvFolders"; - treeNode1.Name = "nodeProjectFiles"; - treeNode1.Text = "Application Folder"; - treeNode2.Name = "nodeAppData"; - treeNode2.Text = "AppData"; - treeNode3.Name = "nodeProject"; - treeNode3.Text = "Update Project"; - this.tvFolders.Nodes.AddRange(new System.Windows.Forms.TreeNode[] { - treeNode3}); this.tvFolders.SelectedImageIndex = 0; this.tvFolders.Size = new System.Drawing.Size(191, 331); this.tvFolders.TabIndex = 2; // + // ilIcons + // + this.ilIcons.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit; + this.ilIcons.ImageSize = new System.Drawing.Size(16, 16); + this.ilIcons.TransparentColor = System.Drawing.Color.Transparent; + // // lvFiles // this.lvFiles.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) @@ -86,6 +84,7 @@ private void InitializeComponent() this.clmnDate, this.clmnType, this.clmnSize}); + this.lvFiles.ContextMenuStrip = this.contextMenuRightClick; this.lvFiles.Location = new System.Drawing.Point(215, 53); this.lvFiles.Name = "lvFiles"; this.lvFiles.Size = new System.Drawing.Size(514, 331); @@ -94,31 +93,48 @@ private void InitializeComponent() this.lvFiles.UseCompatibleStateImageBehavior = false; this.lvFiles.View = System.Windows.Forms.View.Details; // - // clmnName + // clmnIcon // - this.clmnName.Text = "Name"; + this.clmnIcon.Text = ""; // - // clmnType + // clmnName // - this.clmnType.Text = "Type"; + this.clmnName.Text = "Name"; // // clmnDate // this.clmnDate.Text = "Last Modified"; // + // clmnType + // + this.clmnType.Text = "Type"; + // // clmnSize // this.clmnSize.Text = "Size"; // - // clmnIcon + // contextMenuRightClick // - this.clmnIcon.Text = ""; + this.contextMenuRightClick.Font = new System.Drawing.Font("Century Gothic", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.contextMenuRightClick.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.menuAddFiles, + this.menuAddFolder}); + this.contextMenuRightClick.Name = "menuTV"; + this.contextMenuRightClick.Size = new System.Drawing.Size(142, 48); // - // ilIcons + // menuAddFiles // - this.ilIcons.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit; - this.ilIcons.ImageSize = new System.Drawing.Size(16, 16); - this.ilIcons.TransparentColor = System.Drawing.Color.Transparent; + this.menuAddFiles.Image = global::MatthiWare.UpdateLib.Generator.Properties.Resources.image_transparent_16px; + this.menuAddFiles.Name = "menuAddFiles"; + this.menuAddFiles.Size = new System.Drawing.Size(141, 22); + this.menuAddFiles.Text = "Add File(s)"; + // + // menuAddFolder + // + this.menuAddFolder.Image = global::MatthiWare.UpdateLib.Generator.Properties.Resources.folder_transparent_16px; + this.menuAddFolder.Name = "menuAddFolder"; + this.menuAddFolder.Size = new System.Drawing.Size(141, 22); + this.menuAddFolder.Text = "Add Folder"; // // FilesPage // @@ -131,6 +147,7 @@ private void InitializeComponent() this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); this.Name = "FilesPage"; this.Size = new System.Drawing.Size(747, 402); + this.contextMenuRightClick.ResumeLayout(false); this.ResumeLayout(false); this.PerformLayout(); @@ -147,5 +164,8 @@ private void InitializeComponent() private System.Windows.Forms.ColumnHeader clmnType; private System.Windows.Forms.ColumnHeader clmnSize; private System.Windows.Forms.ImageList ilIcons; + private System.Windows.Forms.ContextMenuStrip contextMenuRightClick; + private System.Windows.Forms.ToolStripMenuItem menuAddFiles; + private System.Windows.Forms.ToolStripMenuItem menuAddFolder; } } diff --git a/UpdateLib/UpdateLib.Generator/UI/Pages/FilesPage.cs b/UpdateLib/UpdateLib.Generator/UI/Pages/FilesPage.cs index ee796cb..5fa70df 100644 --- a/UpdateLib/UpdateLib.Generator/UI/Pages/FilesPage.cs +++ b/UpdateLib/UpdateLib.Generator/UI/Pages/FilesPage.cs @@ -7,6 +7,8 @@ using System.Text; using System.Windows.Forms; using System.Threading; +using MatthiWare.UpdateLib.Tasks; +using MatthiWare.UpdateLib.Generator.Data; namespace MatthiWare.UpdateLib.Generator.UI.Pages { @@ -19,7 +21,10 @@ public FilesPage() protected override void OnPageInitialize() { - Thread.Sleep(3000); + TreeViewFolderNode appFolder = new TreeViewFolderNode("Application Folder"); + TreeViewFolderNode appDataFolder = new TreeViewFolderNode("AppData"); + + } } } diff --git a/UpdateLib/UpdateLib.Generator/UI/Pages/FilesPage.resx b/UpdateLib/UpdateLib.Generator/UI/Pages/FilesPage.resx index be67fa0..1ef623b 100644 --- a/UpdateLib/UpdateLib.Generator/UI/Pages/FilesPage.resx +++ b/UpdateLib/UpdateLib.Generator/UI/Pages/FilesPage.resx @@ -117,6 +117,9 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 103, 17 + 17, 17 diff --git a/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj b/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj index d6b0847..d11b383 100644 --- a/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj +++ b/UpdateLib/UpdateLib.Generator/UpdateLib.Generator.csproj @@ -49,6 +49,10 @@ + + + + Form @@ -154,10 +158,13 @@ + + +