From f3e65daca7978b21b5888f49b1bf35e1a6e5d4fd Mon Sep 17 00:00:00 2001
From: 黄学彪 <hxb@hdlchina.com.cn>
Date: 星期一, 13 七月 2020 12:33:31 +0800
Subject: [PATCH] 新版本

---
 ZigbeeApp/Shared/Phone/UserCenter/Device/Panel/PanelFangyueFreshAirBackLightSettionForm.cs |  329 +++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 224 insertions(+), 105 deletions(-)

diff --git a/ZigbeeApp/Shared/Phone/UserCenter/Device/Panel/PanelFangyueFreshAirBackLightSettionForm.cs b/ZigbeeApp/Shared/Phone/UserCenter/Device/Panel/PanelFangyueFreshAirBackLightSettionForm.cs
index 7e3c14c..6148494 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/Device/Panel/PanelFangyueFreshAirBackLightSettionForm.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/Device/Panel/PanelFangyueFreshAirBackLightSettionForm.cs
@@ -1,4 +1,5 @@
 锘縰sing System;
+using System.Collections.Generic;
 using System.Threading.Tasks;
 using ZigBee.Device;
 namespace Shared.Phone.UserCenter.DevicePanel
@@ -30,7 +31,28 @@
         /// 鎸夐敭鐨勯鑹叉暟鎹�
         /// </summary>
         private Panel.KeyColorData keyColorData = null;
-
+        /// <summary>
+        /// 閫夋嫨鐫$湢鏃堕棿鐨勪簨浠� value:绱㈠紩(浠�0寮�濮�)  鏂囨湰淇℃伅璇风敤Text鑾峰彇
+        /// </summary>
+        public Action<int> timeAction = null;
+        /// <summary>
+        /// 褰撳墠閫夋嫨鐨勫姛鑳界被鍨嬬储寮�
+        /// </summary>
+        private int nowSelectNo = 0;
+        /// <summary>
+        /// /// <summary>
+        /// 鐫$湢鏃堕棿鐨勫��
+        /// </summary>
+        /// </summary>
+        public string sleepTimeText
+        {
+            get { return btnSleepTime.Text; }
+            set { btnSleepTime.Text = value; }
+        }
+        /// <summary>
+        ///鐫$湢鏃堕棿 
+        /// </summary>
+        public NormalViewControl btnSleepTime = null;
         #endregion
 
         #region 鈻� 鍒濆鍖朹____________________________
@@ -78,10 +100,16 @@
 
                 //娣诲姞灞忓箷浜害绾у埆鎺т欢
                 this.AddScreenBrightnesLevelControl();
-                //娣诲姞鑳屽厜鐏寒搴︽帶浠躲�愭殏鏃朵笉闇�瑕侊紝鍙兘鍚庢湡鏂伴闈㈡澘鐨勮繖涓鑹茶琛ュ洖鏉ャ��
-                //this.AddBackLightControl();
-                //銆愭殏鏃朵笉闇�瑕侊紝鍙兘鍚庢湡鏂伴闈㈡澘鐨勮繖涓鑹茶琛ュ洖鏉ャ��
-                //this.FinishInitControl(listview, energyModeInfo.enable);
+
+                //鑾峰彇璁惧绫诲瀷鐨�
+                var deviceEnumInfo = Common.LocalDevice.Current.GetMyDeviceEnumInfo(new List<CommonDevice>() { panelDevice });
+                if (deviceEnumInfo.ConcreteType != Common.DeviceConcreteType.ButtonPanel_SimpleEnvironment)
+                {
+                    //娣诲姞闈㈡澘鐨勯鑹�
+                    this.AddColorControl();
+                }
+
+                this.FinishInitControl(listview, energyModeInfo.enable);
 
                 //淇濆瓨
                 var btnSave = new BottomClickButton();
@@ -146,6 +174,7 @@
 
             //杩涘害鏉�
             var seekBar1 = new SeekBarControl();
+            seekBar1.SeekBarPadding = 25;
             seekBar1.MaxValue = 5;
             seekBar1.ProgressBarColor = 0xff3e99f4;
             seekBar1.Y = Application.GetRealHeight(253);
@@ -186,8 +215,12 @@
                         btnLevel.Text = "5" + strRank;
                         break;
                 }
