/** * */ package com.tilusnet.josm.plugins.alignways; import static org.openstreetmap.josm.tools.I18n.tr; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Objects; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.ButtonGroup; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JToggleButton; import org.openstreetmap.josm.gui.dialogs.ToggleDialog; /** * @author tilusnet <tilusnet@gmail.com> * */ public class AlignWaysDialog extends ToggleDialog implements ActionListener { private static final long serialVersionUID = 2949349330750246969L; private final JLabel infoText; enum AligningModeOption { ALGN_OPT_KEEP_LENGTH, ALGN_OPT_KEEP_ANGLE } AligningModeOption awOpt; JPanel activateInfoPanel, modesPanel, dlgPane; public AlignWaysDialog(AlignWaysMode awMode) { super(tr("Align Way Segments: Modes"), "alignways_cfg", tr("Align Ways control panel"), null, 70); infoText = new JLabel(); dlgPane = new JPanel(); dlgPane.setLayout(new GridLayout(0, 1, 20, 20)); // Create the panel that shows instruction when Align Ways mode is *not* active activateInfoPanel = new JPanel(); activateInfoPanel.setLayout(new BoxLayout(activateInfoPanel, BoxLayout.PAGE_AXIS)); activateInfoPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); JPanel lbl1Pnl = new JPanel(); lbl1Pnl.setLayout(new FlowLayout(FlowLayout.LEADING)); JLabel lbl1 = new JLabel(tr("This panel activates in Align Ways mode:")); lbl1Pnl.add(lbl1); activateInfoPanel.add(lbl1Pnl); JPanel tglbtnPnl = new JPanel(); tglbtnPnl.setLayout(new FlowLayout(FlowLayout.CENTER)); JToggleButton tglBtn = new JToggleButton(awMode); tglBtn.setPreferredSize(new Dimension(50, 50)); tglBtn.setText(null); tglbtnPnl.add(tglBtn); activateInfoPanel.add(tglbtnPnl); // Create the Align Ways mode control panel for when Align Ways *is* active modesPanel = new JPanel(); modesPanel.setLayout(new BoxLayout(modesPanel, BoxLayout.PAGE_AXIS)); /* modesPanel.setBorder(BorderFactory.createCompoundBorder( BorderFactory.createEmptyBorder(10, 10, 10, 10), BorderFactory.createTitledBorder(tr("Align with:"))) ); */ modesPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); modesPanel.setAlignmentX(LEFT_ALIGNMENT); JRadioButton btnKeepLength = new JRadioButton(tr("Length preserved")); btnKeepLength.setActionCommand("awOptKeepLen"); btnKeepLength.addActionListener(this); JRadioButton btnKeepAngle = new JRadioButton(tr("Angle preserved")); btnKeepAngle.setActionCommand("awOptKeepAng"); btnKeepAngle.addActionListener(this); ButtonGroup btnGrp = new ButtonGroup(); btnGrp.add(btnKeepLength); btnGrp.add(btnKeepAngle); modesPanel.add(new JLabel(tr("Align with:"))); modesPanel.add(Box.createRigidArea(new Dimension(0, 5))); modesPanel.add(btnKeepLength); modesPanel.add(btnKeepAngle); modesPanel.add(Box.createRigidArea(new Dimension(0, 10))); // modesPanel.add(new JSeparator(SwingConstants.HORIZONTAL)); infoText.setBorder(BorderFactory.createCompoundBorder( BorderFactory.createEtchedBorder(), BorderFactory.createEmptyBorder(10, 10, 10, 10) ) ); modesPanel.add(infoText); // Start inactivated - JOSM cannot start directly in awMode activate(false); createLayout(dlgPane, false, null); // Select length preserved mode by default btnKeepLength.doClick(); } @Override public void actionPerformed(ActionEvent e) { if (Objects.equals(e.getActionCommand(), "awOptKeepLen")) { awOpt = AligningModeOption.ALGN_OPT_KEEP_LENGTH; infoText.setText(tr("<html>Aligns the way segment to the reference so that its length is preserved.</html>")); } else if (Objects.equals(e.getActionCommand(), "awOptKeepAng")) { awOpt = AligningModeOption.ALGN_OPT_KEEP_ANGLE; infoText.setText(tr("<html>Aligns the way segment to the reference so that the angles of its adjacent segments are preserved.<br/>" + "The length of the aligned segment is likely to change as result.</html>")); } } /** * @return the awOpt */ public AligningModeOption getAwOpt() { return awOpt; } /** * @param activeMode If set to true, the dialog will show the mode options, otherwise it will show some instructions */ public void activate(boolean activeMode) { if (activeMode == true) { // we're in alignways mode activateInfoPanel.setVisible(false); modesPanel.setVisible(true); this.setPreferredSize(new Dimension(0, 200)); dlgPane.remove(activateInfoPanel); dlgPane.add(modesPanel); dlgPane.validate(); } else { // we're not in alignways mode activateInfoPanel.setVisible(true); modesPanel.setVisible(false); this.setPreferredSize(new Dimension(0, 70)); dlgPane.remove(modesPanel); dlgPane.add(activateInfoPanel); dlgPane.validate(); } } }