This commit is contained in:
2024-04-19 02:24:05 +01:00
parent 13b8eda0c9
commit 7fd9f6998d
50 changed files with 3286 additions and 154 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

View File

@@ -0,0 +1,336 @@
namespace HCI_Coursework_EVCHARGE
{
partial class BaySelection
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.button6 = new System.Windows.Forms.Button();
this.button8 = new System.Windows.Forms.Button();
this.button7 = new System.Windows.Forms.Button();
this.button10 = new System.Windows.Forms.Button();
this.button9 = new System.Windows.Forms.Button();
this.label1 = new System.Windows.Forms.Label();
this.panel3 = new System.Windows.Forms.Panel();
this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel();
this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel();
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.button1 = new System.Windows.Forms.Button();
this.button5 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
this.button4 = new System.Windows.Forms.Button();
this.button3 = new System.Windows.Forms.Button();
this.userLabel = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.panel3.SuspendLayout();
this.tableLayoutPanel3.SuspendLayout();
this.tableLayoutPanel2.SuspendLayout();
this.tableLayoutPanel1.SuspendLayout();
this.SuspendLayout();
//
// button6
//
this.button6.Dock = System.Windows.Forms.DockStyle.Left;
this.button6.Location = new System.Drawing.Point(25, 769);
this.button6.Margin = new System.Windows.Forms.Padding(25);
this.button6.Name = "button6";
this.button6.Size = new System.Drawing.Size(911, 136);
this.button6.TabIndex = 9;
this.button6.Text = "Bay 10";
this.button6.UseVisualStyleBackColor = true;
this.button6.Click += new System.EventHandler(this.bayButton_Click);
//
// button8
//
this.button8.Dock = System.Windows.Forms.DockStyle.Left;
this.button8.Location = new System.Drawing.Point(25, 397);
this.button8.Margin = new System.Windows.Forms.Padding(25);
this.button8.Name = "button8";
this.button8.Size = new System.Drawing.Size(911, 136);
this.button8.TabIndex = 7;
this.button8.Text = "Bay 8";
this.button8.UseVisualStyleBackColor = true;
this.button8.Click += new System.EventHandler(this.bayButton_Click);
//
// button7
//
this.button7.Dock = System.Windows.Forms.DockStyle.Left;
this.button7.Location = new System.Drawing.Point(25, 583);
this.button7.Margin = new System.Windows.Forms.Padding(25);
this.button7.Name = "button7";
this.button7.Size = new System.Drawing.Size(911, 136);
this.button7.TabIndex = 8;
this.button7.Text = "Bay 9";
this.button7.UseVisualStyleBackColor = true;
this.button7.Click += new System.EventHandler(this.bayButton_Click);
//
// button10
//
this.button10.Dock = System.Windows.Forms.DockStyle.Left;
this.button10.Location = new System.Drawing.Point(25, 25);
this.button10.Margin = new System.Windows.Forms.Padding(25);
this.button10.Name = "button10";
this.button10.Size = new System.Drawing.Size(911, 136);
this.button10.TabIndex = 5;
this.button10.Text = "Bay 6";
this.button10.UseVisualStyleBackColor = true;
this.button10.Click += new System.EventHandler(this.bayButton_Click);
//
// button9
//
this.button9.Dock = System.Windows.Forms.DockStyle.Left;
this.button9.Location = new System.Drawing.Point(25, 211);
this.button9.Margin = new System.Windows.Forms.Padding(25);
this.button9.Name = "button9";
this.button9.Size = new System.Drawing.Size(911, 136);
this.button9.TabIndex = 6;
this.button9.Text = "Bay 7";
this.button9.UseVisualStyleBackColor = true;
this.button9.Click += new System.EventHandler(this.bayButton_Click);
//
// label1
//
this.label1.AutoSize = true;
this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 20F);
this.label1.Location = new System.Drawing.Point(296, 16);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(261, 31);
this.label1.TabIndex = 5;
this.label1.Text = "Select Charging Bay";
//
// panel3
//
this.panel3.AutoSize = true;
this.panel3.BackColor = System.Drawing.SystemColors.Control;
this.panel3.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.panel3.Controls.Add(this.tableLayoutPanel3);
this.panel3.Controls.Add(this.userLabel);
this.panel3.Controls.Add(this.label2);
this.panel3.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel3.ForeColor = System.Drawing.SystemColors.ControlText;
this.panel3.Location = new System.Drawing.Point(0, 0);
this.panel3.Name = "panel3";
this.panel3.Size = new System.Drawing.Size(1920, 1080);
this.panel3.TabIndex = 2;
//
// tableLayoutPanel3
//
this.tableLayoutPanel3.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.tableLayoutPanel3.BackColor = System.Drawing.SystemColors.ActiveCaptionText;
this.tableLayoutPanel3.ColumnCount = 2;
this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel3.Controls.Add(this.tableLayoutPanel2, 1, 0);
this.tableLayoutPanel3.Controls.Add(this.tableLayoutPanel1, 0, 0);
this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Bottom;
this.tableLayoutPanel3.GrowStyle = System.Windows.Forms.TableLayoutPanelGrowStyle.FixedSize;
this.tableLayoutPanel3.Location = new System.Drawing.Point(0, 160);
this.tableLayoutPanel3.MaximumSize = new System.Drawing.Size(1918, 918);
this.tableLayoutPanel3.Name = "tableLayoutPanel3";
this.tableLayoutPanel3.RowCount = 1;
this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
this.tableLayoutPanel3.Size = new System.Drawing.Size(1918, 918);
this.tableLayoutPanel3.TabIndex = 4;
//
// tableLayoutPanel2
//
this.tableLayoutPanel2.AutoSize = true;
this.tableLayoutPanel2.BackColor = System.Drawing.SystemColors.Control;
this.tableLayoutPanel2.ColumnCount = 1;
this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
this.tableLayoutPanel2.Controls.Add(this.button10, 0, 0);
this.tableLayoutPanel2.Controls.Add(this.button8, 0, 2);
this.tableLayoutPanel2.Controls.Add(this.button9, 0, 1);
this.tableLayoutPanel2.Controls.Add(this.button7, 0, 3);
this.tableLayoutPanel2.Controls.Add(this.button6, 0, 4);
this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Left;
this.tableLayoutPanel2.Location = new System.Drawing.Point(959, 0);
this.tableLayoutPanel2.Margin = new System.Windows.Forms.Padding(0);
this.tableLayoutPanel2.Name = "tableLayoutPanel2";
this.tableLayoutPanel2.RowCount = 5;
this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20F));
this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20F));
this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20F));
this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20F));
this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20F));
this.tableLayoutPanel2.Size = new System.Drawing.Size(959, 930);
this.tableLayoutPanel2.TabIndex = 3;
//
// tableLayoutPanel1
//
this.tableLayoutPanel1.AutoSize = true;
this.tableLayoutPanel1.BackColor = System.Drawing.SystemColors.Control;
this.tableLayoutPanel1.ColumnCount = 1;
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
this.tableLayoutPanel1.Controls.Add(this.button1, 0, 0);
this.tableLayoutPanel1.Controls.Add(this.button5, 0, 4);
this.tableLayoutPanel1.Controls.Add(this.button2, 0, 1);
this.tableLayoutPanel1.Controls.Add(this.button4, 0, 3);
this.tableLayoutPanel1.Controls.Add(this.button3, 0, 2);
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Left;
this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(0);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
this.tableLayoutPanel1.RowCount = 5;
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20F));
this.tableLayoutPanel1.Size = new System.Drawing.Size(959, 930);
this.tableLayoutPanel1.TabIndex = 2;
//
// button1
//
this.button1.Dock = System.Windows.Forms.DockStyle.Left;
this.button1.Location = new System.Drawing.Point(25, 25);
this.button1.Margin = new System.Windows.Forms.Padding(25);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(911, 136);
this.button1.TabIndex = 0;
this.button1.Text = "Bay 1";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.bayButton_Click);
//
// button5
//
this.button5.Dock = System.Windows.Forms.DockStyle.Left;
this.button5.Location = new System.Drawing.Point(25, 769);
this.button5.Margin = new System.Windows.Forms.Padding(25);
this.button5.Name = "button5";
this.button5.Size = new System.Drawing.Size(911, 136);
this.button5.TabIndex = 4;
this.button5.Text = "Bay 5";
this.button5.UseVisualStyleBackColor = true;
this.button5.Click += new System.EventHandler(this.bayButton_Click);
//
// button2
//
this.button2.Dock = System.Windows.Forms.DockStyle.Left;
this.button2.Location = new System.Drawing.Point(25, 211);
this.button2.Margin = new System.Windows.Forms.Padding(25);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(911, 136);
this.button2.TabIndex = 1;
this.button2.Text = "Bay 2";
this.button2.UseVisualStyleBackColor = true;
this.button2.Click += new System.EventHandler(this.bayButton_Click);
//
// button4
//
this.button4.Dock = System.Windows.Forms.DockStyle.Left;
this.button4.Location = new System.Drawing.Point(25, 583);
this.button4.Margin = new System.Windows.Forms.Padding(25);
this.button4.Name = "button4";
this.button4.Size = new System.Drawing.Size(911, 136);
this.button4.TabIndex = 3;
this.button4.Text = "Bay 4";
this.button4.UseVisualStyleBackColor = true;
this.button4.Click += new System.EventHandler(this.bayButton_Click);
//
// button3
//
this.button3.Dock = System.Windows.Forms.DockStyle.Left;
this.button3.Location = new System.Drawing.Point(25, 397);
this.button3.Margin = new System.Windows.Forms.Padding(25);
this.button3.Name = "button3";
this.button3.Size = new System.Drawing.Size(911, 136);
this.button3.TabIndex = 2;
this.button3.Text = "Bay 3";
this.button3.UseVisualStyleBackColor = true;
this.button3.Click += new System.EventHandler(this.bayButton_Click);
//
// userLabel
//
this.userLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.userLabel.AutoSize = true;
this.userLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 20F);
this.userLabel.Location = new System.Drawing.Point(24, 64);
this.userLabel.Name = "userLabel";
this.userLabel.Size = new System.Drawing.Size(176, 31);
this.userLabel.TabIndex = 1;
this.userLabel.Text = "Logged in as:";
//
// label2
//
this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.label2.AutoSize = true;
this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 40F);
this.label2.Location = new System.Drawing.Point(664, 40);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(519, 63);
this.label2.TabIndex = 0;
this.label2.Text = "Select Charging Bay";
//
// BaySelection
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.AutoSize = true;
this.ClientSize = new System.Drawing.Size(1920, 1080);
this.Controls.Add(this.panel3);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.Name = "BaySelection";
this.Text = "BaySelection";
this.TopMost = true;
this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
this.panel3.ResumeLayout(false);
this.panel3.PerformLayout();
this.tableLayoutPanel3.ResumeLayout(false);
this.tableLayoutPanel3.PerformLayout();
this.tableLayoutPanel2.ResumeLayout(false);
this.tableLayoutPanel1.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button button6;
private System.Windows.Forms.Button button8;
private System.Windows.Forms.Button button7;
private System.Windows.Forms.Button button10;
private System.Windows.Forms.Button button9;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Panel panel3;
private System.Windows.Forms.Label userLabel;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Button button5;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.Button button4;
private System.Windows.Forms.Button button3;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3;
}
}

View File

@@ -0,0 +1,39 @@
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 HCI_Coursework_EVCHARGE
{
public partial class BaySelection : Form
{
public BaySelection( String accountNo )
{
InitializeComponent();
userLabel.Text += " " + accountNo;
tableLayoutPanel3.Height = this.ClientSize.Height;
}
private void bayButton_Click(object sender, EventArgs e)
{
if( sender is Button button)
{
int bayNo = Convert.ToInt32(button.Text.Substring(button.Text.Length - 1));
button.BackColor = SystemColors.ControlDark;
ChargingDetails chargingDetails = new ChargingDetails(bayNo);
chargingDetails.Show();
chargingDetails.FormClosed += delegate
{
chargingDetails = null;
button.BackColor = SystemColors.Control;
};
}
}
}
}

View File

