using System;
using System.Collections.Generic;
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 CacControlPage : DeviceFunctionCardCommonForm
{
#region ■ 变量声明___________________________
///
/// 空调温度控制控件
///
DiyArcSeekBar arcBar;
///
/// 减号按钮
///
Button btnMinus;
///
/// 加号按钮
///
Button btnPlus;
///
/// 温度按钮
///
Button btnTemp;
Button btnTempUint;
///
/// 室内湿度显示控件
///
TextButton btnHumidityValues;
///
/// 室内温度显示控件
///
TextButton btnTempValues;
///
/// 室内温度按钮
///
//Button btnIndoorTemp;
///
/// 模式按钮
///
Button btnMode;
///
///
///
Button btnModeText;
///
/// 风速按钮
///
Button btnWindSpeed;
///
/// 开关按钮
///
Button btnSwitch;
AC acFunction = new AC();
///
/// 控制时间
///
DateTime controlTime = DateTime.MinValue.AddDays(10);
///
/// 控制温度
///
int temp = 16;
#endregion
#region ■ 初始化_____________________________
///
/// 初始化白色区域的内容
///
public override void InitFrameWhiteContent()
{
var sk = device.GetAttribute(FunctionAttributeKey.SetTemp);
if (sk != null)
{
if (sk.min == 0)
{
sk.min = 16;
}
if (sk.max == 0)
{
sk.max = 32;
}
}
base.ShowColltionButton = false;
base.SetTitleText(Language.StringByID(StringId.Electric));
//初始化第一个索引页的内容
this.InitFrameWhiteContent1();
//刷新当前设备的状态缓存
this.RefreshNowDeviceStatuMemory(this.device);
//刷新界面状态
this.RefreshFormStatu();
//读取状态
new System.Threading.Thread(() =>
{
while (true)
{
if (controlTime == DateTime.MinValue)
{
}
else if (controlTime.AddSeconds(2) < DateTime.Now)
{
Control.Ins.SendReadCommand(device);
controlTime = DateTime.MinValue;
}
System.Threading.Thread.Sleep(1000);
}
})
{ IsBackground = true }.Start();
}
///
/// 初始化第一个索引页的内容
///
private void InitFrameWhiteContent1()
{
var btnHumidityIcon = new Button()
{
X = Application.GetRealWidth(55),
Y = Application.GetRealHeight(101),
Width = Application.GetMinRealAverage(28),
Height = Application.GetMinRealAverage(28),
UnSelectedImagePath = "FunctionIcon/CAC/HvacCacHumidityIcon.png",
};
FrameWhiteCentet1.AddChidren(btnHumidityIcon);
btnHumidityValues = new TextButton()
{
X = Application.GetRealWidth(83),
Y = Application.GetRealHeight(96),
Height = Application.GetRealHeight(33),
Width = Application.GetRealWidth(100),
TextColor = 0xFF161616,
TextSize = 24,
Text = device.GetAttrState(FunctionAttributeKey.RoomHumidity) + "%",
TextAlignment = TextAlignment.CenterLeft,
};
FrameWhiteCentet1.AddChidren(btnHumidityValues);
Button btnTempIcon = new Button()
{
X = Application.GetRealWidth(194),
Y = Application.GetRealHeight(101),
Width = Application.GetMinRealAverage(28),
Height = Application.GetMinRealAverage(28),
UnSelectedImagePath = "FunctionIcon/CAC/HvacCacTempIcon.png",
};
FrameWhiteCentet1.AddChidren(btnTempIcon);
btnTempValues = new TextButton()
{
X = Application.GetRealWidth(222),
Y = Application.GetRealHeight(96),
Height = Application.GetRealHeight(33),
Width = Application.GetRealWidth(100),
TextColor = 0xFF161616,
TextSize = 24,
Text = device.GetAttrState(FunctionAttributeKey.RoomTemp) + "°C",
TextAlignment = TextAlignment.CenterLeft,
};
FrameWhiteCentet1.AddChidren(btnTempValues);
temp = (int)Convert.ToDouble(device.GetAttrState(FunctionAttributeKey.SetTemp).Replace(",", "."));
if (temp <= 0)
{
//默认值改成16,2022年06月10日10:03:19 成甫要求的
temp = 16;
device.SetAttrState(FunctionAttributeKey.SetTemp, temp.ToString());
}
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(130 + 25),
Width = Application.GetRealWidth(260 - 40),
Height = Application.GetRealWidth(260 - 40),
SeekBarPadding = Application.GetRealWidth(8),
#else
Y = Application.GetRealHeight(130 + 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 =temp;
btnTemp = new Button()
{
Gravity = Gravity.CenterHorizontal,
Y = Application.GetRealHeight(226),
Width = Application.GetRealWidth(71),
Height = Application.GetRealWidth(60),
TextColor = CSS_Color.FirstLevelTitleColor,
TextSize = 50,
IsBold = true,
Text = Convert.ToDouble(temp).ToString(),
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/" + Language.StringByID(StringId.Humidity) +"45%",
// 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),true),
};
FrameWhiteCentet1.AddChidren(btnMode);
btnModeText = new Button()
{
X = Application.GetRealWidth(30),
Y = btnMode.Bottom + Application.GetRealHeight(4),
Width = Application.GetRealWidth(90),
Height = Application.GetRealHeight(20),
TextAlignment = TextAlignment.Center,
TextSize = 12,
TextColor = CSS_Color.TextualColor,
Text = acFunction.GetModeAttrText(device.GetAttrState(FunctionAttributeKey.Mode))
};
FrameWhiteCentet1.AddChidren(btnModeText);
btnWindSpeed = new Button()
{
X = Application.GetRealWidth(238),
Y = Application.GetRealHeight(333),
Width = Application.GetRealWidth(38),
Height = Application.GetRealWidth(38),
UnSelectedImagePath = "FunctionIcon/CAC/DataIcon.png",
};
FrameWhiteCentet1.AddChidren(btnWindSpeed);
Button btnDataText = new Button()
{
X = Application.GetRealWidth(212),
Y = btnWindSpeed.Bottom,
Width = Application.GetRealWidth(90),
Height = Application.GetRealHeight(20),
TextAlignment = TextAlignment.Center,
TextSize = 12,
TextColor = CSS_Color.TextualColor,
TextID = StringId.Data
};
FrameWhiteCentet1.AddChidren(btnDataText);
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();
}
///
/// 加载修改模式区域
///
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 + 135),
Width = Application.GetRealWidth(160),
Height = Application.GetRealHeight(152),
BackgroundImagePath = "Public/dialogBg2.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) =>
{
//if (!device.online)
//{
// new Tip()
// {
// CloseTime = 1,
// Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
// Direction = AMPopTipDirection.None,
// }.Show(MainPage.BaseView);
//}
btnModeIcon.IsSelected = btnModeText.IsSelected = true;
device.SetAttrState(FunctionAttributeKey.Mode, m);
btnMode.UnSelectedImagePath = acFunction.GetModeIconPath(m);
Dictionary d = new Dictionary();
d.Add(FunctionAttributeKey.Mode, m);
Control.Ins.SendWriteCommand(device, d);
dialog.Close();
if (device.GetAttrState(FunctionAttributeKey.Mode) == "fan")
{
arcBar.IsClickable = false;
arcBar.IsOffline = true;
}
else
{
arcBar.IsOffline = false;
arcBar.IsClickable = true;
}
};
btnModeIcon.MouseUpEventHandler = eventHandler1;
btnModeText.MouseUpEventHandler = eventHandler1;
dialogView.MouseUpEventHandler = eventHandler;
}
dialogView.MouseUpEventHandler = (sender, e) => {
dialog.Close();
};
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.online)
//{
// new Tip()
// {
// CloseTime = 1,
// Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
// Direction = AMPopTipDirection.None,
// }.Show(MainPage.BaseView);
//}
if (device.trait_on_off.curValue.ToString() == "off" || device.GetAttrState(FunctionAttributeKey.Mode) == "fan")
{
return;
}
if (temp <= device.GetAttribute(FunctionAttributeKey.SetTemp).min)
{
return;
}
--temp;
Console.WriteLine($"temp == {temp}");
controlTime = DateTime.Now;
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.online)
//{
// new Tip()
// {
// CloseTime = 1,
// Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
// Direction = AMPopTipDirection.None,
// }.Show(MainPage.BaseView);
//}
if (device.trait_on_off.curValue.ToString() == "off" || device.GetAttrState(FunctionAttributeKey.Mode) == "fan")
{
return;
}
if (temp >= device.GetAttribute(FunctionAttributeKey.SetTemp).max)
{
return;
}
++temp;
controlTime = DateTime.Now;
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);
};
//if (device.online)
{
arcBar.OnStopTrackingTouchEvent = (sender, e) =>
{
temp = arcBar.Progress;
device.SetAttrState(FunctionAttributeKey.SetTemp, arcBar.Progress.ToString());
btnTemp.Text = arcBar.Progress.ToString();
controlTime = DateTime.Now;
Dictionary d = new 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();
};
//arcBar.MouseDownEventHandler = (sender, e) => {
// Console.WriteLine("ddd");
// MainPage.BasePageView.ScrollEnabled =false;
//};
//arcBar.MouseUpEventHandler = (sender, e) => {
// Console.WriteLine("ddd2");
// MainPage.BasePageView.ScrollEnabled = true;
//};
}
}
///
/// 控制模式事件
///
void LoadEvent_AcStatesChange()
{
EventHandler eventHandler = (sender, e) =>
{
if (device.trait_on_off.curValue.ToString() == "off")
{
return;
}
var modeValueList = device.GetAttribute(FunctionAttributeKey.Mode).value;
if (modeValueList.Count == 0)
{
return;
}
var curMode = device.GetAttrState(FunctionAttributeKey.Mode);
var curModeIndex = device.GetAttribute(FunctionAttributeKey.Mode).value.IndexOf(curMode);
if (++curModeIndex >= modeValueList.Count)
{
curModeIndex = 0;
}
var setMode = device.GetAttribute(FunctionAttributeKey.Mode).value[curModeIndex];
device.SetAttrState(FunctionAttributeKey.Mode, setMode);
btnModeText.Text = acFunction.GetModeAttrText(setMode);
btnMode.UnSelectedImagePath = acFunction.GetModeIconPath(setMode);
Dictionary d = new Dictionary();
d.Add(FunctionAttributeKey.Mode, setMode);
Control.Ins.SendWriteCommand(device, d);
//LoadDiv_ChangeModeView();
};
btnMode.MouseUpEventHandler = eventHandler;
btnModeText.MouseUpEventHandler = eventHandler;
btnWindSpeed.MouseUpEventHandler = (sender, e) =>
{
var page = new CacHistoryChoosePage(device);
MainPage.BasePageView.AddChidren(page);
page.InitView();
MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
};
btnSwitch.MouseUpEventHandler = (sender, e) =>
{
//if (!device.online)
//{
// new Tip()
// {
// CloseTime = 1,
// Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
// Direction = AMPopTipDirection.None,
// }.Show(MainPage.BaseView);
//}
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(() =>
{
//app自己控制的不用更新,会造成跳动
if (controlTime.AddSeconds(2) > DateTime.Now)
{
return;
}
else
{
//btnIndoorTemp.Text = Language.StringByID(StringId.IndoorTemp) + Convert.ToInt32(Convert.ToDouble(device.GetAttrState(FunctionAttributeKey.RoomTemp).Replace(",", "."))) + "°C"
// + Language.StringByID(StringId.Humidity) + Convert.ToInt32(Convert.ToDouble(device.GetAttrState("room_humidity").Replace(", ", "."))) + "%";
btnTempValues.Text = Convert.ToInt32(Convert.ToDouble(device.GetAttrState(FunctionAttributeKey.RoomTemp).Replace(",", "."))) + "°C";
btnHumidityValues.Text = Convert.ToInt32(Convert.ToDouble(device.GetAttrState("room_humidity").Replace(", ", "."))) + "%";
btnMode.UnSelectedImagePath = acFunction.GetModeIconPath(device.GetAttrState(FunctionAttributeKey.Mode));
temp = Convert.ToInt32(Convert.ToDouble(device.GetAttrState(FunctionAttributeKey.SetTemp).Replace(",", ".")));
arcBar.Progress = temp;
btnTemp.Text = temp.ToString();
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";
}
if (device.GetAttrState(FunctionAttributeKey.Mode) == "dry")
{
arcBar.IsOffline = true;
arcBar.IsClickable = false;
}
}
});
}
#endregion
#region ■ 一般方法___________________________
///
/// 刷新当前设备的状态缓存
///
private void RefreshNowDeviceStatuMemory(Function i_LocalDevice)
{
}
#endregion
}
}