using System; using HDL_ON.UI.UI2.Intelligence.Automation.LogicView; using Shared; using System.Collections.Generic; using System.Text; namespace HDL_ON.UI.UI2.PersonalCenter.PirDevice { public class BrandList : FrameLayout { public BrandList() { Tag = "PirView"; } /// /// /// /// 表示该列表元素A-Z字母筛选显示出来 public void Show(ListbrandList,List list,string spk) { var frameLayout = new FrameLayout { BackgroundColor = CSS.CSS_Color.viewTop, Height = Application.GetRealHeight(112), Width = Application.GetRealWidth(375), }; this.AddChidren(frameLayout); var topNameBtn = new Button { TextSize = TextSize.text18, TextColor = CSS.CSS_Color.textColor, Width = Application.GetRealWidth(TextSize.view375 - 60 - 60), Height = Application.GetRealHeight(25), Y = Application.GetRealHeight(30), X = Application.GetRealWidth(60), Text = "请选择品牌", }; frameLayout.AddChidren(topNameBtn); var backBtn = new Button { Width = Application.GetRealWidth(12), Height = Application.GetRealWidth(20), X = Application.GetRealWidth(TextSize.left16), Y = Application.GetRealHeight(32), UnSelectedImagePath = "LogicIcon/back.png", }; frameLayout.AddChidren(backBtn); var clickBackBtn = new Button { Width = Application.GetRealWidth(12+16+20), Height = Application.GetRealWidth(20+20), Y = Application.GetRealHeight(32), }; frameLayout.AddChidren(clickBackBtn); clickBackBtn.MouseUpEventHandler += (sen, e) => { this.RemoveFromParent(); }; var editText = new EditText { Width = Application.GetRealWidth(343), Height = Application.GetRealWidth(28), X = Application.GetRealWidth(TextSize.left16), Y = Application.GetRealHeight(76), BackgroundColor = CSS.CSS_Color.view, TextColor = CSS.CSS_Color.textColor, TextAlignment = TextAlignment.Center, }; frameLayout.AddChidren(editText); var fram = new FrameLayout { Y = Application.GetRealHeight(112), Height = Application.GetRealHeight(667 - 112), Width = Application.GetRealWidth(375), BackgroundColor = CSS.CSS_Color.view, }; this.AddChidren(fram); if (list == null) { list = new List(); } var list1 = GetDateList(list); var vv = new VerticalScrolViewLayout(); fram.AddChidren(vv); var listStr = new List(); listStr.AddRange(list1); editText.TextChangeEventHandler += (view, strView) => { listStr.Clear(); for (int i = 0; i < list1.Count; i++) { var s = list1[i]; if (s.Contains(strView)) { listStr.Add(s); } } RefreshLayout(vv, brandList, listStr,spk); }; #region A-Z var a_zFra = new FrameLayout { Y = Application.GetRealHeight(46), X = Application.GetRealWidth(362 - 6), Height = Application.GetRealHeight(351), Width = Application.GetRealWidth(10 + 6), }; fram.AddChidren(a_zFra); var list2 = GetList(); for (int i = 0; i < list2.Count; i++) { var a_zBtn = new Button { Padding = new Padding(0, 6, 0, 0), Y = Application.GetRealHeight(i * 13), Width = Application.GetRealWidth(16), Height = Application.GetRealHeight(10), Text = list2[i], TextSize = TextSize.text10, TextColor = CSS.CSS_Color.textConfirmColor, Tag = list2[i], }; a_zFra.AddChidren(a_zBtn); a_zBtn.MouseUpEventHandler += (sender, e) => { try { //找到索引值 var index = listStr.IndexOf(a_zBtn.Tag.ToString()); if (index != -1) { vv.ScrollToViewIndex(index); } else { if (a_zBtn.Tag.ToString() == "#") { vv.ScrollToViewIndex(0); } } } catch { } }; } #endregion RefreshLayout(vv, brandList, list1,spk); } /// /// 更新列表Viev /// /// 父控件 /// 显示列表 private void RefreshLayout(VerticalScrolViewLayout vv, List brandList, List list,string spk) { vv.RemoveAll(); foreach (var str in list) { var rowLayout = new RowLayout { LineColor = CSS.CSS_Color.view }; var textName = new Button { TextSize = TextSize.text16, TextColor = CSS.CSS_Color.textColor, Width = Application.GetRealWidth(300), Height = Application.GetRealHeight(22), X = Application.GetRealWidth(16), Gravity = Gravity.CenterVertical, TextAlignment = TextAlignment.CenterLeft, Text = str, }; var clickBtn = new Button { Tag = str, Width = Application.GetRealWidth(350), }; if (Exist(str)) { //因为字母没有点击事件 rowLayout.Height = Application.GetRealHeight(24); rowLayout.BackgroundColor = CSS.CSS_Color.viewTop; textName.TextSize = TextSize.text12; rowLayout.AddChidren(textName); } else { rowLayout.Height = Application.GetRealHeight(44); rowLayout.AddChidren(textName); rowLayout.AddChidren(clickBtn); } vv.AddChidren(rowLayout); clickBtn.MouseUpEventHandler += (sen, e) => { var name = clickBtn.Tag.ToString(); var brandObj = brandList.Find((c) => c.brandName == name); if (brandObj==null) { return; } GetLibraryList(brandObj.id, (libraryList) => { Matching matching = new Matching(); MainPage.BasePageView.AddChidren(matching); matching.Show(libraryList, spk); MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1; }); }; } } /// /// 读取品牌红外码库列表 /// private void GetLibraryList(string id, Action> actionBrand) { List libraryList = new List(); PirSend.GetDeviceTypesList(this, (responsePackNew) => { if (responsePackNew != null && responsePackNew.Code == "0" && responsePackNew.Data.ToString() != "") { //清空之前数据 libraryList.Clear(); var jArray = Newtonsoft.Json.Linq.JArray.Parse(responsePackNew.Data.ToString()); for (int a = 0; a < jArray.Count; a++) { var jay = jArray[a]; var str = Newtonsoft.Json.JsonConvert.SerializeObject(jay); var library = Newtonsoft.Json.JsonConvert.DeserializeObject(str); if (library != null) { if (libraryList.Count<20) { libraryList.Add(library); } } } actionBrand(libraryList); } else { Method method = new Method(); method.ErrorShow(responsePackNew,""); } }, id, "品牌红外码库列表"); } /// /// 列表是否包含该值(true=包含,false=不包含) /// /// /// private bool Exist(string str) { if (GetList().Contains(str) || "主流品牌" == str) { return true; } else { return false; } } /// /// 获取显示列表 /// /// private List GetDateList(List mList) { var list = new List(); //获取A-Z字母列表 var a_zList = GetList(false); //遍历A-Z字母列表 for (int i = 0; i < a_zList.Count; i++) { var zimu = a_zList[i]; //遍历字符串列表 for (int a = 0; a < mList.Count; a++) { var str = mList[a]; //提取字符串第一位 string s = str.Substring(0, 1); //返回字符串第一位首字母(大写) var a_z = GetCharSpellCode(s); //判断是否同字母 if (zimu == a_z) { //判断列表是否存在字母 if (!list.Contains(zimu)) { //添加字母 list.Add(zimu); } //添加首字同一个字母的数据 list.Add(str); } } } return list; } /// /// 获取A-Z字母列表 /// /// private List GetList(bool value = true) { var list = new List(); if (value) { list.Add("#"); } for (int j = 65; j <= 90; j++) { char c = (char)j; string s = c.ToString(); list.Add(s); } return list; } /// /// 获取汉字首字母 /// /// /// private string GetCharSpellCode(string textValue) { long iCnChar; byte[] ZW = Encoding.GetEncoding("gb2312").GetBytes(textValue); //如果是字母,则直接返回 if (ZW.Length == 1) { return textValue.ToUpper(); } else { // get the array of byte from the single char int i1 = (short)(ZW[0]); int i2 = (short)(ZW[1]); iCnChar = i1 * 256 + i2; } // iCnChar match the constant if ((iCnChar >= 45217) && (iCnChar <= 45252)) { return "A"; } else if ((iCnChar >= 45253) && (iCnChar <= 45760)) { return "B"; } else if ((iCnChar >= 45761) && (iCnChar <= 46317)) { return "C"; } else if ((iCnChar >= 46318) && (iCnChar <= 46825)) { return "D"; } else if ((iCnChar >= 46826) && (iCnChar <= 47009)) { return "E"; } else if ((iCnChar >= 47010) && (iCnChar <= 47296)) { return "F"; } else if ((iCnChar >= 47297) && (iCnChar <= 47613)) { return "G"; } else if ((iCnChar >= 47614) && (iCnChar <= 48118)) { return "H"; } else if ((iCnChar >= 48119) && (iCnChar <= 49061)) { return "J"; } else if ((iCnChar >= 49062) && (iCnChar <= 49323)) { return "K"; } else if ((iCnChar >= 49324) && (iCnChar <= 49895)) { return "L"; } else if ((iCnChar >= 49896) && (iCnChar <= 50370)) { return "M"; } else if ((iCnChar >= 50371) && (iCnChar <= 50613)) { return "N"; } else if ((iCnChar >= 50614) && (iCnChar <= 50621)) { return "O"; } else if ((iCnChar >= 50622) && (iCnChar <= 50905)) { return "P"; } else if ((iCnChar >= 50906) && (iCnChar <= 51386)) { return "Q"; } else if ((iCnChar >= 51387) && (iCnChar <= 51445)) { return "R"; } else if ((iCnChar >= 51446) && (iCnChar <= 52217)) { return "S"; } else if ((iCnChar >= 52218) && (iCnChar <= 52697)) { return "T"; } else if ((iCnChar >= 52698) && (iCnChar <= 52979)) { return "W"; } else if ((iCnChar >= 52980) && (iCnChar <= 53640)) { return "X"; } else if ((iCnChar >= 53689) && (iCnChar <= 54480)) { return "Y"; } else if ((iCnChar >= 54481) && (iCnChar <= 55289)) { return "Z"; } else return ("ZZ"); } } }