1
2
3
4
5
6
7
8
9
10
11
12
13 package com.eviware.soapui.support.components;
14
15 import java.awt.BorderLayout;
16 import java.awt.Color;
17 import java.awt.Dimension;
18
19 import javax.swing.BorderFactory;
20 import javax.swing.JComponent;
21 import javax.swing.JLabel;
22 import javax.swing.JPanel;
23 import javax.swing.event.CaretEvent;
24 import javax.swing.event.CaretListener;
25
26 import com.eviware.soapui.SoapUI;
27 import com.jgoodies.forms.builder.ButtonBarBuilder;
28 import com.jgoodies.forms.layout.Sizes;
29
30 /***
31 * A simple status bar for editors
32 *
33 * @author Ole.Matzura
34 */
35
36 public class JEditorStatusBar extends JPanel implements CaretListener
37 {
38 private JLabel caretLabel;
39 private JLabel infoLabel;
40 private JEditorStatusBarTarget target;
41 private JPanel statusPanel;
42
43 public JEditorStatusBar()
44 {
45 this( null );
46 }
47
48 public JEditorStatusBar( JEditorStatusBarTarget target )
49 {
50 this.target = target;
51
52 caretLabel = new JLabel();
53 caretLabel.setPreferredSize( new Dimension( 60, 16 ));
54
55
56 infoLabel = new JLabel();
57 infoLabel.setVisible( false );
58
59 caretLabel.setBorder(
60 BorderFactory.createCompoundBorder(
61 BorderFactory.createMatteBorder( 0, 1, 0, 0, Color.LIGHT_GRAY ),
62 BorderFactory.createMatteBorder( 0, 1, 0, 0, Color.WHITE )));
63
64
65 ButtonBarBuilder builder = new ButtonBarBuilder( this );
66 builder.addGriddedGrowing( infoLabel );
67 builder.addStrut( Sizes.pixel( 2 ));
68
69 statusPanel = new JPanel( new BorderLayout() );
70 statusPanel.setPreferredSize( new Dimension( 60, 16 ));
71
72 statusPanel.setBorder(
73 BorderFactory.createCompoundBorder(
74 BorderFactory.createMatteBorder( 0, 1, 0, 0, Color.LIGHT_GRAY ),
75 BorderFactory.createMatteBorder( 0, 1, 0, 0, Color.WHITE )));
76
77 builder.addFixed( statusPanel );
78 builder.addFixed( caretLabel );
79 builder.getPanel();
80 }
81
82 public void addNotify()
83 {
84 super.addNotify();
85
86 if( target != null )
87 target.addCaretListener( this );
88 }
89
90 public void removeNotify()
91 {
92 super.removeNotify();
93
94 if( target != null )
95 target.removeCaretListener( this );
96 }
97
98 public void caretUpdate(CaretEvent e)
99 {
100 try
101 {
102 if( target == null )
103 caretLabel.setText( "" );
104
105 int offset = target.getCaretPosition();
106 int line = target.getLineOfOffset( offset );
107 int column = offset - target.getLineStartOffset( line );
108
109 caretLabel.setText( " " + (line+1) + " : " + (column+1) );
110 }
111 catch (Exception e1)
112 {
113 SoapUI.logError( e1 );
114 }
115 }
116
117 public void setTarget( JEditorStatusBarTarget target )
118 {
119 if( this.target != null )
120 this.target.removeCaretListener( this );
121
122 this.target = target;
123 this.target.addCaretListener( this );
124
125 caretUpdate( null );
126 }
127
128 public void setInfo( String txt )
129 {
130 infoLabel.setText( txt );
131 infoLabel.setVisible( txt != null );
132 }
133
134 public void setStatusComponent( JComponent statusComponent )
135 {
136 statusPanel.removeAll();
137 statusPanel.add( statusComponent, BorderLayout.CENTER );
138 statusPanel.revalidate();
139 }
140
141 /***
142 * Target for caret-status
143 *
144 * @author Ole.Matzura
145 */
146
147 public interface JEditorStatusBarTarget
148 {
149 void addCaretListener(CaretListener listener);
150
151 int getCaretPosition();
152
153 void removeCaretListener(CaretListener listener);
154
155 int getLineStartOffset(int line) throws Exception;
156
157 int getLineOfOffset(int offset) throws Exception;;
158 }
159 }