From 55712e3ca970ba5b71fb5171539dbc2931ea3b72 Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 26 Mar 2015 11:26:50 +0100 Subject: [PATCH 01/25] Debugger: Fix retrieval of single expanded items It was falling into the full update branch as the passed parameter was not a list anymore. Change-Id: I314beb3a68f8791483a599c7d5782fd454983840 Reviewed-by: Christian Stenger --- share/qtcreator/debugger/gdbbridge.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/share/qtcreator/debugger/gdbbridge.py b/share/qtcreator/debugger/gdbbridge.py index f22bd37b1d2..ecc0e03d46f 100644 --- a/share/qtcreator/debugger/gdbbridge.py +++ b/share/qtcreator/debugger/gdbbridge.py @@ -246,7 +246,7 @@ class Dumper(DumperBase): # dumpers causing loading of shared objects etc). self.currentQtNamespaceGuess = None - self.varList = args.get("vars", []) + self.partialVariable = args.get("vars", "") self.resultVarName = args.get("resultvarname", "") self.expandedINames = set(args.get("expanded", [])) self.stringCutOff = int(args.get("stringcutoff", 10000)) @@ -368,9 +368,9 @@ class Dumper(DumperBase): if self.qmlcontext: locals = self.extractQmlVariables(self.qmlcontext) - elif self.partialUpdate and len(self.varList) == 1: + elif self.partialUpdate: #warn("PARTIAL: %s" % self.varList) - parts = self.varList[0].split('.') + parts = self.partialVariable.split('.') #warn("PARTIAL PARTS: %s" % parts) name = parts[1] #warn("PARTIAL VAR: %s" % name) From 54438b21aa9e43f6612b259656de31e332325f58 Mon Sep 17 00:00:00 2001 From: Robert Loehning Date: Wed, 18 Mar 2015 15:31:36 +0100 Subject: [PATCH 02/25] Squish: Removing Qt 4.8.0 MinGW kit Change-Id: Id88c715ee294e337600a5b41abd79569b11eddbf Reviewed-by: Christian Stenger --- .../settings/windows/QtProject/QtCreator.ini | 3 -- .../windows/QtProject/qtcreator/profiles.xml | 28 ++----------------- .../windows/QtProject/qtcreator/qtversion.xml | 22 ++++----------- tests/system/shared/classes.py | 26 ++++++++--------- tests/system/shared/project.py | 13 +++------ tests/system/suite_QMLS/tst_QMLS03/test.py | 2 +- .../suite_editors/tst_qml_editor/test.py | 2 +- .../tst_build_speedcrunch/test.py | 5 +--- .../suite_general/tst_openqt_creator/test.py | 2 +- .../tst_session_handling/test.py | 2 +- .../suite_qtquick/tst_qml_outline/test.py | 2 +- .../tst_qtquick_creation/test.py | 2 +- .../tst_qtquick_creation4/test.py | 2 +- 13 files changed, 32 insertions(+), 79 deletions(-) diff --git a/tests/system/settings/windows/QtProject/QtCreator.ini b/tests/system/settings/windows/QtProject/QtCreator.ini index 1e759b30437..b77fccec036 100644 --- a/tests/system/settings/windows/QtProject/QtCreator.ini +++ b/tests/system/settings/windows/QtProject/QtCreator.ini @@ -1,5 +1,2 @@ [%General] OverrideLanguage=C - -[MainWindow] -WindowGeometry=@ByteArray(\x1\xd9\xd0\xcb\0\x1\0\0\0\0\x1H\0\0\0}\0\0\x5\xe0\0\0\x3^\0\0\x1P\0\0\0\x9b\0\0\x5\xd8\0\0\x3V\0\0\0\0\0\0) diff --git a/tests/system/settings/windows/QtProject/qtcreator/profiles.xml b/tests/system/settings/windows/QtProject/qtcreator/profiles.xml index 541183f7b2f..85edff2f660 100644 --- a/tests/system/settings/windows/QtProject/qtcreator/profiles.xml +++ b/tests/system/settings/windows/QtProject/qtcreator/profiles.xml @@ -142,30 +142,6 @@ Profile.6 - - false - - - - {2f8a1f59-ddd7-49f0-ae61-1337223f56a3} - Desktop Device - Desktop - - - ProjectExplorer.ToolChain.Mingw:{2729dd3e-84f5-42e1-aed1-6a27163346ce} - - 3 - - :///DESKTOP/// - {9dc9de67-fdc0-4ba6-877a-1463aacd3b3e} - - Desktop 480 GCC - false - - - - - Profile.7 false @@ -189,7 +165,7 @@ - Profile.8 + Profile.7 false @@ -214,7 +190,7 @@ Profile.Count - 9 + 8 Profile.Default diff --git a/tests/system/settings/windows/QtProject/qtcreator/qtversion.xml b/tests/system/settings/windows/QtProject/qtcreator/qtversion.xml index a5b67095337..66d48d5f94a 100644 --- a/tests/system/settings/windows/QtProject/qtcreator/qtversion.xml +++ b/tests/system/settings/windows/QtProject/qtcreator/qtversion.xml @@ -14,16 +14,6 @@ QtVersion.1 - - 3 - Qt 4.8 for Desktop - MinGW (Qt SDK) - C:/QtSDK/Desktop/Qt/4.8.0/mingw/bin/qmake.exe - Qt4ProjectManager.QtVersion.Desktop - false - - - - QtVersion.2 8 Qt 4.7.4 for Desktop - MinGW 4.4 (Qt SDK) @@ -33,7 +23,7 @@ - QtVersion.3 + QtVersion.2 9 Simulator Qt for MinGW 4.4 (Qt SDK) @@ -43,7 +33,7 @@ - QtVersion.4 + QtVersion.3 15 Harmattan Target (Qt SDK) @@ -53,7 +43,7 @@ - QtVersion.5 + QtVersion.4 16 Qt for Fremantle PR1.3 Devices (Qt SDK) @@ -63,7 +53,7 @@ - QtVersion.6 + QtVersion.5 4 Desktop Qt 5.2.1 (msvc2010) @@ -73,7 +63,7 @@ - QtVersion.7 + QtVersion.6 20 Qt 5.3.1 (msvc2010_opengl) @@ -83,7 +73,7 @@ - QtVersion.8 + QtVersion.7 22 Qt %{Qt:Version} (mingw491_32) diff --git a/tests/system/shared/classes.py b/tests/system/shared/classes.py index e2003fe6b1d..b3de5a34dd3 100644 --- a/tests/system/shared/classes.py +++ b/tests/system/shared/classes.py @@ -33,22 +33,19 @@ import operator # for easier re-usage (because Python hasn't an enum type) class Targets: DESKTOP_474_GCC = 1 - DESKTOP_480_GCC = 2 + DESKTOP_480_DEFAULT = 2 SIMULATOR = 4 MAEMO5 = 8 HARMATTAN = 16 EMBEDDED_LINUX = 32 - DESKTOP_480_MSVC2010 = 64 - DESKTOP_521_DEFAULT = 128 - DESKTOP_531_DEFAULT = 256 - DESKTOP_541_GCC = 512 + DESKTOP_521_DEFAULT = 64 + DESKTOP_531_DEFAULT = 128 + DESKTOP_541_GCC = 256 @staticmethod def desktopTargetClasses(): - desktopTargets = (Targets.DESKTOP_474_GCC | Targets.DESKTOP_480_GCC + desktopTargets = (Targets.DESKTOP_474_GCC | Targets.DESKTOP_480_DEFAULT | Targets.DESKTOP_521_DEFAULT | Targets.DESKTOP_531_DEFAULT) - if platform.system() in ('Windows', 'Microsoft'): - desktopTargets |= Targets.DESKTOP_480_MSVC2010 if platform.system() != 'Darwin': desktopTargets |= Targets.DESKTOP_541_GCC return desktopTargets @@ -57,8 +54,11 @@ class Targets: def getStringForTarget(target): if target == Targets.DESKTOP_474_GCC: return "Desktop 474 GCC" - if target == Targets.DESKTOP_480_GCC: - return "Desktop 480 GCC" + elif target == Targets.DESKTOP_480_DEFAULT: + if platform.system() in ('Windows', 'Microsoft'): + return "Desktop 480 MSVC2010" + else: + return "Desktop 480 GCC" elif target == Targets.MAEMO5: return "Fremantle" elif target == Targets.SIMULATOR: @@ -67,8 +67,6 @@ class Targets: return "Harmattan" elif target == Targets.EMBEDDED_LINUX: return "Embedded Linux" - elif target == Targets.DESKTOP_480_MSVC2010: - return "Desktop 480 MSVC2010" elif target == Targets.DESKTOP_521_DEFAULT: return "Desktop 521 default" elif target == Targets.DESKTOP_531_DEFAULT: @@ -90,8 +88,8 @@ class Targets: @staticmethod def intToArray(targets): - available = [Targets.DESKTOP_474_GCC, Targets.DESKTOP_480_GCC, Targets.SIMULATOR, Targets.MAEMO5, - Targets.HARMATTAN, Targets.EMBEDDED_LINUX, Targets.DESKTOP_480_MSVC2010, + available = [Targets.DESKTOP_474_GCC, Targets.DESKTOP_480_DEFAULT, Targets.SIMULATOR, + Targets.MAEMO5, Targets.HARMATTAN, Targets.EMBEDDED_LINUX, Targets.DESKTOP_521_DEFAULT, Targets.DESKTOP_531_DEFAULT, Targets.DESKTOP_541_GCC] return filter(lambda x: x & targets == x, available) diff --git a/tests/system/shared/project.py b/tests/system/shared/project.py index 24978cd8288..a1271972867 100644 --- a/tests/system/shared/project.py +++ b/tests/system/shared/project.py @@ -69,7 +69,7 @@ def __handleCmakeWizardPage__(): generatorCombo = waitForObject(":Generator:_QComboBox") generatorText = "Unix Generator (Desktop 480 GCC)" if platform.system() in ('Windows', 'Microsoft'): - generatorText = "MinGW Generator (Desktop 480 GCC)" + generatorText = "NMake Generator (Desktop 480 MSVC2010)" index = generatorCombo.findText(generatorText) if index == -1: test.warning("No matching CMake generator for found.") @@ -389,12 +389,11 @@ def __chooseTargets__(targets=Targets.DESKTOP_474_GCC, availableTargets=None): available = availableTargets else: # following targets depend on the build environment - added for further/later tests - available = [Targets.DESKTOP_474_GCC, Targets.DESKTOP_480_GCC, Targets.DESKTOP_521_DEFAULT, + available = [Targets.DESKTOP_474_GCC, Targets.DESKTOP_480_DEFAULT, Targets.DESKTOP_521_DEFAULT, Targets.DESKTOP_531_DEFAULT, Targets.MAEMO5, Targets.EMBEDDED_LINUX, Targets.SIMULATOR, Targets.HARMATTAN] if platform.system() in ('Windows', 'Microsoft'): available.remove(Targets.EMBEDDED_LINUX) - available.append(Targets.DESKTOP_480_MSVC2010) if platform.system() != 'Darwin': available.append(Targets.DESKTOP_541_GCC) for target in filter(lambda x: x in available, @@ -621,11 +620,9 @@ def __getSupportedPlatforms__(text, templateName, getAsStrings=False): if 'Desktop' in supports: if version == None or version < "5.0": result.append(Targets.DESKTOP_474_GCC) - result.append(Targets.DESKTOP_480_GCC) + result.append(Targets.DESKTOP_480_DEFAULT) if platform.system() in ("Linux", "Darwin"): result.append(Targets.EMBEDDED_LINUX) - elif platform.system() in ('Windows', 'Microsoft'): - result.append(Targets.DESKTOP_480_MSVC2010) result.extend([Targets.DESKTOP_521_DEFAULT, Targets.DESKTOP_531_DEFAULT]) if platform.system() != 'Darwin': result.append(Targets.DESKTOP_541_GCC) @@ -637,10 +634,8 @@ def __getSupportedPlatforms__(text, templateName, getAsStrings=False): result.append(Targets.SIMULATOR) elif 'Platform independent' in text: # MAEMO5 and HARMATTAN could be wrong here - depends on having Madde plugin enabled or not - result = [Targets.DESKTOP_474_GCC, Targets.DESKTOP_480_GCC, Targets.DESKTOP_521_DEFAULT, + result = [Targets.DESKTOP_474_GCC, Targets.DESKTOP_480_DEFAULT, Targets.DESKTOP_521_DEFAULT, Targets.DESKTOP_531_DEFAULT, Targets.MAEMO5, Targets.SIMULATOR, Targets.HARMATTAN] - if platform.system() in ('Windows', 'Microsoft'): - result.append(Targets.DESKTOP_480_MSVC2010) if platform.system() != 'Darwin': result.append(Targets.DESKTOP_541_GCC) else: diff --git a/tests/system/suite_QMLS/tst_QMLS03/test.py b/tests/system/suite_QMLS/tst_QMLS03/test.py index 58198655376..d8016ab34c3 100644 --- a/tests/system/suite_QMLS/tst_QMLS03/test.py +++ b/tests/system/suite_QMLS/tst_QMLS03/test.py @@ -83,7 +83,7 @@ def main(): if not startedWithoutPluginError(): return # open example project - openQmakeProject(examplePath, Targets.DESKTOP_480_GCC) + openQmakeProject(examplePath, Targets.DESKTOP_480_DEFAULT) # open qml file openDocument("propertyanimation.QML.qml.color-animation\\.qml") # get editor diff --git a/tests/system/suite_editors/tst_qml_editor/test.py b/tests/system/suite_editors/tst_qml_editor/test.py index d794973f1ec..d1afac43fe6 100644 --- a/tests/system/suite_editors/tst_qml_editor/test.py +++ b/tests/system/suite_editors/tst_qml_editor/test.py @@ -41,7 +41,7 @@ def main(): # add docs to have the correct tool tips addHelpDocumentation([os.path.join(sdkPath, "Documentation", "qt.qch")]) templateDir = prepareTemplate(sourceExample) - openQmakeProject(os.path.join(templateDir,proFile), Targets.DESKTOP_480_GCC) + openQmakeProject(os.path.join(templateDir, proFile), Targets.DESKTOP_480_DEFAULT) openDocument("focus.QML.qml.focus\\.qml") testRenameId() testFindUsages() diff --git a/tests/system/suite_general/tst_build_speedcrunch/test.py b/tests/system/suite_general/tst_build_speedcrunch/test.py index 6ee9b97115b..9578552a8ad 100644 --- a/tests/system/suite_general/tst_build_speedcrunch/test.py +++ b/tests/system/suite_general/tst_build_speedcrunch/test.py @@ -47,10 +47,7 @@ def main(): startApplication("qtcreator" + SettingsPath) if not startedWithoutPluginError(): return - suitableKits = Targets.DESKTOP_480_GCC - if platform.system() in ('Windows', 'Microsoft'): - suitableKits |= Targets.DESKTOP_480_MSVC2010 - checkedTargets = openQmakeProject(SpeedCrunchPath, suitableKits) + checkedTargets = openQmakeProject(SpeedCrunchPath, Targets.DESKTOP_480_DEFAULT) progressBarWait(30000) fancyToolButton = waitForObject(":*Qt Creator_Core::Internal::FancyToolButton") diff --git a/tests/system/suite_general/tst_openqt_creator/test.py b/tests/system/suite_general/tst_openqt_creator/test.py index adfd00fa89c..35697d2416f 100644 --- a/tests/system/suite_general/tst_openqt_creator/test.py +++ b/tests/system/suite_general/tst_openqt_creator/test.py @@ -40,7 +40,7 @@ def main(): if not startedWithoutPluginError(): return - openQmakeProject(pathSpeedcrunch, Targets.DESKTOP_480_GCC) + openQmakeProject(pathSpeedcrunch, Targets.DESKTOP_480_DEFAULT) # Wait for parsing to complete progressBarWait(30000) openQmakeProject(pathCreator, Targets.DESKTOP_531_DEFAULT) diff --git a/tests/system/suite_general/tst_session_handling/test.py b/tests/system/suite_general/tst_session_handling/test.py index fa20934c331..44a062b00dd 100644 --- a/tests/system/suite_general/tst_session_handling/test.py +++ b/tests/system/suite_general/tst_session_handling/test.py @@ -45,7 +45,7 @@ def main(): if canTestEmbeddedQtQuick(): checkWelcomePage(sessionName, True) for project in projects: - openQmakeProject(project, Targets.DESKTOP_480_GCC) + openQmakeProject(project, Targets.DESKTOP_480_DEFAULT) progressBarWait(20000) checkNavigator(68, "Verifying whether all projects have been opened.") openDocument("propertyanimation.QML.qml.color-animation\\.qml") diff --git a/tests/system/suite_qtquick/tst_qml_outline/test.py b/tests/system/suite_qtquick/tst_qml_outline/test.py index d92abe1a5bb..b6b65e3cc8a 100644 --- a/tests/system/suite_qtquick/tst_qml_outline/test.py +++ b/tests/system/suite_qtquick/tst_qml_outline/test.py @@ -43,7 +43,7 @@ def main(): startApplication("qtcreator" + SettingsPath) if not startedWithoutPluginError(): return - openQmakeProject(os.path.join(templateDir, proFile), Targets.DESKTOP_480_GCC) + openQmakeProject(os.path.join(templateDir, proFile), Targets.DESKTOP_480_DEFAULT) qmlFiles = ["focus.QML.qml.focus\\.qml", "focus.QML.qml.Core.ListMenu\\.qml"] checkOutlineFor(qmlFiles) testModify() diff --git a/tests/system/suite_qtquick/tst_qtquick_creation/test.py b/tests/system/suite_qtquick/tst_qtquick_creation/test.py index a2012948df5..3a3562c22f2 100644 --- a/tests/system/suite_qtquick/tst_qtquick_creation/test.py +++ b/tests/system/suite_qtquick/tst_qtquick_creation/test.py @@ -34,7 +34,7 @@ def main(): startApplication("qtcreator" + SettingsPath) if not startedWithoutPluginError(): return - for targ, qVer in [[Targets.DESKTOP_480_GCC, "1.1"], [Targets.DESKTOP_521_DEFAULT, "2.1"], + for targ, qVer in [[Targets.DESKTOP_480_DEFAULT, "1.1"], [Targets.DESKTOP_521_DEFAULT, "2.1"], [Targets.DESKTOP_521_DEFAULT, "2.2"], [Targets.DESKTOP_531_DEFAULT, "2.3"], [Targets.DESKTOP_521_DEFAULT, "Controls 1.0"], [Targets.DESKTOP_521_DEFAULT, "Controls 1.1"], [Targets.DESKTOP_531_DEFAULT, "Controls 1.2"]]: diff --git a/tests/system/suite_qtquick/tst_qtquick_creation4/test.py b/tests/system/suite_qtquick/tst_qtquick_creation4/test.py index 3f3570f4c34..129053abe60 100644 --- a/tests/system/suite_qtquick/tst_qtquick_creation4/test.py +++ b/tests/system/suite_qtquick/tst_qtquick_creation4/test.py @@ -34,7 +34,7 @@ def main(): startApplication("qtcreator" + SettingsPath) if not startedWithoutPluginError(): return - for targ, quickVer in [[Targets.DESKTOP_480_GCC, 1], [Targets.DESKTOP_521_DEFAULT, 2], + for targ, quickVer in [[Targets.DESKTOP_480_DEFAULT, 1], [Targets.DESKTOP_521_DEFAULT, 2], [Targets.DESKTOP_531_DEFAULT, 2]]: # using a temporary directory won't mess up a potentially existing createNewQmlExtension(tempDir(), targ, quickVer) From 00199039e723c57f66aa90e1ffcaf19f00e2efff Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 26 Mar 2015 13:03:38 +0100 Subject: [PATCH 03/25] Debugger: Fix display of expandable items in GDB and LLDB Move common code to dumper.py and debuggerengine.cpp and fix it there. Change-Id: I20d91d1aa7400fbdb27938c10cf40c8f6019df0a Reviewed-by: Christian Stenger --- share/qtcreator/debugger/dumper.py | 10 ++++ share/qtcreator/debugger/gdbbridge.py | 34 ++++-------- share/qtcreator/debugger/lldbbridge.py | 34 +++++------- src/plugins/debugger/debuggerengine.cpp | 70 +++++++++++++++++++++++- src/plugins/debugger/debuggerengine.h | 4 ++ src/plugins/debugger/gdb/gdbengine.cpp | 69 ++++------------------- src/plugins/debugger/gdb/gdbengine.h | 16 +----- src/plugins/debugger/lldb/lldbengine.cpp | 34 ++---------- src/plugins/debugger/lldb/lldbengine.h | 1 - src/plugins/debugger/watchhandler.h | 5 +- 10 files changed, 128 insertions(+), 149 deletions(-) diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py index 52e475e27f8..0326b0dcbcc 100644 --- a/share/qtcreator/debugger/dumper.py +++ b/share/qtcreator/debugger/dumper.py @@ -1650,6 +1650,16 @@ class DumperBase: pass return False, 0, 1, 1, exp + def putNumChild(self, numchild): + if numchild != self.currentChildNumChild: + self.put('numchild="%s",' % numchild) + + def handleWatches(self, args): + for watcher in args.get("watchers", []): + iname = watcher['iname'] + exp = self.hexdecode(watcher['exp']) + self.handleWatch(exp, exp, iname) + def handleWatch(self, origexp, exp, iname): exp = str(exp).strip() escapedExp = self.hexencode(exp) diff --git a/share/qtcreator/debugger/gdbbridge.py b/share/qtcreator/debugger/gdbbridge.py index ecc0e03d46f..e8f07d68f38 100644 --- a/share/qtcreator/debugger/gdbbridge.py +++ b/share/qtcreator/debugger/gdbbridge.py @@ -246,7 +246,6 @@ class Dumper(DumperBase): # dumpers causing loading of shared objects etc). self.currentQtNamespaceGuess = None - self.partialVariable = args.get("vars", "") self.resultVarName = args.get("resultvarname", "") self.expandedINames = set(args.get("expanded", [])) self.stringCutOff = int(args.get("stringcutoff", 10000)) @@ -264,17 +263,8 @@ class Dumper(DumperBase): self.partialUpdate = int(args.get("partial", "0")) self.fallbackQtVersion = 0x50200 #warn("NAMESPACE: '%s'" % self.qtNamespace()) - #warn("VARIABLES: %s" % self.varList) #warn("EXPANDED INAMES: %s" % self.expandedINames) #warn("WATCHERS: %s" % self.watchers) - #warn("PARTIAL: %s" % self.partialUpdate) - - def handleWatches(self): - with OutputSafer(self): - for watcher in self.watchers: - iname = watcher['iname'] - exp = self.hexdecode(watcher['exp']) - self.handleWatch(exp, exp, iname) def listOfLocals(self): frame = gdb.selected_frame() @@ -360,6 +350,9 @@ class Dumper(DumperBase): def showData(self, args): self.prepare(args) + partialVariable = args.get("partialVariable", "") + isPartial = len(partialVariable) > 0 + # # Locals # @@ -368,12 +361,9 @@ class Dumper(DumperBase): if self.qmlcontext: locals = self.extractQmlVariables(self.qmlcontext) - elif self.partialUpdate: - #warn("PARTIAL: %s" % self.varList) - parts = self.partialVariable.split('.') - #warn("PARTIAL PARTS: %s" % parts) + elif isPartial: + parts = partialVariable.split('.') name = parts[1] - #warn("PARTIAL VAR: %s" % name) item = self.LocalItem() item.iname = parts[0] + '.' + name item.name = name @@ -389,7 +379,6 @@ class Dumper(DumperBase): except: item.value = "" locals = [item] - #warn("PARTIAL LOCALS: %s" % locals) else: locals = self.listOfLocals() @@ -419,9 +408,8 @@ class Dumper(DumperBase): self.put('name="%s",' % item.name) self.putItem(value) - self.handleWatches() - - #print('data=[' + locals + sep + self.watchers + ']\n') + with OutputSafer(self): + self.handleWatches(args) self.output.append('],typeinfo=[') for name in self.typesToReport.keys(): @@ -439,6 +427,9 @@ class Dumper(DumperBase): if self.qtNamespaceToReport: self.output.append(',qtnamespace="%s"' % self.qtNamespaceToReport) self.qtNamespaceToReport = None + + self.output.append(',partial="%d"' % isPartial) + print(''.join(self.output)) def enterSubItem(self, item): @@ -823,11 +814,6 @@ class Dumper(DumperBase): except: pass - def putNumChild(self, numchild): - #warn("NUM CHILD: '%s' '%s'" % (numchild, self.currentChildNumChild)) - if numchild != self.currentChildNumChild: - self.put('numchild="%s",' % numchild) - def putSimpleValue(self, value, encoding = None, priority = 0): self.putValue(value, encoding, priority) diff --git a/share/qtcreator/debugger/lldbbridge.py b/share/qtcreator/debugger/lldbbridge.py index 85bb4c1c1a4..f8b1f930d9d 100644 --- a/share/qtcreator/debugger/lldbbridge.py +++ b/share/qtcreator/debugger/lldbbridge.py @@ -211,7 +211,7 @@ class Dumper(DumperBase): self.currentMaxNumChild = None self.currentPrintsAddress = None self.currentChildType = None - self.currentChildNumChild = None + self.currentChildNumChild = -1 self.currentWatchers = {} self.executable_ = None @@ -535,11 +535,6 @@ class Dumper(DumperBase): return True return self.isKnownMovableType(self.stripNamespaceFromType(type.GetName())) - def putNumChild(self, numchild): - #self.warn("NUM CHILD: '%s' '%s'" % (numchild, self.currentChildNumChild)) - #if numchild != self.currentChildNumChild: - self.put('numchild="%s",' % numchild) - def putPointerValue(self, value): # Use a lower priority if value is None: @@ -1138,18 +1133,26 @@ class Dumper(DumperBase): self.reportVariablesHelper(args) sys.stdout.write("@\n") - def reportVariablesHelper(self, _ = None): + def reportVariablesHelper(self, args = None): frame = self.currentFrame() if frame is None: return + + partialVariable = args.get("partialVariable", "") + isPartial = len(partialVariable) > 0 + self.currentIName = 'local' - self.put('data=[') + self.put('all={data=[') self.anonNumber = 0 shadowed = {} ids = {} # Filter out duplicates entries at the same address. - values = list(frame.GetVariables(True, True, False, False)) - values.reverse() # To get shadowed vars numbered backwards. + if isPartial: + values = [frame.FindVariable(partialVariable)] + else: + values = list(frame.GetVariables(True, True, False, False)) + values.reverse() # To get shadowed vars numbered backwards. + for value in values: if not value.IsValid(): continue @@ -1198,16 +1201,9 @@ class Dumper(DumperBase): self.putEmptyValue() self.putNumChild(0) - # 'watchers':[{'id':'watch.0','exp':'23'},...] - #if not self.dummyValue is None: - for watcher in self.currentWatchers: - iname = watcher['iname'] - # could be 'watch.0' or 'tooltip.deadbead' - (base, component) = iname.split('.') - exp = self.hexdecode(watcher['exp']) - self.handleWatch(exp, exp, iname) + self.handleWatches(args) - self.put(']') + self.put('],partial="%d"}' % isPartial) def reportData(self, _ = None): if self.process is None: diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp index 8c7989bd72c..b2d028c23d3 100644 --- a/src/plugins/debugger/debuggerengine.cpp +++ b/src/plugins/debugger/debuggerengine.cpp @@ -40,8 +40,10 @@ #include "breakhandler.h" #include "disassembleragent.h" +#include "logwindow.h" #include "memoryagent.h" #include "moduleshandler.h" +#include "gdb/gdbengine.h" // REMOVE #include "registerhandler.h" #include "sourcefileshandler.h" #include "stackhandler.h" @@ -153,6 +155,12 @@ enum RemoteSetupState { RemoteSetupNone, RemoteSetupRequested, RemoteSetupSucceeded, RemoteSetupFailed, RemoteSetupCancelled }; +struct TypeInfo +{ + TypeInfo(uint s = 0) : size(s) {} + uint size; +}; + class DebuggerEnginePrivate : public QObject { Q_OBJECT @@ -323,6 +331,8 @@ public: bool m_isStateDebugging; Utils::FileInProjectFinder m_fileFinder; + QHash m_typeInfoCache; + QByteArray m_qtNamespace; }; @@ -1514,7 +1524,12 @@ bool DebuggerEngine::isSynchronous() const QByteArray DebuggerEngine::qtNamespace() const { - return QByteArray(); + return d->m_qtNamespace; +} + +void DebuggerEngine::setQtNamespace(const QByteArray &ns) +{ + d->m_qtNamespace = ns; } void DebuggerEngine::createSnapshot() @@ -1908,6 +1923,59 @@ void DebuggerEngine::validateExecutable(DebuggerStartParameters *sp) } } +void DebuggerEngine::updateLocalsView(const GdbMi &all) +{ + WatchHandler *handler = watchHandler(); + + const bool partial = all["partial"].toInt(); + + const GdbMi typeInfo = all["typeinfo"]; + if (typeInfo.type() == GdbMi::List) { + foreach (const GdbMi &s, typeInfo.children()) { + const GdbMi name = s["name"]; + const GdbMi size = s["size"]; + if (name.isValid() && size.isValid()) + d->m_typeInfoCache.insert(QByteArray::fromHex(name.data()), + TypeInfo(size.data().toUInt())); + } + } + + QSet toDelete; + if (!partial) { + foreach (WatchItem *item, handler->model()->treeLevelItems(2)) + toDelete.insert(item->iname); + } + + GdbMi data = all["data"]; + foreach (const GdbMi &child, data.children()) { + WatchItem *item = new WatchItem(child); + const TypeInfo ti = d->m_typeInfoCache.value(item->type); + if (ti.size) + item->size = ti.size; + + handler->insertItem(item); + toDelete.remove(item->iname); + } + + GdbMi ns = all["qtnamespace"]; + if (ns.isValid()) { + setQtNamespace(ns.data()); + showMessage(_("FOUND NAMESPACED QT: " + ns.data())); + } + + handler->purgeOutdatedItems(toDelete); + + static int count = 0; + showMessage(_("") + .arg(++count).arg(LogWindow::logTimeStamp()), LogMiscInput); + showStatusMessage(GdbEngine::tr("Finished retrieving data"), 400); // FIXME: String + + DebuggerToolTipManager::updateEngine(this); + + if (!partial) + emit stackFrameCompleted(); +} + } // namespace Internal } // namespace Debugger diff --git a/src/plugins/debugger/debuggerengine.h b/src/plugins/debugger/debuggerengine.h index fb11e6553bf..33b943e6cc6 100644 --- a/src/plugins/debugger/debuggerengine.h +++ b/src/plugins/debugger/debuggerengine.h @@ -60,6 +60,7 @@ namespace Internal { class DebuggerEnginePrivate; class DebuggerPluginPrivate; class DisassemblerAgent; +class GdbMi; class MemoryAgent; class WatchData; class WatchItem; @@ -185,6 +186,7 @@ public: virtual bool isSynchronous() const; virtual QByteArray qtNamespace() const; + void setQtNamespace(const QByteArray &ns); virtual void createSnapshot(); virtual void updateAll(); @@ -374,6 +376,8 @@ protected: virtual void slaveEngineStateChanged(DebuggerEngine *engine, DebuggerState state); + void updateLocalsView(const GdbMi &all); + private: // Wrapper engine needs access to state of its subengines. friend class QmlCppEngine; diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index fa6810d8400..f2f683454d3 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -3705,9 +3705,8 @@ bool GdbEngine::setToolTipExpression(const DebuggerToolTipContext &context) return false; UpdateParameters params; - params.tryPartial = true; - params.varList = context.iname; - updateLocalsPython(params); + params.partialVariable = context.iname; + doUpdateLocals(params); return true; } @@ -3727,9 +3726,8 @@ void GdbEngine::reloadLocals() void GdbEngine::updateWatchItem(WatchItem *item) { UpdateParameters params; - params.tryPartial = m_pendingBreakpointRequests == 0; - params.varList = item->iname; - updateLocalsPython(params); + params.partialVariable = item->iname; + doUpdateLocals(params); } void GdbEngine::handleVarAssign(const DebuggerResponse &) @@ -3743,7 +3741,7 @@ void GdbEngine::updateLocals() { watchHandler()->resetValueCache(); watchHandler()->notifyUpdateStarted(); - updateLocalsPython(UpdateParameters()); + doUpdateLocals(UpdateParameters()); } void GdbEngine::assignValueInDebugger(WatchItem *item, @@ -4696,7 +4694,7 @@ void addGdbOptionPages(QList *opts) opts->push_back(new GdbOptionsPage2()); } -void GdbEngine::updateLocalsPython(const UpdateParameters ¶ms) +void GdbEngine::doUpdateLocals(const UpdateParameters ¶ms) { m_pendingBreakpointRequests = 0; @@ -4734,7 +4732,6 @@ void GdbEngine::updateLocalsPython(const UpdateParameters ¶ms) cmd.arg("autoderef", boolSetting(AutoDerefPointers)); cmd.arg("dyntype", boolSetting(UseDynamicType)); cmd.arg("nativemixed", isNativeMixedActive()); - cmd.arg("partial", params.tryPartial); if (isNativeMixedActive()) { StackFrame frame = stackHandler()->currentFrame(); @@ -4743,16 +4740,16 @@ void GdbEngine::updateLocalsPython(const UpdateParameters ¶ms) } cmd.arg("resultvarname", m_resultVarName); - cmd.arg("vars", params.varList); + cmd.arg("partialVariable", params.partialVariable); cmd.flags = Discardable; - cmd.callback = [this, params](const DebuggerResponse &r) { handleStackFramePython(r, params.tryPartial); }; + cmd.callback = [this, params](const DebuggerResponse &r) { handleStackFramePython(r); }; runCommand(cmd); cmd.arg("passExceptions", true); m_lastDebuggableCommand = cmd; } -void GdbEngine::handleStackFramePython(const DebuggerResponse &response, bool partial) +void GdbEngine::handleStackFramePython(const DebuggerResponse &response) { watchHandler()->notifyUpdateFinished(); if (response.resultClass == ResultDone) { @@ -4767,54 +4764,8 @@ void GdbEngine::handleStackFramePython(const DebuggerResponse &response, bool pa } GdbMi all; all.fromStringMultiple(out); - GdbMi data = all["data"]; - GdbMi ns = all["qtnamespace"]; - if (ns.isValid()) { - setQtNamespace(ns.data()); - showMessage(_("FOUND NAMESPACED QT: " + ns.data())); - } - - WatchHandler *handler = watchHandler(); - - const GdbMi typeInfo = all["typeinfo"]; - if (typeInfo.type() == GdbMi::List) { - foreach (const GdbMi &s, typeInfo.children()) { - const GdbMi name = s["name"]; - const GdbMi size = s["size"]; - if (name.isValid() && size.isValid()) - m_typeInfoCache.insert(QByteArray::fromHex(name.data()), - TypeInfo(size.data().toUInt())); - } - } - - QSet toDelete; - if (!partial) { - foreach (WatchItem *item, handler->model()->treeLevelItems(2)) - toDelete.insert(item->iname); - } - - foreach (const GdbMi &child, data.children()) { - WatchItem *item = new WatchItem(child); - const TypeInfo ti = m_typeInfoCache.value(item->type); - if (ti.size) - item->size = ti.size; - - handler->insertItem(item); - toDelete.remove(item->iname); - } - - handler->purgeOutdatedItems(toDelete); - - static int count = 0; - showMessage(_("") - .arg(++count).arg(LogWindow::logTimeStamp()), LogMiscInput); - showStatusMessage(tr("Finished retrieving data"), 400); - - DebuggerToolTipManager::updateEngine(this); - - if (!partial) - emit stackFrameCompleted(); + updateLocalsView(all); } else { showMessage(_("DUMPER FAILED: " + response.toString())); diff --git a/src/plugins/debugger/gdb/gdbengine.h b/src/plugins/debugger/gdb/gdbengine.h index dff3c80d3ef..6c079805856 100644 --- a/src/plugins/debugger/gdb/gdbengine.h +++ b/src/plugins/debugger/gdb/gdbengine.h @@ -87,8 +87,6 @@ private: ////////// General Interface ////////// virtual bool acceptsDebuggerCommands() const; virtual void executeDebuggerCommand(const QString &command, DebuggerLanguages languages); - virtual QByteArray qtNamespace() const { return m_qtNamespace; } - virtual void setQtNamespace(const QByteArray &ns) { m_qtNamespace = ns; } private: ////////// General State ////////// @@ -409,26 +407,16 @@ protected: void handleCreateFullBacktrace(const DebuggerResponse &response); void updateLocals(); - void updateLocalsPython(const UpdateParameters ¶meters); - void handleStackFramePython(const DebuggerResponse &response, bool partial); + void doUpdateLocals(const UpdateParameters ¶meters); + void handleStackFramePython(const DebuggerResponse &response); void setLocals(const QList &locals); - struct TypeInfo - { - TypeInfo(uint s = 0) : size(s) {} - - uint size; - }; - - QHash m_typeInfoCache; - // // Dumper Management // void reloadDebuggingHelpers(); - QByteArray m_qtNamespace; QString m_gdb; // diff --git a/src/plugins/debugger/lldb/lldbengine.cpp b/src/plugins/debugger/lldb/lldbengine.cpp index 795b1f77662..7362a242117 100644 --- a/src/plugins/debugger/lldb/lldbengine.cpp +++ b/src/plugins/debugger/lldb/lldbengine.cpp @@ -445,9 +445,10 @@ void LldbEngine::handleResponse(const QByteArray &response) foreach (const GdbMi &item, all.children()) { const QByteArray name = item.name(); - if (name == "data") - refreshLocals(item); - else if (name == "dumpers") { + if (name == "all") { + watchHandler()->notifyUpdateFinished(); + updateLocalsView(item); + } else if (name == "dumpers") { watchHandler()->addDumpers(item); setupInferiorStage2(); } else if (name == "stack") @@ -821,8 +822,7 @@ bool LldbEngine::setToolTipExpression(const DebuggerToolTipContext &context) } UpdateParameters params; - params.tryPartial = true; - params.varList = context.iname; + params.partialVariable = context.iname; doUpdateLocals(params); return true; @@ -893,7 +893,7 @@ void LldbEngine::doUpdateLocals(UpdateParameters params) cmd.arg("fancy", boolSetting(UseDebuggingHelpers)); cmd.arg("autoderef", boolSetting(AutoDerefPointers)); cmd.arg("dyntype", boolSetting(UseDynamicType)); - cmd.arg("partial", params.tryPartial); + cmd.arg("partialVariable", params.partialVariable); cmd.beginList("watchers"); @@ -1004,28 +1004,6 @@ void LldbEngine::readLldbStandardOutput() } } -void LldbEngine::refreshLocals(const GdbMi &vars) -{ - //const bool partial = response.cookie.toBool(); - WatchHandler *handler = watchHandler(); - handler->resetValueCache(); - - QSet toDelete; - foreach (WatchItem *item, handler->model()->treeLevelItems(2)) - toDelete.insert(item->iname); - - foreach (const GdbMi &child, vars.children()) { - WatchItem *item = new WatchItem(child); - handler->insertItem(item); - toDelete.remove(item->iname); - } - - handler->purgeOutdatedItems(toDelete); - handler->notifyUpdateFinished(); - - DebuggerToolTipManager::updateEngine(this); - } - void LldbEngine::refreshStack(const GdbMi &stack) { StackHandler *handler = stackHandler(); diff --git a/src/plugins/debugger/lldb/lldbengine.h b/src/plugins/debugger/lldb/lldbengine.h index a72e5157db2..f334d218eb1 100644 --- a/src/plugins/debugger/lldb/lldbengine.h +++ b/src/plugins/debugger/lldb/lldbengine.h @@ -151,7 +151,6 @@ private: void refreshCurrentThread(const GdbMi &data); void refreshStack(const GdbMi &stack); void refreshRegisters(const GdbMi ®isters); - void refreshLocals(const GdbMi &vars); void refreshTypeInfo(const GdbMi &typeInfo); void refreshState(const GdbMi &state); void refreshLocation(const GdbMi &location); diff --git a/src/plugins/debugger/watchhandler.h b/src/plugins/debugger/watchhandler.h index 5f7a6cb128e..0d9f53abec3 100644 --- a/src/plugins/debugger/watchhandler.h +++ b/src/plugins/debugger/watchhandler.h @@ -128,10 +128,9 @@ private: class UpdateParameters { public: - UpdateParameters() { tryPartial = false; } + UpdateParameters() {} - bool tryPartial; - QByteArray varList; + QByteArray partialVariable; }; class WatchModelBase : public Utils::TreeModel From cc469f6466c82e34d0ceeaa6c72d4e4a8b86ad7c Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 26 Mar 2015 14:22:33 +0100 Subject: [PATCH 04/25] Debugger: Robustify extraction of integral values using LLDB Change-Id: Ieabad21e5e00bef12eb51046235890840b5a77a1 Reviewed-by: Christian Stenger --- share/qtcreator/debugger/lldbbridge.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/share/qtcreator/debugger/lldbbridge.py b/share/qtcreator/debugger/lldbbridge.py index f8b1f930d9d..c11464152bd 100644 --- a/share/qtcreator/debugger/lldbbridge.py +++ b/share/qtcreator/debugger/lldbbridge.py @@ -509,13 +509,16 @@ class Dumper(DumperBase): return int(value.GetLoadAddress()) def extractInt(self, address): - return int(self.createValue(address, self.intType())) + error = SBError() + return int(self.process.ReadUnsignedFromMemory(address, 4, error)) def extractInt64(self, address): - return int(self.createValue(address, self.int64Type())) + error = SBError() + return int(self.process.ReadUnsignedFromMemory(address, 8, error)) def extractByte(self, address): - return int(self.createValue(address, self.charType())) & 0xFF + error = SBError() + return int(self.process.ReadUnsignedFromMemory(address, 1, error) & 0xFF) def handleCommand(self, command): result = lldb.SBCommandReturnObject() From 008def4f36f3638ff0c63ca4c5bb81bf8c8a1603 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 10 Mar 2015 16:41:59 +0100 Subject: [PATCH 05/25] QbsProjectManager: Assign types to source files. At the moment, all source files get the type "unknown", so certain code in other plugins that looks for e.g. Qt resource files never finds any. Task-number: QBS-762 Change-Id: I71b798980b7ca318f2b4e7871148ba72703f8d83 Reviewed-by: Jake Petroules Reviewed-by: Joerg Bornemann --- src/plugins/qbsprojectmanager/qbsnodes.cpp | 43 ++++++++++++++++---- src/plugins/qbsprojectmanager/qbsnodes.h | 9 ++-- src/plugins/qbsprojectmanager/qbsproject.cpp | 25 +++++++++++- src/plugins/qbsprojectmanager/qbsproject.h | 3 ++ 4 files changed, 66 insertions(+), 14 deletions(-) diff --git a/src/plugins/qbsprojectmanager/qbsnodes.cpp b/src/plugins/qbsprojectmanager/qbsnodes.cpp index 3d4c3ccd87d..f14d9956df4 100644 --- a/src/plugins/qbsprojectmanager/qbsnodes.cpp +++ b/src/plugins/qbsprojectmanager/qbsnodes.cpp @@ -39,6 +39,7 @@ #include #include #include +#include #include #include @@ -462,14 +463,14 @@ void QbsGroupNode::updateQbsGroupData(const qbs::GroupData &grp, const QString & idx->setPathAndLine(Utils::FileName::fromString(grp.location().filePath()), grp.location().line()); - setupFiles(this, grp.allFilePaths(), productPath, updateExisting); + setupFiles(this, grp, grp.allFilePaths(), productPath, updateExisting); if (updateExisting) emitNodeUpdated(); } -void QbsGroupNode::setupFiles(ProjectExplorer::FolderNode *root, const QStringList &files, - const QString &productPath, bool updateExisting) +void QbsGroupNode::setupFiles(ProjectExplorer::FolderNode *root, const qbs::GroupData &group, + const QStringList &files, const QString &productPath, bool updateExisting) { // Build up a tree of nodes: FileTreeNode tree; @@ -487,10 +488,10 @@ void QbsGroupNode::setupFiles(ProjectExplorer::FolderNode *root, const QStringLi FileTreeNode::reorder(&tree, productPath); FileTreeNode::simplify(&tree); - setupFolder(root, &tree, productPath, updateExisting); + setupFolder(root, group, &tree, productPath, updateExisting); } -void QbsGroupNode::setupFolder(ProjectExplorer::FolderNode *root, +void QbsGroupNode::setupFolder(ProjectExplorer::FolderNode *root, const qbs::GroupData &group, const FileTreeNode *fileTree, const QString &baseDir, bool updateExisting) { @@ -531,7 +532,7 @@ void QbsGroupNode::setupFolder(ProjectExplorer::FolderNode *root, if (updateExisting) fn->emitNodeUpdated(); } else { - fn = new ProjectExplorer::FileNode(path, ProjectExplorer::UnknownFileType, false); + fn = new ProjectExplorer::FileNode(path, fileType(group, c->path()), false); filesToAdd.append(fn); } continue; @@ -556,7 +557,7 @@ void QbsGroupNode::setupFolder(ProjectExplorer::FolderNode *root, fn->setDisplayName(displayNameFromPath(c->path(), baseDir)); } - setupFolder(fn, c, c->path(), updateExisting); + setupFolder(fn, group, c, c->path(), updateExisting); } } root->removeFileNodes(filesToRemove); @@ -564,6 +565,29 @@ void QbsGroupNode::setupFolder(ProjectExplorer::FolderNode *root, root->addFileNodes(filesToAdd); } +ProjectExplorer::FileType QbsGroupNode::fileType(const qbs::GroupData &group, + const QString &filePath) +{ + if (!group.isValid()) + return ProjectExplorer::UnknownFileType; + const qbs::SourceArtifact artifact = Utils::findOrDefault(group.allSourceArtifacts(), + [filePath](const qbs::SourceArtifact &sa) { return sa.filePath() == filePath; }); + QTC_ASSERT(artifact.isValid(), return ProjectExplorer::UnknownFileType); + if (artifact.fileTags().contains(QLatin1String("c")) + || artifact.fileTags().contains(QLatin1String("cpp")) + || artifact.fileTags().contains(QLatin1String("objc")) + || artifact.fileTags().contains(QLatin1String("objcpp"))) { + return ProjectExplorer::SourceType; + } + if (artifact.fileTags().contains(QLatin1String("hpp"))) + return ProjectExplorer::HeaderType; + if (artifact.fileTags().contains(QLatin1String("qrc"))) + return ProjectExplorer::ResourceType; + if (artifact.fileTags().contains(QLatin1String("ui"))) + return ProjectExplorer::FormType; + return ProjectExplorer::UnknownFileType; +} + // -------------------------------------------------------------------- // QbsProductNode: // -------------------------------------------------------------------- @@ -682,7 +706,7 @@ void QbsProductNode::setQbsProductData(const qbs::Project &project, const qbs::P foreach (const qbs::GroupData &grp, prd.groups()) { if (grp.name() == prd.name() && grp.location() == prd.location()) { // Set implicit product group right onto this node: - QbsGroupNode::setupFiles(this, grp.allFilePaths(), productPath, updateExisting); + QbsGroupNode::setupFiles(this, grp, grp.allFilePaths(), productPath, updateExisting); continue; } QbsGroupNode *gn = findGroupNode(grp.name()); @@ -855,7 +879,8 @@ void QbsRootProjectNode::update() if (Utils::FileName::fromString(f).isChildOf(base)) projectBuildSystemFiles.append(f); } - QbsGroupNode::setupFiles(m_buildSystemFiles, projectBuildSystemFiles, base.toString(), false); + QbsGroupNode::setupFiles(m_buildSystemFiles, qbs::GroupData(), projectBuildSystemFiles, + base.toString(), false); update(m_project->qbsProject(), m_project->qbsProjectData()); } diff --git a/src/plugins/qbsprojectmanager/qbsnodes.h b/src/plugins/qbsprojectmanager/qbsnodes.h index f705495cced..fe30597800d 100644 --- a/src/plugins/qbsprojectmanager/qbsnodes.h +++ b/src/plugins/qbsprojectmanager/qbsnodes.h @@ -108,12 +108,15 @@ public: QString productPath() const; - static void setupFiles(FolderNode *root, const QStringList &files, + // group can be invalid + static void setupFiles(FolderNode *root, const qbs::GroupData &group, const QStringList &files, const QString &productPath, bool updateExisting); private: - static void setupFolder(ProjectExplorer::FolderNode *folder, - const FileTreeNode *subFileTree, const QString &baseDir, bool updateExisting); + static void setupFolder(ProjectExplorer::FolderNode *folder, const qbs::GroupData &group, + const FileTreeNode *subFileTree, const QString &baseDir, bool updateExisting); + static ProjectExplorer::FileType fileType(const qbs::GroupData &group, const QString &filePath); + qbs::GroupData m_qbsGroupData; QString m_productPath; diff --git a/src/plugins/qbsprojectmanager/qbsproject.cpp b/src/plugins/qbsprojectmanager/qbsproject.cpp index 6dc7a181e09..07da504eef4 100644 --- a/src/plugins/qbsprojectmanager/qbsproject.cpp +++ b/src/plugins/qbsprojectmanager/qbsproject.cpp @@ -254,6 +254,25 @@ bool QbsProject::ensureWriteableQbsFile(const QString &file) return true; } +qbs::GroupData QbsProject::reRetrieveGroupData(const qbs::ProductData &oldProduct, + const qbs::GroupData &oldGroup) +{ + qbs::GroupData newGroup; + foreach (const qbs::ProductData &pd, m_projectData.allProducts()) { + if (uniqueProductName(pd) == uniqueProductName(oldProduct)) { + foreach (const qbs::GroupData &gd, pd.groups()) { + if (gd.location() == oldGroup.location()) { + newGroup = gd; + break; + } + } + break; + } + } + QTC_CHECK(newGroup.isValid()); + return newGroup; +} + bool QbsProject::addFilesToProduct(QbsBaseProjectNode *node, const QStringList &filePaths, const qbs::ProductData &productData, const qbs::GroupData &groupData, QStringList *notAdded) { @@ -273,7 +292,8 @@ bool QbsProject::addFilesToProduct(QbsBaseProjectNode *node, const QStringList & } if (notAdded->count() != filePaths.count()) { m_projectData = m_qbsProject.projectData(); - QbsGroupNode::setupFiles(node, allPaths, QFileInfo(productFilePath).absolutePath(), true); + QbsGroupNode::setupFiles(node, reRetrieveGroupData(productData, groupData), + allPaths, QFileInfo(productFilePath).absolutePath(), true); m_rootProjectNode->update(); } return notAdded->isEmpty(); @@ -300,7 +320,8 @@ bool QbsProject::removeFilesFromProduct(QbsBaseProjectNode *node, const QStringL } if (notRemoved->count() != filePaths.count()) { m_projectData = m_qbsProject.projectData(); - QbsGroupNode::setupFiles(node, allPaths, QFileInfo(productFilePath).absolutePath(), true); + QbsGroupNode::setupFiles(node, reRetrieveGroupData(productData, groupData), allPaths, + QFileInfo(productFilePath).absolutePath(), true); m_rootProjectNode->update(); } return notRemoved->isEmpty(); diff --git a/src/plugins/qbsprojectmanager/qbsproject.h b/src/plugins/qbsprojectmanager/qbsproject.h index b0fb7ad959d..67ccbfc6f4f 100644 --- a/src/plugins/qbsprojectmanager/qbsproject.h +++ b/src/plugins/qbsprojectmanager/qbsproject.h @@ -144,6 +144,9 @@ private: static bool ensureWriteableQbsFile(const QString &file); + qbs::GroupData reRetrieveGroupData(const qbs::ProductData &oldProduct, + const qbs::GroupData &oldGroup); + QbsManager *const m_manager; const QString m_projectName; const QString m_fileName; From 179d4aea67c4ec0e4d75508c37b65fec48aff0ba Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Thu, 26 Mar 2015 19:48:06 +0200 Subject: [PATCH 06/25] Dumper: Add a dumper for CPlusPlus::QualifiedNameId Change-Id: Iba05dafcbeda45b54fb09c4800ab0bd634e6fe0d Reviewed-by: hjk --- share/qtcreator/debugger/creatortypes.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/share/qtcreator/debugger/creatortypes.py b/share/qtcreator/debugger/creatortypes.py index 13123e063d1..f1c996f24df 100644 --- a/share/qtcreator/debugger/creatortypes.py +++ b/share/qtcreator/debugger/creatortypes.py @@ -131,6 +131,10 @@ def qdump__CPlusPlus__TemplateNameId(d, value): d.putBetterType(value.type) d.putPlainChildren(value) +def qdump__CPlusPlus__QualifiedNameId(d, value): + dumpLiteral(d, value) + d.putPlainChildren(value) + def qdump__CPlusPlus__Literal(d, value): dumpLiteral(d, value) d.putPlainChildren(value) From b0977f83221ccab63dfbe083a3683d9cea9f3137 Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 26 Mar 2015 16:59:51 +0100 Subject: [PATCH 07/25] Debugger: Don't update watch view needlessly Column width computation is not cheap. Change-Id: I615e1f9888f32171c478bfa2be565a91d669e8a2 Reviewed-by: hjk --- src/plugins/debugger/debuggerplugin.cpp | 1 - src/plugins/debugger/watchhandler.cpp | 3 ++- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index c9d2d71a4bd..ab39164e620 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -1947,7 +1947,6 @@ void DebuggerPluginPrivate::updateState(DebuggerEngine *engine) QTC_ASSERT(!engine->isSlaveEngine(), return); m_threadBox->setCurrentIndex(engine->threadsHandler()->currentThreadIndex()); - engine->watchHandler()->updateWatchersWindow(); const DebuggerState state = engine->state(); //showMessage(QString::fromLatin1("PLUGIN SET STATE: ") diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp index 26b9550217e..973bab20ead 100644 --- a/src/plugins/debugger/watchhandler.cpp +++ b/src/plugins/debugger/watchhandler.cpp @@ -877,7 +877,8 @@ bool WatchModel::setData(const QModelIndex &idx, const QVariant &value, int role } else { m_expandedINames.remove(item->iname); } - emit columnAdjustmentRequested(); + if (item->iname.contains('.')) + emit columnAdjustmentRequested(); break; case LocalsTypeFormatRole: From d920ed9115cea9561070fbaf08e85a4660ea8d85 Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 26 Mar 2015 17:24:04 +0100 Subject: [PATCH 08/25] Debugger: Fix QmlInspector column width Task-number: QTCREATORBUG-14192 Change-Id: Ic462bbcf07dc3c683b86e65628bae7ac8ac9249a Reviewed-by: hjk --- src/plugins/debugger/qml/qmlinspectoragent.cpp | 1 + src/plugins/debugger/watchhandler.cpp | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/debugger/qml/qmlinspectoragent.cpp b/src/plugins/debugger/qml/qmlinspectoragent.cpp index ece99ccb761..2a4dc61478f 100644 --- a/src/plugins/debugger/qml/qmlinspectoragent.cpp +++ b/src/plugins/debugger/qml/qmlinspectoragent.cpp @@ -685,6 +685,7 @@ void QmlInspectorAgent::insertObjectInTree(const ObjectReference &object) m_debuggerEngine->watchHandler()->setCurrentItem(iname); m_objectToSelect = -1; } + m_debuggerEngine->watchHandler()->updateWatchersWindow(); } void QmlInspectorAgent::buildDebugIdHashRecursive(const ObjectReference &ref) diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp index 973bab20ead..7b1bd7a6dca 100644 --- a/src/plugins/debugger/watchhandler.cpp +++ b/src/plugins/debugger/watchhandler.cpp @@ -1200,7 +1200,6 @@ void WatchModel::reexpandItems() void WatchHandler::removeAllData(bool includeInspectData) { m_model->reinitialize(includeInspectData); - updateWatchersWindow(); } void WatchHandler::resetValueCache() From c1b12d872b3815b1a19ecd05b1b2c43384223f2a Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Fri, 27 Mar 2015 12:47:54 +0100 Subject: [PATCH 09/25] Doc: editing Qbs profiles Change-Id: I3e5381ea9f03e4f13ce1f26a9467bd1f6b0a4e55 Reviewed-by: Joerg Bornemann --- doc/images/qtcreator-options-qbs.png | Bin 0 -> 21989 bytes doc/src/projects/creator-projects-qbs.qdoc | 28 +++++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 doc/images/qtcreator-options-qbs.png diff --git a/doc/images/qtcreator-options-qbs.png b/doc/images/qtcreator-options-qbs.png new file mode 100644 index 0000000000000000000000000000000000000000..48065a1ae8c91e4bdbd8aaace567aff8d1eac722 GIT binary patch literal 21989 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 \uicontrol Options > \uicontrol Qbs. + + \li In the \uicontrol Kit field, select a build and run kit. + + \li Select \uicontrol Edit to edit the profile associated with the kit. + + \li Select \uicontrol Add to add keys and values to the profile. + Spefify keys as: \c .. Specify the + values as JSON literals. + + \endlist + + For a list of available keys and values, see the + \l{http://doc.qt.io/qbs/list-of-modules.html}{List of Modules} in the + Qbs Manual. */ From 8fbe192124a477ffda471ee6f9377ad49cdb1d90 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Wed, 18 Mar 2015 13:20:48 +0100 Subject: [PATCH 10/25] Doc: update instructions for bare metal devices Update screenshots. Change-Id: Ic45b1e1223a17d0c9b455279bc35f2aedde854d4 Reviewed-by: Denis Shienkov Reviewed-by: Leena Miettinen --- doc/images/creator-baremetal-device.png | Bin 34104 -> 27982 bytes .../creator-baremetal-kit-for-project.png | Bin 0 -> 26919 bytes doc/images/creator-baremetal-kits.png | Bin 54214 -> 36424 bytes doc/src/baremetal/creator-baremetal-dev.qdoc | 77 ++++++++++++++---- 4 files changed, 60 insertions(+), 17 deletions(-) create mode 100644 doc/images/creator-baremetal-kit-for-project.png diff --git a/doc/images/creator-baremetal-device.png b/doc/images/creator-baremetal-device.png index fe0df6431a4f0274bc56ba1b8b4528712772c0db..f6f7caebbc2307fd2e2ea979359207a9b7216b39 100644 GIT binary patch literal 27982 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 literal 34104 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

