using System;
using Shared;
using System.Collections.Generic;
namespace HDL_ON.UI.UI2.Intelligence.Automation
{
public class DeviceFunList : FrameLayout
{
public DeviceFunList()
{
Tag = "Logic";
}
///
/// 表示是(条件/目标)
///
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> dicSateteList = new List>();
//定义一个变量,记录选中状态
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 dic = new Dictionary();
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
}
///
/// 移除控件
///
///
private void RemView(FrameLayout frame)
{
frame.RemoveFromParent();
}
///
/// 显示编辑之前的设备状态
///
/// 编辑设备
/// 编辑状态
/// 编辑数据的索引
/// 显示Btn
/// 显示Btn
/// 显示Btn
/// 显示Btn
private void GetEditState(Entity.Function device, bool edit, int index, Button button1, Button button2, Button button3, Button button4)
{
var dicList = new List>();
switch (if_type)
{
case LogicMethod.condition_if:
{
Input inputs = Logic.currlogic.input[index];
dicList = inputs.condition as List>;
}
break;
case LogicMethod.target_if:
{
Output outputs = Logic.currlogic.output[index];
dicList = outputs.status as List>;
}
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;
}
}
///
/// 添加选中数据
///
/// 数据列表
/// 识别设备
/// 选中数据
///
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 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);
}
}
}
}