...
 
Commits (105)
Qt Creator 2.1.0
Qt Creator 2.0.1
===============
Qt Creator is a crossplatform C++ IDE for development with the Qt framework.
......
The QtCreator 2.0.1 release contains mainly bug fixes on top of 2.0
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 --cherry-pick --pretty=oneline origin/2.0.0...origin/2.0.1
General:
* Fix the suggested path in the new dialog in case of sub projects
* Search dialog now opens the completion box for the search term on cursor down
* The .bin postfix was removed from the qtcreator executable
Editing:
* Fixed disabled "Open with" context menu in project tree
* CodePaster: Do not show popup about modified files on Windows
* FakeVim: Fix issues with non-letter keys on non-US keyboards
* FakeVim: Fix performance of find/replace
* Fakevim: Fix mark interpretion for d'a etc
* Fakevim: clear opcount and mvcount on escape
* Fakevim: fix Delete key in command mode
* Fakevim: fix backspace in the presence of physical tabs
* Fakevim: fix insert of Tabs and up/down movement in the presence of real tabs
* Fakevim: fix mark positions after <Delete>
* Fakevim: make Ctrl-V <Tab> and Ctrl-V <Return> work in Insert and Ex mode
* BinEditor: Add "jump to address" functionality
* BinEditor: Add a bit of value interpretation
* BinEditor: Fix cursor position label
* BinEditor: Fix file name not being displayed
* BinEditor: Implement "Jump to start/end of file" for lazy data
* QmlDesigner: Fix crash when typing keywords as Ids
* QmlDesigner: Fix import handling in rewriter
* QmlDesigner: Prevent freezing while doing drag&drop on some Windows systems
* QML snippet: property has a name and a value, not two names
* QmlJS: Avoid infinite recursion when encountering property loops
* QmlJS: Make variables in imported JS documents show up in completion
* QmlJS: Remove spurious spaces from default import path in qmlproject
* Qt Designer integration: Fix Help button in stylesheet editor
* QuickDesigner: Make metainfo system robust for different version numbers
* QuickDesigner: Reduce numbers of redraws / state switching in States Editor
C++ Support:
* Added C-style comment folding
* Fix crash while renaming symbol when a symbol is being renamed
VCS Support:
* Diff editors: Set readonly attributes correctly
* Mercurial: Working directory not set for asynchronous commands
* Subversion: Remove LANG=C setting
* git: Adapt to 1.7.0, handling of renamed files. Reviewed-by: con
Project support:
* Fix auto-scrolling in application and compile output
* Cmake: Don't delete run configurations on switching buildconfigurations
* Ask to save all editors before running qmake
* Allow the user to set the version number used for the build deb package
* Don't crash if the session node is the current node in context menu
* Fix DESTDIR=. case
* Don't reset build directory for clone cmake buildconfigurations
* Don't show the full file name in the reload prompt by default
* Fix crash for newly added project nodes
* Improve task parsing
* Fixes: New Project action didn't respect the default project location
Debugging:
* Fix 2.0 regression: QObject property display
* Speed up cdb debugging helper initialization
* Fix display of certain structures within containers
* Fix display of typedefs of typedefs of simple types such as qulonglong
* Fix behaviour of 'step' and 'next' when a lower frame was selected
* Fix std::string display for objects with (the legal) ref count -1
* Improve gdb version string parsing
* Fix that the newest version of compiled debugging helper was not used
if there was an older version still was around in a different search path
* Windows[gdb]: Fix Attach to running (gui) process
* Fix 2.0 regression: allow assignment to structure members
* Always switch to frame 0 before trying to leave frame
* Cache results of gdb.lookup_type to increase performance
* Finish "Launching" bar even if we don't hit a "^running"
* Fix 2.0 regression: 'jump to line' and 'run to line' with older versions of gdb
* Fix decoding of %04x encoded 16 bit big endian data
* Fix 2.0 regression: display of typedefs-of-typedefs, such as qulonglong
* Fix 2.0 regression: list of members in case gdb reports '_class_ SomeClass'
* Handle gdb 7.1.50's thread-group-started 'pid' field
* Fix python dumper for std::vector<bool>
* Improve robustness in the presence of outdated debug information
* Make ctrl-click to navigate between input and output pane (much) faster
* Switch off reverse debugging tool button if not useful
* Fix reporting of loaded libraries on Symbian devices
* Fix late crash when closing Creator while building debugging helper (QTCREATORBUG-1576)
QML/JS Support:
* New QmlDesigner
* Allows visual manipulation of .qml files
* Supports changing top-level states
* Integrates tighly with text editor, e.g. shared history, navigation facilities ..
Documentation:
* Add description of the Use debug versions of Frameworks option
* Add descriptions for new Maemo packaging options
* Add info about layouts to the example
* Add information about unlocking views in Debug mode
* Add qtquick to defines to display Qt Quick information
* Add tips and tricks
* Edit the introduction
Translations:
* Update Japanese translation
* Update Russian translation
* Update Slovenian translation
* Update German translation
* Add Simplified Chinese translation
* Add French translation, done by the developpez.com team
Mac specific:
* Save maemo device configuration on MacOS
Linux specific:
Windows specific:
* Fixed that some menu items got disabled during keyboard navigation
* Fix wildcard expansion, etc. under windows
* Detect Microsoft Visual Studio 2010
* Fixed handling of usernames with Cyrillic characters (QTCREATORBUG-1643)
Maemo specific:
* Fix Qemu start on Mac
* Fix building projects if MADDE is on a different drive then the project
* Fix access rights for remote .ssh directory
* Fix end-of-process detection
* Fix incorrect assumption about build directory
* Make device configuration id type consistent
* Make packaging step optional
Symbian specific:
* Symbian support is no longer experimental
* Symbian/trk: Don't try to dereference references
* Symbian/trk: Fix handling of partial frames
* Small improvements to the abld parser
* Use outputparsers when creating S60 packages
* Improve detection of simulator Qts
The QtCreator 2.1 release contains bug fixes and new features.
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 --cherry-pick --pretty=oneline v2.0.0...v2.1.0
General
* Fix the suggested path in the new dialog in case of sub projects
* Search dialog now opens the completion box for the search term on cursor down
Editing
* FakeVim: Fix issues with non-letter keys on non-US keyboards
* FakeVim: Fix performance of find/replace
* Fixed disabled "Open with" context menu in project tree.
C++ Support
Project support
* Fix auto-scrolling in application and compile output
Debugging
* Fix display of certain structures within containers
* Fix display of typedefs of typedefs of simple types such as qulonglong
* Fix behaviour of 'step' and 'next' when a lower frame was selected
* Fix std::string display for objects with (the legal) ref count -1
* Improve gdb version string parsing
* Fix that the newest version of compiled debugging helper was not used
if there was an older version still was around in a different search path
QML/JS Support
* New QmlDesigner
* Allows visual manipulation of .qml files
* Supports changing top-level states
* Integrates tighly with text editor, e.g. shared history, navigation facilities ...
Platform Specific
Mac
Linux (GNOME and KDE)
Windows
* Fixed that some menu items got disabled during keyboard navigation
Additional credits go to:
......@@ -19,14 +19,13 @@ HELP_DEP_FILES = $$PWD/qtcreator.qdoc \
$$PWD/addressbook-sdk.qdoc \
$$PWD/qt-defines.qdocconf \
$$PWD/qt-html-templates.qdocconf \
$$PWD/qtcreator.qdocconf \
$$PWD/qtcreator-online.qdocconf
$$PWD/qtcreator.qdocconf
html_docs.commands = $$QDOC $$PWD/qtcreator.qdocconf
html_docs.commands = $$QDOC -creator $$PWD/qtcreator.qdocconf
html_docs.depends += $$HELP_DEP_FILES
html_docs.files = $$QHP_FILE
html_docs_online.commands = $$QDOC $$PWD/qtcreator-online.qdocconf
html_docs_online.commands = $$QDOC -online $$PWD/qtcreator.qdocconf
html_docs_online.depends += $$HELP_DEP_FILES
qch_docs.commands = $$HELPGENERATOR -o \"$$QCH_FILE\" $$QHP_FILE
......
doc/images/qtcreator-breakdown.png

