From fc0b11170188e83b1dd03449f9a3171469daf17a Mon Sep 17 00:00:00 2001 From: Nathan Woodburn Date: Wed, 7 Jun 2023 14:47:59 +1000 Subject: [PATCH] main: Added receive page --- FireWallet/CreateForm.Designer.cs | 7 +- FireWallet/FireWallet.csproj | 1 + FireWallet/MainForm.Designer.cs | 85 ++++++++++++++++- FireWallet/MainForm.cs | 148 +++++++++++++++++++++++++----- FireWallet/NotifyForm.Designer.cs | 6 +- 5 files changed, 217 insertions(+), 30 deletions(-) diff --git a/FireWallet/CreateForm.Designer.cs b/FireWallet/CreateForm.Designer.cs index cba3b36..e196a4c 100644 --- a/FireWallet/CreateForm.Designer.cs +++ b/FireWallet/CreateForm.Designer.cs @@ -1,4 +1,9 @@ -namespace FireWallet +using Color = System.Drawing.Color; +using Point = System.Drawing.Point; +using Size = System.Drawing.Size; +using SizeF = System.Drawing.SizeF; + +namespace FireWallet { partial class CreateForm { diff --git a/FireWallet/FireWallet.csproj b/FireWallet/FireWallet.csproj index 8703340..8f7a687 100644 --- a/FireWallet/FireWallet.csproj +++ b/FireWallet/FireWallet.csproj @@ -9,6 +9,7 @@ + diff --git a/FireWallet/MainForm.Designer.cs b/FireWallet/MainForm.Designer.cs index e78567d..6be13c0 100644 --- a/FireWallet/MainForm.Designer.cs +++ b/FireWallet/MainForm.Designer.cs @@ -1,4 +1,9 @@ -namespace FireWallet +using Color = System.Drawing.Color; +using Point = System.Drawing.Point; +using Size = System.Drawing.Size; +using SizeF = System.Drawing.SizeF; + +namespace FireWallet { partial class MainForm { @@ -70,6 +75,11 @@ labelSendingAmount = new Label(); labelSendingTo = new Label(); labelSendPrompt = new Label(); + panelRecieve = new Panel(); + pictureBoxReceiveQR = new PictureBox(); + labelReceive2 = new Label(); + textBoxReceiveAddress = new TextBox(); + labelReceive1 = new Label(); statusStripmain.SuspendLayout(); panelaccount.SuspendLayout(); groupBoxaccount.SuspendLayout(); @@ -78,6 +88,8 @@ groupBoxinfo.SuspendLayout(); groupBoxbalance.SuspendLayout(); panelSend.SuspendLayout(); + panelRecieve.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)pictureBoxReceiveQR).BeginInit(); SuspendLayout(); // // statusStripmain @@ -248,6 +260,7 @@ buttonNavReceive.TabStop = false; buttonNavReceive.Text = "Receive"; buttonNavReceive.UseVisualStyleBackColor = true; + buttonNavReceive.Click += ReceivePanel_Click; // // buttonNavSend // @@ -393,7 +406,7 @@ panelSend.Controls.Add(labelSendingAmount); panelSend.Controls.Add(labelSendingTo); panelSend.Controls.Add(labelSendPrompt); - panelSend.Location = new Point(120, 25); + panelSend.Location = new Point(448, 170); panelSend.Name = "panelSend"; panelSend.Size = new Size(974, 521); panelSend.TabIndex = 2; @@ -408,6 +421,7 @@ checkBoxSendSubFee.Name = "checkBoxSendSubFee"; checkBoxSendSubFee.Size = new Size(206, 25); checkBoxSendSubFee.TabIndex = 16; + checkBoxSendSubFee.TabStop = false; checkBoxSendSubFee.Text = "Subtract Fee from Output"; checkBoxSendSubFee.UseVisualStyleBackColor = true; // @@ -419,6 +433,7 @@ buttonSendMax.Name = "buttonSendMax"; buttonSendMax.Size = new Size(81, 29); buttonSendMax.TabIndex = 15; + buttonSendMax.TabStop = false; buttonSendMax.Text = "Max"; buttonSendMax.UseVisualStyleBackColor = true; buttonSendMax.Click += buttonSendMax_Click; @@ -430,7 +445,7 @@ buttonSendHNS.Location = new Point(361, 315); buttonSendHNS.Name = "buttonSendHNS"; buttonSendHNS.Size = new Size(150, 46); - buttonSendHNS.TabIndex = 14; + buttonSendHNS.TabIndex = 3; buttonSendHNS.Text = "Send"; buttonSendHNS.UseVisualStyleBackColor = true; buttonSendHNS.Click += buttonSendHNS_Click; @@ -462,7 +477,7 @@ textBoxSendingAmount.Location = new Point(346, 159); textBoxSendingAmount.Name = "textBoxSendingAmount"; textBoxSendingAmount.Size = new Size(344, 29); - textBoxSendingAmount.TabIndex = 11; + textBoxSendingAmount.TabIndex = 2; textBoxSendingAmount.Leave += textBoxSendingAmount_Leave; // // textBoxSendingTo @@ -471,7 +486,7 @@ textBoxSendingTo.Location = new Point(346, 98); textBoxSendingTo.Name = "textBoxSendingTo"; textBoxSendingTo.Size = new Size(344, 29); - textBoxSendingTo.TabIndex = 11; + textBoxSendingTo.TabIndex = 1; textBoxSendingTo.Leave += textBoxSendingTo_Leave; // // labelSendingMax @@ -514,11 +529,63 @@ labelSendPrompt.TabIndex = 0; labelSendPrompt.Text = "Send HNS"; // + // panelRecieve + // + panelRecieve.Controls.Add(pictureBoxReceiveQR); + panelRecieve.Controls.Add(labelReceive2); + panelRecieve.Controls.Add(textBoxReceiveAddress); + panelRecieve.Controls.Add(labelReceive1); + panelRecieve.Location = new Point(120, 25); + panelRecieve.Name = "panelRecieve"; + panelRecieve.Size = new Size(995, 523); + panelRecieve.TabIndex = 17; + panelRecieve.Visible = false; + // + // pictureBoxReceiveQR + // + pictureBoxReceiveQR.Location = new Point(391, 190); + pictureBoxReceiveQR.Name = "pictureBoxReceiveQR"; + pictureBoxReceiveQR.Size = new Size(300, 300); + pictureBoxReceiveQR.SizeMode = PictureBoxSizeMode.AutoSize; + pictureBoxReceiveQR.TabIndex = 20; + pictureBoxReceiveQR.TabStop = false; + // + // labelReceive2 + // + labelReceive2.AutoSize = true; + labelReceive2.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point); + labelReceive2.Location = new Point(463, 148); + labelReceive2.Name = "labelReceive2"; + labelReceive2.Size = new Size(205, 21); + labelReceive2.TabIndex = 19; + labelReceive2.Text = "Click your address to copy it"; + // + // textBoxReceiveAddress + // + textBoxReceiveAddress.Font = new Font("Segoe UI", 14F, FontStyle.Regular, GraphicsUnit.Point); + textBoxReceiveAddress.Location = new Point(299, 110); + textBoxReceiveAddress.Name = "textBoxReceiveAddress"; + textBoxReceiveAddress.ReadOnly = true; + textBoxReceiveAddress.Size = new Size(464, 32); + textBoxReceiveAddress.TabIndex = 18; + textBoxReceiveAddress.Click += textBoxRecieveAddress_Click; + // + // labelReceive1 + // + labelReceive1.AutoSize = true; + labelReceive1.Font = new Font("Segoe UI", 14F, FontStyle.Regular, GraphicsUnit.Point); + labelReceive1.Location = new Point(361, 77); + labelReceive1.Name = "labelReceive1"; + labelReceive1.Size = new Size(252, 25); + labelReceive1.TabIndex = 0; + labelReceive1.Text = "Here is your receive address:"; + // // MainForm // AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleMode = AutoScaleMode.Font; ClientSize = new Size(1152, 575); + Controls.Add(panelRecieve); Controls.Add(panelSend); Controls.Add(panelPortfolio); Controls.Add(panelNav); @@ -542,6 +609,9 @@ groupBoxbalance.PerformLayout(); panelSend.ResumeLayout(false); panelSend.PerformLayout(); + panelRecieve.ResumeLayout(false); + panelRecieve.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)pictureBoxReceiveQR).EndInit(); ResumeLayout(false); PerformLayout(); } @@ -589,5 +659,10 @@ private Button buttonSendHNS; private Button buttonSendMax; private CheckBox checkBoxSendSubFee; + private Panel panelRecieve; + private Label labelReceive1; + private TextBox textBoxReceiveAddress; + private Label labelReceive2; + private PictureBox pictureBoxReceiveQR; } } \ No newline at end of file diff --git a/FireWallet/MainForm.cs b/FireWallet/MainForm.cs index f1873a5..5adfed8 100644 --- a/FireWallet/MainForm.cs +++ b/FireWallet/MainForm.cs @@ -1,8 +1,15 @@ +using System; using System.Diagnostics; +using System.IO; +using System.Net; using System.Net.Http; using System.Runtime.InteropServices; using System.Security.Policy; +using System.Windows.Forms; using Newtonsoft.Json.Linq; +using Point = System.Drawing.Point; +using Size = System.Drawing.Size; +using IronBarCode; namespace FireWallet { @@ -451,6 +458,7 @@ namespace FireWallet panelaccount.Visible = true; panelNav.Visible = false; panelSend.Visible = false; + panelRecieve.Visible = false; toolStripStatusLabelaccount.Text = "Account: Not Logged In"; screen = 0; @@ -478,7 +486,7 @@ namespace FireWallet JObject resp = JObject.Parse(response); - decimal available = Convert.ToDecimal(resp["unconfirmed"].ToString()) / 1000000; + decimal available = Convert.ToDecimal(resp["unconfirmed"].ToString()) - Convert.ToDecimal(resp["lockedUnconfirmed"].ToString()) / 1000000; decimal locked = Convert.ToDecimal(resp["lockedUnconfirmed"].ToString()) / 1000000; available = available - locked; available = decimal.Round(available, 2); @@ -561,6 +569,19 @@ namespace FireWallet return "Error"; } } + private async Task GetAddress() + { + string content = "{\"account\":\"default\"}"; + string path = "wallet/" + account + "/address"; + string APIresponse = await APIPost(path, true, content); + if (APIresponse == "Error") + { + AddLog("GetAddress Error"); + return "Error"; + } + JObject resp = JObject.Parse(APIresponse); + return resp["address"].ToString(); + } private async void GetTXHistory() { @@ -703,14 +724,16 @@ namespace FireWallet } } #endregion - #region Nav private async void PortfolioPanel_Click(object sender, EventArgs e) { - buttonNavSend.BackColor = ColorTranslator.FromHtml(theme["background"]); - buttonNavSend.ForeColor = ColorTranslator.FromHtml(theme["foreground"]); panelSend.Hide(); panelPortfolio.Show(); + panelRecieve.Hide(); + buttonNavSend.BackColor = ColorTranslator.FromHtml(theme["background"]); + buttonNavSend.ForeColor = ColorTranslator.FromHtml(theme["foreground"]); + buttonNavReceive.BackColor = ColorTranslator.FromHtml(theme["background"]); + buttonNavReceive.ForeColor = ColorTranslator.FromHtml(theme["foreground"]); await UpdateBalance(); GetTXHistory(); labelBalance.Text = "Available: " + balance.ToString() + " HNS"; @@ -727,8 +750,11 @@ namespace FireWallet { panelPortfolio.Hide(); panelSend.Show(); + panelRecieve.Hide(); buttonNavPortfolio.BackColor = ColorTranslator.FromHtml(theme["background"]); buttonNavPortfolio.ForeColor = ColorTranslator.FromHtml(theme["foreground"]); + buttonNavReceive.BackColor = ColorTranslator.FromHtml(theme["background"]); + buttonNavReceive.ForeColor = ColorTranslator.FromHtml(theme["foreground"]); if (theme.ContainsKey("selected-bg") && theme.ContainsKey("selected-fg")) { buttonNavSend.BackColor = ColorTranslator.FromHtml(theme["selected-bg"]); @@ -757,29 +783,99 @@ namespace FireWallet labelSendingFee.Text = "Est. Fee: " + fee + " HNS"; labelSendingError.Hide(); + } + private async void ReceivePanel_Click(object sender, EventArgs e) + { + panelSend.Hide(); + panelPortfolio.Hide(); + panelRecieve.Show(); + buttonNavSend.BackColor = ColorTranslator.FromHtml(theme["background"]); + buttonNavSend.ForeColor = ColorTranslator.FromHtml(theme["foreground"]); + buttonNavPortfolio.BackColor = ColorTranslator.FromHtml(theme["background"]); + buttonNavPortfolio.ForeColor = ColorTranslator.FromHtml(theme["foreground"]); + + + if (theme.ContainsKey("selected-bg") && theme.ContainsKey("selected-fg")) + { + buttonNavReceive.BackColor = ColorTranslator.FromHtml(theme["selected-bg"]); + buttonNavReceive.ForeColor = ColorTranslator.FromHtml(theme["selected-fg"]); + } + labelReceive1.Left = (panelRecieve.Width - labelReceive1.Width) / 2; + labelReceive2.Left = (panelRecieve.Width - labelReceive2.Width) / 2; + textBoxReceiveAddress.Left = (panelRecieve.Width - textBoxReceiveAddress.Width) / 2; + + + string address = await GetAddress(); + textBoxReceiveAddress.Text = address; + textBoxReceiveAddress.TextAlign = HorizontalAlignment.Center; + Size size = TextRenderer.MeasureText(textBoxReceiveAddress.Text, textBoxReceiveAddress.Font); + textBoxReceiveAddress.Width = size.Width + 10; + textBoxReceiveAddress.Left = (panelRecieve.Width - textBoxReceiveAddress.Width) / 2; + + GeneratedBarcode Qrcode = QRCodeWriter.CreateQrCode(textBoxReceiveAddress.Text); + pictureBoxReceiveQR.Image = Qrcode.Image; + pictureBoxReceiveQR.SizeMode = PictureBoxSizeMode.Zoom; + pictureBoxReceiveQR.Width = panelRecieve.Width / 3; + pictureBoxReceiveQR.Left = (panelRecieve.Width - pictureBoxReceiveQR.Width) / 2; + + + } #endregion #region Send private async void textBoxSendingTo_Leave(object sender, EventArgs e) { - try - { - bool valid = await ValidAddress(textBoxSendingTo.Text); - if (valid) - { - labelSendingError.Hide(); - labelSendingError.Text = ""; - } - else - { - labelSendingError.Show(); - labelSendingError.Text = "Invalid Address"; - } - } - catch (Exception ex) + if (textBoxSendingTo.Text == "") return; + if (textBoxSendingTo.Text.Substring(0, 1) == "@") { labelSendingError.Show(); - labelSendingError.Text = ex.Message; + labelSendingError.Text = "HIP-02 Not supported yet"; + return; + /* + string domain = textBoxSendingTo.Text.Substring(1); + try + { + string address = ""; + + bool valid = await ValidAddress(address); + if (valid) + { + labelSendingError.Hide(); + labelSendingError.Text = ""; + } + else + { + labelSendingError.Show(); + labelSendingError.Text = "Invalid Address"; + } + } + catch (Exception ex) + { + labelSendingError.Show(); + labelSendingError.Text = ex.Message; + }*/ + } + else + { + try + { + bool valid = await ValidAddress(textBoxSendingTo.Text); + if (valid) + { + labelSendingError.Hide(); + labelSendingError.Text = ""; + } + else + { + labelSendingError.Show(); + labelSendingError.Text = "Invalid Address"; + } + } + catch (Exception ex) + { + labelSendingError.Show(); + labelSendingError.Text = ex.Message; + } } } @@ -797,7 +893,7 @@ namespace FireWallet labelSendingError.Text = "Invalid Amount"; } } - + private async void buttonSendMax_Click(object sender, EventArgs e) { string fee = await GetFee(); @@ -844,12 +940,12 @@ namespace FireWallet { NotifyForm notify = new NotifyForm("Error Transaction Failed"); notify.ShowDialog(); - return; + return; } string hash = APIresp["result"].ToString(); string link = userSettings["explorer-tx"] + hash; NotifyForm notifySuccess = new NotifyForm("Transaction Sent\nThis transaction could take up to 20 minutes to mine", - "Explorer",link); + "Explorer", link); notifySuccess.ShowDialog(); textBoxSendingTo.Text = ""; textBoxSendingAmount.Text = ""; @@ -867,5 +963,11 @@ namespace FireWallet } #endregion + private void textBoxRecieveAddress_Click(object sender, EventArgs e) + { + Clipboard.SetText(textBoxReceiveAddress.Text); + labelReceive2.Text = "Copied to clipboard"; + labelReceive2.Left = (panelRecieve.Width - labelReceive2.Width) / 2; + } } } \ No newline at end of file diff --git a/FireWallet/NotifyForm.Designer.cs b/FireWallet/NotifyForm.Designer.cs index bf23f34..4cbe485 100644 --- a/FireWallet/NotifyForm.Designer.cs +++ b/FireWallet/NotifyForm.Designer.cs @@ -1,4 +1,8 @@ -namespace FireWallet +using Color = System.Drawing.Color; +using Point = System.Drawing.Point; +using Size = System.Drawing.Size; +using SizeF = System.Drawing.SizeF; +namespace FireWallet { partial class NotifyForm {