using System;
using Shared;
using System.Text.RegularExpressions;
using System.Collections.Generic;
using HDL_ON.Entity;
using HDL_ON.UI.CSS;
namespace HDL_ON.UI
{
public class AddOutputPage : FrameLayout
{
FrameLayout bodyView;
FrameLayout showdFunctionTypeRow;
///
/// 楼层选择下拉图标
///
Button btnFloorDownIcon;
///
/// 楼层显示
///
Button btnFloor;
///
/// 筛选文本显示
///
Button btnScreenText;
VerticalScrolViewLayout functionListView;
Action refreshAction;
///
/// 本地功能转换的输出列表(灯光、场景)
///
List allocatedList = new List();
SecurityAlarm alarm;
public AddOutputPage(SecurityAlarm inOutput ,Action action)
{
bodyView = this;
refreshAction = action;
alarm = inOutput;
}
///
/// 加载界面
///
public void LoadPage()
{
bodyView.BackgroundColor = CSS_Color.BackgroundColor;
new TopViewDiv(bodyView, Language.StringByID(StringId.AddFunction)).LoadTopView();
#region 显示的功能类型切换区域
showdFunctionTypeRow = new FrameLayout()
{
Y = Application.GetRealHeight(64),
Height = Application.GetRealHeight(62),
BackgroundColor = CSS_Color.MainBackgroundColor,
};
bodyView.AddChidren(showdFunctionTypeRow);
btnFloorDownIcon = new Button()
{
Width = Application.GetMinRealAverage(16),
Height = Application.GetMinRealAverage(16),
X = Application.GetRealWidth(16),
Y = Application.GetRealHeight(18),
UnSelectedImagePath = "Public/DownIcon.png",
};
showdFunctionTypeRow.AddChidren(btnFloorDownIcon);
btnFloor = new Button()
{
X = btnFloorDownIcon.Right,
Y = Application.GetRealHeight(18),
Width = Application.GetRealWidth(200),
Height = Application.GetMinRealAverage(16),
TextColor = CSS_Color.FirstLevelTitleColor,
TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
TextAlignment = TextAlignment.CenterLeft,
Text = DB_ResidenceData.Instance.CurFloor.roomName,
};
showdFunctionTypeRow.AddChidren(btnFloor);
LoadDialog_ChangeFloor();
#endregion
functionListView = new VerticalScrolViewLayout()
{
Y = showdFunctionTypeRow.Bottom,
Height = Application.GetRealHeight(530 -100),
BackgroundColor = CSS_Color.BackgroundColor,
};
bodyView.AddChidren(functionListView);
SetData();
LoadFunctionListRow();
var bottomView = new FrameLayout()
{
Y = Application.GetRealHeight(591),
Height = Application.GetRealHeight(100),
BackgroundColor = CSS_Color.MainBackgroundColor,
Radius = (uint)Application.GetRealWidth(22),
};
this.AddChidren(bottomView);
var btnConfrim = new Button()
{
X = Application.GetRealWidth(78),
Y = Application.GetRealHeight(12),
Width = Application.GetRealWidth(220),
Height = Application.GetRealWidth(44),
Radius = (uint)Application.GetRealWidth(22),
BackgroundColor = CSS_Color.MainColor,
TextID = StringId.Confirm,
TextSize = CSS_FontSize.SubheadingFontSize,
TextColor = CSS_Color.MainBackgroundColor,
TextAlignment = TextAlignment.Center,
};
bottomView.AddChidren(btnConfrim);
btnConfrim.MouseUpEventHandler = (sender, e) =>
{
this.RemoveFromParent();
refreshAction?.Invoke(alarm);
};
}
///
/// 配置数据
///
void SetData(string roomId="")
{
allocatedList.Clear();
foreach (var function in FunctionList.List.GetLightList())
{
if (function == null)
{
continue;
}
if (!string.IsNullOrEmpty(roomId) && roomId == "ALLSELECT")
{
if (!function.roomIds.Contains(roomId))
{
continue;
}
}
function.roomIds.Remove(null);
var tempStatus = new List();
tempStatus.Add(new SecurityOutputStatus() { key = FunctionAttributeKey.OnOff, value = "on" });
allocatedList.Add(new SecurityOutput
{
target_type = "0",
sid = function.sid,
status = tempStatus,
name = function.name,
RoomName = function.GetRoomListName(),
});
}
foreach (var scene in FunctionList.List.scenes)
{
if (scene == null)
{
continue;
}
if (!string.IsNullOrEmpty(roomId))
{
if (!scene.roomIds.Contains(roomId))
{
continue;
}
}
scene.roomIds.Remove(null);
var tempStatus = new List();
tempStatus.Add(new SecurityOutputStatus() { key = "value", value = "0" });
allocatedList.Add(new SecurityOutput
{
target_type = "1",
sid = scene.sid,
status = tempStatus,
name = scene.name,
RoomName = scene.GetRoomListName(),
});
}
}
//
/// 显示功能Row
///
void LoadFunctionListRow()
{
functionListView.RemoveAll();
foreach (var function in allocatedList)
{
var output = alarm.output.Find((obj) => obj.sid == function.sid);
if (output == null)
{
output = new SecurityOutput() { status = new List { new SecurityOutputStatus {
key = FunctionAttributeKey.OnOff,
value = "on"
} } };
output.sid = function.sid;
}
//else
//{
// output.addCondition = true;
//}
FrameLayout functionRow = new FrameLayout()
{
Height = Application.GetRealHeight(65),
BackgroundColor = CSS_Color.MainBackgroundColor,
};
functionListView.AddChidren(functionRow);
var btnFunctionName = new Button()
{
X = Application.GetRealWidth(16),
Width = Application.GetRealWidth(200),
Height = Application.GetRealHeight(44),
Text = function.name,
TextAlignment = TextAlignment.CenterLeft,
TextColor = CSS_Color.FirstLevelTitleColor,
TextSize = CSS_FontSize.TextFontSize,
};
functionRow.AddChidren(btnFunctionName);
var btnFunctionFloorName = new Button()
{
X = Application.GetRealWidth(16),
Y = Application.GetRealHeight(24),
Width = Application.GetRealWidth(200),
Height = Application.GetRealHeight(41),
Text = function.RoomName,
TextAlignment = TextAlignment.CenterLeft,
TextColor = CSS_Color.PromptingColor1,
TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
};
functionRow.AddChidren(btnFunctionFloorName);
Button btnState = new Button()
{
Width = Application.GetRealWidth(317),
TextAlignment = TextAlignment.CenterRight,
TextSize = CSS_FontSize.TextFontSize,
TextColor = CSS_Color.PromptingColor1,
};
functionRow.AddChidren(btnState);
Button btnChooseIcon = new Button()
{
X = Application.GetRealWidth(333),
Gravity = Gravity.CenterVertical,
Width = Application.GetMinRealAverage(32),
Height = Application.GetMinRealAverage(32),
UnSelectedImagePath = "Public/ChooseIcon.png",
SelectedImagePath = "Public/ChooseOnIcon.png",
};
functionRow.AddChidren(btnChooseIcon);
btnChooseIcon.MouseUpEventHandler = (sender, e) => {
btnChooseIcon.IsSelected = !btnChooseIcon.IsSelected;
var tempLocal = alarm.input.Find((obj) =>
obj.sid == output.sid
);
if (btnChooseIcon.IsSelected)
{
//input.addCondition = true;
if (tempLocal == null)
alarm.output.Add(output);
}
else
{
//input.addCondition = false;
if (tempLocal != null)
{
alarm.output.Remove(output);
}
}
};
btnState.MouseUpEventHandler = (sender, e) =>
{
ShowStateDialog(output, btnState, btnChooseIcon);
};
var localOutput = alarm.output.Find((obj) => obj.sid == output.sid);
if (localOutput!=null)
{
btnChooseIcon.IsSelected = true;
btnState.Text = output.StateText();
}
functionListView.AddChidren(new Button()
{
Gravity = Gravity.CenterHorizontal,
Width = Application.GetRealWidth(343),
Height = Application.GetRealWidth(1),
BackgroundColor = CSS_Color.DividingLineColor,
});
}
}
private void ShowStateDialog(SecurityOutput output, Button btnState, Button btnChoose = null)
{
Dialog dialog = new Dialog();
FrameLayout contentView = new FrameLayout();
dialog.AddChidren(contentView);
contentView.MouseUpEventHandler = (sender, e) =>
{
dialog.Close();
if (output.status.Count == 0)
{
if (btnChoose != null)
{
btnChoose.IsSelected = false;
}
}
};
VerticalScrolViewLayout optinView = new VerticalScrolViewLayout()
{
Gravity = Gravity.CenterHorizontal,
Y = Application.GetRealHeight(515),
Width = Application.GetRealWidth(343),
Height = Application.GetRealHeight(88),
Radius = (uint)Application.GetRealHeight(13),
BackgroundColor = CSS_Color.MainBackgroundColor,
};
contentView.AddChidren(optinView);
Button btnOpen = new Button()
{
Height = Application.GetRealHeight(44),
TextAlignment = TextAlignment.Center,
SelectedTextColor = CSS_Color.MainColor,
TextColor = CSS_Color.PromptingColor1,
TextSize = CSS_FontSize.SubheadingFontSize,
TextID = StringId.On,
};
optinView.AddChidren(btnOpen);
optinView.AddChidren(new Button()
{
Height = 1,
BackgroundColor = CSS_Color.DividingLineColor
});
Button btnClose = new Button()
{
Height = Application.GetRealHeight(44),
TextAlignment = TextAlignment.Center,
SelectedTextColor = CSS_Color.MainColor,
TextColor = CSS_Color.PromptingColor1,
TextID = StringId.OFF,
TextSize = CSS_FontSize.SubheadingFontSize,
};
optinView.AddChidren(btnClose);
if (output.status.Count > 0)
{
btnOpen.IsSelected = output.status[0].value.ToLower() == "on";
btnClose.IsSelected = !btnOpen.IsSelected;
}
Button btnCancel = new Button()
{
Gravity = Gravity.CenterHorizontal,
Y = optinView.Bottom + Application.GetRealHeight(8),
Width = Application.GetRealWidth(343),
Height = Application.GetRealHeight(44),
Radius = (uint)Application.GetRealHeight(13),
BackgroundColor = CSS_Color.MainBackgroundColor,
TextID = StringId.Cancel,
TextColor = CSS_Color.WarningColor,
IsBold = true,
};
contentView.AddChidren(btnCancel);
dialog.Show();
btnOpen.MouseUpEventHandler = (sender, e) => {
btnState.Text = btnOpen.Text;
output.status = new List()
{
new SecurityOutputStatus()
{
key = FunctionAttributeKey.OnOff,
value = "on",
}
};
var localInput = alarm.output.Find((obj) =>
obj.sid == output.sid
);
if (localInput == null)
{
btnChoose.IsSelected = true;
}
dialog.Close();
};
btnClose.MouseUpEventHandler = (sender, e) =>
{
btnState.Text = btnClose.Text;
output.status = new List()
{
new SecurityOutputStatus()
{
key = FunctionAttributeKey.OnOff,
value = "off",
}
};
var localInput = alarm.output.Find((obj) =>
obj.sid == output.sid
);
if (localInput == null)
{
btnChoose.IsSelected = true;
}
dialog.Close();
};
btnCancel.MouseUpEventHandler = (sender, e) =>
{
dialog.Close();
if (output.status.Count == 0)
{
if (btnChoose != null)
{
btnChoose.IsSelected = false;
}
}
};
}
///
/// 住宅列表点击事件
///
void LoadDialog_ChangeFloor()
{
string nowSelectId = null;
btnFloor.MouseUpEventHandler = (sender, e) =>
{
var listAllFun = new List();
//listAllFun.AddRange(allocatedList);
//显示下拉界面
var form = new FloorRoomSelectPopupView();
form.ShowDeviceFunctionView(btnFloor, listAllFun, (selectId, listFun) =>
{
SetData(selectId);
//重新刷新设备列表
this.LoadFunctionListRow();
}, nowSelectId);
};
}
}
}