diff --git a/share/qtcreator/gdbmacros/gdbmacros.cpp b/share/qtcreator/gdbmacros/gdbmacros.cpp index c70e3b75a4383943092ccea033c0350d57a656ce..d39fd8ddb49ab68284c360393b67efc2b3e23db8 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 { @@ -311,7 +311,16 @@ static bool isSimpleType(const char *type) static bool isShortKey(const char *type) { - return isSimpleType(type) || isEqual(type, "QString"); + return isSimpleType(type) || isEqual(type, NS"QString"); +} + +static bool isStringType(const char *type) +{ + return isEqual(type, NS"QString") + || isEqual(type, NS"QByteArray") + || isEqual(type, "std::string") + || isEqual(type, "std::wstring") + || isEqual(type, "wstring"); } static bool isMovableType(const char *type) @@ -704,44 +713,45 @@ static void qDumpUnknown(QDumper &d) } static void qDumpInnerValueHelper(QDumper &d, const char *type, const void *addr, - const char *key = "value") + const char *field = "value") { type = stripNamespace(type); switch (type[1]) { case 'l': if (isEqual(type, "float")) - P(d, key, *(float*)addr); + P(d, field, *(float*)addr); return; case 'n': if (isEqual(type, "int")) - P(d, key, *(int*)addr); + P(d, field, *(int*)addr); else if (isEqual(type, "unsigned")) - P(d, key, *(unsigned int*)addr); + P(d, field, *(unsigned int*)addr); else if (isEqual(type, "unsigned int")) - P(d, key, *(unsigned int*)addr); + P(d, field, *(unsigned int*)addr); else if (isEqual(type, "unsigned long")) - P(d, key, *(unsigned long*)addr); + P(d, field, *(unsigned long*)addr); else if (isEqual(type, "unsigned long long")) - P(d, key, *(qulonglong*)addr); + P(d, field, *(qulonglong*)addr); return; case 'o': if (isEqual(type, "bool")) switch (*(bool*)addr) { - case 0: P(d, key, "false"); break; - case 1: P(d, key, "true"); break; - default: P(d, key, *(bool*)addr); break; + case 0: P(d, field, "false"); break; + case 1: P(d, field, "true"); break; + default: P(d, field, *(bool*)addr); break; } else if (isEqual(type, "double")) - P(d, key, *(double*)addr); + P(d, field, *(double*)addr); else if (isEqual(type, "long")) - P(d, key, *(long*)addr); + P(d, field, *(long*)addr); else if (isEqual(type, "long long")) - P(d, key, *(qulonglong*)addr); + P(d, field, *(qulonglong*)addr); return; case 'B': if (isEqual(type, "QByteArray")) { - d << key << "encoded=\"1\","; - P(d, key, *(QByteArray*)addr); + d.addCommaIfNeeded(); + d << field << "encoded=\"1\","; + P(d, field, *(QByteArray*)addr); } return; case 'L': @@ -769,8 +779,9 @@ static void qDumpInnerValueHelper(QDumper &d, const char *type, const void *addr return; case 'S': if (isEqual(type, "QString")) { - d << key << "encoded=\"1\","; - P(d, key, *(QString*)addr); + d.addCommaIfNeeded(); + d << field << "encoded=\"1\","; + P(d, field, *(QString*)addr); } return; default: @@ -1086,13 +1097,17 @@ 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 isStringKey = isStringType(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 + << " isStringKey: " << isStringKey + << " isSimpleValue: " << isSimpleValue + << " valueType: '" << valueType << "'" << " keySize: " << keyOffset << " valueOffset: " << valueOffset << " opt: " << opt); @@ -1103,18 +1118,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; @@ -1262,8 +1276,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 +1411,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 = isShortKey(keyType); + bool isSimpleValue = isShortKey(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,10 +1429,10 @@ static void qDumpQMap(QDumper &d) while (node != end) { d.beginHash(); P(d, "name", i); - if (simpleKey) { + if (isSimpleKey) { P(d, "type", valueType); qDumpInnerValueHelper(d, keyType, addOffset(node, keyOffset), "key"); - if (simpleValue) + if (isSimpleValue) qDumpInnerValueHelper(d, valueType, addOffset(node, valueOffset)); P(d, "type", valueType); @@ -2199,26 +2213,30 @@ static void qDumpStdMap(QDumper &d) P(d, "pairtype", pairType); if (d.dumpChildren) { - bool simpleKey = isSimpleType(keyType); - bool simpleValue = isShortKey(valueType); + bool isSimpleKey = isSimpleType(keyType); + bool isStringKey = isStringType(keyType); + bool isSimpleValue = isShortKey(valueType); int valueOffset = d.extraInt[2]; d << ",children=["; it = map.begin(); for (int i = 0; i < 1000 && it != map.end(); ++i, ++it) { const void *node = it.operator->(); - if (simpleKey) { + if (isSimpleKey) { d.beginHash(); P(d, "type", valueType); - qDumpInnerValueHelper(d, keyType, node, "name"); + P(d, "name", i); + qDumpInnerValueHelper(d, keyType, node, "key"); P(d, "nameisindex", "1"); - if (simpleValue) + if (isSimpleValue) qDumpInnerValueHelper(d, valueType, addOffset(node, valueOffset)); P(d, "addr", addOffset(node, valueOffset)); d.endHash(); } else { d.beginHash(); P(d, "name", i); + if (isStringKey) + qDumpInnerValueHelper(d, keyType, node, "key"); P(d, "addr", it.operator->()); P(d, "type", pairType); d.endHash(); diff --git a/share/share.pri b/share/share.pri index ece603de4163ac078b18ed4feb19bf54f86ee35b..35c84568b9e839ec2997ec2700ffd8897b63f089 100644 --- a/share/share.pri +++ b/share/share.pri @@ -17,7 +17,7 @@ macx { QMAKE_INFO_PLIST = $$PWD/qtcreator/Info.plist } -win32 { +win32|linux-* { # make sure the resources are in place !exists($$OUT_PWD/app.pro) { unix:SEPARATOR = ; @@ -28,10 +28,11 @@ win32 { designer \ schemes \ gdbmacros - COPYDEST = $${OUT_PWD}/../../bin + COPYDEST = $${OUT_PWD}/../../share/qtcreator win32:COPYDEST ~= s|/+|\| + QMAKE_POST_LINK += $${QMAKE_MKDIR} $$COPYDEST $$SEPARATOR for(tmp,COPYSRC) { - REALSRC = $$PWD/$$tmp + REALSRC = $$PWD/qtcreator/$$tmp REALDEST = $$COPYDEST/$$tmp win32:tmp ~= s|/+|\| win32:REALSRC ~= s|/+|\| diff --git a/src/plugins/coreplugin/progressmanager/progressview.cpp b/src/plugins/coreplugin/progressmanager/progressview.cpp index cee81c697b0735042f4e2713272d0d3f69e9782d..6d9f6e952c08f36947e3eb74f3d59adef2b0885f 100644 --- a/src/plugins/coreplugin/progressmanager/progressview.cpp +++ b/src/plugins/coreplugin/progressmanager/progressview.cpp @@ -99,6 +99,7 @@ void ProgressView::deleteTask(FutureProgress *progress) m_type.remove(progress); m_keep.remove(progress); layout()->removeWidget(progress); + progress->hide(); progress->deleteLater(); } diff --git a/src/plugins/debugger/gdbengine.cpp b/src/plugins/debugger/gdbengine.cpp index c559bcb2c1ca351716f03c6e369ab560e030bdae..aab7dc1025e0ca1edb503fcee20ea845ea0365d5 100644 --- a/src/plugins/debugger/gdbengine.cpp +++ b/src/plugins/debugger/gdbengine.cpp @@ -2761,14 +2761,17 @@ static void setWatchDataValue(WatchData &data, const GdbMi &mi, break; case 1: // base64 encoded 8 bit data ba = QByteArray::fromBase64(mi.data()); + ba = '"' + ba + '"'; break; case 2: // base64 encoded 16 bit data ba = QByteArray::fromBase64(mi.data()); ba = QString::fromUtf16((ushort *)ba.data(), ba.size() / 2).toUtf8(); + ba = '"' + ba + '"'; break; case 3: // base64 encoded 32 bit data ba = QByteArray::fromBase64(mi.data()); ba = QString::fromUcs4((uint *)ba.data(), ba.size() / 4).toUtf8(); + ba = '"' + ba + '"'; break; } data.setValue(ba); @@ -2830,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 == '>') { @@ -2840,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; } @@ -3550,13 +3557,18 @@ void GdbEngine::handleDumpCustomValue2(const GdbResultRecord &record, data1.iname = data.iname + "." + data1.name; if (!data1.name.isEmpty() && data1.name.at(0).isDigit()) data1.name = '[' + data1.name + ']'; - //qDebug() << "NAMEENCODED: " << item.findChild("nameencoded").data() - // << item.findChild("nameencoded").data()[1]; - if (item.findChild("nameencoded").data()[0] == '1') - data1.name = QByteArray::fromBase64(data1.name.toUtf8()); QString key = item.findChild("key").data(); - if (!key.isEmpty()) - data1.name += " (" + key + ")"; + if (!key.isEmpty()) { + if (item.findChild("keyencoded").data()[0] == '1') { + key = '"' + QByteArray::fromBase64(key.toUtf8()) + '"'; + 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")); setWatchDataChildCount(data1, item.findChild("numchild")); diff --git a/src/plugins/help/centralwidget.cpp b/src/plugins/help/centralwidget.cpp index f18795c3d39a762dd96bdac5fd334af88c8b2e6f..a944efa29b3af5a28c0f1f8306d7360f22e8f68f 100644 --- a/src/plugins/help/centralwidget.cpp +++ b/src/plugins/help/centralwidget.cpp @@ -61,6 +61,8 @@ #include <QtHelp/QHelpEngine> +#include <coreplugin/coreconstants.h> + using namespace Help::Internal; namespace { @@ -228,20 +230,23 @@ void CentralWidget::setSource(const QUrl &url) void CentralWidget::setLastShownPages() { - const QStringList lastShownPageList = helpEngine->customValue(QLatin1String("LastShownPages")). - toString().split(QLatin1Char('|'), QString::SkipEmptyParts); + const QStringList lastShownPageList = + helpEngine->customValue(QLatin1String("LastShownPages")). toString(). + split(QLatin1Char('|'), QString::SkipEmptyParts); if (!lastShownPageList.isEmpty()) { - foreach (const QString page, lastShownPageList) + foreach (const QString& page, lastShownPageList) setSourceInNewTab(page); - tabWidget->setCurrentIndex(helpEngine->customValue(QLatin1String("LastTabPage"), 0).toInt()); + tabWidget->setCurrentIndex(helpEngine-> + customValue(QLatin1String("LastTabPage"), 0).toInt()); } else { - QUrl url = helpEngine->findFile(QUrl("qthelp://com.trolltech.qt.440/qdoc/index.html")); - if (url.isValid()) - setSource(url); - else - setSource(QUrl("qthelp://com.trolltech.qt.440/qdoc/index.html")); + QUrl url(helpEngine->findFile(QUrl("qthelp://com.trolltech.qt.440/qdoc/index.html"))); + if (!url.isValid()) { + url.setUrl(QString("qthelp://com.nokia.qtcreator.%1%2/doc/index.html"). + arg(IDE_VERSION_MAJOR).arg(IDE_VERSION_MINOR)); + } + setSource(url); } updateBrowserFont(); @@ -392,19 +397,33 @@ void CentralWidget::setGlobalActions(const QList<QAction*> &actions) { globalActionList = actions; } + void CentralWidget::setSourceInNewTab(const QUrl &url) { HelpViewer* viewer = new HelpViewer(helpEngine, this); viewer->installEventFilter(this); viewer->setSource(url); viewer->setFocus(Qt::OtherFocusReason); - tabWidget->setCurrentIndex(tabWidget->addTab(viewer, viewer->documentTitle())); + tabWidget->setCurrentIndex(tabWidget->addTab(viewer, + quoteTabTitle(viewer->documentTitle()))); +#if defined(QT_NO_WEBIT) QFont font = qApp->font(); if (helpEngine->customValue(QLatin1String("useBrowserFont")).toBool()) font = qVariantValue<QFont>(helpEngine->customValue(QLatin1String("browserFont"))); - viewer->setFont(font); +#else + QWebView* view = qobject_cast<QWebView*> (viewer); + if (view) { + QWebSettings* settings = QWebSettings::globalSettings(); + int fontSize = settings->fontSize(QWebSettings::DefaultFontSize); + QString fontFamily = settings->fontFamily(QWebSettings::StandardFont); + + settings = view->settings(); + settings->setFontSize(QWebSettings::DefaultFontSize, fontSize); + settings->setFontFamily(QWebSettings::StandardFont, fontFamily); + } +#endif connectSignals(); } @@ -492,7 +511,7 @@ void CentralWidget::currentPageChanged(int index) bool enabled = false; if (viewer) enabled = tabWidget->count() > 1; - + tabWidget->setTabsClosable(enabled); tabWidget->cornerWidget(Qt::TopLeftCorner)->setEnabled(true); @@ -595,6 +614,7 @@ bool CentralWidget::eventFilter(QObject *object, QEvent *e) void CentralWidget::updateBrowserFont() { +#if defined(QT_NO_WEBKIT) QFont font = qApp->font(); if (helpEngine->customValue(QLatin1String("useBrowserFont")).toBool()) font = qVariantValue<QFont>(helpEngine->customValue(QLatin1String("browserFont"))); @@ -605,9 +625,25 @@ void CentralWidget::updateBrowserFont() if (widget->font() != font) widget->setFont(font); } +#else + QWebSettings* settings = QWebSettings::globalSettings(); + int fontSize = settings->fontSize(QWebSettings::DefaultFontSize); + QString fontFamily = settings->fontFamily(QWebSettings::StandardFont); + + QWebView* widget = 0; + for (int i = 0; i < tabWidget->count(); ++i) { + widget = qobject_cast<QWebView*> (tabWidget->widget(i)); + if (widget) { + settings = widget->settings(); + settings->setFontSize(QWebSettings::DefaultFontSize, fontSize); + settings->setFontFamily(QWebSettings::StandardFont, fontFamily); + } + } +#endif } -bool CentralWidget::find(const QString &txt, QTextDocument::FindFlags findFlags, bool incremental) +bool CentralWidget::find(const QString &txt, QTextDocument::FindFlags findFlags, + bool incremental) { HelpViewer* viewer = currentHelpViewer(); @@ -666,7 +702,7 @@ bool CentralWidget::find(const QString &txt, QTextDocument::FindFlags findFlags, } void CentralWidget::showTopicChooser(const QMap<QString, QUrl> &links, - const QString &keyword) + const QString &keyword) { TopicChooser tc(this, keyword, links); if (tc.exec() == QDialog::Accepted) diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index a9d4e2fc20819f5a271e0a7742ebb29d7c018c71..2afd5e5f3b69c91746f18e35e34e6da95ded16a2 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -518,10 +518,6 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+R"))); mbuild->addAction(cmd, Constants::G_BUILD_RUN); - m_runActionContextMenu = new QAction(runIcon, tr("Run"), this); - cmd = am->registerAction(m_runActionContextMenu, Constants::RUNCONTEXTMENU, globalcontext); - mproject->addAction(cmd, Constants::G_PROJECT_RUN); - Core::ActionContainer *mrc = am->createMenu(Constants::RUNCONFIGURATIONMENU); m_runConfigurationMenu = mrc->menu(); m_runConfigurationMenu->setTitle(tr("Set Run Configuration")); @@ -535,6 +531,10 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er modeManager->addAction(cmd, Constants::P_ACTION_RUN, m_runConfigurationMenu); + m_runActionContextMenu = new QAction(runIcon, tr("Run"), this); + cmd = am->registerAction(m_runActionContextMenu, Constants::RUNCONTEXTMENU, globalcontext); + mproject->addAction(cmd, Constants::G_PROJECT_RUN); + // jump to next task m_taskAction = new QAction(tr("Go to Task Window"), this); m_taskAction->setIcon(QIcon(Core::Constants::ICON_NEXT)); diff --git a/src/plugins/qt4projectmanager/qmakestep.cpp b/src/plugins/qt4projectmanager/qmakestep.cpp index d8c4204ccdf7a008ab76e21bde8363c04c843c3e..a477b921b8ed6ed1c16ef046b420d6a9802a89d4 100644 --- a/src/plugins/qt4projectmanager/qmakestep.cpp +++ b/src/plugins/qt4projectmanager/qmakestep.cpp @@ -104,6 +104,7 @@ bool QMakeStep::init(const QString &name) m_buildConfiguration = name; const QtVersion *qtVersion = m_pro->qtVersion(name); + if (!qtVersion->isValid()) { #if defined(Q_OS_MAC) emit addToOutputWindow(tr("\n<font color=\"#ff0000\"><b>No valid Qt version set. Set one in Preferences </b></font>\n")); diff --git a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp index 3ff03bcc28a305115a3828fed94b71f780f7b475..6503e9b3a9883a8272954fb634fbb2d7861884c8 100644 --- a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp @@ -46,6 +46,7 @@ #include <QtGui/QFormLayout> #include <QtGui/QInputDialog> +#include <QtGui/QLabel> using namespace Qt4ProjectManager::Internal; using namespace Qt4ProjectManager; @@ -54,17 +55,27 @@ using ProjectExplorer::PersistentSettingsReader; using ProjectExplorer::PersistentSettingsWriter; Qt4RunConfiguration::Qt4RunConfiguration(Qt4Project *pro, QString proFilePath) - : ApplicationRunConfiguration(pro), m_proFilePath(proFilePath), m_userSetName(false) + : ApplicationRunConfiguration(pro), + m_proFilePath(proFilePath), + m_userSetName(false), + m_configWidget(0), + m_executableLabel(0), + m_workingDirectoryLabel(0) { setName(tr("Qt4RunConfiguration")); if (!m_proFilePath.isEmpty()) { updateCachedValues(); setName(QFileInfo(m_proFilePath).baseName()); } + connect(pro, SIGNAL(activeBuildConfigurationChanged()), + this, SIGNAL(effectiveExecutableChanged())); + connect(pro, SIGNAL(activeBuildConfigurationChanged()), + this, SIGNAL(effectiveWorkingDirectoryChanged())); } Qt4RunConfiguration::~Qt4RunConfiguration() { + } QString Qt4RunConfiguration::type() const @@ -72,37 +83,92 @@ QString Qt4RunConfiguration::type() const return "Qt4ProjectManager.Qt4RunConfiguration"; } -QWidget *Qt4RunConfiguration::configurationWidget() + +////// +/// Qt4RunConfigurationWidget +///// + +Qt4RunConfigurationWidget::Qt4RunConfigurationWidget(Qt4RunConfiguration *qt4RunConfiguration, QWidget *parent) + : QWidget(parent), m_qt4RunConfiguration(qt4RunConfiguration), m_ignoreChange(false) { - QWidget *configWidget = new QWidget; - QFormLayout *toplayout = new QFormLayout(configWidget); + QFormLayout *toplayout = new QFormLayout(this); toplayout->setMargin(0); QLabel *nameLabel = new QLabel(tr("Name:")); - QLineEdit *nameLineEdit = new QLineEdit(name()); - nameLabel->setBuddy(nameLineEdit); - toplayout->addRow(nameLabel, nameLineEdit); + m_nameLineEdit = new QLineEdit(m_qt4RunConfiguration->name()); + nameLabel->setBuddy(m_nameLineEdit); + toplayout->addRow(nameLabel, m_nameLineEdit); - QLabel *executableLabel = new QLabel(tr("Executable:")); - QLabel *executableLabel2 = new QLabel(executable()); - toplayout->addRow(executableLabel, executableLabel2); + m_executableLabel = new QLabel(m_qt4RunConfiguration->executable()); + toplayout->addRow(tr("Executable:"), m_executableLabel); - QLabel *workingDirectoryLabel = new QLabel(tr("Working Directory:")); - QLabel *workingDirectoryLabel2 = new QLabel(workingDirectory()); - toplayout->addRow(workingDirectoryLabel, workingDirectoryLabel2); + m_workingDirectoryLabel = new QLabel(m_qt4RunConfiguration->workingDirectory()); + toplayout->addRow(tr("Working Directory:"), m_workingDirectoryLabel); QLabel *argumentsLabel = new QLabel(tr("&Arguments:")); - QLineEdit *argumentsLineEdit = new QLineEdit(ProjectExplorer::Environment::joinArgumentList(commandLineArguments())); - argumentsLabel->setBuddy(argumentsLineEdit); - toplayout->addRow(argumentsLabel, argumentsLineEdit); + m_argumentsLineEdit = new QLineEdit(ProjectExplorer::Environment::joinArgumentList(qt4RunConfiguration->commandLineArguments())); + argumentsLabel->setBuddy(m_argumentsLineEdit); + toplayout->addRow(argumentsLabel, m_argumentsLineEdit); - connect(argumentsLineEdit, SIGNAL(textEdited(const QString&)), + connect(m_argumentsLineEdit, SIGNAL(textEdited(const QString&)), this, SLOT(setCommandLineArguments(const QString&))); - connect(nameLineEdit, SIGNAL(textEdited(const QString&)), + connect(m_nameLineEdit, SIGNAL(textEdited(const QString&)), this, SLOT(nameEdited(const QString&))); - return configWidget; + connect(qt4RunConfiguration, SIGNAL(commandLineArgumentsChanged(QString)), + this, SLOT(commandLineArgumentsChanged(QString))); + connect(qt4RunConfiguration, SIGNAL(nameChanged(QString)), + this, SLOT(nameChanged(QString))); + + connect(qt4RunConfiguration, SIGNAL(effectiveExecutableChanged()), + this, SLOT(effectiveExecutableChanged())); + connect(qt4RunConfiguration, SIGNAL(effectiveWorkingDirectoryChanged()), + this, SLOT(effectiveWorkingDirectoryChanged())); + +} + +void Qt4RunConfigurationWidget::setCommandLineArguments(const QString &args) +{ + m_ignoreChange = true; + m_qt4RunConfiguration->setCommandLineArguments(args); + m_ignoreChange = false; +} + +void Qt4RunConfigurationWidget::nameEdited(const QString &name) +{ + m_ignoreChange = true; + m_qt4RunConfiguration->nameEdited(name); + m_ignoreChange = false; +} + +void Qt4RunConfigurationWidget::commandLineArgumentsChanged(const QString &args) +{ + if (!m_ignoreChange) + m_argumentsLineEdit->setText(args); +} + +void Qt4RunConfigurationWidget::nameChanged(const QString &name) +{ + if (!m_ignoreChange) + m_nameLineEdit->setText(name); +} + +void Qt4RunConfigurationWidget::effectiveExecutableChanged() +{ + m_executableLabel->setText(m_qt4RunConfiguration->executable()); +} + +void Qt4RunConfigurationWidget::effectiveWorkingDirectoryChanged() +{ + m_workingDirectoryLabel->setText(m_qt4RunConfiguration->workingDirectory()); +} + +////// TODO c&p above + +QWidget *Qt4RunConfiguration::configurationWidget() +{ + return new Qt4RunConfigurationWidget(this, 0); } void Qt4RunConfiguration::save(PersistentSettingsWriter &writer) const @@ -156,6 +222,7 @@ ProjectExplorer::Environment Qt4RunConfiguration::environment() const void Qt4RunConfiguration::setCommandLineArguments(const QString &argumentsString) { m_commandLineArguments = ProjectExplorer::Environment::parseCombinedArgString(argumentsString); + emit commandLineArgumentsChanged(argumentsString); } void Qt4RunConfiguration::nameEdited(const QString &name) @@ -167,6 +234,7 @@ void Qt4RunConfiguration::nameEdited(const QString &name) setName(name); m_userSetName = true; } + emit nameChanged(name); } QString Qt4RunConfiguration::proFilePath() const @@ -222,6 +290,9 @@ void Qt4RunConfiguration::updateCachedValues() m_runMode = ProjectExplorer::ApplicationRunConfiguration::Gui; delete reader; + + emit effectiveExecutableChanged(); + emit effectiveWorkingDirectoryChanged(); } QString Qt4RunConfiguration::resolveVariables(const QString &buildConfiguration, const QString& in) const @@ -310,7 +381,7 @@ QString Qt4RunConfiguration::qmakeBuildConfigFromBuildConfiguration(const QStrin else return "release"; } else { - // Old sytle always CONFIG+=debug_and_release + // Old style always CONFIG+=debug_and_release if (qobject_cast<Qt4Project *>(project())->qtVersion(buildConfigurationName)->defaultBuildConfig() & QtVersion::DebugBuild) return "debug"; else diff --git a/src/plugins/qt4projectmanager/qt4runconfiguration.h b/src/plugins/qt4projectmanager/qt4runconfiguration.h index c51ac521fe53fbe9d3b3b957d78b61598860bef0..ce1d44769e0a13f081ae49c5b8a3af1382f9e8ab 100644 --- a/src/plugins/qt4projectmanager/qt4runconfiguration.h +++ b/src/plugins/qt4projectmanager/qt4runconfiguration.h @@ -36,6 +36,11 @@ #include <projectexplorer/applicationrunconfiguration.h> #include <QtCore/QStringList> +#include <QtGui/QWidget> + +class QWidget; +class QLabel; +class QLineEdit; namespace Qt4ProjectManager { @@ -45,9 +50,13 @@ namespace Internal { class Qt4ProFileNode; + + class Qt4RunConfiguration : public ProjectExplorer::ApplicationRunConfiguration { Q_OBJECT + // to change the name and arguments + friend class Qt4RunConfigurationWidget; public: Qt4RunConfiguration(Qt4Project *pro, QString proFilePath); virtual ~Qt4RunConfiguration(); @@ -68,6 +77,14 @@ public: // Should just be called from qt4project, since that knows that the file changed on disc void updateCachedValues(); +signals: + void nameChanged(const QString&); + void commandLineArgumentsChanged(const QString&); + + // note those signals might not emited for every change + void effectiveExecutableChanged(); + void effectiveWorkingDirectoryChanged(); + private slots: void setCommandLineArguments(const QString &argumentsString); void nameEdited(const QString&); @@ -88,6 +105,31 @@ private: QString m_workingDir; ProjectExplorer::ApplicationRunConfiguration::RunMode m_runMode; bool m_userSetName; + QWidget *m_configWidget; + QLabel *m_executableLabel; + QLabel *m_workingDirectoryLabel; +}; + +class Qt4RunConfigurationWidget : public QWidget +{ + Q_OBJECT +public: + Qt4RunConfigurationWidget(Qt4RunConfiguration *qt4runconfigration, QWidget *parent); +private slots: + void setCommandLineArguments(const QString &arguments); + void nameEdited(const QString &name); + // TODO connect to signals from qt4runconfiguration for changed arguments and names + void commandLineArgumentsChanged(const QString &args); + void nameChanged(const QString &name); + void effectiveExecutableChanged(); + void effectiveWorkingDirectoryChanged(); +private: + Qt4RunConfiguration *m_qt4RunConfiguration; + bool m_ignoreChange; + QLabel *m_executableLabel; + QLabel *m_workingDirectoryLabel; + QLineEdit *m_nameLineEdit; + QLineEdit *m_argumentsLineEdit; }; class Qt4RunConfigurationFactory : public ProjectExplorer::IRunConfigurationFactory diff --git a/src/shared/qrceditor/qrceditor.cpp b/src/shared/qrceditor/qrceditor.cpp index e4f04c9762e71de5d38d6b90906d8a637d8464d1..a353d73839496d20f4368e746b68a1b345a9656c 100644 --- a/src/shared/qrceditor/qrceditor.cpp +++ b/src/shared/qrceditor/qrceditor.cpp @@ -151,21 +151,28 @@ void QrcEditor::updateCurrent() const bool isValid = m_treeview->currentIndex().isValid(); const bool isPrefix = m_treeview->isPrefix(m_treeview->currentIndex()) && isValid; const bool isFile = !isPrefix && isValid; + int cursorPosition; m_ui.aliasLabel->setEnabled(isFile); m_ui.aliasText->setEnabled(isFile); m_currentAlias = m_treeview->currentAlias(); + cursorPosition = m_ui.aliasText->cursorPosition(); m_ui.aliasText->setText(m_currentAlias); + m_ui.aliasText->setCursorPosition(cursorPosition); m_ui.prefixLabel->setEnabled(isPrefix); m_ui.prefixText->setEnabled(isPrefix); m_currentPrefix = m_treeview->currentPrefix(); + cursorPosition = m_ui.prefixText->cursorPosition(); m_ui.prefixText->setText(m_currentPrefix); + m_ui.prefixText->setCursorPosition(cursorPosition); m_ui.languageLabel->setEnabled(isPrefix); m_ui.languageText->setEnabled(isPrefix); m_currentLanguage = m_treeview->currentLanguage(); + cursorPosition = m_ui.languageText->cursorPosition(); m_ui.languageText->setText(m_currentLanguage); + m_ui.languageText->setCursorPosition(cursorPosition); m_ui.addButton->setEnabled(true); m_addFileAction->setEnabled(isValid); 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