summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/libs/extensionsystem/pluginmanager.cpp23
-rw-r--r--src/libs/extensionsystem/pluginmanager.h2
-rw-r--r--src/libs/extensionsystem/pluginmanager_p.h1
-rw-r--r--src/libs/qmljs/qmljsbind.cpp22
-rw-r--r--src/libs/qmljs/qmljsbind.h2
-rw-r--r--src/libs/qmljs/qmljsinterpreter.cpp4
-rw-r--r--src/libs/qmljs/qmljsscopebuilder.cpp41
-rw-r--r--src/libs/qmljs/qmljsscopebuilder.h2
-rw-r--r--src/plugins/coreplugin/coreconstants.h6
-rw-r--r--src/plugins/coreplugin/versiondialog.cpp16
-rw-r--r--src/plugins/cppeditor/cppplugin.cpp6
-rw-r--r--src/plugins/cpptools/completionsettingspage.cpp44
-rw-r--r--src/plugins/cpptools/completionsettingspage.h10
-rw-r--r--src/plugins/cpptools/cppcodecompletion.cpp59
-rw-r--r--src/plugins/cpptools/cppcodecompletion.h16
-rw-r--r--src/plugins/cpptools/cpptoolsplugin.cpp33
-rw-r--r--src/plugins/cpptools/cpptoolsplugin.h2
-rw-r--r--src/plugins/cvs/checkoutwizard.cpp2
-rw-r--r--src/plugins/debugger/cdb/cdbdebugengine.cpp5
-rw-r--r--src/plugins/designer/formeditorplugin.cpp6
-rw-r--r--src/plugins/genericprojectmanager/genericprojectwizard.cpp3
-rw-r--r--src/plugins/git/clonewizard.cpp2
-rw-r--r--src/plugins/git/gitorious/gitoriousclonewizard.cpp2
-rw-r--r--src/plugins/mercurial/clonewizard.cpp2
-rw-r--r--src/plugins/qmldesigner/components/propertyeditor/colorwidget.cpp4
-rw-r--r--src/plugins/qmldesigner/components/propertyeditor/qmlanchorbindingproxy.cpp2
-rw-r--r--src/plugins/qmljseditor/qmljscodecompletion.cpp13
-rw-r--r--src/plugins/qmljseditor/qmljscodecompletion.h4
-rw-r--r--src/plugins/qmljseditor/qmljseditorplugin.cpp22
-rw-r--r--src/plugins/qmljseditor/qmljseditorplugin.h2
-rw-r--r--src/plugins/qmlprojectmanager/qmlprojectapplicationwizard.cpp3
-rw-r--r--src/plugins/qt4projectmanager/qtversionmanager.cpp10
-rw-r--r--src/plugins/qt4projectmanager/wizards/consoleappwizard.cpp3
-rw-r--r--src/plugins/qt4projectmanager/wizards/emptyprojectwizard.cpp3
-rw-r--r--src/plugins/qt4projectmanager/wizards/guiappwizard.cpp4
-rw-r--r--src/plugins/qt4projectmanager/wizards/librarywizard.cpp4
-rw-r--r--src/plugins/qt4projectmanager/wizards/mobileguiappwizard.cpp4
-rw-r--r--src/plugins/qt4projectmanager/wizards/testwizard.cpp4
-rw-r--r--src/plugins/resourceeditor/resourceeditorplugin.cpp2
-rw-r--r--src/plugins/subversion/checkoutwizard.cpp2
-rw-r--r--src/plugins/texteditor/basetexteditor.cpp46
-rw-r--r--src/plugins/texteditor/basetexteditor.h6
-rw-r--r--src/plugins/texteditor/basetexteditor_p.h1
-rw-r--r--src/plugins/texteditor/completionsettings.cpp86
-rw-r--r--src/plugins/texteditor/completionsettings.h70
-rw-r--r--src/plugins/texteditor/icompletioncollector.cpp51
-rw-r--r--src/plugins/texteditor/icompletioncollector.h26
-rw-r--r--src/plugins/texteditor/texteditor.pro6
-rw-r--r--src/plugins/texteditor/texteditorplugin.cpp3
-rw-r--r--src/plugins/texteditor/texteditorsettings.cpp120
-rw-r--r--src/plugins/texteditor/texteditorsettings.h21
-rw-r--r--src/plugins/welcome/images/welcomebg.pngbin73047 -> 21649 bytes
-rw-r--r--src/plugins/welcome/welcomemode.ui7
-rw-r--r--src/shared/help/bookmarkmanager.cpp23
-rw-r--r--src/shared/help/contentwindow.cpp4
-rw-r--r--src/shared/help/indexwindow.cpp29
-rw-r--r--src/shared/qrceditor/qrceditor.cpp3
-rw-r--r--src/shared/qrceditor/resourceview.cpp7
-rw-r--r--src/shared/qrceditor/resourceview.h4
-rw-r--r--src/shared/symbianutils/launcher.cpp18
-rw-r--r--src/shared/symbianutils/trkutils.cpp22
-rw-r--r--src/shared/symbianutils/trkutils.h8
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
index 43e26923f6..a82abe93f7 100644
--- a/src/plugins/welcome/images/welcomebg.png
+++ b/src/plugins/welcome/images/welcomebg.png
Binary files differ
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 &current, 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 &current, 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;