using DrawGraph; using HelperDB; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Drawing; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; namespace DrawGraph { [JsonObject(MemberSerialization.OptOut)] [Serializable] public class PackObjManager { private string outFlat = "||"; private string msgStr = ""; private float x = 0f; private float y = 0f; [NonSerialized] private ZedGraphControl zedControl = null; private List listPob = new List(); private string name = ""; private string className = ""; private bool isLoading = true; public int ControlIndex = 0; [NoCreatControlAttributs] public float X { get { return this.x; } set { this.x = value; bool flag = !this.isLoading; if (flag) { this.DrawPackObj(true); } } } [NoCreatControlAttributs] public float Y { get { return this.y; } set { this.y = value; bool flag = !this.isLoading; if (flag) { this.DrawPackObj(true); } } } public string Name { get { return this.name; } set { this.name = value; } } [JsonIgnore] public string MsgStr { get { return this.msgStr; } set { this.msgStr = value; } } [JsonIgnore] public List ListPob { get { bool flag = this.listPob.Count > 0; if (flag) { this.listPob.Sort(new Comparison(this.ComparePackObjByOrder)); } return this.listPob; } set { this.listPob = value; } } public string ClassName { get { return this.className; } set { this.className = value; } } public int GetControlIndex() { return ++this.ControlIndex; } public PackObjManager() { this.ControlIndex = 0; this.ListPob.Clear(); } public PackObjManager(ZedGraphControl _zedControl) { this.ControlIndex = 0; this.ListPob.Clear(); this.zedControl = _zedControl; } public bool RemovePob(PackObjBase pod) { bool result = false; foreach (PackObjBase current in this.ListPob) { bool flag = current.PackName == pod.PackName; if (flag) { result = this.ListPob.Remove(current); break; } } return result; } public int indexPob(PackObjBase pod) { int result; for (int i = 0; i < this.ListPob.Count; i++) { bool flag = this.ListPob[i].PackName == pod.PackName; if (flag) { result = i; return result; } } result = -1; return result; } public bool LoadContent(string fileName, int parentId) { bool flag = true; bool result; try { bool flag2 = fileName == "" || this.zedControl == null; if (flag2) { this.msgStr = "文件名不能为空,组件不能为空"; result = false; return result; } string text = DBHelper.ExecuteScalar("SELECT [JsonDate] FROM [dbo].[OperationRecordTemplate] where Name='" + fileName + "' and ParentId="+ parentId+" " ).ToString(); //File.ReadAllText(fileName); bool flag3 = text != null && text != ""; if (flag3) { string[] array = text.Split(this.outFlat.ToCharArray()); for (int i = 0; i < array.Length; i++) { bool flag4 = array[i].IndexOf("ControlIndex") >= 0; if (flag4) { PackObjManager packObjManager = JsonConvert.DeserializeObject(array[i]); this.X = packObjManager.X; this.Y = packObjManager.Y; this.name = packObjManager.Name; this.ControlIndex = packObjManager.ControlIndex; this.isLoading = false; } else { bool flag5 = array[i].IndexOf("ClassName") >= 0; if (flag5) { JArray jos = (JArray)JsonConvert.DeserializeObject(array[i]); List packObjListByJson = this.GetPackObjListByJson(jos); this.ListPob = packObjListByJson; } } } this.SetPackObjParent(this.listPob); } } catch (Exception ex) { this.msgStr = ex.Message.ToString(); flag = false; } result = flag; return result; } public void SetZedControl(ZedGraphControl _zedControl) { this.zedControl = _zedControl; foreach (PackObjBase current in this.listPob) { current.SetZedControl(this.zedControl); } this.isLoading = false; } private List GetPackObjListByJson(JArray jos) { List list = new List(); for (int i = 0; i < jos.Count; i++) { PackObjBase packObjBase = BoardUtil.PackObjFactory(jos[i]["ClassName"].ToString(), this.zedControl, this); Type type = packObjBase.GetType(); PropertyInfo[] properties = type.GetProperties(); PropertyInfo[] array = properties; for (int j = 0; j < array.Length; j++) { PropertyInfo propertyInfo = array[j]; try { bool flag = jos[i][propertyInfo.Name] != null; if (flag) { bool isEnum = propertyInfo.PropertyType.IsEnum; if (isEnum) { object value = Enum.Parse(propertyInfo.PropertyType, jos[i][propertyInfo.Name].ToString(), false); propertyInfo.SetValue(packObjBase, Convert.ChangeType(value, propertyInfo.PropertyType), null); } else { bool flag2 = propertyInfo.PropertyType == typeof(Color); if (flag2) { ColorConverter colorConverter = new ColorConverter(); object value2 = colorConverter.ConvertFrom(jos[i][propertyInfo.Name].ToString()); try { propertyInfo.SetValue(packObjBase, Convert.ChangeType(value2, propertyInfo.PropertyType), null); } catch { } } else { bool flag3 = propertyInfo.PropertyType == typeof(List); if (flag3) { List value3 = JsonConvert.DeserializeObject>(jos[i][propertyInfo.Name].ToString()); propertyInfo.SetValue(packObjBase, Convert.ChangeType(value3, propertyInfo.PropertyType), null); } else { propertyInfo.SetValue(packObjBase, Convert.ChangeType(jos[i][propertyInfo.Name].ToString(), propertyInfo.PropertyType), null); } } } } } catch (Exception ex) { PropertyInfo expr_1CC = propertyInfo; this.msgStr = ((expr_1CC != null) ? expr_1CC.ToString() : null) + ":" + ex.Message.ToString(); } } list.Add(packObjBase); } return list; } public bool SaveFile(string fileName, int Id) { bool flag = false; bool flag2 = this.Name == ""; bool result; if (flag2) { this.MsgStr = "区域包管理器名称不能为空"; result = flag; } else { bool flag3 = fileName == ""; if (flag3) { fileName = string.Concat(new string[] { base.GetType().Name, "_", this.Name }); } List list = this.ListPob; foreach (PackObjBase current in list) { bool flag5 = current.DataSourceName != ""; if (flag5) { current.PackText = ""; current.PackValue = ""; } } bool flag6 = list.Count > 0; if (flag6) { string text2 = JsonConvert.SerializeObject(list); text2 = text2 + this.outFlat + JsonConvert.SerializeObject(this); try { DBHelper.ExecNonQuery(" update [OperationRecordTemplate] set jsondate=N'" + text2 + "' where [Name]='" + fileName + "' and ParentId='" + Id + "' "); this.msgStr = fileName + "保存成功"; flag = true; } catch (Exception ex) { this.msgStr = ex.Message.ToString(); } finally { } } else { this.msgStr = "没有数据需要保存"; } result = flag; } return result; } public void DrawPackObj(bool isNoDrwsBoard = false) { bool flag = this.ListPob.Count > 0; if (flag) { foreach (PackObjBase current in this.ListPob) { if (isNoDrwsBoard) { bool flag2 = current is BorderPackObj; if (flag2) { continue; } } current.IsSelect = false; current.Draw(); } } } public void AllClear() { this.zedControl.MasterPane.GraphObjList.Clear(); this.zedControl.Controls.Clear(); this.zedControl.AxisChange(); this.zedControl.Refresh(); this.listPob.Clear(); } private int ComparePackObjByOrder(PackObjBase x, PackObjBase y) { bool flag = x == null; int result; if (flag) { bool flag2 = y == null; if (flag2) { result = 0; } else { result = -1; } } else { bool flag3 = y == null; if (flag3) { result = 1; } else { int num = x.MyOrder.CompareTo(y.MyOrder); bool flag4 = num != 0; if (flag4) { result = num; } else { result = x.MyOrder.CompareTo(y.MyOrder); } } } return result; } public bool ListPobsAdd(PackObjBase bpo) { bool result = false; PackObjBase packObjBase = this.ListPob.FirstOrDefault((PackObjBase s) => s.PackTag == bpo.PackTag); bool flag = packObjBase == null; if (flag) { result = true; this.ListPob.Add(bpo); } return result; } private void SetPackObjParent(List pobs) { Predicate method = (x) => { return x.ParentName == ""; }; List list = pobs.FindAll(method); foreach (PackObjBase current in list) { this.SetPackObjSubParent(pobs, current); } } private void SetPackObjSubParent(List pobs, PackObjBase parentPob) { List list = pobs.FindAll((PackObjBase c) => c.ParentName == parentPob.PackName); bool flag = list.Count > 0; if (flag) { foreach (PackObjBase current in list) { current.SetParent = parentPob; this.SetPackObjSubParent(pobs, current); } } } public List Clone() { List list = new List(); foreach (PackObjBase current in this.ListPob) { list.Add(current.Clone()); } return list; } } }