using System;
using System.ComponentModel;
using System.Drawing;
namespace DevComponents.DotNetBar
{
///
/// Represents Document container base class.
///
public abstract class DocumentBaseContainer
{
#region Private Variables and Constructor
private Rectangle m_LayoutBounds=Rectangle.Empty;
private Rectangle m_DisplayBounds=Rectangle.Empty;
private DocumentBaseContainer m_Parent=null;
private static long IdCounter = 0;
private long _Id = 0;
///
/// Creates new instance of the class.
///
public DocumentBaseContainer()
{
IdCounter++;
_Id = IdCounter;
}
#endregion
#region Internal Implementation
///
/// Gets the unique ID for the container.
///
public long Id
{
get { return _Id; }
}
///
/// Returns actual display bounds of the document.
///
[Browsable(false)]
public virtual Rectangle DisplayBounds
{
get {return m_DisplayBounds;}
}
///
/// Returns layout bounds of the document. Layout bounds are proposed bounds of the layout and might not be the same
/// as DisplayBounds.
///
[Browsable(false)]
public virtual Rectangle LayoutBounds
{
get {return m_LayoutBounds;}
}
///
/// Gets the parent container.
///
public virtual DocumentBaseContainer Parent
{
get {return m_Parent;}
}
///
/// Resizes the document within specified bounds.
///
/// Area available for the document.
public abstract void Layout(Rectangle bounds);
///
/// Sets the display bounds.
///
/// New display bounds.
internal void SetDisplayBounds(Rectangle r)
{
m_DisplayBounds=r;
}
///
/// Sets layout bounds.
///
/// New layout bounds.
internal void SetLayoutBounds(Rectangle r)
{
m_LayoutBounds=r;
}
///
/// Resets the layout bounds for the document base container to the empty bounds.
///
public void ResetLayoutBounds()
{
m_LayoutBounds = Rectangle.Empty;
}
///
/// Resets the layout bounds for the document base container to the empty bounds.
///
public void ResetDisplayBounds()
{
m_DisplayBounds = Rectangle.Empty;
}
///
/// Sets the parent document.
///
/// Parent container.
internal void SetParent(DocumentBaseContainer parent)
{
m_Parent=parent;
}
///
/// Sets the width of the document.
///
/// Width in pixels
public virtual void SetWidth(int width)
{
if(m_Parent!=null)
{
//if(!m_Parent.OnSetWidth(this,width))
//return;
m_Parent.OnSetWidth(this, width);
}
if (width >= this.MinimumSize.Width || this.MinimumSize.Width == 0)
{
ResetDisplayBounds();
m_LayoutBounds.Width = width;
}
}
///
/// Sets the height of the document.
///
/// Height in pixels.
public virtual void SetHeight(int height)
{
if(m_Parent!=null)
m_Parent.OnSetHeight(this,height);
if (height >= this.MinimumSize.Height || this.MinimumSize.Height == 0)
{
ResetDisplayBounds();
m_LayoutBounds.Height = height;
}
}
///
/// Occurs when width is being set on child document.
///
/// Reference document being changed
/// Width in pixels
/// True if width was applied by parent otherwise false
protected internal virtual bool OnSetWidth(DocumentBaseContainer doc, int width){return false;}
///
/// Occurs when height is being set on child document.
///
/// Reference document being changed
/// Height in pixels
/// True if width was applied by parent otherwise false
protected internal virtual bool OnSetHeight(DocumentBaseContainer doc, int height){return false;}
///
/// Gets whether document is visible or not.
///
public abstract bool Visible {get;}
///
/// Gets minimum size of the document.
///
protected internal abstract System.Drawing.Size MinimumSize {get;}
///
/// Updates bounds of the item in response to the scrolling of LayoutControl.
///
///
///
internal virtual void UpdateScrollBounds(int xScroll, int yScroll, bool moveControls)
{
m_DisplayBounds.Offset(xScroll, yScroll);
}
#endregion
}
}