⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 umlshow.cs

📁 UML设计相关的源码。作UML相关开发的不容错过。
💻 CS
📖 第 1 页 / 共 5 页
字号:
								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 + -