using System;
using Shared;
using System.Collections.Generic;
using HDL_ON.Entity;
namespace HDL_ON.UI.UI2.Intelligence.Automation
{
public class TargetDeviceFunList : FrameLayout
{
public TargetDeviceFunList()
{
Tag = "Logic";
}
///
/// 定义一个记录选中设备状态列表;
///
private List> dicSateteList = new List>();
///
/// 定义一个变量,记录选中状态
///
private string selectedState = "unknown";
public void Show(Entity.Function device, int index, bool edit)
{
#region 界面布局
this.BackgroundColor = CSS.CSS_Color.viewMiddle;
LogicView.TopView topView = new LogicView.TopView();
this.AddChidren(topView.FLayoutView());
topView.clickBackBtn.MouseUpEventHandler += (e, sen) =>
{
RemoveFromParent();
};
topView.topNameBtn.Text = device.name;
FrameLayout fLayout = new FrameLayout
{
Y = Application.GetRealHeight(64),
Height = Application.GetRealHeight(667 - 64),
};
this.AddChidren(fLayout);
///保存View
LogicView.SaveView saveView = new LogicView.SaveView();
saveView.frameLayout.SetCornerWithSameRadius(Application.GetRealHeight(24), HDLUtils.RectCornerTopLeft | HDLUtils.RectCornerTopRight);
saveView.btnSave.TextID = StringId.completeLogic;
this.AddChidren(saveView.FLayoutView());
#endregion
#region 编辑设备状态
switch (device.spk)
{
//开关灯光 light.Switch
case SPK.LightDimming:
case SPK.LightRGB:
case SPK.LightRGBW:
case SPK.LightCCT:
{
#region 界面
///开关
LogicView.FunTypeView lightSwitchView = new LogicView.FunTypeView();
lightSwitchView.btnText.TextID = StringId.switchLogic;
fLayout.AddChidren(lightSwitchView.FLayoutView());
///亮度
LogicView.FunTypeView brightnessView = new LogicView.FunTypeView();
brightnessView.frameLayout.Y = lightSwitchView.frameLayout.Bottom;
brightnessView.btnText.TextID = StringId.brightnesLogic;
fLayout.AddChidren(brightnessView.FLayoutView());
#endregion
#region 点击事件
///开关点击事件
lightSwitchView.btnClick.MouseUpEventHandler += (sender, e) =>
{
SwitchViewMethod(device, lightSwitchView.btnState, 2);
};
///亮度点击事件
brightnessView.btnClick.MouseUpEventHandler += (sender, e) =>
{
BrightnessMethod(device, brightnessView.btnState, brightnessView.btnText.Text);
};
if (edit)
{
//显示编辑之前的设备状态
GetEditState(device, index, lightSwitchView.btnState, brightnessView.btnState, null, null);
}
#endregion
}
break;
case SPK.LightSwitch:
{
#region 界面
///开关
LogicView.FunTypeView lightSwitchView = new LogicView.FunTypeView();
lightSwitchView.btnText.TextID = StringId.switchLogic;
fLayout.AddChidren(lightSwitchView.FLayoutView());
#endregion
#region 点击事件
///开关点击事件
lightSwitchView.btnClick.MouseUpEventHandler += (sender, e) =>
{
SwitchViewMethod(device, lightSwitchView.btnState, 2);
};
if (edit)
{
//显示编辑之前的设备状态
GetEditState(device, index, lightSwitchView.btnState, null, null, null);
}
#endregion
}
break;
//窗帘
case SPK.CurtainSwitch:
case SPK.CurtainTrietex:
case SPK.CurtainRoller:
{
#region 界面
///开关
LogicView.FunTypeView curtainSwitchView = new LogicView.FunTypeView();
curtainSwitchView.btnText.TextID = StringId.switchLogic;
fLayout.AddChidren(curtainSwitchView.FLayoutView());
#endregion
#region 点击事件
///开关点击事件
curtainSwitchView.btnClick.MouseUpEventHandler += (sender, e) =>
{
SwitchViewMethod(device, curtainSwitchView.btnState, 3);
};
if (edit)
{
//显示编辑之前的设备状态
GetEditState(device, index, curtainSwitchView.btnState, null, null, null);
}
#endregion
}
break;
case SPK.AcStandard:
{
#region 界面
///开关
LogicView.FunTypeView acSwitchVie = new LogicView.FunTypeView();
acSwitchVie.btnText.TextID = StringId.switchLogic;
fLayout.AddChidren(acSwitchVie.FLayoutView());
///温度
LogicView.FunTypeView temperatureView = new LogicView.FunTypeView();
temperatureView.frameLayout.Y = acSwitchVie.frameLayout.Bottom;
temperatureView.btnText.TextID = StringId.temperatureLogic;
fLayout.AddChidren(temperatureView.FLayoutView());
///模式
LogicView.FunTypeView acModehView = new LogicView.FunTypeView();
acModehView.frameLayout.Y = temperatureView.frameLayout.Bottom;
acModehView.btnText.TextID = StringId.modeLogic;
fLayout.AddChidren(acModehView.FLayoutView());
///风速
LogicView.FunTypeView acSpeedView = new LogicView.FunTypeView();
acSpeedView.frameLayout.Y = acModehView.frameLayout.Bottom;
acSpeedView.btnText.TextID = StringId.speedLogic;
fLayout.AddChidren(acSpeedView.FLayoutView());
#endregion
#region 点击事件
///开关点击事件
acSwitchVie.btnClick.MouseUpEventHandler += (sender, e) =>
{
SwitchViewMethod(device, acSwitchVie.btnState, 2);
};
///温度点击事件
temperatureView.btnClick.MouseUpEventHandler += (sender, e) =>
{
///之前的状态文本
string tempValue = temperatureView.btnState.Text;
LogicView.TemperatureView tempView = new LogicView.TemperatureView();
tempView.FLayoutView(this, tempValue, (stateStr) =>
{
//界面显示选中值
temperatureView.btnState.Text = stateStr;
//设备属性值,云雀上定义好的;
string keyVlaue = "set_temp";
selectedState = device.spk + "_" + keyVlaue;
string set_temp_value = stateStr.Replace("℃", "");
//数据封装
AddDictionary(keyVlaue, set_temp_value);
});
};
///模式点击事件
acModehView.btnClick.MouseUpEventHandler += (sender, e) =>
{
///之前的状态文本
string currText = acModehView.btnState.Text;
//设备属性值,云雀上定义好的;
string keyVlaue = "mode";
selectedState = device.spk + "_" + keyVlaue;
PublicInterface modeView = new PublicInterface();
var modeListStr = modeView.GetViewList(keyVlaue);
modeView.SingleSelectionShow(this, modeListStr, Language.StringByID(StringId.modeLogic), currText
, (stateValue) =>
{
//界面显示选中值
acModehView.btnState.Text = stateValue;
//数据封装
AddDictionary(keyVlaue, modeView.GetModeValueString(stateValue, keyVlaue));
});
};
///风速点击事件
acSpeedView.btnClick.MouseUpEventHandler += (sender, e) =>
{
///之前的状态文本
string currText = acSpeedView.btnState.Text;
//设备属性值,云雀上定义好的;
string keyVlaue = "fan";
selectedState = device.spk + "_" + keyVlaue;
PublicInterface speedView = new PublicInterface();
var speedListStr = speedView.GetViewList(keyVlaue);
speedView.SingleSelectionShow(this, speedListStr, Language.StringByID(StringId.speedLogic), currText
, (stateValue) =>
{
//界面显示选中值
acSpeedView.btnState.Text = stateValue;
//数据封装
AddDictionary(keyVlaue, speedView.GetModeValueString(stateValue, keyVlaue));
});
};
if (edit)
{
//显示编辑之前的设备状态
GetEditState(device, index, acSwitchVie.btnState, temperatureView.btnState, acModehView.btnState, acSpeedView.btnState);
}
#endregion
}
break;
case SPK.FloorHeatStandard:
{
#region 界面
///开关
LogicView.FunTypeView floorHeatingSwitchVie = new LogicView.FunTypeView();
floorHeatingSwitchVie.btnText.TextID = StringId.switchLogic;
fLayout.AddChidren(floorHeatingSwitchVie.FLayoutView());
///温度
LogicView.FunTypeView temperatureView = new LogicView.FunTypeView();
temperatureView.frameLayout.Y = floorHeatingSwitchVie.frameLayout.Bottom;
temperatureView.btnText.TextID = StringId.temperatureLogic;
fLayout.AddChidren(temperatureView.FLayoutView());
///模式
LogicView.FunTypeView floorHeatingModehView = new LogicView.FunTypeView();
floorHeatingModehView.frameLayout.Y = temperatureView.frameLayout.Bottom;
floorHeatingModehView.btnText.TextID = StringId.modeLogic;
fLayout.AddChidren(floorHeatingModehView.FLayoutView());
#endregion
#region 点击事件
///开关点击事件
floorHeatingSwitchVie.btnClick.MouseUpEventHandler += (sender, e) =>
{
SwitchViewMethod(device, floorHeatingSwitchVie.btnState, 2);
};
///温度点击事件
temperatureView.btnClick.MouseUpEventHandler += (sender, e) =>
{
string tempValue = temperatureView.btnState.Text;
LogicView.TemperatureView tempView = new LogicView.TemperatureView();
tempView.FLayoutView(this, tempValue, (stateStr) =>
{
//界面显示选中值
temperatureView.btnState.Text = stateStr;
//设备属性值,云雀上定义好的;
string keyVlaue = "set_temp";
selectedState = device.spk + "_" + keyVlaue;
string set_temp_value = stateStr.Replace("℃", "");
//数据封装
AddDictionary(keyVlaue, set_temp_value);
});
};
///模式点击事件
floorHeatingModehView.btnClick.MouseUpEventHandler += (sender, e) =>
{
///之前的状态文本
string currText = floorHeatingModehView.btnState.Text;
//设备属性值,云雀上定义好的;
string keyVlaue = "mode";
selectedState = device.spk + "_" + keyVlaue;
PublicInterface modeView = new PublicInterface();
var modeListStr = modeView.GetViewList("floorheatingmode");
modeView.SingleSelectionShow(this, modeListStr, Language.StringByID(StringId.modeLogic), currText
, (stateValue) =>
{
//界面显示选中值
floorHeatingModehView.btnState.Text = stateValue;
//数据封装
AddDictionary(keyVlaue, modeView.GetModeValueString(stateValue, "floorheatingmode"));
});
};
if (edit)
{
//显示编辑之前的设备状态
GetEditState(device, index, floorHeatingSwitchVie.btnState, temperatureView.btnState, floorHeatingModehView.btnState, null);
}
#endregion
}
break;
case SPK.AirFreshStandard:
{
#region 界面
///开关
LogicView.FunTypeView AirFreshSwitchVie = new LogicView.FunTypeView();
AirFreshSwitchVie.btnText.TextID = StringId.switchLogic;
fLayout.AddChidren(AirFreshSwitchVie.FLayoutView());
///风速
LogicView.FunTypeView AirFreshSpeedView = new LogicView.FunTypeView();
AirFreshSpeedView.frameLayout.Y = AirFreshSwitchVie.frameLayout.Bottom;
AirFreshSpeedView.btnText.TextID = StringId.speedLogic;
fLayout.AddChidren(AirFreshSpeedView.FLayoutView());
#endregion
#region 点击事件
///开关点击事件
AirFreshSwitchVie.btnClick.MouseUpEventHandler += (sender, e) =>
{
SwitchViewMethod(device, AirFreshSwitchVie.btnState, 2);
};
///风速点击事件
AirFreshSpeedView.btnClick.MouseUpEventHandler += (sender, e) =>
{
//定义一个临时列表
List fanAttrList = new List();
//动态读取新风风速列表
var fanAttr = device.GetAttribute(FunctionAttributeKey.FanSpeed);
foreach (var fanAttrValue in fanAttr.value)
{
switch (fanAttrValue)
{
case "high":
{
fanAttrList.Add(Language.StringByID(StringId.HighWindSpeed));
}
break;
case "medium":
{
fanAttrList.Add(Language.StringByID(StringId.MiddleWindSpeed));
}
break;
case "low":
{
fanAttrList.Add(Language.StringByID(StringId.LowWindSpeed));
}
break;
case "auto":
{
fanAttrList.Add(Language.StringByID(StringId.Auto));
break;
}
}
}
///之前的状态文本
string currText = AirFreshSpeedView.btnState.Text;
//设备属性值,云雀上定义好的;
string keyVlaue = "fan";
selectedState = device.spk + "_" + keyVlaue;
PublicInterface speedView = new PublicInterface();
var speedListStr = fanAttrList;// speedView.GetViewList(keyVlaue);
speedView.SingleSelectionShow(this, speedListStr, Language.StringByID(StringId.speedLogic), currText
, (stateValue) =>
{
//界面显示选中值
AirFreshSpeedView.btnState.Text = stateValue;
//数据封装
AddDictionary(keyVlaue, speedView.GetModeValueString(stateValue, keyVlaue));
});
};
if (edit)
{
//显示编辑之前的设备状态
GetEditState(device, index, AirFreshSwitchVie.btnState, AirFreshSpeedView.btnState, null, null);
}
#endregion
}
break;
}
#endregion
#region 保存点击事件
saveView.btnClick.MouseUpEventHandler += (sen, e) =>
{
if (selectedState != "unknown")
{
Output outputDevice = new Output();
outputDevice.target_type = "1";
outputDevice.sid = device.sid;
switch (device.spk)
{
case SPK.LightDimming:
case SPK.LightRGB:
case SPK.LightRGBW:
case SPK.LightCCT:
{
//调光做了一个特殊处理;
if (dicSateteList.Count > 1)
{
foreach (var dictionary in dicSateteList)
{
string keyValue = dictionary["key"];
if (keyValue == "on_off")
{
if (dictionary["value"] == "off")
{
//移除列表所有数据
dicSateteList.Clear();
//重新添加-关-属性数据
Dictionary diction = new Dictionary();
diction.Add("key", "on_off");
diction.Add("value", "off");
dicSateteList.Add(diction);
break;
}
}
}
}
break;
}
case SPK.AcStandard:
case SPK.FloorHeatStandard:
case SPK.AirFreshStandard:
{
//做了一个特殊处理;
bool _bool = false;
for (int i = 0; i < dicSateteList.Count; i++)
{
var dic = dicSateteList[i];
if (dic.ContainsValue("on_off"))
{
//判断是否存在
_bool = true;
break;
}
}
if (!_bool)
{
//没有开关就默认添加-开-属性
Dictionary diction = new Dictionary();
diction.Add("key", "on_off");
diction.Add("value", "on");
dicSateteList.Add(diction);
}
}
break;
}
outputDevice.status = dicSateteList;
if (edit)
{
//更新延时时间
outputDevice.delay = Logic.currlogic.output[index].delay;
//移除旧数据
Logic.currlogic.output.RemoveAt(index);
//新数据插入旧数据的位置;
Logic.currlogic.output.Insert(index, outputDevice);
}
else
{
//添加一个条件
AddTarget(outputDevice);
}
}
else
{
if (!edit)
{
//提示用户
return;
}
this.RemoveFromParent();
return;
}
LogicMethod.CurrLogicMethod.RemoveAllView();
AddLogic addLogic = new AddLogic();
MainPage.BasePageView.AddChidren(addLogic);
addLogic.Show();
MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
};
#endregion
}
///
/// 开关=功能下一级界面
///
///
///
/// 显示选择View数量
private void SwitchViewMethod(Entity.Function device, Button button, int len)
{
#region 界面
FrameLayout frame = new FrameLayout { BackgroundColor = CSS.CSS_Color.viewTrans60lucence };
this.AddChidren(frame);
LogicView.SwitchView switchView = new LogicView.SwitchView();
switchView.FLayoutView(frame, len, button.Text, (strValue) =>
{
int id = 0;
switch (strValue)
{
case "on":
{
id = StringId.onLogic;
}
break;
case "off":
{
id = StringId.offLogic;
}
break;
case "stop":
{
id = StringId.stop;
}
break;
}
//界面显示选中值
button.TextID = id;
selectedState = device.spk + "_" + strValue;
//设备属性值,云雀上定义好的;
string keyVlaue = "on_off";
//数据封装
AddDictionary(keyVlaue, strValue);
});
#endregion
}
///
/// 亮度/百分比=功能下一级界面
///
///
///
private void BrightnessMethod(Entity.Function device, Button button, string titleName)
{
#region 界面
//之前的状态值
string stateVlaue = button.Text;
LogicView.BrightnessView brightness = new LogicView.BrightnessView();
brightness.FLayoutView(this, titleName, stateVlaue, (brightnesValue) =>
{
//界面显示选中值
button.Text = brightnesValue + "%";
selectedState = device.spk + brightnesValue.ToString();
//设备属性值,云雀上定义好的;
string keyVlaue = "";
switch (device.spk)
{
//开关灯光 light.Switch
case SPK.LightDimming:
case SPK.LightRGB:
case SPK.LightRGBW:
case SPK.LightCCT:
{
keyVlaue = "brightness";
}
break;
case SPK.CurtainRoller:
case SPK.CurtainTrietex:
{
keyVlaue = "percent";
}
break;
}
//数据封装
AddDictionary(keyVlaue, brightnesValue);
});
#endregion
}
///
/// 显示编辑之前的设备状态
///
/// 编辑设备
/// 编辑数据的索引
/// 显示Btn
/// 显示Btn
/// 显示Btn
/// 显示Btn
private void GetEditState(Entity.Function device, int index, Button button1, Button button2, Button button3, Button button4)
{
Output outputs = Logic.currlogic.output[index];
var dicList = outputs.status;
//清除之前旧数据
dicSateteList.Clear();
if (dicList.Count != 0)
{
//有数据重新赋值
dicSateteList = dicList;
}
InpOrOutLogicMethod.EditState(device, dicList, button1, button2, button3, button4);
}
///
/// 添加选中数据
///
/// 设备属性值,云雀上定义好的
/// 状态值
private void AddDictionary(string KeyValue, string selectedValue)
{
//数据封装
Dictionary dic = new Dictionary();
LogicMethod.CurrLogicMethod.dictionary(dic, "key", KeyValue);
LogicMethod.CurrLogicMethod.dictionary(dic, "value", selectedValue);
AddDictionaryList(KeyValue, dic);
}
///
/// 更新数据列表
///
/// 设备属性值,云雀上定义好的
/// 添加选中数据
///
private void AddDictionaryList(string keyValue, Dictionary dictionary)
{
int indexValue = -1;
for (int i = 0; i < dicSateteList.Count; i++)
{
var dic = dicSateteList[i];
if (dic.ContainsValue(keyValue))
{
//判断是否存在
indexValue = i;
break;
}
}
if (indexValue != -1)
{
//存在移除
dicSateteList.RemoveAt(indexValue);
//重新添加
dicSateteList.Insert(indexValue, dictionary);
}
else
{
//新添加
dicSateteList.Add(dictionary);
}
}
///
/// 添加目标
///
///
private void AddTarget(Output target)
{
int indexValue = -1;
for (int i = 0; i < Logic.currlogic.output.Count; i++)
{
if (Logic.currlogic.output[i].sid == target.sid)
{
indexValue = i;
break;
}
}
if (indexValue != -1)
{
Logic.currlogic.output.RemoveAt(indexValue);
Logic.currlogic.output.Insert(indexValue, target);
}
else
{
Logic.currlogic.output.Add(target);
}
}
}
}