// Path: editor/src/com/github/fauu/helix/editor/HelixEditor.java
// public class HelixEditor extends Game {
// 
//   private static HelixEditor instance;
// 
//   private EventBus uiEventBus;
// 
//   private EventBus worldEventBus;
// 
//   private UI ui;
// 
//   private TilePassageAreaListState tilePassageAreaListState;
// 
//   private TilePassageTargetPositionFieldState
//           tilePassageTargetPositionFieldState;
// 
//   private TilePermissionListState tilePermissionListState;
// 
//   private ToolbarState toolbarState;
// 
//   private Overworld overworld;
// 
//   private TagManager tagManager;
// 
//   private AreaManager areaManager;
// 
//   @Override
//   public void create() {
//     instance = this;
//     
//     uiEventBus = new EventBus();
//     worldEventBus = new EventBus();
// 
//     overworld = new Overworld();
//     setScreen(overworld);
// 
//     tagManager = overworld.getWorld().getManager(TagManager.class);
//     areaManager = overworld.getWorld().getManager(AreaManager.class);
// 
//     tilePassageTargetPositionFieldState
//         = new TilePassageTargetPositionFieldState();
// 
//     tilePermissionListState = new TilePermissionListState();
//     tilePermissionListState.initialize(TilePermission.LEVEL0);
// 
//     toolbarState = new ToolbarState();
//     toolbarState.initialize(ToolType.TILE_PERMISSIONS);
// 
//     ui = new UI();
// 
//     tilePassageAreaListState = new TilePassageAreaListState();
//     Array<String> areaNames = areaManager.getAllNames();
//     tilePassageAreaListState.initialize(areaNames, areaNames.first());
// 
//     Gdx.input.setInputProcessor(
//         new InputMultiplexer(ui.getStage(), new EditorInputEventProcessor()));
// 
//     loadAreaAction("area1");
//   }
// 
//   public static HelixEditor getInstance() {
//     return instance;
//   }
//   
//   @Override
//   public void render() {
//     super.render();
//     ui.render(Gdx.graphics.getDeltaTime());
//   }
//   
//   @Override
//   public void dispose() {
//     super.dispose();
//     ui.dispose();
//   }
// 
//   public void newAreaAction() {
//     ui.showNewAreaDialog();
//   }
// 
//   public void createAreaAction(String name, int width, int length) {
//     areaManager.create(name, width, length);
//   }
// 
//   public void openAreaAction() {
//     ui.showOpenAreaFileChooser();
//   }
// 
//   public void loadAreaAction(String name) {
//     if (areaManager.isAreaLoaded()) {
//       closeCurrentAreaAction();
//     }
// 
//     areaManager.load(name);
// 
//     worldEventBus.post(new AreaLoadedEvent());
// 
//     ui.setSidebarVisibility(true);
// 
//     if (toolbarState.getActiveTool() == ToolType.TILE_PERMISSIONS) {
//       fadeAreaModelAction(true);
//     }
//   }
// 
//   public void saveAreaAction() {
//     areaManager.save();
//   }
// 
//   public void closeCurrentAreaAction() {
//     areaManager.unloadCurrent();
// 
//     worldEventBus.post(new AreaUnloadedEvent());
// 
//     ui.setSidebarVisibility(false);
//   }
// 
// 
//   public void exitAction() {
//     Gdx.app.exit();
//   }
// 
//   public void fadeAreaModelAction(boolean on) {
//     overworld.getDisplayableIntermediary().setAreaDisplayableOpacity(on ? 0.6f : 1);
//   }
// 
//   public void centerCameraOnAreaAction() {
//     overworld.getCameraIntermediary().centerCameraOnArea();
//   }
// 
//   public void toolSelected(ToolType type) {
//     if (type == ToolType.TILE_PERMISSIONS &&
//         areaManager != null &&
//         areaManager.isAreaLoaded()) {
//       fadeAreaModelAction(true);
//     }
//   }
// 
//   public EventBus getUIEventBus() {
//     return uiEventBus;
//   }
// 
//   public EventBus getWorldEventBus() {
//     return worldEventBus;
//   }
// 
//   public TilePassageAreaListState getTilePassageAreaListState() {
//     return tilePassageAreaListState;
//   }
// 
//   public TilePassageTargetPositionFieldState
//          getTilePassageTargetPositionFieldState() {
//     return tilePassageTargetPositionFieldState;
//   }
// 
//   public TilePermissionListState getTilePermissionListState() {
//     return tilePermissionListState;
//   }
// 
//   public ToolbarState getToolbarState() {
//     return toolbarState;
//   }
// 
// }