+                listview.ScrollEnabled = false;
             };
-
+            seekBar1.OnStopTrackingTouchEvent += (sender, e) =>
+            {
+                listview.ScrollEnabled = true;
+            };
             seekBar1.OnStopTrackingTouchEvent += (div, value) =>
             {
                 if (value == 0)
@@ -256,12 +289,12 @@
         }
         #endregion
 
-        #region 鈻� 鑳屽厜鐏寒搴________________________
+        #region 鈻� 鑳屽厜棰滆壊_________________________
 
         /// <summary>
-        /// 娣诲姞鑳屽厜鐏寒搴︽帶浠�
+        /// 娣诲姞鑳屽厜棰滆壊鎺т欢
         /// </summary>
-        private void AddBackLightControl()
+        private void AddColorControl()
         {
             var btnEspace = new NormalViewControl(600, 58, true);
             btnEspace.X = ControlCommonResourse.XXLeft;
@@ -270,125 +303,104 @@
             //鑳屾櫙
             var frameBack = new FrameLayout();
             frameBack.Y = Application.GetRealHeight(490);
-            frameBack.Height = Application.GetRealHeight(429);
+            frameBack.Height = Application.GetRealHeight(170);
             frameBack.BackgroundColor = UserCenterColor.Current.White;
             listview.AddChidren(frameBack);
 
-            //鑳屽厜鐏寒搴�
+            //鑳屽厜鐏鑹�
             var btnLevelView = new NormalViewControl(400, 60, true);
             btnLevelView.X = ControlCommonResourse.XXLeft;
             btnLevelView.Y = Application.GetRealHeight(54);
-            btnLevelView.TextID = R.MyInternationalizationString.uBacklightBrightness;
+            btnLevelView.Gravity = Gravity.CenterVertical;
+            btnLevelView.TextID = R.MyInternationalizationString.BackgroundLightColor;
             frameBack.AddChidren(btnLevelView);
-
-            //褰撳墠浜害
-            var btnProgressView1 = new NormalViewControl(200, 50, true);
-            btnProgressView1.X = ControlCommonResourse.XXLeft;
-            btnProgressView1.Y = Application.GetRealHeight(157);
-            btnProgressView1.TextSize = 12;
-            btnProgressView1.TextColor = UserCenterColor.Current.TextGrayColor1;
-            btnProgressView1.TextID = R.MyInternationalizationString.uNowLuminance;
-            frameBack.AddChidren(btnProgressView1);
-            var btnProgress1 = new NormalViewControl(200, 50, true);
-            btnProgress1.X = Application.GetRealWidth(222);
-            btnProgress1.Y = Application.GetRealHeight(157);
-            btnProgress1.TextSize = 12;
-            btnProgress1.TextColor = UserCenterColor.Current.TextGrayColor1;
-            btnProgress1.Text = "70%";
-            frameBack.AddChidren(btnProgress1);
-
-            //杩涘害鏉�
-            var seekBar1 = new SeekBarControl();
-            seekBar1.Y = Application.GetRealHeight(253);
-            frameBack.AddChidren(seekBar1);
-            seekBar1.ProgressChangedEvent += (div, value) =>
-            {
-                btnProgress1.Text = value + "%";
-            };
-            //seekBar1.Progress = linghtLevelInfo.panelBacklightLevel;
-
-            var btnTemp1 = new NormalViewControl(200, 50, true);
-            btnTemp1.X = ControlCommonResourse.XXLeft;
-            btnTemp1.Y = Application.GetRealHeight(322);
-            btnTemp1.TextSize = 12;
-            btnTemp1.TextColor = UserCenterColor.Current.TextGrayColor3;
-            btnTemp1.Text = "0%";
-            frameBack.AddChidren(btnTemp1);
-
-            var btnTemp2 = new NormalViewControl(200, 50, true);
-            btnTemp2.X = frameBack.Width - ControlCommonResourse.XXLeft - Application.GetRealWidth(200);
-            btnTemp2.Y = Application.GetRealHeight(322);
-            btnTemp2.TextAlignment = TextAlignment.CenterRight;
-            btnTemp2.TextSize = 12;
-            btnTemp2.TextColor = UserCenterColor.Current.TextGrayColor3;
-            btnTemp2.Text = "100%";
-            frameBack.AddChidren(btnTemp2);
 
             var frameColor = new FrameLayoutStatuControl();
             frameColor.UseClickStatu = false;
             frameColor.Width = Application.GetRealHeight(262);
             frameColor.Height = this.GetPictrueRealSize(79);
-            frameColor.Y = Application.GetRealHeight(26);
+            frameColor.Gravity = Gravity.CenterVertical;
             frameColor.X = frameBack.Width - ControlCommonResourse.XXLeft - Application.GetRealHeight(262);
             frameBack.AddChidren(frameColor);
+
             //棰滆壊
-            var btnColorView = new NormalViewControl(Application.GetRealHeight(110), this.GetPictrueRealSize(50), false);
+            var btnColorView = new NormalViewControl(Application.GetRealHeight(110), this.GetPictrueRealSize(49), false);
             btnColorView.Gravity = Gravity.CenterVertical;
             btnColorView.TextAlignment = TextAlignment.CenterRight;
             btnColorView.TextSize = 12;
             btnColorView.Y = Application.GetRealHeight(5);
             btnColorView.TextColor = UserCenterColor.Current.TextGrayColor1;
             btnColorView.TextID = R.MyInternationalizationString.uColor;
-            frameColor.AddChidren(btnColorView, ChidrenBindMode.BindEventOnly);
+            frameColor.AddChidren(btnColorView, ChidrenBindMode.BindEvent);
 
-            int R1 = Convert.ToInt32("d8", 16);
-            int G1 = Convert.ToInt32("95", 16);
-            int B1 = Convert.ToInt32("e3", 16);
+            int R1 = Convert.ToInt32(this.keyColorData.OpenColorR, 16);
+            int G1 = Convert.ToInt32(this.keyColorData.OpenColorG, 16);
+            int B1 = Convert.ToInt32(this.keyColorData.OpenColorB, 16);
             uint backColor = this.GetColorByRGB((byte)R1, (byte)G1, (byte)B1);
 
-            //棰滆壊澶栨
-            var btnColorLine = new NormalViewControl(this.GetPictrueRealSize(79), this.GetPictrueRealSize(79), false);
+            //棰滆壊澶栨 
+            var btnColorLine = new FrameLayoutStatuControl();
+            btnColorLine.Width = Application.GetRealHeight(79);
+            btnColorLine.Height = this.GetPictrueRealSize(79);
             btnColorLine.X = btnColorView.Right + Application.GetRealHeight(18);
             btnColorLine.Radius = (uint)this.GetPictrueRealSize(79) / 2;
             btnColorLine.BorderWidth = 1;
-            btnColorLine.BorderColor = 0xff666666;
-            frameColor.AddChidren(btnColorLine, ChidrenBindMode.BindEventOnly);
+            btnColorLine.BorderColor = 0xffcccccc;
+            frameColor.AddChidren(btnColorLine, ChidrenBindMode.BindEvent);
 
             var btnColor = new NormalViewControl(this.GetPictrueRealSize(69), this.GetPictrueRealSize(69), false);
-            btnColor.Y = Application.GetRealHeight(5);
-            btnColor.X = btnColorView.Right + Application.GetRealHeight(23);
+            btnColor.Gravity = Gravity.Center;
             btnColor.Radius = (uint)this.GetPictrueRealSize(69) / 2;
-            btnColor.BackgroundColor = UserCenterColor.Current.ErrorColor;
-            frameColor.AddChidren(btnColor, ChidrenBindMode.BindEventOnly);
-
-            //鍙樻洿婊戝姩鏉$殑棰滆壊
-            seekBar1.ProgressBarColor = backColor;
+            btnColor.BackgroundColor = backColor;
+            btnColorLine.AddChidren(btnColor, ChidrenBindMode.BindEvent);
 
             var btnRight = new NormalViewControl(this.GetPictrueRealSize(58), this.GetPictrueRealSize(58), false);
             btnRight.UnSelectedImagePath = "Item/RightNext.png";
             btnRight.Y = Application.GetRealHeight(5);
             btnRight.X = frameColor.Width - this.GetPictrueRealSize(58);
-            frameColor.AddChidren(btnRight, ChidrenBindMode.BindEventOnly);
+            frameColor.AddChidren(btnRight, ChidrenBindMode.BindEvent);
             btnRight.Y += this.GetPictrueRealSize(8);
 
             frameColor.ButtonClickEvent += (sender, e) =>
             {
-                var form = new PanelColorSelectForm();
-                form.AddForm(R1, G1, B1);
-                form.FinishSelectColorEvent += (Rcolor, Gcolor, Bcolor) =>
-                {
-                    R1 = Rcolor;
-                    G1 = Gcolor;
-                    B1 = Bcolor;
+                PanelColor(btnColor, R1, G1, B1);
+            };
+            btnColorView.ButtonClickEvent += (sender, e) =>
+            {
+                PanelColor(btnColor, R1, G1, B1);
+            };
+            btnColor.ButtonClickEvent += (sender, e) =>
+            {
+                PanelColor(btnColor, R1, G1, B1);
+            };
+            btnColorLine.ButtonClickEvent += (sender, e) =>
+            {
+                PanelColor(btnColor, R1, G1, B1);
+            };
+            btnRight.ButtonClickEvent += (sender, e) =>
+            {
+                PanelColor(btnColor, R1, G1, B1);
+            };
+        }
 
-                    //this.keyColorData.CloseColorR = Convert.ToString(Rcolor, 16);
-                    //this.keyColorData.CloseColorG = Convert.ToString(Gcolor, 16);
-                    //this.keyColorData.CloseColorB = Convert.ToString(Bcolor, 16);
+        /// <summary>
+        /// PanelColorSelectForm
+        /// </summary>
+        private void PanelColor(NormalViewControl btnColor, int R1, int G1, int B1)
+        {
+            var form = new PanelColorSelectForm();
+            form.AddForm(R1, G1, B1);
+            form.FinishSelectColorEvent += (Rcolor, Gcolor, Bcolor) =>
+            {
+                R1 = Rcolor;
+                G1 = Gcolor;
+                B1 = Bcolor;
 
-                    btnColor.BackgroundColor = this.GetColorByRGB((byte)Rcolor, (byte)Gcolor, (byte)Bcolor);
-                    //鍙樻洿婊戝姩鏉$殑棰滆壊
-                    seekBar1.ProgressBarColor = btnColor.BackgroundColor;
-                };
+                this.keyColorData.OpenColorR = Convert.ToString(Rcolor, 16);
+                this.keyColorData.OpenColorG = Convert.ToString(Gcolor, 16);
+                this.keyColorData.OpenColorB = Convert.ToString(Bcolor, 16);
+
+                btnColor.BackgroundColor = this.GetColorByRGB((byte)Rcolor, (byte)Gcolor, (byte)Bcolor);
             };
         }
 
