?? wfabstractactivity.cs
字號(hào):
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Xml;
namespace WorkflowDesigner.Designer
{
/// <summary>
/// 節(jié)點(diǎn)可視化對(duì)象基類(lèi)
/// </summary>
public abstract class WfAbstractActivity:DesignerVisualObject
{
#region 字段
/// <summary>
/// 可視化對(duì)象名稱(chēng)
/// </summary>
private String _name;
/// <summary>
/// 所屬工作文檔
/// </summary>
private WfFlowDocument _flow;
/// <summary>
/// 當(dāng)前節(jié)點(diǎn)所在位置的x軸坐標(biāo)
/// </summary>
protected int _x;
/// <summary>
/// 當(dāng)前節(jié)點(diǎn)所在位置的y軸坐標(biāo)
/// </summary>
protected int _y;
/// <summary>
/// 存放圖標(biāo)矩形框
/// </summary>
protected Rectangle _rect;
/// <summary>
/// 寬度和長(zhǎng)度之和(因?yàn)楫?huà)出來(lái)是個(gè)方形)
/// </summary>
public const int WidthAndHeight = 30;
#endregion
#region 屬性
/// <summary>
/// 可視化對(duì)象名稱(chēng)
/// </summary>
public String Name
{
get { return _name; }
set { _name = value; }
}
/// <summary>
/// 所屬工作文檔
/// </summary>
public WfFlowDocument Flow
{
get { return _flow; }
set { _flow = value; }
}
/// <summary>
/// 當(dāng)前節(jié)點(diǎn)所在位置的x軸坐標(biāo)
/// </summary>
public int X
{
get
{
return _x;
}
set
{
_x = value;
//根據(jù)圖形的中心點(diǎn)繪制存放圖標(biāo)的矩形
_rect = new Rectangle(_x - WidthAndHeight / 2, _y - WidthAndHeight / 2, WidthAndHeight, WidthAndHeight);
}
}
/// <summary>
/// 當(dāng)前節(jié)點(diǎn)所在位置的y軸坐標(biāo)
/// </summary>
public int Y
{
get
{
return _y;
}
set
{
_y = value;
//根據(jù)圖形的中心點(diǎn)繪制存放圖標(biāo)的矩形
_rect = new Rectangle(_x - WidthAndHeight / 2, _y - WidthAndHeight / 2, WidthAndHeight, WidthAndHeight);
}
}
#endregion
#region 構(gòu)造函數(shù)
/// <summary>
/// 構(gòu)造函數(shù)
/// </summary>
/// <param name="x">鼠標(biāo)所在位置的x軸坐標(biāo)</param>
/// <param name="y">鼠標(biāo)所在位置的y軸坐標(biāo)</param>
public WfAbstractActivity(int x, int y)
{
//得到中心點(diǎn)坐標(biāo)
this._x = x;
this._y = y;
//根據(jù)中心點(diǎn)坐標(biāo)繪制調(diào)整節(jié)點(diǎn)矩形
_rect = new Rectangle(_x - WidthAndHeight / 2, _y - WidthAndHeight / 2, WidthAndHeight, WidthAndHeight);
}
#endregion
#region 操作
#region 私有
#endregion
#region 保護(hù)
/// <summary>
/// 畫(huà)圖標(biāo)
/// </summary>
/// <param name="g">繪圖圖面</param>
protected abstract void DrawIcon(Graphics g);
/// <summary>
/// 得到節(jié)點(diǎn)類(lèi)型
/// </summary>
/// <returns>該節(jié)點(diǎn)的類(lèi)型</returns>
protected abstract String GetActivityType();
/// <summary>
/// 創(chuàng)建xml節(jié)點(diǎn)后
/// </summary>
/// <param name="actElement">xml節(jié)點(diǎn)</param>
protected virtual void AfterCreateXmlElement(XmlElement actElement)
{
}
#endregion
#region 公用
/// <summary>
/// 判斷鼠標(biāo)點(diǎn)擊出是否有可視化對(duì)象
/// </summary>
/// <param name="x">鼠標(biāo)所在位置的x軸坐標(biāo)</param>
/// <param name="y">鼠標(biāo)所在位置的y軸坐標(biāo)</param>
/// <returns>點(diǎn)擊出的可視化對(duì)象</returns>
public override HitTestState HitTest(int x, int y)
{
if (this._rect.Contains(x, y))
{
return HitTestState.Center;
}
else
{
return HitTestState.None;
}
}
/// <summary>
/// 對(duì)齊到畫(huà)布上的表格
/// </summary>
public override void AlignToGrid()
{
//如果中間點(diǎn)的x軸坐標(biāo)小于0那么中間點(diǎn)的x軸坐標(biāo)為0
if (_x < 0)
{
_x = 0;
}
//如果中間點(diǎn)的x軸坐標(biāo)大于等于2000那么中間點(diǎn)的x軸坐標(biāo)為2000
else if (_x >= 2000)
{
_x = 2000;
}
else
{
//否則對(duì)齊到最近的表格線位置
_x = AlignToNumber(_x, GridSize);
}
//如果中間點(diǎn)的x軸坐標(biāo)小于0那么中間點(diǎn)的y軸坐標(biāo)為0
if (_y < 0)
{
_y = 0;
}
//如果中間點(diǎn)的y軸坐標(biāo)大于等于2000那么中間點(diǎn)的x軸坐標(biāo)為2000
else if (_y >= 2000)
{
_y = 2000;
}
else
{
//否則對(duì)齊到最近的表格線位置
_y = AlignToNumber(_y, GridSize);
}
//重新畫(huà)中間點(diǎn)的矩形
_rect = new Rectangle(_x - WidthAndHeight / 2, _y - WidthAndHeight / 2, WidthAndHeight, WidthAndHeight);
}
/// <summary>
/// 框選
/// </summary>
/// <param name="rect">選中的矩形范圍</param>
public override void RangeSelect(Rectangle rect)
{
if (rect.Contains(this._rect))
{
this.IsSelected = true;
}
}
/// <summary>
/// 繪制
/// </summary>
/// <param name="g">繪圖圖面</param>
public override void Draw(Graphics g)
{
DrawIcon(g);
StringFormat format1 = new StringFormat(StringFormatFlags.NoClip);
format1.Alignment = StringAlignment.Center;
format1.LineAlignment = StringAlignment.Near;
Brush brush = new SolidBrush(Color.Black);
Font font = new Font("新宋體", 9);
g.DrawString(Name, font, brush, new PointF(_x, _y + WidthAndHeight / 2 + 5), format1);
format1.Dispose();
font.Dispose();
brush.Dispose();
}
/// <summary>
/// 移動(dòng)
/// </summary>
/// <param name="offX">移動(dòng)新位置的x軸坐標(biāo)</param>
/// <param name="offY">移動(dòng)新位置的y軸坐標(biāo)</param>
public override void Move(int offX, int offY)
{
//將中心點(diǎn)坐標(biāo)加上偏移值,得到最新的流轉(zhuǎn)中間調(diào)整點(diǎn)
_x += offX;
_y += offY;
//根據(jù)中心點(diǎn)坐標(biāo)繪制調(diào)整節(jié)點(diǎn)矩形
_rect = new Rectangle(_x - WidthAndHeight / 2, _y - WidthAndHeight / 2, WidthAndHeight, WidthAndHeight);
}
/// <summary>
/// 打開(kāi)屬性對(duì)話框
/// </summary>
public override void OpenPropertyDialog()
{
}
/// <summary>
/// 圖形矩陣
/// </summary>
/// <returns>返回一個(gè)圖形矩陣</returns>
public override Rectangle GetRange()
{
return this._rect;
}
/// <summary>
/// 初始化xml節(jié)點(diǎn)
/// </summary>
/// <param name="actElement">xml節(jié)點(diǎn)</param>
public virtual void InitFromXml(XmlElement actElement)
{
Name = actElement.Attributes["name"].Value;
}
/// <summary>
/// 保存xml元素
/// </summary>
/// <param name="actsElement">xml節(jié)點(diǎn)</param>
public void SaveToXmlElement(XmlElement actsElement)
{
//需要改動(dòng)
XmlElement actElement = actsElement.OwnerDocument.CreateElement("activity");
XmlAttribute attr = actsElement.OwnerDocument.CreateAttribute("name");
attr.Value = Name;
actElement.Attributes.Append(attr);
attr = actElement.OwnerDocument.CreateAttribute("x");
attr.Value = X.ToString();
actElement.Attributes.Append(attr);
attr = actElement.OwnerDocument.CreateAttribute("y");
attr.Value = Y.ToString();
actElement.Attributes.Append(attr);
attr = actElement.OwnerDocument.CreateAttribute("type");
attr.Value = GetActivityType();
actElement.Attributes.Append(attr);
XmlElement transesElement = actsElement.OwnerDocument.CreateElement("transitions");
foreach (DesignerVisualObject vo in Flow.VisualObjectList)
{
if (vo is WfTransition)
{
WfTransition trans = vo as WfTransition;
if (trans.StartActivity == this)
{
XmlElement transElement = transesElement.OwnerDocument.CreateElement("transition");
if (trans.Name != "")
{
attr = transElement.OwnerDocument.CreateAttribute("name");
attr.Value = trans.Name;
transElement.Attributes.Append(attr);
}
attr = transElement.OwnerDocument.CreateAttribute("forward");
attr.Value = trans.EndActivity.Name;
transElement.Attributes.Append(attr);
attr = transElement.OwnerDocument.CreateAttribute("type");
attr.Value = "0";
transElement.Attributes.Append(attr);
attr = transElement.OwnerDocument.CreateAttribute("x");
attr.Value = trans.X.ToString();
transElement.Attributes.Append(attr);
attr = transElement.OwnerDocument.CreateAttribute("y");
attr.Value = trans.Y.ToString();
transElement.Attributes.Append(attr);
//加參數(shù)
XmlElement tcsElement = transesElement.OwnerDocument.CreateElement("transconditions");
foreach (TransCondition tc in trans.Conditions)
{
XmlElement tcElement = transesElement.OwnerDocument.CreateElement("transcondition");
attr = transElement.OwnerDocument.CreateAttribute("param");
attr.Value = tc.Param.Name;
tcElement.Attributes.Append(attr);
attr = transElement.OwnerDocument.CreateAttribute("oper");
attr.Value = tc.Oper;
tcElement.Attributes.Append(attr);
attr = transElement.OwnerDocument.CreateAttribute("value");
attr.Value = tc.Value;
tcElement.Attributes.Append(attr);
tcsElement.AppendChild(tcElement);
}
transElement.AppendChild(tcsElement);
transesElement.AppendChild(transElement);
}
}
if (vo is WfBackTransition)
{
WfBackTransition backtrans = vo as WfBackTransition;
if (backtrans.StartActivity == this)
{
XmlElement transElement = transesElement.OwnerDocument.CreateElement("transition");
if (backtrans.Name != "")
{
attr = transElement.OwnerDocument.CreateAttribute("name");
attr.Value = backtrans.Name;
transElement.Attributes.Append(attr);
}
attr = transElement.OwnerDocument.CreateAttribute("forward");
attr.Value = backtrans.EndActivity.Name;
transElement.Attributes.Append(attr);
attr = transElement.OwnerDocument.CreateAttribute("type");
attr.Value = "1";
transElement.Attributes.Append(attr);
attr = transElement.OwnerDocument.CreateAttribute("x");
attr.Value = backtrans.X.ToString();
transElement.Attributes.Append(attr);
attr = transElement.OwnerDocument.CreateAttribute("y");
attr.Value = backtrans.Y.ToString();
transElement.Attributes.Append(attr);
transesElement.AppendChild(transElement);
}
}
}
actElement.AppendChild(transesElement);
actsElement.AppendChild(actElement);
AfterCreateXmlElement(actElement);
}
#endregion
#endregion
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -