using System;
using Shared;
using System.Collections.Generic;
namespace HDL_ON.UI.UI2.Intelligence.Automation
{
public class ConditionDeviceFunList : FrameLayout
{
public ConditionDeviceFunList()
{
Tag = "Logic";
}
///
/// 定义一个记录选中设备状态列表;
///
private List> dicSateteList = new List>();
///
/// 定义一个变量,记录选中状态
///
private string selectedState = "unknown";
///
/// 定义一个变量,记录选中状态记录属性
///
private string keyVlaue = "";
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);
#endregion
switch (device.functionType)
{
//开关灯光 light.Switch
case FunctionType.Dimmer:
case FunctionType.RGB:
case FunctionType.RGBW:
case FunctionType.ColorTemperature:
case FunctionType.Relay:
//窗帘
case FunctionType.Curtain:
case FunctionType.RollingShutter:
case FunctionType.MotorCurtain:
//空调
case FunctionType.AC:
//地热
case FunctionType.FloorHeating:
{
LogicView.FunTypeView lightSwitchView = new LogicView.FunTypeView();
lightSwitchView.btnText.TextID = StringId.switchLogic;
lightSwitchView.btnState.Text = "";
fLayout.AddChidren(lightSwitchView.FLayoutView());
lightSwitchView.btnClick.MouseUpEventHandler += (sender, e) =>
{
FrameLayout frame = new FrameLayout
{
BackgroundColor = CSS.CSS_Color.viewTrans60lucence,
};
this.AddChidren(frame);
SwitchViewMethod(frame, device, lightSwitchView.btnState, 2);
};
if (edit)
{
GetEditState(device, index, lightSwitchView.btnState, null, null, null);
}
}
break;
}
#region 保存
///保存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());
saveView.btnClick.MouseUpEventHandler += (sen, e) =>
{
if (selectedState != "unknown")
{
Input inputDevice = new Input();
inputDevice.condition_type = "3";
inputDevice.sid = device.sid;
inputDevice.condition = dicSateteList;
if (edit)
{
//移除旧数据
Logic.currlogic.input.RemoveAt(index);
//新数据插入旧数据的位置;
Logic.currlogic.input.Insert(index, inputDevice);
}
else
{
//添加一个条件
AddCondition(inputDevice);
}
}
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
}
///
/// 开关功能展开界面
///
///
///
///
///
public void SwitchViewMethod(FrameLayout frame, Entity.Function device, Button button, int len)
{
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;
}
button.TextID = id;
keyVlaue = "on_off";
Dictionary dic = new Dictionary();
LogicMethod.dictionary(dic, "key", "on_off");
LogicMethod.dictionary(dic, "comparator", "=");
LogicMethod.dictionary(dic, "data_type", "string");
LogicMethod.dictionary(dic, "value", strValue);
AddDictionaryData(dicSateteList, keyVlaue, dic);
selectedState = device.functionType + "_" + strValue;
});
}
///
/// 显示编辑之前的设备状态
///
/// 编辑设备
/// 编辑数据的索引
/// 显示Btn
/// 显示Btn
/// 显示Btn
/// 显示Btn
private void GetEditState(Entity.Function device , int index, Button button1, Button button2, Button button3, Button button4)
{
Input inputs = Logic.currlogic.input[index];
var dicList = inputs.condition as List>;
//清除之前旧数据
dicSateteList.Clear();
if (dicList.Count != 0)
{
//有数据重新赋值
dicSateteList = dicList;
}
switch (device.functionType)
{
//开关灯光 light.Switch
case FunctionType.Dimmer:
case FunctionType.RGB:
case FunctionType.RGBW:
case FunctionType.ColorTemperature:
case FunctionType.Relay:
//窗帘
case FunctionType.Curtain:
case FunctionType.RollingShutter:
case FunctionType.MotorCurtain:
//空调
case FunctionType.AC:
//地热
case FunctionType.FloorHeating:
{
foreach (var dic in dicList)
{
string value = dic["value"];
if (value == "on")
{
button1.Text = Language.StringByID(StringId.onLogic);
}
else
{
button1.Text = Language.StringByID(StringId.offLogic);
}
}
}
break;
}
}
///
/// 添加选中数据
///
/// 存储数据列表
/// 识别设备
/// 选中数据
///
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 AddCondition(Input input)
{
int indexValue = -1;
for (int i = 0; i < Logic.currlogic.input.Count; i++)
{
if (Logic.currlogic.input[i].sid == input.sid)
{
indexValue = i;
break;
}
}
if (indexValue != -1)
{
Logic.currlogic.input.RemoveAt(indexValue);
Logic.currlogic.input.Insert(indexValue, input);
}
else
{
Logic.currlogic.input.Add(input);
}
}
///
/// 移除控件
///
///
private void RemView(FrameLayout frame)
{
frame.RemoveFromParent();
}
}
}