📄 umlshow.cs
字号:
ElementData itemData = (ElementData) drawData.Element[i];
if( itemData.ElementType == enumElementType.elementTypeFunction ||
itemData.ElementType == enumElementType.elementTypeDelegate )
{
if( (int)( itemState.DrawState & enumDrawState.drawStateShowVisibility ) > 0 )
{
Icon ico;
operationsPosition.X = operationsStartPosition.X;
// Load ico
if( itemData.AccessType == enumElementAccessType.accessTypePrivate ||
itemData.AccessType == enumElementAccessType.accessTypeProjectOrProtected ||
itemData.AccessType == enumElementAccessType.accessTypeProtected )
{
ico = iconFunctionPrv;
}
else ico = iconFunctionPub;
// Draw Item
Point ptIcon = new Point( operationsPosition.X, operationsPosition.Y - 8 );
g.DrawIconUnstretched( ico, new Rectangle( ptIcon, ico.Size ) );
operationsPosition.X += ico.Size.Width;
}
// Prepare string...
String showString = GetOperationShowString( itemData, itemState.DrawState );
// Draw String
g.DrawString( showString, itemState.ItemFont, brushFront, operationsPosition );
operationsPosition.Y += (int)sizeFontItem.Height;
}
}
}
}
}
// Finally...
// // Draw name text
StringFormat nameFormat = new StringFormat();
nameFormat.Alignment = StringAlignment.Center;
g.DrawString( drawData.Name, itemState.ItemFont, brushFront,
new RectangleF( itemState.Position.X, itemState.Position.Y + heightSpaceCount/2,
itemState.nameSize.Width, itemState.nameSize.Height ),
nameFormat );
}
/// <summary>
/// Draw a namespace
/// here i suppose namespace means : PACKAGE
/// </summary>
/// <param name="g"></param>
/// <param name="elementData"></param>
private void DrawNamespaceItem( Graphics g, ElementData elementData, Point ptOffset )
{
ElementData drawData = elementData;
ItemDrawState itemState = (ItemDrawState) drawData.ExtendDataObject;
SolidBrush brushFront = new SolidBrush( itemState.FrontColor );
SolidBrush brushBack = new SolidBrush( itemState.BackColor );
Pen penFront = new Pen( itemState.FrontColor );
//************************* NOTICE *********************//
// Check the minium size of the body
// get the experience result by using rose
// the size.height must be 18 and the
// namesize.height must no less than 60
//******************************************************//
// Check it here...
AutoCalculateNameSpaceElementSize( g, elementData );
// First draw the header
// Only use the Size.Height
g.FillRectangle( brushBack, itemState.Position.X, itemState.Position.Y,
(int)(itemState.nameSize.Width*4.0F/10.0F), itemState.headSize.Height );
g.DrawRectangle( penFront, itemState.Position.X, itemState.Position.Y,
(int)(itemState.nameSize.Width*4.0F/10.0F), itemState.headSize.Height );
g.FillRectangle( brushBack, itemState.Position.X, itemState.Position.Y + itemState.headSize.Height,
itemState.nameSize.Width, itemState.nameSize.Height );
g.DrawRectangle( penFront, itemState.Position.X, itemState.Position.Y + itemState.headSize.Height,
itemState.nameSize.Width, itemState.nameSize.Height );
StringFormat nameFormat = new StringFormat();
nameFormat.Alignment = StringAlignment.Center;
g.DrawString( drawData.Name, itemState.ItemFont, brushFront,
new RectangleF( itemState.Position.X, itemState.Position.Y + itemState.headSize.Height,
itemState.nameSize.Width, itemState.nameSize.Height ),
nameFormat );
}
/// <summary>
/// Draw a interface
/// </summary>
/// <param name="g"></param>
/// <param name="elementData"></param>
private void DrawInterfaceItem( Graphics g, ElementData elementData, Point ptOffset )
{
ElementData drawData = elementData;
ItemDrawState itemState = (ItemDrawState) drawData.ExtendDataObject;
SolidBrush brushFront = new SolidBrush( itemState.FrontColor );
SolidBrush brushBack = new SolidBrush( itemState.BackColor );
Pen penFront = new Pen( itemState.FrontColor );
const int heightSpaceCount = 6;
/// *************Draw Background******************///
///
AutoCalculateInterfaceElementSize( g, elementData );
g.FillEllipse( brushBack, itemState.Position.X + (itemState.nameSize.Width/2 - itemState.headSize.Width/2), itemState.Position.Y,
itemState.headSize.Width, itemState.headSize.Height );
g.FillRectangle( brushBack, itemState.Position.X, itemState.Position.Y + itemState.headSize.Height,
itemState.nameSize.Width + heightSpaceCount/2, itemState.nameSize.Height );
g.FillRectangle( brushBack, itemState.Position.X, itemState.Position.Y + itemState.nameSize.Height + itemState.headSize.Height,
itemState.variablesSize.Width + heightSpaceCount/2, itemState.variablesSize.Height );
g.FillRectangle( brushBack, itemState.Position.X, itemState.Position.Y + itemState.nameSize.Height + itemState.variablesSize.Height + itemState.headSize.Height,
itemState.operationsSize.Width + heightSpaceCount/2, itemState.operationsSize.Height );
g.DrawEllipse( penFront, itemState.Position.X + (itemState.nameSize.Width/2 - itemState.headSize.Width/2), itemState.Position.Y,
itemState.headSize.Width, itemState.headSize.Height );
g.DrawRectangle( penFront, itemState.Position.X, itemState.Position.Y + itemState.headSize.Height,
itemState.nameSize.Width + heightSpaceCount/2, itemState.nameSize.Height );
g.DrawRectangle( penFront, itemState.Position.X, itemState.Position.Y + itemState.nameSize.Height + itemState.headSize.Height,
itemState.variablesSize.Width + heightSpaceCount/2, itemState.variablesSize.Height );
g.DrawRectangle( penFront, itemState.Position.X, itemState.Position.Y + itemState.nameSize.Height + itemState.variablesSize.Height + itemState.headSize.Height,
itemState.operationsSize.Width + heightSpaceCount/2, itemState.operationsSize.Height );
// ****** Draw first name ***** //
// Calculate item size
SizeF sizeFontItem = new SizeF();
sizeFontItem = g.MeasureString( drawData.Name, itemState.ItemFont );
StringFormat nameFormat = new StringFormat();
nameFormat.Alignment = StringAlignment.Center;
g.DrawString( drawData.Name, itemState.ItemFont, brushFront,
new RectangleF( itemState.Position.X, itemState.Position.Y + heightSpaceCount/2 + itemState.headSize.Height,
itemState.nameSize.Width, itemState.nameSize.Height ),
nameFormat );
// ****** Draw Variable ***** //
Point variableStartPosition = new Point( (int)itemState.Position.X,
(int)itemState.Position.Y +
(int)itemState.nameSize.Height +
heightSpaceCount/2 +
(int)itemState.headSize.Height );
Point variablePosition = new Point( variableStartPosition.X, variableStartPosition.Y );
if( ! ( (int)( itemState.DrawState & enumDrawState.drawStateSuppressAttributes ) > 0 ) )
{
if( (int)( itemState.DrawState & enumDrawState.drawStateShowAttributes ) > 0 )
{
if( drawData.Element.Count > 0 )
{
for( int i = 0 ; i < drawData.Element.Count ; i ++ )
{
ElementData itemData = (ElementData) drawData.Element[i];
if( itemData.ElementType == enumElementType.elementTypeVariable )
{
if( (int)( itemState.DrawState & enumDrawState.drawStateShowVisibility ) > 0 )
{
Icon ico;
variablePosition.X = variableStartPosition.X;
// Load ico
if( itemData.AccessType == enumElementAccessType.accessTypePrivate ||
itemData.AccessType == enumElementAccessType.accessTypeProjectOrProtected ||
itemData.AccessType == enumElementAccessType.accessTypeProtected )
{
ico = iconVariablePrv;
}
else ico = iconVariablePub;
// Draw Item
Point ptIcon = new Point( variablePosition.X, variablePosition.Y - 8 );
g.DrawIconUnstretched( ico, new Rectangle( ptIcon, ico.Size ) );
variablePosition.X += ico.Size.Width;
}
// Prepare string...
String showString = itemData.Name + " : " +
itemData.PhotoType.phototypeType.Split(' ')[0];
// Draw String
g.DrawString( showString, itemState.ItemFont, brushFront, variablePosition );
variablePosition.Y += (int)sizeFontItem.Height;
}
else if( itemData.ElementType == enumElementType.elementTypeProperty )
{
if( (int)(itemState.DrawState & enumDrawState.drawStateShowVisibility) > 0 )
{
Icon ico;
variablePosition.X = variableStartPosition.X;
// Load ico
ico = iconProperty;
// Draw Item
Point ptIcon = new Point( variablePosition.X, variablePosition.Y - 8 );
g.DrawIconUnstretched( ico, new Rectangle( ptIcon, ico.Size ) );
variablePosition.X += ico.Size.Width;
}
// Prepare string...
String showString = itemData.Name + " : " +
itemData.PhotoType.phototypeType.Split(' ')[0];
// Draw String
g.DrawString( showString, itemState.ItemFont, brushFront, variablePosition );
variablePosition.Y += (int)sizeFontItem.Height;
}
}
}
}
}
// Draw operation
// ****** Draw operation ***** //
Point operationsStartPosition = new Point( (int)itemState.Position.X,
(int)itemState.Position.Y +
(int)itemState.nameSize.Height +
(int) itemState.variablesSize.Height +
heightSpaceCount/2 +
(int)(itemState.headSize.Height) );
Point operationsPosition = new Point( operationsStartPosition.X, operationsStartPosition.Y );
if( ! ( (int)( itemState.DrawState & enumDrawState.drawStateSuppressOperations ) > 0 ) )
{
if( (int)( itemState.DrawState & enumDrawState.drawStateShowOperations ) > 0 )
{
if( drawData.Element.Count > 0 )
{
for( int i = 0 ; i < drawData.Element.Count ; i ++ )
{
ElementData itemData = (ElementData) drawData.Element[i];
if( itemData.ElementType == enumElementType.elementTypeFunction ||
itemData.ElementType == enumElementType.elementTypeDelegate )
{
if( (int)( itemState.DrawState & enumDrawState.drawStateShowVisibility ) > 0 )
{
Icon ico;
operationsPosition.X = operationsStartPosition.X;
// Load ico
if( itemData.AccessType == enumElementAccessType.accessTypePrivate ||
itemData.AccessType == enumElementAccessType.accessTypeProjectOrProtected ||
itemData.AccessType == enumElementAccessType.accessTypeProtected )
{
ico = iconFunctionPrv;
}
else ico = iconFunctionPub;
// Draw Item
Point ptIcon = new Point( operationsPosition.X, operationsPosition.Y - 8 );
g.DrawIconUnstretched( ico, new Rectangle( ptIcon, ico.Size ) );
operationsPosition.X += ico.Size.Width;
}
// Prepare string...
String showString = GetOperationShowString( itemData, itemState.DrawState );
// Draw String
g.DrawString( showString, itemState.ItemFont, brushFront, operationsPosition );
operationsPosition.Y += (int)sizeFontItem.Height;
}
}
}
}
}
}
/// <summary>
/// Helper functions
/// Get the operation's display string from phototype
/// </summary>
/// <param name="itemData"></param>
/// <param name="itemState"></param>
/// <returns></returns>
private String GetOperationShowString( ElementData itemData, enumDrawState itemState )
{
String showString = null;
if( (int)(itemState & enumDrawState.drawStateShowOperationSignature ) > 0 )
{
int startPos = itemData.PhotoType.paramTypes.IndexOf('(')+1;
int endPos = itemData.PhotoType.paramTypes.IndexOf(')');
String parametersType = itemData.PhotoType.paramTypes.Substring( startPos, endPos - startPos );
String[] types = parametersType.Split(',');
startPos = itemData.PhotoType.paramNames.IndexOf('(')+1;
endPos = itemData.PhotoType.paramNames.IndexOf(')');
String parametersNames = itemData.PhotoType.paramNames.Substring( startPos, endPos - startPos );
String[] names = parametersNames.Split(',');
showString += itemData.Name;
showString += "( ";
if( parametersType.Length > 0 && parametersNames.Length > 0 )
{
int nIndex = 0;
foreach( string type in types )
{
if( nIndex != 0 ) showString += ", ";
showString += names[nIndex];
showString += ":";
showString += type;
// Increase index
nIndex ++;
}
// Remove last ", "
showString.Remove( showString.Length - 2, 2 );
// Add last ")"
showString += " )";
// Add phototypes
String phototype = itemData.PhotoType.phototypeType.Split(' ')[0];
if( phototype.Length > 0 )
{
showString += " : ";
showString += phototype;
}
}
else
{
// Add last ")"
showString += " )";
}
}
else
{
showString = itemData.Name + " : " +
itemData.PhotoType.phototypeType.Split(' ')[0];
}
// if the function is a Property Function, must add "get","put",etc
if( itemData.ElementType == enumElementType.elementTypeFunction )
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -