using System; using System.Collections.Generic; using CPF.Drawing; using CPF.Input; using CPF.ReoGrid.Interaction; using CPF.ReoGrid.Rendering; namespace CPF.ReoGrid.Views { internal class ViewportController : IViewportController, IUserVisual, IVisualController { public Worksheet Worksheet { get { return this.worksheet; } } public ViewportController(Worksheet sheet) { this.worksheet = sheet; this.view = new View(this); this.view.Children = new List(); } public virtual Rect Bounds { get { return this.view.Bounds; } set { this.view.Bounds = value; } } public virtual float ScaleFactor { get { return (this.View == null) ? 1f : this.View.ScaleFactor; } set { bool flag = this.View != null; if (flag) { this.View.ScaleFactor = value; } } } public virtual IView View { get { return this.view; } set { this.view = value; } } internal virtual void AddView(IView view) { this.view.Children.Add(view); view.ViewportController = this; } internal virtual void InsertView(IView before, IView viewport) { IList children = this.view.Children; int num = children.IndexOf(before); bool flag = num > 0 && num < children.Count; if (flag) { children.Insert(num, viewport); } else { children.Add(viewport); } } internal virtual void InsertView(int index, IView viewport) { this.view.Children.Insert(index, viewport); } internal virtual bool RemoveView(IView view) { bool flag = this.view.Children.Remove(view); bool result; if (flag) { view.ViewportController = null; result = true; } else { result = false; } return result; } internal bool IsViewVisible(ViewTypes head) { return (this.viewsVisible & head) == head; } public virtual void SetViewVisible(ViewTypes head, bool visible) { if (visible) { this.viewsVisible |= head; } else { this.viewsVisible &= ~head; } } public virtual void UpdateController() { } public virtual void Reset() { } public virtual void Invalidate() { bool flag = this.worksheet != null; if (flag) { this.worksheet.RequestInvalidate(); } } public virtual void Draw(CellDrawingContext dc) { bool flag = this.view.Visible && this.view.Width > 0f && this.view.Height > 0f; if (flag) { this.view.Draw(dc); } this.worksheet.viewDirty = false; } public virtual IView FocusView { get; set; } public virtual IUserVisual FocusVisual { get; set; } public virtual bool OnMouseDown(Point location, MouseButtons buttons, InputModifiers modifiers) { bool flag = false; bool flag2 = !flag; if (flag2) { IView viewByPoint = this.view.GetViewByPoint(location); bool flag3 = viewByPoint != null; if (flag3) { flag = viewByPoint.OnMouseDown(viewByPoint.PointToView(location), buttons, modifiers); } } return flag; } public virtual bool OnMouseMove(Point location, MouseButtons buttons) { bool flag = false; bool flag2 = this.FocusView != null; if (flag2) { this.FocusView.OnMouseMove(this.FocusView.PointToView(location), buttons); } bool flag3 = !flag; if (flag3) { IView viewByPoint = this.view.GetViewByPoint(location); bool flag4 = viewByPoint != null; if (flag4) { flag = viewByPoint.OnMouseMove(viewByPoint.PointToView(location), buttons); } } return flag; } public virtual bool OnMouseUp(Point location, MouseButtons buttons, InputModifiers modifiers) { bool result = false; bool flag = this.FocusView != null; if (flag) { result = this.FocusView.OnMouseUp(this.FocusView.PointToView(location), buttons, modifiers); } return result; } public virtual bool OnMouseDoubleClick(Point location, MouseButtons buttons) { bool result = false; IView view = (this.FocusView != null) ? this.FocusView : this.view.GetViewByPoint(location); bool flag = view != null; if (flag) { result = view.OnMouseDoubleClick(view.PointToView(location), buttons); } return result; } public virtual bool OnKeyDown(KeyCode key) { return false; } public virtual void SetFocus() { } public virtual void FreeFocus() { } internal Worksheet worksheet; protected IView view; protected ViewTypes viewsVisible = ViewTypes.LeadHeader; } }