X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Ftopiclabel.cpp;fp=src%2Fqtui%2Ftopiclabel.cpp;h=0000000000000000000000000000000000000000;hp=2bcd740bb7cb87747bd90a9eac1c58d6ed255f66;hb=a5ad4560182856e9fd3bfb091f6ed18837f1b839;hpb=a3c6487bfca7ce2b06d588ec4b7795d46359ad47 diff --git a/src/qtui/topiclabel.cpp b/src/qtui/topiclabel.cpp deleted file mode 100644 index 2bcd740b..00000000 --- a/src/qtui/topiclabel.cpp +++ /dev/null @@ -1,173 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2005/06 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 "topiclabel.h" - - -#include - -#include -#include -#include -// #include -#include -#include - -#include "qtui.h" -#include "qtuistyle.h" -#include "message.h" - -TopicLabel::TopicLabel(QWidget *parent) - : QFrame(parent), - offset(0), - dragStartX(0), - textWidth(0), - dragMode(false) -{ - setToolTip(tr("Drag to scroll the topic!")); - setCursor(Qt::OpenHandCursor); -} - -void TopicLabel::paintEvent(QPaintEvent *event) { - Q_UNUSED(event); - - textPartOffset.clear(); - - QPainter painter(this); - painter.setBackgroundMode(Qt::OpaqueMode); - - // FIXME use QTextLayout instead - - QRect drawRect = rect().adjusted(offset, 0, 0, 0); - QRect brect; - QString textPart; - foreach(QTextLayout::FormatRange fr, formatList) { - textPart = plainText.mid(fr.start, fr.length); - textPartOffset << drawRect.left(); - painter.setFont(fr.format.font()); - painter.setPen(QPen(fr.format.foreground(), 0)); - painter.setBackground(fr.format.background()); - painter.drawText(drawRect, Qt::AlignLeft|Qt::AlignVCenter, textPart, &brect); - drawRect.setLeft(brect.right()); - } - textWidth = brect.right(); -} - -void TopicLabel::setText(const QString &text) { - if(_text == text) - return; - - _text = text; - offset = 0; - update(); - - UiStyle::StyledString styledContents = QtUi::style()->styleString(QtUi::style()->mircToInternal(text), UiStyle::PlainMsg); - plainText = styledContents.plainText; - formatList = QtUi::style()->toTextLayoutList(styledContents.formatList, plainText.length(), 0); - int height = 1; - foreach(QTextLayout::FormatRange fr, formatList) { - height = qMax(height, QFontMetrics(fr.format.font()).height()); - } - - // ensure the label is editable (height != 1) if there is no text to show - if(text.isEmpty()) - height = QFontMetrics(qApp->font()).height(); - - // setFixedHeight(height); - // show topic in tooltip -} - - -void TopicLabel::mouseMoveEvent(QMouseEvent *event) { - if(!dragMode) - return; - - event->accept(); - int newOffset = event->pos().x() - dragStartX; - if(newOffset > 0) - offset = 0; - else if(width() + 1 < textWidth || offset < newOffset) - offset = newOffset; - - update(); -} - -void TopicLabel::mousePressEvent(QMouseEvent *event) { - event->accept(); - dragMode = true; - dragStartX = event->pos().x() - offset; - setCursor(Qt::ClosedHandCursor); -} - -void TopicLabel::mouseReleaseEvent(QMouseEvent *event) { - event->accept(); - dragMode = false; - if(qAbs(offset) < 30) { - offset = 0; - update(); - } - setCursor(Qt::OpenHandCursor); -} - -void TopicLabel::mouseDoubleClickEvent(QMouseEvent *event) { - event->accept(); - if(textPartOffset.isEmpty()) - return; - - // find the text part that contains the url. We don't expect color codes in urls so we expect only full parts (yet?) - int textPart = 0; - int x = event->pos().x() + offset; - while(textPart + 1 < textPartOffset.count()) { - if(textPartOffset[textPart + 1] < x) - textPart++; - else - break; - } - int textOffset = textPartOffset[textPart]; - - // we've Identified the needed text part \o/ - QString text = plainText.mid(formatList[textPart].start, formatList[textPart].length); - - // now we have to find the the left and right word delimiters of the clicked word - QFontMetrics fontMetric(formatList[textPart].format.font()); - - int start = 0; - int spacePos = text.indexOf(" "); - x -= offset; // offset needs to go here as it's already in the textOffset - while(spacePos != -1) { - if(fontMetric.width(text.left(spacePos + 1)) + textOffset < x) { - start = spacePos + 1; - spacePos = text.indexOf(" ", start + 1); - } else { - break; - } - } - - int end = text.indexOf(" ", start); - int len = -1; - if(end != -1) { - len = end - start; - } - QString word = text.mid(start, len); - QRegExp regex("^(h|f)t{1,2}ps?:\\/\\/"); - if(regex.indexIn(word) != -1) { - QDesktopServices::openUrl(QUrl(word)); - } -}