package net.sourceforge.pmd.eclipse.ui.preferences.panelmanagers; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.List; import org.eclipse.swt.widgets.Listener; /** * * @author Brian Remedios */ public class ListManager { private final List list; private final Button upButton; private final Button downButton; private final Button deleteButton; public ListManager(List theList, Button theUpButton, Button theDownButton, Button theDeleteButton) { list = theList; upButton = theUpButton; downButton = theDownButton; deleteButton = theDeleteButton; registerListeners(); updateButtonStates(); } private void registerListeners() { list.addListener(SWT.Selection, new Listener() { public void handleEvent(Event arg0) { updateButtonStates(); } }); upButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { shiftUp(); } }); downButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { shiftDown(); } }); deleteButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { delete(); } }); } private void shiftUp() { // TODO updateButtonStates(); } private void shiftDown() { // TODO updateButtonStates(); } private void delete() { int[] indices = list.getSelectionIndices(); list.remove(indices); updateButtonStates(); } private void updateButtonStates() { if (!hasSelection()) { upButton.setEnabled(false); downButton.setEnabled(false); deleteButton.setEnabled(false); return; } upButton.setEnabled(hasSelectionIndex(0)); downButton.setEnabled(hasSelectionIndex(list.getItemCount()-1)); deleteButton.setEnabled(true); } private boolean hasSelection() { return list.getSelectionCount() > 0; } private boolean hasSelectionIndex(int index) { for (int i : list.getSelectionIndices()) { if (i == index) return false; } return true; } }