EditNodeView.xaml.cs 8.31 KB
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
{

    /// <summary>
    /// Interaction logic for EditNode.xaml
    /// </summary>
    public partial class EditNodeWindow : Window
    {
        /// <summary>
        /// SourceDataView
        /// </summary>
        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<ListNodeInfo> NodeInf_List
        {
            get { return NodeInf_Lst; }
            set { NodeInf_Lst = value; }
        }

        

        //List<NodeInf> NodeInf_Lst = new List<NodeInf>();
        public List<ListNodeInfo> NodeInf_Lst = new List<ListNodeInfo>();

        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";
            }
        }

    }
}