/* ********************************************************************** **
** Copyright notice **
** **
** (c) 2005-2006 RSSOwl Development Team **
** http://www.rssowl.org/ **
** **
** All rights reserved **
** **
** This program and the accompanying materials are made available under **
** the terms of the Eclipse Public License v1.0 which accompanies this **
** distribution, and is available at: **
** http://www.rssowl.org/legal/epl-v10.html **
** **
** A copy is found in the file epl-v10.html and important notices to the **
** license from the team is found in the textfile LICENSE.txt distributed **
** in this package. **
** **
** This copyright notice MUST APPEAR in all copies of the file! **
** **
** Contributors: **
** Christophe Bouhier - podcast plugin **
** **
** ********************************************************************** */
package org.rssowl.contrib.podcast.ui.media;
import java.io.File;
import java.net.MalformedURLException;
import java.util.Date;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ITableColorProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;
import org.rssowl.contrib.i18n.Messages;
import org.rssowl.contrib.podcast.model.IPersonalAttachment;
import org.rssowl.contrib.podcast.model.IPersonalBookMark;
import org.rssowl.contrib.podcast.util.Logger;
import org.rssowl.contrib.podcast.util.Util;
import org.rssowl.core.persist.INews;
/**
* @author <a href="mailto:christophe@kualasoft.com">Christophe Bouhier </a>
* @version 1.1
*/
public class MediaTreeView implements ITreeContentProvider,
ITableLabelProvider, ITableColorProvider {
Logger mLog = new Logger(getClass().getName());
protected Object[] mElements;
protected Tree mTree;
protected TreeViewer mTreeViewer;
protected ModelPreparator mPreparator;
protected boolean mShowItems = true;
public MediaTreeView(Composite pParent) {
mTree = new Tree(pParent, SWT.BORDER | SWT.FULL_SELECTION
| SWT.V_SCROLL | SWT.H_SCROLL | SWT.MULTI);
mTree.setHeaderVisible(true);
// mTree.setLinesVisible(true);
GridData lData = new GridData(GridData.FILL_BOTH);
lData.grabExcessHorizontalSpace = true;
lData.grabExcessVerticalSpace = true;
mTree.setLayoutData(lData);
mTreeViewer = new TreeViewer(mTree);
mTreeViewer.setContentProvider(this);
mTreeViewer.setLabelProvider(this);
// mTreeViewer.setAutoExpandLevel(2);
buildColumns();
}
public void buildColumns() {
for (int i = 0; i < getColumnCount(); i++) {
TreeColumn lColumn = new TreeColumn(mTree, SWT.LEFT);
lColumn.setWidth(getColumnWidth(i));
lColumn.setText(getColumnName(i));
}
}
/**
* Should be invoked before setting the input.
*/
public void setItemsVisible(boolean pVisible) {
mShowItems = pVisible;
}
/**
* The number of columns. This is a fix number.
*
* @return int
*/
public int getColumnCount() {
return 6;
}
String[] mColumnNames = { Messages.getString("fileTable.header.title"),
Messages.getString("fileTable.header.date"),
Messages.getString("fileTable.header.sizeWeb"),
Messages.getString("fileTable.header.sizeDisc"),
Messages.getString("fileTable.header.inPlayer"),
Messages.getString("fileTable.header.mark") };
public String getColumnName(int col) {
return mColumnNames[col];
}
int[] mColumnWidths = { 450, 200, 80, 80, 80, 80 };
/**
* Gets the columns width.
*
* @param col
* int
* @return int
*/
public int getColumnWidth(int col) {
return mColumnWidths[col];
}
public Object[] getChildren(Object parentElement) {
if (parentElement instanceof INews) {
INews lItem = (INews) parentElement;
if (mPreparator != null) {
// We get the personal enclosure instead, much better.
// CB FIXME
// return PersonalCache.getInstance().getPersonalAttachments(lItem).toArray();
} else {
return null;
}
}
return null;
}
public Object getParent(Object element) {
return null; // Parent not used.
}
public boolean hasChildren(Object element) {
if (element instanceof INews) {
INews lItem = (INews) element;
// CB FIXME
// PersonalCache.getInstance().getPersonalAttachments(lItem);
}
return false;
}
public Object[] getElements(Object inputElement) {
if (inputElement instanceof ModelPreparator) {
mPreparator = (ModelPreparator) inputElement;
IPersonalBookMark lFeed = mPreparator.getPersonalBookMark();
if (mShowItems) {
mElements = lFeed.getFeedLinkReference().resolve().getNews()
.toArray();
} else {
mElements = lFeed.getAttachments().toArray();
}
return mElements;
} else {
if (inputElement == null) {
return new Object[0];
}
throw new IllegalArgumentException();
}
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
public void scrollToFirstRow() {
if (mElements.length > 0) {
mTreeViewer.setSelection(new StructuredSelection(mElements[0]),
true);
}
}
public Image getColumnImage(Object element, int columnIndex) {
if (element instanceof IPersonalAttachment) {
IPersonalAttachment lEnclosure = (IPersonalAttachment) element;
switch (columnIndex) {
case 0: {
if (this.mPreparator != null) {
return mPreparator.getImage(lEnclosure);
}
}
}
}
return null;
}
public String getColumnText(Object element, int columnIndex) {
if (element instanceof INews) {
INews lItem = (INews) element;
switch (columnIndex) {
case 0: {
return lItem.getTitle();
}
case 1: {
Date lDate;
lDate = lItem.getPublishDate();
return Util.formatDate(lDate, "EEEE, MMM d hh:mm a");
}
}
}
if (element instanceof IPersonalAttachment) {
IPersonalAttachment lEncl = (IPersonalAttachment) element;
Object lObj = getValueAt(lEncl, columnIndex);
if (lObj instanceof String) {
return (String) lObj;
}
if (lObj instanceof Boolean) {
if (((Boolean) lObj).booleanValue()) {
return "Yes";
} else {
return "No";
}
}
if (lObj instanceof Integer) {
String form = Util.formatSize(lObj);
return ((Number) lObj).intValue() == 0 ? "" : form;
}
}
return null;
}
public Object getValueAt(IPersonalAttachment pEnclosure, int column) {
Object lReturn = "";
switch (column) {
case 0: {
File lFile = pEnclosure.getFile();
if (lFile != null) {
lReturn = lFile.getName();
} else {
try {
return pEnclosure.getLink().toURL().toExternalForm();
} catch (MalformedURLException e) {
}
}
break;
}
case 1: {
}
break;
case 2: { // Size web
lReturn = new Integer(pEnclosure.getFileLength());
break;
}
case 3: {// Size disk
File lFile = pEnclosure.getFile();
if (lFile != null) {
lReturn = new Integer((int) lFile.length());
} else {
lReturn = "?";
}
break;
}
case 4: { // If in player.
lReturn = new Boolean(pEnclosure.getInPlayer());
break;
}
case 5: {
lReturn = new Boolean(pEnclosure.isMarked());
break;
}
case 6: {
break;
}
default:
lReturn = "";
}
return lReturn;
}
public Color getForeground(Object element, int columnIndex) {
if (element instanceof INews) {
if (columnIndex == 0) {
return mPreparator.FEED_TITLE_COLOR;
}
}
return null;
}
public Color getBackground(Object element, int columnIndex) {
if (element instanceof IPersonalAttachment) {
return mPreparator.TABLE_ODD_BACKGROUND_COLOR;
}
return null;
}
public void addListener(ILabelProviderListener listener) {
}
public boolean isLabelProperty(Object element, String property) {
return false;
}
public void removeListener(ILabelProviderListener listener) {
}
public void dispose() {
}
}