forked from qt-creator/qt-creator
Merge branch 'master' of git@scm.dev.nokia.troll.no:creator/mainline
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -45,7 +45,9 @@
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
class ProFile;
|
||||
class ProFileEvaluator;
|
||||
|
||||
void evaluateProFile(const ProFileEvaluator &visitor, QHash<QByteArray, QStringList> *varMap);
|
||||
bool evaluateProFile(const QString &fileName, bool verbose, QHash<QByteArray, QStringList> *varMap);
|
||||
|
||||
class ProFileEvaluator
|
||||
@@ -66,7 +68,9 @@ public:
|
||||
virtual bool contains(const QString &variableName) const;
|
||||
QStringList absFileNames(const QString &variableName);
|
||||
QStringList absFileName(const QString &name);
|
||||
void setVerbose(bool on);
|
||||
void setVerbose(bool on); // Default is false
|
||||
void setCumulative(bool on); // Default is true!
|
||||
void setOutputDir(const QString &dir); // Default is empty
|
||||
|
||||
bool queryProFile(ProFile *pro);
|
||||
bool accept(ProFile *pro);
|
||||
|
||||
@@ -35,7 +35,6 @@
|
||||
#include "abstractproitemvisitor.h"
|
||||
|
||||
#include <QtCore/QFileInfo>
|
||||
#include <QtCore/QDebug>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
|
||||
@@ -45,9 +45,6 @@ struct AbstractProItemVisitor;
|
||||
class ProItem
|
||||
{
|
||||
public:
|
||||
ProItem()
|
||||
: m_lineNumber(0)
|
||||
{}
|
||||
enum ProItemKind {
|
||||
ValueKind,
|
||||
FunctionKind,
|
||||
@@ -55,6 +52,8 @@ public:
|
||||
OperatorKind,
|
||||
BlockKind
|
||||
};
|
||||
|
||||
ProItem() : m_lineNumber(0) {}
|
||||
virtual ~ProItem() {}
|
||||
|
||||
virtual ProItemKind kind() const = 0;
|
||||
|
||||
@@ -85,6 +85,25 @@ struct Option
|
||||
Option::qmakespec = QString::fromLatin1(qgetenv("QMAKESPEC").data());
|
||||
Option::field_sep = QLatin1Char(' ');
|
||||
}
|
||||
|
||||
enum StringFixFlags {
|
||||
FixNone = 0x00,
|
||||
FixEnvVars = 0x01,
|
||||
FixPathCanonicalize = 0x02,
|
||||
FixPathToLocalSeparators = 0x04,
|
||||
FixPathToTargetSeparators = 0x08
|
||||
};
|
||||
static QString fixString(QString string, uchar flags);
|
||||
|
||||
inline static QString fixPathToLocalOS(const QString &in, bool fix_env = true, bool canonical = true)
|
||||
{
|
||||
uchar flags = FixPathToLocalSeparators;
|
||||
if (fix_env)
|
||||
flags |= FixEnvVars;
|
||||
if (canonical)
|
||||
flags |= FixPathCanonicalize;
|
||||
return fixString(in, flags);
|
||||
}
|
||||
};
|
||||
#if defined(Q_OS_WIN32)
|
||||
Option::TARG_MODE Option::target_mode = Option::TARG_WIN_MODE;
|
||||
@@ -113,17 +132,20 @@ static void unquote(QString *string)
|
||||
}
|
||||
|
||||
static void insertUnique(QHash<QString, QStringList> *map,
|
||||
const QString &key, const QStringList &value, bool unique = true)
|
||||
const QString &key, const QStringList &value)
|
||||
{
|
||||
QStringList &sl = (*map)[key];
|
||||
if (!unique) {
|
||||
sl += value;
|
||||
} else {
|
||||
for (int i = 0; i < value.count(); ++i) {
|
||||
if (!sl.contains(value.at(i)))
|
||||
sl.append(value.at(i));
|
||||
}
|
||||
}
|
||||
foreach (const QString &str, value)
|
||||
if (!sl.contains(str))
|
||||
sl.append(str);
|
||||
}
|
||||
|
||||
static void removeEach(QHash<QString, QStringList> *map,
|
||||
const QString &key, const QStringList &value)
|
||||
{
|
||||
QStringList &sl = (*map)[key];
|
||||
foreach (const QString &str, value)
|
||||
sl.removeAll(str);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -63,7 +63,7 @@ QString GeneralSettings::trCategory() const
|
||||
|
||||
QWidget* GeneralSettings::createPage(QWidget *parent)
|
||||
{
|
||||
m_page = new Ui_GeneralSettings();
|
||||
m_page = new Ui_GeneralSettings;
|
||||
QWidget *w = new QWidget(parent);
|
||||
m_page->setupUi(w);
|
||||
|
||||
@@ -77,7 +77,6 @@ QWidget* GeneralSettings::createPage(QWidget *parent)
|
||||
connect(m_page->helpExternalEditorButton, SIGNAL(clicked()),
|
||||
this, SLOT(showHelpForExternalEditor()));
|
||||
|
||||
|
||||
return w;
|
||||
}
|
||||
|
||||
@@ -89,7 +88,6 @@ void GeneralSettings::finished(bool accepted)
|
||||
// Apply the new base color if accepted
|
||||
StyleHelper::setBaseColor(m_page->colorButton->color());
|
||||
EditorManager::instance()->setExternalEditor(m_page->externalEditorEdit->text());
|
||||
|
||||
}
|
||||
|
||||
void GeneralSettings::resetInterfaceColor()
|
||||
|
||||
86
src/plugins/cpptools/completionsettingspage.cpp
Normal file
86
src/plugins/cpptools/completionsettingspage.cpp
Normal file
@@ -0,0 +1,86 @@
|
||||
/***************************************************************************
|
||||
**
|
||||
** This file is part of Qt Creator
|
||||
**
|
||||
** Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
|
||||
**
|
||||
** Contact: Qt Software Information (qt-info@nokia.com)
|
||||
**
|
||||
**
|
||||
** Non-Open Source Usage
|
||||
**
|
||||
** Licensees may use this file in accordance with the Qt Beta Version
|
||||
** License Agreement, Agreement version 2.2 provided with the Software or,
|
||||
** alternatively, in accordance with the terms contained in a written
|
||||
** agreement between you and Nokia.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
**
|
||||
** Alternatively, this file may be used under the terms of the GNU General
|
||||
** Public License versions 2.0 or 3.0 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL included in the packaging
|
||||
** of this file. Please review the following information to ensure GNU
|
||||
** General Public Licensing requirements will be met:
|
||||
**
|
||||
** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
|
||||
** http://www.gnu.org/copyleft/gpl.html.
|
||||
**
|
||||
** In addition, as a special exception, Nokia gives you certain additional
|
||||
** rights. These rights are described in the Nokia Qt GPL Exception
|
||||
** version 1.2, included in the file GPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
***************************************************************************/
|
||||
|
||||
#include "completionsettingspage.h"
|
||||
#include "cppcodecompletion.h"
|
||||
#include "ui_completionsettingspage.h"
|
||||
|
||||
#include <coreplugin/icore.h>
|
||||
#include <extensionsystem/pluginmanager.h>
|
||||
|
||||
using namespace CppTools::Internal;
|
||||
|
||||
CompletionSettingsPage::CompletionSettingsPage(CppCodeCompletion *completion)
|
||||
: m_completion(completion)
|
||||
, m_page(0)
|
||||
{
|
||||
}
|
||||
|
||||
QString CompletionSettingsPage::name() const
|
||||
{
|
||||
return tr("Completion");
|
||||
}
|
||||
|
||||
QString CompletionSettingsPage::category() const
|
||||
{
|
||||
return QLatin1String("TextEditor");
|
||||
}
|
||||
|
||||
QString CompletionSettingsPage::trCategory() const
|
||||
{
|
||||
return tr("Text Editor");
|
||||
}
|
||||
|
||||
QWidget *CompletionSettingsPage::createPage(QWidget *parent)
|
||||
{
|
||||
m_page = new Ui_CompletionSettingsPage;
|
||||
QWidget *w = new QWidget(parent);
|
||||
m_page->setupUi(w);
|
||||
|
||||
m_page->caseSensitive->setChecked(m_completion->caseSensitivity() == Qt::CaseSensitive);
|
||||
m_page->autoInsertBraces->setChecked(m_completion->autoInsertBraces());
|
||||
|
||||
return w;
|
||||
}
|
||||
|
||||
void CompletionSettingsPage::finished(bool accepted)
|
||||
{
|
||||
if (accepted) {
|
||||
m_completion->setCaseSensitivity(
|
||||
m_page->caseSensitive->isChecked() ? Qt::CaseSensitive : Qt::CaseInsensitive);
|
||||
m_completion->setAutoInsertBraces(m_page->autoInsertBraces->isChecked());
|
||||
}
|
||||
|
||||
delete m_page;
|
||||
m_page = 0;
|
||||
}
|
||||
68
src/plugins/cpptools/completionsettingspage.h
Normal file
68
src/plugins/cpptools/completionsettingspage.h
Normal file
@@ -0,0 +1,68 @@
|
||||
/***************************************************************************
|
||||
**
|
||||
** This file is part of Qt Creator
|
||||
**
|
||||
** Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
|
||||
**
|
||||
** Contact: Qt Software Information (qt-info@nokia.com)
|
||||
**
|
||||
**
|
||||
** Non-Open Source Usage
|
||||
**
|
||||
** Licensees may use this file in accordance with the Qt Beta Version
|
||||
** License Agreement, Agreement version 2.2 provided with the Software or,
|
||||
** alternatively, in accordance with the terms contained in a written
|
||||
** agreement between you and Nokia.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
**
|
||||
** Alternatively, this file may be used under the terms of the GNU General
|
||||
** Public License versions 2.0 or 3.0 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL included in the packaging
|
||||
** of this file. Please review the following information to ensure GNU
|
||||
** General Public Licensing requirements will be met:
|
||||
**
|
||||
** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
|
||||
** http://www.gnu.org/copyleft/gpl.html.
|
||||
**
|
||||
** In addition, as a special exception, Nokia gives you certain additional
|
||||
** rights. These rights are described in the Nokia Qt GPL Exception
|
||||
** version 1.2, included in the file GPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef COMPLETIONSETTINGSPAGE_H
|
||||
#define COMPLETIONSETTINGSPAGE_H
|
||||
|
||||
#include <coreplugin/dialogs/ioptionspage.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
class Ui_CompletionSettingsPage;
|
||||
QT_END_NAMESPACE
|
||||
|
||||
namespace CppTools {
|
||||
namespace Internal {
|
||||
|
||||
class CppCodeCompletion;
|
||||
|
||||
class CompletionSettingsPage : public Core::IOptionsPage
|
||||
{
|
||||
public:
|
||||
CompletionSettingsPage(CppCodeCompletion *completion);
|
||||
|
||||
QString name() const;
|
||||
QString category() const;
|
||||
QString trCategory() const;
|
||||
|
||||
QWidget *createPage(QWidget *parent);
|
||||
void finished(bool accepted);
|
||||
|
||||
private:
|
||||
CppCodeCompletion *m_completion;
|
||||
Ui_CompletionSettingsPage *m_page;
|
||||
};
|
||||
|
||||
} // namespace Internal
|
||||
} // namespace CppTools
|
||||
|
||||
#endif // COMPLETIONSETTINGSPAGE_H
|
||||
54
src/plugins/cpptools/completionsettingspage.ui
Normal file
54
src/plugins/cpptools/completionsettingspage.ui
Normal file
@@ -0,0 +1,54 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>CompletionSettingsPage</class>
|
||||
<widget class="QWidget" name="CompletionSettingsPage">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>400</width>
|
||||
<height>300</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="caseSensitive">
|
||||
<property name="text">
|
||||
<string>Match completions &case-sensitive</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="autoInsertBraces">
|
||||
<property name="text">
|
||||
<string>&Automatically insert braces</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
@@ -314,12 +314,37 @@ CppCodeCompletion::CppCodeCompletion(CppModelManager *manager, Core::ICore *core
|
||||
: ICompletionCollector(manager),
|
||||
m_core(core),
|
||||
m_manager(manager),
|
||||
m_caseSensitivity(Qt::CaseSensitive),
|
||||
m_autoInsertBraces(true),
|
||||
m_forcedCompletion(false),
|
||||
m_completionOperator(T_EOF_SYMBOL)
|
||||
{ }
|
||||
{
|
||||
}
|
||||
|
||||
QIcon CppCodeCompletion::iconForSymbol(Symbol *symbol) const
|
||||
{ return m_icons.iconForSymbol(symbol); }
|
||||
{
|
||||
return m_icons.iconForSymbol(symbol);
|
||||
}
|
||||
|
||||
Qt::CaseSensitivity CppCodeCompletion::caseSensitivity() const
|
||||
{
|
||||
return m_caseSensitivity;
|
||||
}
|
||||
|
||||
void CppCodeCompletion::setCaseSensitivity(Qt::CaseSensitivity caseSensitivity)
|
||||
{
|
||||
m_caseSensitivity = caseSensitivity;
|
||||
}
|
||||
|
||||
bool CppCodeCompletion::autoInsertBraces() const
|
||||
{
|
||||
return m_autoInsertBraces;
|
||||
}
|
||||
|
||||
void CppCodeCompletion::setAutoInsertBraces(bool autoInsertBraces)
|
||||
{
|
||||
m_autoInsertBraces = autoInsertBraces;
|
||||
}
|
||||
|
||||
/*
|
||||
Searches beckward for an access operator.
|
||||
@@ -705,14 +730,14 @@ void CppCodeCompletion::addMacros(const LookupContext &context)
|
||||
continue;
|
||||
processed.insert(fn);
|
||||
if (Document::Ptr doc = context.document(fn)) {
|
||||
foreach (const Macro macro, doc->definedMacros()) {
|
||||
foreach (const Macro ¯o, doc->definedMacros()) {
|
||||
macroNames.insert(macro.name);
|
||||
}
|
||||
todo += doc->includedFiles();
|
||||
}
|
||||
}
|
||||
|
||||
foreach (const QByteArray macroName, macroNames) {
|
||||
foreach (const QByteArray ¯oName, macroNames) {
|
||||
TextEditor::CompletionItem item(this);
|
||||
item.m_text = QString::fromLatin1(macroName.constData(), macroName.length());
|
||||
item.m_icon = m_icons.macroIcon();
|
||||
@@ -889,29 +914,25 @@ void CppCodeCompletion::completions(QList<TextEditor::CompletionItem> *completio
|
||||
*
|
||||
* Meaning it allows any sequence of lower-case characters to preceed an
|
||||
* upper-case character. So for example gAC matches getActionController.
|
||||
*
|
||||
* The match is case-sensitive as soon as at least one upper-case character is
|
||||
* present.
|
||||
*/
|
||||
QString keyRegExp;
|
||||
keyRegExp += QLatin1Char('^');
|
||||
bool first = true;
|
||||
Qt::CaseSensitivity sensitivity = Qt::CaseInsensitive;
|
||||
foreach (const QChar &c, key) {
|
||||
if (c.isLower()) {
|
||||
keyRegExp.append(c);
|
||||
} else if (c.isUpper()) {
|
||||
sensitivity = Qt::CaseSensitive;
|
||||
if (!first) {
|
||||
keyRegExp.append("[a-z0-9_]*");
|
||||
}
|
||||
keyRegExp.append(c);
|
||||
if (c.isUpper() && !first) {
|
||||
keyRegExp += QLatin1String("[a-z0-9_]*");
|
||||
keyRegExp += c;
|
||||
} else if (m_caseSensitivity == Qt::CaseInsensitive && c.isLower()) {
|
||||
keyRegExp += QLatin1Char('[');
|
||||
keyRegExp += c;
|
||||
keyRegExp += c.toUpper();
|
||||
keyRegExp += QLatin1Char(']');
|
||||
} else {
|
||||
keyRegExp.append(QRegExp::escape(c));
|
||||
keyRegExp += QRegExp::escape(c);
|
||||
}
|
||||
first = false;
|
||||
}
|
||||
const QRegExp regExp(keyRegExp, sensitivity);
|
||||
const QRegExp regExp(keyRegExp, Qt::CaseSensitive);
|
||||
|
||||
foreach (TextEditor::CompletionItem item, m_completions) {
|
||||
if (regExp.indexIn(item.m_text) == 0) {
|
||||
@@ -962,7 +983,7 @@ void CppCodeCompletion::complete(const TextEditor::CompletionItem &item)
|
||||
//qDebug() << "current symbol:" << overview.prettyName(symbol->name())
|
||||
//<< overview.prettyType(symbol->type());
|
||||
|
||||
if (symbol) {
|
||||
if (m_autoInsertBraces && symbol) {
|
||||
if (Function *function = symbol->type()->asFunction()) {
|
||||
// If the member is a function, automatically place the opening parenthesis,
|
||||
// except when it might take template parameters.
|
||||
|
||||
@@ -78,6 +78,12 @@ public:
|
||||
|
||||
QIcon iconForSymbol(CPlusPlus::Symbol *symbol) const;
|
||||
|
||||
Qt::CaseSensitivity caseSensitivity() const;
|
||||
void setCaseSensitivity(Qt::CaseSensitivity caseSensitivity);
|
||||
|
||||
bool autoInsertBraces() const;
|
||||
void setAutoInsertBraces(bool autoInsertBraces);
|
||||
|
||||
private:
|
||||
void addKeywords();
|
||||
void addMacros(const CPlusPlus::LookupContext &context);
|
||||
@@ -126,6 +132,8 @@ private:
|
||||
|
||||
Core::ICore *m_core;
|
||||
CppModelManager *m_manager;
|
||||
Qt::CaseSensitivity m_caseSensitivity;
|
||||
bool m_autoInsertBraces;
|
||||
|
||||
bool m_forcedCompletion;
|
||||
|
||||
|
||||
@@ -13,19 +13,21 @@ HEADERS += cpptools_global.h \
|
||||
cppquickopenfilter.h \
|
||||
cppclassesfilter.h \
|
||||
searchsymbols.h \
|
||||
cppfunctionsfilter.h
|
||||
cppfunctionsfilter.h \
|
||||
completionsettingspage.h
|
||||
SOURCES += cppquickopenfilter.cpp \
|
||||
cpptoolseditorsupport.cpp \
|
||||
cppclassesfilter.cpp \
|
||||
searchsymbols.cpp \
|
||||
cppfunctionsfilter.cpp
|
||||
cppfunctionsfilter.cpp \
|
||||
completionsettingspage.cpp
|
||||
|
||||
# Input
|
||||
SOURCES += cpptools.cpp \
|
||||
SOURCES += cpptoolsplugin.cpp \
|
||||
cppmodelmanager.cpp \
|
||||
cppcodecompletion.cpp \
|
||||
cpphoverhandler.cpp
|
||||
HEADERS += cpptools.h \
|
||||
HEADERS += cpptoolsplugin.h \
|
||||
cppmodelmanager.h \
|
||||
cppcodecompletion.h \
|
||||
cpphoverhandler.h \
|
||||
@@ -33,3 +35,4 @@ HEADERS += cpptools.h \
|
||||
cpptoolseditorsupport.h \
|
||||
cpptoolsconstants.h
|
||||
RESOURCES += cpptools.qrc
|
||||
FORMS += completionsettingspage.ui
|
||||
|
||||
@@ -31,7 +31,9 @@
|
||||
**
|
||||
***************************************************************************/
|
||||
|
||||
#include "cpptools.h"
|
||||
#include "cpptoolsplugin.h"
|
||||
|
||||
#include "completionsettingspage.h"
|
||||
#include "cppclassesfilter.h"
|
||||
#include "cppcodecompletion.h"
|
||||
#include "cppfunctionsfilter.h"
|
||||
@@ -52,6 +54,7 @@
|
||||
#include <QtCore/QFileInfo>
|
||||
#include <QtCore/QDir>
|
||||
#include <QtCore/QDebug>
|
||||
#include <QtCore/QSettings>
|
||||
#include <QtGui/QMenu>
|
||||
#include <QtGui/QAction>
|
||||
|
||||
@@ -84,13 +87,14 @@ bool CppToolsPlugin::initialize(const QStringList & /*arguments*/, QString *)
|
||||
// Objects
|
||||
m_modelManager = new CppModelManager(this);
|
||||
addAutoReleasedObject(m_modelManager);
|
||||
CppCodeCompletion *cppcodecompletion = new CppCodeCompletion(m_modelManager, m_core);
|
||||
addAutoReleasedObject(cppcodecompletion);
|
||||
CppCodeCompletion *m_completion = new CppCodeCompletion(m_modelManager, m_core);
|
||||
addAutoReleasedObject(m_completion);
|
||||
CppQuickOpenFilter *quickOpenFilter = new CppQuickOpenFilter(m_modelManager,
|
||||
m_core->editorManager());
|
||||
addAutoReleasedObject(quickOpenFilter);
|
||||
addAutoReleasedObject(new CppClassesFilter(m_modelManager, m_core->editorManager()));
|
||||
addAutoReleasedObject(new CppFunctionsFilter(m_modelManager, m_core->editorManager()));
|
||||
addAutoReleasedObject(new CompletionSettingsPage(m_completion));
|
||||
|
||||
// Menus
|
||||
Core::IActionContainer *mtools = am->actionContainer(Core::Constants::M_TOOLS);
|
||||
@@ -110,6 +114,16 @@ bool CppToolsPlugin::initialize(const QStringList & /*arguments*/, QString *)
|
||||
mcpptools->addAction(command);
|
||||
connect(switchAction, SIGNAL(triggered()), this, SLOT(switchHeaderSource()));
|
||||
|
||||
// Restore settings
|
||||
QSettings *settings = m_core->settings();
|
||||
settings->beginGroup(QLatin1String("CppTools"));
|
||||
settings->beginGroup(QLatin1String("Completion"));
|
||||
const bool caseSensitive = settings->value(QLatin1String("CaseSensitive"), true).toBool();
|
||||
m_completion->setCaseSensitivity(caseSensitive ? Qt::CaseSensitive : Qt::CaseInsensitive);
|
||||
m_completion->setAutoInsertBraces(settings->value(QLatin1String("AutoInsertBraces"), true).toBool());
|
||||
settings->endGroup();
|
||||
settings->endGroup();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -117,6 +131,18 @@ void CppToolsPlugin::extensionsInitialized()
|
||||
{
|
||||
}
|
||||
|
||||
void CppToolsPlugin::shutdown()
|
||||
{
|
||||
// Save settings
|
||||
QSettings *settings = m_core->settings();
|
||||
settings->beginGroup(QLatin1String("CppTools"));
|
||||
settings->beginGroup(QLatin1String("Completion"));
|
||||
settings->setValue(QLatin1String("CaseSensitive"), m_completion->caseSensitivity() == Qt::CaseSensitive);
|
||||
settings->setValue(QLatin1String("AutoInsertBraces"), m_completion->autoInsertBraces());
|
||||
settings->endGroup();
|
||||
settings->endGroup();
|
||||
}
|
||||
|
||||
void CppToolsPlugin::switchHeaderSource()
|
||||
{
|
||||
if (!m_core)
|
||||
@@ -150,7 +176,12 @@ QFileInfo CppToolsPlugin::findFile(const QDir &dir, const QString &name,
|
||||
}
|
||||
|
||||
// Figure out file type
|
||||
enum FileType { HeaderFile, C_SourceFile, CPP_SourceFile, UnknownType };
|
||||
enum FileType {
|
||||
HeaderFile,
|
||||
C_SourceFile,
|
||||
CPP_SourceFile,
|
||||
UnknownType
|
||||
};
|
||||
|
||||
static inline FileType fileType(const Core::MimeDatabase *mimeDatase, const QFileInfo & fi)
|
||||
{
|
||||
@@ -64,6 +64,7 @@ public:
|
||||
|
||||
bool initialize(const QStringList &arguments, QString *error_message);
|
||||
void extensionsInitialized();
|
||||
void shutdown();
|
||||
CppModelManager *cppModelManager() { return m_modelManager; }
|
||||
QString correspondingHeaderOrSource(const QString &fileName) const;
|
||||
|
||||
@@ -77,6 +78,7 @@ private:
|
||||
Core::ICore *m_core;
|
||||
int m_context;
|
||||
CppModelManager *m_modelManager;
|
||||
CppCodeCompletion *m_completion;
|
||||
|
||||
static CppToolsPlugin *m_instance;
|
||||
};
|
||||
@@ -1783,22 +1783,25 @@ void ProjectExplorerPlugin::openWithMenuTriggered(QAction *action)
|
||||
void ProjectExplorerPlugin::updateSessionMenu()
|
||||
{
|
||||
m_sessionMenu->clear();
|
||||
QActionGroup *ag = new QActionGroup(m_sessionMenu);
|
||||
connect(ag, SIGNAL(triggered(QAction *)), this, SLOT(setSession(QAction *)));
|
||||
const QString &activeSession = m_session->activeSession();
|
||||
foreach (const QString &session, m_session->sessions()) {
|
||||
QAction *act = m_sessionMenu->addAction(session, this, SLOT(setSession()));
|
||||
QAction *act = ag->addAction(session);
|
||||
act->setCheckable(true);
|
||||
if (session == activeSession)
|
||||
act->setChecked(true);
|
||||
}
|
||||
m_sessionMenu->addActions(ag->actions());
|
||||
m_sessionMenu->addSeparator();
|
||||
m_sessionMenu->addAction(m_sessionManagerAction);
|
||||
|
||||
m_sessionMenu->setEnabled(true);
|
||||
}
|
||||
|
||||
void ProjectExplorerPlugin::setSession()
|
||||
void ProjectExplorerPlugin::setSession(QAction *action)
|
||||
{
|
||||
QString session = static_cast<QAction *>(sender())->text();
|
||||
QString session = action->text();
|
||||
if (session != m_session->activeSession())
|
||||
m_session->loadSession(session);
|
||||
}
|
||||
|
||||
@@ -151,7 +151,7 @@ private slots:
|
||||
void populateOpenWithMenu();
|
||||
void openWithMenuTriggered(QAction *action);
|
||||
void updateSessionMenu();
|
||||
void setSession();
|
||||
void setSession(QAction *action);
|
||||
|
||||
void restoreSession();
|
||||
void loadSession(const QString &session);
|
||||
|
||||
@@ -40,8 +40,6 @@
|
||||
#include <qtconcurrent/QtConcurrentTools>
|
||||
#include <utils/qtcassert.h>
|
||||
|
||||
#include <QtGui/QMessageBox>
|
||||
|
||||
Q_DECLARE_METATYPE(QuickOpen::IQuickOpenFilter*)
|
||||
|
||||
using namespace QuickOpen;
|
||||
|
||||
5
tests/auto/cplusplus/ast/ast.pro
Normal file
5
tests/auto/cplusplus/ast/ast.pro
Normal file
@@ -0,0 +1,5 @@
|
||||
load(qttest_p4)
|
||||
include(../shared/shared.pri)
|
||||
QT = core
|
||||
|
||||
SOURCES += tst_ast.cpp
|
||||
73
tests/auto/cplusplus/ast/tst_ast.cpp
Normal file
73
tests/auto/cplusplus/ast/tst_ast.cpp
Normal file
@@ -0,0 +1,73 @@
|
||||
|
||||
#include <QtTest>
|
||||
#include <QtDebug>
|
||||
|
||||
#include <Control.h>
|
||||
#include <Parser.h>
|
||||
#include <AST.h>
|
||||
|
||||
CPLUSPLUS_USE_NAMESPACE
|
||||
|
||||
class tst_AST: public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
Control control;
|
||||
|
||||
public:
|
||||
TranslationUnit *parse(const QByteArray &source,
|
||||
TranslationUnit::ParseMode mode)
|
||||
{
|
||||
StringLiteral *fileId = control.findOrInsertFileName("<stdin>");
|
||||
TranslationUnit *unit = new TranslationUnit(&control, fileId);
|
||||
unit->setSource(source.constData(), source.length());
|
||||
unit->parse(mode);
|
||||
return unit;
|
||||
}
|
||||
|
||||
TranslationUnit *parseStatement(const QByteArray &source)
|
||||
{ return parse(source, TranslationUnit::ParseStatement); }
|
||||
|
||||
private slots:
|
||||
void if_statement();
|
||||
void if_else_statement();
|
||||
};
|
||||
|
||||
void tst_AST::if_statement()
|
||||
{
|
||||
QSharedPointer<TranslationUnit> unit(parseStatement("if (a) b;"));
|
||||
|
||||
AST *ast = unit->ast();
|
||||
QVERIFY(ast != 0);
|
||||
|
||||
IfStatementAST *stmt = ast->asIfStatement();
|
||||
QVERIFY(stmt != 0);
|
||||
QCOMPARE(stmt->if_token, 1U);
|
||||
QCOMPARE(stmt->lparen_token, 2U);
|
||||
QVERIFY(stmt->condition != 0);
|
||||
QCOMPARE(stmt->rparen_token, 4U);
|
||||
QVERIFY(stmt->statement != 0);
|
||||
QCOMPARE(stmt->else_token, 0U);
|
||||
QVERIFY(stmt->else_statement == 0);
|
||||
}
|
||||
|
||||
void tst_AST::if_else_statement()
|
||||
{
|
||||
QSharedPointer<TranslationUnit> unit(parseStatement("if (a) b; else c;"));
|
||||
|
||||
AST *ast = unit->ast();
|
||||
QVERIFY(ast != 0);
|
||||
|
||||
IfStatementAST *stmt = ast->asIfStatement();
|
||||
QVERIFY(stmt != 0);
|
||||
QCOMPARE(stmt->if_token, 1U);
|
||||
QCOMPARE(stmt->lparen_token, 2U);
|
||||
QVERIFY(stmt->condition != 0);
|
||||
QCOMPARE(stmt->rparen_token, 4U);
|
||||
QVERIFY(stmt->statement != 0);
|
||||
QCOMPARE(stmt->else_token, 7U);
|
||||
QVERIFY(stmt->else_statement != 0);
|
||||
}
|
||||
|
||||
QTEST_APPLESS_MAIN(tst_AST)
|
||||
#include "tst_ast.moc"
|
||||
3
tests/auto/cplusplus/cplusplus.pro
Normal file
3
tests/auto/cplusplus/cplusplus.pro
Normal file
@@ -0,0 +1,3 @@
|
||||
TEMPLATE = subdirs
|
||||
SUBDIRS = shared ast
|
||||
CONFIG += ordered
|
||||
4
tests/auto/cplusplus/shared/shared.pri
Normal file
4
tests/auto/cplusplus/shared/shared.pri
Normal file
@@ -0,0 +1,4 @@
|
||||
|
||||
DEFINES += HAVE_QT CPLUSPLUS_WITH_NAMESPACE
|
||||
INCLUDEPATH += $$PWD/../../../../shared/cplusplus
|
||||
LIBS += -L$$PWD -lCPlusPlusTestSupport
|
||||
8
tests/auto/cplusplus/shared/shared.pro
Normal file
8
tests/auto/cplusplus/shared/shared.pro
Normal file
@@ -0,0 +1,8 @@
|
||||
|
||||
TEMPLATE = lib
|
||||
TARGET = CPlusPlusTestSupport
|
||||
CONFIG += static
|
||||
QT = core
|
||||
|
||||
DEFINES += HAVE_QT CPLUSPLUS_WITH_NAMESPACE
|
||||
include($$PWD/../../../../shared/cplusplus/cplusplus.pri)
|
||||
Reference in New Issue
Block a user