/******************************************************************************* * Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is 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: * Exadel, Inc. and Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.common.model.ui.attribute.adapter; import java.util.*; import org.eclipse.core.runtime.IAdaptable; import org.jboss.tools.common.model.ui.IStructuredChangeListener; import org.jboss.tools.common.model.ui.StructuredChangedEvent; import org.eclipse.jface.viewers.*; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.jboss.tools.common.model.ui.actions.IActionProvider; /** * @author au */ public class DefaultTableStructuredAdapter implements IAdaptable, ITableAdapter, ISelectionChangedListener, ISelectionProvider { private IActionProvider actionProvider; private List<ColumnDescription> columnsDescription = new ArrayList<ColumnDescription>(); public Object getAdapter(Class adapter) { if (adapter == IActionProvider.class) { return getActionProvider(); } if (adapter == ITableAdapter.class) { return this; } if (adapter == ISelectionProvider.class) { return this; } return null; } /* * Warning! The @style attribute cannot use in this method. * @see org.jboss.tools.common.model.ui.attribute.adapter.ITableAdapter#createTableColumn(org.eclipse.swt.widgets.Table, int) */ public TableColumn[] createTableColumn(Table table, int style) { List<TableColumn> columns = new ArrayList<TableColumn>(); Iterator i = getColumnsDescription().iterator(); TableLayout layout = new TableLayout(); ColumnDescription description; TableColumn column; ColumnLayoutData layoutData; while (i.hasNext()) { description = (ColumnDescription)i.next(); column = new TableColumn(table, description.getStyle()); column.setText(description.getName()); column.setData(description.getData()); //column.setResizable(description.isResizeable()); //column.setWidth(description.getWidth()); column.setImage(description.getImage()); layoutData = new ColumnWeightData(description.getWidth(), description.isResizeable()); layout.addColumnData(layoutData); columns.add(column); } table.setLayout(layout); // if(getColumnsDescription().size() < 4) { // // Cannot guarantee nice work for many columns (glory) // table.addControlListener(new Resize(table)); // } return (TableColumn[])columns.toArray(new TableColumn[columns.size()]); } private ArrayList<IStructuredChangeListener> structureChangeListener = new ArrayList<IStructuredChangeListener>(); public void addStructureChangeListener(IStructuredChangeListener listener) { structureChangeListener.add(listener); } public void removeStructureChangeListener(IStructuredChangeListener listener) { structureChangeListener.remove(listener); } protected void fireStructureChange() { // updateValue(); ArrayList<IStructuredChangeListener> copy = new ArrayList<IStructuredChangeListener>(); copy.addAll(structureChangeListener); Iterator i = copy.iterator(); while(i.hasNext()){ ((IStructuredChangeListener)i.next()).structureChanged(new StructuredChangedEvent(this)); } copy.clear(); // if (actionProvider!=null) { // actionProvider.setXModelObject(selectedObject); // } } private ITableLabelProvider tableLabelProvider = new DefaultTableLabelProvider(); public ITableLabelProvider getTableLabelProvider() { return tableLabelProvider; } public void setTableLabelProvider(ITableLabelProvider tableLabelProvider) { this.tableLabelProvider = tableLabelProvider; } private Object[] value; public Object[] getElements(Object inputElement) { if (this.value==null) return new Object[0]; return (Object[])this.value; } public void dispose() { } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } public Color getForeground(Object element) { return null; } public Color getBackground(Object element) { return null; } // private SelectionChangedEvent selectionChangedEvent; private Object selectedObject; public void selectionChanged(SelectionChangedEvent event) { // this.selectionChangedEvent = event; if (event.getSelection() instanceof StructuredSelection) { StructuredSelection structuredSelection = (StructuredSelection)event.getSelection(); Object object = structuredSelection.getFirstElement(); this.selectedObject = object; } this.fireSelectionChange(); } // ***************************** // * ISelectionProvider // ***************************** private ArrayList<ISelectionChangedListener> selectionChangeListener = new ArrayList<ISelectionChangedListener>(); private ISelection selection; public void addSelectionChangedListener(ISelectionChangedListener listener) { selectionChangeListener.add(listener); } public ISelection getSelection() { if(selectedObject == null) { selection = new StructuredSelection(); } else { selection = new StructuredSelection(new Object[] {this.selectedObject}); } return selection; } public void removeSelectionChangedListener(ISelectionChangedListener listener) { selectionChangeListener.remove(listener); } public void setSelection(ISelection selection) { this.selection = selection; } protected void fireSelectionChange() { ArrayList<ISelectionChangedListener> copy = new ArrayList<ISelectionChangedListener>(selectionChangeListener); Iterator i = copy.iterator(); while(i.hasNext()){ ((ISelectionChangedListener)i.next()).selectionChanged(new SelectionChangedEvent(this, getSelection())); } copy.clear(); } public IActionProvider getActionProvider() { return actionProvider; } public void setActionProvider(IActionProvider actionProvider) { this.actionProvider = actionProvider; } public List<ColumnDescription> getColumnsDescription() { return columnsDescription; } public void addColumnDescription(ColumnDescription description) { this.getColumnsDescription().add(description); } public Object[] getValue() { return value; } public void setValue(Object[] value) { if(this.value != value) { selectedObject = null; if(actionProvider != null) { actionProvider.update(getSelection()); } } this.value = value; fireStructureChange(); } class DefaultTableLabelProvider implements ITableLabelProvider { public Image getColumnImage(Object element, int columnIndex) { return null; } public String getColumnText(Object element, int columnIndex) { return element.toString(); } public void addListener(ILabelProviderListener listener) { } public void dispose() { } public boolean isLabelProperty(Object element, String property) { return Boolean.TRUE.booleanValue(); } public void removeListener(ILabelProviderListener listener) { } } }