@@ -0,0 +1,166 @@
namespace HCI_Coursework_EVCHARGE
{
partial class Charging
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.button1 = new System.Windows.Forms.Button();
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.label1 = new System.Windows.Forms.Label();
this.timeRemainingLabel = new System.Windows.Forms.Label();
this.chargeRateLabel = new System.Windows.Forms.Label();
this.progressBar1 = new System.Windows.Forms.ProgressBar();
this.chargeCapacityLabel = new System.Windows.Forms.Label();
this.timer1 = new System.Windows.Forms.Timer(this.components);
this.tableLayoutPanel1.SuspendLayout();
this.SuspendLayout();
//
// button1
//
this.button1.Font = new System.Drawing.Font("Microsoft Sans Serif", 20F);
this.button1.Location = new System.Drawing.Point(1544, 840);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(300, 150);
this.button1.TabIndex = 0;
this.button1.Text = "Cancel Charging";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.cancel_Button);
//
// tableLayoutPanel1
//
this.tableLayoutPanel1.ColumnCount = 2;
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel1.Controls.Add(this.label1, 0, 0);
this.tableLayoutPanel1.Controls.Add(this.timeRemainingLabel, 0, 3);
this.tableLayoutPanel1.Controls.Add(this.chargeRateLabel, 1, 2);
this.tableLayoutPanel1.Controls.Add(this.progressBar1, 0, 1);
this.tableLayoutPanel1.Controls.Add(this.chargeCapacityLabel, 0, 2);
this.tableLayoutPanel1.Location = new System.Drawing.Point(56, 104);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
this.tableLayoutPanel1.RowCount = 4;
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 35F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 35F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 15F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 15F));
this.tableLayoutPanel1.Size = new System.Drawing.Size(1144, 696);
this.tableLayoutPanel1.TabIndex = 1;
//
// label1
//
this.label1.AutoSize = true;
this.label1.Dock = System.Windows.Forms.DockStyle.Fill;
this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 30F);
this.label1.Location = new System.Drawing.Point(10, 10);
this.label1.Margin = new System.Windows.Forms.Padding(10, 10, 10, 30);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(552, 203);
this.label1.TabIndex = 4;
this.label1.Text = "Charging...";
this.label1.TextAlign = System.Drawing.ContentAlignment.BottomLeft;
//
// timeRemainingLabel
//
this.timeRemainingLabel.AutoSize = true;
this.timeRemainingLabel.Dock = System.Windows.Forms.DockStyle.Fill;
this.timeRemainingLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 18F);
this.timeRemainingLabel.Location = new System.Drawing.Point(50, 600);
this.timeRemainingLabel.Margin = new System.Windows.Forms.Padding(50, 10, 10, 10);
this.timeRemainingLabel.Name = "timeRemainingLabel";
this.timeRemainingLabel.Size = new System.Drawing.Size(512, 86);
this.timeRemainingLabel.TabIndex = 3;
this.timeRemainingLabel.Text = "timeRemaining";
//
// chargeRateLabel
//
this.chargeRateLabel.AutoSize = true;
this.chargeRateLabel.Dock = System.Windows.Forms.DockStyle.Fill;
this.chargeRateLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 18F);
this.chargeRateLabel.Location = new System.Drawing.Point(622, 496);
this.chargeRateLabel.Margin = new System.Windows.Forms.Padding(50, 10, 10, 10);
this.chargeRateLabel.Name = "chargeRateLabel";
this.chargeRateLabel.Size = new System.Drawing.Size(512, 84);
this.chargeRateLabel.TabIndex = 2;
this.chargeRateLabel.Text = "chargeRate";
//
// progressBar1
//
this.tableLayoutPanel1.SetColumnSpan(this.progressBar1, 2);
this.progressBar1.Dock = System.Windows.Forms.DockStyle.Fill;
this.progressBar1.Location = new System.Drawing.Point(25, 268);
this.progressBar1.Margin = new System.Windows.Forms.Padding(25);
this.progressBar1.Name = "progressBar1";
this.progressBar1.Size = new System.Drawing.Size(1094, 193);
this.progressBar1.Step = 1;
this.progressBar1.Style = System.Windows.Forms.ProgressBarStyle.Continuous;
this.progressBar1.TabIndex = 0;
this.progressBar1.Value = 9;
//
// chargeCapacityLabel
//
this.chargeCapacityLabel.AutoSize = true;
this.chargeCapacityLabel.Dock = System.Windows.Forms.DockStyle.Fill;
this.chargeCapacityLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 18F);
this.chargeCapacityLabel.Location = new System.Drawing.Point(50, 496);
this.chargeCapacityLabel.Margin = new System.Windows.Forms.Padding(50, 10, 10, 10);
this.chargeCapacityLabel.Name = "chargeCapacityLabel";
this.chargeCapacityLabel.Size = new System.Drawing.Size(512, 84);
this.chargeCapacityLabel.TabIndex = 1;
this.chargeCapacityLabel.Text = "chargeCapacity";
//
// Charging
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1904, 1041);
this.Controls.Add(this.tableLayoutPanel1);
this.Controls.Add(this.button1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.Name = "Charging";
this.Text = "Charging";
this.TopMost = true;
this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
this.Load += new System.EventHandler(this.Charging_Load);
this.tableLayoutPanel1.ResumeLayout(false);
this.tableLayoutPanel1.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Button button1;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
private System.Windows.Forms.ProgressBar progressBar1;
private System.Windows.Forms.Timer timer1;
private System.Windows.Forms.Label chargeCapacityLabel;
private System.Windows.Forms.Label chargeRateLabel;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label timeRemainingLabel;
}
}

View File

@@ -0,0 +1,63 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.Remoting.Metadata.W3cXsd2001;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace HCI_Coursework_EVCHARGE
{
public partial class Charging : Form
{
String bay;
String vehicle;
String duration;
public Charging(String bayNo, String vehicle, String duration)
{
InitializeComponent();
this.bay = bayNo;
this.vehicle = vehicle;
this.duration = duration;
var details = new ChargingDetails(Convert.ToInt16(bay)).getCarInfo(vehicle);
label1.Text = $"{System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(vehicle)} Charging...";
chargeRateLabel.Text = $"Charging Rate: {details[0]} kW";
chargeCapacityLabel.Text = $" Total Charge: {Convert.ToString(decimal.Round( (Convert.ToDecimal(details[0]) / Convert.ToInt16(duration)), 2, MidpointRounding.ToEven))} kWh";
}
private void Charging_Load(object sender, EventArgs e)
{
timer1.Enabled = true;
timer1.Start();
timer1.Interval = 1000;
progressBar1.Maximum = (Convert.ToInt16(duration) * 3600);
timer1.Tick += new EventHandler(timer1_Tick);
}
private void timer1_Tick(object sender, EventArgs e)
{
TimeSpan timeRemaining = TimeSpan.FromSeconds(progressBar1.Maximum - progressBar1.Value);
if (progressBar1.Value != progressBar1.Maximum)
{
Console.WriteLine( timeRemaining.ToString() );
progressBar1.Value++;
timeRemainingLabel.Text = string.Format("{0:D2}h:{1:D2}m:{2:D2}s" + " remaining.",
timeRemaining.Hours,
timeRemaining.Minutes,
timeRemaining.Seconds);
}
else
{
timer1.Stop();
}
}
private void cancel_Button(object sender, EventArgs e)
{
Application.Exit();
}
}
}

View File

@@ -0,0 +1,351 @@
namespace HCI_Coursework_EVCHARGE
{
partial class ChargingDetails
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.panel1 = new System.Windows.Forms.Panel();
this.vehiclePanel = new System.Windows.Forms.TableLayoutPanel();
this.backButton = new System.Windows.Forms.Button();
this.label1 = new System.Windows.Forms.Label();
this.scooterButton = new System.Windows.Forms.Button();
this.carButton = new System.Windows.Forms.Button();
this.bikeButton = new System.Windows.Forms.Button();
this.infoPanel = new System.Windows.Forms.TableLayoutPanel();
this.label6 = new System.Windows.Forms.Label();
this.textBox1 = new System.Windows.Forms.TextBox();
this.label2 = new System.Windows.Forms.Label();
this.durationLabel = new System.Windows.Forms.Label();
this.label5 = new System.Windows.Forms.Label();
this.label4 = new System.Windows.Forms.Label();
this.powerLabel = new System.Windows.Forms.Label();
this.bayLabel = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.confirmPanel = new System.Windows.Forms.TableLayoutPanel();
this.confirmDetailsButton = new System.Windows.Forms.Button();
this.panel1.SuspendLayout();
this.vehiclePanel.SuspendLayout();
this.infoPanel.SuspendLayout();
this.confirmPanel.SuspendLayout();
this.SuspendLayout();
//
// panel1
//
this.panel1.Controls.Add(this.vehiclePanel);
this.panel1.Controls.Add(this.infoPanel);
this.panel1.Controls.Add(this.confirmPanel);
this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel1.Location = new System.Drawing.Point(0, 0);
this.panel1.Margin = new System.Windows.Forms.Padding(30, 30, 30, 0);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(1920, 1080);
this.panel1.TabIndex = 0;
//
// vehiclePanel
//
this.vehiclePanel.ColumnCount = 1;
this.vehiclePanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.vehiclePanel.Controls.Add(this.backButton, 0, 4);
this.vehiclePanel.Controls.Add(this.label1, 0, 0);
this.vehiclePanel.Controls.Add(this.scooterButton, 0, 3);
this.vehiclePanel.Controls.Add(this.carButton, 0, 1);
this.vehiclePanel.Controls.Add(this.bikeButton, 0, 2);
this.vehiclePanel.Dock = System.Windows.Forms.DockStyle.Left;
this.vehiclePanel.Location = new System.Drawing.Point(0, 0);
this.vehiclePanel.Name = "vehiclePanel";
this.vehiclePanel.RowCount = 5;
this.vehiclePanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F));
this.vehiclePanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.vehiclePanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.vehiclePanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.vehiclePanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 15F));
this.vehiclePanel.Size = new System.Drawing.Size(646, 1080);
this.vehiclePanel.TabIndex = 4;
//
// backButton
//
this.backButton.Dock = System.Windows.Forms.DockStyle.Fill;
this.backButton.Location = new System.Drawing.Point(20, 938);
this.backButton.Margin = new System.Windows.Forms.Padding(20);
this.backButton.Name = "backButton";
this.backButton.Size = new System.Drawing.Size(606, 122);
this.backButton.TabIndex = 4;
this.backButton.Text = "Cancel";
this.backButton.UseVisualStyleBackColor = true;
this.backButton.Click += new System.EventHandler(this.backButton_Click);
//
// label1
//
this.label1.AutoSize = true;
this.label1.Dock = System.Windows.Forms.DockStyle.Fill;
this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 18F);
this.label1.Location = new System.Drawing.Point(30, 30);
this.label1.Margin = new System.Windows.Forms.Padding(30);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(586, 48);
this.label1.TabIndex = 3;
this.label1.Text = "Select Vehicle Type";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// scooterButton
//
this.scooterButton.BackColor = System.Drawing.SystemColors.ActiveBorder;
this.scooterButton.Dock = System.Windows.Forms.DockStyle.Fill;
this.scooterButton.Location = new System.Drawing.Point(30, 678);
this.scooterButton.Margin = new System.Windows.Forms.Padding(30);
this.scooterButton.Name = "scooterButton";
this.scooterButton.Size = new System.Drawing.Size(586, 210);
this.scooterButton.TabIndex = 2;
this.scooterButton.Text = "E-Scooter";
this.scooterButton.UseVisualStyleBackColor = false;
this.scooterButton.Click += new System.EventHandler(this.vehicleButton_Click);
//
// carButton
//
this.carButton.BackColor = System.Drawing.SystemColors.ActiveBorder;
this.carButton.Dock = System.Windows.Forms.DockStyle.Fill;
this.carButton.Location = new System.Drawing.Point(30, 138);
this.carButton.Margin = new System.Windows.Forms.Padding(30);
this.carButton.Name = "carButton";
this.carButton.Size = new System.Drawing.Size(586, 210);
this.carButton.TabIndex = 0;
this.carButton.Text = "Car";
this.carButton.UseVisualStyleBackColor = false;
this.carButton.Click += new System.EventHandler(this.vehicleButton_Click);
//
// bikeButton
//
this.bikeButton.BackColor = System.Drawing.SystemColors.ActiveBorder;
this.bikeButton.Dock = System.Windows.Forms.DockStyle.Fill;
this.bikeButton.Location = new System.Drawing.Point(30, 408);
this.bikeButton.Margin = new System.Windows.Forms.Padding(30);
this.bikeButton.Name = "bikeButton";
this.bikeButton.Size = new System.Drawing.Size(586, 210);
this.bikeButton.TabIndex = 1;
this.bikeButton.Text = "E-Bike";
this.bikeButton.UseVisualStyleBackColor = false;
this.bikeButton.Click += new System.EventHandler(this.vehicleButton_Click);
//
// infoPanel
//
this.infoPanel.ColumnCount = 1;
this.infoPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.infoPanel.Controls.Add(this.label6, 0, 7);
this.infoPanel.Controls.Add(this.textBox1, 0, 8);
this.infoPanel.Controls.Add(this.label2, 0, 0);
this.infoPanel.Controls.Add(this.durationLabel, 0, 6);
this.infoPanel.Controls.Add(this.label5, 0, 1);
this.infoPanel.Controls.Add(this.label4, 0, 5);
this.infoPanel.Controls.Add(this.powerLabel, 0, 4);
this.infoPanel.Controls.Add(this.bayLabel, 0, 2);
this.infoPanel.Controls.Add(this.label3, 0, 3);
this.infoPanel.Location = new System.Drawing.Point(646, 0);
this.infoPanel.Name = "infoPanel";
this.infoPanel.RowCount = 9;
this.infoPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 11.11111F));
this.infoPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 11.11111F));
this.infoPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 11.11111F));
this.infoPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 11.11111F));
this.infoPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 11.11111F));
this.infoPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 11.11111F));
this.infoPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 11.11111F));
this.infoPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 11.11111F));
this.infoPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 11.11111F));
this.infoPanel.Size = new System.Drawing.Size(1274, 904);
this.infoPanel.TabIndex = 11;
this.infoPanel.Visible = false;
//
// label6
//
this.label6.Font = new System.Drawing.Font("Microsoft Sans Serif", 30F);
this.label6.Location = new System.Drawing.Point(20, 720);
this.label6.Margin = new System.Windows.Forms.Padding(20, 20, 20, 5);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(1234, 68);
this.label6.TabIndex = 11;
this.label6.Text = "Charging Duration ( Hours )";
this.label6.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// textBox1
//
this.textBox1.Dock = System.Windows.Forms.DockStyle.Fill;
this.textBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 25F);
this.textBox1.Location = new System.Drawing.Point(500, 830);
this.textBox1.Margin = new System.Windows.Forms.Padding(500, 30, 500, 30);
this.textBox1.MaxLength = 1;
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(274, 45);
this.textBox1.TabIndex = 12;
this.textBox1.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
this.textBox1.Enter += new System.EventHandler(this.accountPin_Focus);
//
// label2
//
this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 30F);
this.label2.Location = new System.Drawing.Point(0, 0);
this.label2.Margin = new System.Windows.Forms.Padding(0);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(1264, 63);
this.label2.TabIndex = 4;
this.label2.Text = "Charging Information";
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// durationLabel
//
this.durationLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 25F);
this.durationLabel.Location = new System.Drawing.Point(30, 605);
this.durationLabel.Margin = new System.Windows.Forms.Padding(30, 5, 30, 30);
this.durationLabel.Name = "durationLabel";
this.durationLabel.Size = new System.Drawing.Size(1214, 63);
this.durationLabel.TabIndex = 10;
this.durationLabel.Text = "maxDuration";
this.durationLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// label5
//
this.label5.Font = new System.Drawing.Font("Microsoft Sans Serif", 30F);
this.label5.Location = new System.Drawing.Point(20, 120);
this.label5.Margin = new System.Windows.Forms.Padding(20, 20, 20, 5);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(1234, 63);
this.label5.TabIndex = 7;
this.label5.Text = "Charging Bay";
this.label5.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// label4
//
this.label4.Font = new System.Drawing.Font("Microsoft Sans Serif", 30F);
this.label4.Location = new System.Drawing.Point(20, 520);
this.label4.Margin = new System.Windows.Forms.Padding(20, 20, 20, 5);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(1234, 63);
this.label4.TabIndex = 6;
this.label4.Text = "Maximum Duration";
this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// powerLabel
//
this.powerLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 25F);
this.powerLabel.Location = new System.Drawing.Point(30, 405);
this.powerLabel.Margin = new System.Windows.Forms.Padding(30, 5, 30, 30);
this.powerLabel.Name = "powerLabel";
this.powerLabel.Size = new System.Drawing.Size(1214, 63);
this.powerLabel.TabIndex = 9;
this.powerLabel.Text = "maxPower";
this.powerLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// bayLabel
//
this.bayLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 25F);
this.bayLabel.Location = new System.Drawing.Point(30, 205);
this.bayLabel.Margin = new System.Windows.Forms.Padding(30, 5, 30, 30);
this.bayLabel.Name = "bayLabel";
this.bayLabel.Size = new System.Drawing.Size(1214, 63);
this.bayLabel.TabIndex = 8;
this.bayLabel.Text = "chargingBay";
this.bayLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// label3
//
this.label3.Font = new System.Drawing.Font("Microsoft Sans Serif", 30F);
this.label3.Location = new System.Drawing.Point(20, 320);
this.label3.Margin = new System.Windows.Forms.Padding(20, 20, 20, 5);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(1234, 63);
this.label3.TabIndex = 5;
this.label3.Text = "Maximum Power";
this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// confirmPanel
//
this.confirmPanel.ColumnCount = 1;
this.confirmPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.confirmPanel.Controls.Add(this.confirmDetailsButton, 0, 0);
this.confirmPanel.Location = new System.Drawing.Point(648, 904);
this.confirmPanel.Name = "confirmPanel";
this.confirmPanel.RowCount = 1;
this.confirmPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.confirmPanel.Size = new System.Drawing.Size(1272, 176);
this.confirmPanel.TabIndex = 3;
this.confirmPanel.Visible = false;
//
// confirmDetailsButton
//
this.confirmDetailsButton.Dock = System.Windows.Forms.DockStyle.Fill;
this.confirmDetailsButton.Location = new System.Drawing.Point(20, 20);
this.confirmDetailsButton.Margin = new System.Windows.Forms.Padding(20);
this.confirmDetailsButton.Name = "confirmDetailsButton";
this.confirmDetailsButton.Size = new System.Drawing.Size(1232, 136);
this.confirmDetailsButton.TabIndex = 3;
this.confirmDetailsButton.Text = "Confirm";
this.confirmDetailsButton.UseVisualStyleBackColor = true;
this.confirmDetailsButton.Click += new System.EventHandler(this.confirmButton_Click);
//
// ChargingDetails
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1920, 1080);
this.Controls.Add(this.panel1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.Name = "ChargingDetails";
this.Text = "ChargingDetails";
this.TopMost = true;
this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
this.panel1.ResumeLayout(false);
this.vehiclePanel.ResumeLayout(false);
this.vehiclePanel.PerformLayout();
this.infoPanel.ResumeLayout(false);
this.infoPanel.PerformLayout();
this.confirmPanel.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label durationLabel;
private System.Windows.Forms.Label powerLabel;
private System.Windows.Forms.Label bayLabel;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.Button confirmDetailsButton;
private System.Windows.Forms.Label label6;
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.TableLayoutPanel confirmPanel;
private System.Windows.Forms.TableLayoutPanel infoPanel;
private System.Windows.Forms.TableLayoutPanel vehiclePanel;
private System.Windows.Forms.Button backButton;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Button scooterButton;
private System.Windows.Forms.Button carButton;
private System.Windows.Forms.Button bikeButton;
}
}

