private void CreateUIComponents()
        {
            SpriteBatch sb = batchService.GetSpriteBatch(DebuggingOutputComponent.SpriteBatchName);

            // Where all the magic happens:
            tileSelector = new TileSelector(this, sb,
                                               new RectangleF(40, 0, 600, 480),
                                               world.interactiveLayers.Values.First<TileMapLayer>(),
                                               inputMonitor);
            tileSelector.DrawOrder = 0;
            this.Components.Add(tileSelector);

            this.subTextureSelectors = new List<SubTextureSelector>();

            for (int i = 0; i < world.Map.LayerCount; ++i)
            {
                for (int j = 0; j < world.Map.SubLayerCount; ++j)
                {
                    int index = i * world.Map.SubLayerCount + j;

                    SubTextureSelector subTexSel = new SubTextureSelector(this, sb, TileSelector, i, j);
                    tileSelector.TilePropertyComponents.Add(subTexSel);
                    subTexSel.DrawOrder = 25;
                    this.Components.Add(subTexSel);
                    SubTextureSelectors.Add(subTexSel);
                }
            }

            this.worldObjectMovers = new List<WorldObjectMover>();
            foreach (WorldObject wo in World.WorldObjects)
            {
                WorldObjectMover wom = new WorldObjectMover(this, sb, wo);
                WorldObjectMovers.Add(wom);
                this.Components.Add(wom);
            }

            RectangleF tmp = ((SubTextureSelector)tileSelector.TilePropertyComponents.Last<ITilePropertyComponent>()).Bounds;
            tmp.Y += 20 + world.Map.TileHeight;
            this.edgeToggler = new EdgeToggler(this, sb, tmp, TileSelector);
            EdgeToggler.DrawOrder = 25;
            TileSelector.TilePropertyComponents.Add(EdgeToggler);
            this.Components.Add(EdgeToggler);

            tmp.Y += 20 + world.Map.TileHeight;
            this.destructableToggler = new DestructableToggler(this, sb, tmp, TileSelector);
            DestructableToggler.DrawOrder = 25;
            TileSelector.TilePropertyComponents.Add(DestructableToggler);
            this.Components.Add(DestructableToggler);

            SaveButton saveButton = new SaveButton(this, sb, new RectangleF(5, 400, 30, 15), World);
            saveButton.DrawOrder = 20;
            this.Components.Add(saveButton);

            worldObjectPlacer = new WorldObjectPlacer(this, sb, new RectangleF(40, 0, 600, 480), World);
            worldObjectPlacer.DrawOrder = 25;
            this.Components.Add(worldObjectPlacer);

            playerMover = new WorldObjectMover(this, sb, World.Player);
            this.Components.Add(playerMover);
        }
        protected override void OnMouseClick(int button)
        {
            switch (button)
            {
                case 0: // Left click, place a new WorldObject.
                    object[] woParams = new object[]{World, World.SpriteBatch, Mouse.WorldPosition};
                    WorldObject wo =
                            (WorldObject)World.WorldObjectCtorInfos[index].Invoke(woParams);
                    //wo.Initialize();
                    world.AddWorldObject(wo);

                    WorldObjectMover wom = new WorldObjectMover(EditorScreen, SpriteBatch, wo);
                    EditorScreen.WorldObjectMovers.Add(wom);
                    ParentScreen.Components.Add(wom);
                    break;
            }
            base.OnMouseClick(button);
        }