Esempio n. 1
0
        private void OpenGLControl_OpenGLInitialized(object sender, OpenGLEventArgs args)
        {
            BABYLON.Effect.ShadersStore["legacydefaultVertexShader"] = Defaults.LegacyVertexShader;
            BABYLON.Effect.ShadersStore["legacydefaultPixelShader"]  = Defaults.LegacyPixelShader;
            //BABYLON.Effect.ShadersStore["legacydefaultVertexShader"] = Defaults.BasicVertexShader;
            //BABYLON.Effect.ShadersStore["legacydefaultPixelShader"] = Defaults.BasicPixelShader;

            BABYLON.Effect.ShadersStore["defaultVertexShader"] = Defaults.DefaultVertexShader;
            BABYLON.Effect.ShadersStore["defaultPixelShader"]  = Defaults.DefaultPixelShader;

            BABYLON.Effect.ShadersStore["shadowMapVertexShader"] = Defaults.ShadowMapVertexShader;
            BABYLON.Effect.ShadersStore["shadowMapPixelShader"]  = Defaults.ShadowMapPixelShader;

            BABYLON.Effect.ShadersStore["particlesVertexShader"] = Defaults.ParticlesVertexShader;
            BABYLON.Effect.ShadersStore["particlesPixelShader"]  = Defaults.ParticlesPixelShader;

            BABYLON.Effect.ShadersStore["lensFlareVertexShader"] = Defaults.LensFlareVertexShader;
            BABYLON.Effect.ShadersStore["lensFlarePixelShader"]  = Defaults.LensFlarePixelShader;

            BABYLON.Effect.ShadersStore["postprocessVertexShader"] = Defaults.PostProcessVertexShader;
            BABYLON.Effect.ShadersStore["passPixelShader"]         = Defaults.PassPixelShader;

            BABYLON.Effect.ShadersStore["blurPixelShader"] = Defaults.BlurPixelShader;

            this.canvas = new CanvasAdapter((int)this.Width, (int)this.Height, (int)this.MaxWidth, (int)this.MaxHeight, args.OpenGL);
            this.engine = new Engine(canvas, true);
            this.scene  = new BABYLON.Scene(this.engine);

            this.Scene20();
        }
Esempio n. 2
0
        public MainWindow()
        {
            InitializeComponent();
            // prompt user for name
            WelcomeWindow ww = new WelcomeWindow();

            if (ww.ShowDialog() == true)
            {
                lPlayerName.Content = ww.PlayerName;
            }
            else
            {
                this.Close();
            }
            // setup game field
            adapter = new CanvasAdapter(canvas);
            adapter.AddPlayer();
            //get highscore
            string name = HighScoreManager.ReadAttribute("name");
            float  time = float.Parse(HighScoreManager.ReadAttribute("time"));

            lHighscoreName.Content = name;
            lHighscoreTime.Content = time.ToString();
            // start timers
            gameTimer          = new DispatcherTimer();
            gameTimer.Tick    += GameTimer_Tick;
            gameTimer.Interval = new TimeSpan(0, 0, 0, 0, 2);
            gameTimer.Start();
            playedTimer          = new DispatcherTimer();
            playedTimer.Tick    += PlayedTimer_Tick;
            playedTimer.Interval = new TimeSpan(0, 0, 0, 0, 100);
            playedTimer.Start();
        }
Esempio n. 3
0
        public static void CreateUIViewTemplate()
        {
            GameObject uiRoot = GameObject.Find("ui_root");

            GameObject    uiViewTemplateGameObject    = new GameObject("template_view");
            RectTransform uiViewTemplateRectTransform = uiViewTemplateGameObject.AddComponent <RectTransform>();

            uiViewTemplateRectTransform.SetParent(uiRoot.transform, false);
            uiViewTemplateRectTransform.localScale    = Vector3.one;
            uiViewTemplateRectTransform.localPosition = Vector3.zero;
            uiViewTemplateRectTransform.localRotation = Quaternion.identity;

            BoxCollider boxCollider = uiViewTemplateGameObject.AddComponent <BoxCollider>();

            boxCollider.size = new Vector3(1136, 640, 1);

            Canvas canvas = uiViewTemplateGameObject.AddComponent <Canvas>();

            canvas.renderMode      = RenderMode.ScreenSpaceCamera;
            canvas.overrideSorting = true;

            uiViewTemplateGameObject.AddComponent <GraphicRaycaster>();

            CanvasScaler canvasScaler = uiViewTemplateGameObject.AddComponent <CanvasScaler>();

            canvasScaler.uiScaleMode         = CanvasScaler.ScaleMode.ScaleWithScreenSize;
            canvasScaler.referenceResolution = new Vector2(960, 640);

            CanvasAdapter canvasAdapter = uiViewTemplateGameObject.AddComponent <CanvasAdapter>();

            GameObject    bgCoreGameObject    = new GameObject("bg_core");
            RectTransform bgCoreRectTransform = bgCoreGameObject.AddComponent <RectTransform>();

            bgCoreRectTransform.SetParent(uiViewTemplateGameObject.transform, false);
            bgCoreRectTransform.localScale    = Vector3.one;
            bgCoreRectTransform.localPosition = Vector3.zero;
            bgCoreRectTransform.localRotation = Quaternion.identity;
            bgCoreRectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, 0);
            bgCoreRectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 640);
            bgCoreRectTransform.anchorMin = new Vector2(0, 0.5f);
            bgCoreRectTransform.anchorMax = new Vector2(1, 0.5f);

            GameObject    coreGameObject    = new GameObject("core");
            RectTransform coreRectTransform = coreGameObject.AddComponent <RectTransform>();

            coreRectTransform.SetParent(uiViewTemplateGameObject.transform, false);
            coreRectTransform.localScale    = Vector3.one;
            coreRectTransform.localPosition = Vector3.zero;
            coreRectTransform.localRotation = Quaternion.identity;
            coreRectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, 0);
            coreRectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 640);
            coreRectTransform.anchorMin = new Vector2(0, 0.5f);
            coreRectTransform.anchorMax = new Vector2(1, 0.5f);

            Common.Util.TransformUtil.SwitchLayer(uiViewTemplateRectTransform, (int)LayerType.UI);
        }
        internal override SymbolStyle buildSymbol <T1>(SymbolStyle.SymbolBuilder <T1> b, string src, Bitmap bitmap)
        {
            // we need to hash with the width/height included as the same symbol could be required
            // in a different size and must be cached with a size-specific hash
            string absoluteName = CanvasAdapter.getAbsoluteFile(mTheme.RelativePathPrefix, src).AbsolutePath;
            int    hash         = (new StringBuilder()).Append(absoluteName).Append(b.symbolWidth).Append(b.symbolHeight).Append(b.symbolPercent).ToString().GetHashCode();

            bitmapMap[hash] = bitmap;
            return(b.hash(hash).build());
        }
Esempio n. 5
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);
        }
Esempio n. 6
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.25f, 0.25f);
            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(m_theme); // display annotations under diagram

            if (circuitNode.Is <Circuit>())
            {
                var circuitAdapter           = new D2dGraphAdapter <Module, Connection, ICircuitPin>(m_circuitRenderer, transformAdapter);
                var circuitModuleEditAdapter = new D2dGraphNodeEditAdapter <Module, Connection, ICircuitPin>(
                    m_circuitRenderer, circuitAdapter, transformAdapter);
                circuitModuleEditAdapter.DraggingSubNodes = false;

                var circuitConnectionEditAdapter =
                    new D2dGraphEdgeEditAdapter <Module, Connection, ICircuitPin>(m_circuitRenderer, circuitAdapter, transformAdapter);
                circuitConnectionEditAdapter.EdgeRouteTraverser = CircuitUtil.EdgeRouteTraverser;

                control.Adapt(
                    hoverAdapter,
                    scrollbarAdapter,
                    autoTranslateAdapter,
                    new RectangleDragSelector(),
                    transformAdapter,
                    viewingAdapter,
                    canvasAdapter,
                    mouseTransformManipulator,
                    mouseWheelManipulator,
                    new KeyboardIOGraphNavigator <Module, Connection, ICircuitPin>(),
                    new D2dGridAdapter(),
                    annotationAdaptor,
                    circuitAdapter,
                    circuitModuleEditAdapter,
                    circuitConnectionEditAdapter,
                    new LabelEditAdapter(),
                    new SelectionAdapter(),
                    new DragDropAdapter(m_statusService),
                    new ContextMenuAdapter(m_commandService, m_contextMenuCommandProviders)
                    );
            }
            else if (circuitNode.Is <Group>())
            {
                var circuitAdapter = new D2dSubgraphAdapter <Module, Connection, ICircuitPin>(m_subGraphRenderer,
                                                                                              transformAdapter);
                var circuitModuleEditAdapter = new D2dGraphNodeEditAdapter <Module, Connection, ICircuitPin>(
                    m_subGraphRenderer, circuitAdapter, transformAdapter);
                circuitModuleEditAdapter.DraggingSubNodes = false;

                var circuitConnectionEditAdapter =
                    new D2dGraphEdgeEditAdapter <Module, Connection, ICircuitPin>(m_subGraphRenderer, circuitAdapter, transformAdapter);
                circuitConnectionEditAdapter.EdgeRouteTraverser = CircuitUtil.EdgeRouteTraverser;

                var groupPinEditor = new GroupPinEditor(transformAdapter);
                groupPinEditor.GetPinOffset = m_subGraphRenderer.GetPinOffset;

                canvasAdapter.UpdateTranslateMinMax = groupPinEditor.UpdateTranslateMinMax;

                control.Adapt(
                    hoverAdapter,
                    scrollbarAdapter,
                    autoTranslateAdapter,
                    new RectangleDragSelector(),
                    transformAdapter,
                    viewingAdapter,
                    canvasAdapter,
                    mouseTransformManipulator,
                    mouseWheelManipulator,
                    new KeyboardIOGraphNavigator <Module, Connection, ICircuitPin>(),
                    new D2dGridAdapter(),
                    annotationAdaptor,
                    circuitAdapter,
                    circuitModuleEditAdapter,
                    circuitConnectionEditAdapter,
                    new LabelEditAdapter(),
                    groupPinEditor,
                    new SelectionAdapter(),
                    new DragDropAdapter(m_statusService),
                    new ContextMenuAdapter(m_commandService, m_contextMenuCommandProviders)
                    );
            }
            else
            {
                throw new NotImplementedException(
                          "graph node type is not supported!");
            }

            control.ResumeLayout();

            control.DoubleClick += new EventHandler(control_DoubleClick);
            control.MouseDown   += new MouseEventHandler(control_MouseDown);
            return(control);
        }