@@ -417,7 +429,7 @@
                 btnSwitch.IsSelected = !btnSwitch.IsSelected;
                 energyModeInfo.enable = btnSwitch.IsSelected;
                 //灞曞紑鎴栬�呯缉灏忕殑楂樺害
-                var value = Application.GetRealHeight(443);
+                var value = Application.GetRealHeight(614);
                 if (btnSwitch.IsSelected == true)
                 {
                     frameBack.Height += value;
@@ -426,7 +438,6 @@
                 {
                     frameBack.Height -= value;
                 }
-                //瀹瑰櫒琛ュ厖
                 this.FinishInitControl(listview, energyModeInfo.enable);
             };
             if (energyModeInfo.enable == true)
@@ -454,12 +465,18 @@
             var seekBar1 = new SeekBarControl();
             seekBar1.Y = Application.GetRealHeight(253);
             seekBar1.ProgressBarColor = 0xff3e99f4;
+            seekBar1.SeekBarPadding = 25;
             frameBack.AddChidren(seekBar1);
             seekBar1.ProgressChangedEvent += (div, value) =>
             {
                 btnProgress1.Text = value + "%";
                 //鏁版嵁鍙樻洿
                 energyModeInfo.level = value;
+                listview.ScrollEnabled = false;
+            };
+            seekBar1.OnStopTrackingTouchEvent += (sender, e) =>
+            {
+                listview.ScrollEnabled = true;
             };
             seekBar1.Progress = energyModeInfo.level;
 
