📄 designpane.cs
字号:
#region License
/*
This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General
Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option)
any later version.
This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
details.
You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to
the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#endregion
using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Data;
using System.Windows.Forms;
using System.Drawing.Printing;
using daReport;
namespace daReportDesigner
{
#region Custom Delegate Declaration
public delegate void SelectionChangedHandler(ArrayList obj);
#endregion
public class DesignPane : System.Windows.Forms.UserControl
{
#region Declarations
private System.ComponentModel.Container components = null;
ICustomPaint[] staticObjects;
ICustomPaint[] dynamicObjects;
PageSettings pageSettings;
private bool shouldRepaint = false;
private bool mouseDown = false;
private bool mControlPressed = false;
public enum RESIZE_BORDER { NONE = 0, TOP, RIGHT, BOTTOM, LEFT };
private RESIZE_BORDER mBorder = 0;
public enum MOUSE_MODE { NONE = 0, SELECTED };
private MOUSE_MODE mMouseMode = 0;
Image drawingImage;
Image trackerImage;
//ICustomPaint selectedObject;
ArrayList mSelectedObjects = new ArrayList();
TrackerRectangle selectionRectangle;
private Point ptStart = new Point(0,0);
private Brush brushBg;
private bool showGrid = false;
private int gridSize = 8;
private SolidBrush gridBrush = new SolidBrush(Color.Gainsboro);
private Bitmap backImage;
#region Public Event Declarations
public event SelectionChangedHandler OnSelectionChanged;
public event SelectionChangedHandler OnMoving;
public event SelectionChangedHandler OnMoveFinished;
#endregion
#endregion
#region Control and Object Event Handlers
private void DesignPane_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
mouseDown = true;
if ( this.Cursor == Cursors.SizeNS || this.Cursor == Cursors.SizeWE )
{
mMouseMode = MOUSE_MODE.SELECTED;
return;
}
ptStart = new Point(e.X, e.Y);
object t = FindObjectAt(e.X,e.Y);
if (!this.mControlPressed)
this.mSelectedObjects.Clear();
if (t != null)
{
if (mSelectedObjects.Contains(t))
mSelectedObjects.Remove(t);
else
{
if (((daReport.ICustomPaint)t).Selectable)
mSelectedObjects.Add(t);
}
switch (t.GetType().ToString())
{
case ("daReport.ChartBox"):
if (((daReport.ChartBox)t).Selectable)
mMouseMode = MOUSE_MODE.SELECTED;
else
{
mMouseMode = MOUSE_MODE.NONE;
//t = selectedObject;
}
break;
case ("daReport.PictureBox"):
if (((daReport.PictureBox)t).Selectable)
mMouseMode = MOUSE_MODE.SELECTED;
else
{
mMouseMode = MOUSE_MODE.NONE;
//t = selectedObject;
}
break;
case ("daReport.StyledTable"):
if (((daReport.StyledTable)t).Selectable)
mMouseMode = MOUSE_MODE.SELECTED;
else
{
mMouseMode = MOUSE_MODE.NONE;
//t = selectedObject;
}
break;
case ("daReport.TextField"):
if (((daReport.TextField)t).Selectable)
mMouseMode = MOUSE_MODE.SELECTED;
else
{
mMouseMode = MOUSE_MODE.NONE;
//t = selectedObject;
}
break;
case ("daReport.Line"):
if (((daReport.Line)t).Selectable)
mMouseMode = MOUSE_MODE.SELECTED;
else
{
mMouseMode = MOUSE_MODE.NONE;
//t = selectedObject;
}
break;
default:
mMouseMode = MOUSE_MODE.SELECTED;
break;
}
}
else
mMouseMode = MOUSE_MODE.NONE;
this.SelectObjects((ArrayList)this.mSelectedObjects.Clone());
if(OnSelectionChanged!=null)
OnSelectionChanged(this.mSelectedObjects);
/*
if ( t!= selectedObject )
{
if(OnSelectionChanged!=null)
OnSelectionChanged((ICustomPaint)t);
}
*/
}
private void DesignPane_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
mouseDown = false;
mMouseMode = MOUSE_MODE.NONE;
if(shouldRepaint)
{
shouldRepaint = false;
DoPaint();
if(OnMoveFinished!=null)
OnMoveFinished(this.mSelectedObjects);
}
}
public void DesignPane_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
//this.Focus();
if (mouseDown)
{
if (mMouseMode == MOUSE_MODE.SELECTED)
{
if (mBorder != RESIZE_BORDER.NONE)
{
foreach (ICustomPaint CurrentObject in this.mSelectedObjects)
{
switch(mBorder)
{
case RESIZE_BORDER.TOP:
if (CurrentObject.VerticalAlignment == ICustomPaint.VerticalAlignmentTypes.None)
{
CurrentObject.Height = CurrentObject.Y + CurrentObject.Height - e.Y;
CurrentObject.Y = e.Y;
}
else if (CurrentObject.VerticalAlignment == ICustomPaint.VerticalAlignmentTypes.Bottom || CurrentObject.VerticalAlignment == ICustomPaint.VerticalAlignmentTypes.Middle)
{
CurrentObject.Y = e.Y;
}
break;
case RESIZE_BORDER.RIGHT:
CurrentObject.Width = e.X - CurrentObject.X;
break;
case RESIZE_BORDER.BOTTOM:
CurrentObject.Height = e.Y - CurrentObject.Y;
break;
case RESIZE_BORDER.LEFT:
if (CurrentObject.HorizontalAlignment == ICustomPaint.HorizontalAlignmentTypes.None)
{
CurrentObject.Width = CurrentObject.X + CurrentObject.Width - e.X;
CurrentObject.X = e.X;
}
else if (CurrentObject.HorizontalAlignment == ICustomPaint.HorizontalAlignmentTypes.Right || CurrentObject.HorizontalAlignment == ICustomPaint.HorizontalAlignmentTypes.Center)
{
CurrentObject.X = e.X;
}
break;
}
selectionRectangle = new TrackerRectangle(CurrentObject.GetRegion(), CurrentObject.HorizontalAlignment, CurrentObject.VerticalAlignment);
trackerImage.Dispose();
trackerImage = (Bitmap)drawingImage.Clone();
selectionRectangle.DrawSelectionTrackers((Bitmap)trackerImage);
PaintImage(trackerImage);
}
shouldRepaint = true;
}
else
{
if ( Math.Abs(e.X-ptStart.X)>0 || Math.Abs(e.Y-ptStart.Y)>0)
{
foreach (ICustomPaint CurrentObject in this.mSelectedObjects)
{
this.MoveSelection(CurrentObject, CurrentObject.X+e.X-ptStart.X, CurrentObject.Y+e.Y-ptStart.Y);
}
ptStart = new Point(e.X, e.Y);
}
}
if(OnMoving!=null)
OnMoving(this.mSelectedObjects);
}
}
else
{
if (selectionRectangle!=null)
{
int nResult = 0;
this.Cursor = selectionRectangle.CursorCheck(new Point(e.X, e.Y), ref nResult);
this.mBorder = (RESIZE_BORDER)nResult;
}
}
}
public void DesignPane_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
if (e.Control)
this.mControlPressed = true;
if (this.mSelectedObjects.Count>0)
{
if (e.KeyCode == Keys.Down && e.Modifiers == Keys.Control)
{
foreach (ICustomPaint CurrentObject in this.mSelectedObjects)
{
MoveSelection(CurrentObject, CurrentObject.X, CurrentObject.Y+1);
}
//MoveSelection(selectedObject.X,selectedObject.Y+1);
}
else if (e.KeyCode == Keys.Up && e.Modifiers == Keys.Control)
{
foreach (ICustomPaint CurrentObject in this.mSelectedObjects)
{
MoveSelection(CurrentObject, CurrentObject.X, CurrentObject.Y-1);
}
//MoveSelection(selectedObject.X,selectedObject.Y-1);
}
else if (e.KeyCode == Keys.Left && e.Modifiers == Keys.Control)
{
foreach (ICustomPaint CurrentObject in this.mSelectedObjects)
{
MoveSelection(CurrentObject, CurrentObject.X-1, CurrentObject.Y);
}
//MoveSelection(selectedObject.X-1,selectedObject.Y);
}
else if (e.KeyCode == Keys.Right && e.Modifiers == Keys.Control)
{
foreach (ICustomPaint CurrentObject in this.mSelectedObjects)
{
MoveSelection(CurrentObject, CurrentObject.X+1, CurrentObject.Y);
}
//MoveSelection(selectedObject.X+1,selectedObject.Y);
}
else
{
return;
}
if(OnMoving!=null)
OnMoving(this.mSelectedObjects);
}
}
public void DesignPane_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e)
{
this.mControlPressed = false;
if (this.mSelectedObjects.Count > 0)
{
if (e.KeyCode == Keys.Down || e.KeyCode == Keys.Up || e.KeyCode == Keys.Right || e.KeyCode == Keys.Left)
{
if(shouldRepaint)
{
shouldRepaint = false;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -