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";
|
}
|
/// <summary>
|
/// 定义一个记录选中设备状态列表;
|
/// </summary>
|
private List<Dictionary<string, string>> dicSateteList = new List<Dictionary<string, string>>();
|
/// <summary>
|
/// 定义一个变量,记录选中状态
|
/// </summary>
|
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;
|
|
}
|
#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<string, string> diction = new Dictionary<string, string>();
|
diction.Add("key", "on_off");
|
diction.Add("value", "off");
|
dicSateteList.Add(diction);
|
break;
|
}
|
}
|
}
|
}
|
break;
|
}
|
case SPK.AcStandard:
|
case SPK.FloorHeatStandard:
|
{
|
|
//(空调/地热)做了一个特殊处理;
|
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<string, string> diction = new Dictionary<string, string>();
|
diction.Add("key", "on_off");
|
diction.Add("value", "on");
|
dicSateteList.Add(diction);
|
}
|
|
|
}
|
break;
|
}
|
outputDevice.status = dicSateteList;
|
|
if (edit)
|
{
|
//移除旧数据
|
Logic.currlogic.output.RemoveAt(index);
|
//新数据插入旧数据的位置;
|
Logic.currlogic.output.Insert(index, outputDevice);
|
}
|
else
|
{
|
//添加一个条件
|
AddTarget(outputDevice);
|
}
|
}
|
else
|
{
|
if (!edit)
|
{
|
//提示用户
|
return;
|
}
|
this.RemoveFromParent();
|
return;
|
}
|
LogicMethod.RemoveAllView();
|
AddLogic addLogic = new AddLogic();
|
MainPage.BasePageView.AddChidren(addLogic);
|
addLogic.Show();
|
MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
|
};
|
#endregion
|
|
}
|
|
/// <summary>
|
///开关=界面
|
/// </summary>
|
/// <param name="fLayout"></param>
|
/// <param name="device"></param>
|
/// <param name="index"></param>
|
/// <param name="edit"></param>
|
/// <param name="intView">选中View的数量</param>
|
private void SwitchView(FrameLayout fLayout, Entity.Function device, int index, bool edit, int intView)
|
{
|
#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, intView);
|
};
|
if (edit)
|
{
|
//显示编辑之前的设备状态
|
GetEditState(device, index, curtainSwitchView.btnState, null, null, null);
|
}
|
#endregion
|
|
}
|
/// <summary>
|
///(开关+亮度/百分比)界面
|
/// </summary>
|
/// <param name="fLayout"></param>
|
/// <param name="device"></param>
|
/// <param name="index"></param>
|
/// <param name="edit"></param>
|
/// <param name="intView">选中View的数量</param>
|
private void SwitchBrightnessView(FrameLayout fLayout, Entity.Function device, int index, bool edit, int intView)
|
{
|
#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;
|
if (device.spk == SPK.CurtainTrietex || device.spk == SPK.CurtainRoller)
|
{
|
|
brightnessView.btnText.TextID = StringId.percentum;
|
}
|
else
|
{
|
brightnessView.btnText.TextID = StringId.brightnesLogic;
|
}
|
fLayout.AddChidren(brightnessView.FLayoutView());
|
#endregion
|
#region 点击事件
|
///开关点击事件
|
lightSwitchView.btnClick.MouseUpEventHandler += (sender, e) =>
|
{
|
SwitchViewMethod(device, lightSwitchView.btnState, intView);
|
};
|
///亮度点击事件
|
brightnessView.btnClick.MouseUpEventHandler += (sender, e) =>
|
{
|
BrightnessMethod(device, brightnessView.btnState, brightnessView.btnText.Text);
|
};
|
if (edit)
|
{
|
//显示编辑之前的设备状态
|
GetEditState(device, index, lightSwitchView.btnState, brightnessView.btnState, null, null);
|
}
|
#endregion
|
|
}
|
/// <summary>
|
/// 开关=功能下一级界面
|
/// </summary>
|
/// <param name="device"></param>
|
/// <param name="button"></param>
|
/// <param name="len">显示选择View数量</param>
|
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, (Action<string>)((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";
|
//数据封装
|
Dictionary<string, string> dic = new Dictionary<string, string>();
|
LogicMethod.dictionary(dic, "key", "on_off");
|
LogicMethod.dictionary(dic, "value", strValue);
|
AddDictionaryData(dicSateteList, keyVlaue, dic);
|
|
}));
|
#endregion
|
}
|
/// <summary>
|
/// 亮度/百分比=功能下一级界面
|
/// </summary>
|
/// <param name="device"></param>
|
/// <param name="button"></param>
|
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, (Action<string>)((brightnesValue) =>
|
{
|
//界面显示选中值
|
button.Text = brightnesValue+"%";
|
string keyVlaue = "";
|
selectedState = device.spk + brightnesValue.ToString();
|
//数据封装
|
Dictionary<string, string> dic = new Dictionary<string, string>();
|
switch (device.spk)
|
{
|
//开关灯光 light.Switch
|
case SPK.LightDimming:
|
case SPK.LightRGB:
|
case SPK.LightRGBW:
|
case SPK.LightCCT:
|
{
|
keyVlaue = "brightness";
|
}
|
break;
|
case SPK.CurtainTrietex:
|
case SPK.CurtainRoller:
|
{
|
keyVlaue = "percent";
|
}
|
break;
|
}
|
LogicMethod.dictionary(dic, "value", brightnesValue.ToString());
|
AddDictionaryData(dicSateteList, keyVlaue, dic);
|
}));
|
#endregion
|
|
}
|
/// <summary>
|
/// 显示编辑之前的设备状态
|
/// </summary>
|
/// <param name="device">编辑设备</param>
|
/// <param name="index">编辑数据的索引</param>
|
/// <param name="button1">显示Btn</param>
|
/// <param name="button2">显示Btn</param>
|
/// <param name="button3">显示Btn</param>
|
/// <param name="button4">显示Btn</param>
|
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 as List<Dictionary<string, string>>;
|
//清除之前旧数据
|
dicSateteList.Clear();
|
if (dicList.Count != 0)
|
{
|
//有数据重新赋值
|
dicSateteList = dicList;
|
}
|
InpOrOutLogicMethod.EditState(device, dicList, button1, button2, button3, button4);
|
}
|
/// <summary>
|
/// 添加选中数据
|
/// </summary>
|
/// <param name="KeyValue">设备属性值,云雀上定义好的</param>
|
/// <param name="selectedValue">状态值</param>
|
private void AddDictionary(string KeyValue, string selectedValue)
|
{
|
//数据封装
|
Dictionary<string, string> dic = new Dictionary<string, string>();
|
LogicMethod.dictionary(dic, "key", KeyValue);
|
LogicMethod.dictionary(dic, "value", selectedValue);
|
AddDictionaryList(KeyValue, dic, dicSateteList);
|
}
|
/// <summary>
|
/// 更新数据列表
|
/// </summary>
|
/// <param name="keyValue">设备属性值,云雀上定义好的</param>
|
/// <param name="dictionary">选中数据</param>
|
/// <param name="dicList">存储数据列表</param>
|
/// <returns></returns>
|
private void AddDictionaryList(string keyValue, Dictionary<string, string> dictionary, List<Dictionary<string, string>> dicList)
|
{
|
int indexValue = -1;
|
for (int i = 0; i < dicList.Count; i++)
|
{
|
var dic = dicList[i];
|
if (dic.ContainsValue(keyValue))
|
{
|
//判断是否存在
|
indexValue = i;
|
break;
|
}
|
}
|
|
if (indexValue != -1)
|
{
|
//存在移除
|
dicList.RemoveAt(indexValue);
|
//重新添加
|
dicList.Insert(indexValue, dictionary);
|
}
|
else
|
{
|
//新添加
|
dicList.Add(dictionary);
|
}
|
|
}
|
/// <summary>
|
/// 添加目标
|
/// </summary>
|
/// <param name="target"></param>
|
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);
|
}
|
|
}
|
|
|
|
}
|
}
|