using System;
using Shared;
using System.Collections.Generic;
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.functionType)
{
//开关灯光 light.Switch
case FunctionType.Dimmer:
case FunctionType.RGB:
case FunctionType.RGBW:
case FunctionType.ColorTemperature:
{
//2表示(开,关)功能
SwitchBrightnessView(fLayout, device, index, edit, 2);
}
break;
case FunctionType.Relay:
{
//2表示(开,关)功能
SwitchView(fLayout, device, index, edit, 2);
}
break;
//窗帘
case FunctionType.Curtain:
case FunctionType.MotorCurtain:
case FunctionType.RollingShutter:
{
//3表示(开,关,暂停)功能
SwitchView(fLayout, device, index, edit, 3);
}
break;
case FunctionType.AC:
{
#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.functionType + "_"+ keyVlaue;
string set_temp_value = stateStr.Replace("℃", "");
//数据封装
Dictionary dic = new Dictionary();
LogicMethod.dictionary(dic, "key", keyVlaue);
LogicMethod.dictionary(dic, "value", set_temp_value);
AddDictionaryData(dicSateteList, keyVlaue, dic);
});
};
///模式点击事件
acModehView.btnClick.MouseUpEventHandler += (sender, e) =>
{
///之前的状态文本
string currText = acModehView.btnState.Text;
//设备属性值,云雀上定义好的;
string keyVlaue = "mode";
selectedState = device.functionType + "_"+keyVlaue;
PublicInterface modeView = new PublicInterface();
var modeListStr= modeView.GetViewList(keyVlaue);
modeView.SingleSelectionShow(this, modeListStr, Language.StringByID(StringId.modeLogic), currText
, (stateValue) =>
{
//界面显示选中值
acModehView.btnState.Text = stateValue;
//数据封装
Dictionary dic = new Dictionary();
LogicMethod.dictionary(dic, "key", keyVlaue);
LogicMethod.dictionary(dic, "value", modeView.GetModeValueString(stateValue, keyVlaue));
AddDictionaryData(dicSateteList, keyVlaue, dic);
});
};
///风速点击事件
acSpeedView.btnClick.MouseUpEventHandler += (sender, e) =>
{
///之前的状态文本
string currText = acSpeedView.btnState.Text;
//设备属性值,云雀上定义好的;
string keyVlaue = "fan";
selectedState = device.functionType + "_" + keyVlaue;
PublicInterface speedView = new PublicInterface();
var speedListStr = speedView.GetViewList(keyVlaue);
speedView.SingleSelectionShow(this, speedListStr, Language.StringByID(StringId.speedLogic), currText
, (stateValue) =>
{
//界面显示选中值
acSpeedView.btnState.Text = stateValue;
//数据封装
Dictionary dic = new Dictionary();
LogicMethod.dictionary(dic, "key", keyVlaue);
LogicMethod.dictionary(dic, "value", speedView.GetModeValueString(stateValue, keyVlaue));
AddDictionaryData(dicSateteList, keyVlaue, dic);
});
};
if (edit)
{
//显示编辑之前的设备状态
GetEditState(device, index, acSwitchVie.btnState, temperatureView.btnState, acModehView.btnState, acSpeedView.btnState);
}
#endregion
}
break;
case FunctionType.FloorHeating:
{
#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.functionType + "_"+ keyVlaue;
string set_temp_value = stateStr.Replace("℃", "");
//数据封装
Dictionary dic = new Dictionary();
LogicMethod.dictionary(dic, "key", keyVlaue);
LogicMethod.dictionary(dic, "value", set_temp_value);
AddDictionaryData(dicSateteList, keyVlaue, dic);
});
};
///模式点击事件
floorHeatingModehView.btnClick.MouseUpEventHandler += (sender, e) =>
{
///之前的状态文本
string currText= floorHeatingModehView.btnState.Text;
//设备属性值,云雀上定义好的;
string keyVlaue = "mode";
selectedState = device.functionType + "_"+ keyVlaue;
PublicInterface modeView = new PublicInterface();
var modeListStr = modeView.GetViewList("floorheatingmode");
modeView.SingleSelectionShow(this, modeListStr, Language.StringByID(StringId.modeLogic), currText
, (stateValue) =>
{
//界面显示选中值
floorHeatingModehView.btnState.Text = stateValue;
//数据封装
Dictionary dic = new Dictionary();
LogicMethod.dictionary(dic, "key", keyVlaue);
LogicMethod.dictionary(dic, "value", modeView.GetModeValueString(stateValue, "floorheatingmode"));
AddDictionaryData(dicSateteList, keyVlaue, dic);
});
};
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.functionType)
{
case FunctionType.Dimmer:
case FunctionType.RGB:
case FunctionType.RGBW:
case FunctionType.ColorTemperature:
{
//调光做了一个特殊处理;
if (dicSateteList.Count > 1)
{
foreach (var dictionary in dicSateteList)
{
if (dictionary["key"] == "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 FunctionType.AC:
case FunctionType.FloorHeating:
{
//(空调/地热)做了一个特殊处理;
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)
{
//移除旧数据
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
}
///
///开关=界面
///
///
///
///
///
/// 选中View的数量
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
}
///
///(开关+亮度/百分比)界面
///
///
///
///
///
/// 选中View的数量
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.functionType == FunctionType.MotorCurtain || device.functionType == FunctionType.RollingShutter)
{
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
}
///
/// 开关=功能下一级界面
///
///
///
/// 显示选择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.functionType + "_" + strValue;
string keyVlaue = "on_off";
//数据封装
Dictionary dic = new Dictionary();
LogicMethod.dictionary(dic, "key", "on_off");
LogicMethod.dictionary(dic, "value", strValue);
AddDictionaryData(dicSateteList, keyVlaue, dic);
});
#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+"%";
string keyVlaue = "";
selectedState = device.functionType + brightnesValue.ToString();
//数据封装
Dictionary dic = new Dictionary();
switch (device.functionType)
{
//开关灯光 light.Switch
case FunctionType.Dimmer:
case FunctionType.RGB:
case FunctionType.RGBW:
case FunctionType.ColorTemperature:
{
LogicMethod.dictionary(dic, "key", "brightness");
keyVlaue = "brightness";
}
break;
case FunctionType.MotorCurtain:
case FunctionType.RollingShutter:
{
LogicMethod.dictionary(dic, "key", "percent");
keyVlaue = "percent";
}
break;
}
LogicMethod.dictionary(dic, "value", brightnesValue.ToString());
AddDictionaryData(dicSateteList, keyVlaue, dic);
});
#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 as List>;
//清除之前旧数据
dicSateteList.Clear();
if (dicList.Count != 0)
{
//有数据重新赋值
dicSateteList = dicList;
}
InpOrOutLogicMethod.EditState(device, dicList, button1, button2, button3, button4);
}
///
/// 添加处理选中数据
///
/// 存储数据列表
/// 识别设备
/// 选中数据
///
private void AddDictionaryData(List> dicList, string keyValue, Dictionary dictionary)
{
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);
}
}
///
/// 添加目标
///
///
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);
}
}
}
}