From 6fa9d69da922c8049f5acfcbb9ce9fd26811024c Mon Sep 17 00:00:00 2001
From: xm <1271024303@qq.com>
Date: 星期四, 16 四月 2020 17:10:57 +0800
Subject: [PATCH] 请合并代码
---
ZigbeeApp/Shared/Phone/UserCenter/Device/DeviceFunctionSettionForm.cs | 581 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 581 insertions(+), 0 deletions(-)
diff --git a/ZigbeeApp/Shared/Phone/UserCenter/Device/DeviceFunctionSettionForm.cs b/ZigbeeApp/Shared/Phone/UserCenter/Device/DeviceFunctionSettionForm.cs
new file mode 100755
index 0000000..3a52b0e
--- /dev/null
+++ b/ZigbeeApp/Shared/Phone/UserCenter/Device/DeviceFunctionSettionForm.cs
@@ -0,0 +1,581 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Text;
+using ZigBee.Device;
+
+namespace Shared.Phone.UserCenter.Device
+{
+ /// <summary>
+ /// 璁惧鐨勫姛鑳借缃晫闈�
+ /// </summary>
+ public class DeviceFunctionSettionForm : EditorCommonForm
+ {
+ #region 鈻� 鍙橀噺澹版槑___________________________
+
+ /// <summary>
+ /// 鍒楄〃鎺т欢
+ /// </summary>
+ private FrameListControl listview = null;
+ /// <summary>
+ /// 褰撳墠閫夋嫨鐨勮澶�
+ /// </summary>
+ private CommonDevice nowSelectDevice = null;
+ /// <summary>
+ /// 褰撳墠閫夋嫨鐨勫洖璺帶浠�
+ /// </summary>
+ private NormalViewControl nowSelectControl = null;
+ /// <summary>
+ /// 璁惧澶囨敞鐨勬帶浠�
+ /// </summary>
+ private FrameCaptionInputControl btnDeviceName = null;
+ /// <summary>
+ /// 璁惧鐨勬煇涓�鍥炶矾
+ /// </summary>
+ private CommonDevice deviceObj = null;
+ /// <summary>
+ /// 鍙樉绀哄悓涓�绉嶇被鍨嬬殑鍥炶矾
+ /// </summary>
+ private bool onlyType = false;
+ /// <summary>
+ /// 璁惧闇�瑕佷繚瀛樼殑璁惧鍚嶅瓧
+ /// </summary>
+ private Dictionary<int, string> dicDeviceSaveName = new Dictionary<int, string>();
+ /// <summary>
+ /// 璁惧闇�瑕佷繚瀛樼殑璁惧鍔熻兘
+ /// </summary>
+ private Dictionary<int, DeviceFunctionType> dicDeviceFuncType = new Dictionary<int, DeviceFunctionType>();
+ /// <summary>
+ /// 淇℃伅缂栬緫鎺т欢
+ /// </summary>
+ private InformationEditorControl tableContr = null;
+
+ #endregion
+
+ #region 鈻� 鍒濆鍖朹____________________________
+
+ /// <summary>
+ /// 鐢婚潰鏄剧ず(搴曞眰浼氬浐瀹氳皟鐢ㄦ鏂规硶锛屽�熶互瀹屾垚鐢婚潰鍒涘缓)
+ /// </summary>
+ /// <param name="i_device">璁惧鐨勬煇涓�鍥炶矾</param>
+ /// <param name="i_onlyType">鍙樉绀哄悓涓�绉嶇被鍨嬬殑鍥炶矾</param>
+ public void ShowForm(CommonDevice i_device, bool i_onlyType)
+ {
+ this.deviceObj = i_device;
+ this.onlyType = i_onlyType;
+
+ //璁剧疆澶撮儴淇℃伅
+ base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uFunctionSettingUp));
+
+ //鍒濆鍖栦腑閮ㄤ俊鎭�
+ this.InitMiddleFrame();
+
+ //鍒濆鍖栧彸涓婅鑿滃崟
+ this.InitTopRightMenu();
+ }
+
+ /// <summary>
+ /// 鍒濆鍖栦腑閮ㄤ俊鎭�
+ /// </summary>
+ private void InitMiddleFrame()
+ {
+ //娓呯┖bodyFrame
+ this.ClearBodyFrame();
+
+ var listBackControl = new VerticalFrameControl();
+ listBackControl.Height = bodyFrameLayout.Height;
+ bodyFrameLayout.AddChidren(listBackControl);
+
+ //鍒濆鍖栨甯�
+ this.tableContr = new InformationEditorControl();
+ this.listview = tableContr.InitControl(listBackControl.frameTable, Language.StringByID(R.MyInternationalizationString.uDeviceEditor), 1128);
+
+ //鍒濆鍖栬澶囧洖璺浘鏍�
+ this.InitDeviceEpointIcon(listBackControl);
+
+ //淇濆瓨
+ var btnFinish = new BottomClickButton();
+ btnFinish.TextID = R.MyInternationalizationString.uSave;
+ bodyFrameLayout.AddChidren(btnFinish);
+ btnFinish.ButtonClickEvent += async (sender, e) =>
+ {
+ //璁板綍璧峰綋鍓嶆鍦ㄦ搷浣滅殑鍥炶矾鍚嶅瓧
+ dicDeviceSaveName[nowSelectDevice.DeviceEpoint] = btnDeviceName.Text.Trim();
+ //寮�鍚繘搴︽潯
+ this.ShowProgressBar();
+ foreach (var epoint in dicDeviceSaveName.Keys)
+ {
+ var device = Common.LocalDevice.Current.GetDevice(deviceObj.DeviceAddr, epoint);
+ if (device == null || dicDeviceSaveName[epoint] == string.Empty)
+ {
+ //涓嶈兘鍏佽绌虹櫧鍚嶅瓧
+ continue;
+ }
+ string newName = dicDeviceSaveName[epoint];
+ string oldName = Common.LocalDevice.Current.GetDeviceEpointName(device);
+ if (oldName != newName)
+ {
+ //璁惧鍚嶇О淇敼
+ var result = await Common.LocalDevice.Current.ReName(device, newName);
+ if (result == false)
+ {
+ //鍏抽棴
+ this.CloseProgressBar();
+ return;
+ }
+ }
+ }
+ foreach (var epoint in dicDeviceFuncType.Keys)
+ {
+ var device = Common.LocalDevice.Current.GetDevice(deviceObj.DeviceAddr, epoint);
+ if (device == null)
+ {
+ continue;
+ }
+ //璁剧疆鍔熻兘绫诲瀷
+ device.DfunctionType = dicDeviceFuncType[epoint];
+ if (device.IsCustomizeImage == true)
+ {
+ continue;
+ }
+ //閲嶆柊璁剧疆鍥剧墖
+ if (device.DfunctionType == DeviceFunctionType.A寮�鍏�)
+ {
+ device.IconPath = "Device/Switch.png";
+ }
+ else if (device.DfunctionType == DeviceFunctionType.A鎻掑骇)
+ {
+ device.IconPath = "Device/Socket1.png";
+ }
+ else if (device.DfunctionType == DeviceFunctionType.A鐏厜)
+ {
+ device.IconPath = "Device/Light.png";
+ }
+ device.ReSave();
+ }
+ this.CloseProgressBar();
+ //鍏抽棴鑷韩
+ this.CloseForm();
+ };
+ }
+
+ /// <summary>
+ /// 鍒濆鍖栬彍鍗曡
+ /// </summary>
+ private void InitMenuRow()
+ {
+ this.listview.RemoveAll();
+
+ //鍥炶矾澶囨敞
+ string caption = Language.StringByID(R.MyInternationalizationString.uDeviceEpointNote);
+ string nameValue = Common.LocalDevice.Current.GetDeviceEpointName(nowSelectDevice);
+ if (dicDeviceSaveName.ContainsKey(nowSelectDevice.DeviceEpoint) == true)
+ {
+ nameValue = dicDeviceSaveName[nowSelectDevice.DeviceEpoint];
+ }
+
+ this.btnDeviceName = new FrameCaptionInputControl(caption, nameValue, listview.rowSpace / 2);
+ listview.AddChidren(btnDeviceName);
+ btnDeviceName.InitControl();
+ btnDeviceName.AddBottomLine();
+ btnDeviceName.txtInput.FinishInputEvent += async () =>
+ {
+ string oldName = Common.LocalDevice.Current.GetDeviceEpointName(nowSelectDevice);
+ if (btnDeviceName.Text.Trim() == string.Empty)
+ {
+ //灏嗗悕瀛楄繕鍘�
+ btnDeviceName.Text = oldName;
+ }
+ if (oldName != btnDeviceName.Text.Trim())
+ {
+ //璁惧鍚嶇О淇敼
+ var result = await Common.LocalDevice.Current.ReName(nowSelectDevice, btnDeviceName.Text.Trim());
+ if (result == false)
+ {
+ return;
+ }
+ //鍥炶矾澶囨敞淇敼鎴愬姛!
+ string msg = Language.StringByID(R.MyInternationalizationString.uDeviceEpointReNoteSuccess);
+ this.ShowMassage(ShowMsgType.Tip, msg);
+ }
+ };
+
+ //鎵�灞炲尯鍩�
+ var rowBeloneArea = new BelongAreaControl(listview.rowSpace / 2);
+ listview.AddChidren(rowBeloneArea);
+ rowBeloneArea.InitControl(Language.StringByID(R.MyInternationalizationString.uBelongArea), nowSelectDevice);
+ //搴曠嚎
+ rowBeloneArea.AddBottomLine();
+ rowBeloneArea.SelectRoomEvent += (roomKeys) =>
+ {
+ //鍙樻洿鎴块棿
+ HdlRoomLogic.Current.ChangedRoom(nowSelectDevice, roomKeys);
+ };
+
+ //娣诲姞鍔熻兘绫诲瀷琛�
+ this.AddFunctionTypeRow();
+ //鍒濆鍖栨甯冨畬鎴�
+ tableContr.FinishInitControl();
+ }
+
+ #endregion
+
+ #region 鈻� 鍙充笂瑙掕彍鍗昣________________________
+
+ /// <summary>
+ /// 鍒濆鍖栧彸涓婅鑿滃崟
+ /// </summary>
+ private void InitTopRightMenu()
+ {
+ //妫�娴嬫鍥炶矾鏄惁鎷ユ湁瀹氫綅鍔熻兘
+ if (Common.LocalDevice.Current.DeviceIsCanFixedPosition(nowSelectDevice) == false)
+ {
+ return;
+ }
+ 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()
+ {
+ int menuCount = 1;
+ string deviceMenu = string.Empty;
+ //妫�娴嬫鍥炶矾鏄惁鎷ユ湁瀹氫綅鍔熻兘
+ bool canTest = Common.LocalDevice.Current.DeviceIsCanFixedPosition(nowSelectDevice);
+ //if (canTest == true)
+ //{
+ // menuCount = 2;
+ //}
+ var frame = new TopRightMenuControl(menuCount, 1);
+ if (canTest == true)
+ {
+ //瀹氫綅
+ deviceMenu = Language.StringByID(R.MyInternationalizationString.uFixedPosition);
+ frame.AddRowMenu(deviceMenu, "Item/FixedPosition.png", "Item/FixedPositionSelected.png", () =>
+ {
+ //鍙戦�佸畾浣嶅姛鑳�
+ Common.LocalDevice.Current.SetFixedPositionCommand(nowSelectDevice);
+ });
+ }
+
+ //鍒犻櫎
+ //deviceMenu = Language.StringByID(R.MyInternationalizationString.uDelete);
+ //frame.AddRowMenu(deviceMenu, "Item/DeleteIcon2.png", "Item/DeleteIcon2Selected.png", () =>
+ //{
+ //});
+ }
+
+ #endregion
+
+ #region 鈻� 鍔熻兘绫诲瀷___________________________
+
+ /// <summary>
+ /// 娣诲姞鍔熻兘绫诲瀷琛�
+ /// </summary>
+ private void AddFunctionTypeRow()
+ {
+ //濡傛灉鏄户鐢靛櫒鍜岃皟鍏夊櫒鐨勮瘽
+ if (nowSelectDevice.Type == DeviceType.OnOffOutput || nowSelectDevice.Type == DeviceType.DimmableLight
+ || nowSelectDevice.Type == DeviceType.ColorDimmableLight)
+ {
+ //鍔熻兘绫诲瀷
+ string caption = Language.StringByID(R.MyInternationalizationString.uFunctionType);
+ var DfunctionType = nowSelectDevice.DfunctionType;
+ if (this.dicDeviceFuncType.ContainsKey(nowSelectDevice.DeviceEpoint) == true)
+ {
+ DfunctionType = this.dicDeviceFuncType[nowSelectDevice.DeviceEpoint];
+ }
+
+ //鍔熻兘绫诲瀷鐨勭炕璇戝悕瀛�
+ int nowSelectNo = 1;
+ string strType = string.Empty;
+ if (DfunctionType == DeviceFunctionType.A鐏厜)
+ {
+ strType = Language.StringByID(R.MyInternationalizationString.uLight);
+ nowSelectNo = 1;
+ }
+ else if (DfunctionType == DeviceFunctionType.A寮�鍏�)
+ {
+ strType = Language.StringByID(R.MyInternationalizationString.uSwitch);
+ nowSelectNo = 0;
+ }
+ else if (DfunctionType == DeviceFunctionType.A鎻掑骇)
+ {
+ strType = Language.StringByID(R.MyInternationalizationString.uSocket1);
+ nowSelectNo = 2;
+ }
+
+ var btnFunction = new FrameCaptionViewControl(caption, strType, listview.rowSpace / 2);
+ btnFunction.UseClickStatu = false;
+ listview.AddChidren(btnFunction);
+ btnFunction.InitControl();
+ //搴曠嚎
+ btnFunction.AddBottomLine();
+
+ //濡傛灉鏄户鐢靛櫒鎵嶈兘澶熸洿鏀硅繖涓姛鑳界被鍨�
+ if (nowSelectDevice.Type == DeviceType.OnOffOutput)
+ {
+ btnFunction.UseClickStatu = true;
+ //鍙崇澶�
+ btnFunction.AddRightArrow();
+ btnFunction.ButtonClickEvent += (sender, e) =>
+ {
+ //鏄剧ず鍒楄〃
+ var listText = new List<string>();
+ listText.Add(Language.StringByID(R.MyInternationalizationString.uSwitch));//寮�鍏�
+ listText.Add(Language.StringByID(R.MyInternationalizationString.uLight));//鐏厜
+ listText.Add(Language.StringByID(R.MyInternationalizationString.uSocket1));//鎻掑骇
+ //鏍囬:閫夋嫨鍔熻兘绫诲瀷
+ var title = Language.StringByID(R.MyInternationalizationString.uSelectFunctionType);
+
+ var form = new BottomItemSelectForm();
+ form.AddForm(title, listText, nowSelectNo);
+ form.FinishSelectEvent += (selectNo) =>
+ {
+ btnFunction.Text = listText[selectNo];
+ nowSelectNo = selectNo;
+ //璁板綍璧峰綋鍓嶉�夋嫨鐨勫姛鑳界被鍨�
+ if (selectNo == 0)
+ {
+ dicDeviceFuncType[nowSelectDevice.DeviceEpoint] = DeviceFunctionType.A寮�鍏�;
+ }
+ else if (selectNo == 1)
+ {
+ dicDeviceFuncType[nowSelectDevice.DeviceEpoint] = DeviceFunctionType.A鐏厜;
+ }
+ else
+ {
+ dicDeviceFuncType[nowSelectDevice.DeviceEpoint] = DeviceFunctionType.A鎻掑骇;
+ }
+ };
+ };
+ }
+ }
+ }
+
+ #endregion
+
+ #region 鈻� 鍒濆鍖栬澶囧洖璺浘鏍嘷________________
+
+ /// <summary>
+ /// 鍒濆鍖栬澶囧洖璺浘鏍�
+ /// </summary>
+ private void InitDeviceEpointIcon(VerticalFrameControl listBackControl)
+ {
+ //鑾峰彇鎸夌粍鍒嗛厤鐨勮澶�
+ var listIcon = this.GetAllDeviceGroup();
+
+ var frameBorder = new FrameLayout();
+ frameBorder.Y = Application.GetRealHeight(147);
+ frameBorder.Gravity = Gravity.CenterHorizontal;
+ frameBorder.Width = this.GetPictrueRealSize(887);
+ frameBorder.Height = Application.GetRealHeight(423);
+ frameBorder.Radius = (uint)Application.GetRealHeight(6);
+ listBackControl.frameTable.AddChidren(frameBorder);
+
+ var frameBack = new FrameLayout();
+ frameBack.Height = frameBorder.Height;
+
+ if (listIcon.Count > 2)
+ {
+ //闇�瑕佹粦鍔ㄦ帶浠�
+ var listControl = new VerticalScrolViewLayout();
+ listControl.Height = frameBorder.Height;
+ frameBorder.AddChidren(listControl);
+
+ listControl.AddChidren(frameBack);
+ }
+ else
+ {
+ //涓嶉渶瑕佹粦鍔ㄦ帶浠�
+ frameBorder.AddChidren(frameBack);
+ }
+
+ int index = 0;
+ for (int i = 0; i < listIcon.Count; i++)
+ {
+ var frame = new FrameLayout();
+ frame.Width = frameBorder.Width;
+ frame.Height = this.GetPictrueRealSize(124);
+ frameBack.AddChidren(frame);
+ //鍒濆鍖栦竴琛岃澶囧浘鏍�
+ this.InitDeviceIconFrame(frame, listIcon[i], ref index);
+
+ if (listIcon.Count == 1)
+ {
+ frame.Gravity = Gravity.CenterVertical;
+ }
+ else
+ {
+ frame.Y = this.GetPictrueRealSize(58) + (frameBack.ChildrenCount - 1) * (frame.Height + this.GetPictrueRealSize(60));
+ }
+ }
+
+ if (listIcon.Count > 2)
+ {
+ //璁$畻鐪熷疄楂樺害
+ int realHeight = this.GetPictrueRealSize(58 + 58);//涓婁笅闂磋窛
+ realHeight += frameBack.ChildrenCount * this.GetPictrueRealSize(124);//鍦嗗湀楂樺害
+ realHeight += (frameBack.ChildrenCount-1) * this.GetPictrueRealSize(60);//鍦嗗湀闂磋窛
+ if (realHeight > frameBack.Height)
+ {
+ //鍙樻洿楂樺害
+ frameBack.Height = realHeight;
+ }
+ }
+ }
+
+ /// <summary>
+ /// 鍒濆鍖栦竴琛岃澶囧浘鏍�
+ /// </summary>
+ /// <param name="frame"></param>
+ /// <param name="listDevice"></param>
+ /// <param name="index"></param>
+ /// <returns></returns>
+ private void InitDeviceIconFrame(FrameLayout frame, List<CommonDevice> listDevice, ref int index)
+ {
+ NormalViewControl btnTemp = null;
+ //闂磋窛
+ int space = this.GetPictrueRealSize(84);
+ int defultXX = (frame.Width - frame.Height * listDevice.Count - (listDevice.Count - 1) * space) / 2;
+ for (int i = 0; i < listDevice.Count; i++)
+ {
+ index++;
+ var btnIcon = new NormalViewControl(frame.Height, frame.Height, false);
+ btnIcon.Name = "btn" + listDevice[i].DeviceEpoint;
+ btnIcon.X = defultXX + i * (frame.Height + space);
+ btnIcon.Radius = (uint)frame.Height / 2;
+ btnIcon.BorderWidth = 2;
+ btnIcon.BorderColor = 0xff979797;
+ btnIcon.TextAlignment = TextAlignment.Center;
+ btnIcon.TextColor = UserCenterColor.Current.TextGrayColor3;
+ btnIcon.TextSize = 13;
+ btnIcon.Text = "CH" + index;
+ frame.AddChidren(btnIcon);
+ //鐐瑰嚮浜嬩欢
+ btnIcon.ButtonClickEvent += this.DeviceEpointSelectEvent;
+
+ if (listDevice[i].DeviceEpoint == deviceObj.DeviceEpoint)
+ {
+ btnTemp = btnIcon;
+ }
+ }
+ if (btnTemp != null)
+ {
+ //鍒濆鍖栬彍鍗曡
+ this.DeviceEpointSelectEvent(btnTemp, null);
+ }
+ }
+
+ /// <summary>
+ /// 鑾峰彇鎸夌粍鍒嗛厤鐨勮澶�
+ /// </summary>
+ /// <returns></returns>
+ private List<List<CommonDevice>> GetAllDeviceGroup()
+ {
+ bool hadDevice = false;
+ var listDevice = Common.LocalDevice.Current.GetDevicesByMac(deviceObj.DeviceAddr);
+ var listRelay = new List<CommonDevice>();
+ foreach (var device in listDevice)
+ {
+ if (device.Type == DeviceType.OnOffSwitch)
+ {
+ //杩欎釜鐣岄潰涓嶅鐞嗗共鎺ョ偣
+ continue;
+ }
+ if (this.onlyType == true && device.Type != deviceObj.Type)
+ {
+ //鍙鍚屼竴绉嶇被鍨嬬殑
+ continue;
+ }
+ listRelay.Add(device);
+ if (device.DeviceEpoint == deviceObj.DeviceEpoint)
+ {
+ //鑳藉鍖归厤寰楀埌杩欎釜鍥炶矾
+ hadDevice = true;
+ }
+ }
+ //鎺掑簭
+ listRelay.Sort((obj1, obj2) =>
+ {
+ if (obj1.DeviceEpoint > obj2.DeviceEpoint)
+ {
+ return 1;
+ }
+ return -1;
+ });
+ if (hadDevice == false)
+ {
+ //濡傛灉鍖归厤涓嶅埌杩欎釜鍥炶矾,鍒欓粯璁ょ涓�涓�
+ this.deviceObj = listRelay[0];
+ }
+
+ //浠庝笅寰�涓�4涓负涓�缁�
+ var listIcon = new List<List<CommonDevice>>();
+ var listTemp = new List<CommonDevice>();
+ for (int i = listRelay.Count - 1; i >= 0; i--)
+ {
+ listTemp.Insert(0, listRelay[i]);
+ if (listTemp.Count == 4)
+ {
+ listIcon.Insert(0, listTemp);
+ listTemp = new List<CommonDevice>();
+ }
+ }
+ if (listTemp.Count > 0)
+ {
+ listIcon.Insert(0, listTemp);
+ }
+ return listIcon;
+ }
+
+ #endregion
+
+ #region 鈻� 鍥炶矾閫夋嫨___________________________
+
+ /// <summary>
+ /// 鍥炶矾閫夋嫨浜嬩欢
+ /// </summary>
+ /// <param name="sender"></param>
+ /// <param name="e"></param>
+ private void DeviceEpointSelectEvent(object sender, MouseEventArgs e)
+ {
+ var nowContr = (NormalViewControl)sender;
+ if (nowSelectControl != null)
+ {
+ //鍚屼竴涓笢瑗�,涓嶉笩浠�
+ if (nowSelectControl.Name == nowContr.Name)
+ {
+ return;
+ }
+ //涓嶉�夋嫨鐘舵��
+ nowSelectControl.BorderColor = 0xff979797;
+ nowSelectControl.TextSize = 13;
+ nowSelectControl.TextColor = UserCenterColor.Current.TextGrayColor3;
+ //璁板綍瀹冪殑鍚嶅瓧
+ dicDeviceSaveName[nowSelectDevice.DeviceEpoint] = btnDeviceName.Text.Trim();
+ }
+ //閫夋嫨鐘舵��
+ nowContr.BorderColor = 0xfffb744a;
+ nowContr.TextSize = 14;
+ nowContr.TextColor = UserCenterColor.Current.TextColor1;
+
+ nowSelectControl = nowContr;
+ nowSelectDevice = Common.LocalDevice.Current.GetDevice(deviceObj.DeviceAddr, Convert.ToInt32(nowContr.Name.Replace("btn", string.Empty)));
+
+ //閲嶆柊鍒濆鍖栬彍鍗曡
+ this.InitMenuRow();
+ }
+
+ #endregion
+ }
+}
--
Gitblit v1.8.0