using System; using HDL_ON.UI.CSS; using Shared; using HDL_ON.Entity; using System.Collections.Generic; using System.Threading; using HDL_ON.DAL.Server; namespace HDL_ON.UI { public partial class SceneEditPage : FrameLayout { FrameLayout bodyView; /// /// 场景背景显示区域 /// ImageView addSceneImageView; /// /// 场景功能列表显示区域 /// VerticalScrolViewLayout functionListView; /// /// 场景名称row /// FrameLayout sceneNameView; /// /// 场景名称显示文本 /// Button btnSceneName; /// /// 场景名称修改图标 /// Button btnEditSceneNameIcon; /// /// 所属区域row /// FrameLayout belongToZoneRow; Button btnBelongToZoneRight; Button btnZoneName; Button btnAddFunctionTitle; /// /// 底部完成按钮 /// Button btnComplete; #region 图标选择部分图标 /// /// 背景图选项区域 /// FrameLayout pictureOptionView; /// /// 背景图选项选择区域 /// VerticalScrolViewLayout optionView; /// /// 默认图库按钮 /// Button btnDefaultGallery; /// /// 拍照按钮 /// Button btnTakePicture; /// /// 相册按钮 /// Button btnAlbum; /// /// 取消按钮 /// Button btnCancel; #endregion Scene scene; /// /// 更新功能row /// Action refreshFunctionRowAction; /// /// 回掉更新 /// Action backAction; public SceneEditPage(Scene s,Action act) { bodyView = this; scene = s; backAction = act; refreshFunctionRowAction = () => { LoadFunctionRow(); }; } public void LoadPage(Action backRefresh) { new TopViewDiv(bodyView, Language.StringByID(StringId.EditScene)).LoadTopView(backRefresh); initPage(); } void initPage() { bodyView.BackgroundColor = CSS_Color.MainBackgroundColor; VerticalScrolViewLayout contentView = new VerticalScrolViewLayout() { Y = Application.GetRealHeight(64), Height = Application.GetRealHeight(603-50), }; bodyView.AddChidren(contentView); contentView.AddChidren(new Button() { Height = Application.GetRealWidth(12) }); FrameLayout sceneBgView = new FrameLayout() { Gravity = Gravity.CenterHorizontal, Width = Application.GetRealWidth(252), Height = Application.GetRealWidth(188 + 24), Radius = (uint)Application.GetRealWidth(12), BackgroundColor = CSS_Color.MainBackgroundColor, }; contentView.AddChidren(sceneBgView); addSceneImageView = new ImageView() { Gravity = Gravity.CenterHorizontal, Height = Application.GetRealWidth(184), Radius = (uint)Application.GetRealWidth(12), //ImagePath = scene.ImagePath }; sceneBgView.AddChidren(addSceneImageView); //2020-12-03 修改图片加载方法 ImageUtlis.Current.LoadLocalOrNetworkImages(scene.ImagePath, addSceneImageView); #region 场景名称row sceneNameView = new FrameLayout() { Height = Application.GetRealWidth(50), }; contentView.AddChidren(sceneNameView); Button btnSceneTitle = new Button() { X = Application.GetRealWidth(16), Width = Application.GetRealWidth(90), TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.FirstLevelTitleColor, TextSize = CSS_FontSize.TextFontSize, TextID = StringId.SceneName, }; sceneNameView.AddChidren(btnSceneTitle); btnEditSceneNameIcon = new Button() { X = Application.GetRealWidth(333), Gravity = Gravity.CenterVertical, Width = Application.GetMinRealAverage(28), Height = Application.GetMinRealAverage(28), UnSelectedImagePath = "Public/EditIcon.png", }; sceneNameView.AddChidren(btnEditSceneNameIcon); btnSceneName = new Button() { X = Application.GetRealWidth(100), Width = Application.GetRealWidth(230), TextAlignment = TextAlignment.CenterRight, TextColor = CSS_Color.PromptingColor1, TextSize = CSS_FontSize.TextFontSize, Text = scene.name }; sceneNameView.AddChidren(btnSceneName); Button btnSceneNameLine = new Button() { Y = Application.GetRealWidth(49), Gravity = Gravity.CenterHorizontal, Height = Application.GetRealHeight(1), Width = Application.GetRealWidth(343), BackgroundColor = CSS_Color.DividingLineColor, }; sceneNameView.AddChidren(btnSceneNameLine); #endregion #region 所属区域row belongToZoneRow = new FrameLayout() { Y = sceneNameView.Bottom, Height = Application.GetRealWidth(50), }; contentView.AddChidren(belongToZoneRow); Button btnBelongToTitle = new Button() { X = Application.GetRealWidth(16), Width = Application.GetRealWidth(90), TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.FirstLevelTitleColor, TextSize = CSS_FontSize.TextFontSize, TextID = StringId.LocationManagement, }; belongToZoneRow.AddChidren(btnBelongToTitle); btnBelongToZoneRight = new Button() { X = Application.GetRealWidth(339), Gravity = Gravity.CenterVertical, Width = Application.GetMinRealAverage(16), Height = Application.GetMinRealAverage(16), UnSelectedImagePath = "Public/Right.png", }; belongToZoneRow.AddChidren(btnBelongToZoneRight); btnZoneName = new Button() { X = Application.GetRealWidth(100), Width = Application.GetRealWidth(230), TextAlignment = TextAlignment.CenterRight, TextColor = CSS_Color.PromptingColor1, TextSize = CSS_FontSize.TextFontSize, Text = scene.GetRoomListName() == "" ? Language.StringByID(StringId.WholeZone) : scene.GetRoomListName() }; belongToZoneRow.AddChidren(btnZoneName); contentView.AddChidren(new Button() { Y = belongToZoneRow.Bottom, Height = Application.GetRealHeight(8), BackgroundColor = CSS_Color.DividingLineColor, }); #endregion #region 场景延时row if (DB_ResidenceData.Instance.GatewayType == 1) { FrameLayout sceneDelayRow = new FrameLayout() { Y = sceneNameView.Bottom, Height = Application.GetRealWidth(50), }; contentView.AddChidren(sceneDelayRow); Button btnSceneDelayRight = new Button() { X = Application.GetRealWidth(339), Gravity = Gravity.CenterVertical, Width = Application.GetMinRealAverage(16), Height = Application.GetMinRealAverage(16), UnSelectedImagePath = "Public/Right.png", }; sceneDelayRow.AddChidren(btnSceneDelayRight); var btnSceneDelayInfo = new Button() { Width = Application.GetRealWidth(327), TextAlignment = TextAlignment.CenterRight, TextColor = CSS_Color.PromptingColor1, TextSize = CSS_FontSize.PromptFontSize_FirstLevel, Text = scene.GetDelayText() }; sceneDelayRow.AddChidren(btnSceneDelayInfo); Button btnSceneDelayTitle = new Button() { X = Application.GetRealWidth(16), //Width = Application.GetRealWidth(90), TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.FirstLevelTitleColor, TextSize = CSS_FontSize.TextFontSize, TextID = StringId.SceneDelay, }; sceneDelayRow.AddChidren(btnSceneDelayTitle); btnSceneDelayTitle.MouseUpEventHandler = (sender, e) => { Action action = (obj) => { scene.delay = obj; btnSceneDelayInfo.Text = scene.GetDelayText(); scene.EditScene(); }; Dictionary items = new Dictionary(); items.Add("30", "30s"); items.Add("60", "1min"); items.Add("120", "2min"); items.Add("300", "5min"); new PublicAssmebly().SetSceneDelayDialog(action,scene.delay); }; contentView.AddChidren(new Button() { Y = sceneDelayRow.Bottom, Height = Application.GetRealHeight(8), BackgroundColor = CSS_Color.DividingLineColor, }); } #endregion #region 添加功能row FrameLayout addFunctionRow = new FrameLayout() { Height = Application.GetRealWidth(44), }; contentView.AddChidren(addFunctionRow); Button btnAddIcon = new Button() { X = Application.GetRealWidth(333), Gravity = Gravity.CenterVertical, Width = Application.GetMinRealAverage(28), Height = Application.GetMinRealAverage(28), UnSelectedImagePath = "Public/AddIcon.png", }; addFunctionRow.AddChidren(btnAddIcon); btnAddFunctionTitle = new Button() { X = Application.GetRealWidth(16), TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.MainColor, TextSize = CSS_FontSize.SubheadingFontSize, TextID = StringId.FunctionManagement, IsBold = true, }; addFunctionRow.AddChidren(btnAddFunctionTitle); functionListView = new VerticalScrolViewLayout() { Height = 0, }; contentView.AddChidren(functionListView); LoadFunctionRow(); Button btnLine1 = new Button() { //Y = sceneDelayRow.Bottom, Height = Application.GetRealHeight(8), BackgroundColor = CSS_Color.DividingLineColor, }; contentView.AddChidren(btnLine1); Button btnLine2 = new Button() { //Y = sceneDelayRow.Bottom, Height = Application.GetRealHeight(228), BackgroundColor = CSS_Color.DividingLineColor, }; contentView.AddChidren(btnLine2); #endregion Button btnBottomLine = new Button() { Y = Application.GetRealHeight(667 - 50) - 1, Height = 1, BackgroundColor = CSS_Color.DividingLineColor, }; bodyView.AddChidren(btnBottomLine); btnComplete = new Button() { Y = Application.GetRealHeight(667 - 50), Height = Application.GetRealHeight(50), TextAlignment = TextAlignment.Center, TextColor = CSS_Color.WarningColor, TextSize = CSS_FontSize.SubheadingFontSize, TextID = StringId.Del, BackgroundColor = CSS_Color.MainBackgroundColor, //IsBold = true }; bodyView.AddChidren(btnComplete); LoadEventList(); var waitPage = new Loading(); new Thread(() => { try { Application.RunOnMainThread(() => { bodyView.AddChidren(waitPage); waitPage.Start(Language.StringByID(StringId.PleaseWait)); }); var pm = new HttpServerRequest(); var pack = pm.GetSceneInfo(scene.userSceneId); if (pack.Code == StateCode.SUCCESS) { var sceneList = Newtonsoft.Json.JsonConvert.DeserializeObject>(pack.Data.ToString()); var tempScene = sceneList.Find((obj) => obj.userSceneId == scene.userSceneId); if (tempScene != null) { scene.functions = tempScene.functions; } Application.RunOnMainThread(() => { LoadFunctionRow(); waitPage.Hide(); waitPage.RemoveFromParent(); }); } else { IMessageCommon.Current.ShowErrorInfoAlter(pack.Code); } } catch { } finally { Application.RunOnMainThread(() => { waitPage.Hide(); waitPage.RemoveFromParent(); }); } }).Start(); } /// /// 加载功能列表 /// void LoadFunctionRow() { functionListView.RemoveAll(); functionListView.Height = Application.GetRealWidth(65 * scene.functions.Count); for(int i =0;i 0) { btnFunctionDelayInfo.Text = Language.StringByID(StringId.Delay) + " " + new Scene() { delay = scenefunction.delay }.GetDelayText(); } else { btnFunctionDelayInfo.Text = Language.StringByID(StringId.NoDelay); } var btnFunctionName = new Button() { X = Application.GetRealWidth(16), Height = Application.GetRealWidth(44), TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.FirstLevelTitleColor, TextSize = CSS_FontSize.TextFontSize, Text = scenefunction.localFunction.name, }; row.AddChidren(btnFunctionName); var btnFunctionFloorAndRoom = new Button() { X = Application.GetRealWidth(16), Y = Application.GetRealWidth(24), Height = Application.GetRealWidth(41), TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.PromptingColor1, TextSize = CSS_FontSize.TextFontSize, Text = scenefunction.localFunction.GetRoomListName(), }; row.AddChidren(btnFunctionFloorAndRoom); EventHandler skipEvent = (sender, e) => { var ssf = new SceneFunctionInfoEditPage(scene, scenefunction, refreshFunctionRowAction); MainPage.BasePageView.AddChidren(ssf); ssf.LoadPage(); MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1; }; btnFunctionName.MouseUpEventHandler = skipEvent; btnFunctionFloorAndRoom.MouseUpEventHandler = skipEvent; Button btnDelSceneFunction = new Button() { BackgroundColor = CSS_Color.WarningColor, TextColor = CSS_Color.MainBackgroundColor, TextID = StringId.Del, }; row.AddRightView(btnDelSceneFunction); btnDelSceneFunction.MouseUpEventHandler = (sender, e) => { scene.functions.Remove(scenefunction); scene.EditScene(); row.RemoveFromParent(); functionListView.Height = Application.GetRealWidth(65 * scene.functions.Count); }; } } /// /// 加载图标选择选项 /// void LoadPictureOptionView() { var pView = new FrameLayout() { BackgroundColor = CSS_Color.DialogTransparentColor1, }; bodyView.AddChidren(pView); pictureOptionView = new FrameLayout() { Y = Application.GetRealHeight(445), Height = Application.GetRealHeight(250), AnimateSpeed = 0.3f, Animate = Animate.DownToUp, }; pView.AddChidren(pictureOptionView); optionView = new VerticalScrolViewLayout() { Gravity = Gravity.CenterHorizontal, Width = Application.GetRealWidth(343), Height = Application.GetRealHeight(150), BackgroundColor = CSS_Color.MainBackgroundColor, Radius = (uint)Application.GetRealWidth(12), }; pictureOptionView.AddChidren(optionView); btnDefaultGallery = new Button() { Height = Application.GetRealHeight(50), TextAlignment = TextAlignment.Center, TextColor = CSS_Color.TextualColor, SelectedTextColor = CSS_Color.MainColor, TextSize = CSS_FontSize.SubheadingFontSize, TextID = StringId.DefaultGallery, }; optionView.AddChidren(btnDefaultGallery); optionView.AddChidren(new Button() { Height = Application.GetRealHeight(1), Width = Application.GetRealWidth(343), BackgroundColor = CSS_Color.DividingLineColor }); btnTakePicture = new Button() { Height = Application.GetRealHeight(50), TextAlignment = TextAlignment.Center, TextColor = CSS_Color.TextualColor, SelectedTextColor = CSS_Color.MainColor, TextSize = CSS_FontSize.SubheadingFontSize, TextID = StringId.TakePicture, }; optionView.AddChidren(btnTakePicture); optionView.AddChidren(new Button() { Height = Application.GetRealHeight(1), Width = Application.GetRealWidth(343), BackgroundColor = CSS_Color.DividingLineColor }); btnAlbum = new Button() { Height = Application.GetRealHeight(50), TextAlignment = TextAlignment.Center, TextColor = CSS_Color.TextualColor, SelectedTextColor = CSS_Color.MainColor, TextSize = CSS_FontSize.SubheadingFontSize, TextID = StringId.Album, }; optionView.AddChidren(btnAlbum); optionView.AddChidren(new Button() { Height = Application.GetRealHeight(1), Width = Application.GetRealWidth(343), BackgroundColor = CSS_Color.DividingLineColor }); 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, }; pictureOptionView.AddChidren(btnCancel); LoadEvent_PictureOptionViewEventList( pView); } } //-------------------------------------- public partial class SceneEditPage { void LoadEventList() { LoadEvent_ChangeSceneImage(); LoadEvent_ChangeSceneZone(); LoadEvent_ChangeFunctionList(); LoadEvent_CompleteEvent(); LoadEvent_EditRoomName(); } /// /// 修改场景所属区域 /// void LoadEvent_ChangeSceneZone() { EventHandler eventHandler = (sender, e) => { Action backAction = () => { var result = scene.EditScene(); if (result == StateCode.SUCCESS) { btnZoneName.Text = scene.GetRoomListName(); }else { IMessageCommon.Current.ShowErrorInfoAlter(result); } }; var ssl = new SetSceneLocationPage(scene, backAction); MainPage.BasePageView.AddChidren(ssl); ssl.LoadPage(); MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1; }; btnZoneName.MouseUpEventHandler = eventHandler; belongToZoneRow.MouseUpEventHandler = eventHandler; btnBelongToZoneRight.MouseUpEventHandler = eventHandler; } /// /// 修改场景的功能列表 /// void LoadEvent_ChangeFunctionList() { btnAddFunctionTitle.MouseUpEventHandler = (sender, e) => { var sefp =new SceneFunctionListChoosePage(scene,refreshFunctionRowAction); MainPage.BasePageView.AddChidren(sefp); sefp.LoadPage(); MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1; }; } /// /// 修改场景背景事件 /// void LoadEvent_ChangeSceneImage() { addSceneImageView.MouseUpEventHandler = (sender, e) => { LoadPictureOptionView(); }; } /// /// 加载背景图选择区域事件列表 /// void LoadEvent_PictureOptionViewEventList(FrameLayout pView) { pictureOptionView.MouseUpEventHandler = (sender, e) => { pictureOptionView.Parent.RemoveFromParent(); }; pView.MouseUpEventHandler = (sender, e) => { pictureOptionView.Parent.RemoveFromParent(); }; btnCancel.MouseUpEventHandler = (sender, e) => { pictureOptionView.Parent.RemoveFromParent(); }; btnTakePicture.MouseDownEventHandler = (sender, e) => { btnTakePicture.IsSelected = true; }; btnTakePicture.MouseUpEventHandler = (sender, e) => { btnTakePicture.IsSelected = false; var imageName = Guid.NewGuid().ToString(); CropImage.TakePicture((imagePath) => { CropImageCallBack(imagePath); }, imageName, 4, 3); pictureOptionView.Parent.RemoveFromParent(); }; btnAlbum.MouseDownEventHandler = (sender, e) => { btnAlbum.IsSelected = true; }; btnAlbum.MouseUpEventHandler = (sender, e) => { btnAlbum.IsSelected = false; //var pid = Guid.NewGuid(); //CropImage.SelectPicture((imagePath) => //{ // if (imagePath != null) // { // addSceneImageView.ImagePath = imagePath.ToString(); // scene.ImagePath = addSceneImageView.ImagePath; // MainPage.Log("SelectPicture 裁剪图片返回路径: " + imagePath); // } //}, pid.ToString(), 4, 3); //从相册选择图片裁剪 var imageName = Guid.NewGuid().ToString(); //var imageName = scene.sid; CropImage.SelectPicture((imagePath) => { CropImageCallBack(imagePath); }, imageName, 4, 3); pictureOptionView.Parent.RemoveFromParent(); }; btnDefaultGallery.MouseUpEventHandler = (sender, e) => { pictureOptionView.Parent.RemoveFromParent(); Action action = (obj) => { scene.ImagePath = obj; addSceneImageView.ImageBytes = null;//解决有ImageBytes不加载ImagePath addSceneImageView.ImagePath = scene.ImagePath; scene.EditScene(); }; var galleryPage = new GalleryPage(scene.ImagePath,action); MainPage.BasePageView.AddChidren(galleryPage); galleryPage.LoadPage(true); MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1; }; } /// /// 裁剪完照片回调,统一处理 /// /// 裁剪后的真实路径 /// 自定义的图片名称 void CropImageCallBack(string selectImagePath) { if (string.IsNullOrEmpty(selectImagePath) == true) { return; } //上传成功到回调 Action uploadSuccessAction = (imageUrl) => { //2020-12-03 需要讲最新的图片路径同步到云端 scene.ImagePath = imageUrl; scene.EditScene(); }; //上传图片到云端 UploadImage(selectImagePath, addSceneImageView, scene, uploadSuccessAction); } /// /// 完成按钮点击事件 /// void LoadEvent_CompleteEvent() { btnComplete.MouseUpEventHandler += (sender, e) => { if (btnComplete.TextID == StringId.Complete) { if (string.IsNullOrEmpty(scene.name)) { new Tip() { CloseTime = 1, Text = Language.StringByID(StringId.SceneNameCannotBeEmpty), Direction = AMPopTipDirection.None, }.Show(bodyView); return; } foreach (var tempRoom in FunctionList.List.scenes) { if (scene.name == tempRoom.name) { new PublicAssmebly().TipMsg(StringId.Tip, StringId.SceneNameAlreadyExists); return; } } scene.EditScene(); FunctionList.List.scenes.Add(scene); backAction(); this.RemoveFromParent(); } if (btnComplete.TextID == StringId.Del) { Action action = () => { FunctionList.List.DeleteScene(scene,true); backAction(); this.RemoveFromParent(); }; new PublicAssmebly().TipOptionMsg(StringId.Tip, StringId.DeleteSceneTip, action); }; }; } /// /// 加载修改场景名称窗口事件 /// void LoadEvent_EditRoomName() { Action callBack = (str) => { //名称不能为空 if (string.IsNullOrEmpty(str)) { new Tip() { CloseTime = 1, Text = Language.StringByID(StringId.SceneNameCannotBeEmpty), Direction = AMPopTipDirection.None, }.Show(bodyView); return; } scene.name = str; var result = scene.EditScene(); if (result == StateCode.SUCCESS) { btnSceneName.Text = str; } }; EventHandler eventHandler = (sender, e) => { List sceneNameList = new List(); foreach (var tempScene in FunctionList.List.scenes) { sceneNameList.Add(tempScene.name); } new PublicAssmebly().LoadDialog_EditParater(StringId.SceneName, scene.name, callBack, StringId.SceneNameCannotBeEmpty, StringId.SceneNameAlreadyExists, sceneNameList); }; sceneNameView.MouseUpEventHandler = eventHandler; btnSceneName.MouseUpEventHandler = eventHandler; btnEditSceneNameIcon.MouseUpEventHandler = eventHandler; } /// /// 上传图片方法 /// /// 裁剪后的图片路径 /// /// void UploadImage(string selectImagePath, ImageView imageView, Scene mScene, Action uploadSuccessAction) { try { //MainPage.Log("SelectPicture 裁剪图片返回路径: " + selectImagePath); //1.读取裁剪后的图片,然后删除 var imageBytes = Shared.IO.FileUtils.ReadFile(selectImagePath); System.IO.File.Delete(selectImagePath); var waitPage = new Loading(); bodyView.AddChidren(waitPage); waitPage.Start(Language.StringByID(StringId.PleaseWait)); //开始上传 new Thread(() => { try { var newImageName = mScene.name.Trim() + ".png"; var uploadImageObj = new UploadImageObj() { prefix = "Scene" + Utlis.GetTimestamp(), fileName = newImageName, uid = mScene.sid, content = imageBytes, }; var imageUrl = ImageUtlis.Current.UploadImage(uploadImageObj); if (!string.IsNullOrEmpty(imageUrl) && imageUrl.Contains(newImageName)) { //上传成功 Application.RunOnMainThread(() => { //Utlis.WriteLine("上传成功:" + imageUrl); //1.2如果是自定义图片删除之前的 if (!string.IsNullOrEmpty(imageView.ImagePath) && !imageView.ImagePath.Contains("Classification/Room/Roombg")) { //Utlis.WriteLine("删除: " + imageView.ImagePath); System.IO.File.Delete(imageView.ImagePath); } //重命名保存 ImageUtlis.Current.WriteFileByBytes(imageUrl, imageBytes); imageView.ImagePath = null; imageView.ImageBytes = imageBytes; //上传成功 Utlis.ShowTip(Language.StringByID(StringId.UploadSuccessfully)); uploadSuccessAction?.Invoke(imageUrl); }); } else { //上传失败 Application.RunOnMainThread(() => { //上传失败 Utlis.ShowTip(Language.StringByID(StringId.UploadFailed)); }); } } catch (Exception ex) { } finally { Application.RunOnMainThread(() => { if (waitPage != null) { waitPage.RemoveFromParent(); waitPage = null; } }); } }) { IsBackground = true }.Start(); } catch { } } } }