com.github.fauu.helix.editor.ui.Sidebar.java Source code

Java tutorial

Introduction

Here is the source code for com.github.fauu.helix.editor.ui.Sidebar.java

Source

/*
 * Copyright (C) 2014 Helix Engine Developers (http://github.com/fauu/HelixEngine)
 *
 * This software is licensed under the GNU General Public License
 * (version 3 or later). See the COPYING file in this distribution.
 *
 * You should have received a copy of the GNU Library General Public License
 * along with this software. If not, see <http://www.gnu.org/licenses/>.
 *
 * Authored by: Piotr Grabowski <fau999@gmail.com>
 */

package com.github.fauu.helix.editor.ui;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.g2d.TextureAtlas;
import com.github.fauu.helix.core.Direction;
import com.github.fauu.helix.core.Geometry;
import com.github.fauu.helix.core.MapRegion;
import com.github.fauu.helix.core.Tile;
import com.github.fauu.helix.editor.EditorFrame;
import com.github.fauu.helix.editor.model.*;
import net.miginfocom.swing.MigLayout;

import javax.swing.*;
import java.awt.*;

public class Sidebar extends JPanel {

    private EditorFrame editorFrame;

    private DefaultListModel geometryListModel;
    private DefaultListModel objectListModel;
    private DefaultListModel textureListModel;

    private EditorModePicker editorModePicker;

    private JPanel geometryPickerPanel;
    private GeometryPicker geometryPicker;
    private JPanel texturePickerPanel;
    private TexturePicker texturePicker;
    private JPanel objectPickerPanel;
    private ObjectPicker objectPicker;
    private JPanel facingPickerPanel;
    private FacingPicker facingPicker;
    private JPanel elevationPickerPanel;
    private ElevationPicker elevationPicker;

    public Sidebar(EditorFrame editorFrame) {
        this.editorFrame = editorFrame;

        setPreferredSize(new Dimension(150, 500));
        setLayout(new MigLayout("fillx, hidemode 3"));

        /* EditorMode Picker */
        final DefaultComboBoxModel editorModeListModel = new DefaultComboBoxModel();
        editorModeListModel.addElement(new EditorMode(EditorMode.Type.TILE_GENERAL, "Tile general"));
        editorModeListModel.addElement(new EditorMode(EditorMode.Type.TILE_TYPE, "Tile type"));
        editorModeListModel.addElement(new EditorMode(EditorMode.Type.OBJECT, "Object"));

        editorModePicker = new EditorModePicker(this, editorModeListModel);

        add(new JLabel("Mode:"), "wrap");
        add(editorModePicker, "growx, wrap, gapbottom 3");

        add(new JSeparator(), "growx, wrap");

        /* Geometry Picker */
        geometryListModel = new DefaultListModel();

        geometryPicker = new GeometryPicker(geometryListModel);

        final JScrollPane geometryPickerContainer = new JScrollPane(geometryPicker);

        geometryPickerPanel = new JPanel(new MigLayout("fillx, insets 0"));
        geometryPickerPanel.add(new JLabel("Geometry:"), "growx, wrap");
        geometryPickerPanel.add(geometryPickerContainer, "growx, wrap");

        add(geometryPickerPanel, "growx, wrap");

        /* Texture Picker */
        textureListModel = new DefaultListModel();

        texturePicker = new TexturePicker(textureListModel);

        final JScrollPane texturePickerContainer = new JScrollPane(texturePicker);

        texturePickerPanel = new JPanel(new MigLayout("fillx, insets 0"));
        texturePickerPanel.add(new JLabel("Texture:"), "growx, wrap");
        texturePickerPanel.add(texturePickerContainer, "growx, wrap");

        add(texturePickerPanel, "growx, wrap");

        /* Object Picker */
        objectListModel = new DefaultListModel();

        objectPicker = new ObjectPicker(objectListModel);

        final JScrollPane objectPickerContainer = new JScrollPane(objectPicker);

        objectPickerPanel = new JPanel(new MigLayout("fillx, insets 0"));
        objectPickerPanel.add(new JLabel("Object:"), "growx, wrap");
        objectPickerPanel.add(objectPickerContainer, "growx, wrap");

        add(objectPickerPanel, "growx, wrap");

        /* Facing Picker */
        final DefaultComboBoxModel facingModel = new DefaultComboBoxModel();
        facingModel.addElement(new FacingWrapper(Direction.NORTH, "North / Northwest"));
        facingModel.addElement(new FacingWrapper(Direction.SOUTH, "South / Southeast"));
        facingModel.addElement(new FacingWrapper(Direction.WEST, "West / Southwest"));
        facingModel.addElement(new FacingWrapper(Direction.EAST, "East / Northeast"));

        facingPicker = new FacingPicker(facingModel);

        facingPickerPanel = new JPanel(new MigLayout("fillx, insets 0"));
        facingPickerPanel.add(new JLabel("Facing:"), "growx, wrap");
        facingPickerPanel.add(facingPicker, "growx, wrap");

        add(facingPickerPanel, "growx, wrap");

        /* Elevation Picker */
        final SpinnerNumberModel elevationModel = new SpinnerNumberModel(0, -10, 10, 1);

        elevationPicker = new ElevationPicker(elevationModel);

        elevationPickerPanel = new JPanel(new MigLayout("fillx, insets 0"));
        elevationPickerPanel.add(new JLabel("Elevation: "), "growx, wrap");
        elevationPickerPanel.add(elevationPicker, "growx, wrap");

        add(elevationPickerPanel, "growx, wrap");
    }

