Package org.rssowl.contrib.podcast.ui.media

Source Code of org.rssowl.contrib.podcast.ui.media.MediaTreeView

/*   **********************************************************************  **
**   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() {
  }
 
}
TOP

Related Classes of org.rssowl.contrib.podcast.ui.media.MediaTreeView

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.