diff --git a/dist/changes-1.3.0 b/dist/changes-1.3.0 new file mode 100644 index 0000000000000000000000000000000000000000..60379adf56ebec18c21027940f0c3eef8e684f72 --- /dev/null +++ b/dist/changes-1.3.0 @@ -0,0 +1,21 @@ +The QtCreator 1.3 release contains bug fixes and new features. + +Below is a list of relevant changes. You can find a complete list of changes +within the logs of QtCreator's sources. Simply check it out from the public git +repository e.g., + +git clone git://gitorious.org/qt-creator/qt-creator.git +git log --pretty=oneline v1.2.0..master + +This release introduces source and binary incompatible changes to the plugin +API, so if you have created your own custom plugins, they will need to be +adapted accordingly. + +General: + + +Project support: + * Added support for adding and removing files from a generic Makefile-based + project (contributed by Kevin Michel) + +... diff --git a/doc/addressbook-sdk.qdoc b/doc/addressbook-sdk.qdoc index 3194ad70b2f3d60e55b4519f993f496c763ce77d..6e457d41816508a1a10ed5f835720f2316bda70c 100644 --- a/doc/addressbook-sdk.qdoc +++ b/doc/addressbook-sdk.qdoc @@ -734,7 +734,7 @@ which we subclass in this chapter, to implement a FindDialog class. - \section1 Designing \c FindDialog + \section1 Designing The FindDialog #image @@ -751,7 +751,7 @@ vertical. - \section1 Implementing \c FindDialog + \section1 Implementing The FindDialog Class Let's look at \c{FindDialog}'s header file. Here, we need to provide private members for the class so that we can access the widgets freely @@ -791,6 +791,34 @@ we clear the contents of \c lineEdit and hide the dialog. \snippet examples/addressbook-sdk/part5/finddialog.cpp findClicked + + The \c findText variable has a public getter function, \c getFindText(), + associated with it. Since we only ever set \c findText directly in both + the constructor and in hte \c findClicked() function, we do not create a + setter function to accompany \c getFindText(). Because \c getFindText() is + public, classes instantiating and using \c FindDialog can always access the + search string that the user has entered and accepted. + + \snippet examples/addressbook-sdk/part5/finddialog.cpp getFindText + + + \section1 The AddressBook Class + + + To ensure that we can use \c FindDialog from within our \c AddressBook + class, we include \c finddialog.h in the \c addressbook.h file. + + \snippet examples/addressbook-sdk/part5/addressbook.cpp include + + So far, all our address book features have a QPushButton and a + corresponding slot. Similarly, for the \gui Find feature, we have + \c findButton and \c findContact(). + + Within the \c AddressBook class's constructor, we instantiate our private + objects, \c findButton and \c findDialog: + + \snippet examples/addressbook-sdk/part5/addressbook.cpp + */ diff --git a/doc/examples/addressbook-sdk/part5/addressbook.cpp b/doc/examples/addressbook-sdk/part5/addressbook.cpp index e14d95026fd8c889d5a04486b95f1c02ad3e6b8b..0e7b361ddcc48b4675570160c6f42f95e1f47ebe 100644 --- a/doc/examples/addressbook-sdk/part5/addressbook.cpp +++ b/doc/examples/addressbook-sdk/part5/addressbook.cpp @@ -243,6 +243,7 @@ void AddressBook::updateInterface(Mode mode) } } +//! [findContact] void AddressBook::findContact() { dialog->show(); @@ -262,3 +263,4 @@ void AddressBook::findContact() updateInterface(NavigationMode); } +//! [findContact] diff --git a/doc/examples/addressbook-sdk/part5/addressbook.h b/doc/examples/addressbook-sdk/part5/addressbook.h index 9bc1f75ba38ae82feb74558bb330039f5d475849..c6f9f607283d3963354f64e0a3a2ce52fc65f53a 100644 --- a/doc/examples/addressbook-sdk/part5/addressbook.h +++ b/doc/examples/addressbook-sdk/part5/addressbook.h @@ -6,8 +6,9 @@ #include <QtGui/QLineEdit> #include <QtGui/QTextEdit> #include <QtGui/QMessageBox> +//! [include] #include "finddialog.h" - +//! [include] namespace Ui { diff --git a/doc/examples/addressbook-sdk/part5/finddialog.cpp b/doc/examples/addressbook-sdk/part5/finddialog.cpp index 1a464b70903511d3680df80657f1cdc42a30d8d1..63e04a5103978344cd2d599a0898b784655cd6b6 100644 --- a/doc/examples/addressbook-sdk/part5/finddialog.cpp +++ b/doc/examples/addressbook-sdk/part5/finddialog.cpp @@ -43,7 +43,9 @@ void FindDialog::findClicked() } //! [findClicked] +//! [getFindText] QString FindDialog::getFindText() { return findText; } +//! [getFindText] diff --git a/src/plugins/qt4projectmanager/customwidgetwizard/templates/tpl_collection.cpp b/share/qtcreator/templates/qt4project/customwidgetwizard/tpl_collection.cpp similarity index 100% rename from src/plugins/qt4projectmanager/customwidgetwizard/templates/tpl_collection.cpp rename to share/qtcreator/templates/qt4project/customwidgetwizard/tpl_collection.cpp diff --git a/src/plugins/qt4projectmanager/customwidgetwizard/templates/tpl_collection.h b/share/qtcreator/templates/qt4project/customwidgetwizard/tpl_collection.h similarity index 100% rename from src/plugins/qt4projectmanager/customwidgetwizard/templates/tpl_collection.h rename to share/qtcreator/templates/qt4project/customwidgetwizard/tpl_collection.h diff --git a/src/plugins/qt4projectmanager/customwidgetwizard/templates/tpl_plugin.pro b/share/qtcreator/templates/qt4project/customwidgetwizard/tpl_plugin.pro similarity index 100% rename from src/plugins/qt4projectmanager/customwidgetwizard/templates/tpl_plugin.pro rename to share/qtcreator/templates/qt4project/customwidgetwizard/tpl_plugin.pro diff --git a/src/plugins/qt4projectmanager/customwidgetwizard/templates/tpl_resources.qrc b/share/qtcreator/templates/qt4project/customwidgetwizard/tpl_resources.qrc similarity index 100% rename from src/plugins/qt4projectmanager/customwidgetwizard/templates/tpl_resources.qrc rename to share/qtcreator/templates/qt4project/customwidgetwizard/tpl_resources.qrc diff --git a/src/plugins/qt4projectmanager/customwidgetwizard/templates/tpl_single.cpp b/share/qtcreator/templates/qt4project/customwidgetwizard/tpl_single.cpp similarity index 100% rename from src/plugins/qt4projectmanager/customwidgetwizard/templates/tpl_single.cpp rename to share/qtcreator/templates/qt4project/customwidgetwizard/tpl_single.cpp diff --git a/src/plugins/qt4projectmanager/customwidgetwizard/templates/tpl_single.h b/share/qtcreator/templates/qt4project/customwidgetwizard/tpl_single.h similarity index 100% rename from src/plugins/qt4projectmanager/customwidgetwizard/templates/tpl_single.h rename to share/qtcreator/templates/qt4project/customwidgetwizard/tpl_single.h diff --git a/src/plugins/qt4projectmanager/customwidgetwizard/templates/tpl_widget.cpp b/share/qtcreator/templates/qt4project/customwidgetwizard/tpl_widget.cpp similarity index 100% rename from src/plugins/qt4projectmanager/customwidgetwizard/templates/tpl_widget.cpp rename to share/qtcreator/templates/qt4project/customwidgetwizard/tpl_widget.cpp diff --git a/src/plugins/qt4projectmanager/customwidgetwizard/templates/tpl_widget.h b/share/qtcreator/templates/qt4project/customwidgetwizard/tpl_widget.h similarity index 100% rename from src/plugins/qt4projectmanager/customwidgetwizard/templates/tpl_widget.h rename to share/qtcreator/templates/qt4project/customwidgetwizard/tpl_widget.h diff --git a/src/plugins/qt4projectmanager/customwidgetwizard/templates/tpl_widget_include.pri b/share/qtcreator/templates/qt4project/customwidgetwizard/tpl_widget_include.pri similarity index 100% rename from src/plugins/qt4projectmanager/customwidgetwizard/templates/tpl_widget_include.pri rename to share/qtcreator/templates/qt4project/customwidgetwizard/tpl_widget_include.pri diff --git a/src/plugins/qt4projectmanager/customwidgetwizard/templates/tpl_widget_lib.pro b/share/qtcreator/templates/qt4project/customwidgetwizard/tpl_widget_lib.pro similarity index 100% rename from src/plugins/qt4projectmanager/customwidgetwizard/templates/tpl_widget_lib.pro rename to share/qtcreator/templates/qt4project/customwidgetwizard/tpl_widget_lib.pro diff --git a/src/libs/cplusplus/FastPreprocessor.cpp b/src/libs/cplusplus/FastPreprocessor.cpp index e1e0bd8c50923a318b4f18568f4f26fc7bd962bd..00b6f8eedabbba680f0dba4900d9d0fe004a7e77 100644 --- a/src/libs/cplusplus/FastPreprocessor.cpp +++ b/src/libs/cplusplus/FastPreprocessor.cpp @@ -38,10 +38,22 @@ FastPreprocessor::FastPreprocessor(const Snapshot &snapshot) QByteArray FastPreprocessor::run(QString fileName, const QString &source) { +#ifdef QTCREATOR_WITH_MERGED_ENVIRONMENT + if (Document::Ptr doc = _snapshot.value(fileName)) { + _merged.insert(fileName); + + foreach (const Document::Include &i, doc->includes()) + mergeEnvironment(i.fileName()); + } +#endif + const QByteArray preprocessed = _preproc(fileName, source); return preprocessed; } +void FastPreprocessor::sourceNeeded(QString &fileName, IncludeType, unsigned) +{ mergeEnvironment(fileName); } + void FastPreprocessor::mergeEnvironment(const QString &fileName) { if (! _merged.contains(fileName)) { diff --git a/src/libs/cplusplus/FastPreprocessor.h b/src/libs/cplusplus/FastPreprocessor.h index bbdbd535ba010ca5834c4a3494ba7b31df99a614..c7e6e2f8b1c8c2032c31174dfe3d4a44b0b73d19 100644 --- a/src/libs/cplusplus/FastPreprocessor.h +++ b/src/libs/cplusplus/FastPreprocessor.h @@ -54,8 +54,7 @@ public: QByteArray run(QString fileName, const QString &source); // CPlusPlus::Client - virtual void sourceNeeded(QString &fileName, IncludeType, unsigned) - { mergeEnvironment(fileName); } + virtual void sourceNeeded(QString &fileName, IncludeType, unsigned); virtual void macroAdded(const Macro &) {} diff --git a/src/libs/cplusplus/pp-engine.cpp b/src/libs/cplusplus/pp-engine.cpp index 80832275804719a750f472fa9564e4380f319654..372926f59755cb51d82c8bca939498362830d22a 100644 --- a/src/libs/cplusplus/pp-engine.cpp +++ b/src/libs/cplusplus/pp-engine.cpp @@ -771,7 +771,11 @@ void Preprocessor::preprocess(const QString &fileName, const QByteArray &source, } else { if (_dot->whitespace) { - const unsigned endOfPreviousToken = (_dot - 1)->end(); + unsigned endOfPreviousToken = 0; + + if (_dot != _tokens.constBegin()) + endOfPreviousToken = (_dot - 1)->end(); + const unsigned beginOfToken = _dot->begin(); const char *start = _source.constBegin() + endOfPreviousToken; diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index e91c661bff8d840d0d9087eda30865ae165d35ab..9ecdd0fece2b055cd675c42f166a8bbca87487e7 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -3143,7 +3143,8 @@ void GdbEngine::handleQueryDebuggingHelper(const GdbResultRecord &record, const m_dumperHelper.parseQueryTypes(availableSimpleDebuggingHelpers, QtDumperHelper::GdbDebugger); if (availableSimpleDebuggingHelpers.isEmpty()) { - m_debuggingHelperState = DebuggingHelperUnavailable; + if (!m_dumperInjectionLoad) // Retry if thread has not terminated yet. + m_debuggingHelperState = DebuggingHelperUnavailable; q->showStatusMessage(tr("Debugging helpers not found.")); //QMessageBox::warning(q->mainWindow(), // tr("Cannot find special data dumpers"), diff --git a/src/plugins/qt4projectmanager/customwidgetwizard/customwidgetwizard.cpp b/src/plugins/qt4projectmanager/customwidgetwizard/customwidgetwizard.cpp index 0617d1451238d2ff3aa6832b658163ad04c68eae..83042b443b5f9f0920fa6a1e3ff4be6534b81e8d 100644 --- a/src/plugins/qt4projectmanager/customwidgetwizard/customwidgetwizard.cpp +++ b/src/plugins/qt4projectmanager/customwidgetwizard/customwidgetwizard.cpp @@ -65,6 +65,8 @@ Core::GeneratedFiles CustomWidgetWizard::generateFiles(const QWizard *w, p.name = cw->name(); p.path = cw->path(); p.license = CppTools::AbstractEditorSupport::licenseTemplate(); + p.templatePath = QtWizard::templateDir(); + p.templatePath += QLatin1String("/customwidgetwizard"); return PluginGenerator::generatePlugin(p, *(cw->pluginOptions()), errorMessage); } diff --git a/src/plugins/qt4projectmanager/customwidgetwizard/customwidgetwizard.pri b/src/plugins/qt4projectmanager/customwidgetwizard/customwidgetwizard.pri index a52a62848a3644f11c3f2eb12a1877ac795172ea..4547080e9611cba10199ee844f038c50e64f5e16 100644 --- a/src/plugins/qt4projectmanager/customwidgetwizard/customwidgetwizard.pri +++ b/src/plugins/qt4projectmanager/customwidgetwizard/customwidgetwizard.pri @@ -22,4 +22,4 @@ FORMS += \ $$PWD/classdefinition.ui \ $$PWD/customwidgetwidgetswizardpage.ui \ $$PWD/customwidgetpluginwizardpage.ui -RESOURCES += $$PWD/templates/templates.qrc + diff --git a/src/plugins/qt4projectmanager/customwidgetwizard/plugingenerator.cpp b/src/plugins/qt4projectmanager/customwidgetwizard/plugingenerator.cpp index b2b67808921f511f56558839cac8b0cfc394b6b7..fdb712892e4506f0cbdae6f51761fbfb660ae2af 100644 --- a/src/plugins/qt4projectmanager/customwidgetwizard/plugingenerator.cpp +++ b/src/plugins/qt4projectmanager/customwidgetwizard/plugingenerator.cpp @@ -97,7 +97,7 @@ QList<Core::GeneratedFile> PluginGenerator::generatePlugin(const GenerationPara sm.clear(); sm.insert(QLatin1String("SINGLE_INCLUDE_GUARD"), headerGuard(wo.pluginHeaderFile)); sm.insert(QLatin1String("PLUGIN_CLASS"), wo.pluginClassName); - const QString pluginHeaderContents = processTemplate(QLatin1String(":/tpl_single.h"), sm, errorMessage); + const QString pluginHeaderContents = processTemplate(p.templatePath + QLatin1String("/tpl_single.h"), sm, errorMessage); if (pluginHeaderContents.isEmpty()) return QList<Core::GeneratedFile>(); Core::GeneratedFile pluginHeader(baseDir + wo.pluginHeaderFile); @@ -128,7 +128,7 @@ QList<Core::GeneratedFile> PluginGenerator::generatePlugin(const GenerationPara wo.pluginClassName + QLatin1Char(')') : QLatin1String("")); - const QString pluginSourceContents = processTemplate(QLatin1String(":/tpl_single.cpp"), sm, errorMessage); + const QString pluginSourceContents = processTemplate(p.templatePath + QLatin1String("/tpl_single.cpp"), sm, errorMessage); if (pluginSourceContents.isEmpty()) return QList<Core::GeneratedFile>(); Core::GeneratedFile pluginSource(baseDir + wo.pluginSourceFile); @@ -152,9 +152,9 @@ QList<Core::GeneratedFile> PluginGenerator::generatePlugin(const GenerationPara if (pc.headers.isEmpty()) { if (wo.sourceType == PluginOptions::WidgetOptions::LinkLibrary) { pc.library = wo.widgetLibrary; - pc.tmpl = QLatin1String(":/tpl_widget_lib.pro"); + pc.tmpl = p.templatePath + QLatin1String("/tpl_widget_lib.pro"); } else { - pc.tmpl = QLatin1String(":/tpl_widget_include.pri"); + pc.tmpl = p.templatePath + QLatin1String("/tpl_widget_include.pri"); } widgetProjectContents.insert(wo.widgetProjectFile, pc); } else { @@ -171,7 +171,7 @@ QList<Core::GeneratedFile> PluginGenerator::generatePlugin(const GenerationPara sm.insert(QLatin1String("WIDGET_INCLUDE_GUARD"), headerGuard(wo.widgetHeaderFile)); sm.insert(QLatin1String("WIDGET_BASE_CLASS"), wo.widgetBaseClassName); sm.insert(QLatin1String("WIDGET_CLASS"), wo.widgetClassName); - const QString widgetHeaderContents = processTemplate(QLatin1String(":/tpl_widget.h"), sm, errorMessage); + const QString widgetHeaderContents = processTemplate(p.templatePath + QLatin1String("/tpl_widget.h"), sm, errorMessage); if (widgetHeaderContents.isEmpty()) return QList<Core::GeneratedFile>(); Core::GeneratedFile widgetHeader(baseDir + wo.widgetHeaderFile); @@ -180,7 +180,7 @@ QList<Core::GeneratedFile> PluginGenerator::generatePlugin(const GenerationPara sm.remove(QLatin1String("WIDGET_INCLUDE_GUARD")); sm.insert(QLatin1String("WIDGET_HEADER"), wo.widgetHeaderFile); - const QString widgetSourceContents = processTemplate(QLatin1String(":/tpl_widget.cpp"), sm, errorMessage); + const QString widgetSourceContents = processTemplate(p.templatePath + QLatin1String("/tpl_widget.cpp"), sm, errorMessage); if (widgetSourceContents.isEmpty()) return QList<Core::GeneratedFile>(); Core::GeneratedFile widgetSource(baseDir + wo.widgetSourceFile); @@ -213,7 +213,7 @@ QList<Core::GeneratedFile> PluginGenerator::generatePlugin(const GenerationPara sm.clear(); sm.insert(QLatin1String("COLLECTION_INCLUDE_GUARD"), headerGuard(options.collectionHeaderFile)); sm.insert(QLatin1String("COLLECTION_PLUGIN_CLASS"), options.collectionClassName); - const QString collectionHeaderContents = processTemplate(QLatin1String(":/tpl_collection.h"), sm, errorMessage); + const QString collectionHeaderContents = processTemplate(p.templatePath + QLatin1String("/tpl_collection.h"), sm, errorMessage); if (collectionHeaderContents.isEmpty()) return QList<Core::GeneratedFile>(); Core::GeneratedFile collectionHeader(baseDir + options.collectionHeaderFile); @@ -233,7 +233,7 @@ QList<Core::GeneratedFile> PluginGenerator::generatePlugin(const GenerationPara QLatin1String(", ") + options.collectionClassName + QLatin1Char(')')); - const QString collectionSourceFileContents = processTemplate(QLatin1String(":/tpl_collection.cpp"), sm, errorMessage); + const QString collectionSourceFileContents = processTemplate(p.templatePath + QLatin1String("/tpl_collection.cpp"), sm, errorMessage); if (collectionSourceFileContents.isEmpty()) return QList<Core::GeneratedFile>(); Core::GeneratedFile collectionSource(baseDir + options.collectionSourceFile); @@ -262,7 +262,7 @@ QList<Core::GeneratedFile> PluginGenerator::generatePlugin(const GenerationPara // Create the resource file with the icons. sm.clear(); sm.insert(QLatin1String("ICON_FILES"), iconFiles); - const QString resourceFileContents = processTemplate(QLatin1String(":/tpl_resources.qrc"), sm, errorMessage); + const QString resourceFileContents = processTemplate(p.templatePath + QLatin1String("/tpl_resources.qrc"), sm, errorMessage); if (resourceFileContents.isEmpty()) return QList<Core::GeneratedFile>(); Core::GeneratedFile resourceFile(baseDir + options.resourceFile); @@ -277,7 +277,7 @@ QList<Core::GeneratedFile> PluginGenerator::generatePlugin(const GenerationPara sm.insert(QLatin1String("PLUGIN_RESOURCES"), options.resourceFile); sm.insert(QLatin1String("WIDGET_LIBS"), QStringList(widgetLibraries.toList()).join(QString(blank))); sm.insert(QLatin1String("INCLUSIONS"), QStringList(widgetProjects.toList()).join(QLatin1String("\n"))); - const QString proFileContents = processTemplate(QLatin1String(":/tpl_plugin.pro"), sm, errorMessage); + const QString proFileContents = processTemplate(p.templatePath + QLatin1String("/tpl_plugin.pro"), sm, errorMessage); if (proFileContents.isEmpty()) return QList<Core::GeneratedFile>(); Core::GeneratedFile proFile(baseDir + p.name + QLatin1String(".pro")); diff --git a/src/plugins/qt4projectmanager/customwidgetwizard/plugingenerator.h b/src/plugins/qt4projectmanager/customwidgetwizard/plugingenerator.h index 5d89ca648b7b1d878b3bb5d3790a84ad4e22f5cf..6bc653143b0fb675600362188742d98a44c17e14 100644 --- a/src/plugins/qt4projectmanager/customwidgetwizard/plugingenerator.h +++ b/src/plugins/qt4projectmanager/customwidgetwizard/plugingenerator.h @@ -52,6 +52,7 @@ struct GenerationParameters { QString path; QString name; QString license; + QString templatePath; }; class PluginGenerator : public QObject diff --git a/src/plugins/qt4projectmanager/customwidgetwizard/templates/templates.qrc b/src/plugins/qt4projectmanager/customwidgetwizard/templates/templates.qrc deleted file mode 100644 index 804d271dae41eb97653df93939ab3ca4f21e3bc3..0000000000000000000000000000000000000000 --- a/src/plugins/qt4projectmanager/customwidgetwizard/templates/templates.qrc +++ /dev/null @@ -1,14 +0,0 @@ -<RCC> - <qresource prefix="/" > - <file>tpl_widget.h</file> - <file>tpl_widget.cpp</file> - <file>tpl_widget_include.pri</file> - <file>tpl_widget_lib.pro</file> - <file>tpl_single.h</file> - <file>tpl_single.cpp</file> - <file>tpl_collection.h</file> - <file>tpl_collection.cpp</file> - <file>tpl_plugin.pro</file> - <file>tpl_resources.qrc</file> - </qresource> -</RCC>