Package com.aelitis.azureus.ui.swt.columns.torrent

Source Code of com.aelitis.azureus.ui.swt.columns.torrent.ColumnControls$Cell

/**
* Created on April 28, 2007
*
* Copyright 2008 Vuze, Inc.  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; version 2 of the License only.
*
* 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
*/

package com.aelitis.azureus.ui.swt.columns.torrent;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.widgets.Display;

import org.gudy.azureus2.core3.download.DownloadManager;
import org.gudy.azureus2.ui.swt.mainwindow.SWTThread;
import org.gudy.azureus2.ui.swt.plugins.UISWTGraphic;
import org.gudy.azureus2.ui.swt.pluginsimpl.UISWTGraphicImpl;
import org.gudy.azureus2.ui.swt.shells.GCStringPrinter;
import org.gudy.azureus2.ui.swt.views.table.TableCellSWT;
import org.gudy.azureus2.ui.swt.views.table.utils.CoreTableColumn;

import com.aelitis.azureus.ui.common.table.TableRowCore;
import com.aelitis.azureus.ui.swt.columns.utils.ColumnImageClickArea;
import com.aelitis.azureus.ui.swt.utils.ColorCache;

import org.gudy.azureus2.plugins.download.Download;
import org.gudy.azureus2.plugins.ui.Graphic;
import org.gudy.azureus2.plugins.ui.tables.*;

