diff options
Diffstat (limited to 'src')
62 files changed, 660 insertions, 298 deletions
diff --git a/src/libs/extensionsystem/pluginmanager.cpp b/src/libs/extensionsystem/pluginmanager.cpp index 0d16929749..ddc77365e5 100644 --- a/src/libs/extensionsystem/pluginmanager.cpp +++ b/src/libs/extensionsystem/pluginmanager.cpp @@ -574,6 +574,17 @@ QString PluginManager::testDataDirectory() const return s; } +/*! + \fn void PluginManager::profilingReport(const char *what, const PluginSpec *spec = 0) + + Create a profiling entry showing the elapsed time if profiling is activated. +*/ + +void PluginManager::profilingReport(const char *what, const PluginSpec *spec) +{ + d->profilingReport(what, spec); +} + //============PluginManagerPrivate=========== /*! @@ -601,6 +612,7 @@ PluginSpecPrivate *PluginManagerPrivate::privateSpec(PluginSpec *spec) PluginManagerPrivate::PluginManagerPrivate(PluginManager *pluginManager) : extension(QLatin1String("xml")), m_profileElapsedMS(0), + m_profilingVerbosity(0), q(pluginManager) { } @@ -679,6 +691,13 @@ void PluginManagerPrivate::addObject(QObject *obj) if (debugLeaks) qDebug() << "PluginManagerPrivate::addObject" << obj << obj->objectName(); + if (m_profilingVerbosity && !m_profileTimer.isNull()) { + // Report a timestamp when adding an object. Useful for profiling + // its initialization time. + const int absoluteElapsedMS = m_profileTimer->elapsed(); + qDebug(" %-43s %8dms", obj->metaObject()->className(), absoluteElapsedMS); + } + allObjects.append(obj); } emit q->objectAdded(obj); @@ -954,6 +973,8 @@ void PluginManagerPrivate::initProfiling() m_profileTimer->start(); m_profileElapsedMS = 0; qDebug("Profiling started"); + } else { + m_profilingVerbosity++; } } @@ -966,7 +987,7 @@ void PluginManagerPrivate::profilingReport(const char *what, const PluginSpec *s if (spec) { qDebug("%-22s %-22s %8dms (%8dms)", what, qPrintable(spec->name()), absoluteElapsedMS, elapsedMS); } else { - qDebug("%-22s %8dms (%8dms)", what, absoluteElapsedMS, elapsedMS); + qDebug("%-45s %8dms (%8dms)", what, absoluteElapsedMS, elapsedMS); } } } diff --git a/src/libs/extensionsystem/pluginmanager.h b/src/libs/extensionsystem/pluginmanager.h index 23d011f07f..037308945e 100644 --- a/src/libs/extensionsystem/pluginmanager.h +++ b/src/libs/extensionsystem/pluginmanager.h @@ -118,6 +118,8 @@ public: bool runningTests() const; QString testDataDirectory() const; + void profilingReport(const char *what, const PluginSpec *spec = 0); + signals: void objectAdded(QObject *obj); void aboutToRemoveObject(QObject *obj); diff --git a/src/libs/extensionsystem/pluginmanager_p.h b/src/libs/extensionsystem/pluginmanager_p.h index a29ac6b5ef..fe7ed3da44 100644 --- a/src/libs/extensionsystem/pluginmanager_p.h +++ b/src/libs/extensionsystem/pluginmanager_p.h @@ -85,6 +85,7 @@ public: QStringList arguments; QScopedPointer<QTime> m_profileTimer; int m_profileElapsedMS; + unsigned m_profilingVerbosity; // Look in argument descriptions of the specs for the option. PluginSpec *pluginForOption(const QString &option, bool *requiresArgument) const; diff --git a/src/libs/qmljs/qmljsbind.cpp b/src/libs/qmljs/qmljsbind.cpp index 00d90139bc..b9dabcb3e8 100644 --- a/src/libs/qmljs/qmljsbind.cpp +++ b/src/libs/qmljs/qmljsbind.cpp @@ -106,6 +106,11 @@ Interpreter::ObjectValue *Bind::findFunctionScope(AST::FunctionDeclaration *node return _functionScopes.value(node); } +bool Bind::isGroupedPropertyBinding(AST::Node *node) const +{ + return _groupedPropertyBindings.contains(node); +} + ObjectValue *Bind::switchObjectValue(ObjectValue *newObjectValue) { ObjectValue *oldObjectValue = _currentObjectValue; @@ -139,7 +144,6 @@ ExpressionNode *Bind::expression(UiScriptBinding *ast) const ObjectValue *Bind::bindObject(UiQualifiedId *qualifiedTypeNameId, UiObjectInitializer *initializer) { ObjectValue *parentObjectValue = 0; - const QString typeName = toString(qualifiedTypeNameId); // normal component instance ASTObjectValue *objectValue = new ASTObjectValue(qualifiedTypeNameId, initializer, _doc, &_engine); @@ -204,8 +208,20 @@ bool Bind::visit(UiPublicMember *) bool Bind::visit(UiObjectDefinition *ast) { - ObjectValue *value = bindObject(ast->qualifiedTypeNameId, ast->initializer); - _qmlObjects.insert(ast, value); + // an UiObjectDefinition may be used to group property bindings + // think anchors { ... } + bool isGroupedBinding = false; + for (UiQualifiedId *it = ast->qualifiedTypeNameId; it; it = it->next) { + if (!it->next) + isGroupedBinding = it->name->asString().at(0).isLower(); + } + + if (!isGroupedBinding) { + ObjectValue *value = bindObject(ast->qualifiedTypeNameId, ast->initializer); + _qmlObjects.insert(ast, value); + } else { + _groupedPropertyBindings.insert(ast); + } return false; } diff --git a/src/libs/qmljs/qmljsbind.h b/src/libs/qmljs/qmljsbind.h index 9de6f2709c..ed9264e242 100644 --- a/src/libs/qmljs/qmljsbind.h +++ b/src/libs/qmljs/qmljsbind.h @@ -63,6 +63,7 @@ public: Interpreter::Context *context) const; Interpreter::ObjectValue *findFunctionScope(AST::FunctionDeclaration *node) const; + bool isGroupedPropertyBinding(AST::Node *node) const; static QString toString(AST::UiQualifiedId *qualifiedId, QChar delimiter = QChar('.')); @@ -100,6 +101,7 @@ private: Interpreter::ObjectValue *_rootObjectValue; QHash<AST::Node *, Interpreter::ObjectValue *> _qmlObjects; + QSet<AST::Node *> _groupedPropertyBindings; QHash<AST::FunctionDeclaration *, Interpreter::ObjectValue *> _functionScopes; QStringList _includedScripts; diff --git a/src/libs/qmljs/qmljsinterpreter.cpp b/src/libs/qmljs/qmljsinterpreter.cpp index 564482d0a9..ec4a1d981a 100644 --- a/src/libs/qmljs/qmljsinterpreter.cpp +++ b/src/libs/qmljs/qmljsinterpreter.cpp @@ -1472,6 +1472,8 @@ const Value *Context::lookup(const QString &name) const ObjectValue *Context::lookupType(const QmlJS::Document *doc, UiQualifiedId *qmlTypeName) { const ObjectValue *objectValue = typeEnvironment(doc); + if (!objectValue) + return 0; for (UiQualifiedId *iter = qmlTypeName; objectValue && iter; iter = iter->next) { if (! iter->name) @@ -1490,6 +1492,8 @@ const ObjectValue *Context::lookupType(const QmlJS::Document *doc, UiQualifiedId const ObjectValue *Context::lookupType(const QmlJS::Document *doc, const QStringList &qmlTypeName) { const ObjectValue *objectValue = typeEnvironment(doc); + if (!objectValue) + return 0; foreach (const QString &name, qmlTypeName) { const Value *value = objectValue->property(name, this); diff --git a/src/libs/qmljs/qmljsscopebuilder.cpp b/src/libs/qmljs/qmljsscopebuilder.cpp index a90b0b9efc..7a3bcfd86a 100644 --- a/src/libs/qmljs/qmljsscopebuilder.cpp +++ b/src/libs/qmljs/qmljsscopebuilder.cpp @@ -66,10 +66,24 @@ void ScopeBuilder::setQmlScopeObject(Node *node) { ScopeChain &scopeChain = _context->scopeChain(); - scopeChain.qmlScopeObjects.clear(); + if (_doc->bind()->isGroupedPropertyBinding(node)) { + UiObjectDefinition *definition = cast<UiObjectDefinition *>(node); + if (!definition) + return; + const Value *v = scopeObjectLookup(definition->qualifiedTypeNameId); + if (!v) + return; + const ObjectValue *object = v->asObjectValue(); + if (!object) + return; + + scopeChain.qmlScopeObjects.clear(); + scopeChain.qmlScopeObjects += object; + } const ObjectValue *scopeObject = _doc->bind()->findQmlObject(node); if (scopeObject) { + scopeChain.qmlScopeObjects.clear(); scopeChain.qmlScopeObjects += scopeObject; } else { return; // Probably syntax errors, where we're working with a "recovered" AST. @@ -130,3 +144,28 @@ void ScopeBuilder::setQmlScopeObject(Node *node) } } } + +const Value *ScopeBuilder::scopeObjectLookup(AST::UiQualifiedId *id) +{ + // do a name lookup on the scope objects + const Value *result = 0; + foreach (const ObjectValue *scopeObject, _context->scopeChain().qmlScopeObjects) { + const ObjectValue *object = scopeObject; + for (UiQualifiedId *it = id; it; it = it->next) { + result = object->property(it->name->asString(), _context); + if (!result) + break; + if (it->next) { + object = result->asObjectValue(); + if (!object) { + result = 0; + break; + } + } + } + if (result) + break; + } + + return result; +} diff --git a/src/libs/qmljs/qmljsscopebuilder.h b/src/libs/qmljs/qmljsscopebuilder.h index 6b433c749f..34485039bf 100644 --- a/src/libs/qmljs/qmljsscopebuilder.h +++ b/src/libs/qmljs/qmljsscopebuilder.h @@ -13,6 +13,7 @@ namespace AST { namespace Interpreter { class Context; + class Value; } class QMLJS_EXPORT ScopeBuilder @@ -27,6 +28,7 @@ public: private: void setQmlScopeObject(AST::Node *node); + const Interpreter::Value *scopeObjectLookup(AST::UiQualifiedId *id); Document::Ptr _doc; Interpreter::Context *_context; diff --git a/src/plugins/coreplugin/coreconstants.h b/src/plugins/coreplugin/coreconstants.h index e3f82883a8..c976cbef92 100644 --- a/src/plugins/coreplugin/coreconstants.h +++ b/src/plugins/coreplugin/coreconstants.h @@ -50,6 +50,12 @@ const char * const IDE_VERSION_LONG = IDE_VERSION; const char * const IDE_AUTHOR = "Nokia Corporation"; const char * const IDE_YEAR = "2010"; +#ifdef IDE_VERSION_DESCRIPTION +const char * const IDE_VERSION_DESCRIPTION_STR = STRINGIFY(IDE_VERSION_DESCRIPTION); +#else +const char * const IDE_VERSION_DESCRIPTION_STR = ""; +#endif + #ifdef IDE_REVISION const char * const IDE_REVISION_STR = STRINGIFY(IDE_REVISION); #else diff --git a/src/plugins/coreplugin/versiondialog.cpp b/src/plugins/coreplugin/versiondialog.cpp index c735e532be..e92b816272 100644 --- a/src/plugins/coreplugin/versiondialog.cpp +++ b/src/plugins/coreplugin/versiondialog.cpp @@ -61,7 +61,11 @@ VersionDialog::VersionDialog(QWidget *parent) layout->setSizeConstraint(QLayout::SetFixedSize); QString version = QLatin1String(IDE_VERSION_LONG); - version += QDate(2007, 25, 10).toString(Qt::SystemLocaleDate); + + QString ideVersionDescription; +#ifdef IDE_VERSION_DESCRIPTION + ideVersionDescription = tr("(%1)").arg(QLatin1String(IDE_VERSION_DESCRIPTION_STR)); +#endif QString ideRev; #ifdef IDE_REVISION @@ -70,21 +74,23 @@ VersionDialog::VersionDialog(QWidget *parent) #endif const QString description = tr( - "<h3>Qt Creator %1</h3>" + "<h3>Qt Creator %1 %8</h3>" "Based on Qt %2 (%3 bit)<br/>" "<br/>" "Built on %4 at %5<br />" "<br/>" - "%8" + "%9" "<br/>" "Copyright 2008-%6 %7. All rights reserved.<br/>" "<br/>" "The program is provided AS IS with NO WARRANTY OF ANY KIND, " "INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A " "PARTICULAR PURPOSE.<br/>") - .arg(version, QLatin1String(QT_VERSION_STR), QString::number(QSysInfo::WordSize), + .arg(version, + QLatin1String(QT_VERSION_STR), QString::number(QSysInfo::WordSize), QLatin1String(__DATE__), QLatin1String(__TIME__), QLatin1String(IDE_YEAR), - (QLatin1String(IDE_AUTHOR)), ideRev); + (QLatin1String(IDE_AUTHOR)), ideVersionDescription, + ideRev); QLabel *copyRightLabel = new QLabel(description); copyRightLabel->setWordWrap(true); diff --git a/src/plugins/cppeditor/cppplugin.cpp b/src/plugins/cppeditor/cppplugin.cpp index da9c11ed30..57528bf6f7 100644 --- a/src/plugins/cppeditor/cppplugin.cpp +++ b/src/plugins/cppeditor/cppplugin.cpp @@ -215,16 +215,16 @@ bool CppPlugin::initialize(const QStringList & /*arguments*/, QString *errorMess wizardParameters.setDisplayName(tr("C++ Class")); wizardParameters.setId(QLatin1String("A.Class")); wizardParameters.setKind(Core::IWizard::ClassWizard); - wizardParameters.setDescription(tr("Creates a header and a source file for a new class.")); + wizardParameters.setDescription(tr("Creates a C++ header and a source file for a new class that you can add to a C++ project.")); addAutoReleasedObject(new CppClassWizard(wizardParameters, core)); wizardParameters.setKind(Core::IWizard::FileWizard); - wizardParameters.setDescription(tr("Creates a C++ source file.")); + wizardParameters.setDescription(tr("Creates a C++ source file that you can add to a C++ project.")); wizardParameters.setDisplayName(tr("C++ Source File")); wizardParameters.setId(QLatin1String("B.Source")); addAutoReleasedObject(new CppFileWizard(wizardParameters, Source, core)); - wizardParameters.setDescription(tr("Creates a C++ header file.")); + wizardParameters.setDescription(tr("Creates a C++ header file that you can add to a C++ project.")); wizardParameters.setDisplayName(tr("C++ Header File")); wizardParameters.setId(QLatin1String("C.Header")); addAutoReleasedObject(new CppFileWizard(wizardParameters, Header, core)); diff --git a/src/plugins/cpptools/completionsettingspage.cpp b/src/plugins/cpptools/completionsettingspage.cpp index e001313e10..ae1882b009 100644 --- a/src/plugins/cpptools/completionsettingspage.cpp +++ b/src/plugins/cpptools/completionsettingspage.cpp @@ -32,15 +32,15 @@ #include <coreplugin/icore.h> #include <extensionsystem/pluginmanager.h> +#include <texteditor/texteditorsettings.h> #include <QtCore/QTextStream> #include <QtCore/QCoreApplication> using namespace CppTools::Internal; -CompletionSettingsPage::CompletionSettingsPage(CppCodeCompletion *completion) - : m_completion(completion) - , m_page(new Ui_CompletionSettingsPage) +CompletionSettingsPage::CompletionSettingsPage() + : m_page(new Ui_CompletionSettingsPage) { } @@ -64,23 +64,27 @@ QWidget *CompletionSettingsPage::createPage(QWidget *parent) QWidget *w = new QWidget(parent); m_page->setupUi(w); + const TextEditor::CompletionSettings &settings = + TextEditor::TextEditorSettings::instance()->completionSettings(); + int caseSensitivityIndex = 0; - switch (m_completion->caseSensitivity()) { - case CppCodeCompletion::CaseSensitive: + switch (settings.m_caseSensitivity) { + case TextEditor::CaseSensitive: caseSensitivityIndex = 0; break; - case CppCodeCompletion::CaseInsensitive: + case TextEditor::CaseInsensitive: caseSensitivityIndex = 1; break; - case CppCodeCompletion::FirstLetterCaseSensitive: + case TextEditor::FirstLetterCaseSensitive: caseSensitivityIndex = 2; break; } m_page->caseSensitivity->setCurrentIndex(caseSensitivityIndex); - m_page->autoInsertBrackets->setChecked(m_completion->autoInsertBrackets()); - m_page->partiallyComplete->setChecked(m_completion->isPartialCompletionEnabled()); - m_page->spaceAfterFunctionName->setChecked(m_completion->isSpaceAfterFunctionName()); + m_page->autoInsertBrackets->setChecked(settings.m_autoInsertBrackets); + m_page->partiallyComplete->setChecked(settings.m_partiallyComplete); + m_page->spaceAfterFunctionName->setChecked(settings.m_spaceAfterFunctionName); + if (m_searchKeywords.isEmpty()) { QTextStream(&m_searchKeywords) << m_page->caseSensitivityLabel->text() << ' ' << m_page->autoInsertBrackets->text() @@ -88,15 +92,19 @@ QWidget *CompletionSettingsPage::createPage(QWidget *parent) << ' ' << m_page->spaceAfterFunctionName->text(); m_searchKeywords.remove(QLatin1Char('&')); } + return w; } void CompletionSettingsPage::apply() { - m_completion->setCaseSensitivity(caseSensitivity()); - m_completion->setAutoInsertBrackets(m_page->autoInsertBrackets->isChecked()); - m_completion->setPartialCompletionEnabled(m_page->partiallyComplete->isChecked()); - m_completion->setSpaceAfterFunctionName(m_page->spaceAfterFunctionName->isChecked()); + TextEditor::CompletionSettings settings; + settings.m_caseSensitivity = caseSensitivity(); + settings.m_autoInsertBrackets = m_page->autoInsertBrackets->isChecked(); + settings.m_partiallyComplete = m_page->partiallyComplete->isChecked(); + settings.m_spaceAfterFunctionName = m_page->spaceAfterFunctionName->isChecked(); + + TextEditor::TextEditorSettings::instance()->setCompletionSettings(settings); } bool CompletionSettingsPage::matches(const QString &s) const @@ -104,14 +112,14 @@ bool CompletionSettingsPage::matches(const QString &s) const return m_searchKeywords.contains(s, Qt::CaseInsensitive); } -CppCodeCompletion::CaseSensitivity CompletionSettingsPage::caseSensitivity() const +TextEditor::CaseSensitivity CompletionSettingsPage::caseSensitivity() const { switch (m_page->caseSensitivity->currentIndex()) { case 0: // Full - return CppCodeCompletion::CaseSensitive; + return TextEditor::CaseSensitive; case 1: // None - return CppCodeCompletion::CaseInsensitive; + return TextEditor::CaseInsensitive; default: // First letter - return CppCodeCompletion::FirstLetterCaseSensitive; + return TextEditor::FirstLetterCaseSensitive; } } diff --git a/src/plugins/cpptools/completionsettingspage.h b/src/plugins/cpptools/completionsettingspage.h index fe9b8477c3..4221811ad6 100644 --- a/src/plugins/cpptools/completionsettingspage.h +++ b/src/plugins/cpptools/completionsettingspage.h @@ -30,10 +30,9 @@ #ifndef COMPLETIONSETTINGSPAGE_H #define COMPLETIONSETTINGSPAGE_H +#include <texteditor/completionsettings.h> #include <texteditor/texteditoroptionspage.h> -#include "cppcodecompletion.h" - QT_BEGIN_NAMESPACE class Ui_CompletionSettingsPage; QT_END_NAMESPACE @@ -41,12 +40,14 @@ QT_END_NAMESPACE namespace CppTools { namespace Internal { +// TODO: Move this class to the text editor plugin + class CompletionSettingsPage : public TextEditor::TextEditorOptionsPage { Q_OBJECT public: - CompletionSettingsPage(CppCodeCompletion *completion); + CompletionSettingsPage(); ~CompletionSettingsPage(); QString id() const; @@ -58,9 +59,8 @@ public: virtual bool matches(const QString &) const; private: - CppCodeCompletion::CaseSensitivity caseSensitivity() const; + TextEditor::CaseSensitivity caseSensitivity() const; - CppCodeCompletion *m_completion; Ui_CompletionSettingsPage *m_page; QString m_searchKeywords; }; diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp index 4edf109624..977fb4001a 100644 --- a/src/plugins/cpptools/cppcodecompletion.cpp +++ b/src/plugins/cpptools/cppcodecompletion.cpp @@ -57,6 +57,7 @@ #include <coreplugin/icore.h> #include <coreplugin/mimedatabase.h> #include <coreplugin/editormanager/editormanager.h> +#include <texteditor/completionsettings.h> #include <texteditor/itexteditor.h> #include <texteditor/itexteditable.h> #include <texteditor/basetexteditor.h> @@ -436,10 +437,6 @@ CppCodeCompletion::CppCodeCompletion(CppModelManager *manager) m_manager(manager), m_editor(0), m_startPosition(-1), - m_caseSensitivity(FirstLetterCaseSensitive), - m_autoInsertBrackets(true), - m_partialCompletionEnabled(true), - m_spaceAfterFunctionName(false), m_forcedCompletion(false), m_completionOperator(T_EOF_SYMBOL), m_objcEnabled(true) @@ -451,46 +448,6 @@ QIcon CppCodeCompletion::iconForSymbol(Symbol *symbol) const return m_icons.iconForSymbol(symbol); } -CppCodeCompletion::CaseSensitivity CppCodeCompletion::caseSensitivity() const -{ - return m_caseSensitivity; -} - -void CppCodeCompletion::setCaseSensitivity(CaseSensitivity caseSensitivity) -{ - m_caseSensitivity = caseSensitivity; -} - -bool CppCodeCompletion::autoInsertBrackets() const -{ - return m_autoInsertBrackets; -} - -void CppCodeCompletion::setAutoInsertBrackets(bool autoInsertBrackets) -{ - m_autoInsertBrackets = autoInsertBrackets; -} - -bool CppCodeCompletion::isPartialCompletionEnabled() const -{ - return m_partialCompletionEnabled; -} - -void CppCodeCompletion::setPartialCompletionEnabled(bool partialCompletionEnabled) -{ - m_partialCompletionEnabled = partialCompletionEnabled; -} - -bool CppCodeCompletion::isSpaceAfterFunctionName() const -{ - return m_spaceAfterFunctionName; -} - -void CppCodeCompletion::setSpaceAfterFunctionName(bool spaceAfterFunctionName) -{ - m_spaceAfterFunctionName = spaceAfterFunctionName; -} - /* Searches backwards for an access operator. */ @@ -1512,7 +1469,7 @@ void CppCodeCompletion::completions(QList<TextEditor::CompletionItem> *completio return; if (m_completionOperator != T_LPAREN) { - filter(m_completions, completions, key, m_caseSensitivity); + filter(m_completions, completions, key); } else if (m_completionOperator == T_LPAREN || m_completionOperator == T_SIGNAL || @@ -1590,7 +1547,9 @@ void CppCodeCompletion::complete(const TextEditor::CompletionItem &item) //qDebug() << "current symbol:" << overview.prettyName(symbol->name()) //<< overview.prettyType(symbol->type()); - if (m_autoInsertBrackets && symbol && symbol->type()) { + const bool autoInsertBrackets = completionSettings().m_autoInsertBrackets; + + if (autoInsertBrackets && symbol && symbol->type()) { if (Function *function = symbol->type()->asFunctionType()) { // If the member is a function, automatically place the opening parenthesis, // except when it might take template parameters. @@ -1603,8 +1562,8 @@ void CppCodeCompletion::complete(const TextEditor::CompletionItem &item) extraChars += QLatin1Char('<'); } } else if (! function->isAmbiguous()) { - if (m_spaceAfterFunctionName) - extraChars += QLatin1Char(' '); + if (completionSettings().m_spaceAfterFunctionName) + extraChars += QLatin1Char(' '); extraChars += QLatin1Char('('); // If the function doesn't return anything, automatically place the semicolon, @@ -1631,7 +1590,7 @@ void CppCodeCompletion::complete(const TextEditor::CompletionItem &item) } } - if (m_autoInsertBrackets && item.data.canConvert<CompleteFunctionDeclaration>()) { + if (autoInsertBrackets && item.data.canConvert<CompleteFunctionDeclaration>()) { // everything from the closing parenthesis on are extra chars, to // make sure an auto-inserted ")" gets replaced by ") const" if necessary int closingParen = toInsert.lastIndexOf(QLatin1Char(')')); @@ -1667,7 +1626,7 @@ bool CppCodeCompletion::partiallyComplete(const QList<TextEditor::CompletionItem } else if (completionItems.count() == 1) { complete(completionItems.first()); return true; - } else if (m_partialCompletionEnabled && m_completionOperator != T_LPAREN) { + } else if (m_completionOperator != T_LPAREN) { return TextEditor::ICompletionCollector::partiallyComplete(completionItems); } diff --git a/src/plugins/cpptools/cppcodecompletion.h b/src/plugins/cpptools/cppcodecompletion.h index c2938a6726..6337ed5c9f 100644 --- a/src/plugins/cpptools/cppcodecompletion.h +++ b/src/plugins/cpptools/cppcodecompletion.h @@ -86,18 +86,6 @@ public: QIcon iconForSymbol(CPlusPlus::Symbol *symbol) const; - CaseSensitivity caseSensitivity() const; - void setCaseSensitivity(CaseSensitivity caseSensitivity); - - bool autoInsertBrackets() const; - void setAutoInsertBrackets(bool autoInsertBrackets); - - bool isPartialCompletionEnabled() const; - void setPartialCompletionEnabled(bool partialCompletionEnabled); - - bool isSpaceAfterFunctionName() const; - void setSpaceAfterFunctionName(bool spaceAfterFunctionName); - private: void addKeywords(); void addMacros(const QString &fileName, const CPlusPlus::Snapshot &snapshot); @@ -159,10 +147,6 @@ private: TextEditor::ITextEditable *m_editor; int m_startPosition; // Position of the cursor from which completion started - CaseSensitivity m_caseSensitivity; - bool m_autoInsertBrackets; - bool m_partialCompletionEnabled; - bool m_spaceAfterFunctionName; bool m_forcedCompletion; unsigned m_completionOperator; bool m_objcEnabled; diff --git a/src/plugins/cpptools/cpptoolsplugin.cpp b/src/plugins/cpptools/cpptoolsplugin.cpp index 19f986a8b9..61173c8e5f 100644 --- a/src/plugins/cpptools/cpptoolsplugin.cpp +++ b/src/plugins/cpptools/cpptoolsplugin.cpp @@ -51,6 +51,7 @@ #include <coreplugin/progressmanager/progressmanager.h> #include <coreplugin/vcsmanager.h> #include <coreplugin/filemanager.h> +#include <texteditor/texteditorsettings.h> #include <cppeditor/cppeditorconstants.h> #include <QtCore/QtConcurrentRun> @@ -109,8 +110,8 @@ bool CppToolsPlugin::initialize(const QStringList &arguments, QString *error) m_modelManager, SLOT(updateSourceFiles(QStringList))); addAutoReleasedObject(m_modelManager); - m_completion = new CppCodeCompletion(m_modelManager); - addAutoReleasedObject(m_completion); + CppCodeCompletion *completion = new CppCodeCompletion(m_modelManager); + addAutoReleasedObject(completion); CppLocatorFilter *locatorFilter = new CppLocatorFilter(m_modelManager, core->editorManager()); @@ -118,7 +119,7 @@ bool CppToolsPlugin::initialize(const QStringList &arguments, QString *error) addAutoReleasedObject(new CppClassesFilter(m_modelManager, core->editorManager())); addAutoReleasedObject(new CppFunctionsFilter(m_modelManager, core->editorManager())); addAutoReleasedObject(new CppCurrentDocumentFilter(m_modelManager, core->editorManager())); - addAutoReleasedObject(new CompletionSettingsPage(m_completion)); + addAutoReleasedObject(new CompletionSettingsPage); addAutoReleasedObject(new CppFileSettingsPage(m_fileSettings)); // Menus @@ -139,17 +140,11 @@ bool CppToolsPlugin::initialize(const QStringList &arguments, QString *error) mcpptools->addAction(command); connect(switchAction, SIGNAL(triggered()), this, SLOT(switchHeaderSource())); - // Restore settings - QSettings *settings = Core::ICore::instance()->settings(); - settings->beginGroup(QLatin1String("CppTools")); - settings->beginGroup(QLatin1String("Completion")); - const int caseSensitivity = settings->value(QLatin1String("CaseSensitivity"), m_completion->caseSensitivity()).toInt(); - m_completion->setCaseSensitivity((CppCodeCompletion::CaseSensitivity) caseSensitivity); - m_completion->setAutoInsertBrackets(settings->value(QLatin1String("AutoInsertBraces"), true).toBool()); - m_completion->setPartialCompletionEnabled(settings->value(QLatin1String("PartiallyComplete"), true).toBool()); - m_completion->setSpaceAfterFunctionName(settings->value(QLatin1String("SpaceAfterFunctionName"), false).toBool()); - settings->endGroup(); - settings->endGroup(); + // Set completion settings and keep them up to date + TextEditor::TextEditorSettings *textEditorSettings = TextEditor::TextEditorSettings::instance(); + completion->setCompletionSettings(textEditorSettings->completionSettings()); + connect(textEditorSettings, SIGNAL(completionSettingsChanged(TextEditor::CompletionSettings)), + completion, SLOT(setCompletionSettings(TextEditor::CompletionSettings))); return true; } @@ -170,16 +165,6 @@ void CppToolsPlugin::extensionsInitialized() void CppToolsPlugin::aboutToShutdown() { - // Save settings - QSettings *settings = Core::ICore::instance()->settings(); - settings->beginGroup(QLatin1String("CppTools")); - settings->beginGroup(QLatin1String("Completion")); - settings->setValue(QLatin1String("CaseSensitivity"), (int) m_completion->caseSensitivity()); - settings->setValue(QLatin1String("AutoInsertBraces"), m_completion->autoInsertBrackets()); - settings->setValue(QLatin1String("PartiallyComplete"), m_completion->isPartialCompletionEnabled()); - settings->setValue(QLatin1String("SpaceAfterFunctionName"), m_completion->isSpaceAfterFunctionName()); - settings->endGroup(); - settings->endGroup(); } void CppToolsPlugin::switchHeaderSource() diff --git a/src/plugins/cpptools/cpptoolsplugin.h b/src/plugins/cpptools/cpptoolsplugin.h index c5b82982ca..ff4aa9ce81 100644 --- a/src/plugins/cpptools/cpptoolsplugin.h +++ b/src/plugins/cpptools/cpptoolsplugin.h @@ -50,7 +50,6 @@ QT_END_NAMESPACE namespace CppTools { namespace Internal { -class CppCodeCompletion; class CppModelManager; struct CppFileSettings; @@ -79,7 +78,6 @@ private: int m_context; CppModelManager *m_modelManager; - CppCodeCompletion *m_completion; QSharedPointer<CppFileSettings> m_fileSettings; static CppToolsPlugin *m_instance; diff --git a/src/plugins/cvs/checkoutwizard.cpp b/src/plugins/cvs/checkoutwizard.cpp index c999d31408..ed70c63c66 100644 --- a/src/plugins/cvs/checkoutwizard.cpp +++ b/src/plugins/cvs/checkoutwizard.cpp @@ -53,7 +53,7 @@ QIcon CheckoutWizard::icon() const QString CheckoutWizard::description() const { - return tr("Checks out a project from a CVS repository."); + return tr("Checks out a project from a CVS repository and tries to load the contained project."); } QString CheckoutWizard::displayName() const diff --git a/src/plugins/debugger/cdb/cdbdebugengine.cpp b/src/plugins/debugger/cdb/cdbdebugengine.cpp index a77383e17d..16548f9146 100644 --- a/src/plugins/debugger/cdb/cdbdebugengine.cpp +++ b/src/plugins/debugger/cdb/cdbdebugengine.cpp @@ -1584,11 +1584,12 @@ IDebuggerEngine *createCdbEngine(DebuggerManager *parent, // Create engine QString errorMessage; IDebuggerEngine *engine = CdbDebugEngine::create(parent, options, &errorMessage); - if (!engine) { + if (engine) { + QObject::connect(optionsPage, SIGNAL(debuggerPathsChanged()), engine, SLOT(syncDebuggerPaths())); + } else { optionsPage->setFailureMessage(errorMessage); qWarning("%s\n" ,qPrintable(errorMessage)); } - QObject::connect(optionsPage, SIGNAL(debuggerPathsChanged()), engine, SLOT(syncDebuggerPaths())); return engine; } diff --git a/src/plugins/designer/formeditorplugin.cpp b/src/plugins/designer/formeditorplugin.cpp index b02f0aca74..6eb8bd8d47 100644 --- a/src/plugins/designer/formeditorplugin.cpp +++ b/src/plugins/designer/formeditorplugin.cpp @@ -129,14 +129,16 @@ void FormEditorPlugin::initializeTemplates() const QString formFileType = QLatin1String(Constants::FORM_FILE_TYPE); wizardParameters.setDisplayName(tr("Qt Designer Form")); wizardParameters.setId(QLatin1String("D.Form")); - wizardParameters.setDescription(tr("Creates a Qt Designer form file (.ui).")); + wizardParameters.setDescription(tr("Creates a Qt Designer form along with a matching class (C++ header and source file) " + "for implementation purposes. You can add the form and class to an existing Qt C++ Project.")); addAutoReleasedObject(new FormWizard(wizardParameters, this)); #ifdef CPP_ENABLED wizardParameters.setKind(Core::IWizard::ClassWizard); wizardParameters.setDisplayName(tr("Qt Designer Form Class")); wizardParameters.setId(QLatin1String("C.FormClass")); - wizardParameters.setDescription(tr("Creates a Qt Designer form file (.ui) with a matching class.")); + wizardParameters.setDescription(tr("Creates a Qt Designer form that you can add to a Qt C++ project. " + "This is useful if you already have an existing class for the UI business logic.")); addAutoReleasedObject(new FormClassWizard(wizardParameters, this)); addAutoReleasedObject(new CppSettingsPage); #endif diff --git a/src/plugins/genericprojectmanager/genericprojectwizard.cpp b/src/plugins/genericprojectmanager/genericprojectwizard.cpp index 4d6b33655f..25eea3fb5a 100644 --- a/src/plugins/genericprojectmanager/genericprojectwizard.cpp +++ b/src/plugins/genericprojectmanager/genericprojectwizard.cpp @@ -96,7 +96,8 @@ Core::BaseFileWizardParameters GenericProjectWizard::parameters() parameters.setIcon(QIcon(QLatin1String(":/wizards/images/console.png"))); parameters.setDisplayName(tr("Import Existing Project")); parameters.setId(QLatin1String("Z.Makefile")); - parameters.setDescription(tr("Creates a generic project, supporting any build system.")); + parameters.setDescription(tr("Imports existing projects that do not use qmake or CMake. " + "This allows you to use Qt Creator as a code editor.")); parameters.setCategory(QLatin1String(ProjectExplorer::Constants::PROJECT_WIZARD_CATEGORY)); parameters.setDisplayCategory(QCoreApplication::translate("ProjectExplorer", ProjectExplorer::Constants::PROJECT_WIZARD_TR_CATEGORY)); return parameters; diff --git a/src/plugins/git/clonewizard.cpp b/src/plugins/git/clonewizard.cpp index 63d7c6c578..60c9c13289 100644 --- a/src/plugins/git/clonewizard.cpp +++ b/src/plugins/git/clonewizard.cpp @@ -52,7 +52,7 @@ QIcon CloneWizard::icon() const QString CloneWizard::description() const { - return tr("Clones a project from a git repository."); + return tr("Clones a project from a Git repository and tries to load the contained project."); } QString CloneWizard::displayName() const diff --git a/src/plugins/git/gitorious/gitoriousclonewizard.cpp b/src/plugins/git/gitorious/gitoriousclonewizard.cpp index de0eaec39c..46a7efab9b 100644 --- a/src/plugins/git/gitorious/gitoriousclonewizard.cpp +++ b/src/plugins/git/gitorious/gitoriousclonewizard.cpp @@ -80,7 +80,7 @@ QIcon GitoriousCloneWizard::icon() const QString GitoriousCloneWizard::description() const { - return tr("Clones a project from a Gitorious repository."); + return tr("Clones a project from a Gitorious repository and tries to load the contained project."); } QString GitoriousCloneWizard::displayName() const diff --git a/src/plugins/mercurial/clonewizard.cpp b/src/plugins/mercurial/clonewizard.cpp index 1753af17fd..2013d72d34 100644 --- a/src/plugins/mercurial/clonewizard.cpp +++ b/src/plugins/mercurial/clonewizard.cpp @@ -53,7 +53,7 @@ QIcon CloneWizard::icon() const QString CloneWizard::description() const { - return tr("Clone a Mercurial repository"); + return tr("Clones a Mercurial repository and tries to load the contained project."); } QString CloneWizard::displayName() const diff --git a/src/plugins/qmldesigner/components/propertyeditor/colorwidget.cpp b/src/plugins/qmldesigner/components/propertyeditor/colorwidget.cpp index a32ea9b719..58f0b89ace 100644 --- a/src/plugins/qmldesigner/components/propertyeditor/colorwidget.cpp +++ b/src/plugins/qmldesigner/components/propertyeditor/colorwidget.cpp @@ -389,7 +389,7 @@ void ColorBox::mouseMoveEvent(QMouseEvent *e) void GradientLine::setItemNode(const QVariant &itemNode) { - if (!itemNode.value<ModelNode>().isValid() || !QmlItemNode(itemNode.value<ModelNode>()).hasNodeParent()) + if (!itemNode.value<ModelNode>().isValid()) return; m_itemNode = itemNode.value<ModelNode>(); setup(); @@ -442,6 +442,8 @@ void GradientLine::setActiveColor(const QColor &newColor) void GradientLine::setupGradient() { ModelNode modelNode = m_itemNode.modelNode(); + if (!modelNode.isValid()) + return; m_colorList.clear(); m_stops.clear(); diff --git a/src/plugins/qmldesigner/components/propertyeditor/qmlanchorbindingproxy.cpp b/src/plugins/qmldesigner/components/propertyeditor/qmlanchorbindingproxy.cpp index d087c727bc..b5a5450bf3 100644 --- a/src/plugins/qmldesigner/components/propertyeditor/qmlanchorbindingproxy.cpp +++ b/src/plugins/qmldesigner/components/propertyeditor/qmlanchorbindingproxy.cpp @@ -74,7 +74,7 @@ void QmlAnchorBindingProxy::setup(const QmlItemNode &fxItemNode) if (horizontalCentered()) m_horizontalTarget = m_fxItemNode.anchors().instanceAnchor(AnchorLine::HorizontalCenter).qmlItemNode(); - + emit itemNodeChanged(); emit parentChanged(); emit topAnchorChanged(); emit bottomAnchorChanged(); diff --git a/src/plugins/qmljseditor/qmljscodecompletion.cpp b/src/plugins/qmljseditor/qmljscodecompletion.cpp index aae8b16863..b9e7bbbfdc 100644 --- a/src/plugins/qmljseditor/qmljscodecompletion.cpp +++ b/src/plugins/qmljseditor/qmljscodecompletion.cpp @@ -477,8 +477,7 @@ CodeCompletion::CodeCompletion(ModelManagerInterface *modelManager, QObject *par : TextEditor::ICompletionCollector(parent), m_modelManager(modelManager), m_editor(0), - m_startPosition(0), - m_caseSensitivity(Qt::CaseSensitive) + m_startPosition(0) { Q_ASSERT(modelManager); } @@ -486,12 +485,6 @@ CodeCompletion::CodeCompletion(ModelManagerInterface *modelManager, QObject *par CodeCompletion::~CodeCompletion() { } -Qt::CaseSensitivity CodeCompletion::caseSensitivity() const -{ return m_caseSensitivity; } - -void CodeCompletion::setCaseSensitivity(Qt::CaseSensitivity caseSensitivity) -{ m_caseSensitivity = caseSensitivity; } - TextEditor::ITextEditable *CodeCompletion::editor() const { return m_editor; } @@ -637,7 +630,7 @@ int CodeCompletion::startCompletion(TextEditor::ITextEditable *editor) // Set up the current scope chain. QList<AST::Node *> astPath = semanticInfo.astPath(editor->position()); - context.build(astPath , document, snapshot, m_modelManager->importPaths()); + context.build(astPath, document, snapshot, m_modelManager->importPaths()); // Search for the operator that triggered the completion. QChar completionOperator; @@ -854,7 +847,7 @@ void CodeCompletion::completions(QList<TextEditor::CompletionItem> *completions) else if (length > 0) { const QString key = m_editor->textAt(m_startPosition, length); - filter(m_completions, completions, key, FirstLetterCaseSensitive); + filter(m_completions, completions, key); if (completions->size() == 1) { if (key == completions->first().text) diff --git a/src/plugins/qmljseditor/qmljscodecompletion.h b/src/plugins/qmljseditor/qmljscodecompletion.h index aa5b19044c..7129bce900 100644 --- a/src/plugins/qmljseditor/qmljscodecompletion.h +++ b/src/plugins/qmljseditor/qmljscodecompletion.h @@ -55,9 +55,6 @@ public: CodeCompletion(ModelManagerInterface *modelManager, QObject *parent = 0); virtual ~CodeCompletion(); - Qt::CaseSensitivity caseSensitivity() const; - void setCaseSensitivity(Qt::CaseSensitivity caseSensitivity); - virtual TextEditor::ITextEditable *editor() const; virtual int startPosition() const; virtual bool shouldRestartCompletion(); @@ -81,7 +78,6 @@ private: TextEditor::ITextEditable *m_editor; int m_startPosition; QList<TextEditor::CompletionItem> m_completions; - Qt::CaseSensitivity m_caseSensitivity; QList<TextEditor::CompletionItem> m_snippets; QDateTime m_snippetFileLastModified; diff --git a/src/plugins/qmljseditor/qmljseditorplugin.cpp b/src/plugins/qmljseditor/qmljseditorplugin.cpp index a2b005f416..f998309ac1 100644 --- a/src/plugins/qmljseditor/qmljseditorplugin.cpp +++ b/src/plugins/qmljseditor/qmljseditorplugin.cpp @@ -77,8 +77,7 @@ QmlJSEditorPlugin::QmlJSEditorPlugin() : m_modelManager(0), m_wizard(0), m_editor(0), - m_actionHandler(0), - m_completion(0) + m_actionHandler(0) { m_instance = this; } @@ -148,19 +147,16 @@ bool QmlJSEditorPlugin::initialize(const QStringList & /*arguments*/, QString *e cmd = am->command(TextEditor::Constants::UN_COMMENT_SELECTION); contextMenu->addAction(cmd); - m_completion = new CodeCompletion(m_modelManager); - addAutoReleasedObject(m_completion); + CodeCompletion *completion = new CodeCompletion(m_modelManager); + addAutoReleasedObject(completion); - addAutoReleasedObject(new HoverHandler()); + addAutoReleasedObject(new HoverHandler); - // Restore settings - QSettings *settings = Core::ICore::instance()->settings(); - settings->beginGroup(QLatin1String("CppTools")); // ### FIXME: - settings->beginGroup(QLatin1String("Completion")); - const bool caseSensitive = settings->value(QLatin1String("CaseSensitive"), true).toBool(); - m_completion->setCaseSensitivity(caseSensitive ? Qt::CaseSensitive : Qt::CaseInsensitive); - settings->endGroup(); - settings->endGroup(); + // Set completion settings and keep them up to date + TextEditor::TextEditorSettings *textEditorSettings = TextEditor::TextEditorSettings::instance(); + completion->setCompletionSettings(textEditorSettings->completionSettings()); + connect(textEditorSettings, SIGNAL(completionSettingsChanged(TextEditor::CompletionSettings)), + completion, SLOT(setCompletionSettings(TextEditor::CompletionSettings))); error_message->clear(); diff --git a/src/plugins/qmljseditor/qmljseditorplugin.h b/src/plugins/qmljseditor/qmljseditorplugin.h index b119e554d0..db534f0f29 100644 --- a/src/plugins/qmljseditor/qmljseditorplugin.h +++ b/src/plugins/qmljseditor/qmljseditorplugin.h @@ -52,7 +52,6 @@ class QmlFileWizard; namespace Internal { class QmlJSEditorFactory; -class CodeCompletion; class QmlJSTextEditor; class QmlJSPreviewRunner; @@ -92,7 +91,6 @@ private: QmlFileWizard *m_wizard; QmlJSEditorFactory *m_editor; TextEditor::TextEditorActionHandler *m_actionHandler; - CodeCompletion *m_completion; }; } // namespace Internal diff --git a/src/plugins/qmlprojectmanager/qmlprojectapplicationwizard.cpp b/src/plugins/qmlprojectmanager/qmlprojectapplicationwizard.cpp index d52bec61b3..30215eb12d 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectapplicationwizard.cpp +++ b/src/plugins/qmlprojectmanager/qmlprojectapplicationwizard.cpp @@ -61,7 +61,8 @@ Core::BaseFileWizardParameters QmlProjectApplicationWizard::parameters() parameters.setIcon(QIcon(QLatin1String(":/wizards/images/console.png"))); parameters.setDisplayName(tr("Qt QML Application")); parameters.setId(QLatin1String("QA.QML Application")); - parameters.setDescription(tr("Creates a Qt QML application.")); + parameters.setDescription(tr("Creates a Qt QML application project with a single QML file containing the main view.\n\n" + "QML application projects are executed through the QML runtime and do not need to be built.")); parameters.setCategory(QLatin1String(Constants::QML_WIZARD_CATEGORY)); parameters.setDisplayCategory(QCoreApplication::translate(Constants::QML_WIZARD_TR_SCOPE, Constants::QML_WIZARD_TR_CATEGORY)); diff --git a/src/plugins/qt4projectmanager/qtversionmanager.cpp b/src/plugins/qt4projectmanager/qtversionmanager.cpp index b658c96b79..4bb885f580 100644 --- a/src/plugins/qt4projectmanager/qtversionmanager.cpp +++ b/src/plugins/qt4projectmanager/qtversionmanager.cpp @@ -627,16 +627,6 @@ bool QtVersion::supportsShadowBuilds() const // We can not support shadow building with the ABLD system return false; } - if (targets.contains(Constants::MAEMO_DEVICE_TARGET_ID)) { -#if defined(Q_OS_WIN) - // qmake -unix fails with shadow building on windows - return false; -#else - // ... but works fine anywhere else - return true; -#endif - } - return true; } diff --git a/src/plugins/qt4projectmanager/wizards/consoleappwizard.cpp b/src/plugins/qt4projectmanager/wizards/consoleappwizard.cpp index 11f313b829..d12e3f0e0b 100644 --- a/src/plugins/qt4projectmanager/wizards/consoleappwizard.cpp +++ b/src/plugins/qt4projectmanager/wizards/consoleappwizard.cpp @@ -57,7 +57,8 @@ ConsoleAppWizard::ConsoleAppWizard() QLatin1String(Constants::QT_APP_WIZARD_TR_SCOPE), QLatin1String(Constants::QT_APP_WIZARD_TR_CATEGORY), tr("Qt Console Application"), - tr("Creates a Qt console application."), + tr("Creates a project containing a single main.cpp file with a stub implementation.\n\n" + "Preselects a desktop Qt for building the application if available."), QIcon(QLatin1String(":/wizards/images/console.png"))) { } diff --git a/src/plugins/qt4projectmanager/wizards/emptyprojectwizard.cpp b/src/plugins/qt4projectmanager/wizards/emptyprojectwizard.cpp index a8c9c5c533..63cbf6fe07 100644 --- a/src/plugins/qt4projectmanager/wizards/emptyprojectwizard.cpp +++ b/src/plugins/qt4projectmanager/wizards/emptyprojectwizard.cpp @@ -44,7 +44,8 @@ EmptyProjectWizard::EmptyProjectWizard() QLatin1String(ProjectExplorer::Constants::PROJECT_WIZARD_TR_SCOPE), QLatin1String(ProjectExplorer::Constants::PROJECT_WIZARD_TR_CATEGORY), tr("Empty Qt Project"), - tr("Creates an empty Qt project."), + tr("Creates a qmake-based project without any files. This allows you to create " + "an application without any default classes."), QIcon(QLatin1String(":/wizards/images/gui.png"))) { } diff --git a/src/plugins/qt4projectmanager/wizards/guiappwizard.cpp b/src/plugins/qt4projectmanager/wizards/guiappwizard.cpp index 92bbb1a338..a112fb13ae 100644 --- a/src/plugins/qt4projectmanager/wizards/guiappwizard.cpp +++ b/src/plugins/qt4projectmanager/wizards/guiappwizard.cpp @@ -81,7 +81,9 @@ GuiAppWizard::GuiAppWizard() QLatin1String(Constants::QT_APP_WIZARD_TR_SCOPE), QLatin1String(Constants::QT_APP_WIZARD_TR_CATEGORY), tr("Qt Gui Application"), - tr("Creates a Qt Gui Application with one form."), + tr("Creates a Qt application for the desktop. " + "Includes a Qt Designer-based main window.\n\n" + "Preselects a desktop Qt for building the application if available."), QIcon(QLatin1String(":/wizards/images/gui.png"))), m_createMobileProject(false) { diff --git a/src/plugins/qt4projectmanager/wizards/librarywizard.cpp b/src/plugins/qt4projectmanager/wizards/librarywizard.cpp index 65e115c1e1..39eede1791 100644 --- a/src/plugins/qt4projectmanager/wizards/librarywizard.cpp +++ b/src/plugins/qt4projectmanager/wizards/librarywizard.cpp @@ -53,7 +53,9 @@ LibraryWizard::LibraryWizard() QLatin1String(ProjectExplorer::Constants::PROJECT_WIZARD_TR_SCOPE), QLatin1String(ProjectExplorer::Constants::PROJECT_WIZARD_TR_CATEGORY), tr("C++ Library"), - tr("Creates a Qt based C++ Library."), + tr("Creates a C++ library based on qmake. This can be used to create:<ul>" + "<li>a shared C++ library for use with <tt>QPluginLoader</tt> and runtime (Plugins)</li>" + "<li>a shared or static C++ library for use with another project at linktime</li></ul>."), QIcon(QLatin1String(":/wizards/images/lib.png"))) { } diff --git a/src/plugins/qt4projectmanager/wizards/mobileguiappwizard.cpp b/src/plugins/qt4projectmanager/wizards/mobileguiappwizard.cpp index e5815ec139..0d5d1bcc6a 100644 --- a/src/plugins/qt4projectmanager/wizards/mobileguiappwizard.cpp +++ b/src/plugins/qt4projectmanager/wizards/mobileguiappwizard.cpp @@ -42,7 +42,9 @@ MobileGuiAppWizard::MobileGuiAppWizard() : QLatin1String(Constants::QT_APP_WIZARD_TR_SCOPE), QLatin1String(Constants::QT_APP_WIZARD_TR_CATEGORY), tr("Mobile Qt Application"), - tr("Creates a mobile Qt Gui Application with one form."), + tr("Creates a Qt application optimized for mobile devices " + "with a Qt Designer-based main window.\n\n" + "Preselects Qt for Simulator and mobile targets if available"), QIcon(QLatin1String(":/projectexplorer/images/SymbianDevice.png")), true) { diff --git a/src/plugins/qt4projectmanager/wizards/testwizard.cpp b/src/plugins/qt4projectmanager/wizards/testwizard.cpp index 33223db97b..55b3e21ae8 100644 --- a/src/plugins/qt4projectmanager/wizards/testwizard.cpp +++ b/src/plugins/qt4projectmanager/wizards/testwizard.cpp @@ -49,7 +49,9 @@ TestWizard::TestWizard() : QLatin1String(ProjectExplorer::Constants::PROJECT_WIZARD_TR_SCOPE), QLatin1String(ProjectExplorer::Constants::PROJECT_WIZARD_TR_CATEGORY), tr("Qt Unit Test"), - tr("Creates a Qt Unit Test."), + tr("Creates a QTestLib-based unit test for a feature or a class. " + "Unit tests allow you to verify that the code is fit for use " + "and that there are no regressions."), QIcon(QLatin1String(":/wizards/images/console.png"))) { } diff --git a/src/plugins/resourceeditor/resourceeditorplugin.cpp b/src/plugins/resourceeditor/resourceeditorplugin.cpp index e9c67cf254..2638df860b 100644 --- a/src/plugins/resourceeditor/resourceeditorplugin.cpp +++ b/src/plugins/resourceeditor/resourceeditorplugin.cpp @@ -75,7 +75,7 @@ bool ResourceEditorPlugin::initialize(const QStringList &arguments, QString *err addObject(m_editor); Core::BaseFileWizardParameters wizardParameters(Core::IWizard::FileWizard); - wizardParameters.setDescription(tr("Creates a Qt Resource file (.qrc).")); + wizardParameters.setDescription(tr("Creates a Qt Resource file (.qrc) that you can add to a Qt C++ project.")); wizardParameters.setDisplayName(tr("Qt Resource file")); wizardParameters.setId(QLatin1String("F.Resource")); wizardParameters.setCategory(QLatin1String(Core::Constants::WIZARD_CATEGORY_QT)); diff --git a/src/plugins/subversion/checkoutwizard.cpp b/src/plugins/subversion/checkoutwizard.cpp index 5c3392e369..dbe355b813 100644 --- a/src/plugins/subversion/checkoutwizard.cpp +++ b/src/plugins/subversion/checkoutwizard.cpp @@ -53,7 +53,7 @@ QIcon CheckoutWizard::icon() const QString CheckoutWizard::description() const { - return tr("Checks out a project from a Subversion repository."); + return tr("Checks out a project from a Subversion repository and tries to load the contained project."); } QString CheckoutWizard::displayName() const diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp index 4964ec634b..413011f9c3 100644 --- a/src/plugins/texteditor/basetexteditor.cpp +++ b/src/plugins/texteditor/basetexteditor.cpp @@ -34,6 +34,7 @@ #include "basetexteditor_p.h" #include "behaviorsettings.h" #include "codecselector.h" +#include "completionsettings.h" #include "completionsupport.h" #include "tabsettings.h" #include "texteditorconstants.h" @@ -179,7 +180,7 @@ static void convertToPlainText(QString &txt) BaseTextEditor::BaseTextEditor(QWidget *parent) : QPlainTextEdit(parent) { - d = new BaseTextEditorPrivate(); + d = new BaseTextEditorPrivate; d->q = this; d->m_extraArea = new TextEditExtraArea(this); d->m_extraArea->setMouseTracking(true); @@ -195,8 +196,6 @@ BaseTextEditor::BaseTextEditor(QWidget *parent) d->m_lastScrollPos = -1; setCursorWidth(2); - d->m_allowSkippingOfBlockEnd = false; - // from RESEARCH setLayoutDirection(Qt::LeftToRight); @@ -221,7 +220,6 @@ BaseTextEditor::BaseTextEditor(QWidget *parent) // parentheses matcher - d->m_parenthesesMatchingEnabled = false; d->m_formatRange = true; d->m_matchFormat.setForeground(Qt::red); d->m_rangeFormat.setBackground(QColor(0xb4, 0xee, 0xb4)); @@ -1709,6 +1707,16 @@ bool BaseTextEditor::isParenthesesMatchingEnabled() const return d->m_parenthesesMatchingEnabled; } +void BaseTextEditor::setAutoParenthesesEnabled(bool b) +{ + d->m_autoParenthesesEnabled = b; +} + +bool BaseTextEditor::isAutoParenthesesEnabled() const +{ + return d->m_autoParenthesesEnabled; +} + void BaseTextEditor::setHighlightCurrentLine(bool b) { d->m_highlightCurrentLine = b; @@ -1837,8 +1845,10 @@ BaseTextEditorPrivate::BaseTextEditorPrivate() : m_contentsChanged(false), m_lastCursorChangeWasInteresting(false), - m_document(new BaseTextDocument()), + m_allowSkippingOfBlockEnd(false), + m_document(new BaseTextDocument), m_parenthesesMatchingEnabled(false), + m_autoParenthesesEnabled(true), m_extraArea(0), m_mouseOnCollapsedMarker(false), m_marksVisible(false), @@ -3889,13 +3899,16 @@ QString BaseTextEditor::autoComplete(QTextCursor &cursor, const QString &textToI const bool checkBlockEnd = d->m_allowSkippingOfBlockEnd; d->m_allowSkippingOfBlockEnd = false; // consume blockEnd. + if (!d->m_autoParenthesesEnabled) + return QString(); + if (!contextAllowsAutoParentheses(cursor, textToInsert)) return QString(); const QString text = textToInsert; const QChar lookAhead = characterAt(cursor.selectionEnd()); - QChar character = textToInsert.at(0); + const QChar character = textToInsert.at(0); const QString parentheses = QLatin1String("()"); const QString brackets = QLatin1String("[]"); if (parentheses.contains(character) || brackets.contains(character)) { @@ -3950,17 +3963,20 @@ bool BaseTextEditor::autoBackspace(QTextCursor &cursor) { d->m_allowSkippingOfBlockEnd = false; + if (!d->m_autoParenthesesEnabled) + return false; + int pos = cursor.position(); if (pos == 0) return false; QTextCursor c = cursor; c.setPosition(pos - 1); - QChar lookAhead = characterAt(pos); - QChar lookBehind = characterAt(pos-1); - QChar lookFurtherBehind = characterAt(pos-2); + const QChar lookAhead = characterAt(pos); + const QChar lookBehind = characterAt(pos - 1); + const QChar lookFurtherBehind = characterAt(pos - 2); - QChar character = lookBehind; + const QChar character = lookBehind; if (character == QLatin1Char('(') || character == QLatin1Char('[')) { QTextCursor tmp = cursor; TextEditor::TextBlockUserData::findPreviousBlockOpenParenthesis(&tmp); @@ -4005,7 +4021,10 @@ bool BaseTextEditor::autoBackspace(QTextCursor &cursor) int BaseTextEditor::paragraphSeparatorAboutToBeInserted(QTextCursor &cursor) { - if (characterAt(cursor.position()-1) != QLatin1Char('{')) + if (!d->m_autoParenthesesEnabled) + return 0; + + if (characterAt(cursor.position() - 1) != QLatin1Char('{')) return 0; if (!contextAllowsAutoParentheses(cursor)) @@ -4908,6 +4927,11 @@ void BaseTextEditor::setStorageSettings(const StorageSettings &storageSettings) d->m_document->setStorageSettings(storageSettings); } +void BaseTextEditor::setCompletionSettings(const TextEditor::CompletionSettings &completionSettings) +{ + setAutoParenthesesEnabled(completionSettings.m_autoInsertBrackets); +} + void BaseTextEditor::collapse() { QTextDocument *doc = document(); diff --git a/src/plugins/texteditor/basetexteditor.h b/src/plugins/texteditor/basetexteditor.h index fed0d251d5..967543a619 100644 --- a/src/plugins/texteditor/basetexteditor.h +++ b/src/plugins/texteditor/basetexteditor.h @@ -59,6 +59,7 @@ class BaseTextDocument; class BaseTextEditorEditable; class FontSettings; struct BehaviorSettings; +struct CompletionSettings; struct DisplaySettings; struct StorageSettings; struct TabSettings; @@ -160,13 +161,15 @@ public: void setParenthesesMatchingEnabled(bool b); bool isParenthesesMatchingEnabled() const; + void setAutoParenthesesEnabled(bool b); + bool isAutoParenthesesEnabled() const; + void setHighlightCurrentLine(bool b); bool highlightCurrentLine() const; void setLineNumbersVisible(bool b); bool lineNumbersVisible() const; - void setMarksVisible(bool b); bool marksVisible() const; @@ -366,6 +369,7 @@ public slots: virtual void setDisplaySettings(const TextEditor::DisplaySettings &); virtual void setBehaviorSettings(const TextEditor::BehaviorSettings &); virtual void setStorageSettings(const TextEditor::StorageSettings &); + virtual void setCompletionSettings(const TextEditor::CompletionSettings &); protected: bool viewportEvent(QEvent *event); diff --git a/src/plugins/texteditor/basetexteditor_p.h b/src/plugins/texteditor/basetexteditor_p.h index cd8eb7c3d1..784d95fd9e 100644 --- a/src/plugins/texteditor/basetexteditor_p.h +++ b/src/plugins/texteditor/basetexteditor_p.h @@ -265,7 +265,6 @@ public: int m_cursorBlockNumber; bool m_inKeyPressEvent; - }; } // namespace Internal diff --git a/src/plugins/texteditor/completionsettings.cpp b/src/plugins/texteditor/completionsettings.cpp new file mode 100644 index 0000000000..0d800da3b3 --- /dev/null +++ b/src/plugins/texteditor/completionsettings.cpp @@ -0,0 +1,86 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** Commercial Usage +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** GNU Lesser General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** +**************************************************************************/ + +#include "completionsettings.h" + +#include <QtCore/QSettings> + +static const char * const groupPostfix = "Completion"; +static const char * const caseSensitivityKey = "CaseSensitivity"; +static const char * const autoInsertBracesKey = "AutoInsertBraces"; +static const char * const partiallyCompleteKey = "PartiallyComplete"; +static const char * const spaceAfterFunctionNameKey = "SpaceAfterFunctionName"; + +using namespace TextEditor; + +CompletionSettings::CompletionSettings() + : m_caseSensitivity(FirstLetterCaseSensitive) + , m_autoInsertBrackets(true) + , m_partiallyComplete(true) + , m_spaceAfterFunctionName(false) +{ +} + +void CompletionSettings::toSettings(const QString &category, QSettings *s) const +{ + QString group = QLatin1String(groupPostfix); + if (!category.isEmpty()) + group.insert(0, category); + + s->beginGroup(group); + s->setValue(QLatin1String(caseSensitivityKey), (int) m_caseSensitivity); + s->setValue(QLatin1String(autoInsertBracesKey), m_autoInsertBrackets); + s->setValue(QLatin1String(partiallyCompleteKey), m_partiallyComplete); + s->setValue(QLatin1String(spaceAfterFunctionNameKey), m_spaceAfterFunctionName); + s->endGroup(); +} + +void CompletionSettings::fromSettings(const QString &category, const QSettings *s) +{ + QString group = QLatin1String(groupPostfix); + if (!category.isEmpty()) + group.insert(0, category); + group += QLatin1Char('/'); + + *this = CompletionSettings(); // Assign defaults + + m_caseSensitivity = (CaseSensitivity) s->value(group + QLatin1String(caseSensitivityKey), m_caseSensitivity).toInt(); + m_autoInsertBrackets = s->value(group + QLatin1String(autoInsertBracesKey), m_autoInsertBrackets).toBool(); + m_partiallyComplete = s->value(group + QLatin1String(partiallyCompleteKey), m_partiallyComplete).toBool(); + m_spaceAfterFunctionName = s->value(group + QLatin1String(spaceAfterFunctionNameKey), m_spaceAfterFunctionName).toBool(); +} + +bool CompletionSettings::equals(const CompletionSettings &cs) const +{ + return m_caseSensitivity == cs.m_caseSensitivity + && m_autoInsertBrackets == cs.m_autoInsertBrackets + && m_partiallyComplete == cs.m_partiallyComplete + && m_spaceAfterFunctionName == cs.m_spaceAfterFunctionName + ; +} diff --git a/src/plugins/texteditor/completionsettings.h b/src/plugins/texteditor/completionsettings.h new file mode 100644 index 0000000000..0d35abf9bb --- /dev/null +++ b/src/plugins/texteditor/completionsettings.h @@ -0,0 +1,70 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** Commercial Usage +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** GNU Lesser General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** +**************************************************************************/ + +#ifndef COMPLETIONSETTINGS_H +#define COMPLETIONSETTINGS_H + +#include "texteditor_global.h" + +QT_BEGIN_NAMESPACE +class QSettings; +QT_END_NAMESPACE + +namespace TextEditor { + +enum CaseSensitivity { + CaseInsensitive, + CaseSensitive, + FirstLetterCaseSensitive +}; + +/** + * Settings that describe how the code completion behaves. + */ +struct TEXTEDITOR_EXPORT CompletionSettings +{ + CompletionSettings(); + + void toSettings(const QString &category, QSettings *s) const; + void fromSettings(const QString &category, const QSettings *s); + + bool equals(const CompletionSettings &bs) const; + + CaseSensitivity m_caseSensitivity; + bool m_autoInsertBrackets; + bool m_partiallyComplete; + bool m_spaceAfterFunctionName; +}; + +inline bool operator==(const CompletionSettings &t1, const CompletionSettings &t2) { return t1.equals(t2); } +inline bool operator!=(const CompletionSettings &t1, const CompletionSettings &t2) { return !t1.equals(t2); } + +} // namespace TextEditor + +#endif // COMPLETIONSETTINGS_H diff --git a/src/plugins/texteditor/icompletioncollector.cpp b/src/plugins/texteditor/icompletioncollector.cpp index 9bf453e1b5..0d4dd12966 100644 --- a/src/plugins/texteditor/icompletioncollector.cpp +++ b/src/plugins/texteditor/icompletioncollector.cpp @@ -28,11 +28,27 @@ **************************************************************************/ #include "icompletioncollector.h" + +#include "completionsettings.h" #include "itexteditable.h" + #include <QtCore/QRegExp> #include <algorithm> using namespace TextEditor; +using namespace TextEditor::Internal; + +namespace TextEditor { +namespace Internal { + +struct ICompletionCollectorPrivate +{ +public: + CompletionSettings m_completionSettings; +}; + +} // namespace Internal +} // namespace TextEditor bool ICompletionCollector::compareChar(const QChar &l, const QChar &r) { @@ -62,6 +78,27 @@ bool ICompletionCollector::completionItemLessThan(const CompletionItem &i1, cons return lessThan(lower1, lower2); } +ICompletionCollector::ICompletionCollector(QObject *parent) + : QObject(parent) + , m_d(new Internal::ICompletionCollectorPrivate) +{ +} + +ICompletionCollector::~ICompletionCollector() +{ + delete m_d; +} + +void ICompletionCollector::setCompletionSettings(const CompletionSettings &settings) +{ + m_d->m_completionSettings = settings; +} + +const CompletionSettings &ICompletionCollector::completionSettings() const +{ + return m_d->m_completionSettings; +} + QList<CompletionItem> ICompletionCollector::getCompletions() { QList<CompletionItem> completionItems; @@ -88,6 +125,9 @@ QList<CompletionItem> ICompletionCollector::getCompletions() bool ICompletionCollector::partiallyComplete(const QList<TextEditor::CompletionItem> &completionItems) { + if (! m_d->m_completionSettings.m_partiallyComplete) + return false; + // Compute common prefix QString firstKey = completionItems.first().text; QString lastKey = completionItems.last().text; @@ -113,9 +153,10 @@ bool ICompletionCollector::partiallyComplete(const QList<TextEditor::CompletionI void ICompletionCollector::filter(const QList<TextEditor::CompletionItem> &items, QList<TextEditor::CompletionItem> *filteredItems, - const QString &key, - ICompletionCollector::CaseSensitivity caseSensitivity) + const QString &key) { + const TextEditor::CaseSensitivity caseSensitivity = m_d->m_completionSettings.m_caseSensitivity; + /* * This code builds a regular expression in order to more intelligently match * camel-case style. This means upper-case characters will be rewritten as follows: @@ -132,8 +173,8 @@ void ICompletionCollector::filter(const QList<TextEditor::CompletionItem> &items bool first = true; const QLatin1String wordContinuation("[a-z0-9_]*"); foreach (const QChar &c, key) { - if (caseSensitivity == CaseInsensitive || - (caseSensitivity == FirstLetterCaseSensitive && !first)) { + if (caseSensitivity == TextEditor::CaseInsensitive || + (caseSensitivity == TextEditor::FirstLetterCaseSensitive && !first)) { keyRegExp += QLatin1String("(?:"); if (c.isUpper() && !first) @@ -158,7 +199,7 @@ void ICompletionCollector::filter(const QList<TextEditor::CompletionItem> &items if (hasKey) { if (item.text.startsWith(key, Qt::CaseSensitive)) { item.relevance = 2; - } else if (caseSensitivity != CaseSensitive + } else if (caseSensitivity != TextEditor::CaseSensitive && item.text.startsWith(key, Qt::CaseInsensitive)) { item.relevance = 1; } diff --git a/src/plugins/texteditor/icompletioncollector.h b/src/plugins/texteditor/icompletioncollector.h index e2cfdfacd8..e78ad83b82 100644 --- a/src/plugins/texteditor/icompletioncollector.h +++ b/src/plugins/texteditor/icompletioncollector.h @@ -38,8 +38,13 @@ namespace TextEditor { +namespace Internal { +class ICompletionCollectorPrivate; +} + class ICompletionCollector; class ITextEditable; +struct CompletionSettings; struct CompletionItem { @@ -73,8 +78,10 @@ class TEXTEDITOR_EXPORT ICompletionCollector : public QObject { Q_OBJECT public: - ICompletionCollector(QObject *parent = 0) : QObject(parent) {} - virtual ~ICompletionCollector() {} + ICompletionCollector(QObject *parent = 0); + virtual ~ICompletionCollector(); + + const CompletionSettings &completionSettings() const; virtual QList<CompletionItem> getCompletions(); virtual bool shouldRestartCompletion(); @@ -120,21 +127,20 @@ public: // helpers - enum CaseSensitivity { - CaseInsensitive, - CaseSensitive, - FirstLetterCaseSensitive - }; - void filter(const QList<TextEditor::CompletionItem> &items, QList<TextEditor::CompletionItem> *filteredItems, - const QString &key, - CaseSensitivity caseSensitivity); + const QString &key); + +public slots: + void setCompletionSettings(const TextEditor::CompletionSettings &); protected: static bool compareChar(const QChar &item, const QChar &other); static bool lessThan(const QString &item, const QString &other); static bool completionItemLessThan(const CompletionItem &item, const CompletionItem &other); + +private: + Internal::ICompletionCollectorPrivate *m_d; }; class TEXTEDITOR_EXPORT IQuickFixCollector : public ICompletionCollector diff --git a/src/plugins/texteditor/texteditor.pro b/src/plugins/texteditor/texteditor.pro index 26429c0858..a27f857809 100644 --- a/src/plugins/texteditor/texteditor.pro +++ b/src/plugins/texteditor/texteditor.pro @@ -34,7 +34,8 @@ SOURCES += texteditorplugin.cpp \ itexteditor.cpp \ texteditoroverlay.cpp \ texteditoroptionspage.cpp \ - basetextdocumentlayout.cpp + basetextdocumentlayout.cpp \ + completionsettings.cpp HEADERS += texteditorplugin.h \ textfilewizard.h \ @@ -71,7 +72,8 @@ HEADERS += texteditorplugin.h \ colorschemeedit.h \ texteditoroverlay.h \ texteditoroptionspage.h \ - basetextdocumentlayout.h + basetextdocumentlayout.h \ + completionsettings.h FORMS += behaviorsettingspage.ui \ diff --git a/src/plugins/texteditor/texteditorplugin.cpp b/src/plugins/texteditor/texteditorplugin.cpp index 410325dbab..dca81bed5a 100644 --- a/src/plugins/texteditor/texteditorplugin.cpp +++ b/src/plugins/texteditor/texteditorplugin.cpp @@ -91,7 +91,8 @@ bool TextEditorPlugin::initialize(const QStringList &arguments, QString *errorMe return false; Core::BaseFileWizardParameters wizardParameters(Core::IWizard::FileWizard); - wizardParameters.setDescription(tr("Creates a text file (.txt).")); + wizardParameters.setDescription(tr("Creates a text file. The default file extension is <tt>.txt</tt>. " + "You can specify a different extension as part of the filename.")); wizardParameters.setDisplayName(tr("Text File")); wizardParameters.setCategory(QLatin1String("U.General")); wizardParameters.setDisplayCategory(tr("General")); diff --git a/src/plugins/texteditor/texteditorsettings.cpp b/src/plugins/texteditor/texteditorsettings.cpp index de018d407f..26a829eba8 100644 --- a/src/plugins/texteditor/texteditorsettings.cpp +++ b/src/plugins/texteditor/texteditorsettings.cpp @@ -33,6 +33,7 @@ #include "basetexteditor.h" #include "behaviorsettings.h" #include "behaviorsettingspage.h" +#include "completionsettings.h" #include "displaysettings.h" #include "displaysettingspage.h" #include "fontsettingspage.h" @@ -41,17 +42,54 @@ #include "texteditorplugin.h" #include <extensionsystem/pluginmanager.h> +#include <coreplugin/icore.h> #include <utils/qtcassert.h> #include <QtGui/QApplication> using namespace TextEditor; using namespace TextEditor::Constants; +using namespace TextEditor::Internal; + +namespace TextEditor { +namespace Internal { + +class TextEditorSettingsPrivate +{ +public: + FontSettingsPage *m_fontSettingsPage; + BehaviorSettingsPage *m_behaviorSettingsPage; + DisplaySettingsPage *m_displaySettingsPage; + + CompletionSettings m_completionSettings; + + void fontZoomRequested(int pointSize); + void zoomResetRequested(); +}; + +void TextEditorSettingsPrivate::fontZoomRequested(int zoom) +{ + FontSettings &fs = const_cast<FontSettings&>(m_fontSettingsPage->fontSettings()); + fs.setFontZoom(qMax(10, fs.fontZoom() + zoom)); + m_fontSettingsPage->saveSettings(); +} + +void TextEditorSettingsPrivate::zoomResetRequested() +{ + FontSettings &fs = const_cast<FontSettings&>(m_fontSettingsPage->fontSettings()); + fs.setFontZoom(100); + m_fontSettingsPage->saveSettings(); +} + +} // namespace Internal +} // namespace TextEditor + TextEditorSettings *TextEditorSettings::m_instance = 0; TextEditorSettings::TextEditorSettings(QObject *parent) : QObject(parent) + , m_d(new Internal::TextEditorSettingsPrivate) { QTC_ASSERT(!m_instance, return); m_instance = this; @@ -102,44 +140,50 @@ TextEditorSettings::TextEditorSettings(QObject *parent) formatDescriptions.append(FormatDescription(QLatin1String(C_DIFF_FILE), tr("Diff File"), Qt::darkBlue)); formatDescriptions.append(FormatDescription(QLatin1String(C_DIFF_LOCATION), tr("Diff Location"), Qt::blue)); - m_fontSettingsPage = new FontSettingsPage(formatDescriptions, - QLatin1String("A.FontSettings"), - this); - pm->addObject(m_fontSettingsPage); + m_d->m_fontSettingsPage = new FontSettingsPage(formatDescriptions, + QLatin1String("A.FontSettings"), + this); + pm->addObject(m_d->m_fontSettingsPage); // Add the GUI used to configure the tab, storage and interaction settings TextEditor::BehaviorSettingsPageParameters behaviorSettingsPageParameters; behaviorSettingsPageParameters.id = QLatin1String("B.BehaviourSettings"); behaviorSettingsPageParameters.displayName = tr("Behavior"); behaviorSettingsPageParameters.settingsPrefix = QLatin1String("text"); - m_behaviorSettingsPage = new BehaviorSettingsPage(behaviorSettingsPageParameters, this); - pm->addObject(m_behaviorSettingsPage); + m_d->m_behaviorSettingsPage = new BehaviorSettingsPage(behaviorSettingsPageParameters, this); + pm->addObject(m_d->m_behaviorSettingsPage); TextEditor::DisplaySettingsPageParameters displaySettingsPageParameters; displaySettingsPageParameters.id = QLatin1String("D.DisplaySettings"), displaySettingsPageParameters.displayName = tr("Display"); displaySettingsPageParameters.settingsPrefix = QLatin1String("text"); - m_displaySettingsPage = new DisplaySettingsPage(displaySettingsPageParameters, this); - pm->addObject(m_displaySettingsPage); + m_d->m_displaySettingsPage = new DisplaySettingsPage(displaySettingsPageParameters, this); + pm->addObject(m_d->m_displaySettingsPage); - connect(m_fontSettingsPage, SIGNAL(changed(TextEditor::FontSettings)), + connect(m_d->m_fontSettingsPage, SIGNAL(changed(TextEditor::FontSettings)), this, SIGNAL(fontSettingsChanged(TextEditor::FontSettings))); - connect(m_behaviorSettingsPage, SIGNAL(tabSettingsChanged(TextEditor::TabSettings)), + connect(m_d->m_behaviorSettingsPage, SIGNAL(tabSettingsChanged(TextEditor::TabSettings)), this, SIGNAL(tabSettingsChanged(TextEditor::TabSettings))); - connect(m_behaviorSettingsPage, SIGNAL(storageSettingsChanged(TextEditor::StorageSettings)), + connect(m_d->m_behaviorSettingsPage, SIGNAL(storageSettingsChanged(TextEditor::StorageSettings)), this, SIGNAL(storageSettingsChanged(TextEditor::StorageSettings))); - connect(m_behaviorSettingsPage, SIGNAL(behaviorSettingsChanged(TextEditor::BehaviorSettings)), + connect(m_d->m_behaviorSettingsPage, SIGNAL(behaviorSettingsChanged(TextEditor::BehaviorSettings)), this, SIGNAL(behaviorSettingsChanged(TextEditor::BehaviorSettings))); - connect(m_displaySettingsPage, SIGNAL(displaySettingsChanged(TextEditor::DisplaySettings)), + connect(m_d->m_displaySettingsPage, SIGNAL(displaySettingsChanged(TextEditor::DisplaySettings)), this, SIGNAL(displaySettingsChanged(TextEditor::DisplaySettings))); + + // TODO: Move these settings to TextEditor category + if (QSettings *s = Core::ICore::instance()->settings()) + m_d->m_completionSettings.fromSettings(QLatin1String("CppTools/"), s); } TextEditorSettings::~TextEditorSettings() { ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); - pm->removeObject(m_fontSettingsPage); - pm->removeObject(m_behaviorSettingsPage); - pm->removeObject(m_displaySettingsPage); + pm->removeObject(m_d->m_fontSettingsPage); + pm->removeObject(m_d->m_behaviorSettingsPage); + pm->removeObject(m_d->m_displaySettingsPage); + + delete m_d; m_instance = 0; } @@ -166,6 +210,8 @@ void TextEditorSettings::initializeEditor(BaseTextEditor *editor) editor, SLOT(setBehaviorSettings(TextEditor::BehaviorSettings))); connect(this, SIGNAL(displaySettingsChanged(TextEditor::DisplaySettings)), editor, SLOT(setDisplaySettings(TextEditor::DisplaySettings))); + connect(this, SIGNAL(completionSettingsChanged(TextEditor::CompletionSettings)), + editor, SLOT(setCompletionSettings(TextEditor::CompletionSettings))); connect(editor, SIGNAL(requestFontZoom(int)), this, SLOT(fontZoomRequested(int))); @@ -178,44 +224,50 @@ void TextEditorSettings::initializeEditor(BaseTextEditor *editor) editor->setStorageSettings(storageSettings()); editor->setBehaviorSettings(behaviorSettings()); editor->setDisplaySettings(displaySettings()); + editor->setCompletionSettings(completionSettings()); } -void TextEditorSettings::fontZoomRequested(int zoom) +const FontSettings &TextEditorSettings::fontSettings() const { - FontSettings &fs = const_cast<FontSettings&>(fontSettings()); - fs.setFontZoom(qMax(10, fs.fontZoom() + zoom)); - m_fontSettingsPage->saveSettings(); + return m_d->m_fontSettingsPage->fontSettings(); } -void TextEditorSettings::zoomResetRequested() +const TabSettings &TextEditorSettings::tabSettings() const { - FontSettings &fs = const_cast<FontSettings&>(fontSettings()); - fs.setFontZoom(100); - m_fontSettingsPage->saveSettings(); + return m_d->m_behaviorSettingsPage->tabSettings(); } -const FontSettings &TextEditorSettings::fontSettings() const +const StorageSettings &TextEditorSettings::storageSettings() const { - return m_fontSettingsPage->fontSettings(); + return m_d->m_behaviorSettingsPage->storageSettings(); } -const TabSettings &TextEditorSettings::tabSettings() const +const BehaviorSettings &TextEditorSettings::behaviorSettings() const { - return m_behaviorSettingsPage->tabSettings(); + return m_d->m_behaviorSettingsPage->behaviorSettings(); } -const StorageSettings &TextEditorSettings::storageSettings() const +const DisplaySettings &TextEditorSettings::displaySettings() const { - return m_behaviorSettingsPage->storageSettings(); + return m_d->m_displaySettingsPage->displaySettings(); } -const BehaviorSettings &TextEditorSettings::behaviorSettings() const +const CompletionSettings &TextEditorSettings::completionSettings() const { - return m_behaviorSettingsPage->behaviorSettings(); + return m_d->m_completionSettings; } -const DisplaySettings &TextEditorSettings::displaySettings() const +void TextEditorSettings::setCompletionSettings(const TextEditor::CompletionSettings &settings) { - return m_displaySettingsPage->displaySettings(); + if (m_d->m_completionSettings == settings) + return; + + m_d->m_completionSettings = settings; + if (QSettings *s = Core::ICore::instance()->settings()) + m_d->m_completionSettings.toSettings(QLatin1String("CppTools/"), s); + + emit completionSettingsChanged(m_d->m_completionSettings); } + +#include "moc_texteditorsettings.cpp" diff --git a/src/plugins/texteditor/texteditorsettings.h b/src/plugins/texteditor/texteditorsettings.h index a5836304be..ff6c9b9586 100644 --- a/src/plugins/texteditor/texteditorsettings.h +++ b/src/plugins/texteditor/texteditorsettings.h @@ -45,11 +45,16 @@ struct TabSettings; struct StorageSettings; struct BehaviorSettings; struct DisplaySettings; +struct CompletionSettings; + +namespace Internal { +class TextEditorSettingsPrivate; +} /** * This class provides a central place for basic text editor settings. These * settings include font settings, tab settings, storage settings, behavior - * settings and display settings. + * settings, display settings and completion settings. */ class TEXTEDITOR_EXPORT TextEditorSettings : public QObject { @@ -68,6 +73,9 @@ public: const StorageSettings &storageSettings() const; const BehaviorSettings &behaviorSettings() const; const DisplaySettings &displaySettings() const; + const CompletionSettings &completionSettings() const; + + void setCompletionSettings(const TextEditor::CompletionSettings &); signals: void fontSettingsChanged(const TextEditor::FontSettings &); @@ -75,15 +83,12 @@ signals: void storageSettingsChanged(const TextEditor::StorageSettings &); void behaviorSettingsChanged(const TextEditor::BehaviorSettings &); void displaySettingsChanged(const TextEditor::DisplaySettings &); - -private slots: - void fontZoomRequested(int pointSize); - void zoomResetRequested(); + void completionSettingsChanged(const TextEditor::CompletionSettings &); private: - FontSettingsPage *m_fontSettingsPage; - BehaviorSettingsPage *m_behaviorSettingsPage; - DisplaySettingsPage *m_displaySettingsPage; + Internal::TextEditorSettingsPrivate *m_d; + Q_PRIVATE_SLOT(m_d, void fontZoomRequested(int pointSize)); + Q_PRIVATE_SLOT(m_d, void zoomResetRequested()); static TextEditorSettings *m_instance; }; diff --git a/src/plugins/welcome/images/welcomebg.png b/src/plugins/welcome/images/welcomebg.png Binary files differindex 43e26923f6..a82abe93f7 100644 --- a/src/plugins/welcome/images/welcomebg.png +++ b/src/plugins/welcome/images/welcomebg.png diff --git a/src/plugins/welcome/welcomemode.ui b/src/plugins/welcome/welcomemode.ui index f00d137f2a..e60f8143ad 100644 --- a/src/plugins/welcome/welcomemode.ui +++ b/src/plugins/welcome/welcomemode.ui @@ -76,12 +76,7 @@ QToolButton:pressed, QPushButton:pressed{ <item> <widget class="QWidget" name="gradientWidget" native="true"> <property name="styleSheet"> - <string notr="true">/* -#gradientWidget { - background-color: qlineargradient(spread:pad, x1:0.5, y1:0, x2:1.0, y2:1, stop:0 rgba(240, 240, 240, 255), stop:1 rgba(200, 200, 200, 255)); -} -*/ -#gradientWidget { + <string notr="true">#gradientWidget { border-image: url(:/welcome/images/welcomebg.png) 0; } </string> diff --git a/src/shared/help/bookmarkmanager.cpp b/src/shared/help/bookmarkmanager.cpp index b3ad3dd204..e8619922e0 100644 --- a/src/shared/help/bookmarkmanager.cpp +++ b/src/shared/help/bookmarkmanager.cpp @@ -33,6 +33,9 @@ #include "helpmanager.h" #include "openpagesmanager.h" +#include <utils/filterlineedit.h> +#include <utils/styledbar.h> + #include <QtGui/QMenu> #include <QtGui/QIcon> #include <QtGui/QStyle> @@ -423,19 +426,27 @@ void BookmarkWidget::setup(bool showButtons) regExp.setCaseSensitivity(Qt::CaseInsensitive); QLayout *vlayout = new QVBoxLayout(this); - vlayout->setMargin(4); - - QLabel *label = new QLabel(tr("Filter:"), this); - vlayout->addWidget(label); + vlayout->setMargin(0); + vlayout->setSpacing(0); - searchField = new QLineEdit(this); + searchField = new Utils::FilterLineEdit(this); setFocusProxy(searchField); + + Utils::StyledBar *toolbar = new Utils::StyledBar(this); + toolbar->setSingleRow(false); + QLayout *tbLayout = new QHBoxLayout(); + tbLayout->setMargin(4); + tbLayout->addWidget(searchField); + toolbar->setLayout(tbLayout); + + vlayout->addWidget(toolbar); + searchField->installEventFilter(this); - vlayout->addWidget(searchField); connect(searchField, SIGNAL(textChanged(const QString &)), this, SLOT(filterChanged())); treeView = new TreeView(this); + treeView->setFrameStyle(QFrame::NoFrame); vlayout->addWidget(treeView); #ifdef Q_OS_MAC diff --git a/src/shared/help/contentwindow.cpp b/src/shared/help/contentwindow.cpp index e728a9a747..a8ed1f1613 100644 --- a/src/shared/help/contentwindow.cpp +++ b/src/shared/help/contentwindow.cpp @@ -52,7 +52,7 @@ ContentWindow::ContentWindow() setFocusProxy(m_contentWidget); QVBoxLayout *layout = new QVBoxLayout(this); - layout->setMargin(4); + layout->setMargin(0); layout->addWidget(m_contentWidget); connect(m_contentWidget, SIGNAL(customContextMenuRequested(QPoint)), this, @@ -63,6 +63,8 @@ ContentWindow::ContentWindow() QHelpContentModel *contentModel = qobject_cast<QHelpContentModel*>(m_contentWidget->model()); connect(contentModel, SIGNAL(contentsCreated()), this, SLOT(expandTOC())); + + m_contentWidget->setFrameStyle(QFrame::NoFrame); } ContentWindow::~ContentWindow() diff --git a/src/shared/help/indexwindow.cpp b/src/shared/help/indexwindow.cpp index 0b9bf0935f..1bc86d60ec 100644 --- a/src/shared/help/indexwindow.cpp +++ b/src/shared/help/indexwindow.cpp @@ -34,6 +34,9 @@ #include "openpagesmanager.h" #include "topicchooser.h" +#include <utils/filterlineedit.h> +#include <utils/styledbar.h> + #include <QtGui/QLayout> #include <QtGui/QLabel> #include <QtGui/QLineEdit> @@ -41,6 +44,7 @@ #include <QtGui/QMenu> #include <QtGui/QContextMenuEvent> #include <QtGui/QListWidgetItem> +#include <QtGui/QToolBar> #include <QtHelp/QHelpEngine> #include <QtHelp/QHelpIndexWidget> @@ -52,17 +56,29 @@ IndexWindow::IndexWindow() , m_indexWidget(0) { QVBoxLayout *layout = new QVBoxLayout(this); - QLabel *l = new QLabel(tr("&Look for:")); - layout->addWidget(l); - m_searchLineEdit = new QLineEdit(); - l->setBuddy(m_searchLineEdit); + m_searchLineEdit = new Utils::FilterLineEdit(); + m_searchLineEdit->setPlaceholderText(QString()); setFocusProxy(m_searchLineEdit); connect(m_searchLineEdit, SIGNAL(textChanged(QString)), this, SLOT(filterIndices(QString))); m_searchLineEdit->installEventFilter(this); - layout->setMargin(4); - layout->addWidget(m_searchLineEdit); + + QLabel *l = new QLabel(tr("&Look for:")); + l->setBuddy(m_searchLineEdit); + layout->addWidget(l); + layout->setMargin(0); + layout->setSpacing(0); + + Utils::StyledBar *toolbar = new Utils::StyledBar(this); + toolbar->setSingleRow(false); + QLayout *tbLayout = new QHBoxLayout(); + tbLayout->setSpacing(6); + tbLayout->setMargin(4); + tbLayout->addWidget(l); + tbLayout->addWidget(m_searchLineEdit); + toolbar->setLayout(tbLayout); + layout->addWidget(toolbar); QHelpEngine *engine = &Help::HelpManager::helpEngine(); m_indexWidget = engine->indexWidget(); @@ -77,6 +93,7 @@ IndexWindow::IndexWindow() this, SIGNAL(linksActivated(QMap<QString, QUrl>, QString))); connect(m_searchLineEdit, SIGNAL(returnPressed()), m_indexWidget, SLOT(activateCurrentItem())); + m_indexWidget->setFrameStyle(QFrame::NoFrame); layout->addWidget(m_indexWidget); m_indexWidget->viewport()->installEventFilter(this); diff --git a/src/shared/qrceditor/qrceditor.cpp b/src/shared/qrceditor/qrceditor.cpp index ecb0efde45..693faf54c6 100644 --- a/src/shared/qrceditor/qrceditor.cpp +++ b/src/shared/qrceditor/qrceditor.cpp @@ -61,7 +61,8 @@ QrcEditor::QrcEditor(QWidget *parent) connect(m_treeview, SIGNAL(addPrefixTriggered()), this, SLOT(onAddPrefix())); connect(m_treeview, SIGNAL(addFilesTriggered(QString)), this, SLOT(onAddFiles())); connect(m_treeview, SIGNAL(removeItem()), this, SLOT(onRemove())); - connect(m_treeview, SIGNAL(currentIndexChanged()), this, SLOT(updateCurrent())); + connect(m_treeview->selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)), + this, SLOT(updateCurrent())); connect(m_treeview, SIGNAL(dirtyChanged(bool)), this, SIGNAL(dirtyChanged(bool))); m_treeview->setFocus(); diff --git a/src/shared/qrceditor/resourceview.cpp b/src/shared/qrceditor/resourceview.cpp index d0b077cc92..814d044c9b 100644 --- a/src/shared/qrceditor/resourceview.cpp +++ b/src/shared/qrceditor/resourceview.cpp @@ -203,13 +203,6 @@ ResourceView::~ResourceView() { } -void ResourceView::currentChanged(const QModelIndex ¤t, const QModelIndex &previous) -{ - Q_UNUSED(current) - Q_UNUSED(previous) - emit currentIndexChanged(); -} - bool ResourceView::isDirty() const { return m_qrcModel->dirty(); diff --git a/src/shared/qrceditor/resourceview.h b/src/shared/qrceditor/resourceview.h index a0da7df597..2e44da25a7 100644 --- a/src/shared/qrceditor/resourceview.h +++ b/src/shared/qrceditor/resourceview.h @@ -139,14 +139,10 @@ protected: signals: void removeItem(); void dirtyChanged(bool b); - void currentIndexChanged(); void addFilesTriggered(const QString &prefix); void addPrefixTriggered(); -protected slots: - void currentChanged(const QModelIndex ¤t, const QModelIndex &previous); - private slots: void onEditAlias(); void onEditPrefix(); diff --git a/src/shared/symbianutils/launcher.cpp b/src/shared/symbianutils/launcher.cpp index a597cf6d13..25dc395935 100644 --- a/src/shared/symbianutils/launcher.cpp +++ b/src/shared/symbianutils/launcher.cpp @@ -353,8 +353,22 @@ void Launcher::handleResult(const TrkResult &result) QByteArray prefix = "READ BUF: "; QByteArray str = result.toString().toUtf8(); if (result.isDebugOutput) { // handle application output - logMessage("APPLICATION OUTPUT: " + result.data); - emit applicationOutputReceived(result.data); + QString msg; + if (result.multiplex == MuxTextTrace) { + if (result.data.length() > 8) { + quint64 timestamp = extractInt64(result.data) & 0x0FFFFFFFFFFFFFFFULL; + quint64 secs = timestamp / 1000000000; + quint64 ns = timestamp % 1000000000; + msg = QString("[%1.%2] %3").arg(secs).arg(ns).arg(QString(result.data.mid(8))); + logMessage("TEXT TRACE: " + msg); + } + } else { + logMessage("APPLICATION OUTPUT: " + result.data); + msg = result.data; + } + msg.replace("\r\n", "\n"); + if(!msg.endsWith('\n')) msg.append('\n'); + emit applicationOutputReceived(msg); return; } switch (result.code) { diff --git a/src/shared/symbianutils/trkutils.cpp b/src/shared/symbianutils/trkutils.cpp index 6c44c9038d..40c448d02f 100644 --- a/src/shared/symbianutils/trkutils.cpp +++ b/src/shared/symbianutils/trkutils.cpp @@ -264,14 +264,13 @@ QByteArray frameMessage(byte command, byte token, const QByteArray &data, bool s /* returns 0 if array doesn't represent a result, otherwise returns the length of the result data */ -ushort isValidTrkResult(const QByteArray &buffer, bool serialFrame) +ushort isValidTrkResult(const QByteArray &buffer, bool serialFrame, ushort& mux) { if (serialFrame) { // Serial protocol with length info if (buffer.length() < 4) return 0; - if (buffer.at(0) != 0x01 || byte(buffer.at(1)) != 0x90) - return 0; + mux = extractShort(buffer.data()); const ushort len = extractShort(buffer.data() + 2); return (buffer.size() >= len + 4) ? len : ushort(0); } @@ -280,6 +279,7 @@ ushort isValidTrkResult(const QByteArray &buffer, bool serialFrame) const int firstDelimiterPos = buffer.indexOf(delimiter); // Regular message delimited by 0x7e..0x7e if (firstDelimiterPos == 0) { + mux = MuxTrk; const int endPos = buffer.indexOf(delimiter, firstDelimiterPos + 1); return endPos != -1 ? endPos + 1 - firstDelimiterPos : 0; } @@ -292,7 +292,7 @@ bool extractResult(QByteArray *buffer, bool serialFrame, TrkResult *result, QByt result->clear(); if(rawData) rawData->clear(); - const ushort len = isValidTrkResult(*buffer, serialFrame); + const ushort len = isValidTrkResult(*buffer, serialFrame, result->multiplex); if (!len) return false; // handle receiving application output, which is not a regular command @@ -300,7 +300,6 @@ bool extractResult(QByteArray *buffer, bool serialFrame, TrkResult *result, QByt if (buffer->at(delimiterPos) != 0x7e) { result->isDebugOutput = true; result->data = buffer->mid(delimiterPos, len); - result->data.replace("\r\n", "\n"); *buffer->remove(0, delimiterPos + len); return true; } @@ -341,6 +340,19 @@ SYMBIANUTILS_EXPORT uint extractInt(const char *data) return res; } +SYMBIANUTILS_EXPORT quint64 extractInt64(const char *data) +{ + quint64 res = byte(data[0]); + res <<= 8; res += byte(data[1]); + res <<= 8; res += byte(data[2]); + res <<= 8; res += byte(data[3]); + res <<= 8; res += byte(data[4]); + res <<= 8; res += byte(data[5]); + res <<= 8; res += byte(data[6]); + res <<= 8; res += byte(data[7]); + return res; +} + SYMBIANUTILS_EXPORT QString quoteUnprintableLatin1(const QByteArray &ba) { QString res; diff --git a/src/shared/symbianutils/trkutils.h b/src/shared/symbianutils/trkutils.h index 248f6fcdd7..e438c1b0ce 100644 --- a/src/shared/symbianutils/trkutils.h +++ b/src/shared/symbianutils/trkutils.h @@ -123,9 +123,16 @@ enum Command { TrkDSPositionFile = 0xd4 }; +enum SerialMultiplexor { + MuxRaw = 0, + MuxTextTrace = 0x0102, + MuxTrk = 0x0190 +}; + inline byte extractByte(const char *data) { return *data; } SYMBIANUTILS_EXPORT ushort extractShort(const char *data); SYMBIANUTILS_EXPORT uint extractInt(const char *data); +SYMBIANUTILS_EXPORT quint64 extractInt64(const char *data); SYMBIANUTILS_EXPORT QString quoteUnprintableLatin1(const QByteArray &ba); @@ -205,6 +212,7 @@ struct SYMBIANUTILS_EXPORT TrkResult int errorCode() const; QString errorString() const; + ushort multiplex; byte code; byte token; QByteArray data; |