Package org.gudy.azureus2.ui.swt.views

Source Code of org.gudy.azureus2.ui.swt.views.PiecesView

/*
* Created on 2 juil. 2003
*
* 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;

import java.util.Map;

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;

import org.gudy.azureus2.core3.download.DownloadManager;
import org.gudy.azureus2.core3.download.DownloadManagerPeerListener;
import org.gudy.azureus2.core3.download.DownloadManagerPieceListener;
import org.gudy.azureus2.core3.peer.PEPeer;
import org.gudy.azureus2.core3.peer.PEPeerManager;
import org.gudy.azureus2.core3.peer.PEPiece;
import org.gudy.azureus2.ui.swt.TorrentUtil;
import org.gudy.azureus2.ui.swt.components.Legend;
import org.gudy.azureus2.ui.swt.views.piece.MyPieceDistributionView;
import org.gudy.azureus2.ui.swt.views.piece.PieceInfoView;
import org.gudy.azureus2.ui.swt.views.table.TableViewSWT;
import org.gudy.azureus2.ui.swt.views.table.impl.TableViewSWTImpl;
import org.gudy.azureus2.ui.swt.views.table.impl.TableViewTab;
import org.gudy.azureus2.ui.swt.views.tableitems.pieces.*;
import org.gudy.azureus2.ui.swt.views.utils.ManagerUtils;

import com.aelitis.azureus.ui.common.table.TableColumnCore;
import com.aelitis.azureus.ui.common.table.TableDataSourceChangedListener;
import com.aelitis.azureus.ui.common.table.TableLifeCycleListener;

import org.gudy.azureus2.plugins.ui.tables.TableManager;

/**
* @author Olivier
* @author TuxPaper
*         2004/Apr/20: Remove need for tableItemToObject
*         2004/Apr/21: extends TableView instead of IAbstractView
* @author MjrTom
*      2005/Oct/08: Add PriorityItem, SpeedItem
*/

