using System; using HDL_ON.DriverLayer; using HDL_ON.Entity; using HDL_ON.Stan; using HDL_ON.UI.CSS; using Shared; namespace HDL_ON.UI { public class AcControlPage : DeviceFunctionCardCommonForm { #region ■ 变量声明___________________________ /// /// 空调温度控制控件 /// DiyArcSeekBar arcBar; /// /// 减号按钮 /// Button btnMinus; /// /// 加号按钮 /// Button btnPlus; /// /// 温度按钮 /// Button btnTemp; Button btnTempUint; /// /// 室内温度按钮 /// Button btnIndoorTemp; /// /// 模式按钮 /// Button btnMode; /// /// 风速按钮 /// Button btnWindSpeed; /// /// 开关按钮 /// Button btnSwitch; AC acFunction = new AC(); #endregion #region ■ 初始化_____________________________ /// /// 初始化白色区域的内容 /// public override void InitFrameWhiteContent() { base.ShowColltionButton = false; base.SetTitleText(Language.StringByID(StringId.Electric)); //初始化第一个索引页的内容 this.InitFrameWhiteContent1(); //刷新当前设备的状态缓存 this.RefreshNowDeviceStatuMemory(this.device); //刷新界面状态 this.RefreshFormStatu(); //读取状态 new System.Threading.Thread(() => { Control.Ins.SendReadCommand(device); }) { IsBackground = true }.Start(); } /// /// 初始化第一个索引页的内容 /// private void InitFrameWhiteContent1() { arcBar = new DiyArcSeekBar() { Gravity = Gravity.CenterHorizontal, OpenAngle = 160, ThumbImageHeight = Application.GetRealWidth(50), ProgressBarColor = CSS_Color.MainColor, OfflineProgressBarColor = CSS_Color.PromptingColor2, ArcColor = CSS_Color.BackgroundColor, #if __IOS__ Y = Application.GetRealHeight(120 + 25), Width = Application.GetRealWidth(260 - 40), Height = Application.GetRealWidth(260 - 40), SeekBarPadding = Application.GetRealWidth(8), #else Y = Application.GetRealHeight(120 + 40), Width = Application.GetRealWidth(260 - 40), Height = Application.GetRealWidth(260 - 40), SeekBarPadding = Application.GetRealWidth(7), #endif }; FrameWhiteCentet1.AddChidren(arcBar); arcBar.ThumbImagePath = device.GetAttrState(FunctionAttributeKey.OnOff) == "on" ? "FunctionIcon/AC/DiyThumbIconOn.png" : "FunctionIcon/AC/DiyThumbIcon.png"; arcBar.IsOffline = device.GetAttrState(FunctionAttributeKey.OnOff) == "off"; arcBar.MinValue = device.GetAttribute(FunctionAttributeKey.SetTemp).min; arcBar.MaxValue = device.GetAttribute(FunctionAttributeKey.SetTemp).max; arcBar.Progress = Convert.ToInt32(device.GetAttrState(FunctionAttributeKey.SetTemp)); btnTemp = new Button() { Gravity = Gravity.CenterHorizontal, Y = Application.GetRealHeight(206), Width = Application.GetRealWidth(71), Height = Application.GetRealWidth(60), TextColor = CSS_Color.FirstLevelTitleColor, TextSize = 50, IsBold = true, Text = device.GetAttrState(FunctionAttributeKey.SetTemp), TextAlignment = TextAlignment.Center, }; FrameWhiteCentet1.AddChidren(btnTemp); btnTempUint = new Button() { X = btnTemp.Right, Y = btnTemp.Y, Width = Application.GetRealWidth(30), Height = Application.GetRealHeight(30), TextColor = CSS_Color.FirstLevelTitleColor, TextSize = CSS_FontSize.EmphasisFontSize_Secondary, IsBold = true, TextAlignment = TextAlignment.CenterLeft, Text = "°C", }; FrameWhiteCentet1.AddChidren(btnTempUint); btnIndoorTemp = new Button() { Gravity = Gravity.CenterHorizontal, Y = btnTemp.Bottom, Width = Application.GetRealWidth(120), Height = Application.GetRealHeight(20), Text = Language.StringByID(StringId.IndoorTemp) + "20°C", TextColor = CSS_Color.PromptingColor1, TextSize = CSS_FontSize.PromptFontSize_FirstLevel, }; FrameWhiteCentet1.AddChidren(btnIndoorTemp); btnMinus = new Button() { X = Application.GetRealWidth(21), Y = Application.GetRealHeight(263), Width = Application.GetRealWidth(32), Height = Application.GetRealWidth(32), UnSelectedImagePath = "Public/MinusSignIcon.png", }; FrameWhiteCentet1.AddChidren(btnMinus); btnPlus = new Button() { X = Application.GetRealWidth(275), Y = Application.GetRealHeight(263), Width = Application.GetRealWidth(32), Height = Application.GetRealWidth(32), UnSelectedImagePath = "Public/PlusSignIcon.png", }; FrameWhiteCentet1.AddChidren(btnPlus); btnMode = new Button() { X = Application.GetRealWidth(60), Y = Application.GetRealHeight(334), Width = Application.GetRealWidth(30), Height = Application.GetRealWidth(30), UnSelectedImagePath = acFunction.GetModeIconPath(device.GetAttrState(FunctionAttributeKey.Mode)), }; FrameWhiteCentet1.AddChidren(btnMode); btnWindSpeed = new Button() { X = Application.GetRealWidth(235), Y = Application.GetRealHeight(337), Width = Application.GetRealWidth(30), Height = Application.GetRealWidth(30), UnSelectedImagePath = acFunction.GetFanIconPath(device.GetAttrState(FunctionAttributeKey.FanSpeed)), }; FrameWhiteCentet1.AddChidren(btnWindSpeed); btnSwitch = new Button() { Gravity = Gravity.CenterHorizontal, Y = Application.GetRealHeight(466), Width = Application.GetRealWidth(32), Height = Application.GetRealWidth(32), UnSelectedImagePath = "Public/PowerClose.png", SelectedImagePath = "Public/PowerOpen.png", IsSelected = device.GetAttrState(FunctionAttributeKey.OnOff) == "on" }; FrameWhiteCentet1.AddChidren(btnSwitch); LoadEvent_TempChange(); LoadEvent_AcStatesChange(); LoadDiv_IrView(); } /// /// 加载修改模式区域 /// void LoadDiv_ChangeModeView() { Dialog dialog = new Dialog(); FrameLayout dialogView = new FrameLayout() { BackgroundColor = CSS_Color.DialogTransparentColor1, }; dialog.AddChidren(dialogView); FrameLayout modeChangeView; modeChangeView = new FrameLayout() { X = Application.GetRealWidth(30), Y = Application.GetRealHeight(128), Width = Application.GetRealWidth(160), Height = Application.GetRealHeight(287), BackgroundImagePath = "FunctionIcon/AC/DivBg1.png", }; dialogView.AddChidren(modeChangeView); Button btnTitle; btnTitle = new Button() { X = Application.GetRealWidth(8 + 16), Y = Application.GetRealHeight(8), Width = Application.GetRealWidth(112), Height = Application.GetRealHeight(44), TextID = StringId.ChooseMode, TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.FirstLevelTitleColor, TextSize = CSS_FontSize.EmphasisFontSize_Secondary, }; modeChangeView.AddChidren(btnTitle); Button btnLine = new Button() { X = btnTitle.X, Y = btnTitle.Bottom, Width = Application.GetRealWidth(112), Height = Application.GetRealHeight(1), BackgroundColor = CSS_Color.BackgroundColor, }; modeChangeView.AddChidren(btnLine); var modeList = device.GetAttribute(FunctionAttributeKey.Mode).value; foreach (var m in modeList) { Button btnModeIcon = new Button() { X = btnTitle.X, Y = Application.GetRealHeight(44 * (modeList.IndexOf(m) + 1) + 10 + 8), Width = Application.GetRealWidth(24), Height = Application.GetRealWidth(24), IsSelected = device.GetAttrState(FunctionAttributeKey.Mode) == m, }; modeChangeView.AddChidren(btnModeIcon); Button btnModeText = new Button() { X = Application.GetRealWidth(12) + btnModeIcon.Right, Y = Application.GetRealHeight(44 * (modeList.IndexOf(m) + 1) + 8), Height = Application.GetRealHeight(44), Width = Application.GetRealWidth(90), TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.FirstLevelTitleColor, SelectedTextColor = CSS_Color.MainColor, IsSelected = device.GetAttrState(FunctionAttributeKey.Mode) == m, TextSize = CSS_FontSize.TextFontSize, }; modeChangeView.AddChidren(btnModeText); btnModeIcon.UnSelectedImagePath = acFunction.GetModeIconPath(m, false); btnModeIcon.SelectedImagePath = acFunction.GetModeIconPath(m); btnModeText.Text = acFunction.GetModeAttrText( m); if (modeList.IndexOf(m) < modeList.Count - 1) { modeChangeView.AddChidren(new Button() { X = btnTitle.X, Y = btnModeText.Bottom, Width = Application.GetRealWidth(112), Height = Application.GetRealHeight(1), BackgroundColor = CSS_Color.BackgroundColor, }); } EventHandler eventHandler = (sender, e) => { dialog.Close(); }; EventHandler eventHandler1 = (sender, e) => { btnModeIcon.IsSelected = btnModeText.IsSelected = true; device.SetAttrState(FunctionAttributeKey.Mode, m); btnMode.UnSelectedImagePath = acFunction.GetModeIconPath(m); System.Collections.Generic.Dictionary d = new System.Collections.Generic.Dictionary(); btnMode.UnSelectedImagePath = btnModeIcon.UnSelectedImagePath; d.Add(FunctionAttributeKey.Mode, m); Control.Ins.SendWriteCommand(device, d); dialog.Close(); if (device.GetAttrState(FunctionAttributeKey.Mode) == "fan") { arcBar.IsClickable = false; } else { arcBar.IsClickable = true; } }; btnModeIcon.MouseUpEventHandler = eventHandler1; btnModeText.MouseUpEventHandler = eventHandler1; dialogView.MouseUpEventHandler = eventHandler; } dialogView.MouseUpEventHandler = (sender, e) => { dialog.Close(); }; dialog.Show(); } /// /// 加载修改模式区域 /// void LoadDiv_ChangeFanView() { Dialog dialog = new Dialog(); FrameLayout dialogView = new FrameLayout() { BackgroundColor = CSS_Color.DialogTransparentColor1, }; dialog.AddChidren(dialogView); FrameLayout modeChangeView; modeChangeView = new FrameLayout() { X = Application.GetRealWidth(185), Y = Application.GetRealHeight(172), Width = Application.GetRealWidth(160), Height = Application.GetRealHeight(243), BackgroundImagePath = "FunctionIcon/AC/DivBg2.png", }; dialogView.AddChidren(modeChangeView); Button btnTitle; btnTitle = new Button() { X = Application.GetRealWidth(8 + 16), Y = Application.GetRealHeight(8), Width = Application.GetRealWidth(112), Height = Application.GetRealHeight(44), TextID = StringId.ChooseFan, TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.FirstLevelTitleColor, TextSize = CSS_FontSize.EmphasisFontSize_Secondary, }; modeChangeView.AddChidren(btnTitle); Button btnLine = new Button() { X = btnTitle.X, Y = btnTitle.Bottom, Width = Application.GetRealWidth(112), Height = Application.GetRealHeight(1), BackgroundColor = CSS_Color.BackgroundColor, }; modeChangeView.AddChidren(btnLine); var modeList = device.GetAttribute(FunctionAttributeKey.FanSpeed).value; foreach (var m in modeList) { Button btnFanIcon = new Button() { X = btnTitle.X, Y = Application.GetRealHeight(44 * (modeList.IndexOf(m) + 1) + 10 + 8), Width = Application.GetRealWidth(24), Height = Application.GetRealWidth(24), IsSelected = device.GetAttrState(FunctionAttributeKey.FanSpeed) == m, }; modeChangeView.AddChidren(btnFanIcon); Button btnFanText = new Button() { X = Application.GetRealWidth(12) + btnFanIcon.Right, Y = Application.GetRealHeight(44 * (modeList.IndexOf(m) + 1) + 8), Height = Application.GetRealHeight(44), Width = Application.GetRealWidth(70), TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.FirstLevelTitleColor, SelectedTextColor = CSS_Color.MainColor, IsSelected = device.GetAttrState(FunctionAttributeKey.FanSpeed) == m, TextSize = CSS_FontSize.TextFontSize, }; modeChangeView.AddChidren(btnFanText); btnFanIcon.UnSelectedImagePath = acFunction.GetModeIconPath(m,false); btnFanIcon.SelectedImagePath = acFunction.GetModeIconPath(m); btnFanText.Text = acFunction.GetModeAttrText(m); if (modeList.IndexOf(m) < modeList.Count - 1) { modeChangeView.AddChidren(new Button() { X = btnTitle.X, Y = btnFanText.Bottom, Width = Application.GetRealWidth(112), Height = Application.GetRealHeight(1), BackgroundColor = CSS_Color.BackgroundColor, }); } EventHandler closeDialogEvent = (sender, e) => { dialog.Close(); }; EventHandler eventHandler1 = (sender, e) => { btnFanIcon.IsSelected = btnFanText.IsSelected = true; device.SetAttrState(FunctionAttributeKey.FanSpeed, m); btnWindSpeed.UnSelectedImagePath = acFunction.GetFanIconPath(m); System.Collections.Generic.Dictionary d = new System.Collections.Generic.Dictionary(); d.Add(FunctionAttributeKey.FanSpeed, m); Control.Ins.SendWriteCommand(device, d); btnWindSpeed.UnSelectedImagePath = btnFanIcon.UnSelectedImagePath; dialog.Close(); }; btnFanIcon.MouseUpEventHandler = eventHandler1; btnFanText.MouseUpEventHandler = eventHandler1; dialogView.MouseUpEventHandler = closeDialogEvent; } dialog.Show(); } /// /// 加载红外遥控器,额外按钮 /// void LoadDiv_IrView() { if (device.spk == SPK.AcIr) { var btnMore = new Button() { Gravity = Gravity.CenterHorizontal, Y = Application.GetRealHeight(334), Width = Application.GetRealWidth(30), Height = Application.GetRealWidth(30), UnSelectedImagePath = "FunctionIcon/AC/More.png", }; FrameWhiteCentet1.AddChidren(btnMore); btnMore.MouseUpEventHandler = (sender, e) => { LoadDialog_IrMoreView(); }; } } /// /// 加载额外对红外按钮界面 /// void LoadDialog_IrMoreView() { Dialog dialog = new Dialog(); var div = new FrameLayout(); dialog.AddChidren(div); div.MouseUpEventHandler = (sender, e) => { dialog.Close(); }; var bodyView = new FrameLayout() { Y = Application.GetRealHeight(463), Height = Application.GetRealHeight(375), BackgroundColor = CSS_Color.MainBackgroundColor, }; div.AddChidren(bodyView); var contentView = new FrameLayout() { Y = Application.GetRealHeight(16), Gravity = Gravity.CenterHorizontal, Width = Application.GetRealWidth(296), }; bodyView.AddChidren(contentView); var row = new FrameLayout() { Height = Application.GetRealHeight(60), }; contentView.AddChidren(row); int index = 0; foreach (var attr in device.attributes) { if (attr.key == FunctionAttributeKey.Mode || attr.key == FunctionAttributeKey.OnOff || attr.key == FunctionAttributeKey.SetTemp || attr.key == FunctionAttributeKey.SetTempStep || attr.key == FunctionAttributeKey.FanSpeed || attr.key == FunctionAttributeKey.FanManual || attr.key == FunctionAttributeKey.FanAuto ) { continue; } if (index != 0 && index % 3 == 0) { row = new FrameLayout() { Width = Application.GetRealWidth(200), Height = Application.GetRealHeight(56), }; contentView.AddChidren(row); } var btn = new Button() { Gravity = Gravity.CenterVertical, Width = Application.GetRealWidth(88), Height = Application.GetRealHeight(40), Radius = (uint)Application.GetRealHeight(18), BorderColor = CSS_Color.PromptingColor1, BorderWidth = (uint)Application.GetRealWidth(2), TextAlignment = TextAlignment.Center, TextSize = CSS_FontSize.TextFontSize, TextColor = CSS_Color.FirstLevelTitleColor, SelectedTextColor = CSS_Color.MainBackgroundColor, SelectedBackgroundColor = CSS_Color.MainColor, }; if (attr.value.Count > 0) { btn.Text = attr.value[0]; } if (index % 3 == 1) { btn.Gravity = Gravity.Center; } else if (index % 3 == 2) { btn.X = Application.GetRealWidth(208); } row.AddChidren(btn); btn.MouseUpEventHandler = (sender, e) => { System.Collections.Generic.Dictionary d = new System.Collections.Generic.Dictionary(); d.Add(FunctionAttributeKey.Key, attr.key); Control.Ins.SendWriteCommand(device, d); new System.Threading.Thread(() => { System.Threading.Thread.Sleep(2000); Application.RunOnMainThread(() => { btn.IsSelected = false; }); }) { IsBackground = true }.Start(); }; index++; } dialog.Show(); } #endregion #region ■ 设备状态反馈_______________________ /// /// 设备状态反馈 /// /// public override void DeviceStatuPush(Function i_LocalDevice) { //不是同一个东西 if (this.device.sid != i_LocalDevice.sid) { return; } //刷新当前设备的状态缓存 this.RefreshNowDeviceStatuMemory(i_LocalDevice); //刷新界面状态 this.RefreshFormStatu(); } #endregion #region ■ 发送各种命令_______________________ /// /// 温度改变模式 /// void LoadEvent_TempChange() { btnMinus.MouseUpEventHandler = (sender, e) => { if (device.trait_on_off.curValue.ToString() == "off" || device.GetAttrState(FunctionAttributeKey.Mode) == "fan") { return; } var temp = Convert.ToInt32(device.GetAttrState(FunctionAttributeKey.SetTemp)); if (temp <= device.GetAttribute(FunctionAttributeKey.Mode).min) { return; } temp--; arcBar.Progress = temp; btnTemp.Text = temp.ToString(); device.SetAttrState(FunctionAttributeKey.SetTemp, temp.ToString()); System.Collections.Generic.Dictionary d = new System.Collections.Generic.Dictionary(); d.Add(FunctionAttributeKey.SetTemp, temp.ToString()); Control.Ins.SendWriteCommand(device, d); }; btnPlus.MouseUpEventHandler = (sender, e) => { if (device.trait_on_off.curValue.ToString() == "off" || device.GetAttrState(FunctionAttributeKey.Mode) == "fan") { return; } var temp = Convert.ToInt32(device.GetAttrState(FunctionAttributeKey.SetTemp)); if (temp >= device.GetAttribute(FunctionAttributeKey.SetTemp).max) { return; } temp++; arcBar.Progress = temp; btnTemp.Text = temp.ToString(); device.SetAttrState(FunctionAttributeKey.SetTemp, temp.ToString()); System.Collections.Generic.Dictionary d = new System.Collections.Generic.Dictionary(); d.Add(FunctionAttributeKey.SetTemp, temp.ToString()); Control.Ins.SendWriteCommand(device, d); }; arcBar.OnStopTrackingTouchEvent = (sender, e) => { device.SetAttrState(FunctionAttributeKey.SetTemp, arcBar.Progress.ToString()); btnTemp.Text = arcBar.Progress.ToString(); System.Collections.Generic.Dictionary d = new System.Collections.Generic.Dictionary(); d.Add(FunctionAttributeKey.SetTemp, arcBar.Progress.ToString()); Control.Ins.SendWriteCommand(device, d); }; arcBar.OnProgressChangedEvent = (sender, e) => { device.SetAttrState(FunctionAttributeKey.SetTemp, e.ToString()); btnTemp.Text = e.ToString(); }; } /// /// 控制模式事件 /// void LoadEvent_AcStatesChange() { btnMode.MouseUpEventHandler = (sender, e) => { if (device.trait_on_off.curValue.ToString() == "off") { return; } LoadDiv_ChangeModeView(); }; btnWindSpeed.MouseUpEventHandler = (sender, e) => { if (device.trait_on_off.curValue.ToString() == "off") { return; } LoadDiv_ChangeFanView(); }; btnSwitch.MouseUpEventHandler = (sender, e) => { btnSwitch.IsSelected = !btnSwitch.IsSelected; device.trait_on_off.curValue = btnSwitch.IsSelected ? "on" : "off"; if (device.trait_on_off.curValue.ToString() == "on") { arcBar.ThumbImagePath = "FunctionIcon/AC/DiyThumbIconOn.png"; btnSwitch.IsSelected = true; arcBar.IsOffline = false; } else { arcBar.ThumbImagePath = "FunctionIcon/AC/DiyThumbIcon.png"; btnSwitch.IsBold = false; arcBar.IsOffline = true; } System.Collections.Generic.Dictionary d = new System.Collections.Generic.Dictionary(); d.Add(FunctionAttributeKey.OnOff, device.trait_on_off.curValue.ToString()); Control.Ins.SendWriteCommand(device, d); }; } #endregion #region ■ 刷新界面状态_______________________ /// /// 刷新界面状态 /// private void RefreshFormStatu() { Application.RunOnMainThread(() => { btnTemp.Text = device.GetAttrState(FunctionAttributeKey.SetTemp); btnIndoorTemp.Text = Language.StringByID(StringId.IndoorTemp) + Convert.ToInt32(Convert.ToDouble(device.GetAttrState(FunctionAttributeKey.IndoorTemp))) + "°C"; btnMode.UnSelectedImagePath = acFunction.GetModeIconPath(device.GetAttrState(FunctionAttributeKey.Mode)); btnWindSpeed.UnSelectedImagePath = acFunction.GetFanIconPath(device.GetAttrState(FunctionAttributeKey.FanSpeed)); arcBar.Progress = Convert.ToInt32(Convert.ToDouble(device.GetAttrState(FunctionAttributeKey.SetTemp))); if (device.trait_on_off.curValue.ToString() == "on") { arcBar.IsOffline = false; btnSwitch.IsSelected = true; arcBar.ThumbImagePath = "FunctionIcon/AC/DiyThumbIconOn.png"; if (device.GetAttrState(FunctionAttributeKey.Mode) == "fan") { arcBar.IsClickable = false; } else { arcBar.IsClickable = true; } } else { arcBar.IsOffline = true; btnSwitch.IsSelected = false; arcBar.IsClickable = false; arcBar.ThumbImagePath = "FunctionIcon/AC/DiyThumbIcon.png"; } }); } #endregion #region ■ 一般方法___________________________ /// /// 刷新当前设备的状态缓存 /// private void RefreshNowDeviceStatuMemory(Function i_LocalDevice) { } #endregion } }