// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.gui.dialogs.relation.actions; import static org.openstreetmap.josm.tools.I18n.tr; import static org.openstreetmap.josm.tools.I18n.trn; import java.awt.event.ActionEvent; import javax.swing.JOptionPane; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import org.openstreetmap.josm.Main; import org.openstreetmap.josm.gui.ConditionalOptionPaneUtil; import org.openstreetmap.josm.gui.tagging.ac.AutoCompletingTextField; import org.openstreetmap.josm.tools.ImageProvider; /** * Sets a role for the selected members * @since 9496 */ public class SetRoleAction extends AbstractRelationEditorAction implements DocumentListener { private static final long serialVersionUID = 1L; private final transient AutoCompletingTextField tfRole; /** * Constructs a new {@code SetRoleAction}. * @param memberTable member table * @param memberTableModel member table model * @param tfRole role text field */ public SetRoleAction(IRelationEditorActionAccess editorAccess) { super(editorAccess); this.tfRole = editorAccess.getTextFieldRole(); putValue(SHORT_DESCRIPTION, tr("Sets a role for the selected members")); new ImageProvider("apply").getResource().attachImageIcon(this); putValue(NAME, tr("Apply Role")); updateEnabledState(); } @Override protected void updateEnabledState() { setEnabled(editorAccess.getMemberTable().getSelectedRowCount() > 0); } protected boolean isEmptyRole() { return tfRole.getText() == null || tfRole.getText().trim().isEmpty(); } protected boolean confirmSettingEmptyRole(int onNumMembers) { String message = "" + trn("You are setting an empty role on {0} object.", "You are setting an empty role on {0} objects.", onNumMembers, onNumMembers) + "
" + tr("This is equal to deleting the roles of these objects.") + "
" + tr("Do you really want to apply the new role?") + ""; String[] options = new String[] { tr("Yes, apply it"), tr("No, do not apply") }; int ret = ConditionalOptionPaneUtil.showOptionDialog( "relation_editor.confirm_applying_empty_role", Main.parent, message, tr("Confirm empty role"), JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, options, options[0] ); switch(ret) { case JOptionPane.YES_OPTION: case ConditionalOptionPaneUtil.DIALOG_DISABLED_OPTION: return true; default: return false; } } @Override public void actionPerformed(ActionEvent e) { if (isEmptyRole() && !confirmSettingEmptyRole(editorAccess.getMemberTable().getSelectedRowCount())) { return; } editorAccess.getMemberTableModel().updateRole(editorAccess.getMemberTable().getSelectedRows(), tfRole.getText()); } @Override public void changedUpdate(DocumentEvent e) { updateEnabledState(); } @Override public void insertUpdate(DocumentEvent e) { updateEnabledState(); } @Override public void removeUpdate(DocumentEvent e) { updateEnabledState(); } }