PageRenderTime 134ms CodeModel.GetById 101ms app.highlight 16ms RepoModel.GetById 14ms app.codeStats 0ms

/jEdit/tags/jedit-4-2-pre4/org/gjt/sp/jedit/gui/AboutDialog.java

#
Java | 223 lines | 155 code | 39 blank | 29 comment | 5 complexity | 2eb778d35fdf27d6b906674ae9e258ee MD5 | raw file
  1/*
  2 * AboutDialog.java - About jEdit dialog box
  3 * :tabSize=8:indentSize=8:noTabs=false:
  4 * :folding=explicit:collapseFolds=1:
  5 *
  6 * Copyright (C) 2000, 2001, 2002 Slava Pestov
  7 *
  8 * This program is free software; you can redistribute it and/or
  9 * modify it under the terms of the GNU General Public License
 10 * as published by the Free Software Foundation; either version 2
 11 * of the License, or any later version.
 12 *
 13 * This program is distributed in the hope that it will be useful,
 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 16 * GNU General Public License for more details.
 17 *
 18 * You should have received a copy of the GNU General Public License
 19 * along with this program; if not, write to the Free Software
 20 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 21 */
 22
 23package org.gjt.sp.jedit.gui;
 24
 25//{{{ Imports
 26import javax.swing.border.*;
 27import javax.swing.*;
 28import java.awt.event.*;
 29import java.awt.*;
 30import java.util.*;
 31import org.gjt.sp.jedit.*;
 32//}}}
 33
 34public class AboutDialog extends EnhancedDialog
 35{
 36	//{{{ AboutDialog constructor
 37	public AboutDialog(View view)
 38	{
 39		super(view,jEdit.getProperty("about.title"),true);
 40
 41		JPanel content = new JPanel(new BorderLayout());
 42		content.setBorder(new EmptyBorder(12,12,12,12));
 43		setContentPane(content);
 44
 45		content.add(BorderLayout.CENTER,new AboutPanel());
 46
 47		JPanel buttonPanel = new JPanel();
 48		buttonPanel.setLayout(new BoxLayout(buttonPanel,BoxLayout.X_AXIS));
 49		buttonPanel.setBorder(new EmptyBorder(12,0,0,0));
 50
 51		buttonPanel.add(Box.createGlue());
 52		close = new JButton(jEdit.getProperty("common.close"));
 53		close.addActionListener(new ActionHandler());
 54		getRootPane().setDefaultButton(close);
 55		buttonPanel.add(close);
 56		buttonPanel.add(Box.createGlue());
 57		content.add(BorderLayout.SOUTH,buttonPanel);
 58
 59		pack();
 60		setResizable(false);
 61		setLocationRelativeTo(view);
 62		show();
 63	} //}}}
 64
 65	//{{{ ok() method
 66	public void ok()
 67	{
 68		dispose();
 69	} //}}}
 70
 71	//{{{ cancel() method
 72	public void cancel()
 73	{
 74		dispose();
 75	} //}}}
 76
 77	// private members
 78	private JButton close;
 79
 80	//{{{ ActionHandler class
 81	class ActionHandler implements ActionListener
 82	{
 83		public void actionPerformed(ActionEvent evt)
 84		{
 85			dispose();
 86		}
 87	} //}}}
 88
 89	//{{{ AboutPanel class
 90	static class AboutPanel extends JComponent
 91	{
 92		ImageIcon image;
 93		Vector text;
 94		int scrollPosition;
 95		AnimationThread thread;
 96		int maxWidth;
 97		FontMetrics fm;
 98
 99		public static int TOP = 120;
100		public static int BOTTOM = 30;
101
102		AboutPanel()
103		{
104			setFont(UIManager.getFont("Label.font"));
105			fm = getFontMetrics(getFont());
106
107			setForeground(new Color(96,96,96));
108			image = new ImageIcon(getClass().getResource(
109				"/org/gjt/sp/jedit/icons/about.png"));
110
111			setBorder(new MatteBorder(1,1,1,1,Color.gray));
112
113			text = new Vector(50);
114			StringTokenizer st = new StringTokenizer(
115				jEdit.getProperty("about.text"),"\n");
116			while(st.hasMoreTokens())
117			{
118				String line = st.nextToken();
119				text.addElement(line);
120				maxWidth = Math.max(maxWidth,
121					fm.stringWidth(line) + 10);
122			}
123
124			scrollPosition = -250;
125
126			thread = new AnimationThread();
127		}
128
129		public void paintComponent(Graphics g)
130		{
131			g.setColor(new Color(96,96,96));
132			image.paintIcon(this,g,1,1);
133
134			FontMetrics fm = g.getFontMetrics();
135
136			String[] args = { jEdit.getVersion() };
137			String version = jEdit.getProperty("about.version",args);
138			g.drawString(version,(getWidth() - fm.stringWidth(version)) / 2,
139				getHeight() - 5);
140
141			g = g.create((getWidth() - maxWidth) / 2,TOP,maxWidth,
142				getHeight() - TOP - BOTTOM);
143
144			int height = fm.getHeight();
145			int firstLine = scrollPosition / height;
146
147			int firstLineOffset = height - scrollPosition % height;
148			int lines = (getHeight() - TOP - BOTTOM) / height;
149
150			int y = firstLineOffset;
151
152			for(int i = 0; i <= lines; i++)
153			{
154				if(i + firstLine >= 0 && i + firstLine < text.size())
155				{
156					String line = (String)text.get(i + firstLine);
157					g.drawString(line,(maxWidth - fm.stringWidth(line))/2,y);
158				}
159				y += fm.getHeight();
160			}
161		}
162
163		public Dimension getPreferredSize()
164		{
165			return new Dimension(1 + image.getIconWidth(),
166				1 + image.getIconHeight());
167		}
168
169		public void addNotify()
170		{
171			super.addNotify();
172			thread.start();
173		}
174
175		public void removeNotify()
176		{
177			super.removeNotify();
178			thread.kill();
179		}
180
181		class AnimationThread extends Thread
182		{
183			private boolean running = true;
184		
185			AnimationThread()
186			{
187				super("About box animation thread");
188				setPriority(Thread.MIN_PRIORITY);
189			}
190			
191			public void kill()
192			{
193				running = false;
194			}
195
196			public void run()
197			{
198				FontMetrics fm = getFontMetrics(getFont());
199				int max = (text.size() * fm.getHeight());
200
201				while (running)
202				{
203					scrollPosition += 2;
204
205					if(scrollPosition > max)
206						scrollPosition = -250;
207
208					try
209					{
210						Thread.sleep(100);
211					}
212					catch(Exception e)
213					{
214					}
215
216					repaint(getWidth() / 2 - maxWidth,
217						TOP,maxWidth * 2,
218						getHeight() - TOP - BOTTOM);
219				}
220			}
221		}
222	} //}}}
223}