package com.limegroup.gnutella.gui.options.panes;
import java.io.File;
import java.io.IOException;
import java.util.Set;
import com.limegroup.gnutella.gui.search.NamedMediaType;
import com.limegroup.gnutella.gui.tables.AbstractDataLine;
import com.limegroup.gnutella.gui.tables.IconAndNameHolder;
import com.limegroup.gnutella.gui.tables.LimeTableColumn;
import com.limegroup.gnutella.settings.FileSetting;
import com.limegroup.gnutella.settings.SharingSettings;
/**
* Displays the named mediatype in the first column and its download directory
* in the second column.
*/
public class MediaTypeDownloadDirDataLine extends AbstractDataLine {
/**
* The mediatype this data line represents.
*/
private NamedMediaType nm;
/**
* Holds the new value of the download directory for this mediatype if it
* was set in this session.
*/
private String dir;
/**
* Holds the corresponding file setting for the mediatype.
*/
private FileSetting setting;
/**
* Is true when the reset action has been called on this data line.
*/
private boolean isReset;
/**
* Handle to the current default download directory.
*/
private String defaultDir;
private static final LimeTableColumn[] columns = new LimeTableColumn[] {
new LimeTableColumn(0, "OPTIONS_SAVE_MEDIATYPE", 60, true, IconAndNameHolder.class),
new LimeTableColumn(1, "OPTIONS_SAVE_DIRECTORY", 100, true, String.class), };
public int getColumnCount() {
return columns.length;
}
public void setDefaultDir(String text) {
defaultDir = text;
}
/**
* Reset the download directory for this mediatype. Henceforth files of this
* mediatype will be saved to the default download directory again.
*/
public void reset() {
dir = null;
isReset = true;
}
/**
* Saves the new download directory for this mediatyp if it was set during
* this session or reverts the default value if it was reset.
*/
public void saveDirectory(Set newDirs) throws IOException {
boolean dirty = isDirty();
if (isReset)
setting.revertToDefault();
else if (dir != null && !setting.getValue().equals(new File(dir)))
setting.setValue(new File(dir));
if(dirty)
newDirs.add(setting.getValue());
}
public LimeTableColumn getColumn(int col) {
return columns[col];
}
public boolean isDynamic(int col) {
return false;
}
public boolean isClippable(int col) {
return true;
}
public void initialize(Object obj) {
super.initialize(obj);
nm = (NamedMediaType) obj;
setting = SharingSettings.getFileSettingForMediaType(nm.getMediaType());
isReset = false;
}
public Object getValueAt(int col) {
switch (col) {
case 0:
return nm;
case 1:
if (dir != null)
return dir;
else if (isReset || setting.isDefault())
return defaultDir;
else
return setting.getValue();
}
return null;
}
/**
* Determines if this has data different than the setting's data.
*/
boolean isDirty() {
return dir != null && !setting.getValue().equals(new File(dir));
}
/**
* Sets the new download directory for this mediatype.
*/
public void setDirectory(String dir) {
this.dir = dir;
isReset = false;
}
/**
* Gets the current value.
*/
String getDirectory() {
return dir;
}
/*
* @see com.limegroup.gnutella.gui.tables.DataLine#getTypeAheadColumn()
*/
public int getTypeAheadColumn() {
return 0;
}
}