Esempio n. 7
0
 void Awake()
 {
     instance = this;
 }
Esempio n. 8
0
 /// <summary>
 /// Custom update min/max translation of the transformAdapter associated with the canvas</summary>
 /// <param name="canvasAdapter">Canvas adapter</param>
 public void UpdateTranslateMinMax(CanvasAdapter canvasAdapter)
 {
     // do nothing( no need to limit translation range of the transformAdapter assoicated with  canvasAdapter)
 }
Esempio n. 9
0
        /// <summary>
        /// Opens or creates a document at the given URI.
        /// It creates a D2dAdaptableControl with control adapters for the document.
        /// It registers this control with the hosting service so that the control appears
        /// in the Windows docking framework.</summary>
        /// <param name="uri">Document URI</param>
        /// <returns>Document, or null if the document couldn't be opened or created</returns>
        public IDocument Open(Uri uri)
        {
            DomNode node     = null;
            string  filePath = uri.LocalPath;

            if (File.Exists(filePath))
            {
                // read existing document using standard XML reader
                using (FileStream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
                {
                    DomXmlReader reader = new DomXmlReader(m_schemaLoader);
                    node = reader.Read(stream, uri);
                }
            }
            else
            {
                // create new document by creating a Dom node of the root type defined by the schema
                node = new DomNode(Schema.statechartDocumentType.Type, Schema.statechartRootElement);
                // create an empty root prototype folder
                node.SetChild(
                    Schema.statechartDocumentType.prototypeFolderChild,
                    new DomNode(Schema.prototypeFolderType.Type));
            }

            Document statechartDocument = null;

            if (node != null)
            {
                // AdaptableControl was registered as an extension by the schema loader
                var control = new D2dAdaptableControl();
                control.SuspendLayout();

                control.BackColor = SystemColors.ControlLight;
                control.AllowDrop = true;

                var transformAdapter = new TransformAdapter();
                transformAdapter.UniformScale = true;
                transformAdapter.MinScale     = new PointF(0.25f, 0.25f);
                transformAdapter.MaxScale     = new PointF(4, 4);
                var viewingAdapter = new ViewingAdapter(transformAdapter);
                var canvasAdapter  = new CanvasAdapter(new Rectangle(0, 0, 1000, 1000));

                var autoTranslateAdapter      = new AutoTranslateAdapter(transformAdapter);
                var mouseTransformManipulator = new MouseTransformManipulator(transformAdapter);
                var mouseWheelManipulator     = new MouseWheelManipulator(transformAdapter);

                var gridAdapter = new D2dGridAdapter();
                gridAdapter.Enabled = false;
                gridAdapter.Visible = true;

                var scrollbarAdapter = new ScrollbarAdapter(transformAdapter, canvasAdapter);

                var hoverAdapter = new HoverAdapter();
                hoverAdapter.HoverStarted += control_HoverStarted;
                hoverAdapter.HoverStopped += control_HoverStopped;

                var annotationAdaptor =                      // display annotations under diagram
                                        new D2dAnnotationAdapter(m_diagramTheme);

                var statechartAdapter = new StatechartGraphAdapter(m_statechartRenderer, transformAdapter);

                var statechartStateEditAdapter =
                    new D2dGraphNodeEditAdapter <StateBase, Transition, BoundaryRoute>(m_statechartRenderer, statechartAdapter, transformAdapter);

                var statechartTransitionEditAdapter =
                    new D2dGraphEdgeEditAdapter <StateBase, Transition, BoundaryRoute>(m_statechartRenderer, statechartAdapter, transformAdapter);

                var mouseLayoutManipulator = new MouseLayoutManipulator(transformAdapter);

                control.Adapt(
                    hoverAdapter,
                    scrollbarAdapter,
                    autoTranslateAdapter,
                    new RectangleDragSelector(),
                    transformAdapter,
                    viewingAdapter,
                    canvasAdapter,
                    mouseTransformManipulator,
                    mouseWheelManipulator,
                    new KeyboardGraphNavigator <StateBase, Transition, BoundaryRoute>(),
                    gridAdapter,
                    annotationAdaptor,
                    statechartAdapter,
                    statechartStateEditAdapter,
                    statechartTransitionEditAdapter,
                    new SelectionAdapter(),
                    mouseLayoutManipulator,
                    new LabelEditAdapter(),
                    new DragDropAdapter(m_statusService),
                    new ContextMenuAdapter(m_commandService, m_contextMenuCommandProviders)
                    );

                control.ResumeLayout();

                // associate the control with the data; several of the adapters need the
                //  control for viewing, layout and calculating bounds.
                var viewingContext = node.Cast <ViewingContext>();
                viewingContext.Control = control;

                var boundsValidator = node.Cast <BoundsValidator>();
                boundsValidator.StatechartRenderer = m_statechartRenderer;

                statechartDocument = node.Cast <Document>();
                string fileName    = Path.GetFileName(filePath);
                var    controlInfo = new ControlInfo(fileName, filePath, StandardControlGroup.Center);

                //Set IsDocument to true to prevent exception in command service if two files with the
                //  same name, but in different directories, are opened.
                controlInfo.IsDocument = true;

                statechartDocument.ControlInfo = controlInfo;
                statechartDocument.Uri         = uri;

                // now that the data is complete, initialize the rest of the extensions to the Dom data;
                //  this is needed for adapters such as validators, which may not be referenced anywhere
                //  but still need to be instantiated.
                node.InitializeExtensions();

                // set control's context to main editing context
                var context = node.Cast <EditingContext>();
                control.Context = context;

                m_controlHostService.RegisterControl(control, controlInfo, this);
            }

            return(statechartDocument);
        }
Esempio n. 10
0
File: Editor.cs Progetto: zparr/ATF
        /// <summary>
        /// Opens or creates a document at the given URI. Create an AdaptableControl with control adapters for viewing state machine.
        /// Handles application data persistence.</summary>
        /// <param name="uri">Document URI</param>
        /// <returns>Document, or null if the document couldn't be opened or created</returns>
        public IDocument Open(Uri uri)
        {
            DomNode node     = null;
            string  filePath = uri.LocalPath;
            string  fileName = Path.GetFileName(filePath);

            if (File.Exists(filePath))
            {
                // read existing document using standard XML reader
                using (FileStream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
                {
                    DomXmlReader reader = new DomXmlReader(m_schemaLoader);
                    node = reader.Read(stream, uri);
                }
            }
            else
            {
                // create new document by creating a Dom node of the root type defined by the schema
                node = new DomNode(Schema.fsmType.Type, Schema.fsmRootElement);
                // create an empty root prototype folder
                node.SetChild(
                    Schema.fsmType.prototypeFolderChild,
                    new DomNode(Schema.prototypeFolderType.Type));
            }

            Document document = null;

            if (node != null)
            {
                // set up the AdaptableControl for editing FSMs
                var control = new D2dAdaptableControl();
                control.SuspendLayout();

                control.BackColor = SystemColors.ControlLight;
                control.AllowDrop = true;

                var transformAdapter = new TransformAdapter(); // required by several of the other adapters
                transformAdapter.UniformScale = true;
                transformAdapter.MinScale     = new PointF(0.25f, 0.25f);
                transformAdapter.MaxScale     = new PointF(4, 4);

                var viewingAdapter = new ViewingAdapter(transformAdapter); // implements IViewingContext for framing or ensuring that items are visible

                var canvasAdapter = new CanvasAdapter();                   // implements a bounded canvas to limit scrolling

                var autoTranslateAdapter =                                 // implements auto translate when the user drags out of control's client area
                                           new AutoTranslateAdapter(transformAdapter);
                var mouseTransformManipulator =                            // implements mouse drag translate and scale
                                                new MouseTransformManipulator(transformAdapter);
                var mouseWheelManipulator =                                // implements mouse wheel scale
                                            new MouseWheelManipulator(transformAdapter);
                var scrollbarAdapter =                                     // adds scroll bars to control, driven by canvas and transform
                                       new ScrollbarAdapter(transformAdapter, canvasAdapter);

                var hoverAdapter = new HoverAdapter(); // add hover events over pickable items
                hoverAdapter.HoverStarted += control_HoverStarted;
                hoverAdapter.HoverStopped += control_HoverStopped;

                var annotationAdaptor = new D2dAnnotationAdapter(m_theme); // display annotations under diagram

                var fsmAdapter =                                           // adapt control to allow binding to graph data
                                 new D2dGraphAdapter <State, Transition, NumberedRoute>(m_fsmRenderer, transformAdapter);

                var fsmStateEditAdapter = // adapt control to allow state editing
                                          new D2dGraphNodeEditAdapter <State, Transition, NumberedRoute>(m_fsmRenderer, fsmAdapter, transformAdapter);

                var fsmTransitionEditAdapter = // adapt control to allow transition
                                               new D2dGraphEdgeEditAdapter <State, Transition, NumberedRoute>(m_fsmRenderer, fsmAdapter, transformAdapter);

                var mouseLayoutManipulator = new MouseLayoutManipulator(transformAdapter);

                // apply adapters to control; ordering is from back to front, that is, the first adapter
                //  will be conceptually underneath all the others. Mouse and keyboard events are fed to
                //  the adapters in the reverse order, so it all makes sense to the user.
                control.Adapt(
                    hoverAdapter,
                    scrollbarAdapter,
                    autoTranslateAdapter,
                    new RectangleDragSelector(),
                    transformAdapter,
                    viewingAdapter,
                    canvasAdapter,
                    mouseTransformManipulator,
                    mouseWheelManipulator,
                    new KeyboardGraphNavigator <State, Transition, NumberedRoute>(),
                    //new GridAdapter(),
                    annotationAdaptor,
                    fsmAdapter,
                    fsmStateEditAdapter,
                    fsmTransitionEditAdapter,
                    new LabelEditAdapter(),
                    new SelectionAdapter(),
                    mouseLayoutManipulator,
                    new DragDropAdapter(m_statusService),
                    new ContextMenuAdapter(m_commandService, m_contextMenuCommandProviders)
                    );

                control.ResumeLayout();

                // associate the control with the viewing context; other adapters use this
                //  adapter for viewing, layout and calculating bounds.
                ViewingContext viewingContext = node.Cast <ViewingContext>();
                viewingContext.Control = control;

                // set document URI
                document = node.As <Document>();
                ControlInfo controlInfo = new ControlInfo(fileName, filePath, StandardControlGroup.Center);

                //Set IsDocument to true to prevent exception in command service if two files with the
                //  same name, but in different directories, are opened.
                controlInfo.IsDocument = true;

                document.ControlInfo = controlInfo;
                document.Uri         = uri;

                // now that the data is complete, initialize the rest of the extensions to the Dom data;
                //  this is needed for adapters such as validators, which may not be referenced anywhere
                //  but still need to be initialized.
                node.InitializeExtensions();

                // set control's context to main editing context
                EditingContext editingContext = node.Cast <EditingContext>();
                control.Context = editingContext;

                // show the FSM control
                m_controlHostService.RegisterControl(control, controlInfo, this);
            }

            return(document);
        }
Esempio n. 11
0
 /// <summary>
 /// Custom update min/max translation of the transformAdapter associated with the canvas</summary>
 /// <param name="canvasAdapter">Canvas adapter</param>
 public void UpdateTranslateMinMax(CanvasAdapter canvasAdapter)
 {
     // do nothing( no need to limit translation range of the transformAdapter assoicated with  canvasAdapter)
 }