wxr
2022-09-26 418b0d0a4002bc06ba3a55d1809fe46043f06c09
HDL_ON/UI/UI2/FuntionControlView/Acst/AcstSubPage.cs
@@ -1,95 +1,299 @@
using System;
using System.Collections.Generic;
using HDL_ON.DriverLayer;
using HDL_ON.Entity;
using HDL_ON.UI.CSS;
using Shared;
namespace HDL_ON.UI
{
    public class AcstSubPage : FrameLayout
    {
        FrameLayout bodyView;
        static AcstSubPage bodyView;
        Button btnTempValues;
        Button btnHumiValues;
        Button btnSetTempValues;
        DiyImageSeekBar tempBar;
        Button btnPowerControl;
        Function function;
        uint curColor;
        string imageFolder = "blue";
        public AcstSubPage()
        public static void UpdateStatus(Function temp)
        {
            if(bodyView == null)
            {
                return;
            }
            Application.RunOnMainThread(() => {
                bodyView.btnTempValues.Text = temp.GetAttrState(AcstSub_AttrEnum.room_temp.ToString());
                bodyView.btnHumiValues.Text = temp.GetAttrState(AcstSub_AttrEnum.room_humidity.ToString());
                bodyView.btnSetTempValues.Width = bodyView.btnSetTempValues.GetTextWidth() + Application.GetRealWidth(10);
                bodyView.tempBar.Progress = Convert.ToInt32(temp.GetAttrState(FunctionAttributeKey.SetTemp)) + 16;
                if(temp.trait_on_off.curValue.ToString() == "on")
                {
                    bodyView.btnPowerControl.IsSelected = true;
                    bodyView.tempBar.IsOffline = false;
                }
                else
                {
                    bodyView.btnPowerControl.IsSelected = false;
                    bodyView.tempBar.IsOffline = true;
                }
            });
        }
        public AcstSubPage(Function temp, string path)
        {
            function = temp;
            imageFolder = path;
            switch (imageFolder)
            {
                case "blue":
                    curColor = CSS.CSS_Color.MainColor;
                    break;
                case "orange":
                    curColor = 0xFFFFB848;
                    break;
                case "purple":
                    curColor = 0xFF9175F3;
                    break;
            }
            bodyView = this;
        }
        public void LoadPage()
        {
            //一个背景图片
            //var framePic = new FrameLayout();
            //framePic.Y = Application.GetRealHeight(120);
            //framePic.Width = Application.GetRealWidth(303);
            //framePic.Height = Application.GetRealHeight(175);
            //framePic.Gravity = Gravity.CenterHorizontal;
            //framePic.BackgroundImagePath = $"FunctionIcon/Acst/{imageFolder}/TempAndHumiBack.png";
            //this.FrameWhiteCentet1.AddChidren(framePic);
            new TopViewDiv(bodyView, function.GetRoomListName()).LoadTopView();
            ////室内湿度 的容器(为了重新计算坐标使用)
            //int frameWidth = framePic.Width / 2 - this.GetPictrueRealSize(21);
            //var frameHumidity = new FrameLayout();
            //frameHumidity.X = this.GetPictrueRealSize(21);
            //frameHumidity.Y = this.GetPictrueRealSize(12);
            //frameHumidity.Width = frameWidth;
            //frameHumidity.Height = frameWidth;
            //framePic.AddChidren(frameHumidity);
            ////室内湿度值
            //this.btnHumidity = new NormalViewControl(20, this.GetPicChidrenTextHeight(30), false);
            //btnHumidity.Y = this.GetPictrueRealSize(39);
            //btnHumidity.TextSize = 30;
            //btnHumidity.TextColor = CSS_Color.FirstLevelTitleColor;
            //btnHumidity.TextAlignment = TextAlignment.TopCenter;
            //frameHumidity.AddChidren(btnHumidity);
            ////%
            //this.btnHumidityUnit = new NormalViewControl(10, 10, true);
            //btnHumidityUnit.Y = btnHumidity.Y + this.GetPictrueRealSize(8);
            //btnHumidityUnit.TextColor = CSS_Color.TextualColor;
            //btnHumidityUnit.Text = "%";
            //btnHumidityUnit.TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel;
            //btnHumidityUnit.Width = btnHumidityUnit.GetRealWidthByText();
            //frameHumidity.AddChidren(btnHumidityUnit);
            ////室内湿度
            //var btnHumidityView = new NormalViewControl(frameHumidity.Width, this.GetPicChidrenTextHeight(18), false);
            //btnHumidityView.Y = btnHumidity.Bottom + this.GetPictrueRealSize(8);
            //btnHumidityView.TextAlignment = TextAlignment.Center;
            //btnHumidityView.TextColor = CSS_Color.TextualColor;
            //btnHumidityView.TextSize = CSS_FontSize.PromptFontSize_FirstLevel;
            //btnHumidityView.TextID = StringId.IndoorHumidity;
            //frameHumidity.AddChidren(btnHumidityView);
            var contentView = new FrameLayout()
            {
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealHeight(79),
                Width = Application.GetRealWidth(343),
                Height = Application.GetRealHeight(570),
                BackgroundColor = CSS.CSS_Color.MainBackgroundColor,
                Radius = (uint)Application.GetRealWidth(6),
            };
            bodyView.AddChidren(contentView);
            ////室内温度 的容器(为了重新计算坐标使用)
            //var frameTemperature = new FrameLayout();
            //frameTemperature.Y = frameHumidity.Y;
            //frameTemperature.X = frameHumidity.Right;
            //frameTemperature.Width = frameWidth;
            //frameTemperature.Height = frameWidth;
            //framePic.AddChidren(frameTemperature);
            ////室内温度值
            //this.btnTemperature = new NormalViewControl(20, this.GetPicChidrenTextHeight(30), false);
            //btnTemperature.Y = btnHumidity.Y;
            //btnTemperature.TextSize = 30;
            //btnTemperature.TextColor = CSS_Color.FirstLevelTitleColor;
            //btnTemperature.TextAlignment = TextAlignment.TopCenter;
            //btnTemperature.GetRealWidthByText();
            //frameTemperature.AddChidren(btnTemperature);
            ////℃
            //this.btnTemperatureUnit = new NormalViewControl(10, 10, true);
            //btnTemperatureUnit.Y = btnTemperature.Y + this.GetPictrueRealSize(8);
            //btnTemperatureUnit.TextColor = CSS_Color.TextualColor;
            //btnTemperatureUnit.Text = "℃";
            //btnTemperatureUnit.TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel;
            //btnTemperatureUnit.Width = btnTemperatureUnit.GetRealWidthByText();
            //frameTemperature.AddChidren(btnTemperatureUnit);
            ////室内温度
            //var btnTemperatureView = new NormalViewControl(frameTemperature.Width, this.GetPicChidrenTextHeight(18), false);
            //btnTemperatureView.Y = btnTemperature.Bottom + this.GetPictrueRealSize(8);
            //btnTemperatureView.TextAlignment = TextAlignment.Center;
            //btnTemperatureView.TextColor = CSS_Color.TextualColor;
            //btnTemperatureView.TextSize = CSS_FontSize.PromptFontSize_FirstLevel;
            //btnTemperatureView.TextID = StringId.IndoorTemp;
            //frameTemperature.AddChidren(btnTemperatureView);
            #region 温湿度数据
            var tempHumiView = new FrameLayout()
            {
                Y = Application.GetRealWidth(58),
                Gravity = Gravity.CenterHorizontal,
                Width = Application.GetRealWidth(303),
                Height = Application.GetRealWidth(175),
                BackgroundImagePath = $"FunctionIcon/Acst/{imageFolder}/TempAndHumiBack.png"
            };
            contentView.AddChidren(tempHumiView);
            var tempValuesView = new FrameLayout()
            {
                X = Application.GetRealWidth(21),
                Y = Application.GetRealWidth(17),
                Width = Application.GetRealWidth(130),
                Height = Application.GetRealWidth(132),
            };
            tempHumiView.AddChidren(tempValuesView);
            btnTempValues = new Button()
            {
                Y = Application.GetRealWidth(45),
                Height = Application.GetRealWidth(35),
                IsBold = true,
                TextSize = 30,
                TextColor = CSS.CSS_Color.FirstLevelTitleColor,
                TextAlignment = TextAlignment.TopRight,
                Text = "---",
            };
            btnTempValues.Text = function.GetAttrState(AcstSub_AttrEnum.room_temp.ToString());
            btnTempValues.Width = btnTempValues.GetTextWidth();
            btnTempValues.Gravity = Gravity.CenterHorizontal;
            tempValuesView.AddChidren(btnTempValues);
            var btnTempValuesUint = new Button()
            {
                X = btnTempValues.Right,
                Y = Application.GetRealWidth(48),
                TextAlignment = TextAlignment.TopLeft,
                Width = Application.GetRealWidth(30),
                Height = Application.GetRealWidth(30),
                TextSize = 10,
                TextColor = CSS.CSS_Color.FirstLevelTitleColor,
                Text = "°C"
            };
            tempValuesView.AddChidren(btnTempValuesUint);
            var humiValuesView = new FrameLayout()
            {
                X = Application.GetRealWidth(130+21),
                Y = Application.GetRealWidth(17),
                Width = Application.GetRealWidth(130),
                Height = Application.GetRealWidth(132),
            };
            tempHumiView.AddChidren(humiValuesView);
            btnHumiValues = new Button()
            {
                Y = Application.GetRealWidth(45),
                Height = Application.GetRealWidth(35),
                IsBold = true,
                TextSize = 30,
                TextColor = CSS.CSS_Color.FirstLevelTitleColor,
                Text = "---",
                TextAlignment = TextAlignment.TopRight,
            };
            btnHumiValues.Text = function.GetAttrState(AcstSub_AttrEnum.room_humidity.ToString());
            btnHumiValues.Width = btnTempValues.GetTextWidth();
            btnHumiValues.Gravity = Gravity.CenterHorizontal;
            humiValuesView.AddChidren(btnHumiValues);
            var btnHumiValuesUint = new Button()
            {
                X = btnTempValues.Right,
                Y = Application.GetRealWidth(48),
                TextAlignment = TextAlignment.TopLeft,
                Width = Application.GetRealWidth(30),
                Height = Application.GetRealWidth(30),
                TextSize = 10,
                TextColor = CSS.CSS_Color.FirstLevelTitleColor,
                Text = "%"
            };
            humiValuesView.AddChidren(btnHumiValuesUint);
            EventHandler<MouseEventArgs> eventHandler = (sender, e) => {
                var page = new AcstSubHistoryPage(function);
                MainPage.BasePageView.AddChidren(page);
                page.LoadPage();
                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
            };
            var btnClick = new Button();
            tempHumiView.AddChidren(btnClick);
            btnClick.MouseUpEventHandler = eventHandler;
            #endregion
            btnSetTempValues = new Button()
            {
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealHeight(260),
                Width = Application.GetRealWidth(71),
                Height = Application.GetRealHeight(90),
                TextAlignment = TextAlignment.TopRight,
                TextColor = CSS.CSS_Color.FirstLevelTitleColor,
                IsBold = true,
                TextSize = 60,
                Text = function.GetAttrState(AcstSub_AttrEnum.set_temp.ToString(), "--")
            };
            contentView.AddChidren(btnSetTempValues);
            var btnSetTempUnit = new Button()
            {
                X = btnSetTempValues.Right + Application.GetRealWidth(3),
                Y = Application.GetRealHeight(267),
                Width = Application.GetRealWidth(30),
                Height = Application.GetRealHeight(50),
                TextSize = 23,
                TextColor = CSS.CSS_Color.FirstLevelTitleColor,
                Text = "°C",
                TextAlignment = TextAlignment.TopLeft,
            };
            contentView.AddChidren(btnSetTempUnit);
            var btnMinValuesText = new Button()
            {
                X = Application.GetRealWidth(35),
                Y = Application.GetRealHeight(388),
                Width = Application.GetRealWidth(30),
                Height = Application.GetRealHeight(52),
                Text = "16",
                TextAlignment = TextAlignment.CenterLeft,
                TextColor = CSS_Color.PromptingColor1,
                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
            };
            contentView.AddChidren(btnMinValuesText);
            tempBar = new DiyImageSeekBar()
            {
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealHeight(378),
                Width = Application.GetRealWidth(238),
                Height = Application.GetRealHeight(72),
                SeekBarViewHeight = Application.GetRealHeight(14),
                ThumbImagePath = "FunctionIcon/Acst/ThumbImage.png",
                ThumbImageHeight = Application.GetRealHeight(51),
                ProgressBarColor = function.trait_on_off.curValue.ToString() == "on" ? curColor : CSS_Color.DividingLineColor,
                MaxValue = 14,
                Progress = Convert.ToInt32(function.GetAttrState(FunctionAttributeKey.SetTemp)) + 16,
                SeekBarPadding = Application.GetRealWidth(20),
                IsProgressTextShow = false,
                ProgressChangeDelayTime = 0,
                IsOffline = function.trait_on_off.curValue.ToString() == "off",
            };
            contentView.AddChidren(tempBar);
            tempBar.OnProgressChangedEvent = (sender, e) => {
                btnSetTempValues.Text = (e + 16).ToString();
            };
            tempBar.OnStopTrackingTouchEvent = (sender, e) => {
                new System.Threading.Thread(() => {
                    var d = new Dictionary<string, string>();
                    d.Add(FunctionAttributeKey.SetTemp, e.ToString());
                    Control.Ins.SendWriteCommand(function, d);
                })
                { IsBackground = true }.Start();
            };
            var btnMaxValuesText = new Button()
            {
                X = tempBar.Right + Application.GetRealWidth(10),
                Y = btnMinValuesText.Y,
                Width = Application.GetRealWidth(45),
                Height = Application.GetRealHeight(52),
                Text = "30",
                TextAlignment = TextAlignment.CenterLeft,
                TextColor = CSS_Color.PromptingColor1,
                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
            };
            contentView.AddChidren(btnMaxValuesText);
            btnPowerControl = new Button()
            {
                Y = Application.GetRealHeight(496),
                Gravity = Gravity.CenterHorizontal,
                Width = Application.GetRealWidth(46),
                Height = Application.GetRealWidth(46),
                UnSelectedImagePath = "FunctionIcon/Acst/grey/PowerOffIcon.png",
                SelectedImagePath = $"FunctionIcon/Acst/{imageFolder}/PowerIcon.png",
                TextAlignment = TextAlignment.Center,
                IsSelected = function.trait_on_off.curValue.ToString() == "on"
            };
            contentView.AddChidren(btnPowerControl);
            btnPowerControl.MouseUpEventHandler = (sender, e) => {
                btnPowerControl.IsSelected = !btnPowerControl.IsSelected;
                new System.Threading.Thread(() => {
                    Dictionary<string, string> d = new Dictionary<string, string>();
                    d.Add("onoff", btnPowerControl.IsSelected ? "on" : "off");
                    Control.Ins.SendWriteCommand(function, d);
                })
                { IsBackground = true }.Start();
            };
        }
    }
}