| //------------------------------------------------------------------------------ |
| // Copyright (c) 2005, 2007 IBM Corporation and others. |
| // All rights reserved. This program and the accompanying materials |
| // are 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: |
| // IBM Corporation - initial implementation |
| //------------------------------------------------------------------------------ |
| package org.eclipse.epf.authoring.ui.views; |
| |
| import org.eclipse.epf.authoring.ui.celleditors.AbstractCheckBoxCellEditor; |
| import org.eclipse.jface.viewers.ICellModifier; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.events.MouseAdapter; |
| import org.eclipse.swt.events.MouseEvent; |
| import org.eclipse.swt.graphics.Image; |
| import org.eclipse.swt.graphics.Point; |
| import org.eclipse.swt.graphics.Rectangle; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Control; |
| import org.eclipse.swt.widgets.Event; |
| import org.eclipse.swt.widgets.Item; |
| import org.eclipse.swt.widgets.Listener; |
| import org.eclipse.swt.widgets.TreeColumn; |
| import org.eclipse.swt.widgets.TreeItem; |
| |
| /** |
| * Displays the Process elements in a tree table viewer. |
| * |
| * @author Phong Nguyen Le |
| * @author Shilpa Toraskar |
| * @since 1.0 |
| */ |
| public class ProcessViewer extends ProcessTreeViewer { |
| |
| private String[] columnProperties; |
| |
| private AbstractCheckBoxCellEditor[] checkBoxCellEditors = null; |
| |
| /** |
| * Creates a new instance. |
| */ |
| public ProcessViewer(Composite parent, int style) { |
| super(parent, style); |
| } |
| |
| /** |
| * Return parent - underlying tree |
| * |
| * @return parent |
| */ |
| public Composite getCellEditorParent() { |
| return getTree(); |
| } |
| |
| /** |
| * Set check box cell editors |
| * |
| * @param checkBoxCellEditors |
| */ |
| public void setCheckBoxCellEditors( |
| AbstractCheckBoxCellEditor[] checkBoxCellEditors) { |
| this.checkBoxCellEditors = checkBoxCellEditors; |
| for (int i = 0; i < checkBoxCellEditors.length; i++) { |
| AbstractCheckBoxCellEditor editor = checkBoxCellEditors[i]; |
| if (editor == null) |
| continue; |
| editor.setColumnIndex(i); |
| } |
| } |
| |
| /** |
| * @see org.eclipse.epf.authoring.ui.views.ProcessTreeViewer#hookControl(org.eclipse.swt.widgets.Control) |
| */ |
| protected void hookControl(Control control) { |
| super.hookControl(control); |
| getTree().addMouseListener(new MouseAdapter() { |
| public void mouseDown(MouseEvent e) { |
| modifyItem(e); |
| } |
| }); |
| // getTree().addMouseMoveListener(new MouseMoveListener(){ |
| // public void mouseMove(MouseEvent e){ |
| // setUnsetEditor(e); |
| // } |
| // }); |
| Listener paintListener = new Listener() { |
| public void handleEvent(Event event) { |
| switch (event.type) { |
| case SWT.PaintItem: { |
| // System.out.println("event.index = "+ event.index); |
| Image image = getCheckBoxCellEditorImage(event); |
| if (image == null) |
| return; |
| TreeColumn col = getTree().getColumn(event.index); |
| int x = event.x + col.getWidth() / 2; |
| Rectangle rect = image.getBounds(); |
| int offset = Math.max(0, (event.height - rect.height) / 2); |
| event.gc.drawImage(image, x - rect.width / 2, event.y |
| + offset); |
| break; |
| } |
| } |
| } |
| }; |
| getTree().addListener(SWT.PaintItem, paintListener); |
| } |
| |
| /** |
| * @see org.eclipse.epf.authoring.ui.views.ProcessTreeViewer#doUpdateItem(org.eclipse.swt.widgets.Item, |
| * java.lang.Object) |
| */ |
| protected void doUpdateItem(Item item, Object element) { |
| super.doUpdateItem(item, element); |
| |
| if (checkBoxCellEditors != null && columnProperties != null |
| && columnProperties.length > 0) { |
| for (int i = 0; i < checkBoxCellEditors.length; i++) { |
| AbstractCheckBoxCellEditor editor = checkBoxCellEditors[i]; |
| if (editor == null) |
| continue; |
| ((TreeItem) item).setText(i, ""); //$NON-NLS-1$ |
| |
| } |
| } |
| |
| } |
| |
| private Image getCheckBoxCellEditorImage(Event event) { |
| return getCheckBoxCellEditorImage(event.index, (TreeItem) event.item); |
| } |
| |
| private Image getCheckBoxCellEditorImage(int columnIndex, TreeItem item) { |
| if (checkBoxCellEditors == null |
| || checkBoxCellEditors[columnIndex] == null) |
| return null; |
| return checkBoxCellEditors[columnIndex].getImage(item, |
| columnProperties[columnIndex]); |
| } |
| |
| /** |
| * @see org.eclipse.jface.viewers.TreeViewer#setCellModifier(org.eclipse.jface.viewers.ICellModifier) |
| */ |
| public void setCellModifier(ICellModifier modifier) { |
| super.setCellModifier(modifier); |
| |
| if (checkBoxCellEditors != null) { |
| for (int i = 0; i < checkBoxCellEditors.length; i++) { |
| AbstractCheckBoxCellEditor editor = checkBoxCellEditors[i]; |
| if (editor == null) |
| continue; |
| editor.setCellModifier(modifier); |
| } |
| } |
| } |
| |
| /** |
| * This method is used for mouse down listener |
| * |
| * @param event |
| */ |
| private void modifyItem(MouseEvent event) { |
| Point pt = new Point(event.x, event.y); |
| TreeItem item = getTree().getItem(pt); |
| if (item == null) |
| return; |
| |
| for (int i = 0; i < getTree().getColumnCount(); i++) { |
| Rectangle rect = item.getBounds(i); |
| if (rect.contains(pt)) { |
| Image image = getCheckBoxCellEditorImage(i, item); |
| if (image == null) |
| return; |
| Rectangle imgRect = image.getBounds(); |
| int offset = Math.max(0, (rect.height - imgRect.height) / 2); |
| int x = rect.x + rect.width / 2 - imgRect.width / 2; |
| int y = rect.y + offset; |
| imgRect = new Rectangle(x, y, imgRect.width, imgRect.height); |
| if (imgRect.contains(pt)) { |
| checkBoxCellEditors[i].modify(item, columnProperties[i]); |
| return; |
| } |
| } |
| } |
| } |
| |
| /** |
| * @see org.eclipse.jface.viewers.TreeViewer#setColumnProperties(java.lang.String[]) |
| */ |
| public void setColumnProperties(String[] columnProperties) { |
| super.setColumnProperties(columnProperties); |
| this.columnProperties = columnProperties; |
| } |
| } |