Java tutorial
/****************************************************************************** * Copyright (c) 2011-2013, Linagora * * 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: * Linagora - initial API and implementation *******************************************************************************/ package com.ebmwebsourcing.petals.common.internal.provisional.swt; import java.io.File; import java.util.ArrayList; import java.util.List; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; 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.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Table; /** * A composite with a single text field and a button. * @author Vincent Zurczak - EBM WebSourcing */ public class ListWithButtonComposite extends Composite { private final Button addButton, removeButton; private final TableViewer viewer; private final List<Listener> modificationListeners = new ArrayList<Listener>(); /** * Constructor. * <p> * The list and the button are created, but no property or layout data is set. * </p> * * @param parent the parent */ public ListWithButtonComposite(Composite parent) { super(parent, SWT.NONE); GridLayout layout = new GridLayout(2, false); layout.marginWidth = layout.marginHeight = 0; setLayout(layout); Table table = new Table(this, SWT.MULTI | SWT.BORDER); table.setLayoutData(new GridData(GridData.FILL_BOTH)); this.viewer = new TableViewer(table); this.viewer.setContentProvider(new ArrayContentProvider()); this.viewer.setLabelProvider(new LabelProvider() { @Override public String getText(Object element) { if (element instanceof File) return ((File) element).getAbsolutePath(); return super.getText(element); } }); Composite buttons = new Composite(this, SWT.NONE); layout = new GridLayout(); layout.marginWidth = layout.marginHeight = 0; buttons.setLayout(layout); buttons.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING)); // ADD button this.addButton = new Button(buttons, SWT.PUSH); this.addButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); // REMOVE button this.removeButton = new Button(buttons, SWT.PUSH); this.removeButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); } /** * @return the addButton */ public Button getAddButton() { return this.addButton; } /** * @return the removeButton */ public Button getRemoveButton() { return this.removeButton; } /** * @return the viewer */ public TableViewer getViewer() { return this.viewer; } /** * Adds a modification listener. * @param listener a listener */ public void addModificationListener(Listener listener) { this.modificationListeners.add(listener); } /** * Removes a modification listener. * @param listener a listener */ public void removeModificationListener(Listener listener) { this.modificationListeners.remove(listener); } /** * Notifies the listeners that an object was added or removed from the table. */ public void notifyListeners() { Event event = new Event(); event.widget = this.viewer.getTable(); for (Listener l : this.modificationListeners) l.handleEvent(event); } }