/******************************************************************************* * 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.editor; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import org.jboss.tools.common.model.ui.IValueChangeListener; import org.jboss.tools.common.model.ui.IValueProvider; import org.jboss.tools.common.model.ui.wizards.query.list.TreeItemSelectionManager; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.viewers.IContentProvider; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.TreeItem; import org.jboss.tools.common.model.ui.viewers.xpl.ICheckable; import org.jboss.tools.common.model.ui.widgets.IWidgetSettings; /** * @author au */ public class CheckTreeFieldEditor extends ExtendedFieldEditor implements IFieldEditor, IPropertyFieldEditor, IPropertyChangeListener, PropertyChangeListener { protected IPropertyEditor propertyEditor; protected IValueChangeListener valueChangeListener; protected IValueProvider valueProvider; protected IContentProvider contentProvider; protected ILabelProvider labelProvider; // ISelectionEditor protected ISelectionChangedListener selectionChangedListener; protected ISelectionProvider selectionProvider; private String stringValue; private TreeViewer viewer; public CheckTreeFieldEditor() {} public CheckTreeFieldEditor(IWidgetSettings settings) { super(settings); } protected void adjustForNumColumns(int numColumns) { Control control = getLabelComposite(); ((GridData)control.getLayoutData()).horizontalSpan = numColumns; ((GridData)viewer.getControl().getLayoutData()).horizontalSpan = numColumns - 1; } protected void doFillIntoGrid(Composite parent, int numColumns) { Control control = getLabelComposite(parent); GridData gd = new GridData(); gd.horizontalSpan = numColumns; gd.verticalAlignment = GridData.GRAB_VERTICAL; control.setLayoutData(gd); getListControl(parent); gd = new GridData(GridData.FILL_BOTH); gd.horizontalSpan = numColumns; gd.grabExcessHorizontalSpace = true; viewer.getControl().setLayoutData(gd); } protected void doLoad() { } protected void doLoadDefault() { } protected void doStore() { } public int getNumberOfControls() { return 2; } public Control[] getControls(Composite parent) { return new Control[] {getLabelComposite(parent), getListControl(parent)}; } private Control getListControl(Composite parent) { if(viewer != null && !viewer.getControl().isDisposed()) return viewer.getControl(); viewer = new TreeViewer(parent); viewer.setAutoExpandLevel(2); viewer.setContentProvider(contentProvider); viewer.setLabelProvider(labelProvider); viewer.setInput(contentProvider); new TreeItemSelectionManager(viewer, new Flipper()); // ISelectionProvider if (selectionProvider!=null) { viewer.setSelection(selectionProvider.getSelection(), true); //selectionProvider.addSelectionChangedListener(this); } if (selectionChangedListener!=null) { viewer.addSelectionChangedListener(selectionChangedListener); } return viewer.getControl(); } protected void init() { this.stringValue = valueProvider.getStringValue(true); } public void dispose() { super.dispose(); // if (viewer!=null && viewer.getTree()!=null) viewer.getTree().removeMouseListener(mouseAdapter); // mouseAdapter = null; if (viewer!=null && viewer.getTree()!=null && !viewer.getTree().isDisposed()) viewer.getTree().dispose(); viewer = null; propertyEditor = null; valueChangeListener = null; valueProvider = null; contentProvider = null; labelProvider = null; } public void setEnabled(boolean enabled){ super.setEnabled(enabled); } public void setPropertyEditor(IPropertyEditor propertyEditor) { this.propertyEditor = propertyEditor; if (propertyEditor!=null) { valueProvider = (IValueProvider)propertyEditor.getAdapter(IValueProvider.class); valueChangeListener = (IValueChangeListener)propertyEditor.getAdapter(IValueChangeListener.class); contentProvider = (IContentProvider)propertyEditor.getAdapter(ITreeContentProvider.class); labelProvider = (ILabelProvider)propertyEditor.getAdapter(ILabelProvider.class); selectionChangedListener = (ISelectionChangedListener)propertyEditor.getAdapter(ISelectionChangedListener.class); selectionProvider = (ISelectionProvider)propertyEditor.getAdapter(ISelectionProvider.class); // Object input = propertyEditor.getInput(); } init(); } public void propertyChange(PropertyChangeEvent event) { } public void propertyChange(org.eclipse.jface.util.PropertyChangeEvent event) { } class Flipper implements TreeItemSelectionManager.Listener { public void flip(TreeItem item) { Object checkItem = item.getData(); if (checkItem instanceof ICheckable) { ((ICheckable)checkItem).toggle(checkItem); } viewer.refresh(); } public boolean isSelected(Object data) { if(data instanceof ICheckable) { ICheckable o = (ICheckable)data; return o.getState(null) != 0; } return false; } } protected void valueChanged(String newValue) { String oldValue = stringValue; this.stringValue = newValue; PropertyChangeEvent event = new PropertyChangeEvent(this, IPropertyEditor.VALUE, oldValue, newValue); valueChangeListener.valueChange(event); } public void cut() { } public void copy() { } public void paste() { } public void delete() { } }