gxc
2019-10-29 081ea8d273048fd03756718ac6fb48a3c09218e9
ZigbeeApp/Shared/Phone/UserCenter/Gateway/Manage/GatewayInfoEditorForm.cs
@@ -1,6 +1,7 @@
using System;
using ZigBee.Device;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Shared.Phone.UserCenter.GatewayManage
{
@@ -12,13 +13,9 @@
        #region ■ 变量声明___________________________
        /// <summary>
        /// 网关名称控件
        /// 列表控件
        /// </summary>
        private FrameCaptionInputControl rowGateway = null;
        /// <summary>
        /// 设备明细列表控件的桌布
        /// </summary>
        private DeviceInformationListControl listDeviceControl = null;
        private VerticalListControl listview = null;
        /// <summary>
        /// 当前选择的网关
        /// </summary>
@@ -37,19 +34,10 @@
            this.zbGateway = i_zbGateway;
            //设置标题信息
            base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uEditorGatewayInformation));
            base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uDeviceSettion));
            //网关定位
            var btnIcon = new MostRightIconControl(69, 69);
            btnIcon.UnSelectedImagePath = "Item/Test.png";
            topFrameLayout.AddChidren(btnIcon);
            btnIcon.InitControl();
            btnIcon.ButtonClickEvent += (sender, e) =>
            {
                //测试
                HdlGatewayLogic.Current.SetTestCommand(i_zbGateway);
            };
            //初始化右上角菜单
            this.InitTopRightMenu();
            //初始化中部控件
            this.InitMiddleFrame();
