/* * ARX: Powerful Data Anonymization * Copyright 2012 - 2017 Fabian Prasser, Florian Kohlmayer and contributors * * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0 * * 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 org.deidentifier.arx.gui.view.impl.wizard; import java.util.HashMap; import java.util.List; import java.util.Map; import org.deidentifier.arx.gui.resources.Resources; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.wizard.IWizard; import org.eclipse.jface.wizard.ProgressMonitorPart; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Shell; /** * A custom implementation of the default SWT WizardDialog that is more * compact and allows adding additional buttons. * * @author Fabian Prasser */ public class ARXWizardDialog extends WizardDialog { /** * A specification for a button to add to the wizard. * * @author Fabian Prasser */ protected static class ARXWizardButton{ /** Var. */ private static int ID = Integer.MAX_VALUE - 10; /** Var. */ private final int id = ID--; /** Var. */ private final String text; /** Var. */ private final SelectionListener listener; /** * Creates a new instance. * * @param text * @param listener */ public ARXWizardButton(String text, SelectionListener listener) { this.text = text; this.listener = listener; } } /** Var. */ private final List<ARXWizardButton> buttons; /** Var. */ private final Map<ARXWizardButton, Button> map; /** * Creates a new instance. * * @param parentShell * @param newWizard */ protected ARXWizardDialog(Shell parentShell, IWizard newWizard) { super(parentShell, newWizard); this.buttons = null; this.map = null; } /** * Creates a new instance. * * @param parentShell * @param newWizard * @param buttons */ protected ARXWizardDialog(Shell parentShell, IWizard newWizard, List<ARXWizardButton> buttons) { super(parentShell, newWizard); this.buttons = buttons; this.map = new HashMap<ARXWizardButton, Button>(); } @Override protected void createButtonsForButtonBar(Composite parent) { this.getShell().setImages(Resources.getIconSet(getShell().getDisplay())); if (buttons != null){ for (ARXWizardButton button : buttons){ Button bt = super.createButton(parent, button.id, button.text, false); setButtonLayoutData(bt); bt.addSelectionListener(button.listener); map.put(button, bt); } } super.createButtonsForButtonBar(parent); } @Override protected Control createDialogArea(Composite parent) { Control ctrl = super.createDialogArea(parent); getProgressMonitor(); return ctrl; } /** * Returns the button created for the given specification. * * @param button * @return */ protected Button getButton(ARXWizardButton button){ return map.get(button); } @Override protected IProgressMonitor getProgressMonitor() { ProgressMonitorPart monitor = (ProgressMonitorPart) super.getProgressMonitor(); GridData gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.heightHint = 0; monitor.setLayoutData(gridData); monitor.setVisible(false); return monitor; } }