Java tutorial
/******************************************************************************* * Copyright (c) 2011 IBM Corporation 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: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.help.ui.internal.preferences; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.eclipse.help.ui.internal.Messages; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.viewers.ColumnLayoutData; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TableLayout; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; public class ICTable { private Table table; private TableViewer viewer; private final String NAME_COLUMN = Messages.RemoteICViewer_Name; private final String LOCATION_COLUMN = Messages.RemoteICViewer_URL; private final String STATUS_COLUMN = Messages.RemoteICViewer_Enabled; // Set column names private String[] columnNames = new String[] { NAME_COLUMN, LOCATION_COLUMN, STATUS_COLUMN }; public ICTable(Composite parent) { // Create the table table = createTable(parent); // Create and setup the TableViewer viewer = createTableViewer(); loadPreferences(); } /** * Release resources */ public void dispose() { // Tell the label provider to release its resources viewer.getLabelProvider().dispose(); } /** * Create the Table */ private Table createTable(Composite parent) { int style = SWT.MULTI | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION; TableLayout tableLayout = new TableLayout(); Table table = new Table(parent, style); table.setLayout(tableLayout); table.setHeaderVisible(true); table.setLinesVisible(true); table.setFont(parent.getFont()); GridData gridData = new GridData(GridData.FILL_BOTH); gridData.grabExcessVerticalSpace = true; gridData.grabExcessHorizontalSpace = true; gridData.verticalAlignment = GridData.FILL; gridData.horizontalAlignment = GridData.FILL; gridData.widthHint = IDialogConstants.ENTRY_FIELD_WIDTH; gridData.heightHint = table.getItemHeight(); gridData.horizontalSpan = 1; table.setLayoutData(gridData); ColumnLayoutData[] fTableColumnLayouts = { new ColumnWeightData(85), new ColumnWeightData(165), new ColumnWeightData(60) }; TableColumn column; tableLayout.addColumnData(fTableColumnLayouts[0]); column = new TableColumn(table, SWT.NONE, 0); column.setResizable(fTableColumnLayouts[0].resizable); column.setText(NAME_COLUMN); tableLayout.addColumnData(fTableColumnLayouts[1]); column = new TableColumn(table, SWT.NONE, 1); column.setResizable(fTableColumnLayouts[1].resizable); column.setText(LOCATION_COLUMN); tableLayout.addColumnData(fTableColumnLayouts[2]); column = new TableColumn(table, SWT.NONE, 2); column.setResizable(fTableColumnLayouts[2].resizable); column.setText(STATUS_COLUMN); return table; } /** * Create the TableViewer */ private TableViewer createTableViewer() { TableViewer viewer = new TableViewer(table); viewer.setUseHashlookup(true); viewer.setColumnProperties(columnNames); viewer.setContentProvider(new ICContentProvider()); viewer.setLabelProvider(new ICLabelProvider()); return viewer; } /** * Proxy for the the RemoteICList which provides content * for the Table. This class implements IRemoteHelpListViewer interface an * registers itself with RemoteICList */ class ICContentProvider implements IStructuredContentProvider { private List content = new ArrayList(); public void dispose() { content = null; } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { content = (List) newInput; } public Object[] getElements(Object inputElement) { return (Object[]) content.toArray(new Object[content.size()]); } } public class ICLabelProvider extends LabelProvider implements ITableLabelProvider { public Image getColumnImage(Object element, int columnIndex) { return null; } public String getColumnText(Object element, int columnIndex) { switch (columnIndex) { case 0: return ((IC) element).getName(); case 1: return ((IC) element).getHref(); case 2: return ((IC) element).isEnabled() ? Messages.RemoteICLabelProvider_4 : Messages.RemoteICLabelProvider_5; default: return null; } } } /** * @param rics the ordered remote InfoCenters */ public void update(List ics) { viewer.getContentProvider().inputChanged(viewer, null, ics); refresh(); } /** * Make sure the table viewer shows the latest copy of the ordered InfoCenters */ public void refresh() { viewer.refresh(getICs()); } /** * Return the column names in a collection * * @return List containing column names */ public List getColumnNames() { return Arrays.asList(columnNames); } /** * @return currently selected item */ public ISelection getSelection() { return viewer.getSelection(); } /** * Return the RemoteICList */ public List getICs() { ICContentProvider p = (ICContentProvider) viewer.getContentProvider(); Object objs[] = p.getElements(null); List content = new ArrayList(); for (int o = 0; o < objs.length; o++) content.add(objs[o]); return content; } public void setICs(List ics) { List oldICs = getICs(); for (int o = 0; o < oldICs.size(); o++) removeIC((IC) oldICs.get(o)); for (int i = 0; i < ics.size(); i++) addIC((IC) ics.get(i)); } public TableViewer getTableViewer() { return viewer; } /** * Return the parent composite */ public Control getControl() { return table.getParent(); } public Table getTable() { return table; } public void addIC(IC ic) { List content = getICs(); content.add(ic); getTableViewer().getContentProvider().inputChanged(getTableViewer(), null, content); getTableViewer().add(ic); refresh(); } public void editIC(IC ic) { List content = getICs(); content.set(getTable().getSelectionIndex(), ic); getTableViewer().replace(ic, getTable().getSelectionIndex()); getTableViewer().getContentProvider().inputChanged(getTableViewer(), null, content); refresh(); } public void removeIC(IC ic) { List content = getICs(); content.remove(ic); getTableViewer().getContentProvider().inputChanged(getTableViewer(), null, content); getTableViewer().remove(ic); refresh(); } private void loadPreferences() { List ics = ICPreferences.getICs(); for (int i = 0; i < ics.size(); i++) addIC((IC) ics.get(i)); } }