/** * * Copyright * 2009-2015 Jayway Products AB * 2016-2017 Föreningen Sambruk * * Licensed under AGPL, Version 3.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.gnu.org/licenses/agpl.txt * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package se.streamsource.streamflow.client.util; import javax.swing.Action; import javax.swing.ListSelectionModel; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; /** * Enable actions if a list has a selection */ public class SelectionActionEnabler implements ListSelectionListener, TreeSelectionListener, ItemListener { private Action[] action; public SelectionActionEnabler( Action... action ) { this.action = action; for (Action action1 : action) { action1.setEnabled( false ); } } public void valueChanged( ListSelectionEvent e ) { if (!e.getValueIsAdjusting()) { if (((ListSelectionModel) e.getSource()).isSelectionEmpty()) { for (Action action1 : action) { action1.setEnabled( false ); } } else { selectionChanged(); for (Action action1 : action) { action1.setEnabled(isSelectedValueValid( action1 ) ); } } } } protected void selectionChanged() { // Overload this method to do whatever is necessary to get additional context } public void valueChanged( TreeSelectionEvent e ) { if (e.getNewLeadSelectionPath() != null) { selectionChanged(); for (Action action1 : action) { action1.setEnabled(isSelectedValueValid( action1 ) ); } } else { for (Action action1 : action) { action1.setEnabled(false); } } } /** * Override this to add logic for whether the currently selected value is valid or not. * * @return */ public boolean isSelectedValueValid( Action action ) { return true; } public void itemStateChanged( ItemEvent e ) { if (e.getStateChange() == ItemEvent.SELECTED) { selectionChanged(); for (Action action1 : action) { action1.setEnabled(isSelectedValueValid( action1 ) ); } } else { for (Action action1 : action) { action1.setEnabled( false ); } } } public Action[] getActions() { return action; } }