using System;
|
using Shared;
|
using System.Collections.Generic;
|
namespace HDL_ON.UI.UI2.Intelligence.Automation
|
{
|
public class DeviceFunList : FrameLayout
|
{
|
public DeviceFunList()
|
{
|
Tag = "Logic";
|
}
|
/// <summary>
|
/// 表示是(条件/目标)
|
/// </summary>
|
private string if_type;
|
public void Show(Entity.Function device, int index, bool edit, string str)
|
{
|
if_type = str;
|
#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
|
//定义一个记录选中设备状态列表;
|
List<Dictionary<string, string>> dicSateteList = new List<Dictionary<string, string>>();
|
//定义一个变量,记录选中状态
|
string selectedState = "unknown";
|
//定义一个变量,记录选中状态记录属性
|
string keyVlaue = "";
|
switch (device.functionType)
|
{
|
//开关灯光
|
case FunctionType.Relay:
|
{
|
//for (int i = 0; i < device.function.Count; i++)
|
//{
|
//}
|
LogicView.SelectTypeView relayView = new LogicView.SelectTypeView();
|
relayView.btnIcon.Visible = false;
|
relayView.btnState.Visible = true;
|
relayView.btnText.TextSize = LogicView.TextSize.text16;
|
relayView.btnText.Height = Application.GetRealHeight(22);
|
relayView.btnText.TextID = StringId.switchLogic;
|
relayView.btnText.X = Application.GetRealWidth(16);
|
relayView.btnText.Width = Application.GetRealWidth(130);
|
relayView.btnLine.X = Application.GetRealWidth(16);
|
relayView.btnLine.Width = Application.GetRealWidth(343);
|
relayView.btnState.Text = "";
|
fLayout.AddChidren(relayView.FLayoutView());
|
relayView.btnClick.MouseUpEventHandler += (sender, e) =>
|
{
|
FrameLayout relayFunView = new FrameLayout
|
{
|
BackgroundColor = CSS.CSS_Color.viewTrans60lucence,
|
};
|
this.AddChidren(relayFunView);
|
LogicView.SwitchView switchView = new LogicView.SwitchView();
|
switchView.FLayoutView(relayFunView, 2);
|
|
Button btnOn = new Button
|
{
|
TextAlignment = TextAlignment.Center,
|
TextSize = LogicView.TextSize.text16,
|
TextColor = CSS.CSS_Color.textCancelColor,
|
TextID = StringId.onLogic,
|
Height = Application.GetRealHeight(44),
|
Width = Application.GetRealWidth(343),
|
|
};
|
switchView.frameLayout.AddChidren(btnOn);
|
Button btnLine = new Button
|
{
|
Height = 1,
|
BackgroundColor = CSS.CSS_Color.viewLine,
|
Y = btnOn.Bottom,
|
};
|
switchView.frameLayout.AddChidren(btnLine);
|
Button btnOff = new Button
|
{
|
Y = btnLine.Bottom,
|
TextAlignment = TextAlignment.Center,
|
TextSize = LogicView.TextSize.text16,
|
TextColor = CSS.CSS_Color.textCancelColor,
|
TextID = StringId.offLogic,
|
Height = Application.GetRealHeight(44),
|
Width = Application.GetRealWidth(343),
|
};
|
switchView.frameLayout.AddChidren(btnOff);
|
|
Dictionary<string, string> dic = new Dictionary<string, string>();
|
switch (if_type)
|
{
|
case LogicMethod.condition_if:
|
{
|
LogicMethod.dictionary(dic, "key", "on_off");
|
LogicMethod.dictionary(dic, "comparator", "=");
|
LogicMethod.dictionary(dic, "data_type", "string");
|
keyVlaue = "on_off";
|
}
|
break;
|
case LogicMethod.target_if:
|
{
|
LogicMethod.dictionary(dic, "key", "on_off");
|
keyVlaue = "on_off";
|
}
|
break;
|
}
|
|
btnOn.MouseUpEventHandler += (sender2, e2) =>
|
{
|
LogicMethod.dictionary(dic, "value", "on");
|
RemView(relayFunView);
|
relayView.btnState.TextID = StringId.onLogic;
|
selectedState = device.functionType + "_on";
|
AddDictionaryData(dicSateteList, keyVlaue, dic);
|
};
|
btnOff.MouseUpEventHandler += (sender3, e3) =>
|
{
|
LogicMethod.dictionary(dic, "value", "off");
|
RemView(relayFunView);
|
relayView.btnState.TextID = StringId.offLogic;
|
selectedState = device.functionType + "_off";
|
AddDictionaryData(dicSateteList, keyVlaue, dic);
|
};
|
|
if (relayView.btnState.Text != "")
|
{
|
if (relayView.btnState.Text == btnOn.Text)
|
{
|
btnOn.TextColor = CSS.CSS_Color.textConfirmColor;
|
}
|
else
|
{
|
btnOff.TextColor = CSS.CSS_Color.textConfirmColor;
|
}
|
}
|
|
};
|
if (edit)
|
{
|
GetEditState(device, edit, index, relayView.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")
|
{
|
if (if_type == LogicMethod.condition_if)
|
{
|
|
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
|
{
|
Output outputDevice = new Output();
|
outputDevice.target_type = "1";
|
outputDevice.sid = device.sid;
|
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="frame"></param>
|
private void RemView(FrameLayout frame)
|
{
|
frame.RemoveFromParent();
|
}
|
/// <summary>
|
/// 显示编辑之前的设备状态
|
/// </summary>
|
/// <param name="device">编辑设备</param>
|
/// <param name="edit">编辑状态</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, bool edit, int index, Button button1, Button button2, Button button3, Button button4)
|
{
|
var dicList = new List<Dictionary<string, string>>();
|
switch (if_type)
|
{
|
case LogicMethod.condition_if:
|
{
|
Input inputs = Logic.currlogic.input[index];
|
dicList = inputs.condition as List<Dictionary<string, string>>;
|
}
|
break;
|
case LogicMethod.target_if:
|
{
|
Output outputs = Logic.currlogic.output[index];
|
dicList = outputs.status as List<Dictionary<string, string>>;
|
}
|
break;
|
}
|
switch (device.functionType)
|
{
|
//开关灯光
|
case FunctionType.Relay:
|
{
|
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;
|
|
}
|
|
}
|
/// <summary>
|
/// 添加选中数据
|
/// </summary>
|
/// <param name="dicList">数据列表</param>
|
/// <param name="keyValue">识别设备</param>
|
/// <param name="dictionary">选中数据</param>
|
/// <returns></returns>
|
private void AddDictionaryData(List<Dictionary<string, string>> dicList, string keyValue, Dictionary<string, string> 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);
|
}
|
|
}
|
/// <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);
|
}
|
|
}
|
/// <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);
|
}
|
|
}
|
}
|
}
|