FrmMain.cs 9.0 KB
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 AGVControl
{
    public partial class FrmMain : Form
    {
        private bool exit = false;
        private NotifyIcon notify;
        private ContextMenuStrip notifyMenu;

        public FrmMain()
        {
            InitializeComponent();
        }

        private void ShowConfig()
        {
            int n;

            for (int i = 0; i < Common.agvInfo.Count; i++)
            {
                n = DgvAgv.Rows.Add(Common.agvInfo[i].ToRow());
                DgvAgv.Rows[n].HeaderCell.Value = (n + 1).ToString();
                if (!Common.agvInfo[i].IsCon)
                    DgvAgv.Rows[n].DefaultCellStyle.ForeColor = Color.Red;
            }

            for (int i = 0; i < Common.nodeInfo.Count; i++)
            {
                n = DgvNode.Rows.Add(Common.nodeInfo[i].ToRow());
                DgvNode.Rows[n].HeaderCell.Value = (n + 1).ToString();
                if (!Common.nodeInfo[i].Online)
                    DgvNode.Rows[n].DefaultCellStyle.ForeColor = Color.Red;
            }

            LstAgvPlace.Items.Clear();
            LstAgvPlace.Items.AddRange(Common.agvMission.Keys.ToArray());
            LstAgvPlace.SelectedIndex = 0;
        }

        private void Server_NodeChanged(int nodeIndex)
        {
            Invoke(new Action(() =>
            {
                DgvNode.Rows[nodeIndex].SetValues(Common.nodeInfo[nodeIndex].ToRow());
            }));
        }

        private void Server_NodeOnline(int nodeIndex)
        {
            Invoke(new Action(() => { DgvNode.Rows[nodeIndex].DefaultCellStyle.ForeColor = Common.nodeInfo[nodeIndex].Online ? Color.Black : Color.Red; }));
        }

        private void Control_AgvChanged(int agvIndex)
        {
            //Invoke(new Action(() =>
            //{
            //    DgvAgv.Rows[agvIndex].SetValues(Common.agvInfo[agvIndex].ToRow());
            //    dgvMission.Rows[agvIndex].SetValues(Common.agvInfo[agvIndex].ToMission());
            //}));
        }

        private void Control_AgvOnline(int agvIndex)
        {
            //Invoke(new Action(() => { DgvAgv.Rows[agvIndex].DefaultCellStyle.ForeColor = Common.agvInfo[agvIndex].IsCon ? Color.Black : Color.Red; }));
        }

        private void ItemShow_Click(object sender, EventArgs e)
        {
            Show();
            if (WindowState == FormWindowState.Minimized)
                WindowState = FormWindowState.Normal;
        }

        private void ItemExit_Click(object sender, EventArgs e)
        {
            notify.Dispose();
            exit = true;
            Close();
        }

        private void Notify_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            Show();
            if (WindowState == FormWindowState.Minimized)
                WindowState = FormWindowState.Normal;
        }

        private void FrmMain_Load(object sender, EventArgs e)
        {
            //托盘菜单
            notifyMenu = new ContextMenuStrip();
            ToolStripMenuItem itemShow = new ToolStripMenuItem("显示(&S)");
            itemShow.Click += ItemShow_Click;
            ToolStripMenuItem itemExit = new ToolStripMenuItem("退出(&X)");
            itemExit.Click += ItemExit_Click;
            notifyMenu.Items.Add(itemShow);
            notifyMenu.Items.Add(itemExit);

            //托盘控件
            notify = new NotifyIcon { Icon = Icon, Visible = true, ContextMenuStrip = notifyMenu, Text = Text };
            notify.MouseDoubleClick += Notify_MouseDoubleClick;

            ShowConfig();

            //Common.control.AgvChanged += Control_AgvChanged;
            //Common.control.AgvOnline += Control_AgvOnline;
            Common.server.NodeChanged += Server_NodeChanged;
            Common.server.NodeOnline += Server_NodeOnline;
        }

        private void FrmMain_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (!exit)
            {
                e.Cancel = true;
                Hide();
            }
        }

        private void DgvAgv_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex == -1) return;

            if (e.ColumnIndex == 8)  //调用
            {
                Common.agvInfo[e.RowIndex].IsUse = !Common.agvInfo[e.RowIndex].IsUse;
                DgvAgv.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = Common.agvInfo[e.RowIndex].IsUse.ToString();
                Common.appConfig.AppSettings.Settings[Common.agvInfo[e.RowIndex].Name].Value = Common.agvInfo[e.RowIndex].IsUse.ToString();
                Common.appConfig.Save();
            }
            else if (e.ColumnIndex == 9)  //清除缓存
            {
                //清除小车缓存
                //Common.log.OutInfo(string.Format("手动清除缓存,{0} {1}", Common.agvInfo[e.RowIndex].Name, Common.agvInfo[e.RowIndex].Place));
                //string place = Common.agvInfo[e.RowIndex].Place;
                //Common.agvInfo[e.RowIndex].Mark = "";
                //Common.agvInfo[e.RowIndex].Place = "";
                //Common.agvInfo[e.RowIndex].RFID = "";
                //Common.agvInfo[e.RowIndex].NextMission = "";
                //DgvAgv.Rows[e.RowIndex].SetValues(Common.agvInfo[e.RowIndex].ToRow());

                //清除节点缓存
                //int idx = Common.nodeInfo.FindIndex(s => s.Name == place);
                //if (idx > -1)
                //{
                //    Common.nodeInfo[idx].AgvName = "";
                //    DgvNode.Rows[idx].Cells[5].Value = "";
                //}

                ////添加Init任务
                //Common.mir.Add_Mission_Fleet(Common.agvInfo[e.RowIndex], Common.agvMission["Init"]);
                //Common.mir.State_Ready(Common.agvInfo[e.RowIndex]);
            }
        }

        private void DgvNode_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex == -1) return;

            if (e.ColumnIndex == 6)  //调用
            {
                Common.nodeInfo[e.RowIndex].IsUse = !Common.nodeInfo[e.RowIndex].IsUse;
                DgvNode.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = Common.nodeInfo[e.RowIndex].IsUse.ToString();
                Common.appConfig.AppSettings.Settings[Common.nodeInfo[e.RowIndex].Name].Value = Common.nodeInfo[e.RowIndex].IsUse.ToString();
                Common.appConfig.Save();
            }
            else if (e.ColumnIndex == 7)  //清除缓存
            {
                //清除节点缓存
                //Common.log.OutInfo(string.Format("手动清除缓存,{0} {1}", Common.nodeInfo[e.RowIndex].AgvName, Common.nodeInfo[e.RowIndex].Name));
                //string name = Common.nodeInfo[e.RowIndex].AgvName;
                //Common.nodeInfo[e.RowIndex].AgvName = "";
                //DgvNode.Rows[e.RowIndex].Cells[5].Value = "";

                //清除小车缓存
                //int idx = Common.agvInfo.FindIndex(s => s.Name == name);
                //if (idx > -1)
                //{
                //    Common.agvInfo[idx].Mark = "";
                //    Common.agvInfo[idx].Place = "";
                //    Common.agvInfo[idx].RFID = "";
                //    Common.agvInfo[idx].NextMission = "";
                //    DgvAgv.Rows[idx].SetValues(Common.agvInfo[idx].ToRow());
                //    //添加Init任务
                //    Common.mir.Add_Mission_Fleet(Common.agvInfo[idx], Common.agvMission["Init"]);
                //    Common.mir.State_Ready(Common.agvInfo[idx]);
                //}

            }
        }

        private void BtnMissionReady_Click(object sender, EventArgs e)
        {
            if (DgvAgv.SelectedCells.Count == 0) return;
            int idx = DgvAgv.SelectedCells[0].RowIndex;
            if (idx < 0) return;
            if (Common.agvInfo[idx].IsCon)
                Common.mir.State_Ready(Common.agvInfo[idx]);
        }

        private void BtnMissionPause_Click(object sender, EventArgs e)
        {
            if (DgvAgv.SelectedCells.Count == 0) return;
            int idx = DgvAgv.SelectedCells[0].RowIndex;
            if (idx < 0) return;
            if (Common.agvInfo[idx].IsCon)
                Common.mir.State_Pause(Common.agvInfo[idx]);
        }

        private void BtnMissionAdd_Click(object sender, EventArgs e)
        {
            if (DgvAgv.SelectedCells.Count == 0) return;
            int idx = DgvAgv.SelectedCells[0].RowIndex;
            if (idx < 0) return;
            if (Common.agvInfo[idx].IsCon)
                Common.mir.Add_Mission(Common.agvInfo[idx], Common.agvMission[LstAgvPlace.Text]);

        }

        private void BtnClearError_Click(object sender, EventArgs e)
        {
            if (DgvAgv.SelectedCells.Count == 0) return;
            int idx = DgvAgv.SelectedCells[0].RowIndex;
            if (idx < 0) return;
            if (Common.agvInfo[idx].IsCon)
                Common.mir.Clear_Error(Common.agvInfo[idx]);
        }




    } 
}