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";
|
}
|
/// <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);
|
#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
|
|
}
|
/// <summary>
|
/// 设备选择条件界面
|
/// </summary>
|
/// <param name="device">设备</param>
|
/// <param name="button">选中状态显示文本Btn控件</param>
|
/// <param name="btnText1">属性状态值文本1</param>
|
/// <param name="btnText2">属性状态值文本2</param>
|
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");
|
|
});
|
|
}
|
/// <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)
|
{
|
Input inputs = Logic.currlogic.input[index];
|
var dicList = inputs.condition 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>
|
/// <param name="data_type">类型</param>
|
/// <param name="comparator">比较关系</param>
|
private void AddDictionary(string KeyValue, string selectedValue,string data_type,string comparator="=")
|
{
|
//数据封装
|
Dictionary<string, string> dic = new Dictionary<string, string>();
|
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);
|
}
|
/// <summary>
|
/// 更新数据列表
|
/// </summary>
|
/// <param name="keyValue">设备属性值,云雀上定义好的</param>
|
/// <param name="comparator">比较关系</param>
|
/// <param name="dictionary">添加选中数据</param>
|
/// <returns></returns>
|
private void AddDictionaryList(string keyValue,string comparator, Dictionary<string, string> 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);
|
}
|
|
}
|
/// <summary>
|
/// 添加条件
|
/// </summary>
|
/// <param name="input"></param>
|
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);
|
}
|
|
}
|
}
|
}
|