Package org.vietspider.ui.widget.tabfolder

Source Code of org.vietspider.ui.widget.tabfolder.CTabItem

/*******************************************************************************
* Copyright (c) 2000, 2005 IBM Corporation and others.
* 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.eclipse.org/legal/epl-v10.html
*
* Contributors:
*     IBM Corporation - initial API and implementation
*******************************************************************************/
package org.vietspider.ui.widget.tabfolder;


import org.eclipse.swt.SWT;
import org.eclipse.swt.SWTException;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Item;
import org.eclipse.swt.widgets.Widget;

/**
* Instances of this class represent a selectable user interface object
* that represent a page in a notebook widget.
*
* <dl>
* <dt><b>Styles:</b></dt>
* <dd>SWT.CLOSE</dd>
* <dt><b>Events:</b></dt>
* <dd>(none)</dd>
* </dl>
* <p>
* IMPORTANT: This class is <em>not</em> intended to be subclassed.
* </p>
*/
public class CTabItem extends Item {
  CTabFolder parent;
  int x,y,width,height = 0;
  Control control; // the tab page
 
  String toolTipText;
  String shortenedText;
  int shortenedTextWidth;
 
  // Appearance
  Font font;
  Image disabledImage;
 
  Rectangle closeRect = new Rectangle(0, 0, 0, 0);
  int closeImageState = CTabFolder.NONE;
  boolean showClose = false;
  boolean showing = false;
 
  // internal constants
  static final int TOP_MARGIN = 2;
  static final int BOTTOM_MARGIN = 2;
  static final int LEFT_MARGIN = 4;
  static final int RIGHT_MARGIN = 4;
  static final int INTERNAL_SPACING = 4;
  static final int FLAGS = SWT.DRAW_TRANSPARENT | SWT.DRAW_MNEMONIC;
  static final String ELLIPSIS = "..."; //$NON-NLS-1$ // could use the ellipsis glyph on some platforms "\u2026"
 
  /**
   * Constructs a new instance of this class given its parent
   * (which must be a <code>CTabFolder</code>) and a style value
   * describing its behavior and appearance. The item is added
   * to the end of the items maintained by its parent.
   * <p>
   * The style value is either one of the style constants defined in
   * class <code>SWT</code> which is applicable to instances of this
   * class, or must be built by <em>bitwise OR</em>'ing together
   * (that is, using the <code>int</code> "|" operator) two or more
   * of those <code>SWT</code> style constants. The class description
   * lists the style constants that are applicable to the class.
   * Style bits are also inherited from superclasses.
   * </p>
   *
   * @param parent a CTabFolder which will be the parent of the new instance (cannot be null)
   * @param style the style of control to construct
   *
   * @exception IllegalArgumentException <ul>
   *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
   * </ul>
   * @exception SWTException <ul>
   *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
   * </ul>
   *
   * @see SWT
   * @see Widget#getStyle()
   */
  public CTabItem (CTabFolder parent, int style) {
    this(parent, style, parent.getItemCount());
  }
 
  public CTabItem (CTabFolder parent, int style, int index) {
    super (parent, SWT.NONE);
    showClose = (style & SWT.CLOSE) != 0;
    parent.createItem (this, index);
  }
 
