DotNet 4.8.1 build of DotNetBar
This commit is contained in:
547
PROMS/DotNetBar Source Code/TreeGX/NodeCellLayout.cs
Normal file
547
PROMS/DotNetBar Source Code/TreeGX/NodeCellLayout.cs
Normal file
@@ -0,0 +1,547 @@
|
||||
using System;
|
||||
using System.Drawing;
|
||||
|
||||
namespace DevComponents.Tree
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents class for Node's cell layout.
|
||||
/// </summary>
|
||||
internal class CellLayout
|
||||
{
|
||||
public CellLayout()
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Offset cell bounds, check box bounds, image bounds and text bounds by specified offset.
|
||||
/// </summary>
|
||||
/// <param name="cell">Cell to offset.</param>
|
||||
/// <param name="x">Horizontal offset in pixels.</param>
|
||||
/// <param name="y">Vertical offset in pixels.</param>
|
||||
public void Offset(Cell cell, int x, int y)
|
||||
{
|
||||
cell.SetBounds(new Rectangle(cell.Bounds.X+x,cell.Bounds.Y+y,cell.Bounds.Width,cell.Bounds.Height));
|
||||
if(!cell.CheckBoxBounds.IsEmpty)
|
||||
cell.SetCheckBoxBounds(new Rectangle(cell.CheckBoxBounds.X+x,cell.CheckBoxBounds.Y+y,cell.CheckBoxBounds.Width,cell.CheckBoxBounds.Height));
|
||||
if(!cell.ImageBounds.IsEmpty)
|
||||
cell.SetImageBounds(new Rectangle(cell.ImageBounds.X+x,cell.ImageBounds.Y+y,cell.ImageBounds.Width,cell.ImageBounds.Height));
|
||||
if(!cell.TextContentBounds.IsEmpty)
|
||||
cell.TextContentBounds=new Rectangle(cell.TextContentBounds.X+x,cell.TextContentBounds.Y+y,cell.TextContentBounds.Width,cell.TextContentBounds.Height);
|
||||
}
|
||||
|
||||
public void LayoutSingleCell(LayoutCellInfo info)
|
||||
{
|
||||
SizeF textSize=SizeF.Empty;
|
||||
Font font=info.Font;
|
||||
int height=0;
|
||||
if(info.LayoutStyle.Font!=null)
|
||||
font=info.LayoutStyle.Font;
|
||||
|
||||
info.ContextCell.OnLayoutCell();
|
||||
|
||||
if(info.ContextCell.HostedControl!=null)
|
||||
{
|
||||
if(info.CellWidth==0)
|
||||
textSize=new SizeF(info.ContextCell.HostedControl.Width,info.ContextCell.HostedControl.Height);
|
||||
else
|
||||
{
|
||||
int availTextWidth=info.CellWidth-
|
||||
ElementStyleLayout.HorizontalStyleWhiteSpace(info.LayoutStyle);
|
||||
textSize=new SizeF(availTextWidth,info.ContextCell.HostedControl.Height);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Calculate Text Width and Height
|
||||
if(info.CellWidth==0)
|
||||
{
|
||||
string text=info.ContextCell.Text;
|
||||
if(text!="")
|
||||
textSize=info.Graphics.MeasureString(text,font);
|
||||
}
|
||||
else
|
||||
{
|
||||
int availTextWidth=info.CellWidth-
|
||||
ElementStyleLayout.HorizontalStyleWhiteSpace(info.LayoutStyle);
|
||||
|
||||
availTextWidth-=info.ContextCell.Images.LargestImageSize.Width;
|
||||
if(info.ContextCell.CheckBoxVisible)
|
||||
availTextWidth-=CheckBoxSize.Width;
|
||||
int cellHeight=font.Height;
|
||||
|
||||
if(info.LayoutStyle.WordWrap)
|
||||
{
|
||||
cellHeight=info.LayoutStyle.MaximumHeight-info.LayoutStyle.MarginTop-
|
||||
info.LayoutStyle.MarginBottom-info.LayoutStyle.PaddingTop-info.LayoutStyle.PaddingBottom;
|
||||
if(availTextWidth>0)
|
||||
{
|
||||
if(cellHeight>0)
|
||||
textSize=info.Graphics.MeasureString(info.ContextCell.Text,font,new SizeF(availTextWidth,cellHeight),info.LayoutStyle.StringFormat);
|
||||
else
|
||||
textSize=info.Graphics.MeasureString(info.ContextCell.Text,font,availTextWidth,info.LayoutStyle.StringFormat);
|
||||
}
|
||||
//info.ContextCell.WordWrap=true;
|
||||
}
|
||||
else
|
||||
textSize=new SizeF(availTextWidth,cellHeight);
|
||||
}
|
||||
}
|
||||
|
||||
if(info.LayoutStyle.WordWrap)
|
||||
info.ContextCell.WordWrap=true;
|
||||
else
|
||||
info.ContextCell.WordWrap=false;
|
||||
|
||||
height=(int)Math.Ceiling(textSize.Height);
|
||||
if(info.VerticalPartAlignment)
|
||||
{
|
||||
if(info.ContextCell.Images.LargestImageSize.Height>0)
|
||||
height+=info.ContextCell.Images.LargestImageSize.Height;
|
||||
if(info.ContextCell.CheckBoxVisible)
|
||||
height+=CheckBoxSize.Height;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(info.ContextCell.Images.LargestImageSize.Height>height)
|
||||
height=info.ContextCell.Images.LargestImageSize.Height;
|
||||
if(info.ContextCell.CheckBoxVisible && CheckBoxSize.Height>height)
|
||||
height=CheckBoxSize.Height;
|
||||
}
|
||||
|
||||
Rectangle r=new Rectangle(info.Left+ElementStyleLayout.LeftWhiteSpace(info.LayoutStyle),
|
||||
info.Top+ElementStyleLayout.TopWhiteSpace(info.LayoutStyle)
|
||||
,info.CellWidth,height);
|
||||
|
||||
if(r.Width==0)
|
||||
{
|
||||
if(info.VerticalPartAlignment)
|
||||
{
|
||||
r.Width=(int)Math.Ceiling(textSize.Width);
|
||||
if(info.ContextCell.Images.LargestImageSize.Width>r.Width)
|
||||
r.Width=(info.ContextCell.Images.LargestImageSize.Width+this.ImageTextSpacing);
|
||||
if(info.ContextCell.CheckBoxVisible && CheckBoxSize.Width>r.Width)
|
||||
r.Width+=(CheckBoxSize.Width+this.ImageTextSpacing);
|
||||
}
|
||||
else
|
||||
{
|
||||
r.Width=(int)Math.Ceiling(textSize.Width);
|
||||
if(info.ContextCell.Images.LargestImageSize.Width>0)
|
||||
r.Width+=(info.ContextCell.Images.LargestImageSize.Width+this.ImageTextSpacing);
|
||||
if(info.ContextCell.CheckBoxVisible)
|
||||
r.Width+=(CheckBoxSize.Width+this.ImageTextSpacing);
|
||||
}
|
||||
}
|
||||
|
||||
// Now that we have cell bounds store them
|
||||
Rectangle rCellBounds=new Rectangle(info.Left,info.Top,info.CellWidth,r.Height+info.LayoutStyle.MarginTop+info.LayoutStyle.MarginBottom+info.LayoutStyle.PaddingTop+info.LayoutStyle.PaddingBottom);
|
||||
if(rCellBounds.Width==0)
|
||||
rCellBounds.Width=r.Width+ElementStyleLayout.HorizontalStyleWhiteSpace(info.LayoutStyle);
|
||||
info.ContextCell.SetBounds(rCellBounds);
|
||||
|
||||
// Set Position of the image
|
||||
if(!info.ContextCell.Images.LargestImageSize.IsEmpty)
|
||||
{
|
||||
eVerticalAlign va=GetVerticalAlign(info.ContextCell.ImageAlignment);
|
||||
eHorizontalAlign ha=GetHorizontalAlign(info.ContextCell.ImageAlignment,info.LeftToRight);
|
||||
if(info.VerticalPartAlignment)
|
||||
info.ContextCell.SetImageBounds(AlignContentVertical(info.ContextCell.Images.LargestImageSize, ref r, ha, va, this.ImageTextSpacing));
|
||||
else
|
||||
info.ContextCell.SetImageBounds(AlignContent(info.ContextCell.Images.LargestImageSize, ref r, ha, va, this.ImageTextSpacing));
|
||||
}
|
||||
else
|
||||
info.ContextCell.SetImageBounds(Rectangle.Empty);
|
||||
|
||||
// Set position of the check box
|
||||
if(info.ContextCell.CheckBoxVisible)
|
||||
{
|
||||
eVerticalAlign va=GetVerticalAlign(info.ContextCell.CheckBoxAlignment);
|
||||
eHorizontalAlign ha=GetHorizontalAlign(info.ContextCell.CheckBoxAlignment,info.LeftToRight);
|
||||
if(info.VerticalPartAlignment)
|
||||
info.ContextCell.SetCheckBoxBounds(AlignContentVertical(this.CheckBoxSize, ref r, ha, va, this.ImageTextSpacing));
|
||||
else
|
||||
info.ContextCell.SetCheckBoxBounds(AlignContent(this.CheckBoxSize, ref r, ha, va, this.ImageTextSpacing));
|
||||
}
|
||||
else
|
||||
info.ContextCell.SetCheckBoxBounds(Rectangle.Empty);
|
||||
|
||||
// Set position of the text
|
||||
//info.ContextCell.SetTextBounds(Rectangle.Empty);
|
||||
if(!textSize.IsEmpty)
|
||||
info.ContextCell.TextContentBounds=r;
|
||||
else
|
||||
info.ContextCell.TextContentBounds=Rectangle.Empty;
|
||||
|
||||
}
|
||||
|
||||
private Rectangle AlignContent(System.Drawing.Size contentSize, ref Rectangle boundingRectangle, eHorizontalAlign horizAlign, eVerticalAlign vertAlign, int contentSpacing)
|
||||
{
|
||||
Rectangle contentRect=new Rectangle(Point.Empty,contentSize);
|
||||
switch(horizAlign)
|
||||
{
|
||||
case eHorizontalAlign.Right:
|
||||
{
|
||||
contentRect.X=boundingRectangle.Right-contentRect.Width;
|
||||
boundingRectangle.Width-=(contentRect.Width+contentSpacing);
|
||||
break;
|
||||
}
|
||||
//case eHorizontalAlign.Left:
|
||||
default:
|
||||
{
|
||||
contentRect.X=boundingRectangle.X;
|
||||
boundingRectangle.X=contentRect.Right+contentSpacing;
|
||||
boundingRectangle.Width-=(contentRect.Width+contentSpacing);
|
||||
break;
|
||||
}
|
||||
// case eHorizontalAlign.Center:
|
||||
// {
|
||||
// contentRect.X=boundingRectangle.X+(boundingRectangle.Width-contentRect.Width)/2;
|
||||
// break;
|
||||
// }
|
||||
}
|
||||
|
||||
switch(vertAlign)
|
||||
{
|
||||
case eVerticalAlign.Top:
|
||||
{
|
||||
contentRect.Y=boundingRectangle.Y;
|
||||
break;
|
||||
}
|
||||
case eVerticalAlign.Middle:
|
||||
{
|
||||
contentRect.Y=boundingRectangle.Y+(boundingRectangle.Height-contentRect.Height)/2;
|
||||
break;
|
||||
}
|
||||
case eVerticalAlign.Bottom:
|
||||
{
|
||||
contentRect.Y=boundingRectangle.Bottom-contentRect.Height;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return contentRect;
|
||||
}
|
||||
|
||||
private Rectangle AlignContentVertical(System.Drawing.Size contentSize, ref Rectangle boundingRectangle, eHorizontalAlign horizAlign, eVerticalAlign vertAlign, int contentSpacing)
|
||||
{
|
||||
Rectangle contentRect=new Rectangle(Point.Empty,contentSize);
|
||||
switch(horizAlign)
|
||||
{
|
||||
case eHorizontalAlign.Left:
|
||||
{
|
||||
contentRect.X=boundingRectangle.X;
|
||||
break;
|
||||
}
|
||||
case eHorizontalAlign.Right:
|
||||
{
|
||||
contentRect.X=boundingRectangle.Right-contentRect.Width;
|
||||
break;
|
||||
}
|
||||
case eHorizontalAlign.Center:
|
||||
{
|
||||
contentRect.X=boundingRectangle.X+(boundingRectangle.Width-contentRect.Width)/2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
switch(vertAlign)
|
||||
{
|
||||
case eVerticalAlign.Bottom:
|
||||
{
|
||||
contentRect.Y=boundingRectangle.Bottom-contentRect.Height;
|
||||
boundingRectangle.Height-=(contentRect.Height+contentSpacing);
|
||||
break;
|
||||
}
|
||||
//case eVerticalAlign.Top:
|
||||
default:
|
||||
{
|
||||
contentRect.Y=boundingRectangle.Y;
|
||||
boundingRectangle.Y=contentRect.Bottom+contentSpacing;
|
||||
boundingRectangle.Height-=(contentRect.Height+contentSpacing);
|
||||
break;
|
||||
}
|
||||
// case eVerticalAlign.Middle:
|
||||
// {
|
||||
// contentRect.Y=boundingRectangle.Y+(boundingRectangle.Height-contentRect.Height)/2;
|
||||
// break;
|
||||
// }
|
||||
}
|
||||
|
||||
return contentRect;
|
||||
}
|
||||
|
||||
private eHorizontalAlign GetHorizontalAlign(eCellPartAlignment align, bool leftToRight)
|
||||
{
|
||||
if(((align==eCellPartAlignment.NearBottom || align==eCellPartAlignment.NearCenter ||
|
||||
align==eCellPartAlignment.NearTop) && leftToRight) ||
|
||||
((align==eCellPartAlignment.FarBottom || align==eCellPartAlignment.FarCenter ||
|
||||
align==eCellPartAlignment.FarTop) && !leftToRight))
|
||||
return eHorizontalAlign.Left;
|
||||
else if(align==eCellPartAlignment.CenterBottom || align==eCellPartAlignment.CenterTop)
|
||||
return eHorizontalAlign.Center;
|
||||
return eHorizontalAlign.Right;
|
||||
}
|
||||
|
||||
private eVerticalAlign GetVerticalAlign(eCellPartAlignment align)
|
||||
{
|
||||
eVerticalAlign va=eVerticalAlign.Middle;
|
||||
|
||||
switch(align)
|
||||
{
|
||||
case eCellPartAlignment.FarBottom:
|
||||
case eCellPartAlignment.NearBottom:
|
||||
case eCellPartAlignment.CenterBottom:
|
||||
va=eVerticalAlign.Bottom;
|
||||
break;
|
||||
case eCellPartAlignment.FarTop:
|
||||
case eCellPartAlignment.NearTop:
|
||||
case eCellPartAlignment.CenterTop:
|
||||
va=eVerticalAlign.Top;
|
||||
break;
|
||||
}
|
||||
|
||||
return va;
|
||||
}
|
||||
|
||||
private System.Drawing.Size CheckBoxSize
|
||||
{
|
||||
get
|
||||
{
|
||||
return new Size(12,12);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns spacing between check box and image if both are displayed
|
||||
/// </summary>
|
||||
private int ImageCheckBoxSpacing
|
||||
{
|
||||
get {return 1;}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns spacing between image or checkbox and text
|
||||
/// </summary>
|
||||
private int ImageTextSpacing
|
||||
{
|
||||
get {return 1;}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns horizontal spacing between cells in a node
|
||||
/// </summary>
|
||||
public int CellHorizontalSpacing
|
||||
{
|
||||
get {return 1;}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns vertical spacing between cells in a node
|
||||
/// </summary>
|
||||
public int CellVerticalSpacing
|
||||
{
|
||||
get {return 1;}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Spacing between different parts of the cell, like image, option button, text and expand button area
|
||||
/// </summary>
|
||||
public int CellPartSpacing
|
||||
{
|
||||
get {return 1;}
|
||||
}
|
||||
|
||||
public Size LayoutCells(NodeLayoutContextInfo layoutInfo, int x, int y)
|
||||
{
|
||||
eCellLayout layout=layoutInfo.CellLayout;
|
||||
if(layoutInfo.ContextNode.CellLayout!=layoutInfo.CellLayout && layoutInfo.ContextNode.CellLayout!=eCellLayout.Default)
|
||||
layout=layoutInfo.ContextNode.CellLayout;
|
||||
if(layout==eCellLayout.Horizontal || layout==eCellLayout.Default)
|
||||
return this.LayoutCellsHorizontal(layoutInfo,x,y);
|
||||
else
|
||||
return this.LayoutCellsVertical(layoutInfo,x,y);
|
||||
}
|
||||
|
||||
private Size LayoutCellsHorizontal(NodeLayoutContextInfo layoutInfo, int x, int y)
|
||||
{
|
||||
Node node=layoutInfo.ContextNode;
|
||||
int height=0, width=0;
|
||||
|
||||
for(int i=0;i<node.Cells.Count;i++)
|
||||
{
|
||||
Cell cell=node.Cells[i];
|
||||
|
||||
bool bCellVisible=true;
|
||||
|
||||
// Setup cell layout helper class
|
||||
LayoutCellInfo cellLayout=this.GetLayoutCellInfo();
|
||||
cellLayout.Top=y;
|
||||
cellLayout.Left=x;
|
||||
cellLayout.CellWidth=0;
|
||||
cellLayout.ContextCell=cell;
|
||||
cellLayout.Graphics=layoutInfo.Graphics;
|
||||
cellLayout.LeftToRight=layoutInfo.LeftToRight;
|
||||
cellLayout.Font=layoutInfo.DefaultFont;
|
||||
if(cell.Layout!=eCellPartLayout.Default)
|
||||
cellLayout.VerticalPartAlignment=(cell.Layout==eCellPartLayout.Vertical);
|
||||
else if(layoutInfo.CellPartLayout!=eCellPartLayout.Default)
|
||||
cellLayout.VerticalPartAlignment=(layoutInfo.CellPartLayout==eCellPartLayout.Vertical);
|
||||
|
||||
|
||||
if(layoutInfo.DefaultColumns.Count>0 || layoutInfo.ChildColumns!=null && layoutInfo.ChildColumns.Count>0)
|
||||
{
|
||||
ColumnInfo ci=null;
|
||||
if(layoutInfo.ChildColumns!=null && layoutInfo.ChildColumns.Count>0)
|
||||
ci=layoutInfo.ChildColumns[i] as ColumnInfo;
|
||||
else
|
||||
ci=layoutInfo.DefaultColumns[i] as ColumnInfo;
|
||||
|
||||
bCellVisible=ci.Visible;
|
||||
cellLayout.CellWidth=ci.Width;
|
||||
}
|
||||
|
||||
// Prepare union style
|
||||
if(cell.StyleNormal!=null)
|
||||
cellLayout.LayoutStyle=cell.StyleNormal;
|
||||
else
|
||||
cellLayout.LayoutStyle=layoutInfo.DefaultCellStyle;
|
||||
|
||||
this.LayoutSingleCell(cellLayout);
|
||||
|
||||
if(bCellVisible)
|
||||
{
|
||||
x+=cell.Bounds.Width;
|
||||
width+=cell.Bounds.Width;
|
||||
if(cell.Bounds.Width>0)
|
||||
{
|
||||
x+=this.CellHorizontalSpacing;
|
||||
width+=this.CellHorizontalSpacing;
|
||||
}
|
||||
if(cell.Bounds.Height>height)
|
||||
height=cell.Bounds.Height;
|
||||
}
|
||||
}
|
||||
|
||||
// Take last added spacing off
|
||||
x-=this.CellHorizontalSpacing;
|
||||
width-=this.CellHorizontalSpacing;
|
||||
|
||||
return new Size(width,height);
|
||||
}
|
||||
|
||||
private Size LayoutCellsVertical(NodeLayoutContextInfo layoutInfo, int x, int y)
|
||||
{
|
||||
Node node=layoutInfo.ContextNode;
|
||||
int height=0, width=0;
|
||||
eHorizontalAlign align=eHorizontalAlign.Center;
|
||||
int iVisibleCells=0;
|
||||
|
||||
for(int i=0;i<node.Cells.Count;i++)
|
||||
{
|
||||
Cell cell=node.Cells[i];
|
||||
|
||||
bool bCellVisible=true;
|
||||
|
||||
// Setup cell layout helper class
|
||||
LayoutCellInfo cellLayout=this.GetLayoutCellInfo();
|
||||
cellLayout.Top=y;
|
||||
cellLayout.Left=x;
|
||||
cellLayout.CellWidth=0;
|
||||
cellLayout.ContextCell=cell;
|
||||
cellLayout.Graphics=layoutInfo.Graphics;
|
||||
cellLayout.LeftToRight=layoutInfo.LeftToRight;
|
||||
cellLayout.Font=layoutInfo.DefaultFont;
|
||||
|
||||
if(layoutInfo.DefaultColumns.Count>0 || layoutInfo.ChildColumns!=null && layoutInfo.ChildColumns.Count>0)
|
||||
{
|
||||
ColumnInfo ci=null;
|
||||
if(layoutInfo.ChildColumns!=null && layoutInfo.ChildColumns.Count>0)
|
||||
ci=layoutInfo.ChildColumns[i] as ColumnInfo;
|
||||
else
|
||||
ci=layoutInfo.DefaultColumns[i] as ColumnInfo;
|
||||
|
||||
bCellVisible=ci.Visible;
|
||||
cellLayout.CellWidth=ci.Width;
|
||||
}
|
||||
|
||||
// Prepare union style
|
||||
if(cell.StyleNormal!=null)
|
||||
cellLayout.LayoutStyle=cell.StyleNormal;
|
||||
else
|
||||
cellLayout.LayoutStyle=layoutInfo.DefaultCellStyle;
|
||||
|
||||
this.LayoutSingleCell(cellLayout);
|
||||
|
||||
cell.SetVisible(bCellVisible);
|
||||
if(bCellVisible)
|
||||
{
|
||||
iVisibleCells++;
|
||||
y+=cell.Bounds.Height;
|
||||
height+=cell.Bounds.Height;
|
||||
if(cell.Bounds.Height>0)
|
||||
{
|
||||
y+=this.CellVerticalSpacing;
|
||||
height+=this.CellVerticalSpacing;
|
||||
}
|
||||
if(cell.Bounds.Width>width)
|
||||
width=cell.Bounds.Width;
|
||||
}
|
||||
}
|
||||
|
||||
// Take last added spacing off
|
||||
y-=this.CellVerticalSpacing;
|
||||
height-=this.CellVerticalSpacing;
|
||||
|
||||
// Additional pass needed if horizontal alignment is other than left and there is more than one cell visible
|
||||
if(align!=eHorizontalAlign.Left && iVisibleCells>1)
|
||||
{
|
||||
foreach(Cell cell in node.Cells)
|
||||
{
|
||||
if(!cell.IsVisible)
|
||||
continue;
|
||||
if(align==eHorizontalAlign.Center)
|
||||
this.Offset(cell,(width-cell.Bounds.Width)/2,0);
|
||||
else // Right aligned cells
|
||||
this.Offset(cell,width-cell.Bounds.Width,0);
|
||||
}
|
||||
}
|
||||
|
||||
return new Size(width,height);
|
||||
}
|
||||
|
||||
private LayoutCellInfo m_LayoutCellInfo=null;
|
||||
private LayoutCellInfo GetLayoutCellInfo()
|
||||
{
|
||||
if(m_LayoutCellInfo==null)
|
||||
m_LayoutCellInfo=new LayoutCellInfo();
|
||||
return m_LayoutCellInfo;
|
||||
}
|
||||
}
|
||||
|
||||
internal class LayoutCellInfo
|
||||
{
|
||||
public Cell ContextCell=null;
|
||||
public int CellWidth=0;
|
||||
public System.Drawing.Graphics Graphics=null;
|
||||
public System.Drawing.Font Font=null;
|
||||
public int Left=0;
|
||||
public int Top=0;
|
||||
public ElementStyle LayoutStyle=null;
|
||||
public bool LeftToRight=true;
|
||||
public bool VerticalPartAlignment=false;
|
||||
|
||||
public LayoutCellInfo()
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
internal class ColumnInfo
|
||||
{
|
||||
public bool Visible;
|
||||
public int Width;
|
||||
public ColumnInfo(int width, bool visible)
|
||||
{
|
||||
this.Width=width;
|
||||
this.Visible=visible;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user