using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Text.RegularExpressions;
using System.Globalization;
using System.Data;
using RoboforkApp.DataModel;
namespace RoboforkApp
{
///
/// Interaction logic for EditNode.xaml
///
public partial class EditNodeWindow : Window
{
///
/// SourceDataView
///
private DataView SourceDataView { get; set; }
public DataTable ListModeDataTable = new DataTable();
public string txtMode;
public string _txtMode
{
get { return txtMode; }
set { txtMode = value; }
}
public string txtMode1;
public string _txtMode1
{
get { return txtMode1; }
}
public string txtMode2;
public string _txtMode2
{
get { return txtMode2; }
}
public string txtMode3;
public string _txtMode3
{
get { return txtMode3; }
}
public bool ExitFlg = false;
public bool _ExitFlg
{
get { return ExitFlg; }
}
public List NodeInf_List
{
get { return NodeInf_Lst; }
set { NodeInf_Lst = value; }
}
//List NodeInf_Lst = new List();
public List NodeInf_Lst = new List();
public EditNodeWindow()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
Load_Form();
}
public void Load_Form()
{
int rowSelected = 0;
ListModeDataTable.Columns.Add("NO", typeof(int));
ListModeDataTable.Columns.Add("MODE", typeof(string));
ListModeDataTable.Columns.Add("SPEED", typeof(string));
ListModeDataTable.Columns.Add("ANGLE", typeof(string));
ListModeDataTable.Columns.Add("HIGHT", typeof(string));
ListModeDataTable.Columns.Add("MODESELECTED", typeof(double));
if (NodeInf_Lst.Count > 0)
{
for (int i = 0; i < NodeInf_Lst.Count; i++)
{
string strMode = NodeInf_Lst[i].Mode;
string strSpeed = NodeInf_Lst[i].Speed.ToString();
string strAngle = NodeInf_Lst[i].Angle.ToString();
string strHeight = NodeInf_Lst[i].Height.ToString();
int intMode = NodeInf_Lst[i].ModeSelected;
ListModeDataTable.Rows.Add(i + 1, NodeInf_Lst[i].Mode, strSpeed, strAngle, strHeight, intMode);
}
}
for (int i = 0; i < ListModeDataTable.Rows.Count; i++)
{
if (ListModeDataTable.Rows[i]["MODESELECTED"].ToString() == "1")
{
rowSelected = i;
}
}
//ListEditNodeData.SelectedIndex = rowSelected;
SourceDataView = new DataView(ListModeDataTable);
ListEditNodeData.ItemsSource = SourceDataView;
cbMode.Focus();
cbMode.Text = "";
txtSpeed.Text = "0";
txtAngle.Text = "0";
txtHight.Text = "0";
}
private void btnEditNode_Click(object sender, RoutedEventArgs e)
{
string tag = ((Button)sender).Tag.ToString();
switch (tag)
{
case "ADDMODE":
if (!checkFloat(txtSpeed.Text) || !checkFloat(txtAngle.Text) || !checkFloat(txtHight.Text))
{
MessageBox.Show("Please Check Again!");
break;
}
if ((cbMode.Text.Trim() == "") || (txtSpeed.Text.Trim() == ""))
{
MessageBox.Show("Please Check Again!");
break;
}
CreateMode();
clearField();
break;
case "DELETEMODE":
DeleteMode();
break;
case "No":
ExitFlg = true;
this.Close();
break;
case "Save":
if (!checkFloat(txtSpeed.Text) || !checkFloat(txtAngle.Text) || !checkFloat(txtHight.Text))
{
MessageBox.Show("Please Check Again!");
break;
}
NewDoBeginSave();
MessageBox.Show("Data is saved");
this.Close();
break;
default:
break;
}
}
public void DeleteMode()
{
int rowIndex = -1;
rowIndex = ListEditNodeData.SelectedIndex;
if (rowIndex < 0)
{
rowIndex = ListModeDataTable.Rows.Count - 1;
}
if (rowIndex < 0)
{
return;
}
ListModeDataTable.Rows[rowIndex].Delete();
ListModeDataTable.AcceptChanges();
for (int i = 0; i < ListModeDataTable.Rows.Count; i++)
{
ListModeDataTable.Rows[i]["NO"] = i + 1;
}
ListModeDataTable.AcceptChanges();
}
public void CreateMode()
{
int count = ListModeDataTable.Rows.Count;
ListModeDataTable.Rows.Add(count + 1, cbMode.Text, txtSpeed.Text, txtAngle.Text, txtHight.Text, 0);
ListModeDataTable.AcceptChanges();
}
public void NewDoBeginSave()
{
int rowSelected = -1;
rowSelected = ListEditNodeData.SelectedIndex;
if (rowSelected < 0)
{
rowSelected = 0;
}
NodeInf_Lst.Clear();
for (int i = 0; i < ListModeDataTable.Rows.Count; i++)
{
ListNodeInfo ni = new ListNodeInfo();
ni.Mode = ListModeDataTable.Rows[i]["MODE"].ToString();
if (ListModeDataTable.Rows[i]["SPEED"].ToString() != "")
{
ni.Speed = double.Parse((ListModeDataTable.Rows[i]["SPEED"].ToString()));
}
if (ListModeDataTable.Rows[i]["ANGLE"].ToString() != "")
{
ni.Angle = double.Parse((ListModeDataTable.Rows[i]["ANGLE"].ToString()));
}
if (ListModeDataTable.Rows[i]["HIGHT"].ToString() != "")
{
ni.Height = double.Parse((ListModeDataTable.Rows[i]["HIGHT"].ToString()));
}
if(i == rowSelected)
{
ni.ModeSelected = 1;
}
else
{
ni.ModeSelected = 0;
}
NodeInf_Lst.Add(ni);
}
}
//Check input string is Float format
public bool checkFloat(string st)
{
bool flg = false;
Regex regex = new Regex(@"^[0-9]*(?:\.[0-9]*)?$");
flg = regex.IsMatch(st);
return flg;
}
public void clearField()
{
cbMode.Text = "";
txtSpeed.Text = "0";
txtAngle.Text = "0";
txtHight.Text = "0";
}
private void txtSpeed_LostFocus(object sender, RoutedEventArgs e)
{
if(txtSpeed.Text.Trim() == "")
{
txtSpeed.Text = "0";
}
}
private void txtAngle_LostFocus(object sender, RoutedEventArgs e)
{
if (txtAngle.Text.Trim() == "")
{
txtAngle.Text = "0";
}
}
private void txtHight_LostFocus(object sender, RoutedEventArgs e)
{
if (txtHight.Text.Trim() == "")
{
txtHight.Text = "0";
}
}
}
}