using System; using Shared; using System.Collections.Generic; namespace HDL_ON.UI.UI2.Intelligence.Automation { public class AddLogic : FrameLayout { public AddLogic() { Tag = "Logic"; } public void Show() { #region 界面布局 this.BackgroundColor = CSS.CSS_Color.viewMiddle; LogicView.TopView topView = new LogicView.TopView(); topView.setBtn.Visible = true; this.AddChidren(topView.FLayoutView()); topView.clickBackBtn.MouseUpEventHandler += (e, sen) => { RemoveFromParent(); }; if (string.IsNullOrEmpty(Logic.currlogic.userLogicId)) { topView.topNameBtn.TextID = StringId.newAutomation; topView.setBtn.Visible = false; topView.clickSetBtn.Visible = false; } else { topView.topNameBtn.TextID = StringId.editAutomation; topView.setBtn.Visible = true; topView.clickSetBtn.Visible = true; } VerticalScrolViewLayout viewLayout = new VerticalScrolViewLayout { Y = Application.GetRealHeight(64), Width = Application.GetRealWidth(LogicView.TextSize.view375), Height = Application.GetRealHeight(LogicView.TextSize.view667 - 64 - 76), BackgroundColor = CSS.CSS_Color.viewMiddle, }; this.AddChidren(viewLayout); #region 条件 ///如果的View LogicView.AddOutputInputTextView addInputTextView = new LogicView.AddOutputInputTextView(); addInputTextView.btnIf.TextID = StringId.ifCondition; viewLayout.AddChidren(addInputTextView.FLayoutView(46, 12)); ///满足以下条件的View LogicView.LogicTypeTitleView titleCondition = new LogicView.LogicTypeTitleView(); titleCondition.frameLayout.SetCornerWithSameRadius(Application.GetRealHeight(12), HDLUtils.RectCornerTopLeft | HDLUtils.RectCornerTopRight); titleCondition.btnText.TextID = StringId.andCondition; viewLayout.AddChidren(titleCondition.FLayoutView()); if (Logic.currlogic.relation == "and") { titleCondition.btnText.Text = Language.StringByID(StringId.andCondition); } else { titleCondition.btnText.Text = Language.StringByID(StringId.orCondition); } // 条件处理方法 InpOrOutLogicMethod.InputCondition(this, viewLayout); ///添加图标的View LogicView.LogicAddView addInputIcon = new LogicView.LogicAddView(); addInputIcon.frameLayout.SetCornerWithSameRadius(Application.GetRealHeight(12), HDLUtils.RectCornerBottomLeft | HDLUtils.RectCornerBottomRight); viewLayout.AddChidren(addInputIcon.FLayoutView()); #endregion #region 目标 ///就执行View LogicView.AddOutputInputTextView addOutpuTextView = new LogicView.AddOutputInputTextView(); addOutpuTextView.btnIf.TextID = StringId.isExecuted; viewLayout.AddChidren(addOutpuTextView.FLayoutView(54, 20)); ///以下动作View LogicView.LogicTypeTitleView titleOutpu = new LogicView.LogicTypeTitleView(); titleOutpu.frameLayout.SetCornerWithSameRadius(Application.GetRealHeight(12), HDLUtils.RectCornerTopLeft | HDLUtils.RectCornerTopRight); titleOutpu.btnText.TextID = StringId.theFollowingActions; titleOutpu.btnNextIcon.Visible = false; viewLayout.AddChidren(titleOutpu.FLayoutView()); //目标处理方法 InpOrOutLogicMethod.OutputTarget(this, viewLayout); ///添加图标的View LogicView.LogicAddView addOutputIcon = new LogicView.LogicAddView(); addOutputIcon.frameLayout.SetCornerWithSameRadius(Application.GetRealHeight(12), HDLUtils.RectCornerBottomLeft | HDLUtils.RectCornerBottomRight); viewLayout.AddChidren(addOutputIcon.FLayoutView()); #endregion #region 循环方式 ///循环方式iew LogicView.AddOutputInputTextView cyclicTextView = new LogicView.AddOutputInputTextView(); cyclicTextView.btnIf.TextID = StringId.cyclic; viewLayout.AddChidren(cyclicTextView.FLayoutView(54, 20)); ///选择周期类型View LogicView.LogicTypeTitleView cyclicTitle = new LogicView.LogicTypeTitleView(); cyclicTitle.frameLayout.Height = Application.GetRealHeight(50); cyclicTitle.frameLayout.Radius = (uint)Application.GetRealHeight(12); cyclicTitle.btnText.Text = MainView.GetCyclicText(Logic.currlogic); viewLayout.AddChidren(cyclicTitle.FLayoutView()); #endregion #region 执行推送 发送通知 ///上下间隔12像素 viewLayout.AddChidren(new FrameLayout { Height = Application.GetRealHeight(12) }); /////执行推送iew //LogicView.LogicTypeTitleView push = new LogicView.LogicTypeTitleView(); //push.frameLayout.Height = Application.GetRealHeight(50); //push.frameLayout.SetCornerWithSameRadius(Application.GetRealHeight(12), HDLUtils.RectCornerTopLeft | HDLUtils.RectCornerTopRight); //push.btnText.TextID = StringId.push; //push.btnNextIcon.Width = Application.GetMinRealAverage(36); //push.btnNextIcon.Height = Application.GetMinRealAverage(36); //push.btnNextIcon.X = Application.GetRealWidth(305); //push.btnNextIcon.UnSelectedImagePath = "LogicIcon/off.png"; //push.btnNextIcon.SelectedImagePath = "LogicIcon/on.png"; //viewLayout.AddChidren(push.FLayoutView()); /////发送通知View //LogicView.LogicTypeTitleView notification = new LogicView.LogicTypeTitleView(); //notification.frameLayout.SetCornerWithSameRadius(Application.GetRealHeight(12), HDLUtils.RectCornerBottomLeft | HDLUtils.RectCornerBottomRight); //notification.btnText.TextID = StringId.notification; //viewLayout.AddChidren(notification.FLayoutView()); /////上下间隔62像素 //viewLayout.AddChidren(new FrameLayout { Height = Application.GetRealHeight(62) }); #endregion #region 保存 ///保存View LogicView.SaveView saveView = new LogicView.SaveView(); saveView.frameLayout.SetCornerWithSameRadius(Application.GetRealHeight(24), HDLUtils.RectCornerTopLeft | HDLUtils.RectCornerTopRight); this.AddChidren(saveView.FLayoutView()); #endregion #endregion #region 界面各种点击事件 ///设置图标点击事件 topView.clickSetBtn.MouseUpEventHandler += (sender, e) => { Set set = new Set(); MainPage.BasePageView.AddChidren(set); set.Show(); MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1; }; ///或和与点击事件 titleCondition.btnClick.MouseUpEventHandler += (sender, e) => { AndOrMethod(titleCondition.btnText); }; ///条件添加点击事件 addInputIcon.btnClick.MouseUpEventHandler += (sen, e) => { var addInputType = new AddInputType(); MainPage.BasePageView.AddChidren(addInputType); addInputType.Show(); MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1; }; ///目标添加点击事件 addOutputIcon.btnClick.MouseUpEventHandler += (sen, e) => { var addTarget = new AddTarget(); MainPage.BasePageView.AddChidren(addTarget); addTarget.Show(); MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1; }; ///循环方式点击事件 cyclicTitle.btnClick.MouseUpEventHandler += (sender, e) => { DateMethod(cyclicTitle.btnText); }; ///保存点击事件 saveView.btnClick.MouseUpEventHandler += (sender, e) => { if (Logic.currlogic.input.Count == 0&& Logic.currlogic.output.Count == 0) { new LogicView.TipPopView().TipBox(StringId.tip, StringId.conditioncNullOrtargetNull); return; } if (Logic.currlogic.input.Count == 0) { new LogicView.TipPopView().TipBox(StringId.tip, StringId.conditioncNull); return; } if (Logic.currlogic.output.Count == 0) { new LogicView.TipPopView().TipBox(StringId.tip, StringId.targetNull); return; } Loading loading = new Loading(); this.AddChidren(loading); HDL_ON.DAL.Server.ResponsePackNew responsePackNew = null; if (string.IsNullOrEmpty(Logic.currlogic.userLogicId)) { List list = new List(); foreach (var logic in Logic.LogicList) { list.Add(logic.name); } new LogicView.TipPopView().InputBox(StringId.editName, InpOrOutLogicMethod.GetLogicName(Logic.currlogic), StringId.nameNull, StringId.NameAlreadyExists, list, (logicName,view ) => { Logic.currlogic.name = logicName; Logic.currlogic.sid = LogicMethod.NewSid(); loading.Start(); new System.Threading.Thread(() => { try { //发送新加逻辑命令; responsePackNew = Send.AddLogic(Logic.currlogic); } catch { } finally { Application.RunOnMainThread(() => { loading.Hide(); if (responsePackNew != null && responsePackNew.Code == "0" && responsePackNew.Data.ToString() != "") { //获取逻辑详细返回是一个数组(object类型转换为数组); var jArray = Newtonsoft.Json.Linq.JArray.Parse(responsePackNew.Data.ToString()); for (int a = 0; a < jArray.Count; a++) { var jay = jArray[a]; //数据返序列化为Logic对象 var str = Newtonsoft.Json.JsonConvert.SerializeObject(jay); var logic = Newtonsoft.Json.JsonConvert.DeserializeObject(str); if (logic.userLogicId != "") { //更新云端唯一自动化id; Logic.currlogic.userLogicId = logic.userLogicId; } else { //自己看的所以不需要支持中英文 new LogicView.TipPopView().FlashingBox("没有返回云端唯一自动化id"); } } Logic.LogicList.Add(Logic.currlogic); LogicMethod.RemoveAllView(); MainView.MainShow(); } else if (responsePackNew != null && responsePackNew.Code == "14005") { new LogicView.TipPopView().FlashingBox(Language.StringByID(StringId.gatewayNotOnline)); } else { new LogicView.TipPopView().FlashingBox(Language.StringByID(StringId.saveFail)); } }); } }) { IsBackground = true }.Start(); },()=> { }); } else { loading.Start(); new System.Threading.Thread(() => { try { //发送修改逻辑命令; responsePackNew = Send.UpdateLogic(Logic.currlogic); } catch { } finally { Application.RunOnMainThread(() => { loading.Hide(); if (responsePackNew != null && responsePackNew.Code == "0") { LogicMethod.RemoveAllView(); MainView.MainShow(); } else if (responsePackNew != null && responsePackNew.Code == "14005") { new LogicView.TipPopView().FlashingBox(Language.StringByID(StringId.gatewayNotOnline)); } else { new LogicView.TipPopView().FlashingBox(Language.StringByID(StringId.saveFail)); } }); } }) { IsBackground = true }.Start(); } }; #endregion } /// /// 循环方式(每天,每月。。) /// /// 显示文本 public void DateMethod(Button button) { FrameLayout fLayout = new FrameLayout { BackgroundColor = CSS.CSS_Color.viewTrans60lucence, }; this.AddChidren(fLayout); LogicView.DateView dateView = new LogicView.DateView(); dateView.btnTitle.TextID = StringId.cyclic; dateView.FLayoutView(fLayout, 4); dateView.btnCancel.MouseUpEventHandler += (sender2, e2) => { //移除fLayout界面 fLayout.RemoveFromParent(); }; //定义一个局部变量记录选中文本状态 string weekName = ""; //定义一个局部Btn用来记录选中Btn; var selecetdBtn = new Button() { Text = "" }; for (int i = 0; i < 4; i++) { LogicView.SelectTypeView dateTypeView = new LogicView.SelectTypeView(); dateTypeView.frameLayout.BackgroundColor = CSS.CSS_Color.viewTranslucence; dateTypeView.frameLayout.Y = Application.GetRealHeight(56 + 50 * i); dateTypeView.btnIcon.Visible = false; dateTypeView.btnText.X = Application.GetRealWidth(20); dateTypeView.btnNextIcon.X = Application.GetRealWidth(307); dateTypeView.btnLine.X = Application.GetRealWidth(20); dateTypeView.btnLine.Width = Application.GetRealWidth(303); dateView.frameLayout.AddChidren(dateTypeView.FLayoutView()); dateTypeView.btnClick.Tag = i;//标记类型 switch (i) { case 0: { weekName = Language.StringByID(StringId.performA); dateTypeView.btnNextIcon.Visible = false; } break; case 1: { weekName = Language.StringByID(StringId.days); dateTypeView.btnNextIcon.Visible = false; } break; case 2: { weekName = Language.StringByID(StringId.weekly); } break; case 3: { weekName = Language.StringByID(StringId.monthly); } break; } dateTypeView.btnText.Text = weekName; //循环类型(例如:每月,每天)点击事件 dateTypeView.btnClick.MouseUpEventHandler += (sender, e) => { int clickIndex = int.Parse(dateTypeView.btnClick.Tag.ToString()); switch (clickIndex) { case 0: { weekName = Language.StringByID(StringId.performA); selecetdBtn.TextColor = CSS.CSS_Color.textColor; dateTypeView.btnText.TextColor = CSS.CSS_Color.textConfirmColor; selecetdBtn = dateTypeView.btnText; } break; case 1: { weekName = Language.StringByID(StringId.days); selecetdBtn.TextColor = CSS.CSS_Color.textColor; dateTypeView.btnText.TextColor = CSS.CSS_Color.textConfirmColor; selecetdBtn = dateTypeView.btnText; } break; case 2: { WeekMethod(fLayout, button); } break; case 3: { MonMethod(fLayout, button); } break; } }; //显示之前的状态 if (button.Text == weekName) { dateTypeView.btnText.TextColor = CSS.CSS_Color.textConfirmColor; selecetdBtn = dateTypeView.btnText; } } //确定保存 dateView.btnConfirm.MouseUpEventHandler += (sender3, e3) => { if (selecetdBtn.Text == Language.StringByID(StringId.performA)) { //执行一次 Logic.currlogic.cycle.type = "once"; } else if (selecetdBtn.Text == Language.StringByID(StringId.days)) { //每天 Logic.currlogic.cycle.type = "day"; } else { //提示:还未选 return; } //选中保存之后显示文本 button.Text = selecetdBtn.Text; //移除fLayout界面 fLayout.RemoveFromParent(); }; } /// /// 选中星期几(周一,周二 。。。) /// /// 弹框主控件 /// 显示文本 public void WeekMethod(FrameLayout fLayout, Button button) { //定义一个局部weekList列表用来记录选中数据; List weekStateList = new List(); PublicInterface weekView = new PublicInterface(); if (Logic.currlogic.cycle.type == "week") { //数据转换 var list = weekView.GetWeekString(Logic.currlogic.cycle.value, "int"); //加载之前保存的数据 weekStateList.AddRange(list); } var weekListStr= weekView.GetViewList("week"); weekView.MultiSelectShow(fLayout, weekListStr, Language.StringByID(StringId.cyclic), weekStateList , (list) => { //选中数据处理 var statelist = weekView.GetWeekString(list, "str"); string textStr = MainView.GetWeekString(statelist); //显示选中数据 button.Text = textStr; //封装数据 Logic.currlogic.cycle.type = "week"; Logic.currlogic.cycle.value = statelist; }); } /// /// 每月 /// /// 弹框主控件 /// 显示文本 public void MonMethod(FrameLayout fLayout, Button button) { PublicInterface weekView = new PublicInterface(); weekView.MonSelectShow(fLayout, Logic.currlogic, (monList) => { //选中数据处理 string textStr= MainView.GetMonString(monList); //显示选中数据 button.Text = textStr; //封装数据 Logic.currlogic.cycle.type = "mon"; Logic.currlogic.cycle.value = monList; }); } /// /// 满足条件 /// /// 显示文本 public void AndOrMethod(Button button) { ///之前的状态文本 string currCondition = button.Text; PublicInterface conditionView = new PublicInterface(); var strList = conditionView.GetViewList("andor"); conditionView.SingleSelectionShow(this, strList, Language.StringByID(StringId.meetTheCondition), currCondition , (stateValue) => { //界面显示选中值 button.Text = stateValue; //封装数据 if (stateValue == Language.StringByID(StringId.orCondition)) { Logic.currlogic.relation = "or"; } else { Logic.currlogic.relation = "and"; } }); } } }