public MapEditor(LocalSettings localSettings) throws HeadlessException {
    setTitle(TITLE);
    setSize(WIDTH, HEIGHT);

    this.localSettings = localSettings;

    mainpane = new JDesktopPane();
    mainpane.setSize(WIDTH, HEIGHT);
    mainpane.setBackground(Color.GRAY);
    setContentPane(mainpane);

    LwjglApplicationConfiguration configuration = new LwjglApplicationConfiguration();
    configuration.width = WIDTH;
    configuration.height = HEIGHT;

    levelHolder = new LevelHolder();
    final LwjglCanvas lwjglCanvas = new LwjglCanvas(levelHolder, configuration);
    canvas = lwjglCanvas;
    levelHolderFrame = new JInternalFrame("EnJine2D Map", false, false, false, true);
    levelHolderFrame.setSize(WIDTH, HEIGHT);
    levelHolderFrame.setVisible(true);

    palette = new Palette("Palette", true, false, true, true);
    palette.setVisible(true);
    palette.setLevelHolder(levelHolder);
    levelHolder.setPalette(palette);

    getContentPane().add(palette);
    getContentPane().add(levelHolderFrame);

    SwingUtilities.invokeLater(
        new Runnable() {
          @Override
          public void run() {
            levelHolderFrame.getContentPane().add(lwjglCanvas.getCanvas());
            setVisible(true);
          }
        });

    loadSettings();

    levelHolderFrame.addComponentListener(this);
    palette.addComponentListener(this);

    addWindowListener(this);
  }
  private void saveSettings() {
    if (localSettings != null) {
      localSettings.objectDirectory = levelHolder.getPalette().getDirectoryPath();

      localSettings.mainWidth = this.getWidth();
      localSettings.mainHeight = this.getHeight();

      localSettings.paletteX = palette.getX();
      localSettings.paletteY = palette.getY();
      localSettings.paletteWidth = palette.getWidth();
      localSettings.paletteHeight = palette.getHeight();

      localSettings.levelHolderX = levelHolderFrame.getX();
      localSettings.levelHolderY = levelHolderFrame.getY();
      localSettings.levelHolderWidth = levelHolderFrame.getWidth();
      localSettings.levelHolderHeight = levelHolderFrame.getHeight();

      localSettings.store();
    } else {
      localSettings = new LocalSettings();
    }
  }