    public void updateModel(MapRegion mapRegion) {
        setEditorMode(EditorMode.Type.TILE_GENERAL);

        for (Geometry geometry : mapRegion.getGeometrySet().getGeometries()) {
            geometryListModel.addElement(
                    new GeometryWrapper(geometry.getId(), geometry.getId() + ": " + geometry.getName()));
            geometryPicker.setSelectedIndex(0);
        }

        final FileHandle objectDirHandle = Gdx.files.internal("assets/objects/");
        int objectModelFileCount = 0;
        for (FileHandle entry : objectDirHandle.list()) {
            if (entry.extension().compareToIgnoreCase("g3db") == 0) {
                objectListModel.addElement(new ObjectWrapper(objectModelFileCount,
                        objectModelFileCount + ": " + entry.nameWithoutExtension(), entry.nameWithoutExtension()));

                objectModelFileCount += 1;
            }
        }

        for (TextureAtlas.AtlasRegion texture : mapRegion.getTextureAtlas().getRegions()) {
            textureListModel.addElement(new TextureWrapper(texture.index, texture.index + ": " + texture.name));
            texturePicker.setSelectedIndex(0);
        }
    }

    public void setEditorMode(EditorMode.Type type) {
        final Tile[] tiles = editorFrame.getMapRegion().getTiles();

        switch (type) {
        case TILE_GENERAL:
            geometryPickerPanel.setVisible(true);
            texturePickerPanel.setVisible(true);
            objectPickerPanel.setVisible(false);
            facingPickerPanel.setVisible(true);
            elevationPickerPanel.setVisible(true);

            for (Tile tile : tiles) {
                tile.setColor(new Color(1, 1, 1, 1));
            }
            break;
        case TILE_TYPE:
            geometryPickerPanel.setVisible(false);
            texturePickerPanel.setVisible(false);
            objectPickerPanel.setVisible(false);
            facingPickerPanel.setVisible(false);
            elevationPickerPanel.setVisible(false);

            final Color nonWalkableColor = new Color(1, 0, 0, 1);
            final Color walkableColor = new Color(0, 1, 0, 1);

            for (Tile tile : tiles) {
                switch (tile.getType()) {
                case DEFAULT_NONWALKABLE:
                    tile.setColor(nonWalkableColor);
                    break;
                case DEFAULT_WALKABLE:
                    tile.setColor(walkableColor);
                    break;
                }
            }
            break;
        case OBJECT:
            geometryPickerPanel.setVisible(false);
            texturePickerPanel.setVisible(false);
            objectPickerPanel.setVisible(true);
            facingPickerPanel.setVisible(true);
            elevationPickerPanel.setVisible(true);

            for (Tile tile : tiles) {
                tile.setColor(new Color(1, 1, 1, 1));
            }
            break;
        default:
        }

        editorFrame.getMapRegion().getMesh().update();
    }

    public EditorModePicker getEditorModePicker() {
        return editorModePicker;
    }

    public GeometryPicker getGeometryPicker() {
        return geometryPicker;
    }

    public TexturePicker getTexturePicker() {
        return texturePicker;
    }

    public ObjectPicker getObjectPicker() {
        return objectPicker;
    }

    public FacingPicker getFacingPicker() {
        return facingPicker;
    }

    public ElevationPicker getElevationPicker() {
        return elevationPicker;
    }

}