Exemplo n.º 1
0
  public LayersDialog(
      SceneTab sceneTab, EntityEngineConfiguration engineConfig, ModuleInjector sceneMC) {
    super(true);
    this.sceneTab = sceneTab;
    this.scene = sceneTab.getScene();
    sceneMC.injectModules(this);
    layerManipulatorManager = engineConfig.getManager(LayerManipulatorManager.class);

    setBackground(VisUI.getSkin().getDrawable("window-bg"));
    setTouchable(Touchable.enabled);

    VisImageButton layerAddButton = new VisImageButton(Icons.LAYER_ADD.drawable(), "Add new layer");
    layerUpButton = new VisImageButton(Icons.LAYER_UP.drawable(), "Move layer up");
    layerDownButton = new VisImageButton(Icons.LAYER_DOWN.drawable(), "Move layer down");
    layerSettingsButton = new VisImageButton(Icons.SETTINGS.drawable(), "Show layer settings");
    layerRemoveButton = new VisImageButton(Icons.LAYER_REMOVE.drawable(), "Delete layer");

    layerUpButton.setGenerateDisabledImage(true);
    layerDownButton.setGenerateDisabledImage(true);
    layerRemoveButton.setGenerateDisabledImage(true);

    layerAddButton.addListener(
        new VisChangeListener(
            (event, actor) ->
                DialogUtils.showInputDialog(
                    getStage(),
                    "New Layer",
                    "Name:",
                    true,
                    input -> scene.getLayerByName(input) == null,
                    (DefaultInputDialogListener)
                        input -> undoModule.execute(new LayerAddedAction(input)))));

    layerUpButton.addListener(
        new VisChangeListener((event, actor) -> undoModule.execute(new LayerMovedAction(true))));
    layerDownButton.addListener(
        new VisChangeListener((event, actor) -> undoModule.execute(new LayerMovedAction(false))));

    layerSettingsButton.addListener(
        new VisChangeListener(
            (event1, actor1) ->
                getStage().addActor(new LayerSettingsDialog(sceneMC, scene).fadeIn())));

    layerRemoveButton.addListener(
        new VisChangeListener(
            (event, actor) ->
                DialogUtils.showOptionDialog(
                    getStage(),
                    "Delete Layer",
                    "Are you sure you want to delete layer '" + scene.getActiveLayer().name + "'?",
                    OptionDialogType.YES_NO,
                    new OptionDialogAdapter() {
                      @Override
                      public void yes() {
                        UndoableActionGroup layerRemovedGroup =
                            new UndoableActionGroup("Delete Layer");
                        layerRemovedGroup.add(
                            new EntitiesRemovedAction(
                                sceneMC,
                                sceneTab.getEntityEngine(),
                                VisBagUtils.toSet(
                                    layerManipulatorManager.getEntitiesWithLayer(
                                        scene.getActiveLayerId()))));
                        layerRemovedGroup.add(new LayerRemovedAction(scene.getActiveLayer()));
                        layerRemovedGroup.finalizeGroup();

                        undoModule.execute(layerRemovedGroup);
                      }
                    })));

    layersTable = new VisTable();

    VisScrollPane layersScrollPane = new VisScrollPane(layersTable);
    layersScrollPane.setScrollingDisabled(true, false);
    layersScrollPane.setFadeScrollBars(false);

    top();
    left();
    defaults().left();
    defaults().padLeft(5).padRight(5);
    add(new VisLabel("Layers")).center().row();
    add(layersScrollPane).expandX().fillX().row();
    addSeparator();
    add(TableBuilder.build(
            layerAddButton, layerUpButton, layerDownButton, layerSettingsButton, layerRemoveButton))
        .padBottom(8);

    addListener(new EventStopper());

    rebuildLayersTable();

    sceneObservable =
        nid -> {
          if (nid == EditorScene.LAYER_ADDED
              || nid == EditorScene.LAYER_INSERTED
              || nid == EditorScene.LAYER_REMOVED
              || nid == EditorScene.LAYERS_SORTED
              || nid == EditorScene.ACTIVE_LAYER_CHANGED
              || nid == EditorScene.LAYER_DATA_CHANGED) {
            rebuildLayersTable();
            sceneTab.dirty();
          }
        };

    scene.addObservable(sceneObservable);
  }