/*
* "@(#)TabControl.java 1.17 02/08/21
*
* Copyright (c) 1999 Sun Microsystems, Inc. All Rights Reserved.
*
* Sun grants you ("Licensee") a non-exclusive, royalty free, license to use,
* modify and redistribute this software in source and binary code form,
* provided that i) this copyright notice and license appear on all copies of
* the software; and ii) Licensee does not utilize the software in a manner
* which is disparaging to Sun.
*
* This software is provided "AS IS," without a warranty of any kind. ALL
* EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
* IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
* NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE
* LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
* OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS
* LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
* INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
* CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF
* OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGES.
*
* This software is not designed or intended for use in on-line control of
* aircraft, air traffic, aircraft navigation or aircraft communications; or in
* the design, construction, operation or maintenance of any nuclear
* facility. Licensee represents and warrants that it will not use or
* redistribute the Software for such purposes.
*/
package com.sun.media.ui;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
public class TabControl extends Panel implements MouseListener, FocusListener, KeyListener, ComponentListener {
public static final int ALIGN_TOP = 0;
public static final int ALIGN_LEFT = 1;
// private Vector vectorPages = new Vector ();
// private Vector vectorTitles = new Vector ();
// private Vector vectorImages = new Vector ();
private Panel panelPageContainer;
private CardLayout layoutCard = new CardLayout ();
private int nCurrentPage = -1;
private Button buttonFocus;
private boolean boolFocus = false;
private int nAlignment = ALIGN_TOP;
private int MARGIN_PAGE_VERT = 6;
private int MARGIN_PAGE_HORZ = 6;
private String strPageToShowAfterPaint = null;
private Cursor cursorNormal = new Cursor ( Cursor.DEFAULT_CURSOR );
private Cursor cursorWait = new Cursor ( Cursor.WAIT_CURSOR );
private Vector vectorTabs = new Vector (); // of type TabField
private int nTabHeightMax = 1;
private int nTabWidthMax = 1;
// private Vector vectorDimTabs = new Vector ();
// private Vector vectorRectTabs = new Vector ();
private int nRowCount = 1;
public TabControl () {
this ( ALIGN_TOP );
}
public TabControl ( int nAlignment ) {
super ();
this.nAlignment = nAlignment;
try {
init();
}
catch (Exception e) {
e.printStackTrace();
}
}
private void init () throws Exception {
Panel panel;
Font font;
Font fontOld;
this.setLayout ( new BorderLayout() );
this.addComponentListener ( this );
this.addMouseListener ( this );
buttonFocus = new Button ( "Focus" );
this.add ( buttonFocus );
buttonFocus.addKeyListener ( this );
buttonFocus.addFocusListener ( this );
panelPageContainer = new Panel ( layoutCard );
this.add ( panelPageContainer, BorderLayout.CENTER );
fontOld = panelPageContainer.getFont ();
if ( fontOld == null ) {
fontOld = new Font ( "Dialog", Font.PLAIN, 12 );
}
font = new Font ( "Dialog", Font.PLAIN, 12 );
this.setFont ( font );
panelPageContainer.setFont ( fontOld );
this.setBackground ( TabField.COLOR_BG );
panelPageContainer.setBackground ( TabField.COLOR_BG );
}
public int addPage ( Panel panelPage, String strTitle ) {
int nIndex;
nIndex = addPage ( panelPage, strTitle, null );
return ( nIndex );
}
public int addPage ( Panel panelPage, String strTitle, Image image ) {
int nIndex;
Dimension dim;
TabField tabField;
nIndex = vectorTabs.size ();
tabField = new TabField ( this, panelPage, strTitle, image );
vectorTabs.addElement ( tabField );
panelPageContainer.add ( panelPage, strTitle );
if ( nIndex == 0 ) {
nCurrentPage = 0;
layoutCard.show ( panelPageContainer, strTitle );
}
tabField.calculateTabDimension ( getFontMetrics(getFont()) );
nTabHeightMax = Math.max ( tabField.dim.height, nTabHeightMax );
nTabWidthMax = Math.max ( tabField.dim.width, nTabWidthMax );
recalculateTabs ();
repaint ();
return ( nIndex );
}
public int setPageImage ( Panel panelPage, Image imageTab ) {
int i;
int nCount;
TabField tabField;
int nIndex;
Dimension dim;
nIndex = findPage ( panelPage );
if ( nIndex < 0 || nIndex >= vectorTabs.size() )
return ( nIndex );
tabField = (TabField) vectorTabs.elementAt ( nIndex );
if ( tabField.image == imageTab )
return ( nIndex );
tabField.image = imageTab;
nTabHeightMax = 1;
nTabWidthMax = 1;
nCount = vectorTabs.size ();
for ( i = 0; i < nCount; i++ ) {
tabField = (TabField) vectorTabs.elementAt ( i );
tabField.calculateTabDimension ( getFontMetrics(getFont()) );
nTabHeightMax = Math.max ( tabField.dim.height, nTabHeightMax );
nTabWidthMax = Math.max ( tabField.dim.width, nTabWidthMax );
}
recalculateTabs ();
repaint ();
return ( nIndex );
}
public Dimension getPreferredSize () {
int i;
TabField tabField;
Dimension dim;
int nRowWidth;
dim = super.getPreferredSize ();
if ( nAlignment == ALIGN_LEFT )
dim.height = Math.max ( dim.height, nTabHeightMax * vectorTabs.size() + 1 );
else { // if ( nAlignment == ALIGN_TOP )
nRowWidth = 0;
for ( i = 0; i < vectorTabs.size(); i++ ) {
tabField = (TabField) vectorTabs.elementAt ( i );
nRowWidth += tabField.dim.width;
}
dim.width = Math.max ( dim.width, nRowWidth + 1 );
}
return ( dim );
}
public Insets getInsets () {
Insets insets;
insets = super.getInsets ();
if ( nAlignment == ALIGN_LEFT )
insets = new Insets ( insets.top + MARGIN_PAGE_VERT,
insets.left + nRowCount * nTabWidthMax - 2 + MARGIN_PAGE_HORZ,
insets.bottom + MARGIN_PAGE_VERT,
insets.right + MARGIN_PAGE_HORZ );
else // if ( nAlignment == ALIGN_TOP )
insets = new Insets ( insets.top + nRowCount * nTabHeightMax - 2 + MARGIN_PAGE_VERT,
insets.left + MARGIN_PAGE_HORZ,
insets.bottom + MARGIN_PAGE_VERT,
insets.right + MARGIN_PAGE_HORZ );
return ( insets );
}
public void update ( Graphics g ) {
Rectangle rectClient;
Image image;
Graphics graphics;
rectClient = this.getBounds ();
// Safeguard to prevent an exception on 8-bit displays
if (rectClient.width < 1 || rectClient.height < 1)
return;
image = createImage ( rectClient.width, rectClient.height );
if ( image != null )
graphics = image.getGraphics ();
else
graphics = g;
paint ( graphics );
if ( image != null )
g.drawImage ( image, 0, 0, this );
}
public void paint ( Graphics graphics ) {
int i;
int nSize;
Rectangle rect;
TabField tabField;
Rectangle rectClient;
Rectangle rectString;
String stringTabName;
Font fontNormal;
Font fontBold;
FontMetrics fontMetrics;
int nX, nY;
int nWidth, nHeight;
super.paint ( graphics );
rectClient = this.getBounds ();
rectClient.x = 0;
rectClient.y = 0;
rect = new Rectangle ( rectClient );
if ( nAlignment == ALIGN_LEFT ) {
rect.x += nTabWidthMax * nRowCount - 2;
rect.width -= nTabWidthMax * nRowCount - 2;
}
else { // if ( nAlignment == ALIGN_TOP )
rect.y += nTabHeightMax * nRowCount - 2;
rect.height -= nTabHeightMax * nRowCount - 2;
}
rect.width--;
rect.height--;
graphics.setColor ( TabField.COLOR_SHADOW_BOTTOM );
graphics.drawRect ( rect.x, rect.y, rect.width, rect.height );
graphics.setColor ( TabField.COLOR_SHADOW_TOP );
graphics.drawLine ( rect.x + 1, rect.y + 1, rect.x + 1, rect.y + rect.height - 2 );
graphics.drawLine ( rect.x + 1, rect.y + 1, rect.x + rect.width - 2, rect.y + 1 );
fontNormal = this.getFont ();
// fontBold = new Font ( fontNormal.getName(), Font.BOLD, fontNormal.getSize() );
fontBold = fontNormal;
nSize = vectorTabs.size ();
for ( i = nSize - 1; i >= 0; i-- ) {
tabField = (TabField) vectorTabs.elementAt ( i );
if ( i == nCurrentPage ) {
if ( nAlignment == ALIGN_LEFT )
tabField.drawCurrentTabLeft ( graphics );
else // if ( nAlignment == ALIGN_TOP )
tabField.drawCurrentTabTop ( graphics );
}
else {
if ( nAlignment == ALIGN_LEFT )
tabField.drawTabLeft ( graphics );
else // if ( nAlignment == ALIGN_TOP )
tabField.drawTabTop ( graphics );
}
graphics.setColor ( this.getForeground() );
rectString = new Rectangle ( tabField.rect );
if ( nAlignment == ALIGN_LEFT )
rectString.width = nTabWidthMax;
else // if ( nAlignment == ALIGN_TOP )
rectString.height = nTabHeightMax;
if ( tabField.image != null ) {
nWidth = tabField.image.getWidth ( this );
rectString.x += nWidth + tabField.MARGIN_TAB_HORZ;
rectString.width -= nWidth + tabField.MARGIN_TAB_HORZ;
}
rectString.y++;
if ( i == nCurrentPage ) {
graphics.setFont ( fontBold );
fontMetrics = graphics.getFontMetrics ( fontBold );
if ( boolFocus == true ) {
nWidth = fontMetrics.stringWidth ( tabField.strTitle ) + 6;
nHeight = fontMetrics.getHeight () + 1;
nX = rectString.x + (rectString.width - nWidth) / 2;
nY = rectString.y + (nTabHeightMax - 2 - nHeight) / 2 + 1;
drawDottedRectangle ( graphics, nX, nY, nWidth, nHeight );
}
}
else {
graphics.setFont ( fontNormal );
fontMetrics = graphics.getFontMetrics ( fontNormal );
}
nX = rectString.x + (rectString.width - fontMetrics.stringWidth(tabField.strTitle)) / 2;
nY = rectString.y + rectString.height - (rectString.height - fontMetrics.getHeight()) / 2 - fontMetrics.getMaxDescent ();
nY--;
if ( i != nCurrentPage ) {
nX++;
nY++;
}
graphics.drawString ( tabField.strTitle, nX, nY );
if ( tabField.image != null ) {
nHeight = tabField.image.getHeight ( this );
nX = tabField.rect.x + tabField.MARGIN_TAB_HORZ;
nY = tabField.rect.y + (nTabHeightMax - nHeight) / 2;
if ( i != nCurrentPage ) {
nX++;
nY++;
}
graphics.drawImage ( tabField.image, nX, nY, this );
}
}
if ( strPageToShowAfterPaint != null ) {
layoutCard.show ( panelPageContainer, strPageToShowAfterPaint );
strPageToShowAfterPaint = null;
this.setCursor ( cursorNormal );
}
}
private void drawDottedRectangle ( Graphics graphics, int nX, int nY, int nWidth, int nHeight ) {
drawDottedLine ( graphics, nX, nY, nX + nWidth - 1, nY );
drawDottedLine ( graphics, nX + nWidth - 1, nY, nX + nWidth - 1, nY + nHeight - 1 );
drawDottedLine ( graphics, nX + nWidth - 1, nY + nHeight - 1, nX, nY + nHeight - 1 );
drawDottedLine ( graphics, nX, nY + nHeight - 1, nX, nY );
}
private void drawDottedLine ( Graphics graphics, int nX1, int nY1, int nX2, int nY2 ) {
int nX, nY;
double dDiv;
if ( nX1 == nX2 && nY1 == nY2 ) {
drawDot ( graphics, nX1, nY1 );
return;
}
if ( nX1 > nX2 ) {
nX = nX1;
nX1 = nX2;
nX2 = nX;
}
if ( nY1 > nY2 ) {
nY = nY1;
nY1 = nY2;
nY2 = nY;
}
if ( nX2 - nX1 > nY2 - nY1 ) {
dDiv = (double)(nY2 - nY1) / (nX2 - nX1);
for ( nX = nX1; nX <= nX2; nX++ ) {
nY = (int)Math.rint ( nY1 + (nX - nX1) * dDiv );
drawDot ( graphics, nX, nY );
}
}
else {
dDiv = (nX2 - nX1) / (nY2 - nY1);
for ( nY = nY1; nY <= nY2; nY++ ) {
nX = (int)Math.rint ( nX1 + (nY - nY1) * dDiv );
drawDot ( graphics, nX, nY );
}
}
}
private void drawDot ( Graphics graphics, int nX, int nY )
{
if ( (nX + nY) % 2 == 0 )
graphics.drawLine ( nX, nY, nX, nY );
}
public void mouseClicked ( MouseEvent event ) {
}
public void mousePressed ( MouseEvent event ) {
int i;
int nTabCount;
TabField tabField;
int x, y;
x = event.getX ();
y = event.getY ();
nTabCount = vectorTabs.size ();
for ( i = 0; i < nTabCount; i++ ) {
tabField = (TabField) vectorTabs.elementAt ( i );
if ( tabField.rect.contains (x,y) ) {
buttonFocus.requestFocus ();
nCurrentPage = i;
strPageToShowAfterPaint = tabField.strTitle;
this.setCursor ( cursorWait );
repaint ();
break;
}
}
}
public void mouseReleased ( MouseEvent event ) {
}
public void mouseEntered ( MouseEvent event ) {
}
public void mouseExited ( MouseEvent event ) {
}
public void keyTyped ( KeyEvent event ) {
}
public void keyPressed ( KeyEvent event ) {
int nKeyCode;
int nIndex;
TabField tabField;
nIndex = nCurrentPage;
nKeyCode = event.getKeyCode ();
if ( nKeyCode == KeyEvent.VK_DOWN || nKeyCode == KeyEvent.VK_RIGHT ) {
nIndex++;
}
else if ( nKeyCode == KeyEvent.VK_UP || nKeyCode == KeyEvent.VK_LEFT ) {
nIndex--;
}
if ( nIndex >= vectorTabs.size() )
nIndex = vectorTabs.size() - 1;
if ( nIndex < 0 )
nIndex = 0;
if ( nCurrentPage != nIndex ) {
nCurrentPage = nIndex;
tabField = (TabField) vectorTabs.elementAt ( nIndex );
strPageToShowAfterPaint = tabField.strTitle;
this.setCursor ( cursorWait );
repaint ();
}
}
public void keyReleased ( KeyEvent event ) {
}
public void focusGained ( FocusEvent event ) {
if ( boolFocus == true )
return;
boolFocus = true;
repaint ();
}
public void focusLost ( FocusEvent event ) {
if ( boolFocus == false )
return;
boolFocus = false;
repaint ();
}
public void componentResized ( ComponentEvent event ) {
recalculateTabs ();
this.doLayout ();
panelPageContainer.validate ();
}
public void componentMoved ( ComponentEvent event ) {
}
public void componentShown ( ComponentEvent event ) {
}
public void componentHidden ( ComponentEvent event ) {
}
private void recalculateTabs () {
int i, j;
int nTabCount;
int nRowSize = 1;
int nRowIndex;
Rectangle rectClient;
int nOffsetX;
int nOffsetY;
int nRowWidth;
TabField tabField;
rectClient = this.getBounds ();
rectClient.x = 0;
rectClient.y = 0;
if ( rectClient.width < 1 || rectClient.height < 1 )
return;
nTabCount = vectorTabs.size ();
if ( nAlignment == ALIGN_LEFT ) {
nRowSize = rectClient.height / nTabHeightMax;
nRowCount = (nTabCount + nRowSize - 1) / nRowSize;
nOffsetX = nRowCount * nTabWidthMax;
nOffsetY = 0;
for ( i = 0; i < nTabCount; i++ ) {
if ( (i % nRowSize) == 0 ) {
nOffsetX -= nTabWidthMax;
nOffsetY = 0;
}
tabField = (TabField) vectorTabs.elementAt ( i );
tabField.rect.x = nOffsetX;
tabField.rect.y = nOffsetY;
tabField.rect.width = nTabWidthMax * (i / nRowSize + 1);
tabField.rect.height = nTabHeightMax;
tabField.nRowIndex = i / nRowSize;
if ( tabField.nRowIndex > 0 )
tabField.rect.width -= 2;
nOffsetY += nTabHeightMax;
}
}
else { // if ( nAlignment == ALIGN_TOP )
nRowCount = 1;
nRowWidth = 0;
for ( i = 0; i < nTabCount; i++ ) {
tabField = (TabField) vectorTabs.elementAt ( i );
if ( nRowWidth + tabField.dim.width > rectClient.width ) {
nRowWidth = 0;
nRowCount++;
}
nRowWidth += tabField.dim.width;
}
nOffsetX = 0;
nOffsetY = nRowCount * nTabHeightMax;
nRowIndex = 0;
j = 0;
for ( i = 0; i < nTabCount; i++ ) {
if ( i == j ) { // start of the row
nOffsetX = 0;
nOffsetY -= nTabHeightMax;
nRowWidth = 0;
for ( j = i; j < nTabCount; j++ ) {
tabField = (TabField) vectorTabs.elementAt ( j );
if ( j > i && nRowWidth + tabField.dim.width > rectClient.width )
break;
nRowWidth += tabField.dim.width;
tabField.nRowIndex = nRowIndex;
}
nRowSize = j - i;
nRowIndex++;
}
tabField = (TabField) vectorTabs.elementAt ( i );
tabField.rect.x = nOffsetX;
tabField.rect.y = nOffsetY;
tabField.rect.width = tabField.dim.width;
if ( nRowCount > 1 && nRowIndex < nRowCount ) {
tabField.rect.width += (rectClient.width - nRowWidth - 1) / nRowSize;
tabField.rect.width += (j - i > (rectClient.width - nRowWidth - 1) % nRowSize) ? 0 : 1;
}
tabField.rect.height = nTabHeightMax * nRowIndex;
if ( tabField.nRowIndex > 0 )
tabField.rect.height -= 2;
nOffsetX += tabField.rect.width;
}
}
repaint();
}
private int findPage ( Panel panelPage ) {
int i;
TabField tabField;
i = vectorTabs.size() - 1;
while ( i >= 0 ) {
tabField = (TabField) vectorTabs.elementAt ( i );
if ( tabField.panelPage == panelPage )
break;
i--;
}
return ( i );
}
}
class TabField {
Panel panelPage = null;
String strTitle = null;
Image image = null;
Dimension dim = new Dimension ();
Rectangle rect = new Rectangle ();
int nRowIndex = 0;
Component compOwner;
int MARGIN_TAB_VERT = 5;
int MARGIN_TAB_HORZ = 8;
public static final Color COLOR_BG = Color.lightGray;
public static final Color COLOR_FG = Color.black;
public static final Color COLOR_SHADOW_TOP = Color.white;
public static final Color COLOR_SHADOW_BOTTOM = Color.darkGray;
public static final Color COLOR_TAB_BG = new Color ( 128, 128, 128 );
public static final Color COLOR_TAB_FG = Color.black;
public static final Color COLOR_TAB_SHADOW_TOP = Color.lightGray;
public static final Color COLOR_TAB_SHADOW_BOTTOM = Color.darkGray;
public TabField ( Component compOwner, Panel panelPage, String strTitle, Image image ) {
this.compOwner = compOwner;
this.panelPage = panelPage;
this.strTitle = strTitle;
this.image = image;
}
public void calculateTabDimension ( FontMetrics fontMetrics ) {
dim.width = fontMetrics.stringWidth ( strTitle );
dim.height = fontMetrics.getHeight ();
if ( image != null ) {
dim.width += image.getWidth ( compOwner ) + MARGIN_TAB_HORZ;
dim.height = Math.max ( image.getHeight(compOwner), dim.height );
}
dim.width += 2 * MARGIN_TAB_HORZ;
dim.height += 2 * MARGIN_TAB_VERT;
rect.width = dim.width;
rect.height = dim.height;
}
public void drawTabTop ( Graphics graphics ) {
int arrX [] = new int [5];
int arrY [] = new int [5];
graphics.setColor ( COLOR_TAB_BG );
arrX[0] = rect.x + 6;
arrY[0] = rect.y + 2;
arrX[1] = rect.x + rect.width - 0;
arrY[1] = rect.y + 2;
arrX[2] = rect.x + rect.width - 0;
arrY[2] = rect.y + rect.height - 2;
arrX[3] = rect.x + 2;
arrY[3] = rect.y + rect.height - 2;
arrX[4] = rect.x + 2;
arrY[4] = rect.y + 6;
graphics.fillPolygon ( arrX, arrY, 5 );
graphics.setColor ( COLOR_TAB_SHADOW_BOTTOM );
graphics.drawLine ( rect.x, rect.y + rect.height - 2, rect.x, rect.y + 6 );
graphics.drawLine ( rect.x, rect.y + 6, rect.x + 6, rect.y );
graphics.drawLine ( rect.x + 6, rect.y, rect.x + rect.width - 1, rect.y );
graphics.drawLine ( rect.x + rect.width, rect.y + 1, rect.x + rect.width, rect.y + rect.height - 2 );
graphics.setColor ( COLOR_TAB_SHADOW_TOP );
graphics.drawLine ( rect.x + 1, rect.y + rect.height - 3, rect.x + 1, rect.y + 6 );
graphics.drawLine ( rect.x + 1, rect.y + 6, rect.x + 6, rect.y + 1 );
graphics.drawLine ( rect.x + 6, rect.y + 1, rect.x + rect.width - 1, rect.y + 1 );
}
public void drawTabLeft ( Graphics graphics ) {
int arrX [] = new int [5];
int arrY [] = new int [5];
graphics.setColor ( COLOR_TAB_BG );
arrX[0] = rect.x + 2;
arrY[0] = rect.y + 6;
arrX[1] = rect.x + 2;
arrY[1] = rect.y + rect.height - 0;
arrX[2] = rect.x + rect.width - 2;
arrY[2] = rect.y + rect.height - 0;
arrX[3] = rect.x + rect.width - 2;
arrY[3] = rect.y + 2;
arrX[4] = rect.x + 6;
arrY[4] = rect.y + 2;
graphics.fillPolygon ( arrX, arrY, 5 );
graphics.setColor ( COLOR_TAB_SHADOW_BOTTOM );
graphics.drawLine ( rect.x + rect.width - 2, rect.y, rect.x + 6, rect.y );
graphics.drawLine ( rect.x + 6, rect.y, rect.x, rect.y + 6 );
graphics.drawLine ( rect.x, rect.y + 6, rect.x, rect.y + rect.height - 1 );
graphics.drawLine ( rect.x + 1, rect.y + rect.height, rect.x + rect.width - 2, rect.y + rect.height );
graphics.setColor ( COLOR_TAB_SHADOW_TOP );
graphics.drawLine ( rect.x + rect.width - 3, rect.y + 1, rect.x + 6, rect.y + 1 );
graphics.drawLine ( rect.x + 6, rect.y + 1, rect.x + 1, rect.y + 6 );
graphics.drawLine ( rect.x + 1, rect.y + 6, rect.x + 1, rect.y + rect.height - 1 );
}
public void drawCurrentTabTop ( Graphics graphics ) {
int arrX [] = new int [5];
int arrY [] = new int [5];
graphics.setColor ( COLOR_BG );
arrX[0] = rect.x + 6;
arrY[0] = rect.y + 2;
arrX[1] = rect.x + rect.width - 0;
arrY[1] = rect.y + 2;
arrX[2] = rect.x + rect.width - 0;
arrY[2] = rect.y + rect.height - 0; //((nRowIndex==0)?0:2);
arrX[3] = rect.x + 2;
arrY[3] = rect.y + rect.height - 0; //((nRowIndex==0)?0:2);
arrX[4] = rect.x + 2;
arrY[4] = rect.y + 6;
graphics.fillPolygon ( arrX, arrY, 5 );
graphics.setColor ( COLOR_SHADOW_BOTTOM );
graphics.drawLine ( rect.x, rect.y + rect.height - 2, rect.x, rect.y + 6 );
graphics.drawLine ( rect.x, rect.y + 6, rect.x + 6, rect.y );
graphics.drawLine ( rect.x + 6, rect.y, rect.x + rect.width - 1, rect.y );
graphics.drawLine ( rect.x + rect.width, rect.y + 1, rect.x + rect.width, rect.y + rect.height - 2 );
graphics.setColor ( COLOR_SHADOW_TOP );
graphics.drawLine ( rect.x + 1, rect.y + rect.height - 2, rect.x + 1, rect.y + 6 );
graphics.drawLine ( rect.x + 1, rect.y + 6, rect.x + 6, rect.y + 1 );
graphics.drawLine ( rect.x + 6, rect.y + 1, rect.x + rect.width - 1, rect.y + 1 );
}
public void drawCurrentTabLeft ( Graphics graphics ) {
int arrX [] = new int [5];
int arrY [] = new int [5];
graphics.setColor ( COLOR_BG );
arrX[0] = rect.x + 2;
arrY[0] = rect.y + 6;
arrX[1] = rect.x + 2;
arrY[1] = rect.y + rect.height - 0;
arrX[2] = rect.x + rect.width - 0; //((nRowIndex==0)?0:2);
arrY[2] = rect.y + rect.height - 0;
arrX[3] = rect.x + rect.width - 0; //((nRowIndex==0)?0:2);
arrY[3] = rect.y + 2;
arrX[4] = rect.x + 6;
arrY[4] = rect.y + 2;
graphics.fillPolygon ( arrX, arrY, 5 );
graphics.setColor ( COLOR_SHADOW_BOTTOM );
graphics.drawLine ( rect.x + rect.width - 2, rect.y, rect.x + 6, rect.y );
graphics.drawLine ( rect.x + 6, rect.y, rect.x, rect.y + 6 );
graphics.drawLine ( rect.x, rect.y + 6, rect.x, rect.y + rect.height - 1 );
graphics.drawLine ( rect.x + 1, rect.y + rect.height, rect.x + rect.width - 2, rect.y + rect.height );
graphics.setColor ( COLOR_SHADOW_TOP );
graphics.drawLine ( rect.x + rect.width - 2, rect.y + 1, rect.x + 6, rect.y + 1 );
graphics.drawLine ( rect.x + 6, rect.y + 1, rect.x + 1, rect.y + 6 );
graphics.drawLine ( rect.x + 1, rect.y + 6, rect.x + 1, rect.y + rect.height - 1 );
}
}
|