[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Is it TableTreeViewer Bug????

Peter Burka wrote:

> "Michal" <michalsv@xxxxxxxxxxx> wrote in message
> news:ajvn2q$tjg$1@xxxxxxxxxxxxxxxx
> > Hi
> > I have a major problem and I would like to know if its a bug.
> > When using TableTreeViewer with cell editors (TextCellEditor and
> > ComboCellEditor) it doesnt show in the edit mode state (second selection)
> > the editors.
> > In case of ComboCellEditor the list of items doesnt appear and in the
> > TextCellEditor the the corsur doesnt appear and there is no selection of
> > the text.
> > I checked the code on TableViewer and it works fine. So is it a bug or I
> > doing something wrong?


> Michal,

> Could you post a small program which demonstrates the problem?

> /peter

> --
> Peter Burka
> Object Technology International, Inc.


OK I have write an example for the problem
in the Data Type should appear combo box and in the comment column should
appear TextCellEditor
Thanks for your help
Michal


package src;

import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.ComboBoxCellEditor;
import org.eclipse.jface.viewers.ICellModifier;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TableTreeViewer;
import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.TableTree;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Item;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.ui.model.WorkbenchContentProvider;

/**
 * @author michal
 *
 * To change this generated comment edit the template variable
"typecomment":
 * Window>Preferences>Java>Templates.
 * To enable and disable the creation of type comments go to
 * Window>Preferences>Java>Code Generation.
 */

public class TableTreeBug {

	public TableTree tableTree;
	public TableTreeViewer viewer;
	public String[] columnLabels = { "Column Name", "Data Type", "Comments" };

	public String[] dataTypes = { "Int", "String", "Group" };
	public CellEditor[] editors = null;
	ColumnContentProvider contentProvider;

	public TableTreeBug() {

		contentProvider = new ColumnContentProvider();

		Shell shell = new Shell();
		GridLayout layout = new GridLayout();
		shell.setLayout(layout);
		//////////
		viewer =
			new TableTreeViewer(
				shell,
				SWT.FULL_SELECTION
					| SWT.HIDE_SELECTION
					| SWT.H_SCROLL
					| SWT.V_SCROLL
					| SWT.BORDER);

		GridData grid = new GridData(GridData.FILL_BOTH);
		grid.widthHint = 450;
		grid.heightHint = 200;
		viewer.getControl().setLayoutData(grid);

		tableTree = viewer.getTableTree();	

		// configure the widget
		Table table = tableTree.getTable();

		viewer.setContentProvider(contentProvider);
		viewer.setInput(contentProvider); 
		viewer.setLabelProvider(new TestTableProvider());
		viewer.setColumnProperties(columnLabels);

		editors = new CellEditor[3];
		editors[1] = new ComboBoxCellEditor(tableTree, dataTypes);

		editors[2] = new TextCellEditor(tableTree);

		viewer.setCellEditors(editors);
		viewer.setCellModifier(cellModifier);
		viewer.setColumnProperties(columnLabels);

		for (int col = 0; col < 3; col++) {

			TableColumn column = new TableColumn(table, SWT.NONE, col);

			column.setText(columnLabels[col]);

			column.setWidth(100);
			column.pack();

		}
		table.setLinesVisible(true);
		table.setHeaderVisible(true);

		shell.pack();
		shell.open();

		Display display = shell.getDisplay();

		while (!shell.isDisposed()) {

			if (!display.readAndDispatch())
				display.sleep();
		}
	}

	public class ColumnBaseObject {
		private String name;
		private String dataType = "int";
		private String comments = "11";

		public ColumnBaseObject(String n) {
			name = n;
		}
		public String getName() {
			return name;
		}
		public void setName(String n) {
			name = n;
		}
		public String getType() {
			return dataType;
		}
		public void setType(String t) {
			dataType = t;
		}
		public String getComments() {
			return comments;
		}
		public void setComments(String com) {
			comments = com;
		}

		public Integer getIntValue() {
			Integer res = null;
			res = new Integer(1);

			if (dataType == "")
				if (dataType == "Int")
					res = new Integer(1);
			if (dataType == "String")
				res = new Integer(1);
			if (dataType == "Group")
				res = new Integer(3);
			return res;
		}
	};

	private ICellModifier cellModifier = new ICellModifier() {
		public Object getValue(Object element, String property) {

			if (element instanceof ColumnBaseObject) {
				ColumnBaseObject col = (ColumnBaseObject) element;
				if (property.equals("Column Name"))
					return col;

				if (property.equals("Data Type")) {
					Integer i = col.getIntValue();
					return i;
				}

				if (property.equals("Comments"))
					return col.getComments();
			}
			return element;
		}

		public boolean canModify(Object element, String property) {

			return true;
		}
		public void modify(Object element, String property, Object value) {
			if (element instanceof Item) {

				Object ob = ((Item) element).getData();

				ColumnBaseObject col = (ColumnBaseObject) ob;

				if (property.equals("Data Type")) {
					Integer index = (Integer) value;

					col.setType(dataTypes[index.intValue()]);
					
					viewer.refresh();
				}
				if (property.equals("Comments"))
					col.setComments(value.toString());
					contentProvider.inputChanged(viewer, col, value);

				viewer.refresh();

			}

		}

	};
	public class ColumnContentProvider extends WorkbenchContentProvider {

		public Object[] arr = null;
		
		public void inputChanged(Viewer v, Object oldInput, Object newInput) {

			if (oldInput instanceof ColumnBaseObject) {
				
				// just to check update
				((ColumnBaseObject)arr[0]).setComments(newInput.toString());
				v.setInput(this);
				v.refresh();
			}

		}
		public void dispose() {
		}
		public Object[] getElements(Object parent) {
			if(arr == null){
			arr = new Object[3];	
			ColumnBaseObject col1 = new ColumnBaseObject("first");
			ColumnBaseObject col2 = new ColumnBaseObject("second");
			ColumnBaseObject col3 = new ColumnBaseObject("third");

			arr[0] = col1;
			arr[1] = col2;
			arr[2] = col3;
			}
			return arr;
		}

		public Object[] getChildren(Object parent) {

			return arr;
		}
		public boolean hasChildren(Object parent) {

			return false;
		}
	};

	class TestTableProvider
		extends LabelProvider
		implements ITableLabelProvider {
		public Image getColumnImage(Object element, int columnIndex) {
			return null;
		}
		public String getColumnText(Object element, int columnIndex) {

			ColumnBaseObject col = (ColumnBaseObject) element;
			switch (columnIndex) {
				case 0 : //Column  Name
					return col.getName();
				case 1 : // Data Type
					return col.getType();
				case 2 : // comment
					return col.getComments();
				default :
					return "problem";
			}
		}
	}

	public static void main(String[] args) {
		TableTreeBug bug = new TableTreeBug();
	}
}