/******************************************************************************* * Copyright (c) 2001, 2006 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 * Jens Lukowski/Innoopract - initial renaming/restructuring * *******************************************************************************/ package org.eclipse.wst.xml.ui.internal.nsedit; import java.util.ArrayList; import java.util.List; import org.eclipse.jface.viewers.ColumnWeightData; 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.events.MouseAdapter; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; import org.eclipse.wst.xml.core.internal.contentmodel.util.NamespaceInfo; import org.eclipse.wst.xml.ui.internal.XMLUIMessages; public class CommonNamespaceInfoTable extends TableViewer { /** * NamespaceInfoTableLabelProvider */ protected class Provider extends LabelProvider implements ITableLabelProvider, IStructuredContentProvider { Viewer viewer; public Image getColumnImage(Object object, int columnIndex) { Image result = null; int columnCode = getColumnCode(columnIndex); if (columnCode == COLUMN_LOCATION_HINT) { NamespaceInfo info = (NamespaceInfo) object; if ((info.locationHint == null) || info.locationHint.trim().equals("")) { //$NON-NLS-1$ // Comment this out until we solve the alignment/(space // for image being allocated // to prefix column) ...... // result = // XMLEditorPluginImageHelper.getInstance().getImage(XMLEditorPluginImages.IMG_OBJ_WARNING_OBJ); } } return result; } public String getColumnText(Object object, int column) { NamespaceInfo info = (NamespaceInfo) object; String result = null; int columnCode = getColumnCode(column); switch (columnCode) { case COLUMN_PREFIX : { result = info.prefix; break; } case COLUMN_NAMESPACE_URI : { result = info.uri; break; } case COLUMN_CHECKBOX : { result = ""; // info.locationHint; //$NON-NLS-1$ break; } case COLUMN_LOCATION_HINT : { result = info.locationHint; break; } } result = result != null ? result : ""; //$NON-NLS-1$ if (result.equals("")) { //$NON-NLS-1$ switch (columnCode) { case COLUMN_PREFIX : { result = XMLUIMessages._UI_NO_PREFIX; break; } case COLUMN_NAMESPACE_URI : { result = XMLUIMessages._UI_NO_NAMESPACE_NAME; break; } } } return result; } public Object[] getElements(Object inputElement) { List list = (List) viewer.getInput(); return list != null ? list.toArray() : null; } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { this.viewer = viewer; } } class TableItemChecker extends MouseAdapter { public void mouseDown(MouseEvent e) { TableItem item = getTable().getItem(new Point(e.x, e.y)); if (item != null) { Object obj = item.getData(); if (obj != null) { NamespaceInfo info = (NamespaceInfo) obj; TableColumn col = getTable().getColumn(0); if (e.x < col.getWidth()) // if the point falls within // the // Select column then perform // check/uncheck { String currentState = (String) info.getProperty("checked"); //$NON-NLS-1$ System.out.println("currentState" + currentState); //$NON-NLS-1$ if ((currentState == null) || currentState.equals("false")) //$NON-NLS-1$ { info.setProperty("checked", "true"); //$NON-NLS-1$ //$NON-NLS-2$ } else { info.setProperty("checked", "false"); //$NON-NLS-1$ //$NON-NLS-2$ } refresh(); } } } } } protected static final int COLUMN_CHECKBOX = 1; protected static final int COLUMN_LOCATION_HINT = 4; protected static final int COLUMN_NAMESPACE_URI = 2; protected static final int COLUMN_PREFIX = 3; protected static final String LABEL_CHECKBOX = ""; //$NON-NLS-1$ protected static final String LABEL_LOCATION_HINT = XMLUIMessages._UI_LABEL_LOCATION_HINT; protected static final String LABEL_NAMESPACE_URI = XMLUIMessages._UI_LABEL_NAMESPACE_NAME; protected static final String LABEL_PREFIX = XMLUIMessages._UI_LABEL_PREFIX; protected List checkedList = new ArrayList(); // protected List namespaceInfoList = new ArrayList(); protected int[] columnIndexMap; protected boolean showCheckBoxes = true; private boolean showLocationText = false; private Table table; protected int visibleRows = -1; public CommonNamespaceInfoTable(Composite parent, int visibleRows) { this(parent, SWT.FULL_SELECTION | SWT.MULTI | SWT.BORDER, visibleRows, false); } // protected CellEditor getCellEditor(int column) // { // return (column == COLUMN_CHECKBOX) ? checkBoxCellEditor : // textCellEditor; // } public CommonNamespaceInfoTable(Composite parent, int visibleRows, boolean showLocationText) { this(parent, SWT.FULL_SELECTION | SWT.MULTI | SWT.BORDER, visibleRows, showLocationText); } public CommonNamespaceInfoTable(Composite parent, int style, int visibleRows) { this(parent, SWT.FULL_SELECTION | SWT.MULTI | SWT.BORDER | style, visibleRows, false); } public CommonNamespaceInfoTable(Composite parent, int style, int visibleRows, boolean showLocationText) { super(new Table(parent, style)); getTable().setLinesVisible(true); this.showCheckBoxes = (style & SWT.CHECK) != 0; columnIndexMap = createColumnIndexMap(); this.showLocationText = showLocationText; Provider provider = new Provider(); setContentProvider(provider); setLabelProvider(provider); String[] columnPropertiesArray = createColumnPropertiesArray(); setColumnProperties(columnPropertiesArray); table = getTable(); table.setHeaderVisible(true); table.setLayoutData(new GridData(GridData.FILL_BOTH)); TableLayout layout = new TableLayout(); for (int i = 0; i < columnPropertiesArray.length; i++) { TableColumn column = new TableColumn(table, i); if ((columnPropertiesArray[i]).equals(LABEL_LOCATION_HINT)) { if (showLocationText) { column.setText(columnPropertiesArray[i]); } else { // Comment this out until we solve the alignment/(space // for image being allocated // to prefix column) ...... // column.setImage(XMLEditorPluginImageHelper.getInstance().getImage(XMLEditorPluginImages.IMG_OBJ_TXTEXT)); } } else { column.setText(columnPropertiesArray[i]); } column.setAlignment(SWT.LEFT); layout.addColumnData(new ColumnWeightData(getColumnWidth(i), true)); } table.setLayout(layout); this.visibleRows = visibleRows; // for (int i = 0; i < visibleRows; i++) // { // TableItem item = new TableItem(table, SWT.NONE); // item.setText("#######"); // } // checkBoxCellEditor = new NamespaceInfoCheckboxCellEditor(table); // textCellEditor = new TextCellEditor(table); /* * CellEditor[] cellEditors = new * CellEditor[columnPropertiesArray.length]; for (int i = 0; i < * columnPropertiesArray.length; i++) { cellEditors[i] = * getCellEditor(i); } setCellEditors(cellEditors); */ // if (showCheckBoxes) // { // getTable().addMouseListener(new TableItemChecker()); // } } // protected CellEditor checkBoxCellEditor; // protected CellEditor textCellEditor; protected int[] createColumnIndexMap() { int[] result = new int[showCheckBoxes ? 4 : 3]; int i = 0; if (showCheckBoxes) { result[i++] = COLUMN_CHECKBOX; } result[i++] = COLUMN_PREFIX; result[i++] = COLUMN_NAMESPACE_URI; if (!showCheckBoxes) { result[i++] = COLUMN_LOCATION_HINT; } return result; } protected String[] createColumnPropertiesArray() { String[] result = new String[3]; int i = 0; if (showCheckBoxes) { result[i++] = LABEL_CHECKBOX; } result[i++] = LABEL_PREFIX; result[i++] = LABEL_NAMESPACE_URI; if (!showCheckBoxes) { result[i++] = LABEL_LOCATION_HINT; } return result; } protected int getColumnCode(int column) { int result = 0; if (column < columnIndexMap.length) { result = columnIndexMap[column]; } return result; } protected int getColumnWidth(int column) { int result = 0; switch (getColumnCode(column)) { case COLUMN_PREFIX : { result = 5; break; } case COLUMN_NAMESPACE_URI : { // Size columns differently when location hint text label is // displayed if (showLocationText) { result = 10; } else { result = 20; } break; } case COLUMN_CHECKBOX : { result = 1; // info.locationHint; break; } case COLUMN_LOCATION_HINT : { // Size columns differently when location hint text label is // displayed if (showLocationText) { result = 10; } else { result = 2; } break; } } return result; } /* * protected class NamespaceInfoCellModifier implements ICellModifier { * public NamespaceInfoCellModifier() { } * * public boolean canModify(Object element, String property) { if * (property.equals(LABEL_CHECKBOX)) { return true; } else if * (property.equals(LABEL_PREFIX)) { return true; } return false; } * * public Object getValue(Object element, String property) { int column = * 0; if (property.equals(LABEL_CHECKBOX)) { column = 0; } else if * (property.equals(LABEL_PREFIX)) { column = 1; } else if * (property.equals(LABEL_NAMESPACE_URI)) { column = 2; } * * //if (element instanceof TableElement) //{ // return * provider.getColumnText(element, column); //} //else //{ // return null; // } * return "hello"; } * * public void modify(Object element, String property, Object value) { } } * * protected class NamespaceInfoCheckboxCellEditor extends * CheckboxCellEditor implements MouseListener { public * NamespaceInfoCheckboxCellEditor(Composite parent) { super(parent); } * * protected void doSetValue(Object value) { } * * public void activate() { super.activate(); deactivate(); * Display.getCurrent().getFocusControl().redraw(); } * * public void mouseDown(MouseEvent e) { if (getTable().getItem(new * Point(e.x, e.y)) != null) { } } public void mouseDoubleClick(MouseEvent * e) { } public void mouseUp(MouseEvent e) { } } */ }