// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.plugins.turnrestrictions.editor;
import static org.openstreetmap.josm.tools.I18n.tr;
import java.awt.BorderLayout;
import java.awt.event.HierarchyEvent;
import java.awt.event.HierarchyListener;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTable;
import org.openstreetmap.josm.gui.help.HelpUtil;
import org.openstreetmap.josm.gui.tagging.TagEditorPanel;
import org.openstreetmap.josm.gui.widgets.HtmlPanel;
import org.openstreetmap.josm.tools.CheckParameterUtil;
/**
* AdvancedEditorPanel consists of two advanced editors for parts of the turn
* restriction data: a tag editor and a relation member editor.
*/
public class AdvancedEditorPanel extends JPanel {
private TurnRestrictionEditorModel model;
private TagEditorPanel pnlTagEditor;
private JTable tblRelationMemberEditor;
private JSplitPane spEditors;
/**
* Creates the panel with the tag editor
*/
protected JPanel buildTagEditorPanel() {
JPanel pnl = new JPanel(new BorderLayout());
HtmlPanel msg = new HtmlPanel();
msg.setText("<html><body>" +
tr("In the following table you can edit the <strong>raw tags</strong>"
+ " of the OSM relation representing this turn restriction.")
+ "</body></html>"
);
pnl.add(msg, BorderLayout.NORTH);
pnlTagEditor = new TagEditorPanel(model.getTagEditorModel(), null, 0);
pnlTagEditor.initAutoCompletion(model.getLayer());
pnl.add(pnlTagEditor, BorderLayout.CENTER);
return pnl;
}
/**
* Builds the panel with the table for editing relation members
*/
protected JPanel buildMemberEditorPanel() {
JPanel pnl = new JPanel(new BorderLayout());
HtmlPanel msg = new HtmlPanel();
msg.setText("<html><body>"
+ tr("In the following table you can edit the <strong>raw members</strong>"
+ " of the OSM relation representing this turn restriction.") + "</body></html>"
);
pnl.add(msg, BorderLayout.NORTH);
tblRelationMemberEditor = new RelationMemberTable(model);
JScrollPane pane = new JScrollPane(tblRelationMemberEditor);
pane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
pane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
pnl.add(pane);
return pnl;
}
/**
* Creates the main split panel
*/
protected JSplitPane buildSplitPane() {
spEditors = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
spEditors.setTopComponent(buildTagEditorPanel());
spEditors.setBottomComponent(buildMemberEditorPanel());
spEditors.setOneTouchExpandable(false);
spEditors.setDividerSize(5);
spEditors.addHierarchyListener(new SplitPaneDividerInitializer());
return spEditors;
}
/**
* Builds the user interface
*/
protected void build() {
setLayout(new BorderLayout());
add(buildSplitPane(), BorderLayout.CENTER);
}
/**
* Creates the advanced editor
*
* @param model the editor model. Must not be null.
* @throws IllegalArgumentException thrown if model is null
*/
public AdvancedEditorPanel(TurnRestrictionEditorModel model) throws IllegalArgumentException {
CheckParameterUtil.ensureParameterNotNull(model, "model");
this.model = model;
build();
HelpUtil.setHelpContext(this, HelpUtil.ht("/Plugin/TurnRestrictions#AdvancedEditor"));
}
/**
* Initializes the divider location when the components becomes visible the
* first time
*/
class SplitPaneDividerInitializer implements HierarchyListener {
@Override
public void hierarchyChanged(HierarchyEvent e) {
if (isShowing()) {
spEditors.setDividerLocation(0.5);
spEditors.removeHierarchyListener(this);
}
}
}
}