001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.gui.dialogs.relation.actions; 003 004import javax.swing.AbstractAction; 005import javax.swing.event.ListSelectionEvent; 006import javax.swing.event.ListSelectionListener; 007import javax.swing.event.TableModelEvent; 008import javax.swing.event.TableModelListener; 009 010import org.openstreetmap.josm.gui.dialogs.relation.MemberTable; 011import org.openstreetmap.josm.gui.dialogs.relation.MemberTableModel; 012import org.openstreetmap.josm.gui.dialogs.relation.IRelationEditor; 013import org.openstreetmap.josm.gui.layer.OsmDataLayer; 014 015/** 016 * Abstract superclass of relation editor actions. 017 * @since 9496 018 */ 019abstract class AbstractRelationEditorAction extends AbstractAction implements TableModelListener, ListSelectionListener { 020 protected final MemberTable memberTable; 021 protected final MemberTableModel memberTableModel; 022 protected final transient OsmDataLayer layer; 023 protected final transient IRelationEditor editor; 024 025 protected AbstractRelationEditorAction(MemberTable memberTable, MemberTableModel memberTableModel, String actionMapKey) { 026 this(memberTable, memberTableModel, actionMapKey, null, null); 027 } 028 029 protected AbstractRelationEditorAction(MemberTable memberTable, MemberTableModel memberTableModel, String actionMapKey, 030 OsmDataLayer layer, IRelationEditor editor) { 031 this.memberTable = memberTable; 032 this.memberTableModel = memberTableModel; 033 this.layer = layer; 034 this.editor = editor; 035 if (actionMapKey != null) { 036 this.memberTable.getActionMap().put(actionMapKey, this); 037 } 038 } 039 040 @Override 041 public void tableChanged(TableModelEvent e) { 042 updateEnabledState(); 043 } 044 045 @Override 046 public void valueChanged(ListSelectionEvent e) { 047 updateEnabledState(); 048 } 049 050 protected abstract void updateEnabledState(); 051}