|
What this is
Other links
The source code
/*
* FontSelector.java - Font selector
* :tabSize=8:indentSize=8:noTabs=false:
* :folding=explicit:collapseFolds=1:
*
* Copyright (C) 2000, 2003 Slava Pestov
* Portions copyright (C) 1999 Jason Ginchereau
* Portions copyright (C) 2003 mike dillon
*
* 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 java.awt.event.*;
import java.awt.*;
import java.util.Vector;
import javax.swing.border.*;
import javax.swing.event.*;
import javax.swing.*;
import org.gjt.sp.jedit.*;
import org.gjt.sp.util.Log;
//}}}
//{{{ FontSelector class
/**
* A font chooser widget.
* @author Slava Pestov
* @version $Id: FontSelector.java,v 1.8 2004/06/28 06:45:27 spestov Exp $
*/
public class FontSelector extends JButton
{
//{{{ FontSelector constructor
/**
* Creates a new font selector control.
* @param font The font
*/
public FontSelector(Font font)
{
this(font,false);
} //}}}
//{{{ FontSelector constructor
/**
* Creates a new font selector control.
* @param font The font
* @param antiAlias Is anti-aliasing enabled?
* @since jEdit 4.2pre7
*/
public FontSelector(Font font, boolean antiAlias)
{
setFont(font);
this.antiAlias = antiAlias;
updateText();
setRequestFocusEnabled(false);
addActionListener(new ActionHandler());
} //}}}
//{{{ paintComponent() method
public void paintComponent(Graphics g)
{
setAntiAliasEnabled(g);
super.paintComponent(g);
} //}}}
//{{{ isAntiAliasEnabled() method
public boolean isAntiAliasEnabled()
{
return antiAlias;
} //}}}
//{{{ setAntiAliasEnabled() method
public void setAntiAliasEnabled(boolean antiAlias)
{
this.antiAlias = antiAlias;
} //}}}
//{{{ updateText() method
private void updateText()
{
Font font = getFont();
String styleString;
switch(font.getStyle())
{
case Font.PLAIN:
styleString = jEdit.getProperty("font-selector.plain");
break;
case Font.BOLD:
styleString = jEdit.getProperty("font-selector.bold");
break;
case Font.ITALIC:
styleString = jEdit.getProperty("font-selector.italic");
break;
case Font.BOLD | Font.ITALIC:
styleString = jEdit.getProperty("font-selector.bolditalic");
break;
default:
styleString = "UNKNOWN!!!???";
break;
}
setText(font.getName() + " " + font.getSize() + " " + styleString);
} //}}}
//{{{ setAntiAliasEnabled() method
void setAntiAliasEnabled(Graphics g)
{
if (antiAlias)
{
Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
}
} //}}}
private boolean antiAlias;
//{{{ ActionHandler class
class ActionHandler implements ActionListener
{
public void actionPerformed(ActionEvent evt)
{
Font font;
JDialog dialog = GUIUtilities.getParentDialog(FontSelector.this);
if(dialog == null)
{
font = new FontSelectorDialog(
JOptionPane.getFrameForComponent(
FontSelector.this),getFont(),
FontSelector.this)
.getSelectedFont();
}
else
{
font = new FontSelectorDialog(dialog,getFont(),
FontSelector.this)
.getSelectedFont();
}
if(font != null)
{
setFont(font);
updateText();
}
}
} //}}}
} //}}}
//{{{ FontSelectorDialog class
class FontSelectorDialog extends EnhancedDialog
{
//{{{ FontSelectorDialog constructor
public FontSelectorDialog(Frame parent, Font font)
{
super(parent,jEdit.getProperty("font-selector.title"),true);
init(font);
} //}}}
//{{{ FontSelectorDialog constructor
public FontSelectorDialog(Dialog parent, Font font)
{
super(parent,jEdit.getProperty("font-selector.title"),true);
init(font);
} //}}}
//{{{ FontSelectorDialog constructor
public FontSelectorDialog(Frame parent, Font font,
FontSelector fontSelector)
{
super(parent,jEdit.getProperty("font-selector.title"),true);
this.fontSelector = fontSelector;
init(font);
} //}}}
//{{{ FontSelectorDialog constructor
public FontSelectorDialog(Dialog parent, Font font,
FontSelector fontSelector)
{
super(parent,jEdit.getProperty("font-selector.title"),true);
this.fontSelector = fontSelector;
init(font);
} //}}}
//{{{ ok() method
public void ok()
{
isOK = true;
dispose();
} //}}}
//{{{ cancel() method
public void cancel()
{
dispose();
} //}}}
//{{{ getSelectedFont() method
public Font getSelectedFont()
{
if(!isOK)
return null;
int size;
try
{
size = Integer.parseInt(sizeField.getText());
}
catch(Exception e)
{
size = 12;
}
return new Font(familyField.getText(),styleList
.getSelectedIndex(),size);
} //}}}
//{{{ Private members
//{{{ Instance variables
private FontSelector fontSelector;
private boolean isOK;
private JTextField familyField;
private JList familyList;
private JTextField sizeField;
private JList sizeList;
private JTextField styleField;
private JList styleList;
private JLabel preview;
private JButton ok;
private JButton cancel;
//}}}
/**
* For some reason the default Java fonts show up in the
* list with .bold, .bolditalic, and .italic extensions.
*/
private static final String[] HIDEFONTS = {
".bold",
".italic"
};
//{{{ init() method
private void init(Font font)
{
JPanel content = new JPanel(new BorderLayout());
content.setBorder(new EmptyBorder(12,12,12,12));
setContentPane(content);
JPanel listPanel = new JPanel(new GridLayout(1,3,6,6));
String[] fonts;
try
{
fonts = getFontList();
}
catch(Exception e)
{
Log.log(Log.ERROR,this,"Broken Java implementation!");
/* Log.log(Log.ERROR,this,"Using deprecated Toolkit.getFontList()"); */
Log.log(Log.ERROR,this,e);
/* fonts = getToolkit().getFontList(); */
fonts = new String[] { "Broken Java implementation!" };
}
JPanel familyPanel = createTextFieldAndListPanel(
"font-selector.family",
familyField = new JTextField(),
familyList = new JList(fonts));
listPanel.add(familyPanel);
String[] sizes = { "9", "10", "12", "14", "16", "18", "24" };
JPanel sizePanel = createTextFieldAndListPanel(
"font-selector.size",
sizeField = new JTextField(),
sizeList = new JList(sizes));
listPanel.add(sizePanel);
String[] styles = {
jEdit.getProperty("font-selector.plain"),
jEdit.getProperty("font-selector.bold"),
jEdit.getProperty("font-selector.italic"),
jEdit.getProperty("font-selector.bolditalic")
};
JPanel stylePanel = createTextFieldAndListPanel(
"font-selector.style",
styleField = new JTextField(),
styleList = new JList(styles));
styleField.setEditable(false);
listPanel.add(stylePanel);
familyList.setSelectedValue(font.getFamily(),true);
familyField.setText(font.getFamily());
sizeList.setSelectedValue(String.valueOf(font.getSize()),true);
sizeField.setText(String.valueOf(font.getSize()));
styleList.setSelectedIndex(font.getStyle());
styleField.setText((String)styleList.getSelectedValue());
ListHandler listHandler = new ListHandler();
familyList.addListSelectionListener(listHandler);
sizeList.addListSelectionListener(listHandler);
styleList.addListSelectionListener(listHandler);
content.add(BorderLayout.NORTH,listPanel);
preview = new JLabel(jEdit.getProperty("font-selector.long-text")) {
public void paintComponent(Graphics g)
{
if(fontSelector != null)
fontSelector.setAntiAliasEnabled(g);
super.paintComponent(g);
}
};
preview.setBorder(new TitledBorder(jEdit.getProperty(
"font-selector.preview")));
updatePreview();
Dimension prefSize = preview.getPreferredSize();
prefSize.height = 50;
preview.setPreferredSize(prefSize);
content.add(BorderLayout.CENTER,preview);
JPanel buttons = new JPanel();
buttons.setLayout(new BoxLayout(buttons,BoxLayout.X_AXIS));
buttons.setBorder(new EmptyBorder(12,0,0,0));
buttons.add(Box.createGlue());
ok = new JButton(jEdit.getProperty("common.ok"));
ok.addActionListener(new ActionHandler());
getRootPane().setDefaultButton(ok);
buttons.add(ok);
buttons.add(Box.createHorizontalStrut(6));
cancel = new JButton(jEdit.getProperty("common.cancel"));
cancel.addActionListener(new ActionHandler());
buttons.add(cancel);
buttons.add(Box.createGlue());
content.add(BorderLayout.SOUTH,buttons);
pack();
setLocationRelativeTo(getParent());
setVisible(true);
} //}}}
//{{{ getFontList() method
private String[] getFontList()
{
String[] nameArray = GraphicsEnvironment
.getLocalGraphicsEnvironment()
.getAvailableFontFamilyNames();
Vector nameVector = new Vector(nameArray.length);
for(int i = 0, j; i < nameArray.length; i++)
{
for(j = 0; j < HIDEFONTS.length; j++)
{
if(nameArray[i].indexOf(HIDEFONTS[j]) >= 0)
break;
}
if(j == HIDEFONTS.length)
nameVector.addElement(nameArray[i]);
}
String[] _array = new String[nameVector.size()];
nameVector.copyInto(_array);
return _array;
} //}}}
//{{{ createTextFieldAndListPanel() method
private JPanel createTextFieldAndListPanel(String label,
JTextField textField, JList list)
{
GridBagLayout layout = new GridBagLayout();
JPanel panel = new JPanel(layout);
GridBagConstraints cons = new GridBagConstraints();
cons.gridx = cons.gridy = 0;
cons.gridwidth = cons.gridheight = 1;
cons.fill = GridBagConstraints.BOTH;
cons.weightx = 1.0f;
JLabel _label = new JLabel(jEdit.getProperty(label));
layout.setConstraints(_label,cons);
panel.add(_label);
cons.gridy = 1;
Component vs = Box.createVerticalStrut(6);
layout.setConstraints(vs,cons);
panel.add(vs);
cons.gridy = 2;
layout.setConstraints(textField,cons);
panel.add(textField);
cons.gridy = 3;
vs = Box.createVerticalStrut(6);
layout.setConstraints(vs,cons);
panel.add(vs);
cons.gridy = 4;
cons.gridheight = GridBagConstraints.REMAINDER;
cons.weighty = 1.0f;
JScrollPane scroller = new JScrollPane(list);
layout.setConstraints(scroller,cons);
panel.add(scroller);
return panel;
} //}}}
//{{{ updatePreview() method
private void updatePreview()
{
String family = familyField.getText();
int size;
try
{
size = Integer.parseInt(sizeField.getText());
}
catch(Exception e)
{
size = 12;
}
int style = styleList.getSelectedIndex();
preview.setFont(new Font(family,style,size));
} //}}}
//}}}
//{{{ ActionHandler class
class ActionHandler implements ActionListener
{
public void actionPerformed(ActionEvent evt)
{
if(evt.getSource() == ok)
ok();
else if(evt.getSource() == cancel)
cancel();
}
} //}}}
//{{{ ListHandler class
class ListHandler implements ListSelectionListener
{
public void valueChanged(ListSelectionEvent evt)
{
Object source = evt.getSource();
if(source == familyList)
{
String family = (String)familyList.getSelectedValue();
if(family != null)
familyField.setText(family);
}
else if(source == sizeList)
{
String size = (String)sizeList.getSelectedValue();
if(size != null)
sizeField.setText(size);
}
else if(source == styleList)
{
String style = (String)styleList.getSelectedValue();
if(style != null)
styleField.setText(style);
}
updatePreview();
}
} //}}}
} //}}}
|
| ... 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.