// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.plugins.turnrestrictions.editor;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.util.ArrayList;
import java.util.List;
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import org.junit.Ignore;
import org.openstreetmap.josm.data.coor.LatLon;
import org.openstreetmap.josm.data.osm.DataSet;
import org.openstreetmap.josm.data.osm.Node;
import org.openstreetmap.josm.data.osm.OsmPrimitive;
import org.openstreetmap.josm.data.osm.PrimitiveId;
import org.openstreetmap.josm.data.osm.Relation;
import org.openstreetmap.josm.data.osm.Way;
import org.openstreetmap.josm.gui.OsmPrimitivRenderer;
import org.openstreetmap.josm.gui.layer.OsmDataLayer;
import org.openstreetmap.josm.plugins.turnrestrictions.dnd.PrimitiveIdListProvider;
import org.openstreetmap.josm.plugins.turnrestrictions.dnd.PrimitiveIdListTransferHandler;
/**
* Simple test application to test functionality and layout of the
* {@see TurnRestrictionLegEditor}
*/
@Ignore("no test")
public class TurnRestrictionLegEditorTest extends JFrame {
private TurnRestrictionLegEditor editor;
private TurnRestrictionEditorModel model;
private JList<OsmPrimitive> lstObjects;
private DefaultListModel<OsmPrimitive> listModel;
private DataSet dataSet;
protected JPanel buildLegEditorPanel() {
DataSet ds = new DataSet();
OsmDataLayer layer = new OsmDataLayer(ds, "test", null);
// mock a controler
NavigationControler controler = new NavigationControler() {
@Override
public void gotoAdvancedEditor() {
}
@Override
public void gotoBasicEditor() {
}
@Override
public void gotoBasicEditor(BasicEditorFokusTargets focusTarget) {
}
};
JPanel pnl = new JPanel(new GridBagLayout());
GridBagConstraints gc = new GridBagConstraints();
gc.anchor = GridBagConstraints.NORTHWEST;
gc.fill = GridBagConstraints.HORIZONTAL;
gc.weightx = 0.0;
pnl.add(new JLabel("From"), gc);
gc.weightx = 1.0;
gc.gridx = 1;
model = new TurnRestrictionEditorModel(layer, controler);
dataSet = new DataSet();
model.populate(new Relation());
pnl.add(editor = new TurnRestrictionLegEditor(model, TurnRestrictionLegRole.FROM), gc);
return pnl;
}
protected JPanel buildObjectListPanel() {
JPanel pnl = new JPanel(new BorderLayout());
listModel = new DefaultListModel<>();
pnl.add(new JScrollPane(lstObjects = new JList<>(listModel)), BorderLayout.CENTER);
lstObjects.setCellRenderer(new OsmPrimitivRenderer());
PrimitiveIdListProvider provider = new PrimitiveIdListProvider() {
@Override
public List<PrimitiveId> getSelectedPrimitiveIds() {
List<PrimitiveId> ret = new ArrayList<>();
int[] sel = lstObjects.getSelectedIndices();
for (int i: sel) {
ret.add((lstObjects.getModel().getElementAt(i)).getPrimitiveId());
}
return ret;
}
};
lstObjects.setTransferHandler(new PrimitiveIdListTransferHandler(provider));
lstObjects.setDragEnabled(true);
return pnl;
}
protected void build() {
Container c = getContentPane();
c.setLayout(new GridBagLayout());
GridBagConstraints gc = new GridBagConstraints();
gc.anchor = GridBagConstraints.NORTHWEST;
gc.fill = GridBagConstraints.HORIZONTAL;
gc.insets = new Insets(20, 0, 20, 0);
gc.weightx = 1.0;
gc.weighty = 0.0;
add(buildLegEditorPanel(), gc);
gc.gridy = 1;
gc.weightx = 1.0;
gc.weighty = 1.0;
gc.fill = GridBagConstraints.BOTH;
add(buildObjectListPanel(), gc);
setSize(600, 600);
}
protected void initForTest1() {
Way w = new Way(1);
w.put("name", "way-1");
editor.getModel().setTurnRestrictionLeg(TurnRestrictionLegRole.FROM, w);
}
protected void initForTest2() {
Way w = new Way(1);
w.put("name", "way-1");
dataSet.addPrimitive(w);
editor.getModel().setTurnRestrictionLeg(TurnRestrictionLegRole.FROM, w);
Node n = new Node(new LatLon(1, 1));
n.setOsmId(1, 1);
n.put("name", "node.1");
dataSet.addPrimitive(n);
listModel.addElement(n);
w = new Way();
w.setOsmId(2, 1);
w.put("name", "way.1");
dataSet.addPrimitive(w);
listModel.addElement(w);
Relation r = new Relation();
r.setOsmId(3, 1);
r.put("name", "relation.1");
dataSet.addPrimitive(r);
listModel.addElement(r);
}
public TurnRestrictionLegEditorTest() {
build();
initForTest2();
}
public static void main(String[] args) {
new TurnRestrictionLegEditorTest().setVisible(true);
}
}