forked from qt-creator/qt-creator
Merge branch '0.9.1-beta'
This commit is contained in:
@@ -236,13 +236,21 @@ bool CheckDeclaration::visit(FunctionDefinitionAST *ast)
|
|||||||
|
|
||||||
_scope->enterSymbol(fun);
|
_scope->enterSymbol(fun);
|
||||||
|
|
||||||
if (ast->ctor_initializer && (ty.isValid() || (fun->identity() && ! fun->identity()->isNameId()))) {
|
if (ast->ctor_initializer) {
|
||||||
translationUnit()->error(ast->ctor_initializer->firstToken(),
|
bool looksLikeCtor = false;
|
||||||
"only constructors take base initializers");
|
if (ty.isValid() || ! fun->identity())
|
||||||
|
looksLikeCtor = false;
|
||||||
|
else if (fun->identity()->isNameId() || fun->identity()->isTemplateNameId())
|
||||||
|
looksLikeCtor = true;
|
||||||
|
|
||||||
|
if (! looksLikeCtor) {
|
||||||
|
translationUnit()->error(ast->ctor_initializer->firstToken(),
|
||||||
|
"only constructors take base initializers");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int previousVisibility = semantic()->switchVisibility(Symbol::Public);
|
const int previousVisibility = semantic()->switchVisibility(Symbol::Public);
|
||||||
int previousMethodKey = semantic()->switchMethodKey(Function::NormalMethod);
|
const int previousMethodKey = semantic()->switchMethodKey(Function::NormalMethod);
|
||||||
|
|
||||||
semantic()->check(ast->function_body, fun->members());
|
semantic()->check(ast->function_body, fun->members());
|
||||||
|
|
||||||
|
|||||||
@@ -221,7 +221,7 @@ void Lexer::scan_helper(Token *tok)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
char ch = _yychar;
|
unsigned char ch = _yychar;
|
||||||
yyinp();
|
yyinp();
|
||||||
|
|
||||||
switch (ch) {
|
switch (ch) {
|
||||||
|
|||||||
@@ -132,7 +132,7 @@ private:
|
|||||||
const char *_currentChar;
|
const char *_currentChar;
|
||||||
const char *_lastChar;
|
const char *_lastChar;
|
||||||
const char *_tokenStart;
|
const char *_tokenStart;
|
||||||
char _yychar;
|
unsigned char _yychar;
|
||||||
int _state;
|
int _state;
|
||||||
union {
|
union {
|
||||||
unsigned _flags;
|
unsigned _flags;
|
||||||
|
|||||||
@@ -146,7 +146,7 @@ unsigned TranslationUnit::matchingBrace(unsigned index) const
|
|||||||
MemoryPool *TranslationUnit::memoryPool() const
|
MemoryPool *TranslationUnit::memoryPool() const
|
||||||
{ return _pool; }
|
{ return _pool; }
|
||||||
|
|
||||||
TranslationUnitAST *TranslationUnit::ast() const
|
AST *TranslationUnit::ast() const
|
||||||
{ return _ast; }
|
{ return _ast; }
|
||||||
|
|
||||||
bool TranslationUnit::isTokenized() const
|
bool TranslationUnit::isTokenized() const
|
||||||
@@ -218,17 +218,49 @@ bool TranslationUnit::skipFunctionBody() const
|
|||||||
void TranslationUnit::setSkipFunctionBody(bool skipFunctionBody)
|
void TranslationUnit::setSkipFunctionBody(bool skipFunctionBody)
|
||||||
{ _skipFunctionBody = skipFunctionBody; }
|
{ _skipFunctionBody = skipFunctionBody; }
|
||||||
|
|
||||||
void TranslationUnit::parse()
|
bool TranslationUnit::parse(ParseMode mode)
|
||||||
{
|
{
|
||||||
if (isParsed())
|
if (isParsed())
|
||||||
return;
|
return false;
|
||||||
|
|
||||||
if (! isTokenized())
|
if (! isTokenized())
|
||||||
tokenize();
|
tokenize();
|
||||||
|
|
||||||
Parser parser(this);
|
Parser parser(this);
|
||||||
parser.setQtMocRunEnabled(_qtMocRunEnabled);
|
parser.setQtMocRunEnabled(_qtMocRunEnabled);
|
||||||
parser.parseTranslationUnit(_ast);
|
|
||||||
|
bool parsed = false;
|
||||||
|
|
||||||
|
switch (mode) {
|
||||||
|
case ParseTranlationUnit: {
|
||||||
|
TranslationUnitAST *node = 0;
|
||||||
|
parsed = parser.parseTranslationUnit(node);
|
||||||
|
_ast = node;
|
||||||
|
} break;
|
||||||
|
|
||||||
|
case ParseDeclaration: {
|
||||||
|
DeclarationAST *node = 0;
|
||||||
|
parsed = parser.parseDeclaration(node);
|
||||||
|
_ast = node;
|
||||||
|
} break;
|
||||||
|
|
||||||
|
case ParseExpression: {
|
||||||
|
ExpressionAST *node = 0;
|
||||||
|
parsed = parser.parseExpression(node);
|
||||||
|
_ast = node;
|
||||||
|
} break;
|
||||||
|
|
||||||
|
case ParseStatement: {
|
||||||
|
StatementAST *node = 0;
|
||||||
|
parsed = parser.parseStatement(node);
|
||||||
|
_ast = node;
|
||||||
|
} break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
} // switch
|
||||||
|
|
||||||
|
return parsed;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TranslationUnit::pushLineOffset(unsigned offset)
|
void TranslationUnit::pushLineOffset(unsigned offset)
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ public:
|
|||||||
NumericLiteral *numericLiteral(unsigned index) const;
|
NumericLiteral *numericLiteral(unsigned index) const;
|
||||||
|
|
||||||
MemoryPool *memoryPool() const;
|
MemoryPool *memoryPool() const;
|
||||||
TranslationUnitAST *ast() const;
|
AST *ast() const;
|
||||||
|
|
||||||
bool blockErrors(bool block);
|
bool blockErrors(bool block);
|
||||||
|
|
||||||
@@ -113,7 +113,15 @@ public:
|
|||||||
void setSkipFunctionBody(bool skipFunctionBody);
|
void setSkipFunctionBody(bool skipFunctionBody);
|
||||||
|
|
||||||
bool isParsed() const;
|
bool isParsed() const;
|
||||||
void parse();
|
|
||||||
|
enum ParseMode {
|
||||||
|
ParseTranlationUnit,
|
||||||
|
ParseDeclaration,
|
||||||
|
ParseExpression,
|
||||||
|
ParseStatement
|
||||||
|
};
|
||||||
|
|
||||||
|
bool parse(ParseMode mode = ParseTranlationUnit);
|
||||||
|
|
||||||
void resetAST();
|
void resetAST();
|
||||||
void release();
|
void release();
|
||||||
@@ -169,7 +177,7 @@ private:
|
|||||||
std::vector<unsigned> _lineOffsets;
|
std::vector<unsigned> _lineOffsets;
|
||||||
std::vector<PPLine> _ppLines;
|
std::vector<PPLine> _ppLines;
|
||||||
MemoryPool *_pool;
|
MemoryPool *_pool;
|
||||||
TranslationUnitAST *_ast;
|
AST *_ast;
|
||||||
TranslationUnit *_previousTranslationUnit;
|
TranslationUnit *_previousTranslationUnit;
|
||||||
union {
|
union {
|
||||||
unsigned _flags;
|
unsigned _flags;
|
||||||
|
|||||||
@@ -251,9 +251,31 @@ QSet<QByteArray> Document::macroNames() const
|
|||||||
return _macroNames;
|
return _macroNames;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Document::parse()
|
bool Document::parse(ParseMode mode)
|
||||||
{
|
{
|
||||||
_translationUnit->parse();
|
TranslationUnit::ParseMode m = TranslationUnit::ParseTranlationUnit;
|
||||||
|
switch (mode) {
|
||||||
|
case ParseTranlationUnit:
|
||||||
|
m = TranslationUnit::ParseTranlationUnit;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ParseDeclaration:
|
||||||
|
m = TranslationUnit::ParseDeclaration;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ParseExpression:
|
||||||
|
m = TranslationUnit::ParseExpression;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ParseStatement:
|
||||||
|
m = TranslationUnit::ParseStatement;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return _translationUnit->parse(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Document::check()
|
void Document::check()
|
||||||
@@ -264,7 +286,10 @@ void Document::check()
|
|||||||
|
|
||||||
_globalNamespace = _control->newNamespace(0);
|
_globalNamespace = _control->newNamespace(0);
|
||||||
Scope *globals = _globalNamespace->members();
|
Scope *globals = _globalNamespace->members();
|
||||||
if (TranslationUnitAST *ast = _translationUnit->ast()) {
|
if (! _translationUnit->ast())
|
||||||
|
return; // nothing to do.
|
||||||
|
|
||||||
|
if (TranslationUnitAST *ast = _translationUnit->ast()->asTranslationUnit()) {
|
||||||
for (DeclarationAST *decl = ast->declarations; decl; decl = decl->next) {
|
for (DeclarationAST *decl = ast->declarations; decl; decl = decl->next) {
|
||||||
semantic.check(decl, globals);
|
semantic.check(decl, globals);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -85,7 +85,14 @@ public:
|
|||||||
void startSkippingBlocks(unsigned offset);
|
void startSkippingBlocks(unsigned offset);
|
||||||
void stopSkippingBlocks(unsigned offset);
|
void stopSkippingBlocks(unsigned offset);
|
||||||
|
|
||||||
void parse(); // ### remove
|
enum ParseMode { // ### keep in sync with CPlusPlus::TranslationUnit
|
||||||
|
ParseTranlationUnit,
|
||||||
|
ParseDeclaration,
|
||||||
|
ParseExpression,
|
||||||
|
ParseStatement
|
||||||
|
};
|
||||||
|
|
||||||
|
bool parse(ParseMode mode = ParseTranlationUnit);
|
||||||
void check();
|
void check();
|
||||||
void releaseTranslationUnit();
|
void releaseTranslationUnit();
|
||||||
|
|
||||||
|
|||||||
@@ -81,34 +81,18 @@ ExpressionAST *TypeOfExpression::expressionAST() const
|
|||||||
|
|
||||||
ExpressionAST *TypeOfExpression::extractExpressionAST(Document::Ptr doc) const
|
ExpressionAST *TypeOfExpression::extractExpressionAST(Document::Ptr doc) const
|
||||||
{
|
{
|
||||||
TranslationUnitAST *translationUnitAST = doc->translationUnit()->ast();
|
if (! doc->translationUnit()->ast())
|
||||||
|
return 0;
|
||||||
|
|
||||||
// ### evaluate the expression
|
return doc->translationUnit()->ast()->asExpression();
|
||||||
ExpressionAST *expressionAST = 0;
|
|
||||||
if (translationUnitAST) {
|
|
||||||
DeclarationAST *declaration = translationUnitAST->declarations;
|
|
||||||
SimpleDeclarationAST *simpleDecl = 0;
|
|
||||||
if (declaration)
|
|
||||||
simpleDecl = declaration->asSimpleDeclaration();
|
|
||||||
if (simpleDecl && simpleDecl->decl_specifier_seq) {
|
|
||||||
if (TypeofSpecifierAST *typeOfSpec = simpleDecl->decl_specifier_seq->asTypeofSpecifier())
|
|
||||||
expressionAST = typeOfSpec->expression;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return expressionAST;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Document::Ptr TypeOfExpression::documentForExpression(const QString &expression) const
|
Document::Ptr TypeOfExpression::documentForExpression(const QString &expression) const
|
||||||
{
|
{
|
||||||
// create a __typeof__ specifier
|
|
||||||
QByteArray declaration;
|
|
||||||
declaration += "__typeof__ ";
|
|
||||||
declaration += expression.toLatin1(); // C++ code needs to be in latin1
|
|
||||||
declaration += ";";
|
|
||||||
|
|
||||||
// create the expression's AST.
|
// create the expression's AST.
|
||||||
Document::Ptr doc = Document::create(QLatin1String("<completion>"));
|
Document::Ptr doc = Document::create(QLatin1String("<completion>"));
|
||||||
doc->setSource(declaration);
|
const QByteArray bytes = expression.toUtf8();
|
||||||
doc->parse();
|
doc->setSource(bytes);
|
||||||
|
doc->parse(Document::ParseExpression);
|
||||||
return doc;
|
return doc;
|
||||||
}
|
}
|
||||||
|
|||||||
91
src/plugins/cmakeprojectmanager/cmakestep.cpp
Normal file
91
src/plugins/cmakeprojectmanager/cmakestep.cpp
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
#include "cmakestep.h"
|
||||||
|
#include "cmakeprojectconstants.h"
|
||||||
|
#include "cmakeproject.h"
|
||||||
|
|
||||||
|
using namespace CMakeProjectManager;
|
||||||
|
using namespace CMakeProjectManager::Internal;
|
||||||
|
|
||||||
|
CMakeStep::CMakeStep(CMakeProject *pro)
|
||||||
|
: BuildStep(pro), m_pro(pro)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
CMakeStep::~CMakeStep()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CMakeStep::init(const QString &buildConfiguration)
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CMakeStep::run(QFutureInterface<bool> &fi)
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
fi.reportResult(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString CMakeStep::name()
|
||||||
|
{
|
||||||
|
return "CMake";
|
||||||
|
}
|
||||||
|
|
||||||
|
QString CMakeStep::displayName()
|
||||||
|
{
|
||||||
|
return Constants::CMAKESTEP;
|
||||||
|
}
|
||||||
|
|
||||||
|
ProjectExplorer::BuildStepConfigWidget *CMakeStep::createConfigWidget()
|
||||||
|
{
|
||||||
|
return new CMakeBuildStepConfigWidget();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CMakeStep::immutable() const
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// CMakeBuildStepConfigWidget
|
||||||
|
//
|
||||||
|
|
||||||
|
QString CMakeBuildStepConfigWidget::displayName() const
|
||||||
|
{
|
||||||
|
return "CMake";
|
||||||
|
}
|
||||||
|
|
||||||
|
void CMakeBuildStepConfigWidget::init(const QString &buildConfiguration)
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// CMakeBuildStepFactory
|
||||||
|
//
|
||||||
|
|
||||||
|
bool CMakeBuildStepFactory::canCreate(const QString &name) const
|
||||||
|
{
|
||||||
|
return (Constants::CMAKESTEP == name);
|
||||||
|
}
|
||||||
|
|
||||||
|
ProjectExplorer::BuildStep *CMakeBuildStepFactory::create(ProjectExplorer::Project *project, const QString &name) const
|
||||||
|
{
|
||||||
|
Q_ASSERT(name == Constants::CMAKESTEP);
|
||||||
|
CMakeProject *pro = qobject_cast<CMakeProject *>(project);
|
||||||
|
Q_ASSERT(pro);
|
||||||
|
return new CMakeStep(pro);
|
||||||
|
}
|
||||||
|
|
||||||
|
QStringList CMakeBuildStepFactory::canCreateForProject(ProjectExplorer::Project *pro) const
|
||||||
|
{
|
||||||
|
return QStringList();
|
||||||
|
}
|
||||||
|
|
||||||
|
QString CMakeBuildStepFactory::displayNameForName(const QString &name) const
|
||||||
|
{
|
||||||
|
return "CMake";
|
||||||
|
}
|
||||||
|
|
||||||
48
src/plugins/cmakeprojectmanager/cmakestep.h
Normal file
48
src/plugins/cmakeprojectmanager/cmakestep.h
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
#ifndef CMAKESTEP_H
|
||||||
|
#define CMAKESTEP_H
|
||||||
|
|
||||||
|
#include <projectexplorer/buildstep.h>
|
||||||
|
|
||||||
|
namespace CMakeProjectManager {
|
||||||
|
namespace Internal {
|
||||||
|
|
||||||
|
class CMakeProject;
|
||||||
|
|
||||||
|
class CMakeBuildStepConfigWidget;
|
||||||
|
|
||||||
|
class CMakeStep : public ProjectExplorer::BuildStep
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CMakeStep(CMakeProject *pro);
|
||||||
|
~CMakeStep();
|
||||||
|
virtual bool init(const QString &buildConfiguration);
|
||||||
|
|
||||||
|
virtual void run(QFutureInterface<bool> &fi);
|
||||||
|
|
||||||
|
virtual QString name();
|
||||||
|
virtual QString displayName();
|
||||||
|
virtual ProjectExplorer::BuildStepConfigWidget *createConfigWidget();
|
||||||
|
virtual bool immutable() const;
|
||||||
|
private:
|
||||||
|
CMakeProject *m_pro;
|
||||||
|
};
|
||||||
|
|
||||||
|
class CMakeBuildStepConfigWidget :public ProjectExplorer::BuildStepConfigWidget
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual QString displayName() const;
|
||||||
|
virtual void init(const QString &buildConfiguration);
|
||||||
|
};
|
||||||
|
|
||||||
|
class CMakeBuildStepFactory : public ProjectExplorer::IBuildStepFactory
|
||||||
|
{
|
||||||
|
virtual bool canCreate(const QString &name) const;
|
||||||
|
virtual ProjectExplorer::BuildStep *create(ProjectExplorer::Project *pro, const QString &name) const;
|
||||||
|
virtual QStringList canCreateForProject(ProjectExplorer::Project *pro) const;
|
||||||
|
virtual QString displayNameForName(const QString &name) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif // CMAKESTEP_H
|
||||||
@@ -342,13 +342,6 @@ EditorManager::EditorManager(ICore *core, QWidget *parent) :
|
|||||||
updateActions();
|
updateActions();
|
||||||
|
|
||||||
m_d->m_windowPopup = new OpenEditorsWindow(this);
|
m_d->m_windowPopup = new OpenEditorsWindow(this);
|
||||||
|
|
||||||
#ifdef Q_OS_MAC
|
|
||||||
m_d->m_externalEditor = m_d->m_core->resourcePath()
|
|
||||||
+QLatin1String("/runInTerminal.command vi %f %l %c %W %H %x %y");
|
|
||||||
#elif defined(Q_OS_UNIX)
|
|
||||||
m_d->m_externalEditor = QLatin1String("xterm -geom %Wx%H+%x+%y -e vi %f +%l +\"normal %c|\"");
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
EditorManager::~EditorManager()
|
EditorManager::~EditorManager()
|
||||||
@@ -381,6 +374,20 @@ QSize EditorManager::minimumSizeHint() const
|
|||||||
return QSize(400, 300);
|
return QSize(400, 300);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString EditorManager::defaultExternalEditor() const
|
||||||
|
{
|
||||||
|
#ifdef Q_OS_MAC
|
||||||
|
return m_d->m_core->resourcePath()
|
||||||
|
+QLatin1String("/runInTerminal.command vi %f %l %c %W %H %x %y");
|
||||||
|
#elif defined(Q_OS_UNIX)
|
||||||
|
return QLatin1String("xterm -geom %Wx%H+%x+%y -e vi %f +%l +\"normal %c|\"");
|
||||||
|
#elif defined (Q_OS_WIN)
|
||||||
|
return QLatin1String("notepad %f");
|
||||||
|
#else
|
||||||
|
return QString();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
EditorSplitter *EditorManager::editorSplitter() const
|
EditorSplitter *EditorManager::editorSplitter() const
|
||||||
{
|
{
|
||||||
return m_d->m_splitter;
|
return m_d->m_splitter;
|
||||||
@@ -1153,7 +1160,7 @@ void EditorManager::updateActions()
|
|||||||
|
|
||||||
m_d->m_duplicateAction->setEnabled(curEditor != 0 && curEditor->duplicateSupported());
|
m_d->m_duplicateAction->setEnabled(curEditor != 0 && curEditor->duplicateSupported());
|
||||||
|
|
||||||
m_d->m_openInExternalEditorAction->setEnabled(curEditor != 0 && !m_d->m_externalEditor.isEmpty());
|
m_d->m_openInExternalEditorAction->setEnabled(curEditor != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<IEditor*> EditorManager::openedEditors() const
|
QList<IEditor*> EditorManager::openedEditors() const
|
||||||
@@ -1364,7 +1371,7 @@ void EditorManager::saveSettings(QSettings *settings)
|
|||||||
m_d->m_splitter->saveSettings(settings);
|
m_d->m_splitter->saveSettings(settings);
|
||||||
settings->setValue(QLatin1String("EditorManager/DocumentStates"),
|
settings->setValue(QLatin1String("EditorManager/DocumentStates"),
|
||||||
m_d->m_editorStates);
|
m_d->m_editorStates);
|
||||||
settings->setValue(QLatin1String("EditorManager/ExternalEditor"),
|
settings->setValue(QLatin1String("EditorManager/ExternalEditorCommand"),
|
||||||
m_d->m_externalEditor);
|
m_d->m_externalEditor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1375,7 +1382,7 @@ void EditorManager::readSettings(QSettings *settings)
|
|||||||
m_d->m_editorStates = settings->value(QLatin1String("EditorManager/DocumentStates"))
|
m_d->m_editorStates = settings->value(QLatin1String("EditorManager/DocumentStates"))
|
||||||
.value<QMap<QString, QVariant> >();
|
.value<QMap<QString, QVariant> >();
|
||||||
if (settings->contains(QLatin1String("EditorManager/ExternalEditor")))
|
if (settings->contains(QLatin1String("EditorManager/ExternalEditor")))
|
||||||
m_d->m_externalEditor = settings->value(QLatin1String("EditorManager/ExternalEditor")).toString();
|
m_d->m_externalEditor = settings->value(QLatin1String("EditorManager/ExternalEditorCommand")).toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray EditorManager::saveOpenEditorList() const
|
QByteArray EditorManager::saveOpenEditorList() const
|
||||||
@@ -1489,7 +1496,11 @@ QString EditorManager::externalEditorHelpText() const
|
|||||||
|
|
||||||
void EditorManager::openInExternalEditor()
|
void EditorManager::openInExternalEditor()
|
||||||
{
|
{
|
||||||
if (m_d->m_externalEditor.isEmpty())
|
QString command = m_d->m_externalEditor;
|
||||||
|
if (command.isEmpty())
|
||||||
|
command = defaultExternalEditor();
|
||||||
|
|
||||||
|
if (command.isEmpty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
IEditor *editor = currentEditor();
|
IEditor *editor = currentEditor();
|
||||||
@@ -1508,7 +1519,7 @@ void EditorManager::openInExternalEditor()
|
|||||||
QFontMetrics fm(font);
|
QFontMetrics fm(font);
|
||||||
rect.moveTo(editor->widget()->mapToGlobal(QPoint(0,0)));
|
rect.moveTo(editor->widget()->mapToGlobal(QPoint(0,0)));
|
||||||
|
|
||||||
QString pre = m_d->m_externalEditor;
|
QString pre = command;
|
||||||
QString cmd;
|
QString cmd;
|
||||||
for (int i = 0; i < pre.size(); ++i) {
|
for (int i = 0; i < pre.size(); ++i) {
|
||||||
QChar c = pre.at(i);
|
QChar c = pre.at(i);
|
||||||
@@ -1551,11 +1562,16 @@ void EditorManager::openInExternalEditor()
|
|||||||
|
|
||||||
void EditorManager::setExternalEditor(const QString &editor)
|
void EditorManager::setExternalEditor(const QString &editor)
|
||||||
{
|
{
|
||||||
m_d->m_externalEditor = editor;
|
if (editor.isEmpty() || editor == defaultExternalEditor())
|
||||||
|
m_d->m_externalEditor = defaultExternalEditor();
|
||||||
|
else
|
||||||
|
m_d->m_externalEditor = editor;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString EditorManager::externalEditor() const
|
QString EditorManager::externalEditor() const
|
||||||
{
|
{
|
||||||
|
if (m_d->m_externalEditor.isEmpty())
|
||||||
|
return defaultExternalEditor();
|
||||||
return m_d->m_externalEditor;
|
return m_d->m_externalEditor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -156,6 +156,7 @@ public:
|
|||||||
|
|
||||||
void setExternalEditor(const QString &);
|
void setExternalEditor(const QString &);
|
||||||
QString externalEditor() const;
|
QString externalEditor() const;
|
||||||
|
QString defaultExternalEditor() const;
|
||||||
QString externalEditorHelpText() const;
|
QString externalEditorHelpText() const;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
|||||||
@@ -72,6 +72,8 @@ QWidget* GeneralSettings::createPage(QWidget *parent)
|
|||||||
|
|
||||||
connect(m_page->resetButton, SIGNAL(clicked()),
|
connect(m_page->resetButton, SIGNAL(clicked()),
|
||||||
this, SLOT(resetInterfaceColor()));
|
this, SLOT(resetInterfaceColor()));
|
||||||
|
connect(m_page->resetEditorButton, SIGNAL(clicked()),
|
||||||
|
this, SLOT(resetExternalEditor()));
|
||||||
connect(m_page->helpExternalEditorButton, SIGNAL(clicked()),
|
connect(m_page->helpExternalEditorButton, SIGNAL(clicked()),
|
||||||
this, SLOT(showHelpForExternalEditor()));
|
this, SLOT(showHelpForExternalEditor()));
|
||||||
|
|
||||||
@@ -95,6 +97,10 @@ void GeneralSettings::resetInterfaceColor()
|
|||||||
m_page->colorButton->setColor(0x666666);
|
m_page->colorButton->setColor(0x666666);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GeneralSettings::resetExternalEditor()
|
||||||
|
{
|
||||||
|
m_page->externalEditorEdit->setText(EditorManager::instance()->defaultExternalEditor());
|
||||||
|
}
|
||||||
|
|
||||||
void GeneralSettings::showHelpForExternalEditor()
|
void GeneralSettings::showHelpForExternalEditor()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ public:
|
|||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void resetInterfaceColor();
|
void resetInterfaceColor();
|
||||||
|
void resetExternalEditor();
|
||||||
void showHelpForExternalEditor();
|
void showHelpForExternalEditor();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@@ -108,6 +108,20 @@
|
|||||||
<item>
|
<item>
|
||||||
<widget class="QLineEdit" name="externalEditorEdit"/>
|
<widget class="QLineEdit" name="externalEditorEdit"/>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QToolButton" name="resetEditorButton">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Reset to default</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="core.qrc">
|
||||||
|
<normaloff>:/qworkbench/images/reset.png</normaloff>:/qworkbench/images/reset.png</iconset>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QToolButton" name="helpExternalEditorButton">
|
<widget class="QToolButton" name="helpExternalEditorButton">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
|
|||||||
@@ -585,15 +585,19 @@ void pp::operator()(const QByteArray &source, QByteArray *result)
|
|||||||
} else {
|
} else {
|
||||||
if (! m->function_like) {
|
if (! m->function_like) {
|
||||||
if (_dot->isNot(T_LPAREN)) {
|
if (_dot->isNot(T_LPAREN)) {
|
||||||
|
m->hidden = true;
|
||||||
expand(m->definition.constBegin(),
|
expand(m->definition.constBegin(),
|
||||||
m->definition.constEnd(),
|
m->definition.constEnd(),
|
||||||
result);
|
result);
|
||||||
|
m->hidden = false;
|
||||||
continue;
|
continue;
|
||||||
} else {
|
} else {
|
||||||
QByteArray tmp;
|
QByteArray tmp;
|
||||||
|
m->hidden = true;
|
||||||
expand(m->definition.constBegin(),
|
expand(m->definition.constBegin(),
|
||||||
m->definition.constEnd(),
|
m->definition.constEnd(),
|
||||||
&tmp);
|
&tmp);
|
||||||
|
m->hidden = false;
|
||||||
|
|
||||||
m = 0; // reset the active the macro
|
m = 0; // reset the active the macro
|
||||||
|
|
||||||
@@ -636,7 +640,9 @@ void pp::operator()(const QByteArray &source, QByteArray *result)
|
|||||||
const char *beginOfText = startOfToken(*identifierToken);
|
const char *beginOfText = startOfToken(*identifierToken);
|
||||||
const char *endOfText = endOfToken(*_dot);
|
const char *endOfText = endOfToken(*_dot);
|
||||||
++_dot; // skip T_RPAREN
|
++_dot; // skip T_RPAREN
|
||||||
|
//m->hidden = true;
|
||||||
expand(beginOfText, endOfText, result);
|
expand(beginOfText, endOfText, result);
|
||||||
|
//m->hidden = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -791,6 +791,11 @@ bool DebuggerManager::startNewDebugger(StartMode mode)
|
|||||||
m_processArgs = QStringList();
|
m_processArgs = QStringList();
|
||||||
m_workingDir = QString();
|
m_workingDir = QString();
|
||||||
m_attachedPID = dlg.attachPID();
|
m_attachedPID = dlg.attachPID();
|
||||||
|
if (m_attachedPID == 0) {
|
||||||
|
QMessageBox::warning(mainWindow(), tr("Warning"),
|
||||||
|
tr("Cannot attach to PID 0"));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
} else if (startMode() == startInternal) {
|
} else if (startMode() == startInternal) {
|
||||||
if (m_executable.isEmpty()) {
|
if (m_executable.isEmpty()) {
|
||||||
QString startDirectory = m_executable;
|
QString startDirectory = m_executable;
|
||||||
|
|||||||
@@ -1650,16 +1650,15 @@ bool GdbEngine::startDebugger()
|
|||||||
#ifdef Q_OS_MAC
|
#ifdef Q_OS_MAC
|
||||||
sendCommand("-gdb-set inferior-auto-start-cfm off");
|
sendCommand("-gdb-set inferior-auto-start-cfm off");
|
||||||
sendCommand("-gdb-set sharedLibrary load-rules "
|
sendCommand("-gdb-set sharedLibrary load-rules "
|
||||||
"dyld \".*libSystem.*\" "
|
"dyld \".*libSystem.*\" all "
|
||||||
"all dyld \".*libauto.*\" "
|
"dyld \".*libauto.*\" all "
|
||||||
"all dyld \".*AppKit.*\" "
|
"dyld \".*AppKit.*\" all "
|
||||||
"all dyld \".*PBGDBIntrospectionSupport.*\" "
|
"dyld \".*PBGDBIntrospectionSupport.*\" all "
|
||||||
"all dyld \".*Foundation.*\" "
|
"dyld \".*Foundation.*\" all "
|
||||||
"all dyld \".*CFDataFormatters.*\" "
|
"dyld \".*CFDataFormatters.*\" all "
|
||||||
"all dyld \".*libobjc.*\" "
|
"dyld \".*libobjc.*\" all "
|
||||||
"all dyld \".*CarbonDataFormatters");
|
"dyld \".*CarbonDataFormatters.*\" all");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (q->startMode() == q->attachExternal) {
|
if (q->startMode() == q->attachExternal) {
|
||||||
sendCommand("attach " + QString::number(q->m_attachedPID));
|
sendCommand("attach " + QString::number(q->m_attachedPID));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -170,7 +170,7 @@ void GitClient::diff(const QString &workingDirectory, const QStringList &fileNam
|
|||||||
if (Git::Constants::debug)
|
if (Git::Constants::debug)
|
||||||
qDebug() << "diff" << workingDirectory << fileNames;
|
qDebug() << "diff" << workingDirectory << fileNames;
|
||||||
QStringList arguments;
|
QStringList arguments;
|
||||||
arguments << QLatin1String("diff") << fileNames;
|
arguments << QLatin1String("diff") << QLatin1String("--") << fileNames;
|
||||||
|
|
||||||
const QString kind = QLatin1String(Git::Constants::GIT_DIFF_EDITOR_KIND);
|
const QString kind = QLatin1String(Git::Constants::GIT_DIFF_EDITOR_KIND);
|
||||||
const QString title = tr("Git Diff");
|
const QString title = tr("Git Diff");
|
||||||
@@ -187,7 +187,7 @@ void GitClient::diff(const QString &workingDirectory, const QString &fileName)
|
|||||||
QStringList arguments;
|
QStringList arguments;
|
||||||
arguments << QLatin1String("diff");
|
arguments << QLatin1String("diff");
|
||||||
if (!fileName.isEmpty())
|
if (!fileName.isEmpty())
|
||||||
arguments << fileName;
|
arguments << QLatin1String("--") << fileName;
|
||||||
|
|
||||||
const QString kind = QLatin1String(Git::Constants::GIT_DIFF_EDITOR_KIND);
|
const QString kind = QLatin1String(Git::Constants::GIT_DIFF_EDITOR_KIND);
|
||||||
const QString title = tr("Git Diff %1").arg(fileName);
|
const QString title = tr("Git Diff %1").arg(fileName);
|
||||||
@@ -246,7 +246,7 @@ void GitClient::blame(const QString &workingDirectory, const QString &fileName)
|
|||||||
if (Git::Constants::debug)
|
if (Git::Constants::debug)
|
||||||
qDebug() << "blame" << workingDirectory << fileName;
|
qDebug() << "blame" << workingDirectory << fileName;
|
||||||
QStringList arguments(QLatin1String("blame"));
|
QStringList arguments(QLatin1String("blame"));
|
||||||
arguments << fileName;
|
arguments << QLatin1String("--") << fileName;
|
||||||
|
|
||||||
const QString kind = QLatin1String(Git::Constants::GIT_BLAME_EDITOR_KIND);
|
const QString kind = QLatin1String(Git::Constants::GIT_BLAME_EDITOR_KIND);
|
||||||
const QString title = tr("Git Blame %1").arg(fileName);
|
const QString title = tr("Git Blame %1").arg(fileName);
|
||||||
@@ -314,7 +314,7 @@ bool GitClient::synchronousReset(const QString &workingDirectory,
|
|||||||
QByteArray outputText;
|
QByteArray outputText;
|
||||||
QByteArray errorText;
|
QByteArray errorText;
|
||||||
QStringList arguments;
|
QStringList arguments;
|
||||||
arguments << QLatin1String("reset") << QLatin1String("HEAD") << files;
|
arguments << QLatin1String("reset") << QLatin1String("HEAD") << QLatin1String("--") << files;
|
||||||
const bool rc = synchronousGit(workingDirectory, arguments, &outputText, &errorText);
|
const bool rc = synchronousGit(workingDirectory, arguments, &outputText, &errorText);
|
||||||
const QString output = QString::fromLocal8Bit(outputText);
|
const QString output = QString::fromLocal8Bit(outputText);
|
||||||
m_plugin->m_outputWindow->popup(false);
|
m_plugin->m_outputWindow->popup(false);
|
||||||
@@ -643,9 +643,9 @@ GitCommand::~GitCommand()
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void GitCommand::execute(const QStringList &arguments
|
void GitCommand::execute(const QStringList &arguments,
|
||||||
, const QString &workingDirectory
|
const QString &workingDirectory,
|
||||||
, const ProjectExplorer::Environment &environment)
|
const ProjectExplorer::Environment &environment)
|
||||||
{
|
{
|
||||||
if (Git::Constants::debug)
|
if (Git::Constants::debug)
|
||||||
qDebug() << "GitCommand::execute" << workingDirectory << arguments;
|
qDebug() << "GitCommand::execute" << workingDirectory << arguments;
|
||||||
@@ -663,9 +663,9 @@ void GitCommand::execute(const QStringList &arguments
|
|||||||
, Core::ProgressManagerInterface::CloseOnSuccess);
|
, Core::ProgressManagerInterface::CloseOnSuccess);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GitCommand::run(const QStringList &arguments
|
void GitCommand::run(const QStringList &arguments,
|
||||||
, const QString &workingDirectory
|
const QString &workingDirectory,
|
||||||
, const ProjectExplorer::Environment &environment)
|
const ProjectExplorer::Environment &environment)
|
||||||
{
|
{
|
||||||
if (Git::Constants::debug)
|
if (Git::Constants::debug)
|
||||||
qDebug() << "GitCommand::run" << workingDirectory << arguments;
|
qDebug() << "GitCommand::run" << workingDirectory << arguments;
|
||||||
|
|||||||
@@ -57,9 +57,9 @@ GitSubmitEditorPanelData GitSubmitEditorWidget::panelData() const
|
|||||||
rc.author = m_gitSubmitPanelUi.authorLineEdit->text();
|
rc.author = m_gitSubmitPanelUi.authorLineEdit->text();
|
||||||
rc.email = m_gitSubmitPanelUi.emailLineEdit->text();
|
rc.email = m_gitSubmitPanelUi.emailLineEdit->text();
|
||||||
return rc;
|
return rc;
|
||||||
};
|
}
|
||||||
|
|
||||||
void GitSubmitEditorWidget::setPanelData(const GitSubmitEditorPanelData &data)
|
void GitSubmitEditorWidget::setPanelData(const GitSubmitEditorPanelData &data)
|
||||||
{
|
{
|
||||||
m_gitSubmitPanelUi.authorLineEdit->setText(data.author);
|
m_gitSubmitPanelUi.authorLineEdit->setText(data.author);
|
||||||
m_gitSubmitPanelUi.emailLineEdit->setText(data.email);
|
m_gitSubmitPanelUi.emailLineEdit->setText(data.email);
|
||||||
|
|||||||
@@ -11,6 +11,9 @@
|
|||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout">
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<property name="margin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QGroupBox" name="infoGroup">
|
<widget class="QGroupBox" name="infoGroup">
|
||||||
<property name="title">
|
<property name="title">
|
||||||
|
|||||||
104
src/plugins/git/gitversioncontrol.cpp
Normal file
104
src/plugins/git/gitversioncontrol.cpp
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
**
|
||||||
|
** 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 "gitversioncontrol.h"
|
||||||
|
#include "gitclient.h"
|
||||||
|
|
||||||
|
namespace Git {
|
||||||
|
namespace Internal {
|
||||||
|
|
||||||
|
GitVersionControl::GitVersionControl(GitClient *client) :
|
||||||
|
m_enabled(true),
|
||||||
|
m_client(client)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
QString GitVersionControl::name() const
|
||||||
|
{
|
||||||
|
return QLatin1String("git");
|
||||||
|
}
|
||||||
|
|
||||||
|
bool GitVersionControl::isEnabled() const
|
||||||
|
{
|
||||||
|
return m_enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GitVersionControl::setEnabled(bool enabled)
|
||||||
|
{
|
||||||
|
if (m_enabled != enabled) {
|
||||||
|
m_enabled = enabled;
|
||||||
|
emit enabledChanged(m_enabled);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool GitVersionControl::supportsOperation(Operation operation) const
|
||||||
|
{
|
||||||
|
bool rc = false;
|
||||||
|
switch (operation) {
|
||||||
|
case AddOperation:
|
||||||
|
case DeleteOperation:
|
||||||
|
case OpenOperation:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool GitVersionControl::vcsOpen(const QString & /*fileName*/)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool GitVersionControl::vcsAdd(const QString & /*fileName*/)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool GitVersionControl::vcsDelete(const QString & /*fileName*/)
|
||||||
|
{
|
||||||
|
// TODO: implement using 'git rm'.
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool GitVersionControl::managesDirectory(const QString &directory) const
|
||||||
|
{
|
||||||
|
return !GitClient::findRepositoryForDirectory(directory).isEmpty();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
QString GitVersionControl::findTopLevelForDirectory(const QString &directory) const
|
||||||
|
{
|
||||||
|
return GitClient::findRepositoryForDirectory(directory);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // Internal
|
||||||
|
} // Git
|
||||||
75
src/plugins/git/gitversioncontrol.h
Normal file
75
src/plugins/git/gitversioncontrol.h
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
**
|
||||||
|
** 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 GITVERSIONCONTROL_H
|
||||||
|
#define GITVERSIONCONTROL_H
|
||||||
|
|
||||||
|
#include <coreplugin/iversioncontrol.h>
|
||||||
|
|
||||||
|
namespace Git {
|
||||||
|
namespace Internal {
|
||||||
|
|
||||||
|
class GitClient;
|
||||||
|
|
||||||
|
// Just a proxy for GitPlugin
|
||||||
|
class GitVersionControl : public Core::IVersionControl
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit GitVersionControl(GitClient *plugin);
|
||||||
|
|
||||||
|
virtual QString name() const;
|
||||||
|
|
||||||
|
virtual bool isEnabled() const;
|
||||||
|
virtual void setEnabled(bool enabled);
|
||||||
|
|
||||||
|
bool managesDirectory(const QString &directory) const;
|
||||||
|
virtual QString findTopLevelForDirectory(const QString &directory) const;
|
||||||
|
|
||||||
|
virtual bool supportsOperation(Operation operation) const;
|
||||||
|
virtual bool vcsOpen(const QString &fileName);
|
||||||
|
virtual bool vcsAdd(const QString &fileName);
|
||||||
|
virtual bool vcsDelete(const QString &filename);
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void enabledChanged(bool);
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool m_enabled;
|
||||||
|
GitClient *m_client;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // Internal
|
||||||
|
} // Git
|
||||||
|
|
||||||
|
#endif // GITVERSIONCONTROL_H
|
||||||
@@ -685,28 +685,19 @@ void ProjectExplorerPlugin::loadAction()
|
|||||||
updateActions();
|
updateActions();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ProjectExplorerPlugin::saveAction(Project *pro)
|
void ProjectExplorerPlugin::unloadProject()
|
||||||
{
|
{
|
||||||
if (debug)
|
if (debug)
|
||||||
qDebug() << "ProjectExplorerPlugin::saveAction";
|
qDebug() << "ProjectExplorerPlugin::unloadProject";
|
||||||
|
|
||||||
if (!pro)
|
Core::IFile *fi = m_currentProject->file();
|
||||||
pro = m_currentProject;
|
|
||||||
Q_ASSERT(pro);
|
|
||||||
|
|
||||||
Core::IFile *fi = pro->file();
|
|
||||||
|
|
||||||
if (!fi) // TODO Why saving the session here????
|
|
||||||
fi = m_session->file();
|
|
||||||
|
|
||||||
if (!fi || fi->fileName().isEmpty()) //nothing to save?
|
if (!fi || fi->fileName().isEmpty()) //nothing to save?
|
||||||
return false;
|
return;
|
||||||
|
|
||||||
QList<Core::IFile*> filesToSave;
|
QList<Core::IFile*> filesToSave;
|
||||||
|
|
||||||
filesToSave << fi;
|
filesToSave << fi;
|
||||||
if (pro)
|
filesToSave << m_currentProject->dependencies();
|
||||||
filesToSave << pro->dependencies();
|
|
||||||
|
|
||||||
// check the number of modified files
|
// check the number of modified files
|
||||||
int readonlycount = 0;
|
int readonlycount = 0;
|
||||||
@@ -721,20 +712,10 @@ bool ProjectExplorerPlugin::saveAction(Project *pro)
|
|||||||
else
|
else
|
||||||
success = m_core->fileManager()->saveModifiedFilesSilently(filesToSave).isEmpty();
|
success = m_core->fileManager()->saveModifiedFilesSilently(filesToSave).isEmpty();
|
||||||
|
|
||||||
if (success)
|
if (!success)
|
||||||
addToRecentProjects(fi->fileName());
|
|
||||||
updateActions();
|
|
||||||
return success;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ProjectExplorerPlugin::unloadProject()
|
|
||||||
{
|
|
||||||
if (debug)
|
|
||||||
qDebug() << "ProjectExplorerPlugin::unloadProject";
|
|
||||||
|
|
||||||
if (!saveAction(m_currentProject))
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
addToRecentProjects(fi->fileName());
|
||||||
m_session->removeProject(m_currentProject);
|
m_session->removeProject(m_currentProject);
|
||||||
updateActions();
|
updateActions();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -139,7 +139,6 @@ private slots:
|
|||||||
void cancelBuild();
|
void cancelBuild();
|
||||||
void debugProject();
|
void debugProject();
|
||||||
void editDependencies();
|
void editDependencies();
|
||||||
bool saveAction(ProjectExplorer::Project *pro = 0);
|
|
||||||
void loadAction();
|
void loadAction();
|
||||||
void unloadProject();
|
void unloadProject();
|
||||||
void clearSession();
|
void clearSession();
|
||||||
|
|||||||
@@ -939,6 +939,7 @@ void SessionManager::removeProjects(QList<Project *> remove)
|
|||||||
|
|
||||||
// Delete projects
|
// Delete projects
|
||||||
foreach (Project *pro, remove) {
|
foreach (Project *pro, remove) {
|
||||||
|
pro->saveSettings();
|
||||||
m_file->m_projects.removeOne(pro);
|
m_file->m_projects.removeOne(pro);
|
||||||
|
|
||||||
if (pro == m_file->m_startupProject)
|
if (pro == m_file->m_startupProject)
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ bool ProFileReader::readProFile(const QString &fileName)
|
|||||||
// return false;
|
// return false;
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
QString fn = QFileInfo(fileName).filePath();
|
QString fn = QFileInfo(fileName).filePath();
|
||||||
ProFile *pro = new ProFile(fn);
|
ProFile *pro = new ProFile(fn);
|
||||||
if (!queryProFile(pro)) {
|
if (!queryProFile(pro)) {
|
||||||
delete pro;
|
delete pro;
|
||||||
|
|||||||
@@ -33,7 +33,6 @@
|
|||||||
|
|
||||||
#include "proeditormodel.h"
|
#include "proeditormodel.h"
|
||||||
|
|
||||||
#include "profilecache.h"
|
|
||||||
#include "profilereader.h"
|
#include "profilereader.h"
|
||||||
#include "prowriter.h"
|
#include "prowriter.h"
|
||||||
#include "qt4nodes.h"
|
#include "qt4nodes.h"
|
||||||
@@ -884,12 +883,12 @@ QStringList Qt4ProFileNode::subDirsPaths(ProFileReader *reader) const
|
|||||||
QString realFile;
|
QString realFile;
|
||||||
const QString subDirKey = subDirVar + QLatin1String(".subdir");
|
const QString subDirKey = subDirVar + QLatin1String(".subdir");
|
||||||
if (reader->contains(subDirKey))
|
if (reader->contains(subDirKey))
|
||||||
realDir = reader->value(subDirKey);
|
realDir = QFileInfo(reader->value(subDirKey)).filePath();
|
||||||
else
|
else
|
||||||
realDir = subDirVar;
|
realDir = subDirVar;
|
||||||
QFileInfo info(realDir);
|
QFileInfo info(realDir);
|
||||||
if (!info.isAbsolute())
|
if (!info.isAbsolute())
|
||||||
realDir = QString("%1/%2").arg(m_projectDir, realDir);
|
realDir = m_projectDir + "/" + realDir;
|
||||||
|
|
||||||
#ifdef QTEXTENDED_QBUILD_SUPPORT
|
#ifdef QTEXTENDED_QBUILD_SUPPORT
|
||||||
// QBuild only uses project files named qbuild.pro, and subdirs are implied
|
// QBuild only uses project files named qbuild.pro, and subdirs are implied
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ void BaseAnnotationHighlighter::setChangeNumbers(const ChangeNumbers &changeNumb
|
|||||||
// Assign a color gradient to annotation change numbers. Give
|
// Assign a color gradient to annotation change numbers. Give
|
||||||
// each change number a unique color.
|
// each change number a unique color.
|
||||||
const double oneThird = 1.0 / 3.0;
|
const double oneThird = 1.0 / 3.0;
|
||||||
const int step = qRound(ceil(pow(changeNumbers.count(), oneThird)));
|
const int step = qRound(ceil(pow(double(changeNumbers.count()), oneThird)));
|
||||||
QList<QColor> colors;
|
QList<QColor> colors;
|
||||||
const int factor = 255 / step;
|
const int factor = 255 / step;
|
||||||
for (int i=0; i<step; ++i)
|
for (int i=0; i<step; ++i)
|
||||||
|
|||||||
@@ -240,7 +240,7 @@ bool VCSBaseSubmitEditor::restoreState(const QByteArray &/*state*/)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList VCSBaseSubmitEditor::checkedFiles() const
|
QStringList VCSBaseSubmitEditor::checkedFiles() const
|
||||||
{
|
{
|
||||||
return vcsFileListToFileList(m_d->m_widget->checkedFiles());
|
return vcsFileListToFileList(m_d->m_widget->checkedFiles());
|
||||||
}
|
}
|
||||||
@@ -255,7 +255,7 @@ void VCSBaseSubmitEditor::addFiles(const QStringList& list, bool checked, bool u
|
|||||||
m_d->m_widget->addFiles(list, checked, userCheckable);
|
m_d->m_widget->addFiles(list, checked, userCheckable);
|
||||||
}
|
}
|
||||||
|
|
||||||
void VCSBaseSubmitEditor::slotDiffSelectedVCSFiles(const QStringList &rawList)
|
void VCSBaseSubmitEditor::slotDiffSelectedVCSFiles(const QStringList &rawList)
|
||||||
{
|
{
|
||||||
emit diffSelectedFiles(vcsFileListToFileList(rawList));
|
emit diffSelectedFiles(vcsFileListToFileList(rawList));
|
||||||
}
|
}
|
||||||
@@ -299,4 +299,4 @@ QIcon VCSBaseSubmitEditor::submitIcon()
|
|||||||
return QIcon(QLatin1String(":/vcsbase/images/submit.png"));
|
return QIcon(QLatin1String(":/vcsbase/images/submit.png"));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
} // namespace VCSBase
|
||||||
|
|||||||
@@ -39,3 +39,14 @@ DEPENDPATH += \
|
|||||||
$$IDE_SOURCE_TREE/tools \
|
$$IDE_SOURCE_TREE/tools \
|
||||||
|
|
||||||
LIBS += -L$$IDE_LIBRARY_PATH
|
LIBS += -L$$IDE_LIBRARY_PATH
|
||||||
|
|
||||||
|
unix {
|
||||||
|
debug:OBJECTS_DIR = $${OUT_PWD}/.obj/debug-shared
|
||||||
|
release:OBJECTS_DIR = $${OUT_PWD}/.obj/release-shared
|
||||||
|
|
||||||
|
debug:MOC_DIR = $${OUT_PWD}/.moc/debug-shared
|
||||||
|
release:MOC_DIR = $${OUT_PWD}/.moc/release-shared
|
||||||
|
|
||||||
|
RCC_DIR = $${OUT_PWD}/.rcc/
|
||||||
|
UI_DIR = $${OUT_PWD}/.uic/
|
||||||
|
}
|
||||||
|
|||||||
@@ -47,11 +47,4 @@ macx {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
unix {
|
|
||||||
OBJECTS_DIR = $${OUT_PWD}/.obj/
|
|
||||||
MOC_DIR = $${OUT_PWD}/.moc/
|
|
||||||
RCC_DIR = $${OUT_PWD}/.rcc/
|
|
||||||
UI_DIR = $${OUT_PWD}/.uic/
|
|
||||||
}
|
|
||||||
|
|
||||||
contains(QT_CONFIG, reduce_exports):CONFIG += hide_symbols
|
contains(QT_CONFIG, reduce_exports):CONFIG += hide_symbols
|
||||||
|
|||||||
3
tests/manual/cplusplus/c++
Executable file
3
tests/manual/cplusplus/c++
Executable file
@@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
me=$(dirname $0)
|
||||||
|
${CPP-gcc} -xc++ -E -include $me/conf.c++ $* | $me/cplusplus0
|
||||||
7
tests/manual/cplusplus/conf.c++
Normal file
7
tests/manual/cplusplus/conf.c++
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
#define __extension__
|
||||||
|
#define __context__
|
||||||
|
#define __range__
|
||||||
|
#define __asm(a...)
|
||||||
|
#define __asm__(a...)
|
||||||
|
#define restrict
|
||||||
|
#define __restrict
|
||||||
19
tests/manual/cplusplus/cplusplus.pro
Normal file
19
tests/manual/cplusplus/cplusplus.pro
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
QT = core
|
||||||
|
macx:CONFIG -= app_bundle
|
||||||
|
TARGET = cplusplus0
|
||||||
|
|
||||||
|
include(../../../shared/cplusplus/cplusplus.pri)
|
||||||
|
|
||||||
|
# Input
|
||||||
|
SOURCES += main.cpp
|
||||||
|
|
||||||
|
unix {
|
||||||
|
debug:OBJECTS_DIR = $${OUT_PWD}/.obj/debug-shared
|
||||||
|
release:OBJECTS_DIR = $${OUT_PWD}/.obj/release-shared
|
||||||
|
|
||||||
|
debug:MOC_DIR = $${OUT_PWD}/.moc/debug-shared
|
||||||
|
release:MOC_DIR = $${OUT_PWD}/.moc/release-shared
|
||||||
|
|
||||||
|
RCC_DIR = $${OUT_PWD}/.rcc/
|
||||||
|
UI_DIR = $${OUT_PWD}/.uic/
|
||||||
|
}
|
||||||
71
tests/manual/cplusplus/main.cpp
Normal file
71
tests/manual/cplusplus/main.cpp
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
**
|
||||||
|
** 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 <QFile>
|
||||||
|
|
||||||
|
#include <cstdio>
|
||||||
|
#include <cstdlib>
|
||||||
|
|
||||||
|
#include <TranslationUnit.h>
|
||||||
|
#include <Control.h>
|
||||||
|
#include <AST.h>
|
||||||
|
#include <Semantic.h>
|
||||||
|
#include <Scope.h>
|
||||||
|
|
||||||
|
int main(int, char *[])
|
||||||
|
{
|
||||||
|
Control control;
|
||||||
|
StringLiteral *fileId = control.findOrInsertFileName("<stdin>");
|
||||||
|
|
||||||
|
QFile in;
|
||||||
|
if (! in.open(stdin, QFile::ReadOnly))
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
|
||||||
|
const QByteArray source = in.readAll();
|
||||||
|
|
||||||
|
TranslationUnit unit(&control, fileId);
|
||||||
|
unit.setSource(source.constData(), source.size());
|
||||||
|
unit.parse();
|
||||||
|
if (unit.ast()) {
|
||||||
|
TranslationUnitAST *ast = unit.ast()->asTranslationUnit();
|
||||||
|
Q_ASSERT(ast != 0);
|
||||||
|
|
||||||
|
Scope globalScope;
|
||||||
|
Semantic sem(&control);
|
||||||
|
for (DeclarationAST *decl = ast->declarations; decl; decl = decl->next) {
|
||||||
|
sem.check(decl, &globalScope);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user