public class PiecesView
  extends TableViewTab<PEPiece>
  implements DownloadManagerPeerListener,
  DownloadManagerPieceListener,
  TableDataSourceChangedListener,
  TableLifeCycleListener
{
  private final static TableColumnCore[] basicItems = {
    new PieceNumberItem(),
    new SizeItem(),
    new BlockCountItem(),
    new BlocksItem(),
    new CompletedItem(),
    new AvailabilityItem(),
    new TypeItem(),
    new ReservedByItem(),
    new WritersItem(),
    new PriorityItem(),
    new SpeedItem(),
    new RequestedItem()
  };

  DownloadManager manager;
 
  private TableViewSWTImpl<PEPiece> tv;

  private Composite legendComposite;

  private PieceInfoView pieceInfoView;
  private MyPieceDistributionView pieceDistView;
 
  /**
   * Initialize
   *
   */
  public PiecesView() {
    super("PiecesView");
  }

  // @see org.gudy.azureus2.ui.swt.views.table.impl.TableViewTab#initYourTableView()
  public TableViewSWT initYourTableView() {
    tv = new TableViewSWTImpl<PEPiece>(PEPiece.class,
        TableManager.TABLE_TORRENT_PIECES, getPropertiesPrefix(), basicItems,
        basicItems[0].getName(), SWT.SINGLE | SWT.FULL_SELECTION | SWT.VIRTUAL);
    tv.setEnableTabViews(true);
    pieceInfoView = new PieceInfoView();
    pieceDistView = new MyPieceDistributionView();
    tv.setCoreTabViews(new IView[] {
      pieceInfoView,pieceDistView
    });
    tv.addTableDataSourceChangedListener(this, true);
    tv.addLifeCycleListener(this);

    return tv;
  }

  // @see com.aelitis.azureus.ui.common.table.TableDataSourceChangedListener#tableDataSourceChanged(java.lang.Object)
  public void tableDataSourceChanged(Object newDataSource) {
    if (manager != null){
      manager.removePeerListener(this);
      manager.removePieceListener(this);
    }
   
    if (newDataSource == null)
      manager = null;
    else if (newDataSource instanceof Object[])
      manager = (DownloadManager)((Object[])newDataSource)[0];
    else
      manager = (DownloadManager)newDataSource;

    if (manager != null) {
      manager.addPeerListener(this, false);
      manager.addPieceListener(this, false);
      addExistingDatasources();
    }
    if (pieceInfoView != null) {
      pieceInfoView.dataSourceChanged(manager);
    }
    if (pieceDistView != null) {
      pieceDistView.dataSourceChanged(manager);
    }
  }

  // @see com.aelitis.azureus.ui.common.table.TableLifeCycleListener#tableViewInitialized()
  public void tableViewInitialized() {
    if (legendComposite != null && (tv instanceof TableViewSWT)) {
      Composite composite = ((TableViewSWT) tv).getTableComposite();

      legendComposite = Legend.createLegendComposite(composite,
          BlocksItem.colors, new String[] {
          "PiecesView.legend.requested",
          "PiecesView.legend.written",             
          "PiecesView.legend.downloaded",
            "PiecesView.legend.incache"
          });
  }

    if (manager != null) {
      manager.removePeerListener(this);
      manager.removePieceListener(this);
      manager.addPeerListener(this, false);
      manager.addPieceListener(this, false);
      addExistingDatasources();
    }
    }

  // @see com.aelitis.azureus.ui.common.table.TableLifeCycleListener#tableViewDestroyed()
  public void tableViewDestroyed() {
    if (legendComposite != null && legendComposite.isDisposed()) {
      legendComposite.dispose();
    }

    if (manager != null) {
      manager.removePeerListener(this);
      manager.removePieceListener(this);
    }
  }

  /* DownloadManagerPeerListener implementation */
  public void pieceAdded(PEPiece created) {
    tv.addDataSource(created);
  }

  public void pieceRemoved(PEPiece removed) {   
    tv.removeDataSource(removed);
  }

  public void peerAdded(PEPeer peer) {  }
  public void peerRemoved(PEPeer peer) {  }
  public void peerManagerWillBeAdded( PEPeerManager  peer_manager ){}
  public void peerManagerAdded(PEPeerManager manager) {  }
  public void peerManagerRemoved(PEPeerManager  manager) {
    tv.removeAllTableRows();
  }

  /**
   * Add datasources already in existance before we called addListener.
   * Faster than allowing addListener to call us one datasource at a time.
   */
  private void addExistingDatasources() {
    if (manager == null || tv.isDisposed()) {
      return;
    }

    PEPiece[] dataSources = manager.getCurrentPieces();
    if (dataSources == null || dataSources.length == 0)
      return;

    tv.addDataSources(dataSources);
    tv.processDataSourceQueue();
  }

  /**
   * @return the manager
   */
  public DownloadManager getManager() {
    return manager;
  }
 
  public boolean toolBarItemActivated(String itemKey) {

    if ( super.toolBarItemActivated(itemKey)){
      return( true );
    }
   
    if (itemKey.equals("run")) {
      ManagerUtils.run(manager);
      return true;
    }
   
    if (itemKey.equals("start")) {
      ManagerUtils.queue(manager, getComposite().getShell());
      return true;
    }
   
    if (itemKey.equals("stop")) {
      ManagerUtils.stop(manager, getComposite().getShell());
      return true;
    }
   
    if (itemKey.equals("remove")) {
      TorrentUtil.removeDownloads(new DownloadManager[] {
        manager
      }, null);
      return true;
    }
    return false;
  }
 
  public void refreshToolBar(Map<String, Boolean> list) {
    list.put("run", true);
    list.put("start", ManagerUtils.isStartable(manager));
    list.put("stop", ManagerUtils.isStopable(manager));
    list.put("remove", true);
   
    super.refreshToolBar(list);
  }
}
TOP

Related Classes of org.gudy.azureus2.ui.swt.views.PiecesView

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.