reportsectioncontrolbase.cs

来自「SharpDevelop2.0.0 c#开发免费工具」· CS 代码 · 共 512 行 · 第 1/2 页

CS
512
字号
/*
 * Created by SharpDevelop.
 * User: Forstmeier Peter
 * Date: 20.12.2004
 * Time: 23:09
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */

using System;
using System.Globalization;
using System.Drawing;
using System.Windows.Forms;
using System.ComponentModel;

using SharpReportCore;
using SharpReport.ReportItems;

/// <summary>
/// BaseControl for <see cref="ReportSection"></see>
/// </summary>
/// 

namespace SharpReport.Designer{
	public abstract class ReportSectionControlBase :ReportObjectControlBase,
													ITracker{
													
		private System.Windows.Forms.Panel titlePanel;
		private System.Windows.Forms.Panel splitPanel;
		private Ruler.ctrlRuler ctrlRuler1;
		private System.Windows.Forms.Panel bodyPanel;
		
		private string caption;
		
		private bool mouseDown;
		private bool dragAllowed;
		
		private int  currentY;
		private IDesignableFactory designableFactory;
		private ControlHelper controlHelper;
		private BaseReportItem draggedItem;
		
		public event EventHandler <EventArgs> ItemSelected;
		public event ItemDragDropEventHandler ItemDragDrop;
		public event EventHandler <SectionChangedEventArgs> SectionChanged;
		
		private ReportControlBase selectedControl;
		private RectTracker rectTracker = new RectTracker();
		
		internal ReportSectionControlBase(){
			InitializeComponent();
			this.SetStyle(ControlStyles.DoubleBuffer |
			              ControlStyles.UserPaint |
			              ControlStyles.AllPaintingInWmPaint |
			              ControlStyles.ResizeRedraw,
			              true);
			this.UpdateStyles();
			caption = this.Name;
			this.designableFactory = new IDesignableFactory();
			this.controlHelper = new ControlHelper(this);
		}
		
		void BodyPanelSizeChanged(object sender, System.EventArgs e){
			this.Size  = new Size (this.Size.Width,this.bodyPanel.Height + this.titlePanel.Height + this.splitPanel.Height);
		}
		
		#region overrides
		
		protected override CreateParams CreateParams{ 
			get { 
				CreateParams cp=base.CreateParams; 
				cp.ExStyle|=0x00000020; //WS_EX_TRANSPARENT 
				return cp; 
			} 
		} 
		
		#endregion
		
		#region ITracker implementation
		
		public void ClearSelections() {
			this.controlHelper.Clear(this.bodyPanel);
			this.selectedControl = null;
			this.InvalidateEx();
		}
		
		public void InvalidateEx() {
			
			this.Invalidate();
			
			if (this.Parent ==  null) {
				return;
			}
			Rectangle rc = new Rectangle  (this.bodyPanel.Location,this.bodyPanel.Size);
			this.Invalidate(rc,true);
			
			if(this.selectedControl != null){
				rc = this.rectTracker.m_rect;
				this.selectedControl.SetBounds(rc.Left, rc.Top, rc.Width, rc.Height);
				this.selectedControl.Invalidate();
			}
			
		}
		
		public ReportControlBase SelectedControl {
			set {
				selectedControl = value;
			}
		}
		
		public RectTracker RectTracker {
			get {
				return this.rectTracker;
			}
		}
		
		public Control DesignSurface {
			get{
				return this.bodyPanel;
			}
		}
		#endregion
		
		
		#region tracker
		
		
		private Rectangle GetParentRectangle(){
			return new Rectangle(new Point(0,0),this.bodyPanel.Size);
		}
		
		
		private void OnMouseDown(object sender, System.Windows.Forms.MouseEventArgs e){			
		
			if (this.rectTracker == null) {
				return;
			}
			if(e.Button != MouseButtons .Left){
				return;
			}	
			Point pt = this.bodyPanel.PointToClient(Cursor.Position);
			
			Rectangle rcForm = GetParentRectangle();

			if(rcForm.Contains(pt)){		
				Rectangle rcObject;
				if (this.rectTracker.HitTest(pt) == RectTracker.TrackerHit.hitNothing) {

					this.selectedControl = null;
					this.rectTracker.m_rect = new Rectangle(0,0,0,0);
					// just to demonstrate RectTracker::TrackRubberBand
					RectTracker tracker=new RectTracker();
					if (tracker.TrackRubberBand(this.bodyPanel, pt, false)){
						// see if rubber band intersects with the doc's tracker		
//                        System.Console.WriteLine("3");
						tracker.NormalizeRect(ref tracker.m_rect);
						Rectangle rectIntersect = tracker.m_rect;
						foreach (Control ctrl in this.bodyPanel.Controls){
							rcObject = ctrl.Bounds;
//				
							if(tracker.m_rect.Contains(rcObject)){
								
								this.rectTracker.m_rect = rcObject;
								this.selectedControl = (ReportControlBase)ctrl;
								this.selectedControl.Selected = true;
								break;
							}
						}
					}
					else{
					
						// No rubber band, see if the point selects an object.
						
						foreach (Control ctrl in this.bodyPanel.Controls){
							rcObject = ctrl.Bounds ;
							if(rcObject.Contains(pt)){
								this.rectTracker.m_rect = rcObject;
								this.selectedControl = (ReportControlBase)ctrl;
								break;
							}
						}
					}
					if(this.selectedControl == null){
						NotifySectionClick();
					}
					else{
//						System.Console.WriteLine("6");
//						m_FormTracker.Clear();
						
					}
				}
				else if(this.selectedControl != null){// normal tracking action, when tracker is hit	
					if (this.rectTracker.Track(this.bodyPanel, pt, false,null)) {
						Rectangle rc = this.rectTracker.m_rect;
						this.selectedControl.SetBounds(rc.Left, rc.Top, rc.Width, rc.Height);
						this.selectedControl.NotifyPropertyChanged("Tracker");
					}
				}

			}
			else{
				if(this.selectedControl == null){//select the container form
					System.Console.WriteLine("9");
//					MainForm.m_propertyWindow.SetSelectedObject(m_Form);
					/*
					if(m_FormTracker.HitTest(pt) == RectTracker.TrackerHit.hitNothing)
					{
						m_FormTracker.m_rect = rcForm;		
					}
					else if(!m_FormTracker.IsEmpty()) 
					{
						m_FormTracker.Track(this, pt, false,null);
					}
					*/
				}
				else{
//					System.Console.WriteLine("10");
//					m_FormTracker.Clear();
				}
			}
			this.InvalidateEx();
			
		}
		
		
		private void OnMouseMove(object sender, System.Windows.Forms.MouseEventArgs e){
			if (this.rectTracker != null) {
				Point mousept=new Point(e.X,e.Y);
				
				if(this.selectedControl != null){
					if(!rectTracker.SetCursor(this,0,mousept))
						this.Cursor=Cursors.Arrow;
				}
				
//			else{
//				if(!m_FormTracker.SetCursor(this,0,mousept))
//					this.Cursor=Cursors.Arrow;
//			}
			}
		}

		#endregion
		
		#region painting
		
		private void BodyPanelPaint(object sender, PaintEventArgs pea) {
			pea.Graphics.Clear(this.Body.BackColor);
			ControlPaint.DrawGrid (pea.Graphics,
			                       this.Body.ClientRectangle,
			                       GlobalValues.GridSize,
			                       Color.Gray);
		}
		
		
		private void OnPaintTitel(object sender, PaintEventArgs pea) {
			pea.Graphics.Clear (this.BackColor);

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?