View Javadoc

1   /*
2    *  soapUI, copyright (C) 2004-2009 eviware.com 
3    *
4    *  soapUI is free software; you can redistribute it and/or modify it under the 
5    *  terms of version 2.1 of the GNU Lesser General Public License as published by 
6    *  the Free Software Foundation.
7    *
8    *  soapUI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without 
9    *  even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
10   *  See the GNU Lesser General Public License for more details at gnu.org.
11   */
12  
13  package com.eviware.soapui.support.swing;
14  
15  import java.awt.BorderLayout;
16  import java.awt.Color;
17  import java.awt.GradientPaint;
18  import java.awt.Graphics;
19  import java.awt.Graphics2D;
20  import java.awt.LayoutManager;
21  import java.awt.Paint;
22  
23  import javax.swing.JPanel;
24  
25  /***
26   * Created by IntelliJ IDEA.
27   */
28  
29  public class GradientPanel extends JPanel
30  {
31  	// ------------------------------ FIELDS ------------------------------
32  
33  	public final static int HORIZONTAL = 0;
34  	public final static int VERTICAL = 1;
35  	public final static int DIAGONAL_LEFT = 2;
36  	public final static int DIAGONAL_RIGHT = 3;
37  
38  	private int direction = HORIZONTAL;
39  	private boolean cyclic;
40  	private int maxLength;
41  
42  	// --------------------------- CONSTRUCTORS ---------------------------
43  
44  	public GradientPanel()
45  	{
46  		this( HORIZONTAL );
47  	}
48  
49  	public GradientPanel( int direction )
50  	{
51  		super( new BorderLayout() );
52  		setOpaque( false );
53  		this.direction = direction;
54  	}
55  
56  	public GradientPanel( LayoutManager layoutManager )
57  	{
58  		super( layoutManager );
59  		setOpaque( false );
60  		this.direction = HORIZONTAL;
61  	}
62  
63  	// --------------------- GETTER / SETTER METHODS ---------------------
64  
65  	public int getDirection()
66  	{
67  		return direction;
68  	}
69  
70  	public void setDirection( int direction )
71  	{
72  		this.direction = direction;
73  	}
74  
75  	public boolean isCyclic()
76  	{
77  		return cyclic;
78  	}
79  
80  	public void setCyclic( boolean cyclic )
81  	{
82  		this.cyclic = cyclic;
83  	}
84  
85  	public void setMaxLength( int maxLength )
86  	{
87  		this.maxLength = maxLength;
88  	}
89  
90  	// -------------------------- OTHER METHODS --------------------------
91  
92  	public void paintComponent( Graphics g )
93  	{
94  		if( isOpaque() )
95  		{
96  			super.paintComponent( g );
97  			return;
98  		}
99  
100 		int width = getWidth();
101 		int height = getHeight();
102 
103 		// Create the gradient paint
104 		GradientPaint paint = null;
105 
106 		Color sc = getForeground();
107 		Color ec = getBackground();
108 
109 		switch( direction )
110 		{
111 		case HORIZONTAL :
112 		{
113 			paint = new GradientPaint( 0, height / 2, sc, width, height / 2, ec, cyclic );
114 			break;
115 		}
116 		case VERTICAL :
117 		{
118 			paint = new GradientPaint( width / 2, 0, sc, width / 2, maxLength > 0 ? maxLength : height, ec, cyclic );
119 			break;
120 		}
121 		case DIAGONAL_LEFT :
122 		{
123 			paint = new GradientPaint( 0, 0, sc, width, height, ec, cyclic );
124 			break;
125 		}
126 		case DIAGONAL_RIGHT :
127 		{
128 			paint = new GradientPaint( width, 0, sc, 0, height, ec, cyclic );
129 			break;
130 		}
131 		}
132 
133 		if( paint == null )
134 		{
135 			throw new RuntimeException( "Invalid direction specified in GradientPanel" );
136 		}
137 
138 		// we need to cast to Graphics2D for this operation
139 		Graphics2D g2d = ( Graphics2D )g;
140 
141 		// save the old paint
142 		Paint oldPaint = g2d.getPaint();
143 
144 		// set the paint to use for this operation
145 		g2d.setPaint( paint );
146 
147 		// fill the background using the paint
148 		g2d.fillRect( 0, 0, width, height );
149 
150 		// restore the original paint
151 		g2d.setPaint( oldPaint );
152 
153 		super.paintComponent( g );
154 	}
155 }