/// <summary> /// Transforms the specified rectangle. /// </summary> /// <param name="rectangle">The rectangle.</param> public override void Transform(Rectangle rectangle) { //IMPORTANT: the rectangle given as the transformation parameter is supposed to be the rectangle of the collapsed folder! itemWidth = rectangle.Width - plusminus.Rectangle.Width - constHeaderSpacing; //shift the plusminus icon plusminus.Transform(new Rectangle(rectangle.Location, plusminus.Rectangle.Size)); //header header.Transform(new Rectangle(rectangle.Location.X + plusminus.Rectangle.Width + 10, rectangle.Location.Y, itemWidth, header.Rectangle.Height)); //transform the entries int k = 0; foreach (IShapeMaterial material in mEntries) { material.Transform(new Rectangle(rectangle.X + plusminus.Rectangle.Width + 10, rectangle.Y + constHeaderHeight + 7 + k * (constItemHeight + constItemSpacing), itemWidth, constItemHeight)); k++; } if (mCollapsed) { base.Transform(new Rectangle(rectangle.X, rectangle.Y, rectangle.Width, constHeaderHeight)); } else { base.Transform(new Rectangle(rectangle.X, rectangle.Y, rectangle.Width, constHeaderHeight + constItemSpacing + mEntries.Count * (constItemSpacing + constItemHeight))); } }
/// <summary> /// Calculates the bounding rectangle of this group. /// </summary> public void CalculateRectangle() { if (mEntities == null || mEntities.Count == 0) { return; } Rectangle rec = mEntities[0].Rectangle; foreach (IDiagramEntity entity in Entities) { //cascade the calculation if necessary if ((entity is CollapsibleGroupShape) && !(entity as CollapsibleGroupShape).Collapsed) { (entity as IGroup).CalculateRectangle(); } rec = Rectangle.Union(rec, entity.Rectangle); } rec.Inflate(20, 20); this.mRectangle = rec; rec.Offset(5, 5); xicon.Transform(new Rectangle(rec.Location, new Size(16, 16))); expandLabel.Transform(new Rectangle(rec.Location.X + 20, rec.Location.Y, 50, 12)); }
///<summary> ///Default constructor ///</summary> public FolderMaterial(string title) : base() { myTextStyle = new TextStyle( Color.Black, new Font("Arial", 10), StringAlignment.Near, StringAlignment.Near); mEntries = new CollectionBase <IShapeMaterial>(); mEntries.OnItemAdded += new EventHandler <CollectionEventArgs <IShapeMaterial> >( mEntries_OnItemAdded); Gliding = false; Resizable = true; plusminus = new SwitchIconMaterial(SwitchIconType.PlusMinus); plusminus.TextStyle = myTextStyle; plusminus.Transform(new Rectangle(0, 0, 16, 16)); plusminus.Visible = true; plusminus.Gliding = false; plusminus.OnExpand += new EventHandler(plusminus_OnExpand); plusminus.OnCollapse += new EventHandler(plusminus_OnCollapse); header = new ClickableLabelMaterial(); header.TextStyle = myTextStyle; header.Transform(new Rectangle(0, 0, 100, HeaderHeight)); header.Text = title; header.Gliding = false; header.Visible = true; header.Resizable = true; }
///<summary> ///Default constructor ///</summary> public FolderMaterial(string title) : base() { myTextStyle = new TextStyle( Color.Black, new Font("Arial", 10), StringAlignment.Near, StringAlignment.Near); mEntries = new CollectionBase<IShapeMaterial>(); mEntries.OnItemAdded += new EventHandler<CollectionEventArgs<IShapeMaterial>>( mEntries_OnItemAdded); Gliding = false; Resizable = true; plusminus = new SwitchIconMaterial(SwitchIconType.PlusMinus); plusminus.TextStyle = myTextStyle; plusminus.Transform(new Rectangle(0, 0, 16, 16)); plusminus.Visible = true; plusminus.Gliding = false; plusminus.OnExpand += new EventHandler(plusminus_OnExpand); plusminus.OnCollapse += new EventHandler(plusminus_OnCollapse); header = new ClickableLabelMaterial(); header.TextStyle = myTextStyle; header.Transform(new Rectangle(0, 0, 100, HeaderHeight)); header.Text = title; header.Gliding = false; header.Visible = true; header.Resizable = true; }