92.8 KB | W: | H:

doc/images/qtcreator-breakdown.png

85.5 KB | W: | H:

doc/images/qtcreator-breakdown.png
doc/images/qtcreator-breakdown.png
doc/images/qtcreator-breakdown.png
doc/images/qtcreator-breakdown.png
  • 2-up
  • Swipe
  • Onion skin
doc/images/qtcreator-watcher.png

11.5 KB | W: | H:

doc/images/qtcreator-watcher.png

29.1 KB | W: | H:

doc/images/qtcreator-watcher.png
doc/images/qtcreator-watcher.png
doc/images/qtcreator-watcher.png
doc/images/qtcreator-watcher.png
  • 2-up
  • Swipe
  • Onion skin
......@@ -10,8 +10,7 @@ defines = Q_QDOC \
Q_BYTE_ORDER \
QT_DEPRECATED \
Q_NO_USING_KEYWORD \
__cplusplus \
qtquick
__cplusplus
versionsym = QT_VERSION_STR
......
......@@ -27,7 +27,7 @@ HTML.postheader = " <div class=\"header\" id=\"qtdocheader\">\n" \
" </div>\n" \
" <div id=\"shortCut\">\n" \
" <ul>\n" \
" <li class=\"shortCut-topleft-inactive\"><span><a href=\"index.html\">Qt Creator 2.1.0 </a></span></li>\n" \
" <li class=\"shortCut-topleft-inactive\"><span><a href=\"index.html\">Qt Creator 2.0.1 </a></span></li>\n" \
" <li class=\"shortCut-topleft-active\"><a href=\"http://qt.nokia.com/doc/\">ALL VERSIONS" \
" </a></li>\n" \
" </ul>\n" \
......
This diff is collapsed.
......@@ -19,12 +19,12 @@ sources.fileextensions = "qtcreator.qdoc addressbook-sdk.qdoc"
qhp.projects = QtCreator
qhp.QtCreator.file = qtcreator.qhp
qhp.QtCreator.namespace = com.nokia.qtcreator.210
qhp.QtCreator.namespace = com.nokia.qtcreator.201
qhp.QtCreator.virtualFolder = doc
qhp.QtCreator.indexTitle = Qt Creator
qhp.QtCreator.filterAttributes = qtcreator 2.1.0
qhp.QtCreator.customFilters.QtCreator.name = Qt Creator 2.1.0
qhp.QtCreator.customFilters.QtCreator.filterAttributes = qtcreator 2.1.0
qhp.QtCreator.filterAttributes = qtcreator 2.0.1
qhp.QtCreator.customFilters.QtCreator.name = Qt Creator 2.0.1
qhp.QtCreator.customFilters.QtCreator.filterAttributes = qtcreator 2.0.1
qhp.QtCreator.indexRoot =
qhp.QtCreator.extraFiles = \
style/style.css \
......@@ -32,10 +32,16 @@ qhp.QtCreator.extraFiles = \
style/style_ie7.css \
style/style_ie8.css \
style/OfflineStyle.css \
style/narrow.css \
style/OfflineStyle.css \
style/superfish.css \
style/superfish_skin.css \
images/qt-logo.png \
images/qtcreator-screenshots.png \
scripts/functions.js \
scripts/jquery.js \
scripts/narrow.js \
scripts/superfish.js \
images/api_examples.png \
images/api_lookup.png \
images/arrow_down.png \
......
doc/templates/images/bg_l.png

139 Bytes | W: | H:

doc/templates/images/bg_l.png

100 Bytes | W: | H:

doc/templates/images/bg_l.png
doc/templates/images/bg_l.png
doc/templates/images/bg_l.png
doc/templates/images/bg_l.png
  • 2-up
  • Swipe
  • Onion skin
doc/templates/images/bg_l_blank.png

123 Bytes | W: | H:

doc/templates/images/bg_l_blank.png

84 Bytes | W: | H:

doc/templates/images/bg_l_blank.png
doc/templates/images/bg_l_blank.png
doc/templates/images/bg_l_blank.png
doc/templates/images/bg_l_blank.png
  • 2-up
  • Swipe
  • Onion skin
doc/templates/images/bg_r.png

136 Bytes | W: | H:

doc/templates/images/bg_r.png

96 Bytes | W: | H:

