All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.pepsoft.worldpainter.Palette Maven / Gradle / Ivy

There is a newer version: 2.23.2
Show newest version
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package org.pepsoft.worldpainter;

import com.jidesoft.docking.DockContext;
import com.jidesoft.docking.DockableFrame;
import com.jidesoft.swing.JideLabel;
import java.awt.Component;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JToggleButton;
import javax.swing.SwingConstants;
import org.pepsoft.worldpainter.layers.CustomLayer;
import org.pepsoft.worldpainter.layers.Layer;
import org.pepsoft.worldpainter.util.LayoutUtils;

/**
 *
 * @author SchmitzP
 */
public class Palette {
    Palette(String name, List buttonComponents) {
        super();
        this.name = name;
        panel = new JPanel();
        panel.setLayout(new GridBagLayout());

        GridBagConstraints constraints = new GridBagConstraints();
        constraints.insets = new Insets(1, 1, 1, 1);
        JideLabel label = new JideLabel("Show");
        label.setOrientation(SwingConstants.VERTICAL);
        label.setClockwise(false);
        label.setMinimumSize(label.getPreferredSize());
        constraints.anchor = GridBagConstraints.SOUTH;
        panel.add(label, constraints);
        label = new JideLabel("Solo");
        label.setOrientation(SwingConstants.VERTICAL);
        label.setClockwise(false);
        label.setMinimumSize(label.getPreferredSize());
        panel.add(label, constraints);
        constraints.gridwidth = GridBagConstraints.REMAINDER;
        constraints.weightx = 1.0;
        panel.add(new JLabel(), constraints);
        constraints.anchor = GridBagConstraints.FIRST_LINE_START;
        constraints.weightx = 0.0;
        LayoutUtils.addRowOfComponents(panel, constraints, buttonComponents);

        dockableFrame = new App.DockableFrameBuilder(panel, name, DockContext.DOCK_SIDE_WEST, 3).build();
        dockableFrame.setKey("customLayerPalette." + name);
    }

    String getName() {
        return name;
    }

    List getLayers() {
        return Collections.unmodifiableList(layers);
    }
    
    @SuppressWarnings("element-type-mismatch")
    boolean contains(Layer layer) {
        return layers.contains(layer);
    }
    
    void add(CustomLayer layer, List buttonComponents) {
        layers.add(layer);
        layerButtonComponents.put(layer, buttonComponents);
        GridBagConstraints constraints = new GridBagConstraints();
        constraints.gridwidth = GridBagConstraints.REMAINDER;
        constraints.anchor = GridBagConstraints.FIRST_LINE_START;
        constraints.weightx = 0.0;
        constraints.insets = new Insets(1, 1, 1, 1);
        LayoutUtils.insertRowOfComponents(panel, constraints, panel.getComponentCount() - 3, buttonComponents);
    }
    
    List remove(CustomLayer layer) {
        if (layerButtonComponents.containsKey(layer)) {
            layers.remove(layer);
            List buttonComponents = layerButtonComponents.remove(layer);
            buttonComponents.forEach(panel::remove);
            return buttonComponents;
        } else {
            return null;
        }
    }
    
    void activate(CustomLayer layer) {
        ((JToggleButton) layerButtonComponents.get(layer).get(2)).setSelected(true);
    }

    void deactivate(CustomLayer layer) {
        ((JToggleButton) layerButtonComponents.get(layer).get(2)).setSelected(false);
    }
    
    boolean isEmpty() {
        return layers.isEmpty();
    }
    
    DockableFrame getDockableFrame() {
        return dockableFrame;
    }
    
    private final String name;
    private final JPanel panel;
    private final List layers = new ArrayList<>();
    private final Map> layerButtonComponents = new HashMap<>();
    private final DockableFrame dockableFrame;
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy