/*=============================================================================# # Copyright (c) 2005-2016 Stephan Wahlbrink (WalWare.de) and others. # All rights reserved. This program and the accompanying materials # are made available under the terms of the Eclipse Public License v1.0 # which accompanies this distribution, and is available at # http://www.eclipse.org/legal/epl-v10.html # # Contributors: # Stephan Wahlbrink - initial API and implementation #=============================================================================*/ package de.walware.ecommons.ui.dialogs.groups; import java.util.Arrays; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import de.walware.ecommons.ui.util.UIAccess; public class ButtonGroup { public static interface ButtonListener { void handleButtonPressed(int buttonIdx); } private Composite fComposite; private Button[] fButtons; private final String[] fButtonsLabel; private final boolean[] fButtonsEnabled; private final ButtonListener fListener; public ButtonGroup(final String[] buttonsLabel, final ButtonListener listener) { fButtonsLabel = buttonsLabel; fButtonsEnabled = new boolean[fButtonsLabel.length]; // default disabled Arrays.fill(fButtonsEnabled, true); fListener = listener; } public void createGroup(final Layouter layouter) { fComposite = layouter.composite; final SelectionListener listener = new SelectionListener() { @Override public void widgetDefaultSelected(final SelectionEvent e) { doButtonSelected(e); } @Override public void widgetSelected(final SelectionEvent e) { doButtonSelected(e); } }; fButtons = new Button[fButtonsLabel.length]; for (int i = 0; i < fButtonsLabel.length; i++) { if (fButtonsLabel[i] != null) { fButtons[i] = layouter.addButton(fButtonsLabel[i], listener); fButtons[i].setEnabled(fButtonsEnabled[i]); } else { layouter.addFiller(); } } } public void doButtonSelected(final SelectionEvent event) { for (int i = 0; i < fButtons.length; i++) { if (event.widget == fButtons[i]) { fListener.handleButtonPressed(i); return; } } } public void enableButton(final int buttonIdx, final boolean enable) { fButtonsEnabled[buttonIdx] = enable; if (fComposite.isEnabled()) { fButtons[buttonIdx].setEnabled(enable); } } public void updateButtonStatet() { if (fButtons == null || !UIAccess.isOkToUse(fComposite)) { return; } final boolean global = fComposite.isEnabled(); for (int i = 0; i < fButtons.length; i++) { if (UIAccess.isOkToUse(fButtons[i])) { fButtons[i].setEnabled(global && fButtonsEnabled[i]); } } } public boolean isButtonEnabled(final int idx) { return fButtonsEnabled[idx]; } }