import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener;
import com.github.fauu.helix.editor.HelixEditor;
import com.kotcrab.vis.ui.widget.VisTable;
import com.kotcrab.vis.ui.widget.VisLabel;
import com.kotcrab.vis.ui.widget.VisTextButton;
import com.kotcrab.vis.ui.widget.VisTextField;
import com.kotcrab.vis.ui.widget.VisWindow;

    fieldsetContainer.row();

    // TODO: Get rid of magic numbers. Here, there and everywhere.
    add(fieldsetContainer).padTop(3).spaceBottom(8);

    row();

    VisTable actionButtonsContainer = new VisTable(true);

    VisTextButton cancelButton = new VisTextButton("Cancel");
    cancelButton.addListener(new ChangeListener() {
          @Override
          public void changed(ChangeEvent event, Actor actor) {
            fadeOut();
          }
        });
    actionButtonsContainer.add(cancelButton);

    VisTextButton createButton = new VisTextButton("Create");
    createButton.addListener(new ChangeListener() {
           @Override
           public void changed(ChangeEvent event, Actor actor) {
             HelixEditor.getInstance().closeCurrentAreaAction();

             HelixEditor.getInstance().createAreaAction(
                 nameField.getText(),
                 Integer.parseInt(widthField.getText()),
                 Integer.parseInt(lengthField.getText()));

// Path: editor/src/com/github/fauu/helix/editor/HelixEditor.java
// public class HelixEditor extends Game {
// 
//   private static HelixEditor instance;
// 
//   private EventBus uiEventBus;
// 
//   private EventBus worldEventBus;
// 
//   private UI ui;
// 
//   private TilePassageAreaListState tilePassageAreaListState;
// 
//   private TilePassageTargetPositionFieldState
//           tilePassageTargetPositionFieldState;
// 
//   private TilePermissionListState tilePermissionListState;
// 
//   private ToolbarState toolbarState;
// 
//   private Overworld overworld;
// 
//   private TagManager tagManager;
// 
//   private AreaManager areaManager;
// 
//   @Override
//   public void create() {
//     instance = this;
//     
//     uiEventBus = new EventBus();
//     worldEventBus = new EventBus();
// 
//     overworld = new Overworld();
//     setScreen(overworld);
// 
//     tagManager = overworld.getWorld().getManager(TagManager.class);
//     areaManager = overworld.getWorld().getManager(AreaManager.class);
// 
//     tilePassageTargetPositionFieldState
//         = new TilePassageTargetPositionFieldState();
// 
//     tilePermissionListState = new TilePermissionListState();
//     tilePermissionListState.initialize(TilePermission.LEVEL0);
// 
//     toolbarState = new ToolbarState();
//     toolbarState.initialize(ToolType.TILE_PERMISSIONS);
// 
//     ui = new UI();
// 
//     tilePassageAreaListState = new TilePassageAreaListState();
//     Array<String> areaNames = areaManager.getAllNames();
//     tilePassageAreaListState.initialize(areaNames, areaNames.first());
// 
//     Gdx.input.setInputProcessor(
//         new InputMultiplexer(ui.getStage(), new EditorInputEventProcessor()));
// 
//     loadAreaAction("area1");
//   }
// 
//   public static HelixEditor getInstance() {
//     return instance;
//   }
//   
//   @Override
//   public void render() {
//     super.render();
//     ui.render(Gdx.graphics.getDeltaTime());
//   }
//   
//   @Override
//   public void dispose() {
//     super.dispose();
//     ui.dispose();
//   }
// 
//   public void newAreaAction() {
//     ui.showNewAreaDialog();
//   }
// 
//   public void createAreaAction(String name, int width, int length) {
//     areaManager.create(name, width, length);
//   }
// 
//   public void openAreaAction() {
//     ui.showOpenAreaFileChooser();
//   }
// 
//   public void loadAreaAction(String name) {
//     if (areaManager.isAreaLoaded()) {
//       closeCurrentAreaAction();
//     }
// 
//     areaManager.load(name);
// 
//     worldEventBus.post(new AreaLoadedEvent());
// 
//     ui.setSidebarVisibility(true);
// 
//     if (toolbarState.getActiveTool() == ToolType.TILE_PERMISSIONS) {
//       fadeAreaModelAction(true);
//     }
//   }
// 
//   public void saveAreaAction() {
//     areaManager.save();
//   }
// 
//   public void closeCurrentAreaAction() {
//     areaManager.unloadCurrent();
// 
//     worldEventBus.post(new AreaUnloadedEvent());
// 
//     ui.setSidebarVisibility(false);
//   }
// 
// 
//   public void exitAction() {
//     Gdx.app.exit();
//   }
// 
//   public void fadeAreaModelAction(boolean on) {
//     overworld.getDisplayableIntermediary().setAreaDisplayableOpacity(on ? 0.6f : 1);
//   }
// 
//   public void centerCameraOnAreaAction() {
//     overworld.getCameraIntermediary().centerCameraOnArea();
//   }
// 
//   public void toolSelected(ToolType type) {
//     if (type == ToolType.TILE_PERMISSIONS &&
//         areaManager != null &&
//         areaManager.isAreaLoaded()) {
//       fadeAreaModelAction(true);
//     }
//   }
// 
//   public EventBus getUIEventBus() {
//     return uiEventBus;
//   }
// 
//   public EventBus getWorldEventBus() {
//     return worldEventBus;
//   }
// 
//   public TilePassageAreaListState getTilePassageAreaListState() {
//     return tilePassageAreaListState;
//   }
// 
//   public TilePassageTargetPositionFieldState
//          getTilePassageTargetPositionFieldState() {
//     return tilePassageTargetPositionFieldState;
//   }
// 
//   public TilePermissionListState getTilePermissionListState() {
//     return tilePermissionListState;
//   }
// 
//   public ToolbarState getToolbarState() {
//     return toolbarState;
//   }
// 
// }


// Path: editor/src/com/github/fauu/helix/editor/ui/dialog/NewAreaDialog.java
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener;
import com.github.fauu.helix.editor.HelixEditor;
import com.kotcrab.vis.ui.widget.VisTable;
import com.kotcrab.vis.ui.widget.VisLabel;
import com.kotcrab.vis.ui.widget.VisTextButton;
import com.kotcrab.vis.ui.widget.VisTextField;
import com.kotcrab.vis.ui.widget.VisWindow;


    fieldsetContainer.row();

    // TODO: Get rid of magic numbers. Here, there and everywhere.
    add(fieldsetContainer).padTop(3).spaceBottom(8);

    row();

    VisTable actionButtonsContainer = new VisTable(true);

    VisTextButton cancelButton = new VisTextButton("Cancel");
    cancelButton.addListener(new ChangeListener() {
          @Override
          public void changed(ChangeEvent event, Actor actor) {
            fadeOut();
          }
        });
    actionButtonsContainer.add(cancelButton);

    VisTextButton createButton = new VisTextButton("Create");
    createButton.addListener(new ChangeListener() {
           @Override
           public void changed(ChangeEvent event, Actor actor) {
             HelixEditor.getInstance().closeCurrentAreaAction();

             HelixEditor.getInstance().createAreaAction(
                 nameField.getText(),
                 Integer.parseInt(widthField.getText()),
                 Integer.parseInt(lengthField.getText()));

             HelixEditor.getInstance().loadAreaAction(nameField.getText());