Files
artloglaby/java/org/artisanlogiciel/games/maze/gui/MazeControler.java
philippe lhardy 0c886f0cd1 Square or Hexagon Cell
- allows to select between square and hexagon representation
 - remark : this is still a square model
2020-12-28 15:09:54 +01:00

450 lines
15 KiB
Java

package org.artisanlogiciel.games.maze.gui;
import org.artisanlogiciel.games.maze.MazeParams;
import org.artisanlogiciel.games.maze.MazeParamsFixed;
import org.artisanlogiciel.games.stl.Maze3dParams;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class MazeControler extends JPanel {
/**
*
*/
private static final long serialVersionUID = 1L;
private final Display display;
private MazeSettings settings = null;
JSlider layerSlide = null;
private void setMazeName(String pName) {
MazeParamsFixed p = (MazeParamsFixed) display.getParams();
p.setName(pName);
}
private JMenu createLoadingMenu() {
JMenu loadMenu = new JMenu(MazeDefault.labels.getString("load"));
final JTextField loadName = new JTextField("newlaby");
loadMenu.add(loadName);
Action loadRawAction = new AbstractAction() {
public void actionPerformed(ActionEvent evt) {
//
display.addStatus("load raw");
String filename = loadName.getText();
if ((filename.length() > 0)) {
setMazeName(filename);
display.loadRaw();
display.refresh();
}
}
};
JButton loadRawButton = new JButton(MazeDefault.labels.getString("load") + " raw");
loadRawButton.addActionListener(loadRawAction);
loadMenu.add(loadRawButton);
Action loadImcAction = new AbstractAction() {
public void actionPerformed(ActionEvent evt) {
//
display.addStatus("load Imc");
String filename = loadName.getText();
if ((filename.length() > 0)) {
setMazeName(filename);
display.loadImc(false);
display.refresh();
}
}
};
JButton loadImcButton = new JButton(MazeDefault.labels.getString("load") + " imc");
loadImcButton.addActionListener(loadImcAction);
loadMenu.add(loadImcButton);
Action loadDrawingAction = new AbstractAction() {
public void actionPerformed(ActionEvent evt) {
//
display.addStatus("load Drawing");
String filename = loadName.getText();
if ((filename.length() > 0)) {
setMazeName(filename);
display.loadDrawing(false);
display.refresh();
}
}
};
JButton loadDrawingButton = new JButton(MazeDefault.labels.getString("load") + " Drawing");
loadDrawingButton.addActionListener(loadDrawingAction);
loadMenu.add(loadDrawingButton);
Action loadOsmAction = new AbstractAction() {
public void actionPerformed(ActionEvent evt) {
//
display.addStatus("load Osm");
String filename = loadName.getText();
if ((filename.length() > 0)) {
setMazeName(filename);
// UTM 32T ? approx (long,lat) to meter
display.loadOsm(false, 78000, 78000);
display.refresh();
}
}
};
loadMenu.add(newLoadButton("osm", loadOsmAction));
loadMenu.add(newLoadButton("we",
new AbstractAction() {
public void actionPerformed(ActionEvent evt) {
//
display.addStatus("load WoldEdit");
String filename = loadName.getText();
if ((filename.length() > 0)) {
setMazeName(filename);
display.loadWorldEdit(false);
display.refresh();
}
}
}
));
return loadMenu;
}
private JMenu createSavingMenu() {
final JTextField saveName = new JTextField("newlaby");
final JButton savePngButton = newSaveButton("png",
new AbstractAction() {
public void actionPerformed(ActionEvent evt) {
//
display.addStatus("save png");
setMazeName(saveName.getText());
display.savePng();
}
});
final JButton saveSvgButton = newSaveButton("svg",
new AbstractAction() {
public void actionPerformed(ActionEvent evt) {
display.writeSentence("save svg");
setMazeName(saveName.getText());
display.saveSvg();
}
});
final JButton saveButton = newSaveButton("raw",
new AbstractAction() {
public void actionPerformed(ActionEvent evt) {
setMazeName(saveName.getText());
MazeParamsFixed p = (MazeParamsFixed) display.getParams();
display.saveRaw(p);
}
});
Action saveImcAction = new AbstractAction() {
public void actionPerformed(ActionEvent evt) {
setMazeName(saveName.getText());
display.saveImc();
}
};
final JButton saveImcButton = newSaveButton("imc", saveImcAction);
Action saveStlAction = new AbstractAction() {
public void actionPerformed(ActionEvent evt) {
//
setMazeName(saveName.getText());
MazeParamsFixed p = (MazeParamsFixed) display.getParams();
display.saveStl(p, display.stlsettings.createParams());
}
};
final JButton saveStlButton = newSaveButton("stl", saveStlAction);
Action saveTextAction = new AbstractAction() {
public void actionPerformed(ActionEvent evt) {
//
setMazeName(saveName.getText());
display.saveText();
}
};
final JButton saveTextButton = newSaveButton("txt", saveTextAction);
final JButton saveWorleEditButton = newSaveButton("we",
new AbstractAction() {
public void actionPerformed(ActionEvent evt) {
setMazeName(saveName.getText());
display.saveWorldEdit();
}
});
display.stlsettings = new Maze3dSettings(new Maze3dParams());
JMenu saveMenu = new JMenu(MazeDefault.labels.getString("save"));
saveMenu.add(saveName);
saveMenu.add(saveSvgButton);
saveMenu.add(savePngButton);
saveMenu.add(saveButton);
saveMenu.add(display.stlsettings);
saveMenu.add(saveStlButton);
saveMenu.add(saveImcButton);
saveMenu.add(saveTextButton);
saveMenu.add(saveWorleEditButton);
return saveMenu;
}
private JButton newActionButton(String actionName, String format, Action action) {
final JButton saveTextButton = new JButton(MazeDefault.labels.getString(actionName) + " " + format);
saveTextButton.addActionListener(action);
return saveTextButton;
}
private JButton newSaveButton(String format, Action action) {
return newActionButton("save", format, action);
}
private JButton newLoadButton(String format, Action action) {
return newActionButton("load", format, action);
}
private JPanel createResolveQuitBar() {
JPanel resolveQuitBar = new JPanel(new FlowLayout());
JButton buttonCreate = new JButton(MazeDefault.labels.getString("create"));
buttonCreate.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
display.recreateModel();
}
});
resolveQuitBar.add(buttonCreate);
JButton resolveButton = new JButton(MazeDefault.labels.getString("resolve"));
resolveButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
//
display.addStatus("Resolving");
display.resolve();
}
});
resolveQuitBar.add(resolveButton);
JButton reverseButton = new JButton(MazeDefault.labels.getString("reverse"));
reverseButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
//
display.addStatus("Reversing");
display.mGrow ^= display.reverse(display.mGrow);
}
});
resolveQuitBar.add(reverseButton);
final JButton quitButton = new JButton(MazeDefault.labels.getString("quit"));
Action quitAction = new AbstractAction() {
public void actionPerformed(ActionEvent evt) {
//
display.addStatus("quit");
System.exit(0);
}
};
quitButton.addActionListener(quitAction);
resolveQuitBar.add(quitButton);
JButton buttonReset = new JButton("reset");//labels.getString("reset"));
buttonReset.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
display.resetModel();
}
});
resolveQuitBar.add(buttonReset);
return resolveQuitBar;
}
public MazeControler(Display display, MazeParams params) {
// super(new BorderLayout());
super();
this.display = display;
BoxLayout layout = new BoxLayout(this, BoxLayout.Y_AXIS);
setLayout(layout);
JMenuBar menuBar = new JMenuBar();
menuBar.add(createSavingMenu());
menuBar.add(createLoadingMenu());
add(menuBar);
add(createResolveQuitBar());
JPanel controlMovesPanel = new JPanel(new BorderLayout());
settings = new MazeSettings(params);
@SuppressWarnings("serial")
Action goNorth = new AbstractAction() {
public void actionPerformed(ActionEvent evt) {
//
display.addStatus("go North");
display.goNorth();
}
};
JButton north = display.addDirection(this, MazeDefault.labels.getString("north"), "UP", goNorth);
@SuppressWarnings("serial")
Action goEast = new AbstractAction() {
public void actionPerformed(ActionEvent evt) {
//
display.addStatus("go East");
display.goEast();
}
};
JButton east = display.addDirection(this, MazeDefault.labels.getString("east"), "RIGHT", goEast);
@SuppressWarnings("serial")
Action goWest = new AbstractAction() {
public void actionPerformed(ActionEvent evt) {
//
display.addStatus("go West");
display.goWest();
}
};
JButton west = display.addDirection(this, MazeDefault.labels.getString("west"), "LEFT", goWest);
@SuppressWarnings("serial")
Action goSouth = new AbstractAction() {
public void actionPerformed(ActionEvent evt) {
//
display.addStatus("go South");
display.goSouth();
}
};
JButton south = display.addDirection(this, MazeDefault.labels.getString("south"), "DOWN", goSouth);
controlMovesPanel.add(north, BorderLayout.NORTH);
controlMovesPanel.add(west, BorderLayout.WEST);
controlMovesPanel.add(east, BorderLayout.EAST);
controlMovesPanel.add(south, BorderLayout.SOUTH);
JPanel controlPanel = new JPanel();
controlPanel.add(controlMovesPanel, BorderLayout.LINE_START);
display.statusField = new JTextField("", 20);
controlPanel.add(display.statusField, BorderLayout.CENTER);
add(controlPanel, BorderLayout.NORTH);
// control display panel contains controls for display
final JPanel controlDisplayPanel = new JPanel(new BorderLayout());
add(controlDisplayPanel);
// zoom , autozoom control
add(buildResizeControl());
// layers control
add(buildLayerControl());
add(settings);
}
private JPanel buildResizeControl() {
final JCheckBox showAll = new JCheckBox("show all");
showAll.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
display.maze.setShowAll(showAll.isSelected());
}
});
final JSlider slider = new JSlider(2, 40);
slider.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
display.setWallSize(slider.getValue());
}
});
final JCheckBox autoSlide = new JCheckBox("autoslide");
autoSlide.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
display.setAutoSize(autoSlide.isSelected());
}
});
final JCheckBox hexagon = new JCheckBox("hexagon");
hexagon.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
display.setHexagon(hexagon.isSelected());
}
});
JPanel resizecontrol = new JPanel(new FlowLayout());
resizecontrol.add(showAll);
resizecontrol.add(slider);
resizecontrol.add(autoSlide);
resizecontrol.add(hexagon);
return resizecontrol;
}
private JPanel buildLayerControl() {
int layers = 10;
final JTextField layersText = new JTextField("" + layers);
layerSlide = new JSlider(JSlider.HORIZONTAL, 0, layers, 0);
layerSlide.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
int r = display.setLayer(layerSlide.getValue());
//layerSlide.setMaximum(r);
}
});
layerSlide.setMajorTickSpacing(1);
layerSlide.setPaintTicks(true);
JPanel layerControl = new JPanel(new FlowLayout());
layerControl.add(new JLabel("layers"));
layerControl.add(layersText);
layerControl.add(layerSlide);
return layerControl;
}
public int getLayer() {
return layerSlide.getValue();
}
JPanel getMoveControl() {
return this;
}
JPanel getGenerationControl() {
return settings;
}
public MazeSettings getSettings() {
return settings;
}
}