/*******************************************************************************
* 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.editors.dnd.composite;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.ColumnPixelData;
import org.eclipse.jface.viewers.ICheckStateListener;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.TableLayout;
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.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.jboss.tools.common.model.ui.editors.dnd.DropData;
import org.jboss.tools.common.model.ui.editors.dnd.IDropWizardModel;
import org.jboss.tools.common.model.ui.editors.dnd.ITagProposal;
import org.jboss.tools.common.model.ui.editors.dnd.ITagProposalFactory;
public class TagProposalsComposite extends Composite {
private ITagProposal selection = IDropWizardModel.UNDEFINED_TAG_PROPOSAL;
CheckboxTableViewer tableTreeViewer;
ITagProposal[] fTagProposals;
IDropWizardModel fModel;
public TagProposalsComposite(Composite parent, int styles,IDropWizardModel model) {
super(parent,styles);
fModel = model;
fTagProposals =
model.getTagProposalFactory().getProposalLoader(
fModel.getDropData().getMimeType()
).getTagProposals(
fModel.getDropData()
);
GridLayout layout = new GridLayout();
layout.marginWidth = 0;
layout.marginHeight = 0;
layout.numColumns = 1;
setLayout(layout);
GridData data = new GridData(GridData.FILL_BOTH);
setLayoutData(data);
Table swtTable = new Table(this, SWT.BORDER | SWT.FULL_SELECTION | SWT.V_SCROLL | SWT.H_SCROLL | SWT.SINGLE | SWT.CHECK);
data = new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL);
TableLayout tableLayout = new TableLayout();
tableTreeViewer =
new CheckboxTableViewer(swtTable);
swtTable.setLayout(tableLayout);
swtTable.setLayoutData(data);
swtTable.setHeaderVisible(true);
swtTable.setLinesVisible(true);
tableLayout.addColumnData(new ColumnPixelData(150));
TableColumn col = new TableColumn(swtTable, SWT.NONE);
col.setText("Tag name");
tableLayout.addColumnData(new ColumnPixelData(250));
col = new TableColumn(swtTable, SWT.NONE);
col.setText("URI");
tableTreeViewer.setColumnProperties(new String[] {"Tag Name", "URI"});
tableTreeViewer.addCheckStateListener(
new ICheckStateListener() {
public void checkStateChanged(CheckStateChangedEvent event) {
ITagProposal proposal = (ITagProposal)event.getElement();
if (event.getChecked()) {
if(selection!=IDropWizardModel.UNDEFINED_TAG_PROPOSAL) {
tableTreeViewer.setChecked(selection, false);
}
selection = proposal;
} else {
selection = IDropWizardModel.UNDEFINED_TAG_PROPOSAL;
}
fModel.setTagProposal(selection);
}
}
);
tableTreeViewer.setContentProvider(
new IStructuredContentProvider() {
public Object[] getElements(Object inputElement) {
return fTagProposals;
}
public void dispose() {
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
}
);
tableTreeViewer.setLabelProvider(
new ITableLabelProvider () {
public static final int TAG_NAME_INDEX = 0;
public static final int TAG_URI_INDEX = 1;
public Image getColumnImage(Object element, int columnIndex) {
return null;
}
public String getColumnText(Object element, int columnIndex) {
ITagProposal prop = (ITagProposal)element;
switch (columnIndex) {
case TAG_NAME_INDEX:
return prop.getDisplayString();
case TAG_URI_INDEX:
return prop.getDetails();
}
throw new IllegalArgumentException("Wrong column index for LabelProvider"); //$NON-NLS-1$
}
public void addListener(ILabelProviderListener listener) {
}
public void dispose() {
}
public boolean isLabelProperty(Object element, String property) {
return false;
}
public void removeListener(ILabelProviderListener listener) {
}
}
);
tableTreeViewer.setInput("ROOT");
}
/// public void setTagProposalsSelectionListener(ITagProposalSelectionListener l) {
/// listener = l;
/// }
public ITagProposal[] getTagProposals() {
return fTagProposals;
}
public boolean hasTagProposals() {
return getTagProposals().length>0;
}
public static boolean areThereTagProposals(String mimeType,DropData dropData, ITagProposalFactory tagProposalFactory) {
return tagProposalFactory.getProposalLoader(mimeType).getTagProposals(dropData).length>0;
}
public static ITagProposal[] getTagProposals(String mimeType,DropData dropData, ITagProposalFactory tagProposalFactory) {
return tagProposalFactory.getProposalLoader(mimeType).getTagProposals(dropData);
}
}