AIMS/DrawGraph/BoardPack/TextsPackObj.cs
2023-04-27 19:42:21 +08:00

509 lines
16 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using DrawGraph;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Drawing;
using System.Linq;
namespace DrawGraph
{
[JsonObject(MemberSerialization.OptOut)]
[Serializable]
public class TextsPackObj : PackObjBase
{
private float fontSize = 8f;
private Color fontColor = Color.Black;
private ELineType isHorizontal = ELineType.Horizontal;
private EIsBool isUnderline = EIsBool.False;
private bool underline = false;
private int angle = 0;
private EIsBool isBool = EIsBool.False;
private int unit = 1;
private EIsBool isTop = EIsBool.True;
private string controlTitleText = "";
private float rowSpan = 0f;
private EIsBool isViewBoard = EIsBool.False;
private EAlignType alignType = EAlignType.Left;
private EIsBool isMultiline = EIsBool.False;
[ClassAttributs(CName = "旋转角度", Description = "旋转角度")]
public int Angle
{
get
{
return this.angle;
}
set
{
this.angle = value;
}
}
[ClassAttributs(CName = "下划线", Description = "显示下划线")]
public EIsBool IsUnderline
{
get
{
return this.isUnderline;
}
set
{
this.isUnderline = value;
bool flag = this.isUnderline == EIsBool.True;
if (flag)
{
this.underline = true;
}
}
}
[ClassAttributs(CName = "横向画", Description = "是否横向画")]
public ELineType IsHorizontal
{
get
{
return this.isHorizontal;
}
set
{
this.isHorizontal = value;
}
}
[ClassAttributs(CName = "文本字体", Description = "字体大小")]
public float FontSize
{
get
{
return this.fontSize;
}
set
{
bool flag = value > 2f && value < 24f;
if (flag)
{
this.fontSize = value;
}
}
}
[ClassAttributs(CName = "下换行", Description = "多行时,换行向下画,反之向上画")]
public EIsBool IsTop
{
get
{
return this.isTop;
}
set
{
this.isTop = value;
}
}
[ClassAttributs(CName = "前景色", Description = "前景色")]
public Color FontColor
{
get
{
return this.fontColor;
}
set
{
this.fontColor = value;
}
}
[ClassAttributs(CName = "格式化文本", Description = "格式化字符串的样式")]
public string ControlTitleText
{
get
{
return this.controlTitleText.Trim();
}
set
{
this.controlTitleText = value;
}
}
[ClassAttributs(CName = "加粗")]
public EIsBool IsBool
{
get
{
return this.isBool;
}
set
{
this.isBool = value;
}
}
[ClassAttributs(CName = "一行几个组件", Description = "最大单元数,文本框时:是有多少行;单选框或复选框:是一行放几个控件")]
public int Unit
{
get
{
return this.unit;
}
set
{
this.unit = value;
}
}
[ClassAttributs(CName = "行间距", Description = "行间距值为0-1之间的值")]
public float RowSpan
{
get
{
return this.rowSpan;
}
set
{
this.rowSpan = value;
}
}
[ClassAttributs(CName = "显示边框", Description = "是否显示边框")]
public EIsBool IsViewBoard
{
get
{
return this.isViewBoard;
}
set
{
this.isViewBoard = value;
}
}
[ClassAttributs(CName = "文本对齐", Description = "文本对齐方式")]
public EAlignType AlignType
{
get
{
return this.alignType;
}
set
{
this.alignType = value;
}
}
[ClassAttributs(CName = "多行", Description = "是否是多行默认为FALSE单选")]
public EIsBool IsMultiline
{
get
{
return this.isMultiline;
}
set
{
this.isMultiline = value;
}
}
private float GetFontSize()
{
float result;
try
{
string text = null;// ConfigurationManager.AppSettings["FontSize"];
bool flag = text == null;
if (flag)
{
result = 8f;
}
else
{
result = float.Parse(text);
}
}
catch (Exception)
{
result = 8f;
}
return result;
}
public TextsPackObj(ZedGraphControl zgc, PackObjManager poManager) : base(zgc, poManager)
{
this.baseZed = zgc;
base.PackText = "文本" + this.index.ToString();
this.fontSize = this.GetFontSize();
}
public override void Draw()
{
bool flag = this.baseZed == null;
if (!flag)
{
this.Clear();
base.PackText = base.PackText;//.Replace("\r", "\u3000").Replace("\n", "\u3000");
bool flag2 = this.IsHorizontal == ELineType.Horizontal;
if (flag2)
{
this.hDraw();
}
else
{
this.vDraw();
}
bool flag3 = this.isViewBoard == EIsBool.True;
if (flag3)
{
string packTag = base.PackTag + "_board";
RectangleFramePackObj rectangleFramePackObj = new RectangleFramePackObj(this.baseZed, this.poManager);
rectangleFramePackObj.PackTag = packTag;
float num = base.X;
bool flag4 = this.AlignType == EAlignType.Center;
if (flag4)
{
num -= base.Width / 2f;
}
rectangleFramePackObj.X = num;
rectangleFramePackObj.Y = base.Y;
rectangleFramePackObj.EndX = num + base.Width;
rectangleFramePackObj.EndY = base.Y + base.Height;
rectangleFramePackObj.Draw();
}
base.Refresh();
}
}
private void hDraw()
{
bool flag = base.PackText == "";
if (!flag)
{
if ( this.IsMultiline == EIsBool.False)
{
base.PackText = base.PackText.Replace("\r", "\u3000").Replace("\n", "\u3000");
TextObj textObj = this.CreateTextObj(base.PackText, base.PackTag);
ZUtil.DrawText(textObj, this.baseZed);
this.width = ZUtil.GetColWidthFraction(textObj, this.baseZed);
this.height = ZUtil.GetColHeightFraction(textObj, this.baseZed);
base.EndX = base.X + this.width;
base.EndY = base.Y + this.height;
}
else
{
List<string> list = this.breakLinesForCanvas(base.PackText);
for (int i = 0; i < list.Count; i++)
{
string text = list[i];
double num = (double)base.RealY;
bool flag3 = this.IsTop == EIsBool.True;
if (flag3)
{
num = (double)(base.RealY + (float)i * this.RowSpan);
}
else
{
num = (double)(base.RealY - (float)(list.Count - i - 1) * this.RowSpan);
}
bool flag4 = text == "";
if (flag4)
{
break;
}
TextObj textObj2 = this.CreateTextObj(text, base.PackTag + "_" + i.ToString());
try
{
float colHeightFraction = ZUtil.GetColHeightFraction(textObj2, this.baseZed);
bool flag5 = i == 0 && base.X == base.EndX;
if (flag5)
{
this.width = ZUtil.GetColWidthFraction(textObj2, this.baseZed);
this.height = ZUtil.GetColHeightFraction(textObj2, this.baseZed);
}
this.height = (float)num - base.RealY + colHeightFraction;
bool flag6 = base.X == base.EndX;
if (flag6)
{
base.EndX = base.X + this.width;
base.EndY = base.Y + this.height;
}
}
catch (Exception)
{
}
textObj2.Location.X = (double)base.RealX;
textObj2.Location.Y = num;
ZUtil.DrawText(textObj2, this.baseZed);
}
}
}
}
private int findBreakPoint(string text)
{
double num = 0.0;
double num2 = (double)(text.Length - 1);
int result;
try
{
bool flag = base.RealEndX != base.RealX;
if (flag)
{
while (num <= num2)
{
int num3 = Convert.ToInt32(Math.Floor((num + num2) / 2.0));
string a = text.Substring(0, num3);
bool flag2 = a != "";
if (!flag2)
{
result = -1;
return result;
}
TextObj text2 = this.CreateTextObj(text.Substring(0, num3), base.PackTag);
float colWidthFraction = ZUtil.GetColWidthFraction(text2, this.baseZed);
TextObj text3 = this.CreateTextObj(text.Substring(0, num3 + 1), base.PackTag);
float colWidthFraction2 = ZUtil.GetColWidthFraction(text3, this.baseZed);
float num4 = base.RealEndX - base.RealX + 0.0002f;
bool flag3 = colWidthFraction <= num4 && colWidthFraction2 > num4;
if (flag3)
{
result = num3;
return result;
}
bool flag4 = colWidthFraction < num4;
if (flag4)
{
num = (double)(num3 + 1);
}
else
{
num2 = (double)(num3 - 1);
}
}
}
}
catch (Exception)
{
result = -1;
return result;
}
result = -1;
return result;
}
public List<string> breakLinesForCanvas(string text)
{
List<string> result = text.Replace("\r\n", "^").Split('^').ToList();
List<string> list = new List<string>();
for (int i = 0; i < result.Count; i++)
{
string item = result[i].Replace(" ", " ") ;
int num;
while ((num = this.findBreakPoint(item)) != -1)
{
list.Add(item.Substring(0, num));
item = item.Substring(num);
}
bool flag = item != "";
if (flag)
{
list.Add(item);
}
}
return list;
}
private void vDraw()
{
for (int i = 0; i < base.PackText.Length; i++)
{
string text = base.PackText.Substring(i, 1);
bool flag = text.Trim() == "";
if (!flag)
{
float num = base.RealY + (float)i * this.RowSpan;
TextObj textObj = this.CreateTextObj(text, base.PackTag + "_" + i.ToString());
textObj.Location = new Location((double)base.RealX, (double)num, CoordType.PaneFraction);
ZUtil.DrawText(textObj, this.baseZed);
}
}
}
private TextObj CreateTextObj(string packTextTemp, string packTag)
{
Color color = Color.FromArgb(this.fontColor.ToArgb());
bool isSelect = base.IsSelect;
if (isSelect)
{
color = Color.Red;
}
TextObj textObj = new TextObj(packTextTemp, (double)base.RealX, (double)base.RealY, CoordType.PaneFraction);
textObj.FontSpec = new FontSpec(PackObjBase.fontFamily, this.fontSize, color, this.isBool == EIsBool.True, false, this.underline);
textObj.FontSpec.Border.Width = 0f;
textObj.FontSpec.Border.IsVisible = false;
textObj.FontSpec.StringAlignment = StringAlignment.Near;
textObj.Tag = packTag;
textObj.FontSpec.Fill.IsVisible = false;
AlignH alignH = AlignH.Left;
bool flag = this.AlignType == EAlignType.Center;
if (flag)
{
alignH = AlignH.Center;
}
bool flag2 = this.AlignType == EAlignType.Right;
if (flag2)
{
alignH = AlignH.Right;
}
textObj.Location.AlignH = alignH;
textObj.Location.AlignV = AlignV.Top;
textObj.ZOrder = ZOrder.A_InFront;
textObj.FontSpec.Angle = (float)this.angle;
return textObj;
}
public override void Clear()
{
base.Clear();
for (int i = 0; i <= 20; i++)
{
string tag = base.PackTag + "_" + i.ToString();
bool flag = this.baseZed.MasterPane != null;
if (flag)
{
GraphObj graphObj = this.baseZed.MasterPane.GraphObjList[tag];
bool flag2 = graphObj != null;
if (flag2)
{
this.baseZed.MasterPane.GraphObjList.Remove(graphObj);
}
}
}
string tag2 = base.PackTag + "_board";
bool flag3 = this.baseZed.MasterPane != null;
if (flag3)
{
GraphObj graphObj2 = this.baseZed.MasterPane.GraphObjList[tag2];
bool flag4 = graphObj2 != null;
if (flag4)
{
this.baseZed.MasterPane.GraphObjList.Remove(graphObj2);
}
}
}
}
}