View File

@@ -0,0 +1,120 @@
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 HCI_Coursework_EVCHARGE
{
public partial class ChargingDetails : Form
{
Pinpad pinpad;
String vehicle;
String duration;
String bayNo;
public ChargingDetails( int bayNo )
{
this.bayNo = bayNo.ToString();
InitializeComponent();
bayLabel.Text = "Bay " + this.bayNo;
}
public String[] getCarInfo( String vehicleType )
{
String[] max = {"",""};
switch (vehicleType)
{
case "car":
max[0] = ("7");
max[1] = ("8");
break;
case "e-bike":
max[0] = ("0.9");
max[1] = ("2");
break;
case "e-scooter":
max[0] = ("0.25");
max[1] = ("1");
break;
}
return max;
}
private void vehicleButton_Click( object sender, EventArgs e)
{
if ( sender is Button button)
{
carButton.BackColor = SystemColors.ActiveBorder;
bikeButton.BackColor = SystemColors.ActiveBorder;
scooterButton.BackColor = SystemColors.ActiveBorder;
vehicle = button.Text.ToLower();
String[] maxArr = getCarInfo(vehicle);
Console.WriteLine(maxArr[0], maxArr[1]);
if ( maxArr.Length > 0 )
{
powerLabel.Text = $"{maxArr[0]} kW";
durationLabel.Text = $"{maxArr[1]} hours";
}
button.BackColor = SystemColors.ControlDark;
infoPanel.Visible = true;
System.Threading.Thread.Sleep(100);
}
}
private void backButton_Click(object sender, EventArgs e)
{
pinpad?.Close();
Close();
}
private void confirmButton_Click(object sender, EventArgs e)
{
pinpad?.Close();
String maxDuration = getCarInfo(vehicle)[1];
if (Convert.ToInt16(textBox1.Text) > Convert.ToInt16(maxDuration))
{
MessageBox.Show($"Duration must be less than {maxDuration} hours.");
}
else
{
duration = textBox1.Text;
DialogResult confirm = MessageBox.Show($"Are you sure these details are correct?\nVehicle: {vehicle}\nDuration: {duration} hours?", "Confirm:", MessageBoxButtons.YesNo);
if (confirm == DialogResult.Yes)
{
Payment payment = new Payment(bayNo, vehicle, duration);
payment.Show();
payment.FormClosed += delegate
{
payment = null;
};
}
}
}
private void accountPin_Focus(object sender, EventArgs e)
{
TextBox textBox = (TextBox)sender;
if (pinpad == null)
{
pinpad = new Pinpad();
pinpad.FormClosed += delegate
{
if( textBox.Text != null )
{
confirmPanel.Visible = true;
}
pinpad = null;
this.ActiveControl = label1;
};
}
pinpad.setTextBox(textBox);
pinpad.Show();
pinpad.Top = this.Top + textBox.Top + textBox.Height - 250;
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -33,6 +33,15 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="AForge, Version=2.2.5.0, Culture=neutral, PublicKeyToken=c1db6ff4eaa06aeb, processorArchitecture=MSIL">
<HintPath>packages\AForge.2.2.5\lib\AForge.dll</HintPath>
</Reference>
<Reference Include="AForge.Video, Version=2.2.5.0, Culture=neutral, PublicKeyToken=cbfb6e07d173c401, processorArchitecture=MSIL">
<HintPath>packages\AForge.Video.2.2.5\lib\AForge.Video.dll</HintPath>
</Reference>
<Reference Include="AForge.Video.DirectShow, Version=2.2.5.0, Culture=neutral, PublicKeyToken=61ea4348d43881b7, processorArchitecture=MSIL">
<HintPath>packages\AForge.Video.DirectShow.2.2.5\lib\AForge.Video.DirectShow.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
@@ -44,36 +53,99 @@
<Reference Include="System.Net.Http" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="zxing, Version=0.16.6.0, Culture=neutral, PublicKeyToken=4e88037ac681fe60, processorArchitecture=MSIL">
<HintPath>packages\ZXing.Net.0.16.6\lib\net47\zxing.dll</HintPath>
</Reference>
<Reference Include="zxing.presentation, Version=0.16.6.0, Culture=neutral, PublicKeyToken=4e88037ac681fe60, processorArchitecture=MSIL">
<HintPath>packages\ZXing.Net.0.16.6\lib\net47\zxing.presentation.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="Form1.cs">
<Compile Include="BaySelection.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form1.Designer.cs">
<DependentUpon>Form1.cs</DependentUpon>
<Compile Include="BaySelection.Designer.cs">
<DependentUpon>BaySelection.cs</DependentUpon>
</Compile>
<Compile Include="Form2.cs">
<Compile Include="Charging.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form2.Designer.cs">
<DependentUpon>Form2.cs</DependentUpon>
<Compile Include="Charging.Designer.cs">
<DependentUpon>Charging.cs</DependentUpon>
</Compile>
<Compile Include="Form3.cs">
<Compile Include="ChargingDetails.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form3.Designer.cs">
<DependentUpon>Form3.cs</DependentUpon>
<Compile Include="ChargingDetails.Designer.cs">
<DependentUpon>ChargingDetails.cs</DependentUpon>
</Compile>
<Compile Include="LandingForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="LandingForm.Designer.cs">
<DependentUpon>LandingForm.cs</DependentUpon>
</Compile>
<Compile Include="LoginForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="LoginForm.Designer.cs">
<DependentUpon>LoginForm.cs</DependentUpon>
</Compile>
<Compile Include="Keyboard.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Keyboard.Designer.cs">
<DependentUpon>Keyboard.cs</DependentUpon>
</Compile>
<Compile Include="Payment.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Payment.Designer.cs">
<DependentUpon>Payment.cs</DependentUpon>
</Compile>
<Compile Include="Pinpad.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Pinpad.Designer.cs">
<DependentUpon>Pinpad.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="Form1.resx">
<DependentUpon>Form1.cs</DependentUpon>
<Compile Include="QRReader.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="QRReader.Designer.cs">
<DependentUpon>QRReader.cs</DependentUpon>
</Compile>
<Compile Include="TapCard.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="TapCard.Designer.cs">
<DependentUpon>TapCard.cs</DependentUpon>
</Compile>
<EmbeddedResource Include="BaySelection.resx">
<DependentUpon>BaySelection.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Form2.resx">
<DependentUpon>Form2.cs</DependentUpon>
<EmbeddedResource Include="Charging.resx">
<DependentUpon>Charging.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Form3.resx">
<DependentUpon>Form3.cs</DependentUpon>
<EmbeddedResource Include="ChargingDetails.resx">
<DependentUpon>ChargingDetails.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="LandingForm.resx">
<DependentUpon>LandingForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="LoginForm.resx">
<DependentUpon>LoginForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Keyboard.resx">
<DependentUpon>Keyboard.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Payment.resx">
<DependentUpon>Payment.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Pinpad.resx">
<DependentUpon>Pinpad.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
@@ -83,7 +155,15 @@
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<EmbeddedResource Include="QRReader.resx">
<DependentUpon>QRReader.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="TapCard.resx">
<DependentUpon>TapCard.cs</DependentUpon>
</EmbeddedResource>
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
@@ -97,5 +177,8 @@
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<Resource Include="Assets\contactless.png" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View File

@@ -476,19 +476,22 @@
this.buttonConfirm.TabIndex = 28;
this.buttonConfirm.Text = "Confirm";
this.buttonConfirm.UseVisualStyleBackColor = true;
this.buttonConfirm.Click += new System.EventHandler(this.confirm_Click);
//
// buttonCaps
//
this.buttonCaps.BackColor = System.Drawing.SystemColors.ControlDark;
this.buttonCaps.FlatAppearance.BorderColor = System.Drawing.Color.Silver;
this.buttonCaps.FlatAppearance.BorderSize = 4;
this.buttonCaps.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
this.buttonCaps.Font = new System.Drawing.Font("Microsoft Sans Serif", 16F);
this.buttonCaps.ForeColor = System.Drawing.SystemColors.ControlText;
this.buttonCaps.Location = new System.Drawing.Point(18, 312);
this.buttonCaps.Name = "buttonCaps";
this.buttonCaps.Size = new System.Drawing.Size(128, 50);
this.buttonCaps.TabIndex = 29;
this.buttonCaps.Text = "Caps Lock";
this.buttonCaps.UseVisualStyleBackColor = true;
this.buttonCaps.UseVisualStyleBackColor = false;
this.buttonCaps.Click += new System.EventHandler(this.caps_Click);
//
// panel1
@@ -552,6 +555,7 @@
this.button0.TabIndex = 39;
this.button0.Text = "0";
this.button0.UseVisualStyleBackColor = true;
this.button0.Click += new System.EventHandler(this.button_Click);
//
// button9
//
@@ -565,6 +569,7 @@
this.button9.TabIndex = 38;
this.button9.Text = "9";
this.button9.UseVisualStyleBackColor = true;
this.button9.Click += new System.EventHandler(this.button_Click);
//
// button8
//
@@ -578,6 +583,7 @@
this.button8.TabIndex = 37;
this.button8.Text = "8";
this.button8.UseVisualStyleBackColor = true;
this.button8.Click += new System.EventHandler(this.button_Click);
//
// button7
//
@@ -591,6 +597,7 @@
this.button7.TabIndex = 36;
this.button7.Text = "7";
this.button7.UseVisualStyleBackColor = true;
this.button7.Click += new System.EventHandler(this.button_Click);
//
// button6
//
@@ -604,6 +611,7 @@
this.button6.TabIndex = 35;
this.button6.Text = "6";
this.button6.UseVisualStyleBackColor = true;
this.button6.Click += new System.EventHandler(this.button_Click);
//
// button5
//
@@ -617,6 +625,7 @@
this.button5.TabIndex = 34;
this.button5.Text = "5";
this.button5.UseVisualStyleBackColor = true;
this.button5.Click += new System.EventHandler(this.button_Click);
//
// button4
//
@@ -630,6 +639,7 @@
this.button4.TabIndex = 33;
this.button4.Text = "4";
this.button4.UseVisualStyleBackColor = true;
this.button4.Click += new System.EventHandler(this.button_Click);
//
// button3
//
@@ -643,6 +653,7 @@
this.button3.TabIndex = 32;
this.button3.Text = "3";
this.button3.UseVisualStyleBackColor = true;
this.button3.Click += new System.EventHandler(this.button_Click);
//
// button2
//
@@ -656,6 +667,7 @@
this.button2.TabIndex = 31;
this.button2.Text = "2";
this.button2.UseVisualStyleBackColor = true;
this.button2.Click += new System.EventHandler(this.button_Click);
//
// button1
//
@@ -669,6 +681,7 @@
this.button1.TabIndex = 30;
this.button1.Text = "1";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button_Click);
//
// Keyboard
//

View File

@@ -31,14 +31,22 @@ namespace HCI_Coursework_EVCHARGE
private void button_Click(object sender, EventArgs e)
{
if( capsLock == true )
if (entryBox.Text.Length < 10)
{
entryBox.Text += ((Button)sender).Text;
if (capsLock == true)
{
entryBox.Text += ((Button)sender).Text;
}
else
{
entryBox.Text += ((Button)sender).Text.ToLower();
}
}
else
{
entryBox.Text += ((Button)sender).Text.ToLower();
MessageBox.Show("Account Number cannot be more than 10 characters!");
}
}
private void backspace_Click(object sender, EventArgs e)
@@ -58,12 +66,19 @@ namespace HCI_Coursework_EVCHARGE
{
if ( capsLock == true )
{
buttonCaps.BackColor = SystemColors.Control;
capsLock = false;
}
else
{
buttonCaps.BackColor = SystemColors.ControlDark;
capsLock = true;
}
}
private void confirm_Click(object sender, EventArgs e)
{
Close();
}
}
}