doc/templates/images/bg_r.png
doc/templates/images/bg_r.png
doc/templates/images/bg_r.png
doc/templates/images/bg_r.png
  • 2-up
  • Swipe
  • Onion skin
doc/templates/images/box_bg.png

129 Bytes | W: | H:

doc/templates/images/box_bg.png

89 Bytes | W: | H:

doc/templates/images/box_bg.png
doc/templates/images/box_bg.png
doc/templates/images/box_bg.png
doc/templates/images/box_bg.png
  • 2-up
  • Swipe
  • Onion skin
doc/templates/images/breadcrumb.png

195 Bytes | W: | H:

doc/templates/images/breadcrumb.png

134 Bytes | W: | H:

doc/templates/images/breadcrumb.png
doc/templates/images/breadcrumb.png
doc/templates/images/breadcrumb.png
doc/templates/images/breadcrumb.png
  • 2-up
  • Swipe
  • Onion skin
doc/templates/images/bullet_gt.png

185 Bytes | W: | H:

doc/templates/images/bullet_gt.png

124 Bytes | W: | H:

doc/templates/images/bullet_gt.png
doc/templates/images/bullet_gt.png
doc/templates/images/bullet_gt.png
doc/templates/images/bullet_gt.png
  • 2-up
  • Swipe
  • Onion skin
doc/templates/images/bullet_sq.png

117 Bytes | W: | H:

doc/templates/images/bullet_sq.png

74 Bytes | W: | H:

doc/templates/images/bullet_sq.png
doc/templates/images/bullet_sq.png
doc/templates/images/bullet_sq.png
doc/templates/images/bullet_sq.png
  • 2-up
  • Swipe
  • Onion skin
doc/templates/images/bullet_up.png

253 Bytes | W: | H:

doc/templates/images/bullet_up.png

210 Bytes | W: | H:

doc/templates/images/bullet_up.png
doc/templates/images/bullet_up.png
doc/templates/images/bullet_up.png
doc/templates/images/bullet_up.png
  • 2-up
  • Swipe
  • Onion skin
doc/templates/images/page_bg.png

126 Bytes | W: | H:

doc/templates/images/page_bg.png

84 Bytes | W: | H:

doc/templates/images/page_bg.png
doc/templates/images/page_bg.png
doc/templates/images/page_bg.png
doc/templates/images/page_bg.png
  • 2-up
  • Swipe
  • Onion skin
