using System;
using Shared;
using System.Collections.Generic;
using HDL_ON.Entity;
namespace HDL_ON.UI.UI2.Intelligence.Automation
{
public class ConditionDeviceFunList : FrameLayout
{
public ConditionDeviceFunList()
{
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);
#endregion
switch (device.spk)
{
//开关灯光 light.Switch
case SPK.LightDimming:
case SPK.LightRGB:
case SPK.LightRGBW:
case SPK.LightCCT:
case SPK.LightSwitch:
//窗帘
case SPK.CurtainSwitch:
case SPK.CurtainRoller:
case SPK.CurtainTrietex:
//空调
case SPK.AcStandard:
//地热
case SPK.FloorHeatStandard:
{
LogicView.FunTypeView view = new LogicView.FunTypeView();
view.btnText.TextID = StringId.switchLogic;
fLayout.AddChidren(view.FLayoutView());
view.btnClick.MouseUpEventHandler += (sender, e) =>
{
DeviceView(device, view.btnState, StringId.onLogic, StringId.offLogic);
};
if (edit)
{
GetEditState(device, index, view.btnState, null, null, null);
}
}
break;
//水浸传感器
case SPK.SensorWater:
{
LogicView.FunTypeView view = new LogicView.FunTypeView();
view.btnText.TextID = StringId.luoshuiandwuluoshui;
fLayout.AddChidren(view.FLayoutView());
view.btnClick.MouseUpEventHandler += (sender, e) =>
{
DeviceView(device, view.btnState, StringId.luoshui, StringId.wuluoshui);
};
if (edit)
{
GetEditState(device, index, view.btnState, null, null, null);
}
}
break;
//烟雾传感器
case SPK.SensorSmoke:
//燃气传感器
case SPK.SensorGas:
{
LogicView.FunTypeView view = new LogicView.FunTypeView();
view.btnText.TextID = StringId.xieluoandwuxieluo;
fLayout.AddChidren(view.FLayoutView());
view.btnClick.MouseUpEventHandler += (sender, e) =>
{
DeviceView(device, view.btnState, StringId.xieluo, StringId.wuxieluo);
};
if (edit)
{
GetEditState(device, index, view.btnState, null, null, null);
}
}
break;
//干接点
case SPK.SensorDryContact:
{
LogicView.FunTypeView view = new LogicView.FunTypeView();
view.btnText.TextID = StringId.switchLogic;
fLayout.AddChidren(view.FLayoutView());
view.btnClick.MouseUpEventHandler += (sender, e) =>
{
DeviceView(device, view.btnState, StringId.onLogic, StringId.offLogic);
};
if (edit)
{
GetEditState(device, index, view.btnState, null, null, null);
}
}
break;
//红外珊栏传感器
case SPK.SensorShanLan:
//红外对射传感器
case SPK.SensorDuiShe:
//红外移动传感器
case SPK.SensorPir:
{
LogicView.FunTypeView view = new LogicView.FunTypeView();
view.btnText.TextID = StringId.yourenandwuren;
fLayout.AddChidren(view.FLayoutView());
view.btnClick.MouseUpEventHandler += (sender, e) =>
{
DeviceView(device, view.btnState, StringId.youren, StringId.wuren);
};
if (edit)
{
GetEditState(device, index, view.btnState, null, null, null);
}
}
break;
//门窗传感器
case SPK.SensorDoorWindow:
{
LogicView.FunTypeView view = new LogicView.FunTypeView();
view.btnText.TextID = StringId.kaiqiandbihe;
fLayout.AddChidren(view.FLayoutView());
view.btnClick.MouseUpEventHandler += (sender, e) =>
{
DeviceView(device, view.btnState, StringId.kaiqi, StringId.bihe);
};
if (edit)
{
GetEditState(device, index, view.btnState, null, null, null);
}
}
break;
//超声波传感器
case SPK.SensoruUtrasonic:
{
LogicView.FunTypeView view = new LogicView.FunTypeView();
view.btnText.TextID = StringId.yourenandwuren;
fLayout.AddChidren(view.FLayoutView());
view.btnClick.MouseUpEventHandler += (sender, e) =>
{
DeviceView(device, view.btnState, StringId.youren, StringId.wuren);
};
LogicView.FunTypeView view1 = new LogicView.FunTypeView();
view1.frameLayout.Y = view.frameLayout.Bottom;
view1.btnText.TextID = StringId.fangchaigongneng;
fLayout.AddChidren(view1.FLayoutView());
view1.btnClick.MouseUpEventHandler += (sender, e) =>
{
DeviceView(device, view1.btnState, StringId.zaixian, StringId.buzaixian);
};
if (edit)
{
GetEditState(device, index, view.btnState, view1.btnState, null, null);
}
}
break;
//毫米波传感器
case SPK.SenesorMegahealth:
{
LogicView.FunTypeView view = new LogicView.FunTypeView();
view.btnText.TextID = StringId.mubiaozhuangtai ;//目标状态
fLayout.AddChidren(view.FLayoutView());
view.btnClick.MouseUpEventHandler += (sender, e) =>
{
DeviceView(device, view.btnState, StringId.wuren, StringId.diedao);
};
if (edit)
{
GetEditState(device, index, view.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();
if (MainView.IsGatewayType)
{ //A网关
var addLogic = new AddLogic();
MainPage.BasePageView.AddChidren(addLogic);
addLogic.Show();
MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
}
else
{
//一端口网关
var onePortAutomation = new OnePortAutomation();
MainPage.BasePageView.AddChidren(onePortAutomation);
onePortAutomation.Show();
MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
}
};
#endregion
}
///
/// 设备选择条件界面
///
/// 设备
/// 选中状态显示文本Btn控件
/// 属性状态值文本1
/// 属性状态值文本2
private void DeviceView(Entity.Function device,Button button,int btnText1,int btnText2) {
FrameLayout frame = new FrameLayout { BackgroundColor = CSS.CSS_Color.viewTrans60lucence };
this.AddChidren(frame);
LogicView.SwitchView switchView = new LogicView.SwitchView();
switchView.FLayoutView(frame, btnText1, btnText2, button.Text, (intValue) =>
{
//设备属性值,云雀上定义好的;
string keyVlaue = "on_off";
string value = "";
switch (device.spk)
{
//传感器
case SPK.SensorWater:
case SPK.SensorSmoke:
case SPK.SensorGas:
case SPK.SensorDryContact:
case SPK.SensorShanLan:
case SPK.SensorDuiShe:
case SPK.SensorPir:
case SPK.SensorDoorWindow:
case SPK.SensoruUtrasonic:
{
keyVlaue = "status";
}
break;
case SPK.SenesorMegahealth:
{
keyVlaue = "action_state";
}
break;
}
switch (intValue)
{
case StringId.xieluo:
case StringId.luoshui:
{
value = "alarm";
}
break;
case StringId.wuxieluo:
case StringId.wuluoshui:
{
value = "normal";
}
break;
case StringId.onLogic:
{
value = "on";
}
break;
case StringId.offLogic:
{
value = "off";
}
break;
case StringId.youren:
{
value = "true";
}
break;
case StringId.wuren:
{
if (device.spk == SPK.SenesorMegahealth)
{
value = "uninhabited";
}
else
{
value = "false";
}
}
break;
case StringId.kaiqi:
{
value = "open";
}
break;
case StringId.bihe:
{
value = "close";
}
break;
case StringId.zaixian:
{
keyVlaue = "dismantle";
value = "true";
}; break;
case StringId.buzaixian:
{
keyVlaue = "dismantle";
value = "false";
}; break;
case StringId.diedao:
{
value = "fall";
}; break;
}
//显示文本
button.TextID = intValue;
selectedState = device.spk + "_" + value;
AddDictionary(keyVlaue, value, "string");
});
}
///
/// 显示编辑之前的设备状态
///
/// 编辑设备
/// 编辑数据的索引
/// 显示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;
}
InpOrOutLogicMethod.EditState(device, dicList, button1, button2, button3, button4);
}
///
/// 添加选中数据
///
/// 设备属性值,云雀上定义好的
/// 状态值
/// 类型
/// 比较关系
private void AddDictionary(string KeyValue, string selectedValue,string data_type,string comparator="=")
{
//数据封装
Dictionary dic = new Dictionary();
LogicMethod.dictionary(dic, "key", KeyValue);
LogicMethod.dictionary(dic, "comparator", comparator);
LogicMethod.dictionary(dic, "data_type", data_type);
LogicMethod.dictionary(dic, "value", selectedValue);
AddDictionaryList(KeyValue, comparator,dic);
}
///
/// 更新数据列表
///
/// 设备属性值,云雀上定义好的
/// 比较关系
/// 添加选中数据
///
private void AddDictionaryList(string keyValue,string comparator, Dictionary dictionary)
{
int indexValue = -1;
for (int i = 0; i < dicSateteList.Count; i++)
{
var dic = dicSateteList[i];
string key = dic["key"];
string comparatorValue = dic["comparator"];
if (key == keyValue && comparatorValue == comparator)
{
//判断是否存在
indexValue = i;
break;
}
}
if (indexValue != -1)
{
//存在移除
dicSateteList.RemoveAt(indexValue);
//重新添加
dicSateteList.Insert(indexValue, dictionary);
}
else
{
//新添加
dicSateteList.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);
}
}
}
}