diff --git a/share/qtcreator/qml/qmljsdebugger/jsdebuggeragent.cpp b/share/qtcreator/qml/qmljsdebugger/jsdebuggeragent.cpp index 7e231d91315e43dfc7eb11561338d28a09e03dcc..c6a302a6f61cf2828af4139c2820de33d8e83e1f 100644 --- a/share/qtcreator/qml/qmljsdebugger/jsdebuggeragent.cpp +++ b/share/qtcreator/qml/qmljsdebugger/jsdebuggeragent.cpp @@ -482,7 +482,7 @@ void JSDebuggerAgentPrivate::messageReceived(const QByteArray &message) fileNameToBreakpoints.clear(); foreach (const JSAgentBreakpointData &bp, breakpoints) { - fileNameToBreakpoints.insert(fileName(bp.fileUrl), bp); + fileNameToBreakpoints.insertMulti(fileName(bp.fileUrl), bp); } //qDebug() << "BREAKPOINTS"; diff --git a/src/libs/utils/pathchooser.cpp b/src/libs/utils/pathchooser.cpp index 91165f32a9336d717d1c59d30686fba690c194e7..9b28e2c36a050b6fb07a81ac275766b911083a16 100644 --- a/src/libs/utils/pathchooser.cpp +++ b/src/libs/utils/pathchooser.cpp @@ -406,11 +406,6 @@ bool PathChooser::validatePath(const QString &path, QString *errorMessage) { QString expandedPath = m_d->expandedPath(path); - QString displayPath = expandedPath; - if (expandedPath.isEmpty()) - //: Selected path is not valid: - displayPath = tr("<not valid>"); - if (expandedPath.isEmpty()) { if (errorMessage) *errorMessage = tr("The path must not be empty."); @@ -495,7 +490,10 @@ QString PathChooser::homePath() void PathChooser::setExpectedKind(Kind expected) { + if (m_d->m_acceptingKind == expected) + return; m_d->m_acceptingKind = expected; + m_d->m_lineEdit->triggerChanged(); } PathChooser::Kind PathChooser::expectedKind() const diff --git a/src/libs/valgrind/memcheck/memcheckrunner.cpp b/src/libs/valgrind/memcheck/memcheckrunner.cpp index 00fefe9413696c6906d0c9540d782008304d234a..a4829d60c3d557b7ac543ae873d95462b1128c8f 100644 --- a/src/libs/valgrind/memcheck/memcheckrunner.cpp +++ b/src/libs/valgrind/memcheck/memcheckrunner.cpp @@ -41,10 +41,10 @@ #include <utils/qtcassert.h> -#include <QTcpServer> -#include <QTcpSocket> -#include <QEventLoop> -#include <QNetworkInterface> +#include <QtNetwork/QTcpServer> +#include <QtNetwork/QTcpSocket> +#include <QtNetwork/QNetworkInterface> +#include <QtCore/QEventLoop> using namespace Valgrind::Memcheck; diff --git a/src/libs/valgrind/valgrindprocess.cpp b/src/libs/valgrind/valgrindprocess.cpp index 1731c80d303ab181705abbcef263166eb970b9ec..cf7775d85365725b4ef604f50d535d5e74b22d11 100644 --- a/src/libs/valgrind/valgrindprocess.cpp +++ b/src/libs/valgrind/valgrindprocess.cpp @@ -35,9 +35,9 @@ #include "valgrindprocess.h" -#include <QDebug> -#include <QEventLoop> -#include <QFileInfo> +#include <QtCore/QDebug> +#include <QtCore/QEventLoop> +#include <QtCore/QFileInfo> namespace Valgrind { namespace Internal { diff --git a/src/libs/valgrind/valgrindrunner.cpp b/src/libs/valgrind/valgrindrunner.cpp index 009cd2654eae691662d24b6bdee5e35351a06477..becf82a917a96fa414313dcd32262c6c73653c92 100644 --- a/src/libs/valgrind/valgrindrunner.cpp +++ b/src/libs/valgrind/valgrindrunner.cpp @@ -40,7 +40,7 @@ #include <utils/environment.h> -#include <QEventLoop> +#include <QtCore/QEventLoop> using namespace Valgrind; @@ -250,4 +250,4 @@ void ValgrindRunner::stop() { if (d->process) d->process->close(); -} \ No newline at end of file +} diff --git a/src/libs/valgrind/valgrindrunner.h b/src/libs/valgrind/valgrindrunner.h index 67a69f93c082c0dee04bf64210969beb11a98219..05c9b5c4e058721139b1e8b80e524b62d419b741 100644 --- a/src/libs/valgrind/valgrindrunner.h +++ b/src/libs/valgrind/valgrindrunner.h @@ -36,7 +36,7 @@ #ifndef VALGRIND_RUNNER_H #define VALGRIND_RUNNER_H -#include <QProcess> +#include <QtCore/QProcess> #include "valgrind_global.h" diff --git a/src/libs/valgrind/xmlprotocol/announcethread.cpp b/src/libs/valgrind/xmlprotocol/announcethread.cpp index 2b96f348b7d5b45c8ac7524ed84c17f54139b7bb..38fbbb9dcc9c721f7609bef80a1dec35a835337b 100644 --- a/src/libs/valgrind/xmlprotocol/announcethread.cpp +++ b/src/libs/valgrind/xmlprotocol/announcethread.cpp @@ -36,8 +36,8 @@ #include "announcethread.h" #include "frame.h" -#include <QSharedData> -#include <QVector> +#include <QtCore/QSharedData> +#include <QtCore/QVector> #include <algorithm> diff --git a/src/libs/valgrind/xmlprotocol/announcethread.h b/src/libs/valgrind/xmlprotocol/announcethread.h index 8c170efc45542f45c3a68a1ebc445ec0846c2823..2b0f910e96f45cd766359df5291eacd2cb4738f2 100644 --- a/src/libs/valgrind/xmlprotocol/announcethread.h +++ b/src/libs/valgrind/xmlprotocol/announcethread.h @@ -38,7 +38,7 @@ #include "../valgrind_global.h" -#include <QSharedDataPointer> +#include <QtCore/QSharedDataPointer> QT_BEGIN_NAMESPACE template <typename T> class QVector; diff --git a/src/libs/valgrind/xmlprotocol/error.cpp b/src/libs/valgrind/xmlprotocol/error.cpp index c05869c9325a6a8f54925c42822535256ac92966..6b43f4bf7986c8dfd1fc05413b9f3ede000c9990 100644 --- a/src/libs/valgrind/xmlprotocol/error.cpp +++ b/src/libs/valgrind/xmlprotocol/error.cpp @@ -38,12 +38,12 @@ #include "stack.h" #include "suppression.h" -#include <QSharedData> -#include <QString> -#include <QTextStream> -#include <QVector> +#include <QtCore/QSharedData> +#include <QtCore/QString> +#include <QtCore/QTextStream> +#include <QtCore/QVector> -#include <QtAlgorithms> +#include <QtCore/QtAlgorithms> using namespace Valgrind; using namespace Valgrind::XmlProtocol; diff --git a/src/libs/valgrind/xmlprotocol/error.h b/src/libs/valgrind/xmlprotocol/error.h index eabe1c75fa951eedf3dbadf91099986aa72c5ff5..ae2e20ac701c36b702b44e93374faced6a247b9d 100644 --- a/src/libs/valgrind/xmlprotocol/error.h +++ b/src/libs/valgrind/xmlprotocol/error.h @@ -38,8 +38,8 @@ #include "../valgrind_global.h" -#include <QMetaType> -#include <QSharedDataPointer> +#include <QtCore/QMetaType> +#include <QtCore/QSharedDataPointer> QT_BEGIN_NAMESPACE class QString; diff --git a/src/libs/valgrind/xmlprotocol/errorlistmodel.cpp b/src/libs/valgrind/xmlprotocol/errorlistmodel.cpp index 599d52f08321e87c9c19a3f81b6b4dea3354b141..2c617c7129fc37c9ab9a8bf36a9403c5cd7c3897 100644 --- a/src/libs/valgrind/xmlprotocol/errorlistmodel.cpp +++ b/src/libs/valgrind/xmlprotocol/errorlistmodel.cpp @@ -40,8 +40,8 @@ #include "modelhelpers.h" #include <utils/qtcassert.h> -#include <QDir> -#include <QVector> +#include <QtCore/QDir> +#include <QtCore/QVector> using namespace Valgrind; using namespace Valgrind::XmlProtocol; diff --git a/src/libs/valgrind/xmlprotocol/errorlistmodel.h b/src/libs/valgrind/xmlprotocol/errorlistmodel.h index ddf5296c766248fcb4732bbe2273cefc60cbc66b..51a953011ff9744af130c98d53f518cea805fe53 100644 --- a/src/libs/valgrind/xmlprotocol/errorlistmodel.h +++ b/src/libs/valgrind/xmlprotocol/errorlistmodel.h @@ -38,8 +38,8 @@ #include "../valgrind_global.h" -#include <QAbstractItemModel> -#include <QSharedPointer> +#include <QtCore/QAbstractItemModel> +#include <QtCore/QSharedPointer> namespace Valgrind { namespace XmlProtocol { diff --git a/src/libs/valgrind/xmlprotocol/frame.cpp b/src/libs/valgrind/xmlprotocol/frame.cpp index da2e5c40df35efde6b03ce9591b8e928ab07f4a6..c2a3f14b21ed1c25b9c2cdcd0ff1242e8cf969b1 100644 --- a/src/libs/valgrind/xmlprotocol/frame.cpp +++ b/src/libs/valgrind/xmlprotocol/frame.cpp @@ -35,9 +35,8 @@ #include "frame.h" -#include <QString> - -#include <QtAlgorithms> +#include <QtCore/QString> +#include <QtCore/QtAlgorithms> using namespace Valgrind; using namespace Valgrind::XmlProtocol; diff --git a/src/libs/valgrind/xmlprotocol/frame.h b/src/libs/valgrind/xmlprotocol/frame.h index 2dd36cc336041392ce822863fd0693989cab7c16..ab149c1dfc5ecca8d2e9fb4d8893387e71a8e6e2 100644 --- a/src/libs/valgrind/xmlprotocol/frame.h +++ b/src/libs/valgrind/xmlprotocol/frame.h @@ -38,7 +38,7 @@ #include "../valgrind_global.h" -#include <QSharedDataPointer> +#include <QtCore/QSharedDataPointer> namespace Valgrind { namespace XmlProtocol { diff --git a/src/libs/valgrind/xmlprotocol/stack.cpp b/src/libs/valgrind/xmlprotocol/stack.cpp index 55141b92086dd6a324f6276688154b48f2b87a8a..406bc1cd637ebbf3c550e84e4dc7efb49a83b702 100644 --- a/src/libs/valgrind/xmlprotocol/stack.cpp +++ b/src/libs/valgrind/xmlprotocol/stack.cpp @@ -36,9 +36,9 @@ #include "stack.h" #include "frame.h" -#include <QSharedData> -#include <QString> -#include <QVector> +#include <QtCore/QSharedData> +#include <QtCore/QString> +#include <QtCore/QVector> #include <algorithm> diff --git a/src/libs/valgrind/xmlprotocol/stack.h b/src/libs/valgrind/xmlprotocol/stack.h index f428191916375e92a4d371edcc03d8ad211ca3ad..630b493b184937c15dfaeace8775b25493ae6e27 100644 --- a/src/libs/valgrind/xmlprotocol/stack.h +++ b/src/libs/valgrind/xmlprotocol/stack.h @@ -38,7 +38,7 @@ #include "../valgrind_global.h" -#include <QSharedDataPointer> +#include <QtCore/QSharedDataPointer> QT_BEGIN_NAMESPACE template <typename T> class QVector; diff --git a/src/libs/valgrind/xmlprotocol/stackmodel.cpp b/src/libs/valgrind/xmlprotocol/stackmodel.cpp index 0404b513c483b8fc8ec1c2321cf256a74e0d9b75..795a0ce5bdea9257c9f851d8999e0a910ee448fb 100644 --- a/src/libs/valgrind/xmlprotocol/stackmodel.cpp +++ b/src/libs/valgrind/xmlprotocol/stackmodel.cpp @@ -37,11 +37,12 @@ #include "error.h" #include "frame.h" #include "stack.h" +#include "modelhelpers.h" + #include <utils/qtcassert.h> -#include <QDir> -#include <QVector> -#include "modelhelpers.h" +#include <QtCore/QDir> +#include <QtCore/QVector> using namespace Valgrind; using namespace Valgrind::XmlProtocol; diff --git a/src/libs/valgrind/xmlprotocol/stackmodel.h b/src/libs/valgrind/xmlprotocol/stackmodel.h index b04ad972ba994c738733488e67c512d5307c22e8..f813ab2dc83160b07fd0e8a4925a0fcb9ef0ecb9 100644 --- a/src/libs/valgrind/xmlprotocol/stackmodel.h +++ b/src/libs/valgrind/xmlprotocol/stackmodel.h @@ -38,7 +38,7 @@ #include "../valgrind_global.h" -#include <QAbstractItemModel> +#include <QtCore/QAbstractItemModel> namespace Valgrind { namespace XmlProtocol { diff --git a/src/libs/valgrind/xmlprotocol/status.cpp b/src/libs/valgrind/xmlprotocol/status.cpp index 8dfe205e6b09ff221d7641b8c87cf564565cea00..a5b9cbff2c0c467785e99611c96fc9d8144e808a 100644 --- a/src/libs/valgrind/xmlprotocol/status.cpp +++ b/src/libs/valgrind/xmlprotocol/status.cpp @@ -35,8 +35,8 @@ #include "status.h" -#include <QSharedData> -#include <QString> +#include <QtCore/QSharedData> +#include <QtCore/QString> using namespace Valgrind; using namespace Valgrind::XmlProtocol; diff --git a/src/libs/valgrind/xmlprotocol/status.h b/src/libs/valgrind/xmlprotocol/status.h index fb88aa53e628f1bbcade6086f1e94d8cf9fd6c3e..9b72fd4e390e225e95d3fc5dcd492346224451c7 100644 --- a/src/libs/valgrind/xmlprotocol/status.h +++ b/src/libs/valgrind/xmlprotocol/status.h @@ -38,8 +38,8 @@ #include "../valgrind_global.h" -#include <QMetaType> -#include <QSharedDataPointer> +#include <QtCore/QMetaType> +#include <QtCore/QSharedDataPointer> QT_BEGIN_NAMESPACE class QString; diff --git a/src/libs/valgrind/xmlprotocol/suppression.cpp b/src/libs/valgrind/xmlprotocol/suppression.cpp index 17306a97e8a2ad16690e342d6ddde78429e08e29..00439069dc70dcc79f78228159d085d092f71b23 100644 --- a/src/libs/valgrind/xmlprotocol/suppression.cpp +++ b/src/libs/valgrind/xmlprotocol/suppression.cpp @@ -35,10 +35,10 @@ #include "suppression.h" -#include <QSharedData> -#include <QString> -#include <QVector> -#include <QTextStream> +#include <QtCore/QSharedData> +#include <QtCore/QString> +#include <QtCore/QVector> +#include <QtCore/QTextStream> #include <algorithm> diff --git a/src/libs/valgrind/xmlprotocol/suppression.h b/src/libs/valgrind/xmlprotocol/suppression.h index ab896a4ab4923aa47bb5225faaed628c9fea49d6..83d7998d8907671c42ec1b289528ad9c7f341ba3 100644 --- a/src/libs/valgrind/xmlprotocol/suppression.h +++ b/src/libs/valgrind/xmlprotocol/suppression.h @@ -38,7 +38,7 @@ #include "../valgrind_global.h" -#include <QSharedDataPointer> +#include <QtCore/QSharedDataPointer> QT_BEGIN_NAMESPACE class QString; diff --git a/src/libs/valgrind/xmlprotocol/threadedparser.cpp b/src/libs/valgrind/xmlprotocol/threadedparser.cpp index 79e089207dbf3b6604bbfc77978b8ee5f7abca70..4062445e17d0e33bce63fc6861025579622b2259 100644 --- a/src/libs/valgrind/xmlprotocol/threadedparser.cpp +++ b/src/libs/valgrind/xmlprotocol/threadedparser.cpp @@ -41,9 +41,9 @@ #include "suppression.h" #include <utils/qtcassert.h> -#include <QMetaType> -#include <QThread> -#include <QSharedPointer> +#include <QtCore/QMetaType> +#include <QtCore/QThread> +#include <QtCore/QSharedPointer> using namespace Valgrind; using namespace Valgrind::XmlProtocol; diff --git a/src/libs/valgrind/xmlprotocol/threadedparser.h b/src/libs/valgrind/xmlprotocol/threadedparser.h index ea06c729e848b6a408b7377259b97c78e024dbe0..0cbc59cb3f0b2876c14506a97b02ddece7d2e729 100644 --- a/src/libs/valgrind/xmlprotocol/threadedparser.h +++ b/src/libs/valgrind/xmlprotocol/threadedparser.h @@ -38,7 +38,7 @@ #include "../valgrind_global.h" -#include <QObject> +#include <QtCore/QObject> QT_BEGIN_NAMESPACE class QIODevice; diff --git a/src/plugins/analyzerbase/analyzerconstants.h b/src/plugins/analyzerbase/analyzerconstants.h index 6c89899b65d233d5e76c099f13d536f95e09b2b0..ee40095ef97ff6925b4a9d57d37470e4f4008e45 100644 --- a/src/plugins/analyzerbase/analyzerconstants.h +++ b/src/plugins/analyzerbase/analyzerconstants.h @@ -36,14 +36,14 @@ #ifndef ANALYZERCONSTANTS_H #define ANALYZERCONSTANTS_H -#include <QtGlobal> +#include <QtCore/QtGlobal> namespace Analyzer { namespace Constants { // modes and their priorities const char * const MODE_ANALYZE = "Analyzer.Mode.Analyze"; -const int P_MODE_ANALYZE = 60; +const int P_MODE_ANALYZE = 76; // context const char * const C_ANALYZEMODE = "Analyzer.AnalyzeMode"; diff --git a/src/plugins/analyzerbase/analyzermanager.cpp b/src/plugins/analyzerbase/analyzermanager.cpp index 165849576af12435811f2e183f02e63f159ff040..13c807cd2e4c6f4f4c73fe40e667d55940da0237 100644 --- a/src/plugins/analyzerbase/analyzermanager.cpp +++ b/src/plugins/analyzerbase/analyzermanager.cpp @@ -34,6 +34,7 @@ **************************************************************************/ #include "analyzermanager.h" +#include "analyzerconstants.h" #include "ianalyzertool.h" #include "analyzerplugin.h" @@ -51,6 +52,9 @@ #include <coreplugin/actionmanager/actioncontainer.h> #include <coreplugin/icore.h> #include <coreplugin/uniqueidmanager.h> +#include <coreplugin/coreconstants.h> +#include <coreplugin/editormanager/editormanager.h> +#include <coreplugin/imode.h> #include <projectexplorer/projectexplorerconstants.h> #include <projectexplorer/projectexplorer.h> @@ -69,23 +73,22 @@ #include <cmakeprojectmanager/cmakeprojectconstants.h> #include <qt4projectmanager/qt4projectmanagerconstants.h> -#include <QHBoxLayout> -#include <QVBoxLayout> -#include <QDockWidget> -#include <QVariant> -#include <QAction> -#include <QMenu> -#include <QMenuBar> -#include <QToolButton> -#include <QComboBox> -#include <QStackedWidget> -#include <QDebug> -#include <QDialog> -#include <QApplication> -#include <QLabel> -#include <QCheckBox> -#include <QDialogButtonBox> - +#include <QtCore/QVariant> +#include <QtCore/QDebug> +#include <QtGui/QHBoxLayout> +#include <QtGui/QVBoxLayout> +#include <QtGui/QDockWidget> +#include <QtGui/QAction> +#include <QtGui/QMenu> +#include <QtGui/QMenuBar> +#include <QtGui/QToolButton> +#include <QtGui/QComboBox> +#include <QtGui/QStackedWidget> +#include <QtGui/QDialog> +#include <QtGui/QApplication> +#include <QtGui/QLabel> +#include <QtGui/QCheckBox> +#include <QtGui/QDialogButtonBox> using namespace Core; using namespace Analyzer; @@ -94,6 +97,20 @@ using namespace Analyzer::Internal; namespace Analyzer { namespace Internal { +class DockWidgetEventFilter : public QObject +{ + Q_OBJECT + +public: + explicit DockWidgetEventFilter(QObject *parent = 0) : QObject(parent) {} + +signals: + void widgetResized(); + +protected: + virtual bool eventFilter(QObject *obj, QEvent *event); +}; + bool DockWidgetEventFilter::eventFilter(QObject *obj, QEvent *event) { switch (event->type()) { @@ -109,6 +126,44 @@ bool DockWidgetEventFilter::eventFilter(QObject *obj, QEvent *event) // AnalyzerMode //////////////////////////////////////////////////// +class AnalyzerMode : public Core::IMode +{ + Q_OBJECT + +public: + AnalyzerMode(QObject *parent = 0) + : Core::IMode(parent) + , m_widget(0) + {} + + ~AnalyzerMode() + { + // Make sure the editor manager does not get deleted. + if (m_widget) { + delete m_widget; + m_widget = 0; + } + Core::EditorManager::instance()->setParent(0); + } + + QString displayName() const { return tr("Analyze"); } + QIcon icon() const { return QIcon(":/images/analyzer_mode.png"); } + int priority() const { return Constants::P_MODE_ANALYZE; } + QWidget *widget() { return m_widget; } + QString id() const { return QLatin1String(Constants::MODE_ANALYZE); } + QString type() const { return Core::Constants::MODE_EDIT_TYPE; } + Core::Context context() const + { + return Core::Context(Core::Constants::C_EDITORMANAGER, Constants::C_ANALYZEMODE, + Core::Constants::C_NAVIGATION_PANE); + } + QString contextHelpId() const { return QString(); } + void setWidget(QWidget *widget) { m_widget = widget; } + +private: + QWidget *m_widget; +}; + } // namespace Internal } // namespace Analyzer @@ -181,8 +236,8 @@ AnalyzerManager::AnalyzerManagerPrivate::AnalyzerManagerPrivate(AnalyzerManager { m_runControlFactory = new AnalyzerRunControlFactory(); AnalyzerPlugin::instance()->addAutoReleasedObject(m_runControlFactory); - connect(m_runControlFactory, SIGNAL(runControlCreated(AnalyzerRunControl *)), - q, SLOT(runControlCreated(AnalyzerRunControl *))); + connect(m_runControlFactory, SIGNAL(runControlCreated(Analyzer::Internal::AnalyzerRunControl *)), + q, SLOT(runControlCreated(Analyzer::Internal::AnalyzerRunControl *))); setupActions(); } @@ -699,3 +754,5 @@ void AnalyzerManager::updateRunActions() bool startEnabled = !d->m_currentRunControl && pe->canRun(project, Constants::MODE_ANALYZE); d->m_startAction->setEnabled(startEnabled); } + +#include "analyzermanager.moc" diff --git a/src/plugins/analyzerbase/analyzermanager.h b/src/plugins/analyzerbase/analyzermanager.h index 2e7c3b88ce5600fd13c0f7f1da3b931d40dd3b66..b89359c46eb2a3361b8cd72d1f658a5ab278b8df 100644 --- a/src/plugins/analyzerbase/analyzermanager.h +++ b/src/plugins/analyzerbase/analyzermanager.h @@ -37,14 +37,8 @@ #define ANALYZERMANAGER_H #include "analyzerbase_global.h" -#include "analyzerconstants.h" -#include <coreplugin/coreconstants.h> -#include <coreplugin/editormanager/editormanager.h> -#include <coreplugin/imode.h> - -#include <QObject> -#include <QIcon> +#include <QtCore/QObject> QT_BEGIN_NAMESPACE class QAction; @@ -60,68 +54,10 @@ class FancyMainWindow; } namespace Analyzer { - class IAnalyzerTool; - namespace Internal { - class AnalyzerRunControl; - -class DockWidgetEventFilter : public QObject -{ - Q_OBJECT - -public: - explicit DockWidgetEventFilter(QObject *parent = 0) : QObject(parent) {} - -signals: - void widgetResized(); - -protected: - virtual bool eventFilter(QObject *obj, QEvent *event); -}; - -class AnalyzerMode : public Core::IMode -{ - Q_OBJECT - -public: - AnalyzerMode(QObject *parent = 0) - : Core::IMode(parent) - , m_widget(0) - {} - - ~AnalyzerMode() - { - // Make sure the editor manager does not get deleted. - if (m_widget) { - delete m_widget; - m_widget = 0; - } - Core::EditorManager::instance()->setParent(0); - } - - QString displayName() const { return tr("Analyze"); } - QIcon icon() const { return QIcon(":/images/analyzer_mode.png"); } - int priority() const { return Constants::P_MODE_ANALYZE; } - QWidget *widget() { return m_widget; } - QString id() const { return QLatin1String(Constants::MODE_ANALYZE); } - QString type() const { return Core::Constants::MODE_EDIT_TYPE; } - Core::Context context() const - { - return Core::Context(Core::Constants::C_EDITORMANAGER, Constants::C_ANALYZEMODE, - Core::Constants::C_NAVIGATION_PANE); - } - QString contextHelpId() const { return QString(); } - void setWidget(QWidget *widget) { m_widget = widget; } - -private: - QWidget *m_widget; -}; - -} - -using Analyzer::Internal::AnalyzerRunControl; +} // namespace Internal class ANALYZER_EXPORT AnalyzerManager : public QObject { @@ -167,10 +103,10 @@ private slots: void toolSelected(int); void toolSelected(QAction *); void modeChanged(Core::IMode *mode); - void runControlCreated(AnalyzerRunControl *); + void runControlCreated(Analyzer::Internal::AnalyzerRunControl *); void resetLayout(); - void saveToolSettings(IAnalyzerTool *tool); - void loadToolSettings(IAnalyzerTool *tool); + void saveToolSettings(Analyzer::IAnalyzerTool *tool); + void loadToolSettings(Analyzer::IAnalyzerTool *tool); void updateRunActions(); private: diff --git a/src/plugins/analyzerbase/analyzeroptionspage.cpp b/src/plugins/analyzerbase/analyzeroptionspage.cpp index 127ca8de6ff95e70e2fb420b9ca5bde4abedf6d8..81f7235113340906b1c85b55a3e5dc49bc5b295c 100644 --- a/src/plugins/analyzerbase/analyzeroptionspage.cpp +++ b/src/plugins/analyzerbase/analyzeroptionspage.cpp @@ -38,14 +38,15 @@ #include "analyzeroptionspage.h" #include "analyzersettings.h" -#include <QCoreApplication> -#include <QLatin1String> -#include <QWidget> -#include <QDebug> -#include <QIcon> - #include <coreplugin/icore.h> +#include <QtCore/QCoreApplication> +#include <QtCore/QLatin1String> +#include <QtCore/QDebug> + +#include <QtGui/QIcon> +#include <QtGui/QWidget> + using namespace Analyzer; using namespace Analyzer::Internal; @@ -72,7 +73,7 @@ QString AnalyzerOptionsPage::category() const QString AnalyzerOptionsPage::displayCategory() const { - return QCoreApplication::tr("Analyzer", Constants::ANALYZER_SETTINGS_TR_CATEGORY); + return QCoreApplication::translate("Analyzer", Constants::ANALYZER_SETTINGS_TR_CATEGORY); } QIcon AnalyzerOptionsPage::categoryIcon() const diff --git a/src/plugins/analyzerbase/analyzerplugin.cpp b/src/plugins/analyzerbase/analyzerplugin.cpp index d943aa6c14f132a5c7060273a72481ed33e36e59..b202dc57c13792f18bfa7ef29c3ecaee9ae01894 100644 --- a/src/plugins/analyzerbase/analyzerplugin.cpp +++ b/src/plugins/analyzerbase/analyzerplugin.cpp @@ -45,10 +45,10 @@ #include <projectexplorer/task.h> #include <projectexplorer/taskhub.h> -#include <QtPlugin> -#include <QMessageBox> -#include <QMainWindow> -#include <QApplication> +#include <QtCore/QtPlugin> +#include <QtGui/QMessageBox> +#include <QtGui/QMainWindow> +#include <QtGui/QApplication> using namespace Analyzer; using namespace Analyzer::Internal; diff --git a/src/plugins/analyzerbase/analyzerrunconfigwidget.cpp b/src/plugins/analyzerbase/analyzerrunconfigwidget.cpp index fbe50a0bf9058166e9c95017cbdb367dd2ecd753..794b6107da147fca954cb3842f6916ba3b9d03ef 100644 --- a/src/plugins/analyzerbase/analyzerrunconfigwidget.cpp +++ b/src/plugins/analyzerbase/analyzerrunconfigwidget.cpp @@ -40,9 +40,9 @@ #include <utils/detailswidget.h> #include <utils/qtcassert.h> -#include <QDebug> -#include <QGroupBox> -#include <QVBoxLayout> +#include <QtCore/QDebug> +#include <QtGui/QGroupBox> +#include <QtGui/QVBoxLayout> using namespace Analyzer; using namespace Analyzer::Internal; @@ -82,6 +82,7 @@ void AnalyzerRunConfigWidget::setRunConfiguration(ProjectExplorer::RunConfigurat QLayout* layout = m_detailsWidget->widget()->layout(); foreach(AbstractAnalyzerSubConfig *config, settings->subConfigs()) { QGroupBox* box = new QGroupBox(config->displayName()); + Q_UNUSED(box) QWidget* widget = config->createConfigWidget(this); layout->addWidget(widget); } diff --git a/src/plugins/analyzerbase/analyzerruncontrol.cpp b/src/plugins/analyzerbase/analyzerruncontrol.cpp index eb63041c804652a26c6e16d8d1d1661a5a1bddca..e853b67570c880871ba256a450e95941e45e6204 100644 --- a/src/plugins/analyzerbase/analyzerruncontrol.cpp +++ b/src/plugins/analyzerbase/analyzerruncontrol.cpp @@ -49,10 +49,10 @@ #include <projectexplorer/taskhub.h> #include <coreplugin/ioutputpane.h> -#include <QDebug> -#include <QHBoxLayout> -#include <QLabel> -#include <QMessageBox> +#include <QtCore/QDebug> +#include <QtGui/QHBoxLayout> +#include <QtGui/QLabel> +#include <QtGui/QMessageBox> using namespace Analyzer; using namespace Analyzer::Internal; diff --git a/src/plugins/analyzerbase/analyzerruncontrol.h b/src/plugins/analyzerbase/analyzerruncontrol.h index b3948f6103b1bfeba026e8deda1cc5b8580749b8..dbb498025f793917ddede9041fb92b6d441cb59a 100644 --- a/src/plugins/analyzerbase/analyzerruncontrol.h +++ b/src/plugins/analyzerbase/analyzerruncontrol.h @@ -72,7 +72,7 @@ public: ProjectExplorer::RunConfigWidget *createConfigurationWidget(RunConfiguration *runConfiguration); signals: - void runControlCreated(AnalyzerRunControl *); + void runControlCreated(Analyzer::Internal::AnalyzerRunControl *); }; diff --git a/src/plugins/analyzerbase/analyzersettings.cpp b/src/plugins/analyzerbase/analyzersettings.cpp index aec7128e5a681851eda03d8b3e8a4a26d646b175..b456ac5b2df6266ae36e8138d2369e91e7c257eb 100644 --- a/src/plugins/analyzerbase/analyzersettings.cpp +++ b/src/plugins/analyzerbase/analyzersettings.cpp @@ -44,7 +44,7 @@ #include <valgrind/xmlprotocol/error.h> #include <utils/qtcassert.h> -#include <QSettings> +#include <QtCore/QSettings> using namespace Analyzer; using namespace Analyzer::Internal; diff --git a/src/plugins/analyzerbase/analyzersettings.h b/src/plugins/analyzerbase/analyzersettings.h index 12e0d20d93a4401c5c9ec8933a50bcc98f85ff9c..7a4641550d2193d3387e6fd4e0322b656e77220f 100644 --- a/src/plugins/analyzerbase/analyzersettings.h +++ b/src/plugins/analyzerbase/analyzersettings.h @@ -36,8 +36,8 @@ #ifndef ANALYZER_INTERNAL_ANALYZERSETTINGS_H #define ANALYZER_INTERNAL_ANALYZERSETTINGS_H -#include <QObject> -#include <QVariant> +#include <QtCore/QObject> +#include <QtCore/QVariant> #include "analyzerbase_global.h" diff --git a/src/plugins/analyzerbase/ianalyzerengine.h b/src/plugins/analyzerbase/ianalyzerengine.h index 3441075151a0c20c640c9a703e16173b670258ad..75b06dff1797d50ecb09a4051870947389d417ed 100644 --- a/src/plugins/analyzerbase/ianalyzerengine.h +++ b/src/plugins/analyzerbase/ianalyzerengine.h @@ -40,8 +40,8 @@ #include <projectexplorer/task.h> -#include <QObject> -#include <QString> +#include <QtCore/QObject> +#include <QtCore/QString> namespace ProjectExplorer { class RunConfiguration; diff --git a/src/plugins/analyzerbase/ianalyzertool.h b/src/plugins/analyzerbase/ianalyzertool.h index e069ab95072e9d475057bf12099b43e206b57945..f86b0e964a067d4787ed236ead33b98abe3a91c0 100644 --- a/src/plugins/analyzerbase/ianalyzertool.h +++ b/src/plugins/analyzerbase/ianalyzertool.h @@ -38,7 +38,7 @@ #include "analyzerbase_global.h" -#include <QObject> +#include <QtCore/QObject> namespace ProjectExplorer { class RunConfiguration; diff --git a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp index 008c4f0ae549db97a5c76afad9a0ce8401f0ea47..fa746ff3a1b19c3966793b6320b371324427343c 100644 --- a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp @@ -333,9 +333,9 @@ CMakeRunConfigurationWidget::CMakeRunConfigurationWidget(CMakeRunConfiguration * fl->addRow(tr("Arguments:"), argumentsLineEdit); m_workingDirectoryEdit = new Utils::PathChooser(); + m_workingDirectoryEdit->setExpectedKind(Utils::PathChooser::Directory); m_workingDirectoryEdit->setBaseDirectory(m_cmakeRunConfiguration->target()->project()->projectDirectory()); m_workingDirectoryEdit->setPath(m_cmakeRunConfiguration->baseWorkingDirectory()); - m_workingDirectoryEdit->setExpectedKind(Utils::PathChooser::ExistingDirectory); m_workingDirectoryEdit->setPromptDialogTitle(tr("Select Working Directory")); QToolButton *resetButton = new QToolButton(); diff --git a/src/plugins/debugger/debuggerrunner.cpp b/src/plugins/debugger/debuggerrunner.cpp index 8e89d741ae05d5fee293a827c0412d6a54adba5c..e4d9faaf3f081ed65d33ed11d796dccd89ceca4d 100644 --- a/src/plugins/debugger/debuggerrunner.cpp +++ b/src/plugins/debugger/debuggerrunner.cpp @@ -541,8 +541,14 @@ DEBUGGER_EXPORT ConfigurationCheck checkDebugConfiguration(const DebuggerStartPa #endif QList<DebuggerEngineType> usableTypes; foreach (DebuggerEngineType et, requiredTypes) - if (et & cmdLineEnabledEngines) + if (et & cmdLineEnabledEngines) { usableTypes.push_back(et); + } else { + const QString msg = DebuggerPlugin::tr("The debugger engine '%1' preferred for " + "debugging binaries of type %2 is disabled."). + arg(engineTypeName(et), sp.toolChainAbi.toString()); + debuggerCore()->showMessage(msg, LogWarning); + } if (usableTypes.isEmpty()) { result.errorMessage = DebuggerPlugin::tr("This configuration requires the debugger engine %1, which is disabled."). arg(QLatin1String(engineTypeName(usableTypes.front()))); @@ -566,6 +572,11 @@ DEBUGGER_EXPORT ConfigurationCheck checkDebugConfiguration(const DebuggerStartPa if (configurationOk) { break; } else { + const QString msg = DebuggerPlugin::tr("The debugger engine '%1' preferred " + "for debugging binaries of type %2 is not set up correctly: %3"). + arg(engineTypeName(usableTypes.front()), sp.toolChainAbi.toString(), + result.errorDetails.isEmpty() ? QString() : result.errorDetails.back()); + debuggerCore()->showMessage(msg, LogWarning); usableTypes.pop_front(); } } diff --git a/src/plugins/debugger/gdb/codagdbadapter.cpp b/src/plugins/debugger/gdb/codagdbadapter.cpp index 57f5181721a7ae8d8ee6c95fe9ea8b458626bd4a..69196ca3800c7f1df97c19df4e51b1d70ce0b0eb 100644 --- a/src/plugins/debugger/gdb/codagdbadapter.cpp +++ b/src/plugins/debugger/gdb/codagdbadapter.cpp @@ -1036,7 +1036,7 @@ void CodaGdbAdapter::startAdapter() QSharedPointer<QTcpSocket> codaSocket; if (parameters.communicationChannel == DebuggerStartParameters::CommunicationChannelTcpIp) { - m_codaDevice = QSharedPointer<CodaDevice>(new CodaDevice); + m_codaDevice = QSharedPointer<CodaDevice>(new CodaDevice, &CodaDevice::deleteLater); setupTrkDeviceSignals(); codaSocket = QSharedPointer<QTcpSocket>(new QTcpSocket); m_codaDevice->setDevice(codaSocket); diff --git a/src/plugins/memcheck/memcheckconfigwidget.cpp b/src/plugins/memcheck/memcheckconfigwidget.cpp index 27aed4887d05d6204ed8d58a2a0b89afc83da4f8..a60f452a3de72591de27c7bc3eafe2f153ab9428 100644 --- a/src/plugins/memcheck/memcheckconfigwidget.cpp +++ b/src/plugins/memcheck/memcheckconfigwidget.cpp @@ -41,9 +41,9 @@ #include <utils/qtcassert.h> -#include <QStandardItemModel> -#include <QFileDialog> -#include <QDebug> +#include <QtGui/QStandardItemModel> +#include <QtGui/QFileDialog> +#include <QtCore/QDebug> using namespace Analyzer::Internal; diff --git a/src/plugins/memcheck/memcheckconfigwidget.h b/src/plugins/memcheck/memcheckconfigwidget.h index e1c1f9794144632e6966f24292fb63feab7a4dac..a62ffc5dd4811ad81b7420a36e57d5e9202a997f 100644 --- a/src/plugins/memcheck/memcheckconfigwidget.h +++ b/src/plugins/memcheck/memcheckconfigwidget.h @@ -37,7 +37,7 @@ #ifndef ANALYZER_INTERNAL_MEMCHECKCONFIGWIDGET_H #define ANALYZER_INTERNAL_MEMCHECKCONFIGWIDGET_H -#include <QWidget> +#include <QtGui/QWidget> QT_BEGIN_NAMESPACE class QStandardItemModel; diff --git a/src/plugins/memcheck/memcheckerrorview.cpp b/src/plugins/memcheck/memcheckerrorview.cpp index 3565baebfcf3afeb2ab9957eab715e211c0c2bb5..d5c262cc8130a096d665b56f07ea0ced56be0a24 100644 --- a/src/plugins/memcheck/memcheckerrorview.cpp +++ b/src/plugins/memcheck/memcheckerrorview.cpp @@ -152,7 +152,7 @@ static QString makeFrameName(const Frame &frame, const QString &relativeTo, } if (!fn.isEmpty()) - return QCoreApplication::tr("Analyzer::Internal", "%1 in %2").arg(Qt::escape(fn), path); + return QCoreApplication::translate("Analyzer::Internal", "%1 in %2").arg(Qt::escape(fn), path); else if (!path.isEmpty()) return path; else @@ -183,7 +183,7 @@ QString errorLocation(const QModelIndex &index, const Error &error, }; QTC_ASSERT(model, return QString()); - return QCoreApplication::tr("Analyzer::Internal", "in %1"). + return QCoreApplication::translate("Analyzer::Internal", "in %1"). arg(makeFrameName(model->findRelevantFrame(error), relativeToPath(), link, linkAttr)); } diff --git a/src/plugins/memcheck/memcheckplugin.cpp b/src/plugins/memcheck/memcheckplugin.cpp index d39f68d0d90cf9400cf84f16c486f6b99eb630ac..da888fc14954fed1b87052982d3680b5c231dac2 100644 --- a/src/plugins/memcheck/memcheckplugin.cpp +++ b/src/plugins/memcheck/memcheckplugin.cpp @@ -41,8 +41,8 @@ #include "memchecktool.h" #include "memchecksettings.h" -#include <QStringList> -#include <QtPlugin> +#include <QtCore/QStringList> +#include <QtCore/QtPlugin> using namespace Analyzer; using namespace Analyzer::Internal; @@ -73,4 +73,4 @@ void MemcheckPlugin::extensionsInitialized() } -Q_EXPORT_PLUGIN(MemcheckPlugin) \ No newline at end of file +Q_EXPORT_PLUGIN(MemcheckPlugin) diff --git a/src/plugins/memcheck/memchecktool.cpp b/src/plugins/memcheck/memchecktool.cpp index 4b79e7a13ca7353401dfdaa4b0ad360f135aa3fb..3240c8a1ff279710cac72b0f63d3e21815f4c01b 100644 --- a/src/plugins/memcheck/memchecktool.cpp +++ b/src/plugins/memcheck/memchecktool.cpp @@ -73,21 +73,22 @@ #include <utils/styledbar.h> #include <utils/qtcassert.h> -#include <QString> -#include <QLatin1String> -#include <QFileInfo> -#include <QDockWidget> -#include <QFile> -#include <QDir> -#include <QHBoxLayout> -#include <QComboBox> -#include <QLabel> -#include <QSpinBox> -#include <QAction> -#include <QMenu> -#include <QMessageBox> -#include <QToolButton> -#include <QCheckBox> +#include <QtCore/QString> +#include <QtCore/QLatin1String> +#include <QtCore/QFileInfo> +#include <QtCore/QFile> +#include <QtCore/QDir> + +#include <QtGui/QDockWidget> +#include <QtGui/QHBoxLayout> +#include <QtGui/QComboBox> +#include <QtGui/QLabel> +#include <QtGui/QSpinBox> +#include <QtGui/QAction> +#include <QtGui/QMenu> +#include <QtGui/QMessageBox> +#include <QtGui/QToolButton> +#include <QtGui/QCheckBox> #include <utils/stylehelper.h> using namespace Analyzer; diff --git a/src/plugins/memcheck/memchecktool.h b/src/plugins/memcheck/memchecktool.h index 547fb14cfae473efdb628d3b335593c86758e6ab..1aa26068fe1701b4b17972bb71361c629b873048 100644 --- a/src/plugins/memcheck/memchecktool.h +++ b/src/plugins/memcheck/memchecktool.h @@ -38,8 +38,8 @@ #include <analyzerbase/ianalyzertool.h> -#include <QSortFilterProxyModel> -#include <QSharedPointer> +#include <QtGui/QSortFilterProxyModel> +#include <QtCore/QSharedPointer> QT_BEGIN_NAMESPACE class QItemSelection; diff --git a/src/plugins/memcheck/suppressiondialog.cpp b/src/plugins/memcheck/suppressiondialog.cpp index 2ffb57b30b03f9a8783f95e2d27ab16b33b69cd4..dcdae5b2f238c2d7197f0a8e7b615818d0f98ba0 100644 --- a/src/plugins/memcheck/suppressiondialog.cpp +++ b/src/plugins/memcheck/suppressiondialog.cpp @@ -48,8 +48,8 @@ #include <utils/pathchooser.h> #include <utils/qtcassert.h> -#include <QFile> -#include <QPushButton> +#include <QtCore/QFile> +#include <QtGui/QPushButton> #include <valgrind/xmlprotocol/suppression.h> #include <valgrind/xmlprotocol/errorlistmodel.h> diff --git a/src/plugins/memcheck/suppressiondialog.h b/src/plugins/memcheck/suppressiondialog.h index 7223ef2b3fb34d4017574c702382c70c34790d65..72ed3aaa96d1dd9e47af6f51f78ef8ef8914d17d 100644 --- a/src/plugins/memcheck/suppressiondialog.h +++ b/src/plugins/memcheck/suppressiondialog.h @@ -37,7 +37,7 @@ #ifndef ANALYZER_VALGRIND_INTERNAL_SUPPRESSIONDIALOG_H #define ANALYZER_VALGRIND_INTERNAL_SUPPRESSIONDIALOG_H -#include <QDialog> +#include <QtGui/QDialog> #include <valgrind/xmlprotocol/error.h> diff --git a/src/plugins/projectexplorer/customexecutableconfigurationwidget.cpp b/src/plugins/projectexplorer/customexecutableconfigurationwidget.cpp index 09e426790968ec2dab63c5f774b12c857b348298..e706f151b3738f0e0bebf1600563db76d1e58f40 100644 --- a/src/plugins/projectexplorer/customexecutableconfigurationwidget.cpp +++ b/src/plugins/projectexplorer/customexecutableconfigurationwidget.cpp @@ -54,21 +54,6 @@ namespace ProjectExplorer { namespace Internal { -class CustomDirectoryPathChooser : public Utils::PathChooser -{ -public: - CustomDirectoryPathChooser(QWidget *parent) - : Utils::PathChooser(parent) - { - } - virtual bool validatePath(const QString &path, QString *errorMessage = 0) - { - Q_UNUSED(path) - Q_UNUSED(errorMessage) - return true; - } -}; - CustomExecutableConfigurationWidget::CustomExecutableConfigurationWidget(CustomExecutableRunConfiguration *rc) : m_ignoreChange(false), m_runConfiguration(rc) { @@ -77,16 +62,16 @@ CustomExecutableConfigurationWidget::CustomExecutableConfigurationWidget(CustomE layout->setMargin(0); m_executableChooser = new Utils::PathChooser(this); - m_executableChooser->setEnvironment(rc->environment()); m_executableChooser->setExpectedKind(Utils::PathChooser::Command); + m_executableChooser->setEnvironment(rc->environment()); layout->addRow(tr("Executable:"), m_executableChooser); m_commandLineArgumentsLineEdit = new QLineEdit(this); m_commandLineArgumentsLineEdit->setMinimumWidth(200); // this shouldn't be fixed here... layout->addRow(tr("Arguments:"), m_commandLineArgumentsLineEdit); - m_workingDirectory = new CustomDirectoryPathChooser(this); - m_workingDirectory->setExpectedKind(Utils::PathChooser::ExistingDirectory); + m_workingDirectory = new Utils::PathChooser(this); + m_workingDirectory->setExpectedKind(Utils::PathChooser::Directory); m_workingDirectory->setBaseDirectory(rc->target()->project()->projectDirectory()); m_workingDirectory->setEnvironment(rc->environment()); layout->addRow(tr("Working directory:"), m_workingDirectory); diff --git a/src/plugins/projectexplorer/processstep.cpp b/src/plugins/projectexplorer/processstep.cpp index bfe666920f7d3364eaead2438d70edeeb9cb5e88..55eea5895dfc2b353b73cf9e266999ff09929199 100644 --- a/src/plugins/projectexplorer/processstep.cpp +++ b/src/plugins/projectexplorer/processstep.cpp @@ -258,7 +258,7 @@ ProcessStepConfigWidget::ProcessStepConfigWidget(ProcessStep *step) : m_step(step) { m_ui.setupUi(this); - m_ui.command->setExpectedKind(Utils::PathChooser::ExistingCommand); + m_ui.command->setExpectedKind(Utils::PathChooser::Command); connect(m_ui.command, SIGNAL(changed(QString)), this, SLOT(commandLineEditTextEdited())); connect(m_ui.workingDirectory, SIGNAL(changed(QString)), diff --git a/src/plugins/projectexplorer/toolchainconfigwidget.cpp b/src/plugins/projectexplorer/toolchainconfigwidget.cpp index 70a1c460231ce78d0e0b100f45485615b9ddc9b3..7efa4bb69ab36cf0d670c94c672b13bbe094d551 100644 --- a/src/plugins/projectexplorer/toolchainconfigwidget.cpp +++ b/src/plugins/projectexplorer/toolchainconfigwidget.cpp @@ -111,9 +111,9 @@ void ToolChainConfigWidget::ensureDebuggerPathChooser(const QStringList &version if (m_d->m_debuggerPathChooser) return; m_d->m_debuggerPathChooser = new Utils::PathChooser; + m_d->m_debuggerPathChooser->setExpectedKind(Utils::PathChooser::ExistingCommand); if (!versionArguments.isEmpty()) m_d->m_debuggerPathChooser->setCommandVersionArguments(versionArguments); - m_d->m_debuggerPathChooser->setExpectedKind(Utils::PathChooser::ExistingCommand); connect(m_d->m_debuggerPathChooser, SIGNAL(changed(QString)), this, SLOT(emitDirty())); } diff --git a/src/plugins/qt4projectmanager/qt-desktop/qt4runconfiguration.cpp b/src/plugins/qt4projectmanager/qt-desktop/qt4runconfiguration.cpp index fca73a1a21ab1cc83cccde38f8629d0db627ad71..546788ac78fb8cc522f09118ccab7a2c21b42e87 100644 --- a/src/plugins/qt4projectmanager/qt-desktop/qt4runconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt-desktop/qt4runconfiguration.cpp @@ -214,9 +214,9 @@ Qt4RunConfigurationWidget::Qt4RunConfigurationWidget(Qt4RunConfiguration *qt4Run toplayout->addRow(argumentsLabel, m_argumentsLineEdit); m_workingDirectoryEdit = new Utils::PathChooser(this); + m_workingDirectoryEdit->setExpectedKind(Utils::PathChooser::Directory); m_workingDirectoryEdit->setPath(m_qt4RunConfiguration->baseWorkingDirectory()); m_workingDirectoryEdit->setBaseDirectory(m_qt4RunConfiguration->target()->project()->projectDirectory()); - m_workingDirectoryEdit->setExpectedKind(Utils::PathChooser::ExistingDirectory); m_workingDirectoryEdit->setEnvironment(m_qt4RunConfiguration->environment()); m_workingDirectoryEdit->setPromptDialogTitle(tr("Select Working Directory")); diff --git a/src/plugins/qt4projectmanager/qt-s60/s60deployconfigurationwidget.cpp b/src/plugins/qt4projectmanager/qt-s60/s60deployconfigurationwidget.cpp index dc2abbdc0373e637cf8f23f28007b4d8dd51f654..a09beb886b91a9794bd0f1850e79c59359781788 100644 --- a/src/plugins/qt4projectmanager/qt-s60/s60deployconfigurationwidget.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/s60deployconfigurationwidget.cpp @@ -43,6 +43,9 @@ #include <symbianutils/symbiandevicemanager.h> #include <codadevice.h> +#include <coreplugin/helpmanager.h> + +#include "codaruncontrol.h" #include "trkruncontrol.h" #include <utils/detailswidget.h> @@ -51,6 +54,7 @@ #include <utils/pathchooser.h> #include <QtCore/QDir> +#include <QtCore/QTimer> #include <QtGui/QLabel> #include <QtGui/QLineEdit> #include <QtGui/QComboBox> @@ -137,7 +141,9 @@ S60DeployConfigurationWidget::S60DeployConfigurationWidget(QWidget *parent) m_wlanRadioButton(new QRadioButton(tr("WLAN:"))), m_ipAddress(new Utils::IpAddressLineEdit), m_trkRadioButton(new QRadioButton(tr("TRK"))), - m_codaRadioButton(new QRadioButton(tr("CODA"))) + m_codaRadioButton(new QRadioButton(tr("CODA"))), + m_codaInfoLabel(new QLabel(tr("<a href=\"qthelp://com.nokia.qtcreator/doc/creator-developing-symbian.html\">What are the prerequisites?</a>"))), + m_codaTimeout(new QTimer(this)) { } @@ -192,7 +198,11 @@ void S60DeployConfigurationWidget::init(ProjectExplorer::DeployConfiguration *dc this, SLOT(updateSerialDevices())); //Debug Client + QVBoxLayout *debugClientContentVBoxLayout = new QVBoxLayout; + debugClientContentVBoxLayout->addWidget(m_codaInfoLabel); + QHBoxLayout *debugClientHBoxLayout = new QHBoxLayout; + debugClientContentVBoxLayout->addLayout(debugClientHBoxLayout); QVBoxLayout *debugClientVBoxLayout = new QVBoxLayout; debugClientVBoxLayout->addWidget(m_trkRadioButton); @@ -206,7 +216,7 @@ void S60DeployConfigurationWidget::init(ProjectExplorer::DeployConfiguration *dc debugClientHBoxLayout->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Ignored)); QGroupBox *debugClientGroupBox = new QGroupBox(tr("Device Agent")); - debugClientGroupBox->setLayout(debugClientHBoxLayout); + debugClientGroupBox->setLayout(debugClientContentVBoxLayout); bool usingTrk = m_deployConfiguration->communicationChannel() == S60DeployConfiguration::CommunicationTrkSerialConnection; m_trkRadioButton->setChecked(usingTrk); @@ -218,6 +228,8 @@ void S60DeployConfigurationWidget::init(ProjectExplorer::DeployConfiguration *dc connect(m_trkRadioButton, SIGNAL(clicked()), this, SLOT(updateCommunicationChannel())); connect(m_codaRadioButton, SIGNAL(clicked()), this, SLOT(updateCommunicationChannel())); + connect(m_codaInfoLabel, SIGNAL(linkActivated(QString)), + Core::HelpManager::instance(), SLOT(handleHelpRequest(QString))); formLayout->addRow(debugClientGroupBox); @@ -239,6 +251,9 @@ void S60DeployConfigurationWidget::init(ProjectExplorer::DeployConfiguration *dc this, SLOT(updateInstallationDrives())); connect(this, SIGNAL(infoCollected()), this, SLOT(collectingInfoFinished())); + + m_codaTimeout->setSingleShot(true); + connect(m_codaTimeout, SIGNAL(timeout()), this, SLOT(codaTimeout())); } QWidget *S60DeployConfigurationWidget::createCommunicationChannel() @@ -274,8 +289,8 @@ QWidget *S60DeployConfigurationWidget::createCommunicationChannel() if(!m_deployConfiguration->deviceAddress().isEmpty()) m_ipAddress->setText(QString("%1:%2") - .arg(m_deployConfiguration->deviceAddress()) - .arg(m_deployConfiguration->devicePort())); + .arg(m_deployConfiguration->deviceAddress()) + .arg(m_deployConfiguration->devicePort())); QHBoxLayout *wlanChannelLayout = new QHBoxLayout(); wlanChannelLayout->addWidget(new QLabel(tr("Address:"))); @@ -473,7 +488,7 @@ void S60DeployConfigurationWidget::slotLauncherStateChanged(int s) connect(mb, SIGNAL(finished(int)), this, SLOT(slotWaitingForTrkClosed())); mb->open(); } - break; + break; case trk::Launcher::DeviceDescriptionReceived: // All ok, done setDeviceInfoLabel(m_infoLauncher->deviceDescription()); m_deviceInfoButton->setEnabled(true); @@ -544,6 +559,7 @@ void S60DeployConfigurationWidget::updateDeviceInfo() //TODO error handling - for now just throw the command at coda m_codaInfoDevice->sendSymbianOsDataGetQtVersionCommand(Coda::CodaCallback(this, &S60DeployConfigurationWidget::getQtVersionCommandResult)); m_deviceInfoButton->setEnabled(false); + m_codaTimeout->start(1000); } else if(m_deployConfiguration->communicationChannel() == S60DeployConfiguration::CommunicationCodaTcpConnection) { // collectingInfoFinished, which deletes m_codaDevice, can get called from within a coda callback, so need to use deleteLater m_codaInfoDevice = QSharedPointer<Coda::CodaDevice>(new Coda::CodaDevice, &QObject::deleteLater); @@ -554,6 +570,7 @@ void S60DeployConfigurationWidget::updateDeviceInfo() codaSocket->connectToHost(m_deployConfiguration->deviceAddress(), m_deployConfiguration->devicePort().toInt()); m_deviceInfoButton->setEnabled(false); + m_codaTimeout->start(1500); } else setDeviceInfoLabel(tr("Currently there is no information about the device for this connection type."), true); } @@ -562,7 +579,7 @@ void S60DeployConfigurationWidget::codaEvent(const Coda::CodaEvent &event) { switch (event.type()) { case Coda::CodaEvent::LocatorHello: // Commands accepted now - setDeviceInfoLabel(m_deviceInfoLabel->text() + '.'); + codaIncreaseProgress(); m_codaInfoDevice->sendSymbianOsDataGetQtVersionCommand(Coda::CodaCallback(this, &S60DeployConfigurationWidget::getQtVersionCommandResult)); break; default: @@ -570,112 +587,112 @@ void S60DeployConfigurationWidget::codaEvent(const Coda::CodaEvent &event) } } - void S60DeployConfigurationWidget::getQtVersionCommandResult(const Coda::CodaCommandResult &result) - { - setDeviceInfoLabel(m_deviceInfoLabel->text() + '.'); - m_deviceInfo.clear(); - if (result.type == Coda::CodaCommandResult::FailReply) { - setDeviceInfoLabel(tr("No device information available"), true); - SymbianUtils::SymbianDeviceManager::instance()->releaseCodaDevice(m_codaInfoDevice); - m_deviceInfoButton->setEnabled(true); - return; - } else if (result.type == Coda::CodaCommandResult::CommandErrorReply){ - startTable(m_deviceInfo); - QTextStream str(&m_deviceInfo); - addErrorToTable(str, tr("Qt version: "), tr("Not installed on device")); - finishTable(m_deviceInfo); - setDeviceInfoLabel(m_deviceInfo, false); - } else { - if (result.values.count()) { - QHash<QString, QVariant> obj = result.values[0].toVariant().toHash(); - QString ver = obj.value("qVersion").toString(); - - startTable(m_deviceInfo); - QTextStream str(&m_deviceInfo); - addToTable(str, tr("Qt version:"), ver); - QString systemVersion; - - int symVer = obj.value("symbianVersion").toInt(); - // Ugh why won't QSysInfo define these on non-symbian builds... - switch (symVer) { - case 10: - systemVersion.append("Symbian OS v9.2"); - break; - case 20: - systemVersion.append("Symbian OS v9.3"); - break; - case 30: - systemVersion.append("Symbian OS v9.4 / Symbian^1"); - break; - case 40: - systemVersion.append("Symbian^2"); - break; - case 50: - systemVersion.append("Symbian^3"); - break; - case 60: - systemVersion.append("Symbian^4"); - break; - default: - systemVersion.append(tr("Unrecognised Symbian version 0x%1").arg(symVer, 0, 16)); - break; - } - systemVersion.append(", "); - int s60Ver = obj.value("s60Version").toInt(); - switch (s60Ver) { - case 10: - systemVersion.append("S60 3rd Edition Feature Pack 1"); - break; - case 20: - systemVersion.append("S60 3rd Edition Feature Pack 2"); - break; - case 30: - systemVersion.append("S60 5th Edition"); - break; - case 40: - systemVersion.append("S60 5th Edition Feature Pack 1"); - break; - case 50: - systemVersion.append("S60 5th Edition Feature Pack 2"); - break; - default: - systemVersion.append(tr("Unrecognised S60 version 0x%1").arg(symVer, 0, 16)); - break; - } - addToTable(str, tr("OS version:"), systemVersion); - finishTable(m_deviceInfo); - } - } - m_codaInfoDevice->sendSymbianOsDataGetRomInfoCommand(Coda::CodaCallback(this, &S60DeployConfigurationWidget::getRomInfoResult)); - } - - void S60DeployConfigurationWidget::getRomInfoResult(const Coda::CodaCommandResult &result) - { - setDeviceInfoLabel(m_deviceInfoLabel->text() + '.'); - if (result.type == Coda::CodaCommandResult::SuccessReply && result.values.count()) { - startTable(m_deviceInfo); - QTextStream str(&m_deviceInfo); - - QVariantHash obj = result.values[0].toVariant().toHash(); - QString romVersion = obj.value("romVersion", tr("unknown")).toString(); - romVersion.replace('\n', " "); // The ROM string is split across multiple lines, for some reason. - addToTable(str, tr("ROM version:"), romVersion); - - QString pr = obj.value("prInfo").toString(); - if (pr.length()) - addToTable(str, tr("Release:"), pr); - finishTable(m_deviceInfo); - } - - QList<quint32> packagesOfInterest; - packagesOfInterest.append(CODA_UID); - packagesOfInterest.append(QTMOBILITY_UID); - m_codaInfoDevice->sendSymbianInstallGetPackageInfoCommand(Coda::CodaCallback(this, &S60DeployConfigurationWidget::getInstalledPackagesResult), packagesOfInterest); - } +void S60DeployConfigurationWidget::getQtVersionCommandResult(const Coda::CodaCommandResult &result) +{ + codaIncreaseProgress(); + m_deviceInfo.clear(); + if (result.type == Coda::CodaCommandResult::FailReply) { + setDeviceInfoLabel(tr("No device information available"), true); + SymbianUtils::SymbianDeviceManager::instance()->releaseCodaDevice(m_codaInfoDevice); + m_deviceInfoButton->setEnabled(true); + return; + } else if (result.type == Coda::CodaCommandResult::CommandErrorReply){ + startTable(m_deviceInfo); + QTextStream str(&m_deviceInfo); + addErrorToTable(str, tr("Qt version: "), tr("Not installed on device")); + finishTable(m_deviceInfo); + setDeviceInfoLabel(m_deviceInfo, false); + } else { + if (result.values.count()) { + QHash<QString, QVariant> obj = result.values[0].toVariant().toHash(); + QString ver = obj.value("qVersion").toString(); + + startTable(m_deviceInfo); + QTextStream str(&m_deviceInfo); + addToTable(str, tr("Qt version:"), ver); + QString systemVersion; + + int symVer = obj.value("symbianVersion").toInt(); + // Ugh why won't QSysInfo define these on non-symbian builds... + switch (symVer) { + case 10: + systemVersion.append("Symbian OS v9.2"); + break; + case 20: + systemVersion.append("Symbian OS v9.3"); + break; + case 30: + systemVersion.append("Symbian OS v9.4 / Symbian^1"); + break; + case 40: + systemVersion.append("Symbian^2"); + break; + case 50: + systemVersion.append("Symbian^3"); + break; + case 60: + systemVersion.append("Symbian^4"); + break; + default: + systemVersion.append(tr("Unrecognised Symbian version 0x%1").arg(symVer, 0, 16)); + break; + } + systemVersion.append(", "); + int s60Ver = obj.value("s60Version").toInt(); + switch (s60Ver) { + case 10: + systemVersion.append("S60 3rd Edition Feature Pack 1"); + break; + case 20: + systemVersion.append("S60 3rd Edition Feature Pack 2"); + break; + case 30: + systemVersion.append("S60 5th Edition"); + break; + case 40: + systemVersion.append("S60 5th Edition Feature Pack 1"); + break; + case 50: + systemVersion.append("S60 5th Edition Feature Pack 2"); + break; + default: + systemVersion.append(tr("Unrecognised S60 version 0x%1").arg(symVer, 0, 16)); + break; + } + addToTable(str, tr("OS version:"), systemVersion); + finishTable(m_deviceInfo); + } + } + m_codaInfoDevice->sendSymbianOsDataGetRomInfoCommand(Coda::CodaCallback(this, &S60DeployConfigurationWidget::getRomInfoResult)); +} + +void S60DeployConfigurationWidget::getRomInfoResult(const Coda::CodaCommandResult &result) +{ + codaIncreaseProgress(); + if (result.type == Coda::CodaCommandResult::SuccessReply && result.values.count()) { + startTable(m_deviceInfo); + QTextStream str(&m_deviceInfo); + + QVariantHash obj = result.values[0].toVariant().toHash(); + QString romVersion = obj.value("romVersion", tr("unknown")).toString(); + romVersion.replace('\n', " "); // The ROM string is split across multiple lines, for some reason. + addToTable(str, tr("ROM version:"), romVersion); + + QString pr = obj.value("prInfo").toString(); + if (pr.length()) + addToTable(str, tr("Release:"), pr); + finishTable(m_deviceInfo); + } + + QList<quint32> packagesOfInterest; + packagesOfInterest.append(CODA_UID); + packagesOfInterest.append(QTMOBILITY_UID); + m_codaInfoDevice->sendSymbianInstallGetPackageInfoCommand(Coda::CodaCallback(this, &S60DeployConfigurationWidget::getInstalledPackagesResult), packagesOfInterest); +} void S60DeployConfigurationWidget::getInstalledPackagesResult(const Coda::CodaCommandResult &result) { - setDeviceInfoLabel(m_deviceInfoLabel->text() + '.'); + codaIncreaseProgress(); if (result.type == Coda::CodaCommandResult::SuccessReply && result.values.count()) { startTable(m_deviceInfo); QTextStream str(&m_deviceInfo); @@ -686,32 +703,32 @@ void S60DeployConfigurationWidget::getInstalledPackagesResult(const Coda::CodaCo bool ok = false; uint uid = obj.value("uid").toString().toUInt(&ok, 16); if (ok) { - bool error = !obj.value("error").isNull(); - QString versionString; - if (!error) { - QVariantList version = obj.value("version").toList(); - versionString = QString("%1.%2.%3").arg(version[0].toInt()) - .arg(version[1].toInt()) - .arg(version[2].toInt()); - } - switch (uid) { - case CODA_UID: { - if (error) { - // How can coda not be installed? Presumably some UID wrongness... - addErrorToTable(str, tr("CODA version: "), tr("Error reading CODA version")); - } else - addToTable(str, tr("CODA version: "), versionString); - } - break; - case QTMOBILITY_UID: { - if (error) - addErrorToTable(str, tr("QtMobility version: "), tr("Error reading QtMobility version")); - else - addToTable(str, tr("QtMobility version: "), versionString); - } - break; - default: break; - } + bool error = !obj.value("error").isNull(); + QString versionString; + if (!error) { + QVariantList version = obj.value("version").toList(); + versionString = QString("%1.%2.%3").arg(version[0].toInt()) + .arg(version[1].toInt()) + .arg(version[2].toInt()); + } + switch (uid) { + case CODA_UID: { + if (error) { + // How can coda not be installed? Presumably some UID wrongness... + addErrorToTable(str, tr("CODA version: "), tr("Error reading CODA version")); + } else + addToTable(str, tr("CODA version: "), versionString); + } + break; + case QTMOBILITY_UID: { + if (error) + addErrorToTable(str, tr("QtMobility version: "), tr("Error reading QtMobility version")); + else + addToTable(str, tr("QtMobility version: "), versionString); + } + break; + default: break; + } } } finishTable(m_deviceInfo); @@ -724,38 +741,61 @@ void S60DeployConfigurationWidget::getInstalledPackagesResult(const Coda::CodaCo m_codaInfoDevice->sendSymbianOsDataGetHalInfoCommand(Coda::CodaCallback(this, &S60DeployConfigurationWidget::getHalResult), keys); } - void S60DeployConfigurationWidget::getHalResult(const Coda::CodaCommandResult &result) - { - setDeviceInfoLabel(m_deviceInfoLabel->text() + '.'); - if (result.type == Coda::CodaCommandResult::SuccessReply && result.values.count()) { - QVariantList resultsList = result.values[0].toVariant().toList(); - int x = 0; - int y = 0; - foreach (const QVariant& var, resultsList) { - QVariantHash obj = var.toHash(); - if (obj.value("name").toString() == "EDisplayXPixels") - x = obj.value("value").toInt(); - else if (obj.value("name").toString() == "EDisplayYPixels") - y = obj.value("value").toInt(); - } - if (x && y) { - startTable(m_deviceInfo); - QTextStream str(&m_deviceInfo); - addToTable(str, tr("Screen size:"), QString("%1x%2").arg(x).arg(y)); - finishTable(m_deviceInfo); - } - } - - // Done with collecting info - emit infoCollected(); - } - - void S60DeployConfigurationWidget::collectingInfoFinished() - { - m_deviceInfoButton->setEnabled(true); - setDeviceInfoLabel(m_deviceInfo); - SymbianUtils::SymbianDeviceManager::instance()->releaseCodaDevice(m_codaInfoDevice); - } +void S60DeployConfigurationWidget::getHalResult(const Coda::CodaCommandResult &result) +{ + codaIncreaseProgress(); + if (result.type == Coda::CodaCommandResult::SuccessReply && result.values.count()) { + QVariantList resultsList = result.values[0].toVariant().toList(); + int x = 0; + int y = 0; + foreach (const QVariant& var, resultsList) { + QVariantHash obj = var.toHash(); + if (obj.value("name").toString() == "EDisplayXPixels") + x = obj.value("value").toInt(); + else if (obj.value("name").toString() == "EDisplayYPixels") + y = obj.value("value").toInt(); + } + if (x && y) { + startTable(m_deviceInfo); + QTextStream str(&m_deviceInfo); + addToTable(str, tr("Screen size:"), QString("%1x%2").arg(x).arg(y)); + finishTable(m_deviceInfo); + } + } + + // Done with collecting info + emit infoCollected(); +} + +void S60DeployConfigurationWidget::codaIncreaseProgress() +{ + m_codaTimeout->start(); + setDeviceInfoLabel(m_deviceInfoLabel->text() + '.'); +} + +void S60DeployConfigurationWidget::collectingInfoFinished() +{ + m_codaTimeout->stop(); + emit codaConnected(); + m_deviceInfoButton->setEnabled(true); + setDeviceInfoLabel(m_deviceInfo); + SymbianUtils::SymbianDeviceManager::instance()->releaseCodaDevice(m_codaInfoDevice); +} + +void S60DeployConfigurationWidget::codaTimeout() +{ + QMessageBox *mb = CodaRunControl::createCodaWaitingMessageBox(this); + connect(this, SIGNAL(codaConnected()), mb, SLOT(close())); + connect(mb, SIGNAL(finished(int)), this, SLOT(codaCanceled())); + mb->open(); +} + +void S60DeployConfigurationWidget::codaCanceled() +{ + clearDeviceInfo(); + m_deviceInfoButton->setEnabled(true); + SymbianUtils::SymbianDeviceManager::instance()->releaseCodaDevice(m_codaInfoDevice); +} } // namespace Internal } // namespace Qt4ProjectManager diff --git a/src/plugins/qt4projectmanager/qt-s60/s60deployconfigurationwidget.h b/src/plugins/qt4projectmanager/qt-s60/s60deployconfigurationwidget.h index 1006b749df873c4b3aadba936a466bd6298be3ce..d80479db6e2b6dce7d3e6b2c92c2506ff808e633 100644 --- a/src/plugins/qt4projectmanager/qt-s60/s60deployconfigurationwidget.h +++ b/src/plugins/qt4projectmanager/qt-s60/s60deployconfigurationwidget.h @@ -86,6 +86,7 @@ public: signals: void infoCollected(); + void codaConnected(); private slots: void updateTargetInformation(); @@ -103,6 +104,9 @@ private slots: void cleanWlanAddress(); void codaEvent(const Coda::CodaEvent &event); void collectingInfoFinished(); + void codaTimeout(); + void codaCanceled(); + void codaIncreaseProgress(); private: inline SymbianUtils::SymbianDevice device(int i) const; @@ -132,8 +136,10 @@ private: Utils::IpAddressLineEdit *m_ipAddress; QRadioButton *m_trkRadioButton; QRadioButton *m_codaRadioButton; + QLabel *m_codaInfoLabel; QSharedPointer<Coda::CodaDevice> m_codaInfoDevice; QString m_deviceInfo; + QTimer *m_codaTimeout; }; } // namespace Internal diff --git a/src/plugins/qt4projectmanager/qt-s60/s60publisherovi.cpp b/src/plugins/qt4projectmanager/qt-s60/s60publisherovi.cpp index 93e5feb76251824ca2675c500ad733113b678d63..efd08e525b60c03f5dc306da5a945b588c25c86d 100644 --- a/src/plugins/qt4projectmanager/qt-s60/s60publisherovi.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/s60publisherovi.cpp @@ -264,9 +264,9 @@ void S60PublisherOvi::updateProFile(const QString &var, const QString &values) return; } - //todo: after ossi has added scope profile writing, make sure the following works - //QString scope("symbian"); - ProWriter::addVarValues(profile, &lines, m_qt4project->rootProjectNode()->path(), QStringList() << values, var); + ProWriter::putVarValues(profile, &lines, QStringList() << values, var, + ProWriter::ReplaceValues | ProWriter::OneLine | ProWriter::AssignOperator, + "symbian"); if (qfile.open(QIODevice::WriteOnly | QIODevice::Text)) { qfile.write(lines.join("\n").toLocal8Bit()); diff --git a/src/plugins/valgrindtoolbase/valgrindconfigwidget.cpp b/src/plugins/valgrindtoolbase/valgrindconfigwidget.cpp index 3c13f79fa7e48f6f6c1e39780cf5ec1e30ad4f4a..08f4e051ba5f9abaa4740f464c47730003ee43dc 100644 --- a/src/plugins/valgrindtoolbase/valgrindconfigwidget.cpp +++ b/src/plugins/valgrindtoolbase/valgrindconfigwidget.cpp @@ -39,7 +39,7 @@ #include "valgrindsettings.h" -#include <QDebug> +#include <QtCore/QDebug> using namespace Analyzer::Internal; diff --git a/src/plugins/valgrindtoolbase/valgrindconfigwidget.h b/src/plugins/valgrindtoolbase/valgrindconfigwidget.h index 891f7f8fbabc2cf2d1ae06ea1a4687351d5bbf86..0d95c5eb588b7f6709800dbad22dac9743790e16 100644 --- a/src/plugins/valgrindtoolbase/valgrindconfigwidget.h +++ b/src/plugins/valgrindtoolbase/valgrindconfigwidget.h @@ -37,7 +37,7 @@ #ifndef ANALYZER_INTERNAL_VALGRINDCONFIGWIDGET_H #define ANALYZER_INTERNAL_VALGRINDCONFIGWIDGET_H -#include <QWidget> +#include <QtGui/QWidget> QT_BEGIN_NAMESPACE namespace Ui { diff --git a/src/plugins/valgrindtoolbase/valgrindengine.h b/src/plugins/valgrindtoolbase/valgrindengine.h index d56044d2e3feb75241ef35ee1edf08abbb376674..ff9cdac264f66ac2fe52a2f3c6338b589a36ff49 100644 --- a/src/plugins/valgrindtoolbase/valgrindengine.h +++ b/src/plugins/valgrindtoolbase/valgrindengine.h @@ -44,9 +44,9 @@ #include <valgrind/valgrindrunner.h> -#include <QString> -#include <QByteArray> -#include <QFutureInterface> +#include <QtCore/QString> +#include <QtCore/QByteArray> +#include <QtCore/QFutureInterface> namespace Analyzer { diff --git a/src/plugins/valgrindtoolbase/valgrindsettings.cpp b/src/plugins/valgrindtoolbase/valgrindsettings.cpp index 93f5088975801b44a0b6deeb3bb9ab49a7c20141..090e1a48bb434f51cb57fdc43d133bd151bbd2a9 100644 --- a/src/plugins/valgrindtoolbase/valgrindsettings.cpp +++ b/src/plugins/valgrindtoolbase/valgrindsettings.cpp @@ -40,7 +40,7 @@ #include <coreplugin/icore.h> #include <utils/qtcassert.h> -#include <QSettings> +#include <QtCore/QSettings> using namespace Analyzer::Internal; using namespace Analyzer; diff --git a/src/plugins/valgrindtoolbase/valgrindsettings.h b/src/plugins/valgrindtoolbase/valgrindsettings.h index f857605f41d3393127a9bfd6c0f6b8608ac0dfdd..3eb1363981f1f0a09bf1bd3eb1b6e85200f61ff6 100644 --- a/src/plugins/valgrindtoolbase/valgrindsettings.h +++ b/src/plugins/valgrindtoolbase/valgrindsettings.h @@ -40,8 +40,8 @@ #include "valgrindtoolbase_global.h" -#include <QObject> -#include <QVariant> +#include <QtCore/QObject> +#include <QtCore/QVariant> namespace Analyzer { namespace Internal { diff --git a/src/plugins/valgrindtoolbase/valgrindtoolbaseplugin.cpp b/src/plugins/valgrindtoolbase/valgrindtoolbaseplugin.cpp index bdf546b96205176a5f47db4f5fb8c545cd606cf8..d09100d43975ff754e613d2a896e0a08ada02c96 100644 --- a/src/plugins/valgrindtoolbase/valgrindtoolbaseplugin.cpp +++ b/src/plugins/valgrindtoolbase/valgrindtoolbaseplugin.cpp @@ -39,8 +39,8 @@ #include <analyzerbase/analyzersettings.h> -#include <QStringList> -#include <QtPlugin> +#include <QtCore/QStringList> +#include <QtCore/QtPlugin> using namespace Analyzer; using namespace Analyzer::Internal; @@ -68,4 +68,4 @@ void ValgrindToolbasePlugin::extensionsInitialized() } -Q_EXPORT_PLUGIN(ValgrindToolbasePlugin) \ No newline at end of file +Q_EXPORT_PLUGIN(ValgrindToolbasePlugin) diff --git a/src/shared/proparser/profileparser.cpp b/src/shared/proparser/profileparser.cpp index eb131ffd4561c1d7e705a3add982e847e18cee14..3b3e700c8c73b4c4828667f4b59746da241fe094 100644 --- a/src/shared/proparser/profileparser.cpp +++ b/src/shared/proparser/profileparser.cpp @@ -384,6 +384,8 @@ bool ProFileParser::read(ProFile *pro, const QString &in) } } if (end == cur) { // Line with only a comment (sans whitespace) + if (m_markLine == m_lineNo) + m_markLine++; // Qmake bizarreness: such lines do not affect line continuations goto ignore; } diff --git a/src/shared/proparser/prowriter.cpp b/src/shared/proparser/prowriter.cpp index 7831991ae52d5c9d3db9dc699adc8fd473d047d4..2edbddbb935cd061acaeacb7ec4dd479fdfc494a 100644 --- a/src/shared/proparser/prowriter.cpp +++ b/src/shared/proparser/prowriter.cpp @@ -174,62 +174,132 @@ static const ushort *skipToken(ushort tok, const ushort *&tokPtr, int &lineNo) return 0; } -void ProWriter::addVarValues(ProFile *profile, QStringList *lines, - const QDir &proFileDir, const QStringList &values, const QString &var, - bool valuesAreFiles) +bool ProWriter::locateVarValues(const ushort *tokPtr, + const QString &scope, const QString &var, int *scopeStart, int *bestLine) { - QStringList valuesToWrite; - if (valuesAreFiles) { - foreach (const QString &v, values) - valuesToWrite << proFileDir.relativeFilePath(v); - } else { - valuesToWrite = values; - } - - // Check if variable item exists as child of root item - const ushort *tokPtr = profile->tokPtr(); - int lineNo = 0; + const bool inScope = scope.isEmpty(); + int lineNo = *scopeStart + 1; QString tmp; const ushort *lastXpr = 0; + bool fresh = true; while (ushort tok = *tokPtr++) { - if (tok == TokAssign || tok == TokAppend || tok == TokAppendUnique) { + if (inScope && (tok == TokAssign || tok == TokAppend || tok == TokAppendUnique)) { if (getLiteral(lastXpr, tokPtr - 1, tmp) && var == tmp) { - for (--lineNo; lineNo < lines->count(); lineNo++) { - QString line = lines->at(lineNo); - int idx = line.indexOf(QLatin1Char('#')); - if (idx >= 0) - line.truncate(idx); - while (line.endsWith(QLatin1Char(' ')) || line.endsWith(QLatin1Char('\t'))) - line.chop(1); - if (line.isEmpty()) { - if (idx >= 0) - continue; - break; - } - if (!line.endsWith(QLatin1Char('\\'))) { - (*lines)[lineNo].insert(line.length(), QLatin1String(" \\")); - lineNo++; - break; - } - } - QString added; - foreach (const QString &v, valuesToWrite) - added += QLatin1String(" ") + v + QLatin1String(" \\\n"); - added.chop(3); - lines->insert(lineNo, added); - return; + *bestLine = lineNo - 1; + return true; } skipExpression(++tokPtr, lineNo); + fresh = true; } else { - lastXpr = skipToken(tok, tokPtr, lineNo); + if (!inScope && tok == TokCondition && *tokPtr == TokBranch + && getLiteral(lastXpr, tokPtr - 1, tmp) && scope == tmp) { + *scopeStart = lineNo - 1; + if (locateVarValues(tokPtr + 3, QString(), var, scopeStart, bestLine)) + return true; + } + const ushort *oTokPtr = skipToken(tok, tokPtr, lineNo); + if (tok != TokLine) { + if (oTokPtr) { + if (fresh) + lastXpr = oTokPtr; + } else if (tok == TokNot || tok == TokAnd || tok == TokOr) { + fresh = false; + } else { + fresh = true; + } + } + } + } + if (inScope || *scopeStart < 0) + *bestLine = qMax(lineNo - 1, 0); + return false; +} + +static int skipContLines(QStringList *lines, int lineNo, bool addCont) +{ + for (; lineNo < lines->count(); lineNo++) { + QString line = lines->at(lineNo); + int idx = line.indexOf(QLatin1Char('#')); + if (idx >= 0) + line.truncate(idx); + while (line.endsWith(QLatin1Char(' ')) || line.endsWith(QLatin1Char('\t'))) + line.chop(1); + if (line.isEmpty()) { + if (idx >= 0) + continue; + break; + } + if (!line.endsWith(QLatin1Char('\\'))) { + if (addCont) + (*lines)[lineNo].insert(line.length(), QLatin1String(" \\")); + lineNo++; + break; + } + } + return lineNo; +} + +void ProWriter::putVarValues(ProFile *profile, QStringList *lines, + const QStringList &values, const QString &var, PutFlags flags, const QString &scope) +{ + QString indent = scope.isEmpty() ? QString() : QLatin1String(" "); + int scopeStart = -1, lineNo; + if (locateVarValues(profile->tokPtr(), scope, var, &scopeStart, &lineNo)) { + if (flags & ReplaceValues) { + // remove continuation lines with old values + int lNo = skipContLines(lines, lineNo, false); + lines->erase(lines->begin() + lineNo + 1, lines->begin() + lNo); + // remove rest of the line + QString &line = (*lines)[lineNo]; + int eqs = line.indexOf(QLatin1Char('=')); + if (eqs >= 0) // If this is not true, we mess up the file a bit. + line.truncate(eqs + 1); + // put new values + foreach (const QString &v, values) + line += ((flags & MultiLine) ? QLatin1String(" \\\n ") + indent : QString::fromLatin1(" ")) + v; + } else { + lineNo = skipContLines(lines, lineNo, true); + QString added; + foreach (const QString &v, values) + added += QLatin1String(" ") + indent + v + QLatin1String(" \\\n"); + added.chop(3); + lines->insert(lineNo, added); } + } else { + // Create & append new variable item + QString added; + if (!scope.isEmpty()) { + if (scopeStart < 0) { + added = QLatin1Char('\n') + scope + QLatin1String(" {"); + } else { + QRegExp rx(QLatin1String("(\\s*") + scope + QLatin1String("\\s*:\\s*).*")); + if (rx.exactMatch(lines->at(scopeStart))) { + (*lines)[scopeStart].replace(0, rx.cap(1).length(), + QString(scope + QLatin1String(" {\n "))); + scopeStart = -1; + } + } + } + int lNo = skipContLines(lines, lineNo, false); + if (lNo != scopeStart + 1) + added += QLatin1Char('\n'); + added += indent + var + QLatin1String((flags & AppendOperator) ? " +=" : " ="); + foreach (const QString &v, values) + added += ((flags & MultiLine) ? QLatin1String(" \\\n ") + indent : QString::fromLatin1(" ")) + v; + if (!scope.isEmpty() && scopeStart < 0) + added += QLatin1String("\n}"); + lines->insert(lNo, added); } +} + +void ProWriter::addFiles(ProFile *profile, QStringList *lines, + const QDir &proFileDir, const QStringList &values, const QString &var) +{ + QStringList valuesToWrite; + foreach (const QString &v, values) + valuesToWrite << proFileDir.relativeFilePath(v); - // Create & append new variable item - QString added = QLatin1Char('\n') + var + QLatin1String(" +="); - foreach (const QString &v, valuesToWrite) - added += QLatin1String(" \\\n ") + v; - *lines << added; + putVarValues(profile, lines, valuesToWrite, var, AppendValues | MultiLine | AppendOperator); } static void findProVariables(const ushort *tokPtr, const QStringList &vars, @@ -256,25 +326,17 @@ static void findProVariables(const ushort *tokPtr, const QStringList &vars, } } -QStringList ProWriter::removeVarValues(ProFile *profile, QStringList *lines, - const QDir &proFileDir, const QStringList &values, const QStringList &vars, - bool valuesAreFiles) +QList<int> ProWriter::removeVarValues(ProFile *profile, QStringList *lines, + const QStringList &values, const QStringList &vars) { - QStringList notChanged = values; + QList<int> notChanged; + // yeah, this is a bit silly + for (int i = 0; i < values.size(); i++) + notChanged << i; QList<int> varLines; findProVariables(profile->tokPtr(), vars, &varLines); - QStringList valuesToFind; - if (valuesAreFiles) { - // This is a tad stupid - basically, it can remove only entries which - // the above code added. - foreach (const QString &absoluteFilePath, values) - valuesToFind << proFileDir.relativeFilePath(absoluteFilePath); - } else { - valuesToFind = values; - } - // This code expects proVars to be sorted by the variables' appearance in the file. int delta = 1; foreach (int ln, varLines) { @@ -326,9 +388,9 @@ QStringList ProWriter::removeVarValues(ProFile *profile, QStringList *lines, colNo++; } const QString fn = line.mid(varCol, colNo - varCol); - const int pos = valuesToFind.indexOf(fn); + const int pos = values.indexOf(fn); if (pos != -1) { - notChanged.removeOne(values.at(pos)); + notChanged.removeOne(pos); if (colNo < lineLen) colNo++; else if (varCol) @@ -380,3 +442,18 @@ QStringList ProWriter::removeVarValues(ProFile *profile, QStringList *lines, } return notChanged; } + +QStringList ProWriter::removeFiles(ProFile *profile, QStringList *lines, + const QDir &proFileDir, const QStringList &values, const QStringList &vars) +{ + // This is a tad stupid - basically, it can remove only entries which + // the above code added. + QStringList valuesToFind; + foreach (const QString &absoluteFilePath, values) + valuesToFind << proFileDir.relativeFilePath(absoluteFilePath); + + QStringList notChanged; + foreach (int i, removeVarValues(profile, lines, valuesToFind, vars)) + notChanged.append(values.at(i)); + return notChanged; +} diff --git a/src/shared/proparser/prowriter.h b/src/shared/proparser/prowriter.h index 5aacf6a16c42663e74d819789def06413274057e..c6ab1591847f2499a1bf75b3a99622fd1f3152ca 100644 --- a/src/shared/proparser/prowriter.h +++ b/src/shared/proparser/prowriter.h @@ -49,43 +49,34 @@ namespace Internal { class ProWriter { public: - static void addFiles(ProFile *profile, QStringList *lines, - const QDir &proFileDir, const QStringList &filePaths, const QString &var) - { - addVarValues(profile, lines, proFileDir, filePaths, var, true); - } - - static QStringList removeFiles(ProFile *profile, QStringList *lines, - const QDir &proFileDir, const QStringList &filePaths, - const QStringList &vars) - { - return removeVarValues(profile, lines, proFileDir, filePaths, vars, true); - } + enum PutFlag { + AppendValues = 0, + ReplaceValues = 1, + OneLine = 0, // this works only when replacing (or adding a new assignment) + MultiLine = 2, + AssignOperator = 0, // ignored when changing an existing assignment + AppendOperator = 4 + }; + Q_DECLARE_FLAGS(PutFlags, PutFlag) - static void addVarValues(ProFile *profile, QStringList *lines, - const QDir &proFileDir, const QStringList &values, const QString &var) - { - addVarValues(profile, lines, proFileDir, values, var, false); - } + static void putVarValues(ProFile *profile, QStringList *lines, + const QStringList &values, const QString &var, PutFlags flags, + const QString &scope = QString()); + static QList<int> removeVarValues(ProFile *profile, QStringList *lines, + const QStringList &values, const QStringList &vars); - static QStringList removeVarValues(ProFile *profile, QStringList *lines, - const QDir &proFileDir, const QStringList &values, - const QStringList &vars) - { - return removeVarValues(profile, lines, proFileDir, values, vars, false); - } + static void addFiles(ProFile *profile, QStringList *lines, + const QDir &proFileDir, const QStringList &filePaths, const QString &var); + static QStringList removeFiles(ProFile *profile, QStringList *lines, + const QDir &proFileDir, const QStringList &filePaths, const QStringList &vars); private: - - static void addVarValues(ProFile *profile, QStringList *lines, - const QDir &proFileDir, const QStringList &values, const QString &var, - bool valuesAreFiles); - - static QStringList removeVarValues(ProFile *profile, QStringList *lines, - const QDir &proFileDir, const QStringList &values, - const QStringList &vars, bool valuesAreFiles); + static bool locateVarValues(const ushort *tokPtr, + const QString &scope, const QString &var, int *scopeStart, int *bestLine); }; +Q_DECLARE_OPERATORS_FOR_FLAGS(ProWriter::PutFlags) + } // namespace Internal } // namespace Qt4ProjectManager diff --git a/tests/auto/auto.pro b/tests/auto/auto.pro index 92fe3c51f1c005fd16fbc154671e425e15d254a3..009cbaf80ede5f5833f3a057a3004a9eaf4a0c26 100644 --- a/tests/auto/auto.pro +++ b/tests/auto/auto.pro @@ -10,7 +10,7 @@ SUBDIRS += \ fakevim \ generichighlighter \ # icheckbuild \ -# profilewriter \ + profilewriter \ ioutils \ qtcprocess \ utils_stringutils \ diff --git a/tests/auto/profilewriter/profilewriter.pro b/tests/auto/profilewriter/profilewriter.pro index 9a2a551c8a137884cfa562bc5a19b48fd839bf47..8785bc733104d44fd8890fe371ca28e6336d8c76 100644 --- a/tests/auto/profilewriter/profilewriter.pro +++ b/tests/auto/profilewriter/profilewriter.pro @@ -1,3 +1,4 @@ +include(../qttest.pri) include(../../../src/shared/proparser/proparser.pri) SOURCES += \ diff --git a/tests/auto/profilewriter/tst_profilewriter.cpp b/tests/auto/profilewriter/tst_profilewriter.cpp index 0ac3a5acc62616966f8c9b1b47b292e0d3ba4b69..34d0ee70bbdabab9336e93e96937cf454cad5a52 100644 --- a/tests/auto/profilewriter/tst_profilewriter.cpp +++ b/tests/auto/profilewriter/tst_profilewriter.cpp @@ -31,35 +31,70 @@ ** **************************************************************************/ -#include "profileevaluator.h" -#include "prowriter.h" +#include <profileparser.h> +#include <prowriter.h> #include <QtTest/QtTest> -//#include <QtCore/QSet> #define BASE_DIR "/some/stuff" +///////////// callbacks for parser/evaluator + +static void print(const QString &fileName, int lineNo, const QString &msg) +{ + if (lineNo) + qWarning("%s(%d): %s", qPrintable(fileName), lineNo, qPrintable(msg)); + else + qWarning("%s", qPrintable(msg)); +} + +class ParseHandler : public ProFileParserHandler { +public: + virtual void parseError(const QString &fileName, int lineNo, const QString &msg) + { print(fileName, lineNo, msg); } +}; + +static ParseHandler parseHandler; + +//////////////// the actual autotest + +typedef Qt4ProjectManager::Internal::ProWriter PW; + class tst_ProFileWriter : public QObject { Q_OBJECT private slots: - void edit_data(); - void edit(); + void adds_data(); + void adds(); + void removes_data(); + void removes(); void multiVar(); + void addFiles(); + void removeFiles(); }; -void tst_ProFileWriter::edit_data() +static QStringList strList(const char * const *array) +{ + QStringList values; + for (const char * const *value = array; *value; value++) + values << QString::fromLatin1(*value); + return values; +} + +void tst_ProFileWriter::adds_data() { - QTest::addColumn<bool>("add"); - QTest::addColumn<QStringList>("files"); + QTest::addColumn<int>("flags"); + QTest::addColumn<QStringList>("values"); + QTest::addColumn<QString>("scope"); QTest::addColumn<QString>("input"); QTest::addColumn<QString>("output"); struct Case { - bool add; + int flags; const char *title; - const char * const *files; + const char * const *values; + const char *scope; const char *input; const char *output; }; @@ -67,9 +102,16 @@ void tst_ProFileWriter::edit_data() static const char *f_foo[] = { "foo", 0 }; static const char *f_foo_bar[] = { "foo", "bar", 0 }; static const Case cases[] = { - // Adding entries { - true, "add new", f_foo, + PW::AppendValues|PW::AppendOperator|PW::MultiLine, + "add new append multi", f_foo, 0, + "", + "SOURCES += \\\n" + " foo" + }, + { + PW::AppendValues|PW::AppendOperator|PW::MultiLine, + "add new append multi after comment", f_foo, 0, "# test file", "# test file\n" "\n" @@ -77,7 +119,72 @@ void tst_ProFileWriter::edit_data() " foo" }, { - true, "add new ignoring scoped", f_foo, + PW::AppendValues|PW::AppendOperator|PW::MultiLine, + "add new append multi before newlines", f_foo, 0, + "\n" + "\n" + "\n", + "SOURCES += \\\n" + " foo\n" + "\n" + "\n" + "\n" + }, + { + PW::AppendValues|PW::AppendOperator|PW::MultiLine, + "add new append multi after comment before newlines", f_foo, 0, + "# test file\n" + "\n" + "\n" + "\n", + "# test file\n" + "\n" + "SOURCES += \\\n" + " foo\n" + "\n" + "\n" + "\n" + }, + { + PW::AppendValues|PW::AssignOperator|PW::MultiLine, + "add new assign multi", f_foo, 0, + "# test file", + "# test file\n" + "\n" + "SOURCES = \\\n" + " foo" + }, + { + PW::AppendValues|PW::AppendOperator|PW::OneLine, + "add new append oneline", f_foo, 0, + "# test file", + "# test file\n" + "\n" + "SOURCES += foo" + }, + { + PW::AppendValues|PW::AssignOperator|PW::OneLine, + "add new assign oneline", f_foo, 0, + "# test file", + "# test file\n" + "\n" + "SOURCES = foo" + }, + { + PW::AppendValues|PW::AssignOperator|PW::OneLine, + "add new assign oneline after existing", f_foo, 0, + "# test file\n" + "\n" + "HEADERS = foo", + "# test file\n" + "\n" + "HEADERS = foo\n" + "\n" + "SOURCES = foo" + }, + { + PW::AppendValues|PW::AppendOperator|PW::MultiLine, + "add new ignoring scoped", f_foo, 0, "unix:SOURCES = some files", "unix:SOURCES = some files\n" "\n" @@ -85,19 +192,22 @@ void tst_ProFileWriter::edit_data() " foo" }, { - true, "add to existing", f_foo, + PW::AppendValues|PW::AppendOperator|PW::MultiLine, + "add to existing (wrong operator)", f_foo, 0, "SOURCES = some files", "SOURCES = some files \\\n" " foo" }, { - true, "add to existing after comment", f_foo, + PW::AppendValues|PW::AppendOperator|PW::MultiLine, + "add to existing after comment (wrong operator)", f_foo, 0, "SOURCES = some files # comment", "SOURCES = some files \\ # comment\n" " foo" }, { - true, "add to existing after comment line", f_foo, + PW::AppendValues|PW::AppendOperator|PW::MultiLine, + "add to existing after comment line (wrong operator)", f_foo, 0, "SOURCES = some \\\n" " # comment\n" " files", @@ -106,25 +216,223 @@ void tst_ProFileWriter::edit_data() " files \\\n" " foo" }, + { + PW::AppendValues|PW::AssignOperator|PW::MultiLine, + "add to existing", f_foo, 0, + "SOURCES = some files", + "SOURCES = some files \\\n" + " foo" + }, + { + PW::ReplaceValues|PW::AssignOperator|PW::MultiLine, + "replace existing multi", f_foo_bar, 0, + "SOURCES = some files", + "SOURCES = \\\n" + " foo \\\n" + " bar" + }, + { + PW::ReplaceValues|PW::AssignOperator|PW::OneLine, + "replace existing oneline", f_foo_bar, 0, + "SOURCES = some files", + "SOURCES = foo bar" + }, + { + PW::ReplaceValues|PW::AssignOperator|PW::OneLine, + "replace existing complex last", f_foo_bar, 0, + "SOURCES = some \\\n" + " # comment\n" + " files", + "SOURCES = foo bar" + }, + { + PW::ReplaceValues|PW::AssignOperator|PW::OneLine, + "replace existing complex middle 1", f_foo_bar, 0, + "SOURCES = some \\\n" + " # comment\n" + " files\n" + "HEADERS = blubb", + "SOURCES = foo bar\n" + "HEADERS = blubb" + }, + { + PW::ReplaceValues|PW::AssignOperator|PW::OneLine, + "replace existing complex middle 2", f_foo_bar, 0, + "SOURCES = some \\\n" + " # comment\n" + " files\n" + "\n" + "HEADERS = blubb", + "SOURCES = foo bar\n" + "\n" + "HEADERS = blubb" + }, + { + PW::ReplaceValues|PW::AssignOperator|PW::OneLine, + "replace existing complex middle 3", f_foo_bar, 0, + "SOURCES = some \\\n" + " # comment\n" + " files \\\n" + "\n" + "HEADERS = blubb", + "SOURCES = foo bar\n" + "\n" + "HEADERS = blubb" + }, + { + PW::AppendValues|PW::AppendOperator|PW::OneLine, + "scoped new / new scope", f_foo, "dog", + "# test file\n" + "SOURCES = yo", + "# test file\n" + "SOURCES = yo\n" + "\n" + "dog {\n" + " SOURCES += foo\n" + "}" + }, + { + PW::AppendValues|PW::AppendOperator|PW::OneLine, + "scoped new / extend scope", f_foo, "dog", + "# test file\n" + "dog {\n" + " HEADERS += yo\n" + "}", + "# test file\n" + "dog {\n" + " HEADERS += yo\n" + "\n" + " SOURCES += foo\n" + "}" + }, + { + PW::AppendValues|PW::AppendOperator|PW::OneLine, + "scoped new / extend elongated scope", f_foo, "dog", + "# test file\n" + "dog {\n" + " HEADERS += \\\n" + " yo \\\n" + " blubb\n" + "}", + "# test file\n" + "dog {\n" + " HEADERS += \\\n" + " yo \\\n" + " blubb\n" + "\n" + " SOURCES += foo\n" + "}" + }, + { + PW::AppendValues|PW::AppendOperator|PW::OneLine, + "scoped new / extend empty scope", f_foo, "dog", + "# test file\n" + "dog {\n" + "}", + "# test file\n" + "dog {\n" + " SOURCES += foo\n" + "}" + }, + { + PW::AppendValues|PW::AppendOperator|PW::OneLine, + "scoped new / extend oneline scope", f_foo, "dog", + "# test file\n" + "dog:HEADERS += yo", + "# test file\n" + "dog {\n" + " HEADERS += yo\n" + "\n" + " SOURCES += foo\n" + "}" + }, + { + PW::AppendValues|PW::AppendOperator|PW::MultiLine, + "scoped append", f_foo, "dog", + "# test file\n" + "dog:SOURCES = yo", + "# test file\n" + "dog:SOURCES = yo \\\n" + " foo" + }, + { + PW::AppendValues|PW::AppendOperator|PW::MultiLine, + "complex scoped append", f_foo, "dog", + "# test file\n" + "animal:!dog:SOURCES = yo", + "# test file\n" + "animal:!dog:SOURCES = yo\n" + "\n" + "dog {\n" + " SOURCES += \\\n" + " foo\n" + "}" + }, + }; + + for (uint i = 0; i < sizeof(cases) / sizeof(cases[0]); i++) { + const Case *_case = &cases[i]; + QTest::newRow(_case->title) + << _case->flags + << strList(_case->values) + << QString::fromLatin1(_case->scope) + << QString::fromLatin1(_case->input) + << QString::fromLatin1(_case->output); + } +} - // Removing entries +void tst_ProFileWriter::adds() +{ + QFETCH(int, flags); + QFETCH(QStringList, values); + QFETCH(QString, scope); + QFETCH(QString, input); + QFETCH(QString, output); + + QStringList lines = input.isEmpty() ? QStringList() : input.split(QLatin1String("\n")); + QString var = QLatin1String("SOURCES"); + + ProFileParser parser(0, &parseHandler); + ProFile *proFile = parser.parsedProFile(QLatin1String(BASE_DIR "/test.pro"), false, &input); + QVERIFY(proFile); + PW::putVarValues(proFile, &lines, values, var, PW::PutFlags(flags), scope); + + QCOMPARE(lines.join(QLatin1String("\n")), output); +} + +void tst_ProFileWriter::removes_data() +{ + QTest::addColumn<QStringList>("values"); + QTest::addColumn<QString>("input"); + QTest::addColumn<QString>("output"); + + struct Case { + const char *title; + const char * const *values; + const char *input; + const char *output; + }; + + static const char *f_foo[] = { "foo", 0 }; + static const char *f_foo_bar[] = { "foo", "bar", 0 }; + static const Case cases[] = { { - false, "remove fail", f_foo, + "remove fail", f_foo, "SOURCES = bak bar", "SOURCES = bak bar" }, { - false, "remove one-line middle", f_foo, + "remove one-line middle", f_foo, "SOURCES = bak foo bar", "SOURCES = bak bar" }, { - false, "remove one-line trailing", f_foo, + "remove one-line trailing", f_foo, "SOURCES = bak bar foo", "SOURCES = bak bar" }, { - false, "remove multi-line single leading", f_foo, + "remove multi-line single leading", f_foo, "SOURCES = foo \\\n" " bak \\\n" " bar", @@ -133,7 +441,7 @@ void tst_ProFileWriter::edit_data() " bar" }, { - false, "remove multi-line single middle", f_foo, + "remove multi-line single middle", f_foo, "SOURCES = bak \\\n" " foo \\\n" " bar", @@ -141,7 +449,7 @@ void tst_ProFileWriter::edit_data() " bar" }, { - false, "remove multi-line single trailing", f_foo, + "remove multi-line single trailing", f_foo, "SOURCES = bak \\\n" " bar \\\n" " foo", @@ -149,7 +457,7 @@ void tst_ProFileWriter::edit_data() " bar" }, { - false, "remove multi-line single leading with comment", f_foo, + "remove multi-line single leading with comment", f_foo, "SOURCES = foo \\ # comment\n" " bak \\\n" " bar", @@ -158,7 +466,7 @@ void tst_ProFileWriter::edit_data() " bar" }, { - false, "remove multi-line single middle with comment", f_foo, + "remove multi-line single middle with comment", f_foo, "SOURCES = bak \\\n" " foo \\ # comment\n" " bar", @@ -167,7 +475,7 @@ void tst_ProFileWriter::edit_data() " bar" }, { - false, "remove multi-line single trailing with comment", f_foo, + "remove multi-line single trailing with comment", f_foo, "SOURCES = bak \\\n" " bar \\\n" " foo # comment", @@ -176,7 +484,7 @@ void tst_ProFileWriter::edit_data() " # foo # comment" }, { - false, "remove multi-line single trailing after empty line", f_foo, + "remove multi-line single trailing after empty line", f_foo, "SOURCES = bak \\\n" " bar \\\n" " \\\n" @@ -185,7 +493,7 @@ void tst_ProFileWriter::edit_data() " bar\n" }, { - false, "remove multi-line single trailing after comment line", f_foo, + "remove multi-line single trailing after comment line", f_foo, "SOURCES = bak \\\n" " bar \\\n" " # just a comment\n" @@ -195,7 +503,7 @@ void tst_ProFileWriter::edit_data() " # just a comment" }, { - false, "remove multi-line single trailing after empty line with comment", f_foo, + "remove multi-line single trailing after empty line with comment", f_foo, "SOURCES = bak \\\n" " bar \\\n" " \\ # just a comment\n" @@ -205,27 +513,27 @@ void tst_ProFileWriter::edit_data() " # just a comment" }, { - false, "remove multiple one-line middle", f_foo_bar, + "remove multiple one-line middle", f_foo_bar, "SOURCES = bak foo bar baz", "SOURCES = bak baz" }, { - false, "remove multiple one-line trailing", f_foo_bar, + "remove multiple one-line trailing", f_foo_bar, "SOURCES = bak baz foo bar", "SOURCES = bak baz" }, { - false, "remove multiple one-line interleaved", f_foo_bar, + "remove multiple one-line interleaved", f_foo_bar, "SOURCES = bak foo baz bar", "SOURCES = bak baz" }, { - false, "remove multiple one-line middle with comment", f_foo_bar, + "remove multiple one-line middle with comment", f_foo_bar, "SOURCES = bak foo bar baz # comment", "SOURCES = bak baz # bar # foo # comment" }, { - false, "remove multi-line multiple trailing with empty line with comment", f_foo_bar, + "remove multi-line multiple trailing with empty line with comment", f_foo_bar, "SOURCES = bak \\\n" " bar \\\n" " \\ # just a comment\n" @@ -237,36 +545,26 @@ void tst_ProFileWriter::edit_data() for (uint i = 0; i < sizeof(cases) / sizeof(cases[0]); i++) { const Case *_case = &cases[i]; - QStringList files; - for (const char * const *file = _case->files; *file; file++) - files << QString::fromLatin1(BASE_DIR "/") + QString::fromLatin1(*file); QTest::newRow(_case->title) - << _case->add - << files + << strList(_case->values) << QString::fromLatin1(_case->input) << QString::fromLatin1(_case->output); } } -void tst_ProFileWriter::edit() +void tst_ProFileWriter::removes() { - QFETCH(bool, add); - QFETCH(QStringList, files); + QFETCH(QStringList, values); QFETCH(QString, input); QFETCH(QString, output); - QDir baseDir(BASE_DIR); QStringList lines = input.split(QLatin1String("\n")); QStringList vars; vars << QLatin1String("SOURCES"); - ProFileOption option; - ProFileEvaluator reader(&option); - ProFile *proFile = reader.parsedProFile(BASE_DIR "/test.pro", input); + ProFileParser parser(0, &parseHandler); + ProFile *proFile = parser.parsedProFile(QLatin1String(BASE_DIR "/test.pro"), false, &input); QVERIFY(proFile); - if (add) - Qt4ProjectManager::Internal::ProWriter::addFiles(proFile, &lines, baseDir, files, vars); - else - Qt4ProjectManager::Internal::ProWriter::removeFiles(proFile, &lines, baseDir, files, vars); + Qt4ProjectManager::Internal::ProWriter::removeVarValues(proFile, &lines, values, vars); QCOMPARE(lines.join(QLatin1String("\n")), output); } @@ -290,14 +588,55 @@ void tst_ProFileWriter::multiVar() << QString::fromLatin1(BASE_DIR "/bak"); QStringList vars; vars << QLatin1String("SOURCES") << QLatin1String("HEADERS"); - ProFileOption option; - ProFileEvaluator reader(&option); - ProFile *proFile = reader.parsedProFile(BASE_DIR "/test.pro", input); + ProFileParser parser(0, &parseHandler); + ProFile *proFile = parser.parsedProFile(QLatin1String(BASE_DIR "/test.pro"), false, &input); QVERIFY(proFile); Qt4ProjectManager::Internal::ProWriter::removeFiles(proFile, &lines, baseDir, files, vars); QCOMPARE(lines.join(QLatin1String("\n")), output); } +void tst_ProFileWriter::addFiles() +{ + QString input = QLatin1String( + "SOURCES = foo.cpp" + ); + QStringList lines = input.split(QLatin1String("\n")); + QString output = QLatin1String( + "SOURCES = foo.cpp \\\n" + " sub/bar.cpp" + ); + + ProFileParser parser(0, &parseHandler); + ProFile *proFile = parser.parsedProFile(QLatin1String(BASE_DIR "/test.pro"), false, &input); + QVERIFY(proFile); + Qt4ProjectManager::Internal::ProWriter::addFiles(proFile, &lines, QDir(BASE_DIR), + QStringList() << QString::fromLatin1(BASE_DIR "/sub/bar.cpp"), + QLatin1String("SOURCES")); + + QCOMPARE(lines.join(QLatin1String("\n")), output); +} + +void tst_ProFileWriter::removeFiles() +{ + QString input = QLatin1String( + "SOURCES = foo.cpp sub/bar.cpp" + ); + QStringList lines = input.split(QLatin1String("\n")); + QString output = QLatin1String( + "SOURCES = foo.cpp" + ); + + ProFileParser parser(0, &parseHandler); + ProFile *proFile = parser.parsedProFile(QLatin1String(BASE_DIR "/test.pro"), false, &input); + QVERIFY(proFile); + Qt4ProjectManager::Internal::ProWriter::removeFiles(proFile, &lines, QDir(BASE_DIR), + QStringList() << QString::fromLatin1(BASE_DIR "/sub/bar.cpp"), + QStringList() << QLatin1String("SOURCES") << QLatin1String("HEADERS")); + + QCOMPARE(lines.join(QLatin1String("\n")), output); +} + + QTEST_MAIN(tst_ProFileWriter) #include "tst_profilewriter.moc"