@@ -483,11 +500,21 @@
             if (energyModeInfo.enable == true)
             {
                 //灞曞紑鎴栬�呯缉灏忕殑楂樺害
-                var value = Application.GetRealHeight(443);
+                var value = Application.GetRealHeight(614);
                 frameBack.Height += value;
             }
             //娣诲姞鎺ヨ繎鎰熷簲
             this.AddProximitySensorsRow(frameBack);
+            //搴曠嚎  
+            var btnLine = new NormalViewControl(965, 5, true);
+            btnLine.Height = 1;
+            btnLine.X = Application.GetRealWidth(52);
+            btnLine.Y = Application.GetRealHeight(484 + 127);
+            btnLine.BackgroundColor = UserCenterColor.Current.ButtomLine;
+            frameBack.AddChidren(btnLine);
+
+            //娣诲姞鐫$湢鏃堕棿
+            this.AddSleepTimeRow(frameBack);
         }
 
         #endregion
@@ -524,6 +551,100 @@
         }
         #endregion
 
+        #region 鈻� 鐫$湢鏃堕棿___________________________
+
+        /// <summary>
+        /// 鐫$湢鏃堕棿琛�
+        /// </summary>
+        private void AddSleepTimeRow(FrameRowControl frameRowControl)
+        {
+            //鐫$湢鏃堕棿琛�
+            var frameBack = new FrameRowControl();
+            frameBack.BackgroundColor = UserCenterColor.Current.White;
+            frameBack.UseClickStatu = false;
+            frameBack.Y = Application.GetRealHeight(784 - 170);
+            frameBack.Height = Application.GetRealHeight(170);
+            frameRowControl.AddChidren(frameBack);
+
+            //鐫$湢鏃堕棿
+            frameBack.AddLeftCaption(Language.StringByID(R.MyInternationalizationString.SleepTime), 400);
+            //鍙崇澶�
+            frameBack.AddRightArrow();
+            btnSleepTime = new NormalViewControl(700, true);
+            switch (energyModeInfo.time)
+            {
+                case 15:
+                    btnSleepTime.Text = "15s";
+                    nowSelectNo = 0;
+                    break;
+                case 60:
+                    btnSleepTime.Text = "1min";
+                    nowSelectNo = 1;
+                    break;
+                case 300:
+                    btnSleepTime.Text = "5min";
+                    nowSelectNo = 2;
+                    break;
+            }
+            frameBack.AddMostRightView(this.sleepTimeText, 700);
+
+            timeAction = null;
+            timeAction += (nowSelectNo) =>
+            {
+                switch (nowSelectNo)
+                {
+                    case 0:
+                        energyModeInfo.time = 15;
+                        break;
+                    case 1:
+                        energyModeInfo.time = 60;
+                        break;
+                    case 2:
+                        energyModeInfo.time = 300;
+                        break;
+                }
+                AddSleepTimeRow(frameRowControl);
+            };
+            frameBack.ButtonClickEvent += (sender, e) =>
+            {
+                this.ShowSelectDeviceSleepTimeListForm();
+            };
+        }
+
+        #region 鈻� 鏄剧ず閫夋嫨璁惧鐫$湢鏃堕棿_______________ 
+        /// <summary>
+        /// 鏄剧ず閫夋嫨璁惧鐫$湢鏃堕棿鐨勭晫闈�
+        /// </summary>
+        public void ShowSelectDeviceSleepTimeListForm()
+        {
+            //鏄剧ず鍒楄〃
+            var listText = new List<string>();
+            listText.Add("15s");
+            listText.Add("1min");
+            listText.Add("5min");
+            //鏍囬:閫夋嫨鍔熻兘绫诲瀷
+            var title = Language.StringByID(R.MyInternationalizationString.SleepTime);
+
+            var form = new BottomItemSelectForm();
+            form.CancelCallEvent = false;//鍏佽鍙栨秷
+            form.AddForm(title, listText, null, nowSelectNo);
+            form.FinishSelectEvent += (selectNo) =>
+            {
+                if (selectNo == nowSelectNo)
+                {
+                    //閫夋嫨鐨勬槸鐩稿悓鐨�
+                    return;
+                }
+                //-1:閫夋嫨鍙栨秷
+                this.sleepTimeText = selectNo == -1 ? string.Empty : listText[selectNo];
+                nowSelectNo = selectNo;
+                //璋冪敤鍥炶皟鍑芥暟
+                this.timeAction?.Invoke(nowSelectNo);
+            };
+        }
+        #endregion
+        #endregion
+
         #region 鈻� 鑾峰彇鍒濆鏁版嵁_______________________
 
         /// <summary>