@@ -63,162 +51,233 @@
            //清空bodyFrame
            this.ClearBodyFrame();
            //图片上下的间距(上下间距一致)
            int picSpcae = Application.GetRealHeight(100);
            //图片
            var btnImage = new PicViewControl(838, 530, true);
            btnImage.Y = picSpcae;
            btnImage.Gravity = Gravity.CenterHorizontal;
            HdlGatewayLogic.Current.SetRealGatewayPictrue(btnImage, zbGateway);
            bodyFrameLayout.AddChidren(btnImage);
            //初始化桌布
            var tableContr = new InformationEditorControl();
            this.listview = tableContr.InitControl(bodyFrameLayout, Language.StringByID(R.MyInternationalizationString.uInfoEditor), 369, 1368);
            //完成按钮
            var btnFinish = new BottomClickButton();
            btnFinish.TextID = R.MyInternationalizationString.uFinish;
            bodyFrameLayout.AddChidren(btnFinish);
            btnFinish.MouseUpEventHandler += (sender, e) =>
            //图片
            var btnPic = new DeviceInfoIconControl();
            btnPic.Y = Application.GetRealHeight(92);
            btnPic.Gravity = Gravity.CenterHorizontal;
            bodyFrameLayout.AddChidren(btnPic);
            btnPic.InitControl(this.zbGateway);
            //设备备注
            string caption = Language.StringByID(R.MyInternationalizationString.uDeviceNote);
            string nameValue = HdlGatewayLogic.Current.GetGatewayName(zbGateway);
            var btnNote = new FrameCaptionInputControl(caption, nameValue, listview.rowSpace / 2);
            listview.AddChidren(btnNote);
            btnNote.InitControl();
            //划线
            btnNote.AddBottomLine();
            btnNote.txtInput.FinishInputEvent += () =>
            {
                //完成按钮按下
                this.FinishButtonClick();
                string oldName = HdlGatewayLogic.Current.GetGatewayName(zbGateway);
                if (btnNote.Text == string.Empty)
                {
                    btnNote.Text = oldName;
                }
                if (oldName != btnNote.Text)
                {
                    //修改名字
                    this.SetGatewayName(btnNote.Text, false);
                }
            };
            //白色底部背景
            var frameBottomWhite = new FrameLayout();
            frameBottomWhite.Y = btnFinish.Y - ControlCommonResourse.BottomButtonAndListViewSpace;
            frameBottomWhite.Height = bodyFrameLayout.Height - btnFinish.Y + ControlCommonResourse.BottomButtonAndListViewSpace;
            frameBottomWhite.BackgroundColor = UserCenterColor.Current.White;
            bodyFrameLayout.AddChidren(frameBottomWhite);
            //将完成按钮置顶
            btnFinish.BringToFront();
            //设备类型
            caption = Language.StringByID(R.MyInternationalizationString.uDeviceType);
            var btnType = new FrameCaptionViewControl(caption, nameValue, listview.rowSpace / 2);
            btnType.UseClickStatu = false;
            listview.AddChidren(btnType);
            btnType.InitControl();
            HdlGatewayLogic.Current.SetGatewayImageText(btnType.txtView, this.zbGateway);
            //划线
            btnType.AddBottomLine();
            //自定义的设备列表容器
            this.listDeviceControl = new DeviceInformationListControl();
            //列表控件最大的高度(完成按钮的Y轴 - 设置的间隔 - 图片Y轴 - 图片的三分之一)
            int listViewMaxHeight = btnFinish.Y - ControlCommonResourse.BottomButtonAndListViewSpace - btnImage.Y - btnImage.Height / 3;
            //明细Frame的最小高度(底部frame的Y轴 - 图片底部 - 图片与弧度圆的间距 - 弧度圆高度)
            int minDetailHeight = frameBottomWhite.Y - btnImage.Bottom - picSpcae - listDeviceControl.halfRoundHeigth;
            //初始化控件
            listDeviceControl.InitControl(bodyFrameLayout, frameBottomWhite.Height, listViewMaxHeight, minDetailHeight, 4);
            //数据上传与下载
            var rowData = new RowLayoutControl(listview.rowSpace / 2);
            listview.AddChidren(rowData);
            rowData.frameTable.AddLeftCaption(Language.StringByID(R.MyInternationalizationString.uDataUploadAndDownLoad), 700);
            //右图标
            rowData.frameTable.AddRightArrow();
            //底线
            rowData.frameTable.AddBottomLine();
            rowData.frameTable.ButtonClickEvent += (sender, e) =>
            {
            };
            //设备编辑
            var btnTitle = new DetailTitleControl(Application.GetRealWidth(800), listDeviceControl.titleHeight, false);
            btnTitle.TextID = R.MyInternationalizationString.uDeviceEditor;
            listDeviceControl.AddChidren(btnTitle);
            //添加全部菜单行
            this.AddAllMenuRow();
        }
        #endregion
        #region ■ 添加全部菜单行_____________________
        /// <summary>
        /// 添加全部菜单行
        /// </summary>
        private void AddAllMenuRow()
        {
            //网关名称
            string caption = Language.StringByID(R.MyInternationalizationString.uGatewayName);
            string nameValue = HdlGatewayLogic.Current.GetGatewayName(zbGateway);
            this.rowGateway = new FrameCaptionInputControl(caption, nameValue);
            listDeviceControl.AddChidren(rowGateway);
            rowGateway.InitControl();
            rowGateway.AddBottomLine();
            //网关IP
            caption = Language.StringByID(R.MyInternationalizationString.uGatewayIP);
            nameValue = HdlGatewayLogic.Current.GetGatewayBaseInfoAttribute(zbGateway, "IpAddress").ToString();
            var btnIp = new FrameCaptionViewControl(caption, nameValue);
            listDeviceControl.AddChidren(btnIp);
            btnIp.InitControl();
            btnIp.txtView.TextColor = UserCenterColor.Current.TextGrayColor;
            btnIp.AddBottomLine();
            //主网关或者子网关标识
            var btnFlage = new RowMostRightTextView();
            btnFlage.TextColor = UserCenterColor.Current.TextGrayColor;
            btnIp.AddChidren(btnFlage, ChidrenBindMode.NotBind);
            int result = HdlGatewayLogic.Current.IsMainGateway(this.zbGateway);
            //主网关
            if (result == 1) { btnFlage.TextID = R.MyInternationalizationString.uMainGateway; }
            //子网关
            else if (result == 0) { btnFlage.TextID = R.MyInternationalizationString.uChidrenGateway; }
            //网关类型
            caption = Language.StringByID(R.MyInternationalizationString.uGatewayType);
            nameValue = HdlGatewayLogic.Current.GetGatewayImageText(this.zbGateway);
            var btnObject = new FrameCaptionViewControl(caption, nameValue);
            listDeviceControl.AddChidren(btnObject);
            btnObject.InitControl();
            btnObject.txtView.TextColor = UserCenterColor.Current.TextGrayColor;
            btnObject.AddBottomLine();
            //固件信息
            this.AddHardWareInfoRow();
        }
        #endregion
        #region ■ 添加固件信息行_____________________
        /// <summary>
        /// 添加固件信息行
        /// </summary>
        private void AddHardWareInfoRow()
        {
            var rowInfo = new RowLayoutControl();
            listDeviceControl.AddChidren(rowInfo);
            //固件信息
            //var btnInfo = new RowCenterViewControl(false, 14);
            //btnInfo.TextID = R.MyInternationalizationString.uFirmwareInformation;
            //rowInfo.AddChidren(btnInfo);
            //通用信息
            var btnGeneral = new FrameRowControl(listview.rowSpace / 2);
            listview.AddChidren(btnGeneral);
            btnGeneral.AddLeftCaption(Language.StringByID(R.MyInternationalizationString.uGeneralInformation), 600);
            //向右图标
            //rowInfo.AddRightArrow();
            btnGeneral.AddRightArrow();
            //底线
            btnGeneral.AddBottomLine();
            btnGeneral.ButtonClickEvent += (sender, e) =>
            {
                var form = new GatewayGeneralInformationForm();
                form.AddForm(zbGateway);
            };
            //新版本提示控件
            var btnNewVersion = new RowNewVersionTipView();
            //固件升级
            var rowUpDate = new FrameRowControl(listview.rowSpace / 2);
            listview.AddChidren(rowUpDate);
            rowUpDate.AddLeftCaption(Language.StringByID(R.MyInternationalizationString.uFirmwareUpdate), 600);
            //向右图标
            rowUpDate.AddRightArrow();
            //底线
            rowUpDate.AddBottomLine();
            //提示有新版本
            var btnNewVersion = new PicViewControl(78, 55);
            btnNewVersion.UnSelectedImagePath = "Item/NewVersion.png";
            btnNewVersion.Visible = false;
            rowInfo.AddChidren(btnNewVersion);
            btnNewVersion.X = Application.GetRealWidth(242);
            btnNewVersion.Y = Application.GetRealHeight(23);
            rowUpDate.AddChidren(btnNewVersion, ChidrenBindMode.BindEventOnly);
            rowUpDate.ButtonClickEvent += (sender, e) =>
            {
                btnNewVersion.Visible = false;
            };
            //rowInfo.MouseUpEvent += (sender, e) =>
            //{
            //    btnNewVersion.Visible = false;
            //    var form = new GatewayFirmwareInfoForm();
            //    form.AddForm(zbGateway);
            //};
            //初始化桌布完成
            tableContr.FinishInitControl(bodyFrameLayout, this.listview);
            tableContr = null;
            //检测新版本
            this.CheckNewVersion(btnNewVersion);
            //保存
            var btnFinish = new BottomClickButton();
            btnFinish.TextID = R.MyInternationalizationString.uSave;
            bodyFrameLayout.AddChidren(btnFinish);
            btnFinish.ButtonClickEvent += (sender, e) =>
            {
                string oldName = HdlGatewayLogic.Current.GetGatewayName(zbGateway);
                if (btnNote.Text == string.Empty)
                {
                    btnNote.Text = oldName;
                }
                if (oldName != btnNote.Text)
                {
                    //修改名字
                    this.SetGatewayName(btnNote.Text, false);
                }
                else
                {
                    //关闭自身
                    this.CloseForm();
                }
            };
            HdlThreadLogic.Current.RunThread(() =>
            {
                //检测新版本
                this.CheckNewVersion(btnNewVersion, btnType);
            });
        }
        #endregion
        #region ■ 右上角菜单_________________________
        /// <summary>
        /// 初始化右上角菜单
        /// </summary>
        private void InitTopRightMenu()
        {
            var btnIcon = new MostRightIconControl(69, 69);
            btnIcon.UnSelectedImagePath = "Item/More.png";
            topFrameLayout.AddChidren(btnIcon);
            btnIcon.InitControl();
            btnIcon.ButtonClickEvent += ((sender, e) =>
            {
                //显示右上角菜单界面
                this.ShowTopRightMenu();
            });
        }
        /// <summary>
        /// 显示右上角菜单界面
        /// </summary>
        private void ShowTopRightMenu()
        {
            bool flage = UserCenterResourse.DicActionForm.ContainsKey("NewGateWayMenuSelectForm");
            var frame = new TopRightMenuControl(flage == true ? 1 : 3);
            //定位
            string MenuName = Language.StringByID(R.MyInternationalizationString.uFixedPosition);
            frame.AddRowMenu(MenuName, "Item/FixedPosition.png", "Item/FixedPositionSelected.png", () =>
            {
                //发送定位功能
                HdlGatewayLogic.Current.SetFixedPositionCommand(zbGateway);
            });
            if (flage == true)
            {
                //搜索网关的时候,不能删除,不给他切换
                return;
            }
            //切换
            MenuName = Language.StringByID(R.MyInternationalizationString.uSwitch1);
            string strWayId = HdlGatewayLogic.Current.GetGatewayId(zbGateway);
            if (strWayId == GatewayResourse.AppOldSelectGatewayId)
            {
                MenuName = Language.StringByID(R.MyInternationalizationString.uRefresh);
            }
            frame.AddRowMenu(MenuName, "Item/GwSwitchIcon.png", "Item/GwSwitchIconSelected.png", () =>
            {
                string nameValue = HdlGatewayLogic.Current.GetGatewayName(zbGateway);
                //是否切换到{0}网关?
                string msg = string.Format(Language.StringByID(R.MyInternationalizationString.uConfirmWantToSwitchTheGateway), "[" + nameValue + "]");
                if (strWayId == GatewayResourse.AppOldSelectGatewayId)
                {
                    //是否重新刷新{0}网关?
                    msg = string.Format(Language.StringByID(R.MyInternationalizationString.uConfirmWantToRefreshTheGateway), "[" + nameValue + "]");
                }
                this.ShowMassage(ShowMsgType.Confirm, msg, () =>
                {
                    HdlThreadLogic.Current.RunThread(() =>
                    {
                        //执行切换网关操作
                        this.DoSwitchGateway();
                    });
                });
            });
            //删除
            MenuName = Language.StringByID(R.MyInternationalizationString.uDelete);
            frame.AddRowMenu(MenuName, "Item/DeleteIcon2.png", "Item/DeleteIcon2Selected.png", () =>
            {
                //如移除网关,该网关绑定的设备列表{0}将清空,确认继续执行该操作?
                string msg = Language.StringByID(R.MyInternationalizationString.uUnBindedMsg);
                if (msg.Contains("{0}") == true)
                {
                    msg = string.Format(msg, "\r\n");
                }
                this.ShowMassage(ShowMsgType.Confirm, msg, () =>
                {
                    this.DeleteGateway(strWayId);
                });
            });
        }
        #endregion
        #region ■ 检测新版本_________________________
        /// <summary>
        /// 检测新版本
        /// </summary>
        /// <param name="btnNewVersion">提示有新版本的控件</param>
        private async void CheckNewVersion(RowNewVersionTipView btnNewVersion)
        /// <param name="btnType">网关类型控件</param>
        private async void CheckNewVersion(PicViewControl btnNewVersion, FrameCaptionViewControl btnType)
        {
            //打开进度条
            this.ShowProgressBar();
            //获取网关版本信息
            var result = await HdlGatewayLogic.Current.GetGatewayAllNewVersion(this.zbGateway);
            if (result == null)
            {
                //关闭进度条
                this.CloseProgressBar(ShowReLoadMode.YES);
                return;
            }
            //关闭进度条
            this.CloseProgressBar();
            Application.RunOnMainThread(() =>
            {
                if (this.rowGateway != null)
                if (this.Parent != null)
                {
                    //设置网关名称
                    this.rowGateway.Text = HdlGatewayLogic.Current.GetGatewayName(zbGateway);
                    HdlGatewayLogic.Current.SetGatewayImageText(btnType.txtView, this.zbGateway);
                    if (result[0] != null || result[1] != null || result[2] != null)
                    {
                        //提示有新版本
@@ -235,25 +294,25 @@
        /// <summary>
        /// 完成按钮按下
        /// </summary>
        private void FinishButtonClick()
        /// <param name="gatewayName">网关名</param>
        private void FinishButtonClick(string gatewayName)
        {
            if (string.IsNullOrEmpty(this.rowGateway.Text) == true)
            if (string.IsNullOrEmpty(gatewayName) == true)
            {
                //请输入网关名称
                this.rowGateway.Text = string.Empty;
                string msg = Language.StringByID(R.MyInternationalizationString.uGatewayNameMastInput);
                this.ShowMassage(ShowMsgType.Error, msg);
                return;
            }
            string nameValue = HdlGatewayLogic.Current.GetGatewayName(zbGateway);
            if (nameValue == this.rowGateway.Text)
            if (nameValue == gatewayName)
            {
                //同名不需要处理
                this.CloseForm();
                return;
            }
            //修改名字
            this.SetGatewayName(this.rowGateway.Text);
            this.SetGatewayName(gatewayName, true);
        }
        #endregion
@@ -264,26 +323,91 @@
        /// 设置网关名字
        /// </summary>
        /// <param name="gatewayName">网关名称</param>
        private async void SetGatewayName(string gatewayName)
        private async void SetGatewayName(string gatewayName, bool closeForm)
        {
            //打开进度条
            this.ShowProgressBar();
            //修改网关名
            var result = await HdlGatewayLogic.Current.ReName(zbGateway, gatewayName);
            //关闭进度条
            this.CloseProgressBar();
            //网关修改失败
            if (result == false)
            {
                return;
            }
            Application.RunOnMainThread(() =>
            if (closeForm == true)
            {
                //关闭界面
                this.CloseForm();
            }
        }
        #endregion
        #region ■ 网关切换___________________________
        /// <summary>
        /// 执行切换网关操作
        /// </summary>
        /// <param name="gatewayId"></param>
        /// <param name="online"></param>
        private async void DoSwitchGateway()
        {
            string gatewayId = HdlGatewayLogic.Current.GetGatewayId(zbGateway);
            var result = await HdlGatewayLogic.Current.DoSwitchGateway(gatewayId);
            if (result == false)
            {
                return;
            }
            HdlThreadLogic.Current.RunMain(() =>
            {
                //关闭自身
                this.CloseForm();
                //关闭指定界面(网关搜索)
                this.CloseFormByFormName("WiredGatewayListForm");
                this.CloseFormByFormName("NewGateWayMenuSelectForm");
                //关闭指定界面(网关编辑)
                this.CloseFormByFormName("GatewayListForm");
                if (UserCenterResourse.DicActionForm.ContainsKey("DeviceListMainForm") == false)
                {
                    //刷新主画面
                    var form = new Device.DeviceListMainForm();
                    form.AddForm();
                }
                else
                {
                    //刷新主画面(不重新获取设备状态)
                    this.LoadFormMethodByName("DeviceListMainForm", "InitMiddleFrame", false);
                }
            });
        }
        #endregion
        #region ■ 解绑网关___________________________
        /// <summary>
        /// 解绑网关
        /// </summary>
        /// <param name="strWayId"></param>
        /// <param name="row"></param>
        private async void DeleteGateway(string strWayId)
        {
            //删除云端网关
            bool result = await HdlGatewayLogic.Current.DeleteGateway(strWayId);
            if (result == false)
            {
                return;
            }
            if (strWayId == GatewayResourse.AppOldSelectGatewayId)
            {
                HdlGatewayLogic.Current.SaveGatewayIdToLocation(string.Empty);
            }
            //关闭自身
            this.CloseForm();
        }
        #endregion
    }
}