use of org.twak.utils.ui.SimpleFileChooser in project chordatlas by twak.
the class TweedFrame method addLayer.
private void addLayer(MouseEvent evt) {
SimplePopup2 sp = new SimplePopup2(evt);
if (hasGIS()) {
sp.add("+ mesh (obj)", new Runnable() {
@Override
public void run() {
new SimpleFileChooser(frame, false, "Select .obj mesh file", new File(Tweed.JME), "obj") {
public void heresTheFile(File obj) throws Throwable {
// removeMeshSources();
String f = tweed.makeWorkspaceRelative(obj).toString();
addGen(new MeshGen(f, tweed), true);
}
};
}
});
sp.add("+ mesh (minimesh)", new Runnable() {
@Override
public void run() {
new SimpleFileChooser(frame, false, "Select minimesh index file (index.xml), or obj to convert", new File(Tweed.JME), null) {
@Override
public void heresTheFile(File f) throws Throwable {
if (!f.getName().equals(MiniTransform.INDEX)) {
MiniTransform.convertToMini(f, new File(Tweed.DATA + "/minimesh"), () -> addGen(new MiniGen(new File("minimesh"), tweed), true));
return;
}
// removeMeshSources();
addGen(new MiniGen(tweed.makeWorkspaceRelative(f.getParentFile()), tweed), true);
}
};
}
});
sp.add("+ panos (jpg)", new Runnable() {
@Override
public void run() {
new SimpleFileChooser(frame, false, "Select one of many panoramas images in a directory, or todo.list", new File(Tweed.JME), null) {
public void heresTheFile(File oneOfMany) throws Throwable {
// removeGens( PanoGen.class );
addGen(new PanoGen(tweed.makeWorkspaceRelative(oneOfMany.getParentFile()), tweed, Tweed.LAT_LONG), true);
}
};
}
});
} else {
sp.add("+ gis (2d obj)", new Runnable() {
@Override
public void run() {
new SimpleFileChooser(frame, false, "Select .obj gis footprints", new File(Tweed.JME), "obj") {
public void heresTheFile(File obj) throws Throwable {
removeGISSources();
addGen(new GISGen(tweed.makeWorkspaceRelative(obj), tweed), true);
}
};
}
});
// sp.add( "+ gis (3d obj)", new Runnable() {
// @Override
// public void run() {
// new SimpleFileChooser( frame, false, "Select .obj gis footprints", new File( Tweed.JME ), "obj" ) {
// public void heresTheFile( File obj ) throws Throwable {
//
// };
// };
// }
// } );
sp.add("+ gis (gml)", new Runnable() {
@Override
public void run() {
new SimpleFileChooser(frame, false, "Select .gml gis footprints", new File(Tweed.JME), "gml") {
public void heresTheFile(File gml) throws Throwable {
removeGISSources();
tweed.addGML(gml, null);
}
};
}
});
}
sp.show();
}
use of org.twak.utils.ui.SimpleFileChooser in project chordatlas by twak.
the class TweedFrame method buildUI.
public JComponent buildUI() {
JPanel out = new JPanel(new BorderLayout());
JMenuBar menuBar = new JMenuBar();
frame.setJMenuBar(menuBar);
// Build the first menu.
JMenu menu = new JMenu("File");
menuBar.add(menu);
JMenuItem save = new JMenuItem("save", KeyEvent.VK_S);
save.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.CTRL_MASK));
menu.add(save);
save.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (TweedSettings.folder == null) {
new SimpleFileChooser(frame) {
@Override
public void heresTheFile(File f) throws Throwable {
TweedSettings.folder = f;
TweedSettings.save(false);
}
};
} else
TweedSettings.save(false);
}
});
JMenuItem load = new JMenuItem("open...", KeyEvent.VK_O);
load.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, ActionEvent.CTRL_MASK));
menu.add(load);
load.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new SimpleFileChooser(frame, false, "select a tweed.xml", Tweed.DATA == null ? null : new File(Tweed.DATA), TWEED_XML) {
@Override
public void heresTheFile(File f) throws Throwable {
TweedSettings.load(f);
}
};
}
});
JMenuItem recent = new JLazyMenu("open recent") {
@Override
public List<Runnable> getEntries() {
List<Runnable> out = new ArrayList();
for (File r : TweedSettings.recentFiles.f) {
out.add(new Runnable() {
@Override
public void run() {
if (!r.exists())
JOptionPane.showMessageDialog(frame, "Location " + r.getName() + "not found (is it still there?)");
else
TweedSettings.load(r);
}
@Override
public String toString() {
return r.getName();
}
});
}
return out;
}
};
menu.add(recent);
JMenuItem neu = new JMenuItem("new...", KeyEvent.VK_N);
neu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, ActionEvent.CTRL_MASK));
menu.add(neu);
neu.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new SimpleFileChooser(frame, false, "select a file in the root of the workspace") {
@Override
public void heresTheFile(File f) throws Throwable {
TweedSettings.folder = f.getParentFile();
if (new File(TweedSettings.folder, TWEED_XML).exists()) {
JOptionPane.showMessageDialog(frame, TWEED_XML + " already exists at this location, pick another (or delete...)");
return;
}
TweedSettings.load(TweedSettings.folder);
}
};
}
});
// JMenuItem remove = new JMenuItem( "delete layer", KeyEvent.VK_MINUS );
// remove.setAccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_MINUS, ActionEvent.CTRL_MASK ) );
// menu.add( remove );
// remove.addActionListener( new java.awt.event.ActionListener() {
// @Override
// public void actionPerformed( ActionEvent e ) {
// if ( selectedGen != null )
// removeGen( selectedGen );
// };
// } );
JMenuItem resetCam = new JMenuItem("reset view", KeyEvent.VK_R);
resetCam.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_R, ActionEvent.CTRL_MASK));
menu.add(resetCam);
resetCam.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
tweed.resetCamera();
}
});
JMenuItem settings = new JMenuItem("settings...", KeyEvent.VK_R);
settings.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E, ActionEvent.CTRL_MASK));
menu.add(settings);
settings.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new Auto(TweedSettings.settings).frame();
}
});
JMenuItem resetBG = new JMenuItem("reset background", KeyEvent.VK_MINUS);
resetBG.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_MINUS, ActionEvent.CTRL_MASK));
menu.add(resetBG);
resetBG.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
tweed.enqueue(new Runnable() {
@Override
public void run() {
TweedFrame.this.tweed.clearBackground();
}
});
}
});
JMenuItem obj = new JMenuItem("export obj...", KeyEvent.VK_E);
obj.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E, ActionEvent.CTRL_MASK));
menu.add(obj);
obj.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
ObjDump dump = new ObjDump();
for (Gen g : genList) if (g.visible && g instanceof IDumpObjs)
((IDumpObjs) g).dumpObj(dump);
new SimpleFileChooser(frame, true, "save all as obj", new File(Tweed.SCRATCH, "all.obj"), "obj") {
@Override
public void heresTheFile(File f) throws Throwable {
dump.dump(f);
}
};
}
});
layerList = new JPanel(new ListDownLayout());
JPanel layers = new JPanel();
layers.setLayout(new BorderLayout());
layers.add(new JLabel("layers:"), BorderLayout.NORTH);
JScrollPane listScroll = new JScrollPane(layerList);
listScroll.getVerticalScrollBar().setUnitIncrement(50);
listScroll.setPreferredSize(new Dimension(200, 300));
layers.add(listScroll, BorderLayout.CENTER);
JPanel addRemoveLayer = new JPanel();
{
addRemoveLayer.setLayout(new GridLayout(1, 2));
layers.add(addRemoveLayer, BorderLayout.SOUTH);
JButton addLayer = new JButton("+");
addLayer.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
addLayer(e);
}
});
JButton removeLayer = new JButton("-");
removeLayer.addActionListener(e -> removeGen(selectedGen));
addRemoveLayer.add(addLayer);
addRemoveLayer.add(removeLayer);
}
JPanel options = new JPanel(new BorderLayout());
{
options.add(new JLabel("options:"), BorderLayout.NORTH);
options.add(genUI, BorderLayout.CENTER);
}
JSplitPane pane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, layers, options);
out.add(pane, BorderLayout.CENTER);
JPanel toolPanel = new JPanel(new ListRightLayout());
tweed.addUI(toolPanel);
coordLabel = new JLabel("");
coordLabel.setHorizontalAlignment(SwingConstants.CENTER);
worldLabel = new JLabel("");
worldLabel.setHorizontalAlignment(SwingConstants.CENTER);
crsLabel = new JLabel("none");
crsLabel.setHorizontalAlignment(SwingConstants.CENTER);
out.add(toolPanel, BorderLayout.NORTH);
JPanel coords = new JPanel(new ListDownLayout());
coords.add(worldLabel);
coords.add(coordLabel);
coords.add(crsLabel);
out.add(coords, BorderLayout.SOUTH);
out.setPreferredSize(new Dimension(300, frame.getHeight()));
return out;
}
Aggregations