AIMS/DrawGraphManagement/AreaManageForm.cs
2022-09-29 19:39:02 +08:00

1600 lines
58 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 DrawGraphManagement.MyUserControl;
using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Drawing.Printing;
using System.Linq;
using System.Reflection;
using System.Windows.Forms;
namespace DrawGraphManagement
{
public partial class AreaManageForm : Form
{
PackObjBase bb = null;
PackObjBase selectPoB = null;
//string outFlat = "||";
string asFileName = "";
private TreeNode selectNode = null; //选中的结点
private PrintDocument pDoc;
protected PackObjManager poManager = null;
private AreaManageBase areaManage = null;
public PageStatus pageStatus = PageStatus.Create;
//private bool isAddNodeDown = true; //增加节点时是否是一层一层往下加,为真时是多层级的,为假是一层
private int borderWidth = 600;
private int borderHeight = 800;
private bool isViewBackImg = true;
public AreaManageForm()
{
InitializeComponent();
poManager = new PackObjManager();
btnOk.DialogResult = DialogResult.OK;
}
/// <summary>
/// 范围管理器构造方法
/// </summary>
/// <param name="_areaMange">范围管理器</param>
/// <param name="isUseSelfControl">默认使用自己的组件</param>
public AreaManageForm(AreaManageBase _areaMange, PageStatus _pageStatus = PageStatus.Create, int _borderWidth = 600, int _borderHeight = 800)
{
InitializeComponent();
btnOk.DialogResult = DialogResult.OK;
areaManage = _areaMange;
poManager = areaManage.PackManage;
pageStatus = _pageStatus;
borderWidth = _borderWidth;
borderHeight = _borderHeight;
CommandManage.GetInstance.AreaManage = areaManage;
}
private void Form1_Load(object sender, EventArgs e)
{
if (areaManage == null)
{
MessageBox.Show("区域管理器不能为空");
return;
}
this.deleteMenuItem.Enabled = true;
//需要放在最前面,他会清理画板
ControlDatabind(false);
//画板加载背景图片
loadBackImage();
AutoSizeF();
if (pageStatus == PageStatus.Create)
{
bb = new BorderPackObj(zedGraphControl1, poManager); ;
if (bb != null)
{
((BorderPackObj)bb).SetWidth = borderWidth;
((BorderPackObj)bb).SetHeight = borderHeight;
poManager.ListPob.Add(bb);
InsertPackObjTree(bb);
bb.Changed += new PackObjBase.ChangedEventHandler(Bpo_Changed);
}
try
{
pDoc = new PrintDocument();
pDoc.DefaultPageSettings.Landscape = true;
pDoc.OriginAtMargins = true;
pDoc.DefaultPageSettings.PrinterResolution.Kind = PrinterResolutionKind.High;
pDoc.DefaultPageSettings.Margins = new Margins(8, 8, 4, 4);
pDoc.PrintPage += new PrintPageEventHandler(pDoc_PrintPage);
}
catch (Exception )
{
}
}
if (pageStatus == PageStatus.Edit)
{
foreach (PackObjBase pob in poManager.ListPob)
{
if (pob is AbleEditPackObj)
{
AbleEditPackObj a = pob as AbleEditPackObj;
a.IsViewBoard = EIsBool.True;
}
}
ReLoad();
}
//areaManage.PackManage.ListPob.FindAll(s => s.PackTag.EndsWith("26".Replace('.', '_')))[0].Draw();
}
//画板加载背景图片
private void loadBackImage()
{
if (isViewBackImg)
{
//加载北京图片
Image img = null;
try
{
img = Image.FromFile(@"Resources/template/" + areaManage.Name + ".jpg");
}
catch (Exception )
{
}
if (img != null)
{
zedGraphControl1.BackgroundImage = img;
zedGraphControl1.GraphPane.Fill.Color = Color.Transparent;
zedGraphControl1.MasterPane.Fill.IsVisible = false;
zedGraphControl1.GraphPane.Chart.Fill.IsVisible = false;
}
}
else {
zedGraphControl1.BackgroundImage = null;
}
}
private void AutoSizeF()
{
#region
//在此处可随时设置板子的属性,横向的
//if (borderWidth > borderHeight)
//{
// borderHeight = zedGraphControl1.Parent.Height - 54;
// borderWidth = Convert.ToInt32(borderHeight * 1.414) + 2;
//}
//else
//{
// borderWidth = zedGraphControl1.Parent.Width - 54;
// borderHeight = Convert.ToInt32(borderWidth * 1.414) + 2;
//}
zedGraphControl1.Width = borderWidth;
zedGraphControl1.Height = borderHeight;
PackObjBase pack = poManager.ListPob.FirstOrDefault(s => s is BorderPackObj);
if(pack != null) {
((BorderPackObj)pack).SetWidth = borderWidth;
((BorderPackObj)pack).SetHeight = borderHeight;
}
areaManage.setPrint(false);
zedGraphControl1.Refresh();
#endregion
}
/// <summary>
/// 修改指定树结点的包控件内容
/// </summary>
private void ModPackObjTree(TreeNodeCollection tnc, PackObjBase pob)
{
if (selectPoB == null) return;
foreach (TreeNode tn in tnc)
{
try {
if (tn.Name == pob.PackName)
{
tn.Name = pob.PackName;
tn.Tag = pob;
tn.Text = pob.Descript;
break;
}
else if (tn.Nodes.Count > 0)
{
ModPackObjTree(tn.Nodes, pob);
}
} catch (Exception ) {
}
}
}
/// <summary>
/// 插入指定树结点的包控件内容
/// </summary>
/// <param name="pob"></param>
private void InsertPackObjTree(PackObjBase pob, bool isSelMySelft = true)
{
TreeNode tnSub = new TreeNode();
pob.IsSelect = false;
tnSub.Name = pob.PackName;
tnSub.Tag = pob;
tnSub.Text = pob.Descript;
if (treeView1.SelectedNode == null)
{
//如果是白板对象直接加在顶层
if (pob is BorderPackObj)
{
treeView1.Nodes.Add(tnSub);
pob.SetParent = null;
}
else {
treeView1.SelectedNode = treeView1.Nodes[0];
treeView1.SelectedNode.Nodes.Add(tnSub);
PackObjBase ppob = (PackObjBase)treeView1.SelectedNode.Tag;
if (ppob != null) pob.SetParent = ppob;
}
}
else
{
treeView1.SelectedNode.Nodes.Add(tnSub);
PackObjBase ppob = (PackObjBase)treeView1.SelectedNode.Tag;
if (ppob != null) pob.SetParent = ppob;
}
//只有在多层级时才会把当前处理的结点做为选中结点,这下会生成多层级结点
if (isSelMySelft)
{
treeView1.SelectedNode = tnSub;
}
else
{
treeView1.SelectedNode = tnSub.Parent;
selectNode = tnSub.Parent;
}
TreeNodeMouseClickEventArgs e = new TreeNodeMouseClickEventArgs(tnSub, 0, 0, 0, 0);
DrawPackObject(pob);
if (isSelMySelft)
{
selectPoB = pob;
}
else
{
selectPoB = pob.SetParent;
}
//treeView1_NodeMouseClick(null, e);
}
DrawGraphManagement.MyUserControl.UCBase uc = null;
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
TreeNode tn = e.Node;
selectNode = tn;
PackObjBase pob = (PackObjBase)tn.Tag;
DrawPackObject(pob);
}
private void DrawPackObject(PackObjBase pob)
{
if (pob != null)
{
if (selectPoB != null && !pob.Equals(selectPoB))
{
selectPoB.IsSelect = false;
selectPoB.Draw();
}
if (selectPoB == null || !pob.Equals(selectPoB))
{
pob.IsSelect = true;
selectPoB = pob;
}
//得先画才能显示属性
pob.Draw();
//设置属性
SetPropertyPanle(pob);
}
}
/// <summary>
/// 设置属性面板的显示
/// </summary>
/// <param name="pob"></param>
private void SetPropertyPanle(PackObjBase pob)
{
Type type = pob.GetType();
PropertyInfo[] infos = type.GetProperties();
toolTip1.RemoveAll();
panel3.Controls.Clear();
Panel panel = null;
Panel sumPanel = new Panel();
sumPanel.AutoSize = true;
sumPanel.Dock = DockStyle.Top;
foreach (PropertyInfo info in infos)
{
Attribute[] attribs = Attribute.GetCustomAttributes(info);
Attribute attrib = attribs.FirstOrDefault<Attribute>(s => s is NoCreatControlAttributs);
//如果增加了NoCreatControlAttributs这个属性的属性则不生成控件
if (attrib != null) continue;
if (info.PropertyType == typeof(String) || info.PropertyType == typeof(uint) || info.PropertyType == typeof(int) || info.PropertyType == typeof(DateTime) || info.PropertyType == typeof(float) || info.PropertyType == typeof(double) || info.PropertyType == typeof(bool))
{
uc = new DrawGraphManagement.MyUserControl.UCAttrib(selectPoB);
uc.SetToolTip = toolTip1;
panel = uc.GreatPropertyPanel(info);
}
else if (info.PropertyType == typeof(Color))
{
uc = new DrawGraphManagement.MyUserControl.UCColor(selectPoB);
uc.SetToolTip = toolTip1;
uc.colorDialog1 = colorDialog1;
panel = uc.GreatPropertyPanel(info);
}
else if (info.PropertyType.IsEnum)
{
uc = new DrawGraphManagement.MyUserControl.UCSelect(selectPoB);
uc.datasource = System.Enum.GetNames(info.PropertyType);
uc.SetToolTip = toolTip1;
panel = uc.GreatPropertyPanel(info);
}
if (panel != null)
{
sumPanel.Controls.Add(panel);
ModPackObjTree(treeView1.Nodes, selectPoB);
}
uc.ChangeValue += new UCBase.ChangeValueEventHandler(UC_ChangeValue);
}
this.panel3.Controls.Add(sumPanel);
}
public void UC_ChangeValue(PackObjBase sender, EventArgs e)
{
uc.ChangeValue -= new UCBase.ChangeValueEventHandler(UC_ChangeValue);
if (sender == null) return;
}
public void labColor_Click(object sender, EventArgs e)
{
if (selectPoB == null) return;
System.Windows.Forms.Label lab = (sender as System.Windows.Forms.Label);
try
{
Color col = ((BoxPackObj)selectPoB).FillColor;
if (colorDialog1.ShowDialog() == DialogResult.OK)
{
col = colorDialog1.Color;
((BoxPackObj)selectPoB).FillColor = col;
lab.BackColor = col;
}
}
catch (Exception)
{
}
finally
{
ModPackObjTree(treeView1.Nodes, selectPoB);
if (selectPoB != null)
{
selectPoB.Draw();
}
}
}
float moveSpanX = 0;
float moveSpanY = 0;
MovePackObjCommand moveCmd = null;
private bool zedGraphControl1_MouseDownEvent(ZedGraphControl sender, MouseEventArgs e)
{
moveSpanX = (float)(Convert.ToDouble(e.X) / Convert.ToDouble(zedGraphControl1.Width));
moveSpanY = (float)(Convert.ToDouble(e.Y) / Convert.ToDouble(zedGraphControl1.Height));
float x = (float)(Convert.ToDouble(e.X) / Convert.ToDouble(zedGraphControl1.Width));
float y = (float)(Convert.ToDouble(e.Y) / Convert.ToDouble(zedGraphControl1.Height));
if (e.Button == MouseButtons.Left)
{
CommandManage.GetInstance.MouseLeftDown = true;
if (CommandManage.GetInstance.CtrlDown)
{
if (selectPoB != null)
{
moveCmd = new MovePackObjCommand(areaManage, selectPoB);
moveCmd.PreExecute();
}
}
}
if (e.Button == MouseButtons.Right)
{
zedGraphControl1.ContextMenuStrip.Items.Clear();
List<PackObjBase> packs = areaManage.PackManage.ListPob.FindAll(s => s is TextPackObj);
bool isHaveSelect = false;
PackObjBase selPobT = null;
foreach (PackObjBase pack in packs)
{
if (pack.InScope((float)x, (float)y))
{
ToolStripItem mi = new ToolStripMenuItem();
int lent = 6;
if (pack.PackText.Length <= lent) lent = pack.PackText.Length;
mi.Text = pack.PackText.Substring(0, lent);
mi.Click -= new EventHandler(contextMenuStrip3_ItemClick);
mi.Click += new EventHandler(contextMenuStrip3_ItemClick);
mi.Tag = pack;
zedGraphControl1.ContextMenuStrip.Items.Add(mi);
selPobT = pack;
isHaveSelect = true;
}
}
if (!isHaveSelect)
{
PackObjBase pack = areaManage.PackManage.ListPob.FirstOrDefault(s => s is BorderPackObj);
if (pack != null)
{
ToolStripItem mi = new ToolStripMenuItem();
//int lent = 6;
mi.Text = "白板对象";
mi.Click -= new EventHandler(contextMenuStrip3_ItemClick);
mi.Click += new EventHandler(contextMenuStrip3_ItemClick);
mi.Tag = pack;
zedGraphControl1.ContextMenuStrip.Items.Add(mi);
}
}
}
return default(bool);
}
private void contextMenuStrip3_ItemClick(object sender, EventArgs e)
{
ToolStripItem item = (ToolStripItem)sender;
PackObjBase pack = item.Tag as PackObjBase;
if (pack != null) {
DrawPackObject(pack);
ClearSelectColor(treeView1.Nodes);
//右键选中后右侧树结点标红
TreeColorRed(treeView1.Nodes, pack.Descript ,false);
treePropertyList.ExpandAll();
}
}
private bool zedGraphControl1_MouseMoveEvent(ZedGraphControl sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
if (CommandManage.GetInstance.CtrlDown && CommandManage.GetInstance.MouseLeftDown) {
if (selectPoB != null && moveCmd != null) {
float pointTX = (float)(Convert.ToDouble(e.X) / Convert.ToDouble(zedGraphControl1.Width));
float pointTY = (float)(Convert.ToDouble(e.Y) / Convert.ToDouble(zedGraphControl1.Height));
moveSpanX = pointTX - moveSpanX - poManager.X;
moveSpanY = pointTY - moveSpanY - poManager.Y;
moveCmd.Execute(moveSpanX, moveSpanY);
moveSpanX = selectPoB.X;
moveSpanY = selectPoB.Y;
}
}
}
return default(bool);
}
private bool zedGraphControl1_MouseUpEvent(ZedGraphControl sender, MouseEventArgs e)
{
double x = Convert.ToDouble(Convert.ToDouble(e.X) / Convert.ToDouble(zedGraphControl1.Width));
double y = Convert.ToDouble(Convert.ToDouble(e.Y) / Convert.ToDouble(zedGraphControl1.Height));
int scrollX = 0;
int scrollY = 0;
scrollX = panelzgc.HorizontalScroll.Value;
scrollY = panelzgc.VerticalScroll.Value;
txtXAisx.Text = x.ToString();// + "--" + scrollX.ToString();
txtYAisx.Text = y.ToString(); //"--" + scrollY.ToString();
if (e.Button == MouseButtons.Left)
{
if (CommandManage.GetInstance.CtrlDown && CommandManage.GetInstance.MouseLeftDown)
{
CommandManage.GetInstance.MouseLeftDown = false;
if (moveCmd != null)
{
moveCmd.LastExecute();
CommandManage.GetInstance.AddCommand(moveCmd);
if (selectPoB != null)
{
string propertyName = "X,Y,EndX,EndY";
SetSpecificPropertyValues(propertyName);
}
}
}
}
return default(bool);
}
/// <summary>
/// 设置属性面板中特定的值
/// </summary>
/// <param name="propertyName"></param>
private void SetSpecificPropertyValues(string _propertyName)
{
string[] pros = _propertyName.Split(',');
foreach (string propertyName in pros)
{
Control[] conls = panel3.Controls.Find("textBox" + propertyName, true);
if (conls.Length > 0)
{
Type Ts = selectPoB.GetType();
object o = Ts.GetProperty(propertyName).GetValue(selectPoB, null);
string Value = Convert.ToString(o);
conls[0].Text = Value;
}
}
}
/// <summary>
/// 画直线
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void PackObjBtn_Click(object sender, EventArgs e)
{
Button btn = (Button)sender;
if (btn != null && btn.Tag != null)
{
PackObjBase bpo = BoardUtil.PackObjFactory(btn.Tag.ToString(), zedGraphControl1, poManager);
if (bpo != null)
{
poManager.ListPob.Add(bpo);
InsertPackObjTree(bpo);
}
}
}
/// <summary>
/// 按顺序画组件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
poManager.DrawPackObj();
}
/// <summary>
/// 保存文件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, EventArgs e)
{
bool reVal = false;
reVal = areaManage.Save();
if (reVal)
{
MessageBox.Show(poManager.MsgStr);
}
else
{
MessageBox.Show(poManager.MsgStr);
}
}
/// <summary>
/// 打开模板
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button3_Click(object sender, EventArgs e)
{
//poManager = new PackObjManager(zedGraphControl1);
//poManager.AllClear();
//selectPoB = null;
//if (uc is DrawGraphManagement.MyUserControl.UCAttrib)
// (uc as DrawGraphManagement.MyUserControl.UCAttrib).Clear();
//OpenFileDialog ofd = new OpenFileDialog();
//ofd.Filter = "(*.pom)|*.pom|(*.khd)|*.KHD|(*.*)|*.*";
//ofd.RestoreDirectory = true;
//if (ofd.ShowDialog() == DialogResult.OK)
//{
// try
// {
// asFileName = ofd.FileName;
// //管理器加载
// poManager.LoadContent(ofd.FileName);
// treeView1.Nodes.Clear();
// InsertPackObjToTree(poManager.ListPob);
// }
// catch (Exception exp)
// {
// MessageBox.Show(exp.Message);
// }
// ControlDatabind();
//}
}
private void ControlDatabind(bool isDataSource = true)
{
txtManagerX.DataBindings.Clear();
txtManagerX.DataBindings.Add("text", poManager, "X");
txtManagerY.DataBindings.Clear();
txtManagerY.DataBindings.Add("text", poManager, "Y");
txtManageName.DataBindings.Clear();
txtManageName.DataBindings.Add("text", areaManage, "Name");
txtClassName.DataBindings.Clear();
txtClassName.DataBindings.Add("text", areaManage, "ClassName");
if (areaManage.DllName == "") areaManage.DllName = "DrawGraph.dll";
txtDllName.DataBindings.Clear();
txtDllName.DataBindings.Add("text", areaManage, "DllName");
if (areaManage.NameSpace == "") areaManage.NameSpace = "DrawGraph.";
txtNameSpace.DataBindings.Clear();
txtNameSpace.DataBindings.Add("text", areaManage, "NameSpace");
if (areaManage.InstanceName == "") areaManage.InstanceName = "OperationRecord";
txtInstanceName.DataBindings.Clear();
txtInstanceName.DataBindings.Add("text", areaManage, "InstanceName");
BoardUtil.ZedControlClear(zedGraphControl1);
if (isDataSource)
//绑定treePropertyList控件手术类属性列表
BindPropertyList(areaManage.OpeRecord);
else
BindEntityList();
}
private void BindEntityList()
{
List<string> Entitys = new List<string>();
Assembly _Assembyle = Assembly.LoadFile(AppDomain.CurrentDomain.BaseDirectory + "DrawGraph.dll");//你的loadfile
Type[] _TypeList = _Assembyle.GetTypes();
for (int i = 0; i != _TypeList.Length; i++)
{
if (_TypeList[i].Namespace == "DrawGraphManagementArea.DocumentEntity")
{
Entitys.Add(_TypeList[i].Name);
}
}
txtInstanceName.DataSource = Entitys;
}
/// <summary>
/// 绑定treePropertyList控件手术类属性列表
/// </summary>
private void BindPropertyList(Object classObj, string objName = "OperationRecord")
{
treePropertyList.Nodes.Clear();
PropertyObject proObj = new PropertyObject();
proObj.Key = objName;
proObj.Description = "类名";
List<PropertyObject> propertyList = BoardFormUtil.GetPropertyList(classObj);
proObj.SubPropertyList = propertyList;
TreeNode tnSub = new TreeNode();
tnSub.Name = proObj.ViewTreeNode;
tnSub.Text = proObj.ViewTreeNode;
tnSub.Tag = proObj;
treePropertyList.Nodes.Add(tnSub);
BindPropertyListSubNode(propertyList, tnSub.Nodes);
}
/// <summary>
/// 绑定treePropertyList控件的子结点
/// </summary>
/// <param name="propertyList"></param>
/// <param name="nodes"></param>
private void BindPropertyListSubNode(List<PropertyObject> propertyList, TreeNodeCollection nodes)
{
foreach (PropertyObject propert in propertyList)
{
TreeNode tnSub = new TreeNode();
tnSub.Name = propert.ViewTreeNode;
tnSub.Text = propert.ViewTreeNode;
tnSub.Tag = propert;
if (propert.SubPropertyList.Count > 0)
{
BindPropertyListSubNode(propert.SubPropertyList, tnSub.Nodes);
}
nodes.Add(tnSub);
}
}
private void InsertPackObjToTree(List<PackObjBase> pobs)
{
List<PackObjBase> subPobs = pobs.FindAll((c) => { return c.ParentName == ""; });
foreach (PackObjBase pob in subPobs)
{
//先插入父节点为空的内容到根节点
InsertListPobObjToTree(pob);
//插入此结点下的所有子节点
InsertSubPackObjToTree(pobs, pob);
}
}
private void InsertSubPackObjToTree(List<PackObjBase> pobs, PackObjBase parentPob)
{
List<PackObjBase> subPobs = pobs.FindAll((c) => { return c.ParentName == parentPob.PackName; });
if (subPobs.Count > 0)
{
foreach (PackObjBase pob in subPobs)
{
pob.SetParent = parentPob;
InsertListPobObjToTree(pob);
//回调查找自己下面是否有子对象
InsertSubPackObjToTree(pobs, pob);
}
}
}
private void InsertListPobObjToTree(PackObjBase pob)
{
pob.Changed += new PackObjBase.ChangedEventHandler(Bpo_Changed);
TreeNode tnSub = new TreeNode();
pob.IsSelect = false;
tnSub.Name = pob.PackName;
tnSub.Tag = pob;
tnSub.Text = pob.Descript;
if (pob.SetParent == null)
{
treeView1.Nodes.Add(tnSub);
}
else
{
TreeNode[] tns = treeView1.Nodes.Find(pob.SetParent.PackName, true);
if (tns.Length > 0)
{
tns[0].Nodes.Add(tnSub);
}
}
pob.Draw();
}
private void MenuItem_Click(object sender, EventArgs e)
{
ToolStripMenuItem btn = (ToolStripMenuItem)sender;
if (btn != null && btn.Tag != null)
{
string tag = btn.Tag.ToString();
switch (tag)
{
case "ChartPackObj":
this.CreateTreeItem(tag);
this.CreateTreeItem(x1轴ToolStripMenuItem.Tag.ToString());
this.CreateTreeItem(x2轴ToolStripMenuItem.Tag.ToString(), true);
this.CreateTreeItem(y1轴ToolStripMenuItem.Tag.ToString(), true);
this.CreateTreeItem(y2轴ToolStripMenuItem.Tag.ToString(), true);
break;
default:
this.CreateTreeItem(tag);
break;
}
}
}
/// <summary>
/// 可建立绑定数据源的结点
/// </summary>
/// <param name="tag"></param>
/// <param name="dataSourceName"></param>
/// <param name="tagDesc"></param>
/// <param name="viewText"></param>
private void CreateTreeItem(string tag, string dataSourceName = "", string tagDesc = "", string viewText = "", bool isSelMySelf = true)
{
PackObjBase bpo = BoardUtil.PackObjFactory(tag, zedGraphControl1, poManager);
//#region 增加初始默认值
if (bpo is LinePackObj || bpo is BoxPackObj || bpo is DottedLinePackObj || bpo is DottedLinesPackObj || bpo is LinesPackObj || bpo is RectangleFramePackObj)
{
bpo.EndX = 0.1f;
bpo.EndY = 0.1f;
}
if (bpo is AbleEditPackObj) {
AbleEditPackObj a = bpo as AbleEditPackObj;
a.IsViewBoard = EIsBool.True;
}
//#endregion
if (bpo != null)
{
if (dataSourceName != "")
{
bpo.DataSourceName = dataSourceName;
bpo.CreatePackTag();
}
if (tagDesc != "")
{
bpo.Descript = tagDesc;
}
if (viewText != "")
{
bpo.PackText = viewText;
}
if (bpo is TextPackObj) {
TextPackObj tpb = (bpo as TextPackObj);
float d = 0;
if (float.TryParse(txtFontSize.Text,out d))
{
tpb.FontSize = d;
}
}
bool reVal = poManager.ListPobsAdd(bpo);
if (reVal)
{
InsertPackObjTree(bpo, isSelMySelf);
bpo.Changed += new PackObjBase.ChangedEventHandler(Bpo_Changed);
}
else
{
MessageBox.Show("创建组件不能重复");
}
}
}
/// <summary>
/// 建立普通非绑定数据源的结点
/// </summary>
/// <param name="tag"></param>
/// <param name="hasBrother"></param>
private void CreateTreeItem(string tag, bool hasBrother)
{
PackObjBase bpo = BoardUtil.PackObjFactory(tag, zedGraphControl1, poManager);
if (bpo != null)
{
if (hasBrother)
treeView1.SelectedNode = treeView1.SelectedNode.Parent;
poManager.ListPob.Add(bpo);
InsertPackObjTree(bpo);
bpo.Changed += new PackObjBase.ChangedEventHandler(Bpo_Changed);
}
}
private void Bpo_Changed(PackObjBase pob)
{
ModPackObjTree(treeView1.Nodes, pob);
}
private void Form1_KeyUp(object sender, KeyEventArgs e)
{
if ((e.Control) && e.KeyCode == Keys.S)
{
SaveFileForKey();
}
if ((e.Control) && e.KeyCode == Keys.Z) {
bool val = CommandManage.GetInstance.CtrlZCommand();
if (val)
{
ReLoad();
}
}
if ((e.Control) && e.KeyCode == Keys.Y)
{
bool val = CommandManage.GetInstance.CtrlYCommand();
if (val)
{
ReLoad();
}
}else if (e.Control && e.KeyCode == Keys.Left)
{
TreeNode tn = treeView1.SelectedNode;
if (tn != null)
{
PackObjBase pob = (PackObjBase)tn.Tag;
if (pob != null)
{
float moveSpanX = float.Parse(txtMoveValue.Text.Trim());
float moveSpanY = 0f;
MovePackObjCommand cmd = new MovePackObjCommand(areaManage, pob);
cmd.Execute(-moveSpanX, moveSpanY);
string propertyName = "X,Y,EndX,EndY";
SetSpecificPropertyValues(propertyName);
}
}
}
else if (e.Control && e.KeyCode == Keys.Right)
{
TreeNode tn = treeView1.SelectedNode;
if (tn != null)
{
PackObjBase pob = (PackObjBase)tn.Tag;
if (pob != null)
{
float moveSpanX = float.Parse(txtMoveValue.Text.Trim());
float moveSpanY = 0f;
MovePackObjCommand cmd = new MovePackObjCommand(areaManage, pob);
cmd.Execute(moveSpanX, moveSpanY);
string propertyName = "X,Y,EndX,EndY";
SetSpecificPropertyValues(propertyName);
}
}
}
else if (e.Control && e.KeyCode == Keys.Up)
{
TreeNode tn = treeView1.SelectedNode;
if (tn != null)
{
PackObjBase pob = (PackObjBase)tn.Tag;
if (pob != null)
{
float moveSpanY = float.Parse(txtMoveValue.Text.Trim());
float moveSpanX = 0f;
MovePackObjCommand cmd = new MovePackObjCommand(areaManage, pob);
cmd.Execute(moveSpanX, -moveSpanY);
string propertyName = "X,Y,EndX,EndY";
SetSpecificPropertyValues(propertyName);
}
}
}
else if (e.Control && e.KeyCode == Keys.Down)
{
TreeNode tn = treeView1.SelectedNode;
if (tn != null)
{
PackObjBase pob = (PackObjBase)tn.Tag;
if (pob != null)
{
float moveSpanY = float.Parse(txtMoveValue.Text.Trim());
float moveSpanX = 0f;
MovePackObjCommand cmd = new MovePackObjCommand(areaManage, pob);
cmd.Execute(moveSpanX, moveSpanY);
string propertyName = "X,Y,EndX,EndY";
SetSpecificPropertyValues(propertyName);
}
}
}
CommandManage.GetInstance.CtrlDown = false;
}
private void ReLoad()
{
selectPoB = null;
zedGraphControl1.MasterPane.GraphObjList.Clear();
treeView1.Nodes.Clear();
panel3.Controls.Clear();
poManager.SetZedControl(zedGraphControl1);
InsertPackObjToTree(poManager.ListPob);
treeView1.ExpandAll();
zedGraphControl1.Refresh();
}
private void zedGraphControl1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control)
{
CommandManage.GetInstance.CtrlDown = true;
}
}
/// <summary>
/// 使用Ctrl + S组合键保存
/// </summary>
private void SaveFileForKey()
{
poManager.SaveFile("", areaManage.Id);
}
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
pDoc.PrintPage += new PrintPageEventHandler(pDoc_PrintPage);
System.Windows.Forms.PrintDialog pDlg = new System.Windows.Forms.PrintDialog();
pDlg.Document = pDoc;
if (pDlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
pDoc.Print();
}
}
private void pDoc_PrintPage(object sender, PrintPageEventArgs e)
{
try
{
pDoc.PrintPage -= new PrintPageEventHandler(pDoc_PrintPage);
Image img = zedGraphControl1.GetImage();
//e.Graphics.DrawImage(img,20f,0f,800f,1160f);
e.Graphics.DrawImage(img, 20f, 0f);
}
catch (Exception ex)
{
Console.Write(ex.ToString());
}
}
private void treeView1_MouseDown(object sender, MouseEventArgs e)
{
if (tabControl1.SelectedIndex == 0)
{
if (e.Button == MouseButtons.Right)
{
Point ClickPoint = new Point(e.X, e.Y);
TreeNode current = treeView1.GetNodeAt(ClickPoint);
if (current != null)//判断你点的是不是一个节点
{
treeView1.SelectedNode = current;//选中这个节点
}
}
}
}
/// <summary>
/// 临时节点集合:用于临时存储剪切或者复制下的节点信息
/// </summary>
PackObjTree packObjTree = new PackObjTree();
/// <summary>
/// 树结构的操作方式:剪切或者拷贝
/// </summary>
bool isCopy = false;
private void cutMenuItem_Click(object sender, EventArgs e)
{
CutForKey();
}
/// <summary>
/// 剪切节点操作
/// </summary>
private void CutForKey()
{
TreeNode node = treeView1.SelectedNode;
packObjTree = InitPackObjTree(node);
RemoveNode(node);
//this.pasteMenuItem.Enabled = true;
isCopy = false;
}
private void copyMenuItem_Click(object sender, EventArgs e)
{
CopyForKey();
}
/// <summary>
/// 复制操作
/// </summary>
private void CopyForKey()
{
TreeNode node = treeView1.SelectedNode;
packObjTree = InitPackObjTree(node);
//this.pasteMenuItem.Enabled = true;
isCopy = true;
}
private void pasteMenuItem_Click(object sender, EventArgs e)
{
PasteForKey();
}
/// <summary>
/// 粘贴操作
/// </summary>
private void PasteForKey()
{
//this.pasteMenuItem.Enabled = isCopy;
if (isCopy)
{
PackObjBase pob = packObjTree.Current.CloneParse();
if (pob != null)
{
poManager.ListPob.Add(pob);
InsertPackObjTree(pob);
pob.Changed += new PackObjBase.ChangedEventHandler(Bpo_Changed);
}
}
if (!isCopy)
packObjTree = null;
}
private void deleteMenuItem_Click(object sender, EventArgs e)
{
DialogResult dr = MessageBox.Show("是否要确认删除?", "删除确认", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
if (dr == DialogResult.OK)
{
TreeNode node = treeView1.SelectedNode;
RemoveNode(node);
}
}
/// <summary>
/// 构造临时节点树
/// </summary>
/// <param name="node">需要添加的节点</param>
private PackObjTree InitPackObjTree(TreeNode node)
{
PackObjTree pobTree = new PackObjTree();
if (node != null)
{
PackObjBase pob = (PackObjBase)node.Tag;
pobTree.Current = pob;
pobTree.ParentPob = pob.SetParent;
if (node.Nodes != null && node.Nodes.Count > 0)
{
foreach (TreeNode tempNode in node.Nodes)
{
pobTree.SonPobs.Add(InitPackObjTree(tempNode));
}
}
}
return pobTree;
}
/// <summary>
/// 移除指定节点及子节点
/// </summary>
/// <param name="node">需要移除的节点</param>
private void RemoveNode(TreeNode node)
{
if (node != null)
{
PackObjBase pob = (PackObjBase)node.Tag;
if (pob != null)
{
DelPackObj(node, pob);
}
List<TreeNode> nodeCol = new List<TreeNode>();
foreach (TreeNode tempNode in node.Nodes)
{
nodeCol.Add(tempNode);
}
if (node.Nodes != null && node.Nodes.Count > 0)
{
foreach (TreeNode tempNode in nodeCol)
{
RemoveNode(tempNode);
}
}
}
}
private void treeView1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Delete)
{
TreeNode tn = treeView1.SelectedNode;
if (tn != null)
{
PackObjBase pob = (PackObjBase)tn.Tag;
if (pob != null)
{
DialogResult dr = MessageBox.Show("是否要确认删除?", "删除确认", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
if (dr == DialogResult.OK)
{
RemoveNode(tn);
}
}
}
}
else if ((e.Control) && e.KeyCode == Keys.S)
{
//SaveFileForKey();
}
else if ((e.Control) && e.KeyCode == Keys.C)
{
//CopyForKey();
}
else if ((e.Control) && e.KeyCode == Keys.X)
{
//CutForKey();
}
else if ((e.Control) && e.KeyCode == Keys.V)
{
//if (packObjTree != null)
// PasteForKey();
}
}
private void DelPackObj(TreeNode tn, PackObjBase pob)
{
MovePackObjCommand cmd = new MovePackObjCommand(CommandManage.GetInstance.AreaManage, pob);
cmd.PreExecute();
bool reBool = poManager.RemovePob(pob);
if (reBool)
{
//如果执行成功保存命令
cmd.LastExecute();
CommandManage.GetInstance.AddCommand(cmd);
//执行其他操作;
pob.Clear();
selectPoB = null;
zedGraphControl1.Refresh();
panel3.Controls.Clear();
if (tn != null)
{
TreeNodeCollection tns = tn.Nodes;
TreeNode tnParent = tn.Parent;
treeView1.Nodes.Remove(tn);
if (tns.Count > 0)
{
foreach (TreeNode tnTemp in tns)
{
tnParent.Nodes.Add(tnTemp);
}
}
}
}
}
private void toolStripMenuItem1_Click(object sender, EventArgs e)
{
TreeNode selNode = treePropertyList.SelectedNode;
if (selNode != null)
{
PropertyObject property = (PropertyObject)selNode.Tag;
if (property != null)
{
ToolStripMenuItem item = sender as ToolStripMenuItem;
if (item != null)
{
PackObjBase pack = areaManage.PackManage.ListPob.FirstOrDefault<PackObjBase>(s => s.DataSourceName == property.ViewDesignTag());
bool isAdd = true;
if (pack != null) {
DialogResult result = MessageBox.Show("要增加的数据绑定组件,已经存在,且结点是:"+ pack.Descript, "是否增加", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result == DialogResult.Yes)
{
isAdd = true;
}
else {
isAdd = false;
}
}
if (isAdd)
{
if (selectNode != null)
{
treeView1.SelectedNode = selectNode;
}
//自动增加一组带描述,下划线及文本对象的组件。
//设置成有层级关系的
//isAddNodeDown = true;
this.CreateTreeItem("TextPackObj", "", property.Key + "文本", property.Key);
this.CreateTreeItem(item.Tag.ToString(), property.ViewDesignTag(), property.Key,"", false);
//完成后换成无层级模式。
//isAddNodeDown = false;
}
}
else
{
MessageBox.Show("创建组件时TAG不能为空");
}
}
}
}
private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
{
//if (tabControl1.SelectedIndex == 0)
//{
// isAddNodeDown = true;
//}
//else
//{
// isAddNodeDown = false;
//}
}
private void button1_Click_1(object sender, EventArgs e)
{
string objName = txtInstanceName.Text.Trim();
Object obj = BoardFormUtil.GetObjectFactory<Object>(areaManage.DllName, areaManage.NameSpace, areaManage.InstanceName);
BindPropertyList(obj, objName);
}
private void btnSearchInfo_Click(object sender, EventArgs e)
{
TreeColorRed(treePropertyList.Nodes, txtSearchInfo.Text.Trim());
treePropertyList.ExpandAll();
}
private void btnSearchPack_Click(object sender, EventArgs e)
{
string searchInfo = textBox2.Text.Trim();
if (searchInfo == "") return;
ClearSelectColor(treeView1.Nodes);
List<PackObjBase> pobs = areaManage.PackManage.ListPob.FindAll(s => s.PackText.ToUpper().IndexOf(searchInfo.ToUpper()) >= 0);
foreach (PackObjBase pob in pobs)
{
TreeColorRed(treeView1.Nodes, pob.Descript);
}
treeView1.ExpandAll();
}
private void ClearSelectColor(TreeNodeCollection nodes) {
foreach (TreeNode nodeInNode in nodes)
{
nodeInNode.BackColor = Color.White;
if (nodeInNode.Nodes.Count > 0)
{
ClearSelectColor(nodeInNode.Nodes);
}
}
}
private void TreeColorRed(TreeNodeCollection nodes, string searchInfo, bool isVague = true)
{
foreach (TreeNode nodeInNode in nodes)
{
if (isVague)
{
if (nodeInNode.Text.Trim().ToUpper().IndexOf(searchInfo.ToUpper()) >= 0 && searchInfo != "")
{
nodeInNode.BackColor = Color.Red;
selectNode = nodeInNode;
treeView1.SelectedNode = selectNode;
}
}
else {
if (nodeInNode.Text.Trim().ToUpper() == searchInfo.ToUpper() && searchInfo != "")
{
nodeInNode.BackColor = Color.Red;
selectNode = nodeInNode;
treeView1.SelectedNode = selectNode;
}
}
if (nodeInNode.Nodes.Count > 0)
{
TreeColorRed(nodeInNode.Nodes, searchInfo, isVague);
}
}
}
private void treeView1_AfterLabelEdit(object sender, NodeLabelEditEventArgs e)
{
PackObjBase pack = e.Node.Tag as PackObjBase;
if (pack != null && selectPoB != null && e.Label != null) {
selectPoB = null;
pack.Descript = e.Label.Trim();
pack.PackText = e.Label.Trim().Replace("文本","");
DrawPackObject(pack);
}
}
private void AreaManageForm_Resize(object sender, EventArgs e)
{
AutoSizeF();
}
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
isViewBackImg = checkBox1.Checked;
loadBackImage();
}
private void txtXAisx_DoubleClick(object sender, EventArgs e)
{
TextBox send = sender as TextBox;
if (send != null)
{
Clipboard.SetDataObject(send.Text);
}
}
private void AreaManageForm_FormClosing(object sender, FormClosingEventArgs e)
{
Clipboard.Clear();
CommandManage.GetInstance.Clear();
foreach (PackObjBase pob in poManager.ListPob) {
if (pob is AbleEditPackObj) {
AbleEditPackObj a = pob as AbleEditPackObj;
a.IsViewBoard = EIsBool.False;
}
}
}
private void btnOk_Click(object sender, EventArgs e)
{
string fontSize = txtFontSize.Text;
List<PackObjBase> ables = areaManage.PackManage.ListPob.Where<PackObjBase>(s => s is AbleEditPackObj).ToList<PackObjBase>();
foreach (PackObjBase pack in ables)
{
AbleEditPackObj ableEdit = pack as AbleEditPackObj;
ableEdit.FontSize = int.Parse(fontSize);
}
List<PackObjBase> ablesT = areaManage.PackManage.ListPob.Where<PackObjBase>(s => s is TextPackObj).ToList<PackObjBase>();
foreach (PackObjBase pack in ablesT)
{
TextPackObj ableEdit = pack as TextPackObj;
ableEdit.FontSize = int.Parse(fontSize);
}
areaManage.Draw();
}
private void CmdToolStripMenuItem_Click(object sender, EventArgs e)
{
if (selectPoB == null) return;
ToolStripMenuItem item = sender as ToolStripMenuItem;
switch (item.Tag.ToString())
{
case "HCenterCmd":
CommandManage.GetInstance.HCenterCmd(selectPoB);
break;
case "VCenterCmd":
CommandManage.GetInstance.VCenterCmd(selectPoB);
break;
case "TopAlignCmd":
CommandManage.GetInstance.TopAlignCmd(selectPoB);
break;
case "LeftAlignCmd":
CommandManage.GetInstance.LeftAlignCmd(selectPoB);
break;
case "alignCmdOfPack":
alignCmdOfPackPnl.Visible = true;
cmbPackList.Items.Clear();
foreach (PackObjBase pack in areaManage.PackManage.ListPob)
{
cmbPackList.Items.Add(pack.Descript);
}
cmbPackList.AutoCompleteMode = AutoCompleteMode.SuggestAppend;//设置自动完成的模式
cmbPackList.AutoCompleteSource = AutoCompleteSource.ListItems;//设置自动完成字符串的源
break;
}
string propertyName = "X,Y,EndX,EndY";
SetSpecificPropertyValues(propertyName);
}
private void button3_Click_1(object sender, EventArgs e)
{
alignCmdOfPackPnl.Visible = false;
}
private void btnAlignCmd_Click(object sender, EventArgs e)
{
if (selectPoB == null)
{
MessageBox.Show("要先选中组件");
return;
}
if (cmbPackList.Text.Trim() == "" && cmbPackAlignType.Text.Trim() == "")
{
MessageBox.Show("对齐参数不能为空");
return;
}
PackObjBase JZPack = areaManage.PackManage.ListPob.FirstOrDefault(s => s.Descript == cmbPackList.Text);
if (JZPack != null)
{
if (cmbPackAlignType.Text.Trim() == "等宽")
{
CommandManage.GetInstance.SameWidthCmd(selectPoB, JZPack);
}
else if (cmbPackAlignType.Text.Trim() == "等高")
{
CommandManage.GetInstance.SameHeightCmd(selectPoB, JZPack);
}
else if (cmbPackAlignType.Text.Trim() == "右")
{
CommandManage.GetInstance.SameRightCmd(selectPoB, JZPack);
}
else
{
CommandManage.GetInstance.AlignCmdOfPack(selectPoB, JZPack, cmbPackAlignType.Text.Trim());
}
string propertyName = "X,Y,EndX,EndY";
SetSpecificPropertyValues(propertyName);
}
}
private void cmbPackList_TextChanged(object sender, EventArgs e)
{
}
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (selectPoB == null)
{
MessageBox.Show("要先选中组件");
return;
}
if (selectPoB.ConvertMode == EConvertMode.NoConvert)
{
MessageBox.Show("选中对象的ConverMode不能是NoConvert");
return;
}
ConvertModeForm form = new ConvertModeForm(selectPoB, null);
form.ShowDialog();
}
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
TreeNode selNode = treePropertyList.SelectedNode;
if (selNode != null)
{
PropertyObject property = (PropertyObject)selNode.Tag;
if (property != null)
{
ToolStripMenuItem item = sender as ToolStripMenuItem;
if (item != null)
{
PackObjBase pack = areaManage.PackManage.ListPob.FirstOrDefault<PackObjBase>(s => s.DataSourceName == property.ViewDesignTag());
bool isAdd = true;
if (pack != null)
{
DialogResult result = MessageBox.Show("要增加的数据绑定组件,已经存在,且结点是:" + pack.Descript, "是否增加", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result == DialogResult.Yes)
{
isAdd = true;
}
else
{
isAdd = false;
}
}
if (isAdd)
{
if (selectNode != null)
{
treeView1.SelectedNode = selectNode;
}
//自动增加一组带描述,下划线及文本对象的组件。
//完成后换成无层级模式。
//isAddNodeDown = false;
this.CreateTreeItem(item.Tag.ToString(), property.ViewDesignTag(), property.Key);
}
}
else
{
MessageBox.Show("创建组件时TAG不能为空");
}
}
}
}
//鼠标移动窗体移动
private bool isMouseDown = false;
private Point lableLocation; //lable的location
private Point mouseOffset; //鼠标的按下位置
private void lable_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
isMouseDown = true;
lableLocation = ((Panel)sender).Location;
mouseOffset = Control.MousePosition;
}
}
private void lable_MouseUp(object sender, MouseEventArgs e)
{
isMouseDown = false;
}
private void lable_MouseMove(object sender, MouseEventArgs e)
{
int _x = 0;
int _y = 0;
if (isMouseDown)
{
Point pt = Control.MousePosition;
_x = mouseOffset.X - pt.X;
_y = mouseOffset.Y - pt.Y;
((Panel)sender).Location = new Point(lableLocation.X - _x, lableLocation.Y - _y);
}
}
private void contextMenuStrip2_VisibleChanged(object sender, EventArgs e)
{
contextMenuStrip2.Enabled = true;
if (contextMenuStrip2.Visible) {
//根结点
TreeNode rootNode = treePropertyList.Nodes[0];
TreeNode selNode = treePropertyList.SelectedNode;
if (rootNode != null && selNode != null)
{
//只有要根结点下的所有数据对象可以生成可编辑组件
if (selNode.Parent == rootNode)
{
toolStripMenuItem1.Enabled = true;
ToolStripMenuItem.Enabled = true;
ToolStripMenuItem.Enabled = true;
}
else
{
toolStripMenuItem1.Enabled = true;
ToolStripMenuItem.Enabled = false;
ToolStripMenuItem.Enabled = false;
}
}
if (selNode != null && selNode.Nodes.Count > 0)
{
contextMenuStrip2.Enabled = false;
}
}
}
}
}