using System;
using System.Drawing;
using System.Windows.Forms;
using Microsoft.VisualBasic.PowerPacks;
namespace Dongke.WinForm.Controls.InvoiceLayout
{
///
///
///
[Serializable]
public abstract class LayoutItem : ICloneable, IDisposable
{
#region 成员变量
private int _id; // ID
private object _tag; // 扩展
private readonly ItemType _type; // Item类别
// 位置
///
///
///
protected float _top; // 上位置X (mm単位)
///
///
///
protected float _left; // 左位置Y (mm単位)
///
///
///
protected float _width; // 宽 (mm単位)
///
///
///
protected float _height; // 高 (mm単位)
///
///
///
protected float _right; // 右位置 (mm単位)
///
///
///
protected float _bottom; // 下位置 (mm単位)
///
///
///
protected bool _sideRatioFixed = false; // 横纵比例是否固定
///
///
///
private ItemLock _lock = ItemLock.None; // Item锁定
///
///
///
[NonSerialized]
protected Shape _shape; // 图形对象
///
///
///
[NonSerialized]
protected SimpleShape _simpleShape;
///
///
///
[NonSerialized]
protected LineShape _lineShape;
///
///
///
[NonSerialized]
protected LayoutBox _owner; // LayoutBox
///
///
///
[NonSerialized]
private ItemFrame _frame; // Item选择框
///
///
///
[NonSerialized]
private bool _isSelected; // Item是否选择
///
///
///
[NonSerialized]
private bool _isNew; // 新追加的Item
///
///
///
[NonSerialized]
private RectangleF _rectangleFDraw; // Item的范围 - 绘制用 (mm単位)
#endregion 成员变量
#region 属性
///
/// LayoutBox内使用的Item标识。
///
///
///
public int ID
{
get
{
return _id;
}
}
///
/// object扩展
///
///
/// 等同于 System.Windows.Forms.Control.Tag ,可以参考 MSDN的Control.Tag
///
public object Tag
{
get
{
return _tag;
}
set
{
_tag = value;
if (_owner != null)
{
_owner.SetItemChangedArgs(this, ItemChangeType.Modified);
}
}
}
///
/// 获取或设置Item类别。
///
public ItemType ItemType
{
get
{
return _type;
}
}
///
/// 获取或设置Item在LayoutBox内的X坐标 mm单位。
///
public float Top
{
get
{
return _top;
}
set
{
if (value != _top)
{
if (SetTop(value) && _owner != null)
{
_owner.SetItemChangedArgs(this, ItemChangeType.Moved);
}
}
}
}
///
/// 获取或设置Item在LayoutBox内的Y坐标 mm单位。
///
public float Left
{
get
{
return _left;
}
set
{
if (value != _left)
{
if (SetLeft(value) && _owner != null)
{
_owner.SetItemChangedArgs(this, ItemChangeType.Moved);
}
}
}
}
///
/// 获取或设置Item在LayoutBox内的宽 mm单位。
///
public float Width
{
get
{
return _width;
}
set
{
if (value != _width)
{
if (SetWidth(value) && _owner != null)
{
_owner.SetItemChangedArgs(this, ItemChangeType.Modified);
}
}
}
}
///
/// 获取或设置Item在LayoutBox内的高 mm单位。
///
public float Height
{
get
{
return _height;
}
set
{
if (value != _height)
{
if (SetHeight(value) && _owner != null)
{
_owner.SetItemChangedArgs(this, ItemChangeType.Modified);
}
}
}
}
///
/// 获取Item在LayoutBox内的右位置 mm单位。
///
public float Right
{
get
{
return _left + _width;
//return _right;
}
//set
//{
// if (value != _right)
// {
// if (SetRight(value) && _owner != null)
// {
// _owner.SetItemChangedArgs(this, ItemChangeType.Change);
// }
// }
//}
}
///
/// 获取Item在LayoutBox内的下位置 mm单位。
///
public float Bottom
{
get
{
return _top + _height;
//return _bottom;
}
//set
//{
// if (value != _bottom)
// {
// if (SetBottom(value) && _owner != null)
// {
// _owner.SetItemChangedArgs(this, ItemChangeType.Change);
// }
// }
//}
}
///
/// 获取或设置图片横纵比例是否固定
///
public bool SideRatioFixed
{
get
{
return _sideRatioFixed;
}
set
{
if (value != _sideRatioFixed)
{
_sideRatioFixed = value;
if (Owner != null)
{
Owner.SetItemChangedArgs(this, ItemChangeType.Modified);
}
}
}
}
///
/// 获取或设置Item锁定
///
internal ItemLock ItemLockType
{
get
{
return _lock;
}
set
{
if (value != _lock)
{
_lock = value;
ResetItemFrame();
}
}
}
///
/// 获取Item是否是选择状态。
///
public bool Selected
{
get
{
return _isSelected;
}
internal set
{
if (value != _isSelected)
{
_isSelected = value;
}
}
}
///
/// 获取或设置是否是新追加的Item。
///
internal bool IsNew
{
get
{
return _isNew;
}
set
{
_isNew = value;
}
}
///
/// Item所属的LayoutBox
///
internal LayoutBox Owner
{
get
{
return _owner;
}
set
{
if (_owner != value)
{
if (_owner != null)
{
_owner.Items.Remove(this);
//if (_control != null &&
// _owner.PaperArea.Controls.Contains(_control))
//{
// _owner.PaperArea.Controls.Remove(_control);
//}
if (_shape != null && _owner.ItemShapes.Contains(_shape))
{
_owner.ItemShapes.Remove(_shape);
}
}
_owner = value;
if (_owner != null)
{
_owner.Items.Add(this);
//if (_control != null &&
// !_owner.PaperArea.Controls.Contains(_control))
//{
// _owner.PaperArea.Controls.Add(_control);
// int count = value.SelectedItems.Count;
// _owner.PaperArea.Controls.SetChildIndex(_control, count);
//}
if (_shape != null && !_owner.ItemShapes.Contains(_shape))
{
_owner.ItemShapes.Add(_shape);
_shape.BringToFront();
}
}
}
}
}
///
/// Item对应的图形
///
internal Shape Shape
{
get
{
return _shape;
}
private set
{
if (_shape != value)
{
if (_shape != null)
{
_shape.Dispose();
}
_shape = value;
if (_shape != null)
{
if (_shape is SimpleShape)
{
_simpleShape = _shape as SimpleShape;
}
else if (_shape is LineShape)
{
_lineShape = _shape as LineShape;
}
SetShapeProperty(GetZoom());
if (_owner != null && !_owner.ItemShapes.Contains(_shape))
{
_owner.ItemShapes.Add(_shape);
_shape.BringToFront();
}
_shape.DoubleClick += new EventHandler(OnDoubleClickControl);
_shape.MouseDown += new MouseEventHandler(OnMouseDownControl);
_shape.PreviewKeyDown += new PreviewKeyDownEventHandler(OnPreviewKeyDown);
_shape.MouseMove += new MouseEventHandler(OnMouseMove);
_shape.Paint += new PaintEventHandler(OnPaint);
ResetShapeLocationAndSize(false);
}
}
}
}
///
///
///
protected SimpleShape SimpleShape
{
get
{
return _simpleShape;
}
}
///
///
///
protected LineShape LineShape
{
get
{
return _lineShape;
}
}
///
/// 图形范围
///
internal protected virtual Rectangle ShapeBounds
{
get
{
return _simpleShape != null ? _simpleShape.Bounds : Rectangle.Empty;
}
}
///
///
///
internal protected virtual Rectangle ShapeVirtualBounds
{
get
{
return ShapeBounds;
}
}
///
/// 获取或设置Item的选中边框
///
internal ItemFrame Frame
{
get
{
return _frame;
}
set
{
if (_frame != value)
{
_frame = value;
}
}
}
///
/// 获取或设置Item的范围 - 绘制用 (mm単位)
///
protected virtual RectangleF RectangleFDraw
{
get
{
return _rectangleFDraw;
}
set
{
_rectangleFDraw = value;
}
}
#endregion 属性
#region 构造函数
///
/// 构造函数
///
/// Layoutbox
/// item类别
internal LayoutItem(LayoutBox box, ItemType itemType)
{
_rectangleFDraw = RectangleF.Empty;
_top = LayoutConsts.ITEM_LOCATION_DEF;
_left = LayoutConsts.ITEM_LOCATION_DEF;
_width = 0f;
_height = 0f;
_right = _left + _width;
_bottom = _top + _height;
_id = 0;
_type = itemType;
Owner = box;
if (_owner != null)
{
_id = _owner.NewItemID;
Shape = LayoutUtility.GetNewShape(this);
//SetShapeProperty();
SetDrawProperty();
}
}
#endregion 构造函数
#region 事件处理
///
/// Item图形上的OnMouseMove事件
///
/// 指定的对象
/// 提供的事件数据
private void OnMouseMove(object sender, MouseEventArgs e)
{
// TODO Item范围内移动
if (_owner == null || _owner.LayoutMode != LayoutMode.Edit)
{
Cursor.Current = Cursors.Default;
}
else
{
if (_lock == ItemLock.None)
{
Cursor.Current = Cursors.SizeAll;
}
else
{
Cursor.Current = Cursors.Default;
}
}
}
///
/// Item图形上的OnPreviewKeyDown事件
///
/// 指定的对象
/// 提供的事件数据
private void OnPreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
if (_owner == null || _owner.LayoutMode != LayoutMode.Edit
|| _owner.SelectedItems == null || _owner.SelectedItems.Count == 0)
{
return;
}
bool isInputKey = false;
bool isDirty = false;
if (e.KeyCode == Keys.Left)
{
isInputKey = true;
// 选择的Item向左移动1像素
foreach (LayoutItem item in _owner.SelectedItems)
{
isDirty = item.LeftItem(1) ? true : isDirty;
}
}
else if (e.KeyCode == Keys.Up)
{
isInputKey = true;
// 选择的Item向上移动1像素
foreach (LayoutItem item in _owner.SelectedItems)
{
isDirty = item.UpItem(1) ? true : isDirty;
}
}
else if (e.KeyCode == Keys.Right)
{
isInputKey = true;
// 选择的Item向右移动1像素
foreach (LayoutItem item in _owner.SelectedItems)
{
isDirty = item.RightItem(1) ? true : isDirty;
}
}
else if (e.KeyCode == Keys.Down)
{
isInputKey = true;
// 选择的Item向下移动1像素
foreach (LayoutItem item in _owner.SelectedItems)
{
isDirty = item.DownItem(1) ? true : isDirty;
}
}
if (isInputKey)
{
e.IsInputKey = isInputKey;
if (isDirty && _owner != null)
{
_owner.Dirty = true;
}
}
}
///
/// Item图形上的OnDoubleClickControl事件
///
/// 指定的对象
/// 提供的事件数据
private void OnDoubleClickControl(object sender, EventArgs e)
{
if (_isSelected
&& _owner != null
&& _owner.LayoutMode == LayoutMode.Edit
&& _owner.SelectedItems != null
&& _owner.SelectedItems.Count == 1)
{
// 显示Item的属性设置画面
ShowItemPropertyDialog();
}
}
///
/// Item图形上的OnMouseDownControl事件
///
/// 指定的对象
/// 提供的事件数据
private void OnMouseDownControl(object sender, MouseEventArgs e)
{
// 选中Item
if (_owner == null || _owner.LayoutMode != LayoutMode.Edit)
{
return;
}
if (_owner != null)
{
// Item的选择方式
if (Control.ModifierKeys == Keys.Control
|| Control.ModifierKeys == Keys.Shift)
{
_owner.SelectItemMultiple(this, !_isSelected);
}
else
{
if (!_isSelected)
{
_owner.SelectItemSingle(this, true);
}
}
}
}
///
/// Item图形上的OnPaint事件
///
/// 指定的对象
/// 提供的事件数据
protected virtual void OnPaint(object sender, PaintEventArgs e)
{
}
#endregion 事件处理
#region 函数
///
/// Item初始化
///
/// LayoutBox
/// 是否生成新ID
/// 是否成功
internal virtual bool Init(LayoutBox box, bool isNewID)
{
Owner = box;
if (_owner == null)
{
return false;
}
if (isNewID)
{
_id = _owner.NewItemID;
}
Shape = LayoutUtility.GetNewShape(this);
//SetShapeProperty();
SetDrawProperty();
return true;
}
///
/// 刷新显示
///
public virtual void Refresh()
{
if (_shape != null)
{
_shape.Refresh();
}
}
///
/// 显示Item属性设置画面
///
///
/// DialogResult.OK:选中的Item有效,设置成功
/// DialogResult.Cancel:选中的Item有效,取消设置
/// DialogResult.None:LayoutBox不是编辑模式,或选中的Item不是一个
///
public DialogResult ShowItemPropertyDialog()
{
if (_owner != null && _owner.LayoutMode == LayoutMode.Edit)
{
// 显示Item属性设置画面
DialogResult dialogResult = ShowItemPropertyDialogInner();
if (dialogResult == DialogResult.OK)
{
//_owner.PaperArea.Refresh();
}
return dialogResult;
}
return DialogResult.None;
}
///
/// 显示Item属性设置画面 - 子类实例化用
///
///
/// DialogResult.OK:选中的Item有效,设置成功
/// DialogResult.Cancel:选中的Item有效,取消设置
/// DialogResult.None:LayoutBox不是编辑模式,或选中的Item不是一个
///
protected virtual DialogResult ShowItemPropertyDialogInner()
{
throw new NotImplementedException();
}
///
/// 改变Item的选择状态
///
/// 选中:true,取消选择:false
public void Select(bool value)
{
if (_owner.LayoutMode != LayoutMode.Edit)
{
return;
}
if (_owner != null)
{
_owner.SelectItemMultiple(this, value);
}
}
///
/// 刷新显示Item选择边框
///
internal void ResetItemFrame()
{
if (_isSelected && _frame != null)
{
_frame.CreateFrame();
}
}
///
/// 改变Item图形的位置和大小
///
protected virtual bool ResetShapeLocationAndSize(int left, int top, int width, int height)
{
if (_simpleShape != null)
{
_simpleShape.Location = new Point(left, top);
_simpleShape.Size = new Size(width, height);
return true;
}
return false;
}
///
///
///
protected virtual bool ResetShapeLocation(int left, int top)
{
if (_simpleShape != null)
{
_simpleShape.Location = new Point(left, top);
return true;
}
return false;
}
///
///
///
protected virtual bool ResetShapeSize(int width, int height)
{
if (_simpleShape != null)
{
_simpleShape.Size = new Size(width, height);
return true;
}
return false;
}
///
/// 根据zoom改变Item与Item图形的位置和大小
///
protected virtual bool ResetItemLocationAndSize(int left, int top, int width, int height)
{
bool l = ResetItemLocation(left, top);
bool s = ResetItemSize(width, height);
return l && s;
}
///
///
///
protected virtual bool ResetItemLocation(int left, int top)
{
if (_lock == ItemLock.LockLocationAndSize)
{
return false;
}
int zoom = 100;
if (_owner != null)
{
zoom = _owner.Zoom;
}
if (_simpleShape != null && 0 < zoom)
{
if (_simpleShape.Top != top || _simpleShape.Left != left)
{
if (_simpleShape.Top != top)
{
_top = LayoutCommon.PixelToMillimeter(top, zoom);
_bottom = _top + _height;
}
if (_simpleShape.Left != left)
{
_left = LayoutCommon.PixelToMillimeter(left, zoom);
_right = _left + _width;
}
_simpleShape.Location = new Point(left, top);
SetRectangleF();
if (_owner != null)
{
_owner.SetItemChangedArgs(this, ItemChangeType.Moved);
}
}
}
return true;
}
///
///
///
protected virtual bool ResetItemSize(int width, int height)
{
if (_lock != ItemLock.None)
{
return false;
}
int zoom = 100;
if (_owner != null)
{
zoom = _owner.Zoom;
}
if (_simpleShape != null && 0 < zoom)
{
if (_simpleShape.Width != width || _simpleShape.Height != height)
{
if (_simpleShape.Width != width)
{
_width = LayoutCommon.PixelToMillimeter(width, zoom);
_right = _left + _width;
}
if (_simpleShape.Height != height)
{
_height = LayoutCommon.PixelToMillimeter(height, zoom);
_bottom = _top + _height;
}
_simpleShape.Size = new Size(width, height);
SetRectangleF();
if (_owner != null)
{
_owner.SetItemChangedArgs(this, ItemChangeType.Modified);
}
}
}
return true;
}
///
/// 根据zoom与Item图形的位置和大小,改变Item的位置和大小
///
protected virtual bool ResetItemLocationAndSize()
{
bool l = ResetItemLocation();
bool s = ResetItemSize();
return l && s;
}
///
///
///
protected virtual bool ResetItemLocation()
{
if (_lock == ItemLock.LockLocationAndSize)
{
return false;
}
int zoom = 100;
if (_owner != null)
{
zoom = _owner.Zoom;
}
if (_simpleShape != null && 0 < zoom)
{
float top = LayoutCommon.PixelToMillimeter(_simpleShape.Top, zoom);
float left = LayoutCommon.PixelToMillimeter(_simpleShape.Left, zoom);
if (_top != top || _left != left)
{
if (_top != top)
{
_top = top;
_bottom = _top + _height;
}
if (_left != left)
{
_left = left;
_right = _left + _width;
}
SetRectangleF();
if (_owner != null)
{
_owner.SetItemChangedArgs(this, ItemChangeType.Moved);
}
}
}
return true;
}
///
///
///
protected virtual bool ResetItemSize()
{
if (_lock != ItemLock.None)
{
return false;
}
int zoom = 100;
if (_owner != null)
{
zoom = _owner.Zoom;
}
if (_simpleShape != null && 0 < zoom)
{
float width = LayoutCommon.PixelToMillimeter(_simpleShape.Width, zoom);
float height = LayoutCommon.PixelToMillimeter(_simpleShape.Height, zoom);
if (_width != width || _height != height)
{
if (_width != width)
{
_width = width;
_right = _left + _width;
}
if (_height != height)
{
_height = height;
_bottom = _top + _height;
}
SetRectangleF();
if (_owner != null)
{
_owner.SetItemChangedArgs(this, ItemChangeType.Modified);
}
}
}
return true;
}
///
/// 设置Item的X坐标
///
/// X坐标
protected virtual bool SetTop(float value)
{
if (_lock == ItemLock.LockLocationAndSize)
{
return false;
}
if (value < LayoutConsts.ITEM_LOCATION_MIN
|| LayoutConsts.ITEM_LOCATION_MAX < value
|| _owner.PaperHeight <= value)
{
return false;
}
_top = value;
_bottom = _top + _height;
SetRectangleF();
if (_simpleShape != null && _owner != null)
{
_simpleShape.Top = LayoutCommon.MillimeterToPixel(_top, _owner.Zoom);
ResetItemFrame();
}
return true;
}
///
/// 设置Item的Y坐标
///
/// Y坐标
protected virtual bool SetLeft(float value)
{
if (_lock == ItemLock.LockLocationAndSize)
{
return false;
}
if (value < LayoutConsts.ITEM_LOCATION_MIN
|| LayoutConsts.ITEM_LOCATION_MAX < value
|| _owner.PaperWidth <= value)
{
return false;
}
_left = value;
_right = _left + _width;
SetRectangleF();
if (_simpleShape != null && _owner != null)
{
_simpleShape.Left = LayoutCommon.MillimeterToPixel(_left, _owner.Zoom);
ResetItemFrame();
}
return true;
}
///
/// 设置Item的宽度
///
/// 宽
protected virtual bool SetWidth(float value)
{
if (_lock != ItemLock.None)
{
return false;
}
if (value < LayoutConsts.ITEM_SIZE_MIN
|| LayoutConsts.ITEM_SIZE_WIDTH_MAX < value)
{
return false;
}
float hValue = _height;
if (_sideRatioFixed)
{
hValue = _height / _width * value;
if (hValue < LayoutConsts.ITEM_SIZE_MIN
|| LayoutConsts.ITEM_SIZE_WIDTH_MAX < hValue)
{
return false;
}
_height = hValue;
_bottom = _top + _height;
}
_width = value;
_right = _left + _width;
SetRectangleF();
if (_simpleShape != null && _owner != null)
{
if (_sideRatioFixed)
{
_simpleShape.Size = new Size(
LayoutCommon.MillimeterToPixel(_width, _owner.Zoom),
LayoutCommon.MillimeterToPixel(_height, _owner.Zoom));
}
else
{
_simpleShape.Width = LayoutCommon.MillimeterToPixel(_width, _owner.Zoom);
}
ResetItemFrame();
}
return true;
}
///
/// 设置Item的高度
///
/// 高
protected virtual bool SetHeight(float value)
{
if (_lock != ItemLock.None)
{
return false;
}
if (value < LayoutConsts.ITEM_SIZE_MIN
|| LayoutConsts.ITEM_SIZE_HEIGHT_MAX < value)
{
return false;
}
float wValue = _height;
if (_sideRatioFixed)
{
wValue = _width / _height * value;
if (wValue < LayoutConsts.ITEM_SIZE_MIN
|| LayoutConsts.ITEM_SIZE_WIDTH_MAX < wValue)
{
return false;
}
_width = wValue;
_right = _left + _width;
}
_height = value;
_bottom = _top + _height;
SetRectangleF();
if (_simpleShape != null && _owner != null)
{
if (_sideRatioFixed)
{
_simpleShape.Size = new Size(
LayoutCommon.MillimeterToPixel(_width, _owner.Zoom),
LayoutCommon.MillimeterToPixel(_height, _owner.Zoom));
}
else
{
_simpleShape.Height = LayoutCommon.MillimeterToPixel(_height, _owner.Zoom);
}
ResetItemFrame();
}
return true;
}
///
/// 移动Item
///
public virtual bool LeftItem(int value)
{
if (_lock == ItemLock.LockLocationAndSize)
{
return false;
}
if (_simpleShape != null && value <= _simpleShape.Left)
{
int left = _simpleShape.Left - value;
if (_frame != null)
{
_frame.Left -= value;
}
ResetItemLocation(left, _simpleShape.Top);
return true;
}
return false;
}
///
///
///
public virtual bool UpItem(int value)
{
if (_lock == ItemLock.LockLocationAndSize)
{
return false;
}
if (_simpleShape != null && value <= _simpleShape.Top)
{
int top = _simpleShape.Top - value;
if (_frame != null)
{
_frame.Top -= value;
}
ResetItemLocation(_simpleShape.Left, top);
return true;
}
return false;
}
///
///
///
public virtual bool RightItem(int value)
{
if (_lock == ItemLock.LockLocationAndSize)
{
return false;
}
if (_simpleShape != null)
{
int left = _simpleShape.Left + value;
if (_owner != null
&& left < _owner.PaperArea.Width
&& left <= _owner.MaxItemLeft)
{
if (_frame != null)
{
_frame.Left += value;
}
ResetItemLocation(left, _simpleShape.Top);
return true;
}
}
return false;
}
///
///
///
public virtual bool DownItem(int value)
{
if (_lock == ItemLock.LockLocationAndSize)
{
return false;
}
if (_simpleShape != null)
{
int top = _simpleShape.Top + value;
if (_owner != null
&& top < _owner.PaperArea.Height
&& top <= _owner.MaxItemTop)
{
if (_frame != null)
{
_frame.Top += value;
}
ResetItemLocation(_simpleShape.Left, top);
return true;
}
}
return false;
}
///
///
///
public virtual bool MoveItem(int left, int top)
{
if (_lock == ItemLock.LockLocationAndSize)
{
return false;
}
return ResetItemLocation(left, top);
}
///
///
///
public virtual bool ChangeItemSize(int width, int height)
{
if (_lock != ItemLock.None)
{
return false;
}
return ResetItemSize(width, height);
}
///
/// 根据zom与Item,改变Item图形的位置和大小
///
internal virtual bool ResetShapeLocationAndSize(bool isCheck)
{
int zoom = 100;
if (_owner != null)
{
zoom = _owner.Zoom;
}
if (_shape != null)
{
int top = LayoutCommon.MillimeterToPixel(_top, zoom);
int left = LayoutCommon.MillimeterToPixel(_left, zoom);
int width = LayoutCommon.MillimeterToPixel(_width, zoom);
int height = LayoutCommon.MillimeterToPixel(_height, zoom);
ResetShapeLocationAndSize(left, top, width, height);
ResetItemFrame();
return true;
}
return false;
}
///
/// 初始化Item图形属性
///
internal virtual void SetShapeProperty(float zoom)
{
}
internal virtual float GetZoom()
{
float zoom = 1;
if (Owner != null)
{
zoom = Owner.Zoom / 100f;
}
return (0 < zoom) ? zoom : 1;
}
///
/// 初始化Item绘制用属性
///
internal virtual float SetDrawProperty()
{
float zoom = GetZoom();
_rectangleFDraw.X = Left * zoom;
_rectangleFDraw.Y = Top * zoom;
_rectangleFDraw.Width = Width * zoom;
_rectangleFDraw.Height = (Height - LayoutConsts.TEXT_MARGIN) * zoom;
return zoom;
}
///
/// 初始化Item绘制用范围属性
///
internal virtual float SetRectangleF()
{
float zoom = GetZoom();
_rectangleFDraw.X = Left * zoom;
_rectangleFDraw.Y = Top * zoom;
_rectangleFDraw.Width = Width * zoom;
_rectangleFDraw.Height = (Height - LayoutConsts.TEXT_MARGIN) * zoom;
return zoom;
}
///
/// Item图形是否被此范围包含
///
///
///
internal protected virtual bool BoundsContainsBy(Rectangle rect)
{
return _simpleShape != null ? rect.Contains(_simpleShape.Bounds) : false;
}
///
///
///
internal protected virtual bool BoundsContains(Rectangle rect)
{
return _simpleShape != null ? _simpleShape.Bounds.Contains(rect) : false;
}
///
///
///
internal protected virtual bool IntersectsWith(Rectangle rect)
{
return _simpleShape != null ? _simpleShape.Bounds.IntersectsWith(rect) : false;
}
///
///
///
internal protected virtual bool BoundsContains(Point pt)
{
return _simpleShape != null ? _simpleShape.Bounds.Contains(pt) : false;
}
#region ICloneable
///
/// Creates a new object that is a copy of the current instance.
///
/// A new object that is a copy of this instance.
public virtual object Clone()
{
return MemberwiseClone();
}
#endregion ICloneable
#region IDisposable
///
/// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
///
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
///
/// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
///
///
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
lock (this)
{
if (_shape != null)
{
_shape.Dispose();
_shape = null;
}
_owner = null;
}
}
}
#endregion IDisposable
#endregion 函数
}
}