using System; using System.Collections.Generic; using System.Threading; using HDL_ON.DAL.Server; using HDL_ON.DriverLayer; using HDL_ON.Entity; using HDL_ON.UI.CSS; using Shared; namespace HDL_ON.UI { public class AddLightScene : FrameLayout { #region 控件列表 /// /// 当前窗体 /// static FrameLayout bodyView; /// /// 楼层选择下拉图标 /// Button btnFloorDownIcon; /// /// 楼层显示 /// Button btnFloor; /// /// 全选按钮 /// Button btnChooseAll; /// /// 功能列表集合显示区域 /// static VerticalScrolViewLayout functionListView; /// /// 完成按钮 /// Button btnConfrim; #endregion /// /// 场景里面的功能列表 /// List sceneLishtList; /// /// 本地的灯光列表 /// List lightList; /// /// 场景对象 /// Scene scene; /// /// 回调刷新 /// Action backActon; public AddLightScene(List functions,Scene inParscene, Action action) { bodyView = this; sceneLishtList = functions; scene = inParscene; backActon = action; lightList = FunctionList.List.GetLightList(); } public void LoadPage() { bodyView.BackgroundColor = CSS_Color.BackgroundColor; new TopViewDiv(bodyView, Language.StringByID(StringId.CombinedDimming)).LoadTopView(); scene.name = Language.StringByID(StringId.CombinedDimming); /// /// 房间内容显示区域 /// var roomFloorChangeView = new FrameLayout() { Y = Application.GetRealHeight(64), Height = Application.GetRealHeight(52), }; bodyView.AddChidren(roomFloorChangeView); #region 房间顶部切换显示区域 btnFloorDownIcon = new Button() { Width = Application.GetMinRealAverage(16), Height = Application.GetMinRealAverage(16), X = Application.GetRealWidth(16), Y = Application.GetRealHeight(18), UnSelectedImagePath = "Public/DownIcon.png", }; roomFloorChangeView.AddChidren(btnFloorDownIcon); btnFloor = new Button() { X = btnFloorDownIcon.Right, //Y = Application.GetRealHeight(18), Width = Application.GetRealWidth(200), //Height = Application.GetMinRealAverage(16+18*2), TextColor = CSS_Color.FirstLevelTitleColor, TextSize = CSS_FontSize.PromptFontSize_FirstLevel, TextAlignment = TextAlignment.CenterLeft, Text = DB_ResidenceData.Instance.CurFloor.roomName, }; roomFloorChangeView.AddChidren(btnFloor); btnChooseAll = new Button() { X = Application.GetRealWidth(245), Width = Application.GetRealWidth(109), TextAlignment = TextAlignment.CenterRight, TextSize = CSS_FontSize.TextFontSize, TextColor = CSS_Color.FirstLevelTitleColor, TextID = StringId.SelectedAll, }; if(sceneLishtList.Count>0) { btnChooseAll.TextID = StringId.Cancel; } roomFloorChangeView.AddChidren(btnChooseAll); btnChooseAll.MouseUpEventHandler = (sender, e) => { if (sceneLishtList.Count > 0) { sceneLishtList.Clear(); btnChooseAll.TextID = StringId.SelectAll; btnConfrim.IsSelected = false; } else { sceneLishtList.AddRange(lightList); btnChooseAll.TextID = StringId.Cancel; btnConfrim.IsSelected = true; } LoadLightRow(lightList); }; #endregion functionListView = new VerticalScrolViewLayout() { Y = Application.GetRealHeight(64 + 52), Height = Application.GetRealHeight(640 - 12 - 52 -100), }; bodyView.AddChidren(functionListView); LoadLightRow(lightList); #region 底部view var bottomView = new FrameLayout() { Y = Application.GetRealHeight(591), Height = Application.GetRealHeight(100), BackgroundColor = CSS_Color.MainBackgroundColor, Radius = (uint)Application.GetRealWidth(12), }; this.AddChidren(bottomView); btnConfrim = new Button() { Y = Application.GetRealHeight(12), Gravity = Gravity.CenterHorizontal, Width = Application.GetRealWidth(220), Height = Application.GetRealHeight(44), Radius = (uint)Application.GetRealHeight(22), TextAlignment = TextAlignment.Center, TextColor = CSS_Color.MainBackgroundColor, BackgroundColor = CSS_Color.BackgroundColor, TextID = StringId.Confirm, TextSize = CSS_FontSize.SubheadingFontSize, SelectedTextColor = CSS_Color.MainBackgroundColor, SelectedBackgroundColor = CSS_Color.MainColor, }; bottomView.AddChidren(btnConfrim); btnConfrim.MouseUpEventHandler = (sender, e) => { if (btnConfrim.IsSelected) { Action action = (objScene) => { backActon(objScene); this.RemoveFromParent(); }; var lightSceneDialog = new LightSceneEditDialog(sceneLishtList, scene, action); lightSceneDialog.ShowDialog(); } }; #endregion //加载功能筛选组件 LoadDialog_ChangeFloor(); } /// /// 显示的设备的总数 /// int showCount = 0; /// /// 加载功能row /// /// void LoadLightRow(List functions, bool isAppend = false) { var waitPage = new Loading(); bodyView.AddChidren(waitPage); waitPage.Start(""); new System.Threading.Thread(() => { try { Application.RunOnMainThread(() => { if (!isAppend) { showCount = 0; functionListView.RemoveAll(); } int i = 0; foreach (var function in functions) { i++; if (i > 100) { break; } showCount++; var functionDiv = new LightRow(function) { Gravity = Gravity.CenterHorizontal, Width = Application.GetRealWidth(343), Height = Application.GetRealHeight(62), Radius = (uint)Application.GetMinRealAverage(12), BorderColor = 0x00FFFFFF, BorderWidth = 1, BackgroundColor = CSS_Color.MainBackgroundColor, Tag = function.spk + function.sid }; Action setAction = () => { if (sceneLishtList.Count > 0) { btnConfrim.IsSelected = true; } else { btnConfrim.IsSelected = false; } }; functionDiv.LoadDiv(sceneLishtList, setAction); functionListView.AddChidren(functionDiv); functionListView.AddChidren(new Button() { Height = Application.GetRealHeight(12) }); } if (functions.Count > showCount) { var btnAppend = new Button() { Height = Application.GetRealHeight(60), TextAlignment = TextAlignment.Center, TextSize = CSS_FontSize.SubheadingFontSize, TextColor = CSS_Color.FirstLevelTitleColor, Text = "加载更多", }; if (Language.CurrentLanguage != "Chinese") { btnAppend.Text = "Load more"; } functionListView.AddChidren(btnAppend); btnAppend.MouseUpEventHandler = (sender, e) => { btnAppend.RemoveFromParent(); LoadLightRow(functions, true); }; } }); } catch (Exception ex) { MainPage.Log("ShowFunctionRowError : " + ex.Message); } finally { Application.RunOnMainThread(() => { if (waitPage != null) { waitPage.RemoveFromParent(); waitPage = null; } }); } }) { IsBackground = true }.Start(); } /// /// 住宅列表点击事件 /// void LoadDialog_ChangeFloor() { string nowSelectId = null; btnFloor.MouseUpEventHandler += (sender, e) => { //显示下拉列表 var form = new FloorRoomSelectPopupView(); form.ShowDeviceFunctionView(btnFloor, this.lightList, (selectId, listFunc) => { btnChooseAll.MouseUpEventHandler = (sender2, e2) => { if (sceneLishtList.Count > 0) { sceneLishtList.Clear(); btnChooseAll.TextID = StringId.SelectAll; btnConfrim.IsSelected = false; } else { sceneLishtList.AddRange(listFunc); btnChooseAll.TextID = StringId.Cancel; btnConfrim.IsSelected = true; } LoadLightRow(listFunc); }; nowSelectId = selectId; //重新加载界面 LoadLightRow(listFunc); }, nowSelectId); }; } } public class LightRow : FrameLayout { #region 区域控件 static FrameLayout bodyDiv; /// /// 功能/场景icon /// Button btnIcon; /// /// 功能名称/场景名称 /// Button btnName; /// /// 楼层信息显示按钮 /// Button btnFromFloor; /// /// 选中按钮 /// Button btnSelect; #endregion #region 区域变量 Function function; #endregion public LightRow(Function func) { bodyDiv = this; bodyDiv.Tag = func.sid; function = func; } /// /// 加载控制卡片区域 /// public void LoadDiv(List functions,Action action) { btnIcon = new Button() { X = Application.GetRealWidth(10), Y = Application.GetRealHeight(15), Width = Application.GetRealWidth(32), Height = Application.GetRealWidth(32), UnSelectedImagePath = $"FunctionIcon/Icon/{function.IconName}.png" }; bodyDiv.AddChidren(btnIcon); btnName = new Button() { X = Application.GetRealWidth(8 + 10 + 32), Y = Application.GetRealHeight(10), Width = Application.GetRealWidth(200), Height = Application.GetRealHeight(24), Text = function.name, TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.FirstLevelTitleColor, TextSize = CSS_FontSize.TextFontSize, }; bodyDiv.AddChidren(btnName); btnFromFloor = new Button() { X = Application.GetRealWidth(8 + 10 + 32), Y = Application.GetRealHeight(10 + 24), Width = Application.GetRealWidth(200), Height = Application.GetRealHeight(18), Text = function.GetRoomListName(), TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.PromptingColor1, TextSize = CSS_FontSize.PromptFontSize_FirstLevel, }; bodyDiv.AddChidren(btnFromFloor); btnSelect = new Button() { X = Application.GetRealWidth(303), Gravity = Gravity.CenterVertical, Width = Application.GetRealWidth(32), Height = Application.GetRealWidth(32), UnSelectedImagePath = "FunctionIcon/Light/LightScene/CheckIcon.png", SelectedImagePath = "FunctionIcon/Light/LightScene/CheckOnIcon.png", IsSelected = functions.Find((obj) => obj.deviceId == function.deviceId) != null }; if (DB_ResidenceData.Instance.CurrentRegion.isSupportGroupControl) { btnSelect.X = Application.GetRealWidth(323); } bodyDiv.AddChidren(btnSelect); btnSelect.MouseUpEventHandler = (sender, e) => { btnSelect.IsSelected = !btnSelect.IsSelected; if(btnSelect.IsSelected) { var addTemp = functions.Find((obj) => obj.deviceId == function.deviceId); if (addTemp == null) { functions.Add(function); } } else { var removeTemp = functions.Find((obj) => obj.deviceId == function.deviceId); if (removeTemp != null) { functions.Remove(removeTemp); } } ///刷新界面 if (functions.Count == 0 || functions.Count == 1) { action(); } }; } } /// /// 灯光场景编辑弹窗 /// public class LightSceneEditDialog :Dialog { Dictionary d = new Dictionary(); List listSwitch = new List(); List lightDimming = new List(); List lightCCT = new List(); List lightRGB = new List(); /// /// 传入的灯光列表 /// 加入场景控制功能列表 /// List lights; /// /// 临时灯光对象 /// 处理灯光方法 /// Light tempLight = new Light(); //发送数据收集 Dictionary commandDic = new Dictionary(); Scene scene; Action backAction; public LightSceneEditDialog(List functions,Scene inParScene,Action action) { lights = functions; scene = inParScene; backAction = action; } public void ShowDialog() { commandDic.Clear(); commandDic.Add(FunctionAttributeKey.OnOff, "off"); listSwitch = lights.FindAll((obj) => obj.spk == SPK.LightSwitch); lightDimming = lights.FindAll((obj) => obj.spk == SPK.LightDimming); lightCCT = lights.FindAll((obj) => obj.spk == SPK.LightCCT); lightRGB = lights.FindAll((obj) => obj.spk == SPK.LightRGB); var hadDimming = lightDimming.Count > 0; var hadCCT = lightCCT.Count > 0; var hadRGB = lightRGB.Count > 0; if ( hadRGB) { commandDic.Add(FunctionAttributeKey.RGB, lightRGB[0].GetAttrState(FunctionAttributeKey.RGB)); commandDic.Add(FunctionAttributeKey.Brightness, lightRGB[0].GetAttrState(FunctionAttributeKey.Brightness)); } if (hadCCT) { commandDic.Add(FunctionAttributeKey.CCT, lightCCT[0].GetAttrState(FunctionAttributeKey.CCT)); if (!commandDic.ContainsKey(FunctionAttributeKey.Brightness)) { commandDic.Add(FunctionAttributeKey.Brightness, lightCCT[0].GetAttrState(FunctionAttributeKey.Brightness)); } } if (hadDimming) { if (!commandDic.ContainsKey(FunctionAttributeKey.Brightness)) { commandDic.Add(FunctionAttributeKey.Brightness, lightDimming[0].GetAttrState(FunctionAttributeKey.Brightness)); } } var bodyView = new FrameLayout(); this.AddChidren(bodyView); bodyView.MouseUpEventHandler = (sender, e) => { this.Close(); }; var contentView = new FrameLayout() { BackgroundColor = CSS_Color.MainBackgroundColor, Width = Application.GetRealWidth(343), Radius = (uint)Application.GetRealWidth(12), }; bodyView.AddChidren(contentView); #region 标题区 var titleView = new FrameLayout() { Width = Application.GetRealWidth(343), Height = Application.GetRealHeight(52), }; contentView.AddChidren(titleView); var btnTitle = new Button() { Height = Application.GetRealHeight(52), Gravity = Gravity.Center, TextSize = CSS_FontSize.SubheadingFontSize, TextColor = CSS_Color.MainColor, TextID = StringId.CombinedDimming, TextAlignment = TextAlignment.Center, }; if (btnTitle.GetTextWidth() > Application.GetRealWidth(197))//247 { btnTitle.Width = Application.GetRealWidth(197); btnTitle.IsMoreLines = true; } else { btnTitle.Width = btnTitle.GetTextWidth()+ Application.GetRealWidth(10); btnTitle.IsMoreLines = false; } titleView.AddChidren(btnTitle); var btnEditIcon = new Button() { Width = Application.GetRealWidth(24), Height = Application.GetRealWidth(24), X = Application.GetRealWidth(12) + btnTitle.Right, Gravity = Gravity.CenterVertical, UnSelectedImagePath = "Public/Edit.png", }; if (string.IsNullOrEmpty(scene.userSceneId)) { titleView.AddChidren(btnEditIcon); } else { btnTitle.Text = scene.name; btnTitle.Width = btnTitle.GetTextWidth()+ Application.GetRealWidth(10); btnTitle.Gravity = Gravity.Center; } Action callBack = (str) => { //名称不能为空 if (string.IsNullOrEmpty(str)) { new Tip() { CloseTime = 1, Text = Language.StringByID(StringId.NameCannotBeEmpty), Direction = AMPopTipDirection.None, }.Show(bodyView); return; } btnTitle.Text = str; scene.name = str; if (btnTitle.GetTextWidth() > Application.GetRealWidth(197))//247 { btnTitle.Width = Application.GetRealWidth(197); } else { btnTitle.Width = btnTitle.GetTextWidth(); } }; EventHandler eventHandler = (sender, e) => { List sceneNameList = new List(); foreach (var tempScene in FunctionList.List.scenes) { sceneNameList.Add(tempScene.name); } new PublicAssmebly().LoadDialog_EditParater(StringId.SceneName, scene.name, callBack, StringId.SceneNameCannotBeEmpty, StringId.SceneNameAlreadyExists, sceneNameList); }; btnTitle.MouseUpEventHandler = eventHandler; btnEditIcon.MouseUpEventHandler = eventHandler; titleView.AddChidren(new Button() { Height = 1, BackgroundColor = CSS_Color.DividingLineColor, Y = Application.GetRealHeight(51) }); #endregion //var dimmingLight = lights.Find((obj) => obj.spk == SPK.LightDimming); //var cctLight = lights.Find((obj) => obj.spk == SPK.LightCCT); //var rgbLight = lights.Find((obj) => obj.spk == SPK.LightRGB); var dimmingLight = scene.functions.Find((obj) => obj.localFunction.spk == SPK.LightDimming); var cctLight = scene.functions.Find((obj) => obj.localFunction.spk == SPK.LightCCT); var rgbLight = scene.functions.Find((obj) => obj.localFunction.spk == SPK.LightRGB); var brightnessValue = 0; var cctValue = 27; //if(rgbLight!= null) //{ // int.TryParse(rgbLight.status.Find((obj) => obj.key == FunctionAttributeKey.Brightness).value, out brightnessValue); //} //if (cctLight != null) //{ // int.TryParse(cctLight.status.Find((obj) => obj.key == FunctionAttributeKey.Brightness).value, out brightnessValue); // int.TryParse(cctLight.status.Find((obj) => obj.key == FunctionAttributeKey.CCT).value, out cctValue); //} //if(dimmingLight!=null) //{ // int.TryParse(cctLight.status.Find((obj) => obj.key == FunctionAttributeKey.CCT).value, out brightnessValue); //} //属性设置区域 var attrView = new VerticalScrolViewLayout() { Y = Application.GetRealHeight(52), Width = Application.GetRealWidth(343), ScrollEnabled = false, }; //属性设置区域高度 int attrViewHight = Application.GetRealHeight(18 + 22); //只有继电器 if (!hadDimming && !hadCCT && !hadRGB) { attrViewHight += Application.GetRealHeight(50); attrView.Height = attrViewHight; contentView.AddChidren(attrView); attrView.AddChidren(new Button() { Height = Application.GetRealHeight(18) }); var view = new FrameLayout() { Width = Application.GetRealWidth(343), Height = Application.GetRealHeight(50), }; attrView.AddChidren(view); var btnClose = new Button() { X = Application.GetRealWidth(50), Gravity = Gravity.CenterVertical, Width = Application.GetRealWidth(98), Height = Application.GetRealHeight(40), TextColor = CSS_Color.TextualColor, SelectedBackgroundColor = CSS_Color.MainColor, SelectedTextColor = CSS_Color.MainBackgroundColor, BackgroundColor = CSS_Color.DividingLineColor, TextID = StringId.OFF, TextSize = CSS_FontSize.TextFontSize, Radius = (uint)Application.GetRealWidth(5), IsSelected = true, //BorderWidth = 1, //BorderColor = 0x00000000 }; view.AddChidren(btnClose); var btnOpen = new Button() { X = Application.GetRealWidth(100 + 98), Gravity = Gravity.CenterVertical, Width = Application.GetRealWidth(98), Height = Application.GetRealHeight(40), TextColor = CSS_Color.TextualColor, SelectedBackgroundColor = CSS_Color.MainColor, SelectedTextColor = CSS_Color.MainBackgroundColor, BackgroundColor = CSS_Color.DividingLineColor, TextID = StringId.On, TextSize = CSS_FontSize.TextFontSize, Radius = (uint)Application.GetRealWidth(5), }; view.AddChidren(btnOpen); btnClose.MouseUpEventHandler = (sender, e) => { btnClose.IsSelected = true; btnOpen.IsSelected = false; commandDic[FunctionAttributeKey.OnOff] = "off"; d.Clear(); d.Add(FunctionAttributeKey.OnOff, "off"); foreach (var light in lights) { Control.Ins.SendWriteCommand(light, d); } }; btnOpen.MouseUpEventHandler = (sender, e) => { btnClose.IsSelected = false; btnOpen.IsSelected = true; commandDic[FunctionAttributeKey.OnOff] = "on"; d.Clear(); d.Add(FunctionAttributeKey.OnOff, "on"); foreach (var light in lights) { Control.Ins.SendWriteCommand(light, d); } }; } else { if(hadRGB) { attrViewHight += Application.GetRealHeight(248); hadDimming = true; } if (hadCCT) { attrViewHight += Application.GetRealHeight(54 + 11); hadDimming = true; } if (hadDimming) { attrViewHight += Application.GetRealHeight(54 + 11); } attrView.Height = attrViewHight; contentView.AddChidren(attrView); attrView.AddChidren(new Button() { Height = Application.GetRealHeight(18) }); if (hadDimming) { LoadDimmingAttrView(attrView); } if (hadCCT) { LoadCctAttrView(attrView); } if(hadRGB) { LoadRgbAttrView(attrView); } } contentView.Height = Application.GetRealHeight(52 + 44) + attrViewHight; contentView.Gravity = Gravity.Center; #region bottom View var bottomView = new FrameLayout() { Y = Application.GetRealHeight(52) + attrViewHight, Height = Application.GetRealHeight(46), }; contentView.AddChidren(bottomView); bottomView.AddChidren(new Button() { Height = 1, BackgroundColor = CSS_Color.DividingLineColor }); if (string.IsNullOrEmpty(scene.userSceneId)) { var btnCacel = new Button() { Width = Application.GetRealWidth(172), Height = Application.GetRealHeight(44), TextAlignment = TextAlignment.Center, TextSize = CSS_FontSize.SubheadingFontSize, TextColor = CSS_Color.TextualColor, TextID = StringId.Cancel, }; bottomView.AddChidren(btnCacel); var btnSave = new Button() { X = Application.GetRealWidth(172), Width = Application.GetRealWidth(172), Height = Application.GetRealHeight(46), BackgroundColor = CSS_Color.MainColor, TextColor = CSS_Color.MainBackgroundColor, TextAlignment = TextAlignment.Center, TextSize = CSS_FontSize.SubheadingFontSize, TextID = StringId.Save }; bottomView.AddChidren(btnSave); //例:右下圆角 大小为50 int mRectCornerID = HDLUtils.RectCornerBottomRight; btnSave.SetCornerWithSameRadius((uint)Application.GetRealWidth(14), mRectCornerID); btnCacel.MouseUpEventHandler = (sender, e) => { this.Close(); //var waitPage = new Loading(); //MainPage.BaseView.AddChidren(waitPage); //waitPage.Start(Language.StringByID(StringId.PleaseWait)); //new Thread(() => //{ // try // { // foreach (var light in lights) // { // Dictionary sendDate = new Dictionary(); // //赋值场景功能数据 // foreach (var attr in light.GetAttributes()) // { // if (commandDic.ContainsKey(attr)) // { // try // { // sendDate.Add(attr, commandDic[attr]); // } // catch { } // } // } // Control.Ins.SendWriteCommand(light, sendDate); // Thread.Sleep(50); // } // } // catch // { } // finally // { // Application.RunOnMainThread(() => // { // waitPage.Hide(); // new PublicAssmebly().TipMsgAutoClose("组合控制已执行", true); // if (waitPage != null) // { // //backAction(null); // waitPage.RemoveFromParent(); // } // }); // } //}) //{ IsBackground = true }.Start(); }; btnSave.MouseUpEventHandler = (sender, e) => { if (string.IsNullOrEmpty(scene.name)) { new Tip() { CloseTime = 1, Text = Language.StringByID(StringId.NameCannotBeEmpty), Direction = AMPopTipDirection.None, }.Show(bodyView); return; } foreach (var tempRoom in FunctionList.List.scenes) { if (scene.name == tempRoom.name) { new PublicAssmebly().TipMsg(StringId.Tip, StringId.NameAlreadyExists); return; } } var waitPage = new Loading(); MainPage.BaseView.AddChidren(waitPage); waitPage.Start(Language.StringByID(StringId.PleaseWait)); new Thread(() => { try { var serverScene = new Scene(); for (int i = 0; i < lights.Count; i++) { var light = lights[i]; //赋值场景功能数据 foreach (var attr in light.GetAttributes()) { if (commandDic.ContainsKey(attr)) { try { light.SetAttrState(attr, commandDic[attr]); } catch { } } } //转换场景的功能对象 var sceneFunction = light.ConvertSceneFunction(); //查询有没有存在 var temp = scene.functions.Find((obj) => obj.sid == sceneFunction.sid); //赋值 if (temp != null) { temp = sceneFunction; } else { scene.functions.Add(sceneFunction); } } var result = FunctionList.List.AddScene(scene, out serverScene); Application.RunOnMainThread(() => { if (result == StateCode.SUCCESS) { scene.userSceneId = serverScene.userSceneId; FunctionList.List.scenes.Add(scene); backAction?.Invoke(scene); this.Close(); } else { if (result == "124005") IMessageCommon.Current.ShowErrorInfoAlter(Language.StringByID(StringId.GatewayOffline)); else IMessageCommon.Current.ShowErrorInfoAlter(result); } }); } catch { } finally { Application.RunOnMainThread(() => { waitPage.Hide(); waitPage.RemoveFromParent(); }); } }) { IsBackground = true, Priority = ThreadPriority.AboveNormal }.Start(); }; } else { var btnCacel = new Button() { Height = Application.GetRealHeight(44), TextAlignment = TextAlignment.Center, TextSize = CSS_FontSize.SubheadingFontSize, TextColor = CSS_Color.TextualColor, TextID = StringId.Close, }; bottomView.AddChidren(btnCacel); //例:右下圆角 大小为50 //int mRectCornerID = HDLUtils.RectCornerBottomRight; //btnSave.SetCornerWithSameRadius((uint)Application.GetRealWidth(14), mRectCornerID); btnCacel.MouseUpEventHandler = (sender, e) => { this.Close(); }; } #endregion this.Show(); } /// /// 加载调光属性设置控件 /// /// void LoadDimmingAttrView(VerticalScrolViewLayout attrView) { string briValue = ""; commandDic.TryGetValue(FunctionAttributeKey.Brightness,out briValue); var dimmingView = new FrameLayout() { Height = Application.GetRealHeight(54 + 11) }; attrView.AddChidren(dimmingView); #region 亮度调节 var btnBrightnessText = new Button() { X = Application.GetRealWidth(35), Y = Application.GetRealHeight(1), Width = Application.GetRealWidth(224), Height = Application.GetRealHeight(25), TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.FirstLevelTitleColor, TextSize = CSS_FontSize.PromptFontSize_FirstLevel, TextID = StringId.Brightness, }; btnBrightnessText.Text = Language.StringByID(StringId.Brightness) + " " + commandDic[FunctionAttributeKey.Brightness] + "%"; dimmingView.AddChidren(btnBrightnessText); var btnMinValuesText = new Button() { X = Application.GetRealWidth(35), Y = btnBrightnessText.Bottom, Width = Application.GetRealWidth(40), Height = Application.GetRealHeight(21), Text = "0%", TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.PromptingColor1, TextSize = CSS_FontSize.PromptFontSize_FirstLevel, }; dimmingView.AddChidren(btnMinValuesText); var dimmerBar = new DiyImageSeekBar() { X = Application.GetRealWidth(45 + 10), Y = Application.GetRealHeight(11), Width = Application.GetRealWidth(220), Height = Application.GetRealHeight(54), SeekBarViewHeight = Application.GetRealHeight(8), ThumbImagePath = "Public/ThumbImage.png", ThumbImageHeight = Application.GetRealHeight(54), ProgressTextColor = CSS_Color.FirstLevelTitleColor, ProgressTextSize = CSS_FontSize.PromptFontSize_FirstLevel, ProgressBarColor = CSS_Color.AuxiliaryColor1, MaxValue = 100, Progress = Convert.ToInt32(commandDic[FunctionAttributeKey.Brightness]), SeekBarPadding = Application.GetRealWidth(20), IsProgressTextShow = false, ProgressChangeDelayTime = 0, }; dimmingView.AddChidren(dimmerBar); dimmerBar.OnProgressChangedEvent = (sender, e) => { btnBrightnessText.Text = Language.StringByID(StringId.Brightness) + " " + e + "%"; }; dimmerBar.OnStopTrackingTouchEvent = (sender, e) => { commandDic[FunctionAttributeKey.Brightness] = dimmerBar.Progress.ToString(); btnBrightnessText.Text = Language.StringByID(StringId.Brightness) + " " + e + "%"; foreach (var light in lights) { if (light.spk == SPK.LightSwitch) { d.Clear(); d.Add(FunctionAttributeKey.OnOff, e > 0 ? "on" : "off"); Control.Ins.SendWriteCommand(light, d); } else { d.Clear(); d.Add(FunctionAttributeKey.Brightness, e.ToString()); Control.Ins.SendWriteCommand(light, d); } } }; var btnMaxValuesText = new Button() { X = dimmerBar.Right, Y = btnBrightnessText.Bottom, Width = Application.GetRealWidth(55), Height = Application.GetRealHeight(21), Text = "100%", TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.PromptingColor1, TextSize = CSS_FontSize.PromptFontSize_FirstLevel, }; dimmingView.AddChidren(btnMaxValuesText); #endregion } /// /// 加载cct属性设置控件 /// /// void LoadCctAttrView(VerticalScrolViewLayout attrView) { #region 色温 string valueStr = "2700"; commandDic.TryGetValue(FunctionAttributeKey.CCT, out valueStr); int value = Convert.ToInt32(valueStr) / 100; var cctView = new FrameLayout() { Height = Application.GetRealHeight(54 + 11) }; attrView.AddChidren(cctView); //色温 var btnTempClolor = new Button(); btnTempClolor.X = Application.GetRealWidth(35); btnTempClolor.Y = Application.GetRealHeight(1); btnTempClolor.Width = Application.GetRealWidth(224); btnTempClolor.Height = Application.GetRealHeight(21); btnTempClolor.TextAlignment = TextAlignment.CenterLeft; btnTempClolor.TextColor = CSS_Color.FirstLevelTitleColor; btnTempClolor.TextSize = CSS_FontSize.PromptFontSize_FirstLevel; btnTempClolor.TextID = StringId.ColorTemperature; cctView.AddChidren(btnTempClolor); //2700K var btnTempClolorMin = new Button() { X = Application.GetRealWidth(35), Y = btnTempClolor.Bottom, Width = Application.GetRealWidth(40), Height = Application.GetRealHeight(21), }; btnTempClolorMin.Width = Application.GetRealWidth(54); btnTempClolorMin.Height = Application.GetRealHeight(21); btnTempClolorMin.Text = "2700K"; btnTempClolorMin.TextAlignment = TextAlignment.CenterLeft; btnTempClolorMin.TextColor = CSS_Color.PromptingColor1; btnTempClolorMin.TextSize = CSS_FontSize.PromptFontSize_FirstLevel; cctView.AddChidren(btnTempClolorMin); //滑动条的背景图片 var btnColorTemplatrueBack = new Button() { X = Application.GetRealWidth(55 + 22 + 15), Y = Application.GetRealHeight(11), Width = Application.GetRealWidth(180), Height = Application.GetRealHeight(54), }; btnColorTemplatrueBack.UnSelectedImagePath = "FunctionIcon/Light/ColorTemperatureBar.png"; btnColorTemplatrueBack.Height = Application.GetRealHeight(8); btnColorTemplatrueBack.Gravity = Gravity.CenterHorizontal; cctView.AddChidren(btnColorTemplatrueBack); //滑动条控件 var barColorTemplatrue = new CCTSeekBarControl() { X = Application.GetRealWidth(55 + 22), Y = Application.GetRealHeight(11), Width = Application.GetRealWidth(220), Height = Application.GetRealHeight(54), }; barColorTemplatrue.MinValue = 27; barColorTemplatrue.MaxValue = 65; barColorTemplatrue.ProgressBarColor = 0x00000000;//全部透明 barColorTemplatrue.ProgressBarUnEnableColor = 0x00000000; barColorTemplatrue.SeekBarBackgroundColor = 0x00000000; cctView.AddChidren(barColorTemplatrue); barColorTemplatrue.Y = btnTempClolorMin.Y - (barColorTemplatrue.Height - btnTempClolorMin.Height) / 2; barColorTemplatrue.Progress = value; //设置初始值 btnTempClolor.Text = Language.StringByID(StringId.ColorTemperature) + " " + (barColorTemplatrue.Progress * 100 + "K"); barColorTemplatrue.OnProgressChangedEvent = (sender, e) => { btnTempClolor.Text = Language.StringByID(StringId.ColorTemperature) + " " + (barColorTemplatrue.Progress * 100 + "K"); }; barColorTemplatrue.OnStopTrackingTouchEvent = (sender, e) => { commandDic[FunctionAttributeKey.CCT] = (barColorTemplatrue.Progress*100).ToString(); d.Clear(); d.Add(FunctionAttributeKey.CCT, (barColorTemplatrue.Progress * 100).ToString()); foreach (var light in lightCCT) { if (light.spk == SPK.LightCCT) { Control.Ins.SendWriteCommand(light, d); } } }; //变更背景图的Y轴坐标 btnColorTemplatrueBack.Y = barColorTemplatrue.Y + (barColorTemplatrue.Height - btnColorTemplatrueBack.Height) / 2; //6500K var btnTempClolorMax = new Button(); btnTempClolorMax.Y = btnTempClolorMin.Y; btnTempClolorMax.X = barColorTemplatrue.Right - Application.GetRealWidth(30); btnTempClolorMax.Width = Application.GetRealWidth(54); btnTempClolorMax.Height = Application.GetRealHeight(21); btnTempClolorMax.Text = "6500K"; btnTempClolorMax.TextAlignment = TextAlignment.CenterRight; btnTempClolorMax.TextColor = CSS_Color.PromptingColor1; btnTempClolorMax.TextSize = CSS_FontSize.PromptFontSize_FirstLevel; cctView.AddChidren(btnTempClolorMax); #endregion } /// /// 加载rgb属性设置控件 /// /// void LoadRgbAttrView(VerticalScrolViewLayout attrView) { #region RGB string value = "255,255,255"; commandDic.TryGetValue(FunctionAttributeKey.RGB, out value); var rgbView = new FrameLayout() { Height = Application.GetRealHeight(248) }; attrView.AddChidren(rgbView); var btnCurColor = new Button() { X = Application.GetRealWidth(24), Y = Application.GetRealHeight(10), Width = Application.GetMinRealAverage(24), Height = Application.GetMinRealAverage(24), Radius = (uint)Application.GetMinRealAverage(8), BorderColor = CSS_Color.PromptingColor2, BorderWidth = 1, BackgroundColor = (uint)(0xFF000000 + tempLight.GetRGBcolor(commandDic[FunctionAttributeKey.RGB])) }; rgbView.AddChidren(btnCurColor); //色盘的桌布控件(限制那个白色滑动球使用) var framePickerBack = new FrameLayout(); framePickerBack.Gravity = Gravity.CenterHorizontal; framePickerBack.Y = Application.GetRealHeight(20); framePickerBack.Width = Application.GetMinRealAverage(198); framePickerBack.Height = Application.GetMinRealAverage(198); rgbView.AddChidren(framePickerBack); var colorPicker = new ColorPicker() { ColorImagePath = "FunctionIcon/Light/ColorWheel.png", }; framePickerBack.AddChidren(colorPicker); //白点控件 var btnWhiteRound = new Button(); btnWhiteRound.Width = Application.GetRealWidth(24); btnWhiteRound.Height = Application.GetRealWidth(24); btnWhiteRound.UnSelectedImagePath = "FunctionIcon/Light/ColorWheelTip.png"; btnWhiteRound.Visible = false; framePickerBack.AddChidren(btnWhiteRound); //当前点击的【点】是否正确 bool pointIsRight = false; //圆的半径(考虑边界,需要设置它的半径比较小一点) int circleR = colorPicker.Width / 2 - Application.GetRealWidth(12); colorPicker.MouseUpEventHandler = (sender2, e) => { d.Clear(); d.Add(FunctionAttributeKey.RGB, commandDic[FunctionAttributeKey.RGB]); foreach (var light in lightCCT) { if (light.spk == SPK.LightCCT) { Control.Ins.SendWriteCommand(light, d); } } }; colorPicker.ColorChaged += (sender2, e2) => { string rgbString = (e2[0] + "," + e2[1] + "," + e2[2]).ToString(); commandDic[FunctionAttributeKey.RGB] = rgbString; btnCurColor.BackgroundColor = (uint)(0xFF000000 + tempLight.GetRGBcolor(rgbString)); foreach (var rgbTemp in lightRGB) { rgbTemp.SetAttrState(FunctionAttributeKey.RGB, rgbString); } }; colorPicker.MouseDownEventHandler += (sender, e) => { pointIsRight = this.CheckPoint(circleR, colorPicker.Width / 2, colorPicker.Height / 2, (int)e.X, (int)e.Y); if (pointIsRight == false) { //点的区域不是圆盘内 return; } //显示白点 btnWhiteRound.X = (int)e.X - btnWhiteRound.Width / 2; btnWhiteRound.Y = (int)e.Y - btnWhiteRound.Height / 2; if (btnWhiteRound.Visible == false) { btnWhiteRound.Visible = true; } }; colorPicker.MouseUpEventHandler = (sender, e) => { foreach (var rgbTemp in lightRGB) { Dictionary d = new Dictionary(); d.Add(FunctionAttributeKey.RGB, tempLight.GetRGBcolorString(rgbTemp)); Control.Ins.SendWriteCommand(rgbTemp, d, false, 0); } }; colorPicker.MouseMoveEventHandler += (sender, e) => { //当鼠标点下事件处理 colorPicker.MouseDownEventHandler(sender, e); }; #endregion } /// /// 检测点击点 /// /// 圆的半径 /// 圆心X轴 /// 圆心Y轴 /// 点击点的X轴 /// 点击点的Y轴 /// private bool CheckPoint(int circleR, int circleX, int circleY, int pointX, int pointY) { int dwidth = circleX - pointX; if (dwidth < 0) { dwidth *= -1; } int dHeight = circleY - pointY; if (dHeight < 0) { dHeight *= -1; } //根据三角函数,求三角形的斜边长 int dlength = dwidth * dwidth + dHeight * dHeight; //半径长度(不开方,所以是按平方算) circleR *= circleR; if (dlength < circleR) { //如果组成的三角形并没有长过半径,则代表还在圆内(不允许点边界) return true; } return false; } } }