wxr
2023-06-05 753e67c3705dddb8e913bd853db151f94f81d600
HDL_ON/UI/UI2/FuntionControlView/OrderFunctionPage.cs
New file
@@ -0,0 +1,334 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using HDL_ON.DAL.Server;
using HDL_ON.DriverLayer;
using HDL_ON.Entity;
using HDL_ON.UI.CSS;
using Shared;
namespace HDL_ON.UI
{
    public class OrderFunctionPage : FrameLayout
    {
        #region 控件列表
        /// <summary>
        /// 当前窗体
        /// </summary>
        static FrameLayout bodyView;
        /// <summary>
        /// 功能列表集合显示区域
        /// </summary>
        static VerticalScrolViewLayout functionListView;
        /// <summary>
        /// 完成按钮
        /// </summary>
        Button btnConfrim;
        #endregion
        /// <summary>
        /// 回调刷新
        /// </summary>
        Action<Scene> backActon;
        List<Function> orderList = new List<Function>();
        List<int> orderNumber = new List<int>();
        public OrderFunctionPage()
        {
            bodyView = this;
        }
        public void LoadPage(List<Function> functions,Action action)
        {
            List<int> orderNumberAlreay = new List<int>();
            for (int i=0;i< functions.Count; i++)
            {
                if (functions[i].FunctionOrderNumber != 9999)
                {
                    orderNumberAlreay.Add(functions[i].FunctionOrderNumber);
                }
            }
            for (int i = 1; i < functions.Count + 1; i++)
            {
                if (!orderNumberAlreay.Contains(i))
                {
                    orderNumber.Add(i);
                }
            }
            bodyView.BackgroundColor = CSS_Color.BackgroundColor;
            new TopViewDiv(bodyView, Language.StringByID(StringId.Sort)).LoadTopView();
            functionListView = new VerticalScrolViewLayout()
            {
                Y = Application.GetRealHeight(84),
                Height = Application.GetRealHeight(640 - 100),
            };
            bodyView.AddChidren(functionListView);
            LoadRow(functions);
            #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,
                IsSelected = true
            };
            bottomView.AddChidren(btnConfrim);
            btnConfrim.MouseUpEventHandler = (sender, e) => {
                foreach(var function in functions)
                {
                    function.SaveFunctionFile();
                }
                    action?.Invoke();
                    this.RemoveFromParent();
            };
            #endregion
        }
        /// <summary>
        /// 显示的设备的总数
        /// </summary>
        int showCount = -1;
        /// <summary>
        /// 加载功能row
        /// </summary>
        /// <param name="lightList"></param>
        void LoadRow(List<Function> functions, bool isAppend = false)
        {
            var waitPage = new Loading();
            bodyView.AddChidren(waitPage);
            waitPage.Start("");
            new System.Threading.Thread(() =>
            {
                try
                {
                    Application.RunOnMainThread(() =>
                    {
                        if (!isAppend)
                        {
                            showCount = -1;
                            functionListView.RemoveAll();
                        }
                        for(var i =0;i<100;i++)
                        //foreach (var function in functions)
                        {
                            showCount++;
                            if (showCount >= functions.Count)
                            {
                                break;
                            }
                            var function = functions[showCount];
                            var functionDiv = new OrderFunctionRow()
                            {
                                Gravity = Gravity.CenterHorizontal,
                                Width = Application.GetRealWidth(343),
                                Height = Application.GetRealHeight(62),
                                Radius = (uint)Application.GetMinRealAverage(12),
                                BorderColor = 0x00FFFFFF,
                                BorderWidth = 1,
                                BackgroundColor = CSS_Color.MainBackgroundColor,
                            };
                            functionDiv.LoadDiv(function, orderNumber);
                            functionListView.AddChidren(functionDiv);
                            functionListView.AddChidren(new Button() { Height = Application.GetRealHeight(12) });
                        }
                        if (functions.Count > showCount)
                        {
                            var btnAppend = new Button()
                            {
                                Height = Application.GetRealHeight(60),
                                TextAlignment = TextAlignment.Center,
                                TextSize = CSS_FontSize.SubheadingFontSize,
                                TextColor = CSS_Color.FirstLevelTitleColor,
                                TextID = StringId.LoadMore,
                            };
                            functionListView.AddChidren(btnAppend);
                            btnAppend.MouseUpEventHandler = (sender, e) =>
                            {
                                btnAppend.RemoveFromParent();
                                LoadRow(functions, true);
                            };
                        }
                    });
                }
                catch (Exception ex)
                {
                    MainPage.Log("ShowFunctionRowError : " + ex.Message);
                }
                finally
                {
                    Application.RunOnMainThread(() =>
                    {
                        if (waitPage != null)
                        {
                            waitPage.RemoveFromParent();
                            waitPage = null;
                        }
                    });
                }
            })
            { IsBackground = true }.Start();
        }
    }
    public class OrderFunctionRow : FrameLayout
    {
        #region 区域控件
        static FrameLayout bodyDiv;
        /// <summary>
        /// 功能/场景icon
        /// </summary>
        Button btnIcon;
        /// <summary>
        /// 功能名称/场景名称
        /// </summary>
        Button btnName;
        /// <summary>
        /// 楼层信息显示按钮
        /// </summary>
        Button btnFromFloor;
        /// <summary>
        /// 选中按钮
        /// </summary>
        Button btnSelect;
        #endregion
        public OrderFunctionRow()
        {
            bodyDiv = this;
        }
        /// <summary>
        /// 加载控制卡片区域
        /// </summary>
        public void LoadDiv(Function function, List<int> orderNumber)
        {
            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),
                Text = function.FunctionOrderNumber == 9999 ? "" : function.FunctionOrderNumber.ToString(),
                TextColor = CSS_Color.FirstLevelTitleColor,
                TextSize = CSS_FontSize.SubheadingFontSize,
                TextAlignment = TextAlignment.Center,
            };
            bodyDiv.AddChidren(btnSelect);
            EventHandler<MouseEventArgs> eventHandler = (sender, e) => {
                lock (orderNumber)
                {
                    if (function.FunctionOrderNumber == 9999)
                    {
                        function.FunctionOrderNumber = orderNumber[0];
                        orderNumber.RemoveAt(0);
                        btnSelect.Text = function.FunctionOrderNumber.ToString();
                    }
                    else
                    {
                        if (!orderNumber.Contains(function.FunctionOrderNumber))
                        {
                            for (var i = 0; i < orderNumber.Count; i++)
                            {
                                if (orderNumber[i] > function.FunctionOrderNumber)
                                {
                                    orderNumber.Insert(i, function.FunctionOrderNumber);
                                    function.FunctionOrderNumber = 9999;
                                    break;
                                }
                            }
                        }
                        if (function.FunctionOrderNumber != 9999)
                        {
                            orderNumber.Add(function.FunctionOrderNumber);
                            function.FunctionOrderNumber = 9999;
                        }
                        btnSelect.Text = "";
                    }
                }
            };
            btnName.MouseUpEventHandler = eventHandler;
            btnSelect.MouseUpEventHandler = eventHandler;
            bodyDiv.MouseUpEventHandler = eventHandler;
        }
    }
}