summaryrefslogtreecommitdiff
path: root/src/plugins/texteditor/texteditor.cpp
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2019-02-07 07:43:26 +0100
committerEike Ziller <eike.ziller@qt.io>2019-02-07 07:43:26 +0100
commitf369556dca7da4e73f76f5ed15dbc95f3fc0a2ce (patch)
tree6dc025917b9cb72b727efacf0b38ef88ae2691fc /src/plugins/texteditor/texteditor.cpp
parentf973b4e94af1cfda7f15ddb4a006d5b5ce522667 (diff)
parent672bee2ed1172fcb024093d5698a1c81cac5f38c (diff)
downloadqt-creator-f369556dca7da4e73f76f5ed15dbc95f3fc0a2ce.tar.gz
Merge remote-tracking branch 'origin/master' into 4.9
Change-Id: I0768e59f13f2fae0bdf13047431de9fac870bf74
Diffstat (limited to 'src/plugins/texteditor/texteditor.cpp')
-rw-r--r--src/plugins/texteditor/texteditor.cpp112
1 files changed, 76 insertions, 36 deletions
diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp
index c506d71377..3fd6f355e8 100644
--- a/src/plugins/texteditor/texteditor.cpp
+++ b/src/plugins/texteditor/texteditor.cpp
@@ -563,6 +563,9 @@ public:
void processTooltipRequest(const QTextCursor &c);
bool processAnnotaionTooltipRequest(const QTextBlock &block, const QPoint &pos) const;
+ void showTextMarksToolTip(const QPoint &pos,
+ const TextMarks &marks,
+ const TextMark *mainTextMark = nullptr) const;
void transformSelection(TransformationMethod method);
void transformBlockSelection(TransformationMethod method);
@@ -836,6 +839,68 @@ TextEditorWidgetPrivate::~TextEditorWidgetPrivate()
delete m_highlightScrollBarController;
}
+static QFrame *createSeparator(const QString &styleSheet)
+{
+ QFrame* separator = new QFrame();
+ separator->setStyleSheet(styleSheet);
+ separator->setFrameShape(QFrame::HLine);
+ QSizePolicy sizePolicy = separator->sizePolicy();
+ sizePolicy.setHorizontalPolicy(QSizePolicy::MinimumExpanding);
+ separator->setSizePolicy(sizePolicy);
+
+ return separator;
+}
+
+static QLayout *createSeparatorLayout()
+{
+ QString styleSheet = "color: gray";
+
+ QFrame* separator1 = createSeparator(styleSheet);
+ QFrame* separator2 = createSeparator(styleSheet);
+ auto label = new QLabel(TextEditorWidget::tr("Other annotations"));
+ label->setStyleSheet(styleSheet);
+
+ auto layout = new QHBoxLayout;
+ layout->addWidget(separator1);
+ layout->addWidget(label);
+ layout->addWidget(separator2);
+
+ return layout;
+}
+
+void TextEditorWidgetPrivate::showTextMarksToolTip(const QPoint &pos,
+ const TextMarks &marks,
+ const TextMark *mainTextMark) const
+{
+ if (!mainTextMark && marks.isEmpty())
+ return; // Nothing to show
+
+ TextMarks allMarks = marks;
+
+ auto layout = new QGridLayout;
+ layout->setContentsMargins(0, 0, 0, 0);
+ layout->setSpacing(2);
+
+ if (mainTextMark) {
+ mainTextMark->addToToolTipLayout(layout);
+ if (allMarks.size() > 1)
+ layout->addLayout(createSeparatorLayout(), layout->rowCount(), 0, 1, -1);
+ }
+
+ Utils::sort(allMarks, [](const TextMark *mark1, const TextMark *mark2) {
+ return mark1->priority() > mark2->priority();
+ });
+
+ for (const TextMark *mark : qAsConst(allMarks)) {
+ if (mark != mainTextMark)
+ mark->addToToolTipLayout(layout);
+ }
+
+ layout->addWidget(DisplaySettings::createAnnotationSettingsLink(),
+ layout->rowCount(), 0, 1, -1, Qt::AlignRight);
+ ToolTip::show(pos, layout, q);
+}
+
} // namespace Internal
/*!
@@ -3490,6 +3555,13 @@ QPoint TextEditorWidget::toolTipPosition(const QTextCursor &c) const
return cursorPos + QPoint(d->m_extraArea->width(), HostOsInfo::isWindowsHost() ? -24 : -16);
}
+void TextEditorWidget::showTextMarksToolTip(const QPoint &pos,
+ const TextMarks &marks,
+ const TextMark *mainTextMark) const
+{
+ d->showTextMarksToolTip(pos, marks, mainTextMark);
+}
+
void TextEditorWidgetPrivate::processTooltipRequest(const QTextCursor &c)
{
const QPoint toolTipPoint = q->toolTipPosition(c);
@@ -3516,33 +3588,7 @@ bool TextEditorWidgetPrivate::processAnnotaionTooltipRequest(const QTextBlock &b
for (const AnnotationRect &annotationRect : m_annotationRects[block.blockNumber()]) {
if (!annotationRect.rect.contains(pos))
continue;
-
- auto layout = new QGridLayout;
- layout->setContentsMargins(0, 0, 0, 0);
- layout->setSpacing(2);
- annotationRect.mark->addToToolTipLayout(layout);
- TextMarks marks = blockUserData->marks();
- if (marks.size() > 1) {
- QFrame* separator = new QFrame();
- separator->setFrameShape(QFrame::HLine);
- layout->addWidget(separator, layout->rowCount(), 0, 1, -1);
- layout->addWidget(new QLabel(TextEditorWidget::tr("Other annotations:")),
- layout->rowCount(),
- 0,
- 1,
- -1);
-
- Utils::sort(marks, [](const TextMark* mark1, const TextMark* mark2){
- return mark1->priority() > mark2->priority();
- });
- for (const TextMark *mark : qAsConst(marks)) {
- if (mark != annotationRect.mark)
- mark->addToToolTipLayout(layout);
- }
- }
- layout->addWidget(DisplaySettings::createAnnotationSettingsLink(),
- layout->rowCount(), 0, 1, -1, Qt::AlignRight);
- ToolTip::show(q->mapToGlobal(pos), layout, q);
+ showTextMarksToolTip(q->mapToGlobal(pos), blockUserData->marks(), annotationRect.mark);
return true;
}
return false;
@@ -5787,16 +5833,10 @@ void TextEditorWidget::extraAreaMouseEvent(QMouseEvent *e)
int line = cursor.blockNumber() + 1;
if (d->extraAreaPreviousMarkTooltipRequestedLine != line) {
if (auto data = static_cast<TextBlockUserData *>(cursor.block().userData())) {
- if (data->marks().isEmpty()) {
+ if (data->marks().isEmpty())
ToolTip::hide();
- } else {
- auto layout = new QGridLayout;
- layout->setContentsMargins(0, 0, 0, 0);
- layout->setSpacing(2);
- foreach (TextMark *mark, data->marks())
- mark->addToToolTipLayout(layout);
- ToolTip::show(mapToGlobal(e->pos()), layout, this);
- }
+ else
+ d->showTextMarksToolTip(mapToGlobal(e->pos()), data->marks());
}
}
d->extraAreaPreviousMarkTooltipRequestedLine = line;