using HelperDB; using Newtonsoft.Json; using AIMSExtension; using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Windows.Forms; using System.Xml.Serialization; namespace DrawGraph { [Serializable, JsonObject(MemberSerialization.OptOut)] /// /// 模板管理工具的具体类,全局绑定在这个类里 /// public class TemplateManage { public TemplateManage() { } #region 属性 private List manageList = new List(); private string msgStr = ""; private string projectName = ""; private string direct = ""; private int id; private object opeRecord = null; PropertyObject operationRecordProObj = new PropertyObject(); private ZedGraphControl zedControl = null; private int zjpyl = 0; private int hzjpyl = 0; private int dfzjpyl = 0; private int locationY; //private string hospitalName = ""; private XmlUtil xmlOpe = new XmlUtil(System.Windows.Forms.Application.StartupPath + "\\AIMS.xml"); private TypesettingEnum typesetting = TypesettingEnum.Vertical; private PageTypeEnum pageType = PageTypeEnum.A4; public int LocationY { set { locationY = value; if (zedControl != null) zedControl.Location = new Point(0, 0 - LocationY);//0); } get { return locationY; } } /// /// 管理器的列表 /// public List ManageList { get { return manageList; } } [JsonIgnore] [XmlIgnore] public string MsgStr { get { return msgStr; } set { msgStr = value; } } /// /// 项目名称 /// public string ProjectName { get { return projectName; } set { projectName = value; Direct = value; } } /// /// 根据类.属性返回指定的绘图组件通知更新 /// /// 类名加属性名 /// 新文本 /// 新值 /// 是否更新数据库 /// 要更新的对象 public int NotifyUpdate(string propertyName, string newText, string newValue, bool isUpdate = false, object t = null) { int i = 1; if (isUpdate && t != null) { //为真时更新数据库 i = DBManage.SetOperationRecordValue(t, propertyName, newValue); } if (isUpdate && i <= 0) return i; foreach (AreaManageBase area in manageList) { if (area.PackManage != null) { //找到以类.属性结尾的对象 List packObjs = area.PackManage.ListPob.Where(s => s.PackTag.EndsWith(propertyName.Replace('.', '_'))).ToList(); foreach (PackObjBase pack in packObjs) { pack.PackText = newText; pack.PackValue = newValue; //pack.IsSelfFresh = false; pack.Draw(); } } } return i; } /// /// 设置对象的值 /// /// /// /// /// /// public void SetObjValue(object t, string propertyName, string text, string value, bool isUpdate = false) { //设置对象的值 object oldValue = EntityObjectChangeNotifier.SubObjSetValue(t, propertyName, value); //是否更新数据库并通知组件重绘 NotifyUpdate(propertyName, text, value, isUpdate, t); } [JsonIgnore] [XmlIgnore] public int Id { get { return id; } set { id = value; if (manageList.Count > 0) { foreach (AreaManageBase area in manageList) { area.Id = id; } } } } [JsonIgnore] [XmlIgnore] public string Direct { get { return direct; } set { string dir = projectName; if (manageList.Count > 0) { foreach (AreaManageBase area in manageList) { area.Direct = dir; } } direct = dir; } } [JsonIgnore] [XmlIgnore] public object OpeRecord { get { return opeRecord; } set { opeRecord = value; foreach (AreaManageBase area in manageList) { area.OpeRecord = opeRecord; } } } [JsonIgnore] [XmlIgnore] public ZedGraphControl ZedControl { get { return zedControl; } set { zedControl = value; if (zedControl != null) { //把本界面的画板控件给所有子包控件传递。 foreach (AreaManageBase area in manageList) { area.SetZedControl(zedControl); } } } } /// /// 组件的偏移量 /// public int Zjpyl { get { return zjpyl; } set { foreach (AreaManageBase area in manageList) { List ableS = area.PackManage.ListPob.Where(s => s is AbleEditPackObj).ToList(); foreach (PackObjBase pack in ableS) { pack.Zjpyl = value; } } zjpyl = value; } } public int Hzjpyl { get { return hzjpyl; } set { foreach (AreaManageBase area in manageList) { List ableS = area.PackManage.ListPob.Where(s => s is AbleEditPackObj).ToList(); foreach (PackObjBase pack in ableS) { pack.Hzjpyl = value; } } hzjpyl = value; } } public int Dfzjpyl { get { return dfzjpyl; } set { //foreach (AreaManageBase area in manageList) //{ // List ableS = area.PackManage.ListPob.Where(s => s is AbleEditPackObj).ToList(); // foreach (PackObjBase pack in ableS) // { // pack.DfHzjpyl = value; // } //} dfzjpyl = value; } } /// /// 排版,默认竖着排 /// public TypesettingEnum Typesetting { get { return typesetting; } set { typesetting = value; } } public PageTypeEnum PageType { get { return pageType; } set { pageType = value; } } #endregion 属性结束 #region 事件 /// /// 鼠标点击画板 /// /// /// public void zedControl_MouseMoveEvent(ZedGraphControl sender, MouseEventArgs e) { foreach (AreaManageBase area in manageList) { area.MouseMove(sender, e); } } /// /// 点击画板 /// /// /// public void zedControl_MouseDownEvent(ZedGraphControl sender, MouseEventArgs e) { if (ZedControl == null) return; double y = Convert.ToDouble(Convert.ToDouble(e.Y) / Convert.ToDouble(ZedControl.Height)); double x = Convert.ToDouble(Convert.ToDouble(e.X) / Convert.ToDouble(ZedControl.Width)); //foreach (AreaManageBase area in manageList) //{ // if (e.Button == System.Windows.Forms.MouseButtons.Left) // { // #region 为可编辑组件触发响应事件 // List editPack = area.PackManage.ListPob.Where(s => s is AbleEditPackObj).ToList(); // foreach (PackObjBase pack in editPack) // { // AbleEditPackObj aEdit = pack as AbleEditPackObj; // if (aEdit != null) // { // if ((x > aEdit.RealX && x < aEdit.RealEndX) && (y > aEdit.RealY && y < aEdit.RealEndY)) // { // if (!aEdit.IsDoubleClick) // { // aEdit.onClick(e); // break; // } // } // } // } // #endregion // } // area.MouseDown(sender, e); //} foreach (AreaManageBase area in manageList) { area.MouseDown(sender, e); } } public void zedControl_MouseUpEvent(ZedGraphControl sender, MouseEventArgs e) { foreach (AreaManageBase area in manageList) { area.MouseUp(sender, e); } } public void zedControl_MouseDoubleClick(ZedGraphControl sender, MouseEventArgs e) { if (ZedControl == null) return; double y = Convert.ToDouble(Convert.ToDouble(e.Y) / Convert.ToDouble(ZedControl.Height)); double x = Convert.ToDouble(Convert.ToDouble(e.X) / Convert.ToDouble(ZedControl.Width)); foreach (AreaManageBase area in manageList) { if (e.Button == System.Windows.Forms.MouseButtons.Left) { #region 为可编辑组件触发响应事件 List editPack = area.PackManage.ListPob.Where(s => s is AbleEditPackObj).ToList(); foreach (PackObjBase pack in editPack) { AbleEditPackObj aEdit = pack as AbleEditPackObj; if (aEdit != null) { if ((x > aEdit.RealX && x < aEdit.RealEndX) && (y > aEdit.RealY && y < aEdit.RealEndY)) { if (!aEdit.IsDoubleClick) { aEdit.onClick(e); break; } } } } #endregion } area.MouseDoubleClick(sender, e); } } public void zedControl_KeyUp(ZedGraphControl sender, KeyEventArgs e) { foreach (AreaManageBase area in manageList) { area.KeyUp(sender, e); } } public void BindTempData() { foreach (AreaManageBase area in manageList) { area.BindTempData(); } } #endregion 事件结束 /// /// 增加一个管理器 /// /// 管理器 /// public bool AddManage(AreaManageBase _manager) { bool reVal = false; AreaManageBase manage = manageList.FirstOrDefault(s => s.Name == _manager.Name || s.ClassName == _manager.ClassName); if (manage == null) { manageList.Add(_manager); reVal = true; } return reVal; } public int GetPageWidth() { int w = 900; if (pageType == PageTypeEnum.A3) { w = 1280; } return w; } /// /// 重画区域 /// public void DrawArea() { Clear(); for (int i = 0; i < ManageList.Count; i++) { AreaManageBase manageTemp = ManageList[i]; if (manageTemp != null) { if (i == 0) { manageTemp.Draw(); } else { manageTemp.Draw(true); } } } } /// /// 根据标签查找指定的绘图组件 /// /// 标签名,使用类.属性就可以了 /// public T GetPackObjectOTag(string tagName) where T : PackObjBase { T pack = default; for (int i = 0; i < ManageList.Count; i++) { AreaManageBase manageTemp = ManageList[i]; if (manageTemp != null) { pack = (T)manageTemp.GetPackObjectOTag(tagName); if (pack != null) break; } } return pack; } /// /// 删除区域 /// /// /// public bool DelManage(AreaManageBase _manager) { bool reVal = false; if (_manager != null && manageList.Count > 0) { reVal = manageList.Remove(_manager); } return reVal; } /// /// 保存 /// /// public bool Save() { bool reVal = false; try { if (ProjectName == "") { reVal = false; MsgStr = "医院名称或项目名称不能为空"; return reVal; } string FilePath = Direct; bool allAreaSaveOk = true; if (manageList.Count > 0) { foreach (AreaManageBase area in manageList) { //区域保存值返回 bool areaSaveOk = area.Save(); if (!areaSaveOk) { allAreaSaveOk = false; MsgStr = area.MsgStr; } } } else { //如果manageList为空则不允许保存模板管理器 allAreaSaveOk = false; MsgStr = "没有具体的区域管理器不需要保存"; } //如果所有区域都保存成功,才能保存模板管理器 if (allAreaSaveOk) { string jsonStr = JsonConvert.SerializeObject(this); try { DBHelper.ExecNonQuery(" update [OperationRecordTemplate] set jsondate=N'" + jsonStr + "' where Id='" + Id + "' "); msgStr = FilePath + "保存成功"; reVal = true; } catch (Exception ex) { msgStr = ex.Message.ToString(); } finally { } } } catch (Exception exp) { reVal = false; MsgStr = exp.Message; } return reVal; } /// /// 全局绑定之后在调用各自的区域管理器进行绑定 /// public void Bind(string AreaManageName = null) { try { //各区域的数据绑定 foreach (AreaManageBase area in manageList) { if (AreaManageName != null && area.Name != AreaManageName && area.ClassName != AreaManageName) continue; #region 绑定可编辑区域的点击事件 //绑定所有可编辑区域 List editPack = area.PackManage.ListPob.Where(s => s is AbleEditPackObj).ToList(); foreach (PackObjBase pack in editPack) { AbleEditPackObj aEdit = pack as AbleEditPackObj; if (aEdit != null) { //aEdit.ClearControl(); aEdit.IsVisible = false; aEdit.Click -= new AbleEditPackObj.ClickEventHandler(editAr_Click); aEdit.Click += new AbleEditPackObj.ClickEventHandler(editAr_Click); aEdit.SetControl(); //aEdit.IsVisible = DrawGraphModels.Util.EIsBool.False;; } } #endregion area.IsSelfFresh = false; area.Bind(); area.IsSelfFresh = true; } if (zedControl != null) zedControl.Refresh(); } catch (Exception ex) { throw ex; } } public void ClearSelectCouve() { //各区域的数据绑定 foreach (AreaManageBase area in manageList) { area.clearSelectCouve_Click(); } } public void frmInstance_ConfigParam() { //各区域的数据绑定 foreach (AreaManageBase area in manageList) { area.frmInstance_ConfigParam(); } } public void initChart() { //各区域的数据绑定 foreach (AreaManageBase area in manageList) { area.initChart(); } } public bool Verification() { foreach (AreaManageBase area in manageList) { bool reVal = area.Verification(); if (!reVal) { //只要有一个区域的验证返回失败即失败 return reVal; } } return true; } /// /// 响应可编辑组件的单击事件 /// /// /// public void editAr_Click(object sender, EventArgs e) { foreach (AreaManageBase area in manageList) { area.editAr_Click(sender, e); } } /// /// 加载所有区域里的组件 /// public bool Load() { bool reVal = true; if (manageList.Count > 0) { bool temp = true; for (int i = 0; i < manageList.Count; i++) { AreaManageBase area = manageList[i]; //通过名称得到一个具体的区域实例 AreaManageBase areaSub = BoardFormUtil.AreaManageFactory(area.ClassName, area.OpeRecord, area.ZedControl, this, area.Name); //父类的值传给子类 BoardUtil.MainToSub(area, areaSub); manageList[i] = areaSub; area = manageList[i]; //区域保存值返回 bool areaLoadOk = area.Load(Id); if (!areaLoadOk) { MsgStr = area.Name + ":" + area.MsgStr; temp = false; } #region 绑定可编辑区域的点击事件 //绑定所有可编辑区域 List editPack = area.PackManage.ListPob.Where(s => s is AbleEditPackObj).ToList(); foreach (PackObjBase pack in editPack) { AbleEditPackObj aEdit = pack as AbleEditPackObj; if (aEdit != null) { //aEdit.IsVisible = false; aEdit.Click -= new AbleEditPackObj.ClickEventHandler(editAr_Click); aEdit.Click += new AbleEditPackObj.ClickEventHandler(editAr_Click); aEdit.SetControl(); //aEdit.IsVisible = DrawGraphModels.Util.EIsBool.False; } } #endregion } SetPYL(); if (!temp) { reVal = false; } } return reVal; } /// /// 获取第一个板子的宽高 /// public Point GetBorderPackWH() { Point point = new Point(); if (typesetting == TypesettingEnum.Vertical) { point.X = GetPageWidth(); point.Y = Convert.ToInt32(point.X * 1.414); } else { point.Y = GetPageWidth(); point.X = Convert.ToInt32(point.Y * 1.414); } //给所有子区域的板子设置成第一个版子的值 //if (manageList.Count > 0 && manageList[0].PackManage != null) //{ // PackObjBase borderPack = manageList[0].PackManage.ListPob.FirstOrDefault(s => s is BorderPackObj); // foreach (AreaManageBase areaT in manageList) // { // PackObjBase subBorder = areaT.PackManage.ListPob.FirstOrDefault(s => s is BorderPackObj); // if (subBorder != null) // { // point.X = Convert.ToInt32(((BorderPackObj)borderPack).SetWidth); // point.Y = Convert.ToInt32(((BorderPackObj)borderPack).SetHeight); // } // } //} return point; } /// /// 清空板上的内容 /// public void Clear() { if (zedControl == null) return; zedControl.MasterPane.GraphObjList.Clear(); zedControl.Controls.Clear(); zedControl.GraphPane.CurveList.Clear(); Chart chart = zedControl.GraphPane.Chart; chart.Rect = new System.Drawing.RectangleF(0f, 0f, 0f, 0f); //设定中间的图像显示区域chart.Rect = {X = 120.0 Y = 304.5 Width = 576.0 Height = 375.55} //清除原图像 if (zedControl.GraphPane.YAxisList.Count > 1) { //清空除Y轴以外的所有纵坐标轴 zedControl.GraphPane.YAxisList.RemoveRange(1, zedControl.GraphPane.YAxisList.Count - 1); } Refresh(); } /// /// 清空界面上的组件,在重新加载界面前做 /// public void ControlClear() { foreach (AreaManageBase area in manageList) { #region 绑定可编辑区域的点击事件 //绑定所有可编辑区域 List editPack = area.PackManage.ListPob.Where(s => s is AbleEditPackObj).ToList(); foreach (PackObjBase pack in editPack) { AbleEditPackObj aEdit = pack as AbleEditPackObj; if (aEdit != null) { aEdit.ClearControl(); //aEdit.IsVisible = DrawGraphModels.Util.EIsBool.False; } } #endregion } } /// /// 绑定所有手术记录的值 /// public void BindOperationRecordValueAll(Object obj) { //operationRecordProObj = new PropertyObject(); //operationRecordProObj.Key = "OperationRecord"; //operationRecordProObj.Description = "手术类"; foreach (AreaManageBase area in manageList) { area.IsSelfFresh = false; } List propertyList = BoardFormUtil.GetPropertyList(obj, this); //operationRecordProObj.SubPropertyList = propertyList; NotifyPackObj(propertyList); foreach (AreaManageBase area in manageList) { area.IsSelfFresh = true; } Refresh(); } private void Refresh() { if (zedControl != null) { zedControl.AxisChange(); zedControl.Refresh(); } } /// /// 通知组件更新数据 /// private void NotifyPackObj(List propertyList) { foreach (PropertyObject proTemp in propertyList) { NotifyUpdate(proTemp.ViewDesignTag(), proTemp.Text, proTemp.Value); if (proTemp.SubPropertyList.Count > 0) { NotifyPackObj(proTemp.SubPropertyList); } } } /// /// 通知区域绑定更新 /// /// 区域名称 /// 模板对象 public TemplateManage NotificationAreaBindingUpdate(string areaName) { AreaManageBase area = manageList.FirstOrDefault(s => s.Name == areaName); if (area != null) { area.Bind(); } return this; } /// /// 设置组件的偏移量 /// /// 强制返回到0时为真 public void SetPYL(bool isReturn0 = false) { if (ZedControl == null) { Zjpyl = 0; } else { //如果是强制把流动条返回到头,就不需要取值了 if (isReturn0) { Zjpyl = 0; } else { Panel panel = ZedControl.Parent as Panel; if (panel != null) { Zjpyl = panel.VerticalScroll.Value; } else { Zjpyl = 0; } } } //根据不同分辨率可能会有自己的配置偏移量,可以单独设置,在AIMS.xml里设置 int czpyl = 0; int hzpyl = 0; int dfzpyl = 0; try { czpyl = int.Parse(xmlOpe.GetNode("czpyl")[0].ToString()); hzpyl = int.Parse(xmlOpe.GetNode("hzpyl")[0].ToString()); //dfzpyl = int.Parse(xmlOpe.GetNode("dfzpyl")[0].ToString()); } catch (Exception) { } Zjpyl = Zjpyl + LocationY + czpyl; Hzjpyl = hzpyl; Dfzjpyl = dfzpyl; } /// /// 组件内容批量清空 /// public void ClearEdit(bool isFlash = true) { if (ZedControl == null) return; foreach (AreaManageBase manage in ManageList) { List ables = manage.PackManage.ListPob.Where(s => s is AbleEditPackObj).ToList(); foreach (PackObjBase pack in ables) { AbleEditPackObj ableEdit = pack as AbleEditPackObj; if (ableEdit != null) { string dstr = ableEdit.DataSourceName.Replace("_", "."); string value = ""; EntityObjectChangeNotifier.SubObjSetValue(manage.OpeRecord, dstr, value); ableEdit.PackText = value; ableEdit.PackValue = value; if (ableEdit.ControlType == EControlType.CheckBox) { foreach (Control conl in ableEdit.CControl.Controls) { CheckBox chk = conl as CheckBox; chk.Checked = false; } } } } } if (isFlash) { DrawArea(); ZedControl.AxisChange(); ZedControl.Refresh(); } } /// /// 绑定默认值 /// public void BindDefaultValue() { foreach (AreaManageBase manage in ManageList) { List ables = manage.PackManage.ListPob.Where(s => s is AbleEditPackObj).ToList(); foreach (PackObjBase pack in ables) { AbleEditPackObj ableEdit = pack as AbleEditPackObj; if (ableEdit != null && ableEdit.PackValue == "") { if (ableEdit.DefaultSelectValue.Trim() != "") { string[] defalutValues = new string[] { ableEdit.DefaultSelectValue }; if (ableEdit.DefaultSelectValue.Trim().Contains(",")) { defalutValues = ableEdit.DefaultSelectValue.Split(','); } if (ableEdit.DefaultSelectValue.Trim().Contains(",")) { defalutValues = ableEdit.DefaultSelectValue.Split(','); } //ableEdit.PackValue = ableEdit.DefaultSelectValue; foreach (string str in defalutValues) { string dstr = ableEdit.DataSourceName.Replace("_", "."); if (ableEdit.ControlType == EControlType.CheckBox || ableEdit.ControlType == EControlType.RadioButtonList) { SetObjValue(manage.OpeRecord, dstr, ableEdit.PackText, str); } else { SetObjValue(manage.OpeRecord, dstr, str, str); } } } } } } } } //排版的枚举 public enum TypesettingEnum { Horizontal, Vertical } //纸张类型 public enum PageTypeEnum { A4, A3 } }