@@ -535,7 +656,7 @@
             //寮�鍚繘搴︽潯
             this.ShowProgressBar();
             //浜害璋冭妭(浠栦滑璇撮殢渚挎嬁涓�璺洖璺氨琛屼簡)
-            linghtLevelInfo = await HdlDevicePanelLogic.Current.GetDeviceLightSettion(panelDevice);
+            linghtLevelInfo = HdlDevicePanelLogic.Current.GetDeviceLightSettion(panelDevice);
             if (linghtLevelInfo == null)
             {
                 //鍏抽棴杩涘害鏉�
@@ -551,14 +672,14 @@
                 return false;
             }
             //鑺傝兘妯″紡(浠栦滑璇撮殢渚挎嬁涓�璺洖璺氨琛屼簡)
-            energyModeInfo = await HdlDevicePanelLogic.Current.GetDeviceEnergyConservationMode(panelDevice);
+            energyModeInfo = HdlDevicePanelLogic.Current.GetDeviceEnergyConservationMode(panelDevice);
             if (energyModeInfo == null)
             {
                 //鍏抽棴杩涘害鏉�
                 this.CloseProgressBar(ShowReLoadMode.YES);
                 return false;
             }
-            keyColorData = await HdlDevicePanelLogic.Current.GetPanelEpointColorInfo(panelDevice);
+            keyColorData = HdlDevicePanelLogic.Current.GetPanelColorInfo(panelDevice);
             if (this.keyColorData == null)
             {
                 //鍏抽棴杩涘害鏉�
@@ -583,9 +704,8 @@
             this.ShowProgressBar();
 
             //鑺傝兘妯″紡淇敼(浠栦滑璇撮殢渚夸竴涓洖璺氨琛�)
-            //璁惧鍚屼簨璇存柊椋庨潰鏉块粯璁�60绉掓椂闂达紝杩欐牱鎺ヨ繎鎰熷簲鍔熻兘鎵嶅悎鐞�
-            energyModeInfo.time = 60;
-            var result = await HdlDevicePanelLogic.Current.SetDeviceEnergyConservationMode(panelDevice, energyModeInfo.enable, energyModeInfo.time, energyModeInfo.level);
+
+            var result = HdlDevicePanelLogic.Current.SetDeviceEnergyConservationMode(panelDevice, energyModeInfo.enable, energyModeInfo.time, energyModeInfo.level);
             if (result == false)
             {
                 this.CloseProgressBar();
@@ -600,24 +720,23 @@
             }
 
             //浜害璋冭妭鏇存敼(浠栦滑璇撮殢渚夸竴涓洖璺氨琛�)
-            result = await HdlDevicePanelLogic.Current.SetDeviceLightSettion(panelDevice, linghtLevelInfo.panelDirectionsLevel, linghtLevelInfo.panelBacklightLevel);
+            result = HdlDevicePanelLogic.Current.SetDeviceLightSettion(panelDevice, linghtLevelInfo.panelDirectionsLevel, linghtLevelInfo.panelBacklightLevel);
             if (result == false)
             {
                 this.CloseProgressBar();
                 return;
             }
 
-            //璁剧疆鎸夐敭闈㈡澘鎸囧畾绔偣鐨勩�愭寚绀虹伅寮�鍏抽鑹层�戠殑淇℃伅
-            //result = await HdlDevicePanelLogic.Current.SetPanelEpointColorInfo(panelDevice, this.keyColorData);
-            //this.CloseProgressBar();
-            //if (result == false)
-            //{
-            //    return;
-            //}
+            //璁剧疆鎸夐敭闈㈡澘棰滆壊鐨勪俊鎭�
+            result = HdlDevicePanelLogic.Current.SetPanelColorInfo(panelDevice, this.keyColorData);
+            this.CloseProgressBar();
+            if (result == false)
+            {
+                return;
+            }
             //鍏抽棴鑷韩
             this.CloseForm();
         }
-
         #endregion
 
         #region 鈻� 琛ュ厖瀹瑰櫒___________________________ 

--
Gitblit v1.8.0