TreeViewer CheckBoxCellEditor

stophl

Grünschnabel
Hallo,

ich habe einen TreeViewer erstellt (Code poste ich unten) und dazu auch noch zwei Spalten. Also es sind insgesamt drei Spalten, in der ersten der Tree und zwei zusätzlich. Ich möchte in den zusätzlichen Spalten Checkboxen haben. Wie kann ich das machen. Zeige euch mal meinen Code, vielleicht kann mir der eine oder andere Helfen. Wäre euch dankbar.
Code:
public class TreeView extends ViewPart 
{
	private TreeViewer treeviewer;
	private String[] str = new String[] {"Baum", "doit", "Datum"};

	public TreeView() 
	{
	}

	public void createPartControl(Composite parent) 
	{
		treeviewer = new TreeViewer(parent, SWT.SINGLE| SWT.V_SCROLL | SWT.H_SCROLL | SWT.VIRTUAL);
		treeviewer.getTree().setHeaderVisible(true);
		
		
		TreeColumn treecolumn = new TreeColumn(treeviewer.getTree(), SWT.NONE);
		treecolumn.setWidth(150);
		treecolumn.setText(str[0]);
		TreeColumn treecolumn1 = new TreeColumn(treeviewer.getTree(), SWT.NONE);
		treecolumn1.setWidth(150);
		treecolumn1.setText(str[1]);
		TreeColumn treecolumn2 = new TreeColumn(treeviewer.getTree(), SWT.NONE);
		treecolumn2.setWidth(100);
		treecolumn2.setText(str[2]);
		treeviewer.getTree().setEnabled(true);
//		treecolumn2.addSelectionListener(new SelectionColumn());
//		treeviewer.addSelectionChangedListener(new SelectionChangeListen());


		treeviewer.setContentProvider(new TreeViewContentP());
		treeviewer.setLabelProvider(new TreeViewLabelP());
		addCheckbox();
		treeviewer.setInput(getViewSite());
	}
	
	public void setEnable()
	{
		System.out.println("mist");
		if(treeviewer.getTree().isEnabled() == false)
		treeviewer.getTree().setEnabled(true);
		else
		treeviewer.getTree().setEnabled(false);
	}

	public void newColumn()
	{
		InputDialog inputdialog = new InputDialog(new Shell(), "neue Spalte", "Bitte Spaltenname eingeben",
				null,null);
		if(inputdialog.open() == inputdialog.OK)
		{
			String result = inputdialog.getValue();
			TreeColumn treecolumn = new TreeColumn(treeviewer.getTree(), 0);
			treecolumn.setWidth(100);
			treecolumn.setText(result);
		}
	}
	
	public void addCheckbox()
	{

		final CellEditor[] editors = new CellEditor[treeviewer.getTree().getColumnCount()];
		editors[2] = new CheckboxCellEditor(treeviewer.getTree());
		editors[1] = new CheckboxCellEditor(treeviewer.getTree());
		editors[0] = new CheckboxCellEditor(treeviewer.getTree());
		treeviewer.setColumnProperties(str);
		treeviewer.setCellModifier(new CellModi());
		treeviewer.setCellEditors(editors);	
		
	}
	
	public void setFocus() 
	{
		treeviewer.getTree().setFocus();
	}
	
	public TreeViewer getTreeViewer()
	{
		return treeviewer;
	}

	public String[] getStr() {
		return str;
	}

	public void setStr(String[] str) {
		this.str = str;
	}

}

und mein ICellModifier:
Code:
public class CellModi implements ICellModifier 
{
	TreeView viewer;
	
	public boolean canModify(Object element, String property) 
	{
		System.out.print("canModify: "+property+" * ");
		System.out.println("element: "+element.toString());
		return true;
	}

	public Object getValue(Object element, String property) 
	{
		System.out.print(property + " - ");
		if(element instanceof Funktionen)
		{
			Funktionen f = (Funktionen)element;
			System.out.print("getValue - ");
			if(property.equals("doit"))
			{
				System.out.println("doit");

				return Boolean.valueOf(f.isCheck());
			}
			else if(property.equals("Datum"))
			{
				System.out.println("Datum");
				return Boolean.valueOf(f.isCheck());
			}
			
			else if(property.equals("Baum"))
			{
				System.out.println("Baum");
				return f.getName();
				
			}
			else
			{
			return null;
			}
		}
		return null;

	}

	public void modify(Object element, String property, Object value) 
	{
		System.out.print("modify - ");
		TreeItem treeitem = (TreeItem) element;
			Funktionen f = (Funktionen) treeitem.getData();
			if(property.equals("Baum"))
			{
				System.out.println(f.getName());
				//f.setCheck(((Boolean) value).booleanValue());
			}
			else if(property.equals("doit"))
			{
				System.out.println(f.getDoit());
				f.setCheck(((Boolean) value).booleanValue());
			}
			
			else if(property.equals("Datum"))
			{
				f.setCheck(((Boolean) value).booleanValue());
			}

	}

}

