/******************************************************************************* * Copyright (c) 2004, 2010 BREDEX GmbH. * 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: * BREDEX GmbH - initial API and implementation and/or initial documentation *******************************************************************************/ package org.eclipse.jubula.client.ui.rcp.dialogs; import java.util.List; import org.apache.commons.lang.ArrayUtils; import org.eclipse.core.databinding.beans.PojoProperties; import org.eclipse.core.databinding.observable.list.WritableList; import org.eclipse.jface.databinding.viewers.ViewerSupport; import org.eclipse.jface.dialogs.TitleAreaDialog; import org.eclipse.jface.viewers.CheckboxTableViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerSorter; import org.eclipse.jubula.client.core.model.IComponentNamePO; import org.eclipse.jubula.client.ui.rcp.i18n.Messages; import org.eclipse.jubula.client.ui.utils.LayoutUtil; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Shell; /** * @author Markus Tiede * @created Jul 18, 2011 */ public class CleanupComponentNamesDialog extends TitleAreaDialog { /** width hint = 300 */ private static final int WIDTH_HINT = 300; /** * <code>m_cbtv</code> */ private CheckboxTableViewer m_cbtv = null; /** * <code>m_checkedElements</code> */ private Object[] m_checkedElements = ArrayUtils.EMPTY_OBJECT_ARRAY; /** * <code>m_unusedNames</code> */ private final List<IComponentNamePO> m_unusedNames; /** * @param parentShell * the parent shell to use * @param unusedNames * a list of unused component names to delete from this object * mapping editor */ public CleanupComponentNamesDialog(Shell parentShell, List<IComponentNamePO> unusedNames) { super(parentShell); m_unusedNames = unusedNames; setBlockOnOpen(true); } /** * {@inheritDoc} */ protected Control createDialogArea(Composite parent) { setTitle(Messages.CleanupComponentNamesDialogTitle); setMessage(Messages.CleanupComponentNamesDialogMessage); getShell().setText(Messages.CleanupComponentNamesDialogTitle); // new Composite as container final GridLayout gridLayoutParent = new GridLayout(); gridLayoutParent.numColumns = 1; gridLayoutParent.verticalSpacing = 2; gridLayoutParent.marginWidth = 2; gridLayoutParent.marginHeight = 2; parent.setLayout(gridLayoutParent); LayoutUtil.createSeparator(parent); final Composite area = new Composite(parent, SWT.NULL); // use Gridlayout final GridLayout gridLayout = new GridLayout(); area.setLayout(gridLayout); GridData gridData = new GridData(); gridData.grabExcessHorizontalSpace = true; gridData.grabExcessVerticalSpace = true; gridData.horizontalAlignment = GridData.FILL; gridData.verticalAlignment = GridData.FILL; area.setLayoutData(gridData); setCbtv(CheckboxTableViewer.newCheckList(area, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL)); GridData layoutData = new GridData(); layoutData.grabExcessHorizontalSpace = true; layoutData.grabExcessVerticalSpace = true; layoutData.horizontalAlignment = GridData.FILL; layoutData.verticalAlignment = GridData.FILL; layoutData.heightHint = WIDTH_HINT; LayoutUtil.addToolTipAndMaxWidth(layoutData, getCbtv().getControl()); getCbtv().getControl().setLayoutData(layoutData); getCbtv().setUseHashlookup(true); WritableList wl = new WritableList(m_unusedNames, IComponentNamePO.class); ViewerSupport.bind(getCbtv(), wl, PojoProperties.value("name")); //$NON-NLS-1$ getCbtv().setSorter(new ViewerSorter() { public int compare(Viewer viewer, Object e1, Object e2) { if (e1 instanceof String && e2 instanceof String) { ((String)e1).compareTo((String)e2); } return super.compare(viewer, e1, e2); } }); getCbtv().setAllChecked(true); addButtons(area); return area; } /** * @param area the area */ private void addButtons(Composite area) { LayoutUtil.createSeparator(area); GridData btn1GridData = new GridData(SWT.END, SWT.FILL, true, false); GridData btn2GridData = new GridData(SWT.END, SWT.FILL, false, false); // create the two buttons for selecting everything or nothing Button selectAllBtn = new Button(area, SWT.PUSH); selectAllBtn.setText(Messages.SelectAll); selectAllBtn.setLayoutData(btn1GridData); selectAllBtn.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { getCbtv().setAllChecked(true); } }); Button deselectAllBtn = new Button(area, SWT.PUSH); deselectAllBtn.setText(Messages.DeselectAll); deselectAllBtn.setLayoutData(btn2GridData); deselectAllBtn.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { getCbtv().setAllChecked(false); } }); LayoutUtil.createSeparator(area); } /** * {@inheritDoc} */ public boolean close() { m_checkedElements = getCbtv().getCheckedElements(); return super.close(); } /** * @return a list of checked = toDelete Elements */ public Object[] getCheckedElements() { return m_checkedElements; } /** * @param cbtv the cbtv to set */ protected void setCbtv(CheckboxTableViewer cbtv) { m_cbtv = cbtv; } /** * @return the cbtv */ protected CheckboxTableViewer getCbtv() { return m_cbtv; } }