aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2013-11-02 12:56:18 -0700
committerGravatar Dirk Hohndel <dirk@hohndel.org>2013-11-02 12:56:18 -0700
commit7966f72fb78ef56a447ea6f33490dfec96c9d034 (patch)
treeaa6f4210589e8cb61a1fa23887adc40a69c267bd
parent13ee1943ebd8303b38ae9f2549af0cdd16bcade4 (diff)
parentc4d8b6a4d5907def9538b024030dc0980cc4182b (diff)
downloadsubsurface-7966f72fb78ef56a447ea6f33490dfec96c9d034.tar.gz
Merge branch 'tagwidget-pr' of github.com:mguentner/subsurface
-rw-r--r--qt-ui/groupedlineedit.cpp174
-rw-r--r--qt-ui/groupedlineedit.h9
-rw-r--r--qt-ui/maintab.ui18
-rw-r--r--qt-ui/tagwidget.cpp34
-rw-r--r--qt-ui/tagwidget.h2
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;
};