Commit 8b6575a0 authored by goro's avatar goro
Browse files

Merge branch '0.9.1-beta' of git@scm.dev.nokia.troll.no:creator/mainline into 0.9.1-beta

parents 1ef9dc31 9be86223
......@@ -23,6 +23,8 @@
\o \inlineimage qtcreator.png
\o Qt Creator includes a wide range of useful features. Among them are:
\list 1
\o \bold{Smart Code Editor}: The code editor provides syntax
highlighting as well as code completion.
\o \bold{Qt4 Project Generating Wizard}: This wizard allows the user
to generate a project for a console application, a GUI application,
or a C++ library.
......@@ -48,7 +50,7 @@
\o \l{Creating a Project in Qt Creator}
\o \l{Build Settings}
\o \l{Writing a Simple Program with Qt Creator}
\o \l{Quick Navigation}
\o \l{Navigating Quickly Around Your Code}
\o \l{Debugging with Qt Creator}
\o \l{Tips and Tricks}
\o \l{Glossary}
......@@ -64,86 +66,85 @@
\title A Quick Tour Around Qt Creator
The labeled screenshot below shows some of the components of Qt Creator,
in \gui Edit mode.
The labeled screenshot below shows some of the components of Qt Creator, in
\gui Edit mode.
\image qtcreator-breakdown.png
\section1 The Mode Selectors
When working in Qt Creator, you can be in one of five modes: \bold Project,
\bold Edit, \bold Debug, \bold Help, and \bold Output.
When working in Qt Creator, you can be in one of six modes: \bold Welcome,
\bold Edit, \bold Debug, \bold Projects, \bold Help, and \bold Output.
Mode selectors allow you to quickly switch between tasks: Editing,
browsing the Qt manual, setting up the build environment, etc. You can
Mode selectors allow you to quickly switch between tasks: Editing, browsing
the Qt Creator manual, setting up the build environment, etc. You can
activate a mode by either clicking on its mode selector, or using the
\l{keyboard-shortcuts}{corresponding shortcut}. Certain actions also
trigger a mode change, e.g., \gui{Debug}/\gui{Start Debugging} will switch
to the \gui Debug mode.
\list
\o \gui{Welcome Mode} - Displays a welcome screen allowing you to quickly
load recent sessions or individual projects. This is the first mode
displayed if Qt Creator is run without command line switches.
load recent sessions or individual projects. This is the mode you will see
if Qt Creator is run without command line switches.
\o \gui{Edit Mode} - You can edit both project and source files here. An
optional sidebar on the left provides different views to navigate between
files.
\o \gui{Edit Mode} - Lets you edit both project and source files. A sidebar
on the left provides different views to navigate between files.
\o \gui{Debug Mode} - Provides various ways to inspect the state of the
program while debugging. See \l{qtcreator-debugging}{Debugging With Qt
Creator} for a hands-on description of the mode.
Creator} for a hands-on description of how to use this mode.
\o \gui{Build & Run Mode} - Lets you configure how projects can be built
and executed. Under the list of projects, there are tabs to configure the
build and run settings.
\o \gui{Projects Mode} - Lets you configure how projects can be built and
executed. Under the list of projects, there are tabs to configure the
build, run, and editor settings.
\o \gui{Help Mode} - Shows any documentation registered by Qt Assistant,
such as the Qt library and Qt Creator documentation.
\o \gui{Output Mode} - Lets you examine various logs in detail, for example
the task list, the compiler and application output. Some of these logs can
also be viewed in the output panes.
\o \gui{Output Mode} - Lets you examine various data in detail, for example
build issues as well as compile and application output. This information
is also available in the output panes.
\endlist
\section1 The Output Panes
The task pane in Qt Creator can display one out of four different panes:
Task List, Search Results, Application Output, and Compile Output. These
panes are available in all modes.
The task pane in Qt Creator can display one of four different panes:
\gui{Build Issues}, \gui{Search Results}, \gui{Application Output}, and
\gui{Compile}. These panes are available in all modes.
\section2 Task List
\section2 Build Issues
The Task List provides a list of important tasks such as error messages
that need to be fixed. It filters out irrelevant output from the compiler
and collects them in the form of tasks.
The {Build Issues} pane provides a list of issues, e.g., error messages or
warnings that need to be fixed. It filters out irrelevant output from the
compiler and collects them in an organized way.
\image qtcreator-task-list.png
\image qtcreator-build-issues.png
\section2 Search Results
The Search Results pane displays the results for global searches such as
searching within a current document, files on disk, or all projects.
In the screenshot below, we searched for all occurrences of \c{textfinder}
within the "/TextFinder" folder.
The \gui{Search Results} pane displays the results for global searches such
as searching within a current document, files on disk, or all projects. In
the screenshot below, we searched for all occurrences of \c{textfinder}
within the \c{"/TextFinder"} folder.
\image qtcreator-search-pane.png
\section2 Application Output
This pane displays the status of the program when it is executed, as
well as debug output, for example, output from qDebug().
The \gui{Application Output} pane displays the status of the program when
it is executed and debug output, e.g., output from qDebug().
\image qtcreator-application-output.png
\section2 Compile Output
\section2 Compile
The Compile Output provides all the output from the compiler. In other
words, it is a more verbose version of the Task List.
The \gui{Compile} pane provides all the output from the compiler. In other
words, it is a more verbose version of information displayed in the
\gui{Build Issues}
\image qtcreator-compile-pane.png
......@@ -521,7 +522,7 @@
\page creator-navigation.html
\nextpage creator-debugging.html
\title Quick Navigation
\title Navigating Quickly Around Your Code
With Qt Creator, navigating to different locations in your project or on
your disk, such as files, classes and methods, is trivial using the input
......
......@@ -69,7 +69,7 @@ static const char *HELP_OPTION4 = "--help";
static const char *VERSION_OPTION = "-version";
static const char *CLIENT_OPTION = "-client";
typedef QSet<ExtensionSystem::PluginSpec *> PluginSpecSet;
typedef QList<ExtensionSystem::PluginSpec *> PluginSpecSet;
// Helpers for displaying messages. Note that there is no console on Windows.
#ifdef Q_WS_WIN
......
......@@ -37,6 +37,7 @@
#include <TranslationUnit.h>
#include <cplusplus/LookupContext.h>
#include <cplusplus/ResolveExpression.h>
#include <cplusplus/pp.h>
using namespace CPlusPlus;
......@@ -53,9 +54,13 @@ void TypeOfExpression::setDocuments(const QMap<QString, Document::Ptr> &document
QList<TypeOfExpression::Result> TypeOfExpression::operator()(const QString &expression,
Document::Ptr document,
Symbol *lastVisibleSymbol)
Symbol *lastVisibleSymbol,
PreprocessMode mode)
{
Document::Ptr expressionDoc = documentForExpression(expression);
QString code = expression;
if (mode == Preprocess)
code = preprocessedExpression(expression, m_documents, document);
Document::Ptr expressionDoc = documentForExpression(code);
m_ast = extractExpressionAST(expressionDoc);
m_lookupContext = LookupContext(lastVisibleSymbol, expressionDoc,
......@@ -97,3 +102,34 @@ Document::Ptr TypeOfExpression::documentForExpression(const QString &expression)
doc->parse(Document::ParseExpression);
return doc;
}
void TypeOfExpression::processEnvironment(QMap<QString, Document::Ptr> documents,
Document::Ptr doc, Environment *env,
QSet<QString> *processed) const
{
if (processed->contains(doc->fileName()))
return;
processed->insert(doc->fileName());
foreach (const Document::Include &incl, doc->includes()) {
processEnvironment(documents,
documents.value(incl.fileName()),
env, processed);
}
foreach (const Macro &macro, doc->definedMacros())
env->bind(macro);
}
QString TypeOfExpression::preprocessedExpression(const QString &expression,
QMap<QString, Document::Ptr> documents,
Document::Ptr thisDocument) const
{
Environment env;
QSet<QString> processed;
processEnvironment(documents, thisDocument,
&env, &processed);
const QByteArray code = expression.toUtf8();
pp preproc(0, env);
QByteArray preprocessedCode;
preproc("<expression>", code, &preprocessedCode);
return QString::fromUtf8(preprocessedCode);
}
......@@ -43,6 +43,9 @@
namespace CPlusPlus {
class Environment;
class Macro;
class CPLUSPLUS_EXPORT TypeOfExpression
{
public:
......@@ -60,6 +63,11 @@ public:
*/
void setDocuments(const QMap<QString, Document::Ptr> &documents);
enum PreprocessMode {
NoPreprocess,
Preprocess
};
/**
* Returns a list of possible fully specified types associated with the
* given expression.
......@@ -73,7 +81,8 @@ public:
* @param lastVisibleSymbol The last visible symbol in the document.
*/
QList<Result> operator()(const QString &expression, Document::Ptr document,
Symbol *lastVisibleSymbol);
Symbol *lastVisibleSymbol,
PreprocessMode mode = NoPreprocess);
/**
* Returns the AST of the last evaluated expression.
......@@ -91,6 +100,14 @@ private:
ExpressionAST *extractExpressionAST(Document::Ptr doc) const;
Document::Ptr documentForExpression(const QString &expression) const;
void processEnvironment(QMap<QString, CPlusPlus::Document::Ptr> documents,
CPlusPlus::Document::Ptr doc, CPlusPlus::Environment *env,
QSet<QString> *processed) const;
QString preprocessedExpression(const QString &expression,
QMap<QString, CPlusPlus::Document::Ptr> documents,
CPlusPlus::Document::Ptr thisDocument) const;
QMap<QString, Document::Ptr> m_documents;
ExpressionAST *m_ast;
LookupContext m_lookupContext;
......
......@@ -129,7 +129,7 @@ bool OptionsParser::checkForNoLoadOption()
"The plugin '%1' does not exist.").arg(m_currentArg);
m_hasError = true;
} else {
m_pmPrivate->pluginSpecs.remove(spec);
m_pmPrivate->pluginSpecs.removeAll(spec);
delete spec;
m_isDependencyRefreshNeeded = true;
}
......
......@@ -48,7 +48,7 @@
#include <QTest>
#endif
typedef QSet<ExtensionSystem::PluginSpec *> PluginSpecSet;
typedef QList<ExtensionSystem::PluginSpec *> PluginSpecSet;
enum { debugLeaks = 0 };
......@@ -162,6 +162,11 @@ enum { debugLeaks = 0 };
using namespace ExtensionSystem;
using namespace ExtensionSystem::Internal;
static bool lessThanByPluginName(const PluginSpec *one, const PluginSpec *two)
{
return one->name() < two->name();
}
PluginManager *PluginManager::m_instance = 0;
/*!
......@@ -306,7 +311,7 @@ QStringList PluginManager::arguments() const
}
/*!
\fn QSet<PluginSpec *> PluginManager::plugins() const
\fn QList<PluginSpec *> PluginManager::plugins() const
List of all plugin specifications that have been found in the plugin search paths.
This list is valid directly after the setPluginPaths() call.
The plugin specifications contain the information from the plugins' xml description files
......@@ -315,7 +320,7 @@ QStringList PluginManager::arguments() const
\sa setPluginPaths()
*/
QSet<PluginSpec *> PluginManager::plugins() const
QList<PluginSpec *> PluginManager::plugins() const
{
return d->pluginSpecs;
}
......@@ -703,9 +708,11 @@ void PluginManagerPrivate::readPluginPaths()
foreach (const QString &specFile, specFiles) {
PluginSpec *spec = new PluginSpec;
spec->d->read(specFile);
pluginSpecs.insert(spec);
pluginSpecs.append(spec);
}
resolveDependencies();
// ensure deterministic plugin load order by sorting
qSort(pluginSpecs.begin(), pluginSpecs.end(), lessThanByPluginName);
emit q->pluginsChanged();
}
......
......@@ -101,7 +101,7 @@ public:
void loadPlugins();
QStringList pluginPaths() const;
void setPluginPaths(const QStringList &paths);
QSet<PluginSpec *> plugins() const;
QList<PluginSpec *> plugins() const;
void setFileExtension(const QString &extension);
QString fileExtension() const;
......
......@@ -66,7 +66,7 @@ public:
void loadPlugin(PluginSpec *spec, PluginSpec::State destState);
void resolveDependencies();
QSet<PluginSpec *> pluginSpecs;
QList<PluginSpec *> pluginSpecs;
QList<PluginSpec *> testSpecs;
QStringList pluginPaths;
QString extension;
......
......@@ -693,10 +693,10 @@ int PluginSpecPrivate::versionCompare(const QString &version1, const QString &ve
}
/*!
\fn bool PluginSpecPrivate::resolveDependencies(const QSet<PluginSpec *> &specs)
\fn bool PluginSpecPrivate::resolveDependencies(const QList<PluginSpec *> &specs)
\internal
*/
bool PluginSpecPrivate::resolveDependencies(const QSet<PluginSpec *> &specs)
bool PluginSpecPrivate::resolveDependencies(const QList<PluginSpec *> &specs)
{
if (hasError)
return false;
......
......@@ -56,7 +56,7 @@ public:
bool read(const QString &fileName);
bool provides(const QString &pluginName, const QString &version) const;
bool resolveDependencies(const QSet<PluginSpec *> &specs);
bool resolveDependencies(const QList<PluginSpec *> &specs);
bool loadLibrary();
bool initializePlugin();
bool initializeExtensions();
......
......@@ -439,7 +439,8 @@ int CppCodeCompletion::startCompletion(TextEditor::ITextEditable *editor)
typeOfExpression.setDocuments(m_manager->documents());
QList<TypeOfExpression::Result> resolvedTypes = typeOfExpression(expression, thisDocument, symbol);
QList<TypeOfExpression::Result> resolvedTypes = typeOfExpression(expression, thisDocument, symbol,
TypeOfExpression::Preprocess);
LookupContext context = typeOfExpression.lookupContext();
if (!typeOfExpression.expressionAST() && (! m_completionOperator ||
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment