From 89714033b9b0399f6855eb558217dc549813295d Mon Sep 17 00:00:00 2001 From: Manuel Nickschas Date: Tue, 28 Jul 2009 01:43:09 +0200 Subject: [PATCH] Add a FontSelector widget This handles a label, a demo frame, and a button to choose a font. It's not checkable at the moment though. FontSelector uses the property system, so it can be used conveniently. --- src/uisupport/CMakeLists.txt | 2 + src/uisupport/fontselector.cpp | 70 ++++++++++++++++++++++++++++++++++ src/uisupport/fontselector.h | 56 +++++++++++++++++++++++++++ 3 files changed, 128 insertions(+) create mode 100644 src/uisupport/fontselector.cpp create mode 100644 src/uisupport/fontselector.h diff --git a/src/uisupport/CMakeLists.txt b/src/uisupport/CMakeLists.txt index 2b05f9de..f366be51 100644 --- a/src/uisupport/CMakeLists.txt +++ b/src/uisupport/CMakeLists.txt @@ -18,6 +18,7 @@ set(SOURCES colorbutton.cpp contextmenuactionprovider.cpp flatproxymodel.cpp + fontselector.cpp graphicalui.cpp icon.cpp iconloader.cpp @@ -48,6 +49,7 @@ set(MOC_HDRS colorbutton.h contextmenuactionprovider.h flatproxymodel.h + fontselector.h graphicalui.h iconloader.h inputline.h diff --git a/src/uisupport/fontselector.cpp b/src/uisupport/fontselector.cpp new file mode 100644 index 00000000..6330693e --- /dev/null +++ b/src/uisupport/fontselector.cpp @@ -0,0 +1,70 @@ +/*************************************************************************** + * Copyright (C) 2005-09 by the Quassel Project * + * devel@quassel-irc.org * + * * + * 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) version 3. * + * * + * 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. * + ***************************************************************************/ + +#include +#include +#include +#include + +#include "fontselector.h" + +FontSelector::FontSelector(QWidget *parent) : QWidget(parent) { + init(); +} + +FontSelector::FontSelector(const QString &label, QWidget *parent) : QWidget(parent) { + init(label); +} + +void FontSelector::init(const QString &label) { + QHBoxLayout *layout = new QHBoxLayout(this); + QPushButton *chooseButton = new QPushButton(tr("Choose..."), this); + connect(chooseButton, SIGNAL(clicked()), SLOT(chooseFont())); + + layout->addWidget(_label = new QLabel(label)); + layout->addWidget(_demo = new QLabel("Font")); + layout->addWidget(chooseButton); + layout->setContentsMargins(0, 0, 0, 0); + + _demo->setFrameStyle(QFrame::StyledPanel); + _demo->setFrameShadow(QFrame::Sunken); + _demo->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred); + _font = font(); +} + +void FontSelector::setText(const QString &label) { + _label->setText(label); +} + +void FontSelector::setSelectedFont(const QFont &font) { + _font = font; + _demo->setText(QString("%1 %2pt").arg(font.family()).arg(font.pointSize())); + _demo->setFont(font); + emit fontChanged(font); +} + +void FontSelector::chooseFont() { + bool ok; + QFont font = QFontDialog::getFont(&ok, _demo->font()); + if(ok) { + setSelectedFont(font); + } +} + diff --git a/src/uisupport/fontselector.h b/src/uisupport/fontselector.h new file mode 100644 index 00000000..d7ca9e18 --- /dev/null +++ b/src/uisupport/fontselector.h @@ -0,0 +1,56 @@ +/*************************************************************************** + * Copyright (C) 2005-09 by the Quassel Project * + * devel@quassel-irc.org * + * * + * 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) version 3. * + * * + * 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. * + ***************************************************************************/ + +#ifndef FONTSELECTOR_H_ +#define FONTSELECTOR_H_ + +#include +#include + +class FontSelector : public QWidget { + Q_OBJECT + Q_PROPERTY(QFont selectedFont READ selectedFont WRITE setSelectedFont) + Q_PROPERTY(QString text READ text WRITE setText) + +public: + FontSelector(QWidget *parent = 0); + FontSelector(const QString &label, QWidget *parent = 0); + + inline const QFont &selectedFont() const { return _font; } + inline QString text() const { return _label->text(); } + +public slots: + void setText(const QString &label); + void setSelectedFont(const QFont &font); + +signals: + void fontChanged(const QFont &); + +protected slots: + void chooseFont(); + +private: + QFont _font; + QLabel *_demo, *_label; + + void init(const QString &label = "Font"); +}; + +#endif // FONTSELECTOR_H_ -- 2.20.1