/*******************************************************************************
* Copyright(c) 2012 dongke All rights reserved. / Confidential
* 类的信息:
* 1.程序名称:LayoutItem.cs
* 2.功能描述:全部LayoutItem的基类(定义为abstract)
* 编辑履历:
* 作者 日期 版本 修改内容
* 欧阳涛 2012/09/14 1.00 新建
*******************************************************************************/
using System;
using System.Drawing;
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锁定
#endregion 成员变量
#region 属性
///
/// LayoutBox内使用的Item标识。
///
///
///
public int ID
{
get
{
return _id;
}
}
///
/// 获取或设置Item类别。
///
public ItemType ItemType
{
get
{
return _type;
}
}
///
/// 获取或设置Item在LayoutBox内的X坐标 mm单位。
///
public float Top
{
get
{
return _top;
}
set
{
if (value != _top)
{
SetTop(value);
}
}
}
///
/// 获取或设置Item在LayoutBox内的Y坐标 mm单位。
///
public float Left
{
get
{
return _left;
}
set
{
if (value != _left)
{
SetLeft(value);
}
}
}
///
/// 获取或设置Item在LayoutBox内的宽 mm单位。
///
public float Width
{
get
{
return _width;
}
set
{
if (value != _width)
{
SetWidth(value);
}
}
}
///
/// 获取或设置Item在LayoutBox内的高 mm单位。
///
public float Height
{
get
{
return _height;
}
set
{
if (value != _height)
{
SetHeight(value);
}
}
}
///
/// 获取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 false;
// }
// //internal set
// //{
// // if (value != _isSelected)
// // {
// // _isSelected = value;
// // }
// //}
//}
/////
///// 获取或设置是否是新追加的Item。
/////
//internal bool IsNew
//{
// get
// {
// return false;
// }
// //set
// //{
// // _isNew = value;
// //}
//}
/////
///// 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图形上的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 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 函数
}
}