diff options
author | Dirk Hohndel <dirk@hohndel.org> | 2013-11-02 12:56:18 -0700 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2013-11-02 12:56:18 -0700 |
commit | 7966f72fb78ef56a447ea6f33490dfec96c9d034 (patch) | |
tree | aa6f4210589e8cb61a1fa23887adc40a69c267bd | |
parent | 13ee1943ebd8303b38ae9f2549af0cdd16bcade4 (diff) | |
parent | c4d8b6a4d5907def9538b024030dc0980cc4182b (diff) | |
download | subsurface-7966f72fb78ef56a447ea6f33490dfec96c9d034.tar.gz |
Merge branch 'tagwidget-pr' of github.com:mguentner/subsurface
-rw-r--r-- | qt-ui/groupedlineedit.cpp | 174 | ||||
-rw-r--r-- | qt-ui/groupedlineedit.h | 9 | ||||
-rw-r--r-- | qt-ui/maintab.ui | 18 | ||||
-rw-r--r-- | qt-ui/tagwidget.cpp | 34 | ||||
-rw-r--r-- | qt-ui/tagwidget.h | 2 |
5 files changed, 150 insertions, 87 deletions
diff --git a/qt-ui/groupedlineedit.cpp b/qt-ui/groupedlineedit.cpp index 7502db5ce..800b842b5 100644 --- a/qt-ui/groupedlineedit.cpp +++ b/qt-ui/groupedlineedit.cpp @@ -1,4 +1,12 @@ /* + * Copyright (c) 2013 Maximilian Güntner <maximilian.guentner@gmail.com> + * + * This file is subject to the terms and conditions of version 2 of + * the GNU General Public License. See the file gpl-2.0.txt in the main + * directory of this archive for more details. + * + * Original License: + * * This file is part of the Nepomuk widgets collection * Copyright (c) 2013 Denis Steckelmacher <steckdenis@yahoo.fr> * @@ -34,61 +42,60 @@ #include <QtGui/QColor> #include <QtGui/QPalette> -struct GroupedLineEdit::Private -{ - struct Block { - int start; - int end; - QString text; - }; - QVector<Block> blocks; - QVector<QColor> colors; +struct GroupedLineEdit::Private { + struct Block { + int start; + int end; + QString text; + }; + QVector<Block> blocks; + QVector<QColor> colors; }; GroupedLineEdit::GroupedLineEdit(QWidget* parent) -: QPlainTextEdit(parent), - d(new Private) + : QPlainTextEdit(parent), + d(new Private) { - setWordWrapMode(QTextOption::NoWrap); - setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + setWordWrapMode(QTextOption::NoWrap); + setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); - setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - document()->setMaximumBlockCount(1); + document()->setMaximumBlockCount(1); } GroupedLineEdit::~GroupedLineEdit() { - delete d; + delete d; } QString GroupedLineEdit::text() const { - // Remove the block crosses from the text - return toPlainText(); + // Remove the block crosses from the text + return toPlainText(); } int GroupedLineEdit::cursorPosition() const { - return textCursor().positionInBlock(); + return textCursor().positionInBlock(); } void GroupedLineEdit::addBlock(int start, int end) { - Private::Block block; + Private::Block block; - block.start = start; - block.end = end; - block.text = text().mid(start, end-start+1).trimmed(); - d->blocks.append(block); - viewport()->update(); + block.start = start; + block.end = end; + block.text = text().mid(start, end-start+1).trimmed(); + d->blocks.append(block); + viewport()->update(); } void GroupedLineEdit::addColor(QColor color) { - d->colors.append(color); + d->colors.append(color); } void GroupedLineEdit::removeAllColors() @@ -107,98 +114,95 @@ QStringList GroupedLineEdit::getBlockStringList() void GroupedLineEdit::setCursorPosition(int position) { - QTextCursor c = textCursor(); - - c.setPosition(position, QTextCursor::MoveAnchor); - - setTextCursor(c); + QTextCursor c = textCursor(); + c.setPosition(position, QTextCursor::MoveAnchor); + setTextCursor(c); } void GroupedLineEdit::setText(const QString &text) { - setPlainText(text); + setPlainText(text); } void GroupedLineEdit::clear() { - QPlainTextEdit::clear(); - removeAllBlocks(); + QPlainTextEdit::clear(); + removeAllBlocks(); } void GroupedLineEdit::selectAll() { - QTextCursor c = textCursor(); + QTextCursor c = textCursor(); - c.select(QTextCursor::LineUnderCursor); + c.select(QTextCursor::LineUnderCursor); - setTextCursor(c); + setTextCursor(c); } void GroupedLineEdit::removeAllBlocks() { - d->blocks.clear(); - viewport()->update(); + d->blocks.clear(); + viewport()->update(); } QSize GroupedLineEdit::sizeHint() const { - QSize rs( - 40, - document()->findBlock(0).layout()->lineAt(0).height() + - document()->documentMargin() * 2 + - frameWidth() * 2 - ); + QSize rs( + 40, + document()->findBlock(0).layout()->lineAt(0).height() + + document()->documentMargin() * 2 + + frameWidth() * 2 + ); - return rs; + return rs; } QSize GroupedLineEdit::minimumSizeHint() const { - return sizeHint(); + return sizeHint(); } void GroupedLineEdit::keyPressEvent(QKeyEvent *e) { - switch (e->key()) { - case Qt::Key_Return: - case Qt::Key_Enter: - emit editingFinished(); - return; - } - - QPlainTextEdit::keyPressEvent(e); + switch (e->key()) { + case Qt::Key_Return: + case Qt::Key_Enter: + emit editingFinished(); + return; + } + QPlainTextEdit::keyPressEvent(e); } void GroupedLineEdit::paintEvent(QPaintEvent *e) { - QTextLine line = document()->findBlock(0).layout()->lineAt(0); - QPainter painter(viewport()); - - painter.setRenderHint(QPainter::Antialiasing, true); - painter.setRenderHint(QPainter::HighQualityAntialiasing, true); - - painter.fillRect(0, 0, viewport()->width(), viewport()->height(), palette().base()); - - QVectorIterator<QColor> i(d->colors); - i.toFront(); - foreach (const Private::Block &block, d->blocks) { - qreal start_x = line.cursorToX(block.start, QTextLine::Trailing); - qreal end_x = line.cursorToX(block.end + 1, QTextLine::Leading); - QPainterPath path; - QRectF rectangle( - start_x - 1.0 - double(horizontalScrollBar()->value()), - 1.0, - end_x - start_x + 2.0, - double(viewport()->height() - 2) - ); - if (! i.hasNext()) - i.toFront(); - path.addRoundedRect(rectangle, 5.0, 5.0); - painter.setPen(i.peekNext()); - painter.setBrush(i.next().lighter(180)); - painter.drawPath(path); - } - - QPlainTextEdit::paintEvent(e); + QTextLine line = document()->findBlock(0).layout()->lineAt(0); + QPainter painter(viewport()); + + painter.setRenderHint(QPainter::Antialiasing, true); + painter.setRenderHint(QPainter::HighQualityAntialiasing, true); + + painter.fillRect(0, 0, viewport()->width(), viewport()->height(), palette().base()); + + QVectorIterator<QColor> i(d->colors); + i.toFront(); + foreach (const Private::Block &block, d->blocks) { + qreal start_x = line.cursorToX(block.start, QTextLine::Trailing); + qreal end_x = line.cursorToX(block.end + 1, QTextLine::Leading); + QPainterPath path; + QRectF rectangle( + start_x - 1.0 - double(horizontalScrollBar()->value()), + 1.0, + end_x - start_x + 2.0, + double(viewport()->height() - 2) + ); + if (! i.hasNext()) + i.toFront(); + path.addRoundedRect(rectangle, 5.0, 5.0); + painter.setPen(i.peekNext()); + painter.setBrush(i.next().lighter(180)); + painter.drawPath(path); + } + + QPlainTextEdit::paintEvent(e); } diff --git a/qt-ui/groupedlineedit.h b/qt-ui/groupedlineedit.h index 327932c9d..1e29f0039 100644 --- a/qt-ui/groupedlineedit.h +++ b/qt-ui/groupedlineedit.h @@ -1,4 +1,11 @@ -/* Original License: +/* + * Copyright (c) 2013 Maximilian Güntner <maximilian.guentner@gmail.com> + * + * This file is subject to the terms and conditions of version 2 of + * the GNU General Public License. See the file gpl-2.0.txt in the main + * directory of this archive for more details. + * + * Original License: * * This file is part of the Nepomuk widgets collection * Copyright (c) 2013 Denis Steckelmacher <steckdenis@yahoo.fr> diff --git a/qt-ui/maintab.ui b/qt-ui/maintab.ui index 3e12d4c47..6ab9f9baf 100644 --- a/qt-ui/maintab.ui +++ b/qt-ui/maintab.ui @@ -840,6 +840,24 @@ <header>qt-ui/tagwidget.h</header> </customwidget> </customwidgets> + <tabstops> + <tabstop>scrollArea</tabstop> + <tabstop>dateTimeEdit</tabstop> + <tabstop>airtemp</tabstop> + <tabstop>watertemp</tabstop> + <tabstop>location</tabstop> + <tabstop>coordinates</tabstop> + <tabstop>divemaster</tabstop> + <tabstop>buddy</tabstop> + <tabstop>suit</tabstop> + <tabstop>tagWidget</tabstop> + <tabstop>notes</tabstop> + <tabstop>notesButtonBox</tabstop> + <tabstop>scrollArea_2</tabstop> + <tabstop>equipmentButtonBox</tabstop> + <tabstop>scrollArea_3</tabstop> + <tabstop>scrollArea_4</tabstop> + </tabstops> <resources/> <connections/> </ui> diff --git a/qt-ui/tagwidget.cpp b/qt-ui/tagwidget.cpp index bcefe5704..673242cfa 100644 --- a/qt-ui/tagwidget.cpp +++ b/qt-ui/tagwidget.cpp @@ -1,10 +1,12 @@ #include "tagwidget.h" #include <QPair> #include <QDebug> +#include <QAbstractItemView> TagWidget::TagWidget(QWidget *parent) : GroupedLineEdit(parent), m_completer(NULL) { connect(this, SIGNAL(cursorPositionChanged()), this, SLOT(reparse())); + connect(this, SIGNAL(textChanged()), this, SLOT(reparse())); addColor(QColor(0x00, 0xAE, 0xFF)); addColor(QColor(0x00, 0x78, 0xB0)); @@ -15,6 +17,7 @@ void TagWidget::setCompleter(QCompleter *completer) m_completer = completer; m_completer->setWidget(this); connect(m_completer, SIGNAL(activated(QString)), this, SLOT(completionSelected(QString))); + connect(m_completer, SIGNAL(highlighted(QString)), this, SLOT(completionSelected(QString))); } QPair<int,int> TagWidget::getCursorTagPosition() { @@ -98,7 +101,18 @@ void TagWidget::reparse() currentText = ""; if (m_completer) { m_completer->setCompletionPrefix(currentText); - m_completer->complete(); + if (m_completer->completionCount() == 1) { + if (m_completer->currentCompletion() == currentText) { + QAbstractItemView *popup = m_completer->popup(); + if (popup) + popup->hide(); + } + else + m_completer->complete(); + + } else { + m_completer->complete(); + } } } @@ -133,3 +147,21 @@ void TagWidget::clear() { GroupedLineEdit::clear(); blockSignals(false); } + +void TagWidget::keyPressEvent(QKeyEvent *e) { + switch (e->key()) { + case Qt::Key_Return: + case Qt::Key_Enter: + /* + * Fake the QLineEdit behaviour by simply + * closing the QAbstractViewitem + */ + if (m_completer) { + QAbstractItemView *popup = m_completer->popup(); + if (popup) + popup->hide(); + } + } + GroupedLineEdit::keyPressEvent(e); +} + diff --git a/qt-ui/tagwidget.h b/qt-ui/tagwidget.h index ff19d7283..b9c1619f9 100644 --- a/qt-ui/tagwidget.h +++ b/qt-ui/tagwidget.h @@ -19,6 +19,8 @@ public: public slots: void reparse(); void completionSelected(QString); +protected: + void keyPressEvent(QKeyEvent *e); private: QCompleter *m_completer; }; |