mein ContentProvider
Code:
public class TreeViewContentP implements ITreeContentProvider 
{
	private FunktionModul inroot = null;

	public Object[] getElements(Object inputElement) 
	{
			if(inroot == null)
			{
				initialize();
				return getChildren(inroot);
			}
		return getChildren(inputElement);
	}

	public Object[] getChildren(Object parentElement) 
	{
		if(parentElement instanceof FunktionModul)
		{
			return ((FunktionModul) parentElement).getChildren();
		}
		return new Object[0];
	}

	public Object getParent(Object element) 
	{
		if(element instanceof Funktionen)
		{
			return ((Funktionen) element).getParent();
		}
		return null;
	}

	public boolean hasChildren(Object parentElement) 
	{
		if(parentElement instanceof FunktionModul)
		return ((FunktionModul) parentElement).hasChildren();
		return false;
	}
	
	public void dispose() 
	{
		// TODO nothing yet

	}

	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) 
	{
		// nothing

	}

	private void initialize() 
	{
		
		Funktionen to1 = new Funktionen();
		Funktionen to2 = new Funktionen();
		Funktionen to3 = new Funktionen();
		to3.init("Licht","07.04.2004","an");
		to2.init("Kofferraum","02.08.2006","Kofferraum öffnen");
		to1.init("Türe","12.08.2009","Türe öffnen");
		
		FunktionModul p1 = new FunktionModul("Auto");
		p1.addChild(to1);
		p1.addChild(to2);
		p1.addChild(to3);
		
		Funktionen to4 = new Funktionen();
		to4.init("Kaffeemaschine","20.08.2008","leeren");
		FunktionModul p2 = new FunktionModul("Haushalt");
		p2.addChild(to4);
		
		FunktionModul root = new FunktionModul("Root");
		root.addChild(p1);
		root.addChild(p2);
		
		inroot = new FunktionModul("nothing");
		inroot.addChild(root);
	}
	
}

und natürlich LabelProvider
Code:
public class TreeViewLabelP implements ITableLabelProvider 
{
	private TreeView viewer; 
	
	public Image getColumnImage(Object element, int columnIndex) 
	{
		if(element instanceof Funktionen)
		{
			switch(columnIndex)
			{
			case 0:
				{
					if( ((Funktionen)element).isCheck() == false )
					{
						return PlatformUI.getWorkbench().
						getSharedImages().getImage(ISharedImages.IMG_TOOL_PASTE);
					}
					else
					{
						return null;
					}
				}
				
			case 1:
			{
				if( ((Funktionen)element).isCheck() == false )
				{
					return null;
				}
				else
				{
					return PlatformUI.getWorkbench().
					getSharedImages().getImage(ISharedImages.IMG_OBJS_INFO_TSK);
				}
			}
			
			case 2:
			{
				if( ((Funktionen)element).isCheck() == false )
				{
					return PlatformUI.getWorkbench().
					getSharedImages().getImage(ISharedImages.IMG_OBJ_FOLDER);
				}
				else
				{
					return null;
				}
			}
			
			
			}
			
			/*
			switch(columnIndex)
			{
			case 0: 
				{
					//System.out.println(element.toString());
					return null;
				}
			case 1:
				{
					if(((Funktionen)element).getDoit() != null)
					{
						return null;
//						return PlatformUI.getWorkbench().
//							getSharedImages().getImage(ISharedImages.IMG_TOOL_PASTE);
					}
					else
					{
						return null;
					}
				}
				
			case 2:
				{
					if(((Funktionen)element).getDatum() != null)
						return null;
//						return PlatformUI.getWorkbench().
//							getSharedImages().getImage(ISharedImages.IMG_OBJ_FILE);
					else
						return null;
				}
			}*/
		}
		return null;
	}

	public String getColumnText(Object element, int columnIndex) 
	{
		if(element instanceof Funktionen)
		{
			switch(columnIndex)
			{
				case 0: 
					{
						return ((Funktionen)element).getName();
					}
				case 1: 
					{
						return Boolean.toString(((Funktionen)element).isCheck());
					}
				case 2: 
					{
						return null;
					}
			}
		}
		return "";
	}
	
	
	public void addListener(ILabelProviderListener listener) 
	{
		// TODO Auto-generated method stub

	}

	public void dispose() 
	{
		// TODO Auto-generated method stub

	}

	public boolean isLabelProperty(Object element, String property) 
	{
		// TODO Auto-generated method stub
		return false;
	}

	public void removeListener(ILabelProviderListener listener) 
	{
		// TODO Auto-generated method stub

	}

}

Ich danke euch schon mal für eure Hilfe?!
 
Zurück