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

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

/*
* Created on 16-Jan-2006
* Created by Paul Gardner
* Copyright (C) 2006 Aelitis, 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, or (at your option) any later version.
* 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.
* 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.net.URL;
import java.util.*;
import java.util.List;

import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;

import org.gudy.azureus2.core3.download.DownloadManager;
import org.gudy.azureus2.core3.internat.LocaleTorrentUtil;
import org.gudy.azureus2.core3.internat.MessageText;
import org.gudy.azureus2.core3.torrent.TOTorrent;
import org.gudy.azureus2.core3.torrent.TOTorrentAnnounceURLGroup;
import org.gudy.azureus2.core3.torrent.TOTorrentAnnounceURLSet;
import org.gudy.azureus2.core3.tracker.client.TRTrackerAnnouncer;
import org.gudy.azureus2.core3.tracker.client.TRTrackerScraperResponse;
import org.gudy.azureus2.core3.util.AERunnable;
import org.gudy.azureus2.core3.util.Debug;
import org.gudy.azureus2.ui.swt.Messages;
import org.gudy.azureus2.ui.swt.Utils;
import org.gudy.azureus2.ui.swt.components.BufferedLabel;
import org.gudy.azureus2.ui.swt.views.table.impl.FakeTableCell;

import com.aelitis.azureus.ui.common.table.TableCellCore;
import com.aelitis.azureus.ui.common.table.TableColumnCore;
import com.aelitis.azureus.ui.common.table.impl.TableColumnManager;

import org.gudy.azureus2.plugins.download.*;
import org.gudy.azureus2.plugins.ui.tables.TableManager;
import org.gudy.azureus2.pluginsimpl.local.PluginCoreUtils;

public class
TorrentInfoView
  extends AbstractIView
{
  private static final String  TEXT_PREFIX  = "TorrentInfoView.";
   
  private DownloadManager      download_manager;
   
  private Composite     outer_panel;
 
  private Font       headerFont;
  private FakeTableCell[] cells;

  private ScrolledComposite sc;

  private Composite parent;
 
  protected
  TorrentInfoView( )
  {
  }
 
  public void
  initialize(
    Composite composite)
  {
    this.parent = composite;
   
    if (download_manager == null) {
      return;
    }
   
    // cheap trick to allow datasource changes.  Normally we'd just
    // refill the components with new info, but I didn't write this and
    // I don't want to waste my time :) [tux]
    if (sc != null && !sc.isDisposed()) {
      sc.dispose();
    }

    sc = new ScrolledComposite(composite, SWT.V_SCROLL | SWT.H_SCROLL );
    sc.getVerticalBar().setIncrement(16);
    sc.setExpandHorizontal(true);
    sc.setExpandVertical(true);
    GridData gridData = new GridData(GridData.FILL, GridData.FILL, true, true, 1, 1);
    sc.setLayoutData(gridData)
   
    outer_panel = sc;
   
    Composite panel = new Composite(sc, SWT.NULL);
   
    sc.setContent( panel );
   
   
   
    GridLayout  layout = new GridLayout();
    layout.marginHeight = 0;
    layout.marginWidth = 0;
    layout.numColumns = 1;
    panel.setLayout(layout);

    //int userMode = COConfigurationManager.getIntParameter("User Mode");

      // header
   
    Composite cHeader = new Composite(panel, SWT.BORDER);
    GridLayout configLayout = new GridLayout();
    configLayout.marginHeight = 3;
    configLayout.marginWidth = 0;
    cHeader.setLayout(configLayout);
    gridData = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_CENTER);
    cHeader.setLayoutData(gridData);
   
    Display d = panel.getDisplay();
    cHeader.setBackground(d.getSystemColor(SWT.COLOR_LIST_SELECTION));
    cHeader.setForeground(d.getSystemColor(SWT.COLOR_LIST_SELECTION_TEXT));
   
    Label lHeader = new Label(cHeader, SWT.NULL);
    lHeader.setBackground(d.getSystemColor(SWT.COLOR_LIST_SELECTION));
    lHeader.setForeground(d.getSystemColor(SWT.COLOR_LIST_SELECTION_TEXT));
    FontData[] fontData = lHeader.getFont().getFontData();
    fontData[0].setStyle(SWT.BOLD);
    int fontHeight = (int)(fontData[0].getHeight() * 1.2);
    fontData[0].setHeight(fontHeight);
    headerFont = new Font(d, fontData);
    lHeader.setFont(headerFont);
    lHeader.setText( " " + MessageText.getString( "authenticator.torrent" ) + " : " + download_manager.getDisplayName().replaceAll("&", "&&"));
    gridData = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_CENTER);
    lHeader.setLayoutData(gridData);
   
    Composite gTorrentInfo = new Composite(panel, SWT.NULL);
    gridData = new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL);
    gTorrentInfo.setLayoutData(gridData);
    layout = new GridLayout();
    layout.numColumns = 2;
    gTorrentInfo.setLayout(layout);

      // torrent encoding
   
   
    Label label = new Label(gTorrentInfo, SWT.NULL);
    gridData = new GridData();
    label.setLayoutData( gridData );
    label.setText( MessageText.getString( TEXT_PREFIX + "torrent.encoding" ) + ": " );

    TOTorrent  torrent = download_manager.getTorrent();
    BufferedLabel blabel = new BufferedLabel(gTorrentInfo, SWT.NULL);
    gridData = new GridData();
   
    blabel.setLayoutData( gridData );
    blabel.setText(torrent==null?"":LocaleTorrentUtil.getCurrentTorrentEncoding( torrent ));
   
      // trackers
   
    label = new Label(gTorrentInfo, SWT.NULL);
    gridData = new GridData();
    label.setLayoutData( gridData );
    label.setText( MessageText.getString( "MyTrackerView.tracker" ) + ": " );

    String  trackers = "";
   
    if ( torrent != null ){
     
      TOTorrentAnnounceURLGroup group = torrent.getAnnounceURLGroup();
     
      TOTorrentAnnounceURLSet[]  sets = group.getAnnounceURLSets();
     
      List  tracker_list = new ArrayList();
     
      URL  url = torrent.getAnnounceURL();
     
      tracker_list.add( url.getHost() + (url.getPort()==-1?"":(":"+url.getPort())));
       
      for (int i=0;i<sets.length;i++){
                   
        TOTorrentAnnounceURLSet  set = sets[i];
       
        URL[]  urls = set.getAnnounceURLs();
       
        for (int j=0;j<urls.length;j++){
       
          url = urls[j];
         
          String  str = url.getHost() + (url.getPort()==-1?"":(":"+url.getPort()));
         
          if ( !tracker_list.contains(str )){
           
            tracker_list.add(str);
          }
        }
      }
       
      TRTrackerAnnouncer announcer = download_manager.getTrackerClient();
     
      URL  active_url = null;
     
      if ( announcer != null ){
       
        active_url = announcer.getTrackerURL();
       
      }else{
       
        TRTrackerScraperResponse scrape = download_manager.getTrackerScrapeResponse();
       
        if ( scrape != null ){
         
          active_url = scrape.getURL();
        }
      }
     
      if ( active_url == null ){
       
        active_url = torrent.getAnnounceURL();
      }
     
      trackers = active_url.getHost() + (active_url.getPort()==-1?"":(":"+active_url.getPort()));
   
      tracker_list.remove( trackers );
     
      if ( tracker_list.size() > 0 ){
       
        trackers += " (";
       
        for (int i=0;i<tracker_list.size();i++){
         
          trackers += (i==0?"":", ") + tracker_list.get(i);
        }
       
        trackers += ")";
      }
    }
   
    blabel = new BufferedLabel(gTorrentInfo, SWT.NULL);
    gridData = new GridData();
    blabel.setLayoutData( gridData );
    blabel.setText( trackers );

   
      // columns
        
    Group gColumns = new Group(panel, SWT.NULL);
    Messages.setLanguageText(gColumns, TEXT_PREFIX + "columns" );
    gridData = new GridData(GridData.FILL_BOTH);
    gColumns.setLayoutData(gridData);
    layout = new GridLayout();
    layout.numColumns = 4;
    gColumns.setLayout(layout);
   
    Map<String, FakeTableCell>  usable_cols = new HashMap<String, FakeTableCell>();
   
    TableColumnManager col_man = TableColumnManager.getInstance();
   
    TableColumnCore[][] cols_sets = {
      col_man.getAllTableColumnCoreAsArray(DownloadTypeIncomplete.class,
          TableManager.TABLE_MYTORRENTS_INCOMPLETE),
      col_man.getAllTableColumnCoreAsArray(DownloadTypeComplete.class,
          TableManager.TABLE_MYTORRENTS_COMPLETE),
    };
       
    for (int i=0;i<cols_sets.length;i++){
     
      TableColumnCore[]  cols = cols_sets[i];
     
      for (int j=0;j<cols.length;j++){
       
        TableColumnCore  col = cols[j];
       
        String id = col.getName();
     
        if (usable_cols.containsKey(id)) {
         
          continue;
        }
       
        FakeTableCell fakeTableCell = null;
        try {
          fakeTableCell = new FakeTableCell(col);
          fakeTableCell.setOrentation(SWT.LEFT);
          fakeTableCell.setWrapText(false);
          fakeTableCell.setDataSource(download_manager);
          col.invokeCellAddedListeners(fakeTableCell);
          // One refresh to see if it throws up
          fakeTableCell.refresh();
          usable_cols.put(id, fakeTableCell);
        } catch (Throwable t) {
          //System.out.println("not usable col: " + id + " - " + Debug.getCompressedStackTrace());
          try {
            if (fakeTableCell != null) {
              fakeTableCell.dispose();
            }
          } catch (Throwable t2) {
            //ignore;
          }
        }
      }
    }
   
    Collection<FakeTableCell> values = usable_cols.values();
   
    cells = new FakeTableCell[values.size()];
   
    values.toArray( cells );
   
    Arrays.sort(
        cells,
        new Comparator<FakeTableCell>()
        {
          public int compare(FakeTableCell o1, FakeTableCell o2) {
            TableColumnCore  c1 = (TableColumnCore) o1.getTableColumn();
            TableColumnCore  c2 = (TableColumnCore) o2.getTableColumn();

            String key1 = MessageText.getString(c1.getTitleLanguageKey());
            String key2 = MessageText.getString(c2.getTitleLanguageKey());
           
            return key1.compareToIgnoreCase(key2);
          }
        });
           
    for (int i=0;i<cells.length;i++){
     
      final FakeTableCell  cell = cells[i];
     
      label = new Label(gColumns, SWT.NULL);
      gridData = new GridData();
      if ( i%2 == 1 ){
        gridData.horizontalIndent = 16;
      }
      label.setLayoutData( gridData );
      String key = ((TableColumnCore) cell.getTableColumn()).getTitleLanguageKey();
      label.setText(MessageText.getString(key) + ": ");
      label.setToolTipText(MessageText.getString(key + ".info", ""));

      final Composite c = new Composite(gColumns, SWT.NONE);
      gridData = new GridData( GridData.FILL_HORIZONTAL);
      gridData.heightHint = 16;
      c.setLayoutData(gridData);
      cell.setControl(c);
      cell.invalidate();
      cell.refresh();
      c.addListener(SWT.MouseHover, new Listener() {
        public void handleEvent(Event event) {
          Object toolTip = cell.getToolTip();
          if (toolTip instanceof String) {
            String s = (String) toolTip;
            c.setToolTipText(s);
          }
        }
      });
    }
   
    refresh();
   
    sc.setMinSize( panel.computeSize( SWT.DEFAULT, SWT.DEFAULT ));
  }
 
  public void
  refresh()
  {
    if ( cells != null ){
     
      for (int i=0;i<cells.length;i++){
       
        TableCellCore cell = cells[i];
        try {cell.refresh();}
        catch (Exception e) {Debug.printStackTrace(e, "Error refreshing cell: " + cells[i].getTableColumn().getName());}
      }
    }
  }

 
  public Composite
  getComposite()
  {
    return outer_panel;
  }
 
  public String
  getFullTitle()
  {
    return MessageText.getString("GeneralView.section.info");
  }

  public String
  getData()
  {
    return( "GeneralView.section.info" );
  }
 
  public void
  delete()
  {
    super.delete();
   
    if ( headerFont != null ){
     
      headerFont.dispose();
    }
   
    if ( cells != null ){
     
      for (int i=0;i<cells.length;i++){
       
        TableCellCore  cell = cells[i];
       
        cell.dispose();
      }
    }
  }
 
  // @see org.gudy.azureus2.ui.swt.views.AbstractIView#dataSourceChanged(java.lang.Object)
  public void dataSourceChanged(Object newDataSource) {
    if (newDataSource instanceof DownloadManager) {
      download_manager = (DownloadManager) newDataSource;
    }

    Utils.execSWTThread(new AERunnable() {
      public void runSupport() {
        if (parent != null) {
          initialize(parent);
        }
      }
    });
  }
}
TOP

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

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.