  static String shortenText(GC gc, String text, int width) {
    if (gc.textExtent(text, FLAGS).x <= width) return text;
    int ellipseWidth = gc.textExtent(ELLIPSIS, FLAGS).x;
    int length = text.length();
    int end = length - 1;
    while (end > 0) {
      text = text.substring(0, end);
      int l = gc.textExtent(text, FLAGS).x;
      if (l + ellipseWidth <= width) {
        return text + ELLIPSIS;
      }
      end--;
    }
    return text.substring(0,1);
  }
  public void dispose() {
    if (isDisposed ()) return;
    //if (!isValidThread ()) error (SWT.ERROR_THREAD_INVALID_ACCESS);
    parent.destroyItem(this);
    super.dispose();
    parent = null;
    control = null;
    toolTipText = null;
    shortenedText = null;
    font = null;
  }
  void drawClose(GC gc) {
    if (closeRect.width == 0 || closeRect.height == 0) return;
    Display display = getDisplay();
   
    // draw X 9x9
    int indent = Math.max(1, (CTabFolder.BUTTON_SIZE-9)/2);
    int x = closeRect.x + indent;
    int y = closeRect.y + indent;
    y += parent.onBottom ? -1 : 1;   
   
    Color closeBorder = display.getSystemColor(CTabFolder.BUTTON_BORDER);
    switch (closeImageState) {
    case CTabFolder.NORMAL: {
      int[] shape = new int[] {x,y, x+2,y, x+4,y+2, x+5,y+2, x+7,y, x+9,y,
          x+9,y+2, x+7,y+4, x+7,y+5, x+9,y+7, x+9,y+9,
          x+7,y+9, x+5,y+7, x+4,y+7, x+2,y+9, x,y+9,
          x,y+7, x+2,y+5, x+2,y+4, x, y+2};
      gc.setBackground(display.getSystemColor(CTabFolder.BUTTON_FILL));
      gc.fillPolygon(shape);
      gc.setForeground(closeBorder);
      gc.drawPolygon(shape);
      break;
    }
    case CTabFolder.HOT: {
      int[] shape = new int[] {x,y, x+2,y, x+4,y+2, x+5,y+2, x+7,y, x+9,y,
          x+9,y+2, x+7,y+4, x+7,y+5, x+9,y+7, x+9,y+9,
          x+7,y+9, x+5,y+7, x+4,y+7, x+2,y+9, x,y+9,
          x,y+7, x+2,y+5, x+2,y+4, x,y+2};
      Color fill = new Color(display, CTabFolder.CLOSE_FILL);
      gc.setBackground(fill);
      gc.fillPolygon(shape);
      fill.dispose();
      gc.setForeground(closeBorder);
      gc.drawPolygon(shape);
      break;
    }
    case CTabFolder.SELECTED: {
      int[] shape = new int[] {x+1,y+1, x+3,y+1, x+5,y+3, x+6,y+3, x+8,y+1, x+10,y+1,
          x+10,y+3, x+8,y+5, x+8,y+6, x+10,y+8, x+10,y+10,
          x+8,y+10, x+6,y+8, x+5,y+8, x+3,y+10, x+1,y+10,
          x+1,y+8, x+3,y+6, x+3,y+5, x+1,y+3};
      Color fill = new Color(display, CTabFolder.CLOSE_FILL);
      gc.setBackground(fill);
      gc.fillPolygon(shape);
      fill.dispose();
      gc.setForeground(closeBorder);
      gc.drawPolygon(shape);
      break;
    }
    case CTabFolder.NONE: {
      int[] shape = new int[] {x,y, x+10,y, x+10,y+10, x,y+10};
      if (parent.gradientColors != null && !parent.gradientVertical) {
        parent.drawBackground(gc, shape, false);
      } else {
        Color defaultBackground = parent.getBackground();
        Image image = parent.bgImage;
        Color[] colors = parent.gradientColors;
        int[] percents = parent.gradientPercents;
        boolean vertical = parent.gradientVertical;
        parent.drawBackground(gc, shape, x, y, 10, 10, defaultBackground, image, colors, percents, vertical);
      }
      break;
    }
    }
  }
  void drawSelected(GC gc ) {
    if(parent == null) return;
    Point size = parent.getSize();
    int rightEdge = Math.min (x + width, parent.getRightItemEdge());
   
    //   Draw selection border across all tabs
    int xx = parent.borderLeft;
    int yy = parent.onBottom ? size.y - parent.borderBottom - parent.tabHeight - parent.highlight_header : parent.borderTop + parent.tabHeight + 1;
    int ww = size.x - parent.borderLeft - parent.borderRight;
    int hh = parent.highlight_header - 1;
    int[] shape = new int[] {xx,yy, xx+ww,yy, xx+ww,yy+hh, xx,yy+hh};
    if (parent.selectionGradientColors != null && !parent.selectionGradientVertical) {
      parent.drawBackground(gc, shape, true);
    } else {
      gc.setBackground(parent.selectionBackground);
      gc.fillRectangle(xx, yy, ww, hh);
    }
   
    if (parent.single) {
      if (!showing) return;
    } else {
      // if selected tab scrolled out of view or partially out of view
      // just draw bottom line
      if (!showing){
        int x1 = Math.max(0, parent.borderLeft - 1);
        int y1 = (parent.onBottom) ? y - 1 : y + height;
        int x2 = size.x - parent.borderRight;
        gc.setForeground(CTabFolder.borderColor);
        gc.drawLine(x1, y1, x2, y1);
        return;
      }
     
      // draw selected tab background and outline
      shape = null;
      if (this.parent.onBottom) {
        int[] left = parent.simple ? CTabFolder.SIMPLE_BOTTOM_LEFT_CORNER : CTabFolder.BOTTOM_LEFT_CORNER;
        int[] right = parent.simple ? CTabFolder.SIMPLE_BOTTOM_RIGHT_CORNER : parent.curve;
        if (parent.borderLeft == 0 && parent.indexOf(this) == parent.firstIndex) {
          left = new int[]{x, y+height};
        }
        shape = new int[left.length+right.length+8];
        int index = 0;
        shape[index++] = x; // first point repeated here because below we reuse shape to draw outline
        shape[index++] = y - 1;
        shape[index++] = x;
        shape[index++] = y - 1;
        for (int i = 0; i < left.length/2; i++) {
          shape[index++] = x + left[2*i];
          shape[index++] = y + height + left[2*i+1] - 1;
        }
        for (int i = 0; i < right.length/2; i++) {
          shape[index++] = parent.simple ? rightEdge - 1 + right[2*i] : rightEdge - parent.curveIndent + right[2*i];
          shape[index++] = parent.simple ? y + height + right[2*i+1] - 1 : y + right[2*i+1] - 2;
        }
        shape[index++] = parent.simple ? rightEdge - 1 : rightEdge + parent.curveWidth - parent.curveIndent;
        shape[index++] = y - 1;
        shape[index++] = parent.simple ? rightEdge - 1 : rightEdge + parent.curveWidth - parent.curveIndent;
        shape[index++] = y - 1;
      } else {
        int[] left = parent.simple ? CTabFolder.SIMPLE_TOP_LEFT_CORNER : CTabFolder.TOP_LEFT_CORNER;
        int[] right = parent.simple ? CTabFolder.SIMPLE_TOP_RIGHT_CORNER : parent.curve;
        if (parent.borderLeft == 0 && parent.indexOf(this) == parent.firstIndex) {
          left = new int[]{x, y};
        }
        shape = new int[left.length+right.length+8];
        int index = 0;
        shape[index++] = x; // first point repeated here because below we reuse shape to draw outline
        shape[index++] = y + height + 1;
        shape[index++] = x;
        shape[index++] = y + height + 1;
        for (int i = 0; i < left.length/2; i++) {
          shape[index++] = x + left[2*i];
          shape[index++] = y + left[2*i+1];
        }
        for (int i = 0; i < right.length/2; i++) {
          shape[index++] = parent.simple ? rightEdge - 1 + right[2*i] : rightEdge - parent.curveIndent + right[2*i];
          shape[index++] = y + right[2*i+1];
        }
        shape[index++] = parent.simple ? rightEdge - 1 : rightEdge + parent.curveWidth - parent.curveIndent;
        shape[index++] = y + height + 1;
        shape[index++] = parent.simple ? rightEdge - 1 : rightEdge + parent.curveWidth - parent.curveIndent;
        shape[index++] = y + height + 1;
      }
     
      Rectangle clipping = gc.getClipping();
      Rectangle bounds = getBounds();
      bounds.height += 1;
      if (parent.onBottom) bounds.y -= 1;
      boolean tabInPaint = clipping.intersects(bounds);
     
      if (tabInPaint) {
        // fill in tab background
        if (parent.selectionGradientColors != null && !parent.selectionGradientVertical) {
          parent.drawBackground(gc, shape, true);
        } else {
          Color defaultBackground = parent.selectionBackground;
          Image image = parent.selectionBgImage;
          Color[] colors = parent.selectionGradientColors;
          int[] percents = parent.selectionGradientPercents;
          boolean vertical = parent.selectionGradientVertical;
          xx = x;
          yy = parent.onBottom ? y -1 : y + 1;
          ww = width;
          hh = height;
          if (!parent.single && !parent.simple) ww += parent.curveWidth - parent.curveIndent;
          parent.drawBackground(gc, shape, xx, yy, ww, hh, defaultBackground, image, colors, percents, vertical);
        }
      }
     
      // draw outline
      shape[0] = Math.max(0, parent.borderLeft - 1);
      if (parent.borderLeft == 0 && parent.indexOf(this) == parent.firstIndex) {
        shape[1] = parent.onBottom ? y + height - 1 : y;
        shape[5] = shape[3] = shape[1];
      }
      shape[shape.length - 2] = size.x - parent.borderRight + 1;
      for (int i = 0; i < shape.length/2; i++) {
        if (shape[2*i + 1] == y + height + 1) shape[2*i + 1] -= 1;
      }
      RGB inside = parent.selectionBackground.getRGB();
      if (parent.selectionBgImage != null ||
          (parent.selectionGradientColors != null && parent.selectionGradientColors.length > 1)) {
        inside = null;
      }
      RGB outside = parent.getBackground().getRGB();   
      if (parent.bgImage != null ||
          (parent.gradientColors != null && parent.gradientColors.length > 1)) {
        outside = null;
      }
      parent.antialias(shape, CTabFolder.borderColor.getRGB(), inside, outside, gc);
      gc.setForeground(CTabFolder.borderColor);
      gc.drawPolyline(shape);
     
      if (!tabInPaint) return;
    }
   
    // draw Image
    int xDraw = x + LEFT_MARGIN;
    if (parent.single && (parent.showClose || showClose)) xDraw += CTabFolder.BUTTON_SIZE;
    Image image = getImage();
    if (image != null) {
      Rectangle imageBounds = image.getBounds();
      // only draw image if it won't overlap with close button
      int maxImageWidth = rightEdge - xDraw - RIGHT_MARGIN;
      if (!parent.single && closeRect.width > 0) maxImageWidth -= closeRect.width + INTERNAL_SPACING;
      if (imageBounds.width < maxImageWidth) {
        int imageX = xDraw;
        int imageHeight = imageBounds.height;
        int imageY = y + (height - imageHeight) / 2;
        imageY += parent.onBottom ? -1 : 1;
        int imageWidth = imageBounds.width * imageHeight / imageBounds.height;
        gc.drawImage(image,
            imageBounds.x, imageBounds.y, imageBounds.width, imageBounds.height,
            imageX, imageY, imageWidth, imageHeight);
        xDraw += imageWidth + INTERNAL_SPACING;
      }
    }
   
    // draw Text
    int textWidth = rightEdge - xDraw - RIGHT_MARGIN;
    if (!parent.single && closeRect.width > 0) textWidth -= closeRect.width + INTERNAL_SPACING;
    if (textWidth > 0) {
      Font gcFont = gc.getFont();
      gc.setFont(font == null ? parent.getFont() : font);
     
      if (shortenedText == null || shortenedTextWidth != textWidth) {
        shortenedText = shortenText(gc, getText(), textWidth);
        shortenedTextWidth = textWidth;
      }
      Point extent = gc.textExtent(shortenedText, FLAGS)
      int textY = y + (height - extent.y) / 2;
      textY += parent.onBottom ? -1 : 1;
     
      gc.setForeground(parent.selectionForeground);
      gc.drawText(shortenedText, xDraw, textY, FLAGS);
      gc.setFont(gcFont);
     
      // draw a Focus rectangle
      if (parent.isFocusControl()) {
        Display display = getDisplay();
        if (parent.simple || parent.single) {
          gc.setBackground(display.getSystemColor(SWT.COLOR_BLACK));
          gc.setForeground(display.getSystemColor(SWT.COLOR_WHITE));
          gc.drawFocus(xDraw-1, textY-1, extent.x+2, extent.y+2);
        } else {
          gc.setForeground(display.getSystemColor(CTabFolder.BUTTON_BORDER));
          gc.drawLine(xDraw, textY+extent.y+1, xDraw+extent.x+1, textY+extent.y+1);
        }
      }
    }
    if (parent.showClose || showClose) drawClose(gc);
  }
  void drawUnselected(GC gc) {
    // Do not draw partial items
    if (!showing) return;
   
    Rectangle clipping = gc.getClipping();
    Rectangle bounds = getBounds();
    if (!clipping.intersects(bounds)) return;
   
    // draw border
    int nextVisible = -1;
    for (int i = parent.indexOf(this)+1; i < parent.items.length; i++) {
      if (parent.items[i].showing) {
        nextVisible = i;
        break;
      }
    }
    if (nextVisible == -1 || nextVisible != parent.selectedIndex) {
      gc.setForeground(CTabFolder.borderColor);
      gc.drawLine(x + width - 1, y, x + width - 1, y + height);
    }
    // draw Image
    int xDraw = x + LEFT_MARGIN;
    Image image = getImage();
    if (image != null && parent.showUnselectedImage) {
      Rectangle imageBounds = image.getBounds();
      // only draw image if it won't overlap with close button
      int maxImageWidth = x + width - xDraw - RIGHT_MARGIN;
      if (parent.showUnselectedClose && (parent.showClose || showClose)) {
        maxImageWidth -= closeRect.width + INTERNAL_SPACING;
      }
      if (imageBounds.width < maxImageWidth) {   
        int imageX = xDraw;
        int imageHeight = imageBounds.height;
        int imageY = y + (height - imageHeight) / 2;
        imageY += parent.onBottom ? -1 : 1;
        int imageWidth = imageBounds.width * imageHeight / imageBounds.height;
        gc.drawImage(image,
            imageBounds.x, imageBounds.y, imageBounds.width, imageBounds.height,
            imageX, imageY, imageWidth, imageHeight);
        xDraw += imageWidth + INTERNAL_SPACING;
      }
    }
    // draw Text
    int textWidth = x + width - xDraw - RIGHT_MARGIN;
    if (parent.showUnselectedClose && (parent.showClose || showClose)) {
      textWidth -= closeRect.width + INTERNAL_SPACING;
    }
    if (textWidth > 0) {
      Font gcFont = gc.getFont();
      gc.setFont(font == null ? parent.getFont() : font);
      if (shortenedText == null || shortenedTextWidth != textWidth) {
        shortenedText = shortenText(gc, getText(), textWidth);
        shortenedTextWidth = textWidth;
     
      Point extent = gc.textExtent(shortenedText, FLAGS);
      int textY = y + (height - extent.y) / 2;
      textY += parent.onBottom ? -1 : 1;
      gc.setForeground(parent.getForeground());
      gc.drawText(shortenedText, xDraw, textY, FLAGS);
      gc.setFont(gcFont);
    }
    // draw close
    if (parent.showUnselectedClose && (parent.showClose || showClose)) drawClose(gc);
  }
 
  public Rectangle getBounds () {
    //checkWidget();
    int w = width;
    if (!parent.simple && !parent.single && parent.indexOf(this) == parent.selectedIndex) w += parent.curveWidth - parent.curveIndent;
    return new Rectangle(x, y, w, height);
  }
  /**
   * Gets the control that is displayed in the content are of the tab item.
   *
   * @return the control
   *
   * @exception SWTException <ul>
   *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
   *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
   * </ul>
   */
  public Control getControl () {
    checkWidget();
    return control;
  }
 
  public Font getFont() {
    checkWidget();
    if (font != null) return font;
    return parent.getFont();
  }
 
  public CTabFolder getParent () {
    //checkWidget();
    return parent;
  }
  public String getToolTipText () {
    checkWidget();
    if (toolTipText == null && shortenedText != null) {
      String text = getText();
      if (!shortenedText.equals(text)) return text;
    }
    return toolTipText;
  }
 
  public boolean isShowing () {
    checkWidget();
    return showing;
  }
  void onPaint(GC gc, boolean isSelected) {
    if (width == 0 || height == 0) return;
    if (isSelected) {
      drawSelected(gc);
    } else {
      drawUnselected(gc);
    }
  }
  int preferredHeight(GC gc) {
    Image image = getImage();
    int h = (image == null) ? 0 : image.getBounds().height;
    String text = getText();
    if (font == null) {
      h = Math.max(h, gc.textExtent(text, FLAGS).y);
    } else {
      Font gcFont = gc.getFont();
      gc.setFont(font);
      h = Math.max(h, gc.textExtent(text, FLAGS).y);
      gc.setFont(gcFont);
    }
    return h + TOP_MARGIN + BOTTOM_MARGIN;
  }
  int preferredWidth(GC gc, boolean isSelected, boolean minimum) {
    if (isDisposed()) return 0;
    int w = 0;
    Image image = getImage();
    if (image != null && (isSelected || parent.showUnselectedImage)) {
      w += image.getBounds().width;
    }
    String text = null;
    if (minimum) {
      int minChars = parent.minChars;
      text = minChars == 0 ? null : getText();
      if (text != null && text.length() > minChars) {
        int end = minChars < ELLIPSIS.length() + 1 ? minChars : minChars - ELLIPSIS.length();
        text = text.substring(0, end);
        if (minChars > ELLIPSIS.length() + 1) text += ELLIPSIS;
      }
    } else {
      text = getText();
    }
    if (text != null) {
      if (w > 0) w += INTERNAL_SPACING;
      if (font == null) {
        w += gc.textExtent(text, FLAGS).x;
      } else {
        Font gcFont = gc.getFont();
        gc.setFont(font);
        w += gc.textExtent(text, FLAGS).x;
        gc.setFont(gcFont);
      }
    }
    if (parent.showClose || showClose) {
      if (isSelected || parent.showUnselectedClose) {
        if (w > 0) w += INTERNAL_SPACING;
        w += CTabFolder.BUTTON_SIZE;
      }
    }
    return w + LEFT_MARGIN + RIGHT_MARGIN;
  }
  /**
   * Sets the control that is used to fill the client area of
   * the tab folder when the user selects the tab item.
   *
   * @param control the new control (or null)
   *
   * @exception IllegalArgumentException <ul>
   *    <li>ERROR_INVALID_ARGUMENT - if the control has been disposed</li>
   *    <li>ERROR_INVALID_PARENT - if the control is not in the same widget tree</li>
   * </ul>
   * @exception SWTException <ul>
   *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
   *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
   * </ul>
   */
  public void setControl (Control control) {
    checkWidget();
    if (control != null) {
      if (control.isDisposed()) SWT.error (SWT.ERROR_INVALID_ARGUMENT);
      if (control.getParent() != parent) SWT.error (SWT.ERROR_INVALID_PARENT);
    }
    if (this.control != null && !this.control.isDisposed()) {
      this.control.setVisible(false);
    }
    this.control = control;
    if (this.control != null) {
      int index = parent.indexOf (this);
      if (index == parent.getSelectionIndex ()){
        this.control.setBounds(parent.getClientArea ());
        this.control.setVisible(true);
      } else {
        this.control.setVisible(false);
      }
    }
  }
  public void setDisabledImage (Image image) {
    checkWidget();
    if (image != null && image.isDisposed ()) {
      SWT.error(SWT.ERROR_INVALID_ARGUMENT);
    }
    this.disabledImage = image;
  }
  public void setFont (Font font){
    checkWidget();
    if (font != null && font.isDisposed ()) {
      SWT.error(SWT.ERROR_INVALID_ARGUMENT);
    }
    if (font == null && this.font == null) return;
    if (font != null && font.equals(this.font)) return;
    this.font = font;
    if (!parent.updateTabHeight(false)) {
      parent.updateItems();
      parent.redrawTabs();
    }
  }
  public void setImage (Image image) {
    checkWidget();
    if (image != null && image.isDisposed ()) {
      SWT.error(SWT.ERROR_INVALID_ARGUMENT);
    }
    Image oldImage = getImage();
    if (image == null && oldImage == null) return;
    if (image != null && image.equals(oldImage)) return;
    super.setImage(image);
    if (!parent.updateTabHeight(false)) {
      // If image is the same size as before,
      // redraw only the image
      if (oldImage != null && image != null) {
        Rectangle oldBounds = oldImage.getBounds();
        Rectangle bounds = image.getBounds();
        if (bounds.width == oldBounds.width && bounds.height == oldBounds.height) {
          if (showing) parent.redraw(x, y, width, height, false);
          return;
        }
      }
      parent.updateItems();
      parent.redrawTabs();
    }
  }
  public void setText (String string) {
    checkWidget();
    if (string == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
    if(string.length() > 40) string = string.substring(0, 40)+"...";
    if (string.equals(getText())) return;
    super.setText(string);
    shortenedText = null;
    shortenedTextWidth = 0;
    if (!parent.updateTabHeight(false)) {
      parent.updateItems();
      parent.redrawTabs();
    }
  }
  /**
   * Sets the receiver's tool tip text to the argument, which
   * may be null indicating that no tool tip text should be shown.
   *
   * @param string the new tool tip text (or null)
   *
   * @exception SWTException <ul>
   *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
   *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
   * </ul>
   */
  public void setToolTipText (String string) {
    checkWidget();
    toolTipText = string;
  }
 
  public void setShowClose(boolean showClose) {
    this.showClose = showClose;
  }
}
TOP

Related Classes of org.vietspider.ui.widget.tabfolder.CTabItem

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.