use of org.pepsoft.worldpainter.layers.groundcover.GroundCoverLayer in project WorldPainter by Captain-Chaos.
the class App method createCustomLayerMenu.
private JPopupMenu createCustomLayerMenu(final String paletteName) {
JPopupMenu customLayerMenu = new JPopupMenu();
JMenuItem menuItem = new JMenuItem(strings.getString("add.a.custom.object.layer") + "...");
menuItem.addActionListener(e -> {
EditLayerDialog<Bo2Layer> dialog = new EditLayerDialog<>(App.this, Bo2Layer.class);
dialog.setVisible(true);
if (!dialog.isCancelled()) {
Bo2Layer layer = dialog.getLayer();
if (paletteName != null) {
layer.setPalette(paletteName);
}
registerCustomLayer(layer, true);
}
});
customLayerMenu.add(menuItem);
menuItem = new JMenuItem(strings.getString("add.a.custom.ground.cover.layer") + "...");
menuItem.addActionListener(e -> {
EditLayerDialog<GroundCoverLayer> dialog = new EditLayerDialog<>(App.this, GroundCoverLayer.class);
dialog.setVisible(true);
if (!dialog.isCancelled()) {
GroundCoverLayer layer = dialog.getLayer();
if (paletteName != null) {
layer.setPalette(paletteName);
}
registerCustomLayer(layer, true);
}
});
customLayerMenu.add(menuItem);
menuItem = new JMenuItem(strings.getString("add.a.custom.underground.pockets.layer") + "...");
menuItem.addActionListener(e -> {
UndergroundPocketsDialog dialog = new UndergroundPocketsDialog(App.this, MixedMaterial.create(Material.IRON_BLOCK), selectedColourScheme, world.getMaxHeight(), world.isExtendedBlockIds());
dialog.setVisible(true);
if (!dialog.isCancelled()) {
UndergroundPocketsLayer layer = dialog.getSelectedLayer();
if (paletteName != null) {
layer.setPalette(paletteName);
}
registerCustomLayer(layer, true);
}
});
customLayerMenu.add(menuItem);
menuItem = new JMenuItem("Add a custom cave/tunnel layer...");
menuItem.addActionListener(e -> {
final TunnelLayer layer = new TunnelLayer("Tunnels", 0x000000);
final int baseHeight, waterLevel;
final TileFactory tileFactory = dimension.getTileFactory();
if (tileFactory instanceof HeightMapTileFactory) {
baseHeight = (int) ((HeightMapTileFactory) tileFactory).getBaseHeight();
waterLevel = ((HeightMapTileFactory) tileFactory).getWaterHeight();
layer.setFloodWithLava(((HeightMapTileFactory) tileFactory).isFloodWithLava());
} else {
baseHeight = 58;
waterLevel = 62;
}
TunnelLayerDialog dialog = new TunnelLayerDialog(App.this, layer, world.isExtendedBlockIds(), selectedColourScheme, dimension.getMaxHeight(), baseHeight, waterLevel);
dialog.setVisible(true);
if (!dialog.isCancelled()) {
if (paletteName != null) {
layer.setPalette(paletteName);
}
registerCustomLayer(layer, true);
}
});
customLayerMenu.add(menuItem);
menuItem = new JMenuItem("Add a custom plants layer...");
menuItem.addActionListener(e -> {
EditLayerDialog<PlantLayer> dialog = new EditLayerDialog<>(App.this, PlantLayer.class);
dialog.setVisible(true);
if (!dialog.isCancelled()) {
PlantLayer layer = dialog.getLayer();
if (paletteName != null) {
layer.setPalette(paletteName);
}
registerCustomLayer(layer, true);
}
});
customLayerMenu.add(menuItem);
menuItem = new JMenuItem("Add a combined layer...");
menuItem.addActionListener(e -> {
EditLayerDialog<CombinedLayer> dialog = new EditLayerDialog<>(App.this, CombinedLayer.class);
dialog.setVisible(true);
if (!dialog.isCancelled()) {
// TODO: get saved layer
CombinedLayer layer = dialog.getLayer();
if (paletteName != null) {
layer.setPalette(paletteName);
}
registerCustomLayer(layer, true);
}
});
customLayerMenu.add(menuItem);
List<Class<? extends CustomLayer>> allPluginLayers = new ArrayList<>();
for (CustomLayerProvider layerProvider : WPPluginManager.getInstance().getPlugins(CustomLayerProvider.class)) {
allPluginLayers.addAll(layerProvider.getCustomLayers());
}
if (!allPluginLayers.isEmpty()) {
customLayerMenu.addSeparator();
for (Class<? extends CustomLayer> customLayerClass : allPluginLayers) {
menuItem = new JMenuItem("Add a " + customLayerClass.getSimpleName() + " layer...");
menuItem.addActionListener(e -> {
EditLayerDialog<CustomLayer> dialog = new EditLayerDialog<>(App.this, (Class<CustomLayer>) customLayerClass);
dialog.setVisible(true);
if (!dialog.isCancelled()) {
// TODO: get saved layer
CustomLayer layer = dialog.getLayer();
if (paletteName != null) {
layer.setPalette(paletteName);
}
registerCustomLayer(layer, true);
}
});
customLayerMenu.add(menuItem);
}
customLayerMenu.addSeparator();
}
menuItem = new JMenuItem("Import custom layer(s) from file...");
menuItem.addActionListener(e -> importLayers(paletteName));
customLayerMenu.add(menuItem);
menuItem = new JMenuItem("Import custom layer(s) from another world...");
menuItem.addActionListener(e -> importCustomItemsFromWorld(CustomItemsTreeModel.ItemType.LAYER));
customLayerMenu.add(menuItem);
return customLayerMenu;
}
use of org.pepsoft.worldpainter.layers.groundcover.GroundCoverLayer in project WorldPainter by Captain-Chaos.
the class TunnelLayerDialog method newFloorLayer.
private void newFloorLayer() {
JPopupMenu popupMenu = new JPopupMenu();
JMenuItem item = new JMenuItem("Custom Objects Layer");
item.addActionListener(e -> {
EditLayerDialog<Bo2Layer> dialog = new EditLayerDialog(TunnelLayerDialog.this, Bo2Layer.class);
dialog.setVisible(true);
if (!dialog.isCancelled()) {
Bo2Layer newLayer = dialog.getLayer();
newLayer.setHide(true);
floorLayersTableModel.addLayer(newLayer);
}
});
popupMenu.add(item);
item = new JMenuItem("Custom Ground Cover Layer");
item.addActionListener(e -> {
EditLayerDialog<GroundCoverLayer> dialog = new EditLayerDialog(TunnelLayerDialog.this, GroundCoverLayer.class);
dialog.setVisible(true);
if (!dialog.isCancelled()) {
GroundCoverLayer newLayer = dialog.getLayer();
newLayer.setHide(true);
floorLayersTableModel.addLayer(newLayer);
}
});
popupMenu.add(item);
item = new JMenuItem("Custom Plants Layer");
item.addActionListener(e -> {
EditLayerDialog<PlantLayer> dialog = new EditLayerDialog(TunnelLayerDialog.this, PlantLayer.class);
dialog.setVisible(true);
if (!dialog.isCancelled()) {
PlantLayer newLayer = dialog.getLayer();
newLayer.setHide(true);
floorLayersTableModel.addLayer(newLayer);
}
});
popupMenu.add(item);
popupMenu.show(buttonNewFloorLayer, buttonNewFloorLayer.getWidth(), 0);
}
use of org.pepsoft.worldpainter.layers.groundcover.GroundCoverLayer in project WorldPainter by Captain-Chaos.
the class App method createCustomLayerButton.
// PaletteManager.ButtonProvider
@Override
public List<Component> createCustomLayerButton(final CustomLayer layer) {
final List<Component> buttonComponents = createLayerButton(layer, '\0');
final JToggleButton button = (JToggleButton) buttonComponents.get(2);
button.setToolTipText(button.getToolTipText() + "; right-click for options");
button.addMouseListener(new java.awt.event.MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
if (e.isPopupTrigger()) {
showPopup(e);
}
}
@Override
public void mouseClicked(MouseEvent e) {
if (e.isPopupTrigger()) {
showPopup(e);
}
}
@Override
public void mouseReleased(MouseEvent e) {
if (e.isPopupTrigger()) {
showPopup(e);
}
}
private void showPopup(MouseEvent e) {
JPopupMenu popup = new JPopupMenu();
JMenuItem menuItem = new JMenuItem(strings.getString("edit") + "...");
menuItem.addActionListener(e1 -> edit());
popup.add(menuItem);
menuItem = new JMenuItem(strings.getString("remove") + "...");
menuItem.addActionListener(e1 -> remove());
popup.add(menuItem);
menuItem = new JMenuItem("Export to file...");
menuItem.addActionListener(e1 -> exportLayer(layer));
popup.add(menuItem);
JMenu paletteMenu = new JMenu("Move to palette");
for (final Palette palette : paletteManager.getPalettes()) {
menuItem = new JMenuItem(palette.getName());
menuItem.addActionListener(e1 -> moveLayerToPalette(layer, palette));
if (palette.contains(layer)) {
menuItem.setEnabled(false);
}
paletteMenu.add(menuItem);
}
menuItem = new JMenuItem("New palette...");
menuItem.addActionListener(e1 -> createNewLayerPalette(layer));
paletteMenu.add(menuItem);
popup.add(paletteMenu);
List<Action> actions = layer.getActions();
if (actions != null) {
for (Action action : actions) {
action.putValue(CustomLayer.KEY_DIMENSION, dimension);
popup.add(new JMenuItem(action));
}
}
popup.show(button, e.getX(), e.getY());
}
private void edit() {
int previousColour = layer.getColour();
WorldPainterDialog dialog;
if ((layer instanceof Bo2Layer) || (layer instanceof GroundCoverLayer) || (layer instanceof CombinedLayer) || (layer instanceof PlantLayer)) {
dialog = new EditLayerDialog<Layer>(App.this, layer);
} else if (layer instanceof UndergroundPocketsLayer) {
dialog = new UndergroundPocketsDialog(App.this, (UndergroundPocketsLayer) layer, selectedColourScheme, dimension.getMaxHeight(), world.isExtendedBlockIds());
} else if (layer instanceof TunnelLayer) {
final int baseHeight, waterLevel;
final TileFactory tileFactory = dimension.getTileFactory();
if (tileFactory instanceof HeightMapTileFactory) {
baseHeight = (int) ((HeightMapTileFactory) tileFactory).getBaseHeight();
waterLevel = ((HeightMapTileFactory) tileFactory).getWaterHeight();
} else {
baseHeight = 58;
waterLevel = 62;
}
dialog = new TunnelLayerDialog(App.this, (TunnelLayer) layer, world.isExtendedBlockIds(), selectedColourScheme, dimension.getMaxHeight(), baseHeight, waterLevel);
} else {
throw new RuntimeException("Don't know how to edit " + layer.getName());
}
dialog.setVisible(true);
if (!dialog.isCancelled()) {
button.setText(layer.getName());
button.setToolTipText(layer.getName() + ": " + layer.getDescription() + "; right-click for options");
int newColour = layer.getColour();
boolean viewRefreshed = false;
if (newColour != previousColour) {
button.setIcon(new ImageIcon(layer.getIcon()));
view.refreshTilesForLayer(layer, false);
viewRefreshed = true;
}
dimension.setDirty(true);
if (layer instanceof CombinedLayer) {
updateHiddenLayers();
}
if ((layer instanceof TunnelLayer) && (!viewRefreshed)) {
view.refreshTilesForLayer(layer, false);
}
}
}
private void remove() {
if (showConfirmDialog(App.this, MessageFormat.format(strings.getString("are.you.sure.you.want.to.remove.the.0.layer"), layer.getName()), MessageFormat.format(strings.getString("confirm.0.removal"), layer.getName()), YES_NO_OPTION) == YES_OPTION) {
deleteCustomLayer(layer);
// Doesn't happen automatically for some reason; Swing bug?
App.this.validate();
}
}
});
return buttonComponents;
}
Aggregations