/*******************************************************************************
* Copyright (c) 2007-2008 Peter Centgraf.
* 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 :
* Peter Centgraf - initial implementation
*******************************************************************************/
package org.eclipse.nebula.jface.galleryviewer;
import java.util.LinkedList;
import org.eclipse.jface.viewers.TreePath;
import org.eclipse.jface.viewers.ViewerRow;
import org.eclipse.nebula.widgets.gallery.GalleryItem;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Widget;
/**
* ViewerRow adapter for the Nebula Gallery widget.
*
* @author Peter Centgraf
* @since Dec 5, 2007
*/
public class GalleryViewerRow extends ViewerRow {
protected GalleryItem item;
/**
* Constructs a ViewerRow adapter for a GalleryItem.
*
* @param item
* the GalleryItem to adapt
*/
public GalleryViewerRow(GalleryItem item) {
this.item = item;
}
public void setItem(GalleryItem item) {
this.item = item;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.ViewerRow#clone()
*/
public Object clone() {
return new GalleryViewerRow(item);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.ViewerRow#getBackground(int)
*/
public Color getBackground(int columnIndex) {
// XXX: should this use getBackgroundColor() instead?
return item.getBackground();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.ViewerRow#getBounds()
*/
public Rectangle getBounds() {
return item.getBounds();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.ViewerRow#getBounds(int)
*/
public Rectangle getBounds(int columnIndex) {
return item.getBounds();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.ViewerRow#getColumnCount()
*/
public int getColumnCount() {
return 0;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.ViewerRow#getControl()
*/
public Control getControl() {
return item.getParent();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.ViewerRow#getElement()
*/
public Object getElement() {
return item.getData();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.ViewerRow#getFont(int)
*/
public Font getFont(int columnIndex) {
return item.getFont();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.ViewerRow#getForeground(int)
*/
public Color getForeground(int columnIndex) {
return item.getForeground();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.ViewerRow#getImage(int)
*/
public Image getImage(int columnIndex) {
return item.getImage();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.ViewerRow#getItem()
*/
public Widget getItem() {
return item;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.ViewerRow#getNeighbor(int, boolean)
*/
public ViewerRow getNeighbor(int direction, boolean sameLevel) {
if (direction == ViewerRow.ABOVE) {
// TODO: handle grouping
return getRowAbove();
} else if (direction == ViewerRow.BELOW) {
// TODO: handle grouping
return getRowBelow();
} else {
throw new IllegalArgumentException("Illegal value of direction argument."); //$NON-NLS-1$
}
}
protected ViewerRow getRowAbove() {
if (item.getParentItem() == null) {
int index = item.getParent().indexOf(item) - 1;
if (index >= 0) {
return new GalleryViewerRow(item.getParent().getItem(index));
}
} else {
GalleryItem parentItem = item.getParentItem();
int index = parentItem.indexOf(item) - 1;
if (index >= 0) {
return new GalleryViewerRow(parentItem.getItem(index));
}
}
return null;
}
protected ViewerRow getRowBelow() {
if (item.getParentItem() == null) {
int index = item.getParent().indexOf(item) + 1;
if (index < item.getParent().getItemCount()) {
GalleryItem tmp = item.getParent().getItem(index);
if (tmp != null) {
return new GalleryViewerRow(tmp);
}
}
} else {
GalleryItem parentItem = item.getParentItem();
int index = parentItem.indexOf(item) + 1;
if (index < parentItem.getItemCount()) {
GalleryItem tmp = parentItem.getItem(index);
if (tmp != null) {
return new GalleryViewerRow(tmp);
}
}
}
return null;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.ViewerRow#getText(int)
*/
public String getText(int columnIndex) {
return item.getText();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.ViewerRow#getTreePath()
*/
public TreePath getTreePath() {
LinkedList path = new LinkedList();
path.add(item.getData());
GalleryItem curItem = item;
while (curItem.getParentItem() != null) {
path.addFirst(curItem.getParentItem().getData());
curItem = curItem.getParentItem();
}
return new TreePath(path.toArray());
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.ViewerRow#setBackground(int,
* org.eclipse.swt.graphics.Color)
*/
public void setBackground(int columnIndex, Color color) {
item.setBackground(color);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.ViewerRow#setFont(int,
* org.eclipse.swt.graphics.Font)
*/
public void setFont(int columnIndex, Font font) {
item.setFont(font);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.ViewerRow#setForeground(int,
* org.eclipse.swt.graphics.Color)
*/
public void setForeground(int columnIndex, Color color) {
item.setForeground(color);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.ViewerRow#setImage(int,
* org.eclipse.swt.graphics.Image)
*/
public void setImage(int columnIndex, Image image) {
Image oldImage = item.getImage();
if (image != oldImage) {
item.setImage(image);
}
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.ViewerRow#setText(int, java.lang.String)
*/
public void setText(int columnIndex, String text) {
item.setText(text == null ? "" : text);
}
}