internal D2dAdaptableControl CreateCircuitControl(DomNode circuitNode) { var control = new D2dAdaptableControl(); control.SuspendLayout(); control.BackColor = SystemColors.ControlLight; control.AllowDrop = true; var transformAdapter = new TransformAdapter(); transformAdapter.EnforceConstraints = false; //to allow the canvas to be panned to view negative coordinates transformAdapter.UniformScale = true; transformAdapter.MinScale = new PointF(0.01f, 0.01f); transformAdapter.MaxScale = new PointF(4, 4); var viewingAdapter = new ViewingAdapter(transformAdapter); viewingAdapter.MarginSize = new Size(25, 25); var canvasAdapter = new CanvasAdapter(); ((ILayoutConstraint)canvasAdapter).Enabled = false; //to allow negative coordinates for circuit elements within groups var autoTranslateAdapter = new AutoTranslateAdapter(transformAdapter); var mouseTransformManipulator = new MouseTransformManipulator(transformAdapter); var mouseWheelManipulator = new MouseWheelManipulator(transformAdapter); var scrollbarAdapter = new ScrollbarAdapter(transformAdapter, canvasAdapter); var hoverAdapter = new HoverAdapter(); hoverAdapter.HoverStarted += control_HoverStarted; hoverAdapter.HoverStopped += control_HoverStopped; var annotationAdaptor = new D2dAnnotationAdapter(Theme); // display annotations under diagram var d2dRectangleDragSelector = new D2dRectangleDragSelector(); var d2dRectangleDragRenderer = new D2dRectangleDragRenderer(d2dRectangleDragSelector); var gridAdapter = new D2dGridAdapter(); gridAdapter.ConstraintEnabled = SnapToGridEnabled; //gridAdapter.Enabled = false; //gridAdapter.Visible = true; if (circuitNode.Is<Circuit>()) { var circuitAdapter = new D2dGraphAdapter<Module, Connection, ICircuitPin>(CircuitRenderer, transformAdapter); // The "AllFirst" policy will try to draw edges (wires) before nodes, as much as possible. //circuitAdapter.EdgeRenderPolicy = D2dGraphAdapter<Module, Connection, ICircuitPin>.DrawEdgePolicy.AllFirst; var circuitModuleEditAdapter = new D2dGraphNodeEditAdapter<Module, Connection, ICircuitPin>( CircuitRenderer, circuitAdapter, transformAdapter); circuitModuleEditAdapter.DraggingSubNodes = false; var circuitConnectionEditAdapter = new D2dGraphEdgeEditAdapter<Module, Connection, ICircuitPin>(CircuitRenderer, circuitAdapter, transformAdapter); circuitConnectionEditAdapter.EdgeRouteTraverser = CircuitUtil.EdgeRouteTraverser; control.Adapt( // This end of the list is drawn first and receives mouse events last. hoverAdapter, scrollbarAdapter, autoTranslateAdapter, d2dRectangleDragSelector, //Needs to be before annotationAdaptor, so that drag-and-selecting text works. transformAdapter, viewingAdapter, canvasAdapter, mouseTransformManipulator, mouseWheelManipulator, new KeyboardIOGraphNavigator<Module, Connection, ICircuitPin>(), gridAdapter, annotationAdaptor, //Needs to be before circuitAdapter so that comments appear under elements. circuitAdapter, circuitModuleEditAdapter, //lets user move circuit elements on canvas circuitConnectionEditAdapter, new LabelEditAdapter(), d2dRectangleDragRenderer, new SelectionAdapter(), new DragDropAdapter(m_statusService), new ContextMenuAdapter(m_commandService, m_contextMenuCommandProviders) // This end of the list is drawn last and receives mouse events first. ); } else if (circuitNode.Is<Group>()) { var circuitAdapter = new D2dSubgraphAdapter<Module, Connection, ICircuitPin>(SubCircuitRenderer, transformAdapter); var circuitModuleEditAdapter = new D2dGraphNodeEditAdapter<Module, Connection, ICircuitPin>( SubCircuitRenderer, circuitAdapter, transformAdapter); circuitModuleEditAdapter.DraggingSubNodes = false; var circuitConnectionEditAdapter = new D2dGraphEdgeEditAdapter<Module, Connection, ICircuitPin>(SubCircuitRenderer, circuitAdapter, transformAdapter); circuitConnectionEditAdapter.EdgeRouteTraverser = CircuitUtil.EdgeRouteTraverser; var groupPinEditor = new GroupPinEditor(transformAdapter); groupPinEditor.GetPinOffset = SubCircuitRenderer.GetPinOffset; canvasAdapter.UpdateTranslateMinMax = groupPinEditor.UpdateTranslateMinMax; control.Adapt( // This end of the list is drawn first and receives mouse events last. hoverAdapter, scrollbarAdapter, autoTranslateAdapter, d2dRectangleDragSelector, transformAdapter, viewingAdapter, canvasAdapter, mouseTransformManipulator, mouseWheelManipulator, new KeyboardIOGraphNavigator<Module, Connection, ICircuitPin>(), gridAdapter, annotationAdaptor, circuitAdapter, circuitModuleEditAdapter, circuitConnectionEditAdapter, new LabelEditAdapter(), groupPinEditor, d2dRectangleDragRenderer, new SelectionAdapter(), new DragDropAdapter(m_statusService), new ContextMenuAdapter(m_commandService, m_contextMenuCommandProviders) // This end of the list is drawn last and receives mouse events first. ); } else throw new NotImplementedException( "graph node type is not supported!"); control.ResumeLayout(); control.DoubleClick += control_DoubleClick; control.MouseDown += control_MouseDown; return control; }
private D2dAdaptableControl CreateControl(bool createCircutGroup) { var d2dControl = new D2dAdaptableControl(); d2dControl.SuspendLayout(); var transformAdapter = new TransformAdapter(); transformAdapter.EnforceConstraints = false; //to allow the canvas to be panned to view negative coordinates transformAdapter.Scale = new PointF(1.25f, 1.25f); transformAdapter.UniformScale = true; transformAdapter.MinScale = new PointF(1.0f, 1.0f); transformAdapter.MaxScale = new PointF(5, 5); var annotationAdaptor = new D2dAnnotationAdapter(m_editor.Theme); // display annotations under diagram var gridAdapter = new D2dGridAdapter(); gridAdapter.Enabled = false; gridAdapter.Visible = true; D2dGraphAdapter<Module, Connection, ICircuitPin> graphAdapter; if (createCircutGroup) { var subG = new D2dSubgraphAdapter<Module, Connection, ICircuitPin>(m_editor.SubCircuitRenderer, transformAdapter); subG.SettingVisibleWorldBoundsDisabled = true; graphAdapter = subG; } else { graphAdapter = new D2dGraphAdapter<Module, Connection, ICircuitPin>(m_editor.CircuitRenderer, transformAdapter); } d2dControl.Adapt( transformAdapter, new MouseWheelManipulator(transformAdapter), gridAdapter, annotationAdaptor, //Needs to be before circuitAdapter so that comments appear under elements. graphAdapter); d2dControl.ResumeLayout(); d2dControl.Dock = DockStyle.Fill; transformAdapter.TransformChanged += (s, e) => UpdateControlName(((ITransformAdapter)s).Scale.X); return d2dControl; }
private D2dAdaptableControl CreateControl(bool createCircutGroup) { var d2dControl = new D2dAdaptableControl(); d2dControl.SuspendLayout(); d2dControl.Dock = DockStyle.Fill; var transformAdapter = new TransformAdapter(); transformAdapter.EnforceConstraints = false; //to allow the canvas to be panned to view negative coordinates transformAdapter.Scale = new PointF(1.25f, 1.25f); transformAdapter.UniformScale = true; transformAdapter.MinScale = new PointF(0.000001f, 0.000001f); transformAdapter.MaxScale = new PointF(5, 5); var annotationAdaptor = new D2dAnnotationAdapter(m_editor.Theme); // display annotations under diagram annotationAdaptor.PickingDisabled = true; var gridAdapter = new D2dGridAdapter(); gridAdapter.Enabled = false; gridAdapter.Visible = true; D2dGraphAdapter<Module, Connection, ICircuitPin> graphAdapter; if (createCircutGroup) { var subG = new D2dSubgraphAdapter<Module, Connection, ICircuitPin>(m_editor.SubCircuitRenderer, transformAdapter); graphAdapter = subG; } else { graphAdapter = new D2dGraphAdapter<Module, Connection, ICircuitPin>(m_editor.CircuitRenderer, transformAdapter); } d2dControl.Adapt( transformAdapter, gridAdapter, annotationAdaptor, graphAdapter, new DraggableRect(this)); d2dControl.ResumeLayout(); transformAdapter.TransformChanged += (s, e) => UpdateControlName(((ITransformAdapter)s).Scale.X); d2dControl.SizeChanged += d2dControl_SizeChanged; return d2dControl; }