......@@ -63,11 +63,9 @@ function processNokiaData(response){
if(propertyTags[i].getElementsByTagName('pageType')[0].firstChild.nodeValue == 'APIPage'){
lookupCount++;
for (var j=0; j< propertyTags[i].getElementsByTagName('pageWords').length; j++){
full_li_element = linkStart + propertyTags[i].getElementsByTagName('pageUrl')[j].firstChild.nodeValue;
full_li_element = full_li_element + "'>" + propertyTags[i].getElementsByTagName('pageTitle')[0].firstChild.nodeValue + linkEnd;
$('#ul001').append(full_li_element);
$('#ul001 .defaultLink').css('display','none');
......@@ -77,7 +75,6 @@ function processNokiaData(response){
if(propertyTags[i].getElementsByTagName('pageType')[0].firstChild.nodeValue == 'Article'){
articleCount++;
for (var j=0; j< propertyTags[i].getElementsByTagName('pageWords').length; j++){
full_li_element = linkStart + propertyTags[i].getElementsByTagName('pageUrl')[j].firstChild.nodeValue;
full_li_element =full_li_element + "'>" + propertyTags[i].getElementsByTagName('pageTitle')[0].firstChild.nodeValue + linkEnd ;
......@@ -103,10 +100,13 @@ function processNokiaData(response){
if(i==propertyTags.length){$('#pageType').removeClass('loading');}
}
if(lookupCount > 0){$('#ul001 .menuAlert').remove();$('#ul001').prepend('<li class=\"menuAlert liveResult hit\">Found ' + lookupCount + ' hits</li>');$('#ul001 li').css('display','block');$('.sidebar .search form input').removeClass('loading');}
if(articleCount > 0){$('#ul002 .menuAlert').remove();$('#ul002').prepend('<li class=\"menuAlert liveResult hit\">Found ' + articleCount + ' hits</li>');$('#ul002 li').css('display','block');}
if(exampleCount > 0){$('#ul003 .menuAlert').remove();$('#ul003').prepend('<li class=\"menuAlert liveResult hit\">Found ' + articleCount + ' hits</li>');$('#ul003 li').css('display','block');}
if(lookupCount == 0){$('#ul001').prepend('<li class=\"liveResult noMatch\">Found no result</li>');$('#ul001 li').css('display','block');$('.sidebar .search form input').removeClass('loading');}
if(articleCount == 0){$('#ul002').prepend('<li class=\"liveResult noMatch\">Found no result</li>');$('#ul002 li').css('display','block');}
if(exampleCount == 0){$('#ul003').prepend('<li class=\"liveResult noMatch\">Found no result</li>');$('#ul003 li').css('display','block');}
if(lookupCount == 0){$('#ul001 .menuAlert').remove();$('#ul001').prepend('<li class=\"menuAlert liveResult noMatch\">Found no result</li>');$('#ul001 li').css('display','block');$('.sidebar .search form input').removeClass('loading');}
if(articleCount == 0){$('#ul002 .menuAlert').remove();$('#ul002').prepend('<li class=\"menuAlert liveResult noMatch\">Found no result</li>');$('#ul002 li').css('display','block');}
if(exampleCount == 0){$('#ul003 .menuAlert').remove();$('#ul003').prepend('<li class=\"menuAlert liveResult noMatch\">Found no result</li>');$('#ul003 li').css('display','block');}
// reset count variables;
lookupCount=0;
articleCount = 0;
......@@ -121,6 +121,7 @@ function CheckEmptyAndLoadList()
var pageVal = $('title').html();
$('#feedUrl').remove();
$('#pageVal').remove();
$('.menuAlert').remove();
$('#feedform').append('<input id="feedUrl" name="feedUrl" value="'+pageUrl+'" style="display:none;">');
$('#feedform').append('<input id="pageVal" name="pageVal" value="'+pageVal+'" style="display:none;">');
$('.liveResult').remove();
......@@ -160,7 +161,8 @@ else
var searchString = $('#pageType').val() ;
if ((searchString == null) || (searchString.length < 3)) {
$('#pageType').removeClass('loading');
$('.liveResult').remove(); // replaces removeResults();
$('.liveResult').remove();
$('.searching').remove();
CheckEmptyAndLoadList();
$('.report').remove();
// debug$('.content').prepend('<li>too short or blank</li>'); // debug
......@@ -169,9 +171,8 @@ else
if (this.timer) clearTimeout(this.timer);
this.timer = setTimeout(function () {
$('#pageType').addClass('loading');
// debug$('.content').prepend('<li>new search started </li>');// debug
// debug$('.content').prepend('<p class=\"report\">Search string ' +searchString +'</p>'); // debug
$('.searching').remove();
$('.list ul').prepend('<li class="menuAlert searching">Searching...</li>');
$.ajax({
contentType: "application/x-www-form-urlencoded",
url: 'http://' + location.host + '/nokiasearch/GetDataServlet',
......@@ -180,9 +181,10 @@ else
type: 'post',
success: function (response, textStatus) {
$('.liveResult').remove(); // replaces removeResults();
$('#pageType').removeClass('loading');
$('.liveResult').remove();
$('.searching').remove();
$('#pageType').removeClass('loading');
$('.list ul').prepend('<li class="menuAlert searching">Searching...</li>');
processNokiaData(response);
}
......
......@@ -59,9 +59,20 @@ var narrowInit = function() {
}
$(document).ready(function(){
if ($('body').hasClass('narrow')) {
/* if ($('body').hasClass('narrow')) {
narrowInit();
}
*/
if($(window).width()<600) {
$('body').addClass('narrow');
if ($("#narrowsearch").length == 0) {
narrowInit();
}
}
else {
$('body').removeClass('narrow');
}
});
$(window).bind('resize', function () {
......
......@@ -15,7 +15,12 @@
}
.narrow .footer {
margin: 0;
margin: 0px;
}
.creator .header, .creator .header .content, .creator .footer, .creator .wrapper {
margin: 0px;
min-width: 300px;
}
.narrow .header
{
......@@ -49,7 +54,7 @@
.narrow .header .qtref a
{
color: #363534;
color: #00732F;
}
.narrow .header .qtref span
......@@ -98,7 +103,7 @@
}
.narrow .header #shortCut ul li a
{
color: #44a51c;
color: #00732F;
}
.narrow .wrapper .hd
......@@ -126,6 +131,11 @@
margin: 0 5px 0 5px;
}
.creator .wrap
{
margin: 0px;
background:#FFFFFF;
}
.narrow .wrap .toolbar
{
border-bottom: none;
......@@ -135,7 +145,14 @@
{
padding-top: 15px;
}
.creator .wrap .content
{
padding-top: 10px;
}
.creator .wrap .content .guide
{
padding-top: 15px;
}
.narrow .wrap .feedback
{
display: none;
......
This diff is collapsed.
......@@ -116,3 +116,9 @@ win32-msvc* {
# Handle S60 support: default on Windows, conditionally built on other platforms.
macx:SUPPORT_QT_S60 = $$(QTCREATOR_WITH_S60)
else:SUPPORT_QT_S60=1
# Define QTCREATOR_WITH_QML if building with Qml support
SUPPORT_QT_QML = $$(QTCREATOR_WITH_QML)
!isEmpty(SUPPORT_QT_QML) {
DEFINES += QTCREATOR_WITH_QML
}
......@@ -116,10 +116,15 @@ def lookupType(typestring):
try:
#warn("LOOKING UP '%s'" % ts)
type = gdb.lookup_type(ts)
except:
# Can throw "RuntimeError: No type named class Foo."
#warn("LOOKING UP '%s' FAILED" % ts)
pass
except RuntimeError, error:
#warn("LOOKING UP '%s': %s" % (ts, error))
# See http://sourceware.org/bugzilla/show_bug.cgi?id=11912
exp = "(class '%s'*)0" % ts
try:
type = parseAndEvaluate(exp).type.target()
except:
# Can throw "RuntimeError: No type named class Foo."
pass
#warn(" RESULT: '%s'" % type)
#if not type is None:
# warn(" FIELDS: '%s'" % type.fields())
......@@ -300,7 +305,7 @@ class Children:
if self.d.passExceptions and not exType is None:
showException("CHILDREN", exType, exValue, exTraceBack)
if self.d.currentMaxNumChilds < self.d.currentNumChilds:
self.d.putEllipsis();
self.d.putEllipsis()
self.d.currentChildType = self.savedChildType
self.d.currentChildNumChild = self.savedChildNumChild
self.d.currentNumChilds = self.savedNumChilds
......@@ -424,8 +429,8 @@ def listOfLocals(varList):
hasBlock = 'block' in __builtin__.dir(frame)
items = []
#warn("HAS BLOCK: %s" % hasBlock);
#warn("IS GOOD GDB: %s" % isGoodGdb());
#warn("HAS BLOCK: %s" % hasBlock)
#warn("IS GOOD GDB: %s" % isGoodGdb())
if hasBlock and isGoodGdb():
#warn("IS GOOD: %s " % varList)
try:
......@@ -613,7 +618,7 @@ movableTypes = set([
"QFileInfo", "QFixed", "QFixedPoint", "QFixedSize",
"QHashDummyValue",
"QIcon", "QImage",
"QLine", "QLineF", "QLatin1Char", "QLocal",
"QLine", "QLineF", "QLatin1Char", "QLocale",
"QMatrix", "QModelIndex",
"QPoint", "QPointF", "QPen", "QPersistentModelIndex",
"QResourceRoot", "QRect", "QRectF", "QRegExp",
......@@ -642,7 +647,8 @@ def call(value, func):
type = stripClassTag(str(value.type))
if type.find(":") >= 0:
type = "'" + type + "'"
exp = "((%s*)%s)->%s" % (type, value.address, func)
# 'class' is needed, see http://sourceware.org/bugzilla/show_bug.cgi?id=11912
exp = "((class %s*)%s)->%s" % (type, value.address, func)
#warn("CALL: %s" % exp)
result = None
try:
......@@ -805,7 +811,9 @@ def extractFields(type):
#warn("TYPE 0: %s" % type)
type = stripTypedefs(type)
#warn("TYPE 1: %s" % type)
type = lookupType(str(type))
type0 = lookupType(str(type))
if not type0 is None:
type = type0
#warn("TYPE 2: %s" % type)
fields = type.fields()
#warn("FIELDS: %s" % fields)
......@@ -835,7 +843,6 @@ class Item:
# This is a mapping from 'type name' to 'display alternatives'.
qqDumpers = {}
qqFormats = {}
......@@ -850,8 +857,7 @@ class SetupCommand(gdb.Command):
for key, value in module.__dict__.items():
if key.startswith("qdump__"):
name = key[7:]
qqDumpers[name] = value
qqFormats[name] = qqFormats.get(name, "");
qqFormats[name] = qqFormats.get(name, "")
elif key.startswith("qform__"):
name = key[7:]
formats = ""
......@@ -905,6 +911,7 @@ class FrameCommand(gdb.Command):
if pos != -1:
type = base64.b16decode(f[0:pos], True)
typeformats[type] = int(f[pos+1:])
typeformats["const " + type] = int(f[pos+1:])
elif arg.startswith("formats:"):
for f in arg[pos:].split(","):
pos = f.find("=")
......@@ -976,7 +983,7 @@ class FrameCommand(gdb.Command):
d.put('addr="<not accessible>",')
d.put('value="<not accessible>",')
d.put('type="%s",' % item.value.type)
d.put('numchild="0"');
d.put('numchild="0"')
continue
type = item.value.type
......@@ -1043,12 +1050,26 @@ class FrameCommand(gdb.Command):
#listOfBreakpoints(d)
#print('data=[' + locals + sep + watchers + '],bkpts=[' + breakpoints + ']\n')
print('data=[' + d.output + ']')
output = 'data=[' + d.output + ']'
try:
print(output)
except:
out = ""
for c in output:
cc = ord(c)
if cc > 127:
out += "\\\\%d" % cc
elif cc < 0:
out += "\\\\%d" % (cc + 256)
else:
out += c
print(out)
def handleWatch(self, d, exp, iname):
exp = str(exp)
escapedExp = exp.replace('"', '\\"');
escapedExp = exp.replace('"', '\\"')
#warn("HANDLING WATCH %s, INAME: '%s'" % (exp, iname))
if exp.startswith("[") and exp.endswith("]"):
#warn("EVAL: EXP: %s" % exp)
......@@ -1135,6 +1156,8 @@ SalCommand()
#######################################################################
qqQObjectCache = {}
class Dumper:
def __init__(self):
self.output = ""
......@@ -1148,6 +1171,25 @@ class Dumper:
self.currentType = None
self.currentTypePriority = -100
def checkForQObjectBase(self, type):
if type.code != gdb.TYPE_CODE_STRUCT:
return False
name = str(type)
if name in qqQObjectCache:
return qqQObjectCache[name]
if name == self.ns + "QObject":
qqQObjectCache[name] = True
return True
fields = type.strip_typedefs().fields()
if len(fields) == 0:
qqQObjectCache[name] = False
return False
base = fields[0].type.strip_typedefs()
result = self.checkForQObjectBase(base)
qqQObjectCache[name] = result
return result
def put(self, value):
self.output += value
......@@ -1297,7 +1339,7 @@ class Dumper:
return
# FIXME: Gui shows references stripped?
#warn(" ");
#warn(" ")
#warn("REAL INAME: %s " % item.iname)
#warn("REAL NAME: %s " % name)
#warn("REAL TYPE: %s " % item.value.type)
......@@ -1322,24 +1364,37 @@ class Dumper:
value = item.value
type = value.type
typedefStrippedType = stripTypedefs(type);
nsStrippedType = self.stripNamespaceFromType(
typedefStrippedType).replace("::", "__")
#warn(" STRIPPED: %s" % nsStrippedType)
#warn(" DUMPERS: %s" % self.dumpers)
#warn(" DUMPERS: %s" % (nsStrippedType in self.dumpers))
typedefStrippedType = stripTypedefs(type)
if isSimpleType(typedefStrippedType):
#warn("IS SIMPLE: %s " % type)
self.putType(item.value.type)
self.putValue(value)
self.putNumChild(0)
return
# Is this derived from QObject?
isQObjectDerived = self.checkForQObjectBase(typedefStrippedType)
nsStrippedType = self.stripNamespaceFromType(typedefStrippedType)\
.replace("::", "__")
elif nsStrippedType in self.dumpers:
#warn(" STRIPPED: %s" % nsStrippedType)
#warn(" DUMPERS: %s" % (nsStrippedType in self.dumpers))
format = self.itemFormat(item)
if self.useFancy \
and ((format is None) or (format >= 1)) \
and ((nsStrippedType in self.dumpers) or isQObjectDerived):
#warn("IS DUMPABLE: %s " % type)
self.putType(item.value.type)
self.dumpers[nsStrippedType](self, item)
if isQObjectDerived:
# value has references stripped off item.value.
item1 = Item(value, item.iname)
qdump__QObject(self, item1)
else:
self.dumpers[nsStrippedType](self, item)
#warn(" RESULT: %s " % self.output)
elif typedefStrippedType.code == gdb.TYPE_CODE_ENUM:
......@@ -1352,8 +1407,6 @@ class Dumper:
elif typedefStrippedType.code == gdb.TYPE_CODE_PTR:
isHandled = False
format = self.itemFormat(item)
if not format is None:
self.putAddress(value.address)
self.putType(item.value.type)
......
......@@ -483,7 +483,9 @@ def qdump__QLinkedList(d, item):
def qdump__QLocale(d, item):
d.putStringValue(call(item.value, "name()"))
d.putNumChild(8)
d.putNumChild(0)
return
# FIXME: Poke back for variants.
if d.isExpanded(item):
with Children(d, 1, lookupType(d.ns + "QChar"), 0):
d.putCallItem("country", item, "country()")
......@@ -491,9 +493,9 @@ def qdump__QLocale(d, item):
d.putCallItem("measurementSystem", item, "measurementSystem()")
d.putCallItem("numberOptions", item, "numberOptions()")
d.putCallItem("timeFormat_(short)", item,
"timeFormat(" + d.ns + "QLocale::ShortFormat)")
"timeFormat('" + d.ns + "QLocale::ShortFormat')")
d.putCallItem("timeFormat_(long)", item,
"timeFormat(" + d.ns + "QLocale::LongFormat)")
"timeFormat('" + d.ns + "QLocale::LongFormat')")
d.putCallItem("decimalPoint", item, "decimalPoint()")
d.putCallItem("exponential", item, "exponential()")
d.putCallItem("percent", item, "percent()")
......@@ -578,9 +580,6 @@ def extractCString(table, offset):
return result
def qdump__QWidget(d, item):
qdump__QObject(d, item)
def qdump__QObject(d, item):
#warn("OBJECT: %s " % item.value)
staticMetaObject = item.value["staticMetaObject"]
......@@ -617,15 +616,16 @@ def qdump__QObject(d, item):
d.putNumChild(4)
if d.isExpanded(item):
with Children(d):
d.putFields(item)
# Parent and children.
d.putItem(Item(d_ptr["parent"], item.iname, "parent", "parent"))
d.putItem(Item(d_ptr["children"], item.iname, "children", "children"))
# Properties.
with SubItem(d):
#propertyCount = metaData[6]
# FIXME: Replace with plain memory accesses.
propertyCount = call(mo, "propertyCount()")
propertyCount = metaData[6]
#propertyCount = call(mo, "propertyCount()")
#warn("PROPERTY COUNT: %s" % propertyCount)
propertyData = metaData[7]
d.putName("properties")
......@@ -634,6 +634,9 @@ def qdump__QObject(d, item):
d.putNumChild(propertyCount)
if d.isExpandedIName(item.iname + ".properties"):
with Children(d):
# FIXME: Make this global. Don't leak.
gdb.execute("set $d = (QVariant*)malloc(sizeof(QVariant))")
gdb.execute("set $d.d.is_shared = 0")
for property in xrange(propertyCount):
with SubItem(d):
offset = propertyData + 3 * property
......@@ -648,6 +651,15 @@ def qdump__QObject(d, item):
#exp = '"((\'%sQObject\'*)%s)"' % (d.ns, item.value.address,)
#warn("EXPRESSION: %s" % exp)
value = call(item.value, 'property("%s")' % propertyName)
value1 = value["d"]
#warn(" CODE: %s" % value1["type"])
# Type 1 and 2 are bool and int. Try to save a few cycles in this case:
if int(value1["type"]) > 2:
# Poke back value
gdb.execute("set $d.d.data.ull = %s" % value1["data"]["ull"])
gdb.execute("set $d.d.type = %s" % value1["type"])
gdb.execute("set $d.d.is_null = %s" % value1["is_null"])
value = parseAndEvaluate("$d").dereference()
val, inner, innert = qdumpHelper__QVariant(d, value)
if len(inner):
# Build-in types.
......@@ -1811,6 +1823,8 @@ def qdump__std__set(d, item):
def qdump__std__string(d, item):
data = item.value["_M_dataplus"]["_M_p"]
baseType = item.value.type.unqualified().strip_typedefs()
if baseType.code == gdb.TYPE_CODE_REF:
baseType = baseType.target().unqualified().strip_typedefs()
charType = baseType.template_argument(0)
repType = lookupType("%s::_Rep" % baseType).pointer()
rep = (data.cast(repType) - 1).dereference()
......@@ -1857,10 +1871,21 @@ def qdump__std__string(d, item):
def qdump__std__vector(d, item):
impl = item.value["_M_impl"]
start = impl["_M_start"]
finish = impl["_M_finish"]
type = item.value.type.template_argument(0)
alloc = impl["_M_end_of_storage"]
size = finish - start
isBool = str(type) == 'bool'
if isBool:
start = impl["_M_start"]["_M_p"]
finish = impl["_M_finish"]["_M_p"]
# FIXME: 32 is sizeof(unsigned long) * CHAR_BIT
storagesize = 32
size = (finish - start) * storagesize
size += impl["_M_finish"]["_M_offset"]
size -= impl["_M_start"]["_M_offset"]
else:
start = impl["_M_start"]
finish = impl["_M_finish"]
size = finish - start
check(0 <= size and size <= 1000 * 1000 * 1000)
check(finish <= alloc)
......@@ -1871,11 +1896,18 @@ def qdump__std__vector(d, item):
d.putItemCount(size)
d.putNumChild(size)
if d.isExpanded(item):
with Children(d, [size, 10000], item.value.type.template_argument(0)):
p = start
for i in d.childRange():
d.putItem(Item(p.dereference(), item.iname, i))
p += 1
if isBool:
with Children(d, [size, 10000], type):
for i in d.childRange():
q = start + i / storagesize
data = (q.dereference() >> (i % storagesize)) & 1
d.putBoolItem(str(i), select(data, "true", "false"))
else:
with Children(d, [size, 10000], type):
p = start
for i in d.childRange():
d.putItem(Item(p.dereference(), item.iname, i))
p += 1
def qdump__string(d, item):
......
......@@ -423,9 +423,12 @@ QMenu::separator {
}
QSlider::handle:horizontal {
image: url(:/qmldesigner/images/slider_indikator.png);
background: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 #b4b4b4, stop:1 #8f8f8f);
width: 16px;
height: 24px;
margin: 0px 0;
height: 16px;
border: 1px solid #5c5c5c;
width: 18px;
margin: -4px 0; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */
border-radius: 3px;
}
......@@ -36,11 +36,11 @@ leave room for the Qt 4 target page.
-->
<wizard version="1" kind="project"
class="qt4project" firstpage="10"
id="QmlRuntimePlugin" category="F.Projects">
id="QmlExtensionPlugin" category="I.Projects" enabled="true">
<icon>lib.png</icon>
<description>Creates a C++ plugin to extend the funtionality of the QML runtime.</description>
<displayname>QML Runtime Plug-in</displayname>
<displaycategory>QML Runtime Plug-in</displaycategory>
<description>Creates a C++ plugin that makes it possible to offer extensions that can be loaded dynamically into applications using the QDeclarativeEngine class.</description>
<displayname>Custom QML Extension Plugin</displayname>
<displaycategory>QML Extension Plugin</displaycategory>
<files>
<file source="qmldir" target="qmldir"/>
<file source="plugin.h" target="%ProjectName%.h"/>
......@@ -50,7 +50,7 @@ leave room for the Qt 4 target page.
<file source="project.pro" target="%ProjectName%.pro" openproject="true"/>
</files>
<!-- Create a 2nd wizard page with parameters -->
<fieldpagetitle>QML Runtime Plug-in Parameters</fieldpagetitle>
<fieldpagetitle>Custom QML Extension Plugin Parameters</fieldpagetitle>
<fields>
<field mandatory="false" name="ObjectName">
<fieldcontrol class="QLineEdit" validator='^[A-Za-z0-9_]+$' defaulttext="ExampleObject"/>
......
This diff is collapsed.
include(../../../qtcreator.pri)
LANGUAGES = de ja pl ru
#LANGUAGES = cs es fr hu it sl
LANGUAGES = cs de fr ja pl ru
# var, prepend, append
defineReplace(prependAll) {
......@@ -32,7 +31,7 @@ QMAKE_EXTRA_TARGETS += extract
files = $$files($$PWD/*_??.ts) $$PWD/qtcreator_untranslated.ts
for(file, files) {
lang = $$replace(file, .*_(.*)\\.ts, \\1)
lang = $$replace(file, .*_([^/]*)\\.ts, \\1)
v = ts-$${lang}.commands
$$v = cd $$IDE_SOURCE_TREE && $$LUPDATE src share/qtcreator/qmldesigner $$MIME_TR_H $$CUSTOMWIZARD_TR_H -ts $$file
v = ts-$${lang}.depends
......
......@@ -219,8 +219,8 @@ Alternatively, this plugin may be used under the terms of the GNU Lesser General
<key>CFBundleIdentifier</key>
<string>com.nokia.qtcreator</string>
<key>CFBundleVersion</key>
<string>2.1.0</string>
<string>2.0.1</string>
<key>CFBundleShortVersionString</key>
<string>2.1.0</string>
<string>2.0.1</string>
</dict>
</plist>
<plugin name="BinEditor" version="2.1.0" compatVersion="2.1.0">
<plugin name="BinEditor" version="2.0.1" compatVersion="2.0.1">
<vendor>Nokia Corporation</vendor>
<copyright>(C) 2010 Nokia Corporation</copyright>
<license>
......@@ -14,7 +14,7 @@ Alternatively, this plugin may be used under the terms of the GNU Lesser General
<description>Binary editor component.</description>
<url>http://qt.nokia.com</url>
<dependencyList>
<dependency name="Core" version="2.1.0"/>
<dependency name="TextEditor" version="2.1.0"/>
<dependency name="Core" version="2.0.1"/>
<dependency name="TextEditor" version="2.0.1"/>
</dependencyList>
</plugin>
......@@ -193,10 +193,12 @@ public:
virtual QString mimeType() const { return m_mimeType; }
bool save(const QString &fileName = QString()) {
if (m_editor->save(m_fileName, fileName)) {
m_fileName = fileName;
const QString fileNameToUse
= fileName.isEmpty() ? m_fileName : fileName;
if (m_editor->save(m_fileName, fileNameToUse)) {
m_fileName = fileNameToUse;
m_editor->editorInterface()->
setDisplayName(QFileInfo(fileName).fileName());
setDisplayName(QFileInfo(fileNameToUse).fileName());
emit changed();
return true;
} else {
......
<plugin name="Bookmarks" version="2.1.0" compatVersion="2.1.0">
<plugin name="Bookmarks" version="2.0.1" compatVersion="2.0.1">
<vendor>Nokia Corporation</vendor>
<copyright>(C) 2010 Nokia Corporation</copyright>
<license>
......@@ -14,8 +14,8 @@ Alternatively, this plugin may be used under the terms of the GNU Lesser General
<description>Bookmarks in text editors.</description>
<url>http://qt.nokia.com</url>
<dependencyList>
<dependency name="TextEditor" version="2.1.0"/>
<dependency name="ProjectExplorer" version="2.1.0"/>
<dependency name="Core" version="2.1.0"/>
<dependency name="TextEditor" version="2.0.1"/>
<dependency name="ProjectExplorer" version="2.0.1"/>
<dependency name="Core" version="2.0.1"/>
</dependencyList>
</plugin>
<plugin name="CMakeProjectManager" version="2.1.0" compatVersion="2.1.0">
<plugin name="CMakeProjectManager" version="2.0.1" compatVersion="2.0.1">
<vendor>Nokia Corporation</vendor>
<copyright>(C) 2010 Nokia Corporation</copyright>
<license>
......@@ -14,9 +14,9 @@ Alternatively, this plugin may be used under the terms of the GNU Lesser General
<description>CMake support</description>
<url>http://qt.nokia.com</url>
<dependencyList>
<dependency name="TextEditor" version="2.1.0"/>
<dependency name="ProjectExplorer" version="2.1.0"/>
<dependency name="CppTools" version="2.1.0"/>
<dependency name="CppEditor" version="2.1.0"/>
<dependency name="TextEditor" version="2.0.1"/>
<dependency name="ProjectExplorer" version="2.0.1"/>
<dependency name="CppTools" version="2.0.1"/>
<dependency name="CppEditor" version="2.0.1"/>
</dependencyList>
</plugin>
<plugin name="Core" version="2.1.0" compatVersion="2.1.0">
<plugin name="Core" version="2.0.1" compatVersion="2.0.1">
<vendor>Nokia Corporation</vendor>
<copyright>(C) 2010 Nokia Corporation</copyright>
<license>
......
......@@ -36,8 +36,8 @@ namespace Core {
namespace Constants {
#define IDE_VERSION_MAJOR 2
#define IDE_VERSION_MINOR 1
#define IDE_VERSION_RELEASE 0
#define IDE_VERSION_MINOR 0
#define IDE_VERSION_RELEASE 1
#define STRINGIFY_INTERNAL(x) #x
#define STRINGIFY(x) STRINGIFY_INTERNAL(x)
......
......@@ -1628,7 +1628,10 @@ void EditorManager::showPopupOrSelectDocument() const
if (QApplication::keyboardModifiers() == Qt::NoModifier) {
windowPopup()->selectAndHide();
} else {
const QPoint p(mapToGlobal(QPoint(0, 0)));
// EditorManager is invisible when invoked from Design Mode.
const QPoint p = isVisible() ?
mapToGlobal(QPoint(0, 0)) :
m_d->m_core->mainWindow()->mapToGlobal(QPoint(0, 0));
windowPopup()->move((width()-m_d->m_windowPopup->width())/2 + p.x(),
(height()-m_d->m_windowPopup->height())/2 + p.y());
windowPopup()->setVisible(true);
......
<plugin name="CodePaster" version="2.1.0" compatVersion="2.1.0">
<plugin name="CodePaster" version="2.0.1" compatVersion="2.0.1">
<vendor>Nokia Corporation</vendor>
<copyright>(C) 2010 Nokia Corporation</copyright>
<license>
......@@ -13,8 +13,8 @@ Alternatively, this plugin may be used under the terms of the GNU Lesser General
<description>Codepaster plugin for pushing/fetching diff from server</description>
<url>http://qt.nokia.com</url>
<dependencyList>
<dependency name="TextEditor" version="2.1.0"/>
<dependency name="ProjectExplorer" version="2.1.0"/>
<dependency name="Core" version="2.1.0"/>
<dependency name="TextEditor" version="2.0.1"/>
<dependency name="ProjectExplorer" version="2.0.1"/>
<dependency name="Core" version="2.0.1"/>
</dependencyList>
</plugin>
......@@ -351,6 +351,8 @@ void CodepasterPlugin::finishFetch(const QString &titleDescription,
// Keep the file and store in list of files to be removed.
tempFile->setAutoRemove(false);
const QString fileName = tempFile->fileName();
// Discard to temporary file to make sure it is closed and no changes are triggered.
tempFile = TemporaryFilePtr();
m_fetchedSnippets.push_back(fileName);
// Open editor with title.
Core::IEditor* editor = EditorManager::instance()->openEditor(fileName);
......
<plugin name="CppEditor" version="2.1.0" compatVersion="2.1.0">
<plugin name="CppEditor" version="2.0.1" compatVersion="2.0.1">
<vendor>Nokia Corporation</vendor>
<copyright>(C) 2010 Nokia Corporation</copyright>
<license>
......@@ -14,8 +14,8 @@ Alternatively, this plugin may be used under the terms of the GNU Lesser General
<description>C/C++ editor component.</description>
<url>http://qt.nokia.com</url>
<dependencyList>
<dependency name="Core" version="2.1.0"/>
<dependency name="TextEditor" version="2.1.0"/>
<dependency name="CppTools" version="2.1.0"/>
<dependency name="Core" version="2.0.1"/>
<dependency name="TextEditor" version="2.0.1"/>
<dependency name="CppTools" version="2.0.1"/>
</dependencyList>
</plugin>
......@@ -61,6 +61,8 @@
#include <QtGui/QToolTip>
#include <QtGui/QTextCursor>
#include <QtGui/QTextBlock>
#include <QtGui/QApplication>
#include <QtGui/QDesktopWidget>
using namespace CppEditor::Internal;
using namespace CPlusPlus;
......@@ -105,7 +107,7 @@ void CppHoverHandler::showToolTip(TextEditor::ITextEditor *editor, const QPoint
if (core->hasContext(dbgcontext))
return;
updateHelpIdAndTooltip(editor, pos);
updateHelpIdAndTooltip(editor, pos, QApplication::desktop()->screenNumber(point));
if (m_toolTip.isEmpty())
QToolTip::hideText();
......@@ -238,7 +240,9 @@ static FullySpecifiedType resolve(const FullySpecifiedType &ty,
return ty;
}
void CppHoverHandler::updateHelpIdAndTooltip(TextEditor::ITextEditor *editor, int pos)
void CppHoverHandler::updateHelpIdAndTooltip(TextEditor::ITextEditor *editor,
int pos,
const int screen)
{
m_helpId.clear();
m_toolTip.clear();
......@@ -395,16 +399,36 @@ void CppHoverHandler::updateHelpIdAndTooltip(TextEditor::ITextEditor *editor, in
if (!formatTooltip.isEmpty())
m_toolTip = formatTooltip;
const int tipWidth = QFontMetrics(QToolTip::font()).width(m_toolTip);
bool preventWrapping = true;
if (screen != -1) {
#ifdef Q_WS_MAC
int screenWidth = QApplication::desktop()->availableGeometry(screen).width();
#else
int screenWidth = QApplication::desktop()->screenGeometry(screen).width();
#endif
if (tipWidth > screenWidth * .8)
preventWrapping = false;
}
if (!m_helpId.isEmpty() && !helpLinks.isEmpty()) {
if (showF1) {
// we need the original width without escape sequences
const int width = QFontMetrics(QToolTip::font()).width(m_toolTip);
m_toolTip = QString(QLatin1String("<table><tr><td valign=middle width=%2>%1</td>"
"<td><img src=\":/cppeditor/images/f1.png\"></td></tr></table>"))
.arg(Qt::escape(m_toolTip)).arg(width);
if (preventWrapping) {
m_toolTip = QString(QLatin1String("<table><tr><td valign=middle width=%2>%1</td>"
"<td><img src=\":/cppeditor/images/f1.png\"></td></tr></table>"))
.arg(Qt::escape(m_toolTip)).arg(tipWidth);
} else {
m_toolTip = QString(QLatin1String("<table><tr><td valign=middle>%1</td>"
"<td><img src=\":/cppeditor/images/f1.png\"></td></tr></table>"))
.arg(Qt::escape(m_toolTip));
}
}
editor->setContextHelpId(m_helpId);
} else if (!m_toolTip.isEmpty() && Qt::mightBeRichText(m_toolTip)) {
m_toolTip = QString(QLatin1String("<nobr>%1</nobr>")).arg(Qt::escape(m_toolTip));
} else if (!m_toolTip.isEmpty()) {
if (preventWrapping)
m_toolTip = QString(QLatin1String("<table><tr><td width=%2>%1</td></tr></table>")).arg(Qt::escape(m_toolTip)).arg(tipWidth);
else if (!Qt::mightBeRichText(m_toolTip))
m_toolTip = QString(QLatin1String("<p>%1</p>")).arg(Qt::escape(m_toolTip));
}
}
......@@ -66,7 +66,7 @@ private slots:
void editorOpened(Core::IEditor *editor);
private:
void updateHelpIdAndTooltip(TextEditor::ITextEditor *editor, int pos);
void updateHelpIdAndTooltip(TextEditor::ITextEditor *editor, int pos, const int screen = -1);