using System; using HDL_ON.Entity; using HDL_ON.UI.CSS; using Shared; using System.Collections.Generic; using System.Linq; namespace HDL_ON.UI { public class SceneFunctionInfoEditPage : FrameLayout { FrameLayout bodyView; VerticalScrolViewLayout contentView; Button btnOnText; Button btnBrightnessText; List functionRowList = new List(); Scene scene; Action refreshAction; SceneFunction sceneFunction; bool isColorful = false; SceneFunction rgbColorful; bool isOnStatus = false; public SceneFunctionInfoEditPage(Scene s, SceneFunction fc, Action action) { bodyView = this; scene = s; sceneFunction = fc.localFunction.ConvertSceneFunction(); foreach (var ll in sceneFunction.status) { try { var temp = fc.status.Find((obj) => obj.key == ll.key); if (temp != null) { ll.value = temp.value; //ll.UintString = temp.UintString; } } catch { } } refreshAction = action; } public void LoadPage() { bodyView.BackgroundColor = CSS_Color.BackgroundColor; var topView = new TopViewDiv(bodyView, sceneFunction.localFunction.name); topView.maginY = 10; topView.LoadTopView(); contentView = new VerticalScrolViewLayout() { Y = Application.GetRealHeight(64 + 10), Height = Application.GetRealHeight(510), ScrollEnabled = false, }; bodyView.AddChidren(contentView); var onOffStatus = sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.OnOff); if (onOffStatus != null) { if (onOffStatus.value == "on") { isOnStatus = true; } LoadFunctionRow(onOffStatus); } else { isOnStatus = true; } if (sceneFunction.localFunction.spk == SPK.LightRGB || sceneFunction.localFunction.spk == SPK.GroupControl) { var colorfulStatus = sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.Colorful); if (colorfulStatus != null) { isColorful = true; LoadColorfulRow(colorfulStatus); isColorful = colorfulStatus.value == "on"; } } foreach (var attr in sceneFunction.status) { switch (attr.key) { case FunctionAttributeKey.SetTemp: LoadFunctionRow(sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.SetTemp)); break; case FunctionAttributeKey.Mode: LoadFunctionRow(sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.Mode)); break; case FunctionAttributeKey.FanSpeed: LoadFunctionRow(sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.FanSpeed)); break; case FunctionAttributeKey.Percent: LoadFunctionRow(sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.Percent)); break; case FunctionAttributeKey.Brightness: LoadFunctionRow(sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.Brightness)); break; case FunctionAttributeKey.FadeTime: LoadFunctionRow(sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.FadeTime)); break; case FunctionAttributeKey.CCT: LoadFunctionRow(sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.CCT)); break; case FunctionAttributeKey.RGB: LoadFunctionRow(sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.RGB)); break; case "angle"://角度 LoadFunctionRow(sceneFunction.status.Find((obj) => obj.key == "angle")); break; case "security"://大华摄像布防撤防 LoadFunctionRow(sceneFunction.status.Find((obj) => obj.key == "security")); break; case FunctionAttributeKey.SetVolume: LoadFunctionRow(sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.SetVolume)); break; case FunctionAttributeKey.Signal: LoadFunctionRow(sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.Signal)); break; case FunctionAttributeKey.SongName: LoadFunctionRow(sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.SongName)); break; case FunctionAttributeKey.Volume: LoadFunctionRow(sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.Volume)); break; } } if (DB_ResidenceData.Instance.GatewayType != 0) { //加载延时Row LoadDelayRow(); } var bottomView = new FrameLayout() { Y = Application.GetRealHeight(591), Height = Application.GetRealHeight(106), BackgroundColor = CSS_Color.MainBackgroundColor, Radius = (uint)Application.GetRealWidth(16), }; bodyView.AddChidren(bottomView); var btnConfrim = new Button() { Gravity = Gravity.CenterHorizontal, Y = Application.GetRealHeight(12), Width = Application.GetRealWidth(220), Height = Application.GetRealWidth(44), TextAlignment = TextAlignment.Center, TextColor = CSS_Color.MainBackgroundColor, BackgroundColor = CSS_Color.MainColor, TextSize = CSS_FontSize.SubheadingFontSize, IsBold = true, Radius = (uint)Application.GetRealWidth(22), TextID = StringId.Complete }; bottomView.AddChidren(btnConfrim); btnConfrim.MouseUpEventHandler = (sender, e) => { if (sceneFunction.localFunction.spk == SPK.GroupControl) { var colorBegin = sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.ColorfulBegin); if (colorBegin != null) { sceneFunction.status.Remove(colorBegin); } var colorEnd = sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.ColorfulEnd); if (colorEnd != null) { sceneFunction.status.Remove(colorEnd); } } else { if (isOnStatus) { if (isColorful) { sceneFunction.status.Clear(); sceneFunction.status.Add(new SceneFunctionStatus() { key = FunctionAttributeKey.OnOff, value = "on" }); sceneFunction.status.Add(new SceneFunctionStatus() { key = FunctionAttributeKey.Colorful, value = "on" }); } else { if (sceneFunction.localFunction.spk == SPK.ElectricalTvHisense) { for(int i = 0;i< sceneFunction.status.Count;i++) { var tvState = sceneFunction.status[i]; if (tvState.key == FunctionAttributeKey.OnOff) { tvState.key = "wol"; tvState.value = "on"; } else { if(string.IsNullOrEmpty( tvState.value)) { sceneFunction.status.RemoveAt(i); i--; } } } } else { var isHasColorful = sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.Colorful); if (isHasColorful != null) { sceneFunction.status.Remove(isHasColorful); } } } } else { if (sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.OnOff) != null) { sceneFunction.status.Clear(); sceneFunction.status.Add(new SceneFunctionStatus() { key = FunctionAttributeKey.OnOff, value = "off" }); sceneFunction.status.Add(new SceneFunctionStatus() { key = FunctionAttributeKey.Delay, value = sceneFunction.delay }); } } } var temp = scene.functions.Find((obj) => obj.sid == sceneFunction.sid); try { if (temp != null) { scene.functions.Remove(temp); } scene.functions.Insert(0, sceneFunction); if (sceneFunction.localFunction.spk == SPK.MusicStandard) { for (var i = 0; i < sceneFunction.status.Count;) { var ddd = sceneFunction.status[i]; if (string.IsNullOrEmpty(ddd.value)) { sceneFunction.status.Remove(ddd); continue; } i++; } if (sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.PlaylistName) == null) { if (isOnStatus) { var songNameStatus = sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.SongName); { if (songNameStatus != null) { if (string.IsNullOrEmpty(songNameStatus.value)) { sceneFunction.status.Add(new SceneFunctionStatus() { key = FunctionAttributeKey.PlaylistName, value = "hdl_special" }); } } } } } } if (!string.IsNullOrEmpty(scene.userSceneId)) { var result = scene.UpdateScene(); if (result == DAL.Server.StateCode.SUCCESS) { refreshAction(); this.RemoveFromParent(); } else { DAL.Server.IMessageCommon.Current.ShowErrorInfoAlter(result); } } else { try { refreshAction(); this.RemoveFromParent(); } catch { MainPage.Log($"xxxxxx123"); } } } catch { MainPage.Log($"xxxxxx1234"); } }; UpdataFunctionRow(); } void UpdataFunctionRow() { try { contentView.RemoveAll(); } catch (Exception ex) { MainPage.Log(ex.Message); } for (var i = 0; i < functionRowList.Count; i++) { try { var view = functionRowList[i]; if (view != null) { if (view.GetType() == typeof(FrameLayout)) { if (view.Tag != null) { if (view.Tag.ToString() == FunctionAttributeKey.OnOff || view.Tag.ToString() == "delay") { contentView.AddChidren(view); } else { if (isOnStatus) { if (view.Tag.ToString() != FunctionAttributeKey.OnOff) { if (isColorful && sceneFunction.localFunction.spk == SPK.LightRGB) { if (view.Tag.ToString() != FunctionAttributeKey.Colorful) { view.RemoveFromParent(); } else { contentView.AddChidren(view); } } else { contentView.AddChidren(view); } } } else { if (view.Tag.ToString() != FunctionAttributeKey.OnOff && view.Tag.ToString() != "delay") { view.RemoveFromParent(); } } } } } } } catch (Exception ex) { MainPage.Log($"UpdataFuntionRow error:{ex.Message}"); } } } /// /// 加载功能Row /// void LoadFunctionRow(SceneFunctionStatus sceneStatus) { try { if (sceneStatus == null) return; #region Row code var row = new FrameLayout() { Height = Application.GetRealHeight(50), BackgroundColor = CSS_Color.MainBackgroundColor, Tag = sceneStatus.key, }; contentView.AddChidren(row); var view = functionRowList.Find((obj) => obj.Tag.ToString() == sceneStatus.key); if (view == null) { functionRowList.Add(row); } if (sceneStatus.key != FunctionAttributeKey.OnOff) { row.AddChidren(new Button() { X = Application.GetRealWidth(16), Height = Application.GetRealHeight(1), Width = Application.GetRealWidth(343), BackgroundColor = CSS_Color.DividingLineColor }); } else { if (sceneStatus.value == "stop") { sceneStatus.value = "on"; } } Button btnRight = new Button() { X = Application.GetRealWidth(339), Gravity = Gravity.CenterVertical, Width = Application.GetMinRealAverage(16), Height = Application.GetMinRealAverage(16), UnSelectedImagePath = "Public/Right.png", }; row.AddChidren(btnRight); var showCode = ""; if (sceneStatus.key == FunctionAttributeKey.Mode) { if (DB_ResidenceData.Instance.GatewayType == 0) { if (SPK.AcSpkList().Contains(sceneFunction.localFunction.spk)) { //0 制冷1制热,2通风,3自动,4除湿 switch (sceneStatus.value) { case "0": showCode = "cool"; break; case "1": showCode = "heat"; break; case "2": showCode = "fan"; break; case "3": showCode = "auto"; break; case "4": showCode = "dry"; break; } } else if (SPK.FhSpkList().Contains(sceneFunction.localFunction.spk)) { //1:普通,2:白天,3:夜晚,4:离开,5:时间 switch (sceneStatus.value) { case "5": showCode = "timer"; break; case "1": showCode = "normal"; break; case "2": showCode = "day"; break; case "3": showCode = "night"; break; case "4": showCode = "away"; break; } } } } var btnFunctionText = new Button() { Width = Application.GetRealWidth(330), TextAlignment = TextAlignment.CenterRight, TextColor = CSS_Color.PromptingColor1, TextSize = CSS_FontSize.PromptFontSize_FirstLevel, Text = sceneStatus.GetValueText(showCode) + sceneStatus.GetUintString() }; row.AddChidren(btnFunctionText); if (sceneStatus.key == FunctionAttributeKey.RGB) { btnFunctionText.Width = Application.GetRealWidth(28); btnFunctionText.Height = Application.GetRealWidth(28); btnFunctionText.X = Application.GetRealWidth(330 - 28); btnFunctionText.Gravity = Gravity.CenterVertical; btnFunctionText.Radius = (uint)Application.GetRealWidth(8); btnFunctionText.Text = ""; btnFunctionText.BackgroundColor = (uint)(0xFF000000 + new Light().GetRGBcolor(sceneStatus.value)); } if (sceneStatus.key == FunctionAttributeKey.OnOff) { btnOnText = btnFunctionText; } else if (sceneStatus.key == FunctionAttributeKey.Brightness || sceneStatus.key == FunctionAttributeKey.Percent) { int outT = 0; int.TryParse(sceneStatus.value, out outT); if (outT < 0) sceneStatus.value = "0"; btnBrightnessText = btnFunctionText; } var btnFunctionName = new Button() { X = Application.GetRealWidth(16), TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.FirstLevelTitleColor, TextSize = CSS_FontSize.SubheadingFontSize, Text = sceneStatus.GetNameText() }; row.AddChidren(btnFunctionName); btnFunctionName.MouseUpEventHandler = (sender, e) => { switch (sceneStatus.key) { case FunctionAttributeKey.Security: LoadEditDialog_Security(sceneStatus, btnFunctionText); break; case FunctionAttributeKey.OnOff: LoadEditDialog_OnOff(sceneStatus, btnFunctionText); break; case FunctionAttributeKey.Brightness: LoadEditDialog_Percent(sceneStatus, btnFunctionText); break; case FunctionAttributeKey.Mode: var statusList = new List(); var tr = sceneFunction.localFunction.attributes.Find((obj) => obj.key == FunctionAttributeKey.Mode); foreach (var t in tr.value) { statusList.Add(t); } LoadEditDialog_FunctionPar(sceneStatus, btnFunctionText, statusList); break; case FunctionAttributeKey.FanSpeed: var fanStatusList = new List(); var tr1 = sceneFunction.localFunction.attributes.Find((obj) => obj.key == FunctionAttributeKey.FanSpeed); foreach (var t in tr1.value) { fanStatusList.Add(t); } LoadEditDialog_FunctionPar(sceneStatus, btnFunctionText, fanStatusList); break; case FunctionAttributeKey.SetTemp: LoadEditDialog_Temp(sceneStatus, btnFunctionText); break; case FunctionAttributeKey.FadeTime: break; case "angle": //呈现的弹窗 LoadEditDialog_Angle(sceneStatus, btnFunctionText); break; case "cct": LoadEditDialog_CCT(sceneStatus, btnFunctionText); break; case FunctionAttributeKey.RGB: btnFunctionText.Width = Application.GetRealWidth(28); btnFunctionText.Height = Application.GetRealWidth(28); btnFunctionText.X = Application.GetRealWidth(330 - 28); btnFunctionText.Gravity = Gravity.CenterVertical; btnFunctionText.Radius = (uint)Application.GetRealWidth(8); btnFunctionText.Text = ""; LoadEditDialog_RGB_V2(sceneStatus, btnFunctionText); break; case FunctionAttributeKey.Percent: LoadEditDialog_Percent(sceneStatus, btnFunctionText); break; case FunctionAttributeKey.SetVolume: BrightnessView(btnFunctionText.Text, btnFunctionName.Text, (volume, uintStr) => { btnFunctionText.Text = volume; sceneStatus.value = volume; }); break; case FunctionAttributeKey.Signal: var p = new UI2.Intelligence.Automation.PublicInterface(); var dic = p.GetHisenseSignalSourceDic(); ListView(dic.Keys.ToList(), btnFunctionText.Text, btnFunctionName.Text, (valueStr) => { btnFunctionText.Text = valueStr; sceneStatus.value = p.GetValue(dic, valueStr); }); break; case FunctionAttributeKey.Volume: BrightnessView(btnFunctionText.Text, btnFunctionName.Text, (volume, uintStr) => { btnFunctionText.Text = volume; sceneStatus.value = volume; }); break; case FunctionAttributeKey.SongName: MusicListView(btnFunctionText.Text, (playListName, song) => { btnFunctionText.Text = song.name; sceneStatus.value = song.name; //追加属性 var oldList = new List(); for (int i = 0; i < sceneFunction.status.Count; i++) { var status = sceneFunction.status[i]; if (status.key == FunctionAttributeKey.PlaylistName) { //控制需要(界面不需要显示) sceneFunction.status.RemoveAt(i); sceneFunction.status.Insert(i, new SceneFunctionStatus { key = FunctionAttributeKey.PlaylistName, value = playListName }); } else if (status.key == FunctionAttributeKey.Url) { //存在url就一起发过去 if (!string.IsNullOrEmpty(song.url)) { //控制需要(界面不需要显示) sceneFunction.status.RemoveAt(i); sceneFunction.status.Insert(i, new SceneFunctionStatus { key = FunctionAttributeKey.Url, value = song.url }); } } } }); break; } }; #endregion } catch (Exception ex) { MainPage.Log($"场景加载设备属性异常:{ex.Message}"); } } /// /// 加载功能Row /// void LoadColorfulRow(SceneFunctionStatus sceneStatus) { if (sceneStatus == null) return; #region Row code var row = new FrameLayout() { Height = Application.GetRealHeight(50), BackgroundColor = CSS_Color.MainBackgroundColor, Tag = sceneStatus.key }; contentView.AddChidren(row); var view = functionRowList.Find((obj) => obj.Tag.ToString() == sceneStatus.key); if (view == null) { functionRowList.Add(row); } row.AddChidren(new Button() { X = Application.GetRealWidth(16), Height = Application.GetRealHeight(1), Width = Application.GetRealWidth(343), BackgroundColor = CSS_Color.DividingLineColor }); Button btnRight = new Button() { X = Application.GetRealWidth(339), Gravity = Gravity.CenterVertical, Width = Application.GetMinRealAverage(16), Height = Application.GetMinRealAverage(16), UnSelectedImagePath = "Public/Right.png", }; row.AddChidren(btnRight); var showCode = ""; var btnFunctionText = new Button() { Width = Application.GetRealWidth(330), TextAlignment = TextAlignment.CenterRight, TextColor = CSS_Color.PromptingColor1, TextSize = CSS_FontSize.PromptFontSize_FirstLevel, Text = sceneStatus.GetValueText(showCode) }; row.AddChidren(btnFunctionText); var btnFunctionName = new Button() { X = Application.GetRealWidth(16), TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.FirstLevelTitleColor, TextSize = CSS_FontSize.SubheadingFontSize, TextID = StringId.ColorfulFunction }; row.AddChidren(btnFunctionName); btnFunctionName.MouseUpEventHandler = (sender, e) => { LoadEditDialog_OnOff(sceneStatus, btnFunctionText); }; #endregion } #region 加载功能场景数据调节界面 /// /// 加载延时Row /// void LoadDelayRow() { #region 延时row FrameLayout delayRow = new FrameLayout() { Height = Application.GetRealWidth(50), BackgroundColor = CSS_Color.MainBackgroundColor, Tag = "delay" }; contentView.AddChidren(delayRow); var view = functionRowList.Find((obj) => obj.Tag.ToString() == "delay"); if (view == null) { functionRowList.Add(delayRow); } delayRow.AddChidren(new Button() { X = Application.GetRealWidth(16), Height = Application.GetRealHeight(1), Width = Application.GetRealWidth(343), BackgroundColor = CSS_Color.DividingLineColor }); Button btnDelayRight = new Button() { X = Application.GetRealWidth(339), Gravity = Gravity.CenterVertical, Width = Application.GetMinRealAverage(16), Height = Application.GetMinRealAverage(16), UnSelectedImagePath = "Public/Right.png", }; delayRow.AddChidren(btnDelayRight); var btnDelayInfo = new Button() { Width = Application.GetRealWidth(327), TextAlignment = TextAlignment.CenterRight, TextColor = CSS_Color.PromptingColor1, TextSize = CSS_FontSize.PromptFontSize_FirstLevel, Text = new Scene() { delay = sceneFunction.delay }.GetDelayText() }; delayRow.AddChidren(btnDelayInfo); Button btnSceneDelayTitle = new Button() { X = Application.GetRealWidth(16), TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.FirstLevelTitleColor, TextSize = CSS_FontSize.SubheadingFontSize, TextID = StringId.Delay, }; delayRow.AddChidren(btnSceneDelayTitle); btnSceneDelayTitle.MouseUpEventHandler = (sender, e) => { Action action = (obj) => { sceneFunction.delay = obj; btnDelayInfo.Text = new Scene() { delay = sceneFunction.delay }.GetDelayText(); }; Dictionary items = new Dictionary(); items.Add("30", "30s"); items.Add("60", "1min"); items.Add("120", "2min"); items.Add("300", "5min"); new PublicAssmebly().SetSceneDelayDialog(action, sceneFunction.delay); }; #endregion } #endregion #region 属性选择弹窗 /// /// 加载开关选择弹窗 /// /// /// void LoadEditDialog_OnOff(SceneFunctionStatus trait, Button btn) { Dialog dialog = new Dialog(); var pView = new FrameLayout() { BackgroundColor = CSS_Color.DialogTransparentColor1, }; dialog.AddChidren(pView); var optionBaseView = new FrameLayout() { Y = Application.GetRealHeight(500), Height = Application.GetRealHeight(160), AnimateSpeed = 0.3f, Animate = Animate.DownToUp, }; pView.AddChidren(optionBaseView); var optionView = new VerticalScrolViewLayout() { Gravity = Gravity.CenterHorizontal, Width = Application.GetRealWidth(343), Height = Application.GetRealHeight(100), BackgroundColor = CSS_Color.MainBackgroundColor, Radius = (uint)Application.GetRealWidth(12), ScrollEnabled = false, }; optionBaseView.AddChidren(optionView); var btnOn = new Button() { Height = Application.GetRealHeight(50), TextAlignment = TextAlignment.Center, TextColor = CSS_Color.TextualColor, SelectedTextColor = CSS_Color.MainColor, TextSize = CSS_FontSize.SubheadingFontSize, TextID = StringId.On, IsSelected = trait.value.ToString() == "on" }; optionView.AddChidren(btnOn); optionView.AddChidren(new Button() { Height = Application.GetRealHeight(1), BackgroundColor = CSS_Color.DividingLineColor }); var btnOff = new Button() { Height = Application.GetRealHeight(50), TextAlignment = TextAlignment.Center, TextColor = CSS_Color.TextualColor, SelectedTextColor = CSS_Color.MainColor, TextSize = CSS_FontSize.SubheadingFontSize, TextID = StringId.OFF, IsSelected = trait.value.ToString() == "off" }; optionView.AddChidren(btnOff); var btnCancel = new Button() { Gravity = Gravity.CenterHorizontal, Y = Application.GetRealHeight(8) + optionView.Bottom, Width = Application.GetRealWidth(343), Height = Application.GetRealHeight(50), BackgroundColor = CSS_Color.MainBackgroundColor, Radius = (uint)Application.GetRealWidth(12), TextID = StringId.Cancel, TextColor = CSS_Color.WarningColor, TextSize = CSS_FontSize.SubheadingFontSize, }; optionBaseView.AddChidren(btnCancel); dialog.Show(); pView.MouseUpEventHandler = (sender, e) => { dialog.Close(); }; btnCancel.MouseUpEventHandler = (sender, e) => { dialog.Close(); }; btnOn.MouseUpEventHandler = (sender, e) => { dialog.Close(); trait.value = "on"; isOnStatus = true; try { sceneFunction.status.Find((obj) => obj.key == trait.key).value = "on"; } catch (Exception ex) { MainPage.Log($"场景配置异常:{ex.Message}"); } try { btn.Text = trait.GetValueText() + trait.GetUintString(); if (trait.key == FunctionAttributeKey.OnOff) { var temp = sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.Brightness); if (temp == null) { temp = sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.Percent); } if (temp != null) { if (temp.value == "0") { temp.value = "100"; } if (btnBrightnessText != null) { btnBrightnessText.Text = temp.GetValueText() + "%"; } } } } catch (Exception ex) { MainPage.Log($"场景配置异常2:{ex.Message}"); } try { if (trait.key == FunctionAttributeKey.Colorful) { isColorful = true; } else if (trait.key == FunctionAttributeKey.OnOff) { isOnStatus = true; } UpdataFunctionRow(); } catch (Exception ex) { MainPage.Log($"场景配置异常3:{ex.Message}"); } }; btnOff.MouseUpEventHandler = (sender, e) => { dialog.Close(); trait.value = "off"; try { sceneFunction.status.Find((obj) => obj.key == trait.key).value = "off"; } catch (Exception ex) { MainPage.Log($"场景配置异常:{ex.Message}"); } try { btn.Text = trait.GetValueText() + trait.GetUintString(); if (trait.key == FunctionAttributeKey.OnOff) { isOnStatus = false; var temp = sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.Brightness); if (temp == null) { temp = sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.Percent); } if (temp != null) { if (temp.value != "0") { temp.value = "0"; } if (btnBrightnessText != null) btnBrightnessText.Text = temp.GetValueText() + "%"; } } } catch (Exception ex) { MainPage.Log($"场景配置异常2:{ex.Message}"); } try { if (trait.key == FunctionAttributeKey.Colorful) { isColorful = false; } else if (trait.key == FunctionAttributeKey.OnOff) { isOnStatus = false; } UpdataFunctionRow(); } catch (Exception ex) { MainPage.Log($"场景配置异常3:{ex.Message}"); } }; } /// /// 加载安防布防选择弹窗 /// /// /// void LoadEditDialog_Security(SceneFunctionStatus trait, Button btn) { Dialog dialog = new Dialog(); var pView = new FrameLayout() { BackgroundColor = CSS_Color.DialogTransparentColor1, }; dialog.AddChidren(pView); var optionBaseView = new FrameLayout() { Y = Application.GetRealHeight(500), Height = Application.GetRealHeight(160), AnimateSpeed = 0.3f, Animate = Animate.DownToUp, }; pView.AddChidren(optionBaseView); var optionView = new VerticalScrolViewLayout() { Gravity = Gravity.CenterHorizontal, Width = Application.GetRealWidth(343), Height = Application.GetRealHeight(100), BackgroundColor = CSS_Color.MainBackgroundColor, Radius = (uint)Application.GetRealWidth(12), ScrollEnabled = false, }; optionBaseView.AddChidren(optionView); var btnOn = new Button() { Height = Application.GetRealHeight(50), TextAlignment = TextAlignment.Center, TextColor = CSS_Color.TextualColor, SelectedTextColor = CSS_Color.MainColor, TextSize = CSS_FontSize.SubheadingFontSize, TextID = StringId.Defense, IsSelected = trait.value.ToString() == "true" }; optionView.AddChidren(btnOn); optionView.AddChidren(new Button() { Height = Application.GetRealHeight(1), BackgroundColor = CSS_Color.DividingLineColor }); var btnOff = new Button() { Height = Application.GetRealHeight(50), TextAlignment = TextAlignment.Center, TextColor = CSS_Color.TextualColor, SelectedTextColor = CSS_Color.MainColor, TextSize = CSS_FontSize.SubheadingFontSize, TextID = StringId.Undefense, IsSelected = trait.value.ToString() == "false" }; optionView.AddChidren(btnOff); var btnCancel = new Button() { Gravity = Gravity.CenterHorizontal, Y = Application.GetRealHeight(8) + optionView.Bottom, Width = Application.GetRealWidth(343), Height = Application.GetRealHeight(50), BackgroundColor = CSS_Color.MainBackgroundColor, Radius = (uint)Application.GetRealWidth(12), TextID = StringId.Cancel, TextColor = CSS_Color.WarningColor, TextSize = CSS_FontSize.SubheadingFontSize, }; optionBaseView.AddChidren(btnCancel); dialog.Show(); pView.MouseUpEventHandler = (sender, e) => { dialog.Close(); }; btnCancel.MouseUpEventHandler = (sender, e) => { dialog.Close(); }; btnOn.MouseUpEventHandler = (sender, e) => { dialog.Close(); trait.value = "true"; sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.Security).value = "true"; btn.Text = trait.GetValueText() + trait.GetUintString(); }; btnOff.MouseUpEventHandler = (sender, e) => { dialog.Close(); trait.value = "false"; sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.Security).value = "false"; btn.Text = trait.GetValueText() + trait.GetUintString(); }; } /// /// 加载温度选择弹窗 /// /// /// void LoadEditDialog_Temp(SceneFunctionStatus trait, Button btn) { double temp = trait.min; double.TryParse(trait.value, out temp); trait.value = temp.ToString(); List pickerItems = new List(); if (trait == null) { return; } Dialog dialog = new Dialog(); var pView = new FrameLayout() { BackgroundColor = CSS_Color.DialogTransparentColor1, }; dialog.AddChidren(pView); var optionBaseView = new FrameLayout() { Y = Application.GetRealHeight(456 - 60), Gravity = Gravity.CenterHorizontal, Width = Application.GetRealWidth(343), Height = Application.GetRealHeight(260), AnimateSpeed = 0.3f, Animate = Animate.DownToUp, BackgroundColor = CSS_Color.MainBackgroundColor, Radius = (uint)Application.GetRealWidth(12), }; pView.AddChidren(optionBaseView); var topView = new FrameLayout() { Gravity = Gravity.CenterHorizontal, Width = Application.GetRealWidth(343), Height = Application.GetRealHeight(40), BackgroundColor = CSS_Color.MainBackgroundColor, Radius = (uint)Application.GetRealWidth(12), }; optionBaseView.AddChidren(topView); topView.AddChidren(new Button() { Y = Application.GetRealHeight(39), Height = Application.GetRealHeight(1), BackgroundColor = CSS_Color.DividingLineColor }); var btnCancel = new Button() { X = Application.GetRealWidth(21), Width = Application.GetRealWidth(100), TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.PromptingColor1, TextSize = CSS_FontSize.TextFontSize, TextID = StringId.Cancel, }; topView.AddChidren(btnCancel); var btnConfrim = new Button() { X = Application.GetRealWidth(160), Width = Application.GetRealWidth(160), TextAlignment = TextAlignment.CenterRight, TextColor = CSS_Color.MainColor, TextSize = CSS_FontSize.TextFontSize, TextID = StringId.Confirm, }; topView.AddChidren(btnConfrim); UIPickerView uIPickerView = new UIPickerView() { Y = Application.GetRealHeight(40), Height = Application.GetRealHeight(210), Radius = (uint)Application.GetRealWidth(12), }; for (int i = trait.min; i <= trait.max; i += 1) { pickerItems.Add(i.ToString() + trait.GetUintString()); } uIPickerView.setNPicker(pickerItems, null, null); optionBaseView.AddChidren(uIPickerView); uIPickerView.setCurrentItems(pickerItems.IndexOf(trait.value.ToString()), 4, 5); string selectItem = pickerItems[0]; if (pickerItems.Contains(trait.value + trait.GetUintString())) { selectItem = trait.value.ToString() + trait.GetUintString(); uIPickerView.setCurrentItems(pickerItems.IndexOf(selectItem), 0, 0); } dialog.Show(); pView.MouseUpEventHandler = (sender, e) => { dialog.Close(); }; btnCancel.MouseUpEventHandler = (sender, e) => { dialog.Close(); }; uIPickerView.OnSelectChangeEvent = (int1, int2, int3) => { selectItem = pickerItems[int1]; }; btnConfrim.MouseUpEventHandler = (sender, e) => { dialog.Close(); btn.Text = selectItem; //sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.OnOff).value = trait.value.ToString() ; trait.value = selectItem.Replace(trait.GetUintString(), ""); }; } /// /// 加载温度选择弹窗 /// /// /// void LoadEditDialog_Angle(SceneFunctionStatus trait, Button btn) { double temp = trait.min; double.TryParse(trait.value, out temp); trait.value = temp.ToString(); List pickerItems = new List(); if (trait == null) { return; } Dialog dialog = new Dialog(); var pView = new FrameLayout() { BackgroundColor = CSS_Color.DialogTransparentColor1, }; dialog.AddChidren(pView); var optionBaseView = new FrameLayout() { Y = Application.GetRealHeight(456 - 60), Gravity = Gravity.CenterHorizontal, Width = Application.GetRealWidth(343), Height = Application.GetRealHeight(260), AnimateSpeed = 0.3f, Animate = Animate.DownToUp, BackgroundColor = CSS_Color.MainBackgroundColor, Radius = (uint)Application.GetRealWidth(12), }; pView.AddChidren(optionBaseView); var topView = new FrameLayout() { Gravity = Gravity.CenterHorizontal, Width = Application.GetRealWidth(343), Height = Application.GetRealHeight(40), BackgroundColor = CSS_Color.MainBackgroundColor, Radius = (uint)Application.GetRealWidth(12), }; optionBaseView.AddChidren(topView); topView.AddChidren(new Button() { Y = Application.GetRealHeight(39), Height = Application.GetRealHeight(1), BackgroundColor = CSS_Color.DividingLineColor }); var btnCancel = new Button() { X = Application.GetRealWidth(21), Width = Application.GetRealWidth(100), TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.PromptingColor1, TextSize = CSS_FontSize.TextFontSize, TextID = StringId.Cancel, }; topView.AddChidren(btnCancel); var btnConfrim = new Button() { X = Application.GetRealWidth(160), Width = Application.GetRealWidth(160), TextAlignment = TextAlignment.CenterRight, TextColor = CSS_Color.MainColor, TextSize = CSS_FontSize.TextFontSize, TextID = StringId.Confirm, }; topView.AddChidren(btnConfrim); UIPickerView uIPickerView = new UIPickerView() { Y = Application.GetRealHeight(40), Height = Application.GetRealHeight(210), Radius = (uint)Application.GetRealWidth(12), }; for (int i = trait.min; i <= trait.max; i += 1) { pickerItems.Add(i.ToString() + trait.GetUintString()); } uIPickerView.setNPicker(pickerItems, null, null); optionBaseView.AddChidren(uIPickerView); uIPickerView.setCurrentItems(pickerItems.IndexOf(trait.value.ToString() + "°"), 0, 0); string selectItem = pickerItems[pickerItems.IndexOf(trait.value.ToString() + "°")]; if (pickerItems.Contains(trait.value + trait.GetUintString())) { selectItem = trait.value.ToString() + trait.GetUintString(); } //uIPickerView.setCurrentItems dialog.Show(); pView.MouseUpEventHandler = (sender, e) => { dialog.Close(); }; btnCancel.MouseUpEventHandler = (sender, e) => { dialog.Close(); }; uIPickerView.OnSelectChangeEvent = (int1, int2, int3) => { selectItem = pickerItems[int1]; }; btnConfrim.MouseUpEventHandler = (sender, e) => { dialog.Close(); btn.Text = selectItem; //sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.OnOff).value = trait.value.ToString() ; trait.value = selectItem.Replace(trait.GetUintString(), ""); }; } /// /// 加载亮度选择弹窗 /// /// /// void LoadEditDialog_Percent(SceneFunctionStatus trait, Button btn) { if (trait == null) { return; } Dialog dialog = new Dialog(); var pView = new FrameLayout() { BackgroundColor = CSS_Color.DialogTransparentColor1, }; dialog.AddChidren(pView); var optionBaseView = new FrameLayout() { Y = Application.GetRealHeight(467), Gravity = Gravity.CenterHorizontal, Width = Application.GetRealWidth(343), Height = Application.GetRealHeight(180), AnimateSpeed = 0.3f, Animate = Animate.DownToUp, BackgroundColor = CSS_Color.MainBackgroundColor, Radius = (uint)Application.GetRealWidth(12), }; pView.AddChidren(optionBaseView); var topView = new FrameLayout() { Gravity = Gravity.CenterHorizontal, Width = Application.GetRealWidth(343), Height = Application.GetRealHeight(40), BackgroundColor = CSS_Color.MainBackgroundColor, Radius = (uint)Application.GetRealWidth(12), }; optionBaseView.AddChidren(topView); topView.AddChidren(new Button() { Y = Application.GetRealHeight(39), Height = Application.GetRealHeight(1), BackgroundColor = CSS_Color.DividingLineColor }); var btnTitle = new Button() { Gravity = Gravity.CenterHorizontal, TextAlignment = TextAlignment.Center, Width = Application.GetRealWidth(100), Text = trait.GetNameText(), IsBold = true, TextColor = CSS_Color.FirstLevelTitleColor, TextSize = CSS_FontSize.SubheadingFontSize, }; topView.AddChidren(btnTitle); var btnCancel = new Button() { X = Application.GetRealWidth(21), Width = Application.GetRealWidth(100), TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.PromptingColor1, TextSize = CSS_FontSize.TextFontSize, TextID = StringId.Cancel, }; topView.AddChidren(btnCancel); var btnConfrim = new Button() { Width = Application.GetRealWidth(320), TextAlignment = TextAlignment.CenterRight, TextColor = CSS_Color.MainColor, TextSize = CSS_FontSize.TextFontSize, TextID = StringId.Confirm, }; topView.AddChidren(btnConfrim); Button btnMinusSignIcon = new Button() { X = Application.GetRealWidth(26), Y = Application.GetRealHeight(118), Width = Application.GetMinRealAverage(24), Height = Application.GetMinRealAverage(24), UnSelectedImagePath = "Public/MinusSignIcon.png", }; optionBaseView.AddChidren(btnMinusSignIcon); DiyImageSeekBar controlBar = new DiyImageSeekBar() { X = btnMinusSignIcon.Right + Application.GetRealWidth(12), Y = Application.GetRealHeight(100),//414,设计数据 Width = Application.GetRealWidth(220), Height = Application.GetRealHeight(54), SeekBarViewHeight = Application.GetRealHeight(8), ThumbImagePath = "Public/ThumbImage.png", ThumbImageHeight = Application.GetRealHeight(54), ProgressBarColor = CSS_Color.MainColor, ProgressTextColor = CSS_Color.FirstLevelTitleColor, ProgressTextSize = CSS_FontSize.PromptFontSize_FirstLevel, MaxValue = 100, Progress = trait.value.ToString().Replace("{}", "") == "" ? 0 : Convert.ToInt32(trait.value.Replace("{}", "")), SeekBarPadding = Application.GetRealWidth(20), }; optionBaseView.AddChidren(controlBar); Button btnPlusSgnIcon = new Button() { X = controlBar.Right + Application.GetRealWidth(12), Y = Application.GetRealHeight(118), Width = Application.GetMinRealAverage(24), Height = Application.GetMinRealAverage(24), UnSelectedImagePath = "Public/PlusSignIcon.png", }; optionBaseView.AddChidren(btnPlusSgnIcon); btnMinusSignIcon.MouseUpEventHandler = (sender, e) => { controlBar.Progress--; }; btnPlusSgnIcon.MouseUpEventHandler = (sender, e) => { controlBar.Progress++; }; dialog.Show(); pView.MouseUpEventHandler = (sender, e) => { dialog.Close(); }; btnCancel.MouseUpEventHandler = (sender, e) => { dialog.Close(); }; btnConfrim.MouseUpEventHandler = (sender, e) => { dialog.Close(); trait.value = controlBar.Progress.ToString(); btn.Text = trait.value + trait.GetUintString(); var temp = sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.OnOff); if (temp != null) { if (controlBar.Progress > 0) { temp.value = "on"; } else { temp.value = "off"; } btnOnText.Text = temp.GetValueText(); } }; } /// /// 加载cct选择弹窗 /// /// /// void LoadEditDialog_CCT(SceneFunctionStatus trait, Button btn) { if (trait.min == 0) { switch (trait.key) { case FunctionAttributeKey.SetTemp: trait.min = 16; break; case FunctionAttributeKey.CCT: trait.min = 2700; break; } } if (trait.max == 0) { switch (trait.key) { case FunctionAttributeKey.SetTemp: trait.max = 30; break; case FunctionAttributeKey.CCT: trait.max = 6500; break; } } double temp = trait.min; double.TryParse(trait.value, out temp); trait.value = temp.ToString(); List pickerItems = new List(); if (trait == null) { return; } Dialog dialog = new Dialog(); var pView = new FrameLayout() { BackgroundColor = CSS_Color.DialogTransparentColor1, }; dialog.AddChidren(pView); var optionBaseView = new FrameLayout() { Y = Application.GetRealHeight(456 - 60), Gravity = Gravity.CenterHorizontal, Width = Application.GetRealWidth(343), Height = Application.GetRealHeight(260), AnimateSpeed = 0.3f, Animate = Animate.DownToUp, BackgroundColor = CSS_Color.MainBackgroundColor, Radius = (uint)Application.GetRealWidth(12), }; pView.AddChidren(optionBaseView); var topView = new FrameLayout() { Gravity = Gravity.CenterHorizontal, Width = Application.GetRealWidth(343), Height = Application.GetRealHeight(40), BackgroundColor = CSS_Color.MainBackgroundColor, Radius = (uint)Application.GetRealWidth(12), }; optionBaseView.AddChidren(topView); topView.AddChidren(new Button() { Y = Application.GetRealHeight(39), Height = Application.GetRealHeight(1), BackgroundColor = CSS_Color.DividingLineColor }); var btnCancel = new Button() { X = Application.GetRealWidth(21), Width = Application.GetRealWidth(100), TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.PromptingColor1, TextSize = CSS_FontSize.TextFontSize, TextID = StringId.Cancel, }; topView.AddChidren(btnCancel); var btnConfrim = new Button() { Width = Application.GetRealWidth(320), TextAlignment = TextAlignment.CenterRight, TextColor = CSS_Color.MainColor, TextSize = CSS_FontSize.TextFontSize, TextID = StringId.Confirm, }; topView.AddChidren(btnConfrim); UIPickerView uIPickerView = new UIPickerView() { Y = Application.GetRealHeight(40), Height = Application.GetRealHeight(210), Radius = (uint)Application.GetRealWidth(12), }; for (int i = trait.min; i <= trait.max; i += 100) { pickerItems.Add(i.ToString() + trait.GetUintString()); } uIPickerView.setNPicker(pickerItems, null, null); optionBaseView.AddChidren(uIPickerView); uIPickerView.setCurrentItems(pickerItems.IndexOf(trait.value.ToString()), 4, 5); string selectItem = pickerItems[0]; if (pickerItems.Contains(trait.value + trait.GetUintString())) { selectItem = trait.value.ToString() + trait.GetUintString(); } dialog.Show(); pView.MouseUpEventHandler = (sender, e) => { dialog.Close(); }; btnCancel.MouseUpEventHandler = (sender, e) => { dialog.Close(); }; uIPickerView.OnSelectChangeEvent = (int1, int2, int3) => { selectItem = pickerItems[int1]; }; btnConfrim.MouseUpEventHandler = (sender, e) => { dialog.Close(); btn.Text = selectItem; //sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.OnOff).value = trait.value.ToString() ; trait.value = selectItem.Replace(trait.GetUintString(), ""); }; } /// /// 加载rgb选择弹窗 /// /// /// void LoadEditDialog_RGB(SceneFunctionStatus trait, Button btn) { string rgbString = trait.value; Light tempLight = new Light(); if (trait == null) { return; } Dialog dialog = new Dialog(); var bodyView = new FrameLayout(); dialog.AddChidren(bodyView); var contentView = new FrameLayout() { Gravity = Gravity.Center, BackgroundColor = CSS_Color.MainBackgroundColor, Width = Application.GetRealWidth(343), Height = Application.GetRealHeight(52 + 44 + 18 + 22 + 248), 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.ColorValue, TextAlignment = TextAlignment.Center, }; titleView.AddChidren(btnTitle); titleView.AddChidren(new Button() { Height = 1, BackgroundColor = CSS_Color.DividingLineColor, Y = Application.GetRealHeight(51) }); #endregion int attrViewHight = Application.GetRealHeight(18 + 22 + 248); //属性设置区域 var attrView = new FrameLayout() { Y = Application.GetRealHeight(52), Width = Application.GetRealWidth(343), Height = attrViewHight }; contentView.AddChidren(attrView); attrView.AddChidren(new Button() { Height = Application.GetRealHeight(18) }); #region RGB 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(trait.value)) }; 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.ColorChaged += (sender2, e2) => { rgbString = (e2[0] + "," + e2[1] + "," + e2[2]).ToString(); //trait.value = rgbString; btnCurColor.BackgroundColor = (uint)(0xFF000000 + tempLight.GetRGBcolor(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.MouseMoveEventHandler += (sender, e) => { //当鼠标点下事件处理 colorPicker.MouseDownEventHandler(sender, e); }; #endregion #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 }); var btnCancel = 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(btnCancel); btnCancel.MouseUpEventHandler = (sender, e) => { dialog.Close(); }; var btnComplete = 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.Complete }; bottomView.AddChidren(btnComplete); //例:右下圆角 大小为50 int mRectCornerID = HDLUtils.RectCornerBottomRight; btnComplete.SetCornerWithSameRadius((uint)Application.GetRealWidth(14), mRectCornerID); btnComplete.MouseUpEventHandler = (sender, e) => { dialog.Close(); trait.value = rgbString; btn.BackgroundColor = (uint)(0xFF000000 + tempLight.GetRGBcolor(rgbString)); }; #endregion dialog.Show(); } /// /// 加载rgb选择弹窗 /// /// /// void LoadEditDialog_RGB_V2(SceneFunctionStatus trait, Button btn) { string rgbString = trait.value; Light tempLight = new Light(); if (trait == null) { return; } Dialog dialog = new Dialog() { Height = Application.GetRealHeight(647), }; var bodyView = new FrameLayout(); dialog.AddChidren(bodyView); var contentView = new FrameLayout() { Gravity = Gravity.BottomCenter, BackgroundColor = CSS_Color.MainBackgroundColor, Width = Application.GetRealWidth(343), Height = Application.GetRealHeight(300), 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, Text = "RGB", TextAlignment = TextAlignment.Center, }; titleView.AddChidren(btnTitle); titleView.AddChidren(new Button() { Height = 1, BackgroundColor = CSS_Color.DividingLineColor, Y = Application.GetRealHeight(51) }); #endregion int attrViewHight = Application.GetRealHeight(245); //属性设置区域 var attrView = new FrameLayout() { Y = Application.GetRealHeight(52), Width = Application.GetRealWidth(343), Height = attrViewHight }; contentView.AddChidren(attrView); attrView.AddChidren(new Button() { Height = Application.GetRealHeight(18) }); #region RGB var rgbView = new FrameLayout() { Height = Application.GetRealHeight(248) }; attrView.AddChidren(rgbView); var btnCurColor = new Button() { X = Application.GetRealWidth(16), 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(trait.value)) }; 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.ColorChaged += (sender2, e2) => { rgbString = (e2[0] + "," + e2[1] + "," + e2[2]).ToString(); //trait.value = rgbString; btnCurColor.BackgroundColor = (uint)(0xFF000000 + tempLight.GetRGBcolor(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.MouseMoveEventHandler += (sender, e) => { //当鼠标点下事件处理 colorPicker.MouseDownEventHandler(sender, e); }; #endregion #region var btnCancel = new Button() { X = Application.GetRealWidth(20), Width = Application.GetRealWidth(100), Height = Application.GetRealHeight(44), TextAlignment = TextAlignment.CenterLeft, TextSize = CSS_FontSize.TextFontSize, TextColor = CSS_Color.TextualColor, TextID = StringId.Cancel, }; titleView.AddChidren(btnCancel); btnCancel.MouseUpEventHandler = (sender, e) => { dialog.Close(); }; var btnComplete = new Button() { X = Application.GetRealWidth(223), Width = Application.GetRealWidth(100), Height = Application.GetRealHeight(46), TextColor = CSS_Color.MainColor, TextAlignment = TextAlignment.CenterRight, TextSize = CSS_FontSize.TextFontSize, TextID = StringId.Complete }; titleView.AddChidren(btnComplete); //例:右下圆角 大小为50 int mRectCornerID = HDLUtils.RectCornerBottomRight; btnComplete.SetCornerWithSameRadius((uint)Application.GetRealWidth(14), mRectCornerID); btnComplete.MouseUpEventHandler = (sender, e) => { dialog.Close(); trait.value = rgbString; btn.BackgroundColor = (uint)(0xFF000000 + tempLight.GetRGBcolor(rgbString)); }; #endregion dialog.Show(); } /// /// 检测点击点 /// /// 圆的半径 /// 圆心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; } /// /// 加载变化速度选择弹窗 /// /// /// void LoadEditDialog_FadeTime(SceneFunctionStatus trait, Button btn) { if (trait == null) { return; } Dialog dialog = new Dialog(); var pView = new FrameLayout() { BackgroundColor = CSS_Color.DialogTransparentColor1, }; dialog.AddChidren(pView); var optionBaseView = new FrameLayout() { Y = Application.GetRealHeight(467), Gravity = Gravity.CenterHorizontal, Width = Application.GetRealWidth(343), Height = Application.GetRealHeight(180), AnimateSpeed = 0.3f, Animate = Animate.DownToUp, BackgroundColor = CSS_Color.MainBackgroundColor, Radius = (uint)Application.GetRealWidth(12), }; pView.AddChidren(optionBaseView); var topView = new FrameLayout() { Gravity = Gravity.CenterHorizontal, Width = Application.GetRealWidth(343), Height = Application.GetRealHeight(40), BackgroundColor = CSS_Color.MainBackgroundColor, Radius = (uint)Application.GetRealWidth(12), }; optionBaseView.AddChidren(topView); topView.AddChidren(new Button() { Y = Application.GetRealHeight(39), Height = Application.GetRealHeight(1), BackgroundColor = CSS_Color.DividingLineColor }); var btnTitle = new Button() { Gravity = Gravity.CenterHorizontal, TextAlignment = TextAlignment.Center, Width = Application.GetRealWidth(100), Text = trait.GetNameText(), IsBold = true, TextColor = CSS_Color.FirstLevelTitleColor, TextSize = CSS_FontSize.SubheadingFontSize, }; topView.AddChidren(btnTitle); var btnCancel = new Button() { X = Application.GetRealWidth(21), Width = Application.GetRealWidth(100), TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.PromptingColor1, TextSize = CSS_FontSize.TextFontSize, TextID = StringId.Cancel, }; topView.AddChidren(btnCancel); var btnConfrim = new Button() { Width = Application.GetRealWidth(320), TextAlignment = TextAlignment.CenterRight, TextColor = CSS_Color.MainColor, TextSize = CSS_FontSize.TextFontSize, TextID = StringId.Confirm, }; topView.AddChidren(btnConfrim); Button btnMinusSignIcon = new Button() { X = Application.GetRealWidth(26), Y = Application.GetRealHeight(118), Width = Application.GetMinRealAverage(24), Height = Application.GetMinRealAverage(24), Text = "0s", TextColor = CSS_Color.PromptingColor1, TextSize = CSS_FontSize.PromptFontSize_FirstLevel, }; optionBaseView.AddChidren(btnMinusSignIcon); DiyImageSeekBar controlBar = new DiyImageSeekBar() { X = btnMinusSignIcon.Right + Application.GetRealWidth(12), Y = Application.GetRealHeight(100),//414,设计数据 Width = Application.GetRealWidth(220), Height = Application.GetRealHeight(54), SeekBarViewHeight = Application.GetRealHeight(8), ThumbImagePath = "Public/ThumbImage.png", ThumbImageHeight = Application.GetRealHeight(54), ProgressBarColor = CSS_Color.MainColor, ProgressTextColor = CSS_Color.FirstLevelTitleColor, ProgressTextSize = CSS_FontSize.PromptFontSize_FirstLevel, MaxValue = 100, Progress = trait.value.ToString().Replace("{}", "") == "" ? 0 : Convert.ToInt32(trait.value.Replace("{}", "")), SeekBarPadding = Application.GetRealWidth(20), }; optionBaseView.AddChidren(controlBar); Button btnPlusSgnIcon = new Button() { X = controlBar.Right + Application.GetRealWidth(12), Y = Application.GetRealHeight(118), Width = Application.GetMinRealAverage(24), Height = Application.GetMinRealAverage(24), Text = "10s", TextColor = CSS_Color.PromptingColor1, TextSize = CSS_FontSize.PromptFontSize_FirstLevel, }; optionBaseView.AddChidren(btnPlusSgnIcon); btnMinusSignIcon.MouseUpEventHandler = (sender, e) => { controlBar.Progress--; }; btnPlusSgnIcon.MouseUpEventHandler = (sender, e) => { controlBar.Progress++; }; dialog.Show(); pView.MouseUpEventHandler = (sender, e) => { dialog.Close(); }; btnCancel.MouseUpEventHandler = (sender, e) => { dialog.Close(); }; btnConfrim.MouseUpEventHandler = (sender, e) => { dialog.Close(); trait.value = controlBar.Progress.ToString(); btn.Text = trait.value + trait.GetUintString(); }; } /// /// 加载功能属性数据选择弹窗 /// void LoadEditDialog_FunctionPar(SceneFunctionStatus trait, Button btn, List statusList) { Button lastButton = new Button(); var lastData = trait.value; var lastText = btn.Text; Dialog dialog = new Dialog(); if (DB_ResidenceData.Instance.GatewayType == 0) { if (SPK.AcSpkList().Contains(sceneFunction.localFunction.spk)) { //0 制冷1制热,2通风,3自动,4除湿 for (int i = 0; i < statusList.Count; i++) { if (statusList[i] == "0") { statusList[i] = "cool"; } else if (statusList[i] == "1") { statusList[i] = "heat"; } else if (statusList[i] == "2") { statusList[i] = "fan"; } else if (statusList[i] == "3") { statusList[i] = "auto"; } else if (statusList[i] == "4") { statusList[i] = "dry"; } } } else if (SPK.FhSpkList().Contains(sceneFunction.localFunction.spk)) { //1:普通,2:白天,3:夜晚,4:离开,5:时间 for (int i = 0; i < statusList.Count; i++) { if (statusList[i] == "5") { statusList[i] = "timer"; } else if (statusList[i] == "1") { statusList[i] = "normal"; } else if (statusList[i] == "2") { statusList[i] = "day"; } else if (statusList[i] == "3") { statusList[i] = "night"; } else if (statusList[i] == "4") { statusList[i] = "away"; } } } } var pView = new FrameLayout() { BackgroundColor = CSS_Color.DialogTransparentColor1, }; dialog.AddChidren(pView); var optionBaseView = new FrameLayout() { Y = Application.GetRealHeight(579 - 50 * statusList.Count), Gravity = Gravity.CenterHorizontal, Width = Application.GetRealWidth(343), Height = Application.GetRealHeight(50 * statusList.Count + 50), AnimateSpeed = 0.3f, Animate = Animate.DownToUp, BackgroundColor = CSS_Color.MainBackgroundColor, Radius = (uint)Application.GetRealWidth(12), }; pView.AddChidren(optionBaseView); var topView = new FrameLayout() { Gravity = Gravity.CenterHorizontal, Width = Application.GetRealWidth(343), Height = Application.GetRealHeight(50), BackgroundColor = CSS_Color.MainBackgroundColor, Radius = (uint)Application.GetRealWidth(12), }; optionBaseView.AddChidren(topView); var btnTitle = new Button() { Gravity = Gravity.CenterHorizontal, TextAlignment = TextAlignment.Center, Width = Application.GetRealWidth(100), Text = trait.GetNameText(), IsBold = true, TextColor = CSS_Color.FirstLevelTitleColor, TextSize = CSS_FontSize.SubheadingFontSize, }; topView.AddChidren(btnTitle); var btnCancel = new Button() { X = Application.GetRealWidth(21), Width = Application.GetRealWidth(100), TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.PromptingColor1, TextSize = CSS_FontSize.TextFontSize, TextID = StringId.Cancel, }; topView.AddChidren(btnCancel); var btnConfrim = new Button() { Width = Application.GetRealWidth(320), TextAlignment = TextAlignment.CenterRight, TextColor = CSS_Color.MainColor, TextSize = CSS_FontSize.TextFontSize, TextID = StringId.Complete, }; topView.AddChidren(btnConfrim); int hei = 1; foreach (var m in statusList) { var row = new FrameLayout() { Y = Application.GetRealHeight(50 * hei), Height = Application.GetRealHeight(50), }; optionBaseView.AddChidren(row); if (statusList.Count > hei) { optionBaseView.AddChidren(new Button() { Gravity = Gravity.CenterHorizontal, Y = row.Bottom, Width = Application.GetRealWidth(343), BackgroundColor = CSS_Color.DividingLineColor, Height = 1, }); } hei++; var btnChoose = new Button() { X = Application.GetRealWidth(303), Gravity = Gravity.CenterVertical, Width = Application.GetMinRealAverage(28), Height = Application.GetMinRealAverage(28), UnSelectedImagePath = "Public/ChooseIcon.png", SelectedImagePath = "Public/ChooseOnIcon.png", }; row.AddChidren(btnChoose); if (trait.value == m) { lastButton = btnChoose; btnChoose.IsSelected = true; } var btnPropertyTitle = new Button() { X = Application.GetRealWidth(16), TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.FirstLevelTitleColor, TextSize = CSS_FontSize.TextFontSize, Tag = m, Text = trait.GetValueText(m) }; row.AddChidren(btnPropertyTitle); btnPropertyTitle.MouseUpEventHandler = (sender, e) => { btnChoose.IsSelected = true; if (lastButton != null) { lastButton.IsSelected = false; } lastButton = btnChoose; lastData = btnPropertyTitle.Tag.ToString(); lastText = btnPropertyTitle.Text; }; } dialog.Show(); pView.MouseUpEventHandler = (sender, e) => { dialog.Close(); }; btnCancel.MouseUpEventHandler = (sender, e) => { dialog.Close(); }; btnConfrim.MouseUpEventHandler = (sender, e) => { dialog.Close(); trait.value = lastData; //sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.OnOff).value = trait.curValue.ToString() ; btn.Text = lastText; }; } /// /// 百分比 /// /// 旧状态值 /// 标题 /// 回调 void BrightnessView(string oldStateValue, string titleName, Action action) { #region 界面 var brightness = new UI2.Intelligence.Automation.LogicView.BrightnessView(); brightness.FLayoutView(this, titleName, oldStateValue, action); #endregion } /// /// 列表界面 /// /// 界面显示数据源 /// 旧状态值 /// 标题 /// 回调 void ListView(List list, string oldStateValue, string titleName, Action action) { var pif = new UI2.Intelligence.Automation.PublicInterface(); pif.SingleSelectionShow(this, list, titleName, oldStateValue, action); } /// /// 音乐列表界面 /// /// 旧状态值 /// 回调 void MusicListView(string oldStateValue, Action action) { Loading loading = new Loading(); this.AddChidren(loading); loading.Start(); System.Threading.Tasks.Task.Run(() => { try { var palyList = Music.SendMethod.Current.GetSingleSongList(new Function { sid = sceneFunction.sid }, "hdl_special", ""); List songNameList = new List(); for (int i = 0; i < palyList.songs.Count; i++) { var song = palyList.songs[i]; songNameList.Add(song.name); } Application.RunOnMainThread(() => { loading.Hide(); var publicInterface = new UI2.Intelligence.Automation.PublicInterface(); publicInterface.FrameOrVv(this, songNameList, new List { oldStateValue }, palyList.group, (index) => { if (index > palyList.songs.Count) { index = 0; } var song = palyList.songs[index]; action?.Invoke(palyList.group, song); //界面显示选中值 //funTypeView.btnState.Text = songSelecetd.name; ////数据封装 //AddDictionary("playlist_name", palyList.group);//列表名 //AddDictionary("song_name", songSelecetd.name);//歌曲名 //if (!string.IsNullOrEmpty(songSelecetd.url)) //{ // //存在url就一起发送过去 // AddDictionary("url", songSelecetd.url); //} }, false); }); } catch { } }); } #endregion } }