package com.limegroup.gnutella.gui.playlist;
import java.awt.Color;
import java.io.File;
import java.io.IOException;
import com.limegroup.gnutella.gui.mp3.MediaPlayerComponent;
import com.limegroup.gnutella.gui.tables.AbstractDataLine;
import com.limegroup.gnutella.gui.tables.ColoredCell;
import com.limegroup.gnutella.gui.tables.ColoredCellImpl;
import com.limegroup.gnutella.gui.tables.FileTransfer;
import com.limegroup.gnutella.gui.tables.LimeTableColumn;
import com.limegroup.gnutella.gui.tables.TimeRemainingHolder;
import com.limegroup.gnutella.gui.themes.ThemeFileHandler;
import com.limegroup.gnutella.metadata.AudioMetaData;
public final class PlaylistDataLine extends AbstractDataLine
implements FileTransfer {
/**
* Name column
*/
static final int NAME_IDX = 0;
private static final LimeTableColumn NAME_COLUMN =
new LimeTableColumn(NAME_IDX, "PLAYLIST_TABLE_NAME",
450, true, ColoredCell.class);
/**
* Length column info
*/
static final int LENGTH_IDX = 1;
private static final LimeTableColumn LENGTH_COLUMN =
new LimeTableColumn(LENGTH_IDX, "PLAYLIST_TABLE_LENGTH",
20, true, String.class);
/**
* Bitrate column info
*/
static final int BITRATE_IDX = 2;
private static final LimeTableColumn BITRATE_COLUMN =
new LimeTableColumn(BITRATE_IDX, "PLAYLIST_TABLE_BITRATE",
20, true, Integer.class);
/**
* Total number of columns
*/
static final int NUMBER_OF_COLUMNS = 3;
/**
* Number of columns
*/
public int getColumnCount() { return NUMBER_OF_COLUMNS; }
/**
* The file this is based on.
*/
private File FILE;
/**
* The length of this file.
*/
private int length;
/**
* The name of this file.
*/
private String name;
/**
* The bitrate of this file.
*/
private int bitrate;
/**
* The colors for cells.
*/
private Color _cellColor;
private Color _othercellColor;
/**
* Sets up the dataline for use with the playlist.
*/
public void initialize(Object file) {
super.initialize(file);
FILE = (File)file;
try {
AudioMetaData amd = AudioMetaData.parseAudioFile(FILE);
if(amd != null) {
length = amd.getLength();
bitrate = amd.getBitrate();
}
} catch(IOException ignored) {}
name = FILE.getName();
updateTheme();
}
/**
* Returns the value for the specified index.
*/
public Object getValueAt(int idx) {
switch(idx) {
case NAME_IDX:
Color color = getColor(MediaPlayerComponent.isPlaying(FILE));
return new ColoredCellImpl(name, color);
case LENGTH_IDX:
return new TimeRemainingHolder(length);
case BITRATE_IDX:
return new Integer(bitrate);
}
return null;
}
/**
* Gets the color for whether or not the row is playing.
*/
private Color getColor(boolean playing) {
return playing ? _othercellColor : _cellColor;
}
// inherit doc comment
public void updateTheme() {
_cellColor = ThemeFileHandler.WINDOW8_COLOR.getValue();
_othercellColor = ThemeFileHandler.SEARCH_RESULT_SPEED_COLOR.getValue();
}
/**
* Return the table column for this index.
*/
public LimeTableColumn getColumn(int idx) {
switch(idx) {
case NAME_IDX: return NAME_COLUMN;
case LENGTH_IDX: return LENGTH_COLUMN;
case BITRATE_IDX: return BITRATE_COLUMN;
}
return null;
}
public boolean isClippable(int idx) {
return idx == NAME_IDX;
}
public int getTypeAheadColumn() {
return NAME_IDX;
}
public boolean isDynamic(int idx) {
return false;
}
public File getFile() {
return FILE;
}
}