Use icons and default tool tips in text mark popup

Change-Id: I4487d642e066479e8e344ed77e539de92fbca651
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
This commit is contained in:
David Schulz
2016-08-16 14:19:41 +02:00
parent 0e542a6a29
commit 50a6c47830
6 changed files with 47 additions and 11 deletions

View File

@@ -31,7 +31,6 @@
#include <utils/icon.h> #include <utils/icon.h>
#include <utils/theme/theme.h> #include <utils/theme/theme.h>
#include <QLayout>
#include <QString> #include <QString>
namespace ClangCodeModel { namespace ClangCodeModel {
@@ -83,9 +82,10 @@ void ClangTextMark::setIcon(ClangBackEnd::DiagnosticSeverity severity)
TextMark::setIcon(errorIcon); TextMark::setIcon(errorIcon);
} }
void ClangTextMark::addToToolTipLayout(QLayout *target) bool ClangTextMark::addToolTipContent(QLayout *target)
{ {
Internal::addToolTipToLayout(m_diagnostic, target); Internal::addToolTipToLayout(m_diagnostic, target);
return true;
} }
} // namespace ClangCodeModel } // namespace ClangCodeModel

View File

@@ -38,7 +38,7 @@ public:
ClangTextMark(const QString &fileName, const ClangBackEnd::DiagnosticContainer &diagnostic); ClangTextMark(const QString &fileName, const ClangBackEnd::DiagnosticContainer &diagnostic);
private: private:
void addToToolTipLayout(QLayout *target); bool addToolTipContent(QLayout *target);
void setIcon(ClangBackEnd::DiagnosticSeverity severity); void setIcon(ClangBackEnd::DiagnosticSeverity severity);
ClangBackEnd::DiagnosticContainer m_diagnostic; ClangBackEnd::DiagnosticContainer m_diagnostic;

View File

@@ -147,6 +147,7 @@ void TaskHub::addTask(Task task)
auto mark = new TaskMark(task.taskId, task.file.toString(), task.line, task.type, !task.icon.isNull()); auto mark = new TaskMark(task.taskId, task.file.toString(), task.line, task.type, !task.icon.isNull());
mark->setIcon(task.icon); mark->setIcon(task.icon);
mark->setPriority(TextEditor::TextMark::LowPriority); mark->setPriority(TextEditor::TextMark::LowPriority);
mark->setToolTip(task.description);
task.setMark(mark); task.setMark(mark);
} }
emit m_instance->taskAdded(task); emit m_instance->taskAdded(task);

View File

@@ -91,6 +91,7 @@
#include <QClipboard> #include <QClipboard>
#include <QCoreApplication> #include <QCoreApplication>
#include <QDebug> #include <QDebug>
#include <QGridLayout>
#include <QKeyEvent> #include <QKeyEvent>
#include <QMenu> #include <QMenu>
#include <QMessageBox> #include <QMessageBox>
@@ -111,7 +112,6 @@
#include <QTimeLine> #include <QTimeLine>
#include <QTimer> #include <QTimer>
#include <QToolBar> #include <QToolBar>
#include <QVBoxLayout>
//#define DO_FOO //#define DO_FOO
@@ -5122,7 +5122,7 @@ void TextEditorWidget::extraAreaMouseEvent(QMouseEvent *e)
if (data->marks().isEmpty()) { if (data->marks().isEmpty()) {
ToolTip::hide(); ToolTip::hide();
} else { } else {
auto layout = new QVBoxLayout; auto layout = new QGridLayout;
layout->setContentsMargins(0, 0, 0, 0); layout->setContentsMargins(0, 0, 0, 0);
layout->setSpacing(2); layout->setSpacing(2);
foreach (TextMark *mark, data->marks()) foreach (TextMark *mark, data->marks())

View File

@@ -33,7 +33,7 @@
#include <coreplugin/documentmanager.h> #include <coreplugin/documentmanager.h>
#include <utils/qtcassert.h> #include <utils/qtcassert.h>
#include <QLayout> #include <QGridLayout>
using namespace Core; using namespace Core;
using namespace Utils; using namespace Utils;
@@ -114,6 +114,11 @@ void TextMark::setIcon(const QIcon &icon)
m_icon = icon; m_icon = icon;
} }
const QIcon &TextMark::icon() const
{
return m_icon;
}
Theme::Color TextMark::categoryColor(Id category) Theme::Color TextMark::categoryColor(Id category)
{ {
return TextEditorPlugin::baseTextMarkRegistry()->categoryColor(category); return TextEditorPlugin::baseTextMarkRegistry()->categoryColor(category);
@@ -195,10 +200,37 @@ void TextMark::dragToLine(int lineNumber)
Q_UNUSED(lineNumber); Q_UNUSED(lineNumber);
} }
void TextMark::addToToolTipLayout(QLayout *target) void TextMark::addToToolTipLayout(QGridLayout *target)
{ {
if (!m_toolTip.isEmpty()) auto *contentLayout = new QVBoxLayout;
target->addWidget(new QLabel(m_toolTip)); addToolTipContent(contentLayout);
if (contentLayout->count() > 0) {
const int row = target->rowCount();
if (!m_icon.isNull()) {
auto iconLabel = new QLabel;
iconLabel->setPixmap(m_icon.pixmap(16, 16));
target->addWidget(iconLabel, row, 0, Qt::AlignTop | Qt::AlignHCenter);
}
target->addLayout(contentLayout, row, 1);
}
}
bool TextMark::addToolTipContent(QLayout *target)
{
QString text = m_toolTip;
if (text.isEmpty()) {
text = TextEditorPlugin::baseTextMarkRegistry()->defaultToolTip(m_category);
if (text.isEmpty())
return false;
}
auto textLabel = new QLabel;
textLabel->setText(text);
// Differentiate between tool tips that where explicitly set and default tool tips.
textLabel->setEnabled(!m_toolTip.isEmpty());
target->addWidget(textLabel);
return true;
} }
TextDocument *TextMark::baseTextDocument() const TextDocument *TextMark::baseTextDocument() const

View File

@@ -33,6 +33,7 @@
#include <QIcon> #include <QIcon>
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
class QGridLayout;
class QLayout; class QLayout;
class QPainter; class QPainter;
class QRect; class QRect;
@@ -74,13 +75,15 @@ public:
virtual void clicked(); virtual void clicked();
virtual bool isDraggable() const; virtual bool isDraggable() const;
virtual void dragToLine(int lineNumber); virtual void dragToLine(int lineNumber);
virtual void addToToolTipLayout(QLayout *target); void addToToolTipLayout(QGridLayout *target);
virtual bool addToolTipContent(QLayout *target);
static Utils::Theme::Color categoryColor(Core::Id category); static Utils::Theme::Color categoryColor(Core::Id category);
static bool categoryHasColor(Core::Id category); static bool categoryHasColor(Core::Id category);
static void setCategoryColor(Core::Id category, Utils::Theme::Color color); static void setCategoryColor(Core::Id category, Utils::Theme::Color color);
static void setDefaultToolTip(Core::Id category, const QString &toolTip); static void setDefaultToolTip(Core::Id category, const QString &toolTip);
void setIcon(const QIcon &icon); void setIcon(const QIcon &icon);
const QIcon &icon() const;
// call this if the icon has changed. // call this if the icon has changed.
void updateMarker(); void updateMarker();
Priority priority() const; Priority priority() const;