View Javadoc

1   /*
2    *  soapUI, copyright (C) 2004-2007 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(
119                   width / 2, 0, sc, width / 2, maxLength > 0 ? maxLength : height, ec, cyclic );
120                break;
121             }
122          case DIAGONAL_LEFT:
123             {
124                paint = new GradientPaint( 0, 0, sc, width, height, ec, cyclic );
125                break;
126             }
127          case DIAGONAL_RIGHT:
128             {
129                paint = new GradientPaint( width, 0, sc, 0, height, ec, cyclic );
130                break;
131             }
132       }
133 
134       if( paint == null )
135       {
136          throw new RuntimeException( "Invalid direction specified in GradientPanel" );
137       }
138 
139       // we need to cast to Graphics2D for this operation
140       Graphics2D g2d = (Graphics2D) g;
141 
142       // save the old paint
143       Paint oldPaint = g2d.getPaint();
144 
145       // set the paint to use for this operation
146       g2d.setPaint( paint );
147 
148       // fill the background using the paint
149       g2d.fillRect( 0, 0, width, height );
150 
151       // restore the original paint
152       g2d.setPaint( oldPaint );
153 
154       super.paintComponent( g );
155    }
156 }
157