diff options
Diffstat (limited to 'src/preffont.cpp')
-rw-r--r-- | src/preffont.cpp | 174 |
1 files changed, 174 insertions, 0 deletions
diff --git a/src/preffont.cpp b/src/preffont.cpp new file mode 100644 index 0000000..288c699 --- /dev/null +++ b/src/preffont.cpp @@ -0,0 +1,174 @@ +/*************************************************************************** + * + * Copyright (C) 2005 Elad Lahav ([email protected]) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ***************************************************************************/ + +#include <qlistview.h> +#include <qpainter.h> +#include <kfontdialog.h> +#include <klocale.h> +#include "preffont.h" +#include "kscopeconfig.h" + +/** + * A list view item that shows the name of a GUI element and the font + * associated with it. + * The font is presented in the form of a sample text drawn using this font. + * @author Elad Lahav + */ +class FontListItem : public QListViewItem +{ +public: + /** + * Class constructor. + * @param pList The owner list view + * @param fe The GUI element shown by this item + */ + FontListItem(QListView* pList, KScopeConfig::FontElement fe) : + QListViewItem(pList, Config().getFontName(fe), ""), + m_fe(fe) { + setFont(Config().getFont(fe)); + } + + /** + * @return The GUI element shown by this item + */ + KScopeConfig::FontElement getElement() { return m_fe; } + + /** + * Changes the font associated with this item. + * The function a sample text on a pixmap using this font, and then + * assigns the pixmap to the list item. + * The font set by this function is returned by getFont(). + * @param font The font to set + */ + void setFont(QFont font) { + QPixmap pix; + QFontMetrics fm(font); + QPainter painter; + QRect rc; + + // Remember the font + m_font = font; + + // Set the pixmap's size so it can contain the sample text + rc = fm.boundingRect(i18n("Sample")); + rc.moveTopLeft(QPoint(0, 0)); + pix.resize(rc.width(), rc.height()); + + // Draw on the pixmap + pix.fill(); + painter.begin(&pix); + painter.setFont(font); + painter.setPen(black); + painter.drawText(rc, Qt::AlignHCenter | Qt::AlignVCenter, + i18n("Sample")); + painter.end(); + + // Set the pixmap to the item + setPixmap(1, pix); + } + + /** + * @return The font associated with this item + */ + QFont getFont() { return m_font; } + +private: + /** The GUI element shown by this item. */ + KScopeConfig::FontElement m_fe; + + /** The font associated with this item. */ + QFont m_font; +}; + +/** + * Class constructor. + * @param pParent The parent widget + * @param szName The widget's name + */ +PrefFont::PrefFont(QWidget* pParent, const char* szName) : + PrefFontLayout(pParent, szName) +{ + // Set initial values + load(); +} + +/** + * Class destructor. + */ +PrefFont::~PrefFont() +{ +} + +/** + * Reads the current settings from the configuration object, and applies them + * the the page's widget. + */ +void PrefFont::load() +{ + uint i; + FontListItem* pItem; + + // Create a list item for every GUI element + for (i = 0; i <= KScopeConfig::LAST_FONT; i++) + pItem = new FontListItem(m_pList, (KScopeConfig::FontElement)i); +} + +/** + * Commits settings changes to the configuration object. + */ +void PrefFont::apply() +{ + FontListItem* pItem; + + // Create a list item for every GUI element + for (pItem = (FontListItem*)m_pList->firstChild(); pItem != NULL; + pItem = (FontListItem*)pItem->nextSibling()) { + Config().setFont(pItem->getElement(), pItem->getFont()); + } +} + +/** + * Displays a font selection dialogue when an item is selected. + * If the user chooses a new font, it is set to the selected item. + * This slot is connected to both the doubleClicked() and the returnPressed() + * signals of the list view. + * @param pItem The selected item + */ +void PrefFont::slotItemSelected(QListViewItem* pItem) +{ + FontListItem* pFontItem; + QFont font; + + pFontItem = (FontListItem*)pItem; + font = pFontItem->getFont(); + if (KFontDialog::getFont(font) == QDialog::Accepted) { + pFontItem->setFont(font); + emit modified(); + } +} + +#include "preffont.moc" |