/*
Atlantida is an open source (GPL) multilingual dictionary written in Java.
It can translate words from one language to another and pronounce them.
Copyright (C) 2006 Sergey S. http://atla.revdanica.com/
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 (at your option) 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
/**
* FontChooser
* @author Janos Szatmary, Sergei S.
* @version 003
*/
/*
* http://forum.java.sun.com/thread.jsp?forum=57&thread=124810
* For those who asked where's the constructor, have in mind that the constructor provided
* is private. As the author of the code says, the use of this class is as
* follows (supposing we are in a Frame class):
* FontChooser.showDialog(this,"FontChooser",new Font("Dialog", 0, 12));
* This file originally writter by Janos Szatmary, then modifyed by Sergei S. for
* Atlantida Multilingual Dictionary http://atla.sf.net
*/
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
public class FontChooser extends javax.swing.JDialog
{
String[] styleList = new String[]
{ "Plain","Bold","Italic"};
String[] sizeList = new String[]
{ "2","4","6","8","10","12","14","16","18","20","22","24","30","36","48","72"};
String currentFont = null;
int currentStyle = -1;
int currentSize = -1;
public boolean ok = false;
/* ------------------------------------------------------------- */
private FontChooser(java.awt.Frame parent,boolean modal)
{
super (parent,modal);
initComponents();
setListValues(jFontList,GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames());
setListValues(jStyleList,styleList);
setListValues(jSizeList,sizeList);
setCurrentFont(jSample.getFont());
pack();
}
private FontChooser(java.awt.Frame parent,boolean modal,Font font)
{
this(parent,modal);
setCurrentFont(font);
}
/* ------------------------------------------------------------- */
private void setListValues(JList list,String[] values)
{
if(list.getModel() instanceof DefaultListModel)
{
DefaultListModel model = (DefaultListModel)
list.getModel();
model.removeAllElements();
for( String value : values )
{
model.addElement( value );
}
}
}
/* ------------------------------------------------------------- */
private void setSampleFont()
{
if(currentFont != null && currentStyle >= 0 && currentSize > 0)
{
jSample.setFont(new Font
(currentFont,currentStyle,currentSize));
}
}
private String styleToString(int style)
{
String str = "";
if((style&Font.BOLD) == Font.BOLD)
{
if(str.length() > 0)
{
str += ",";
}
str += "Bold";
}
if((style&Font.ITALIC) == Font.ITALIC)
{
if(str.length() > 0)
{
str += ",";
}
str += "Italic";
}
if( str.length() <= 0 )
{
str = "Plain";
}
return str;
}
/* ------------------------------------------------------------- */
public Font getCurrentFont()
{
return jSample.getFont();
}
/* ------------------------------------------------------------- */
public void setCurrentFont(Font font)
{
if(font==null)
{
font = jSample.getFont();
}
jFont.setText(font.getName());
jFontActionPerformed(null);
jStyle.setText(styleToString(font.getStyle()));
jStyleActionPerformed(null);
jSize.setText(Integer.toString(font.getSize()));
jSizeActionPerformed(null);
}
// Create font chooser dialog.
// If user selected a font (i.e. clicked OK button) - return the font that user has selected.
// If user didn't click OK button - return "null".
public static Font showDialog( Frame parent, String title, Font font)
{
FontChooser dialog = new FontChooser(parent,true,font);
Point p1 = parent.getLocation();
Dimension d1 = parent.getSize();
Dimension d2 = dialog.getSize();
int x = p1.x+(d1.width-d2.width)/2;
int y = p1.y+(d1.height-d2.height)/2;
if(x < 0)
{
x = 0;
}
if(y < 0)
{
y = 0;
}
if(title!=null)
{
dialog.setTitle(title);
}
dialog.setLocation(x,y);
dialog.setVisible(true);
Font newfont = null;
if(dialog.ok)
{
newfont = dialog.getCurrentFont();
}
dialog.dispose();
return newfont;
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the FormEditor.
*/
private void initComponents()
{
jPanel3 = new javax.swing.JPanel();
jFont = new javax.swing.JTextField();
jScrollPane1 = new javax.swing.JScrollPane();
jFontList = new javax.swing.JList();
jPanel4 = new javax.swing.JPanel();
jStyle = new javax.swing.JTextField();
jScrollPane2 = new javax.swing.JScrollPane();
jStyleList = new javax.swing.JList();
jPanel5 = new javax.swing.JPanel();
jSize = new javax.swing.JTextField();
jScrollPane3 = new javax.swing.JScrollPane();
jSizeList = new javax.swing.JList();
jPanel1 = new javax.swing.JPanel();
jScrollPane4 = new javax.swing.JScrollPane();
jSample = new javax.swing.JTextArea();
jButtons = new javax.swing.JPanel();
jOk = new javax.swing.JButton();
jCancel = new javax.swing.JButton();
jLabel6 = new javax.swing.JLabel();
getContentPane().setLayout(new java.awt.GridBagLayout());
java.awt.GridBagConstraints gridBagConstraints1;
setTitle("Font Chooser");
addWindowListener(new java.awt.event.WindowAdapter()
{
public void windowClosing(java.awt.event.WindowEvent evt)
{
closeDialog(evt);
}
}
);
jPanel3.setLayout(new java.awt.GridBagLayout());
java.awt.GridBagConstraints gridBagConstraints2;
jPanel3.setBorder(new javax.swing.border.TitledBorder(new javax.swing.border.EtchedBorder(), " Font "));
jFont.setColumns(24);
jFont.addActionListener(new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent evt)
{
jFontActionPerformed(evt);
}
}
);
gridBagConstraints2 = new java.awt.GridBagConstraints();
gridBagConstraints2.gridwidth = 0;
gridBagConstraints2.fill =
java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints2.insets = new java.awt.Insets(0, 3, 0, 3);
gridBagConstraints2.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints2.weightx = 1.0;
jPanel3.add(jFont, gridBagConstraints2);
jFontList.setModel(new DefaultListModel());
jFontList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
jFontList.addListSelectionListener(new javax.swing.event.ListSelectionListener()
{
public void valueChanged(javax.swing.event.ListSelectionEvent evt)
{
jFontListValueChanged(evt);
}
}
);
jScrollPane1.setViewportView(jFontList);
gridBagConstraints2 = new java.awt.GridBagConstraints();
gridBagConstraints2.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints2.insets = new java.awt.Insets(3, 3, 3, 3);
gridBagConstraints2.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints2.weightx = 1.0;
gridBagConstraints2.weighty = 1.0;
jPanel3.add(jScrollPane1, gridBagConstraints2);
gridBagConstraints1 = new java.awt.GridBagConstraints();
gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints1.insets = new java.awt.Insets(5, 5, 0, 0);
gridBagConstraints1.weightx = 0.5;
gridBagConstraints1.weighty = 1.0;
getContentPane().add(jPanel3, gridBagConstraints1);
jPanel4.setLayout(new java.awt.GridBagLayout());
java.awt.GridBagConstraints gridBagConstraints3;
jPanel4.setBorder(new javax.swing.border.TitledBorder(new javax.swing.border.EtchedBorder(), " Style "));
jStyle.setColumns(18);
jStyle.addActionListener(new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent evt)
{
jStyleActionPerformed(evt);
}
}
);
gridBagConstraints3 = new java.awt.GridBagConstraints();
gridBagConstraints3.gridwidth = 0;
gridBagConstraints3.fill =
java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints3.insets = new java.awt.Insets(0, 3, 0, 3);
gridBagConstraints3.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints3.weightx = 1.0;
jPanel4.add(jStyle, gridBagConstraints3);
jStyleList.setModel(new DefaultListModel());
jStyleList.setVisibleRowCount(4);
jStyleList.addListSelectionListener(new javax.swing.event.ListSelectionListener()
{
public void valueChanged(javax.swing.event.ListSelectionEvent evt)
{
jStyleListValueChanged(evt);
}
}
);
jScrollPane2.setViewportView(jStyleList);
gridBagConstraints3 = new java.awt.GridBagConstraints();
gridBagConstraints3.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints3.insets = new java.awt.Insets(3, 3, 3, 3);
gridBagConstraints3.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints3.weightx = 0.5;
gridBagConstraints3.weighty = 1.0;
jPanel4.add(jScrollPane2, gridBagConstraints3);
gridBagConstraints1 = new java.awt.GridBagConstraints();
gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints1.insets = new java.awt.Insets(5, 5, 0, 0);
gridBagConstraints1.weightx = 0.375;
gridBagConstraints1.weighty = 1.0;
getContentPane().add(jPanel4, gridBagConstraints1);
jPanel5.setLayout(new java.awt.GridBagLayout());
java.awt.GridBagConstraints gridBagConstraints4;
jPanel5.setBorder(new javax.swing.border.TitledBorder(new javax.swing.border.EtchedBorder(), " Size "));
jSize.setColumns(6);
jSize.addActionListener(new
java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent evt)
{
jSizeActionPerformed(evt);
}
}
);
gridBagConstraints4 = new java.awt.GridBagConstraints();
gridBagConstraints4.gridwidth = 0;
gridBagConstraints4.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints4.insets = new java.awt.Insets(0, 3, 0, 3);
gridBagConstraints4.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints4.weightx = 1.0;
jPanel5.add(jSize, gridBagConstraints4);
jSizeList.setModel(new DefaultListModel());
jSizeList.setVisibleRowCount(4);
jSizeList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
jSizeList.addListSelectionListener(new javax.swing.event.ListSelectionListener()
{
public void valueChanged(javax.swing.event.ListSelectionEvent evt)
{
jSizeListValueChanged(evt);
}
}
);
jScrollPane3.setViewportView(jSizeList);
gridBagConstraints4 = new java.awt.GridBagConstraints();
gridBagConstraints4.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints4.insets = new java.awt.Insets(3, 3, 3, 3);
gridBagConstraints4.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints4.weightx = 0.25;
gridBagConstraints4.weighty = 1.0;
jPanel5.add(jScrollPane3, gridBagConstraints4);
gridBagConstraints1 = new java.awt.GridBagConstraints();
gridBagConstraints1.gridwidth = 0;
gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints1.insets = new java.awt.Insets(5, 5, 0, 5);
gridBagConstraints1.weightx = 0.125;
gridBagConstraints1.weighty = 1.0;
getContentPane().add(jPanel5, gridBagConstraints1);
jPanel1.setLayout(new java.awt.GridBagLayout());
java.awt.GridBagConstraints gridBagConstraints5;
jPanel1.setBorder(new javax.swing.border.TitledBorder(new javax.swing.border.EtchedBorder(), " Sample "));
jSample.setWrapStyleWord(true);
jSample.setLineWrap(true);
jSample.setColumns(20);
jSample.setRows(3);
jSample.setText("The quick brown fox jumped over the lazy dog.");
jScrollPane4.setViewportView(jSample);
gridBagConstraints5 = new java.awt.GridBagConstraints();
gridBagConstraints5.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints5.insets = new java.awt.Insets(0, 3, 3, 3);
gridBagConstraints5.weightx = 1.0;
gridBagConstraints5.weighty = 1.0;
jPanel1.add(jScrollPane4, gridBagConstraints5);
gridBagConstraints1 = new java.awt.GridBagConstraints();
gridBagConstraints1.gridwidth = 0;
gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints1.insets = new java.awt.Insets(0, 5, 0, 5);
gridBagConstraints1.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints1.weightx = 1.0;
getContentPane().add(jPanel1, gridBagConstraints1);
jButtons.setLayout(new java.awt.GridBagLayout());
java.awt.GridBagConstraints gridBagConstraints6;
jOk.setMnemonic(KeyEvent.VK_O);
jOk.setText("OK");
jOk.setRequestFocusEnabled(false);
jOk.addActionListener(new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent evt)
{
jOkActionPerformed(evt);
}
}
);
gridBagConstraints6 = new java.awt.GridBagConstraints();
gridBagConstraints6.insets = new java.awt.Insets(5, 5, 5, 0);
gridBagConstraints6.anchor = java.awt.GridBagConstraints.WEST;
jButtons.add(jOk, gridBagConstraints6);
jCancel.setMnemonic(KeyEvent.VK_C);
jCancel.setText("Cancel");
jCancel.setRequestFocusEnabled(false);
jCancel.addActionListener(new
java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent evt)
{
jCancelActionPerformed(evt);
}
}
);
gridBagConstraints6 = new java.awt.GridBagConstraints();
gridBagConstraints6.gridwidth = 0;
gridBagConstraints6.insets = new java.awt.Insets(5, 5, 5, 5);
gridBagConstraints6.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints6.weightx = 1.0;
jButtons.add(jCancel, gridBagConstraints6);
gridBagConstraints6 = new java.awt.GridBagConstraints();
gridBagConstraints6.weightx = 1.0;
jButtons.add(jLabel6, gridBagConstraints6);
gridBagConstraints1 = new java.awt.GridBagConstraints();
gridBagConstraints1.gridwidth = 0;
gridBagConstraints1.anchor = java.awt.GridBagConstraints.SOUTHWEST;
gridBagConstraints1.weightx = 1.0;
getContentPane().add(jButtons, gridBagConstraints1);
}
private void jCancelActionPerformed(java.awt.event.ActionEvent evt)
{
// Add your handling code here:
setVisible(false);
}
private void jOkActionPerformed (java.awt.event.ActionEvent evt)
{
// Add your handling code here:
ok = true;
setVisible(false);
}
private void jSizeActionPerformed (java.awt.event.ActionEvent evt)
{
// Add your handling code here:
int size = Integer.parseInt(jSize.getText());
if(size > 0)
{
currentSize = size;
setSampleFont();
}
}
private void jStyleActionPerformed (java.awt.event.ActionEvent evt)
{
// Add your handling code here:
StringTokenizer st = new StringTokenizer(jStyle.getText(),",");
int style = 0;
while(st.hasMoreTokens())
{
String str = st.nextToken().trim();
if(str.equalsIgnoreCase("Plain"))
{
style |= Font.PLAIN;
}
else
if(str.equalsIgnoreCase("Bold"))
{
style |= Font.BOLD;
}
else
if(str.equalsIgnoreCase("Italic"))
{
style |= Font.ITALIC;
}
}
if(style >= 0)
{
currentStyle = style;
setSampleFont();
}
}
private void jFontActionPerformed (java.awt.event.ActionEvent evt)
{
// Add your handling code here:
DefaultListModel model = (DefaultListModel)
jFontList.getModel();
if(model.indexOf(jFont.getText()) >= 0)
{
currentFont = jFont.getText();
setSampleFont();
}
}
private void jStyleListValueChanged(javax.swing.event.ListSelectionEvent evt)
{
// Add your handling code here:
String str = "";
Object[] values = jStyleList.getSelectedValues();
if(values.length > 0)
{
int j;
for(j=0; j < values.length; j++)
{
String s = (String) values[j];
if(s.equalsIgnoreCase("Plain"))
{
str = "Plain"; break;
}
if(str.length() > 0)
{
str += ",";
}
str += (String) values[j];
}
}
else
{
str = styleToString(currentStyle);
}
jStyle.setText(str);
jStyleActionPerformed(null);
}
private void jSizeListValueChanged(javax.swing.event.ListSelectionEvent evt)
{
// Add your handling code here:
String str = (String) jSizeList.getSelectedValue();
if(str==null || str.length() <= 0)
{
str = Integer.toString(currentSize);
}
jSize.setText(str);
jSizeActionPerformed(null);
}
private void jFontListValueChanged(javax.swing.event.ListSelectionEvent evt)
{
// Add your handling code here:
String str = (String) jFontList.getSelectedValue();
if(str==null || str.length() <= 0)
{
str = currentFont;
}
jFont.setText(str);
jFontActionPerformed(null);
}
/** Closes the dialog */
private void closeDialog(java.awt.event.WindowEvent evt)
{
setVisible (false);
}
// Variables declaration - do not modify
private javax.swing.JPanel jPanel3;
private javax.swing.JTextField jFont;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JList jFontList;
private javax.swing.JPanel jPanel4;
private javax.swing.JTextField jStyle;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JList jStyleList;
private javax.swing.JPanel jPanel5;
private javax.swing.JTextField jSize;
private javax.swing.JScrollPane jScrollPane3;
private javax.swing.JList jSizeList;
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane4;
private javax.swing.JTextArea jSample;
private javax.swing.JPanel jButtons;
private javax.swing.JButton jOk;
private javax.swing.JButton jCancel;
private javax.swing.JLabel jLabel6;
// End of variables declaration
}