| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Threading; |
| | | using HDL_ON.DAL.Server; |
| | | using HDL_ON.DriverLayer; |
| | | using HDL_ON.Entity; |
| | | using HDL_ON.UI.CSS; |
| | | using Shared; |
| | |
| | | /// 功能列表集合显示区域 |
| | | /// </summary> |
| | | static VerticalScrolViewLayout functionListView; |
| | | /// <summary> |
| | | /// 完成按钮 |
| | | /// </summary> |
| | | Button btnConfrim; |
| | | |
| | | #endregion |
| | | /// <summary> |
| | | /// 场景里面的功能列表 |
| | | /// </summary> |
| | | List<Function> sceneLishtList; |
| | | /// <summary> |
| | | /// 本地的灯光列表 |
| | | /// </summary> |
| | | List<Function> lightList; |
| | | /// <summary> |
| | | /// 场景对象 |
| | | /// </summary> |
| | | Scene scene; |
| | | /// <summary> |
| | | /// 回调刷新 |
| | | /// </summary> |
| | | Action<Scene> backActon; |
| | | |
| | | List<Function> functionList; |
| | | |
| | | public AddLightScene() |
| | | public AddLightScene(List<Function> functions,Scene inParscene, Action<Scene> action) |
| | | { |
| | | bodyView = this; |
| | | functionList = new List<Function>(); |
| | | sceneLishtList = functions; |
| | | scene = inParscene; |
| | | backActon = action; |
| | | lightList = FunctionList.List.GetLightList(); |
| | | } |
| | | |
| | | public void LoadPage(int titleId) |
| | | public void LoadPage() |
| | | { |
| | | bodyView.BackgroundColor = CSS_Color.BackgroundColor; |
| | | new TopViewDiv(bodyView, Language.StringByID(titleId)).LoadTopView(); |
| | | new TopViewDiv(bodyView, Language.StringByID(StringId.CombinedDimming)).LoadTopView(); |
| | | scene.name = Language.StringByID(StringId.CombinedDimming); |
| | | |
| | | /// <summary> |
| | | /// 房间内容显示区域 |
| | |
| | | functionListView = new VerticalScrolViewLayout() |
| | | { |
| | | Y = Application.GetRealHeight(64 + 52), |
| | | Height = Application.GetRealHeight(603 - 12 - 52), |
| | | Height = Application.GetRealHeight(640 - 12 - 52 -100), |
| | | }; |
| | | bodyView.AddChidren(functionListView); |
| | | |
| | | functionList.AddRange(FunctionList.List.GetLightList()); |
| | | |
| | | LoadLightRow(lightList); |
| | | |
| | | #region 底部view |
| | | var bottomView = new FrameLayout() |
| | | { |
| | | Y = Application.GetRealHeight(591), |
| | | Height = Application.GetRealHeight(100), |
| | | BackgroundColor = CSS_Color.MainBackgroundColor, |
| | | Radius = (uint)Application.GetRealWidth(12), |
| | | }; |
| | | this.AddChidren(bottomView); |
| | | |
| | | btnConfrim = new Button() |
| | | { |
| | | Y = Application.GetRealHeight(12), |
| | | Gravity = Gravity.CenterHorizontal, |
| | | Width = Application.GetRealWidth(220), |
| | | Height = Application.GetRealHeight(44), |
| | | Radius = (uint)Application.GetRealHeight(22), |
| | | TextAlignment = TextAlignment.Center, |
| | | TextColor = CSS_Color.MainBackgroundColor, |
| | | BackgroundColor = CSS_Color.BackgroundColor, |
| | | TextID = StringId.Confirm, |
| | | TextSize = CSS_FontSize.SubheadingFontSize, |
| | | SelectedTextColor = CSS_Color.MainBackgroundColor, |
| | | SelectedBackgroundColor = CSS_Color.MainColor, |
| | | }; |
| | | bottomView.AddChidren(btnConfrim); |
| | | btnConfrim.MouseUpEventHandler = (sender, e) => { |
| | | if (btnConfrim.IsSelected) |
| | | { |
| | | Action<Scene> action = (objScene) => |
| | | { |
| | | backActon(objScene); |
| | | this.RemoveFromParent(); |
| | | }; |
| | | |
| | | var lightSceneDialog = new LightSceneEditDialog(sceneLishtList, scene, action); |
| | | lightSceneDialog.ShowDialog(); |
| | | } |
| | | }; |
| | | |
| | | #endregion |
| | | |
| | | //加载功能筛选组件 |
| | | LoadDialog_ChangeFloor(); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 加载功能row |
| | | /// </summary> |
| | | /// <param name="lightList"></param> |
| | | void LoadLightRow(List<Function> functions) |
| | | { |
| | | functionListView.RemoveAll(); |
| | | |
| | | foreach (var function in functions) |
| | | { |
| | | var functionDiv = new LightRow(function) |
| | | { |
| | | Gravity = Gravity.CenterHorizontal, |
| | | Width = Application.GetRealWidth(343), |
| | | Height = Application.GetRealHeight(62), |
| | | Radius = (uint)Application.GetMinRealAverage(12), |
| | | BorderColor = 0x00FFFFFF, |
| | | BorderWidth = 1, |
| | | BackgroundColor = CSS_Color.MainBackgroundColor, |
| | | Tag = function.spk + function.sid |
| | | }; |
| | | |
| | | Action setAction = () => |
| | | { |
| | | if (sceneLishtList.Count > 0) |
| | | { |
| | | btnConfrim.IsSelected = true; |
| | | } |
| | | else |
| | | { |
| | | btnConfrim.IsSelected = false; |
| | | } |
| | | }; |
| | | |
| | | functionDiv.LoadDiv(sceneLishtList,setAction); |
| | | functionListView.AddChidren(functionDiv); |
| | | |
| | | functionListView.AddChidren(new Button() { Height = Application.GetRealHeight(12) }); |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 住宅列表点击事件 |
| | | /// </summary> |
| | | void LoadDialog_ChangeFloor() |
| | | { |
| | | string nowSelectId = null; |
| | | btnFloor.MouseUpEventHandler += (sender, e) => |
| | | { |
| | | //显示下拉列表 |
| | | var form = new FloorRoomSelectPopupView(); |
| | | form.ShowDeviceFunctionView(btnFloor, this.lightList, (selectId, listFunc) => |
| | | { |
| | | nowSelectId = selectId; |
| | | //重新加载界面 |
| | | LoadLightRow(listFunc); |
| | | }, nowSelectId); |
| | | }; |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | public class LightRow : FrameLayout |
| | | { |
| | | #region 区域控件 |
| | | static FrameLayout bodyDiv; |
| | | /// <summary> |
| | | /// 功能/场景icon |
| | | /// </summary> |
| | | Button btnIcon; |
| | | /// <summary> |
| | | /// 功能名称/场景名称 |
| | | /// </summary> |
| | | Button btnName; |
| | | /// <summary> |
| | | /// 楼层信息显示按钮 |
| | | /// </summary> |
| | | Button btnFromFloor; |
| | | /// <summary> |
| | | /// 选中按钮 |
| | | /// </summary> |
| | | Button btnSelect; |
| | | #endregion |
| | | |
| | | #region 区域变量 |
| | | Function function; |
| | | #endregion |
| | | public LightRow(Function func) |
| | | { |
| | | bodyDiv = this; |
| | | bodyDiv.Tag = func.sid; |
| | | function = func; |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 加载控制卡片区域 |
| | | /// </summary> |
| | | public void LoadDiv(List<Function> functions,Action action) |
| | | { |
| | | btnIcon = new Button() |
| | | { |
| | | X = Application.GetRealWidth(10), |
| | | Y = Application.GetRealHeight(15), |
| | | Width = Application.GetRealWidth(32), |
| | | Height = Application.GetRealWidth(32), |
| | | UnSelectedImagePath = $"FunctionIcon/Icon/{function.IconName}.png" |
| | | }; |
| | | bodyDiv.AddChidren(btnIcon); |
| | | |
| | | btnName = new Button() |
| | | { |
| | | X = Application.GetRealWidth(8 + 10 + 32), |
| | | Y = Application.GetRealHeight(10), |
| | | Width = Application.GetRealWidth(200), |
| | | Height = Application.GetRealHeight(24), |
| | | Text = function.name, |
| | | TextAlignment = TextAlignment.CenterLeft, |
| | | TextColor = CSS_Color.FirstLevelTitleColor, |
| | | TextSize = CSS_FontSize.TextFontSize, |
| | | }; |
| | | bodyDiv.AddChidren(btnName); |
| | | |
| | | btnFromFloor = new Button() |
| | | { |
| | | X = Application.GetRealWidth(8 + 10 + 32), |
| | | Y = Application.GetRealHeight(10 + 24), |
| | | Width = Application.GetRealWidth(200), |
| | | Height = Application.GetRealHeight(18), |
| | | Text = function.GetRoomListName(), |
| | | TextAlignment = TextAlignment.CenterLeft, |
| | | TextColor = CSS_Color.PromptingColor1, |
| | | TextSize = CSS_FontSize.PromptFontSize_FirstLevel, |
| | | }; |
| | | bodyDiv.AddChidren(btnFromFloor); |
| | | |
| | | btnSelect = new Button() |
| | | { |
| | | X = Application.GetRealWidth(303), |
| | | Gravity = Gravity.CenterVertical, |
| | | Width = Application.GetRealWidth(32), |
| | | Height = Application.GetRealWidth(32), |
| | | UnSelectedImagePath = "FunctionIcon/Light/LightScene/CheckIcon.png", |
| | | SelectedImagePath = "FunctionIcon/Light/LightScene/CheckOnIcon.png", |
| | | IsSelected = functions.Find((obj) => obj.deviceId == function.deviceId) != null |
| | | }; |
| | | bodyDiv.AddChidren(btnSelect); |
| | | |
| | | btnSelect.MouseUpEventHandler = (sender, e) => { |
| | | btnSelect.IsSelected = !btnSelect.IsSelected; |
| | | if(btnSelect.IsSelected) |
| | | { |
| | | var addTemp = functions.Find((obj) => obj.deviceId == function.deviceId); |
| | | if (addTemp == null) |
| | | { |
| | | functions.Add(function); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | var removeTemp = functions.Find((obj) => obj.deviceId == function.deviceId); |
| | | if (removeTemp != null) |
| | | { |
| | | functions.Remove(removeTemp); |
| | | } |
| | | } |
| | | ///刷新界面 |
| | | if (functions.Count == 0 || functions.Count == 1) |
| | | { |
| | | action(); |
| | | } |
| | | }; |
| | | |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 灯光场景编辑弹窗 |
| | | /// </summary> |
| | | public class LightSceneEditDialog :Dialog |
| | | { |
| | | /// <summary> |
| | | /// 传入的灯光列表 |
| | | /// 加入场景控制功能列表 |
| | | /// </summary> |
| | | List<Function> lights; |
| | | /// <summary> |
| | | /// 临时灯光对象 |
| | | /// 处理灯光方法 |
| | | /// </summary> |
| | | Light tempLight = new Light(); |
| | | //发送数据收集 |
| | | Dictionary<string, string> commandDic = new Dictionary<string, string>(); |
| | | |
| | | Scene scene; |
| | | Action<Scene> backAction; |
| | | public LightSceneEditDialog(List<Function> functions,Scene inParScene,Action<Scene> action) |
| | | { |
| | | lights = functions; |
| | | scene = inParScene; |
| | | backAction = action; |
| | | } |
| | | |
| | | |
| | | public void ShowDialog() |
| | | { |
| | | commandDic.Add(FunctionAttributeKey.OnOff, "off"); |
| | | |
| | | var hadDimming = lights.Find((obj) => obj.spk == SPK.LightDimming) != null; |
| | | var hadCCT = lights.Find((obj) => obj.spk == SPK.LightCCT) != null; |
| | | var hadRGB = lights.Find((obj) => obj.spk == SPK.LightRGB) != null; |
| | | |
| | | var bodyView = new FrameLayout(); |
| | | this.AddChidren(bodyView); |
| | | bodyView.MouseUpEventHandler = (sender, e) => { |
| | | this.Close(); |
| | | }; |
| | | |
| | | var contentView = new FrameLayout() { |
| | | BackgroundColor = CSS_Color.MainBackgroundColor, |
| | | Width = Application.GetRealWidth(343), |
| | | Radius = (uint)Application.GetRealWidth(12), |
| | | }; |
| | | bodyView.AddChidren(contentView); |
| | | |
| | | #region 标题区 |
| | | var titleView = new FrameLayout() |
| | | { |
| | | Width = Application.GetRealWidth(343), |
| | | Height = Application.GetRealHeight(52), |
| | | }; |
| | | contentView.AddChidren(titleView); |
| | | |
| | | var btnTitle = new Button() |
| | | { |
| | | Height = Application.GetRealHeight(52), |
| | | Gravity = Gravity.Center, |
| | | TextSize = CSS_FontSize.SubheadingFontSize, |
| | | TextColor = CSS_Color.MainColor, |
| | | TextID = StringId.CombinedDimming, |
| | | TextAlignment = TextAlignment.Center, |
| | | }; |
| | | if (btnTitle.GetTextWidth() > Application.GetRealWidth(197))//247 |
| | | { |
| | | btnTitle.Width = Application.GetRealWidth(197); |
| | | btnTitle.IsMoreLines = true; |
| | | } |
| | | else |
| | | { |
| | | btnTitle.Width = btnTitle.GetTextWidth()+ Application.GetRealWidth(10); |
| | | btnTitle.IsMoreLines = false; |
| | | } |
| | | titleView.AddChidren(btnTitle); |
| | | |
| | | var btnEditIcon = new Button() |
| | | { |
| | | Width = Application.GetRealWidth(24), |
| | | Height = Application.GetRealWidth(24), |
| | | X = Application.GetRealWidth(12) + btnTitle.Right, |
| | | Gravity = Gravity.CenterVertical, |
| | | UnSelectedImagePath = "Public/Edit.png", |
| | | //SelectedImagePath = "Public/HookIcon.png" |
| | | }; |
| | | titleView.AddChidren(btnEditIcon); |
| | | |
| | | Action<string> callBack = (str) => |
| | | { |
| | | //名称不能为空 |
| | | if (string.IsNullOrEmpty(str)) |
| | | { |
| | | new Tip() |
| | | { |
| | | CloseTime = 1, |
| | | Text = Language.StringByID(StringId.NameCannotBeEmpty), |
| | | Direction = AMPopTipDirection.None, |
| | | }.Show(bodyView); |
| | | return; |
| | | } |
| | | btnTitle.Text = str; |
| | | scene.name = str; |
| | | |
| | | |
| | | if (btnTitle.GetTextWidth() > Application.GetRealWidth(197))//247 |
| | | { |
| | | btnTitle.Width = Application.GetRealWidth(197); |
| | | } |
| | | else |
| | | { |
| | | btnTitle.Width = btnTitle.GetTextWidth(); |
| | | } |
| | | |
| | | }; |
| | | EventHandler<MouseEventArgs> eventHandler = (sender, e) => |
| | | { |
| | | List<string> sceneNameList = new List<string>(); |
| | | 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); |
| | | }; |
| | | btnTitle.MouseUpEventHandler = eventHandler; |
| | | btnEditIcon.MouseUpEventHandler = eventHandler; |
| | | |
| | | titleView.AddChidren(new Button() { Height = 1, BackgroundColor = CSS_Color.DividingLineColor, Y = Application.GetRealHeight(51) }); |
| | | |
| | | #endregion |
| | | |
| | | |
| | | //var dimmingLight = lights.Find((obj) => obj.spk == SPK.LightDimming); |
| | | //var cctLight = lights.Find((obj) => obj.spk == SPK.LightCCT); |
| | | //var rgbLight = lights.Find((obj) => obj.spk == SPK.LightRGB); |
| | | var dimmingLight = scene.functions.Find((obj) => obj.localFunction.spk == SPK.LightDimming); |
| | | var cctLight = scene.functions.Find((obj) => obj.localFunction.spk == SPK.LightCCT); |
| | | var rgbLight = scene.functions.Find((obj) => obj.localFunction.spk == SPK.LightRGB); |
| | | |
| | | var brightnessValue = 0; |
| | | var cctValue = 27; |
| | | if(rgbLight!= null) |
| | | { |
| | | int.TryParse(rgbLight.status.Find((obj) => obj.key == FunctionAttributeKey.Brightness).value, out brightnessValue); |
| | | } |
| | | if (cctLight != null) |
| | | { |
| | | int.TryParse(cctLight.status.Find((obj) => obj.key == FunctionAttributeKey.Brightness).value, out brightnessValue); |
| | | int.TryParse(cctLight.status.Find((obj) => obj.key == FunctionAttributeKey.CCT).value, out cctValue); |
| | | } |
| | | if(dimmingLight!=null) |
| | | { |
| | | int.TryParse(cctLight.status.Find((obj) => obj.key == FunctionAttributeKey.CCT).value, out cctValue); |
| | | } |
| | | |
| | | |
| | | //属性设置区域 |
| | | var attrView = new VerticalScrolViewLayout() |
| | | { |
| | | Y = Application.GetRealHeight(52), |
| | | Width = Application.GetRealWidth(343), |
| | | ScrollEnabled = false, |
| | | }; |
| | | //属性设置区域高度 |
| | | int attrViewHight = Application.GetRealHeight(18 + 22); |
| | | |
| | | |
| | | //只有继电器 |
| | | if (!hadDimming && !hadCCT && !hadRGB) |
| | | { |
| | | attrViewHight += Application.GetRealHeight(50); |
| | | attrView.Height = attrViewHight; |
| | | contentView.AddChidren(attrView); |
| | | attrView.AddChidren(new Button() { Height = Application.GetRealHeight(18) }); |
| | | |
| | | var view = new FrameLayout() |
| | | { |
| | | Width = Application.GetRealWidth(343), |
| | | Height = Application.GetRealHeight(50), |
| | | }; |
| | | attrView.AddChidren(view); |
| | | |
| | | |
| | | var btnClose = new Button() |
| | | { |
| | | X = Application.GetRealWidth(50), |
| | | Gravity = Gravity.CenterVertical, |
| | | Width = Application.GetRealWidth(98), |
| | | Height = Application.GetRealHeight(40), |
| | | TextColor = CSS_Color.TextualColor, |
| | | SelectedBackgroundColor = CSS_Color.MainColor, |
| | | SelectedTextColor = CSS_Color.MainBackgroundColor, |
| | | BackgroundColor = CSS_Color.DividingLineColor, |
| | | TextID = StringId.OFF, |
| | | TextSize = CSS_FontSize.TextFontSize, |
| | | Radius = (uint)Application.GetRealWidth(5), |
| | | IsSelected = true, |
| | | //BorderWidth = 1, |
| | | //BorderColor = 0x00000000 |
| | | }; |
| | | view.AddChidren(btnClose); |
| | | |
| | | var btnOpen = new Button() |
| | | { |
| | | X = Application.GetRealWidth(100 + 98), |
| | | Gravity = Gravity.CenterVertical, |
| | | Width = Application.GetRealWidth(98), |
| | | Height = Application.GetRealHeight(40), |
| | | TextColor = CSS_Color.TextualColor, |
| | | SelectedBackgroundColor = CSS_Color.MainColor, |
| | | SelectedTextColor = CSS_Color.MainBackgroundColor, |
| | | BackgroundColor = CSS_Color.DividingLineColor, |
| | | TextID = StringId.On, |
| | | TextSize = CSS_FontSize.TextFontSize, |
| | | Radius = (uint)Application.GetRealWidth(5), |
| | | }; |
| | | view.AddChidren(btnOpen); |
| | | |
| | | btnClose.MouseUpEventHandler = (sender, e) => |
| | | { |
| | | btnClose.IsSelected = true; |
| | | btnOpen.IsSelected = false; |
| | | commandDic[FunctionAttributeKey.OnOff] = "off"; |
| | | }; |
| | | btnOpen.MouseUpEventHandler = (sender, e) => |
| | | { |
| | | btnClose.IsSelected = false; |
| | | btnOpen.IsSelected = true; |
| | | commandDic[FunctionAttributeKey.OnOff] = "on"; |
| | | }; |
| | | |
| | | } |
| | | |
| | | else |
| | | { |
| | | if(hadRGB) |
| | | { |
| | | attrViewHight += Application.GetRealHeight(248); |
| | | hadDimming = true; |
| | | } |
| | | if (hadCCT) |
| | | { |
| | | attrViewHight += Application.GetRealHeight(54 + 11); |
| | | hadDimming = true; |
| | | } |
| | | if (hadDimming) |
| | | { |
| | | attrViewHight += Application.GetRealHeight(54 + 11); |
| | | } |
| | | attrView.Height = attrViewHight; |
| | | contentView.AddChidren(attrView); |
| | | attrView.AddChidren(new Button() { Height = Application.GetRealHeight(18) }); |
| | | |
| | | |
| | | if (hadDimming) |
| | | { |
| | | LoadDimmingAttrView(attrView); |
| | | } |
| | | if (hadCCT) |
| | | { |
| | | LoadCctAttrView(attrView); |
| | | } |
| | | if(hadRGB) |
| | | { |
| | | LoadRgbAttrView(attrView); |
| | | } |
| | | } |
| | | |
| | | contentView.Height = Application.GetRealHeight(52 + 44) + attrViewHight; |
| | | contentView.Gravity = Gravity.Center; |
| | | |
| | | |
| | | |
| | | |
| | | #region bottom View |
| | | var bottomView = new FrameLayout() |
| | | { |
| | | Y = Application.GetRealHeight(52) + attrViewHight, |
| | | Height = Application.GetRealHeight(46), |
| | | }; |
| | | contentView.AddChidren(bottomView); |
| | | bottomView.AddChidren(new Button() { Height = 1, BackgroundColor = CSS_Color.DividingLineColor }); |
| | | |
| | | var btnSave = new Button() |
| | | { |
| | | Width = Application.GetRealWidth(172), |
| | | Height = Application.GetRealHeight(44), |
| | | TextAlignment = TextAlignment.Center, |
| | | TextSize = CSS_FontSize.SubheadingFontSize, |
| | | TextColor = CSS_Color.TextualColor, |
| | | TextID = StringId.Save, |
| | | }; |
| | | bottomView.AddChidren(btnSave); |
| | | |
| | | var btnComplete = new Button() |
| | | { |
| | | X = Application.GetRealWidth(172), |
| | | Width = Application.GetRealWidth(172), |
| | | Height = Application.GetRealHeight(46), |
| | | BackgroundColor = CSS_Color.MainColor, |
| | | TextColor = CSS_Color.MainBackgroundColor, |
| | | TextAlignment = TextAlignment.Center, |
| | | TextSize = CSS_FontSize.SubheadingFontSize, |
| | | TextID = StringId.Complete |
| | | }; |
| | | bottomView.AddChidren(btnComplete); |
| | | |
| | | //例:右下圆角 大小为50 |
| | | int mRectCornerID = HDLUtils.RectCornerBottomRight; |
| | | btnComplete.SetCornerWithSameRadius((uint)Application.GetRealWidth(14), mRectCornerID); |
| | | |
| | | |
| | | |
| | | btnComplete.MouseUpEventHandler = (sender, e) => { |
| | | this.Close(); |
| | | |
| | | var waitPage = new Loading(); |
| | | MainPage.BaseView.AddChidren(waitPage); |
| | | waitPage.Start(Language.StringByID(StringId.PleaseWait)); |
| | | |
| | | new Thread(() => |
| | | { |
| | | try |
| | | { |
| | | foreach (var light in lights) |
| | | { |
| | | Dictionary<string, string> sendDate = new Dictionary<string, string>(); |
| | | //赋值场景功能数据 |
| | | foreach (var attr in light.GetAttributes()) |
| | | { |
| | | if (commandDic.ContainsKey(attr)) |
| | | { |
| | | try |
| | | { |
| | | sendDate.Add(attr, commandDic[attr]); |
| | | } |
| | | catch { } |
| | | } |
| | | |
| | | } |
| | | Control.Ins.SendWriteCommand(light, sendDate); |
| | | Thread.Sleep(50); |
| | | } |
| | | } |
| | | catch |
| | | { } |
| | | finally |
| | | { |
| | | Application.RunOnMainThread(() => |
| | | { |
| | | waitPage.Hide(); |
| | | if (waitPage != null) |
| | | { |
| | | backAction(null); |
| | | waitPage.RemoveFromParent(); |
| | | } |
| | | }); |
| | | } |
| | | }) |
| | | { IsBackground = true }.Start(); |
| | | }; |
| | | |
| | | |
| | | |
| | | btnSave.MouseUpEventHandler += (sender, e) => |
| | | { |
| | | 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; |
| | | } |
| | | } |
| | | var waitPage = new Loading(); |
| | | MainPage.BaseView.AddChidren(waitPage); |
| | | waitPage.Start(Language.StringByID(StringId.PleaseWait)); |
| | | new Thread(() => |
| | | { |
| | | try |
| | | { |
| | | var serverScene = new Scene(); |
| | | for (int i = 0; i < lights.Count; i++) |
| | | { |
| | | var light = lights[i]; |
| | | //赋值场景功能数据 |
| | | foreach (var attr in light.GetAttributes()) |
| | | { |
| | | if (commandDic.ContainsKey(attr)) |
| | | { |
| | | try |
| | | { |
| | | light.SetAttrState(attr, commandDic[attr]); |
| | | } |
| | | catch { } |
| | | } |
| | | } |
| | | //转换场景的功能对象 |
| | | var sceneFunction = light.ConvertSceneFunction(); |
| | | //查询有没有存在 |
| | | var temp = scene.functions.Find((obj) => obj.sid == sceneFunction.sid); |
| | | //赋值 |
| | | if (temp != null) |
| | | { |
| | | temp = sceneFunction; |
| | | } |
| | | else |
| | | { |
| | | scene.functions.Add(sceneFunction); |
| | | } |
| | | } |
| | | var result = FunctionList.List.AddScene(scene, out serverScene); |
| | | Application.RunOnMainThread(() => |
| | | { |
| | | if (result == StateCode.SUCCESS) |
| | | { |
| | | scene = serverScene; |
| | | FunctionList.List.scenes.Add(scene); |
| | | backAction(scene); |
| | | this.Close(); |
| | | } |
| | | else |
| | | { |
| | | IMessageCommon.Current.ShowErrorInfoAlter(result); |
| | | } |
| | | }); |
| | | } |
| | | catch { } |
| | | finally |
| | | { |
| | | Application.RunOnMainThread(() => { |
| | | waitPage.Hide(); |
| | | waitPage.RemoveFromParent(); |
| | | }); |
| | | } |
| | | }) |
| | | { IsBackground = true, Priority = ThreadPriority.AboveNormal }.Start(); |
| | | }; |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | #endregion |
| | | |
| | | |
| | | this.Show(); |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 加载调光属性设置控件 |
| | | /// </summary> |
| | | /// <param name="attrView"></param> |
| | | void LoadDimmingAttrView(VerticalScrolViewLayout attrView) |
| | | { |
| | | |
| | | commandDic.TryAdd(FunctionAttributeKey.Percent, "0"); |
| | | |
| | | var dimmingView = new FrameLayout() |
| | | { |
| | | Height = Application.GetRealHeight(54 + 11) |
| | | }; |
| | | attrView.AddChidren(dimmingView); |
| | | |
| | | #region 亮度调节 |
| | | var btnBrightnessText = new Button() |
| | | { |
| | | X = Application.GetRealWidth(35), |
| | | Y = Application.GetRealHeight(1), |
| | | Width = Application.GetRealWidth(224), |
| | | Height = Application.GetRealHeight(25), |
| | | TextAlignment = TextAlignment.CenterLeft, |
| | | TextColor = CSS_Color.FirstLevelTitleColor, |
| | | TextSize = CSS_FontSize.PromptFontSize_FirstLevel, |
| | | TextID = StringId.Brightness, |
| | | }; |
| | | btnBrightnessText.Text = Language.StringByID(StringId.Brightness) + " " + commandDic[FunctionAttributeKey.Percent] + "%"; |
| | | dimmingView.AddChidren(btnBrightnessText); |
| | | |
| | | |
| | | var btnMinValuesText = new Button() |
| | | { |
| | | X = Application.GetRealWidth(35), |
| | | Y = btnBrightnessText.Bottom, |
| | | Width = Application.GetRealWidth(40), |
| | | Height = Application.GetRealHeight(21), |
| | | Text = "0%", |
| | | TextAlignment = TextAlignment.CenterLeft, |
| | | TextColor = CSS_Color.PromptingColor1, |
| | | TextSize = CSS_FontSize.PromptFontSize_FirstLevel, |
| | | }; |
| | | dimmingView.AddChidren(btnMinValuesText); |
| | | |
| | | var dimmerBar = new DiyImageSeekBar() |
| | | { |
| | | X = Application.GetRealWidth(45 + 10), |
| | | Y = Application.GetRealHeight(11), |
| | | Width = Application.GetRealWidth(220), |
| | | Height = Application.GetRealHeight(54), |
| | | SeekBarViewHeight = Application.GetRealHeight(8), |
| | | ThumbImagePath = "Public/ThumbImage.png", |
| | | ThumbImageHeight = Application.GetRealHeight(54), |
| | | ProgressTextColor = CSS_Color.FirstLevelTitleColor, |
| | | ProgressTextSize = CSS_FontSize.PromptFontSize_FirstLevel, |
| | | ProgressBarColor = CSS_Color.AuxiliaryColor1, |
| | | MaxValue = 100, |
| | | Progress = Convert.ToInt32(commandDic[FunctionAttributeKey.Percent]), |
| | | SeekBarPadding = Application.GetRealWidth(20), |
| | | IsProgressTextShow = false, |
| | | ProgressChangeDelayTime = 0, |
| | | }; |
| | | dimmingView.AddChidren(dimmerBar); |
| | | dimmerBar.OnProgressChangedEvent = (sender, e) => { |
| | | btnBrightnessText.Text = Language.StringByID(StringId.Brightness) + " " + e + "%"; |
| | | }; |
| | | dimmerBar.OnStopTrackingTouchEvent = (sender, e) => { |
| | | commandDic[FunctionAttributeKey.Percent] = dimmerBar.Progress.ToString(); |
| | | btnBrightnessText.Text = Language.StringByID(StringId.Brightness) + " " + e + "%"; |
| | | }; |
| | | |
| | | |
| | | var btnMaxValuesText = new Button() |
| | | { |
| | | X = dimmerBar.Right, |
| | | Y = btnBrightnessText.Bottom, |
| | | Width = Application.GetRealWidth(55), |
| | | Height = Application.GetRealHeight(21), |
| | | Text = "100%", |
| | | TextAlignment = TextAlignment.CenterLeft, |
| | | TextColor = CSS_Color.PromptingColor1, |
| | | TextSize = CSS_FontSize.PromptFontSize_FirstLevel, |
| | | }; |
| | | dimmingView.AddChidren(btnMaxValuesText); |
| | | #endregion |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 加载cct属性设置控件 |
| | | /// </summary> |
| | | /// <param name="attrView"></param> |
| | | void LoadCctAttrView(VerticalScrolViewLayout attrView) |
| | | { |
| | | #region 色温 |
| | | |
| | | var cctView = new FrameLayout() |
| | | { |
| | | Height = Application.GetRealHeight(54 + 11) |
| | | }; |
| | | attrView.AddChidren(cctView); |
| | | |
| | | |
| | | //色温 |
| | | var btnTempClolor = new Button(); |
| | | btnTempClolor.X = Application.GetRealWidth(35); |
| | | btnTempClolor.Y = Application.GetRealHeight(1); |
| | | btnTempClolor.Width = Application.GetRealWidth(224); |
| | | btnTempClolor.Height = Application.GetRealHeight(21); |
| | | btnTempClolor.TextAlignment = TextAlignment.CenterLeft; |
| | | btnTempClolor.TextColor = CSS_Color.FirstLevelTitleColor; |
| | | btnTempClolor.TextSize = CSS_FontSize.PromptFontSize_FirstLevel; |
| | | btnTempClolor.TextID = StringId.ColorTemperature; |
| | | cctView.AddChidren(btnTempClolor); |
| | | |
| | | //2700K |
| | | var btnTempClolorMin = new Button() |
| | | { |
| | | X = Application.GetRealWidth(35), |
| | | Y = btnTempClolor.Bottom, |
| | | Width = Application.GetRealWidth(40), |
| | | Height = Application.GetRealHeight(21), |
| | | }; |
| | | btnTempClolorMin.Width = Application.GetRealWidth(54); |
| | | btnTempClolorMin.Height = Application.GetRealHeight(21); |
| | | btnTempClolorMin.Text = "2700K"; |
| | | btnTempClolorMin.TextAlignment = TextAlignment.CenterLeft; |
| | | btnTempClolorMin.TextColor = CSS_Color.PromptingColor1; |
| | | btnTempClolorMin.TextSize = CSS_FontSize.PromptFontSize_FirstLevel; |
| | | cctView.AddChidren(btnTempClolorMin); |
| | | |
| | | //滑动条的背景图片 |
| | | var btnColorTemplatrueBack = new Button() |
| | | { |
| | | X = Application.GetRealWidth(55 + 22 + 15), |
| | | Y = Application.GetRealHeight(11), |
| | | Width = Application.GetRealWidth(180), |
| | | Height = Application.GetRealHeight(54), |
| | | }; |
| | | btnColorTemplatrueBack.UnSelectedImagePath = "FunctionIcon/Light/ColorTemperatureBar.png"; |
| | | btnColorTemplatrueBack.Height = Application.GetRealHeight(8); |
| | | btnColorTemplatrueBack.Gravity = Gravity.CenterHorizontal; |
| | | cctView.AddChidren(btnColorTemplatrueBack); |
| | | //滑动条控件 |
| | | var barColorTemplatrue = new CCTSeekBarControl() |
| | | { |
| | | X = Application.GetRealWidth(55 + 22), |
| | | Y = Application.GetRealHeight(11), |
| | | Width = Application.GetRealWidth(220), |
| | | Height = Application.GetRealHeight(54), |
| | | }; |
| | | barColorTemplatrue.MinValue = 27; |
| | | barColorTemplatrue.MaxValue = 65; |
| | | barColorTemplatrue.ProgressBarColor = 0x00000000;//全部透明 |
| | | barColorTemplatrue.ProgressBarUnEnableColor = 0x00000000; |
| | | barColorTemplatrue.SeekBarBackgroundColor = 0x00000000; |
| | | cctView.AddChidren(barColorTemplatrue); |
| | | barColorTemplatrue.Y = btnTempClolorMin.Y - (barColorTemplatrue.Height - btnTempClolorMin.Height) / 2; |
| | | var cct = 27; |
| | | //int.TryParse(cctLight.status.Find((obj) => obj.key == FunctionAttributeKey.CCT).value, out cct); |
| | | barColorTemplatrue.Progress = cct; |
| | | //设置初始值 |
| | | btnTempClolor.Text = Language.StringByID(StringId.ColorTemperature) + " " + (barColorTemplatrue.Progress * 100 + "K"); |
| | | barColorTemplatrue.OnProgressChangedEvent = (sender, e) => |
| | | { |
| | | btnTempClolor.Text = Language.StringByID(StringId.ColorTemperature) + " " + (barColorTemplatrue.Progress * 100 + "K"); |
| | | }; |
| | | barColorTemplatrue.OnStopTrackingTouchEvent = (sender, e) => |
| | | { |
| | | commandDic[FunctionAttributeKey.CCT] = (barColorTemplatrue.Progress*100).ToString(); |
| | | }; |
| | | //变更背景图的Y轴坐标 |
| | | btnColorTemplatrueBack.Y = barColorTemplatrue.Y + (barColorTemplatrue.Height - btnColorTemplatrueBack.Height) / 2; |
| | | |
| | | //6500K |
| | | var btnTempClolorMax = new Button(); |
| | | btnTempClolorMax.Y = btnTempClolorMin.Y; |
| | | btnTempClolorMax.X = barColorTemplatrue.Right - Application.GetRealWidth(30); |
| | | btnTempClolorMax.Width = Application.GetRealWidth(54); |
| | | btnTempClolorMax.Height = Application.GetRealHeight(21); |
| | | btnTempClolorMax.Text = "6500K"; |
| | | btnTempClolorMax.TextAlignment = TextAlignment.CenterRight; |
| | | btnTempClolorMax.TextColor = CSS_Color.PromptingColor1; |
| | | btnTempClolorMax.TextSize = CSS_FontSize.PromptFontSize_FirstLevel; |
| | | cctView.AddChidren(btnTempClolorMax); |
| | | |
| | | #endregion |
| | | |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 加载rgb属性设置控件 |
| | | /// </summary> |
| | | /// <param name="attrView"></param> |
| | | void LoadRgbAttrView(VerticalScrolViewLayout attrView) |
| | | { |
| | | |
| | | #region RGB |
| | | commandDic.TryAdd(FunctionAttributeKey.RGB, "255,255,255"); |
| | | |
| | | var rgbView = new FrameLayout() |
| | | { |
| | | Height = Application.GetRealHeight(248) |
| | | }; |
| | | attrView.AddChidren(rgbView); |
| | | |
| | | |
| | | var btnCurColor = new Button() |
| | | { |
| | | X = Application.GetRealWidth(24), |
| | | Y = Application.GetRealHeight(10), |
| | | Width = Application.GetMinRealAverage(24), |
| | | Height = Application.GetMinRealAverage(24), |
| | | Radius = (uint)Application.GetMinRealAverage(8), |
| | | BorderColor = CSS_Color.PromptingColor2, |
| | | BorderWidth = 1, |
| | | BackgroundColor = (uint)(0xFF000000 + tempLight.GetRGBcolor(commandDic[FunctionAttributeKey.RGB])) |
| | | }; |
| | | rgbView.AddChidren(btnCurColor); |
| | | |
| | | //色盘的桌布控件(限制那个白色滑动球使用) |
| | | var framePickerBack = new FrameLayout(); |
| | | framePickerBack.Gravity = Gravity.CenterHorizontal; |
| | | framePickerBack.Y = Application.GetRealHeight(20); |
| | | framePickerBack.Width = Application.GetMinRealAverage(198); |
| | | framePickerBack.Height = Application.GetMinRealAverage(198); |
| | | rgbView.AddChidren(framePickerBack); |
| | | |
| | | var colorPicker = new ColorPicker() |
| | | { |
| | | ColorImagePath = "FunctionIcon/Light/ColorWheel.png", |
| | | }; |
| | | framePickerBack.AddChidren(colorPicker); |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | //白点控件 |
| | | var btnWhiteRound = new Button(); |
| | | btnWhiteRound.Width = Application.GetRealWidth(24); |
| | | btnWhiteRound.Height = Application.GetRealWidth(24); |
| | | btnWhiteRound.UnSelectedImagePath = "FunctionIcon/Light/ColorWheelTip.png"; |
| | | btnWhiteRound.Visible = false; |
| | | framePickerBack.AddChidren(btnWhiteRound); |
| | | |
| | | |
| | | //当前点击的【点】是否正确 |
| | | bool pointIsRight = false; |
| | | //圆的半径(考虑边界,需要设置它的半径比较小一点) |
| | | int circleR = colorPicker.Width / 2 - Application.GetRealWidth(12); |
| | | |
| | | |
| | | colorPicker.ColorChaged += (sender2, e2) => { |
| | | string rgbString = (e2[0] + "," + e2[1] + "," + e2[2]).ToString(); |
| | | commandDic[FunctionAttributeKey.RGB] = rgbString; |
| | | btnCurColor.BackgroundColor = (uint)(0xFF000000 + tempLight.GetRGBcolor(rgbString)); |
| | | }; |
| | | colorPicker.MouseDownEventHandler += (sender, e) => |
| | | { |
| | | pointIsRight = this.CheckPoint(circleR, colorPicker.Width / 2, colorPicker.Height / 2, (int)e.X, (int)e.Y); |
| | | if (pointIsRight == false) |
| | | { |
| | | //点的区域不是圆盘内 |
| | | return; |
| | | } |
| | | //显示白点 |
| | | btnWhiteRound.X = (int)e.X - btnWhiteRound.Width / 2; |
| | | btnWhiteRound.Y = (int)e.Y - btnWhiteRound.Height / 2; |
| | | if (btnWhiteRound.Visible == false) |
| | | { |
| | | btnWhiteRound.Visible = true; |
| | | } |
| | | }; |
| | | |
| | | colorPicker.MouseMoveEventHandler += (sender, e) => |
| | | { |
| | | //当鼠标点下事件处理 |
| | | colorPicker.MouseDownEventHandler(sender, e); |
| | | }; |
| | | |
| | | |
| | | #endregion |
| | | |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 检测点击点 |
| | | /// </summary> |
| | | /// <param name="circleR">圆的半径</param> |
| | | /// <param name="circleX">圆心X轴</param> |
| | | /// <param name="circleY">圆心Y轴</param> |
| | | /// <param name="pointX">点击点的X轴</param> |
| | | /// <param name="pointY">点击点的Y轴</param> |
| | | /// <returns></returns> |
| | | private bool CheckPoint(int circleR, int circleX, int circleY, int pointX, int pointY) |
| | | { |
| | | int dwidth = circleX - pointX; |
| | | if (dwidth < 0) { dwidth *= -1; } |
| | | |
| | | int dHeight = circleY - pointY; |
| | | if (dHeight < 0) { dHeight *= -1; } |
| | | |
| | | //根据三角函数,求三角形的斜边长 |
| | | int dlength = dwidth * dwidth + dHeight * dHeight; |
| | | //半径长度(不开方,所以是按平方算) |
| | | circleR *= circleR; |
| | | if (dlength < circleR) |
| | | { |
| | | //如果组成的三角形并没有长过半径,则代表还在圆内(不允许点边界) |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | } |
| | | |
| | | } |