From 8b9bb143ad523a086e912afdd794d341b35385a4 Mon Sep 17 00:00:00 2001 From: Nemesh Date: Fri, 2 Apr 2021 19:16:37 +0300 Subject: [PATCH] v.0.5.1 UI Overhaul, search speed x10+, settings with memory, new sound, search modes, outcome finder --- .vs/FloatToolGUI/v16/.suo | Bin 119296 -> 121856 bytes FloatToolGUI/About.Designer.cs | 177 - FloatToolGUI/About.cs | 50 - FloatToolGUI/About.resx | 658 -- FloatToolGUI/Benchmark.Designer.cs | 370 + FloatToolGUI/Benchmark.cs | 352 + FloatToolGUI/Benchmark.resx | 370 + FloatToolGUI/CustomProgressBar.Designer.cs | 46 - FloatToolGUI/CustomProgressBar.cs | 86 - FloatToolGUI/FloatToolGUI.csproj | 58 +- FloatToolGUI/Main.Designer.cs | 325 +- FloatToolGUI/Main.cs | 253 +- FloatToolGUI/Main.resx | 332 +- FloatToolGUI/Properties/Resources.Designer.cs | 40 + FloatToolGUI/Properties/Resources.resx | 22 +- FloatToolGUI/Resources/benchmarkBlack.png | Bin 0 -> 1060 bytes FloatToolGUI/Resources/benchmarkWhite.png | Bin 0 -> 1351 bytes FloatToolGUI/Resources/floattool.ico | Bin 0 -> 14506 bytes FloatToolGUI/Resources/gearBlack.png | Bin 0 -> 21697 bytes FloatToolGUI/Resources/gearWhite.png | Bin 0 -> 22337 bytes FloatToolGUI/{ => Resources}/github.png | Bin FloatToolGUI/Resources/itemData.json | 7355 +++++++++++++++++ FloatToolGUI/{ => Resources}/mutedBlack.png | Bin FloatToolGUI/{ => Resources}/mutedWhite.png | Bin FloatToolGUI/Resources/strings.Designer.cs | 99 + .../strings.en.resx} | 12 + FloatToolGUI/Resources/strings.resx | 132 + FloatToolGUI/{ => Resources}/unmutedBlack.png | Bin FloatToolGUI/{ => Resources}/unmutedWhite.png | Bin FloatToolGUI/SettingsForm.Designer.cs | 281 + FloatToolGUI/SettingsForm.cs | 128 + FloatToolGUI/SettingsForm.resx | 367 + FloatToolGUI/Utils.cs | 29 + 33 files changed, 9963 insertions(+), 1579 deletions(-) delete mode 100644 FloatToolGUI/About.Designer.cs delete mode 100644 FloatToolGUI/About.cs delete mode 100644 FloatToolGUI/About.resx create mode 100644 FloatToolGUI/Benchmark.Designer.cs create mode 100644 FloatToolGUI/Benchmark.cs create mode 100644 FloatToolGUI/Benchmark.resx delete mode 100644 FloatToolGUI/CustomProgressBar.Designer.cs delete mode 100644 FloatToolGUI/CustomProgressBar.cs create mode 100644 FloatToolGUI/Resources/benchmarkBlack.png create mode 100644 FloatToolGUI/Resources/benchmarkWhite.png create mode 100644 FloatToolGUI/Resources/floattool.ico create mode 100644 FloatToolGUI/Resources/gearBlack.png create mode 100644 FloatToolGUI/Resources/gearWhite.png rename FloatToolGUI/{ => Resources}/github.png (100%) create mode 100644 FloatToolGUI/Resources/itemData.json rename FloatToolGUI/{ => Resources}/mutedBlack.png (100%) rename FloatToolGUI/{ => Resources}/mutedWhite.png (100%) create mode 100644 FloatToolGUI/Resources/strings.Designer.cs rename FloatToolGUI/{CustomProgressBar.resx => Resources/strings.en.resx} (93%) create mode 100644 FloatToolGUI/Resources/strings.resx rename FloatToolGUI/{ => Resources}/unmutedBlack.png (100%) rename FloatToolGUI/{ => Resources}/unmutedWhite.png (100%) create mode 100644 FloatToolGUI/SettingsForm.Designer.cs create mode 100644 FloatToolGUI/SettingsForm.cs create mode 100644 FloatToolGUI/SettingsForm.resx create mode 100644 FloatToolGUI/Utils.cs diff --git a/.vs/FloatToolGUI/v16/.suo b/.vs/FloatToolGUI/v16/.suo index 65ea8e697963ea63071bd2ac6c14f3d36356f7a7..6f5048688d6f3e7fc5eb1549d4db8593b97b679f 100644 GIT binary patch literal 121856 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 QVYi>)bvHv=AMp4t-Hm3dV_gy#N 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 diff --git a/FloatToolGUI/About.Designer.cs b/FloatToolGUI/About.Designer.cs deleted file mode 100644 index 6c00c5e..0000000 --- a/FloatToolGUI/About.Designer.cs +++ /dev/null @@ -1,177 +0,0 @@ -namespace FloatToolGUI -{ - partial class About - { - /// - /// 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() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(About)); - this.close_btn = new System.Windows.Forms.Button(); - this.label1 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.label3 = new System.Windows.Forms.Label(); - this.label4 = new System.Windows.Forms.Label(); - this.divam = new System.Windows.Forms.Label(); - this.granzi = new System.Windows.Forms.Label(); - this.brisk = new System.Windows.Forms.Label(); - this.SuspendLayout(); - // - // close_btn - // - this.close_btn.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(56)))), ((int)(((byte)(56)))), ((int)(((byte)(56))))); - this.close_btn.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.close_btn.FlatAppearance.BorderSize = 0; - this.close_btn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.close_btn.Font = new System.Drawing.Font("Microsoft JhengHei Light", 18F); - this.close_btn.ForeColor = System.Drawing.Color.White; - this.close_btn.Location = new System.Drawing.Point(11, 184); - this.close_btn.Name = "close_btn"; - this.close_btn.Size = new System.Drawing.Size(218, 45); - this.close_btn.TabIndex = 0; - this.close_btn.Text = "Закрыть"; - this.close_btn.UseVisualStyleBackColor = false; - this.close_btn.Click += new System.EventHandler(this.button1_Click); - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Font = new System.Drawing.Font("Righteous", 27.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label1.ForeColor = System.Drawing.Color.White; - this.label1.Location = new System.Drawing.Point(29, 7); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(181, 47); - this.label1.TabIndex = 1; - this.label1.Text = "FloatTool"; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Font = new System.Drawing.Font("Righteous", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label2.ForeColor = System.Drawing.Color.White; - this.label2.Location = new System.Drawing.Point(52, 56); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(136, 21); - this.label2.TabIndex = 2; - this.label2.Text = "Версия 0.4.2 GUI"; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Font = new System.Drawing.Font("Maiandra GD", 8.25F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic))), System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label3.ForeColor = System.Drawing.Color.White; - this.label3.Location = new System.Drawing.Point(21, 86); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(202, 14); - this.label3.TabIndex = 3; - this.label3.Text = "Разработал приложение: Prevter"; - this.label3.Click += new System.EventHandler(this.label3_Click); - // - // label4 - // - this.label4.AutoSize = true; - this.label4.Font = new System.Drawing.Font("Maiandra GD", 8.25F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic))), System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label4.ForeColor = System.Drawing.Color.White; - this.label4.Location = new System.Drawing.Point(37, 109); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(167, 14); - this.label4.TabIndex = 4; - this.label4.Text = "Помогали в тестировании:"; - // - // divam - // - this.divam.AutoSize = true; - this.divam.Font = new System.Drawing.Font("Maiandra GD", 8.25F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic))), System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.divam.ForeColor = System.Drawing.Color.White; - this.divam.Location = new System.Drawing.Point(53, 133); - this.divam.Name = "divam"; - this.divam.Size = new System.Drawing.Size(43, 14); - this.divam.TabIndex = 5; - this.divam.Text = "Divam"; - this.divam.Click += new System.EventHandler(this.divam_Click); - // - // granzi - // - this.granzi.AutoSize = true; - this.granzi.Font = new System.Drawing.Font("Maiandra GD", 8.25F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic))), System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.granzi.ForeColor = System.Drawing.Color.White; - this.granzi.Location = new System.Drawing.Point(116, 133); - this.granzi.Name = "granzi"; - this.granzi.Size = new System.Drawing.Size(72, 14); - this.granzi.TabIndex = 6; - this.granzi.Text = "GranziTime"; - this.granzi.Click += new System.EventHandler(this.granzi_Click); - // - // brisk - // - this.brisk.AutoSize = true; - this.brisk.Font = new System.Drawing.Font("Maiandra GD", 8.25F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic))), System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.brisk.ForeColor = System.Drawing.Color.White; - this.brisk.Location = new System.Drawing.Point(5, 159); - this.brisk.Name = "brisk"; - this.brisk.Size = new System.Drawing.Size(227, 14); - this.brisk.TabIndex = 8; - this.brisk.Text = "Идея была взята из видео BriskBrain"; - this.brisk.Click += new System.EventHandler(this.label8_Click); - // - // About - // - this.AcceptButton = this.close_btn; - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(44)))), ((int)(((byte)(44)))), ((int)(((byte)(44))))); - this.CancelButton = this.close_btn; - this.ClientSize = new System.Drawing.Size(239, 237); - this.ControlBox = false; - this.Controls.Add(this.brisk); - this.Controls.Add(this.granzi); - this.Controls.Add(this.divam); - this.Controls.Add(this.label4); - this.Controls.Add(this.label3); - this.Controls.Add(this.label2); - this.Controls.Add(this.label1); - this.Controls.Add(this.close_btn); - this.HelpButton = true; - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.Name = "About"; - this.Text = "О Разработчике"; - this.Load += new System.EventHandler(this.About_Load); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.Button close_btn; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.Label label4; - private System.Windows.Forms.Label divam; - private System.Windows.Forms.Label granzi; - private System.Windows.Forms.Label brisk; - } -} \ No newline at end of file diff --git a/FloatToolGUI/About.cs b/FloatToolGUI/About.cs deleted file mode 100644 index 5dfc71e..0000000 --- a/FloatToolGUI/About.cs +++ /dev/null @@ -1,50 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; - -namespace FloatToolGUI -{ - public partial class About : Form - { - public About() - { - InitializeComponent(); - } - - private void About_Load(object sender, EventArgs e) - { - - } - - private void divam_Click(object sender, EventArgs e) - { - System.Diagnostics.Process.Start("https://steamcommunity.com/id/divamyt"); - } - - private void button1_Click(object sender, EventArgs e) - { - this.Close(); - } - - private void label3_Click(object sender, EventArgs e) - { - System.Diagnostics.Process.Start("https://steamcommunity.com/id/prevter"); - } - - private void label8_Click(object sender, EventArgs e) - { - System.Diagnostics.Process.Start("https://www.youtube.com/channel/UCsqGXK3HK0eWu6C1NoUsRsQ"); - } - - private void granzi_Click(object sender, EventArgs e) - { - System.Diagnostics.Process.Start("https://steamcommunity.com/profiles/76561198328715744"); - } - } -} diff --git a/FloatToolGUI/About.resx b/FloatToolGUI/About.resx deleted file mode 100644 index 6765ca3..0000000 --- a/FloatToolGUI/About.resx +++ /dev/null @@ -1,658 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - - 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 - WtT/Dwq2uvjgV6RrAAAAAElFTkSuQmCC - - - \ No newline at end of file diff --git a/FloatToolGUI/Benchmark.Designer.cs b/FloatToolGUI/Benchmark.Designer.cs new file mode 100644 index 0000000..9b281ec --- /dev/null +++ b/FloatToolGUI/Benchmark.Designer.cs @@ -0,0 +1,370 @@ +namespace FloatToolGUI +{ + partial class Benchmark + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Benchmark)); + this.startBenchmarkBtn = new System.Windows.Forms.Button(); + this.submitScoreBtn = new System.Windows.Forms.Button(); + this.cpuNameLabel = new System.Windows.Forms.Label(); + this.threadCountLabel = new System.Windows.Forms.Label(); + this.versionLabel2 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.speedLabel = new System.Windows.Forms.Label(); + this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); + this.panel1 = new System.Windows.Forms.Panel(); + this.label7 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.panel2 = new System.Windows.Forms.Panel(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.Updater = new System.Windows.Forms.Timer(this.components); + this.customProgressBar1 = new FloatToolGUI.CustomProgressBar(); + this.panel4 = new System.Windows.Forms.Panel(); + this.label8 = new System.Windows.Forms.Label(); + this.closeBtn = new System.Windows.Forms.Button(); + this.panel3 = new System.Windows.Forms.Panel(); + this.flowLayoutPanel1.SuspendLayout(); + this.panel1.SuspendLayout(); + this.panel2.SuspendLayout(); + this.panel4.SuspendLayout(); + this.panel3.SuspendLayout(); + this.SuspendLayout(); + // + // startBenchmarkBtn + // + this.startBenchmarkBtn.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(56)))), ((int)(((byte)(56)))), ((int)(((byte)(56))))); + this.startBenchmarkBtn.FlatAppearance.BorderSize = 0; + this.startBenchmarkBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.startBenchmarkBtn.Font = new System.Drawing.Font("Microsoft JhengHei UI Light", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.startBenchmarkBtn.ForeColor = System.Drawing.Color.White; + this.startBenchmarkBtn.Location = new System.Drawing.Point(394, 247); + this.startBenchmarkBtn.Name = "startBenchmarkBtn"; + this.startBenchmarkBtn.Size = new System.Drawing.Size(304, 39); + this.startBenchmarkBtn.TabIndex = 1; + this.startBenchmarkBtn.Text = "Начать бенчмарк"; + this.startBenchmarkBtn.UseVisualStyleBackColor = false; + this.startBenchmarkBtn.Click += new System.EventHandler(this.startBenchmarkBtn_Click); + // + // submitScoreBtn + // + this.submitScoreBtn.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(56)))), ((int)(((byte)(56)))), ((int)(((byte)(56))))); + this.submitScoreBtn.Enabled = false; + this.submitScoreBtn.FlatAppearance.BorderSize = 0; + this.submitScoreBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.submitScoreBtn.Font = new System.Drawing.Font("Microsoft JhengHei UI Light", 12F); + this.submitScoreBtn.ForeColor = System.Drawing.Color.White; + this.submitScoreBtn.Location = new System.Drawing.Point(394, 212); + this.submitScoreBtn.Name = "submitScoreBtn"; + this.submitScoreBtn.Size = new System.Drawing.Size(304, 29); + this.submitScoreBtn.TabIndex = 2; + this.submitScoreBtn.Text = "Опубликовать"; + this.submitScoreBtn.UseVisualStyleBackColor = false; + this.submitScoreBtn.Click += new System.EventHandler(this.submitScoreBtn_Click); + // + // cpuNameLabel + // + this.cpuNameLabel.AutoSize = true; + this.cpuNameLabel.Font = new System.Drawing.Font("Microsoft JhengHei UI Light", 11F); + this.cpuNameLabel.ForeColor = System.Drawing.Color.White; + this.cpuNameLabel.Location = new System.Drawing.Point(390, 9); + this.cpuNameLabel.Name = "cpuNameLabel"; + this.cpuNameLabel.Size = new System.Drawing.Size(137, 19); + this.cpuNameLabel.TabIndex = 3; + this.cpuNameLabel.Text = "AMD Ryzen 5 2600"; + this.cpuNameLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // threadCountLabel + // + this.threadCountLabel.AutoSize = true; + this.threadCountLabel.Font = new System.Drawing.Font("Microsoft JhengHei UI Light", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.threadCountLabel.ForeColor = System.Drawing.Color.White; + this.threadCountLabel.Location = new System.Drawing.Point(390, 28); + this.threadCountLabel.Name = "threadCountLabel"; + this.threadCountLabel.Size = new System.Drawing.Size(93, 20); + this.threadCountLabel.TabIndex = 3; + this.threadCountLabel.Text = "12 Потоков"; + this.threadCountLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // versionLabel2 + // + this.versionLabel2.AutoSize = true; + this.versionLabel2.Font = new System.Drawing.Font("Microsoft JhengHei UI Light", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.versionLabel2.ForeColor = System.Drawing.Color.White; + this.versionLabel2.Location = new System.Drawing.Point(390, 48); + this.versionLabel2.Name = "versionLabel2"; + this.versionLabel2.Size = new System.Drawing.Size(93, 20); + this.versionLabel2.TabIndex = 3; + this.versionLabel2.Text = "v.0.5.0 beta"; + this.versionLabel2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Font = new System.Drawing.Font("Microsoft JhengHei UI Light", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label4.ForeColor = System.Drawing.Color.White; + this.label4.Location = new System.Drawing.Point(390, 151); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(84, 20); + this.label4.TabIndex = 3; + this.label4.Text = "Скорость:"; + this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // speedLabel + // + this.speedLabel.AutoSize = true; + this.speedLabel.Font = new System.Drawing.Font("Microsoft JhengHei UI Light", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.speedLabel.ForeColor = System.Drawing.Color.White; + this.speedLabel.Location = new System.Drawing.Point(390, 171); + this.speedLabel.Name = "speedLabel"; + this.speedLabel.Size = new System.Drawing.Size(45, 20); + this.speedLabel.TabIndex = 3; + this.speedLabel.Text = "0 к/с"; + this.speedLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // flowLayoutPanel1 + // + this.flowLayoutPanel1.AutoScroll = true; + this.flowLayoutPanel1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(26)))), ((int)(((byte)(26)))), ((int)(((byte)(26))))); + this.flowLayoutPanel1.Controls.Add(this.panel1); + this.flowLayoutPanel1.Controls.Add(this.panel2); + this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Left; + this.flowLayoutPanel1.FlowDirection = System.Windows.Forms.FlowDirection.TopDown; + this.flowLayoutPanel1.ForeColor = System.Drawing.Color.White; + this.flowLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.flowLayoutPanel1.Name = "flowLayoutPanel1"; + this.flowLayoutPanel1.Padding = new System.Windows.Forms.Padding(10); + this.flowLayoutPanel1.Size = new System.Drawing.Size(384, 321); + this.flowLayoutPanel1.TabIndex = 4; + this.flowLayoutPanel1.WrapContents = false; + // + // panel1 + // + this.panel1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(151)))), ((int)(((byte)(10)))), ((int)(((byte)(27))))); + this.panel1.Controls.Add(this.label7); + this.panel1.Controls.Add(this.label6); + this.panel1.Location = new System.Drawing.Point(10, 10); + this.panel1.Margin = new System.Windows.Forms.Padding(0, 0, 0, 5); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(350, 35); + this.panel1.TabIndex = 0; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Font = new System.Drawing.Font("Microsoft JhengHei UI Light", 8F); + this.label7.ForeColor = System.Drawing.Color.White; + this.label7.Location = new System.Drawing.Point(3, 18); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(128, 14); + this.label7.TabIndex = 3; + this.label7.Text = "1021779 к/с (v.0.5.0 beta)"; + this.label7.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Font = new System.Drawing.Font("Microsoft JhengHei UI Light", 8F); + this.label6.ForeColor = System.Drawing.Color.White; + this.label6.Location = new System.Drawing.Point(3, 3); + this.label6.Margin = new System.Windows.Forms.Padding(0); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(260, 14); + this.label6.TabIndex = 3; + this.label6.Text = "AMD Ryzen 5 2600 Six-Core Processor (12 Threads)"; + this.label6.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // panel2 + // + this.panel2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(125)))), ((int)(((byte)(195))))); + this.panel2.Controls.Add(this.label1); + this.panel2.Controls.Add(this.label2); + this.panel2.Location = new System.Drawing.Point(10, 50); + this.panel2.Margin = new System.Windows.Forms.Padding(0, 0, 0, 5); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(350, 35); + this.panel2.TabIndex = 1; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("Microsoft JhengHei UI Light", 8F); + this.label1.ForeColor = System.Drawing.Color.White; + this.label1.Location = new System.Drawing.Point(3, 18); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(126, 14); + this.label1.TabIndex = 3; + this.label1.Text = "934030 к/с (v.0.5.0 beta)"; + this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Font = new System.Drawing.Font("Microsoft JhengHei UI Light", 8F); + this.label2.ForeColor = System.Drawing.Color.White; + this.label2.Location = new System.Drawing.Point(3, 3); + this.label2.Margin = new System.Windows.Forms.Padding(0); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(289, 14); + this.label2.TabIndex = 3; + this.label2.Text = "Intel(R) Core(TM) i5-7300HQ CPU @ 2.50GHz (4 Threads)"; + this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // Updater + // + this.Updater.Enabled = true; + this.Updater.Tick += new System.EventHandler(this.Updater_Tick); + // + // customProgressBar1 + // + this.customProgressBar1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(37)))), ((int)(((byte)(37)))), ((int)(((byte)(37))))); + this.customProgressBar1.ForeColor = System.Drawing.Color.White; + this.customProgressBar1.Location = new System.Drawing.Point(394, 289); + this.customProgressBar1.Margin = new System.Windows.Forms.Padding(0); + this.customProgressBar1.Maximum = 184756; + this.customProgressBar1.Minimum = 0; + this.customProgressBar1.Name = "customProgressBar1"; + this.customProgressBar1.ProgressColor = System.Drawing.Color.Green; + this.customProgressBar1.ProgressFont = new System.Drawing.Font("Microsoft JhengHei UI", 11.25F, System.Drawing.FontStyle.Bold); + this.customProgressBar1.Size = new System.Drawing.Size(304, 24); + this.customProgressBar1.TabIndex = 0; + this.customProgressBar1.Value = 0F; + // + // panel4 + // + this.panel4.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(31)))), ((int)(((byte)(31)))), ((int)(((byte)(31))))); + this.panel4.Controls.Add(this.versionLabel2); + this.panel4.Controls.Add(this.threadCountLabel); + this.panel4.Controls.Add(this.cpuNameLabel); + this.panel4.Controls.Add(this.startBenchmarkBtn); + this.panel4.Controls.Add(this.customProgressBar1); + this.panel4.Controls.Add(this.submitScoreBtn); + this.panel4.Controls.Add(this.flowLayoutPanel1); + this.panel4.Controls.Add(this.label4); + this.panel4.Controls.Add(this.speedLabel); + this.panel4.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel4.Location = new System.Drawing.Point(0, 40); + this.panel4.Name = "panel4"; + this.panel4.Size = new System.Drawing.Size(704, 321); + this.panel4.TabIndex = 6; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.BackColor = System.Drawing.Color.Transparent; + this.label8.Font = new System.Drawing.Font("Microsoft JhengHei Light", 22F); + this.label8.ForeColor = System.Drawing.Color.White; + this.label8.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label8.Location = new System.Drawing.Point(1, 0); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(154, 38); + this.label8.TabIndex = 0; + this.label8.Text = "Бенчмарк"; + this.label8.MouseDown += new System.Windows.Forms.MouseEventHandler(this.DragWindowMouseDown); + // + // closeBtn + // + this.closeBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.closeBtn.BackColor = System.Drawing.Color.Transparent; + this.closeBtn.FlatAppearance.BorderSize = 0; + this.closeBtn.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50))))); + this.closeBtn.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Black; + this.closeBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.closeBtn.Font = new System.Drawing.Font("Microsoft JhengHei Light", 16F); + this.closeBtn.ForeColor = System.Drawing.Color.White; + this.closeBtn.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.closeBtn.Location = new System.Drawing.Point(664, 0); + this.closeBtn.Name = "closeBtn"; + this.closeBtn.Size = new System.Drawing.Size(40, 40); + this.closeBtn.TabIndex = 3; + this.closeBtn.Text = "X"; + this.closeBtn.UseVisualStyleBackColor = false; + this.closeBtn.Click += new System.EventHandler(this.closeBtn_Click); + // + // panel3 + // + this.panel3.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(37)))), ((int)(((byte)(37)))), ((int)(((byte)(37))))); + this.panel3.Controls.Add(this.closeBtn); + this.panel3.Controls.Add(this.label8); + this.panel3.Dock = System.Windows.Forms.DockStyle.Top; + this.panel3.Location = new System.Drawing.Point(0, 0); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(704, 40); + this.panel3.TabIndex = 5; + this.panel3.MouseDown += new System.Windows.Forms.MouseEventHandler(this.DragWindowMouseDown); + // + // Benchmark + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(37)))), ((int)(((byte)(37)))), ((int)(((byte)(37))))); + this.ClientSize = new System.Drawing.Size(704, 361); + this.Controls.Add(this.panel4); + this.Controls.Add(this.panel3); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "Benchmark"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Бенчмарк"; + this.flowLayoutPanel1.ResumeLayout(false); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + this.panel4.ResumeLayout(false); + this.panel4.PerformLayout(); + this.panel3.ResumeLayout(false); + this.panel3.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private CustomProgressBar customProgressBar1; + private System.Windows.Forms.Button startBenchmarkBtn; + private System.Windows.Forms.Button submitScoreBtn; + private System.Windows.Forms.Label cpuNameLabel; + private System.Windows.Forms.Label threadCountLabel; + private System.Windows.Forms.Label versionLabel2; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label speedLabel; + private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1; + private System.Windows.Forms.Timer Updater; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Panel panel4; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Button closeBtn; + private System.Windows.Forms.Panel panel3; + } +} \ No newline at end of file diff --git a/FloatToolGUI/Benchmark.cs b/FloatToolGUI/Benchmark.cs new file mode 100644 index 0000000..b78bc3f --- /dev/null +++ b/FloatToolGUI/Benchmark.cs @@ -0,0 +1,352 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Diagnostics; +using System.Drawing; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Management; +using System.Net; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace FloatToolGUI +{ + public partial class Benchmark : Form + { + private static bool NextCombination(IList num, int n, int k) + { + bool finished; + var changed = finished = false; + if (k <= 0) return false; + for (var i = k - 1; !finished && !changed; i--) + { + if (num[i] < n - 1 - (k - 1) + i) + { + num[i]++; + if (i < k - 1) + for (var j = i + 1; j < k; j++) + num[j] = num[j - 1] + 1; + changed = true; + } + finished = i == 0; + } + return changed; + } + + private static IEnumerable Combinations(IEnumerable elements, int k, int start, int skip) + { + var elem = elements.ToArray(); + var size = elem.Length; + if (k > size) yield break; + var numbers = new int[k]; + for (var i = 0; i < k; i++) + numbers[i] = i; + int step = 0; + do + { + if ((step + start) % skip == 0) + yield return numbers.Select(n => elem[n]); + step++; + } while (NextCombination(numbers, size, k)); + } + + public enum SearchMode + { + Less, + Equal, + Greater + } + SearchMode CurrentSearchMode = SearchMode.Equal; + + public static string setprecission(double number, int figures) + { + int e = 0; + + while (number >= 10.0) + { + e += 1; + number /= 10; + } + + while (number < 1.0) + { + e -= 1; + number *= 10; + } + + figures--; + + number = (float)Math.Round(number, figures); + + figures += 0 - e; + while (e > 0) + { + number *= 10; + e -= 1; + } + + while (e < 0) + { + number /= 10; + e += 1; + } + + if (figures < 0) + { + figures = 0; + } + + return number.ToString($"f{figures}"); + } + static public decimal craft(double[] ingridients, float minFloat, float maxFloat) + { + decimal avgFloat = 0; + foreach (double f in ingridients) + { + avgFloat += (decimal)f; + } + avgFloat /= 10; + return ((decimal)(maxFloat - minFloat) * avgFloat) + (decimal)minFloat; + } + static public string craftF(double[] ingridients, float minFloat, float maxFloat) + { + float avgFloat = 0; + float[] arrInput = new float[10]; + for (int i = 0; i < 10; i++) + { + arrInput[i] = Convert.ToSingle(ingridients[i]); + } + foreach (float f in arrInput) + { + avgFloat += Convert.ToSingle(f); + } + avgFloat /= 10; + return setprecission(((maxFloat - minFloat) * avgFloat) + minFloat, 10); + } + + public void parseCraft(double[] inputs, List outputs, string want) + { + decimal wantFloat; + decimal.TryParse(want, System.Globalization.NumberStyles.Any, CultureInfo.InvariantCulture, out wantFloat); + + foreach (var item in outputs) + { + decimal flotOrigin = Math.Round(craft(inputs.ToArray(), item.MinFloat, item.MaxFloat), 14); + string flot = craftF(inputs, item.MinFloat, item.MaxFloat); + + if ( + ((flotOrigin.ToString(CultureInfo.InvariantCulture).StartsWith(want)) && CurrentSearchMode == SearchMode.Equal) || + ((flotOrigin < wantFloat) && CurrentSearchMode == SearchMode.Less) || + ((flotOrigin > wantFloat) && CurrentSearchMode == SearchMode.Greater) + ) + { + return; + } + } + } + + public void secndThread(List craftList, string wanted, double[] pool, int start, int skip) + { + foreach (IEnumerable pair in Combinations(pool, 10, start, skip)) + { + parseCraft(pair.ToArray(), craftList, wanted); + currComb++; + } + } + + private void runCycle() + { + Console.WriteLine("Thread loaded!"); + } + + List t2 = new List(); + int currComb; + Thread thread1; + + private void StartCalculation() + { + currComb = 0; + List outcomes = new List(); + outcomes.Add(new Skin("AK-47 | Safari Mesh", 0.06f, 0.8f, Quality.Industrial)); + + Invoke((MethodInvoker)(() => + { + customProgressBar1.Value = 0; + } + )); + + double[] pool = { + 0.246938750147820, 0.196652039885521, 0.154839321970940, + 0.333326697349548, 0.163415759801865, 0.291821509599686, + 0.374309629201889, 0.378754675388336, 0.231419935822487, + 0.311867892742157, 0.374067693948746, 0.377068012952805, + 0.244467452168465, 0.355135351419449, 0.352264583110809, + 0.227853879332542, 0.340960860252380, 0.375657349824905, + 0.157685652375221, 0.217334255576134 + }; + + Stopwatch timer = Stopwatch.StartNew(); + + var threads = Environment.ProcessorCount; + try + { + for (int i = 0; i < threads; i++) + { + Thread newThread = new Thread(() => secndThread(outcomes, "1", pool, i, threads)); + newThread.Start(); + t2.Add(newThread); + } + } + catch (Exception ex) + { + Console.WriteLine(ex.Message); + } + + while (true) + { + bool okey = true; + foreach (Thread t in t2) + { + if (t.IsAlive) + { + okey = false; + break; + } + } + if (okey) break; + } + + timer.Stop(); + TimeSpan timespan = timer.Elapsed; + + Invoke((MethodInvoker)(() => + { + submitScoreBtn.Enabled = true; + speedLabel.Text = $"{Math.Round(currComb / timespan.TotalSeconds)} к/с"; + currComb = 184756; + thread1.Abort(); + } + )); + } + + public Benchmark(string version) + { + InitializeComponent(); + versionLabel2.Text = version; + threadCountLabel.Text = $"{Environment.ProcessorCount} Threads"; + ManagementObjectSearcher mos = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_Processor"); + foreach (ManagementObject mo in mos.Get()) + cpuNameLabel.Text = mo["Name"].ToString().Trim(); + + thread1 = new Thread(runCycle); + LoadStats(); + } + + private void startBenchmarkBtn_Click(object sender, EventArgs e) + { + thread1.Abort(); + thread1 = new Thread(StartCalculation); + thread1.Start(); + } + + private void Updater_Tick(object sender, EventArgs e) + { + customProgressBar1.Value = currComb; + } + + string uri = "https://prevterapi.000webhostapp.com/"; + + private void AddCpuToList(string cpu, string speed, string ver) + { + Color backColor = cpu.Contains("AMD") ? Color.FromArgb(157, 0, 20) : (cpu.Contains("Intel") ? Color.FromArgb(0, 125, 195) : Color.FromArgb(56, 56, 56)); + Color foreColor = Color.White; + + var tmpPanel = new Panel + { + BackColor = backColor, + Size = new Size(350, 35), + Margin = new Padding(0,0,0,5) + }; + tmpPanel.Controls.Add(new Label + { + Location = new Point(3,3), + Font = new Font("Microsoft JhengHei UI Light", 8f), + Text = cpu, + AutoSize = true, + ForeColor = foreColor + }); + tmpPanel.Controls.Add(new Label + { + Location = new Point(3, 18), + Font = new Font("Microsoft JhengHei UI Light", 8f), + Text = $"{speed} к/с ({ver})", + AutoSize = true, + ForeColor = foreColor + }); + flowLayoutPanel1.Controls.Add(tmpPanel); + } + + private void LoadStats() + { + flowLayoutPanel1.Controls.Clear(); + WebRequest request = WebRequest.Create($"{uri}getBenchmarks.php"); + request.Credentials = CredentialCache.DefaultCredentials; + WebResponse response = request.GetResponse(); + + using (Stream dataStream = response.GetResponseStream()) + { + StreamReader reader = new StreamReader(dataStream); + string responseFromServer = reader.ReadToEnd(); + Console.WriteLine(responseFromServer); + if(responseFromServer.Contains('|')) + { + foreach (var cpu in responseFromServer.Remove(responseFromServer.Length - 1).Split('&')) + { + var items = cpu.Split('|'); + AddCpuToList(items[0], items[1], items[2]); + } + } + } + response.Close(); + } + + private void submitScoreBtn_Click(object sender, EventArgs e) + { + submitScoreBtn.Enabled = false; + HttpWebRequest req = (HttpWebRequest)WebRequest.Create($"{uri}addBenchmark.php?cpu={cpuNameLabel.Text} ({threadCountLabel.Text})&speed={speedLabel.Text.Split(' ')[0]}"); + req.UserAgent = $"FloatTool/{versionLabel2.Text}"; + HttpWebResponse res = (HttpWebResponse)req.GetResponse(); + res.Close(); + MessageBox.Show("Ваш результат был принят."); + } + + private void closeBtn_Click(object sender, EventArgs e) + { + Close(); + } + + public const int WM_NCLBUTTONDOWN = 0xA1; + public const int HT_CAPTION = 0x2; + + [System.Runtime.InteropServices.DllImport("user32.dll")] + public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam); + [System.Runtime.InteropServices.DllImport("user32.dll")] + public static extern bool ReleaseCapture(); + + + private void DragWindowMouseDown(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Left) + { + ReleaseCapture(); + SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0); + } + } + } +} diff --git a/FloatToolGUI/Benchmark.resx b/FloatToolGUI/Benchmark.resx new file mode 100644 index 0000000..5aa4a44 --- /dev/null +++ b/FloatToolGUI/Benchmark.resx @@ -0,0 +1,370 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + 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 + + + \ No newline at end of file diff --git a/FloatToolGUI/CustomProgressBar.Designer.cs b/FloatToolGUI/CustomProgressBar.Designer.cs deleted file mode 100644 index 00393e5..0000000 --- a/FloatToolGUI/CustomProgressBar.Designer.cs +++ /dev/null @@ -1,46 +0,0 @@ -namespace FloatToolGUI -{ - partial class CustomProgressBar - { - /// - /// Обязательная переменная конструктора. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Освободить все используемые ресурсы. - /// - /// истинно, если управляемый ресурс должен быть удален; иначе ложно. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Код, автоматически созданный конструктором компонентов - - /// - /// Требуемый метод для поддержки конструктора — не изменяйте - /// содержимое этого метода с помощью редактора кода. - /// - private void InitializeComponent() - { - this.SuspendLayout(); - // - // CustomProgressBar - // - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; - this.Margin = new System.Windows.Forms.Padding(0); - this.Name = "CustomProgressBar"; - this.Size = new System.Drawing.Size(306, 24); - this.Paint += new System.Windows.Forms.PaintEventHandler(this.CustomProgressBar_Paint); - this.ResumeLayout(false); - - } - - #endregion - } -} diff --git a/FloatToolGUI/CustomProgressBar.cs b/FloatToolGUI/CustomProgressBar.cs deleted file mode 100644 index 13921b2..0000000 --- a/FloatToolGUI/CustomProgressBar.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; - -namespace FloatToolGUI -{ - public partial class CustomProgressBar : UserControl - { - private int minimum = 0; - private int maximum = 100; - private float progressValue = 0; - private Color progressColor = Color.Green; - private Font progressFont = new Font("Microsoft JhengHei UI", 11.25f, FontStyle.Bold); - - /// - /// Цвет заливки прогресс-бара - /// - public Color ProgressColor - { - get { return progressColor; } - set { progressColor = value; Invalidate(); } - } - - /// - /// Шрифт процентов - /// - public Font ProgressFont - { - get { return progressFont; } - set { progressFont = value; Invalidate(); } - } - - /// - /// Текущее значение прогресс-бара - /// - public float Value - { - get { return progressValue; } - set { progressValue = value; Invalidate(); } - } - - /// - /// Минимальное значение прогресс-бара - /// - public int Minimum - { - get { return minimum; } - set { minimum = value; Invalidate(); } - } - - /// - /// Максимальное значение прогресс-бара - /// - public int Maximum - { - get { return maximum; } - set { maximum = value; Invalidate(); } - } - - public CustomProgressBar() - { - InitializeComponent(); - } - - private void CustomProgressBar_Paint(object sender, PaintEventArgs e) - { - float fill = (Value - Minimum) / (Maximum - Minimum); - Brush brush = new SolidBrush(ProgressColor); - e.Graphics.FillRectangle(brush, new RectangleF(0, 0, Width * fill, Height)); - - using (ProgressFont) - { - Rectangle rect2 = new Rectangle(150, 10, 130, 140); - TextFormatFlags flags = TextFormatFlags.HorizontalCenter | - TextFormatFlags.VerticalCenter | TextFormatFlags.WordBreak; - TextRenderer.DrawText(e.Graphics, $"{Math.Floor(fill * 100)}%", ProgressFont, new Rectangle(0, 0, Width, Height), ForeColor, flags); - } - } - } -} diff --git a/FloatToolGUI/FloatToolGUI.csproj b/FloatToolGUI/FloatToolGUI.csproj index 5f41963..81ab64a 100644 --- a/FloatToolGUI/FloatToolGUI.csproj +++ b/FloatToolGUI/FloatToolGUI.csproj @@ -88,6 +88,7 @@ + @@ -101,18 +102,24 @@ - + Form - - About.cs + + Benchmark.cs - + UserControl - + CustomProgressBar.cs + + UserControl + + + CustomToggleSwitch.cs + Form @@ -121,13 +128,24 @@ + + + Form + + + SettingsForm.cs + - - About.cs + + + Benchmark.cs - + CustomProgressBar.cs + + CustomToggleSwitch.cs + Main.cs @@ -147,6 +165,11 @@ Resources.resx True + + + + SettingsForm.cs + SettingsSingleFileGenerator @@ -162,17 +185,19 @@ - - - - - - - + + + + + + + + + + - @@ -186,5 +211,6 @@ false + \ No newline at end of file diff --git a/FloatToolGUI/Main.Designer.cs b/FloatToolGUI/Main.Designer.cs index a2ddbf9..bd2761f 100644 --- a/FloatToolGUI/Main.Designer.cs +++ b/FloatToolGUI/Main.Designer.cs @@ -59,11 +59,8 @@ private void InitializeComponent() this.panel10 = new System.Windows.Forms.Panel(); this.panel7 = new System.Windows.Forms.Panel(); this.panel9 = new System.Windows.Forms.Panel(); - this.darkModeSwitchBtn = new System.Windows.Forms.Button(); - this.helpBtn = new System.Windows.Forms.Button(); - this.helpContextMenu = new System.Windows.Forms.ContextMenuStrip(this.components); - this.openWebsiteButton = new System.Windows.Forms.ToolStripMenuItem(); - this.openAboutBox = new System.Windows.Forms.ToolStripMenuItem(); + this.benchmarkButton = new System.Windows.Forms.Button(); + this.settingsButton = new System.Windows.Forms.Button(); this.MaximizeButton = new System.Windows.Forms.Button(); this.minimizeBtn = new System.Windows.Forms.Button(); this.closeBtn = new System.Windows.Forms.Button(); @@ -71,20 +68,25 @@ private void InitializeComponent() this.button4 = new System.Windows.Forms.Button(); this.button3 = new System.Windows.Forms.Button(); this.panel3 = new System.Windows.Forms.Panel(); - this.label9 = new System.Windows.Forms.Label(); + this.versionLabel = new System.Windows.Forms.Label(); this.label8 = new System.Windows.Forms.Label(); this.panel6 = new System.Windows.Forms.Panel(); - this.stattrackCheckBox = new System.Windows.Forms.CheckBox(); + this.stattrackCheckBox = new FloatToolGUI.CustomControls.CustomToggleSwitch(); this.checkPossibilityBtn = new System.Windows.Forms.Button(); this.label3 = new System.Windows.Forms.Label(); + this.outcomeSelectorComboBox = new System.Windows.Forms.ComboBox(); this.weaponQualityBox = new System.Windows.Forms.ComboBox(); + this.label12 = new System.Windows.Forms.Label(); this.label1 = new System.Windows.Forms.Label(); this.label4 = new System.Windows.Forms.Label(); + this.weaponTypeBox = new System.Windows.Forms.ComboBox(); + this.label11 = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label(); this.fullSkinName = new System.Windows.Forms.TextBox(); this.weaponSkinBox = new System.Windows.Forms.ComboBox(); this.panel5 = new System.Windows.Forms.Panel(); this.panel16 = new System.Windows.Forms.Panel(); + this.downloadProgressBar = new FloatToolGUI.CustomProgressBar(); this.searchmodeGreater_btn = new System.Windows.Forms.Button(); this.searchmodeEqual_btn = new System.Windows.Forms.Button(); this.searchmodeLess_btn = new System.Windows.Forms.Button(); @@ -104,23 +106,15 @@ private void InitializeComponent() this.gpuSearch_btn = new System.Windows.Forms.Button(); this.label10 = new System.Windows.Forms.Label(); this.threadCountInput = new System.Windows.Forms.NumericUpDown(); - this.multithreadCheckBox = new System.Windows.Forms.CheckBox(); this.panel2 = new System.Windows.Forms.Panel(); this.panel4 = new System.Windows.Forms.Panel(); this.WorkStatusUpdater = new System.Windows.Forms.Timer(this.components); - this.openGithubButton = new System.Windows.Forms.ToolStripMenuItem(); - this.soundBtnSwitch = new System.Windows.Forms.Button(); - this.outcomeSelectorComboBox = new System.Windows.Forms.ComboBox(); - this.label11 = new System.Windows.Forms.Label(); - this.weaponTypeBox = new System.Windows.Forms.ComboBox(); - this.downloadProgressBar = new FloatToolGUI.CustomProgressBar(); this.panel1.SuspendLayout(); this.panel8.SuspendLayout(); this.panel13.SuspendLayout(); this.panel11.SuspendLayout(); this.panel7.SuspendLayout(); this.panel9.SuspendLayout(); - this.helpContextMenu.SuspendLayout(); this.panel3.SuspendLayout(); this.panel6.SuspendLayout(); this.panel5.SuspendLayout(); @@ -203,9 +197,8 @@ private void InitializeComponent() // panel9 // this.panel9.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(37)))), ((int)(((byte)(37)))), ((int)(((byte)(37))))); - this.panel9.Controls.Add(this.darkModeSwitchBtn); - this.panel9.Controls.Add(this.helpBtn); - this.panel9.Controls.Add(this.soundBtnSwitch); + this.panel9.Controls.Add(this.benchmarkButton); + this.panel9.Controls.Add(this.settingsButton); this.panel9.Controls.Add(this.MaximizeButton); this.panel9.Controls.Add(this.minimizeBtn); this.panel9.Controls.Add(this.closeBtn); @@ -213,51 +206,31 @@ private void InitializeComponent() this.panel9.Name = "panel9"; this.panel9.MouseDown += new System.Windows.Forms.MouseEventHandler(this.panel9_MouseDown); // - // darkModeSwitchBtn - // - resources.ApplyResources(this.darkModeSwitchBtn, "darkModeSwitchBtn"); - this.darkModeSwitchBtn.BackColor = System.Drawing.Color.Transparent; - this.darkModeSwitchBtn.FlatAppearance.BorderSize = 0; - this.darkModeSwitchBtn.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50))))); - this.darkModeSwitchBtn.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Black; - this.darkModeSwitchBtn.ForeColor = System.Drawing.Color.White; - this.darkModeSwitchBtn.Name = "darkModeSwitchBtn"; - this.darkModeSwitchBtn.UseVisualStyleBackColor = false; - this.darkModeSwitchBtn.Click += new System.EventHandler(this.DarkModeSwitchButton_Click); - // - // helpBtn - // - resources.ApplyResources(this.helpBtn, "helpBtn"); - this.helpBtn.BackColor = System.Drawing.Color.Transparent; - this.helpBtn.ContextMenuStrip = this.helpContextMenu; - this.helpBtn.FlatAppearance.BorderSize = 0; - this.helpBtn.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50))))); - this.helpBtn.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Black; - this.helpBtn.ForeColor = System.Drawing.Color.White; - this.helpBtn.Name = "helpBtn"; - this.helpBtn.UseVisualStyleBackColor = false; - this.helpBtn.Click += new System.EventHandler(this.OpenWikiButton_Click); - // - // helpContextMenu - // - this.helpContextMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.openWebsiteButton, - this.openAboutBox, - this.openGithubButton}); - this.helpContextMenu.Name = "contextMenuStrip1"; - resources.ApplyResources(this.helpContextMenu, "helpContextMenu"); - // - // openWebsiteButton - // - this.openWebsiteButton.Name = "openWebsiteButton"; - resources.ApplyResources(this.openWebsiteButton, "openWebsiteButton"); - this.openWebsiteButton.Click += new System.EventHandler(this.OpenWebsiteButton_Click); - // - // openAboutBox - // - this.openAboutBox.Name = "openAboutBox"; - resources.ApplyResources(this.openAboutBox, "openAboutBox"); - this.openAboutBox.Click += new System.EventHandler(this.OpenAboutButton_Click); + // benchmarkButton + // + this.benchmarkButton.BackColor = System.Drawing.Color.Transparent; + this.benchmarkButton.BackgroundImage = global::FloatToolGUI.Properties.Resources.benchmarkWhite; + resources.ApplyResources(this.benchmarkButton, "benchmarkButton"); + this.benchmarkButton.FlatAppearance.BorderSize = 0; + this.benchmarkButton.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50))))); + this.benchmarkButton.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Black; + this.benchmarkButton.ForeColor = System.Drawing.Color.White; + this.benchmarkButton.Name = "benchmarkButton"; + this.benchmarkButton.UseVisualStyleBackColor = false; + this.benchmarkButton.Click += new System.EventHandler(this.benchmarkButton_Click); + // + // settingsButton + // + this.settingsButton.BackColor = System.Drawing.Color.Transparent; + this.settingsButton.BackgroundImage = global::FloatToolGUI.Properties.Resources.gearWhite; + resources.ApplyResources(this.settingsButton, "settingsButton"); + this.settingsButton.FlatAppearance.BorderSize = 0; + this.settingsButton.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50))))); + this.settingsButton.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Black; + this.settingsButton.ForeColor = System.Drawing.Color.White; + this.settingsButton.Name = "settingsButton"; + this.settingsButton.UseVisualStyleBackColor = false; + this.settingsButton.Click += new System.EventHandler(this.settingsButton_Click); // // MaximizeButton // @@ -325,17 +298,17 @@ private void InitializeComponent() // panel3 // this.panel3.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(37)))), ((int)(((byte)(37)))), ((int)(((byte)(37))))); - this.panel3.Controls.Add(this.label9); + this.panel3.Controls.Add(this.versionLabel); this.panel3.Controls.Add(this.label8); resources.ApplyResources(this.panel3, "panel3"); this.panel3.Name = "panel3"; this.panel3.MouseDown += new System.Windows.Forms.MouseEventHandler(this.panel3_MouseDown); // - // label9 + // versionLabel // - resources.ApplyResources(this.label9, "label9"); - this.label9.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(150)))), ((int)(((byte)(150)))), ((int)(((byte)(150))))); - this.label9.Name = "label9"; + resources.ApplyResources(this.versionLabel, "versionLabel"); + this.versionLabel.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(150)))), ((int)(((byte)(150)))), ((int)(((byte)(150))))); + this.versionLabel.Name = "versionLabel"; // // label8 // @@ -352,6 +325,7 @@ private void InitializeComponent() this.panel6.Controls.Add(this.label3); this.panel6.Controls.Add(this.outcomeSelectorComboBox); this.panel6.Controls.Add(this.weaponQualityBox); + this.panel6.Controls.Add(this.label12); this.panel6.Controls.Add(this.label1); this.panel6.Controls.Add(this.label4); this.panel6.Controls.Add(this.weaponTypeBox); @@ -364,11 +338,13 @@ private void InitializeComponent() // // stattrackCheckBox // - resources.ApplyResources(this.stattrackCheckBox, "stattrackCheckBox"); + this.stattrackCheckBox.Checked = false; this.stattrackCheckBox.ForeColor = System.Drawing.Color.White; + resources.ApplyResources(this.stattrackCheckBox, "stattrackCheckBox"); this.stattrackCheckBox.Name = "stattrackCheckBox"; - this.stattrackCheckBox.UseVisualStyleBackColor = true; - this.stattrackCheckBox.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged); + this.stattrackCheckBox.TurnedOffColor = System.Drawing.Color.FromArgb(((int)(((byte)(56)))), ((int)(((byte)(56)))), ((int)(((byte)(56))))); + this.stattrackCheckBox.TurnedOnColor = System.Drawing.Color.Green; + this.stattrackCheckBox.OnToggled += new System.EventHandler(this.checkBox1_CheckedChanged); // // checkPossibilityBtn // @@ -388,6 +364,19 @@ private void InitializeComponent() this.label3.ForeColor = System.Drawing.Color.White; this.label3.Name = "label3"; // + // outcomeSelectorComboBox + // + resources.ApplyResources(this.outcomeSelectorComboBox, "outcomeSelectorComboBox"); + this.outcomeSelectorComboBox.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.outcomeSelectorComboBox.Cursor = System.Windows.Forms.Cursors.Hand; + this.outcomeSelectorComboBox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(150)))), ((int)(((byte)(150)))), ((int)(((byte)(150))))); + this.outcomeSelectorComboBox.FormattingEnabled = true; + this.outcomeSelectorComboBox.Items.AddRange(new object[] { + resources.GetString("outcomeSelectorComboBox.Items"), + resources.GetString("outcomeSelectorComboBox.Items1"), + resources.GetString("outcomeSelectorComboBox.Items2")}); + this.outcomeSelectorComboBox.Name = "outcomeSelectorComboBox"; + // // weaponQualityBox // resources.ApplyResources(this.weaponQualityBox, "weaponQualityBox"); @@ -404,6 +393,12 @@ private void InitializeComponent() this.weaponQualityBox.Name = "weaponQualityBox"; this.weaponQualityBox.SelectedIndexChanged += new System.EventHandler(this.comboBox3_SelectedIndexChanged); // + // label12 + // + resources.ApplyResources(this.label12, "label12"); + this.label12.ForeColor = System.Drawing.Color.White; + this.label12.Name = "label12"; + // // label1 // resources.ApplyResources(this.label1, "label1"); @@ -416,6 +411,57 @@ private void InitializeComponent() this.label4.ForeColor = System.Drawing.Color.White; this.label4.Name = "label4"; // + // weaponTypeBox + // + resources.ApplyResources(this.weaponTypeBox, "weaponTypeBox"); + this.weaponTypeBox.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.weaponTypeBox.Cursor = System.Windows.Forms.Cursors.Hand; + this.weaponTypeBox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(150)))), ((int)(((byte)(150)))), ((int)(((byte)(150))))); + this.weaponTypeBox.FormattingEnabled = true; + this.weaponTypeBox.Items.AddRange(new object[] { + resources.GetString("weaponTypeBox.Items"), + resources.GetString("weaponTypeBox.Items1"), + resources.GetString("weaponTypeBox.Items2"), + resources.GetString("weaponTypeBox.Items3"), + resources.GetString("weaponTypeBox.Items4"), + resources.GetString("weaponTypeBox.Items5"), + resources.GetString("weaponTypeBox.Items6"), + resources.GetString("weaponTypeBox.Items7"), + resources.GetString("weaponTypeBox.Items8"), + resources.GetString("weaponTypeBox.Items9"), + resources.GetString("weaponTypeBox.Items10"), + resources.GetString("weaponTypeBox.Items11"), + resources.GetString("weaponTypeBox.Items12"), + resources.GetString("weaponTypeBox.Items13"), + resources.GetString("weaponTypeBox.Items14"), + resources.GetString("weaponTypeBox.Items15"), + resources.GetString("weaponTypeBox.Items16"), + resources.GetString("weaponTypeBox.Items17"), + resources.GetString("weaponTypeBox.Items18"), + resources.GetString("weaponTypeBox.Items19"), + resources.GetString("weaponTypeBox.Items20"), + resources.GetString("weaponTypeBox.Items21"), + resources.GetString("weaponTypeBox.Items22"), + resources.GetString("weaponTypeBox.Items23"), + resources.GetString("weaponTypeBox.Items24"), + resources.GetString("weaponTypeBox.Items25"), + resources.GetString("weaponTypeBox.Items26"), + resources.GetString("weaponTypeBox.Items27"), + resources.GetString("weaponTypeBox.Items28"), + resources.GetString("weaponTypeBox.Items29"), + resources.GetString("weaponTypeBox.Items30"), + resources.GetString("weaponTypeBox.Items31"), + resources.GetString("weaponTypeBox.Items32"), + resources.GetString("weaponTypeBox.Items33")}); + this.weaponTypeBox.Name = "weaponTypeBox"; + this.weaponTypeBox.SelectedIndexChanged += new System.EventHandler(this.comboBox1_SelectedIndexChanged); + // + // label11 + // + resources.ApplyResources(this.label11, "label11"); + this.label11.ForeColor = System.Drawing.Color.White; + this.label11.Name = "label11"; + // // label2 // resources.ApplyResources(this.label2, "label2"); @@ -468,6 +514,18 @@ private void InitializeComponent() resources.ApplyResources(this.panel16, "panel16"); this.panel16.Name = "panel16"; // + // downloadProgressBar + // + resources.ApplyResources(this.downloadProgressBar, "downloadProgressBar"); + this.downloadProgressBar.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.downloadProgressBar.ForeColor = System.Drawing.Color.White; + this.downloadProgressBar.Maximum = 100; + this.downloadProgressBar.Minimum = 0; + this.downloadProgressBar.Name = "downloadProgressBar"; + this.downloadProgressBar.ProgressColor = System.Drawing.Color.Green; + this.downloadProgressBar.ProgressFont = new System.Drawing.Font("Microsoft JhengHei UI", 11.25F, System.Drawing.FontStyle.Bold); + this.downloadProgressBar.Value = 0F; + // // searchmodeGreater_btn // resources.ApplyResources(this.searchmodeGreater_btn, "searchmodeGreater_btn"); @@ -603,7 +661,6 @@ private void InitializeComponent() this.panel15.Controls.Add(this.gpuSearch_btn); this.panel15.Controls.Add(this.label10); this.panel15.Controls.Add(this.threadCountInput); - this.panel15.Controls.Add(this.multithreadCheckBox); resources.ApplyResources(this.panel15, "panel15"); this.panel15.Name = "panel15"; // @@ -647,7 +704,7 @@ private void InitializeComponent() 0, 0}); this.threadCountInput.Minimum = new decimal(new int[] { - 2, + 1, 0, 0, 0}); @@ -658,16 +715,6 @@ private void InitializeComponent() 0, 0}); // - // multithreadCheckBox - // - resources.ApplyResources(this.multithreadCheckBox, "multithreadCheckBox"); - this.multithreadCheckBox.Checked = true; - this.multithreadCheckBox.CheckState = System.Windows.Forms.CheckState.Checked; - this.multithreadCheckBox.ForeColor = System.Drawing.Color.White; - this.multithreadCheckBox.Name = "multithreadCheckBox"; - this.multithreadCheckBox.UseVisualStyleBackColor = true; - this.multithreadCheckBox.CheckedChanged += new System.EventHandler(this.MultithreadSwitched); - // // panel2 // this.panel2.Controls.Add(this.panel5); @@ -688,102 +735,6 @@ private void InitializeComponent() this.WorkStatusUpdater.Interval = 250; this.WorkStatusUpdater.Tick += new System.EventHandler(this.timer2_Tick); // - // openGithubButton - // - this.openGithubButton.Image = global::FloatToolGUI.Properties.Resources.github; - this.openGithubButton.Name = "openGithubButton"; - resources.ApplyResources(this.openGithubButton, "openGithubButton"); - this.openGithubButton.Click += new System.EventHandler(this.OpenGithubButton_Click); - // - // soundBtnSwitch - // - this.soundBtnSwitch.BackColor = System.Drawing.Color.Transparent; - this.soundBtnSwitch.FlatAppearance.BorderSize = 0; - this.soundBtnSwitch.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50))))); - this.soundBtnSwitch.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Black; - resources.ApplyResources(this.soundBtnSwitch, "soundBtnSwitch"); - this.soundBtnSwitch.ForeColor = System.Drawing.Color.White; - this.soundBtnSwitch.Image = global::FloatToolGUI.Properties.Resources.unmutedWhite; - this.soundBtnSwitch.Name = "soundBtnSwitch"; - this.soundBtnSwitch.UseVisualStyleBackColor = false; - this.soundBtnSwitch.Click += new System.EventHandler(this.SoundSwitchButton_Click); - // - // outcomeSelectorComboBox - // - resources.ApplyResources(this.outcomeSelectorComboBox, "outcomeSelectorComboBox"); - this.outcomeSelectorComboBox.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); - this.outcomeSelectorComboBox.Cursor = System.Windows.Forms.Cursors.Hand; - this.outcomeSelectorComboBox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(150)))), ((int)(((byte)(150)))), ((int)(((byte)(150))))); - this.outcomeSelectorComboBox.FormattingEnabled = true; - this.outcomeSelectorComboBox.Items.AddRange(new object[] { - resources.GetString("outcomeSelectorComboBox.Items"), - resources.GetString("outcomeSelectorComboBox.Items1"), - resources.GetString("outcomeSelectorComboBox.Items2")}); - this.outcomeSelectorComboBox.Name = "outcomeSelectorComboBox"; - // - // label11 - // - resources.ApplyResources(this.label11, "label11"); - this.label11.ForeColor = System.Drawing.Color.White; - this.label11.Name = "label11"; - // - // weaponTypeBox - // - resources.ApplyResources(this.weaponTypeBox, "weaponTypeBox"); - this.weaponTypeBox.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); - this.weaponTypeBox.Cursor = System.Windows.Forms.Cursors.Hand; - this.weaponTypeBox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(150)))), ((int)(((byte)(150)))), ((int)(((byte)(150))))); - this.weaponTypeBox.FormattingEnabled = true; - this.weaponTypeBox.Items.AddRange(new object[] { - resources.GetString("weaponTypeBox.Items"), - resources.GetString("weaponTypeBox.Items1"), - resources.GetString("weaponTypeBox.Items2"), - resources.GetString("weaponTypeBox.Items3"), - resources.GetString("weaponTypeBox.Items4"), - resources.GetString("weaponTypeBox.Items5"), - resources.GetString("weaponTypeBox.Items6"), - resources.GetString("weaponTypeBox.Items7"), - resources.GetString("weaponTypeBox.Items8"), - resources.GetString("weaponTypeBox.Items9"), - resources.GetString("weaponTypeBox.Items10"), - resources.GetString("weaponTypeBox.Items11"), - resources.GetString("weaponTypeBox.Items12"), - resources.GetString("weaponTypeBox.Items13"), - resources.GetString("weaponTypeBox.Items14"), - resources.GetString("weaponTypeBox.Items15"), - resources.GetString("weaponTypeBox.Items16"), - resources.GetString("weaponTypeBox.Items17"), - resources.GetString("weaponTypeBox.Items18"), - resources.GetString("weaponTypeBox.Items19"), - resources.GetString("weaponTypeBox.Items20"), - resources.GetString("weaponTypeBox.Items21"), - resources.GetString("weaponTypeBox.Items22"), - resources.GetString("weaponTypeBox.Items23"), - resources.GetString("weaponTypeBox.Items24"), - resources.GetString("weaponTypeBox.Items25"), - resources.GetString("weaponTypeBox.Items26"), - resources.GetString("weaponTypeBox.Items27"), - resources.GetString("weaponTypeBox.Items28"), - resources.GetString("weaponTypeBox.Items29"), - resources.GetString("weaponTypeBox.Items30"), - resources.GetString("weaponTypeBox.Items31"), - resources.GetString("weaponTypeBox.Items32"), - resources.GetString("weaponTypeBox.Items33")}); - this.weaponTypeBox.Name = "weaponTypeBox"; - this.weaponTypeBox.SelectedIndexChanged += new System.EventHandler(this.comboBox1_SelectedIndexChanged); - // - // downloadProgressBar - // - resources.ApplyResources(this.downloadProgressBar, "downloadProgressBar"); - this.downloadProgressBar.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); - this.downloadProgressBar.ForeColor = System.Drawing.Color.White; - this.downloadProgressBar.Maximum = 100; - this.downloadProgressBar.Minimum = 0; - this.downloadProgressBar.Name = "downloadProgressBar"; - this.downloadProgressBar.ProgressColor = System.Drawing.Color.Green; - this.downloadProgressBar.ProgressFont = new System.Drawing.Font("Microsoft JhengHei UI", 11.25F, System.Drawing.FontStyle.Bold); - this.downloadProgressBar.Value = 0F; - // // FloatTool // this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; @@ -804,7 +755,6 @@ private void InitializeComponent() this.panel11.PerformLayout(); this.panel7.ResumeLayout(false); this.panel9.ResumeLayout(false); - this.helpContextMenu.ResumeLayout(false); this.panel3.ResumeLayout(false); this.panel3.PerformLayout(); this.panel6.ResumeLayout(false); @@ -831,7 +781,6 @@ private void InitializeComponent() private System.Windows.Forms.Panel panel8; private System.Windows.Forms.Panel panel3; private System.Windows.Forms.Panel panel6; - private System.Windows.Forms.CheckBox stattrackCheckBox; private System.Windows.Forms.Button checkPossibilityBtn; private System.Windows.Forms.Label label3; private System.Windows.Forms.ComboBox weaponQualityBox; @@ -864,16 +813,10 @@ private void InitializeComponent() private System.Windows.Forms.Panel panel11; private System.Windows.Forms.Panel panel12; private System.Windows.Forms.Panel panel10; - private System.Windows.Forms.Button soundBtnSwitch; - private System.Windows.Forms.Button helpBtn; - private System.Windows.Forms.ContextMenuStrip helpContextMenu; - private System.Windows.Forms.ToolStripMenuItem openGithubButton; - private System.Windows.Forms.ToolStripMenuItem openAboutBox; - private System.Windows.Forms.Label label9; - private System.Windows.Forms.Button darkModeSwitchBtn; + private System.Windows.Forms.Button settingsButton; + private System.Windows.Forms.Label versionLabel; private System.Windows.Forms.Panel panel16; private System.Windows.Forms.Panel panel15; - private System.Windows.Forms.CheckBox multithreadCheckBox; private System.Windows.Forms.Label label10; private System.Windows.Forms.NumericUpDown threadCountInput; private System.Windows.Forms.Button gpuSearch_btn; @@ -883,12 +826,14 @@ private void InitializeComponent() private System.Windows.Forms.Button searchmodeGreater_btn; private System.Windows.Forms.Button searchmodeEqual_btn; private System.Windows.Forms.Button searchmodeLess_btn; - private System.Windows.Forms.ToolStripMenuItem openWebsiteButton; private System.Windows.Forms.Label searchModeLabel; private System.Windows.Forms.Button MaximizeButton; private CustomProgressBar downloadProgressBar; private System.Windows.Forms.ComboBox outcomeSelectorComboBox; private System.Windows.Forms.Label label11; + private CustomControls.CustomToggleSwitch stattrackCheckBox; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.Button benchmarkButton; } } diff --git a/FloatToolGUI/Main.cs b/FloatToolGUI/Main.cs index 5f6364c..3b99cc1 100644 --- a/FloatToolGUI/Main.cs +++ b/FloatToolGUI/Main.cs @@ -1,4 +1,6 @@ using DiscordRPC; +using FloatToolGUI.Resources; +using static FloatToolGUI.Utils; using Newtonsoft.Json; using System; using System.Collections; @@ -11,14 +13,14 @@ using System.Linq; using System.Media; using System.Net; -using System.Numerics; using System.Reflection; using System.Runtime.InteropServices; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; - +using Microsoft.Win32; +using System.Numerics; namespace FloatToolGUI { @@ -36,9 +38,8 @@ public partial class FloatTool : Form { Thread thread1; public bool muteSound = false; - + string newLine; public StringBuilder ConsoleBuffer; - public enum SearchMode { Less, @@ -161,7 +162,7 @@ static public string getSkinData(string name) } - public void parseCraft(double[] inputs, List outputs, string want, bool wasSort, bool asc) + public void parseCraft(double[] inputs, List outputs, string want) { //List results = new List(); decimal wantFloat; @@ -180,10 +181,10 @@ public void parseCraft(double[] inputs, List outputs, string want, bool wa { this.Invoke((MethodInvoker)(() => { - ConsoleBuffer.Append($"[{DateTime.Now.ToString("HH:mm:ss")}] Коомбинация найдена!{Environment.NewLine}"); - ConsoleBuffer.Append($"Возможный флоат: {flotOrigin}{Environment.NewLine}"); - ConsoleBuffer.Append($"Проверочный флоат: {flot}{Environment.NewLine}"); - ConsoleBuffer.Append("Список флоатов: ["); + ConsoleBuffer.Append($"[{DateTime.Now.ToString("HH:mm:ss")}] {strings.CombinationFound}{newLine}"); + ConsoleBuffer.Append($"{strings.PossibleFloat}: {flotOrigin}{newLine}"); + ConsoleBuffer.Append($"{strings.TestFloat}: {flot}{newLine}"); + ConsoleBuffer.Append($"{strings.FloatList}: "); if (!muteSound) { //play sound @@ -200,22 +201,13 @@ public void parseCraft(double[] inputs, List outputs, string want, bool wa LargeImageText = "FloatTool" } }); - for (int i = 0; i < 10; i++) - { - ConsoleBuffer.Append(Math.Round(inputs[i], 14).ToString().Replace(",",".")); - if (i != 9) - { - ConsoleBuffer.Append(", "); - } - else - { - ConsoleBuffer.Append("]" + Environment.NewLine + "=====================================" + Environment.NewLine); - } - } + List floatStrings = new List(); + foreach (var fl in inputs) floatStrings.Add(Math.Round(fl, 14).ToString().Replace(",", ".")); + ConsoleBuffer.Append($"[{String.Join(", ", floatStrings)}]{newLine}====================================={newLine}"); } )); - //textBox2.AppendText( "IEEE754: " + flot + Environment.NewLine; + //textBox2.AppendText( "IEEE754: " + flot + newLine; return; } } @@ -233,10 +225,8 @@ public void SwitchEnabled() stattrackCheckBox.Enabled = !stattrackCheckBox.Enabled; sortCheckBox.Enabled = !sortCheckBox.Enabled; ascendingCheckBox.Enabled = !ascendingCheckBox.Enabled; - multithreadCheckBox.Enabled = !multithreadCheckBox.Enabled; outcomeSelectorComboBox.Enabled = !outcomeSelectorComboBox.Enabled; - if (threadCountInput.Enabled && !multithreadCheckBox.Enabled) - threadCountInput.Enabled = false; + threadCountInput.Enabled = !threadCountInput.Enabled; } public void UpdateOutcomes() @@ -287,14 +277,49 @@ public void updateSearchStr() fullSkinName.Text = search; UpdateOutcomes(); } + + RegistryKey registryData; public FloatTool() { InitializeComponent(); SetStyle(ControlStyles.ResizeRedraw | ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.DoubleBuffer, true); ConsoleBuffer = new StringBuilder(); + newLine = Environment.NewLine; + registryData = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\FloatTool"); + if (registryData == null) + { + registryData = Registry.CurrentUser.CreateSubKey(@"SOFTWARE\FloatTool"); + registryData.SetValue("darkMode", true); + registryData.SetValue("sound", true); + registryData.SetValue("updateCheck", true); + registryData.SetValue("bufferSpeed", 250); + registryData.Close(); + } + else + { + ChangeTheme(Convert.ToBoolean(registryData.GetValue("darkMode"))); + muteSound = !Convert.ToBoolean(registryData.GetValue("sound")); + WorkStatusUpdater.Interval = (int)registryData.GetValue("bufferSpeed"); + if (Convert.ToBoolean(registryData.GetValue("updateCheck"))) + { + string ver = CheckUpdates(); + if (ver != versionLabel.Text) + { + DialogResult result = MessageBox.Show( + $"Доступна версия {ver}! Хотите открыть страницу загрузки?", + "Обновление", + MessageBoxButtons.YesNo, + MessageBoxIcon.Information, + MessageBoxDefaultButton.Button1, + MessageBoxOptions.DefaultDesktopOnly); + + if (result == DialogResult.Yes) + System.Diagnostics.Process.Start("https://github.com/Nemeshio/FloatTool-GUI/releases/latest"); + } + } + } } public DiscordRpcClient client; - private bool darkTheme = true; private void Form1_Load(object sender, EventArgs e) { @@ -315,8 +340,9 @@ private void Form1_Load(object sender, EventArgs e) } updateSearchStr(); - darkModeSwitchBtn.Text = darkTheme ? "🌙" : "☀"; - client = new DiscordRpcClient("824349399688937543"); + //dev = 824349399688937543 + //main = 734042978246721537 + client = new DiscordRpcClient("734042978246721537"); //Subscribe to events client.OnReady += (sender2, e2) => @@ -440,7 +466,7 @@ public void secndThread(List craftList, string wanted, double[] pool, int { foreach (IEnumerable pair in Combinations(pool, 10, start, skip)) { - parseCraft(pair.ToArray(), craftList, wanted, sortCheckBox.Checked, ascendingCheckBox.Checked); + parseCraft(pair.ToArray(), craftList, wanted); currComb++; //Console.WriteLine(currComb); } @@ -476,8 +502,8 @@ private void StartCalculation() currComb = 0; this.Invoke((MethodInvoker)(() => { - outputConsoleBox.Text = "Добро пожаловать в FloatTool!" + Environment.NewLine + "Инструмент для создания флоатов при помощи крафтов CS:GO" + Environment.NewLine; - outputConsoleBox.AppendText( "Время начала процесса: " + DateTime.Now.ToString("HH:mm:ss tt") + Environment.NewLine); + outputConsoleBox.Text = "Добро пожаловать в FloatTool!" + newLine + "Инструмент для создания флоатов при помощи крафтов CS:GO" + newLine; + outputConsoleBox.AppendText( "Время начала процесса: " + DateTime.Now.ToString("HH:mm:ss tt") + newLine); startBtn.Text = "Стоп"; fullSkinName.SelectionStart = fullSkinName.Text.Length; outputConsoleBox.ScrollToCaret(); @@ -493,7 +519,7 @@ private void StartCalculation() this.Invoke((MethodInvoker)(() => { - outputConsoleBox.AppendText( "Загрузка скинов с торговой площадки..." + Environment.NewLine); + outputConsoleBox.AppendText( "Загрузка скинов с торговой площадки..." + newLine); downloadProgressBar.Maximum = int.Parse(count); downloadProgressBar.Value = 0; fullSkinName.SelectionStart = fullSkinName.Text.Length; @@ -510,7 +536,7 @@ private void StartCalculation() dynamic r = JsonConvert.DeserializeObject(json); this.Invoke((MethodInvoker)(() => { - outputConsoleBox.AppendText( "Получение флоатов..." + Environment.NewLine); + outputConsoleBox.AppendText( "Получение флоатов..." + newLine); fullSkinName.SelectionStart = fullSkinName.Text.Length; outputConsoleBox.ScrollToCaret(); } @@ -563,13 +589,13 @@ private void StartCalculation() //} this.Invoke((MethodInvoker)(() => { - outputConsoleBox.AppendText( "Поиск ауткамов..." + Environment.NewLine); + outputConsoleBox.AppendText( "Поиск ауткамов..." + newLine); outputConsoleBox.SelectionStart = fullSkinName.Text.Length; /*string line = "["; foreach(var i in floats) line += $"{i.ToString().Replace(',','.')}, "; line = line.Remove(line.Length - 2); - textBox2.AppendText("Список флоатов:" + Environment.NewLine + line + "]" + Environment.NewLine);*/ + textBox2.AppendText("Список флоатов:" + newLine + line + "]" + newLine);*/ outputConsoleBox.ScrollToCaret(); } @@ -611,7 +637,7 @@ private void StartCalculation() this.Invoke((MethodInvoker)(() => { - outputConsoleBox.AppendText( "Ауткамы найдены! Начинаю подбор..." + Environment.NewLine + "Выбрано для поиска:" + Environment.NewLine + String.Join(Environment.NewLine, outcomes) + Environment.NewLine + Environment.NewLine); + outputConsoleBox.AppendText( "Ауткамы найдены! Начинаю подбор..." + newLine + "Выбрано для поиска:" + newLine + String.Join(newLine, outcomes) + newLine + newLine); fullSkinName.SelectionStart = fullSkinName.Text.Length; outputConsoleBox.ScrollToCaret(); downloadProgressBar.Value = 0; @@ -623,28 +649,24 @@ private void StartCalculation() Searching = true; - var threads = 1; - if (multithreadCheckBox.Checked) + int threads = (int)threadCountInput.Value; + try { - threads = (int)threadCountInput.Value; - try - { - for (int i = 1; i < threads; i++) - { - Thread newThread = new Thread(() => secndThread(outcomes, wanted, pool, i, threads)); - newThread.Start(); - t2.Add(newThread); - } - } - catch (Exception ex) + for (int i = 1; i < threads; i++) { - Console.WriteLine(ex.Message); + Thread newThread = new Thread(() => secndThread(outcomes, wanted, pool, i, threads)); + newThread.Start(); + t2.Add(newThread); } } + catch (Exception ex) + { + Console.WriteLine(ex.Message); + } foreach (IEnumerable pair in Combinations(pool, 10, 0, threads)) { - parseCraft(pair.ToArray(), outcomes, wanted, sortCheckBox.Checked, ascendingCheckBox.Checked); + parseCraft(pair.ToArray(), outcomes, wanted); currComb++; } Console.WriteLine("Next group"); @@ -668,7 +690,7 @@ private void StartCalculation() this.Invoke((MethodInvoker)(() => { - outputConsoleBox.AppendText( "Программа завершила проверку всех комбинаций!" + Environment.NewLine); + outputConsoleBox.AppendText( "Программа завершила проверку всех комбинаций!" + newLine); fullSkinName.SelectionStart = fullSkinName.Text.Length; outputConsoleBox.ScrollToCaret(); thread1.Abort(); @@ -750,9 +772,9 @@ private void button1_Click(object sender, EventArgs e) foreach (var skinRange in GroupOutcomes(craftList)) { - ConsoleBuffer.Append($"{Environment.NewLine}--------Length: {skinRange.Count}--------"); + ConsoleBuffer.Append($"{newLine}--------Length: {skinRange.Count}--------"); foreach (var skinObj in skinRange) - ConsoleBuffer.Append(Environment.NewLine+skinObj.ToString()); + ConsoleBuffer.Append(newLine+skinObj.ToString()); } */ #endregion @@ -927,7 +949,7 @@ protected override void WndProc(ref Message message) } } - private void panel3_MouseDown(object sender, MouseEventArgs e) + private void panel3_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { @@ -945,66 +967,32 @@ private void panel9_MouseDown(object sender, MouseEventArgs e) } } - void updateMuteIcon() - { - if (!muteSound) - { - if (darkTheme) - { - soundBtnSwitch.Image = FloatToolGUI.Properties.Resources.unmutedWhite; - } - else - { - soundBtnSwitch.Image = FloatToolGUI.Properties.Resources.unmutedBlack; - } - } - else - { - if (darkTheme) - { - soundBtnSwitch.Image = FloatToolGUI.Properties.Resources.mutedWhite; - } - else - { - soundBtnSwitch.Image = FloatToolGUI.Properties.Resources.mutedBlack; - } - } - } - - private void SoundSwitchButton_Click(object sender, EventArgs e) + private void settingsButton_Click(object sender, EventArgs e) { - if (muteSound) + SettingsForm settings = new SettingsForm(); + settings.ShowDialog(); + registryData = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\FloatTool"); + if (registryData == null) { - muteSound = false; - SoundPlayer player = new SoundPlayer(Properties.Resources.notification); - player.Play(); + registryData = Registry.CurrentUser.CreateSubKey(@"SOFTWARE\FloatTool"); + registryData.SetValue("darkMode", true); + registryData.SetValue("sound", true); + registryData.SetValue("updateCheck", true); + registryData.SetValue("bufferSpeed", 250); + registryData.Close(); } else { - muteSound = true; + ChangeTheme(Convert.ToBoolean(registryData.GetValue("darkMode"))); + muteSound = !Convert.ToBoolean(registryData.GetValue("sound")); + WorkStatusUpdater.Interval = (int)registryData.GetValue("bufferSpeed"); } - updateMuteIcon(); - } - - private void OpenWikiButton_Click(object sender, EventArgs e) - { - System.Diagnostics.Process.Start("https://nemeshio.github.io/FloatTool-GUI/"); //https://github.com/Nemeshio/FloatTool-GUI/wiki/%D0%93%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F - } - - private void OpenGithubButton_Click(object sender, EventArgs e) - { - System.Diagnostics.Process.Start("https://github.com/Nemeshio/FloatTool-GUI/"); } - private void OpenWebsiteButton_Click(object sender, EventArgs e) + private void benchmarkButton_Click(object sender, EventArgs e) { - System.Diagnostics.Process.Start("https://nemeshio.github.io/FloatTool-GUI/"); - } - - private void OpenAboutButton_Click(object sender, EventArgs e) - { - About aboutForm = new About(); - aboutForm.Show(); + Benchmark benchmark = new Benchmark(versionLabel.Text); + benchmark.ShowDialog(); } void ChangeTheme(bool dark) @@ -1028,6 +1016,8 @@ void ChangeTheme(bool dark) label6.ForeColor = Color.FromArgb(255, 255, 255); label7.ForeColor = Color.FromArgb(255, 255, 255); label8.ForeColor = Color.FromArgb(255, 255, 255); + label11.ForeColor = Color.FromArgb(255, 255, 255); + label12.ForeColor = Color.FromArgb(255, 255, 255); panel5.BackColor = Color.FromArgb(44, 44, 44); panel6.BackColor = Color.FromArgb(44, 44, 44); @@ -1039,21 +1029,25 @@ void ChangeTheme(bool dark) weaponQualityBox.BackColor = Color.FromArgb(32, 32, 32); weaponQualityBox.ForeColor = Color.FromArgb(150, 150, 150); + outcomeSelectorComboBox.BackColor = Color.FromArgb(32, 32, 32); + outcomeSelectorComboBox.ForeColor = Color.FromArgb(150, 150, 150); + + stattrackCheckBox.TurnedOffColor = Color.FromArgb(56, 56, 56); + stattrackCheckBox.TurnedOnColor = Color.Green; + minimizeBtn.ForeColor = Color.FromArgb(255, 255, 255); - updateMuteIcon(); closeBtn.ForeColor = Color.FromArgb(255, 255, 255); MaximizeButton.ForeColor = Color.FromArgb(255, 255, 255); - helpBtn.ForeColor = Color.FromArgb(255, 255, 255); - darkModeSwitchBtn.ForeColor = Color.FromArgb(255, 255, 255); + settingsButton.BackgroundImage = Properties.Resources.gearWhite; + benchmarkButton.BackgroundImage = Properties.Resources.benchmarkWhite; minimizeBtn.FlatAppearance.MouseOverBackColor = Color.FromArgb(0, 0, 0); - soundBtnSwitch.FlatAppearance.MouseOverBackColor = Color.FromArgb(0, 0, 0); + settingsButton.FlatAppearance.MouseOverBackColor = Color.FromArgb(0, 0, 0); closeBtn.FlatAppearance.MouseOverBackColor = Color.FromArgb(0, 0, 0); MaximizeButton.FlatAppearance.MouseOverBackColor = Color.FromArgb(0, 0, 0); - helpBtn.FlatAppearance.MouseOverBackColor = Color.FromArgb(0, 0, 0); - darkModeSwitchBtn.FlatAppearance.MouseOverBackColor = Color.FromArgb(0, 0, 0); + settingsButton.FlatAppearance.MouseOverBackColor = Color.FromArgb(0, 0, 0); + benchmarkButton.FlatAppearance.MouseOverBackColor = Color.FromArgb(0, 0, 0); - stattrackCheckBox.ForeColor = Color.FromArgb(255, 255, 255); sortCheckBox.ForeColor = Color.FromArgb(255, 255, 255); ascendingCheckBox.ForeColor = Color.FromArgb(255, 255, 255); @@ -1075,7 +1069,6 @@ void ChangeTheme(bool dark) skipValueInput.BackColor = Color.FromArgb(32, 32, 32); skipValueInput.ForeColor = Color.FromArgb(150, 150, 150); - multithreadCheckBox.ForeColor = Color.FromName("White"); label10.ForeColor = Color.FromName("White"); threadCountInput.BackColor = Color.FromArgb(32, 32, 32); threadCountInput.ForeColor = Color.FromArgb(150, 150, 150); @@ -1117,6 +1110,8 @@ void ChangeTheme(bool dark) label6.ForeColor = Color.FromArgb(0, 0, 0); label7.ForeColor = Color.FromArgb(0, 0, 0); label8.ForeColor = Color.FromArgb(0, 0, 0); + label11.ForeColor = Color.FromArgb(0, 0, 0); + label12.ForeColor = Color.FromArgb(0, 0, 0); panel5.BackColor = Color.FromArgb(222, 222, 222); panel6.BackColor = Color.FromArgb(222, 222, 222); @@ -1127,22 +1122,25 @@ void ChangeTheme(bool dark) weaponSkinBox.ForeColor = Color.FromArgb(10, 10, 10); weaponQualityBox.BackColor = Color.FromArgb(255, 255, 255); weaponQualityBox.ForeColor = Color.FromArgb(10, 10, 10); + outcomeSelectorComboBox.BackColor = Color.FromArgb(255, 255, 255); + outcomeSelectorComboBox.ForeColor = Color.FromArgb(10, 10, 10); + + stattrackCheckBox.TurnedOffColor = Color.FromArgb(200, 200, 200); + stattrackCheckBox.TurnedOnColor = Color.LimeGreen; minimizeBtn.ForeColor = Color.FromArgb(0, 0, 0); - updateMuteIcon(); closeBtn.ForeColor = Color.FromArgb(0, 0, 0); MaximizeButton.ForeColor = Color.FromArgb(0, 0, 0); - helpBtn.ForeColor = Color.FromArgb(0, 0, 0); - darkModeSwitchBtn.ForeColor = Color.FromArgb(0, 0, 0); + settingsButton.BackgroundImage = Properties.Resources.gearBlack; + benchmarkButton.BackgroundImage = Properties.Resources.benchmarkBlack; minimizeBtn.FlatAppearance.MouseOverBackColor = Color.FromArgb(230, 230, 230); - soundBtnSwitch.FlatAppearance.MouseOverBackColor = Color.FromArgb(230, 230, 230); + settingsButton.FlatAppearance.MouseOverBackColor = Color.FromArgb(230, 230, 230); closeBtn.FlatAppearance.MouseOverBackColor = Color.FromArgb(230, 230, 230); MaximizeButton.FlatAppearance.MouseOverBackColor = Color.FromArgb(230, 230, 230); - helpBtn.FlatAppearance.MouseOverBackColor = Color.FromArgb(230, 230, 230); - darkModeSwitchBtn.FlatAppearance.MouseOverBackColor = Color.FromArgb(230, 230, 230); + settingsButton.FlatAppearance.MouseOverBackColor = Color.FromArgb(230, 230, 230); + benchmarkButton.FlatAppearance.MouseOverBackColor = Color.FromArgb(230, 230, 230); - stattrackCheckBox.ForeColor = Color.FromArgb(0, 0, 0); sortCheckBox.ForeColor = Color.FromArgb(0, 0, 0); ascendingCheckBox.ForeColor = Color.FromArgb(0, 0, 0); @@ -1164,7 +1162,6 @@ void ChangeTheme(bool dark) skipValueInput.BackColor = Color.FromArgb(255, 255, 255); skipValueInput.ForeColor = Color.FromArgb(10, 10, 10); - multithreadCheckBox.ForeColor = Color.FromName("Black"); label10.ForeColor = Color.FromName("Black"); threadCountInput.BackColor = Color.FromArgb(255, 255, 255); threadCountInput.ForeColor = Color.FromArgb(10, 10, 10); @@ -1189,18 +1186,6 @@ void ChangeTheme(bool dark) } } - private void DarkModeSwitchButton_Click(object sender, EventArgs e) - { - darkTheme = !darkTheme; - ChangeTheme(darkTheme); - darkModeSwitchBtn.Text = darkTheme ? "🌙" : "☀"; - } - - private void MultithreadSwitched(object sender, EventArgs e) - { - threadCountInput.Enabled = multithreadCheckBox.Checked; - } - private void gpuSearch_btn_Click(object sender, EventArgs e) { double[] floats = { diff --git a/FloatToolGUI/Main.resx b/FloatToolGUI/Main.resx index c9278cb..2d9767d 100644 --- a/FloatToolGUI/Main.resx +++ b/FloatToolGUI/Main.resx @@ -283,152 +283,83 @@ 0 - - Top, Right + + Zoom - + Flat - - Microsoft JhengHei Light, 16pt + + Microsoft JhengHei Light, 40px - + NoControl - - 269, 1 + + 40, 0 - - 1, 1, 1, 1 + + 0, 0, 0, 0 - - 40, 40 + + Yes - - 5 + + 40, 40 - - L + + 3 - - darkModeSwitchBtn + + benchmarkButton - + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + panel9 - + 0 - - Top, Right - - - 219, 17 - - - 149, 22 - - - Сайт - - - 149, 22 - - - О программе - - - Информация о разработчике - - - 149, 22 + + Zoom - - GitHub - - - Ссылка на репозиторий проекта - - - 150, 70 - - - helpContextMenu - - - System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + Flat - - Microsoft JhengHei Light, 16pt - - - NoControl - - - 309, 1 - - - 40, 39 - - - 4 - - - ? - - - helpBtn - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel9 - - - 1 - - - Flat - - + Microsoft JhengHei Light, 40px - + NoControl - - 0, 1 + + 0, 0 - - 1, 1, 1, 1 + + 0, 0, 0, 0 - + Yes - + 40, 40 - + 3 - - soundBtnSwitch + + settingsButton - + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + panel9 - - 2 + + 1 Top, Right @@ -464,7 +395,7 @@ panel9 - 3 + 2 Top, Right @@ -500,7 +431,7 @@ panel9 - 4 + 3 Top, Right @@ -536,7 +467,7 @@ panel9 - 5 + 4 Top @@ -718,34 +649,34 @@ 0 - + True - + NoControl - - 207, 20 + + 138, 20 - - 64, 15 + + 36, 15 - + 1 - - v.0.5.0 beta + + v.0.5.1 - - label9 + + versionLabel - + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + panel3 - + 0 @@ -761,13 +692,13 @@ 5, 2 - 207, 38 + 140, 38 0 - FloatTool DEV + FloatTool label8 @@ -805,41 +736,20 @@ 2 - - None - - - True - - - Microsoft JhengHei Light, 10pt - - - NoControl - - 9, 64 - - - Yes + 79, 61 - 88, 22 + 38, 24 - 8 - - - :StatTrack - - - MiddleCenter + 2 stattrackCheckBox - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + FloatToolGUI.CustomControls.CustomToggleSwitch, FloatTool, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null panel6 @@ -938,10 +848,10 @@ * Искать всё * - 186, 61 + 203, 61 - 231, 24 + 214, 24 6 @@ -1009,6 +919,42 @@ 4 + + None + + + True + + + Microsoft JhengHei Light, 10pt + + + NoControl + + + 9, 64 + + + 70, 18 + + + 3 + + + StatTrack: + + + label12 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel6 + + + 5 + None @@ -1043,7 +989,7 @@ panel6 - 5 + 6 Bottom, Left @@ -1082,7 +1028,7 @@ panel6 - 6 + 7 None @@ -1217,7 +1163,7 @@ panel6 - 7 + 8 None @@ -1232,7 +1178,7 @@ NoControl - 108, 65 + 129, 64 68, 18 @@ -1253,7 +1199,7 @@ panel6 - 8 + 9 None @@ -1289,7 +1235,7 @@ panel6 - 9 + 10 Bottom @@ -1328,7 +1274,7 @@ panel6 - 10 + 11 None @@ -1361,7 +1307,7 @@ panel6 - 11 + 12 Top @@ -1955,10 +1901,10 @@ NoControl - 231, 37 + 261, 6 - 186, 29 + 160, 60 3 @@ -1988,7 +1934,7 @@ NoControl - 216, 10 + 9, 2 72, 18 @@ -2012,7 +1958,7 @@ 3 - 297, 9 + 87, 2 120, 21 @@ -2032,36 +1978,6 @@ 4 - - True - - - NoControl - - - 12, 8 - - - 148, 22 - - - 0 - - - Многопоточность - - - multithreadCheckBox - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel15 - - - 5 - Bottom @@ -2135,7 +2051,7 @@ $this - 2 + 1 Fill @@ -2159,10 +2075,10 @@ $this - 1 + 0 - 374, 17 + 198, 16 True @@ -2443,30 +2359,12 @@ System.Windows.Forms.Timer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - openWebsiteButton - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - openAboutBox - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - WorkStatusUpdater System.Windows.Forms.Timer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - openGithubButton - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - FloatTool diff --git a/FloatToolGUI/Properties/Resources.Designer.cs b/FloatToolGUI/Properties/Resources.Designer.cs index ff310cf..65c0a30 100644 --- a/FloatToolGUI/Properties/Resources.Designer.cs +++ b/FloatToolGUI/Properties/Resources.Designer.cs @@ -60,6 +60,46 @@ internal Resources() { } } + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap benchmarkBlack { + get { + object obj = ResourceManager.GetObject("benchmarkBlack", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap benchmarkWhite { + get { + object obj = ResourceManager.GetObject("benchmarkWhite", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap gearBlack { + get { + object obj = ResourceManager.GetObject("gearBlack", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap gearWhite { + get { + object obj = ResourceManager.GetObject("gearWhite", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Поиск локализованного ресурса типа System.Drawing.Bitmap. /// diff --git a/FloatToolGUI/Properties/Resources.resx b/FloatToolGUI/Properties/Resources.resx index 5406c82..257ea90 100644 --- a/FloatToolGUI/Properties/Resources.resx +++ b/FloatToolGUI/Properties/Resources.resx @@ -118,22 +118,34 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + ..\Resources\benchmarkBlack.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\benchmarkWhite.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\gearBlack.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\gearWhite.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + - ..\github.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\github.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\mutedBlack.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\mutedBlack.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\mutedWhite.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\mutedWhite.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\notification.wav;System.IO.MemoryStream, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - ..\unmutedBlack.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\unmutedBlack.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\unmutedWhite.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\unmutedWhite.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a \ No newline at end of file diff --git a/FloatToolGUI/Resources/benchmarkBlack.png b/FloatToolGUI/Resources/benchmarkBlack.png new file mode 100644 index 0000000000000000000000000000000000000000..9bbee409be929737daaf99b5f3d904d756863eec GIT binary patch literal 1060 zcmeAS@N?(olHy`uVBq!ia0y~yVAKI&4mO}jWo=(60|WDGPZ!6KiaBqu8Ri`^;9+po z+VQ_Wa^)nov#||FwqNskI*H{>YZ_2F0npG^`jz4Qjp}$?rZZ>GMBP^}{yzVc?(GkS zUl{~SzDJzh^Rlmrb$#V&=YPui+gB$rN;a{kaEMJ%jBse9JLlt$Du#d8qF%o)j<-B+ zA7N}53Wj_TX0nU4afd4&TF3SHJ8?XnB=vAfrb0UkoD-$j2>FJ e8fP|bkhf!$S}OS>qrf8sq{!3N&t;ucLK6VYZaf44 literal 0 HcmV?d00001 diff --git a/FloatToolGUI/Resources/benchmarkWhite.png b/FloatToolGUI/Resources/benchmarkWhite.png new file mode 100644 index 0000000000000000000000000000000000000000..bd3d5bd2c6f23b8b603104fc56d256991b3fc355 GIT binary patch literal 1351 zcmeAS@N?(olHy`uVBq!ia0y~yVAKI&4mO}jWo=(60|P6cr;B4q#hkY{4D;@Ui8x$5 zKBaN*Je@u3I~O_NJco0b~idE>f?I)|9` zX9HvT?Q)L}$)!Du+whP5V3K>@v!~w*8MdF^WRq)qHO(Ud+t|ttmhQ_Gs9W-SZca`Ql%=35exST0UZVB4Gla8ndro^>bpJj zXK~uTGiQFe*~Q0QE2%zKn{*r=4o-IupQ*W1)xljoW9Dydo96-Tg^|-@O_Rb8&ryn4 zUu10DAI)E=y50D5$-{J+R|fBNBjPyk@7ukWea9l@wO=Qcg`N+-vmx$jW!gPpcucLC zH}kuA-LZvykMHG0?3Q{aan&wp9?tvLVSCohf^4zUS}5e{t$jFL^PLxi(6 zp?1bh`?P13Y1hm@Rn|pbZa01>yvOtOHRhWB(%AGgyR&Eh9$Or9Yx&HdZ_nJ{Iq&E1 zZ|^Rp{|flMQ|I(Lsg0`>{UWb_O-qy8KJT$tUi!0_J@?C3)Nc@6v-wu^2Celi<#PSxO`t?cqTH~D0?~~r2 zdkr*xdqQX&CnF2@3wkFidL`arZx8PB>fhsdH;z3DrA789L5e(G{an^LB{Ts5wV2`% literal 0 HcmV?d00001 diff --git a/FloatToolGUI/Resources/floattool.ico b/FloatToolGUI/Resources/floattool.ico new file mode 100644 index 0000000000000000000000000000000000000000..5c5c73c76e7de040a3957d718d785a62e45a89b0 GIT binary patch literal 14506 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 literal 0 HcmV?d00001 diff --git a/FloatToolGUI/Resources/gearBlack.png b/FloatToolGUI/Resources/gearBlack.png new file mode 100644 index 0000000000000000000000000000000000000000..fb32656b5233f0b22965109cdae2354b470e2928 GIT binary patch literal 21697 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 +// Этот код создан программой. +// Исполняемая версия:4.0.30319.42000 +// +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. +// +//------------------------------------------------------------------------------ + +namespace FloatToolGUI.Resources { + using System; + + + /// + /// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д. + /// + // Этот класс создан автоматически классом StronglyTypedResourceBuilder + // с помощью такого средства, как ResGen или Visual Studio. + // Чтобы добавить или удалить член, измените файл .ResX и снова запустите ResGen + // с параметром /str или перестройте свой проект VS. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + public class strings { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal strings() { + } + + /// + /// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + public static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("FloatToolGUI.Resources.strings", typeof(strings).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Перезаписывает свойство CurrentUICulture текущего потока для всех + /// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + public static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Ищет локализованную строку, похожую на Коомбинация найдена!. + /// + public static string CombinationFound { + get { + return ResourceManager.GetString("CombinationFound", resourceCulture); + } + } + + /// + /// Ищет локализованную строку, похожую на Список флоатов. + /// + public static string FloatList { + get { + return ResourceManager.GetString("FloatList", resourceCulture); + } + } + + /// + /// Ищет локализованную строку, похожую на Возможный флоат. + /// + public static string PossibleFloat { + get { + return ResourceManager.GetString("PossibleFloat", resourceCulture); + } + } + + /// + /// Ищет локализованную строку, похожую на Проверочный флоат. + /// + public static string TestFloat { + get { + return ResourceManager.GetString("TestFloat", resourceCulture); + } + } + } +} diff --git a/FloatToolGUI/CustomProgressBar.resx b/FloatToolGUI/Resources/strings.en.resx similarity index 93% rename from FloatToolGUI/CustomProgressBar.resx rename to FloatToolGUI/Resources/strings.en.resx index 1af7de1..4f6623e 100644 --- a/FloatToolGUI/CustomProgressBar.resx +++ b/FloatToolGUI/Resources/strings.en.resx @@ -117,4 +117,16 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Combination found! + + + Float list + + + Possible float + + + Test float + \ No newline at end of file diff --git a/FloatToolGUI/Resources/strings.resx b/FloatToolGUI/Resources/strings.resx new file mode 100644 index 0000000..bab157a --- /dev/null +++ b/FloatToolGUI/Resources/strings.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Коомбинация найдена! + + + Список флоатов + + + Возможный флоат + + + Проверочный флоат + + \ No newline at end of file diff --git a/FloatToolGUI/unmutedBlack.png b/FloatToolGUI/Resources/unmutedBlack.png similarity index 100% rename from FloatToolGUI/unmutedBlack.png rename to FloatToolGUI/Resources/unmutedBlack.png diff --git a/FloatToolGUI/unmutedWhite.png b/FloatToolGUI/Resources/unmutedWhite.png similarity index 100% rename from FloatToolGUI/unmutedWhite.png rename to FloatToolGUI/Resources/unmutedWhite.png diff --git a/FloatToolGUI/SettingsForm.Designer.cs b/FloatToolGUI/SettingsForm.Designer.cs new file mode 100644 index 0000000..c3142b2 --- /dev/null +++ b/FloatToolGUI/SettingsForm.Designer.cs @@ -0,0 +1,281 @@ +namespace FloatToolGUI +{ + partial class SettingsForm + { + /// + /// 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() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SettingsForm)); + this.panel3 = new System.Windows.Forms.Panel(); + this.closeBtn = new System.Windows.Forms.Button(); + this.label8 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.saveChangesBtn = new System.Windows.Forms.Button(); + this.resetChangesBtn = new System.Windows.Forms.Button(); + this.bufferSpeedNUP = new System.Windows.Forms.NumericUpDown(); + this.label4 = new System.Windows.Forms.Label(); + this.checkUpdatesToggle = new FloatToolGUI.CustomControls.CustomToggleSwitch(); + this.soundToggle = new FloatToolGUI.CustomControls.CustomToggleSwitch(); + this.darkModeToggle = new FloatToolGUI.CustomControls.CustomToggleSwitch(); + this.panel3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.bufferSpeedNUP)).BeginInit(); + this.SuspendLayout(); + // + // panel3 + // + this.panel3.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(37)))), ((int)(((byte)(37)))), ((int)(((byte)(37))))); + this.panel3.Controls.Add(this.closeBtn); + this.panel3.Controls.Add(this.label8); + this.panel3.Dock = System.Windows.Forms.DockStyle.Top; + this.panel3.Location = new System.Drawing.Point(0, 0); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(390, 40); + this.panel3.TabIndex = 1; + this.panel3.MouseDown += new System.Windows.Forms.MouseEventHandler(this.DragWindowMouseDown); + // + // closeBtn + // + this.closeBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.closeBtn.BackColor = System.Drawing.Color.Transparent; + this.closeBtn.FlatAppearance.BorderSize = 0; + this.closeBtn.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50))))); + this.closeBtn.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Black; + this.closeBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.closeBtn.Font = new System.Drawing.Font("Microsoft JhengHei Light", 16F); + this.closeBtn.ForeColor = System.Drawing.Color.White; + this.closeBtn.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.closeBtn.Location = new System.Drawing.Point(350, 0); + this.closeBtn.Name = "closeBtn"; + this.closeBtn.Size = new System.Drawing.Size(40, 40); + this.closeBtn.TabIndex = 3; + this.closeBtn.Text = "X"; + this.closeBtn.UseVisualStyleBackColor = false; + this.closeBtn.Click += new System.EventHandler(this.CloseForm); + // + // label8 + // + this.label8.AutoSize = true; + this.label8.BackColor = System.Drawing.Color.Transparent; + this.label8.Font = new System.Drawing.Font("Microsoft JhengHei Light", 22F); + this.label8.ForeColor = System.Drawing.Color.White; + this.label8.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label8.Location = new System.Drawing.Point(1, 0); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(167, 38); + this.label8.TabIndex = 0; + this.label8.Text = "Настройки"; + this.label8.MouseDown += new System.Windows.Forms.MouseEventHandler(this.DragWindowMouseDown); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("Microsoft JhengHei Light", 14F); + this.label1.ForeColor = System.Drawing.Color.White; + this.label1.Location = new System.Drawing.Point(75, 52); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(122, 24); + this.label1.TabIndex = 3; + this.label1.Text = "Тёмная тема"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Font = new System.Drawing.Font("Microsoft JhengHei Light", 14F); + this.label2.ForeColor = System.Drawing.Color.White; + this.label2.Location = new System.Drawing.Point(75, 95); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(205, 24); + this.label2.TabIndex = 3; + this.label2.Text = "Звук при нахождении"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Font = new System.Drawing.Font("Microsoft JhengHei Light", 14F); + this.label3.ForeColor = System.Drawing.Color.White; + this.label3.Location = new System.Drawing.Point(75, 137); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(214, 24); + this.label3.TabIndex = 3; + this.label3.Text = "Проверка обновлений"; + // + // saveChangesBtn + // + this.saveChangesBtn.Anchor = System.Windows.Forms.AnchorStyles.Bottom; + this.saveChangesBtn.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(56)))), ((int)(((byte)(56)))), ((int)(((byte)(56))))); + this.saveChangesBtn.Enabled = false; + this.saveChangesBtn.FlatAppearance.BorderSize = 0; + this.saveChangesBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.saveChangesBtn.Font = new System.Drawing.Font("Microsoft JhengHei Light", 14F); + this.saveChangesBtn.ForeColor = System.Drawing.Color.White; + this.saveChangesBtn.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.saveChangesBtn.Location = new System.Drawing.Point(8, 250); + this.saveChangesBtn.Name = "saveChangesBtn"; + this.saveChangesBtn.Size = new System.Drawing.Size(185, 32); + this.saveChangesBtn.TabIndex = 4; + this.saveChangesBtn.Text = "Применить"; + this.saveChangesBtn.UseVisualStyleBackColor = false; + this.saveChangesBtn.Click += new System.EventHandler(this.saveChangesBtn_Click); + // + // resetChangesBtn + // + this.resetChangesBtn.Anchor = System.Windows.Forms.AnchorStyles.Bottom; + this.resetChangesBtn.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(56)))), ((int)(((byte)(56)))), ((int)(((byte)(56))))); + this.resetChangesBtn.FlatAppearance.BorderSize = 0; + this.resetChangesBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.resetChangesBtn.Font = new System.Drawing.Font("Microsoft JhengHei Light", 14F); + this.resetChangesBtn.ForeColor = System.Drawing.Color.White; + this.resetChangesBtn.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.resetChangesBtn.Location = new System.Drawing.Point(199, 250); + this.resetChangesBtn.Name = "resetChangesBtn"; + this.resetChangesBtn.Size = new System.Drawing.Size(185, 32); + this.resetChangesBtn.TabIndex = 4; + this.resetChangesBtn.Text = "Отмена"; + this.resetChangesBtn.UseVisualStyleBackColor = false; + this.resetChangesBtn.Click += new System.EventHandler(this.resetChangesBtn_Click); + // + // bufferSpeedNUP + // + this.bufferSpeedNUP.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(24)))), ((int)(((byte)(24)))), ((int)(((byte)(24))))); + this.bufferSpeedNUP.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.bufferSpeedNUP.Font = new System.Drawing.Font("Microsoft JhengHei Light", 14F); + this.bufferSpeedNUP.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(150)))), ((int)(((byte)(150)))), ((int)(((byte)(150))))); + this.bufferSpeedNUP.Location = new System.Drawing.Point(12, 207); + this.bufferSpeedNUP.Maximum = new decimal(new int[] { + 5000, + 0, + 0, + 0}); + this.bufferSpeedNUP.Minimum = new decimal(new int[] { + 100, + 0, + 0, + 0}); + this.bufferSpeedNUP.Name = "bufferSpeedNUP"; + this.bufferSpeedNUP.Size = new System.Drawing.Size(366, 32); + this.bufferSpeedNUP.TabIndex = 5; + this.bufferSpeedNUP.Value = new decimal(new int[] { + 250, + 0, + 0, + 0}); + this.bufferSpeedNUP.ValueChanged += new System.EventHandler(this.bufferSpeedNUP_ValueChanged); + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Font = new System.Drawing.Font("Microsoft JhengHei Light", 14F); + this.label4.ForeColor = System.Drawing.Color.White; + this.label4.Location = new System.Drawing.Point(8, 180); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(320, 24); + this.label4.TabIndex = 3; + this.label4.Text = "Скорость обновления буфера (мс)"; + // + // checkUpdatesToggle + // + this.checkUpdatesToggle.Checked = true; + this.checkUpdatesToggle.ForeColor = System.Drawing.Color.White; + this.checkUpdatesToggle.Location = new System.Drawing.Point(8, 131); + this.checkUpdatesToggle.Name = "checkUpdatesToggle"; + this.checkUpdatesToggle.Size = new System.Drawing.Size(64, 36); + this.checkUpdatesToggle.TabIndex = 2; + this.checkUpdatesToggle.TurnedOffColor = System.Drawing.Color.FromArgb(((int)(((byte)(56)))), ((int)(((byte)(56)))), ((int)(((byte)(56))))); + this.checkUpdatesToggle.TurnedOnColor = System.Drawing.Color.Green; + this.checkUpdatesToggle.OnToggled += new System.EventHandler(this.checkUpdatesToggle_OnToggled); + // + // soundToggle + // + this.soundToggle.Checked = true; + this.soundToggle.ForeColor = System.Drawing.Color.White; + this.soundToggle.Location = new System.Drawing.Point(8, 89); + this.soundToggle.Name = "soundToggle"; + this.soundToggle.Size = new System.Drawing.Size(64, 36); + this.soundToggle.TabIndex = 2; + this.soundToggle.TurnedOffColor = System.Drawing.Color.FromArgb(((int)(((byte)(56)))), ((int)(((byte)(56)))), ((int)(((byte)(56))))); + this.soundToggle.TurnedOnColor = System.Drawing.Color.Green; + this.soundToggle.OnToggled += new System.EventHandler(this.soundToggle_OnToggled); + // + // darkModeToggle + // + this.darkModeToggle.Checked = true; + this.darkModeToggle.ForeColor = System.Drawing.Color.White; + this.darkModeToggle.Location = new System.Drawing.Point(8, 46); + this.darkModeToggle.Name = "darkModeToggle"; + this.darkModeToggle.Size = new System.Drawing.Size(64, 36); + this.darkModeToggle.TabIndex = 2; + this.darkModeToggle.TurnedOffColor = System.Drawing.Color.FromArgb(((int)(((byte)(56)))), ((int)(((byte)(56)))), ((int)(((byte)(56))))); + this.darkModeToggle.TurnedOnColor = System.Drawing.Color.Green; + this.darkModeToggle.OnToggled += new System.EventHandler(this.darkModeToggle_OnToggled); + // + // SettingsForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(31)))), ((int)(((byte)(31)))), ((int)(((byte)(31))))); + this.ClientSize = new System.Drawing.Size(390, 294); + this.Controls.Add(this.bufferSpeedNUP); + this.Controls.Add(this.resetChangesBtn); + this.Controls.Add(this.saveChangesBtn); + this.Controls.Add(this.label4); + this.Controls.Add(this.label3); + this.Controls.Add(this.label2); + this.Controls.Add(this.checkUpdatesToggle); + this.Controls.Add(this.soundToggle); + this.Controls.Add(this.label1); + this.Controls.Add(this.darkModeToggle); + this.Controls.Add(this.panel3); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "SettingsForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Настройки"; + this.panel3.ResumeLayout(false); + this.panel3.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.bufferSpeedNUP)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Panel panel3; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Button closeBtn; + private CustomControls.CustomToggleSwitch darkModeToggle; + private System.Windows.Forms.Label label1; + private CustomControls.CustomToggleSwitch soundToggle; + private System.Windows.Forms.Label label2; + private CustomControls.CustomToggleSwitch checkUpdatesToggle; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Button saveChangesBtn; + private System.Windows.Forms.Button resetChangesBtn; + private System.Windows.Forms.NumericUpDown bufferSpeedNUP; + private System.Windows.Forms.Label label4; + } +} \ No newline at end of file diff --git a/FloatToolGUI/SettingsForm.cs b/FloatToolGUI/SettingsForm.cs new file mode 100644 index 0000000..4ea3f70 --- /dev/null +++ b/FloatToolGUI/SettingsForm.cs @@ -0,0 +1,128 @@ +using Microsoft.Win32; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace FloatToolGUI +{ + public partial class SettingsForm : Form + { + RegistryKey registryData; + + public SettingsForm() + { + InitializeComponent(); + registryData = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\FloatTool"); + if (registryData == null) + { + registryData = Registry.CurrentUser.CreateSubKey(@"SOFTWARE\FloatTool"); + registryData.SetValue("darkMode", true); + registryData.SetValue("sound", true); + registryData.SetValue("updateCheck", true); + registryData.SetValue("bufferSpeed", 250); + registryData.Close(); + } + else + { + darkModeToggle.Checked = Convert.ToBoolean(registryData.GetValue("darkMode")); + soundToggle.Checked = Convert.ToBoolean(registryData.GetValue("sound")); + checkUpdatesToggle.Checked = Convert.ToBoolean(registryData.GetValue("updateCheck")); + bufferSpeedNUP.Value = (int)registryData.GetValue("bufferSpeed"); + } + } + + private void CloseForm(object sender, EventArgs e) + { + Close(); + } + + public const int WM_NCLBUTTONDOWN = 0xA1; + public const int HT_CAPTION = 0x2; + + [System.Runtime.InteropServices.DllImport("user32.dll")] + public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam); + [System.Runtime.InteropServices.DllImport("user32.dll")] + public static extern bool ReleaseCapture(); + + + private void DragWindowMouseDown(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Left) + { + ReleaseCapture(); + SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0); + } + } + + private void darkModeToggle_OnToggled(object sender, EventArgs e) + { + saveChangesBtn.Enabled = true; + } + + private void soundToggle_OnToggled(object sender, EventArgs e) + { + saveChangesBtn.Enabled = true; + } + + private void checkUpdatesToggle_OnToggled(object sender, EventArgs e) + { + saveChangesBtn.Enabled = true; + } + + private void bufferSpeedNUP_ValueChanged(object sender, EventArgs e) + { + saveChangesBtn.Enabled = true; + } + + private void saveChangesBtn_Click(object sender, EventArgs e) + { + registryData = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\FloatTool", true); + if (registryData == null) + { + registryData = Registry.CurrentUser.CreateSubKey(@"SOFTWARE\FloatTool"); + registryData.SetValue("darkMode", darkModeToggle.Checked); + registryData.SetValue("sound", soundToggle.Checked); + registryData.SetValue("updateCheck", checkUpdatesToggle.Checked); + registryData.SetValue("bufferSpeed", bufferSpeedNUP.Value); + registryData.Close(); + } + else + { + registryData.SetValue("darkMode", darkModeToggle.Checked); + registryData.SetValue("sound", soundToggle.Checked); + registryData.SetValue("updateCheck", checkUpdatesToggle.Checked); + registryData.SetValue("bufferSpeed", (int)bufferSpeedNUP.Value); + registryData.Close(); + } + saveChangesBtn.Enabled = false; + } + + private void resetChangesBtn_Click(object sender, EventArgs e) + { + registryData = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\FloatTool"); + if (registryData == null) + { + registryData = Registry.CurrentUser.CreateSubKey(@"SOFTWARE\FloatTool"); + registryData.SetValue("darkMode", true); + registryData.SetValue("sound", true); + registryData.SetValue("updateCheck", true); + registryData.SetValue("bufferSpeed", 250); + registryData.Close(); + } + else + { + darkModeToggle.Checked = Convert.ToBoolean(registryData.GetValue("darkMode")); + soundToggle.Checked = Convert.ToBoolean(registryData.GetValue("sound")); + checkUpdatesToggle.Checked = Convert.ToBoolean(registryData.GetValue("updateCheck")); + bufferSpeedNUP.Value = (int)registryData.GetValue("bufferSpeed"); + } + saveChangesBtn.Enabled = false; + } + } +} diff --git a/FloatToolGUI/SettingsForm.resx b/FloatToolGUI/SettingsForm.resx new file mode 100644 index 0000000..d6bb1e0 --- /dev/null +++ b/FloatToolGUI/SettingsForm.resx @@ -0,0 +1,367 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + + + \ No newline at end of file diff --git a/FloatToolGUI/Utils.cs b/FloatToolGUI/Utils.cs new file mode 100644 index 0000000..c0473dd --- /dev/null +++ b/FloatToolGUI/Utils.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Http; +using System.Text; +using System.Threading.Tasks; +using Newtonsoft.Json; + +namespace FloatToolGUI +{ + class Utils + { + public static string CheckUpdates() + { + using (var client = new HttpClient()) + { + client.DefaultRequestHeaders.Add("User-Agent", + "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)"); + using (var response = client.GetAsync("https://api.github.com/repos/nemeshio/FloatTool-GUI/releases/latest").Result) + { + var json = response.Content.ReadAsStringAsync().Result; + + dynamic release = JsonConvert.DeserializeObject(json); + return release["tag_name"]; + } + } + } + } +}