Package org.gudy.azureus2.ui.swt.components

Source Code of org.gudy.azureus2.ui.swt.components.BufferedGraphicTableItem1

/*
* File    : BufferedGraphicTableItem1.java
* Created : 24 nov. 2003
*
* Azureus - a Java Bittorrent client
*
* 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
*/
package org.gudy.azureus2.ui.swt.components;

import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Table;
import org.gudy.azureus2.ui.swt.Utils;
import org.gudy.azureus2.ui.swt.components.BufferedTableRow;
import org.gudy.azureus2.ui.swt.views.table.TableOrTreeSWT;

/** Draws an image at a column in a row of a table using direct paints to the
*  table.
* In comparison to BufferedGraphicTable2,
* Pros:
*  - Cleaner
*  - More proper
*
* Cons:
*  - Bug - overpainting of table causing our cell to redraw everytime any other cell redraws
*          (New for Windows since SWT3.0M8, always been there for linux)
*  - other bugs
*
* @see BufferedGraphicTable2
* @author TuxPaper
*
*/
public abstract class BufferedGraphicTableItem1 extends BufferedTableItemImpl
    implements BufferedGraphicTableItem
{
  private int marginHeight = 1;
  private int marginWidth = 1;
  private int orientation = SWT.CENTER;

  //The Buffered image
  private Image image;
  /** Track if we have ever drawn the cell.  Don't draw the cell using our
   * own GC if we've never drawn before.  ie.  If we setGraphic before the
   * cell is visible, don't paint.
   */
  private boolean neverDrawn = true;
 
 
  public BufferedGraphicTableItem1(BufferedTableRow row,int position) {
    super(row, position);
  }

  /** Retrieve the graphic related to this table item.
   * @return the Image that is draw in the cell, or null if there is none.
   */
  public Image getGraphic() {
    return image;
  }
 
  /* Sets image to be drawn.
   * @param img Image to be stored & drawn
   * @return true - image was changed.<br> 
   *         false = image was the same (doesn't mean image bits were the same)
   */
  public boolean setGraphic(Image img) {
    boolean bImageSet = (image != img);
    boolean bDoRedraw = (img == null);

    if (bImageSet) {
      // redraw if size changed to wipe area
      if (!bDoRedraw &&
          image != null && !image.isDisposed() && !img.isDisposed() &&
          !image.getBounds().equals(img.getBounds()))
        bDoRedraw = true;
      image = img;
    }
    //doPaint(bDoRedraw);

    return bImageSet;
  }

  public boolean needsPainting() {
    return true;
  }

  public void dispose() {
    super.dispose();
    image = null;
  }
 
  /** Calculate the bounds of the receiver should be drawing in
    * @return what size/position the canvas should be
    */
  public Rectangle getBoundsForCanvas() {
    Rectangle bounds = super.getBounds();
    if(bounds == null)
      return null;
    bounds.y += marginHeight;
    bounds.height -= (marginHeight * 2);
    bounds.x += marginWidth;
    bounds.width -= (marginWidth * 2);
    return bounds;
  }
 
  // @see {getBounds}
  public Rectangle getBounds() {
    return getBoundsForCanvas();
  }
 
  public Rectangle getBoundsRaw() {
    return super.getBounds();
  }

  public Point getSize() {
    Rectangle bounds = super.getBounds();
    if(bounds == null)
      return new Point(0, 0);
    return new Point(bounds.width - (marginWidth * 2),
                     bounds.height - (marginHeight * 2));
  }
 
  public void invalidate() {
  }
 
  public int getMarginHeight() {
    return marginHeight;
  }

  public int getMarginWidth() {
    return marginWidth;
  }

  public void setMargin(int width, int height) {
    if (width >= 0) {
      marginWidth = width;
    }
   
    if (height >= 0) {
      marginHeight = height;
    }
  }

  public int getOrientation() {
    return orientation;
  }
 
  public void setOrientation(int orientation) {
    this.orientation = orientation;
  }
 
  public Image getBackgroundImage() {
    Image imageRowBG = row.getBackgroundImage();
    if (imageRowBG != null) {
      Rectangle bounds = super.getBounds();
     
      int wInside = bounds.width - (marginWidth * 2);
      int hInside = bounds.height - (marginHeight * 2);
      Image imageCellBG = new Image(Display.getDefault(), wInside, hInside);
      GC gc = new GC(imageCellBG);
      gc.drawImage(imageRowBG, bounds.x + marginWidth, 0 + marginHeight,
          wInside, hInside, 0, 0, wInside, hInside);
      gc.dispose();
     
      return imageCellBG;
    }
   
    TableOrTreeSWT table = row.getTable();
   
    Rectangle bounds = super.getBounds();
   
    if (bounds.isEmpty()) {
      return null;
    }
   
    Image image = new Image(Display.getDefault(), bounds.width
        - (marginWidth * 2), bounds.height - (marginHeight * 2));
   
    GC gc = new GC(image);
    gc.setForeground(getBackground());
    gc.setBackground(getBackground());
    gc.fillRectangle(0, 0, bounds.width, bounds.height);
    gc.dispose();
   
    return image;
  }
}
TOP

Related Classes of org.gudy.azureus2.ui.swt.components.BufferedGraphicTableItem1

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.