New file |
| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using Shared.Phone.UserCenter.SmartSound.Util; |
| | | |
| | | namespace Shared.Phone.UserCenter.SmartSound.Forms |
| | | { |
| | | public class SmartSoundContentForDeviceChange : EditorCommonForm |
| | | { |
| | | |
| | | /// <summary> |
| | | /// 当前选中的房间 |
| | | /// </summary> |
| | | private SmartSound.Room CurrentRoom = null; |
| | | |
| | | private FrameLayout ContentLayout = null; |
| | | |
| | | private FrameLayout DeviceListViewFrameLayout = null; |
| | | /// <summary> |
| | | /// 场景 listView |
| | | /// </summary> |
| | | private VerticalListControl SceneListView = null; |
| | | /// <summary> |
| | | /// 设备 listView |
| | | /// </summary> |
| | | private VerticalListControl DeviceListView = null; |
| | | /// <summary> |
| | | /// 没有数据的时候,提示用 |
| | | /// </summary> |
| | | private FrameLayout TipLayout = null; |
| | | |
| | | private List<string> TabList = new List<string>() |
| | | { |
| | | Language.StringByID(R.MyInternationalizationString.uLight), |
| | | Language.StringByID(R.MyInternationalizationString.uDeviceBelongId100), |
| | | Language.StringByID(R.MyInternationalizationString.AC) |
| | | }; |
| | | |
| | | private int CurrentSelectIndex = 0; |
| | | private int imageWith = 683; |
| | | private int imageHeight = 392; |
| | | |
| | | /// <summary> |
| | | /// 选择房间中的设备 |
| | | /// </summary> |
| | | /// <param name="_room"> 当前房间</param> |
| | | public SmartSoundContentForDeviceChange(SmartSound.Room _room) |
| | | { |
| | | this.CurrentRoom = _room; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 画面显示(底层会固定调用此方法,借以完成画面创建) |
| | | /// </summary> |
| | | public void ShowForm() |
| | | { |
| | | //设置标题信息 |
| | | base.SetTitleText(CurrentRoom.RoomName); |
| | | |
| | | //初始化中部控件 |
| | | this.InitMiddleFrame(); |
| | | } |
| | | |
| | | private void InitMiddleFrame() |
| | | { |
| | | //1.场景、功能导航条 |
| | | var switchContr = new SceneFunctionSwitchControl();
|
| | | this.bodyFrameLayout.AddChidren(switchContr);
|
| | | switchContr.Gravity = Gravity.CenterVertical;
|
| | | switchContr.Width = Application.GetRealWidth(650);
|
| | | switchContr.Y = Application.GetRealHeight(40); |
| | | |
| | | ContentLayout = new FrameLayout(); |
| | | this.bodyFrameLayout.AddChidren(ContentLayout); |
| | | ContentLayout.Height = this.bodyFrameLayout.Height - switchContr.Height - Application.GetRealHeight(40); |
| | | ContentLayout.Y = switchContr.Height + Application.GetRealHeight(40); |
| | | |
| | | var listTitle = new List<string>();
|
| | | listTitle.Add(Language.StringByID(R.MyInternationalizationString.uScence));
|
| | | listTitle.Add(Language.StringByID(R.MyInternationalizationString.uFunction)); |
| | | |
| | | //设置初始值 |
| | | switchContr.SetDefultIndex(0); |
| | | |
| | | //选择事件 |
| | | switchContr.SelectTabEvent += (selectIndex) =>
|
| | | { |
| | | //刷新bodyView |
| | | if (selectIndex == 0) |
| | | {
|
| | | LoadSceneView();
|
| | | } |
| | | else |
| | | {
|
| | | LoadFunction();
|
| | | }
|
| | | }; |
| | | |
| | | //开始初始化 |
| | | switchContr.InitControl(listTitle); |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 加载场景界面 |
| | | /// </summary> |
| | | private void LoadSceneView() |
| | | { |
| | | try |
| | | { |
| | | //3.设备列表 ListView |
| | | ContentLayout.RemoveAll(); |
| | | |
| | | var tipLayout = new FrameLayout(); |
| | | ContentLayout.AddChidren(tipLayout); |
| | | tipLayout.Visible = false; |
| | | ShowNoFunctionTip(tipLayout); |
| | | |
| | | SceneListView = new VerticalListControl(); |
| | | ContentLayout.AddChidren(SceneListView); |
| | | SceneListView.Y = Application.GetRealHeight(40); |
| | | SceneListView.RemoveAll(); |
| | | |
| | | for (int i = 0; i < CurrentRoom.SceneList.Count; i++) |
| | | { |
| | | SmartSound.Scene scene = CurrentRoom.SceneList[i]; |
| | | var roomRowLayout = new SceneRowLayout(this, scene, i); |
| | | SceneListView.AddChidren(roomRowLayout); |
| | | roomRowLayout.InitControl(); |
| | | } |
| | | |
| | | if (SceneListView.ChildrenCount > 5) |
| | | { |
| | | TextView textView = new TextView(); |
| | | textView.Height = Application.GetRealHeight(127 * 3); |
| | | SceneListView.AddChidren(textView); |
| | | } |
| | | |
| | | if (SceneListView.ChildrenCount == 0) |
| | | { |
| | | tipLayout.Visible = true; |
| | | } |
| | | else |
| | | { |
| | | tipLayout.Visible = false; |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | string eoor = ex.Message; |
| | | } |
| | | } |
| | | |
| | | private void LoadFunction() |
| | | { |
| | | try |
| | | { |
| | | |
| | | ContentLayout.RemoveAll(); |
| | | |
| | | FrameLayout tab_layout = new FrameLayout(); |
| | | ContentLayout.AddChidren(tab_layout); |
| | | tab_layout.Height = Application.GetRealHeight(170); |
| | | tab_layout.Y = 0; |
| | | |
| | | //添加 ListView 提示 |
| | | TipLayout = new FrameLayout(); |
| | | ContentLayout.AddChidren(TipLayout); |
| | | TipLayout.Visible = false; |
| | | TipLayout.Y = tab_layout.Height; |
| | | ShowNoFunctionTip(TipLayout); |
| | | |
| | | Buttons.Clear(); |
| | | |
| | | //添加功能项 |
| | | for (int i = 0; i < TabList.Count; i++) |
| | | { |
| | | Button button = new Button(); |
| | | tab_layout.AddChidren(button); |
| | | button.Width = Application.GetRealWidth(250); |
| | | button.Height= Application.GetRealWidth(250); |
| | | button.Text = TabList[i]; |
| | | button.X = ControlCommonResourse.XXLeft / 2 + i * button.Width; |
| | | button.AddTag("Index", i); |
| | | Buttons.Add(button); |
| | | |
| | | button.MouseUpEventHandler += (sender, e) => |
| | | { |
| | | Button btn = sender as Button; |
| | | CurrentSelectIndex = (int)btn.GetTagByKey("Index"); |
| | | RefreshButtonState(); |
| | | RefreshFunctionListView(); |
| | | }; |
| | | } |
| | | |
| | | //添加 ListView |
| | | DeviceListViewFrameLayout = new FrameLayout(); |
| | | ContentLayout.AddChidren(DeviceListViewFrameLayout); |
| | | DeviceListViewFrameLayout.Y = tab_layout.Height; |
| | | DeviceListViewFrameLayout.Height = ContentLayout.Height - tab_layout.Height; |
| | | |
| | | RefreshButtonState(); |
| | | RefreshFunctionListView(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | string error = ex.Message; |
| | | } |
| | | } |
| | | |
| | | private void RefreshFunctionListView() |
| | | { |
| | | try |
| | | { |
| | | |
| | | DeviceListViewFrameLayout.RemoveAll(); |
| | | |
| | | DeviceListView = new VerticalListControl(); |
| | | DeviceListViewFrameLayout.AddChidren(DeviceListView); |
| | | DeviceListView.Height = DeviceListViewFrameLayout.Height; |
| | | DeviceListView.RemoveAll(); |
| | | |
| | | switch (CurrentSelectIndex) |
| | | { |
| | | case 0:// 灯光 |
| | | { |
| | | int n = 0; |
| | | for (int i = 0; i < CurrentRoom.DeviceList.Count; i++) |
| | | { |
| | | SmartSound.Device device = CurrentRoom.DeviceList[i]; |
| | | //灯光 |
| | | if (device.DeviceType == 1 || device.DeviceType == 2 || device.DeviceType == 3) |
| | | { |
| | | var deviceRowLayout = new DeviceRowLayout(this, device, n); |
| | | DeviceListView.AddChidren(deviceRowLayout); |
| | | deviceRowLayout.InitControl(); |
| | | n++; |
| | | } |
| | | } |
| | | } |
| | | break; |
| | | case 1: // 窗帘 |
| | | { |
| | | int n = 0; |
| | | for (int i = 0; i < CurrentRoom.DeviceList.Count; i++) |
| | | { |
| | | SmartSound.Device device = CurrentRoom.DeviceList[i]; |
| | | // |
| | | if (device.DeviceType == 4 || device.DeviceType == 5 || device.DeviceType == 6) |
| | | { |
| | | var deviceRowLayout = new DeviceRowLayout(this, device, n); |
| | | DeviceListView.AddChidren(deviceRowLayout); |
| | | deviceRowLayout.InitControl(); |
| | | n++; |
| | | } |
| | | } |
| | | } |
| | | break; |
| | | case 2: // 空调 |
| | | { |
| | | int n = 0; |
| | | for (int i = 0; i < CurrentRoom.DeviceList.Count; i++) |
| | | { |
| | | SmartSound.Device device = CurrentRoom.DeviceList[i]; |
| | | // |
| | | if (device.DeviceType == 7) |
| | | { |
| | | var deviceRowLayout = new DeviceRowLayout(this, device, n); |
| | | DeviceListView.AddChidren(deviceRowLayout); |
| | | deviceRowLayout.InitControl(); |
| | | n++; |
| | | } |
| | | } |
| | | } |
| | | break; |
| | | } |
| | | |
| | | if (DeviceListView.ChildrenCount > 5) |
| | | { |
| | | TextView textView = new TextView(); |
| | | textView.Height = Application.GetRealHeight(127 * 3); |
| | | DeviceListView.AddChidren(textView); |
| | | } |
| | | |
| | | if (DeviceListView.ChildrenCount == 0) |
| | | { |
| | | TipLayout.Visible = true; |
| | | } |
| | | else |
| | | { |
| | | TipLayout.Visible = false; |
| | | } |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | string error = e.Message; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 修改场景昵称 |
| | | /// </summary> |
| | | /// <param name="scene"></param> |
| | | /// <param name="sceneRowLayout"></param> |
| | | private void ShowSetNicknameDialog(SmartSound.Scene scene, SceneRowLayout sceneRowLayout) |
| | | { |
| | | //生成一个弹窗画面 |
| | | var dialogForm = new DialogInputControl(); |
| | | //编辑住宅 |
| | | dialogForm.SetTitleText("自定义昵称"); |
| | | //请输入住宅名称 |
| | | dialogForm.SetTipText("请输入昵称"); |
| | | dialogForm.Text = scene.NicksName; |
| | | |
| | | //按下确认按钮 |
| | | dialogForm.ComfirmClickEvent += (async (textValue) => |
| | | { |
| | | scene.NicksName = textValue; |
| | | string remark = scene.SceneName; |
| | | if (scene.NicksName.Trim() != string.Empty) |
| | | { |
| | | remark += "(" + scene.NicksName + ")"; |
| | | } |
| | | sceneRowLayout.btnCaption.Text = remark; |
| | | string json = await postBatchEdit(); |
| | | //画面关闭 |
| | | dialogForm.CloseDialog(); |
| | | }); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 修改设备昵称 |
| | | /// </summary> |
| | | /// <param name="device"></param> |
| | | /// <param name="deviceRowLayout"></param> |
| | | private void ShowSetNicknameDialog(SmartSound.Device device, DeviceRowLayout deviceRowLayout) |
| | | { |
| | | //生成一个弹窗画面 |
| | | var dialogForm = new DialogInputControl(); |
| | | //编辑住宅 |
| | | dialogForm.SetTitleText("自定义昵称"); |
| | | //请输入住宅名称 |
| | | dialogForm.SetTipText("请输入昵称"); |
| | | dialogForm.Text = device.NicksName; |
| | | |
| | | //按下确认按钮 |
| | | dialogForm.ComfirmClickEvent += (async (textValue) => |
| | | { |
| | | device.NicksName = textValue; |
| | | string remark = device.DeviceName; |
| | | if (device.NicksName.Trim() != string.Empty) |
| | | { |
| | | remark += "(" + device.NicksName + ")"; |
| | | } |
| | | deviceRowLayout.btnCaption.Text = remark; |
| | | |
| | | string json = await postBatchEdit(); |
| | | |
| | | //画面关闭 |
| | | dialogForm.CloseDialog(); |
| | | }); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 场景删除 |
| | | /// </summary> |
| | | private void ShowSceneDelectDialog(SmartSound.Scene scene) |
| | | { |
| | | this.ShowMassage(ShowMsgType.Confirm, "确认删除该控制内容?", () => |
| | | { |
| | | HdlThreadLogic.Current.RunThread(async () => |
| | | { |
| | | this.ShowProgressBar(); |
| | | CurrentRoom.SceneList.Remove(scene); |
| | | string json = await postBatchEdit(); |
| | | |
| | | HdlThreadLogic.Current.RunMainInThread(() => |
| | | { |
| | | LoadSceneView(); |
| | | this.CloseProgressBar(); |
| | | }); |
| | | }); |
| | | |
| | | }, Language.StringByID(R.MyInternationalizationString.OkMsg)); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 设备删除 |
| | | /// </summary> |
| | | private void ShowDeviceDelectDialog(SmartSound.Device device) |
| | | { |
| | | this.ShowMassage(ShowMsgType.Confirm, "确认删除该控制内容?", () => |
| | | { |
| | | |
| | | HdlThreadLogic.Current.RunThread(async () => |
| | | { |
| | | this.ShowProgressBar(); |
| | | CurrentRoom.DeviceList.Remove(device); |
| | | string json = await postBatchEdit(); |
| | | |
| | | HdlThreadLogic.Current.RunMainInThread(() => |
| | | { |
| | | RefreshFunctionListView(); |
| | | this.CloseProgressBar(); |
| | | }); |
| | | }); |
| | | |
| | | }, Language.StringByID(R.MyInternationalizationString.OkMsg)); |
| | | } |
| | | |
| | | /// <summary>
|
| | | /// 提示没有功能
|
| | | /// </summary>
|
| | | private void ShowNoFunctionTip(FrameLayout layout, string tip = "没有数据哦")
|
| | | {
|
| | | var noFunction = new Button()
|
| | | {
|
| | | Y = Application.GetRealHeight(320),
|
| | | Width = Application.GetMinRealAverage(757),
|
| | | Height = Application.GetMinRealAverage(435),
|
| | | UnSelectedImagePath = "Item/NoFunction.png",
|
| | | Gravity = Gravity.CenterHorizontal
|
| | | };
|
| | | layout.AddChidren(noFunction);
|
| | |
|
| | | var noFunctionTip = new Button()
|
| | | {
|
| | | Y = noFunction.Bottom + Application.GetRealHeight(32),
|
| | | Height = Application.GetRealHeight(200),
|
| | | Width = Application.GetRealWidth(700),
|
| | | Gravity = Gravity.CenterHorizontal,
|
| | | Text = tip,
|
| | | TextColor = UserCenterColor.Current.TextGrayColor1, |
| | | TextAlignment = TextAlignment.Center,
|
| | | IsMoreLines = true
|
| | | };
|
| | | layout.AddChidren(noFunctionTip);
|
| | | } |
| | | |
| | | //为了方便更新状态,存起来 |
| | | private List<Button> Buttons = new List<Button>(); |
| | | private void RefreshButtonState() |
| | | { |
| | | try |
| | | { |
| | | for (int i = 0; i < Buttons.Count; i++) |
| | | { |
| | | Button btn = Buttons[i]; |
| | | if (i == CurrentSelectIndex) |
| | | { |
| | | btn.SelectedImagePath = "Item/RoomIconBackgroundSelected.png"; |
| | | btn.UnSelectedImagePath = "Item/RoomIconBackgroundSelected.png"; |
| | | btn.TextColor = UserCenterColor.Current.White; |
| | | } |
| | | else |
| | | { |
| | | btn.SelectedImagePath = "Item/RoomIconBackground.png"; |
| | | btn.UnSelectedImagePath = "Item/RoomIconBackground.png"; |
| | | btn.TextColor = UserCenterColor.Current.TextGrayColor1; |
| | | } |
| | | } |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | string error = e.Message; |
| | | } |
| | | } |
| | | |
| | | private async Task<string> postBatchEdit() |
| | | { |
| | | // 提交数据至服务器 |
| | | string url = "https://developer.hdlcontrol.com/zigbeespeakerservice/BatchEdit"; |
| | | string json = Newtonsoft.Json.JsonConvert.SerializeObject(SmartSound.getInstantiate()); |
| | | string response_str = MyHttpWebResponse.PostWebRequest(url, json, Encoding.UTF8); |
| | | return response_str; |
| | | } |
| | | |
| | | #region ■ 自定义场景选择控件_____________________
|
| | | |
| | | /// <summary>
|
| | | /// 场景列表行
|
| | | /// </summary>
|
| | | private class SceneRowLayout : RowLayoutControl
|
| | | { |
| | | private SmartSoundContentForDeviceChange smartSoundContentForDeviceChange = null; |
| | | |
| | | private SmartSound.Scene scene = null; |
| | | /// <summary> |
| | | /// 删除按钮 |
| | | /// </summary> |
| | | public NormalViewControl btnDelect = null; |
| | | public NormalViewControl btnCaption = null; |
| | | private int Index = 0; |
| | | |
| | | public SceneRowLayout(SmartSoundContentForDeviceChange _smartSoundContentForDeviceChange, SmartSound.Scene _scene, int _index) |
| | | { |
| | | smartSoundContentForDeviceChange = _smartSoundContentForDeviceChange; |
| | | scene = _scene; |
| | | Index = _index; |
| | | } |
| | | |
| | | /// <summary>
|
| | | /// 初始化内部控件
|
| | | /// </summary>
|
| | | public void InitControl() |
| | | { |
| | | this.BackgroundColor = UserCenterColor.Current.White; |
| | | this.Height = Application.GetRealHeight(175); |
| | | string remark = scene.SceneName; |
| | | if (scene.NicksName.Trim() != string.Empty) |
| | | { |
| | | remark += " (" + scene.NicksName + ")"; |
| | | } |
| | | btnCaption = frameTable.AddLeftCaption(remark, 2000); |
| | | |
| | | var nicknameIcon = frameTable.AddRightArrow();//58 |
| | | nicknameIcon.TextSize = 14; |
| | | |
| | | nicknameIcon.SelectedImagePath = "SmartSound/Nickname.png"; |
| | | nicknameIcon.UnSelectedImagePath = "SmartSound/Nickname.png"; |
| | | nicknameIcon.AddTag("obj", scene); |
| | | nicknameIcon.ButtonClickEvent += (sender, e) => |
| | | { |
| | | // 添加昵称 |
| | | var btn = sender as IconViewControl; |
| | | SmartSound.Scene tmpScene = (SmartSound.Scene)btn.GetTagByKey("obj"); |
| | | smartSoundContentForDeviceChange.ShowSetNicknameDialog(tmpScene, this); |
| | | }; |
| | | |
| | | //底线 |
| | | frameTable.AddBottomLine(); |
| | | |
| | | btnDelect = base.AddDeleteControl(); |
| | | btnDelect.Text = Language.StringByID(R.MyInternationalizationString.Delete); |
| | | btnDelect.ButtonClickEvent += (sender, e) => |
| | | { |
| | | //删除场景 |
| | | smartSoundContentForDeviceChange.ShowSceneDelectDialog(scene); |
| | | }; |
| | | }
|
| | | } |
| | | #endregion |
| | | |
| | | #region ■ 自定灯光选择控件_____________________
|
| | | |
| | | /// <summary>
|
| | | /// 房间列表行
|
| | | /// </summary>
|
| | | private class DeviceRowLayout : RowLayoutControl
|
| | | { |
| | | private SmartSoundContentForDeviceChange smartSoundContentForDeviceChange = null; |
| | | |
| | | private SmartSound.Device device = null; |
| | | /// <summary> |
| | | /// 删除按钮 |
| | | /// </summary> |
| | | public NormalViewControl btnDelect = null; |
| | | public NormalViewControl btnCaption = null; |
| | | private int Index = 0; |
| | | |
| | | public DeviceRowLayout(SmartSoundContentForDeviceChange _smartSoundContentForDeviceChange, SmartSound.Device _device, int _index) |
| | | { |
| | | smartSoundContentForDeviceChange = _smartSoundContentForDeviceChange; |
| | | device = _device; |
| | | Index = _index; |
| | | } |
| | | |
| | | /// <summary>
|
| | | /// 初始化内部控件
|
| | | /// </summary>
|
| | | public void InitControl() |
| | | { |
| | | this.BackgroundColor = UserCenterColor.Current.White; |
| | | this.Height = Application.GetRealHeight(175); |
| | | string remark = device.DeviceName; |
| | | if (device.NicksName.Trim() != string.Empty) |
| | | { |
| | | remark += " (" + device.NicksName + ")"; |
| | | } |
| | | btnCaption = frameTable.AddLeftCaption(remark, 2000); |
| | | |
| | | var nicknameIcon = frameTable.AddRightArrow();//58 |
| | | nicknameIcon.TextSize = 14; |
| | | |
| | | nicknameIcon.SelectedImagePath = "SmartSound/Nickname.png"; |
| | | nicknameIcon.UnSelectedImagePath = "SmartSound/Nickname.png"; |
| | | nicknameIcon.AddTag("obj", device); |
| | | nicknameIcon.ButtonClickEvent += (sender, e) => |
| | | { |
| | | var btn = sender as IconViewControl; |
| | | SmartSound.Device tmpDevice = (SmartSound.Device)btn.GetTagByKey("obj"); |
| | | smartSoundContentForDeviceChange.ShowSetNicknameDialog(tmpDevice, this); |
| | | }; |
| | | |
| | | //底线 |
| | | frameTable.AddBottomLine(); |
| | | |
| | | btnDelect = base.AddDeleteControl(); |
| | | btnDelect.Text = "删除"; |
| | | btnDelect.ButtonClickEvent += (sender, e) => |
| | | { |
| | | smartSoundContentForDeviceChange.ShowDeviceDelectDialog(device); |
| | | }; |
| | | }
|
| | | }
|
| | | #endregion |
| | | } |
| | | } |