Example #1
0
		// ************ modification ************

		internal override void startModify(PointF org, int handle, InteractionState ist)
		{
			base.startModify(org, handle, ist);
			relatedInteraction = ist;

			ptLastTopLeft.X = rect.Left;
			ptLastTopLeft.Y = rect.Top;
			ptLastTopLeft = flowChart.AlignPointToGrid(ptLastTopLeft);

			if (handle == 8 && selectedItems.Count > 0)
			{
				foreach (ChartObject obj in selectedItems)
					if (!obj.getModifying() && obj.canModify(handle))
						obj.startModify(org, 0, ist);
			}

			// find arrows whose both ends are selected
			arrowsToMove.Clear();
			MethodCallVisitor visitor = new MethodCallVisitor(
				new VisitOperation(HV_TranslateArrow));
			visitHierarchy(visitor);
		}
Example #2
0
		internal void removeItem(ChartObject item)
		{
			selection.RemoveObject(item);
			if (item == autoHandlesObj) autoHandlesObj = null;
			if (item == autoAnchorsObj) autoAnchorsObj = null;

			switch (item.getType())
			{
				case ItemType.Box:
					boxes.Remove((Box)item);
					break;
				case ItemType.ControlHost:
					controlHosts.Remove((ControlHost)item);
					break;
				case ItemType.Table:
					tables.Remove((Table)item);
					break;
				case ItemType.Arrow:
					arrows.Remove((Arrow)item);
					break;
			}

			removeFromZOrder(item);

			MethodCallVisitor visitor =
				new MethodCallVisitor(new VisitOperation(removeFromSelection));

			switch (item.getType())
			{
				case ItemType.ControlHost:
				{
					ControlHost host = (ControlHost)item;
					host.visitArrows(visitor);
					host.deleteArrows();
				}
					break;
				case ItemType.Box:
				{
					Box box = (Box)item;
					box.visitArrows(visitor);
					box.deleteArrows();
				}
					break;
				case ItemType.Table:
				{
					Table table = (Table)item;
					table.visitArrows(visitor);
					table.deleteArrows();
				}
					break;
				case ItemType.Arrow:
				{
					Arrow arrow = (Arrow)item;
					arrow.resetCrossings();
					arrow.getDestLink().removeArrowFromObj();
					arrow.getOrgnLink().removeArrowFromObj();
				}
					break;
			}

			item.onRemove();

			// update document size if needed
			if (autoSizeDoc != MindFusion.FlowChartX.AutoSize.None)
				sizeDocForItems();
		}
Example #3
0
		internal override void completeModify(PointF end, InteractionState ist)
		{
			base.completeModify(end, ist);
			relatedInteraction = null;
			RectangleF rcBounding = new RectangleF(0, 0, 0, 0);

			if (modifyHandle == 8)
			{
				MethodCallVisitor visitor = new MethodCallVisitor(
					new VisitOperation(updateNSARect));
				visitHierarchy(visitor);

				foreach (ChartObject obj in selectedItems)
				{
					RectangleF rcObj = obj.getRotatedBounds();
					rcBounding = Utilities.unionNonEmptyRects(rcBounding, rcObj);
				}
				rect = rcBounding;

				// beware of arrow routing; obj.completeModify invokations
				// might route many arrows repetitively
				flowChart.DontRouteForAwhile = true;

				// call EndModify method of all selected objects
				foreach (ChartObject obj in selectedItems)
					if (obj.getModifying() && obj.canModify(modifyHandle))
						obj.completeModify();

				// now that would route an arrow only once
				flowChart.DontRouteForAwhile = false;
				flowChart.routeAllArrows(this);

				// fire SelectionMoved event, for that was exactly what happened
				flowChart.fireSelectionMoved();
			}
		}
Example #4
0
		private void drawHierarchy(Graphics g, ChartObject obj, bool shadows)
		{
			if (!sortGroupsByZ)
			{
				PainterVisitor painter = new PainterVisitor(g, shadows);
				obj.visitHierarchy(painter);
			}
			else
			{
				MethodCallVisitor visitor =
					new MethodCallVisitor(new VisitOperation(addToSortedList));
				obj.visitHierarchy(visitor);
				foreach (ChartObject item in sortedByZ.Keys)
					item.Draw(g, shadows);
				sortedByZ.Clear();
			}
		}