View File

@@ -37,11 +37,13 @@
//
// accountNoButton
//
this.accountNoButton.Anchor = System.Windows.Forms.AnchorStyles.None;
this.accountNoButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 18F);
this.accountNoButton.Location = new System.Drawing.Point(220, 232);
this.accountNoButton.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.accountNoButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 24F);
this.accountNoButton.Location = new System.Drawing.Point(544, 664);
this.accountNoButton.Name = "accountNoButton";
this.accountNoButton.Size = new System.Drawing.Size(144, 96);
this.accountNoButton.Size = new System.Drawing.Size(318, 172);
this.accountNoButton.TabIndex = 0;
this.accountNoButton.Text = "Account Number";
this.accountNoButton.UseVisualStyleBackColor = true;
@@ -49,25 +51,30 @@
//
// qrCodeButton
//
this.qrCodeButton.Anchor = System.Windows.Forms.AnchorStyles.None;
this.qrCodeButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 18F);
this.qrCodeButton.Location = new System.Drawing.Point(504, 232);
this.qrCodeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.qrCodeButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 24F);
this.qrCodeButton.Location = new System.Drawing.Point(1096, 664);
this.qrCodeButton.Name = "qrCodeButton";
this.qrCodeButton.Size = new System.Drawing.Size(144, 96);
this.qrCodeButton.Size = new System.Drawing.Size(318, 172);
this.qrCodeButton.TabIndex = 1;
this.qrCodeButton.Text = "Account Card";
this.qrCodeButton.UseVisualStyleBackColor = true;
this.qrCodeButton.Click += new System.EventHandler(this.qr_Click);
//
// loginLabel
//
this.loginLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
this.loginLabel.AutoSize = true;
this.loginLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 34F);
this.loginLabel.Location = new System.Drawing.Point(360, 144);
this.loginLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 50F);
this.loginLabel.Location = new System.Drawing.Point(19, 436);
this.loginLabel.MinimumSize = new System.Drawing.Size(1920, 0);
this.loginLabel.Name = "loginLabel";
this.loginLabel.Size = new System.Drawing.Size(149, 53);
this.loginLabel.Size = new System.Drawing.Size(1920, 76);
this.loginLabel.TabIndex = 2;
this.loginLabel.Text = "Log in";
this.loginLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.loginLabel.Click += new System.EventHandler(this.loginLabel_Click);
//
// panel1
@@ -77,18 +84,18 @@
| System.Windows.Forms.AnchorStyles.Right)));
this.panel1.BackColor = System.Drawing.SystemColors.Control;
this.panel1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.panel1.Controls.Add(this.loginLabel);
this.panel1.Controls.Add(this.qrCodeButton);
this.panel1.Controls.Add(this.accountNoButton);
this.panel1.Controls.Add(this.qrCodeButton);
this.panel1.Controls.Add(this.loginLabel);
this.panel1.Location = new System.Drawing.Point(0, 0);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(854, 480);
this.panel1.Size = new System.Drawing.Size(1920, 1080);
this.panel1.TabIndex = 3;
//
// LandingForm
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.ClientSize = new System.Drawing.Size(854, 480);
this.ClientSize = new System.Drawing.Size(1920, 1080);
this.Controls.Add(this.panel1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.Name = "LandingForm";

View File

@@ -26,9 +26,29 @@ namespace HCI_Coursework_EVCHARGE
{
var loginForm = new AccountDetailForm();
loginForm.Show();
loginForm.FormClosed += delegate
{
loginForm = null;
};
//loginForm.Top = this.Top + ( loginForm.Height / 3 );
//loginForm.Left = this.Left + ( ( this.Width * 3 ) / 7 );
}
private void debugclose_click(object sender, EventArgs e)
{
Application.Exit();
}
private void qr_Click(object sender, EventArgs e)
{
var loginForm = new QRReader();
loginForm.Show();
loginForm.FormClosed += delegate
{
loginForm = null;
};
}
}
}

View File

@@ -29,13 +29,13 @@
private void InitializeComponent()
{
this.panel1 = new System.Windows.Forms.Panel();
this.accountNoTextBox = new System.Windows.Forms.TextBox();
this.loginLabel = new System.Windows.Forms.Label();
this.textBox1 = new System.Windows.Forms.TextBox();
this.confirmLoginButton = new System.Windows.Forms.Button();
this.cancelLoginButton = new System.Windows.Forms.Button();
this.accountIDLabel = new System.Windows.Forms.Label();
this.label1 = new System.Windows.Forms.Label();
this.accountIDLabel = new System.Windows.Forms.Label();
this.cancelLoginButton = new System.Windows.Forms.Button();
this.confirmLoginButton = new System.Windows.Forms.Button();
this.accountPinTextBox = new System.Windows.Forms.TextBox();
this.loginLabel = new System.Windows.Forms.Label();
this.accountNoTextBox = new System.Windows.Forms.TextBox();
this.panel1.SuspendLayout();
this.SuspendLayout();
//
@@ -47,7 +47,7 @@
this.panel1.Controls.Add(this.accountIDLabel);
this.panel1.Controls.Add(this.cancelLoginButton);
this.panel1.Controls.Add(this.confirmLoginButton);
this.panel1.Controls.Add(this.textBox1);
this.panel1.Controls.Add(this.accountPinTextBox);
this.panel1.Controls.Add(this.loginLabel);
this.panel1.Controls.Add(this.accountNoTextBox);
this.panel1.Location = new System.Drawing.Point(0, 0);
@@ -55,6 +55,74 @@
this.panel1.Size = new System.Drawing.Size(456, 544);
this.panel1.TabIndex = 0;
//
// label1
//
this.label1.AutoSize = true;
this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 16F);
this.label1.Location = new System.Drawing.Point(88, 256);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(49, 26);
this.label1.TabIndex = 6;
this.label1.Text = "PIN";
//
// accountIDLabel
//
this.accountIDLabel.AutoSize = true;
this.accountIDLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 16F);
this.accountIDLabel.Location = new System.Drawing.Point(88, 152);
this.accountIDLabel.Name = "accountIDLabel";
this.accountIDLabel.Size = new System.Drawing.Size(119, 26);
this.accountIDLabel.TabIndex = 5;
this.accountIDLabel.Text = "Account ID";
//
// cancelLoginButton
//
this.cancelLoginButton.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
this.cancelLoginButton.Location = new System.Drawing.Point(264, 392);
this.cancelLoginButton.Name = "cancelLoginButton";
this.cancelLoginButton.Size = new System.Drawing.Size(150, 75);
this.cancelLoginButton.TabIndex = 4;
this.cancelLoginButton.Text = "Cancel";
this.cancelLoginButton.UseVisualStyleBackColor = true;
this.cancelLoginButton.Click += new System.EventHandler(this.cancel_Click);
//
// confirmLoginButton
//
this.confirmLoginButton.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
this.confirmLoginButton.Location = new System.Drawing.Point(40, 392);
this.confirmLoginButton.Name = "confirmLoginButton";
this.confirmLoginButton.Size = new System.Drawing.Size(150, 75);
this.confirmLoginButton.TabIndex = 3;
this.confirmLoginButton.Text = "Login";
this.confirmLoginButton.UseVisualStyleBackColor = true;
this.confirmLoginButton.Click += new System.EventHandler(this.login_Click);
//
// accountPinTextBox
//
this.accountPinTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
this.accountPinTextBox.BackColor = System.Drawing.SystemColors.Window;
this.accountPinTextBox.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.accountPinTextBox.Cursor = System.Windows.Forms.Cursors.IBeam;
this.accountPinTextBox.Font = new System.Drawing.Font("Microsoft Sans Serif", 18F);
this.accountPinTextBox.Location = new System.Drawing.Point(80, 288);
this.accountPinTextBox.MaxLength = 6;
this.accountPinTextBox.Name = "accountPinTextBox";
this.accountPinTextBox.PasswordChar = '*';
this.accountPinTextBox.Size = new System.Drawing.Size(288, 35);
this.accountPinTextBox.TabIndex = 2;
this.accountPinTextBox.Enter += new System.EventHandler(this.accountPin_Focus);
//
// loginLabel
//
this.loginLabel.Anchor = System.Windows.Forms.AnchorStyles.Top;
this.loginLabel.AutoSize = true;
this.loginLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 22F);
this.loginLabel.Location = new System.Drawing.Point(120, 72);
this.loginLabel.Name = "loginLabel";
this.loginLabel.Size = new System.Drawing.Size(208, 36);
this.loginLabel.TabIndex = 1;
this.loginLabel.Text = "Account Login";
//
// accountNoTextBox
//
this.accountNoTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
@@ -68,71 +136,7 @@
this.accountNoTextBox.Size = new System.Drawing.Size(288, 35);
this.accountNoTextBox.TabIndex = 0;
this.accountNoTextBox.Enter += new System.EventHandler(this.accountNo_Focus);
//
// loginLabel
//
this.loginLabel.Anchor = System.Windows.Forms.AnchorStyles.Top;
this.loginLabel.AutoSize = true;
this.loginLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 22F);
this.loginLabel.Location = new System.Drawing.Point(120, 72);
this.loginLabel.Name = "loginLabel";
this.loginLabel.Size = new System.Drawing.Size(208, 36);
this.loginLabel.TabIndex = 1;
this.loginLabel.Text = "Account Login";
//
// textBox1
//
this.textBox1.Anchor = System.Windows.Forms.AnchorStyles.None;
this.textBox1.BackColor = System.Drawing.SystemColors.Window;
this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.textBox1.Cursor = System.Windows.Forms.Cursors.IBeam;
this.textBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 18F);
this.textBox1.Location = new System.Drawing.Point(80, 288);
this.textBox1.MaxLength = 6;
this.textBox1.Name = "textBox1";
this.textBox1.PasswordChar = '*';
this.textBox1.Size = new System.Drawing.Size(288, 35);
this.textBox1.TabIndex = 2;
//
// confirmLoginButton
//
this.confirmLoginButton.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
this.confirmLoginButton.Location = new System.Drawing.Point(40, 392);
this.confirmLoginButton.Name = "confirmLoginButton";
this.confirmLoginButton.Size = new System.Drawing.Size(150, 75);
this.confirmLoginButton.TabIndex = 3;
this.confirmLoginButton.Text = "Login";
this.confirmLoginButton.UseVisualStyleBackColor = true;
//
// cancelLoginButton
//
this.cancelLoginButton.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
this.cancelLoginButton.Location = new System.Drawing.Point(264, 392);
this.cancelLoginButton.Name = "cancelLoginButton";
this.cancelLoginButton.Size = new System.Drawing.Size(150, 75);
this.cancelLoginButton.TabIndex = 4;
this.cancelLoginButton.Text = "Cancel";
this.cancelLoginButton.UseVisualStyleBackColor = true;
//
// accountIDLabel
//
this.accountIDLabel.AutoSize = true;
this.accountIDLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 16F);
this.accountIDLabel.Location = new System.Drawing.Point(88, 152);
this.accountIDLabel.Name = "accountIDLabel";
this.accountIDLabel.Size = new System.Drawing.Size(119, 26);
this.accountIDLabel.TabIndex = 5;
this.accountIDLabel.Text = "Account ID";
//
// label1
//
this.label1.AutoSize = true;
this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 16F);
this.label1.Location = new System.Drawing.Point(88, 256);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(49, 26);
this.label1.TabIndex = 6;
this.label1.Text = "PIN";
this.accountNoTextBox.Leave += new System.EventHandler(this.accountNo_LoseFocus);
//
// AccountDetailForm
//
@@ -158,7 +162,7 @@
private System.Windows.Forms.Label accountIDLabel;
private System.Windows.Forms.Button cancelLoginButton;
private System.Windows.Forms.Button confirmLoginButton;
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.TextBox accountPinTextBox;
private System.Windows.Forms.Label label1;
}
}

