|
What this is
Other links
The source code
/*
* AboutDialog.java - About jEdit dialog box
* :tabSize=8:indentSize=8:noTabs=false:
* :folding=explicit:collapseFolds=1:
*
* Copyright (C) 2000, 2001, 2002 Slava Pestov
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
package org.gjt.sp.jedit.gui;
//{{{ Imports
import javax.swing.border.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.util.*;
import org.gjt.sp.jedit.*;
//}}}
public class AboutDialog extends EnhancedDialog
{
//{{{ AboutDialog constructor
public AboutDialog(View view)
{
super(view,jEdit.getProperty("about.title"),true);
JPanel content = new JPanel(new BorderLayout());
content.setBorder(new EmptyBorder(12,12,12,12));
setContentPane(content);
content.add(BorderLayout.CENTER,new AboutPanel());
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new BoxLayout(buttonPanel,BoxLayout.X_AXIS));
buttonPanel.setBorder(new EmptyBorder(12,0,0,0));
buttonPanel.add(Box.createGlue());
close = new JButton(jEdit.getProperty("common.close"));
close.addActionListener(new ActionHandler());
getRootPane().setDefaultButton(close);
buttonPanel.add(close);
buttonPanel.add(Box.createGlue());
content.add(BorderLayout.SOUTH,buttonPanel);
pack();
setResizable(false);
setLocationRelativeTo(view);
setVisible(true);
} //}}}
//{{{ ok() method
public void ok()
{
dispose();
} //}}}
//{{{ cancel() method
public void cancel()
{
dispose();
} //}}}
// private members
private JButton close;
//{{{ ActionHandler class
class ActionHandler implements ActionListener
{
public void actionPerformed(ActionEvent evt)
{
dispose();
}
} //}}}
//{{{ AboutPanel class
static class AboutPanel extends JComponent
{
ImageIcon image;
Vector text;
int scrollPosition;
AnimationThread thread;
int maxWidth;
FontMetrics fm;
public static int TOP = 120;
public static int BOTTOM = 30;
AboutPanel()
{
setFont(UIManager.getFont("Label.font"));
fm = getFontMetrics(getFont());
setForeground(new Color(96,96,96));
image = new ImageIcon(getClass().getResource(
"/org/gjt/sp/jedit/icons/about.png"));
setBorder(new MatteBorder(1,1,1,1,Color.gray));
text = new Vector(50);
StringTokenizer st = new StringTokenizer(
jEdit.getProperty("about.text"),"\n");
while(st.hasMoreTokens())
{
String line = st.nextToken();
text.addElement(line);
maxWidth = Math.max(maxWidth,
fm.stringWidth(line) + 10);
}
scrollPosition = -250;
thread = new AnimationThread();
}
public void paintComponent(Graphics g)
{
g.setColor(new Color(96,96,96));
image.paintIcon(this,g,1,1);
FontMetrics fm = g.getFontMetrics();
String[] args = { jEdit.getVersion() };
String version = jEdit.getProperty("about.version",args);
g.drawString(version,(getWidth() - fm.stringWidth(version)) / 2,
getHeight() - 5);
g = g.create((getWidth() - maxWidth) / 2,TOP,maxWidth,
getHeight() - TOP - BOTTOM);
int height = fm.getHeight();
int firstLine = scrollPosition / height;
int firstLineOffset = height - scrollPosition % height;
int lines = (getHeight() - TOP - BOTTOM) / height;
int y = firstLineOffset;
for(int i = 0; i <= lines; i++)
{
if(i + firstLine >= 0 && i + firstLine < text.size())
{
String line = (String)text.get(i + firstLine);
g.drawString(line,(maxWidth - fm.stringWidth(line))/2,y);
}
y += fm.getHeight();
}
}
public Dimension getPreferredSize()
{
return new Dimension(1 + image.getIconWidth(),
1 + image.getIconHeight());
}
public void addNotify()
{
super.addNotify();
thread.start();
}
public void removeNotify()
{
super.removeNotify();
thread.kill();
}
class AnimationThread extends Thread
{
private boolean running = true;
private long last;
AnimationThread()
{
super("About box animation thread");
setPriority(Thread.MIN_PRIORITY);
}
public void kill()
{
running = false;
}
public void run()
{
FontMetrics fm = getFontMetrics(getFont());
int max = (text.size() * fm.getHeight());
while (running)
{
scrollPosition += 2;
if(scrollPosition > max)
scrollPosition = -250;
if(last != 0)
{
long frameDelay =
System.currentTimeMillis()
- last;
try
{
Thread.sleep(
75
- frameDelay);
}
catch(Exception e)
{
}
}
last = System.currentTimeMillis();
repaint(getWidth() / 2 - maxWidth,
TOP,maxWidth * 2,
getHeight() - TOP - BOTTOM);
}
}
}
} //}}}
}
|
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.