From 462a20461a4e9486cc8debc1cc156f0aabfe0164 Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 28 Apr 2009 10:58:55 +0200 Subject: [PATCH 1/4] debugger: add a dumper for QSharedPointer --- share/qtcreator/gdbmacros/gdbmacros.cpp | 30 +++++++++++++++++++++++++ tests/manual/gdbdebugger/simple/app.cpp | 16 +++++++++++-- 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/share/qtcreator/gdbmacros/gdbmacros.cpp b/share/qtcreator/gdbmacros/gdbmacros.cpp index 639a0d6500b..f9f73aae644 100644 --- a/share/qtcreator/gdbmacros/gdbmacros.cpp +++ b/share/qtcreator/gdbmacros/gdbmacros.cpp @@ -47,8 +47,11 @@ #include #include #include +#include +#include #include #include +#include int qtGhVersion = QT_VERSION; @@ -1931,6 +1934,30 @@ static void qDumpQSet(QDumper &d) d.disarm(); } +static void qDumpQSharedPointer(QDumper &d) +{ + const QSharedPointer &ptr = + *reinterpret_cast *>(d.data); + + if (isSimpleType(d.innertype)) + qDumpInnerValueHelper(d, d.innertype, ptr.data()); + else + P(d, "value", ""); + P(d, "valuedisabled", "true"); + P(d, "numchild", 1); + if (d.dumpChildren) { + d << ",children=["; + d.beginHash(); + P(d, "name", "data"); + qDumpInnerValue(d, d.innertype, ptr.data()); + d.endHash(); + I(d, "strongref", 44); + I(d, "weakref", 45); + d << "]"; + } + d.disarm(); +} + static void qDumpQString(QDumper &d) { const QString &str = *reinterpret_cast(d.data); @@ -2480,6 +2507,8 @@ static void handleProtocolVersion2and3(QDumper & d) case 'S': if (isEqual(type, "QSet")) qDumpQSet(d); + else if (isEqual(type, "QSharedPointer")) + qDumpQSharedPointer(d); else if (isEqual(type, "QString")) qDumpQString(d); else if (isEqual(type, "QStringList")) @@ -2578,6 +2607,7 @@ void *qDumpObjectData440( #endif // PRIVATE_OBJECT_ALLOWED // << "\""NS"QRegion\"," "\""NS"QSet\"," + "\""NS"QSharedPointer\"," "\""NS"QString\"," "\""NS"QStringList\"," "\""NS"QTextCodec\"," diff --git a/tests/manual/gdbdebugger/simple/app.cpp b/tests/manual/gdbdebugger/simple/app.cpp index 9c5c007a4b9..608198bb28d 100644 --- a/tests/manual/gdbdebugger/simple/app.cpp +++ b/tests/manual/gdbdebugger/simple/app.cpp @@ -538,8 +538,20 @@ public: void testQSharedPointer() { - Employee e1(1, "Herbert"); - Employee e2 = e1; + //Employee e1(1, "Herbert"); + //Employee e2 = e1; + + QSharedPointer iptr(new int(43)); + QSharedPointer iptr2 = iptr; + QSharedPointer iptr3 = iptr; + + QSharedPointer ptr(new QString("hallo")); + QSharedPointer ptr2 = ptr; + QSharedPointer ptr3 = ptr; + + //QWeakPointer wptr(ptr); + //QWeakPointer wptr2 = wptr; + //QWeakPointer wptr3 = wptr; } void stringRefTest(const QString &refstring) From 8f4ae5fa5370d3cdc9adb6475960f89ff7f9bcbd Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 28 Apr 2009 11:21:46 +0200 Subject: [PATCH 2/4] debugger: use 4.5 features in dumpers only if compiled under 4.5+ --- share/qtcreator/gdbmacros/gdbmacros.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/share/qtcreator/gdbmacros/gdbmacros.cpp b/share/qtcreator/gdbmacros/gdbmacros.cpp index f9f73aae644..df6004a735e 100644 --- a/share/qtcreator/gdbmacros/gdbmacros.cpp +++ b/share/qtcreator/gdbmacros/gdbmacros.cpp @@ -869,10 +869,11 @@ static void qDumpQDateTime(QDumper &d) BL(d, "isNull", date.isNull()); I(d, "toTime_t", (long)date.toTime_t()); S(d, "toString", date.toString()); + #if QT_VERSION >= 0x040500 S(d, "toString_(ISO)", date.toString(Qt::ISODate)); S(d, "toString_(SystemLocale)", date.toString(Qt::SystemLocaleDate)); S(d, "toString_(Locale)", date.toString(Qt::LocaleDate)); - S(d, "toString", date.toString()); + #endif #if 0 d.beginHash(); @@ -2039,11 +2040,13 @@ static void qDumpQVariantHelper(const void *data, QString *value, *value = QLatin1Char('"') + v.toString() + QLatin1Char('"'); *numchild = 0; break; + #if QT_VERSION >= 0x040500 case QVariant::StringList: *exp = QString(QLatin1String("(*('"NS"QStringList'*)%1)")) .arg((quintptr)data); *numchild = v.toStringList().size(); break; + #endif case QVariant::Int: *value = QString::number(v.toInt()); *numchild= 0; From a8be2532d19be81fa3a2a75e99cb1f6f20ff8f16 Mon Sep 17 00:00:00 2001 From: mae Date: Tue, 28 Apr 2009 11:43:13 +0200 Subject: [PATCH 3/4] tune block highlighting done with Thorbjorn --- src/plugins/texteditor/basetexteditor.cpp | 59 +++++++++++++++++------ src/plugins/texteditor/basetexteditor_p.h | 1 + 2 files changed, 44 insertions(+), 16 deletions(-) diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp index ada99dc501c..45ea3c6e992 100644 --- a/src/plugins/texteditor/basetexteditor.cpp +++ b/src/plugins/texteditor/basetexteditor.cpp @@ -1709,18 +1709,46 @@ static QColor calcBlendColor(const QColor &baseColor, int factor = 1) const int blendBase = (baseColor.value() > 128) ? 0 : 255; // Darker backgrounds may need a bit more contrast const int blendFactor = (baseColor.value() > 128) ? 8 : 16; - QColor blendColor = baseColor; while (factor--) { blendColor = QColor( - (blendBase * blendFactor + blendColor.blue() * (256 - blendFactor)) / 256, + (blendBase * blendFactor + blendColor.red() * (256 - blendFactor)) / 256, (blendBase * blendFactor + blendColor.green() * (256 - blendFactor)) / 256, (blendBase * blendFactor + blendColor.blue() * (256 - blendFactor)) / 256); } return blendColor; } + +static QColor calcBlendColor(const QColor &baseColor, int level, int count) +{ + QColor color80; + QColor color90; + + if (baseColor.value() > 128) { + color80 = baseColor.lighter(90); + color90 = baseColor.lighter(95); + } else { + color80 = baseColor.lighter(110); + color90 = baseColor.lighter(105); + } + + if (level == count) + return baseColor; + if (level == 0) + return color80; + if (level == count - 1) + return color90; + + const int blendFactor = level * (256 / (count - 2)); + + return QColor( + (color90.red() * blendFactor + color80.red() * (256 - blendFactor)) / 256, + (color90.green() * blendFactor + color80.green() * (256 - blendFactor)) / 256, + (color90.blue() * blendFactor + color80.blue() * (256 - blendFactor)) / 256); +} + void BaseTextEditor::paintEvent(QPaintEvent *e) { /* @@ -1804,13 +1832,13 @@ void BaseTextEditor::paintEvent(QPaintEvent *e) if (n > i) --depth; - int count = d->m_highlightBlocksInfo.visualIndent.size(); + int count = d->m_highlightBlocksInfo.count(); if (count) { QRectF rr = r; rr.setWidth(viewport()->width()); for(int i = 0; i <= depth; ++i) { int vi = i > 0 ? d->m_highlightBlocksInfo.visualIndent.at(i-1) : 0; - painter.fillRect(rr.adjusted(vi, 0, -8*i, 0), calcBlendColor(baseColor, count - i)); + painter.fillRect(rr.adjusted(vi, 0, -8*i, 0), calcBlendColor(baseColor, i, count)); } } } @@ -2270,12 +2298,6 @@ void BaseTextEditor::extraAreaPaintEvent(QPaintEvent *e) xoffset += 2; } } - - if (!userData->ifdefedOut()) { - collapseAfter = (userData->collapseMode() == TextBlockUserData::CollapseAfter); - collapseThis = (userData->collapseMode() == TextBlockUserData::CollapseThis); - hasClosingCollapse = userData->hasClosingCollapse() && (previousBraceDepth > 0); - } } if (d->m_codeFoldingVisible) { @@ -2296,7 +2318,6 @@ void BaseTextEditor::extraAreaPaintEvent(QPaintEvent *e) bool drawUp = !d->m_highlightBlocksInfo.isEmpty() && blockNumber == d->m_highlightBlocksInfo.close.first(); - if (drawBox || drawDown || drawUp) { painter.setRenderHint(QPainter::Antialiasing, true); painter.translate(.5, .5); @@ -2313,10 +2334,16 @@ void BaseTextEditor::extraAreaPaintEvent(QPaintEvent *e) painter.drawPolygon(points1, 3); painter.drawPolygon(points2, 3); } else if (drawUp) { - QPointF points[3] = { QPointF(r.left(), r.bottom()-1), - QPointF(r.center().x(), r.center().y()), - QPointF(r.right(), r.bottom()-1) }; - painter.drawPolygon(points, 3); + + // check that we are not collapsed + QTextBlock open = doc->findBlockByNumber(d->m_highlightBlocksInfo.open.last()); + if (open.next().isVisible()) { + + QPointF points[3] = { QPointF(r.left(), r.bottom()-1), + QPointF(r.center().x(), r.center().y()), + QPointF(r.right(), r.bottom()-1) }; + painter.drawPolygon(points, 3); + } } else if(drawDown) { QPointF points[3] = { QPointF(r.left(), r.top()), QPointF(r.center().x(), r.center().y()), @@ -2604,7 +2631,7 @@ void BaseTextEditor::extraAreaMouseEvent(QMouseEvent *e) } if (highlightBlockNumber != d->extraAreaHighlightCollapseBlockNumber || highlightColumn != d->extraAreaHighlightCollapseColumn) - d->m_highlightBlocksTimer->start(100); + d->m_highlightBlocksTimer->start(40); } if (e->type() == QEvent::MouseButtonPress || e->type() == QEvent::MouseButtonDblClick) { diff --git a/src/plugins/texteditor/basetexteditor_p.h b/src/plugins/texteditor/basetexteditor_p.h index 27baa0851c0..e9ff2e9f121 100644 --- a/src/plugins/texteditor/basetexteditor_p.h +++ b/src/plugins/texteditor/basetexteditor_p.h @@ -118,6 +118,7 @@ struct BaseTextEditorPrivateHighlightBlocks QList open; QList close; QList visualIndent; + inline int count() const { return visualIndent.size(); } inline bool isEmpty() const { return open.isEmpty() || close.isEmpty() || visualIndent.isEmpty(); } inline bool operator==(const BaseTextEditorPrivateHighlightBlocks &o) const { return (open == o.open && close == o.close && visualIndent == o.visualIndent); From 0b816518396ec099a41c2019ae685fefbc1de508 Mon Sep 17 00:00:00 2001 From: mae Date: Tue, 28 Apr 2009 12:03:06 +0200 Subject: [PATCH 4/4] more traditional defaults, this is stuff in progress. --- src/plugins/texteditor/displaysettings.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/plugins/texteditor/displaysettings.cpp b/src/plugins/texteditor/displaysettings.cpp index 0dd0c33db52..22b85d4f841 100644 --- a/src/plugins/texteditor/displaysettings.cpp +++ b/src/plugins/texteditor/displaysettings.cpp @@ -39,9 +39,9 @@ static const char * const textWrappingKey = "TextWrapping"; static const char * const showWrapColumnKey = "ShowWrapColumn"; static const char * const wrapColumnKey = "WrapColumn"; static const char * const visualizeWhitespaceKey = "VisualizeWhitespace"; -static const char * const displayFoldingMarkersKey = "DisplayFoldingMarkersV2"; +static const char * const displayFoldingMarkersKey = "DisplayFoldingMarkers"; static const char * const highlightCurrentLineKey = "HighlightCurrentLineKeyV2"; -static const char * const highlightBlocksKey = "HighlightBlocksKeyV2"; +static const char * const highlightBlocksKey = "HighlightBlocksKey"; static const char * const groupPostfix = "DisplaySettings"; namespace TextEditor { @@ -52,9 +52,9 @@ DisplaySettings::DisplaySettings() : m_showWrapColumn(false), m_wrapColumn(80), m_visualizeWhitespace(false), - m_displayFoldingMarkers(false), + m_displayFoldingMarkers(true), m_highlightCurrentLine(false), - m_highlightBlocks(true) + m_highlightBlocks(false) { }