/*******************************************************************************
* Copyright (c) 2000, 2009, 2012 IBM Corporation, Gerhardt Informatics Kft. 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 API and implementation
* Gerhardt Informatics Kft. - GEFGWT port
*******************************************************************************/
package org.eclipse.swt.widgets;
import org.eclipse.swt.SWT;
import org.eclipse.swt.SWTException;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Rectangle;
/**
* Instances of this class represent a selectable user interface object that
* represents an item in a table.
* <dl>
* <dt><b>Styles:</b></dt>
* <dd>(none)</dd>
* <dt><b>Events:</b></dt>
* <dd>(none)</dd>
* </dl>
* <p>
* IMPORTANT: This class is <em>not</em> intended to be subclassed.
* </p>
*
* @see <a href="http://www.eclipse.org/swt/snippets/#table">Table, TableItem,
* TableColumn snippets</a>
* @see <a href="http://www.eclipse.org/swt/">Sample code and further
* information</a>
* @noextend This class is not intended to be subclassed by clients.
*/
public class TableItem extends Item {
Table parent;
Font font;
Font[] cellFont;
boolean cached, grayed;
/**
* Constructs a new instance of this class given its parent (which must be a
* <code>Table</code>), a style value describing its behavior and
* appearance, and the index at which to place it in the items maintained by
* its parent.
* <p>
* The style value is either one of the style constants defined in class
* <code>SWT</code> which is applicable to instances of this class, or must
* be built by <em>bitwise OR</em>'ing together (that is, using the
* <code>int</code> "|" operator) two or more of those <code>SWT</code>
* style constants. The class description lists the style constants that are
* applicable to the class. Style bits are also inherited from superclasses.
* </p>
*
* @param parent
* a composite control which will be the parent of the new
* instance (cannot be null)
* @param style
* the style of control to construct
* @param index
* the zero-relative index to store the receiver in its parent
*
* @exception IllegalArgumentException
* <ul>
* <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
* <li>ERROR_INVALID_RANGE - if the index is not between 0
* and the number of elements in the parent (inclusive)</li>
* </ul>
* @exception SWTException
* <ul>
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
* thread that created the parent</li>
* <li>ERROR_INVALID_SUBCLASS - if this class is not an
* allowed subclass</li>
* </ul>
*
* @see SWT
* @see Widget#checkSubclass
* @see Widget#getStyle
*/
public TableItem(Table parent, int style, int index) {
this(parent, style, index, true);
}
/**
* Constructs a new instance of this class given its parent (which must be a
* <code>Table</code>) and a style value describing its behavior and
* appearance. The item is added to the end of the items maintained by its
* parent.
* <p>
* The style value is either one of the style constants defined in class
* <code>SWT</code> which is applicable to instances of this class, or must
* be built by <em>bitwise OR</em>'ing together (that is, using the
* <code>int</code> "|" operator) two or more of those <code>SWT</code>
* style constants. The class description lists the style constants that are
* applicable to the class. Style bits are also inherited from superclasses.
* </p>
*
* @param parent
* a composite control which will be the parent of the new
* instance (cannot be null)
* @param style
* the style of control to construct
*
* @exception IllegalArgumentException
* <ul>
* <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
* </ul>
* @exception SWTException
* <ul>
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
* thread that created the parent</li>
* <li>ERROR_INVALID_SUBCLASS - if this class is not an
* allowed subclass</li>
* </ul>
*
* @see SWT
* @see Widget#checkSubclass
* @see Widget#getStyle
*/
public TableItem(Table parent, int style) {
this(parent, style, checkNull(parent).getItemCount(), true);
}
TableItem(Table parent, int style, int index, boolean create) {
super(parent, style);
}
static Table checkNull(Table control) {
if (control == null)
SWT.error(SWT.ERROR_NULL_ARGUMENT);
return control;
}
Color _getBackground() {
return null;
}
Color _getBackground(int index) {
return null;
}
boolean _getChecked() {
return false;
}
Color _getForeground() {
return null;
}
Color _getForeground(int index) {
return null;
}
Image _getImage(int index) {
return null;
}
String _getText(int index) {
return null;
}
protected void checkSubclass() {
if (!isValidSubclass())
error(SWT.ERROR_INVALID_SUBCLASS);
}
void clear() {
}
void destroyWidget() {
parent.destroyItem(this);
releaseHandle();
}
/**
* Returns the receiver's background color.
*
* @return the background color
*
* @exception SWTException
* <ul>
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
* disposed</li>
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
* thread that created the receiver</li>
* </ul>
*
* @since 2.0
*/
public Color getBackground() {
checkWidget();
if (!parent.checkData(this))
error(SWT.ERROR_WIDGET_DISPOSED);
return _getBackground();
}
/**
* Returns a rectangle describing the size and location of the receiver's
* text relative to its parent.
*
* @return the bounding rectangle of the receiver's text
*
* @exception SWTException
* <ul>
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
* disposed</li>
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
* thread that created the receiver</li>
* </ul>
*
* @since 3.2
*/
public Rectangle getBounds() {
return null;
}
/**
* Returns the background color at the given column index in the receiver.
*
* @param index
* the column index
* @return the background color
*
* @exception SWTException
* <ul>
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
* disposed</li>
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
* thread that created the receiver</li>
* </ul>
*
* @since 3.0
*/
public Color getBackground(int index) {
checkWidget();
if (!parent.checkData(this))
error(SWT.ERROR_WIDGET_DISPOSED);
return _getBackground(index);
}
/**
* Returns a rectangle describing the receiver's size and location relative
* to its parent at a column in the table.
*
* @param index
* the index that specifies the column
* @return the receiver's bounding column rectangle
*
* @exception SWTException
* <ul>
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
* disposed</li>
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
* thread that created the receiver</li>
* </ul>
*/
public Rectangle getBounds(int index) {
return null;
}
/**
* Returns <code>true</code> if the receiver is checked, and false
* otherwise. When the parent does not have the <code>CHECK</code> style,
* return false.
*
* @return the checked state of the checkbox
*
* @exception SWTException
* <ul>
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
* disposed</li>
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
* thread that created the receiver</li>
* </ul>
*/
public boolean getChecked() {
checkWidget();
if (!parent.checkData(this))
error(SWT.ERROR_WIDGET_DISPOSED);
if ((parent.style & SWT.CHECK) == 0)
return false;
return _getChecked();
}
/**
* Returns the font that the receiver will use to paint textual information
* for this item.
*
* @return the receiver's font
*
* @exception SWTException
* <ul>
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
* disposed</li>
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
* thread that created the receiver</li>
* </ul>
*
* @since 3.0
*/
public Font getFont() {
checkWidget();
if (!parent.checkData(this))
error(SWT.ERROR_WIDGET_DISPOSED);
return font != null ? font : parent.getFont();
}
/**
* Returns the font that the receiver will use to paint textual information
* for the specified cell in this item.
*
* @param index
* the column index
* @return the receiver's font
*
* @exception SWTException
* <ul>
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
* disposed</li>
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
* thread that created the receiver</li>
* </ul>
*
* @since 3.0
*/
public Font getFont(int index) {
checkWidget();
if (!parent.checkData(this))
error(SWT.ERROR_WIDGET_DISPOSED);
int count = Math.max(1, parent.columnCount);
if (0 > index || index > count - 1)
return getFont();
if (cellFont == null || cellFont[index] == null)
return getFont();
return cellFont[index];
}
/**
* Returns the foreground color that the receiver will use to draw.
*
* @return the receiver's foreground color
*
* @exception SWTException
* <ul>
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
* disposed</li>
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
* thread that created the receiver</li>
* </ul>
*
* @since 2.0
*/
public Color getForeground() {
checkWidget();
if (!parent.checkData(this))
error(SWT.ERROR_WIDGET_DISPOSED);
return _getForeground();
}
/**
*
* Returns the foreground color at the given column index in the receiver.
*
* @param index
* the column index
* @return the foreground color
*
* @exception SWTException
* <ul>
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
* disposed</li>
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
* thread that created the receiver</li>
* </ul>
*
* @since 3.0
*/
public Color getForeground(int index) {
checkWidget();
if (!parent.checkData(this))
error(SWT.ERROR_WIDGET_DISPOSED);
return _getForeground(index);
}
/**
* Returns <code>true</code> if the receiver is grayed, and false otherwise.
* When the parent does not have the <code>CHECK</code> style, return false.
*
* @return the grayed state of the checkbox
*
* @exception SWTException
* <ul>
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
* disposed</li>
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
* thread that created the receiver</li>
* </ul>
*/
public boolean getGrayed() {
checkWidget();
if (!parent.checkData(this))
error(SWT.ERROR_WIDGET_DISPOSED);
if ((parent.style & SWT.CHECK) == 0)
return false;
return grayed;
}
public Image getImage() {
checkWidget();
if (!parent.checkData(this))
error(SWT.ERROR_WIDGET_DISPOSED);
return getImage(0);
}
/**
* Returns the image stored at the given column index in the receiver, or
* null if the image has not been set or if the column does not exist.
*
* @param index
* the column index
* @return the image stored at the given column index in the receiver
*
* @exception SWTException
* <ul>
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
* disposed</li>
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
* thread that created the receiver</li>
* </ul>
*/
public Image getImage(int index) {
checkWidget();
if (!parent.checkData(this))
error(SWT.ERROR_WIDGET_DISPOSED);
return _getImage(index);
}
/**
* Returns a rectangle describing the size and location relative to its
* parent of an image at a column in the table. An empty rectangle is
* returned if index exceeds the index of the table's last column.
*
* @param index
* the index that specifies the column
* @return the receiver's bounding image rectangle
*
* @exception SWTException
* <ul>
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
* disposed</li>
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
* thread that created the receiver</li>
* </ul>
*/
public Rectangle getImageBounds(int index) {
return null;
}
/**
* Gets the image indent.
*
* @return the indent
*
* @exception SWTException
* <ul>
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
* disposed</li>
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
* thread that created the receiver</li>
* </ul>
*/
public int getImageIndent() {
checkWidget();
if (!parent.checkData(this))
error(SWT.ERROR_WIDGET_DISPOSED);
/* Image indent is not supported on GTK */
return 0;
}
String getNameText() {
if ((parent.style & SWT.VIRTUAL) != 0) {
if (!cached)
return "*virtual*"; //$NON-NLS-1$
}
return super.getNameText();
}
/**
* Returns the receiver's parent, which must be a <code>Table</code>.
*
* @return the receiver's parent
*
* @exception SWTException
* <ul>
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
* disposed</li>
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
* thread that created the receiver</li>
* </ul>
*/
public Table getParent() {
checkWidget();
return parent;
}
public String getText() {
checkWidget();
if (!parent.checkData(this))
error(SWT.ERROR_WIDGET_DISPOSED);
return getText(0);
}
/**
* Returns the text stored at the given column index in the receiver, or
* empty string if the text has not been set.
*
* @param index
* the column index
* @return the text stored at the given column index in the receiver
*
* @exception SWTException
* <ul>
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
* disposed</li>
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
* thread that created the receiver</li>
* </ul>
*/
public String getText(int index) {
checkWidget();
if (!parent.checkData(this))
error(SWT.ERROR_WIDGET_DISPOSED);
return _getText(index);
}
/**
* Returns a rectangle describing the size and location relative to its
* parent of the text at a column in the table. An empty rectangle is
* returned if index exceeds the index of the table's last column.
*
* @param index
* the index that specifies the column
* @return the receiver's bounding text rectangle
*
* @exception SWTException
* <ul>
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
* disposed</li>
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
* thread that created the receiver</li>
* </ul>
*
* @since 3.3
*/
public Rectangle getTextBounds(int index) {
return null;
}
void releaseHandle() {
}
void releaseWidget() {
super.releaseWidget();
font = null;
cellFont = null;
}
/**
* Sets the receiver's background color to the color specified by the
* argument, or to the default system color for the item if the argument is
* null.
*
* @param color
* the new color (or null)
*
* @exception IllegalArgumentException
* <ul>
* <li>ERROR_INVALID_ARGUMENT - if the argument has been
* disposed</li>
* </ul>
* @exception SWTException
* <ul>
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
* disposed</li>
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
* thread that created the receiver</li>
* </ul>
*
* @since 2.0
*/
public void setBackground(Color color) {
}
/**
* Sets the background color at the given column index in the receiver to
* the color specified by the argument, or to the default system color for
* the item if the argument is null.
*
* @param index
* the column index
* @param color
* the new color (or null)
*
* @exception IllegalArgumentException
* <ul>
* <li>ERROR_INVALID_ARGUMENT - if the argument has been
* disposed</li>
* </ul>
* @exception SWTException
* <ul>
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
* disposed</li>
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
* thread that created the receiver</li>
* </ul>
*
* @since 3.0
*/
public void setBackground(int index, Color color) {
}
/**
* Sets the checked state of the checkbox for this item. This state change
* only applies if the Table was created with the SWT.CHECK style.
*
* @param checked
* the new checked state of the checkbox
*
* @exception SWTException
* <ul>
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
* disposed</li>
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
* thread that created the receiver</li>
* </ul>
*/
public void setChecked(boolean checked) {
}
/**
* Sets the font that the receiver will use to paint textual information for
* this item to the font specified by the argument, or to the default font
* for that kind of control if the argument is null.
*
* @param font
* the new font (or null)
*
* @exception IllegalArgumentException
* <ul>
* <li>ERROR_INVALID_ARGUMENT - if the argument has been
* disposed</li>
* </ul>
* @exception SWTException
* <ul>
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
* disposed</li>
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
* thread that created the receiver</li>
* </ul>
*
* @since 3.0
*/
public void setFont(Font font) {
}
/**
* Sets the font that the receiver will use to paint textual information for
* the specified cell in this item to the font specified by the argument, or
* to the default font for that kind of control if the argument is null.
*
* @param index
* the column index
* @param font
* the new font (or null)
*
* @exception IllegalArgumentException
* <ul>
* <li>ERROR_INVALID_ARGUMENT - if the argument has been
* disposed</li>
* </ul>
* @exception SWTException
* <ul>
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
* disposed</li>
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
* thread that created the receiver</li>
* </ul>
*
* @since 3.0
*/
public void setFont(int index, Font font) {
}
/**
* Sets the receiver's foreground color to the color specified by the
* argument, or to the default system color for the item if the argument is
* null.
*
* @param color
* the new color (or null)
*
* @exception IllegalArgumentException
* <ul>
* <li>ERROR_INVALID_ARGUMENT - if the argument has been
* disposed</li>
* </ul>
* @exception SWTException
* <ul>
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
* disposed</li>
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
* thread that created the receiver</li>
* </ul>
*
* @since 2.0
*/
public void setForeground(Color color) {
}
/**
* Sets the foreground color at the given column index in the receiver to
* the color specified by the argument, or to the default system color for
* the item if the argument is null.
*
* @param index
* the column index
* @param color
* the new color (or null)
*
* @exception IllegalArgumentException
* <ul>
* <li>ERROR_INVALID_ARGUMENT - if the argument has been
* disposed</li>
* </ul>
* @exception SWTException
* <ul>
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
* disposed</li>
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
* thread that created the receiver</li>
* </ul>
*
* @since 3.0
*/
public void setForeground(int index, Color color) {
}
/**
* Sets the grayed state of the checkbox for this item. This state change
* only applies if the Table was created with the SWT.CHECK style.
*
* @param grayed
* the new grayed state of the checkbox;
*
* @exception SWTException
* <ul>
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
* disposed</li>
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
* thread that created the receiver</li>
* </ul>
*/
public void setGrayed(boolean grayed) {
}
/**
* Sets the receiver's image at a column.
*
* @param index
* the column index
* @param image
* the new image
*
* @exception IllegalArgumentException
* <ul>
* <li>ERROR_INVALID_ARGUMENT - if the image has been
* disposed</li>
* </ul>
* @exception SWTException
* <ul>
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
* disposed</li>
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
* thread that created the receiver</li>
* </ul>
*/
public void setImage(int index, Image image) {
}
public void setImage(Image image) {
checkWidget();
setImage(0, image);
}
/**
* Sets the image for multiple columns in the table.
*
* @param images
* the array of new images
*
* @exception IllegalArgumentException
* <ul>
* <li>ERROR_NULL_ARGUMENT - if the array of images is null</li>
* <li>ERROR_INVALID_ARGUMENT - if one of the images has been
* disposed</li>
* </ul>
* @exception SWTException
* <ul>
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
* disposed</li>
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
* thread that created the receiver</li>
* </ul>
*/
public void setImage(Image[] images) {
checkWidget();
if (images == null)
error(SWT.ERROR_NULL_ARGUMENT);
for (int i = 0; i < images.length; i++) {
setImage(i, images[i]);
}
}
/**
* Sets the indent of the first column's image, expressed in terms of the
* image's width.
*
* @param indent
* the new indent
*
* </ul>
* @exception SWTException
* <ul>
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
* disposed</li>
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
* thread that created the receiver</li>
* </ul>
*
* @deprecated this functionality is not supported on most platforms
*/
public void setImageIndent(int indent) {
checkWidget();
if (indent < 0)
return;
/* Image indent is not supported on GTK */
cached = true;
}
/**
* Sets the receiver's text at a column
*
* @param index
* the column index
* @param string
* the new text
*
* @exception IllegalArgumentException
* <ul>
* <li>ERROR_NULL_ARGUMENT - if the text is null</li>
* </ul>
* @exception SWTException
* <ul>
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
* disposed</li>
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
* thread that created the receiver</li>
* </ul>
*/
public void setText(int index, String string) {
}
public void setText(String string) {
checkWidget();
setText(0, string);
}
/**
* Sets the text for multiple columns in the table.
*
* @param strings
* the array of new strings
*
* @exception IllegalArgumentException
* <ul>
* <li>ERROR_NULL_ARGUMENT - if the text is null</li>
* </ul>
* @exception SWTException
* <ul>
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
* disposed</li>
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
* thread that created the receiver</li>
* </ul>
*/
public void setText(String[] strings) {
checkWidget();
if (strings == null)
error(SWT.ERROR_NULL_ARGUMENT);
for (int i = 0; i < strings.length; i++) {
String string = strings[i];
if (string != null)
setText(i, string);
}
}
}