Source Code (Use browser search to find items of interest.)
Class Index
kdelibs'KFontChooser (./kdelibs/kdeui/kfontdialog.h:45)
class KFontChooser : public QWidget
{
Q_OBJECT
public:
/**
* Constructor. Create a new font picker dialog.
*
* @param parent The parent widget.
* @param name The widget name.
* @param onlyFixedFonts only display fonts which have fixed-width
* character sizes.
* @param fontList A list of fonts to display, in XLFD format. If
* no list is formatted, the internal KDE font list is used.
* If that has not been created, X is queried, and all fonts
* available on the system are displayed.
* @param visibleListSize The minimum number of visible entries in the
* fontlists.
*/
KFontChooser(QWidget *parent = 0L, const char *name = 0L,
bool onlyFixed = false,
const QStringList &fontList = QStringList(),
bool makeFrame = true, int visibleListSize=8 );
/**
* Set the currently selected font in the chooser.
*
* @param font The font to select.
* @param onlyFixed Readjust the font list to display only fixed
* width fonts if @p true, or vice-versa.
*/
void setFont( const QFont &font, bool onlyFixed = false );
/**
* @return The currently selected font in the chooser.
*/
QFont font() { return selFont; }
/**
* @return The current text in the sample text input area.
*/
QString sampleText() { return sampleEdit->text(); }
/**
* Set the sample text. Normally you should not change this
* text, but it can be better to do this if the default text is
* too large for the edit area when using the default font of your
* application.
*
* @param text The new sample text. The current will be removed.
*/
void setSampleText( const QString &text )
{
sampleEdit->setText( text );
}
/**
* Convert a @ref QFont into the corresponding X Logical Font
* Description (XLFD).
*
* @param theFont The font to convert.
* @return A string representing the given font in XLFD format.
*/
static QString getXLFD( const QFont &theFont )
{ return theFont.rawName(); }
/**
* Construct a list of font strings that matches the pattern.
*
* @param list The list is returned here.
* @param pattern The font pattern.
*/
static void getFontList( QStringList &list, const char *pattern );
virtual QSize sizeHint( void ) const;
private slots:
void family_chosen_slot(const QString&);
void size_chosen_slot(const QString&);
void style_chosen_slot(const QString&);
void displaySample(const QFont &font);
void charset_chosen_slot(const QString&);
void showXLFDArea(bool);
signals:
/**
* connect to this to monitor the font as it is selected.
*/
void fontSelected( const QFont &font );
protected:
void fillFamilyListBox(bool onlyFixedFonts = false);
void fillCharsetsCombo();
void getFontList( QStringList &list, bool fixed );
// This one must be static since getFontList( QStringList, char*) is so
static void addFont( QStringList &list, const char *xfont );
void setupDisplay();
// pointer to an optinally supplied list of fonts to
// inserted into the fontdialog font-family combo-box
QStringList fontList;
QGroupBox *xlfdBox;
QLineEdit *sampleEdit;
QLineEdit *xlfdEdit;
KListBox *familyListBox;
KListBox *styleListBox;
KListBox *sizeListBox;
QComboBox *charsetsCombo;
QFont selFont;
bool usingFixed;
class KFontChooserPrivate;
KFontChooserPrivate *d;
};
/**
* Dialog for interactive font selection. Provides a wrapper around
* KFontChooser.
*
* @author Preston Brown <pbrown@kde.org>, Bernd Wuebben <wuebben@kde.org>
* @version $Id: kfontdialog.h,v 1.26 2000/03/16 20:48:00 granroth Exp $
*/
kdelibs'KFontChooser::KFontChooser() (./kdelibs/kdeui/kfontdialog.cpp:86)
KFontChooser::KFontChooser(QWidget *parent, const char *name,
bool onlyFixed, const QStringList &fontList,
bool makeFrame, int visibleListSize )
: QWidget(parent, name), usingFixed(onlyFixed)
{
QVBoxLayout *topLayout = new QVBoxLayout( this, 0, KDialog::spacingHint() );
QWidget *page;
QGridLayout *gridLayout;
int row = 0;
if( makeFrame == true )
{
page = new QGroupBox( i18n("Requested Font"), this );
topLayout->addWidget(page);
gridLayout = new QGridLayout( page, 5, 3, KDialog::spacingHint() );
gridLayout->addRowSpacing( 0, fontMetrics().lineSpacing() );
row = 1;
}
else
{
page = new QWidget( this );
topLayout->addWidget(page);
gridLayout = new QGridLayout( page, 4, 3, 0, KDialog::spacingHint() );
}
//
// first, create the labels across the top
//
QLabel *familyLabel = new QLabel( i18n("Font"), page, "familyLabel" );
gridLayout->addWidget(familyLabel, row, 0, AlignLeft );
QLabel *styleLabel = new QLabel( i18n("Font style"), page, "styleLabel");
gridLayout->addWidget(styleLabel, row, 1, AlignLeft);
QLabel *sizeLabel = new QLabel( i18n("Size"), page, "sizeLabel");
gridLayout->addWidget(sizeLabel, row, 2, AlignLeft);
row ++;
//
// now create the actual boxes that hold the info
//
familyListBox = new KListBox( page, "familyListBox");
gridLayout->addWidget( familyListBox, row, 0 );
connect(familyListBox, SIGNAL(highlighted(const QString &)),
SLOT(family_chosen_slot(const QString &)));
if(fontList.count() != 0)
{
familyListBox->insertStringList(fontList);
}
else
{
fillFamilyListBox(onlyFixed);
}
familyListBox->setMinimumWidth( minimumListWidth( familyListBox ) );
familyListBox->setMinimumHeight(
minimumListHeight( familyListBox, visibleListSize ) );
styleListBox = new KListBox( page, "styleListBox");
gridLayout->addWidget(styleListBox, row, 1);
styleListBox->insertItem(i18n("Regular"));
styleListBox->insertItem(i18n("Italic"));
styleListBox->insertItem(i18n("Bold"));
styleListBox->insertItem(i18n("Bold Italic"));
styleListBox->setMinimumWidth( minimumListWidth( styleListBox ) );
styleListBox->setMinimumHeight(
minimumListHeight( styleListBox, visibleListSize ) );
connect(styleListBox, SIGNAL(highlighted(const QString &)),
SLOT(style_chosen_slot(const QString &)));
sizeListBox = new KListBox( page, "sizeListBox");
gridLayout->addWidget(sizeListBox, row, 2);
const char *c[] =
{
"4", "5", "6", "7",
"8", "9", "10", "11",
"12", "13", "14", "15",
"16", "17", "18", "19",
"20", "22", "24", "26",
"28", "32", "48", "64",
0
};
for(int i = 0; c[i] != 0; i++)
{
sizeListBox->insertItem(QString::fromLatin1(c[i]));
}
sizeListBox->setMinimumWidth( minimumListWidth(sizeListBox) +
sizeListBox->fontMetrics().maxWidth() );
sizeListBox->setMinimumHeight(
minimumListHeight( sizeListBox, visibleListSize ) );
connect( sizeListBox, SIGNAL(highlighted(const QString&)),
SLOT(size_chosen_slot(const QString&)) );
row ++;
QLabel *charsetLabel = new QLabel( page, "charsetLabel");
charsetLabel->setText(i18n("Character set:"));
gridLayout->addWidget(charsetLabel, 3, 0, AlignRight);
charsetsCombo = new QComboBox(true, page, "charsetsCombo");
gridLayout->addMultiCellWidget(charsetsCombo, 3, 3, 1, 2);
charsetsCombo->setInsertionPolicy(QComboBox::NoInsertion);
connect(charsetsCombo, SIGNAL(activated(const QString&)),
SLOT(charset_chosen_slot(const QString&)));
row ++;
sampleEdit = new QLineEdit( page, "sampleEdit");
QFont tmpFont( KGlobal::generalFont().family(), 64, QFont::Black );
sampleEdit->setFont(tmpFont);
sampleEdit->setText(i18n("The Quick Brown Fox Jumps Over The Lazy Dog"));
sampleEdit->setMinimumHeight( sampleEdit->fontMetrics().lineSpacing() );
sampleEdit->setAlignment(Qt::AlignCenter);
gridLayout->addMultiCellWidget(sampleEdit, 4, 4, 0, 2);
connect(this, SIGNAL(fontSelected(const QFont &)),
SLOT(displaySample(const QFont &)));
gridLayout->activate();
QVBoxLayout *vbox;
if( makeFrame == true )
{
page = new QGroupBox( i18n("Actual Font"), this );
topLayout->addWidget(page);
vbox = new QVBoxLayout( page, KDialog::spacingHint() );
vbox->addSpacing( fontMetrics().lineSpacing() );
}
else
{
page = new QWidget( this );
topLayout->addWidget(page);
vbox = new QVBoxLayout( page, 0, KDialog::spacingHint() );
QLabel *label = new QLabel( i18n("Actual Font"), page );
vbox->addWidget( label );
}
xlfdEdit = new QLineEdit( page, "xlfdEdit" );
vbox->addWidget( xlfdEdit );
// lets initialize the display if possible
setFont( KGlobal::generalFont(), usingFixed );
// Create displayable charsets list
fillCharsetsCombo();
vbox->activate();
KConfig *config = KGlobal::config();
config->setGroup(QString::fromLatin1("General"));
showXLFDArea(config->readBoolEntry(QString::fromLatin1("fontSelectorShowXLFD"), false));
topLayout->activate();
}
kdelibs'KFontChooser::sizeHint() (./kdelibs/kdeui/kfontdialog.cpp:240)
QSize KFontChooser::sizeHint( void ) const
{
return( minimumSizeHint() );
}
kdelibs'KFontChooser::charset_chosen_slot() (./kdelibs/kdeui/kfontdialog.cpp:247)
void KFontChooser::charset_chosen_slot(const QString& chset)
{
KCharsets *charsets = KGlobal::charsets();
if (chset == QString::fromLatin1("default")) {
charsets->setQFont(selFont, KGlobal::locale()->charset());
} else {
charsets->setQFont(selFont, chset);
}
emit fontSelected(selFont);
}
kdelibs'KFontChooser::setFont() (./kdelibs/kdeui/kfontdialog.cpp:259)
void KFontChooser::setFont( const QFont& aFont, bool onlyFixed )
{
selFont = aFont;
if( onlyFixed != usingFixed)
{
usingFixed = onlyFixed;
fillFamilyListBox(usingFixed);
}
setupDisplay();
displaySample(selFont);
}
kdelibs'KFontChooser::fillCharsetsCombo() (./kdelibs/kdeui/kfontdialog.cpp:272)
void KFontChooser::fillCharsetsCombo()
{
int i;
KCharsets *charsets=KGlobal::charsets();
charsetsCombo->clear();
QStringList sets=charsets->availableCharsetNames(selFont.family());
charsetsCombo->insertItem( i18n("default") );
for ( QStringList::Iterator it = sets.begin(); it != sets.end(); ++it )
charsetsCombo->insertItem( *it );
charsetsCombo->insertItem( i18n("any") );
QString charset=charsets->name(selFont);
for(i = 0; i < charsetsCombo->count(); i++){
if (charset == charsetsCombo->text(i)){
charsetsCombo->setCurrentItem(i);
break;
}
}
}
kdelibs'KFontChooser::family_chosen_slot() (./kdelibs/kdeui/kfontdialog.cpp:293)
void KFontChooser::family_chosen_slot(const QString& family)
{
selFont.setFamily(family);
fillCharsetsCombo();
emit fontSelected(selFont);
}
kdelibs'KFontChooser::size_chosen_slot() (./kdelibs/kdeui/kfontdialog.cpp:302)
void KFontChooser::size_chosen_slot(const QString& size){
QString size_string = size;
selFont.setPointSize(size_string.toInt());
emit fontSelected(selFont);
}
kdelibs'KFontChooser::style_chosen_slot() (./kdelibs/kdeui/kfontdialog.cpp:310)
void KFontChooser::style_chosen_slot(const QString& style)
{
QString style_string = style;
if ( style_string.find(i18n("Italic")) != -1)
selFont.setItalic(true);
else
selFont.setItalic(false);
if ( style_string.find(i18n("Bold")) != -1)
selFont.setBold(true);
else
selFont.setBold(false);
emit fontSelected(selFont);
}
kdelibs'KFontChooser::displaySample() (./kdelibs/kdeui/kfontdialog.cpp:325)
void KFontChooser::displaySample(const QFont& font)
{
sampleEdit->setFont(font);
sampleEdit->setCursorPosition(0);
xlfdEdit->setText(font.rawName());
xlfdEdit->setCursorPosition(0);
}
kdelibs'KFontChooser::setupDisplay() (./kdelibs/kdeui/kfontdialog.cpp:333)
void KFontChooser::setupDisplay()
{
QString aString;
int numEntries, i=0;
bool found;
numEntries = familyListBox->count();
aString = selFont.family();
found = false;
for (i = 0; i < numEntries; i++) {
if (aString.lower() == (familyListBox->text(i).lower())) {
familyListBox->setCurrentItem(i);
found = true;
break;
}
}
numEntries = sizeListBox->count();
aString.setNum(selFont.pointSize());
found = false;
for (i = 0; i < numEntries; i++){
if (aString == sizeListBox->text(i)) {
sizeListBox->setCurrentItem(i);
found = true;
break;
}
}
i = (selFont.bold() ? 2 : 0);
i += (selFont.italic() ? 1 : 0);
styleListBox->setCurrentItem(i);
// Re-create displayable charsets list
fillCharsetsCombo();
}
kdelibs'KFontChooser::getFontList() (./kdelibs/kdeui/kfontdialog.cpp:374)
void KFontChooser::getFontList( QStringList &list, bool fixed )
{
//
// Use KDE fonts if there is a KDE font list and check that the fonts
// exist on the server where the desktop is running.
//
QStringList lstSys, lstKDE;
if ( fixed )
{
getFontList( lstSys, "-*-*-*-*-*-*-*-*-*-*-m-*-*-*" );
getFontList( lstSys, "-*-*-*-*-*-*-*-*-*-*-c-*-*-*" );
}
else
{
//getFontList( lstSys, "-*-*-*-*-*-*-*-*-*-*-p-*-*-*" );
getFontList(lstSys, "*");
}
lstSys.sort();
if ( !kapp->kdeFonts( lstKDE ) )
{
list = lstSys;
return;
}
for (int i = 0; i < (int) lstKDE.count(); i++) {
if (lstSys.contains(lstKDE[i]))
list.append(lstKDE[i]);
}
list.sort();
}
kdelibs'KFontChooser::getFontList() (./kdelibs/kdeui/kfontdialog.cpp:410)
void KFontChooser::getFontList( QStringList &list, const char *pattern )
{
int num;
char **xFonts = XListFonts( qt_xdisplay(), pattern, 2000, &num );
for( int i = 0; i < num; i++ )
{
addFont( list, xFonts[i] );
}
XFreeFontNames( xFonts );
}
kdelibs'KFontChooser::addFont() (./kdelibs/kdeui/kfontdialog.cpp:424)
void KFontChooser::addFont( QStringList &list, const char *xfont )
{
const char *ptr = strchr( xfont, '-' );
if ( !ptr )
return;
ptr = strchr( ptr + 1, '-' );
if ( !ptr )
return;
QString font = QString::fromLatin1(ptr + 1);
int pos;
if ( ( pos = font.find( '-' ) ) > 0 ) {
font.truncate( pos );
if ( font.find( QString::fromLatin1("open look"), 0, false ) >= 0 )
return;
QStringList::Iterator it = list.begin();
for ( ; it != list.end(); ++it )
if ( *it == font )
return;
list.append( font );
}
}
kdelibs'KFontChooser::fillFamilyListBox() (./kdelibs/kdeui/kfontdialog.cpp:452)
void KFontChooser::fillFamilyListBox(bool onlyFixedFonts)
{
QStringList fontList;
getFontList(fontList, onlyFixedFonts);
familyListBox->clear();
familyListBox->insertStringList(fontList);
}
kdelibs'KFontChooser::showXLFDArea() (./kdelibs/kdeui/kfontdialog.cpp:460)
void KFontChooser::showXLFDArea(bool show)
{
if( show == true )
{
xlfdEdit->parentWidget()->show();
}
else
{
xlfdEdit->parentWidget()->hide();
}
}
///////////////////////////////////////////////////////////////////////////////