View File

@@ -15,6 +15,7 @@ namespace HCI_Coursework_EVCHARGE
public partial class AccountDetailForm : Form
{
Keyboard keyboard;
Pinpad pinpad;
public AccountDetailForm()
{
InitializeComponent();
@@ -42,5 +43,64 @@ namespace HCI_Coursework_EVCHARGE
keyboard.Top = this.Top + textBox.Top + textBox.Height + 30;
}
private void accountPin_Focus(object sender, EventArgs e) {
TextBox textBox = (TextBox)sender;
if ( pinpad == null )
{
pinpad = new Pinpad();
pinpad.FormClosed += delegate
{
pinpad = null;
this.ActiveControl = loginLabel;
};
}
pinpad.setTextBox(textBox);
pinpad.Show();
pinpad.Top = this.Top + textBox.Top + textBox.Height + 30;
}
private void cancel_Click(object sender, EventArgs e)
{
keyboard?.Close();
pinpad?.Close();
Close();
}
private void login_Click(object sender, EventArgs e)
{
if ( accountNoTextBox.Text == "" )
{
if ( accountPinTextBox.Text == "" )
{
BaySelection baySelection = new BaySelection( accountNoTextBox.Text );
baySelection.Show();
baySelection.FormClosed += delegate
{
baySelection = null;
};
Close();
}
}
}
private void accountNo_LoseFocus(object sender, EventArgs e)
{
if (keyboard != null)
{
keyboard.Close();
}
}
private void accountPin_LoseFocus(Object sender, EventArgs e)
{
if (pinpad != null )
{
pinpad.Close();
}
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,116 @@
namespace HCI_Coursework_EVCHARGE
{
partial class Payment
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.loginLabel = new System.Windows.Forms.Label();
this.qrCodeButton = new System.Windows.Forms.Button();
this.accountNoButton = new System.Windows.Forms.Button();
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.tableLayoutPanel1.SuspendLayout();
this.SuspendLayout();
//
// loginLabel
//
this.loginLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
this.loginLabel.AutoSize = true;
this.loginLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 34F);
this.loginLabel.Location = new System.Drawing.Point(0, 456);
this.loginLabel.MinimumSize = new System.Drawing.Size(1920, 0);
this.loginLabel.Name = "loginLabel";
this.loginLabel.Size = new System.Drawing.Size(1920, 53);
this.loginLabel.TabIndex = 3;
this.loginLabel.Text = "Choose a Payment Method";
this.loginLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// qrCodeButton
//
this.qrCodeButton.Dock = System.Windows.Forms.DockStyle.Left;
this.qrCodeButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 18F);
this.qrCodeButton.Location = new System.Drawing.Point(1042, 3);
this.qrCodeButton.Margin = new System.Windows.Forms.Padding(90, 3, 3, 3);
this.qrCodeButton.Name = "qrCodeButton";
this.qrCodeButton.Size = new System.Drawing.Size(144, 114);
this.qrCodeButton.TabIndex = 5;
this.qrCodeButton.Text = "Tap Payment Card";
this.qrCodeButton.UseVisualStyleBackColor = true;
this.qrCodeButton.Click += new System.EventHandler(this.tapButton_Click);
//
// accountNoButton
//
this.accountNoButton.Dock = System.Windows.Forms.DockStyle.Right;
this.accountNoButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 18F);
this.accountNoButton.Location = new System.Drawing.Point(718, 3);
this.accountNoButton.Margin = new System.Windows.Forms.Padding(3, 3, 90, 3);
this.accountNoButton.Name = "accountNoButton";
this.accountNoButton.Size = new System.Drawing.Size(144, 114);
this.accountNoButton.TabIndex = 4;
this.accountNoButton.Text = "Account Credit";
this.accountNoButton.UseVisualStyleBackColor = true;
//
// tableLayoutPanel1
//
this.tableLayoutPanel1.ColumnCount = 2;
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel1.Controls.Add(this.qrCodeButton, 1, 0);
this.tableLayoutPanel1.Controls.Add(this.accountNoButton, 0, 0);
this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 632);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
this.tableLayoutPanel1.RowCount = 1;
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
this.tableLayoutPanel1.Size = new System.Drawing.Size(1904, 120);
this.tableLayoutPanel1.TabIndex = 6;
//
// Payment
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1904, 1041);
this.Controls.Add(this.tableLayoutPanel1);
this.Controls.Add(this.loginLabel);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.Name = "Payment";
this.Text = "Payment";
this.TopMost = true;
this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
this.tableLayoutPanel1.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label loginLabel;
private System.Windows.Forms.Button qrCodeButton;
private System.Windows.Forms.Button accountNoButton;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
}
}

View File

@@ -0,0 +1,37 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.Remoting.Metadata.W3cXsd2001;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace HCI_Coursework_EVCHARGE
{
public partial class Payment : Form
{
String bay;
String vehicle;
String duration;
public Payment( String bay, String vehicle, String duration)
{
InitializeComponent();
this.bay = bay;
this.vehicle = vehicle;
this.duration = duration;
}
private void tapButton_Click(object sender, EventArgs e)
{
TapCard tapCard = new TapCard( bay, vehicle, duration );
tapCard.Show();
tapCard.FormClosed += delegate
{
tapCard = null;
};
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

264
HCI_Coursework_EVCHARGE/Pinpad.Designer.cs generated Normal file
View File

@@ -0,0 +1,264 @@
namespace HCI_Coursework_EVCHARGE
{
partial class Pinpad
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.button1 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
this.button3 = new System.Windows.Forms.Button();
this.button4 = new System.Windows.Forms.Button();
this.button5 = new System.Windows.Forms.Button();
this.button6 = new System.Windows.Forms.Button();
this.button7 = new System.Windows.Forms.Button();
this.button8 = new System.Windows.Forms.Button();
this.button9 = new System.Windows.Forms.Button();
this.button0 = new System.Windows.Forms.Button();
this.buttonConfirm = new System.Windows.Forms.Button();
this.buttonBack = new System.Windows.Forms.Button();
this.panel1 = new System.Windows.Forms.Panel();
this.SuspendLayout();
//
// button1
//
this.button1.FlatAppearance.BorderColor = System.Drawing.Color.Silver;
this.button1.FlatAppearance.BorderSize = 4;
this.button1.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
this.button1.Font = new System.Drawing.Font("Microsoft Sans Serif", 18F);
this.button1.Location = new System.Drawing.Point(16, 16);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(50, 50);
this.button1.TabIndex = 31;
this.button1.Text = "1";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button_Click);
//
// button2
//
this.button2.FlatAppearance.BorderColor = System.Drawing.Color.Silver;
this.button2.FlatAppearance.BorderSize = 4;
this.button2.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
this.button2.Font = new System.Drawing.Font("Microsoft Sans Serif", 18F);
this.button2.Location = new System.Drawing.Point(88, 16);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(50, 50);
this.button2.TabIndex = 32;
this.button2.Text = "2";
this.button2.UseVisualStyleBackColor = true;
this.button2.Click += new System.EventHandler(this.button_Click);
//
// button3
//
this.button3.FlatAppearance.BorderColor = System.Drawing.Color.Silver;
this.button3.FlatAppearance.BorderSize = 4;
this.button3.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
this.button3.Font = new System.Drawing.Font("Microsoft Sans Serif", 18F);
this.button3.Location = new System.Drawing.Point(160, 16);
this.button3.Name = "button3";
this.button3.Size = new System.Drawing.Size(50, 50);
this.button3.TabIndex = 33;
this.button3.Text = "3";
this.button3.UseVisualStyleBackColor = true;
this.button3.Click += new System.EventHandler(this.button_Click);
//
// button4
//
this.button4.FlatAppearance.BorderColor = System.Drawing.Color.Silver;
this.button4.FlatAppearance.BorderSize = 4;
this.button4.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
this.button4.Font = new System.Drawing.Font("Microsoft Sans Serif", 18F);
this.button4.Location = new System.Drawing.Point(16, 88);
this.button4.Name = "button4";
this.button4.Size = new System.Drawing.Size(50, 50);
this.button4.TabIndex = 34;
this.button4.Text = "4";
this.button4.UseVisualStyleBackColor = true;
this.button4.Click += new System.EventHandler(this.button_Click);
//
// button5
//
this.button5.FlatAppearance.BorderColor = System.Drawing.Color.Silver;
this.button5.FlatAppearance.BorderSize = 4;
this.button5.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
this.button5.Font = new System.Drawing.Font("Microsoft Sans Serif", 18F);
this.button5.Location = new System.Drawing.Point(88, 88);
this.button5.Name = "button5";
this.button5.Size = new System.Drawing.Size(50, 50);
this.button5.TabIndex = 35;
this.button5.Text = "5";
this.button5.UseVisualStyleBackColor = true;
this.button5.Click += new System.EventHandler(this.button_Click);
//
// button6
//
this.button6.FlatAppearance.BorderColor = System.Drawing.Color.Silver;
this.button6.FlatAppearance.BorderSize = 4;
this.button6.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
this.button6.Font = new System.Drawing.Font("Microsoft Sans Serif", 18F);
this.button6.Location = new System.Drawing.Point(160, 88);
this.button6.Name = "button6";
this.button6.Size = new System.Drawing.Size(50, 50);
this.button6.TabIndex = 36;
this.button6.Text = "6";
this.button6.UseVisualStyleBackColor = true;
this.button6.Click += new System.EventHandler(this.button_Click);
//
// button7
//
this.button7.FlatAppearance.BorderColor = System.Drawing.Color.Silver;
this.button7.FlatAppearance.BorderSize = 4;
this.button7.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
this.button7.Font = new System.Drawing.Font("Microsoft Sans Serif", 18F);
this.button7.Location = new System.Drawing.Point(16, 160);
this.button7.Name = "button7";
this.button7.Size = new System.Drawing.Size(50, 50);
this.button7.TabIndex = 37;
this.button7.Text = "7";
this.button7.UseVisualStyleBackColor = true;
this.button7.Click += new System.EventHandler(this.button_Click);
//
// button8
//
this.button8.FlatAppearance.BorderColor = System.Drawing.Color.Silver;
this.button8.FlatAppearance.BorderSize = 4;
this.button8.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
this.button8.Font = new System.Drawing.Font("Microsoft Sans Serif", 18F);
this.button8.Location = new System.Drawing.Point(88, 160);
this.button8.Name = "button8";
this.button8.Size = new System.Drawing.Size(50, 50);
this.button8.TabIndex = 38;
this.button8.Text = "8";
this.button8.UseVisualStyleBackColor = true;
this.button8.Click += new System.EventHandler(this.button_Click);
//
// button9
//
this.button9.FlatAppearance.BorderColor = System.Drawing.Color.Silver;
this.button9.FlatAppearance.BorderSize = 4;
this.button9.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
this.button9.Font = new System.Drawing.Font("Microsoft Sans Serif", 18F);
this.button9.Location = new System.Drawing.Point(160, 160);
this.button9.Name = "button9";
this.button9.Size = new System.Drawing.Size(50, 50);
this.button9.TabIndex = 39;
this.button9.Text = "9";
this.button9.UseVisualStyleBackColor = true;
this.button9.Click += new System.EventHandler(this.button_Click);
//
// button0
//
this.button0.FlatAppearance.BorderColor = System.Drawing.Color.Silver;
this.button0.FlatAppearance.BorderSize = 4;
this.button0.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
this.button0.Font = new System.Drawing.Font("Microsoft Sans Serif", 18F);
this.button0.Location = new System.Drawing.Point(88, 232);
this.button0.Name = "button0";
this.button0.Size = new System.Drawing.Size(50, 50);
this.button0.TabIndex = 40;
this.button0.Text = "0";
this.button0.UseVisualStyleBackColor = true;
this.button0.Click += new System.EventHandler(this.button_Click);
//
// buttonConfirm
//
this.buttonConfirm.FlatAppearance.BorderColor = System.Drawing.Color.Silver;
this.buttonConfirm.FlatAppearance.BorderSize = 4;
this.buttonConfirm.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
this.buttonConfirm.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F);
this.buttonConfirm.Location = new System.Drawing.Point(16, 304);
this.buttonConfirm.Name = "buttonConfirm";
this.buttonConfirm.Size = new System.Drawing.Size(192, 50);
this.buttonConfirm.TabIndex = 41;
this.buttonConfirm.Text = "Confirm";
this.buttonConfirm.UseVisualStyleBackColor = true;
this.buttonConfirm.Click += new System.EventHandler(this.confirm_Click);
//
// buttonBack
//
this.buttonBack.FlatAppearance.BorderColor = System.Drawing.Color.Silver;
this.buttonBack.FlatAppearance.BorderSize = 4;
this.buttonBack.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
this.buttonBack.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F);
this.buttonBack.Location = new System.Drawing.Point(160, 232);
this.buttonBack.Name = "buttonBack";
this.buttonBack.Size = new System.Drawing.Size(48, 50);
this.buttonBack.TabIndex = 42;
this.buttonBack.Text = "|<-";
this.buttonBack.UseVisualStyleBackColor = true;
this.buttonBack.Click += new System.EventHandler(this.backspace_Click);
//
// panel1
//
this.panel1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.panel1.Location = new System.Drawing.Point(0, 0);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(225, 370);
this.panel1.TabIndex = 43;
//
// Pinpad
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(225, 370);
this.Controls.Add(this.buttonBack);
this.Controls.Add(this.buttonConfirm);
this.Controls.Add(this.button0);
this.Controls.Add(this.button9);
this.Controls.Add(this.button8);
this.Controls.Add(this.button7);
this.Controls.Add(this.button6);
this.Controls.Add(this.button5);
this.Controls.Add(this.button4);
this.Controls.Add(this.button3);
this.Controls.Add(this.button2);
this.Controls.Add(this.button1);
this.Controls.Add(this.panel1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.Name = "Pinpad";
this.Text = "Enter PIN";
this.TopMost = true;
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.Button button3;
private System.Windows.Forms.Button button4;
private System.Windows.Forms.Button button5;
private System.Windows.Forms.Button button6;
private System.Windows.Forms.Button button7;
private System.Windows.Forms.Button button8;
private System.Windows.Forms.Button button9;
private System.Windows.Forms.Button button0;
private System.Windows.Forms.Button buttonConfirm;
private System.Windows.Forms.Button buttonBack;
private System.Windows.Forms.Panel panel1;
}
}

