# Copyright (C) 2016 The Qt Company Ltd. # SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 # this function switches the MainWindow of creator to the specified view def switchViewTo(view): # make sure that no tooltip is shown, so move the mouse away and wait until all disappear mouseMove(waitForObject(':Qt Creator_Core::Internal::MainWindow'), -20, -20) waitFor("not QToolTip.isVisible()", 15000) if view < ViewConstants.FIRST_AVAILABLE or view > ViewConstants.LAST_AVAILABLE: return mouseClick(waitForObject("{name='ModeSelector' type='Core::Internal::FancyTabBar' visible='1' " "window=':Qt Creator_Core::Internal::MainWindow'}"), 20, 20 + 52 * view, 0, Qt.LeftButton) def __kitIsActivated__(kit): return not ("

Click to activate

" in str(kit.toolTip) or "

Kit is unsuited for project

" in str(kit.toolTip)) # returns a list of the IDs (see class Targets) of all kits # which are currently configured for the active project # Creator must be in projects mode when calling def iterateConfiguredKits(): treeView = waitForObject(":Projects.ProjectNavigationTreeView") bAndRIndex = getQModelIndexStr("text='Build & Run'", ":Projects.ProjectNavigationTreeView") kitIndices = dumpIndices(treeView.model(), waitForObject(bAndRIndex)) configuredKitNames = map(lambda t: str(t.data(0)), filter(__kitIsActivated__, kitIndices)) return map(Targets.getIdForTargetName, configuredKitNames) # This function switches to the build or the run settings (inside the Projects view). # If you haven't already switched to the Projects view this will raise a LookupError. # It will return a boolean value indicating whether the selected Kit was changed by the function. # Note that a 'False' return does not indicate any error. # param wantedKit specifies the ID of the kit (see class Targets) # for which to switch into the specified settings # param projectSettings specifies where to switch to (must be one of # ProjectSettings.BUILD or ProjectSettings.RUN) def switchToBuildOrRunSettingsFor(wantedKit, projectSettings): treeView = waitForObject(":Projects.ProjectNavigationTreeView") bAndRIndex = getQModelIndexStr("text='Build & Run'", ":Projects.ProjectNavigationTreeView") wantedKitName = Targets.getStringForTarget(wantedKit) wantedKitIndexString = getQModelIndexStr("text='%s'" % wantedKitName, bAndRIndex) if not test.verify(__kitIsActivated__(findObject(wantedKitIndexString)), "Verifying target '%s' is enabled." % wantedKitName): raise Exception("Kit '%s' is not activated in the project." % wantedKitName) index = waitForObject(wantedKitIndexString) projectAlreadySelected = index.font.bold if projectAlreadySelected: test.log("Kit '%s' is already selected." % wantedKitName) else: test.log("Selecting kit '%s'..." % wantedKitName) treeView.scrollTo(index) mouseClick(index) if projectSettings == ProjectSettings.BUILD: settingsIndex = getQModelIndexStr("text='Build'", wantedKitIndexString) elif projectSettings == ProjectSettings.RUN: settingsIndex = getQModelIndexStr("text='Run'", wantedKitIndexString) else: raise Exception("Unexpected projectSettings parameter (%s), needs to be BUILD or RUN." % str(projectSettings)) mouseClick(waitForObject(settingsIndex)) return not projectAlreadySelected # this function switches "Run in terminal" on or off in a project's run settings # param wantedKit specifies the ID of the kit to edit (see class Targets) # param runInTerminal specifies if "Run in terminal should be turned on (True) or off (False) def setRunInTerminal(wantedKit, runInTerminal=True): switchViewTo(ViewConstants.PROJECTS) switchToBuildOrRunSettingsFor(wantedKit, ProjectSettings.RUN) ensureChecked("{window=':Qt Creator_Core::Internal::MainWindow' text='Run in terminal'\ type='QCheckBox' unnamed='1' visible='1'}", runInTerminal) switchViewTo(ViewConstants.EDIT) def __getTargetFromToolTip__(toolTip): if toolTip == None or not isString(toolTip): test.warning("Parameter toolTip must be of type str and can't be None!") return None pattern = re.compile(".*Kit:(.*)Deploy.*") target = pattern.match(toolTip) if target == None: test.fatal("UI seems to have changed - expected ToolTip does not match.", "ToolTip: '%s'" % toolTip) return None return target.group(1).split("
")[0].strip() def getExecutableAndTargetFromToolTip(toolTip): target = __getTargetFromToolTip__(toolTip) if toolTip == None or not isString(toolTip): return None, target pattern = re.compile('.*Run:(.*)

%s

Click to activate

" % kitString switchViewTo(ViewConstants.PROJECTS) try: waitForObject(":Projects.ProjectNavigationTreeView") wanted = getQModelIndexStr("text='%s'" % kitString, bAndRIndex) index = findObject(wanted) if str(index.toolTip).startswith(clickToActivate): mouseClick(index) test.verify(waitFor("not str(index.toolTip).startswith(clickToActivate)", 1500), "Kit added for this project") else: test.warning("Kit is already added for this project.") mouseClick(index) test.verify(waitFor("index.font.bold == True", 1500), "Verifying whether kit is current active") except: return False finally: switchViewTo(ViewConstants.EDIT) return True