diff --git a/share/qtcreator/gdbmacros/gdbmacros.cpp b/share/qtcreator/gdbmacros/gdbmacros.cpp index 5576b36c6f2991e1f41ee6e1fdb7aea05e415086..eca4db27ec3c96d120a026fa4aba1cfd0b8863f4 100644 --- a/share/qtcreator/gdbmacros/gdbmacros.cpp +++ b/share/qtcreator/gdbmacros/gdbmacros.cpp @@ -216,7 +216,7 @@ QT_END_NAMESPACE // comma-separated integer list static char qDumpInBuffer[10000]; static char qDumpOutBuffer[100000]; -static char qDumpSize[20]; +//static char qDumpSize[20]; namespace { @@ -309,10 +309,16 @@ static bool isSimpleType(const char *type) return false; } -static bool isShortKey(const char *type) +#if 0 +static bool isStringType(const char *type) { - return isSimpleType(type) || isEqual(type, NS"QString"); + return isEqual(type, NS"QString") + || isEqual(type, NS"QByteArray") + || isEqual(type, "std::string") + || isEqual(type, "std::wstring") + || isEqual(type, "wstring"); } +#endif static bool isMovableType(const char *type) { @@ -555,7 +561,7 @@ void QDumper::addCommaIfNeeded() put(','); } -void QDumper::putBase64Encoded(const char *buf, int n, char delim) +void QDumper::putBase64Encoded(const char *buf, int n) { const char alphabet[] = "ABCDEFGH" "IJKLMNOP" "QRSTUVWX" "YZabcdef" "ghijklmn" "opqrstuv" "wxyz0123" "456789+/"; @@ -740,6 +746,7 @@ static void qDumpInnerValueHelper(QDumper &d, const char *type, const void *addr return; case 'B': if (isEqual(type, "QByteArray")) { + d.addCommaIfNeeded(); d << field << "encoded=\"1\","; P(d, field, *(QByteArray*)addr); } @@ -769,6 +776,7 @@ static void qDumpInnerValueHelper(QDumper &d, const char *type, const void *addr return; case 'S': if (isEqual(type, "QString")) { + d.addCommaIfNeeded(); d << field << "encoded=\"1\","; P(d, field, *(QString*)addr); } @@ -1086,13 +1094,15 @@ static void qDumpQHash(QDumper &d) if (d.dumpChildren) { if (n > 1000) n = 1000; - bool simpleKey = isShortKey(keyType); - bool simpleValue = isShortKey(valueType); + bool isSimpleKey = isSimpleType(keyType); + bool isSimpleValue = isSimpleType(valueType); bool opt = isOptimizedIntKey(keyType); int keyOffset = hashOffset(opt, true, keySize, valueSize); int valueOffset = hashOffset(opt, false, keySize, valueSize); - P(d, "extra", "simplekey: " << simpleKey << " simpleValue: " << simpleValue + P(d, "extra", "isSimpleKey: " << isSimpleKey + << " isSimpleValue: " << isSimpleValue + << " valueType: '" << isSimpleValue << " keySize: " << keyOffset << " valueOffset: " << valueOffset << " opt: " << opt); @@ -1103,18 +1113,17 @@ static void qDumpQHash(QDumper &d) d << ",children=["; while (node != end) { d.beginHash(); - if (simpleKey) { - P(d, "name", i); - qDumpInnerValueHelper(d, keyType, addOffset(node, keyOffset), "key"); - if (simpleValue) - qDumpInnerValueHelper(d, valueType, addOffset(node, valueOffset)); + P(d, "name", i); + qDumpInnerValueHelper(d, keyType, addOffset(node, keyOffset), "key"); + qDumpInnerValueHelper(d, valueType, addOffset(node, valueOffset)); + if (isSimpleKey && isSimpleValue) { P(d, "type", valueType); P(d, "addr", addOffset(node, valueOffset)); } else { - P(d, "name", i); - //P(d, "exp", "*(char*)" << node); - P(d, "exp", "*('"NS"QHashNode<" << keyType << "," << valueType << " >'*)" << node); - P(d, "type", "'"NS"QHashNode<" << keyType << "," << valueType << " >'"); + P(d, "exp", "*('"NS"QHashNode<" << keyType << "," + << valueType << " >'*)" << node); + P(d, "type", "'"NS"QHashNode<" << keyType << "," + << valueType << " >'"); } d.endHash(); ++i; @@ -1131,15 +1140,18 @@ static void qDumpQHashNode(QDumper &d) const char *keyType = d.templateParameters[0]; const char *valueType = d.templateParameters[1]; - P(d, "value", ""); + unsigned keySize = d.extraInt[0]; + unsigned valueSize = d.extraInt[1]; + bool opt = isOptimizedIntKey(keyType); + int keyOffset = hashOffset(opt, true, keySize, valueSize); + int valueOffset = hashOffset(opt, false, keySize, valueSize); + if (isSimpleType(valueType)) + qDumpInnerValueHelper(d, valueType, addOffset(h, valueOffset)); + else + P(d, "value", ""); + P(d, "numchild", 2); if (d.dumpChildren) { - unsigned keySize = d.extraInt[0]; - unsigned valueSize = d.extraInt[1]; - bool opt = isOptimizedIntKey(keyType); - int keyOffset = hashOffset(opt, true, keySize, valueSize); - int valueOffset = hashOffset(opt, false, keySize, valueSize); - // there is a hash specialization in cast the key are integers or shorts d << ",children=["; d.beginHash(); @@ -1262,8 +1274,8 @@ static void qDumpQLinkedList(QDumper &d) P(d, "numchild", n); P(d, "childtype", d.innertype); if (d.dumpChildren) { - unsigned innerSize = d.extraInt[0]; - bool innerTypeIsPointer = isPointerType(d.innertype); + //unsigned innerSize = d.extraInt[0]; + //bool innerTypeIsPointer = isPointerType(d.innertype); QByteArray strippedInnerType = stripPointerType(d.innertype); const char *stripped = isPointerType(d.innertype) ? strippedInnerType.data() : 0; @@ -1397,13 +1409,13 @@ static void qDumpQMap(QDumper &d) unsigned mapnodesize = d.extraInt[2]; unsigned valueOff = d.extraInt[3]; - bool simpleKey = isShortKey(keyType); - bool simpleValue = isShortKey(valueType); + bool isSimpleKey = isSimpleType(keyType); + bool isSimpleValue = isSimpleType(valueType); // both negative: int keyOffset = 2 * sizeof(void*) - int(mapnodesize); int valueOffset = 2 * sizeof(void*) - int(mapnodesize) + valueOff; - P(d, "extra", "simplekey: " << simpleKey << " simpleValue: " << simpleValue + P(d, "extra", "simplekey: " << isSimpleKey << " isSimpleValue: " << isSimpleValue << " keyOffset: " << keyOffset << " valueOffset: " << valueOffset << " mapnodesize: " << mapnodesize); d << ",children=["; @@ -1415,12 +1427,9 @@ static void qDumpQMap(QDumper &d) while (node != end) { d.beginHash(); P(d, "name", i); - if (simpleKey) { - P(d, "type", valueType); - qDumpInnerValueHelper(d, keyType, addOffset(node, keyOffset), "key"); - if (simpleValue) - qDumpInnerValueHelper(d, valueType, addOffset(node, valueOffset)); - + qDumpInnerValueHelper(d, keyType, addOffset(node, keyOffset), "key"); + qDumpInnerValueHelper(d, valueType, addOffset(node, valueOffset)); + if (isSimpleKey && isSimpleValue) { P(d, "type", valueType); P(d, "addr", addOffset(node, valueOffset)); } else { @@ -2194,35 +2203,36 @@ static void qDumpStdMap(QDumper &d) // (#4, "std::allocator<std::pair<key, value> >") // as it is there, and, equally importantly, in an order that // gdb accepts when fed with it. - char *pairType = (char *)(d.templateParameters[3]) + 16; + char *pairType = (char *)(d.templateParameters[3]) + 15; pairType[strlen(pairType) - 2] = 0; P(d, "pairtype", pairType); if (d.dumpChildren) { - bool simpleKey = isSimpleType(keyType); - bool simpleValue = isShortKey(valueType); + bool isSimpleKey = isSimpleType(keyType); + bool isSimpleValue = isSimpleType(valueType); int valueOffset = d.extraInt[2]; + P(d, "extra", "isSimpleKey: " << isSimpleKey + << " isSimpleValue: " << isSimpleValue + << " valueType: '" << valueType + << " valueOffset: " << valueOffset); + d << ",children=["; it = map.begin(); for (int i = 0; i < 1000 && it != map.end(); ++i, ++it) { - const void *node = it.operator->(); - if (simpleKey) { - d.beginHash(); - P(d, "type", valueType); - qDumpInnerValueHelper(d, keyType, node, "name"); - P(d, "nameisindex", "1"); - if (simpleValue) - qDumpInnerValueHelper(d, valueType, addOffset(node, valueOffset)); - P(d, "addr", addOffset(node, valueOffset)); - d.endHash(); - } else { - d.beginHash(); + d.beginHash(); + const void *node = it.operator->(); P(d, "name", i); - P(d, "addr", it.operator->()); - P(d, "type", pairType); - d.endHash(); - } + qDumpInnerValueHelper(d, keyType, node, "key"); + qDumpInnerValueHelper(d, valueType, addOffset(node, valueOffset)); + if (isSimpleKey && isSimpleValue) { + P(d, "type", valueType); + P(d, "addr", addOffset(node, valueOffset)); + } else { + P(d, "addr", node); + P(d, "type", pairType); + } + d.endHash(); } if (it != map.end()) d.putEllipsis(); diff --git a/src/libs/utils/pathchooser.cpp b/src/libs/utils/pathchooser.cpp index 0f83cf1c4cbdfbcfbf025f90e70276ef67c5a5ed..2555399a422b78009760a5f659405e7f2e0e9f4a 100644 --- a/src/libs/utils/pathchooser.cpp +++ b/src/libs/utils/pathchooser.cpp @@ -110,7 +110,7 @@ PathChooser::PathChooser(QWidget *parent) : connect(m_d->m_lineEdit, SIGNAL(textChanged(QString)), this, SIGNAL(changed())); connect(m_d->m_lineEdit, SIGNAL(validChanged()), this, SIGNAL(validChanged())); - m_d->m_lineEdit->setMinimumWidth(260); + m_d->m_lineEdit->setMinimumWidth(200); hLayout->addWidget(m_d->m_lineEdit); hLayout->setSizeConstraint(QLayout::SetMinimumSize); diff --git a/src/plugins/debugger/gdbengine.cpp b/src/plugins/debugger/gdbengine.cpp index 1924de930384f3295f1290e113cc7911634508b8..fa2d2bacbe4320aaa3e6b16d57fbf163ea123d65 100644 --- a/src/plugins/debugger/gdbengine.cpp +++ b/src/plugins/debugger/gdbengine.cpp @@ -2833,9 +2833,12 @@ static bool extractTemplate(const QString &type, QString *tmplate, QString *inne // 'tmplate' and "Inner1@Inner2@..." etc in 'inner'. Result indicates // whether parsing was successful int level = 0; + bool skipSpace = false; for (int i = 0; i != type.size(); ++i) { QChar c = type[i]; - if (c == '<') { + if (c == ' ' && skipSpace) { + skipSpace = false; + } else if (c == '<') { *(level == 0 ? tmplate : inner) += c; ++level; } else if (c == '>') { @@ -2843,6 +2846,7 @@ static bool extractTemplate(const QString &type, QString *tmplate, QString *inne *(level == 0 ? tmplate : inner) += c; } else if (c == ',') { *inner += (level == 1) ? '@' : ','; + skipSpace = true; } else { *(level == 0 ? tmplate : inner) += c; } @@ -2850,7 +2854,7 @@ static bool extractTemplate(const QString &type, QString *tmplate, QString *inne *tmplate = tmplate->trimmed(); *tmplate = tmplate->remove("<>"); *inner = inner->trimmed(); - //qDebug() << "EXTRACT TEMPLATE: " << *tmplate << *inner; + //qDebug() << "EXTRACT TEMPLATE: " << *tmplate << *inner << " FROM " << type; return !inner->isEmpty(); } @@ -3555,9 +3559,15 @@ void GdbEngine::handleDumpCustomValue2(const GdbResultRecord &record, data1.name = '[' + data1.name + ']'; QString key = item.findChild("key").data(); if (!key.isEmpty()) { - if (item.findChild("keyencoded").data()[0] == '1') + if (item.findChild("keyencoded").data()[0] == '1') { key = '"' + QByteArray::fromBase64(key.toUtf8()) + '"'; - data1.name += " (" + key + ")"; + if (key.size() > 13) { + key = key.left(12); + key += "..."; + } + } + //data1.name += " (" + key + ")"; + data1.name = key; } setWatchDataType(data1, item.findChild("type")); setWatchDataExpression(data1, item.findChild("exp")); diff --git a/src/plugins/resourceeditor/resourceeditorconstants.h b/src/plugins/resourceeditor/resourceeditorconstants.h index 007d537c36e1cea34da0dfdf1629e7e30a39a753..645461a4ddd2f36199da56cfdea4c324ae00ed4f 100644 --- a/src/plugins/resourceeditor/resourceeditorconstants.h +++ b/src/plugins/resourceeditor/resourceeditorconstants.h @@ -38,7 +38,6 @@ namespace ResourceEditor { namespace Constants { const char * const C_RESOURCEEDITOR = "Resource Editor"; -const char * const C_RESOURCEWINDOW = "Resourcewindow"; const char * const C_RESOURCE_MIMETYPE = "application/vnd.nokia.xml.qt.resource"; } // namespace Constants diff --git a/src/plugins/resourceeditor/resourceeditorw.cpp b/src/plugins/resourceeditor/resourceeditorw.cpp index c8e0bbf51072ddad9ddc86028840b47aeb128c4e..833c6547c9239a20da00c99ebe3ff23c6f26f7e9 100644 --- a/src/plugins/resourceeditor/resourceeditorw.cpp +++ b/src/plugins/resourceeditor/resourceeditorw.cpp @@ -161,7 +161,7 @@ bool ResourceEditorFile::save(const QString &name /*= QString()*/) } const char *ResourceEditorW::kind() const { - return ResourceEditor::Constants::C_RESOURCEWINDOW; + return ResourceEditor::Constants::C_RESOURCEEDITOR; } QString ResourceEditorFile::fileName() const diff --git a/src/shared/qrceditor/qrceditor.cpp b/src/shared/qrceditor/qrceditor.cpp index a353d73839496d20f4368e746b68a1b345a9656c..bd25a42d7427ab3f576158bd942781fbcb5990e1 100644 --- a/src/shared/qrceditor/qrceditor.cpp +++ b/src/shared/qrceditor/qrceditor.cpp @@ -39,7 +39,7 @@ #include <QtGui/QFileDialog> #include <QtGui/QMessageBox> -namespace SharedTools { +using namespace SharedTools; QrcEditor::QrcEditor(QWidget *parent) : QWidget(parent), @@ -405,5 +405,3 @@ void QrcEditor::onRedo() updateCurrent(); updateHistoryControls(); } - -} // namespace SharedTools diff --git a/src/shared/qrceditor/resourcefile.cpp b/src/shared/qrceditor/resourcefile.cpp index b88444c6e16e356cf693b1131387ab40ebd85f51..bfab4b0315f8441ad3cd5b7c547e641865bb5c47 100644 --- a/src/shared/qrceditor/resourcefile.cpp +++ b/src/shared/qrceditor/resourcefile.cpp @@ -54,6 +54,19 @@ TRANSLATOR qdesigner_internal::ResourceModel namespace qdesigner_internal { + +/****************************************************************************** +** FileList +*/ + +bool FileList::containsFile(File *file) +{ + foreach(File *tmpFile, *this) + if (tmpFile->name == file->name && tmpFile->prefix() == file->prefix()) + return true; + return false; +} + /****************************************************************************** ** ResourceFile */ @@ -375,7 +388,7 @@ bool ResourceFile::contains(const QString &prefix, const QString &file) const Prefix * const p = m_prefix_list.at(pref_idx); Q_ASSERT(p); File equalFile(p, absolutePath(file)); - return p->file_list.contains(&equalFile); + return p->file_list.containsFile(&equalFile); } bool ResourceFile::contains(int pref_idx, const QString &file) const @@ -383,7 +396,7 @@ bool ResourceFile::contains(int pref_idx, const QString &file) const Q_ASSERT(pref_idx >= 0 && pref_idx < m_prefix_list.count()); Prefix * const p = m_prefix_list.at(pref_idx); File equalFile(p, absolutePath(file)); - return p->file_list.contains(&equalFile); + return p->file_list.containsFile(&equalFile); } /*static*/ QString ResourceFile::fixPrefix(const QString &prefix) diff --git a/src/shared/qrceditor/resourcefile_p.h b/src/shared/qrceditor/resourcefile_p.h index 61b6c594b64ddd1558598108a07e63c9c4221620..3ee346cb0e69465ef9642c231e4b8aeb0bbc848e 100644 --- a/src/shared/qrceditor/resourcefile_p.h +++ b/src/shared/qrceditor/resourcefile_p.h @@ -90,7 +90,12 @@ struct File : public Node { QString name; QString alias; }; -typedef QList<File *> FileList; + +class FileList : public QList<File *> +{ +public: + bool containsFile(File *file); +}; /*! \class Prefix diff --git a/src/tools/qtcreatorwidgets/qtcreatorwidgets.pro b/src/tools/qtcreatorwidgets/qtcreatorwidgets.pro index 6923e09837dd649062416ec29198c599a8564670..ce209c86d7709b69b28f4ee9a029cbbfa32a49ff 100644 --- a/src/tools/qtcreatorwidgets/qtcreatorwidgets.pro +++ b/src/tools/qtcreatorwidgets/qtcreatorwidgets.pro @@ -9,7 +9,7 @@ SOURCES = customwidgets.cpp # Link against the qtcreator utils lib -unix { +linux-* { # form abs path to qtcreator lib dir GH_LIB=$$dirname(PWD) GH_LIB=$$dirname(GH_LIB) @@ -19,7 +19,13 @@ unix { } INCLUDEPATH += ../../../src/libs -LIBS += -L../../../lib -lUtils +macx { + LIBS += -L../../../bin/QtCreator.app/Contents/PlugIns + CONFIG(debug, debug|release):LIBS += -lUtils_debug + else:LIBS += -lUtils +} else { + LIBS += -L../../../lib -lUtils +} DESTDIR= $$[QT_INSTALL_PLUGINS]/designer diff --git a/tests/manual/gdbdebugger/simple/app.cpp b/tests/manual/gdbdebugger/simple/app.cpp index 98fa2111dc92f681f17ee2ef3a5df2e73a260fb2..76eadf2d9fdc8df681a926d7bdc9dfc467c5e071 100644 --- a/tests/manual/gdbdebugger/simple/app.cpp +++ b/tests/manual/gdbdebugger/simple/app.cpp @@ -159,16 +159,27 @@ void testQHash() #if 1 - QHash<QString, float> hgg1; + QHash<QString, int> hgg1; hgg1["22.0"] = 22.0; - hgg1["23.0"] = 22.0; - hgg1["24.0"] = 22.0; - hgg1["25.0"] = 22.0; - hgg1["26.0"] = 22.0; - hgg1["27.0"] = 27.0; - hgg1["28.0"] = 28.0; - hgg1["29.0"] = 29.0; - + hgg1["123.0"] = 22.0; + hgg1["111111ss111128.0"] = 28.0; + hgg1["11124.0"] = 22.0; + hgg1["1111125.0"] = 22.0; + hgg1["11111126.0"] = 22.0; + hgg1["111111127.0"] = 27.0; + hgg1["111111111128.0"] = 28.0; + hgg1["111111111111111111129.0"] = 29.0; + + QHash<QByteArray, float> hgx1; + hgx1["22.0"] = 22.0; + hgx1["123.0"] = 22.0; + hgx1["111111ss111128.0"] = 28.0; + hgx1["11124.0"] = 22.0; + hgx1["1111125.0"] = 22.0; + hgx1["11111126.0"] = 22.0; + hgx1["111111127.0"] = 27.0; + hgx1["111111111128.0"] = 28.0; + hgx1["111111111111111111129.0"] = 29.0; #endif #if 1