View File

@@ -0,0 +1,55 @@
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 HCI_Coursework_EVCHARGE
{
public partial class Pinpad : Form
{
TextBox entryBox;
public Pinpad()
{
InitializeComponent();
this.TopMost = true;
StartPosition = FormStartPosition.CenterScreen;
}
public void setTextBox(TextBox textBox)
{
entryBox = textBox;
}
private void backspace_Click(object sender, EventArgs e)
{
if (entryBox.Text.Length > 0)
{
entryBox.Text = entryBox.Text.Substring(0, entryBox.Text.Length - 1);
}
}
private void confirm_Click(object sender, EventArgs e)
{
Close();
}
private void button_Click(object sender, EventArgs e)
{
if ( entryBox.Text.Length < 6 )
{
entryBox.Text += ((Button)sender).Text;
}
else
{
MessageBox.Show("PIN cannot be more than 6 numbers!");
}
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -8,10 +8,10 @@
// </auto-generated>
//------------------------------------------------------------------------------
namespace HCI_Coursework_EVCHARGE.Properties
{
namespace HCI_Coursework_EVCHARGE.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
@@ -19,53 +19,55 @@ namespace HCI_Coursework_EVCHARGE.Properties
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources
{
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources()
{
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager
{
get
{
if ((resourceMan == null))
{
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HCI_Coursework_EVCHARGE.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture
{
get
{
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set
{
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap contactless {
get {
object obj = ResourceManager.GetObject("contactless", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
}
}

View File

@@ -46,7 +46,7 @@
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
@@ -60,6 +60,7 @@
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
@@ -68,9 +69,10 @@
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
@@ -85,9 +87,10 @@
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
@@ -109,9 +112,13 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="contactless" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Assets\contactless.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

View File

@@ -0,0 +1,121 @@
namespace HCI_Coursework_EVCHARGE
{
partial class QRReader
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.cboCamera = new System.Windows.Forms.ComboBox();
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.timer1 = new System.Windows.Forms.Timer(this.components);
this.panel1 = new System.Windows.Forms.Panel();
this.cancelButton = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.panel1.SuspendLayout();
this.SuspendLayout();
//
// cboCamera
//
this.cboCamera.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.cboCamera.FormattingEnabled = true;
this.cboCamera.Location = new System.Drawing.Point(346, 26);
this.cboCamera.Name = "cboCamera";
this.cboCamera.Size = new System.Drawing.Size(252, 32);
this.cboCamera.TabIndex = 0;
this.cboCamera.Visible = false;
//
// pictureBox1
//
this.pictureBox1.BackColor = System.Drawing.SystemColors.ActiveCaptionText;
this.pictureBox1.Dock = System.Windows.Forms.DockStyle.Fill;
this.pictureBox1.Location = new System.Drawing.Point(0, 0);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(852, 478);
this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.pictureBox1.TabIndex = 2;
this.pictureBox1.TabStop = false;
//
// timer1
//
this.timer1.Interval = 1000;
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
//
// panel1
//
this.panel1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.panel1.Controls.Add(this.cancelButton);
this.panel1.Controls.Add(this.pictureBox1);
this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel1.Location = new System.Drawing.Point(0, 0);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(854, 480);
this.panel1.TabIndex = 3;
//
// cancelButton
//
this.cancelButton.BackColor = System.Drawing.Color.LightGray;
this.cancelButton.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
this.cancelButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 17F);
this.cancelButton.ForeColor = System.Drawing.Color.Black;
this.cancelButton.Location = new System.Drawing.Point(312, 424);
this.cancelButton.Name = "cancelButton";
this.cancelButton.Size = new System.Drawing.Size(232, 55);
this.cancelButton.TabIndex = 3;
this.cancelButton.Text = "Cancel";
this.cancelButton.UseVisualStyleBackColor = false;
this.cancelButton.Click += new System.EventHandler(this.cancel_Click);
//
// QRReader
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(854, 480);
this.Controls.Add(this.panel1);
this.Controls.Add(this.cboCamera);
this.Cursor = System.Windows.Forms.Cursors.Default;
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.Name = "QRReader";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "Form1";
this.TopMost = true;
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing);
this.Load += new System.EventHandler(this.Form1_Load);
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
this.panel1.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.ComboBox cboCamera;
private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.Timer timer1;
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.Button cancelButton;
}
}

View File

@@ -0,0 +1,84 @@
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;
// include the libraries
using AForge.Video;
using AForge.Video.DirectShow;
using ZXing;
namespace HCI_Coursework_EVCHARGE
{
public partial class QRReader : Form
{
// foxlearn.com/windows-forms/qr-code-scanner-using-camera-in-csharp-380.html
FilterInfoCollection filterInfoCollection;
VideoCaptureDevice videoCaptureDevice;
public QRReader()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// this will list the available cameras
filterInfoCollection = new FilterInfoCollection(FilterCategory.VideoInputDevice);
foreach (FilterInfo Device in filterInfoCollection)
cboCamera.Items.Add(Device.Name);
cboCamera.SelectedIndex = 0;
// start the camera device
videoCaptureDevice = new VideoCaptureDevice(filterInfoCollection[cboCamera.SelectedIndex].MonikerString);
videoCaptureDevice.NewFrame += FinalFrame_NewFrame;
videoCaptureDevice.Start();
timer1.Start();
}
private void FinalFrame_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
// show the video in the picturebox
pictureBox1.Image = (Bitmap)eventArgs.Frame.Clone();
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
// close the camera device when the app is closed
if (videoCaptureDevice.IsRunning == true)
videoCaptureDevice.Stop();
}
private void timer1_Tick(object sender, EventArgs e)
{
// try and detect a barcode/qrcode in the image frame
BarcodeReader Reader = new BarcodeReader();
Result result = Reader.Decode((Bitmap)pictureBox1.Image);
if (result != null && result.Text == "AB87654321")
{
BaySelection baySelection = new BaySelection(result.Text);
baySelection.Show();
baySelection.FormClosed += delegate
{
baySelection = null;
};
Close();
}
}
private void cancel_Click(object sender, EventArgs e)
{
Close();
}
}
}

View File

@@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

View File

@@ -0,0 +1,121 @@
namespace HCI_Coursework_EVCHARGE
{
partial class TapCard
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TapCard));
this.label1 = new System.Windows.Forms.Label();
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.button1 = new System.Windows.Forms.Button();
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.tableLayoutPanel1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.SuspendLayout();
//
// label1
//
this.label1.AutoSize = true;
this.label1.Dock = System.Windows.Forms.DockStyle.Fill;
this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 22F);
this.label1.Location = new System.Drawing.Point(3, 0);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(378, 92);
this.label1.TabIndex = 0;
this.label1.Text = "Present Payment Card";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// tableLayoutPanel1
//
this.tableLayoutPanel1.ColumnCount = 1;
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.tableLayoutPanel1.Controls.Add(this.label1, 0, 0);
this.tableLayoutPanel1.Controls.Add(this.button1, 0, 4);
this.tableLayoutPanel1.Controls.Add(this.pictureBox1, 0, 2);
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
this.tableLayoutPanel1.RowCount = 5;
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20F));
this.tableLayoutPanel1.Size = new System.Drawing.Size(384, 461);
this.tableLayoutPanel1.TabIndex = 1;
//
// button1
//
this.button1.Dock = System.Windows.Forms.DockStyle.Fill;
this.button1.Location = new System.Drawing.Point(10, 378);
this.button1.Margin = new System.Windows.Forms.Padding(10);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(364, 73);
this.button1.TabIndex = 1;
this.button1.Text = "Cancel";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.backButton_Click);
//
// pictureBox1
//
this.pictureBox1.BackColor = System.Drawing.Color.Transparent;
this.pictureBox1.Dock = System.Windows.Forms.DockStyle.Fill;
this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image")));
this.pictureBox1.ImageLocation = "contactless.png";
this.pictureBox1.Location = new System.Drawing.Point(3, 187);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(378, 86);
this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.pictureBox1.TabIndex = 2;
this.pictureBox1.TabStop = false;
this.pictureBox1.Click += new System.EventHandler(this.pictureBox_Click);
//
// TapCard
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(384, 461);
this.Controls.Add(this.tableLayoutPanel1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.Name = "TapCard";
this.Text = "TapCard";
this.TopMost = true;
this.tableLayoutPanel1.ResumeLayout(false);
this.tableLayoutPanel1.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Label label1;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.PictureBox pictureBox1;
}
}

View File

@@ -0,0 +1,42 @@
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 HCI_Coursework_EVCHARGE
{
public partial class TapCard : Form
{
String bay;
String vehicle;
String duration;
public TapCard(string bay, string vehicle, string duration)
{
InitializeComponent();
this.bay = bay;
this.vehicle = vehicle;
this.duration = duration;
}
private void pictureBox_Click(object sender, EventArgs e)
{
Charging charging = new Charging(bay, vehicle, duration);
charging.Show();
charging.FormClosed += delegate
{
charging = null;
};
}
private void backButton_Click(object sender, EventArgs e)
{
Close();
}
}
}

View File

@@ -0,0 +1,278 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="pictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAANIAAAEACAYAAADGGCjSAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6
JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAB3RJTUUH5QUGFgQIFcpiyQAAI0JJREFU
eF7tnQe0NWV1hjUVo5ImFhCxYDSKRk2CBRUUIoiFoliwEFs0iIIailgIgogRJaAYgwWxUVWKGmwxCkYx
KiQCKlGQKNYkaGJLNe9DmH/dsv/LOffOfvfcme9d61ku17qcf58z88183643aGoq0A3FjcRviPuJF4g3
ik9ex/vFCeIgsb24hfgV8XOiqalJYgHdXbxI/L342Qx8SxwpdhAsvragmiatTcUTxCXif0S0aFbiX8Wr
xLbil0VT0+R0S7Gf+EcRLZJZ+W/B9o+308+LpqbJ6KbiOeIbIloc8/If4nTx26KpaRL6RbGLuFhEi2K1
XCNeLnBENDWNXncUZwm2ZNGCWAtfF08Wm4imptEKD93TxA9FtBD64G/F3URT02i1uXiPiBZAX/ynOE78
pmhqGp3wqD1EcKNHC6BPfir2FL8gmppGpRuLPxfRjZ8BzowtRFPTqPTr4kIR3fRZHC1abKlpVLq5+DcR
3fBZ/EhsI5qaRiMO/5eL6IbP5E2C2FVT0yhEtvZRIrrZM/mmuK9oahqFyNDeTvyziG74LPASniJIS2pq
GoVIVOWmjm74THgr7SWamkYhSh2eJIjzRDd8Fv8l3it+VTQ1jUL3FJ8R0Q2fyVfEHqKpaRTirXCYiG72
TCi1oHwdp0dT0yj0cMG5JbrhM7lMPFLQI6Kpad2L1J0TRUYpxUrgwXu9oM9DU9Mo9HjRV4XsPFwqeCO2
hilNo9BvCUoqVtP0ZC3gwaPMgpSlpqZ1L0oc/lhUnJW+KHYW7a3UtEz3EGxZaG+1v3i2eKx4oNhSDDEL
+k7ioyK62TPhrfQa0d5KTddqK7GPIDHzUwKv1JXiu+LbgtjJReIj4rWCp/CQ9EviJYL+dNENn8kV4t6i
acIib4wmH38tOLDPUnX6Y8HCOlncSwxFvJUqArSczQ4VLQdvoqILz0mC5M/VuI8JTH5JPE/QjKRabDkJ
0H5fRPZmQnNKfs+mCYmDMW8SGsqzx49ujFn5X3G1oEnjEIKTxJVoWxzZmgm/w9MFW8ymCYhF9Pui7y3Q
xwVOiiEspgMFFa2RnZn8g2hOh4loM4GXKboR1gLnJhqSDKF11c0EzpLIzmx2E00jF2XS1NLQkje6CdYK
5yU+fwjbG5rqRzZmc4Fo5egj168J3NfRDdAX54ghNKCn09Bap1OslvuIphGL8mw8bdHF7wu6+xwihlD4
9lwR2ZgNlbtNIxaxjujC9w1esweJ6gyI24hZJ/f1CVMAf0c0jVRvFdGF7xtiUm8X9FWoFOXo5OBFNmaC
44Vxmk0j1cdEdOEzYItHxkSl4wFXPNkO7q6sxJQIL7RapZHK9UbqwAVd7Q4n46LirUR+Ig+SphGKad/R
Rc+CJ/OrRXWQ9q7ib0RkYxZsb6mRav3CR6j7C3fx278LDv2V4qxEKYhjDMxCqFVi/EzTyETEn5GO0UXP
hLdSdZCWh8jnRWRfFpwTaa3cZiuNTMwVopYouuiZkNT6AFEpzmrHCPdb6UPiDqJpRGK/vqNwJ3Ry875L
VPeB2124sx2+Jp4omkYmSsXPE9FFz4SiwUeISt1aEN9ytu4ik+QE0ebQjky4g58hslOFlsK/925xK1El
3sg4HXBNRzZmwXR00rOaRiRc0aSvnC+ii54Jjo6niErRuis7cXcp/yKeJZrTYWTaVLxURBc9E6pxzxRs
sarEzfxy8QMR2ZgB8bS3CLbVTSMSb6UdREVCJ9sqns6VYpv1BRHZlwUdmKo9l00Juok4Qrh7ZsMZ4nai
SjxI3iycs5V4K+0rWk+HGbTeKiO3FxXtqygzIA+tsjspAVpc05F9WbxDVGd5DFL0MSPYxoBe6m/oRsr/
Al1JaTJyZ0FGwRBzrgjQvlKQ9h9d+Ez+QlSWWeC9JBvemTJ1leC+qM49HIwILDIt7gWC0urvCV7dC3+0
nwh+OBovvkowMYES7KEtKN5KnxULbXfwVUFcqfL3oK/DD0VkXxa0LWsDyiRKqPcWZBPPkyFA3hWLjn7a
Q9onc1HpKuS+oYCUHd7WVaKho7vx/jtFdcFjuSjU4omyllZPRPjpUU1brKHofsLtxQJK0tkWV56VcMdH
tmXB9SeON9ntHYvocNHHAZW305AmGGwijhfutxJxJWqkiGtViakbkW2ZTLYjK9ufVwjOQtEPsxroLUdD
xaEsJloYc26JbM2EWFZldjRhgD6v6yzwFqx8eJSJ7N2+G7PjnGAECfUqFJ5Vi4g/JRbO2ArwVmK7XPkb
MMomsi0Lih1vLyYlmmdkziclrR+3+RDE4ZvJFJGdmRD1r2wUQsZBZFcmzxSTEYfgN4joh+gTkijZWg3h
AHq0iGzMpjJ9hkVMA/zIriyYLjgZsXd3PKEpMah2BXfCNVsxX+g0USWCsy8WkV2ZTCae9BjhyhL+snik
GEKaET0WIhszwWNY9SBhJ/B7wv0A4XpPQvRD42AY/QgZUI59W1EtsjYqzkqVWeEMKDtbRHZlwbFhEnIv
JLx4JHMS16kUOYRvE5GNmTCsrCq+Qt4hIzwju7LA9Y/7ffR6lHAWgAG5edUZwuS/PVQ4HyLAg6RqJArb
u51E1uyoCL7vJKahk7nt3uKQ7FrdMxttLuixENmYBTEszmdVoiMrb8XItgw4Fx4gRi+ChO4G7MC/yaCs
SvHdWdDu4jcy0VnEFaLTD2UlkW0ZUFRJIvMkVOHBog9cdQN2tjp3ER8WkY1ZfFf8kagQcUP3w+NSMYle
DnSdiX6AbJjHWh2g5QB+kIjsy4KUocqYEpWzZFpEtmVA1sxk3OBEoaMfIZuniWo9WNAMPrIvC7xZVU4H
3ODO3Dtq2o4TQ8hqSdeThLtnNJC2Uj2LldZZNApZWgGcyXfE/qJCBMQPFM7rTZEog7JHL3KxnK/7Drw6
xDaqy9N5M+KqjWzMgEM4Q9GqMsIpgWdrHdmWwcWCzIrRiwDpnwj279EPkQVvASpXOfRXalvhdAsD/97d
RYUIe5wrIrsyGEIHWovYv9K4xD1fBwgI0xm0MgeP6DsNXIhxRTZmwCG86ozI9z1WuLZ37DzIul+z2Lrw
1KXs9w8Fjc4ppvsDQY3MEBI5+XHpGuQ+K/FWovccZRaVerS4XEQ2ZsDvTAVxVQoN9UL034ts6xtagp0q
Vn0e/l1BdSQfwoGLpiL/JDhs0hsB7w0eM5L7qkcI8lbiZv6UiH6MTGjC/kJRKbxZ7xORfVl8UFRt72jp
/DkR2ZXB+YJk4blEbIYIMoayaKIPXggBMsoMeN1WBq94OuLRcY9E4Yn1V4Jq3SoRrCQ47RxSxsN0L1Eh
siucDw6cG3uImUT+GDU+nxQkRM7rUmUvyVOK9lEV4q1EkuEFIrIvE97UbHsrxYX+iojsywDnziGiYmvP
cYN4kqs3OrVQOLSuV7iQOWPwlFlLm1i+2N8JItAVQSyqKdlmuZuE8JsxGqSyHx7Vs2xBIvuy4DtXjYF5
viBlKbKrb3ipEJhd0eXPInqZ6NPrQ3IjUfeK4U34/Okb7QxSAtvb3URlFJztNTuDyL4MKsehEE9yOlhw
ueN6D8VrmS1BhgeE2h06dboXE1tUavzdtUrA2bKyJxqeVLaZkW0Z8Bs/TlR0Y6Va2elcwrkWOtV4crLC
mKEZ/YdrBRcpw3VxXrif0ryVPiHcbyVKLHh4VIlUFmxwfm9aPFc9PN4rXOckGlWG52D2e9nlu1Q0Hinc
ZwfetH8qnBWVwLaKEnjOalViL+88I75HVHVjJRhOi+nIrgwYSbrsnIQL0ZE5fLXAG+jOzaIZ+qeF+61E
3K2ySQpl6M6OOzioqrLB2Va6ArPA3KhbiEXaWUR/nAHbLOIszi0eZzOcKO6z0pWCuUZVUxyo3nWek3CD
c86uSN6l/JxuuJFdGbCVXBYvpPF89McZ8GOz5aAYzSm+tNOzA+zZDxZ0+6mSM6kTcO5UnJNIWCZFy7Xr
ILSzLE7qLlPmvIJL3Cmekq8X7rjSeaJyzD7Bw8iuLOj5VzWgi3osVzYL20jc7ouU5a1bCeJLbjEr1lmv
A8x9JcuiKqaENzayKwt6G2wtKkSRoSt2xm6DqY6LVLGQyADAU+i8wTirsLeN7MmE1Puq/tF8Z+c5ietK
NkvFuXBH4fTO4oVe1EWqIicN8PJsNEKcJEpA3IV/DAarTBk6WUR2ZYHbv6JqlllGzv6Gp4hFXln3D93B
eeUE4U52rJjDSvVqlZ4qIpuyIPhe5WBxvn1JP1tUFU2OlDtg2YGLeDvh1GEisiUT5tpWiYvtrJrlQVU1
kMyZrEvp+SLPHU+PyrcSo9id3VnuIZz1OsA5tEp0Jl3LhPd54aFMgWGFCJRGNmWxq9hwzsc1zEHt2yL6
42yonZm5WKoHUSqMWzqyJQseGFUDnYnrnCEiu7Jw7zI60f01sicL+lUsOg9yGD5RRH+cDTfZScJ1ICcr
nB8gsiUT0qMqRLCSwrvIpizo51EhsrIje7IgTreoXwVpNBhRMXoeSE0nVckhXsXk3+E1jGzJgi1shdhx
7CIim7J4o6gQwe/InixeJ5ZNMOwK+9y9DoDDMK2kXKlDvP242JEtWeBYqYonkYtG0nBkVwak61SIh4az
oBEP5bLkVZ7UROFJLI3+o2xwJ7o6WbKvdW/vyKqo6mPBUDR+38iuDHgYV4msmcimDGiQuZVYJiLSHNjc
qTSAt4c+Za6oOIV3zu0dT8p9RYXYfrg9WrwFK+TcadD3faM1WLcSJAC6myzCWcKV7UBOmHOwL7/nO0SF
2FKSixbZlYU7MbnTESKyJwOqZenuu1FR80/rX3cxHC1wdxeOtxLxsxeJtXRLmheClRVDnPk9me8T2ZQF
nsIKEUqJ7MlixYaRuIi5yegeGv3HmeDwcAVoWbQ8VSI7MsArWtXWmK6kznJs6s4qRHlDZE8WeERXLGbk
gEphmHuLR/vjFV+XPaprjhLZkQEda6saSPLkdA4Y+JCoEN8zsicLnFbXO5SbJvnujAf6DDxMrLjKexL9
KpyHUxwOx4gKUSXszOigIrlCuKMje7KYKdud2BJVj+63Ep1/HFPw+AEOFa7SCs5jOFQqROUqVcKRXRnQ
/bSiWpYYobPpC60aZooPEvtwu8OJebC1dIgJ2bMMCegLMpQr6pPIuaONVGRTBpyvSRB2i4e/s1SGsMJM
Y23Y/7n7OpCdTQ2Po4KWQzjNLCI7MmC6BylKbrFVdgaheSvQEswtqlad13PmhYTcuVpA8NJRaXk7caaI
bMiAtlFVo+bp/+ZqAMMkE4L7bnFTEweNbMqAqS2LSs5XEnEId0IrZzNHpSWLFVetK2bGNvIAUSFnYjKO
lf2EWywk51mQt9/MCwkxPiP6oCyuEK4aHm5sV8yMLQ/OlApRd8a0jMiuviHfjjeDWxz8aUwS2ZTB3BXB
2wh3ZakriZXYjrPen5KKilE3jDFlfGlkU990wxPcqqg3W5YBvpLINmBES/RBWZAf5pB7Fuk5Yq4fvyfd
TTCeM7Kpb3D14311i2Y6e4vIpizmupbkiDHNL/qgLJgE5xA3mOtJDUT9KyY34Fjh7BnZlAEFm25xnqeh
T2RPFnMtJAzkye0s/HM1DeGw+G4R2ZAB34vOr25xwZ3lFHReregoxJT1yJ4smP01lyg9cIyA6SAQ7JJz
qO9Gp74lCy+oc2gCrv5Fvd9Mci+kua8luWnOJze4ElipY3FlR+M521O4xa7iIBHZlAEdoiqCz+6FNHcX
LNJMGHEYfVgWrlZdzunY3xTPEBVyTqhoC2kjwmW7l4g+LAua7TvE9yJ2FdnQN2TUkzVcIedColCzIotj
8AsJUT3rrCo9SjhEkR9P0MiGvsFhw1ayQqQJ0W43sqtveGA8SbiFF9Y5LGFVPQuZE0prqegDM2AUi0Nk
udPMIrIhA9qPVeixwhV8rlpIhBZw6EQ2ZbCqGjOyDZyeO4LADuHUcGYNVy2kRwnXg7AtpBVEjYmzdxgX
wyHqn5xD16oW0k7iIhHZ1DdtIa2gO4r3iegDM3AtJHK0PiIiGzKoWkhsYUn9j2zqGwZ/PUe4tS4WEka+
R0QfmIFrIaEPisiGDOgV4Rxn08m5kIjLuZxFC9UWUgDtsmha6ZBzIZ0qthRuORdSVbOXtpACqBNasQlf
j2oLqV/aQlpB5E45G7KTb+eqS2oLqV/aQlpB3NRk9UYfmEFbSP2qLaT+WdV3pMrS2e7IuZBeI7j4kR19
0xZSntbFQqKUgiaH0Qdm4OyP5myG2RZSntbFQmLuDQOWog/MgIxsJnM71LZ2/UJLrqOFW+vmjORMERpr
HGkKC4ndBO0J3GoLKaAtpH7lXEgtRWgFuRcS4yldmsJC2lW4vK5tIa2g7cUPRPSBGbiyv5FzIZ0gKqac
tzKK/lnVQqLRQ/RhWbjqkRgj42zJ1eqR8jT4hVQxVv/PhENktV8oIhsyaAspT2TfOEcRzb2Q6P/2ShF9
WBYHCoemUtg3hYVEzwbnIPG5r+UWgna70YdlQUWnQzSwcPVsoOcF/eUqRJ9z6oQiu/qGStz7CrcG3/yE
7c+XRPRhWbDfdYgF6xp5wpN6Cl2EWjuuQDQXvL/4iYg+LAMi4y7RZ+5qEdnRN/S1qxjCxdS+F4rIpgwY
yExKmVuDXkg3Ei8W0QdlcYFwiaHMrgMqT+pVtXBao6jI5WAc2ZQBXZkcUxeXatALiYvwURF9UBaUY7v0
avFjEdnRN7hmK3p/u5vo8z3dYuf0IBHZk8VcC4mO+06XIjxbOERg9DQR2ZDBp8S9hVvOsS44VD4h3GI+
Ep7CyKYs5lpIB4voQzJxjT4hVecDIrIhA7oVzT0KpAc5B41RjsKidatiYh8VETPrYhF9SBZ4B10zZBlM
5YwhnS1c322h8KAx5CyyqW+qZshylmdGb2RTFjMPGuNGcxW8dZwkHFPN0SPEZSKyI4N3CDxobj1YuBKO
fyqOF27dWJDHGNmUxUwL6YbCeX7owB3Na9qhZ4lviciOvsGlX9HrDeHgcE3coDrWdcZdqJuIvxSRTRnQ
u2+m3QUekGtE9CFZ8DRjP+8QbwZubNcbl2DsfsItHoj7iMimDKgQIB3JLdLYnNt0/i3+zRWFN+t04d7W
Uc7gqtVhCqFzQDFByocJt9jykLcY2ZQB1bEVWQ2DXEgMiWJYVPQBmRAcdZ2P8Aw6yyc+L1zNXBZqM3Gs
iGzKgF4bFYOY6e/B7NrIpgzo8bhi6+lbCmqB3G8jWhQzMYHAmkPEAFzJqkC2hqsF80LdVlCVG9mUAXmL
FeLgH9mTxYpOMVyI+wvXAXwhTLogOdYhzkdMS3D1smNqOu2eK0SsgwBpZFcGZMFUyL2QyBTBwRGKNwJ7
P+eIyw7y+VzbOnfuWVV7KkQ5g6sOCXBBV4jvGdmTBdtlzp/LdHvxNuHM8u7gQhPTwcPk0J2EcyAAWd8M
fa7QjgJvaGRXBmSZV+gJIrIniwPEssRcppaT3u8ak7+UM4VrW4cYLO08mPJvzZVO0pO40BT0RTZl4SrI
XKrDRWRPFqQjLYt30tcbL4SzTLeDbc9zBYvZIf4dfgTX9Gt+U5JVSap0iy0ssbLIriyoXavQO0VkTxbE
yhZdU1yVLxcciKP/IBvabrma5SPiR84IeFXuGeK7OrewnK0rUqCQcw4wD8dFoQxczTsIpxt4IdQBHSFc
KUHoXoLCs8ieDHjjPlVUiCpVZ1NPYmVVImUnsikDguuLjiK4DN8qoj92wA29s3CJpyVODadDhUh/xfkI
xw1tiiObssBZVSG8vZE9WbCLYhr+teKmwqPjzqfr4GZe0RefIM4MdPGJ7MmCNwLxObdwNBATjGzKospj
RxfgyJ4suG9vJq4VNzB79+gPHXCDEbdyiii/cy8Nx4kKcX1PFJFNWXBDV8jt+n6R2BDzpCulq3vOUjgb
0ZfB2QMbb93DBWeWyKYsHioq5E7ixKmyYbtjFufsyKYsKGnfcK7H5Rz9kQMmTVA06BRPaGcDEKDXRUUC
J9pKuFKggFiZazDcUr1dRDZlwIOYEqMNIrct+sNsOnewu10TF9lV3NbxYVElts2RTVmcIlwpXkv1WRHZ
lAFJuYsa2DjdhQshHYgUHbfYR7tjZaSRVIkhBJFNWRwiNhFucTwgBSuyKQOayCy6f6M/ckCRmatUYqGc
gckOV7VvJOdTGqhhqwjGUkRIiCGyKQMyKNg2b1D0R9lQSOdKBVoo+rq530aUE6xY+JUozmXODH7Kbpjq
USF6qTsdSGQBLaqMdXUX7aCWfzvhFm+/I0VkUxbcxAwjrtjqIHei6rmCiSUVer1wZbeTGkRznkUvg/NE
9McZUG3Lnr1i5CM9IPASRnZlwZ6dVCRXWchSOb1YgPuZyYdu4YImy8D19sULu6dYJF6JrgxoviwHtIob
63nC6QYGPFiU7FcIz5nzwcGWGUeOM1+yE6N/viwiuzIgLkfa1SKRGew4kOIupHtORRkBaRyUMDjPC6Q+
UaZRta17oHCmfdEkZ9nNZRLB7q+LyK4MzhDL6uZ4grDfyzyo8SM/X1xv26IkPV64+08wiYFtXZVeKpzn
X44IFeEMhAfYOeCB8a+bikVim8VbKSsfizgV//DM/ZF7Fh17cHkTAI7sy+K1ouo7E+R2nhmAOaobEjjN
onLBdX25n/cVYegGvz/93aiOjf7j1cJbjgWK27lKTxHO1z4Qz9hbVLj4EQWSzuwNbmJqrSq+L28Gpnu4
qrqpQdpNbFRs8TjDXCSiD5gX+j5Q3kymdZXX6taCPhAuZ0rH+0VF7VEn5sQ6tzrk19H/okIEuz8nIrsy
oKXZ9c62YjGRRLrWNxNNHukXR4Jo1SJCxFGcLaiApzM3ctXbiJon0lec27p3i4p5T4hMCmcDGyaJzNTg
kxt/G0GVI2PkZ70g/N2PBJ1E2VpUpP8sFNtJvCuRrZmcL+4jqkTLgEtFZFsGXHfiR2Fvt2Rxr75EuLyT
fFfO+3OJJxtBJwrg8Lp9XywtzebpyxaCMwivPM4FQxBvA85Gbk8dvwcNA53VvgvFjUV1qjPnjHsDr2iF
OB+xdY/syoC6vaeLVYmyA0rRuUBvEHiDOnjNEehkO1hRRr0xEaCrmOl0idhVVAmv2Vkisi0LDvr3FBXC
QfZJEdmVAb1FdhGTEAuaQChziKIfIwveRjxYqlzeiNqjvpxFs4ATBzf/spiKSeyArhSRbRmQgHxnMQmR
fcwXjn6ITHA3P0ZUCUcRuwZnNsN3RMVUPkTIhlmxnMsj2/qGhwbxqoo8Ubt4Gz1TuH7cDt5GbCWrSqwR
PdvxnkX2ZYHbGedGhXjz4xCL7MqAc2dVdyS7iFk598wdHEKXZQObxb9PPmNkXxYs3KpaK0pxnJ2gCMTS
NGf06nIGnRMXgFc+A9mq+hQgchhxyzoDz3hxyeerEh18nOdgkp55UI9e3EzuXnXADVXtyWH4wcdFZF8W
XxLO7rgLxRb+MOGqdubhzGS+qiC7VZQNuFOBgHSgitKQTlxc8tycI0oJTH5AVBTxIYLtzqkTJCaQqTMJ
VTQ14ebdVlSKuhhKvCP7suDgXdkZiZExTjc/Htnq62wRLkl351Q4W1QKFzBFbc4EVeDgXTGZHXVZK87+
DJyPJiGyCaIfIROy26t6XHfC3U5ANLIvi865UiWaq9DmOrItAxYsaV+TEB6r6EfIhEK2yuAceXX0cuPt
ENmXBYVtVbl1iO/s7GVO16s9xCTEEzL6EbKgqQh5XpUZ7vSCoKtpZF8mxKo2ExViW8dN7WxiQ1Ju1fe1
iwlx0Y+QAQ4G4idVHqtOtAdwlkt0vElUiYaXbLMiu7L4kJiMLhPRj5AB8Rq2F5UFi4jp806Xd4d7eshC
kdX/BRHZlQUzkCYj15gW4gmVLbY6UURX8Tbi36z67p2HkrzGyLYsqkpESkTeVfQj9M1bBH0gqkUAtmL6
PC3VqkSxJG2JI7uyYDh5ZbDdLg6hnxHRj9EXfD6Dpaq3dOT0Oaexd1BtXNXXG1G06G45Ta/4yYm9e1ZD
RG4iWjsPQbwV3K2X4TWioi9DJ9euo4N42aS2dZ24yMeIviPexBHwFA3BBcrb6ELh6uHWQeyIFJnKtzEL
ObItC3YgVZ2By8X55RyxtEnLauFzKB67uRiCaC9GVWpkaybvElXDABDnI/e27mBR7VQqEwFScsCYi7vW
Klly904WtCYbgqgIJdPcneHONvLJwj3rd6EoWoxsy4I3MFvJ6pZypeKC8yPQiGS1yZxEs5nINgQPXSfc
7tgV2ZsJ0xXvIqpEwaZ7YPhkiviuT8QcmIxAjf3FggU1i7uYkvFTBXN+Kitel4p+DLTZcr+NCPgy6aGq
Tx9iooe7P+ErRFUJ/SBFGg+1K5SgU5hFpjSzoKjupKkl8P9PF3TspP0t0XMW4lBEHGN/UXE2ouanMpMB
HS6c42nY1tGbYUj3wGBEaTJwzqDpOk85vFDA/+c1Tm+2Ie6JsY9qVLenDvCCVj6Z8Zp9Wji/O41PK7ey
TQnibbSfcPaq66AxPZnWlS5vttjubR25dUPa1jf1oKq3Ef8eWd5kW1eJBUzDEWdXKIZns72vzl5p6lHE
MJgM11dMbB44Q1YXszGP1p0KRUP+ZbNhm9aveCISv6povYxnkMaPla5/cidx/jh7UfDmO1Rwlm4aibiY
1Bs5tzUdeDLJLq8U7bYY7hzZlwVhkqqpg00J4m20tWDeVHTBM+FtRIrVTBPpEkUX1atEZGMG9OmjT96W
omkkIpLP28hdwAa0AN5HVIrkYBwdznorCjbJqmdL2TQSETthfGh0wTPhxmU7VTXiv9MjBM6OyMYsGLzA
uNamESmzrmol6GH+EFEp+vQRBHb2ouC3fp1oToaRiS1GdMGzOUWwrawU6VzOUf9A4JnYUdPIVNHskpIR
EmMrRV7ki4XzbYSTge1sZeC5KUnukgGyGKg+rY7mEzdzj6YhTkV2e8tkGKGc40qAFltbiUqRxcHI0si+
LHiA0CPvNqJphKKgMLrwGVAy8GhR3XKKAKw7i4NgN+29mkYqRpZEF75vcHczpZvSkkqxiJkG784pZJoI
+XxNIxU9JxxT2SlovLeorsGiscxHRGRjJjgZJtvcZAqikO5jIrr4fUFJPVXDlX3qOj1OVOQU7i6aRixi
ObTdykoR4lzEbKfK9lqdCILSaCSyMxPexpV9KJpMIqaTcfgmKZVZu3cWQxCOjoqJGpMZrDx1cQCnsI4k
0uhGWA04FziLMCBtCI09mHZ4vohszeSLorXampCI9NM/oI/zAxF8EmHpZT2UDOcnCvL7InszodVW5cjS
pgKRiX2U4Fyz2r4NLESmzrGdG0oEH4cKC5sFHtmcBU6Wu4qmCapzPlDBOU+shfMQW0McC0PwznViW0la
jrOMHHgQHSGqR5Y2FYtxmxS8XSK4Ca+87n8XLi48fQQaOQecK3YWQxMdcLNnWUXwNtpRTLqfd9P/iwAi
QVTOTrtd978nCLrfwBvF8wQR+yEGG3F3HybcbyMcLfxO1SX0TU29iOEGzHeKbvZMvipaG+KmUYizCbVW
7mmDvI0Y1r25aGpa99pJ0JQ/utkz+bJgvlI7GzWte5GOdLyoyKmjhH5Ic66amlYtvId4GaMbPRP+TdqL
tbNR07oX9U7HCXfwlTga1caTHajcNB6RSbG9ILYV3eyZ0B2IEEFT07oXnjom7kU3eiYEppnE3nrVNY1C
ZDGQiRHd7Jl8TTxUNDWte3HA52aObvRMqG/CU9fKyJtGIW5kpspHN3smjKV5kGhqGoUo5SajILrZMzlW
VLdebmrqTRULiWRYeuQ1NY1GeMzITo9u+CwogmxqGpUoaaflVXTDZ3CZaG+jplGKxvjfE9GN3zd0a20T
95pGKQrpThPRjd8XpB69WdCxtalplKKtGL3rMlswXy5IQ2plEk2jFs0uKYPPSFq9RhwgbiqamkYtYjq8
la4Q0WJYLWQwkN29tWhqmoQopXiZYAx/tCjmhbcbnYioc2q1Rk2TEls8Ovn00V2Vc9GTReuY2jRJ3UEw
ip+zTbRAZuEbgib4dGttapqs6J9wqCC5dJ42zPztVYJF1Kpem5okCv4eIE4V0aKJ4G/5b5qHrqlpgYj7
bCroHEu7rI3xELGF4G8HGiu6wQ3+D+yBOeI0wqhFAAAAAElFTkSuQmCC
</value>
</data>
</root>

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

BIN
QRreaderWindowsForms.zip Normal file

Binary file not shown.

View File

@@ -41,19 +41,18 @@ namespace QRreaderWindowsForms
//
// cboCamera
//
this.cboCamera.Dock = System.Windows.Forms.DockStyle.Top;
this.cboCamera.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.cboCamera.FormattingEnabled = true;
this.cboCamera.Location = new System.Drawing.Point(0, 0);
this.cboCamera.Location = new System.Drawing.Point(346, 26);
this.cboCamera.Name = "cboCamera";
this.cboCamera.Size = new System.Drawing.Size(534, 32);
this.cboCamera.Size = new System.Drawing.Size(252, 32);
this.cboCamera.TabIndex = 0;
//
// btnStart
//
this.btnStart.Location = new System.Drawing.Point(330, 207);
this.btnStart.Location = new System.Drawing.Point(355, 285);
this.btnStart.Name = "btnStart";
this.btnStart.Size = new System.Drawing.Size(100, 35);
this.btnStart.Size = new System.Drawing.Size(75, 23);
this.btnStart.TabIndex = 1;
this.btnStart.Text = "Start";
this.btnStart.UseVisualStyleBackColor = true;
@@ -61,21 +60,17 @@ namespace QRreaderWindowsForms
//
// pictureBox1
//
this.pictureBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom;
this.pictureBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.pictureBox1.Dock = System.Windows.Forms.DockStyle.Left;
this.pictureBox1.Location = new System.Drawing.Point(0, 32);
this.pictureBox1.Location = new System.Drawing.Point(33, 73);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(328, 307);
this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
this.pictureBox1.Size = new System.Drawing.Size(280, 235);
this.pictureBox1.TabIndex = 2;
this.pictureBox1.TabStop = false;
//
// btnDecode
//
this.btnDecode.Location = new System.Drawing.Point(432, 207);
this.btnDecode.Location = new System.Drawing.Point(475, 285);
this.btnDecode.Name = "btnDecode";
this.btnDecode.Size = new System.Drawing.Size(100, 35);
this.btnDecode.Size = new System.Drawing.Size(75, 23);
this.btnDecode.TabIndex = 3;
this.btnDecode.Text = "Decode";
this.btnDecode.UseVisualStyleBackColor = true;
@@ -89,16 +84,16 @@ namespace QRreaderWindowsForms
// txtResult
//
this.txtResult.FormattingEnabled = true;
this.txtResult.Location = new System.Drawing.Point(328, 32);
this.txtResult.Location = new System.Drawing.Point(349, 74);
this.txtResult.Name = "txtResult";
this.txtResult.Size = new System.Drawing.Size(206, 173);
this.txtResult.Size = new System.Drawing.Size(248, 173);
this.txtResult.TabIndex = 4;
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(534, 339);
this.ClientSize = new System.Drawing.Size(622, 339);
this.Controls.Add(this.txtResult);
this.Controls.Add(this.btnDecode);
this.Controls.Add(this.pictureBox1);

View File

@@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="AForge" version="2.2.5" targetFramework="net472" />
<package id="AForge.Video" version="2.2.5" targetFramework="net472" />
<package id="AForge.Video.DirectShow" version="2.2.5" targetFramework="net472" />
<package id="ZXing.Net" version="0.16.6" targetFramework="net472" />
</packages>