using System; using System.Collections.Generic; using HDL_ON.DriverLayer; using HDL_ON.Entity; using HDL_ON.UI.CSS; using Shared; namespace HDL_ON.UI { public partial class ClassificationPage { /// /// 更新界面信息 /// 更新功能打开数量 /// 更新全关功能状态 /// /// public static void UpdataInfo(Function function) { Application.RunOnMainThread(() => { if (bodyView == null) return; try { ShowFunction vv = ShowFunction.Light; if (SPK.ElectricalSpkList().Contains(function.spk)) { vv = ShowFunction.Electric; } else if (SPK.FhSpkList().Contains(function.spk)) { vv = ShowFunction.FloorHeating; } else if (SPK.AcSpkList().Contains(function.spk)) { vv = ShowFunction.AC; } else if (SPK.CurtainSpkList().Contains(function.spk)) { vv = ShowFunction.Curtain; } else if (SPK.LightSpkList().Contains(function.spk)) { vv = ShowFunction.Light; } else if (SPK.AirFreshSpkList().Contains(function.spk)) { vv = ShowFunction.FreshAir; } UpdataFunctionOnCount(vv, function.spk); UpdataCloseAllButton(function); } catch { } }); } /// /// 更新功能打开数量 /// /// static void UpdataFunctionOnCount(ShowFunction functionCategory, string functionType) { try { for (int i = 0; i < bodyView.functionsPageView.ChildrenCount; i++) { if (bodyView.functionsPageView.GetChildren(i).GetType() == typeof(FrameLayout)) { var view1 = bodyView.functionsPageView.GetChildren(i) as FrameLayout; for (int j = 0; j < view1.ChildrenCount; j++) { if (view1.GetChildren(j).GetType() == typeof(FrameLayout)) { var view2 = view1.GetChildren(j) as FrameLayout; for (var k = 0; k < view2.ChildrenCount; k++) { if (view2.GetChildren(k).GetType() == typeof(FrameLayout)) { var view3 = view2.GetChildren(k) as FrameLayout; if (view3 == null) { continue; } if (view3.Tag == null || view3.Tag.ToString() != functionCategory + "_View") { //MainPage.Log($"i={i}:j={j}:k={k} view3 tag : {view3.Tag.ToString()}"); continue; } for (var o = 0; o < view3.ChildrenCount; o++) { if (view3.GetChildren(o).GetType() == typeof(Button)) { var btn = view3.GetChildren(o) as Button; if (btn.Tag != null) { string btnText = "0"; switch (functionCategory) { case ShowFunction.FloorHeating: btnText = FunctionList.List.GetFloorHeatingList().FindAll((obj) => obj.trait_on_off.curValue.ToString() == "on").Count.ToString(); break; case ShowFunction.AC: btnText = FunctionList.List.GetAcList().FindAll((obj) => obj.trait_on_off.curValue.ToString() == "on").Count.ToString(); break; case ShowFunction.Curtain: btnText = FunctionList.List.GetCurtainList().FindAll((obj) => obj.trait_on_off.curValue.ToString() == "on").Count.ToString(); break; case ShowFunction.Light: btnText = FunctionList.List.GetLightList().FindAll((obj) => obj.trait_on_off.curValue.ToString() == "on").Count.ToString(); break; case ShowFunction.Electric: btnText = FunctionList.List.GetElectricals().FindAll((obj) => obj.trait_on_off.curValue.ToString() == "on").Count.ToString(); break; case ShowFunction.FreshAir: btnText = FunctionList.List.GetAirFreshList().FindAll((obj) => obj.trait_on_off.curValue.ToString() == "on").Count.ToString(); break; } if (btn.Tag.ToString() == functionCategory + "_onCount") { btn.Text = btnText; } else if (btn.Tag.ToString() == functionCategory + "_AllControl") { btn.IsSelected = btnText != "0"; } } } } } } } } } } } catch (Exception ex) { MainPage.Log($"更新全关按钮异常 : {ex.Message} "); } } /// /// 更新全关功能状态 /// static void UpdataCloseAllButton(Function function) { for (int i = 0; i < bodyView.roomListView.ChildrenCount; i++) { if (bodyView.roomListView.GetChildren(i).GetType() == typeof(FrameLayout)) { var view1 = bodyView.roomListView.GetChildren(i) as FrameLayout; if (!function.roomIds.Contains(view1.Tag.ToString())) continue; for (int j = 0; j < view1.ChildrenCount; j++) { if (view1.GetChildren(j).GetType() == typeof(Button)) { var btn = view1.GetChildren(j) as Button; if (btn.Tag != null && btn.Tag.ToString() == "AllClose") { if (function.trait_on_off.curValue.ToString() == "on") { btn.Visible = true; } else { foreach (var rId in function.roomIds) { if (rId == null) { continue; } var r = SpatialInfo.CurrentSpatial.RoomList.Find(s => s.roomId == rId); if (r == null) { continue; } var ssd = r.GetRoomFunctions(false).FindAll((obj) => obj.trait_on_off.curValue.ToString() == "on"); var sss = ssd.Count; if (sss == 0) { btn.Visible = false; } } } } } } } } } /// /// 加载关闭房间所有功能事件 /// void LoadEvent_CloseAllFunction(Button btn, Room room) { try { btn.MouseUpEventHandler = (sender, e) => { Action action = () => { new System.Threading.Thread(() => { foreach (var f in room.GetRoomFunctions(false)) { f.trait_on_off.curValue = "off"; Dictionary d = new Dictionary(); d.Add("on_off", f.trait_on_off.curValue.ToString()); Control.Ins.SendWriteCommand(f, d); } foreach (var m in Music.A31MusicModel.A31MusicModelList) { if (m.roomIds.Contains(room.roomId)) { Music.SendMethod.Pause(m); } } }) { IsBackground = true }.Start(); btn.Visible = false; }; new PublicAssmebly().TipOptionMsg(StringId.Tip, StringId.TipCloseAllFunctionInRoom, action); }; foreach (var f in room.GetRoomFunctions(false)) { if (f.trait_on_off.curValue.ToString() == "on") { btn.Visible = true; break; } } } catch (Exception ex) { MainPage.Log($"load close all function : {ex.Message} "); } } /// /// 加载事件列表 /// void LoadEventList() { LoadEvent_ShowedChange(); } #region 顶部导航栏事件 /// /// 显示界面切换 /// void LoadEvent_ShowedChange() { contentPageView.PageChange = (sender, e) => { if (contentPageView.PageIndex == 0) { btnRoomTilte.IsSelected = true; btnRoomTilte.TextSize = CSS_FontSize.HeadlineFontSize; btnRoomTilte.IsBold = true; btnFuncTitle.IsSelected = false; btnFuncTitle.TextSize = CSS_FontSize.TextFontSize; btnFuncTitle.IsBold = false; } else { btnFuncTitle.IsSelected = true; btnFuncTitle.TextSize = CSS_FontSize.HeadlineFontSize; btnFuncTitle.IsBold = true; btnRoomTilte.IsSelected = false; btnRoomTilte.TextSize = CSS_FontSize.TextFontSize; btnRoomTilte.IsBold = false; } }; btnRoomTilte.MouseUpEventHandler = (sender, e) => { if (btnRoomTilte.IsSelected) { return; } btnRoomTilte.IsSelected = true; btnRoomTilte.TextSize = CSS_FontSize.HeadlineFontSize; btnFuncTitle.IsSelected = false; btnFuncTitle.TextSize = CSS_FontSize.TextFontSize; contentPageView.PageIndex = 0; }; btnFuncTitle.MouseUpEventHandler = (sender, e) => { if (btnFuncTitle.IsSelected) { return; } btnFuncTitle.IsSelected = true; btnFuncTitle.TextSize = CSS_FontSize.HeadlineFontSize; btnRoomTilte.IsSelected = false; btnRoomTilte.TextSize = CSS_FontSize.TextFontSize; contentPageView.PageIndex = 1; }; } #endregion /// /// 关闭打开全部选中类型功能 /// void LoadEvent_SwitchFunction(Button btn, ShowFunction functionCategory,FrameLayout view) { btn.MouseUpEventHandler = (sender, e) => { btn.IsSelected = !btn.IsSelected; var onoff = btn.IsSelected ? "on" : "off"; var waitPage = new Loading(); view.AddChidren(waitPage); waitPage.BackgroundColor = 0x00000000; waitPage.Start(""); new System.Threading.Thread(() => { try { //休眠时间(ms) int sleepTime = 100; if(DB_ResidenceData.Instance.GatewayType == 0) { sleepTime = 200; } if (Control.Ins.GatewayOnline_Local) { switch (functionCategory) { case ShowFunction.AC: foreach (var f in FunctionList.List.GetAcList()) { f.trait_on_off.curValue = onoff; Dictionary d = new Dictionary(); d.Add(FunctionAttributeKey.OnOff, f.trait_on_off.curValue.ToString()); Control.Ins.SendWriteCommand(f, d); System.Threading.Thread.Sleep(sleepTime); } break; case ShowFunction.FloorHeating: foreach (var f in FunctionList.List.GetFloorHeatingList()) { f.trait_on_off.curValue = onoff; Dictionary d = new Dictionary(); d.Add(FunctionAttributeKey.OnOff, f.trait_on_off.curValue.ToString()); Control.Ins.SendWriteCommand(f, d); System.Threading.Thread.Sleep(sleepTime); } break; case ShowFunction.Light: foreach (var f in FunctionList.List.GetLightList()) { f.trait_on_off.curValue = onoff; Dictionary d = new Dictionary(); d.Add(FunctionAttributeKey.OnOff, f.trait_on_off.curValue.ToString()); Control.Ins.SendWriteCommand(f, d); System.Threading.Thread.Sleep(sleepTime); } break; case ShowFunction.Electric: foreach (var f in FunctionList.List.GetElectricals()) { f.trait_on_off.curValue = onoff; Dictionary d = new Dictionary(); d.Add(FunctionAttributeKey.OnOff, f.trait_on_off.curValue.ToString()); Control.Ins.SendWriteCommand(f, d); System.Threading.Thread.Sleep(sleepTime); } break; case ShowFunction.FreshAir: foreach (var f in FunctionList.List.GetAirFreshList()) { f.trait_on_off.curValue = onoff; Dictionary d = new Dictionary(); d.Add(FunctionAttributeKey.OnOff, f.trait_on_off.curValue.ToString()); Control.Ins.SendWriteCommand(f, d); System.Threading.Thread.Sleep(sleepTime); } break; } } else { switch (functionCategory) { case ShowFunction.AC: List acList = new List(); foreach(var f in FunctionList.List.GetAcList()) { acList.Add(f); } Control.Ins.SwtichFunctions(onoff == "on", acList); break; case ShowFunction.FloorHeating: List fhList = new List(); foreach (var f in FunctionList.List.GetFloorHeatingList()) { fhList.Add(f); } Control.Ins.SwtichFunctions(onoff == "on", fhList); break; case ShowFunction.Light: List lightList = new List(); foreach (var f in FunctionList.List.GetLightList()) { lightList.Add(f); } Control.Ins.SwtichFunctions(onoff == "on", lightList); break; case ShowFunction.Electric: List eleList = new List(); foreach (var f in FunctionList.List.GetElectricals()) { eleList.Add(f); } Control.Ins.SwtichFunctions(onoff == "on", eleList); break; } } } catch (Exception ex) { MainPage.Log($"{functionCategory}全开全关失败:{ex.Message}"); } finally { Application.RunOnMainThread(() => { if (waitPage != null) { waitPage.RemoveFromParent(); waitPage = null; } }); } }) { IsBackground = true, Priority = System.Threading.ThreadPriority.AboveNormal }.Start(); }; } /// /// 窗帘全开全关 /// void LoadEvent_CurtainSwitch(Button btnClose, Button btnOpen,FrameLayout view) { btnOpen.MouseUpEventHandler = (sender, e) => { DB_ResidenceData.Instance.GlobalCurtainStatus = true; btnOpen.IsSelected = true; btnClose.IsSelected = false; var waitPage = new Loading(); waitPage.BackgroundColor = 0x00000000; view.AddChidren(waitPage); waitPage.Start(""); new System.Threading.Thread(() => { try { foreach (var f in FunctionList.List.GetCurtainList()) { f.trait_on_off.curValue = "on"; f.SetAttrState(FunctionAttributeKey.Percent, "100"); Dictionary d = new Dictionary(); d.Add("on_off", f.trait_on_off.curValue.ToString()); Control.Ins.SendWriteCommand(f, d); System.Threading.Thread.Sleep(100); } } catch (Exception ex) { MainPage.Log($"窗帘全开全关失败:{ex.Message}"); } finally { Application.RunOnMainThread(() => { if (waitPage != null) { waitPage.RemoveFromParent(); waitPage = null; } }); } }) { IsBackground = true, Priority = System.Threading.ThreadPriority.AboveNormal }.Start(); }; btnClose.MouseUpEventHandler = (sender, e) => { DB_ResidenceData.Instance.GlobalCurtainStatus = false; btnClose.IsSelected = true; btnOpen.IsSelected = false; foreach (var f in FunctionList.List.GetCurtainList()) { f.trait_on_off.curValue = "off"; f.SetAttrState(FunctionAttributeKey.Percent, "0"); Dictionary d = new Dictionary(); d.Add("on_off", f.trait_on_off.curValue.ToString()); Control.Ins.SendWriteCommand(f, d); } }; } } }