using System; using HDL_ON.Entity; using HDL_ON.UI.CSS; using Shared; using System.Collections.Generic; namespace HDL_ON.UI { public class SceneFunctionInfoEditPage : FrameLayout { FrameLayout bodyView; VerticalScrolViewLayout contentView; Button btnOnText; Scene scene; Action refreshAction; SceneFunction sceneFunction; public SceneFunctionInfoEditPage(Scene s, SceneFunction fc,Action action) { bodyView = this; scene = s; sceneFunction = fc; refreshAction = action; } public void LoadPage() { bodyView.BackgroundColor = CSS_Color.BackgroundColor; new TopViewDiv(bodyView, sceneFunction.localFunction.name).LoadTopView(); contentView = new VerticalScrolViewLayout() { Y = Application.GetRealHeight(64), Height = Application.GetRealHeight(520), ScrollEnabled = false, }; bodyView.AddChidren(contentView); LoadFunctionRow(sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.OnOff)); foreach (var attr in sceneFunction.status) { switch (attr.key) { case FunctionAttributeKey.SetTemp: LoadFunctionRow(sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.SetTemp)); break; case FunctionAttributeKey.Mode: LoadFunctionRow(sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.Mode)); break; case FunctionAttributeKey.FanSpeed: LoadFunctionRow(sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.FanSpeed)); break; case FunctionAttributeKey.Percent: LoadFunctionRow(sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.Percent)); break; case FunctionAttributeKey.Brightness: LoadFunctionRow(sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.Brightness)); break; } } //加载开关Row //LoadFunctionRow(sceneFunction.localFunction.trait_on_off); //switch (sceneFunction.localFunction.functionType) //{ // case FunctionType.AC: // LoadFunctionRow(sceneFunction.localFunction.attributes.Find((obj) => obj.key == "set_temp")); // LoadFunctionRow(sceneFunction.localFunction.attributes.Find((obj) => obj.key == "mode")); // LoadFunctionRow(sceneFunction.localFunction.attributes.Find((obj) => obj.key == "fan")); // break; // case FunctionType.FloorHeating: // LoadFunctionRow(sceneFunction.localFunction.attributes.Find((obj) => obj.key == "set_temp")); // LoadFunctionRow(sceneFunction.localFunction.attributes.Find((obj) => obj.key == "mode")); // break; // case FunctionType.Curtain: // //无操作 // break; // case FunctionType.MotorCurtain: // case FunctionType.RollingShutter: // LoadFunctionRow(sceneFunction.localFunction.attributes.Find((obj) => obj.key == "percent")); // break; // case FunctionType.Relay: // //无操作 // break; // case FunctionType.Dimmer: // case FunctionType.RGB: // LoadFunctionRow(sceneFunction.localFunction.attributes.Find((obj) => obj.key == "brightness")); // break; //} //加载延时Row LoadDelayRow(); var bottomView = new FrameLayout() { Y = Application.GetRealHeight(591), Height = Application.GetRealHeight(106), BackgroundColor = CSS_Color.MainBackgroundColor, Radius = (uint)Application.GetRealWidth(16), }; bodyView.AddChidren(bottomView); var btnConfrim = new Button() { Gravity = Gravity.CenterHorizontal, Y = Application.GetRealHeight(12), Width = Application.GetRealWidth(220), Height = Application.GetRealWidth(44), TextAlignment = TextAlignment.Center, TextColor = CSS_Color.MainBackgroundColor, BackgroundColor = CSS_Color.MainColor, TextSize = CSS_FontSize.SubheadingFontSize, IsBold = true, Radius = (uint) Application.GetRealWidth(22), TextID = StringId.Complete }; bottomView.AddChidren(btnConfrim); btnConfrim.MouseUpEventHandler = (sender, e) => { var temp = scene.functions.Find((obj) => obj.sid == sceneFunction.sid); if (temp != null) { temp = sceneFunction; } else { scene.functions.Add(sceneFunction); } if (!string.IsNullOrEmpty(scene.userSceneId)) { var result = scene.UpdateScene(); if (result == DAL.Server.StateCode.SUCCESS) { refreshAction(); this.RemoveFromParent(); } else { DAL.Server.IMessageCommon.Current.ShowErrorInfoAlter(result); } } else { refreshAction(); this.RemoveFromParent(); } }; } /// /// 加载功能Row /// void LoadFunctionRow(SceneFunctionStatus sceneStatus) { if (sceneStatus == null) return; #region Row code var row = new FrameLayout() { Height = Application.GetRealHeight(50), BackgroundColor = CSS_Color.MainBackgroundColor, }; contentView.AddChidren(row); if (sceneStatus.key != FunctionAttributeKey.OnOff) { row.AddChidren(new Button() { X = Application.GetRealWidth(16), Height = Application.GetRealHeight(1), Width = Application.GetRealWidth(343), BackgroundColor = CSS_Color.DividingLineColor }); } Button btnBrightnessRight = new Button() { X = Application.GetRealWidth(339), Gravity = Gravity.CenterVertical, Width = Application.GetMinRealAverage(16), Height = Application.GetMinRealAverage(16), UnSelectedImagePath = "Public/Right.png", }; row.AddChidren(btnBrightnessRight); var btnFunctionText = new Button() { Width = Application.GetRealWidth(330), TextAlignment = TextAlignment.CenterRight, TextColor = CSS_Color.PromptingColor1, TextSize = CSS_FontSize.PromptFontSize_FirstLevel, Text = FunctionList.List.GetValueText(sceneStatus.key,sceneStatus.value) + FunctionList.List.GetUintString(sceneStatus.key) }; row.AddChidren(btnFunctionText); if (sceneStatus.key == FunctionAttributeKey.OnOff) btnOnText = btnFunctionText; var btnFunctionName = new Button() { X = Application.GetRealWidth(16), TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.FirstLevelTitleColor, TextSize = CSS_FontSize.SubheadingFontSize, Text = FunctionList.List.GetNameText(sceneStatus.key) }; row.AddChidren(btnFunctionName); btnFunctionName.MouseUpEventHandler = (sender, e) => { switch (sceneStatus.key) { case FunctionAttributeKey.OnOff: LoadEditDialog_OnOff(sceneStatus, btnFunctionText); break; case FunctionAttributeKey.Brightness: LoadEditDialog_Percent(sceneStatus, btnFunctionText); break; case FunctionAttributeKey.Mode: var statusList = new List(); var tr = sceneFunction.localFunction.attributes.Find((obj) => obj.key == FunctionAttributeKey.Mode); foreach(var t in tr.value) { statusList.Add(t); } LoadEditDialog_FunctionPar(sceneStatus, btnFunctionText,statusList); break; case FunctionAttributeKey.FanSpeed: var fanStatusList = new List(); var tr1 = sceneFunction.localFunction.attributes.Find((obj) => obj.key == FunctionAttributeKey.FanSpeed); foreach (var t in tr1.value) { fanStatusList.Add(t); } LoadEditDialog_FunctionPar(sceneStatus, btnFunctionText, fanStatusList); break; case FunctionAttributeKey.SetTemp: LoadEditDialog_Temp(sceneStatus, btnFunctionText); break; case "delay": break; case "cct": break; case FunctionAttributeKey.Percent: LoadEditDialog_Percent(sceneStatus, btnFunctionText); break; } }; #endregion } #region 加载功能场景数据调节界面 /// /// 加载延时Row /// void LoadDelayRow() { #region 延时row FrameLayout delayRow = new FrameLayout() { Height = Application.GetRealWidth(50), BackgroundColor = CSS_Color.MainBackgroundColor }; contentView.AddChidren(delayRow); delayRow.AddChidren(new Button() { X = Application.GetRealWidth(16), Height = Application.GetRealHeight(1), Width = Application.GetRealWidth(343), BackgroundColor = CSS_Color.DividingLineColor }); Button btnDelayRight = new Button() { X = Application.GetRealWidth(339), Gravity = Gravity.CenterVertical, Width = Application.GetMinRealAverage(16), Height = Application.GetMinRealAverage(16), UnSelectedImagePath = "Public/Right.png", }; delayRow.AddChidren(btnDelayRight); var btnDelayInfo = new Button() { Width = Application.GetRealWidth(327), TextAlignment = TextAlignment.CenterRight, TextColor = CSS_Color.PromptingColor1, TextSize = CSS_FontSize.PromptFontSize_FirstLevel, Text = FunctionList.List.GetDelayText( sceneFunction.delay) }; delayRow.AddChidren(btnDelayInfo); Button btnSceneDelayTitle = new Button() { X = Application.GetRealWidth(16), TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.FirstLevelTitleColor, TextSize = CSS_FontSize.SubheadingFontSize, TextID = StringId.Delay, }; delayRow.AddChidren(btnSceneDelayTitle); btnSceneDelayTitle.MouseUpEventHandler = (sender, e) => { Action action = (obj) => { sceneFunction.delay = obj; btnDelayInfo.Text = FunctionList.List.GetDelayText(obj); }; new PublicAssmebly().SetSceneDelayDialog(action,sceneFunction.delay); }; #endregion } #endregion #region 属性选择弹窗 /// /// 加载开关选择弹窗 /// /// /// void LoadEditDialog_OnOff(SceneFunctionStatus trait, Button btn) { Dialog dialog = new Dialog(); var pView = new FrameLayout() { BackgroundColor = CSS_Color.DialogTransparentColor1, }; dialog.AddChidren(pView); var optionBaseView = new FrameLayout() { Y = Application.GetRealHeight(500), Height = Application.GetRealHeight(160), AnimateSpeed = 0.3f, Animate = Animate.DownToUp, }; pView.AddChidren(optionBaseView); var optionView = new VerticalScrolViewLayout() { Gravity = Gravity.CenterHorizontal, Width = Application.GetRealWidth(343), Height = Application.GetRealHeight(100), BackgroundColor = CSS_Color.MainBackgroundColor, Radius = (uint)Application.GetRealWidth(12), ScrollEnabled = false, }; optionBaseView.AddChidren(optionView); var btnOn = new Button() { Height = Application.GetRealHeight(50), TextAlignment = TextAlignment.Center, TextColor = CSS_Color.TextualColor, SelectedTextColor = CSS_Color.MainColor, TextSize = CSS_FontSize.SubheadingFontSize, TextID = StringId.On, IsSelected = trait.value.ToString() == "on" }; optionView.AddChidren(btnOn); optionView.AddChidren(new Button() { Height = Application.GetRealHeight(1), BackgroundColor = CSS_Color.DividingLineColor }); var btnOff = new Button() { Height = Application.GetRealHeight(50), TextAlignment = TextAlignment.Center, TextColor = CSS_Color.TextualColor, SelectedTextColor = CSS_Color.MainColor, TextSize = CSS_FontSize.SubheadingFontSize, TextID = StringId.OFF, IsSelected = trait.value.ToString() == "off" }; optionView.AddChidren(btnOff); var btnCancel = new Button() { Gravity = Gravity.CenterHorizontal, Y = Application.GetRealHeight(8) + optionView.Bottom, Width = Application.GetRealWidth(343), Height = Application.GetRealHeight(50), BackgroundColor = CSS_Color.MainBackgroundColor, Radius = (uint)Application.GetRealWidth(12), TextID = StringId.Cancel, TextColor = CSS_Color.WarningColor, TextSize = CSS_FontSize.SubheadingFontSize, }; optionBaseView.AddChidren(btnCancel); dialog.Show(); pView.MouseUpEventHandler = (sender, e) => { dialog.Close(); }; btnCancel.MouseUpEventHandler = (sender, e) => { dialog.Close(); }; btnOn.MouseUpEventHandler = (sender, e) => { dialog.Close(); trait.value = "on"; sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.OnOff).value = "on"; btn.Text = FunctionList.List.GetValueText(trait.key, trait.value) + FunctionList.List.GetUintString(trait.key); }; btnOff.MouseUpEventHandler = (sender,e) =>{ dialog.Close(); trait.value = "off"; sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.OnOff).value = "off"; btn.Text= FunctionList.List.GetValueText(trait.key,trait.value) + FunctionList.List.GetUintString(trait.key); }; } /// /// 加载温度选择弹窗 /// /// /// void LoadEditDialog_Temp(SceneFunctionStatus trait, Button btn) { double temp = 16; double.TryParse(trait.value, out temp); trait.value = temp.ToString(); List pickerItems = new List(); if(trait == null) { return; } Dialog dialog = new Dialog(); var pView = new FrameLayout() { BackgroundColor = CSS_Color.DialogTransparentColor1, }; dialog.AddChidren(pView); var optionBaseView = new FrameLayout() { Y = Application.GetRealHeight(456-60), Gravity = Gravity.CenterHorizontal, Width = Application.GetRealWidth(343), Height = Application.GetRealHeight(260), AnimateSpeed = 0.3f, Animate = Animate.DownToUp, BackgroundColor = CSS_Color.MainBackgroundColor, Radius = (uint)Application.GetRealWidth(12), }; pView.AddChidren(optionBaseView); var topView = new FrameLayout() { Gravity = Gravity.CenterHorizontal, Width = Application.GetRealWidth(343), Height = Application.GetRealHeight(40), BackgroundColor = CSS_Color.MainBackgroundColor, Radius = (uint)Application.GetRealWidth(12), }; optionBaseView.AddChidren(topView); topView.AddChidren(new Button() {Y = Application.GetRealHeight(39), Height = Application.GetRealHeight(1), BackgroundColor = CSS_Color.DividingLineColor }); var btnCancel = new Button() { X = Application.GetRealWidth(21), Width = Application.GetRealWidth(100), TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.PromptingColor1, TextSize = CSS_FontSize.TextFontSize, TextID = StringId.Cancel, }; topView.AddChidren(btnCancel); var btnConfrim = new Button() { Width = Application.GetRealWidth(320), TextAlignment = TextAlignment.CenterRight, TextColor = CSS_Color.MainColor, TextSize = CSS_FontSize.TextFontSize, TextID = StringId.Confirm, }; topView.AddChidren(btnConfrim); UIPickerView uIPickerView = new UIPickerView() { Y = Application.GetRealHeight(40), Height = Application.GetRealHeight(210), Radius = (uint)Application.GetRealWidth(12), }; for (int i = 16; i <= 32; i += 1) { pickerItems.Add(i.ToString() + FunctionList.List.GetUintString(trait.key)); } uIPickerView.setNPicker(pickerItems, null, null); optionBaseView.AddChidren(uIPickerView); uIPickerView.setCurrentItems(pickerItems.IndexOf(trait.value.ToString()), 4, 5); string selectItem = pickerItems[0]; if (pickerItems.Contains(trait.value + FunctionList.List.GetUintString(trait.key))) { selectItem = trait.value.ToString() + FunctionList.List.GetUintString(trait.key); } dialog.Show(); pView.MouseUpEventHandler = (sender, e) => { dialog.Close(); }; btnCancel.MouseUpEventHandler = (sender, e) => { dialog.Close(); }; uIPickerView.OnSelectChangeEvent = (int1, int2, int3) => { selectItem = pickerItems[int1]; }; btnConfrim.MouseUpEventHandler = (sender, e) => { dialog.Close(); btn.Text = selectItem; //sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.OnOff).value = trait.value.ToString() ; trait.value = selectItem.Replace(FunctionList.List.GetUintString(trait.key),""); }; } /// /// 加载亮度选择弹窗 /// /// /// void LoadEditDialog_Percent(SceneFunctionStatus trait, Button btn) { if (trait == null) { return; } Dialog dialog = new Dialog(); var pView = new FrameLayout() { BackgroundColor = CSS_Color.DialogTransparentColor1, }; dialog.AddChidren(pView); var optionBaseView = new FrameLayout() { Y = Application.GetRealHeight(467), Gravity = Gravity.CenterHorizontal, Width = Application.GetRealWidth(343), Height = Application.GetRealHeight(180), AnimateSpeed = 0.3f, Animate = Animate.DownToUp, BackgroundColor = CSS_Color.MainBackgroundColor, Radius = (uint)Application.GetRealWidth(12), }; pView.AddChidren(optionBaseView); var topView = new FrameLayout() { Gravity = Gravity.CenterHorizontal, Width = Application.GetRealWidth(343), Height = Application.GetRealHeight(40), BackgroundColor = CSS_Color.MainBackgroundColor, Radius = (uint)Application.GetRealWidth(12), }; optionBaseView.AddChidren(topView); topView.AddChidren(new Button() { Y = Application.GetRealHeight(39), Height = Application.GetRealHeight(1), BackgroundColor = CSS_Color.DividingLineColor }); var btnTitle = new Button() { Gravity = Gravity.CenterHorizontal, TextAlignment = TextAlignment.Center, Width = Application.GetRealWidth(100), Text = FunctionList.List.GetNameText(trait.key), IsBold = true, TextColor = CSS_Color.FirstLevelTitleColor, TextSize = CSS_FontSize.SubheadingFontSize, }; topView.AddChidren(btnTitle); var btnCancel = new Button() { X = Application.GetRealWidth(21), Width = Application.GetRealWidth(100), TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.PromptingColor1, TextSize = CSS_FontSize.TextFontSize, TextID = StringId.Cancel, }; topView.AddChidren(btnCancel); var btnConfrim = new Button() { Width = Application.GetRealWidth(320), TextAlignment = TextAlignment.CenterRight, TextColor = CSS_Color.MainColor, TextSize = CSS_FontSize.TextFontSize, TextID = StringId.Confirm, }; topView.AddChidren(btnConfrim); Button btnMinusSignIcon = new Button() { X = Application.GetRealWidth(26), Y = Application.GetRealHeight(118), Width = Application.GetMinRealAverage(24), Height = Application.GetMinRealAverage(24), UnSelectedImagePath = "Public/MinusSignIcon.png", }; optionBaseView.AddChidren(btnMinusSignIcon); DiyImageSeekBar controlBar = new DiyImageSeekBar() { X = btnMinusSignIcon.Right + Application.GetRealWidth(12), Y = Application.GetRealHeight(100),//414,设计数据 Width = Application.GetRealWidth(220), Height = Application.GetRealHeight(54), SeekBarViewHeight = Application.GetRealHeight(8), ThumbImagePath = "Public/ThumbImage.png", ThumbImageHeight = Application.GetRealHeight(54), ProgressBarColor = CSS_Color.MainColor, ProgressTextColor = CSS_Color.FirstLevelTitleColor, ProgressTextSize = CSS_FontSize.PromptFontSize_FirstLevel, MaxValue = 100, Progress = trait.value.ToString().Replace("{}", "") == "" ? 0 : Convert.ToInt32(trait.value.Replace("{}", "")), SeekBarPadding = Application.GetRealWidth(20), }; optionBaseView.AddChidren(controlBar); Button btnPlusSgnIcon = new Button() { X = controlBar.Right + Application.GetRealWidth(12), Y = Application.GetRealHeight(118), Width = Application.GetMinRealAverage(24), Height = Application.GetMinRealAverage(24), UnSelectedImagePath = "Public/PlusSignIcon.png", }; optionBaseView.AddChidren(btnPlusSgnIcon); btnMinusSignIcon.MouseUpEventHandler = (sender, e) => { controlBar.Progress--; }; btnPlusSgnIcon.MouseUpEventHandler = (sender, e) => { controlBar.Progress++; }; dialog.Show(); pView.MouseUpEventHandler = (sender, e) => { dialog.Close(); }; btnCancel.MouseUpEventHandler = (sender, e) => { dialog.Close(); }; btnConfrim.MouseUpEventHandler = (sender, e) => { dialog.Close(); trait.value = controlBar.Progress.ToString(); btn.Text = trait.value + FunctionList.List.GetUintString(trait.key); var temp = sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.OnOff); if (temp != null) { if (controlBar.Progress > 0) { temp.value = "on"; } else { temp.value = "off"; } btnOnText.Text = FunctionList.List.GetValueText(temp.key, temp.value); } }; } /// /// 加载功能属性数据选择弹窗 /// void LoadEditDialog_FunctionPar(SceneFunctionStatus trait, Button btn,List statusList) { Button lastButton = new Button(); var lastData = ""; var lastText = ""; Dialog dialog = new Dialog(); var pView = new FrameLayout() { BackgroundColor = CSS_Color.DialogTransparentColor1, }; dialog.AddChidren(pView); var optionBaseView = new FrameLayout() { Y = Application.GetRealHeight(579 - 50 * statusList.Count), Gravity = Gravity.CenterHorizontal, Width = Application.GetRealWidth(343), Height = Application.GetRealHeight(50 * statusList.Count + 50), AnimateSpeed = 0.3f, Animate = Animate.DownToUp, BackgroundColor = CSS_Color.MainBackgroundColor, Radius = (uint)Application.GetRealWidth(12), }; pView.AddChidren(optionBaseView); var topView = new FrameLayout() { Gravity = Gravity.CenterHorizontal, Width = Application.GetRealWidth(343), Height = Application.GetRealHeight(50), BackgroundColor = CSS_Color.MainBackgroundColor, Radius = (uint)Application.GetRealWidth(12), }; optionBaseView.AddChidren(topView); var btnTitle = new Button() { Gravity = Gravity.CenterHorizontal, TextAlignment = TextAlignment.Center, Width = Application.GetRealWidth(100), Text = FunctionList.List.GetNameText(trait.key), IsBold = true, TextColor = CSS_Color.FirstLevelTitleColor, TextSize = CSS_FontSize.SubheadingFontSize, }; topView.AddChidren(btnTitle); var btnCancel = new Button() { X = Application.GetRealWidth(21), Width = Application.GetRealWidth(100), TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.PromptingColor1, TextSize = CSS_FontSize.TextFontSize, TextID = StringId.Cancel, }; topView.AddChidren(btnCancel); var btnConfrim = new Button() { Width = Application.GetRealWidth(320), TextAlignment = TextAlignment.CenterRight, TextColor = CSS_Color.MainColor, TextSize = CSS_FontSize.TextFontSize, TextID = StringId.Complete, }; topView.AddChidren(btnConfrim); int hei = 1; foreach (var m in statusList) { var row = new FrameLayout() { Y = Application.GetRealHeight(50 * hei), Height = Application.GetRealHeight(50), }; optionBaseView.AddChidren(row); if (statusList.Count > hei) { optionBaseView.AddChidren(new Button() { Gravity = Gravity.CenterHorizontal, Y = row.Bottom, Width = Application.GetRealWidth(343), BackgroundColor = CSS_Color.DividingLineColor, Height = 1, }); } hei++; var btnChoose = new Button() { X = Application.GetRealWidth(303), Gravity = Gravity.CenterVertical, Width = Application.GetMinRealAverage(28), Height = Application.GetMinRealAverage(28), UnSelectedImagePath = "Public/ChooseIcon.png", SelectedImagePath = "Public/ChooseOnIcon.png", }; row.AddChidren(btnChoose); if (trait.value == m) { lastButton = btnChoose; btnChoose.IsSelected = true; } var btnPropertyTitle = new Button() { X = Application.GetRealWidth(16), TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.FirstLevelTitleColor, TextSize = CSS_FontSize.TextFontSize, Tag = m, Text = FunctionList.List.GetValueText(trait.key, m) }; row.AddChidren(btnPropertyTitle); btnPropertyTitle.MouseUpEventHandler = (sender, e) => { btnChoose.IsSelected = true; if (lastButton != null) { lastButton.IsSelected = false; } lastButton = btnChoose; lastData = btnPropertyTitle.Tag.ToString(); lastText = btnPropertyTitle.Text; }; } dialog.Show(); pView.MouseUpEventHandler = (sender, e) => { dialog.Close(); }; btnCancel.MouseUpEventHandler = (sender, e) => { dialog.Close(); }; btnConfrim.MouseUpEventHandler = (sender, e) => { dialog.Close(); trait.value = lastData; //sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.OnOff).value = trait.curValue.ToString() ; btn.Text = lastText; }; } #endregion } }