/**
* @author TuxPaper
* @created Apr 28, 2007
*
*/
public class ColumnControls
  extends CoreTableColumn
  implements TableCellAddedListener
{
  public static final Class DATASOURCE_TYPE = Download.class;

  public static String COLUMN_ID = "Controls";

  private static final int COLUMN_WIDTH = 32;

  private static final boolean DEBUG = false;

  private Display display;

  public static Font fontText;

  List listClickAreas = new ArrayList();

  public ColumnControls(String sTableID) {
    super(DATASOURCE_TYPE, COLUMN_ID, ALIGN_LEAD, COLUMN_WIDTH, sTableID);
    initializeAsGraphic(COLUMN_WIDTH);
    setMinWidth(COLUMN_WIDTH);
    setMaxWidth(COLUMN_WIDTH);

    display = SWTThread.getInstance().getDisplay();

    ColumnImageClickArea clickArea;

    clickArea = new ColumnImageClickArea(COLUMN_ID, "up", "image.torrent.up");
    clickArea.setPosition(0, 0);
    listClickAreas.add(clickArea);

    clickArea = new ColumnImageClickArea(COLUMN_ID, "down", "image.torrent.down");
    clickArea.setPosition(16, 0);
    listClickAreas.add(clickArea);
}

  // @see org.gudy.azureus2.plugins.ui.tables.TableCellAddedListener#cellAdded(org.gudy.azureus2.plugins.ui.tables.TableCell)
  public void cellAdded(TableCell cell) {
    new Cell(cell);
  }

  private class Cell
    implements TableCellRefreshListener, TableCellDisposeListener,
    TableCellMouseListener, TableCellVisibilityListener
  {
    public Cell(TableCell cell) {
      cell.addListeners(this);
      cell.setMarginHeight(1);
      cell.setMarginWidth(0);
      cell.setFillCell(true);

      for (Iterator iter = listClickAreas.iterator(); iter.hasNext();) {
        ColumnImageClickArea clickArea = (ColumnImageClickArea) iter.next();
        clickArea.addCell(cell);
      }
    }

    public void dispose(TableCell cell) {
      disposeExisting(cell);
    }

    public void refresh(TableCell cell) {
      refresh(cell, false);
    }

    private void refresh(TableCell cell, boolean bForce) {
      DownloadManager dm = (DownloadManager) cell.getDataSource();
      if (dm == null) {
        disposeExisting(cell);
        return;
      }
      int position = dm.getPosition();

      int cellWidth = cell.getWidth();
      int cellHeight = cell.getHeight();

      Image image = null;
      Graphic graphic = cell.getGraphic();
      if (graphic instanceof UISWTGraphic) {
        image = ((UISWTGraphic)graphic).getImage();
      }
      if (image != null) {
        Rectangle bounds = image.getBounds();
        if (!cell.setSortValue(position) && cell.isValid()
            && bounds.width == cellWidth && bounds.height == cellHeight) {
          return;
        }
      } else {
        cell.setSortValue(position);
      }

      disposeExisting(cell);
      image = new Image(display, cellWidth, cellHeight);

      GC gcImage = new GC(image);
      try {
        Color background = ColorCache.getColor(display, cell.getBackground());
        if (background != null) {
          gcImage.setBackground(background);
          gcImage.fillRectangle(0, 0, cellWidth, cellHeight);
        }
       

//        if (fontText == null) {
//          fontText = Utils.getFontWithHeight(gcImage.getFont(), gcImage, 15);
//        }
//        gcImage.setFont(fontText);
        int[] fg = cell.getForeground();
        gcImage.setForeground(ColorCache.getColor(display, fg[0], fg[1], fg[2]));

        Rectangle bounds = image.getBounds();
        GCStringPrinter.printString(gcImage, "" + position + (dm.getAssumedComplete() ? "^" : "v"), bounds, true,
            false, SWT.BOTTOM | SWT.CENTER);
        gcImage.setFont(null);

        for (Iterator iter = listClickAreas.iterator(); iter.hasNext();) {
          ColumnImageClickArea clickArea = (ColumnImageClickArea) iter.next();
          clickArea.drawImage(cell, gcImage);
        }
      } finally {
        gcImage.dispose();
      }

      disposeExisting(cell);

      if (cell instanceof TableCellSWT) {
        ((TableCellSWT) cell).setGraphic(image);
      } else {
        cell.setGraphic(new UISWTGraphicImpl(image));
      }
    }

    // @see org.gudy.azureus2.plugins.ui.tables.TableCellMouseListener#cellMouseTrigger(org.gudy.azureus2.plugins.ui.tables.TableCellMouseEvent)
    public void cellMouseTrigger(TableCellMouseEvent event) {
      if (event.data instanceof ColumnImageClickArea) {
        DownloadManager dm = (DownloadManager) event.cell.getDataSource();
        if (dm == null) {
          return;
        }

        ColumnImageClickArea clickArea = (ColumnImageClickArea) event.data;
        log(event.cell, "CLICK ON " + clickArea.getId());
        if (clickArea.getId().equals("up")) {
          dm.getGlobalManager().moveUp(dm);
        } else if (clickArea.getId().equals("down")) {
          dm.getGlobalManager().moveDown(dm);
        }
        event.cell.getTableColumn().invalidateCells();
      }
    }

    public void cellVisibilityChanged(TableCell cell, int visibility) {
      if (visibility == TableCellVisibilityListener.VISIBILITY_HIDDEN) {
        //log(cell, "whoo, save");
        disposeExisting(cell);
      } else if (visibility == TableCellVisibilityListener.VISIBILITY_SHOWN) {
        //log(cell, "whoo, draw");
        refresh(cell, true);
      }
    }

    private void disposeExisting(TableCell cell) {
      Graphic oldGraphic = cell.getGraphic();
      //log(cell, oldGraphic);
      if (oldGraphic instanceof UISWTGraphic) {
        Image oldImage = ((UISWTGraphic) oldGraphic).getImage();
        if (oldImage != null && !oldImage.isDisposed()) {
          //log(cell, "dispose");
          cell.setGraphic(null);
          oldImage.dispose();
        }
      }
    }

    private void log(TableCell cell, String s) {
      if (!DEBUG) {
        return;
      }
      System.out.println(((TableRowCore) cell.getTableRow()).getIndex() + ":"
          + System.currentTimeMillis() + ": " + s);
    }
  }
}
TOP

Related Classes of com.aelitis.azureus.ui.swt.columns.torrent.ColumnControls$Cell

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.