Пример #1
0
        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;
        }
Пример #2
0
        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;
        }
Пример #3
0
        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;
        }