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; 
 | 
  
 | 
        } 
 | 
    } 
 | 
} 
 |