/// <summary> /// Forward container events /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void item_ContainerEvent(object sender, ContainerEventArgs e) { if (ContainerEvent != null) { ContainerEvent(sender, e); } }
/// <summary> /// Gets a transformation used to convert from local space to control space. /// </summary> public Matrix GetLocal2ControlTransform() { var args = new ContainerEventArgs(ContainerMessage.Local2ControlMatrix, this, new Matrix()); RaiseContainerEvent(args); return(args.Transform); }
/// <summary> /// Fire the ContainerEvent with given argument. /// </summary> /// <param name="e"></param> protected void RaiseContainerEvent(ContainerEventArgs e) { if (ContainerEvent != null) { ContainerEvent(this, e); } }
/// <summary> /// Notify the canvas to block update request till EndUpdate. /// </summary> protected IDisposable BeginUpdate() { var update = new Update(this); updateDepth++; if ((updateDepth == 1) && (ContainerEvent != null)) { var args = new ContainerEventArgs(ContainerMessage.BeginUpdate, this) { Update = update }; ContainerEvent(this, args); } return(update); }
/// <summary> /// Handle events from the root container /// </summary> private void OnRootContainerEvent(object sender, ContainerEventArgs e) { if (InvokeRequired) { Invoke(new EventHandler <ContainerEventArgs>(OnRootContainerEvent), sender, e); } else { switch (e.Message) { case ContainerMessage.SizeChanged: UpdateScrollbars(); Invalidate(); break; case ContainerMessage.Redraw: Invalidate(); break; case ContainerMessage.ZoomToRectangle: rootContainer.ZoomToRectangle(e.Rectangle); break; case ContainerMessage.BeginUpdate: e.Update.Add(BeginUpdate()); break; case ContainerMessage.EnsureVisible: if (!rootContainer.IsVisible(e.Point)) { rootContainer.ZoomTo(ZoomFactor, e.Point); } break; case ContainerMessage.Local2ControlMatrix: rootContainer.Local2Global(e.Transform); break; case ContainerMessage.CustomMessage: if (CustomItemMessage != null) { CustomItemMessage(e.Sender, new ArgumentEventArgs(e.Argument)); } break; } } }
/// <summary> /// Default ctor /// </summary> public VCItemContainer() { this.KeyboardHandler = new Handlers.ContainerKeyboardHandler(this, null); this.MouseHandler = new Handlers.ContainerMouseHandler(this, null); this.DragDropHandler = new Handlers.ContainerDragDropHandler(this, null); // Connect to itms items.Added += delegate(object sender, VCItemPlacementEventArgs e) { LayoutItems(); //RaiseSizeChanged(); }; items.Removed += delegate(object sender, VCItemPlacementEventArgs e) { if (selection != null) { selection.Remove(e.Placement); } LayoutItems(); //RaiseSizeChanged(); }; items.ContainerEvent += delegate(object sender, ContainerEventArgs e) { switch (e.Message) { case ContainerMessage.SizeChanged: LayoutItems(); //RaiseSizeChanged(); break; case ContainerMessage.ZoomToRectangle: { var placement = items.Find((VCItem)sender); if (placement != null) { var rect = e.Rectangle; rect.Location = placement.FromLocal(rect.Location); ZoomToRectangle(rect); } } break; case ContainerMessage.EnsureVisible: { var placement = items.Find((VCItem)sender); if (placement != null) { var pt = placement.FromLocal(e.Point); EnsureVisible(pt); } } break; case ContainerMessage.Redraw: if (!IsUpdating) { RaiseContainerEvent(e); } break; case ContainerMessage.Local2ControlMatrix: { var placement = items.Find((VCItem)sender); if (placement != null) { e.Transform.Multiply(placement.Transform, MatrixOrder.Append); var args = new ContainerEventArgs(e.Message, this, e.Transform); RaiseContainerEvent(args); } } break; default: // Forward all other events RaiseContainerEvent(e); break; } }; }