/**
* Created on May 5, 2010
*
* Copyright 2008 Vuze, Inc. All rights reserved.
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 of the License only.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package org.gudy.azureus2.ui.swt.views.table.impl;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.swt.accessibility.Accessible;
import org.eclipse.swt.events.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.widgets.*;
import org.gudy.azureus2.ui.swt.views.table.TableColumnOrTreeColumn;
import org.gudy.azureus2.ui.swt.views.table.TableItemOrTreeItem;
import org.gudy.azureus2.ui.swt.views.table.TableOrTreeSWT;
/**
* Delegates a SWT {@link Table} into a {@link TableOrTreeSWT} allowing easy
* switching from Table and Tree.
* <p>
* Uses own map for setData and getData for faster lookups and no SWT thread
* checking
*
* @author TuxPaper
* @created May 5, 2010
*
*/
public class TableDelegate
implements TableOrTreeSWT
{
Table table;
Map<String, Object> data = new HashMap<String, Object>(5);
private TableDelegate() {
}
protected TableDelegate(Table table) {
this.table = table;
}
protected TableDelegate(Composite parent, int style) {
table = new Table(parent, style);
}
public Rectangle computeTrim(int x, int y, int width, int height) {
return table.computeTrim(x, y, width, height);
}
public void addControlListener(ControlListener listener) {
table.addControlListener(listener);
}
public void changed(Control[] changed) {
table.changed(changed);
}
public void addDragDetectListener(DragDetectListener listener) {
table.addDragDetectListener(listener);
}
public Rectangle getClientArea() {
return table.getClientArea();
}
public void addListener(int eventType, Listener listener) {
table.addListener(eventType, listener);
}
public void addFocusListener(FocusListener listener) {
table.addFocusListener(listener);
}
public ScrollBar getHorizontalBar() {
return table.getHorizontalBar();
}
public void addDisposeListener(DisposeListener listener) {
table.addDisposeListener(listener);
}
public ScrollBar getVerticalBar() {
return table.getVerticalBar();
}
public void addHelpListener(HelpListener listener) {
table.addHelpListener(listener);
}
public void addKeyListener(KeyListener listener) {
table.addKeyListener(listener);
}
public void addMenuDetectListener(MenuDetectListener listener) {
table.addMenuDetectListener(listener);
}
public void addMouseListener(MouseListener listener) {
table.addMouseListener(listener);
}
public void addMouseTrackListener(MouseTrackListener listener) {
table.addMouseTrackListener(listener);
}
public void addMouseMoveListener(MouseMoveListener listener) {
table.addMouseMoveListener(listener);
}
public void addMouseWheelListener(MouseWheelListener listener) {
table.addMouseWheelListener(listener);
}
public int getBackgroundMode() {
return table.getBackgroundMode();
}
public void addPaintListener(PaintListener listener) {
table.addPaintListener(listener);
}
public void addSelectionListener(SelectionListener listener) {
table.addSelectionListener(listener);
}
public Control[] getChildren() {
return table.getChildren();
}
public void addTraverseListener(TraverseListener listener) {
table.addTraverseListener(listener);
}
public void dispose() {
table.dispose();
}
public Layout getLayout() {
return table.getLayout();
}
public Control[] getTabList() {
return table.getTabList();
}
public boolean getLayoutDeferred() {
return table.getLayoutDeferred();
}
public Point computeSize(int wHint, int hHint) {
return table.computeSize(wHint, hHint);
}
public boolean isLayoutDeferred() {
return table.isLayoutDeferred();
}
public Object getData() {
return getData(null);
}
public void layout() {
table.layout();
}
public Object getData(String key) {
synchronized (data) {
return data.get(key);
}
}
public void layout(boolean changed) {
table.layout(changed);
}
public Display getDisplay() {
return table.getDisplay();
}
public Listener[] getListeners(int eventType) {
return table.getListeners(eventType);
}
public void layout(boolean changed, boolean all) {
table.layout(changed, all);
}
public int getStyle() {
return table.getStyle();
}
public boolean dragDetect(Event event) {
return table.dragDetect(event);
}
public boolean isDisposed() {
return table.isDisposed();
}
public boolean isListening(int eventType) {
return table.isListening(eventType);
}
public boolean dragDetect(MouseEvent event) {
return table.dragDetect(event);
}
public void notifyListeners(int eventType, Event event) {
table.notifyListeners(eventType, event);
}
public void removeListener(int eventType, Listener listener) {
table.removeListener(eventType, listener);
}
public void removeDisposeListener(DisposeListener listener) {
table.removeDisposeListener(listener);
}
public void setBackgroundMode(int mode) {
table.setBackgroundMode(mode);
}
public boolean setFocus() {
return table.setFocus();
}
public Image getBackgroundImage() {
return table.getBackgroundImage();
}
public void setLayout(Layout layout) {
table.setLayout(layout);
}
public int getBorderWidth() {
return table.getBorderWidth();
}
public void setLayoutDeferred(boolean defer) {
table.setLayoutDeferred(defer);
}
public Rectangle getBounds() {
return table.getBounds();
}
public void setTabList(Control[] tabList) {
table.setTabList(tabList);
}
public void setData(Object data) {
setData(null, data);
}
public Cursor getCursor() {
return table.getCursor();
}
public void setData(String key, Object value) {
synchronized (data) {
data.put(key, value);
}
}
public boolean getDragDetect() {
return table.getDragDetect();
}
public boolean getEnabled() {
return table.getEnabled();
}
public Font getFont() {
return table.getFont();
}
public Color getForeground() {
return table.getForeground();
}
public Object getLayoutData() {
return table.getLayoutData();
}
public Point getLocation() {
return table.getLocation();
}
public Menu getMenu() {
return table.getMenu();
}
public Monitor getMonitor() {
return table.getMonitor();
}
public void clear(int index) {
table.clear(index);
}
public Composite getParent() {
return table.getParent();
}
public Region getRegion() {
return table.getRegion();
}
public void clear(int start, int end) {
table.clear(start, end);
}
public Shell getShell() {
return table.getShell();
}
public Point getSize() {
return table.getSize();
}
public String getToolTipText() {
return table.getToolTipText();
}
public boolean getVisible() {
return table.getVisible();
}
public String toString() {
return table.toString();
}
public void clear(int[] indices) {
table.clear(indices);
}
public void clearAll() {
table.clearAll();
}
public boolean isEnabled() {
return table.isEnabled();
}
public Point computeSize(int wHint, int hHint, boolean changed) {
return table.computeSize(wHint, hHint, changed);
}
public boolean isFocusControl() {
return table.isFocusControl();
}
public boolean isReparentable() {
return table.isReparentable();
}
public boolean isVisible() {
return table.isVisible();
}
public void moveAbove(Control control) {
table.moveAbove(control);
}
public void moveBelow(Control control) {
table.moveBelow(control);
}
public void pack() {
table.pack();
}
public void pack(boolean changed) {
table.pack(changed);
}
public boolean print(GC gc) {
return table.print(gc);
}
public void deselect(int[] indices) {
table.deselect(indices);
}
public void deselect(int index) {
table.deselect(index);
}
public void redraw() {
table.redraw();
}
public void deselect(int start, int end) {
table.deselect(start, end);
}
public void redraw(int x, int y, int width, int height, boolean all) {
table.redraw(x, y, width, height, all);
}
public void deselectAll() {
table.deselectAll();
}
public boolean equals(Object obj) {
return table.equals(obj);
}
public boolean forceFocus() {
return table.forceFocus();
}
public Accessible getAccessible() {
return table.getAccessible();
}
public Color getBackground() {
return table.getBackground();
}
public void removeControlListener(ControlListener listener) {
table.removeControlListener(listener);
}
public void removeDragDetectListener(DragDetectListener listener) {
table.removeDragDetectListener(listener);
}
public void removeFocusListener(FocusListener listener) {
table.removeFocusListener(listener);
}
public void removeHelpListener(HelpListener listener) {
table.removeHelpListener(listener);
}
public void removeKeyListener(KeyListener listener) {
table.removeKeyListener(listener);
}
public void removeMenuDetectListener(MenuDetectListener listener) {
table.removeMenuDetectListener(listener);
}
public void removeMouseTrackListener(MouseTrackListener listener) {
table.removeMouseTrackListener(listener);
}
public void removeMouseListener(MouseListener listener) {
table.removeMouseListener(listener);
}
public void removeMouseMoveListener(MouseMoveListener listener) {
table.removeMouseMoveListener(listener);
}
public void removeMouseWheelListener(MouseWheelListener listener) {
table.removeMouseWheelListener(listener);
}
public void removePaintListener(PaintListener listener) {
table.removePaintListener(listener);
}
public void removeTraverseListener(TraverseListener listener) {
table.removeTraverseListener(listener);
}
public TableColumnOrTreeColumn getColumn(int index) {
return wrapOrNull(table.getColumn(index));
}
public int getColumnCount() {
return table.getColumnCount();
}
public void setBackground(Color color) {
table.setBackground(color);
}
public int[] getColumnOrder() {
return table.getColumnOrder();
}
public void setBackgroundImage(Image image) {
table.setBackgroundImage(image);
}
public TableColumnOrTreeColumn[] getColumns() {
return wrapOrNull(table.getColumns());
}
public void setBounds(int x, int y, int width, int height) {
table.setBounds(x, y, width, height);
}
public int getGridLineWidth() {
return table.getGridLineWidth();
}
public int getHeaderHeight() {
return table.getHeaderHeight();
}
public boolean getHeaderVisible() {
return table.getHeaderVisible();
}
public TableItemOrTreeItem getItem(int index) {
return wrapOrNull(table.getItem(index));
}
public void setBounds(Rectangle rect) {
table.setBounds(rect);
}
public TableItemOrTreeItem getItem(Point point) {
return wrapOrNull(table.getItem(point));
}
public void setCapture(boolean capture) {
table.setCapture(capture);
}
public void setCursor(Cursor cursor) {
table.setCursor(cursor);
}
public void setDragDetect(boolean dragDetect) {
table.setDragDetect(dragDetect);
}
public void setEnabled(boolean enabled) {
table.setEnabled(enabled);
}
public int getItemCount() {
return table.getItemCount();
}
public int getItemHeight() {
return table.getItemHeight();
}
public TableItemOrTreeItem[] getItems() {
return wrapOrNull(table.getItems());
}
public boolean getLinesVisible() {
return table.getLinesVisible();
}
public void setForeground(Color color) {
table.setForeground(color);
}
public TableItemOrTreeItem[] getSelection() {
return wrapOrNull(table.getSelection());
}
public void setLayoutData(Object layoutData) {
table.setLayoutData(layoutData);
}
public int getSelectionCount() {
return table.getSelectionCount();
}
public void setLocation(int x, int y) {
table.setLocation(x, y);
}
public int getSelectionIndex() {
return table.getSelectionIndex();
}
public void setLocation(Point location) {
table.setLocation(location);
}
public int[] getSelectionIndices() {
return table.getSelectionIndices();
}
public void setMenu(Menu menu) {
table.setMenu(menu);
}
public TableColumnOrTreeColumn getSortColumn() {
return wrapOrNull(table.getSortColumn());
}
public int getSortDirection() {
return table.getSortDirection();
}
public int getTopIndex() {
int topIndex = table.getTopIndex();
if (topIndex == 0 && table.getItemCount() == 0) {
return -1;
}
return topIndex;
}
public int hashCode() {
return table.hashCode();
}
public void setRegion(Region region) {
table.setRegion(region);
}
public void setSize(int width, int height) {
table.setSize(width, height);
}
public void setSize(Point size) {
table.setSize(size);
}
public int indexOf(TableColumnOrTreeColumn column) {
if (column == null) {
return -1;
}
return table.indexOf((TableColumn) column.getColumn());
}
public void setToolTipText(String string) {
table.setToolTipText(string);
}
public int indexOf(TableItemOrTreeItem item) {
if (item == null) {
return -1;
}
return table.indexOf((TableItem) item.getItem());
}
public void setVisible(boolean visible) {
table.setVisible(visible);
}
// @see org.gudy.azureus2.ui.swt.views.table.TableOrTreeSWT#isSelected(org.gudy.azureus2.ui.swt.views.table.TableItemOrTreeItem)
public boolean isSelected(TableItemOrTreeItem item) {
return table.isSelected(indexOf(item));
}
public Point toControl(int x, int y) {
return table.toControl(x, y);
}
public Point toControl(Point point) {
return table.toControl(point);
}
public Point toDisplay(int x, int y) {
return table.toDisplay(x, y);
}
public Point toDisplay(Point point) {
return table.toDisplay(point);
}
public void remove(int[] indices) {
table.remove(indices);
}
public void remove(int index) {
table.remove(index);
}
public void remove(int start, int end) {
table.remove(start, end);
}
public void removeAll() {
table.removeAll();
}
public void removeSelectionListener(SelectionListener listener) {
table.removeSelectionListener(listener);
}
public void select(int[] indices) {
table.select(indices);
}
public void select(int index) {
table.select(index);
}
public void select(int start, int end) {
table.select(start, end);
}
public void selectAll() {
table.selectAll();
}
public void update() {
table.update();
}
public boolean setParent(Composite parent) {
return table.setParent(parent);
}
public void setColumnOrder(int[] order) {
table.setColumnOrder(order);
}
public void setFont(Font font) {
table.setFont(font);
}
public void setHeaderVisible(boolean show) {
table.setHeaderVisible(show);
}
public void setItemCount(int count) {
table.setItemCount(count);
}
public void setLinesVisible(boolean show) {
table.setLinesVisible(show);
}
public void setRedraw(boolean redraw) {
table.setRedraw(redraw);
}
public void setSelection(int[] indices) {
table.setSelection(indices);
}
public void setSelection(TableItemOrTreeItem item) {
table.setSelection(item == null ? null : (TableItem) item.getItem());
}
public void setSelection(TableItem[] items) {
table.setSelection(items);
}
public void setSelection(int index) {
table.setSelection(index);
}
public void setSelection(int start, int end) {
table.setSelection(start, end);
}
public void setSortColumn(TableColumnOrTreeColumn column) {
table.setSortColumn(column == null ? null
: (TableColumn) column.getColumn());
}
public void setSortDirection(int direction) {
table.setSortDirection(direction);
}
public void setTopIndex(int index) {
table.setTopIndex(index);
}
public void showColumn(TableColumnOrTreeColumn column) {
table.showColumn(column == null ? null : (TableColumn) column.getColumn());
}
public void showItem(TableItemOrTreeItem item) {
table.showItem(item == null ? null : (TableItem) item.getItem());
}
public void showSelection() {
table.showSelection();
}
///////
private TableItemOrTreeItem wrapOrNull(TableItem item) {
if (item == null) {
return null;
}
return TableOrTreeUtils.getEventItem(item);
}
private TableItemOrTreeItem[] wrapOrNull(TableItem[] items) {
if (items == null) {
return null;
}
TableItemOrTreeItem[] returnItems = new TableItemOrTreeItem[items.length];
for (int i = 0; i < returnItems.length; i++) {
returnItems[i] = TableOrTreeUtils.getEventItem(items[i]);
}
return returnItems;
}
private TableColumnOrTreeColumn wrapOrNull(TableColumn item) {
if (item == null) {
return null;
}
return new TableColumnDelegate(item);
}
private TableColumnOrTreeColumn[] wrapOrNull(TableColumn[] items) {
if (items == null) {
return null;
}
TableColumnOrTreeColumn[] returnItems = new TableColumnOrTreeColumn[items.length];
for (int i = 0; i < returnItems.length; i++) {
returnItems[i] = new TableColumnDelegate(items[i]);
}
return returnItems;
}
private TableItem[] toTableItemArray(TableItemOrTreeItem[] items) {
if (items == null) {
return null;
}
TableItem[] returnItems = new TableItem[items.length];
for (int i = 0; i < returnItems.length; i++) {
returnItems[i] = (TableItem) items[i].getItem();
}
return returnItems;
}
// @see org.gudy.azureus2.ui.swt.views.table.TableOrTreeSWT#clear(int, boolean)
public void clear(int index, boolean allChildren) {
table.clear(index);
}
public void clearAll(boolean allChildren) {
table.clearAll();
}
// @see org.gudy.azureus2.ui.swt.views.table.TableOrTreeSWT#deselect(org.gudy.azureus2.ui.swt.views.table.TableItemOrTreeItem)
public void deselect(TableItemOrTreeItem item) {
table.deselect(table.indexOf((TableItem) item.getItem()));
}
// @see org.gudy.azureus2.ui.swt.views.table.TableOrTreeSWT#getParentItem()
public TableItemOrTreeItem getParentItem() {
return null;
}
// @see org.gudy.azureus2.ui.swt.views.table.TableOrTreeSWT#getTopItem()
public TableItemOrTreeItem getTopItem() {
int i = table.getTopIndex();
return i < 0 || (i == 0 && table.getItemCount() == 0) ? null : getItem(i);
}
// @see org.gudy.azureus2.ui.swt.views.table.TableOrTreeSWT#removeTreeListener(org.eclipse.swt.events.TreeListener)
public void removeTreeListener(TreeListener listener) {
// TODO Auto-generated method stub
}
// @see org.gudy.azureus2.ui.swt.views.table.TableOrTreeSWT#setInsertMark(org.gudy.azureus2.ui.swt.views.table.TableItemOrTreeItem, boolean)
public void setInsertMark(TableItemOrTreeItem item, boolean before) {
// TODO Auto-generated method stub
}
public void select(TableItemOrTreeItem item) {
table.select(table.indexOf((TableItem) item.getItem()));
}
public void setSelection(TableItemOrTreeItem[] items) {
int[] indexes = new int[items.length];
for (int i = 0; i < indexes.length; i++) {
indexes[i] = table.indexOf((TableItem) items[i].getItem());
}
table.select(indexes);
}
// @see org.gudy.azureus2.ui.swt.views.table.TableOrTreeSWT#setTopItem(org.gudy.azureus2.ui.swt.views.table.TableItemOrTreeItem)
public void setTopItem(TableItemOrTreeItem item) {
// TODO Auto-generated method stub
}
// @see org.gudy.azureus2.ui.swt.views.table.TableOrTreeSWT#getComposite()
public Composite getComposite() {
return table;
}
public boolean equalsTableOrTree(TableOrTreeSWT tt) {
return table.equals(tt.getComposite());
}
public TableItemOrTreeItem createNewItem(int style) {
return TableOrTreeUtils.createNewItem(this, style);
}
public TableColumnOrTreeColumn createNewColumn(int style) {
return new TableColumnDelegate(table, style);
}
public int indexOf(Widget item) {
if (item instanceof TableItem) {
return table.indexOf((TableItem) item);
}
return -1;
}
}