...
 
Commits (34)
The QtCreator 1.2.1 release is a bug fix release and updates translations.
Below is a list of relevant changes. You can find a complete list of changes
within the logs of Qt Creator's sources. Simply check it out from the public git
repository e.g.,
git clone git://gitorious.org/qt-creator/qt-creator.git
git log --pretty=oneline v1.2.0..v1.2.1
Building and Running
* Fixed crash when clicking on the Build Settings tab with an invalid Qt version.
* Fixed crash when removing an active .pro file outside Qt Creator.
Editor
* Fixed crash when completing function-like arguments
Debugging
* Fixed problem with GDB debugging after first debugging run
* Fixed display of debugging helper status in some cases
* Disallow starting CDB debugger more than once
* Additional debug output for the CDB debugger
* Make loading debugging helpers more reliable with GDB
* Fixed regression in QVariant dumper
* Removed QtGui dependency from debugging helpers
* Made it possible to build the debugging helpers for Qt 4.4 again
I18N:
* Fixed Russian translation
BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV {
font-family: Arial, Geneva, Helvetica, sans-serif;
}
H1 {
text-align: center;
font-size: 160%;
}
H2 {
font-size: 120%;
}
H3 {
font-size: 100%;
}
h3.fn,span.fn
{
margin-left: 1cm;
text-indent: -1cm;
background-color: #eee;
border-width: 1px;
border-style: solid;
border-color: #ddd;
font-weight: bold;
padding: 6px 0px 6px 10px;
margin: 42px 0px 0px 0px;
}
hr {
border: 0;
color: #a0a0a0;
background-color: #ccc;
height: 1px;
width: 100%;
text-align: left;
margin: 34px 0px 34px 0px;
}
table.valuelist {
border-width: 1px 1px 1px 1px;
border-style: solid;
border-color: #dddddd;
border-collapse: collapse;
background-color: #f0f0f0;
}
table.indextable {
border-width: 1px 1px 1px 1px;
border-collapse: collapse;
background-color: #f0f0f0;
border-color:#555;
font-size: 110%;
}
table td.largeindex {
border-width: 1px 1px 1px 1px;
border-collapse: collapse;
background-color: #f0f0f0;
border-color:#555;
font-size: 120%;
}
table.valuelist th {
border-width: 1px 1px 1px 2px;
padding: 4px;
border-style: solid;
border-color: #666;
color:white;
background-color:#666;
}
th.titleheader {
border-width: 1px 0px 1px 0px;
padding: 4px;
border-style: solid;
border-color: #444;
color:white;
background-color:#555555;
font-size: 110%;
}
th.largeheader {
border-width: 1px 0px 1px 0px;
padding: 4px;
border-style: solid;
border-color: #444;
color:white;
background-color:#555555;
font-size: 120%;
}
p {
margin-left: 4px;
margin-top: 8px;
margin-bottom: 8px;
}
a:link
{
color: #004faf;
color: #0046ad;
text-decoration: none
}
......@@ -16,14 +105,28 @@ a:visited
text-decoration: none
}
td.postheader
a.obsolete
{
color: #661100;
text-decoration: none
}
a.compat
{
color: #661100;
text-decoration: none
}
a.obsolete:visited
{
font-family: sans-serif
color: #995500;
text-decoration: none
}
tr.address
a.compat:visited
{
font-family: sans-serif
color: #995500;
text-decoration: none
}
body
......@@ -32,6 +135,34 @@ body
color: black
}
table.generic, table.annotated
{
border-width: 1px;
border-color:#bbb;
border-style:solid;
border-collapse:collapse;
}
table td.memItemLeft {
width: 180px;
padding: 2px 0px 0px 8px;
margin: 4px;
border-width: 1px;
border-color: #E0E0E0;
border-style: none;
font-size: 100%;
white-space: nowrap
}
table td.memItemRight {
padding: 2px 8px 0px 8px;
margin: 4px;
border-width: 1px;
border-color: #E0E0E0;
border-style: none;
font-size: 100%;
}
table tr.odd {
background: #f0f0f0;
color: black;
......@@ -53,17 +184,17 @@ table.annotated td {
table tr pre
{
padding-top: none;
padding-bottom: none;
padding-left: none;
padding-right: none;
padding-top: 0px;
padding-bottom: 0px;
padding-left: 0px;
padding-right: 0px;
border: none;
background: none
}
tr.qt-style
{
background: #a2c511;
background: #96E066;
color: black
}
......@@ -75,6 +206,14 @@ body pre
color: black
}
table tr.qt-code pre
{
padding: 0.2em;
border: #e7e7e7 1px solid;
background: #f1f1f1;
color: black
}
span.preprocessor, span.preprocessor a
{
color: darkblue;
......@@ -91,6 +230,11 @@ span.string,span.char
color: darkgreen;
}
.title
{
text-align: center
}
.subtitle
{
font-size: 0.8em
......@@ -100,3 +244,52 @@ span.string,span.char
{
font-size: 0.65em
}
.qmlitem {
padding: 0;
}
.qmlname {
white-space: nowrap;
font-weight: bold;
font-size: 125%;
}
.qmltype {
font-weight: bold;
font-size: 125%;
}
.qmlproto, .qmldoc {
// border-top: 1px solid #84b0c7;
}
.qmlproto {
padding: 0;
//background-color: #e4e4e4;//#d5e1e8;
//font-weight: bold;
//-webkit-border-top-left-radius: 8px;
//-webkit-border-top-right-radius: 8px;
//-moz-border-radius-topleft: 8px;
//-moz-border-radius-topright: 8px;
}
.qmldoc {
border-top: 1px solid #e4e4e4;
//padding: 2px 5px;
//background-color: #eef3f5;
//border-top-width: 0;
//-webkit-border-bottom-left-radius: 8px;
//-webkit-border-bottom-right-radius: 8px;
//-moz-border-radius-bottomleft: 8px;
//-moz-border-radius-bottomright: 8px;
}
.qmldoc p, .qmldoc dl, .qmldoc ul {
//margin: 6px 0;
}
*.qmlitem p {
//margin-top: 0px;
//margin-bottom: 0px;
}
doc/images/qtcreator-screenshots.png

243 KB | W: | H:

doc/images/qtcreator-screenshots.png

81.2 KB | W: | H:

doc/images/qtcreator-screenshots.png
doc/images/qtcreator-screenshots.png
doc/images/qtcreator-screenshots.png
doc/images/qtcreator-screenshots.png
  • 2-up
  • Swipe
  • Onion skin
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -5,23 +5,21 @@
\title Qt Creator Manual
\section1 Version 1.2.0
\section1 Version 1.2.1
The goal of Qt Creator is to provide a cross-platform, complete Integrated
Development Environment (IDE) to develop Qt projects. It is available for
the Linux, Mac OS X and Windows platforms.
\note Please report bugs and suggestions to the Qt task tracker at
http://qtsoftware.com/developer/task-tracker. You can also join the
qt-creator@trolltech.com mailing list. To subscribe, send a message with
the word \e subscribe to qt-creator-request@trolltech.com. For more
information on Qt mailing lists, visit http://lists.trolltech.com
\note Please report bugs and suggestions to the
\l{http://qt.nokia.com/developer/task-tracker}{Qt task tracker}.
You can also join the Qt Creator mailing list. To subscribe,
send a message with the word \e subscribe to
\l{mailto:qt-creator-request@trolltech.com}
{qt-creator-request@trolltech.com}. For more information on Qt mailing
lists, visit \l{http://lists.trolltech.com}{http://lists.trolltech.com}.
\image qtcreator-screenshots.png
\table
\row
\o Qt Creator includes a wide range of useful features. Among them are:
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.
......@@ -41,10 +39,14 @@
within Qt Creator using a graphical frontend to the GNU symbolic
debugger (GDB) and the Microsoft Console Debugger (CDB).
\endlist
\endtable
To learn more about the Qt Creator, click on one of the links below:
\raw HTML
<img border="0" style="float:right;" src="images/qtcreator-screenshots.png" />
\endraw
\list
\o \l{A Quick Tour of Qt Creator}
\o \l{Creating a Project in Qt Creator}
......@@ -54,6 +56,7 @@
\o \l{Writing a Simple Program with Qt Creator}
\o \l{Qt Creator and Version Control Systems}
\o \l{Navigating Quickly Around Your Code with Locator}
\o \l{Session Management in Qt Creator}
\o \l{Debugging with Qt Creator}
\o \l{CMake Support in Qt Creator}
\o \l{Support for Generic Projects in Qt Creator}
......@@ -65,10 +68,8 @@
\o \l{Known Issues}
\o \l{Acknowledgements}
\endlist
*/
/*!
\contentspage index.html
\page creator-quick-tour.html
......@@ -129,9 +130,9 @@
\section2 Build Issues
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.
The \gui{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-build-issues.png
......@@ -163,24 +164,6 @@
\image qtcreator-compile-pane.png
\section1 Session Management in Qt Creator
In Qt Creator, a session is a collection of loaded projects, opened files,
editor settings, and so on. When you run Qt Creator, you have a default
session. You can create a new session using the \gui{Session Manager...}
option, available in the \gui{File -> Session} menu.
\image qtcreator-session-manager.png
To switch between sessions, select \gui{File -> Session}. If you do not
create and select any session, Qt Creator will always use the default
session.
\image qtcreator-session-menu.png
\section1 Qt Help Integration
Qt Creator comes fully integrated with all of Qt's documentation and
......@@ -993,6 +976,45 @@
*/
/*!
\contentspage index.html
\previouspage creator-navigation.html
\page creator-session.html
\nextpage creator-debugging.html
\title Session Management in Qt Creator
In Qt Creator, a session is a collection of:
\list
\o open projects together with their dependencies,
\o open editors,
\o breakpoints and watches, as well as
\o bookmarks
\endlist
When you run Qt Creator, you have a default session. You can create a new
session using the \gui{Session Manager...} option, available in the
\gui{File -> Session} menu.
\image qtcreator-session-manager.png
To switch between sessions, select \gui{File -> Session}. If you do not
create and select any session, Qt Creator will always use the default
session.
\image qtcreator-session-menu.png
When you launch Qt Creator, a list of your recent sessions will be
displayed on the \gui{Welcome Screen}.
\image qtcreator-welcome-session.png
*/
/*!
\contentspage index.html
\previouspage creator-navigation.html
......@@ -1427,14 +1449,57 @@
\title Support for Generic Projects in Qt Creator
Since Qt Creator 1.1, generic projects are supported, in addition to
\c qmake projects. In other words, you can import existing projects that
do not use \c qmake or \c CMake and Qt Creator will simply ignore your
build system.
\c qmake projects. In other words, you can import existing projects that do
not use \c qmake or \c CMake and Qt Creator will simply ignore your build
system.
This feature lets you use Qt Creator as a code editor. You can change the
way your project is built by modifying the \c make command under
\gui{Build Settings} in the \gui{Projects} mode.
This feature lets you use Qt Creator as a code editor. You can build your
project by modifying the \c make command in the \gui{Project Settings}
page.
For a generic project, you have to manually specify which files belong to
your project and which include directories/defines you want to pass to your
compiler.
\section2 Specifying Files
The list of files for a generic project is specified in the \c{.files}
file. When you first create a generic project, Qt Creator will add any
files it recognizes to your project. To add or remove files later, simply
edit the \c{.files} file in Qt Creator. Your project tree will be refreshed
when you save this file.
If you frequently need to update the \c{.files} file, we recommend the use
of a small script that will update the files for you. Currently, if the
file is modified externally, Qt Creator must be restarted for the changes
to take effect.
\section2 Specifying Include Paths
The include paths are specified in the \c{.includes} file, one include
path per line. The paths can be either absolute or relative to the
\c{.includes} file.
\section2 Specifying Defines
The defines are specified in the \c{.config} file. This file is a regular
C++ file, prepended to all your source files when they are being parsed.
However, you should only use it to add lines like the following:
\code
#define NAME value
\endcode
\section2 Creating a Run Configuration
Qt Creator cannot automatically determine which executable it should run.
To set up a custom executable run configuration in the \gui Projects mode,
use the \bold{Add} button. Here you can specify the name, executable, and
some optional arguments. By default, the working directory is
\c{$BUILDDIR} which should work fine.
*/
......@@ -1447,7 +1512,7 @@
\title Handling External Libraries
The ability to recognize external libraries is not only important for the
underlying buidl system, but also for Qt Creator itself. This ability
underlying build system, but also for Qt Creator itself. This ability
allows Qt Creator to support code completion and syntax highlighting for
external libraries as if they were part of the current project or the Qt
library.
......@@ -1465,31 +1530,33 @@
{Declaring other Libraries} section of the Qt documentation.
If your project successfully builds and links against the external library,
syntax completion and highlighting should also work.
syntax completion and highlighting should work.
\section1 CMake Projects
In CMake, libraries are usually detected using the \c{FIND_PACKAGE()} macro.
A couple of them are already being shipped with CMake, they can be found in
the \c{Modules} directory of your CMake installation. If you provide
libraries on your own, you will need to provide your own \c{FindFoo.cmake}
file. Refer to the \l{http://vtk.org/Wiki/CMake_FAQ#Writing_FindXXX.cmake_files}
{CMake FAQ} for details.
In CMake, libraries are usually detected using the \c{FIND_PACKAGE()}
macro. A couple of them are already being shipped with CMake, they can be
found in the \c{Modules} directory of your CMake installation. If you
provide libraries on your own, you will need to provide your own
\c{FindFoo.cmake} file. Refer to the
\l{http://vtk.org/Wiki/CMake_FAQ#Writing_FindXXX.cmake_files}{CMake FAQ}
for details.
As with qmake project, syntax completion and highlighting should work if
you can sucessfully build and link against the external library.
As with \c qmake projects, syntax completion and highlighting should work
if you can sucessfully build and link against the external library.
\section1 Generic Projects
If you import a project using the \e{Generic Projects} function, Qt Creator will
create a file called \c{<projectname>.includes} in your project root directory. It will
contain all project subdirectories it that was able to find relevant header files in.
Simply add your include pathes there.
If you import a project using the \e{Generic Projects} function, Qt Creator
will create a file called \c{<projectname>.includes} in your project root
directory. This file contains all project subdirectories which Qt Creator
could find relevant headers for. Simply add your include pathes here.
Note that in Generic Project mode, Qt Creator will refrain from touching any
project settings, so the above is merely a hint for the code completion and
the syntax highlighter.
In \gui{Generic Project} mode, Qt Creator will not modify any project
settings, so the above is merely a hint for code completion and syntax
highlighting.
*/
......@@ -1718,7 +1785,7 @@
There are some known issues with Qt Creator.
The development team is aware of those, there is no need to report them as bug.
\section1 Known Issues of Version 1.2.0
\section1 Known Issues of Version 1.2.1
\list
\o Gdb on Windows may not work if the 'Embassy \reg Security Center' software
......
......@@ -9,24 +9,26 @@ sourcedirs = $SRCDIR
imagedirs = $SRCDIR/images
outputdir = $OUTDIR
exampledirs = $SRCDIR
indexes = qt.index
extraimages.HTML = qt-logo \
trolltech-logo
qtcreator-screenshots
sources.fileextensions = "qtcreator.qdoc addressbook-sdk.qdoc"
qhp.projects = QtCreator
qhp.QtCreator.file = qtcreator.qhp
qhp.QtCreator.namespace = com.nokia.qtcreator.120
qhp.QtCreator.namespace = com.nokia.qtcreator.121
qhp.QtCreator.virtualFolder = doc
qhp.QtCreator.indexTitle = Qt Creator
qhp.QtCreator.indexRoot =
qhp.QtCreator.extraFiles = classic.css \
images/qt-logo.png
qhp.QtCreator.filterAttributes = qtcreator 1.2.0
qhp.QtCreator.customFilters.QtCreator.name = Qt Creator 1.2.0
qhp.QtCreator.customFilters.QtCreator.filterAttributes = qtcreator 1.2.0
images/qt-logo.png \
images/qtcreator-screenshots.png
qhp.QtCreator.filterAttributes = qtcreator 1.2.1
qhp.QtCreator.customFilters.QtCreator.name = Qt Creator 1.2.1
qhp.QtCreator.customFilters.QtCreator.filterAttributes = qtcreator 1.2.1
# macros.qdocconf
......@@ -85,7 +87,6 @@ macro.i81 = "\\o{8,1}"
macro.i91 = "\\o{9,1}"
macro.img = "\\image"
macro.endquote = "\\endquotation"
spurious = "Missing comma in .*" \
"Missing pattern .*"
......@@ -189,18 +190,26 @@ HTML.stylesheets = classic.css
HTML.postheader = "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\">\n" \
"<tr>\n" \
"<td align=\"left\" valign=\"top\" width=\"32\">" \
"<img src=\"images/qt-logo.png\" align=\"left\" width=\"32\" height=\"32\" border=\"0\" />" \
"<a href=\"http://qt.nokia.com/\"><img src=\"images/qt-logo.png\" align=\"left\" border=\"0\" /></a>" \
"</td>\n" \
"<td width=\"1\">&nbsp;&nbsp;</td>" \
"<td class=\"postheader\" valign=\"center\">" \
"<a href=\"qtcreator-manual.html\">" \
"<font color=\"#004faf\">Home</font></a>" \
"</td>\n" \
"<td align=\"right\" valign=\"top\" width=\"230\"></td></tr></table><br>"
"<a href=\"index.html\">" \
"<font color=\"#004faf\">Home</font></a>&nbsp;&middot; " \
"<a href=\"creator-code-editor.html\">" \
"<font color=\"#004faf\">Editor</font></a>&nbsp;&middot; " \
"<a href=\"creator-navigation.html\">" \
"<font color=\"#004faf\">Code Navigation</font></a>&nbsp;&middot; " \
"<a href=\"creator-keyboard-shortcuts.html\">" \
"<font color=\"#004faf\">Shortcuts</font></a>&nbsp;&middot; " \
"<a href=\"http://qt.gitorious.org/qt-creator/pages/Home\">" \
"<font color=\"#004faf\">Wiki</font></a>" \
"</td>" \
"</tr></table>"
HTML.footer = "<p /><address><hr /><div align=\"center\">\n" \
"<table width=\"100%\" cellspacing=\"0\" border=\"0\"><tr class=\"address\">\n" \
"<td width=\"30%\" align=\"left\">Copyright &copy; 2009 Nokia</td>\n" \
"<td width=\"40%\" align=\"center\">&nbsp;</td>\n" \
"<td width=\"30%\" align=\"right\"><div align=\"right\">Qt Creator 1.2.0</div></td>\n" \
"<table width=\"100%\" cellspacing=\"0\" border=\"0\"><tr class=\"address\">\n" \
"<td width=\"40%\" align=\"left\">Copyright &copy; 2009 Nokia Corporation and/or its subsidiary(-ies)</td>\n" \
"<td width=\"20%\" align=\"center\"><a href=\"trademarks.html\">Trademarks</a></td>\n" \
"<td width=\"40%\" align=\"right\"><div align=\"right\">Qt Creator 1.2.1</div></td>\n" \
"</tr></table></div></address>"
......@@ -44,15 +44,24 @@
#include <QtCore/QObject>
#include <QtCore/QPointer>
#include <QtCore/QString>
#include <QtCore/QSharedPointer>
#include <QtCore/QSharedDataPointer>
#include <QtCore/QTextCodec>
#include <QtCore/QVector>
#if QT_VERSION >= 0x040500
#include <QtCore/QSharedPointer>
#include <QtCore/QSharedDataPointer>
#include <QtCore/QWeakPointer>
#endif
int qtGhVersion = QT_VERSION;
#ifdef QT_GUI_LIB
#ifndef USE_QT_GUI
# ifdef QT_GUI_LIB
# define USE_QT_GUI 1
# endif
#endif
#if USE_QT_GUI
# include <QtGui/QWidget>
# include <QtGui/QPixmap>
# include <QtGui/QImage>
......@@ -1296,9 +1305,9 @@ static void qDumpQHashNode(QDumper &d)
d.disarm();
}
#if USE_QT_GUI
static void qDumpQImage(QDumper &d)
{
#ifdef QT_GUI_LIB
const QImage &im = *reinterpret_cast<const QImage *>(d.data);
P(d, "value", "(" << im.width() << "x" << im.height() << ")");
P(d, "type", NS"QImage");
......@@ -1312,14 +1321,12 @@ static void qDumpQImage(QDumper &d)
d.endHash();
}
d.disarm();
#else
Q_UNUSED(d);
#endif
}
#endif
#if USE_QT_GUI
static void qDumpQImageData(QDumper &d)
{
#ifdef QT_GUI_LIB
const QImage &im = *reinterpret_cast<const QImage *>(d.data);
const QByteArray ba(QByteArray::fromRawData((const char*)im.bits(), im.numBytes()));
P(d, "type", NS"QImageData");
......@@ -1334,10 +1341,8 @@ static void qDumpQImageData(QDumper &d)
P(d, "value", ba);
#endif
d.disarm();
#else
Q_UNUSED(d);
#endif
}
#endif
static void qDumpQList(QDumper &d)
{
......@@ -2020,18 +2025,16 @@ static void qDumpQObjectSlotList(QDumper &d)
}
#if USE_QT_GUI
static void qDumpQPixmap(QDumper &d)
{
#ifdef QT_GUI_LIB
const QPixmap &im = *reinterpret_cast<const QPixmap *>(d.data);
P(d, "value", "(" << im.width() << "x" << im.height() << ")");
P(d, "type", NS"QPixmap");
P(d, "numchild", "0");
d.disarm();
#else
Q_UNUSED(d);
#endif
}
#endif
static void qDumpQSet(QDumper &d)
{
......@@ -2078,6 +2081,7 @@ static void qDumpQSet(QDumper &d)
d.disarm();
}
#if QT_VERSION >= 0x040500
static void qDumpQSharedPointer(QDumper &d)
{
const QSharedPointer<int> &ptr =
......@@ -2116,6 +2120,7 @@ static void qDumpQSharedPointer(QDumper &d)
}
d.disarm();
}
#endif
static void qDumpQString(QDumper &d)
{
......@@ -2243,7 +2248,7 @@ static void qDumpQVariant(QDumper &d)
if (isInvalid) {
P(d, "value", "(invalid)");
} else if (value.isEmpty()) {
P(d, "value", "(" << v.typeName() << ") " << qPrintable(value));
P(d, "value", "(" << v.typeName() << ") ");
} else {
QByteArray ba;
ba += '(';
......@@ -2251,7 +2256,7 @@ static void qDumpQVariant(QDumper &d)
ba += ") ";
ba += qPrintable(value);
P(d, "value", ba);
P(d, "valueencoded", "4");
P(d, "valueencoded", "5");
}
P(d, "type", NS"QVariant");
P(d, "numchild", (isInvalid ? "0" : "1"));
......@@ -2315,6 +2320,7 @@ static void qDumpQVector(QDumper &d)
d.disarm();
}
#if QT_VERSION >= 0x040500
static void qDumpQWeakPointer(QDumper &d)
{
const int v = sizeof(void *);
......@@ -2352,6 +2358,7 @@ static void qDumpQWeakPointer(QDumper &d)
}
d.disarm();
}
#endif
static void qDumpStdList(QDumper &d)
{
......@@ -2691,10 +2698,12 @@ static void handleProtocolVersion2and3(QDumper & d)
qDumpStdList(d);
break;
case 'I':
#if USE_QT_GUI
if (isEqual(type, "QImage"))
qDumpQImage(d);
else if (isEqual(type, "QImageData"))
qDumpQImageData(d);
#endif
break;
case 'L':
if (isEqual(type, "QList"))
......@@ -2731,14 +2740,18 @@ static void handleProtocolVersion2and3(QDumper & d)
qDumpQObjectSlotList(d);
break;
case 'P':
#if USE_QT_GUI
if (isEqual(type, "QPixmap"))
qDumpQPixmap(d);
#endif
break;
case 'S':
if (isEqual(type, "QSet"))
qDumpQSet(d);
#if QT_VERSION >= 0x040500
else if (isEqual(type, "QSharedPointer"))
qDumpQSharedPointer(d);
#endif
else if (isEqual(type, "QString"))
qDumpQString(d);
else if (isEqual(type, "QStringList"))
......@@ -2775,8 +2788,11 @@ static void handleProtocolVersion2and3(QDumper & d)
qDumpQVector(d);
break;
case 'W':
#if QT_VERSION >= 0x040500
if (isEqual(type, "QWeakPointer"))
qDumpQWeakPointer(d);
#endif
break;
}
if (!d.success)
......@@ -2835,9 +2851,6 @@ void *qDumpObjectData440(
"\""NS"QMap\","
"\""NS"QMapNode\","
"\""NS"QModelIndex\","
#if QT_VERSION >= 0x040500
"\""NS"QMultiMap\","
#endif
"\""NS"QObject\","
"\""NS"QObjectMethodList\"," // hack to get nested properties display
"\""NS"QObjectPropertyList\","
......@@ -2847,14 +2860,19 @@ void *qDumpObjectData440(
"\""NS"QObjectSlotList\","
// << "\""NS"QRegion\","
"\""NS"QSet\","
"\""NS"QSharedPointer\","
"\""NS"QString\","
"\""NS"QStringList\","
"\""NS"QTextCodec\","
"\""NS"QVariant\","
"\""NS"QVector\","
"\""NS"QWeakPointer\","
#if USE_QT_GUI
"\""NS"QWidget\","
#endif
#if QT_VERSION >= 0x040500
"\""NS"QMultiMap\","
"\""NS"QSharedPointer\","
"\""NS"QWeakPointer\","
#endif
#ifdef Q_OS_WIN
"\"basic_string\","
"\"list\","
......@@ -2884,7 +2902,7 @@ void *qDumpObjectData440(
<< ""NS"QString=\"" << sizeof(QString) << "\","
<< ""NS"QStringList=\"" << sizeof(QStringList) << "\","
<< ""NS"QObject=\"" << sizeof(QObject) << "\","
#ifdef QT_GUI_LIB
#if USE_QT_GUI
<< ""NS"QWidget=\"" << sizeof(QWidget)<< "\","
#endif
#ifdef Q_OS_WIN
......
TEMPLATE = lib
CONFIG += shared
QT = core
linux-* {
CONFIG -= release
CONFIG += debug
}
SOURCES=gdbmacros.cpp
true {
DEFINES += USE_QT_GUI=0
QT = core
} else {
DEFINES += USE_QT_GUI=1
QT = core gui
}
exists($$QMAKE_INCDIR_QT/QtCore/private/qobject_p.h) {
DEFINES+=HAS_QOBJECT_P_H
}
......@@ -1759,7 +1759,7 @@ Sollen sie überschrieben werden?</translation>
<location line="+11"/>
<source>From revision %1&lt;br/&gt;</source>
<extracomment>This gets conditionally inserted as argument %8 into the description string.</extracomment>
<translation>Revision:</translation>
<translation>Revision %1&lt;br/&gt;</translation>
</message>
<message>
<location line="+3"/>
......
......@@ -1721,7 +1721,7 @@ Would you like to overwrite them?</source>
<location line="+11"/>
<source>From revision %1&lt;br/&gt;</source>
<extracomment>This gets conditionally inserted as argument %8 into the description string.</extracomment>
<translation>Revisión %1</translation>
<translation>Revisión %1&lt;br/&gt;</translation>
</message>
<message>
<location line="+3"/>
......
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -182,8 +182,8 @@
<key>CFBundleIdentifier</key>
<string>com.nokia.qtcreator</string>
<key>CFBundleVersion</key>
<string>1.2.0</string>
<string>1.2.1</string>
<key>CFBundleShortVersionString</key>
<string>1.2.0</string>
<string>1.2.1</string>
</dict>
</plist>
......@@ -667,7 +667,7 @@ ResolveExpression::resolveMemberExpression(const QList<Result> &baseResults,
if (NamedType *namedTy = ty->asNamedType())
results += resolveMember(p, memberName, namedTy);
else if (Function *fun = ty->asFunctionType()) {
if (fun->scope()->isBlockScope() || fun->scope()->isNamespaceScope()) {
if (fun->scope() && (fun->scope()->isBlockScope() || fun->scope()->isNamespaceScope())) {
ty = fun->returnType();
if (ReferenceType *refTy = ty->asReferenceType())
......@@ -881,7 +881,7 @@ QList<Symbol *> ResolveClass::resolveClass(NamedType *namedTy,
if (Function *funTy = decl->type()->asFunctionType()) {
// QString foo("ciao");
// foo.
if (funTy->scope()->isBlockScope() || funTy->scope()->isNamespaceScope()) {
if (funTy->scope() && (funTy->scope()->isBlockScope() || funTy->scope()->isNamespaceScope())) {
const ResolveExpression::Result r(funTy->returnType(), decl);
resolvedSymbols += resolveClass(r, context);
}
......
......@@ -243,8 +243,13 @@ void SavedAction::readSettings(QSettings *settings)
if (m_settingsGroup.isEmpty() || m_settingsKey.isEmpty())
return;
settings->beginGroup(m_settingsGroup);
setValue(settings->value(m_settingsKey, m_defaultValue), false);
//qDebug() << "READING: " << m_settingsKey << " -> " << m_value;
QVariant var = settings->value(m_settingsKey, m_defaultValue);
// work around old ini files containing @Invalid() entries
if (isCheckable() && !var.isValid())
var = false;
setValue(var);
//qDebug() << "READING: " << var.isValid() << m_settingsKey << " -> " << m_value
// << " (default: " << m_defaultValue << ")" << var;
settings->endGroup();
}
......
<plugin name="BinEditor" version="1.2.0" compatVersion="1.2.0">
<plugin name="BinEditor" version="1.2.1" compatVersion="1.2.1">
<vendor>Nokia Corporation</vendor>
<copyright>(C) 2008-2009 Nokia Corporation</copyright>
<license>
......@@ -19,7 +19,7 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license>
<description>Binary editor component.</description>
<url>http://www.qtsoftware.com</url>
<dependencyList>
<dependency name="Core" version="1.2.0"/>
<dependency name="TextEditor" version="1.2.0"/>
<dependency name="Core" version="1.2.1"/>
<dependency name="TextEditor" version="1.2.1"/>
</dependencyList>
</plugin>
<plugin name="Bookmarks" version="1.2.0" compatVersion="1.2.0">
<plugin name="Bookmarks" version="1.2.1" compatVersion="1.2.1">
<vendor>Nokia Corporation</vendor>
<copyright>(C) 2008-2009 Nokia Corporation</copyright>
<license>
......@@ -19,8 +19,8 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license>
<description>Bookmarks in text editors.</description>
<url>http://www.qtsoftware.com</url>
<dependencyList>
<dependency name="TextEditor" version="1.2.0"/>
<dependency name="ProjectExplorer" version="1.2.0"/>
<dependency name="Core" version="1.2.0"/>
<dependency name="TextEditor" version="1.2.1"/>
<dependency name="ProjectExplorer" version="1.2.1"/>
<dependency name="Core" version="1.2.1"/>
</dependencyList>
</plugin>
<plugin name="CMakeProjectManager" version="1.2.0" compatVersion="1.2.0">
<plugin name="CMakeProjectManager" version="1.2.1" compatVersion="1.2.1">
<vendor>Nokia Corporation</vendor>
<copyright>(C) 2008-2009 Nokia Corporation</copyright>
<license>
......@@ -19,9 +19,9 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license>
<description>CMake support</description>
<url>http://www.qtsoftware.com</url>
<dependencyList>
<dependency name="TextEditor" version="1.2.0"/>
<dependency name="ProjectExplorer" version="1.2.0"/>
<dependency name="CppTools" version="1.2.0"/>
<dependency name="CppEditor" version="1.2.0"/>
<dependency name="TextEditor" version="1.2.1"/>
<dependency name="ProjectExplorer" version="1.2.1"/>
<dependency name="CppTools" version="1.2.1"/>
<dependency name="CppEditor" version="1.2.1"/>
</dependencyList>
</plugin>
<plugin name="Core" version="1.2.0" compatVersion="1.2.0">
<plugin name="Core" version="1.2.1" compatVersion="1.2.1">
<vendor>Nokia Corporation</vendor>
<copyright>(C) 2008-2009 Nokia Corporation</copyright>
<license>
......
......@@ -35,7 +35,7 @@ namespace Constants {
#define IDE_VERSION_MAJOR 1
#define IDE_VERSION_MINOR 2
#define IDE_VERSION_RELEASE 0
#define IDE_VERSION_RELEASE 1
#define STRINGIFY_INTERNAL(x) #x
#define STRINGIFY(x) STRINGIFY_INTERNAL(x)
......
<plugin name="CodePaster" version="1.2.0" compatVersion="1.2.0">
<plugin name="CodePaster" version="1.2.1" compatVersion="1.2.1">
<vendor>Nokia Corporation</vendor>
<copyright>(C) 2008-2009 Nokia Corporation</copyright>
<license>
......@@ -19,8 +19,8 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license>
<description>Codepaster plugin for pushing/fetching diff from server</description>
<url>http://www.qtsoftware.com</url>
<dependencyList>
<dependency name="TextEditor" version="1.2.0"/>
<dependency name="ProjectExplorer" version="1.2.0"/>
<dependency name="Core" version="1.2.0"/>
<dependency name="TextEditor" version="1.2.1"/>
<dependency name="ProjectExplorer" version="1.2.1"/>
<dependency name="Core" version="1.2.1"/>
</dependencyList>
</plugin>
<plugin name="CppEditor" version="1.2.0" compatVersion="1.2.0">
<plugin name="CppEditor" version="1.2.1" compatVersion="1.2.1">
<vendor>Nokia Corporation</vendor>
<copyright>(C) 2008-2009 Nokia Corporation</copyright>
<license>
......@@ -19,8 +19,8 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license>
<description>C/C++ editor component.</description>
<url>http://www.qtsoftware.com</url>
<dependencyList>
<dependency name="Core" version="1.2.0"/>
<dependency name="TextEditor" version="1.2.0"/>
<dependency name="CppTools" version="1.2.0"/>
<dependency name="Core" version="1.2.1"/>
<dependency name="TextEditor" version="1.2.1"/>
<dependency name="CppTools" version="1.2.1"/>
</dependencyList>
</plugin>
<plugin name="CppTools" version="1.2.0" compatVersion="1.2.0">
<plugin name="CppTools" version="1.2.1" compatVersion="1.2.1">
<vendor>Nokia Corporation</vendor>
<copyright>(C) 2008-2009 Nokia Corporation</copyright>
<license>
......@@ -19,8 +19,8 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license>
<description>Tools for analyzing C/C++ code.</description>
<url>http://www.qtsoftware.com</url>
<dependencyList>
<dependency name="TextEditor" version="1.2.0"/>
<dependency name="ProjectExplorer" version="1.2.0"/>
<dependency name="QuickOpen" version="1.2.0"/>
<dependency name="TextEditor" version="1.2.1"/>
<dependency name="ProjectExplorer" version="1.2.1"/>
<dependency name="QuickOpen" version="1.2.1"/>
</dependencyList>
</plugin>
......@@ -932,7 +932,7 @@ bool CppCodeCompletion::completeMember(const QList<TypeOfExpression::Result> &re
namedTy = ty->asNamedType();
if (! namedTy) {
Function *fun = ty->asFunctionType();
if (fun && (fun->scope()->isBlockScope() || fun->scope()->isNamespaceScope()))
if (fun && fun->scope() && (fun->scope()->isBlockScope() || fun->scope()->isNamespaceScope()))
namedTy = fun->returnType()->asNamedType();
}
}
......
<plugin name="Debugger" version="1.2.0" compatVersion="1.2.0">
<plugin name="Debugger" version="1.2.1" compatVersion="1.2.1">
<vendor>Nokia Corporation</vendor>
<copyright>(C) 2008-2009 Nokia Corporation</copyright>
<license>
......@@ -19,10 +19,10 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license>
<description>Debugger integration.</description>
<url>http://www.qtsoftware.com</url>
<dependencyList>
<dependency name="CppEditor" version="1.2.0"/><!-- Debugger plugin adds items to the editor's context menu -->
<dependency name="ProjectExplorer" version="1.2.0"/>
<dependency name="Core" version="1.2.0"/>
<dependency name="Find" version="1.2.0"/>
<dependency name="CppEditor" version="1.2.1"/><!-- Debugger plugin adds items to the editor's context menu -->
<dependency name="ProjectExplorer" version="1.2.1"/>
<dependency name="Core" version="1.2.1"/>
<dependency name="Find" version="1.2.1"/>
</dependencyList>
<argumentList>
<argument name="-disable-cdb">Disable Cdb debugger engine</argument>
......
......@@ -281,8 +281,12 @@ void BreakHandler::removeAt(int index)
void BreakHandler::clear()
{
for (int index = size(); --index >= 0; )
removeAt(index);
qDeleteAll(m_bp);
m_bp.clear();
m_enabled.clear();
m_disabled.clear();
m_removed.clear();
m_inserted.clear();
}
int BreakHandler::findBreakpoint(const BreakpointData &needle)
......@@ -328,19 +332,19 @@ void BreakHandler::saveBreakpoints()
const BreakpointData *data = at(index);
QMap<QString, QVariant> map;
if (!data->fileName.isEmpty())
map["filename"] = data->fileName;
map.insert(QLatin1String("filename"), data->fileName);
if (!data->lineNumber.isEmpty())
map["linenumber"] = data->lineNumber;
map.insert(QLatin1String("linenumber"), data->lineNumber);
if (!data->funcName.isEmpty())
map["funcname"] = data->funcName;
map.insert(QLatin1String("funcname"), data->funcName);
if (!data->condition.isEmpty())
map["condition"] = data->condition;
map.insert(QLatin1String("condition"), data->condition);
if (!data->ignoreCount.isEmpty())
map["ignorecount"] = data->ignoreCount;
map.insert(QLatin1String("ignorecount"), data->ignoreCount);
if (!data->enabled)
map["disabled"] = "1";
map.insert(QLatin1String("disabled"), QLatin1String("1"));
if (data->useFullPath)
map["usefullpath"] = "1";
map.insert(QLatin1String("usefullpath"), QLatin1String("1"));
list.append(map);
}
setSessionValueRequested("Breakpoints", list);
......@@ -351,18 +355,31 @@ void BreakHandler::loadBreakpoints()
QVariant value;
sessionValueRequested("Breakpoints", &value);
QList<QVariant> list = value.toList();
clear();
foreach (const QVariant &var, list) {
const QMap<QString, QVariant> map = var.toMap();
BreakpointData *data = new BreakpointData(this);
data->fileName = map["filename"].toString();
data->lineNumber = map["linenumber"].toString();
data->condition = map["condition"].toString();
data->ignoreCount = map["ignorecount"].toString();
data->funcName = map["funcname"].toString();
data->enabled = !map["disabled"].toInt();
data->useFullPath = bool(map["usefullpath"].toInt());
QVariant v = map.value(QLatin1String("filename"));
if (v.isValid())
data->fileName = v.toString();
v = map.value(QLatin1String("linenumber"));
if (v.isValid())
data->lineNumber = v.toString();
v = map.value(QLatin1String("condition"));
if (v.isValid())
data->condition = v.toString();
v = map.value(QLatin1String("ignorecount"));
if (v.isValid())
data->ignoreCount = v.toInt();
v = map.value(QLatin1String("funcname"));
if (v.isValid())
data->funcName = v.toString();
v = map.value(QLatin1String("disabled"));
if (v.isValid())
data->enabled = !v.toInt();
v = map.value(QLatin1String("usefullpath"));
if (v.isValid())
data->useFullPath = bool(v.toInt());
data->markerFileName = data->fileName;
data->markerLineNumber = data->lineNumber.toInt();
append(data);
......
......@@ -407,12 +407,19 @@ static bool setBreakPointEnabledById(CIDebugControl *ctl, unsigned long id, bool
return true;
}
static inline QString msgCannotSetBreakAtFunction(const QString &func, const QString &why)
{
return QString::fromLatin1("Cannot set a breakpoint at '%1': %2").arg(func, why);
}
// Synchronize (halted) engine breakpoints with those of the BreakHandler.
bool CDBBreakPoint::synchronizeBreakPoints(CIDebugControl* debugControl,
CIDebugSymbols *syms,
BreakHandler *handler,
QString *errorMessage)
QString *errorMessage, QStringList *warnings)
{
errorMessage->clear();
warnings->clear();
// Do an initial check whether we are in a state that allows
// for modifying breakPoints
ULONG engineCount;
......@@ -420,25 +427,29 @@ bool CDBBreakPoint::synchronizeBreakPoints(CIDebugControl* debugControl,
*errorMessage = QString::fromLatin1("Cannot modify breakpoints: %1").arg(*errorMessage);
return false;
}
QString warning;
// Insert new ones
bool updateMarkers = false;
foreach (BreakpointData *nbd, handler->insertedBreakpoints()) {
warning.clear();
// Function breakpoints: Are the module names specified?
bool breakPointOk = false;
if (nbd->funcName.isEmpty()) {
breakPointOk = true;
} else {
switch (resolveSymbol(syms, &nbd->funcName, errorMessage)) {
switch (resolveSymbol(syms, &nbd->funcName, &warning)) {
case ResolveSymbolOk:
breakPointOk = true;
break;
case ResolveSymbolAmbiguous:
qWarning("Warning: %s\n", qPrintable(*errorMessage));
warnings->push_back(msgCannotSetBreakAtFunction(nbd->funcName, warning));
warning.clear();
breakPointOk = true;
break;
case ResolveSymbolNotFound:
case ResolveSymbolError:
qWarning("Warning: %s\n", qPrintable(*errorMessage));
warnings->push_back(msgCannotSetBreakAtFunction(nbd->funcName, warning));
warning.clear();
break;
};
} // function breakpoint
......@@ -447,7 +458,7 @@ bool CDBBreakPoint::synchronizeBreakPoints(CIDebugControl* debugControl,
quint64 address;
unsigned long id;
CDBBreakPoint ncdbbp(*nbd);
breakPointOk = ncdbbp.add(debugControl, &address, &id, errorMessage);
breakPointOk = ncdbbp.add(debugControl, &address, &id, &warning);
if (breakPointOk) {
if (debugBP)
qDebug() << "Added " << id << " at " << address << ncdbbp;
......@@ -464,22 +475,21 @@ bool CDBBreakPoint::synchronizeBreakPoints(CIDebugControl* debugControl,
nbd->bpFuncName = nbd->funcName;
}
} // had symbol
if (!breakPointOk)
qWarning("%s\n", qPrintable(*errorMessage));
}
if (!breakPointOk && !warning.isEmpty())
warnings->push_back(warning); }
// Delete
foreach (BreakpointData *rbd, handler->takeRemovedBreakpoints()) {
if (!removeBreakPointById(debugControl, rbd->bpNumber.toUInt(), errorMessage))
qWarning("%s\n", qPrintable(*errorMessage));
if (!removeBreakPointById(debugControl, rbd->bpNumber.toUInt(), &warning))
warnings->push_back(warning);
delete rbd;
}
// Enable/Disable
foreach (BreakpointData *ebd, handler->takeEnabledBreakpoints())
if (!setBreakPointEnabledById(debugControl, ebd->bpNumber.toUInt(), true, errorMessage))
qWarning("%s\n", qPrintable(*errorMessage));
if (!setBreakPointEnabledById(debugControl, ebd->bpNumber.toUInt(), true, &warning))
warnings->push_back(warning);
foreach (BreakpointData *dbd, handler->takeDisabledBreakpoints())
if (!setBreakPointEnabledById(debugControl, dbd->bpNumber.toUInt(), false, errorMessage))
qWarning("%s\n", qPrintable(*errorMessage));
if (!setBreakPointEnabledById(debugControl, dbd->bpNumber.toUInt(), false, &warning))
warnings->push_back(warning);
if (updateMarkers)
handler->updateMarkers();
......
......@@ -73,7 +73,8 @@ struct CDBBreakPoint
static bool getBreakPoints(CIDebugControl* debugControl, QList<CDBBreakPoint> *bps, QString *errorMessage);
// Synchronize (halted) engine with BreakHandler.
static bool synchronizeBreakPoints(CIDebugControl* ctl, CIDebugSymbols *syms,
BreakHandler *bh, QString *errorMessage);
BreakHandler *bh,
QString *errorMessage, QStringList *warnings);
// Return a 'canonical' file (using '/' and capitalized drive letter)
static QString canonicalSourceFile(const QString &f);
......
......@@ -528,6 +528,10 @@ void CdbDebugEnginePrivate::clearDisplay()
bool CdbDebugEngine::startDebugger(const QSharedPointer<DebuggerStartParameters> &sp)
{
if (m_d->m_hDebuggeeProcess) {
warning(QLatin1String("Internal error: Attempt to start debugger while another process is being debugged."));
return false;
}
m_d->clearDisplay();
const DebuggerStartMode mode = m_d->m_debuggerManager->startMode();
......@@ -1268,6 +1272,8 @@ void CdbDebugEngine::selectThread(int index)
void CdbDebugEngine::attemptBreakpointSynchronization()
{
if (!m_d->m_hDebuggeeProcess) // Sometimes called from the breakpoint Window
return;
QString errorMessage;
if (!m_d->attemptBreakpointSynchronization(&errorMessage))
warning(msgFunctionFailed(Q_FUNC_INFO, errorMessage));
......@@ -1301,10 +1307,15 @@ bool CdbDebugEnginePrivate::attemptBreakpointSynchronization(QString *errorMessa
return true;
}
return CDBBreakPoint::synchronizeBreakPoints(m_cif.debugControl,
QStringList warnings;
const bool ok = CDBBreakPoint::synchronizeBreakPoints(m_cif.debugControl,
m_cif.debugSymbols,
m_debuggerManagerAccess->breakHandler(),
errorMessage);
errorMessage, &warnings);
if (const int warningsCount = warnings.size())
for (int w = 0; w < warningsCount; w++)
m_engine->warning(warnings.at(w));
return ok;
}
void CdbDebugEngine::reloadDisassembler()
......
......@@ -138,6 +138,7 @@ static ResolveSymbolResult resolveSymbol(CIDebugSymbols *syms, QString *symbol,
QStringList *matches,
QString *errorMessage)
{
errorMessage->clear();
// Is it an incomplete symbol?
if (symbol->contains(QLatin1Char('!')))
return ResolveSymbolOk;
......
......@@ -64,7 +64,10 @@ DebuggerSettings::~DebuggerSettings()
void DebuggerSettings::insertItem(int code, SavedAction *item)
{
QTC_ASSERT(!m_items.contains(code), qDebug() << code << item->toString(); return);
QTC_ASSERT(!m_items.contains(code),
qDebug() << code << item->toString(); return);
QTC_ASSERT(item->settingsKey().isEmpty() || item->defaultValue().isValid(),
qDebug() << "NO DEFAULT VALUE FOR " << item->settingsKey());
m_items[code] = item;
}
......@@ -90,9 +93,13 @@ QString DebuggerSettings::dump() const
{