ee91ad59e57d04e11756df8dd4087546470288fd
[quassel.git] / src / qtui / topicbutton.cpp
1 /***************************************************************************
2  *   Copyright (C) 2005/06 by the Quassel Project                          *
3  *   devel@quassel-irc.org                                                 *
4  *                                                                         *
5  *   This program is free software; you can redistribute it and/or modify  *
6  *   it under the terms of the GNU General Public License as published by  *
7  *   the Free Software Foundation; either version 2 of the License, or     *
8  *   (at your option) version 3.                                           *
9  *                                                                         *
10  *   This program is distributed in the hope that it will be useful,       *
11  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
12  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
13  *   GNU General Public License for more details.                          *
14  *                                                                         *
15  *   You should have received a copy of the GNU General Public License     *
16  *   along with this program; if not, write to the                         *
17  *   Free Software Foundation, Inc.,                                       *
18  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
19  ***************************************************************************/
20
21 #include "topicbutton.h"
22
23
24 #include <QDebug>
25
26 #include <QApplication>
27 #include <QPainter>
28 #include <QHBoxLayout>
29 #include <QFont>
30 #include <QFontMetrics>
31
32 #include "qtui.h"
33 #include "message.h"
34
35 TopicButton::TopicButton(QWidget *parent)
36   : QAbstractButton(parent)
37 {
38 }
39
40 void TopicButton::paintEvent(QPaintEvent *event) {
41   Q_UNUSED(event);
42
43   QPainter painter(this);
44   painter.setBackgroundMode(Qt::OpaqueMode);
45
46   QRect drawRect = rect();
47   QRect brect;
48   QString textPart;
49   foreach(QTextLayout::FormatRange fr, styledText.formats) {
50     textPart = styledText.text.mid(fr.start, fr.length);
51     painter.setFont(fr.format.font());
52     painter.setPen(QPen(fr.format.foreground(), 0));
53     painter.setBackground(fr.format.background());
54     painter.drawText(drawRect, Qt::AlignLeft|Qt::TextSingleLine, textPart, &brect);
55     drawRect.setLeft(brect.right());
56   }
57 }
58
59 void TopicButton::setAndStyleText(const QString &text) {
60   styledText = QtUi::style()->styleString(Message::mircToInternal(text));
61   setText(styledText.text);
62   int height = 1;
63   foreach(QTextLayout::FormatRange fr, styledText.formats) {
64     height = qMax(height, QFontMetrics(fr.format.font()).height());
65   }
66   setFixedHeight(height);
67 }