Krita Source Code Documentation
Loading...
Searching...
No Matches
NodeToolTip Class Reference

#include <NodeToolTip.h>

+ Inheritance diagram for NodeToolTip:

Public Member Functions

 NodeToolTip ()
 
 ~NodeToolTip () override
 
- Public Member Functions inherited from KoItemToolTip
 KoItemToolTip ()
 
 Private ()
 
void showTip (QWidget *widget, const QPoint &pos, const QStyleOptionViewItem &option, const QModelIndex &index)
 
QSize sizeHint () const override
 
 ~KoItemToolTip () override
 

Protected Member Functions

QTextDocument * createDocument (const QModelIndex &index) override
 
- Protected Member Functions inherited from KoItemToolTip
bool eventFilter (QObject *object, QEvent *event) override
 
void paintEvent (QPaintEvent *e) override
 
void timerEvent (QTimerEvent *e) override
 

Private Types

typedef KisNodeModel Model
 

Additional Inherited Members

- Public Attributes inherited from KoItemToolTip
QTextDocument * document
 
QPersistentModelIndex index
 
QPoint pos
 
QBasicTimer timer
 

Detailed Description

A default tooltip for a NodeView that shows a thumbnail image and the list of properties associated with a node.

Definition at line 18 of file NodeToolTip.h.

Member Typedef Documentation

◆ Model

Definition at line 30 of file NodeToolTip.h.

Constructor & Destructor Documentation

◆ NodeToolTip()

NodeToolTip::NodeToolTip ( )

Definition at line 18 of file NodeToolTip.cpp.

19{
20}

◆ ~NodeToolTip()

NodeToolTip::~NodeToolTip ( )
override

Definition at line 22 of file NodeToolTip.cpp.

23{
24}

Member Function Documentation

◆ createDocument()

QTextDocument * NodeToolTip::createDocument ( const QModelIndex & index)
overrideprotectedvirtual

Re-implement this to provide the actual tooltip contents. For instance:

QTextDocument *doc = new QTextDocument(this);
QImage thumb = index.data(Qt::UserRole + KisAbstractResourceModel::LargeThumbnail).value<QImage>();
doc->addResource(QTextDocument::ImageResource, QUrl("data:thumbnail"), thumb);
QString name = index.data(Qt::DisplayRole).toString();
const QString image = QString("<img src=\"data:thumbnail\">");
const QString body = QString("<h3 align=\"center\">%1</h3>").arg(name) + image;
const QString html = QString("<html><body>%1</body></html>").arg(body);
doc->setHtml(html);
doc->setTextWidth(qMin(doc->size().width(), 500.0));
return doc;
@ LargeThumbnail
A larger thumbnail for displaying in a tooltip. 200x200 or so.
QPersistentModelIndex index

Implements KoItemToolTip.

Definition at line 26 of file NodeToolTip.cpp.

27{
28 QTextDocument *doc = new QTextDocument(this);
29
30 int size = 250*devicePixelRatioF();
31 QImage thumb = index.data(int(KisNodeModel::BeginThumbnailRole) + size).value<QImage>();
32 thumb.setDevicePixelRatio(devicePixelRatioF());
33 doc->addResource(QTextDocument::ImageResource, QUrl("data:thumbnail"), thumb);
34
35 QString name = index.data(Qt::DisplayRole).toString();
37 QString rows;
38 // Note: Can't use <nobr> due to https://bugreports.qt.io/browse/QTBUG-1135
39 // It breaks randomly with CJK. Works fine with `white-space:pre` though.
40 const QString row = QString("<tr><td align=\"right\"><p style=\"white-space:pre\">%1:</p></td><td align=\"left\">%2</td></tr>");
41 QString value;
42 for(int i = 0, n = properties.count(); i < n; ++i) {
43 if (properties[i].id == KisLayerPropertiesIcons::layerError.id() ||
44 properties[i].id == KisLayerPropertiesIcons::layerColorSpaceMismatch.id()) continue;
45
46 if (properties[i].isMutable)
47 value = properties[i].state.toBool() ? i18n("Yes") : i18n("No");
48 else
49 value = properties[i].state.toString();
50
51 rows.append(row.arg(properties[i].name).arg(value));
52 }
53
54 QString dropReason = index.data(KisNodeModel::DropReasonRole).toString();
55
56 if (!dropReason.isEmpty()) {
57 dropReason = QString("<p align=\"center\"><b>%1</b></p>").arg(dropReason);
58 }
59
60 QString errorMessage;
61 {
62 auto addWarningProperty = [&] (const QString &propertyId) {
63 auto it = std::find_if(properties.begin(), properties.end(),
65 propertyId));
66
67 if (it != properties.end()) {
68 doc->addResource(QTextDocument::ImageResource, QUrl(QString("data:symbol_%1").arg(it->id)), it->onIcon.pixmap(QSize(32,32)).toImage());
69 errorMessage += QString("<table align=\"center\" border=\"0\"><tr valign=\"middle\"><td align=\"right\"><img src=\"data:symbol_%2\"></td><td align=\"left\"><b>%1</b></td></tr></table>").arg(it->state.toString(), it->id);
70 }
71 };
72
73 addWarningProperty(KisLayerPropertiesIcons::layerError.id());
75 }
76
77 rows = QString("<table>%1</table>").arg(rows);
78
79 const QString image = QString("<table border=\"1\"><tr><td><img src=\"data:thumbnail\"></td></tr></table>");
80 const QString body = QString("<h3 align=\"center\">%1</h3>").arg(name)
81 + errorMessage
82 + dropReason
83 + QString("<p><table><tr><td>%1</td><td>%2</td></tr></table></p>").arg(image).arg(rows);
84 const QString html = QString("<html><body>%1</body></html>").arg(body);
85
86 doc->setHtml(html);
87
88 const int margin = 16;
89 doc->setTextWidth(qMin(doc->size().width() + 2 * margin, qreal(600.0)));
90
91 doc->setDocumentMargin(margin);
92 doc->setUseDesignMetrics(true);
93
94 return doc;
95}
float value(const T *src, size_t ch)
@ PropertiesRole
A list of properties the part has.
QString id() const
Definition KoID.cpp:63
const char * name(StandardAction id)
int size(const Forest< T > &forest)
Definition KisForest.h:1232
auto mem_equal_to(MemTypeNoRef Class::*ptr, MemType &&value)
mem_equal_to is an unary functor that compares a member of the object to a given value
Definition KisMpl.h:233

References KisNodeModel::BeginThumbnailRole, KisNodeModel::DropReasonRole, KoID::id(), KisBaseNode::Property::id, KoItemToolTip::index, KisLayerPropertiesIcons::layerColorSpaceMismatch, KisLayerPropertiesIcons::layerError, kismpl::mem_equal_to(), KisNodeModel::PropertiesRole, and value().


The documentation for this class was generated from the following files: