Пример #1
0
        private void ZoomView(PointF newScale, AdaptableControl adaptableControl)
        {
            Point clientPoint = adaptableControl.PointToClient(Cursor.Position);

            if (!adaptableControl.ClientRectangle.Contains(clientPoint))
            {
                clientPoint = new Point(adaptableControl.Width / 2, adaptableControl.Height / 2); // use control center
            }
            var   transformAdapter = adaptableControl.As <ITransformAdapter>();
            Point anchorPoint      = GdiUtil.InverseTransform(transformAdapter.Transform, clientPoint);

            PointF scale       = transformAdapter.ConstrainScale(newScale);
            var    translation = new PointF(
                (transformAdapter.Scale.X - scale.X) * anchorPoint.X + transformAdapter.Translation.X,
                (transformAdapter.Scale.Y - scale.Y) * anchorPoint.Y + transformAdapter.Translation.Y);

            transformAdapter.SetTransform(scale.X, scale.Y, translation.X, translation.Y);
        }
Пример #2
0
        private void control_DoubleClick(object sender, EventArgs e)
        {
            AdaptableControl d2dHoverControl = (AdaptableControl)sender;
            Point            clientPoint     = d2dHoverControl.PointToClient(Control.MousePosition);

            D2dGraphAdapter <Module, Connection, ICircuitPin> graphAdapter =
                d2dHoverControl.As <D2dGraphAdapter <Module, Connection, ICircuitPin> >();
            GraphHitRecord <Module, Connection, ICircuitPin> hitRecord = graphAdapter.Pick(clientPoint);
            Group subGraph          = null;
            var   subGraphReference = hitRecord.Node.As <GroupReference>();

            if (subGraphReference != null)
            {
                var templatingContext = m_contextRegistry.GetMostRecentContext <TemplatingContext>();
                if (templatingContext != null && templatingContext.IsExternalTemplate(subGraphReference.Template))
                {
                    return;                                 // templates should only be editable in the document that owns the template
                }
                DialogResult checkResult = DialogResult.No; //direct editing
                if (checkResult == DialogResult.No)
                {
                    subGraph = subGraphReference.Group.As <Group>();
                    var graphValidator = subGraphReference.DomNode.GetRoot().Cast <CircuitValidator>();
                    graphValidator.UpdateTemplateInfo(subGraph);
                }
            }
            else
            {
                subGraph = hitRecord.Node.As <Group>();
            }
            if (subGraph != null)
            {
                var viewingContext = subGraph.Cast <ViewingContext>();
                if (viewingContext.Control != null)
                {
                    // sub-graph is already open, just show control
                    m_controlHostService.Show(viewingContext.Control);
                }
                else
                {
                    // create new circuit editing control for sub-circuit
                    AdaptableControl subCircuitControl = CreateCircuitControl(subGraph.DomNode);
                    viewingContext.Control = subCircuitControl;

                    // use group’s hierarchy as control name
                    string name  = string.Empty;
                    bool   first = true;
                    foreach (var domNode in subGraph.DomNode.GetPath())
                    {
                        if (domNode.Is <Group>())
                        {
                            if (first)
                            {
                                name  = domNode.Cast <Group>().Name;
                                first = false;
                            }
                            else
                            {
                                name += "/" + domNode.Cast <Group>().Name;
                            }
                        }
                    }

                    string description = name;

                    var editingContext = subGraph.DomNode.Cast <CircuitEditingContext>();
                    editingContext.GetLocalBound       = GetLocalBound;
                    editingContext.GetWorldOffset      = GetWorldOffset;
                    editingContext.GetTitleHeight      = GetTitleHeight;
                    editingContext.GetLabelHeight      = GetLabelHeight;
                    editingContext.GetSubContentOffset = GetSubContentOffset;

                    subCircuitControl.Context   = editingContext;
                    editingContext.SchemaLoader = m_schemaLoader; // schema needed for cut and paste between applications

                    ControlInfo controlInfo = new ControlInfo(name, description, StandardControlGroup.Center);
                    //controlInfo.Docking = new ControlInfo.DockingInfo() // smart docking behavior
                    //{
                    //    GroupTag = subGraph.DomNode.Lineage.AsIEnumerable<Group>().Last(),// use the top-level parent group
                    //    Order = subGraph.Level
                    //};
                    m_circuitControlRegistry.RegisterControl(subGraph.DomNode, subCircuitControl, controlInfo, this);

                    var enumerableContext = subGraph.DomNode.Cast <CircuitEditingContext>().Cast <IEnumerableContext>();
                    var items             = (enumerableContext != null) ? enumerableContext.Items : null;
                    subCircuitControl.As <IViewingContext>().Frame(items);
                }
            }
        }
Пример #3
0
        private void ZoomView(PointF newScale, AdaptableControl adaptableControl)
        {
            Point clientPoint = adaptableControl.PointToClient(Cursor.Position);
            if (!adaptableControl.ClientRectangle.Contains(clientPoint))
                clientPoint = new Point(adaptableControl.Width/2, adaptableControl.Height/2); // use control center

            var transformAdapter = adaptableControl.As<ITransformAdapter>();
            Point anchorPoint = GdiUtil.InverseTransform(transformAdapter.Transform, clientPoint);

            PointF scale = transformAdapter.ConstrainScale(newScale);
            var translation = new PointF(
                (transformAdapter.Scale.X - scale.X) * anchorPoint.X + transformAdapter.Translation.X,
                (transformAdapter.Scale.Y - scale.Y) * anchorPoint.Y + transformAdapter.Translation.Y);

            transformAdapter.SetTransform(scale.X, scale.Y, translation.X, translation.Y);

        }