tsorsUXS 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 XE7$(z1j{%E1_lOCS3j3^P6 \uicontrol Options > + \uicontrol {Bare Metal} > \uicontrol Add > \uicontrol Default, + \uicontrol OpenCD, or \uicontrol {ST-LINK Utility} to specify + connections to GDB servers or hardware debuggers: + + \image creator-baremetal-device.png "Bare Metal options" + + \list 1 + + \li In the \uicontrol {Startup mode} field, select the mode to + start the GDB server or debugger in. The available modes + depend on the server or debugger. + + \li In the \uicontrol Host field, select the host name and port + number to connect to the GDB server or hardware debugger. + + \li In the \uicontrol {Init commands} field, enter the commands + to execute when initializing the connection. + + \li In the \uicontrol {Reset commands} field, enter the commands + to execute when resetting the connection. + + \li Select \uicontrol Apply to add the GDB server or debugger. + + \endlist + \li Select \uicontrol Tools > \uicontrol Options > \uicontrol Devices > \uicontrol Add > - \uicontrol {Bare Metal Device} > \uicontrol {Start Wizard}. + \uicontrol {Bare Metal Device} > \uicontrol {Start Wizard}: - \li In the \uicontrol {GDB host} and \uicontrol {GDB port} fields, specify the host - name and port number to access the GDB server or hardware debugger. + \list 1 - \li In the \uicontrol {GDB commands} fields, specify custom commands for the - GDB server or hardware debugger. + \li In the \uicontrol {GDB server provider} field, select a + GDB server or hardware debugger. - \li To specify build settings: + \li Select \uicontrol Apply to add the device. - \list 1 + \endlist - \li Open a project for an application you want to develop for the - device. + \li Select \uicontrol Tools > \uicontrol Options > + \uicontrol {Build & Run} > \uicontrol Kits > \uicontrol Add to add a + kit for building and running applications on bare metal devices: - \li Select \uicontrol Projects > \uicontrol {Build & Run} > \uicontrol {Add Kit} to - add a kit for building and running applications on bare metal - devices. + \image creator-baremetal-kits.png "Bare Metal Device kits" - \image creator-baremetal-kits.png "Bare Metal Device kits" + \list 1 - \endlist + \li In the \uicontrol Name field, specify a name for the kit. + + \li In the \uicontrol {Device type} field, select + \uicontrol {Bare Metal Device}. + + \li In the \uicontrol Device field, select the bare metal device + for the kit. + + \li Select \uicontrol Apply to add the kit. + + \endlist + + \li Open a project for an application you want to develop for the + device. + + \li Select \uicontrol Projects > \uicontrol {Build & Run} > + \uicontrol {Add Kit}, and then select the kit for building and + running the application on the bare metal device specified in the + kit. + + \image creator-baremetal-kit-for-project.png "Adding a bare metal kit for a project" \li Select \uicontrol Run to specify run settings. From f08af0d6dbe7688c6ce4fedbc83f2726e1b6e1c8 Mon Sep 17 00:00:00 2001 From: hjk Date: Fri, 27 Mar 2015 13:52:10 +0100 Subject: [PATCH 11/25] Utils: Don't filter HistoryLineEdit popup ... and make the list accessible on even if the content of the line edit is not empty. Change-Id: Ib9fdd379dd9c96e2e0ddf58d9f6e9ec3d4374527 Reviewed-by: Eike Ziller --- src/libs/utils/completinglineedit.cpp | 4 +--- src/libs/utils/historycompleter.cpp | 1 + 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/libs/utils/completinglineedit.cpp b/src/libs/utils/completinglineedit.cpp index 5bbc5d88398..620609ef9cf 100644 --- a/src/libs/utils/completinglineedit.cpp +++ b/src/libs/utils/completinglineedit.cpp @@ -63,10 +63,8 @@ void CompletingLineEdit::keyPressEvent(QKeyEvent *e) { if (e->key() == Qt::Key_Down && !e->modifiers()) { if (QCompleter *comp = completer()) { - if (text().isEmpty() && !comp->popup()->isVisible()) { - comp->setCompletionPrefix(QString()); + if (!comp->popup()->isVisible()) comp->complete(); - } } } return QLineEdit::keyPressEvent(e); diff --git a/src/libs/utils/historycompleter.cpp b/src/libs/utils/historycompleter.cpp index 4cf055ae3c4..fcfb2905bbc 100644 --- a/src/libs/utils/historycompleter.cpp +++ b/src/libs/utils/historycompleter.cpp @@ -174,6 +174,7 @@ HistoryCompleter::HistoryCompleter(const QString &historyKey, QObject *parent) { QTC_ASSERT(!historyKey.isEmpty(), return); QTC_ASSERT(theSettings, return); + setCompletionMode(QCompleter::UnfilteredPopupCompletion); d->historyKey = QLatin1String("CompleterHistory/") + historyKey; d->list = theSettings->value(d->historyKey).toStringList(); From f1057c4df299492a189779df2ecd4b59c33b2c28 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Thu, 26 Mar 2015 11:34:14 +0100 Subject: [PATCH 12/25] OS X: Do not restore full screen state Change-Id: I27398fac4591adcecabbb7945f4f6f0486ed2cb2 Task-number: QTCREATORBUG-10275 Reviewed-by: Eike Ziller --- src/plugins/coreplugin/mainwindow.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/plugins/coreplugin/mainwindow.cpp b/src/plugins/coreplugin/mainwindow.cpp index aa3ee201fea..4d8ed853ec9 100644 --- a/src/plugins/coreplugin/mainwindow.cpp +++ b/src/plugins/coreplugin/mainwindow.cpp @@ -978,6 +978,12 @@ void MainWindow::writeSettings() if (!(m_overrideColor.isValid() && StyleHelper::baseColor() == m_overrideColor)) settings->setValue(QLatin1String(colorKey), StyleHelper::requestedBaseColor()); + // On OS X applications usually do not restore their full screen state. + // To be able to restore the correct non-full screen geometry, we have to put + // the window out of full screen before saving the geometry. + // Works around QTBUG-45241 + if (Utils::HostOsInfo::isMacHost() && isFullScreen()) + setWindowState(windowState() & ~Qt::WindowFullScreen); settings->setValue(QLatin1String(windowGeometryKey), saveGeometry()); settings->setValue(QLatin1String(windowStateKey), saveState()); settings->setValue(QLatin1String(modeSelectorVisibleKey), ModeManager::isModeSelectorVisible()); From 7f34f58e25f3acb630277ee4b24296cb7146fe1e Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 27 Mar 2015 20:28:30 +0100 Subject: [PATCH 13/25] Fix some connections to PathChooser::validChanged(). These were overlooked in 329c493764. Change-Id: I99d4011a8de0ea52d0989f6240bbee58aaf75f6f Reviewed-by: Orgad Shaneh --- .../projectexplorer/customwizard/customwizardpage.cpp | 2 +- .../qmakeprojectmanager/librarydetailscontroller.cpp | 2 +- src/plugins/qmakeprojectmanager/wizards/testwizardpage.cpp | 6 +++--- .../genericlinuxdeviceconfigurationwizardpages.cpp | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/plugins/projectexplorer/customwizard/customwizardpage.cpp b/src/plugins/projectexplorer/customwizard/customwizardpage.cpp index aa2c748c5e6..1f23a903f00 100644 --- a/src/plugins/projectexplorer/customwizard/customwizardpage.cpp +++ b/src/plugins/projectexplorer/customwizard/customwizardpage.cpp @@ -439,7 +439,7 @@ CustomWizardPage::CustomWizardPage(const QSharedPointer &ct { m_pathChooser->setHistoryCompleter(QLatin1String("PE.ProjectDir.History")); addRow(tr("Path:"), m_pathChooser); - connect(m_pathChooser, SIGNAL(validChanged()), this, SIGNAL(completeChanged())); + connect(m_pathChooser, SIGNAL(validChanged(bool)), this, SIGNAL(completeChanged())); } QString CustomWizardPage::path() const diff --git a/src/plugins/qmakeprojectmanager/librarydetailscontroller.cpp b/src/plugins/qmakeprojectmanager/librarydetailscontroller.cpp index 9770c70ee4a..d10491133e0 100644 --- a/src/plugins/qmakeprojectmanager/librarydetailscontroller.cpp +++ b/src/plugins/qmakeprojectmanager/librarydetailscontroller.cpp @@ -647,7 +647,7 @@ NonInternalLibraryDetailsController::NonInternalLibraryDetailsController( libraryDetailsWidget()->libraryPathChooser->setExpectedKind(Utils::PathChooser::File); } - connect(libraryDetailsWidget()->libraryPathChooser, SIGNAL(validChanged()), + connect(libraryDetailsWidget()->libraryPathChooser, SIGNAL(validChanged(bool)), this, SIGNAL(completeChanged())); connect(libraryDetailsWidget()->libraryPathChooser, SIGNAL(changed(QString)), this, SLOT(slotLibraryPathChanged())); diff --git a/src/plugins/qmakeprojectmanager/wizards/testwizardpage.cpp b/src/plugins/qmakeprojectmanager/wizards/testwizardpage.cpp index 69f451dcaec..1efbc9cb885 100644 --- a/src/plugins/qmakeprojectmanager/wizards/testwizardpage.cpp +++ b/src/plugins/qmakeprojectmanager/wizards/testwizardpage.cpp @@ -55,11 +55,11 @@ TestWizardPage::TestWizardPage(QWidget *parent) : this, SLOT(slotClassNameEdited(QString))); connect(ui->fileLineEdit, SIGNAL(textEdited(QString)), \ this, SLOT(slotFileNameEdited())); - connect(ui->testClassLineEdit, SIGNAL(validChanged()), + connect(ui->testClassLineEdit, SIGNAL(validChanged(bool)), this, SLOT(slotUpdateValid())); - connect(ui->testSlotLineEdit, SIGNAL(validChanged()), + connect(ui->testSlotLineEdit, SIGNAL(validChanged(bool)), this, SLOT(slotUpdateValid())); - connect(ui->fileLineEdit, SIGNAL(validChanged()), + connect(ui->fileLineEdit, SIGNAL(validChanged(bool)), this, SLOT(slotUpdateValid())); setProperty(Utils::SHORT_TITLE_PROPERTY, tr("Details")); diff --git a/src/plugins/remotelinux/genericlinuxdeviceconfigurationwizardpages.cpp b/src/plugins/remotelinux/genericlinuxdeviceconfigurationwizardpages.cpp index aca9edf4bcf..180ae72defa 100644 --- a/src/plugins/remotelinux/genericlinuxdeviceconfigurationwizardpages.cpp +++ b/src/plugins/remotelinux/genericlinuxdeviceconfigurationwizardpages.cpp @@ -65,7 +65,7 @@ GenericLinuxDeviceConfigurationWizardSetupPage::GenericLinuxDeviceConfigurationW connect(d->ui.nameLineEdit, SIGNAL(textChanged(QString)), SIGNAL(completeChanged())); connect(d->ui.hostNameLineEdit, SIGNAL(textChanged(QString)), SIGNAL(completeChanged())); connect(d->ui.userNameLineEdit, SIGNAL(textChanged(QString)), SIGNAL(completeChanged())); - connect(d->ui.privateKeyPathChooser, SIGNAL(validChanged()), SIGNAL(completeChanged())); + connect(d->ui.privateKeyPathChooser, SIGNAL(validChanged(bool)), SIGNAL(completeChanged())); connect(d->ui.passwordButton, SIGNAL(toggled(bool)), SLOT(handleAuthTypeChanged())); } From 12cd3839a66eefb515466cf62f21b973c2c351da Mon Sep 17 00:00:00 2001 From: David Schulz Date: Wed, 18 Mar 2015 14:17:21 +0100 Subject: [PATCH 14/25] Cdbext: Fix QByteArray dumper for unprintable characters. Change-Id: I7075df252ea9739600fdbf01c27987d2c0f8d159 Reviewed-by: Christian Stenger --- src/libs/qtcreatorcdbext/symbolgroupnode.cpp | 5 ++++ src/libs/qtcreatorcdbext/symbolgroupvalue.cpp | 26 +++++++------------ tests/auto/debugger/tst_dumpers.cpp | 3 +-- 3 files changed, 15 insertions(+), 19 deletions(-) diff --git a/src/libs/qtcreatorcdbext/symbolgroupnode.cpp b/src/libs/qtcreatorcdbext/symbolgroupnode.cpp index f036c54c0c1..e72cb4872a5 100644 --- a/src/libs/qtcreatorcdbext/symbolgroupnode.cpp +++ b/src/libs/qtcreatorcdbext/symbolgroupnode.cpp @@ -1159,6 +1159,11 @@ int SymbolGroupNode::dumpNode(std::ostream &str, ? DumpEncodingJulianDateAndMillisecondsSinceMidnight : DumpEncodingMillisecondsSinceEpoch; break; + case KT_QTimeZone: // Based on a QByteArray dumper + case KT_QByteArray: + if (QtInfo::get(ctx).version > 4) + encoding = DumpEncodingHex_Latin1_WithQuotes; + break; } if (encoding) { str << ",valueencoded=\"" << encoding << "\",value=\"" << gdbmiWStringFormat(value) <<'"'; diff --git a/src/libs/qtcreatorcdbext/symbolgroupvalue.cpp b/src/libs/qtcreatorcdbext/symbolgroupvalue.cpp index 55666678aae..1d14bc1c2fe 100644 --- a/src/libs/qtcreatorcdbext/symbolgroupvalue.cpp +++ b/src/libs/qtcreatorcdbext/symbolgroupvalue.cpp @@ -1728,6 +1728,8 @@ static inline bool dumpQByteArray(const SymbolGroupValue &v, std::wostream &str, } // Qt 5: Data start at offset past the 'd' of type QByteArrayData. + wchar_t oldFill = str.fill(wchar_t('0')); + str << std::hex; char *memory; unsigned fullSize; unsigned size; @@ -1735,26 +1737,20 @@ static inline bool dumpQByteArray(const SymbolGroupValue &v, std::wostream &str, if (!readQt5StringData(dV, qtInfo, false, 0, maxStringSize, &fullSize, &size, &memory)) return false; if (size) { - // Emulate CDB's behavior of replacing unprintable characters - // by dots. - std::wstring display; - display.reserve(size); char *memEnd = memory + size; for (char *p = memory; p < memEnd; p++) { - const char c = *p; - display.push_back(c >= 0 && isprint(c) ? wchar_t(c) : L'.'); + const unsigned char c = *p; + str << std::setw(2) << c; } - str << "\"" << display; if (fullSize > size) - str << L"..."; - str << L'"'; - } else { - str << L"\"\""; + str << L"2e2e2e"; // ... } if (memoryHandle) *memoryHandle = new MemoryHandle(reinterpret_cast(memory), size); else delete [] memory; + str << std::dec; + str.fill(oldFill); return true; } @@ -2230,12 +2226,8 @@ static bool dumpQDateTime(const SymbolGroupValue &v, std::wostream &str) str << msecs << separator << spec << separator << offset << separator - << std::hex; - if (timeZoneString.length() > 2) { - for (unsigned i = 1; i < timeZoneString.length() - 1; ++i) // remove '"' - str << (int)timeZoneString.at(i); - } - str << std::dec << separator << status; + << timeZoneString << separator + << status; return true; } diff --git a/tests/auto/debugger/tst_dumpers.cpp b/tests/auto/debugger/tst_dumpers.cpp index 6117c31b28f..9bfb8a45630 100644 --- a/tests/auto/debugger/tst_dumpers.cpp +++ b/tests/auto/debugger/tst_dumpers.cpp @@ -1539,8 +1539,7 @@ void tst_Dumpers::dumper_data() + Check("ba0", "ba0", "\"\"", "@QByteArray") + Check("ba1", QByteArray("\"Hello\"World") - + char(0) + char(1) + char(2) + '"', "@QByteArray") % NoCdbEngine - + Check("ba1", QByteArray("\"Hello\"World...\""), "@QByteArray") % CdbEngine + + char(0) + char(1) + char(2) + '"', "@QByteArray") + Check("ba1.0", "[0]", "72", "char") + Check("ba1.11", "[11]", "0", "char") + Check("ba1.12", "[12]", "1", "char") From 633ac7aff00a332e95369908af5e88dd7888f6db Mon Sep 17 00:00:00 2001 From: David Schulz Date: Thu, 19 Mar 2015 08:23:45 +0100 Subject: [PATCH 15/25] Cdbext: Dump "(invalid)" for an uninitialized QDateTime. Change-Id: I033bf3fe0e31cb84ce849ef5d1dabe1f6a95ad1e Reviewed-by: Christian Stenger --- src/libs/qtcreatorcdbext/symbolgroupnode.cpp | 2 ++ src/libs/qtcreatorcdbext/symbolgroupvalue.cpp | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/libs/qtcreatorcdbext/symbolgroupnode.cpp b/src/libs/qtcreatorcdbext/symbolgroupnode.cpp index e72cb4872a5..f0f5e7a882c 100644 --- a/src/libs/qtcreatorcdbext/symbolgroupnode.cpp +++ b/src/libs/qtcreatorcdbext/symbolgroupnode.cpp @@ -1155,6 +1155,8 @@ int SymbolGroupNode::dumpNode(std::ostream &str, encoding = DumpEncodingMillisecondsSinceMidnight; break; case KT_QDateTime: + if (!value.compare(L"(invalid)")) + break; encoding = QtInfo::get(ctx).version < 5 ? DumpEncodingJulianDateAndMillisecondsSinceMidnight : DumpEncodingMillisecondsSinceEpoch; diff --git a/src/libs/qtcreatorcdbext/symbolgroupvalue.cpp b/src/libs/qtcreatorcdbext/symbolgroupvalue.cpp index 1d14bc1c2fe..27cdd4b6bda 100644 --- a/src/libs/qtcreatorcdbext/symbolgroupvalue.cpp +++ b/src/libs/qtcreatorcdbext/symbolgroupvalue.cpp @@ -2220,8 +2220,10 @@ static bool dumpQDateTime(const SymbolGroupValue &v, std::wostream &str) ValidTime = 0x08, ValidDateTime = 0x10 }; - if (!(status & ValidDateTime || ((status & ValidDate) && (status & ValidTime)))) + if (!(status & ValidDateTime || ((status & ValidDate) && (status & ValidTime)))) { + str << L"(invalid)"; return true; + } str << msecs << separator << spec << separator From e623de1ede8664698c115c06246c85ec3069e358 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 16 Mar 2015 12:22:51 +0100 Subject: [PATCH 16/25] Global Search&Replace: Hide replace UI after replacing After replacing, the search result output pane is hidden, but when opening the search results pane again, the replace UI was still shown, and most probably using outdated information (since at least parts of the search results must have been invalidated by the replace). So, hide the replace UI when replacing, but show it again after updating the search with "search again". Change-Id: Ia759ff55c7f56694fa207d00ca6b532c95012d5b Reviewed-by: David Schulz --- .../coreplugin/find/searchresulttreeitems.cpp | 17 +----- .../coreplugin/find/searchresulttreeitems.h | 4 -- .../coreplugin/find/searchresulttreemodel.cpp | 53 ++++++++----------- .../coreplugin/find/searchresultwidget.cpp | 18 +++---- .../coreplugin/find/searchresultwidget.h | 12 ++--- .../coreplugin/find/searchresultwindow.cpp | 5 +- 6 files changed, 41 insertions(+), 68 deletions(-) diff --git a/src/plugins/coreplugin/find/searchresulttreeitems.cpp b/src/plugins/coreplugin/find/searchresulttreeitems.cpp index 1b2e1c30531..57662b79ed0 100644 --- a/src/plugins/coreplugin/find/searchresulttreeitems.cpp +++ b/src/plugins/coreplugin/find/searchresulttreeitems.cpp @@ -37,9 +37,8 @@ SearchResultTreeItem::SearchResultTreeItem(const SearchResultItem &item, SearchResultTreeItem *parent) : item(item), m_parent(parent), - m_isUserCheckable(false), m_isGenerated(false), - m_checkState(Qt::Unchecked) + m_checkState(Qt::Checked) { } @@ -53,16 +52,6 @@ bool SearchResultTreeItem::isLeaf() const return childrenCount() == 0 && parent() != 0; } -bool SearchResultTreeItem::isUserCheckable() const -{ - return m_isUserCheckable; -} - -void SearchResultTreeItem::setIsUserCheckable(bool isUserCheckable) -{ - m_isUserCheckable = isUserCheckable; -} - Qt::CheckState SearchResultTreeItem::checkState() const { return m_checkState; @@ -130,10 +119,6 @@ void SearchResultTreeItem::insertChild(int index, SearchResultTreeItem *child) void SearchResultTreeItem::insertChild(int index, const SearchResultItem &item) { SearchResultTreeItem *child = new SearchResultTreeItem(item, this); - if (isUserCheckable()) { - child->setIsUserCheckable(true); - child->setCheckState(Qt::Checked); - } insertChild(index, child); } diff --git a/src/plugins/coreplugin/find/searchresulttreeitems.h b/src/plugins/coreplugin/find/searchresulttreeitems.h index 12506c8cf5e..7684ffeb1fc 100644 --- a/src/plugins/coreplugin/find/searchresulttreeitems.h +++ b/src/plugins/coreplugin/find/searchresulttreeitems.h @@ -58,9 +58,6 @@ public: int rowOfItem() const; void clearChildren(); - bool isUserCheckable() const; - void setIsUserCheckable(bool isUserCheckable); - Qt::CheckState checkState() const; void setCheckState(Qt::CheckState checkState); @@ -72,7 +69,6 @@ public: private: SearchResultTreeItem *m_parent; QList m_children; - bool m_isUserCheckable; bool m_isGenerated; Qt::CheckState m_checkState; }; diff --git a/src/plugins/coreplugin/find/searchresulttreemodel.cpp b/src/plugins/coreplugin/find/searchresulttreemodel.cpp index a8e04594c74..d7809160a21 100644 --- a/src/plugins/coreplugin/find/searchresulttreemodel.cpp +++ b/src/plugins/coreplugin/find/searchresulttreemodel.cpp @@ -57,7 +57,9 @@ SearchResultTreeModel::~SearchResultTreeModel() void SearchResultTreeModel::setShowReplaceUI(bool show) { + beginResetModel(); m_showReplaceUI = show; + endResetModel(); } void SearchResultTreeModel::setTextEditorFont(const QFont &font, const SearchResultColor &color) @@ -73,10 +75,8 @@ Qt::ItemFlags SearchResultTreeModel::flags(const QModelIndex &idx) const Qt::ItemFlags flags = QAbstractItemModel::flags(idx); if (idx.isValid()) { - if (const SearchResultTreeItem *item = treeItemAtIndex(idx)) { - if (item->isUserCheckable()) - flags |= Qt::ItemIsUserCheckable; - } + if (m_showReplaceUI) + flags |= Qt::ItemIsUserCheckable; } return flags; @@ -189,28 +189,24 @@ bool SearchResultTreeModel::setCheckState(const QModelIndex &idx, Qt::CheckState SearchResultTreeItem *currentItem = item; QModelIndex currentIndex = idx; while (SearchResultTreeItem *parent = currentItem->parent()) { - if (parent->isUserCheckable()) { - bool hasChecked = false; - bool hasUnchecked = false; - for (int i = 0; i < parent->childrenCount(); ++i) { - SearchResultTreeItem *child = parent->childAt(i); - if (!child->isUserCheckable()) - continue; - if (child->checkState() == Qt::Checked) - hasChecked = true; - else if (child->checkState() == Qt::Unchecked) - hasUnchecked = true; - else if (child->checkState() == Qt::PartiallyChecked) - hasChecked = hasUnchecked = true; - } - if (hasChecked && hasUnchecked) - parent->setCheckState(Qt::PartiallyChecked); - else if (hasChecked) - parent->setCheckState(Qt::Checked); - else - parent->setCheckState(Qt::Unchecked); - emit dataChanged(idx.parent(), idx.parent()); + bool hasChecked = false; + bool hasUnchecked = false; + for (int i = 0; i < parent->childrenCount(); ++i) { + SearchResultTreeItem *child = parent->childAt(i); + if (child->checkState() == Qt::Checked) + hasChecked = true; + else if (child->checkState() == Qt::Unchecked) + hasUnchecked = true; + else if (child->checkState() == Qt::PartiallyChecked) + hasChecked = hasUnchecked = true; } + if (hasChecked && hasUnchecked) + parent->setCheckState(Qt::PartiallyChecked); + else if (hasChecked) + parent->setCheckState(Qt::Checked); + else + parent->setCheckState(Qt::Unchecked); + emit dataChanged(idx.parent(), idx.parent()); currentItem = parent; currentIndex = idx.parent(); } @@ -234,8 +230,7 @@ QVariant SearchResultTreeModel::data(const SearchResultTreeItem *row, int role) switch (role) { case Qt::CheckStateRole: - if (row->isUserCheckable()) - result = row->checkState(); + result = row->checkState(); break; case Qt::ToolTipRole: result = row->item.text.trimmed(); @@ -315,10 +310,8 @@ QSet SearchResultTreeModel::addPath(const QStringList &p item.path = currentPath; item.text = part; partItem = new SearchResultTreeItem(item, currentItem); - if (m_showReplaceUI) { - partItem->setIsUserCheckable(true); + if (m_showReplaceUI) partItem->setCheckState(Qt::Checked); - } partItem->setGenerated(true); beginInsertRows(currentItemIndex, insertionIndex, insertionIndex); currentItem->insertChild(insertionIndex, partItem); diff --git a/src/plugins/coreplugin/find/searchresultwidget.cpp b/src/plugins/coreplugin/find/searchresultwidget.cpp index 1917d6ce4d4..1df894f6717 100644 --- a/src/plugins/coreplugin/find/searchresultwidget.cpp +++ b/src/plugins/coreplugin/find/searchresultwidget.cpp @@ -87,7 +87,8 @@ SearchResultWidget::SearchResultWidget(QWidget *parent) : m_count(0), m_preserveCaseSupported(true), m_isShowingReplaceUI(false), - m_searchAgainSupported(false) + m_searchAgainSupported(false), + m_replaceSupported(false) { QVBoxLayout *layout = new QVBoxLayout(this); layout->setMargin(0); @@ -206,7 +207,7 @@ SearchResultWidget::SearchResultWidget(QWidget *parent) : topReplaceLayout->addWidget(m_replaceButton); topReplaceLayout->addWidget(m_preserveCaseCheck); topReplaceLayout->addStretch(2); - setShowReplaceUI(false); + setShowReplaceUI(m_replaceSupported); setSupportPreserveCase(true); connect(m_searchResultTreeView, SIGNAL(jumpToSearchResult(SearchResultItem)), @@ -262,7 +263,8 @@ void SearchResultWidget::addResults(const QList &items, Search m_replaceTextEdit->setEnabled(true); // We didn't have an item before, set the focus to the search widget or replace text edit - if (m_isShowingReplaceUI) { + setShowReplaceUI(m_replaceSupported); + if (m_replaceSupported) { m_replaceTextEdit->setFocus(); m_replaceTextEdit->selectAll(); } else { @@ -294,13 +296,10 @@ int SearchResultWidget::count() const return m_count; } -QString SearchResultWidget::dontAskAgainGroup() const -{ - return m_dontAskAgainGroup; -} - -void SearchResultWidget::setDontAskAgainGroup(const QString &group) +void SearchResultWidget::setSupportsReplace(bool replaceSupported, const QString &group) { + m_replaceSupported = replaceSupported; + setShowReplaceUI(replaceSupported); m_dontAskAgainGroup = group; } @@ -475,6 +474,7 @@ void SearchResultWidget::handleReplaceButton() // by pressing return in replace line edit if (m_replaceButton->isEnabled()) { m_infoBar.clear(); + setShowReplaceUI(false); emit replaceButtonClicked(m_replaceTextEdit->text(), checkedItems(), m_preserveCaseSupported && m_preserveCaseCheck->isChecked()); } diff --git a/src/plugins/coreplugin/find/searchresultwidget.h b/src/plugins/coreplugin/find/searchresultwidget.h index 2546f16d9e9..6023ee8f444 100644 --- a/src/plugins/coreplugin/find/searchresultwidget.h +++ b/src/plugins/coreplugin/find/searchresultwidget.h @@ -66,13 +66,11 @@ public: int count() const; - QString dontAskAgainGroup() const; - void setDontAskAgainGroup(const QString &group); + void setSupportsReplace(bool replaceSupported, const QString &group); void setTextToReplace(const QString &textToReplace); QString textToReplace() const; void setSupportPreserveCase(bool enabled); - void setShowReplaceUI(bool visible); bool hasFocusInternally() const; void setFocusInternally(); @@ -118,6 +116,7 @@ private slots: void searchAgain(); private: + void setShowReplaceUI(bool visible); void continueAfterSizeWarning(); void cancelAfterSizeWarning(); @@ -127,23 +126,24 @@ private: SearchResultTreeView *m_searchResultTreeView; int m_count; QString m_dontAskAgainGroup; - bool m_preserveCaseSupported; QFrame *m_messageWidget; InfoBar m_infoBar; InfoBarDisplay m_infoBarDisplay; - bool m_isShowingReplaceUI; QWidget *m_topReplaceWidget; QLabel *m_replaceLabel; QLineEdit *m_replaceTextEdit; QToolButton *m_replaceButton; QToolButton *m_searchAgainButton; QCheckBox *m_preserveCaseCheck; - bool m_searchAgainSupported; QWidget *m_descriptionContainer; QLabel *m_label; QLabel *m_searchTerm; QToolButton *m_cancelButton; QLabel *m_matchesFoundLabel; + bool m_preserveCaseSupported; + bool m_isShowingReplaceUI; + bool m_searchAgainSupported; + bool m_replaceSupported; }; } // Internal diff --git a/src/plugins/coreplugin/find/searchresultwindow.cpp b/src/plugins/coreplugin/find/searchresultwindow.cpp index 8233dd43885..3b73bd83b60 100644 --- a/src/plugins/coreplugin/find/searchresultwindow.cpp +++ b/src/plugins/coreplugin/find/searchresultwindow.cpp @@ -400,11 +400,10 @@ SearchResult *SearchResultWindow::startNewSearch(const QString &label, widget->setTextEditorFont(d->m_font, d->m_color); widget->setTabWidth(d->m_tabWidth); widget->setSupportPreserveCase(preserveCaseMode == PreserveCaseEnabled); - widget->setShowReplaceUI(searchOrSearchAndReplace != SearchOnly); + bool supportsReplace = searchOrSearchAndReplace != SearchOnly; + widget->setSupportsReplace(supportsReplace, supportsReplace ? cfgGroup : QString()); widget->setAutoExpandResults(d->m_expandCollapseAction->isChecked()); widget->setInfo(label, toolTip, searchTerm); - if (searchOrSearchAndReplace == SearchAndReplace) - widget->setDontAskAgainGroup(cfgGroup); auto result = new SearchResult(widget); d->m_searchResults.prepend(result); d->m_recentSearchesBox->insertItem(1, tr("%1 %2").arg(label, searchTerm)); From 919e3c7261fd43a0e1b00f255378b3607a54cca1 Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Mon, 30 Mar 2015 10:47:48 +0300 Subject: [PATCH 17/25] Theming: Unify some duplicate color roles Change-Id: Ic000abd9bd9381e20126d0ce56ce68a35a07efe2 Reviewed-by: Eike Ziller --- share/qtcreator/themes/dark.creatortheme | 18 +++++++--------- share/qtcreator/themes/default.creatortheme | 18 +++++++--------- src/libs/utils/outputformatter.cpp | 10 ++++----- src/libs/utils/theme/theme.h | 21 +++++++------------ src/plugins/debugger/logwindow.cpp | 4 ++-- .../projectexplorer/compileoutputwindow.cpp | 6 +++--- 6 files changed, 32 insertions(+), 45 deletions(-) diff --git a/share/qtcreator/themes/dark.creatortheme b/share/qtcreator/themes/dark.creatortheme index 346b0d2658c..1e08b46aba4 100644 --- a/share/qtcreator/themes/dark.creatortheme +++ b/share/qtcreator/themes/dark.creatortheme @@ -77,24 +77,20 @@ ToolBarBackgroundColor=shadowBackground TreeViewArrowColorNormal=hoverBackground TreeViewArrowColorSelected=text -OutputFormatter_DebugTextColor=text -OutputFormatter_ErrorMessageTextColor=error -OutputFormatter_NormalMessageTextColor=text -OutputFormatter_StdErrTextColor=error -OutputFormatter_StdOutTextColor=text +OutputPanes_DebugTextColor=text +OutputPanes_ErrorMessageTextColor=ffff6c6c +OutputPanes_MessageOutput=ff008787 +OutputPanes_NormalMessageTextColor=text +OutputPanes_StdErrTextColor=error +OutputPanes_StdOutTextColor=text +OutputPanes_WarningMessageTextColor=fff3c300 OutputPaneButtonFlashColor=error OutputPaneToggleButtonTextColorChecked=text OutputPaneToggleButtonTextColorUnchecked=text QtOutputFormatter_LinkTextColor=ff0000ff -CompileOutput_ErrorOutput=ffff6c6c -CompileOutput_MessageOutput=ff008787 -CompileOutput_ErrorMessageOutput=ffff6c6c - Debugger_LogWindow_LogInput=ff00acac Debugger_LogWindow_LogStatus=ff00875a -Debugger_LogWindow_LogWarning=fff3c300 -Debugger_LogWindow_LogError=ffff6c6c Debugger_LogWindow_LogTime=ffbf0303 Debugger_WatchItem_ValueNormal=text diff --git a/share/qtcreator/themes/default.creatortheme b/share/qtcreator/themes/default.creatortheme index 6a578b72a27..914611c2516 100644 --- a/share/qtcreator/themes/default.creatortheme +++ b/share/qtcreator/themes/default.creatortheme @@ -71,24 +71,20 @@ ToolBarBackgroundColor=ffff0000 TreeViewArrowColorNormal=ffff0000 TreeViewArrowColorSelected=ffff0000 -OutputFormatter_DebugTextColor=ffaa00aa -OutputFormatter_ErrorMessageTextColor=ffaa0000 -OutputFormatter_NormalMessageTextColor=ff0000aa -OutputFormatter_StdErrTextColor=ffaa0000 -OutputFormatter_StdOutTextColor=ff000000 +OutputPanes_DebugTextColor=ffaa00aa +OutputPanes_ErrorMessageTextColor=ffaa0000 +OutputPanes_MessageOutput=ff0000aa +OutputPanes_NormalMessageTextColor=ff0000aa +OutputPanes_StdErrTextColor=ffaa0000 +OutputPanes_StdOutTextColor=ff000000 +OutputPanes_WarningMessageTextColor=ff808000 OutputPaneButtonFlashColor=ffff0000 OutputPaneToggleButtonTextColorChecked=ffffffff OutputPaneToggleButtonTextColorUnchecked=ff000000 QtOutputFormatter_LinkTextColor=ff0000aa -CompileOutput_ErrorOutput=ffaa0000 -CompileOutput_MessageOutput=ff0000aa -CompileOutput_ErrorMessageOutput=ffaa0000 - Debugger_LogWindow_LogInput=ff0000ff Debugger_LogWindow_LogStatus=ff008000 -Debugger_LogWindow_LogWarning=ff808000 -Debugger_LogWindow_LogError=ffff0000 Debugger_LogWindow_LogTime=ff800000 Debugger_WatchItem_ValueNormal=ff000000 diff --git a/src/libs/utils/outputformatter.cpp b/src/libs/utils/outputformatter.cpp index d9a70f3040e..aa4c222e088 100644 --- a/src/libs/utils/outputformatter.cpp +++ b/src/libs/utils/outputformatter.cpp @@ -142,24 +142,24 @@ void OutputFormatter::initFormats() // NormalMessageFormat d->formats[NormalMessageFormat].setFont(boldFont); - d->formats[NormalMessageFormat].setForeground(theme->color(Theme::OutputFormatter_NormalMessageTextColor)); + d->formats[NormalMessageFormat].setForeground(theme->color(Theme::OutputPanes_NormalMessageTextColor)); // ErrorMessageFormat d->formats[ErrorMessageFormat].setFont(boldFont); - d->formats[ErrorMessageFormat].setForeground(theme->color(Theme::OutputFormatter_ErrorMessageTextColor)); + d->formats[ErrorMessageFormat].setForeground(theme->color(Theme::OutputPanes_ErrorMessageTextColor)); // StdOutFormat d->formats[StdOutFormat].setFont(d->font); - d->formats[StdOutFormat].setForeground(theme->color(Theme::OutputFormatter_StdOutTextColor)); + d->formats[StdOutFormat].setForeground(theme->color(Theme::OutputPanes_StdOutTextColor)); d->formats[StdOutFormatSameLine] = d->formats[StdOutFormat]; // StdErrFormat d->formats[StdErrFormat].setFont(d->font); - d->formats[StdErrFormat].setForeground(theme->color(Theme::OutputFormatter_StdErrTextColor)); + d->formats[StdErrFormat].setForeground(theme->color(Theme::OutputPanes_StdErrTextColor)); d->formats[StdErrFormatSameLine] = d->formats[StdErrFormat]; d->formats[DebugFormat].setFont(d->font); - d->formats[DebugFormat].setForeground(theme->color(Theme::OutputFormatter_DebugTextColor)); + d->formats[DebugFormat].setForeground(theme->color(Theme::OutputPanes_DebugTextColor)); } void OutputFormatter::handleLink(const QString &href) diff --git a/src/libs/utils/theme/theme.h b/src/libs/utils/theme/theme.h index 5ba8771d5f7..90efa37528a 100644 --- a/src/libs/utils/theme/theme.h +++ b/src/libs/utils/theme/theme.h @@ -125,26 +125,21 @@ public: TreeViewArrowColorNormal, TreeViewArrowColorSelected, - OutputFormatter_NormalMessageTextColor, - OutputFormatter_ErrorMessageTextColor, - OutputFormatter_StdOutTextColor, - OutputFormatter_StdErrTextColor, - OutputFormatter_DebugTextColor, + /* Output panes */ + OutputPanes_DebugTextColor, + OutputPanes_ErrorMessageTextColor, + OutputPanes_MessageOutput, + OutputPanes_NormalMessageTextColor, + OutputPanes_StdErrTextColor, + OutputPanes_StdOutTextColor, + OutputPanes_WarningMessageTextColor, QtOutputFormatter_LinkTextColor, - /* Compile Output Pane */ - - CompileOutput_ErrorOutput, - CompileOutput_MessageOutput, - CompileOutput_ErrorMessageOutput, - /* Debugger Log Window */ Debugger_LogWindow_LogInput, Debugger_LogWindow_LogStatus, - Debugger_LogWindow_LogWarning, - Debugger_LogWindow_LogError, Debugger_LogWindow_LogTime, /* Debugger Watch Item */ diff --git a/src/plugins/debugger/logwindow.cpp b/src/plugins/debugger/logwindow.cpp index e1cec0f67f6..4d0c76fde7a 100644 --- a/src/plugins/debugger/logwindow.cpp +++ b/src/plugins/debugger/logwindow.cpp @@ -88,11 +88,11 @@ private: setFormat(1, text.size(), format); break; case LogWarning: - format.setForeground(theme->color(Theme::Debugger_LogWindow_LogWarning)); + format.setForeground(theme->color(Theme::OutputPanes_WarningMessageTextColor)); setFormat(1, text.size(), format); break; case LogError: - format.setForeground(theme->color(Theme::Debugger_LogWindow_LogError)); + format.setForeground(theme->color(Theme::OutputPanes_ErrorMessageTextColor)); setFormat(1, text.size(), format); break; case LogTime: diff --git a/src/plugins/projectexplorer/compileoutputwindow.cpp b/src/plugins/projectexplorer/compileoutputwindow.cpp index 1ddf2d8d5cf..c20f813a617 100644 --- a/src/plugins/projectexplorer/compileoutputwindow.cpp +++ b/src/plugins/projectexplorer/compileoutputwindow.cpp @@ -197,14 +197,14 @@ void CompileOutputWindow::appendText(const QString &text, BuildStep::OutputForma textFormat.setFontWeight(QFont::Normal); break; case BuildStep::ErrorOutput: - textFormat.setForeground(theme->color(Theme::CompileOutput_ErrorOutput)); + textFormat.setForeground(theme->color(Theme::OutputPanes_ErrorMessageTextColor)); textFormat.setFontWeight(QFont::Normal); break; case BuildStep::MessageOutput: - textFormat.setForeground(theme->color(Theme::CompileOutput_MessageOutput)); + textFormat.setForeground(theme->color(Theme::OutputPanes_MessageOutput)); break; case BuildStep::ErrorMessageOutput: - textFormat.setForeground(theme->color(Theme::CompileOutput_ErrorMessageOutput)); + textFormat.setForeground(theme->color(Theme::OutputPanes_ErrorMessageTextColor)); textFormat.setFontWeight(QFont::Bold); break; From e2bca47bc4e1f2f7eab41c0eb9a1622af3ad5578 Mon Sep 17 00:00:00 2001 From: Thorben Kroeger Date: Mon, 30 Mar 2015 09:13:18 +0200 Subject: [PATCH 18/25] Theme: make link color readable in dark theme Task-number: QTCREATORBUG-14208 Change-Id: I50f76c3cf5c755ccd139bd6cfb924beb0379f506 Reviewed-by: Eike Ziller --- share/qtcreator/themes/dark.creatortheme | 3 ++- share/qtcreator/themes/default.creatortheme | 3 ++- src/libs/utils/theme/theme.cpp | 2 ++ src/libs/utils/theme/theme.h | 3 ++- src/plugins/qtsupport/qtoutputformatter.cpp | 2 +- 5 files changed, 9 insertions(+), 4 deletions(-) diff --git a/share/qtcreator/themes/dark.creatortheme b/share/qtcreator/themes/dark.creatortheme index 1e08b46aba4..0f494684546 100644 --- a/share/qtcreator/themes/dark.creatortheme +++ b/share/qtcreator/themes/dark.creatortheme @@ -70,6 +70,8 @@ SplitterColor=ffb0b0b0 TextColorDisabled=textDisabled TextColorError=ffff4040 TextColorHighlight=ffff0000 +TextColorLink=ff007af4 +TextColorLinkVisited=ffa57aff TextColorNormal=text TodoItemTextColor=ff000000 ToggleButtonBackgroundColor=shadowBackground @@ -87,7 +89,6 @@ OutputPanes_WarningMessageTextColor=fff3c300 OutputPaneButtonFlashColor=error OutputPaneToggleButtonTextColorChecked=text OutputPaneToggleButtonTextColorUnchecked=text -QtOutputFormatter_LinkTextColor=ff0000ff Debugger_LogWindow_LogInput=ff00acac Debugger_LogWindow_LogStatus=ff00875a diff --git a/share/qtcreator/themes/default.creatortheme b/share/qtcreator/themes/default.creatortheme index 914611c2516..5c02e74c11c 100644 --- a/share/qtcreator/themes/default.creatortheme +++ b/share/qtcreator/themes/default.creatortheme @@ -64,6 +64,8 @@ SplitterColor=ff151515 TextColorDisabled=ff000000 TextColorError=ffff0000 TextColorHighlight=ffa0a0a4 +TextColorLink=ff0057ae +TextColorLinkVisited=ff644a9b TextColorNormal=ff000000 TodoItemTextColor=ff000000 ToggleButtonBackgroundColor=ffff0000 @@ -81,7 +83,6 @@ OutputPanes_WarningMessageTextColor=ff808000 OutputPaneButtonFlashColor=ffff0000 OutputPaneToggleButtonTextColorChecked=ffffffff OutputPaneToggleButtonTextColorUnchecked=ff000000 -QtOutputFormatter_LinkTextColor=ff0000aa Debugger_LogWindow_LogInput=ff0000ff Debugger_LogWindow_LogStatus=ff008000 diff --git a/src/libs/utils/theme/theme.cpp b/src/libs/utils/theme/theme.cpp index 17a6c9a8f65..c6a37e3c1e5 100644 --- a/src/libs/utils/theme/theme.cpp +++ b/src/libs/utils/theme/theme.cpp @@ -362,6 +362,8 @@ QPalette Theme::palette() const pal.setColor(QPalette::Dark, color(Theme::BackgroundColorDark)); pal.setColor(QPalette::HighlightedText, Qt::white); pal.setColor(QPalette::ToolTipText, color(Theme::TextColorNormal)); + pal.setColor(QPalette::Link, color(Theme::TextColorLink)); + pal.setColor(QPalette::LinkVisited, color(Theme::TextColorLinkVisited)); return pal; } diff --git a/src/libs/utils/theme/theme.h b/src/libs/utils/theme/theme.h index 90efa37528a..847b1e4bbf4 100644 --- a/src/libs/utils/theme/theme.h +++ b/src/libs/utils/theme/theme.h @@ -118,6 +118,8 @@ public: TextColorDisabled, TextColorError, TextColorHighlight, + TextColorLink, + TextColorLinkVisited, TextColorNormal, TodoItemTextColor, ToggleButtonBackgroundColor, @@ -134,7 +136,6 @@ public: OutputPanes_StdErrTextColor, OutputPanes_StdOutTextColor, OutputPanes_WarningMessageTextColor, - QtOutputFormatter_LinkTextColor, /* Debugger Log Window */ diff --git a/src/plugins/qtsupport/qtoutputformatter.cpp b/src/plugins/qtsupport/qtoutputformatter.cpp index dc8e40323d6..122baf9d760 100644 --- a/src/plugins/qtsupport/qtoutputformatter.cpp +++ b/src/plugins/qtsupport/qtoutputformatter.cpp @@ -192,7 +192,7 @@ void QtOutputFormatter::appendLine(QTextCursor &cursor, const LinkResult &lr, static QTextCharFormat linkFormat(const QTextCharFormat &inputFormat, const QString &href) { QTextCharFormat result = inputFormat; - result.setForeground(creatorTheme()->color(Theme::QtOutputFormatter_LinkTextColor)); + result.setForeground(creatorTheme()->color(Theme::TextColorLink)); result.setUnderlineStyle(QTextCharFormat::SingleUnderline); result.setAnchor(true); result.setAnchorHref(href); From 7b228cd860ddce111a62303c60dc511fb77cde79 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 30 Mar 2015 09:10:46 +0200 Subject: [PATCH 19/25] Add a few more changes to change log Change-Id: Ie68fb3111894d6938766f5a40f558cd932e7e533 Reviewed-by: Leena Miettinen --- dist/changes-3.4.0 | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/dist/changes-3.4.0 b/dist/changes-3.4.0 index 73f4e9a3da8..871cf69860e 100644 --- a/dist/changes-3.4.0 +++ b/dist/changes-3.4.0 @@ -11,6 +11,7 @@ General * Added option to change environment for running external tools (QTCREATORBUG-4995) * Improved performance of output panes * Fixed that wizard windows were missing in Window menu (QTCREATORBUG-13766) + * Fixed that editing external tools was removing their shortcut (QTCREATORBUG-8108) Editing * Switched to a QMimeDatabase based MIME database implementation @@ -90,6 +91,7 @@ Analyzer QML Profiler * Made it possible to search through event notes (QTCREATORBUG-13417) + * Made it possible to horizontally resize details windows (QTCREATORBUG-14054) C++ Support * Added support for binary literals (n3472) @@ -107,6 +109,8 @@ C++ Support * Fixed that Assign to Local Variable refactoring action was not working with chained function calls (QTCREATORBUG-10355) * Fixed several issues with completion and iterators (QTCREATORBUG-13799) + * Fixed resolution of nested types in member functions (QTCREATORBUG-13978) + * Fixed parsing of function-like macros with comments (QTCREATORBUG-9535) QML Support * Fixed crash on closing one of multiple outline views (QTCREATORBUG-13614) @@ -148,6 +152,7 @@ Platform Specific Windows OS X + * Fixed that importing builds of qmake projects was duplicating kits (QTCREATORBUG-13947) Linux * Added support to retrieve application output from journald. From cf0fbfef47ffe2903ee5879f11b0b76dadbf626f Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Mon, 30 Mar 2015 10:28:19 +0300 Subject: [PATCH 20/25] VCS: Theme output pane Change-Id: I256377d87a91fa101fd53fd65b966d629deb1179 Reviewed-by: Thorben Kroeger Reviewed-by: Orgad Shaneh --- src/plugins/vcsbase/vcsoutputwindow.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/plugins/vcsbase/vcsoutputwindow.cpp b/src/plugins/vcsbase/vcsoutputwindow.cpp index 0d81ec3c4ee..ed017b61535 100644 --- a/src/plugins/vcsbase/vcsoutputwindow.cpp +++ b/src/plugins/vcsbase/vcsoutputwindow.cpp @@ -34,6 +34,7 @@ #include #include +#include #include #include @@ -115,13 +116,14 @@ OutputWindowPlainTextEdit::OutputWindowPlainTextEdit(QWidget *parent) : m_commandFormat(m_defaultFormat), m_messageFormat(m_defaultFormat) { + using Utils::Theme; setReadOnly(true); setUndoRedoEnabled(false); setFrameStyle(QFrame::NoFrame); - m_errorFormat.setForeground(Qt::red); - m_warningFormat.setForeground(Qt::darkYellow); + m_errorFormat.setForeground(Utils::creatorTheme()->color(Theme::OutputPanes_ErrorMessageTextColor)); + m_warningFormat.setForeground(Utils::creatorTheme()->color(Theme::OutputPanes_WarningMessageTextColor)); m_commandFormat.setFontWeight(QFont::Bold); - m_messageFormat.setForeground(Qt::blue); + m_messageFormat.setForeground(Utils::creatorTheme()->color(Theme::OutputPanes_MessageOutput)); m_formatter = new Utils::OutputFormatter; m_formatter->setPlainTextEdit(this); } From a127bb780caeb8db6f520654242bb4d7843d2279 Mon Sep 17 00:00:00 2001 From: Robert Loehning Date: Thu, 26 Mar 2015 14:31:13 +0100 Subject: [PATCH 21/25] Squish: Remove outdated workaround Change-Id: I717e3422f728fcf71bc984c0c9113ecef6341163 Task-number: QTCREATORBUG-13700 Reviewed-by: Christian Stenger --- tests/system/suite_general/tst_build_speedcrunch/test.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tests/system/suite_general/tst_build_speedcrunch/test.py b/tests/system/suite_general/tst_build_speedcrunch/test.py index 9578552a8ad..82a9708d6e6 100644 --- a/tests/system/suite_general/tst_build_speedcrunch/test.py +++ b/tests/system/suite_general/tst_build_speedcrunch/test.py @@ -62,9 +62,8 @@ def main(): test.fatal("Build configuration %s is selected instead of %s" % (buildConfig, config)) continue test.log("Testing build configuration: " + config) - if not JIRA.isBugStillOpen(13700): - invokeMenuItem("Build", "Run qmake") - waitForCompile() + invokeMenuItem("Build", "Run qmake") + waitForCompile() invokeMenuItem("Build", "Rebuild All") waitForCompile(300000) checkCompile() From 257f62b7089d8c7dfc5989f35df52da978fc82da Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Wed, 25 Mar 2015 11:19:15 +0200 Subject: [PATCH 22/25] Dumper: Fix adding quotes to C++ literals Using plain '"' makes the name empty (value=\"\"Foo\"\"). Encode it to hex instead. Change-Id: I5fec9d487f119ba5ca9b5aaa95b50e45a73bafa0 Reviewed-by: hjk --- share/qtcreator/debugger/creatortypes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/share/qtcreator/debugger/creatortypes.py b/share/qtcreator/debugger/creatortypes.py index f1c996f24df..207625718e0 100644 --- a/share/qtcreator/debugger/creatortypes.py +++ b/share/qtcreator/debugger/creatortypes.py @@ -68,7 +68,7 @@ def readLiteral(d, value): return "" def dumpLiteral(d, value): - d.putValue('"' + readLiteral(d, value) + '"') + d.putValue(d.hexencode(readLiteral(d, value)), Hex2EncodedLatin1) def qdump__Core__Id(d, value): try: From 5dcd9fe6947f8cdd48a8b8e5dd67d64914d21e48 Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 30 Mar 2015 12:48:27 +0200 Subject: [PATCH 23/25] Debugger: Change plot display of array data to use lines between dots Change-Id: I6d2cf5ca7d3f4a404a3c112a140aeae067cb3b6d Reviewed-by: Christian Stenger --- share/qtcreator/debugger/dumper.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py index 0326b0dcbcc..cc9a8e46be2 100644 --- a/share/qtcreator/debugger/dumper.py +++ b/share/qtcreator/debugger/dumper.py @@ -158,7 +158,7 @@ if hasSubprocess and hasPlot: s("pyplot.figure(%s)" % matplotFigure[iname]) s("pyplot.suptitle('%s')" % iname) s("data = %s" % data) - s("pyplot.plot([i for i in range(len(data))], data, 'b.')") + s("pyplot.plot([i for i in range(len(data))], data, 'b.-')") time.sleep(0.2) s("pyplot.draw()") matplotProc.stdin.flush() From e91e1a742c8a2eda0a1e3f8827c12fb0c1ef4591 Mon Sep 17 00:00:00 2001 From: Thorben Kroeger Date: Sat, 21 Mar 2015 13:13:59 +0100 Subject: [PATCH 24/25] Theming: fix disabled menu items in dark theme In the dark theme (fusion style under linux), disabled menu items looked bad due to (1) SH_EtchDisabledText being enabled and (2) a bright color for the etch effect. This patch adds color values for normal and disabled text colors for menu items. It also adds a color value "style" which indicates that the color should just stay at the default of the style. The default theme uses this value for the new menu item colors, while the dark theme fixes the ugly colors. The patch also disables etching for disabled text. Task-number: QTCREATORBUG-13447 Change-Id: Ib54504693d28cf2c71f3fc5a88d3de014230b12b Reviewed-by: Eike Ziller Reviewed-by: Thorben Kroeger Reviewed-by: Orgad Shaneh --- share/qtcreator/themes/dark.creatortheme | 2 ++ share/qtcreator/themes/default.creatortheme | 2 ++ src/libs/utils/theme/theme.cpp | 2 ++ src/libs/utils/theme/theme.h | 2 ++ src/plugins/coreplugin/manhattanstyle.cpp | 23 +++++++++++++++++++-- 5 files changed, 29 insertions(+), 2 deletions(-) diff --git a/share/qtcreator/themes/dark.creatortheme b/share/qtcreator/themes/dark.creatortheme index 0f494684546..54721a76273 100644 --- a/share/qtcreator/themes/dark.creatortheme +++ b/share/qtcreator/themes/dark.creatortheme @@ -53,6 +53,8 @@ MenuBarEmptyAreaBackgroundColor=shadowBackground MenuBarItemBackgroundColor=shadowBackground MenuBarItemTextColorDisabled=textDisabled MenuBarItemTextColorNormal=text +MenuItemTextColorDisabled=textDisabled +MenuItemTextColorNormal=text MiniProjectTargetSelectorBackgroundColor=shadowBackground MiniProjectTargetSelectorBorderColor=shadowBackground MiniProjectTargetSelectorSummaryBackgroundColor=shadowBackground diff --git a/share/qtcreator/themes/default.creatortheme b/share/qtcreator/themes/default.creatortheme index 5c02e74c11c..27867b3d5fd 100644 --- a/share/qtcreator/themes/default.creatortheme +++ b/share/qtcreator/themes/default.creatortheme @@ -47,6 +47,8 @@ MenuBarEmptyAreaBackgroundColor=ffff0000 MenuBarItemBackgroundColor=ffff0000 MenuBarItemTextColorDisabled=ffa0a0a4 MenuBarItemTextColorNormal=ff000000 +MenuItemTextColorDisabled=style +MenuItemTextColorNormal=style MiniProjectTargetSelectorBackgroundColor=ffa0a0a0 MiniProjectTargetSelectorBorderColor=ff000000 MiniProjectTargetSelectorSummaryBackgroundColor=ff464646 diff --git a/src/libs/utils/theme/theme.cpp b/src/libs/utils/theme/theme.cpp index c6a37e3c1e5..13843d3dd58 100644 --- a/src/libs/utils/theme/theme.cpp +++ b/src/libs/utils/theme/theme.cpp @@ -113,6 +113,8 @@ QPair Theme::readNamedColor(const QString &color) const { if (d->palette.contains(color)) return qMakePair(d->palette[color], color); + if (color == QLatin1String("style")) + return qMakePair(QColor(), QString()); bool ok = true; const QRgb rgba = color.toLongLong(&ok, 16); diff --git a/src/libs/utils/theme/theme.h b/src/libs/utils/theme/theme.h index 847b1e4bbf4..1567532cee6 100644 --- a/src/libs/utils/theme/theme.h +++ b/src/libs/utils/theme/theme.h @@ -98,6 +98,8 @@ public: MenuBarItemBackgroundColor, MenuBarItemTextColorDisabled, MenuBarItemTextColorNormal, + MenuItemTextColorDisabled, + MenuItemTextColorNormal, MiniProjectTargetSelectorBackgroundColor, MiniProjectTargetSelectorBorderColor, MiniProjectTargetSelectorSummaryBackgroundColor, diff --git a/src/plugins/coreplugin/manhattanstyle.cpp b/src/plugins/coreplugin/manhattanstyle.cpp index 52074ffc575..9326552159c 100644 --- a/src/plugins/coreplugin/manhattanstyle.cpp +++ b/src/plugins/coreplugin/manhattanstyle.cpp @@ -359,7 +359,7 @@ int ManhattanStyle::styleHint(StyleHint hint, const QStyleOption *option, const ret = true; break; case QStyle::SH_EtchDisabledText: - if (panelWidget(widget)) + if (panelWidget(widget) || qobject_cast (widget) ) ret = false; break; case QStyle::SH_ItemView_ArrowKeysNavigateIntoChildren: @@ -614,7 +614,7 @@ void ManhattanStyle::drawPrimitive(PrimitiveElement element, const QStyleOption void ManhattanStyle::drawControl(ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const { - if (!panelWidget(widget)) + if (!panelWidget(widget) && !qobject_cast(widget)) return QProxyStyle::drawControl(element, option, painter, widget); switch (element) { @@ -645,6 +645,25 @@ void ManhattanStyle::drawControl(ControlElement element, const QStyleOption *opt } break; + case CE_MenuItem: + painter->save(); + if (const QStyleOptionMenuItem *mbi = qstyleoption_cast(option)) { + const bool enabled = mbi->state & State_Enabled; + QStyleOptionMenuItem item = *mbi; + item.rect = mbi->rect; + const QColor color = creatorTheme()->color(enabled + ? Theme::MenuItemTextColorNormal + : Theme::MenuItemTextColorDisabled); + if (color.isValid()) { + QPalette pal = mbi->palette; + pal.setBrush(QPalette::Text, color); + item.palette = pal; + } + QProxyStyle::drawControl(element, &item, painter, widget); + } + painter->restore(); + break; + case CE_MenuBarItem: painter->save(); if (const QStyleOptionMenuItem *mbi = qstyleoption_cast(option)) { From 1d0582ecdb4665665f65b0fd54a437e4aeb5da42 Mon Sep 17 00:00:00 2001 From: Robert Loehning Date: Thu, 19 Mar 2015 17:22:12 +0100 Subject: [PATCH 25/25] Squish: Simplify maintenance of kits Change-Id: I757ff8991f1f2c54789b3b536c0300e0fe643bf2 Reviewed-by: Christian Stenger --- tests/system/shared/classes.py | 33 ++++++++++++++++----------------- tests/system/shared/project.py | 16 +++++++--------- 2 files changed, 23 insertions(+), 26 deletions(-) diff --git a/tests/system/shared/classes.py b/tests/system/shared/classes.py index b3de5a34dd3..de02b8e5d35 100644 --- a/tests/system/shared/classes.py +++ b/tests/system/shared/classes.py @@ -32,22 +32,24 @@ import operator # for easier re-usage (because Python hasn't an enum type) class Targets: - DESKTOP_474_GCC = 1 - DESKTOP_480_DEFAULT = 2 - SIMULATOR = 4 - MAEMO5 = 8 - HARMATTAN = 16 - EMBEDDED_LINUX = 32 - DESKTOP_521_DEFAULT = 64 - DESKTOP_531_DEFAULT = 128 - DESKTOP_541_GCC = 256 + ALL_TARGETS = map(lambda x: 2 ** x , range(9)) + + (DESKTOP_474_GCC, + DESKTOP_480_DEFAULT, + SIMULATOR, + MAEMO5, + HARMATTAN, + EMBEDDED_LINUX, + DESKTOP_521_DEFAULT, + DESKTOP_531_DEFAULT, + DESKTOP_541_GCC) = ALL_TARGETS @staticmethod def desktopTargetClasses(): - desktopTargets = (Targets.DESKTOP_474_GCC | Targets.DESKTOP_480_DEFAULT - | Targets.DESKTOP_521_DEFAULT | Targets.DESKTOP_531_DEFAULT) - if platform.system() != 'Darwin': - desktopTargets |= Targets.DESKTOP_541_GCC + desktopTargets = (sum(Targets.ALL_TARGETS) & ~Targets.SIMULATOR & ~Targets.MAEMO5 + & ~Targets.HARMATTAN & ~Targets.EMBEDDED_LINUX) + if platform.system() == 'Darwin': + desktopTargets &= ~Targets.DESKTOP_541_GCC return desktopTargets @staticmethod @@ -88,10 +90,7 @@ class Targets: @staticmethod def intToArray(targets): - available = [Targets.DESKTOP_474_GCC, Targets.DESKTOP_480_DEFAULT, Targets.SIMULATOR, - Targets.MAEMO5, Targets.HARMATTAN, Targets.EMBEDDED_LINUX, - Targets.DESKTOP_521_DEFAULT, Targets.DESKTOP_531_DEFAULT, Targets.DESKTOP_541_GCC] - return filter(lambda x: x & targets == x, available) + return filter(lambda x: x & targets, Targets.ALL_TARGETS) @staticmethod def arrayToInt(targetArr): diff --git a/tests/system/shared/project.py b/tests/system/shared/project.py index a1271972867..609bc6a03fb 100644 --- a/tests/system/shared/project.py +++ b/tests/system/shared/project.py @@ -389,13 +389,11 @@ def __chooseTargets__(targets=Targets.DESKTOP_474_GCC, availableTargets=None): available = availableTargets else: # following targets depend on the build environment - added for further/later tests - available = [Targets.DESKTOP_474_GCC, Targets.DESKTOP_480_DEFAULT, Targets.DESKTOP_521_DEFAULT, - Targets.DESKTOP_531_DEFAULT, Targets.MAEMO5, Targets.EMBEDDED_LINUX, - Targets.SIMULATOR, Targets.HARMATTAN] + available = Targets.ALL_TARGETS if platform.system() in ('Windows', 'Microsoft'): available.remove(Targets.EMBEDDED_LINUX) - if platform.system() != 'Darwin': - available.append(Targets.DESKTOP_541_GCC) + elif platform.system() == 'Darwin': + available.remove(Targets.DESKTOP_541_GCC) for target in filter(lambda x: x in available, (Targets.MAEMO5, Targets.HARMATTAN)): available.remove(target) @@ -634,10 +632,10 @@ def __getSupportedPlatforms__(text, templateName, getAsStrings=False): result.append(Targets.SIMULATOR) elif 'Platform independent' in text: # MAEMO5 and HARMATTAN could be wrong here - depends on having Madde plugin enabled or not - result = [Targets.DESKTOP_474_GCC, Targets.DESKTOP_480_DEFAULT, Targets.DESKTOP_521_DEFAULT, - Targets.DESKTOP_531_DEFAULT, Targets.MAEMO5, Targets.SIMULATOR, Targets.HARMATTAN] - if platform.system() != 'Darwin': - result.append(Targets.DESKTOP_541_GCC) + result = Targets.ALL_TARGETS + result.remove(Targets.EMBEDDED_LINUX) + if platform.system() == 'Darwin': + result.remove(Targets.DESKTOP_541_GCC) else: test.warning("Returning None (__getSupportedPlatforms__())", "Parsed text: '%s'" % text)