xm
2020-12-14 d6fb0646531172f23648441c224cdcccd721b894
ZigbeeApp/Shared/Phone/SmartSound/Forms/SmartSoundContentForDevice.cs
New file
@@ -0,0 +1,502 @@
using System;
using System.Collections.Generic;
namespace Shared.Phone.UserCenter.SmartSound.Forms
{
    public class SmartSoundContentForDevice : EditorCommonForm
    {
        /// <summary>
        /// 当前选中的房间
        /// </summary>
        private SmartSound.Room CurrentRoom = null;
        private FrameLayout ContentLayout = null;
        private VerticalListControl listView = 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 SmartSoundContentForDevice(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);
            //添加确认按钮
            BottomClickButton bottomClickButton = new BottomClickButton();
            this.bodyFrameLayout.AddChidren(bottomClickButton);
            bottomClickButton.Text = "确认";
            bottomClickButton.ButtonClickEvent += (sender, e) =>
            {
                //保存数据
                base.CloseForm();
            };
        }
        /// <summary>
        /// 加载场景界面
        /// </summary>
        private void LoadSceneView()
        {
            try
            {
                //3.设备列表 ListView
                ContentLayout.RemoveAll();
                var tipLayout = new FrameLayout();
                ContentLayout.AddChidren(tipLayout);
                tipLayout.Visible = false;
                ShowNoFunctionTip(tipLayout);
                listView = new VerticalListControl();
                ContentLayout.AddChidren(listView);
                listView.Y = Application.GetRealHeight(40);
                listView.RemoveAll();
                for (int i = 0; i < CurrentRoom.SceneList.Count; i++)
                {
                    SmartSound.Scene scene = CurrentRoom.SceneList[i];
                    var roomRowLayout = new SceneRowLayout(this, scene);
                    listView.AddChidren(roomRowLayout);
                    roomRowLayout.InitControl();
                }
                if (listView.ChildrenCount == 0)
                {
                    tipLayout.Visible = true;
                }
                else
                {
                    tipLayout.Visible = false;
                }
                if (listView.ChildrenCount > 5)
                {
                    TextView textView = new TextView();
                    textView.Height = Application.GetRealHeight(127 * 3);
                    listView.AddChidren(textView);
                }
            }
            catch (Exception ex)
            {
                string eoor = ex.Message;
            }
        }
        private void LoadFunction()
        {
            try
            {
                //2.功能类型选择(灯光、遮阳、空调)
                //3.设备列表 ListView
                this.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);
                //添加 ListView
                listView = new VerticalListControl();
                ContentLayout.AddChidren(listView);
                listView.Y= tab_layout.Height;
                listView.Height=ContentLayout.Height- tab_layout.Height;
                Buttons.Clear();
                //添加功能项
                for (int i = 0; i < TabList.Count; i++)
                {
                    Button button = new Button();
                    tab_layout.AddChidren(button);
                    button.Width = 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();
                    };
                }
                RefreshButtonState();
                RefreshFunctionListView();
            }
            catch (Exception ex)
            {
                string error = ex.Message;
            }
        }
        private void RefreshFunctionListView()
        {
            try
            {
                listView.RemoveAll();
                switch (CurrentSelectIndex)
                {
                    case 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);
                                    listView.AddChidren(deviceRowLayout);
                                    deviceRowLayout.InitControl();
                                }
                            }
                        }
                        break;
                    case 1: // 窗帘
                        {
                            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);
                                    listView.AddChidren(deviceRowLayout);
                                    deviceRowLayout.InitControl();
                                }
                            }
                        }
                        break;
                    case 2: // 空调
                        {
                            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);
                                    listView.AddChidren(deviceRowLayout);
                                    deviceRowLayout.InitControl();
                                }
                            }
                        }
                        break;
                }
                if (listView.ChildrenCount > 5)
                {
                    TextView textView = new TextView();
                    textView.Height = Application.GetRealHeight(127 * 3);
                    listView.AddChidren(textView);
                }
                if (listView.ChildrenCount == 0)
                {
                    TipLayout.Visible = true;
                }
                else
                {
                    TipLayout.Visible = false;
                }
            }
            catch (Exception e)
            {
                string error = e.Message;
            }
        }
        /// <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;
            }
        }
        #region ■ 自定义场景选择控件_____________________
        /// <summary>
        /// 房间列表行
        /// </summary>
        private class SceneRowLayout : FrameRowControl
        {
            private SmartSoundContentForDevice smartSoundControlForDevice = null;
            private SmartSound.Scene scene = null;
            /// <summary>
            /// 房间名称
            /// </summary>
            private NormalViewControl btnName = null;
            private MostRightIconControl Right_icon = null;
            /// <summary>
            /// 房间列表行
            /// </summary>
            public SceneRowLayout(SmartSoundContentForDevice _smartSoundControlForDevice, SmartSound.Scene _scene)
            {
                this.smartSoundControlForDevice = _smartSoundControlForDevice;
                this.scene = _scene;
                this.UseClickStatu = false;
                this.BackgroundColor = UserCenterColor.Current.White;
                this.Height = Application.GetRealHeight(170);
            }
            /// <summary>
            /// 初始化控件
            /// </summary>
            public void InitControl()
            {
                //显示文本
                btnName = this.AddLeftCaption(string.Empty, 700);
                btnName.Height = Application.GetRealHeight(60);
                btnName.TextSize = 14;
                btnName.Y = Application.GetRealHeight(57);
                btnName.Text = scene.SceneName;
                Right_icon = this.AddMostRightEmptyIcon(58, 58);
                Right_icon.Gravity = Gravity.CenterVertical;
                this.ButtonClickEvent += (sender, e) =>
                {
                    scene.Checked = !scene.Checked;
                    RefreshRightIconState(scene.Checked);
                };
                RefreshRightIconState(scene.Checked);
                AddBottomLine();
            }
            private void RefreshRightIconState(bool bol = false)
            {
                try
                {
                    if (bol)
                    {
                        Right_icon.SelectedImagePath = "Item/ItemSelected.png";
                        Right_icon.UnSelectedImagePath = "Item/ItemSelected.png";
                    }
                    else
                    {
                        Right_icon.SelectedImagePath = "Item/ItemUnSelected.png";
                        Right_icon.UnSelectedImagePath = "Item/ItemUnSelected.png";
                    }
                }
                catch (Exception e)
                {
                    string error = e.Message;
                }
            }
        }
        #endregion
        #region ■ 自定灯光选择控件_____________________
        /// <summary>
        /// 房间列表行
        /// </summary>
        private class DeviceRowLayout : FrameRowControl
        {
            private SmartSoundContentForDevice smartSoundControlForDevice = null;
            private SmartSound.Device device = null;
            /// <summary>
            /// 房间名称
            /// </summary>
            private NormalViewControl btnName = null;
            private MostRightIconControl Right_icon = null;
            /// <summary>
            /// 房间列表行
            /// </summary>
            public DeviceRowLayout(SmartSoundContentForDevice _smartSoundControlForDevice, SmartSound.Device _device)
            {
                this.smartSoundControlForDevice = _smartSoundControlForDevice;
                this.device = _device;
                this.UseClickStatu = false;
                this.BackgroundColor = UserCenterColor.Current.White;
                this.Height = Application.GetRealHeight(170);
            }
            /// <summary>
            /// 初始化控件
            /// </summary>
            public void InitControl()
            {
                //显示文本
                btnName = this.AddLeftCaption(string.Empty, 700);
                btnName.Height = Application.GetRealHeight(60);
                btnName.TextSize = 14;
                btnName.Y = Application.GetRealHeight(57);
                btnName.Text = device.DeviceName;
                Right_icon = this.AddMostRightEmptyIcon(58, 58);
                Right_icon.Gravity = Gravity.CenterVertical;
                this.ButtonClickEvent += (sender, e) =>
                {
                    device.Checked = !device.Checked;
                    RefreshRightIconState(device.Checked);
                };
                RefreshRightIconState(device.Checked);
                AddBottomLine();
            }
            private void RefreshRightIconState(bool bol = false)
            {
                try
                {
                    if (bol)
                    {
                        Right_icon.SelectedImagePath = "Item/ItemSelected.png";
                        Right_icon.UnSelectedImagePath = "Item/ItemSelected.png";
                    }
                    else
                    {
                        Right_icon.SelectedImagePath = "Item/ItemUnSelected.png";
                        Right_icon.UnSelectedImagePath = "Item/ItemUnSelected.png";
                    }
                }
                catch (Exception e)
                {
                    string error = e.Message;
                }
            }
        }
        #endregion
    }
}