/**
* Created on Jan 3, 2009
*
* 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.columnsetup;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Composite;
import org.gudy.azureus2.core3.util.AERunnable;
import org.gudy.azureus2.core3.util.Debug;
import org.gudy.azureus2.plugins.ui.tables.*;
import org.gudy.azureus2.ui.swt.Utils;
import org.gudy.azureus2.ui.swt.views.table.CoreTableColumnSWT;
import org.gudy.azureus2.ui.swt.views.table.TableCellSWT;
import org.gudy.azureus2.ui.swt.views.table.TableCellSWTPaintListener;
import org.gudy.azureus2.ui.swt.views.table.TableViewSWT;
import org.gudy.azureus2.ui.swt.views.table.impl.FakeTableCell;
import com.aelitis.azureus.ui.common.table.*;
/**
* @author TuxPaper
* @created Jan 3, 2009
*
*/
public class ColumnTC_Sample
extends CoreTableColumnSWT
implements TableCellAddedListener
{
public static final String COLUMN_ID = "TableColumnSample";
public ColumnTC_Sample(String tableID) {
super(COLUMN_ID, tableID);
setPosition(POSITION_INVISIBLE);
setRefreshInterval(INTERVAL_LIVE);
setWidth(120);
}
// @see org.gudy.azureus2.plugins.ui.tables.TableCellAddedListener#cellAdded(org.gudy.azureus2.plugins.ui.tables.TableCell)
public void cellAdded(final TableCell cell) {
Utils.execSWTThread(new AERunnable() {
public void runSupport() {
if (cell.isDisposed()) {
return;
}
TableColumnCore column = (TableColumnCore) cell.getDataSource();
TableViewSWT<?> tv = (TableViewSWT<?>) ((TableCellCore) cell).getTableRowCore().getView();
TableColumnSetupWindow tvs = (TableColumnSetupWindow) tv.getParentDataSource();
TableRowCore sampleRow = (TableRowCore) tvs.getSampleRow();
cell.addListeners(new Cell(cell, column, tv.getTableComposite(), sampleRow));
}
});
}
private static class Cell
implements TableCellRefreshListener, TableCellSWTPaintListener,
TableCellVisibilityListener, TableCellDisposeListener
{
private final TableColumnCore column;
private FakeTableCell sampleCell;
public Cell(TableCell parentCell, TableColumnCore column, Composite c, TableRowCore sampleRow) {
this.column = column;
if (sampleRow == null) {
return;
}
Object ds = sampleRow.getDataSource(true);
Object pds = sampleRow.getDataSource(false);
if (column.handlesDataSourceType(pds.getClass())) {
sampleCell = new FakeTableCell(column, ds);
Rectangle bounds = ((TableCellSWT)parentCell).getBounds();
sampleCell.setControl(c, bounds, false);
}
}
public void dispose(TableCell cell) {
sampleCell = null;
}
// @see org.gudy.azureus2.ui.swt.views.table.TableCellSWTPaintListener#cellPaint(org.eclipse.swt.graphics.GC, org.gudy.azureus2.ui.swt.views.table.TableCellSWT)
public void cellPaint(GC gc, TableCellSWT cell) {
if (sampleCell == null) {
return;
}
Rectangle bounds = cell.getBounds();
sampleCell.setCellArea(bounds);
try {
sampleCell.refresh();
sampleCell.doPaint(gc);
} catch (Throwable e) {
Debug.out(e);
}
}
// @see org.gudy.azureus2.plugins.ui.tables.TableCellVisibilityListener#cellVisibilityChanged(org.gudy.azureus2.plugins.ui.tables.TableCell, int)
public void cellVisibilityChanged(TableCell cell, int visibility) {
if (sampleCell == null) {
return;
}
try {
column.invokeCellVisibilityListeners(sampleCell, visibility);
} catch (Throwable e) {
Debug.out(e);
}
}
// @see org.gudy.azureus2.plugins.ui.tables.TableCellRefreshListener#refresh(org.gudy.azureus2.plugins.ui.tables.TableCell)
public void refresh(TableCell cell) {
if (sampleCell == null) {
return;
}
if (!cell.isShown()) {
return;
}
sampleCell.refresh(true, true, true);
cell.setSortValue(sampleCell.getSortValue());
cell.invalidate();
if (cell instanceof TableCellSWT) {
((TableCellSWT) cell).redraw();
}
//cell.setText(sampleCell.getText());
}
}
}