/* * File : StatusItem.java * Created : 24 nov. 2003 * By : Olivier * * Copyright (C) 2004, 2005, 2006 Aelitis SAS, 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; either version 2 of the License. * * 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 ( see the LICENSE file ). * * 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 * * AELITIS, SAS au capital de 46,603.30 euros, * 8 Allee Lenotre, La Grille Royale, 78600 Le Mesnil le Roi, France. */ package org.gudy.azureus2.ui.swt.views.tableitems.mytorrents; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; import org.gudy.azureus2.core3.download.DownloadManager; import org.gudy.azureus2.core3.util.DisplayFormatters; import org.gudy.azureus2.core3.util.UrlUtils; import org.gudy.azureus2.ui.swt.Utils; import org.gudy.azureus2.ui.swt.mainwindow.Colors; import org.gudy.azureus2.ui.swt.views.table.CoreTableColumnSWT; import org.gudy.azureus2.ui.swt.views.table.TableCellSWT; import org.gudy.azureus2.plugins.download.Download; import org.gudy.azureus2.plugins.ui.tables.*; /** * * @author Olivier * @author TuxPaper (2004/Apr/17: modified to TableCellAdapter) */ public class StatusItem extends CoreTableColumnSWT implements TableCellRefreshListener, TableCellMouseListener { public static final Class DATASOURCE_TYPE = Download.class; public static final String COLUMN_ID = "status"; private final static Object CLICK_KEY = new Object(); private static final int[] BLUE = Utils.colorToIntArray( Colors.blue ); private boolean changeRowFG; private boolean changeCellFG = true; private boolean showTrackerErrors; public StatusItem(String sTableID, boolean changeRowFG) { super(DATASOURCE_TYPE, COLUMN_ID, ALIGN_LEAD, 80, sTableID); this.changeRowFG = changeRowFG; setRefreshInterval(INTERVAL_LIVE); } public StatusItem(String sTableID) { this(sTableID, true); } public void fillTableColumnInfo(TableColumnInfo info) { info.addCategories(new String[] { CAT_ESSENTIAL, }); info.setProficiency(TableColumnInfo.PROFICIENCY_BEGINNER); } public void refresh( TableCell cell ) { DownloadManager dm = (DownloadManager) cell.getDataSource(); if ( dm == null ){ return; } int state = dm.getState(); String text; if ( showTrackerErrors && dm.isUnauthorisedOnTracker() && state != DownloadManager.STATE_ERROR ){ text = dm.getTrackerStatus(); }else{ text = DisplayFormatters.formatDownloadStatus(dm); } if ( cell.setText( text ) || !cell.isValid()) { boolean clickable = false; if ( cell instanceof TableCellSWT ){ int cursor_id; if ( text.indexOf( "http://" ) == -1 ){ dm.setUserData( CLICK_KEY, null ); cursor_id = SWT.CURSOR_ARROW; }else{ dm.setUserData( CLICK_KEY, text ); cursor_id = SWT.CURSOR_HAND; clickable = true; } ((TableCellSWT)cell).setCursorID( cursor_id ); } if (!changeCellFG && !changeRowFG){ // clickable, make it blue whatever cell.setForeground( clickable?BLUE:null); return; } TableRow row = cell.getTableRow(); if (row != null ) { Color color = null; if (state == DownloadManager.STATE_SEEDING) { color = Colors.blues[Colors.BLUES_MIDDARK]; } else if (state == DownloadManager.STATE_ERROR) { color = Colors.colorError; } else { color = null; } if (changeRowFG) { row.setForeground(Utils.colorToIntArray(color)); } else if (changeCellFG) { cell.setForeground(Utils.colorToIntArray(color)); } if ( clickable ){ cell.setForeground( Utils.colorToIntArray( Colors.blue )); } } } } public boolean isChangeRowFG() { return changeRowFG; } public void setChangeRowFG(boolean changeRowFG) { this.changeRowFG = changeRowFG; } public boolean isChangeCellFG() { return changeCellFG; } public void setChangeCellFG(boolean changeCellFG) { this.changeCellFG = changeCellFG; } public void setShowTrackerErrors( boolean s ) { showTrackerErrors = s; } public void cellMouseTrigger( TableCellMouseEvent event ) { DownloadManager dm = (DownloadManager) event.cell.getDataSource(); if (dm == null) {return;} String clickable = (String)dm.getUserData( CLICK_KEY ); if ( clickable == null ){ return; } event.skipCoreFunctionality = true; if ( event.eventType == TableCellMouseEvent.EVENT_MOUSEUP ){ String url = UrlUtils.getURL( clickable ); if ( url != null ){ Utils.launch( url ); } } } }