blob: 727730fa497fe577d8f5b88b05a73ff29e6151a8 [file] [log] [blame]
/*
* Copyright (C) 2005 David Orme <djo@coconut-palm-software.com>
*
* 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:
* David Orme - Initial API and implementation
*/
package org.eclipse.jface.examples.databinding.compositetable.internal;
import org.eclipse.jface.examples.databinding.compositetable.InternalCompositeTable;
import org.eclipse.swt.events.FocusAdapter;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.FocusListener;
import org.eclipse.swt.events.KeyAdapter;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.KeyListener;
import org.eclipse.swt.events.TraverseEvent;
import org.eclipse.swt.events.TraverseListener;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
/**
* Class TableRow. Encapsulates operations on a SWT row control. Discovers the
* SWT controls inside the row control representing columns and exposes those for
* operations by the CompositeTable. Listens to SWT events on the column controls
* and forwards them back to the table control for processing.
*
* @author djo
*/
public class TableRow {
private Control row;
private Control[] columns;
protected InternalCompositeTable parent;
/**
* Constructor TableRow. Construct a TableRow object.
*
* @param parent The table containing this row.
* @param row The SWT control implementing this row.
*/
public TableRow(InternalCompositeTable parent, Control row) {
this.parent = parent;
this.row = row;
if (row instanceof Composite) {
Composite rowComposite = (Composite) row;
columns = rowComposite.getTabList();
} else {
columns = new Control[] {row};
}
for (int i = 0; i < columns.length; i++) {
addListeners(columns[i]);
}
}
/**
* Remove all listeners from each control.
*/
public void dispose() {
for (int i = 0; i < columns.length; i++) {
removeListeners(columns[i]);
}
}
/**
* Add listeners to each control.
*
* @param control The control to listen to.
*/
private void addListeners(Control control) {
control.addKeyListener(keyListener);
control.addFocusListener(focusListener);
control.addTraverseListener(traverseListener);
}
/**
* Remove listeners from each control.
*
* @param control The control to no longer listen to.
*/
private void removeListeners(Control control) {
control.removeKeyListener(keyListener);
control.removeFocusListener(focusListener);
control.removeTraverseListener(traverseListener);
}
/**
* Forward key presses to the parent control
*/
private KeyListener keyListener = new KeyAdapter() {
public void keyPressed(KeyEvent e) {
parent.keyPressed(TableRow.this, e);
}
};
/**
* Forward focuse events to the parent control
*/
private FocusListener focusListener = new FocusAdapter() {
public void focusLost(FocusEvent e) {
parent.focusLost(TableRow.this, e);
}
public void focusGained(FocusEvent e) {
parent.focusGained(TableRow.this, e);
}
};
/**
* Forward traverse events to the parent control
*/
private TraverseListener traverseListener = new TraverseListener() {
public void keyTraversed(TraverseEvent e) {
parent.keyTraversed(TableRow.this, e);
}
};
/**
* Return the SWT control implementing the row's GUI.
*
* @return The row's SWT control
*/
public Control getRowControl() {
return row;
}
/**
* Return the SWT control corresponding to a particular column within
* this row.
*
* @param i the 0-based offset of the column to return.
* @return The corresponding control
*/
public Control getColumnControl(int i) {
return columns[i];
}
/**
* Return the column number of a specified SWT control or -1 if not found.
*
* @param control The control to find.
* @return control's column number or -1 if that column control is not in this row.
*/
public int getColumnNumber(Control control) {
for (int i = 0; i < columns.length; i++) {
if (columns[i] == control) {
return i;
}
}
return -1;
}
/**
* Return the number of columns in this row.
*
* @return The number of columns in this row.
*/
public int getNumColumns() {
return columns.length;
}
/**
* Sets the visibility of this row.
*
* @param visible true if the row should be visible; false otherwise.
*/
public void setVisible(boolean visible) {
row.setVisible(visible);
}
/**
* Returns if this row is visible.
*
* @return true if the row is visible; false otherwise.
*/
public boolean getVisible() {
return row.getVisible();
}
}