Merge remote-tracking branch 'origin/13.0' into HEAD
Change-Id: I1f87297930db420606aab8d7016c290483f262c0
Before Width: | Height: | Size: 9.7 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 33 KiB |
BIN
doc/qtcreator/images/qtquick-example-setting-breakpoint1.webp
Normal file
After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 7.4 KiB |
BIN
doc/qtcreator/images/qtquick-example-setting-breakpoint2.webp
Normal file
After Width: | Height: | Size: 6.1 KiB |
Before Width: | Height: | Size: 31 KiB |
BIN
doc/qtcreator/images/qtquick-example-setting-breakpoint3.webp
Normal file
After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 56 KiB |
BIN
doc/qtcreator/images/qtquick-example-stack.webp
Normal file
After Width: | Height: | Size: 25 KiB |
@@ -430,8 +430,8 @@
|
|||||||
The Performance Analyzer can read Perf data files generated in either frame
|
The Performance Analyzer can read Perf data files generated in either frame
|
||||||
pointer or dwarf mode. However, to generate the files correctly, numerous
|
pointer or dwarf mode. However, to generate the files correctly, numerous
|
||||||
preconditions have to be met. All system images for the
|
preconditions have to be met. All system images for the
|
||||||
\l{https://doc.qt.io/Boot2Qt/qtdc-supported-platforms.html}
|
\l{Support Levels for Target Hardware}{supported embedded platforms}
|
||||||
{Boot2Qt:Supported Target Devices and Development Hosts} are correctly set
|
are correctly set
|
||||||
up for profiling in the dwarf mode. For other devices, check whether Perf
|
up for profiling in the dwarf mode. For other devices, check whether Perf
|
||||||
can read back its own data in a sensible way by checking the output of
|
can read back its own data in a sensible way by checking the output of
|
||||||
\c {perf report} or \c {perf script} for the recorded Perf data files.
|
\c {perf report} or \c {perf script} for the recorded Perf data files.
|
||||||
|
@@ -11,6 +11,9 @@
|
|||||||
You can connect Android devices to the development PC using USB cables to
|
You can connect Android devices to the development PC using USB cables to
|
||||||
build, run, debug, and analyze applications from \QC.
|
build, run, debug, and analyze applications from \QC.
|
||||||
|
|
||||||
|
\note \QC only detects a device and connects to it after you
|
||||||
|
\l{Debugging on Android Devices}{enable USB debugging on it}.
|
||||||
|
|
||||||
To develop for Android, you must install a tool chain for building
|
To develop for Android, you must install a tool chain for building
|
||||||
applications for Android devices on the development PC. \QC can automatically
|
applications for Android devices on the development PC. \QC can automatically
|
||||||
download and install the tool chain and create a suitable build and run
|
download and install the tool chain and create a suitable build and run
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
// Copyright (C) 2018 The Qt Company Ltd.
|
// Copyright (C) 2024 The Qt Company Ltd.
|
||||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
|
||||||
|
|
||||||
// **********************************************************************
|
// **********************************************************************
|
||||||
@@ -47,13 +47,13 @@
|
|||||||
border on the line where the \c startNewGame() function is
|
border on the line where the \c startNewGame() function is
|
||||||
called (1).
|
called (1).
|
||||||
|
|
||||||
\image qtquick-example-setting-breakpoint1.png
|
\image qtquick-example-setting-breakpoint1.webp {Breakpoint in the code editor}
|
||||||
|
|
||||||
The red circle indicates that a breakpoint is now set on that line
|
The red circle indicates that a breakpoint is now set on that line
|
||||||
number.
|
number.
|
||||||
|
|
||||||
\li Select \uicontrol Debug > \uicontrol {Start Debugging} >
|
\li Go to \uicontrol Debug > \uicontrol {Start Debugging} >
|
||||||
\uicontrol {Start Debugging of Startup Project} or press
|
\uicontrol {Start Debugging of Startup Project}, or press
|
||||||
\key{F5}.
|
\key{F5}.
|
||||||
|
|
||||||
\li Once the Same Game application starts, select \uicontrol {Puzzle}
|
\li Once the Same Game application starts, select \uicontrol {Puzzle}
|
||||||
@@ -63,26 +63,26 @@
|
|||||||
|
|
||||||
\li When the debugger hits the breakpoint, it interrupts the
|
\li When the debugger hits the breakpoint, it interrupts the
|
||||||
application. \QC displays the nested function calls leading to the
|
application. \QC displays the nested function calls leading to the
|
||||||
current position as a call stack trace (1).
|
current position as a call stack trace.
|
||||||
|
|
||||||
\image qtquick-example-setting-breakpoint2.png
|
\image qtquick-example-setting-breakpoint2.webp {Debugger view}
|
||||||
|
|
||||||
\li Click the \inlineimage icons/debugger_stepinto_small.png
|
\li Select \inlineimage icons/debugger_stepinto_small.png
|
||||||
(\uicontrol {Step Into}) button on the toolbar or press \key F11 to step
|
(\uicontrol {Step Into}) on the toolbar or press \key F11 to step
|
||||||
into the code in the stack. The samegame.js file opens in the code
|
into the code in the stack. The samegame.js file opens in the code
|
||||||
editor at the function that starts a new game.
|
editor at the function that starts a new game.
|
||||||
|
|
||||||
\image qtquick-example-stack.png
|
\image qtquick-example-stack.webp {Stack view}
|
||||||
|
|
||||||
\li Examine the local variables in the \uicontrol Locals
|
\li Examine the local variables in the \uicontrol Locals
|
||||||
view. Step through the code to see how the information changes in
|
view. Step through the code to see how the information changes in
|
||||||
the view.
|
the view.
|
||||||
|
|
||||||
\li Add a breakpoint at the end of the \c {startNewGame()} function, and
|
\li Add a breakpoint at the end of the \c {startNewGame()} function, and
|
||||||
click \inlineimage icons/qtcreator-debugging-continue.png
|
select \inlineimage icons/qtcreator-debugging-continue.png
|
||||||
(\uicontrol Continue) to hit the breakpoint.
|
(\uicontrol Continue) to hit the breakpoint.
|
||||||
|
|
||||||
\image qtquick-example-setting-breakpoint3.png
|
\image qtquick-example-setting-breakpoint3.webp {Second breakpoint in the Breakpoints view}
|
||||||
|
|
||||||
\li To execute JavaScript commands in the current context, open the
|
\li To execute JavaScript commands in the current context, open the
|
||||||
\uicontrol {QML Debugger Console}.
|
\uicontrol {QML Debugger Console}.
|
||||||
@@ -97,11 +97,11 @@
|
|||||||
|
|
||||||
\image qtquick-example-qml-inspector.png
|
\image qtquick-example-qml-inspector.png
|
||||||
|
|
||||||
\li Select \uicontrol Debug > \uicontrol {Show Application on Top} to
|
\li Go to \uicontrol Debug > \uicontrol {Show Application on Top} to
|
||||||
keep the application visible while you interact with the debugger.
|
keep the application visible while you interact with the debugger.
|
||||||
|
|
||||||
\li Select \uicontrol Debug > \uicontrol Select to activate selection
|
\li Go to \uicontrol Debug > \uicontrol Select to activate selection
|
||||||
mode and then click the \uicontrol Menu button to move into the
|
mode, and then select \uicontrol Menu to move into the
|
||||||
\uicontrol menuButton component in the \uicontrol Locals view and
|
\uicontrol menuButton component in the \uicontrol Locals view and
|
||||||
the code editor.
|
the code editor.
|
||||||
|
|
||||||
|
@@ -1,6 +1,14 @@
|
|||||||
// Copyright (C) 2022 The Qt Company Ltd.
|
// Copyright (C) 2022 The Qt Company Ltd.
|
||||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\externalpage https://doc.qt.io/Boot2Qt/index.html
|
||||||
|
\title Boot2Qt: Documentation
|
||||||
|
*/
|
||||||
|
/*!
|
||||||
|
\externalpage https://doc.qt.io/Boot2Qt/b2qt-requirements-x11.html#setting-up-usb-access-to-embedded-devices
|
||||||
|
\title Boot2Qt: Setting Up USB Access to Embedded Devices
|
||||||
|
*/
|
||||||
/*!
|
/*!
|
||||||
\externalpage https://doc.qt.io/qt/qtqml-index.html
|
\externalpage https://doc.qt.io/qt/qtqml-index.html
|
||||||
\title Qt Qml
|
\title Qt Qml
|
||||||
|
@@ -47,8 +47,7 @@
|
|||||||
\note On Ubuntu Linux, the development user account must have access to the
|
\note On Ubuntu Linux, the development user account must have access to the
|
||||||
plugged-in devices. To grant them access to the device via USB, create a new
|
plugged-in devices. To grant them access to the device via USB, create a new
|
||||||
\c udev rule, as described in
|
\c udev rule, as described in
|
||||||
\l{https://doc.qt.io/Boot2Qt/b2qt-requirements-x11.html#setting-up-usb-access-to-embedded-devices}
|
\l{Boot2Qt: Setting Up USB Access to Embedded Devices}.
|
||||||
{Boot2Qt: Setting Up USB Access to Embedded Devices}.
|
|
||||||
|
|
||||||
You can edit the settings later in \preferences >
|
You can edit the settings later in \preferences >
|
||||||
\uicontrol Devices > \uicontrol Devices.
|
\uicontrol Devices > \uicontrol Devices.
|
||||||
@@ -149,4 +148,6 @@
|
|||||||
application files to the device. For more information, see
|
application files to the device. For more information, see
|
||||||
\l{Boot2Qt Run Settings}.
|
\l{Boot2Qt Run Settings}.
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
|
\sa {Boot2Qt: Setting Up USB Access to Embedded Devices}
|
||||||
*/
|
*/
|
||||||
|
@@ -46,17 +46,11 @@
|
|||||||
tools to customize the contents of the stack and to take it into
|
tools to customize the contents of the stack and to take it into
|
||||||
production hardware.
|
production hardware.
|
||||||
|
|
||||||
You need either Windows 10 64-bit or later or Ubuntu Linux 64-bit 20.04 LTS
|
|
||||||
or later to install and use Boot2Qt.
|
|
||||||
|
|
||||||
The following topics have more information about developing applications
|
The following topics have more information about developing applications
|
||||||
for Boot2Qt devices:
|
for Boot2Qt devices:
|
||||||
|
|
||||||
\list
|
\list
|
||||||
\li \l{https://doc.qt.io/Boot2Qt/qtdc-supported-platforms.html}
|
\li \l{Boot2Qt: Documentation}
|
||||||
{Boot2Qt: Supported Target Devices and Development Hosts}
|
|
||||||
\li \l{https://doc.qt.io/Boot2Qt/b2qt-installation-guides.html}
|
|
||||||
{Boot2Qt: Installation Guides}
|
|
||||||
\li \l{Connecting Boot2Qt Devices}
|
\li \l{Connecting Boot2Qt Devices}
|
||||||
\li \l{Boot2Qt Run Settings}
|
\li \l{Boot2Qt Run Settings}
|
||||||
\li \l{Deploying to Boot2Qt}
|
\li \l{Deploying to Boot2Qt}
|
||||||
|
@@ -28,8 +28,7 @@
|
|||||||
To run an example application on a Boot2Qt device, you must set up
|
To run an example application on a Boot2Qt device, you must set up
|
||||||
Boot2Qt on the development host and create connections
|
Boot2Qt on the development host and create connections
|
||||||
between the host and devices. For more information, see
|
between the host and devices. For more information, see
|
||||||
\l{https://doc.qt.io/Boot2Qt/b2qt-installation-guides.html}
|
\l{Boot2Qt: Documentation}.
|
||||||
{Boot2Qt: Installation Guides}
|
|
||||||
|
|
||||||
If you have \l{Qt Design Studio Manual}{\QDS} installed, you can open
|
If you have \l{Qt Design Studio Manual}{\QDS} installed, you can open
|
||||||
\QDS examples from \QC in \QDS.
|
\QDS examples from \QC in \QDS.
|
||||||
@@ -70,9 +69,8 @@
|
|||||||
|
|
||||||
If build errors occur, check that you have a Qt version, a
|
If build errors occur, check that you have a Qt version, a
|
||||||
\l{Add compilers}{compiler}, and the necessary kits installed. If
|
\l{Add compilers}{compiler}, and the necessary kits installed. If
|
||||||
you are building for an \l{Connecting Android Devices}{Android device}
|
you are building for an Android or iOS device, check that you set up
|
||||||
or \l{Connecting iOS Devices}{iOS device}, check that you set up the
|
the development environment correctly.
|
||||||
development environment correctly.
|
|
||||||
|
|
||||||
The \uicontrol Build progress bar on the toolbar turns green when
|
The \uicontrol Build progress bar on the toolbar turns green when
|
||||||
you build the project successfully. The application opens on the
|
you build the project successfully. The application opens on the
|
||||||
@@ -80,4 +78,7 @@
|
|||||||
|
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
|
\sa {Add compilers}, {Add kits}, {Add Qt versions},
|
||||||
|
{Connecting Android Devices}, {Connecting iOS Devices},
|
||||||
|
{Compile Output}, {Boot2Qt: Documentation}, {Qt Design Studio Manual}
|
||||||
*/
|
*/
|
||||||
|
@@ -27,9 +27,7 @@
|
|||||||
\list
|
\list
|
||||||
\li \l{Connecting Android Devices}{Android}
|
\li \l{Connecting Android Devices}{Android}
|
||||||
\li \l{Connecting Bare Metal Devices}{Bare Metal}
|
\li \l{Connecting Bare Metal Devices}{Bare Metal}
|
||||||
\li \l{https://doc.qt.io/Boot2Qt/b2qt-installation-guides.html}
|
\li \l{Boot2Qt: Documentation}{Boot2Q} (commercial only)
|
||||||
{Boot2Qt} (commercial only)
|
|
||||||
\li \l{Emulator}{Boot2Qt Emulator} (commercial only)
|
|
||||||
\li \l{Adding Docker Devices}{Docker} (experimental)
|
\li \l{Adding Docker Devices}{Docker} (experimental)
|
||||||
\li \l{Connecting iOS Devices}{iOS}
|
\li \l{Connecting iOS Devices}{iOS}
|
||||||
\li iOS Simulator
|
\li iOS Simulator
|
||||||
@@ -147,6 +145,9 @@
|
|||||||
This setting is used to tell the code model which compiler is used.
|
This setting is used to tell the code model which compiler is used.
|
||||||
If your project type and build tool support it, \QC also tells the
|
If your project type and build tool support it, \QC also tells the
|
||||||
build tool to use this compiler for building the project.
|
build tool to use this compiler for building the project.
|
||||||
|
|
||||||
|
\note qmake ignores the value of this field and fetches the compiler
|
||||||
|
information from \uicontrol {Qt mkspec}, which you can change.
|
||||||
\row
|
\row
|
||||||
\li \uicontrol Environment
|
\li \uicontrol Environment
|
||||||
\li Select \uicontrol Change to modify environment variable values for
|
\li Select \uicontrol Change to modify environment variable values for
|
||||||
|
@@ -8,10 +8,10 @@
|
|||||||
|
|
||||||
\title Previewing on Devices
|
\title Previewing on Devices
|
||||||
|
|
||||||
To preview UIs on Android devices, you need to enable USB debugging on them
|
To preview UIs on Android devices, enable USB debugging on them
|
||||||
and connect them to your system with a USB cable.
|
and connect them to your system with a USB cable.
|
||||||
|
|
||||||
To preview UIs on Boot2Qt devices, you need to connect the devices to your
|
To preview UIs on Boot2Qt devices, connect the devices to your
|
||||||
system with a USB cable, or a wired or wireless connection, depending on
|
system with a USB cable, or a wired or wireless connection, depending on
|
||||||
the device, and configure connections to them. The necessary kits have been
|
the device, and configure connections to them. The necessary kits have been
|
||||||
predefined and you only need to enable them for your current project.
|
predefined and you only need to enable them for your current project.
|
||||||
@@ -20,8 +20,8 @@
|
|||||||
necessary files to a location in a device where you want to run the
|
necessary files to a location in a device where you want to run the
|
||||||
executable at.
|
executable at.
|
||||||
|
|
||||||
\note To preview on a wirelessly connected device, select \preferences > \uicontrol Devices
|
\note To preview on a wirelessly connected device, go to \preferences >
|
||||||
and connect the device.
|
\uicontrol Devices and connect the device.
|
||||||
|
|
||||||
To preview a UI on a device:
|
To preview a UI on a device:
|
||||||
|
|
||||||
@@ -48,13 +48,13 @@
|
|||||||
The USB debugging feature on Android devices enables creating connections
|
The USB debugging feature on Android devices enables creating connections
|
||||||
to the devices from \QDS and running the preview utility on them.
|
to the devices from \QDS and running the preview utility on them.
|
||||||
|
|
||||||
Debugging is enabled in different ways on different Android devices.
|
Debugging is turned on in different ways on different Android devices.
|
||||||
Look for \uicontrol {USB Debugging} under \uicontrol {Developer Options}.
|
Look for \uicontrol {USB Debugging} under \uicontrol {Developer Options}.
|
||||||
On some devices \uicontrol {Developer Options} is hidden and becomes visible
|
On some devices, \uicontrol {Developer Options} is hidden and becomes visible
|
||||||
when you tap the \uicontrol {Build number} field in \uicontrol Settings >
|
when you tap the \uicontrol {Build number} field in \uicontrol Settings >
|
||||||
\uicontrol About several times.
|
\uicontrol About several times.
|
||||||
|
|
||||||
After you have enabled debugging, connect the Android device to the system
|
After you turn on debugging, connect the Android device to the system
|
||||||
with a USB cable.
|
with a USB cable.
|
||||||
|
|
||||||
The first time you preview a UI on devices, the preview utility
|
The first time you preview a UI on devices, the preview utility
|
||||||
@@ -70,17 +70,8 @@
|
|||||||
|
|
||||||
\section2 Previewing on Boot2Qt Devices
|
\section2 Previewing on Boot2Qt Devices
|
||||||
|
|
||||||
You can preview UIs on Boot2Qt devices. For a list of supported devices, see
|
You can preview UIs on supported Boot2Qt devices that you configure as
|
||||||
\l{https://doc.qt.io/Boot2Qt/qtdc-supported-platforms.html}
|
instructed in the Boot2Qt documentation.
|
||||||
{Boot2Qt: Supported Target Devices and Development Hosts}.
|
|
||||||
|
|
||||||
You must configure the device as instructed in the
|
\sa {Boot2Qt: Documentation}, {Support Levels for Target Hardware}
|
||||||
\l{https://doc.qt.io/Boot2Qt/b2qt-installation-guides.html}
|
|
||||||
{Boot2Qt: Installation Guides}.
|
|
||||||
|
|
||||||
\note At the time of this writing, \macos is not supported as a development
|
|
||||||
host for Boot2Qt. This means that you cannot preview UIs on
|
|
||||||
devices if you are using \QC on \macos. For more information, see
|
|
||||||
\l {https://doc.qt.io/Boot2Qt/qtdc-supported-platforms.html#supported-development-hosts}
|
|
||||||
{Boot2Qt: Supported Development Hosts}.
|
|
||||||
*/
|
*/
|
||||||
|
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"common": {
|
"common": {
|
||||||
"sdk_tools_url": {
|
"sdk_tools_url": {
|
||||||
"linux": "https://dl.google.com/android/repository/commandlinetools-linux-9123335_latest.zip",
|
"linux": "https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip",
|
||||||
"linux_sha256": "0bebf59339eaa534f4217f8aa0972d14dc49e7207be225511073c661ae01da0a",
|
"linux_sha256": "2d2d50857e4eb553af5a6dc3ad507a17adf43d115264b1afc116f95c92e5e258",
|
||||||
"windows": "https://dl.google.com/android/repository/commandlinetools-win-9123335_latest.zip",
|
"windows": "https://dl.google.com/android/repository/commandlinetools-win-11076708_latest.zip",
|
||||||
"windows_sha256": "8a90e6a3deb2fa13229b2e335efd07687dcc8a55a3c544da9f40b41404993e7d",
|
"windows_sha256": "4d6931209eebb1bfb7c7e8b240a6a3cb3ab24479ea294f3539429574b1eec862",
|
||||||
"mac": "https://dl.google.com/android/repository/commandlinetools-mac-9123335_latest.zip",
|
"mac": "https://dl.google.com/android/repository/commandlinetools-mac-11076708_latest.zip",
|
||||||
"mac_sha256": "d0192807f7e1cd4a001d13bb1e5904fc287b691211648877258aa44d1fa88275"
|
"mac_sha256": "7bc5c72ba0275c80a8f19684fb92793b83a6b5c94d4d179fc5988930282d7e64"
|
||||||
},
|
},
|
||||||
"sdk_essential_packages": {
|
"sdk_essential_packages": {
|
||||||
"default": ["platform-tools", "platforms;android-31", "cmdline-tools;latest"],
|
"default": ["platform-tools", "platforms;android-31", "cmdline-tools;latest"],
|
||||||
|
@@ -353,7 +353,9 @@ void DiagramSceneModel::selectAllElements()
|
|||||||
void DiagramSceneModel::selectElement(DElement *element)
|
void DiagramSceneModel::selectElement(DElement *element)
|
||||||
{
|
{
|
||||||
QGraphicsItem *selectItem = m_elementToItemMap.value(element);
|
QGraphicsItem *selectItem = m_elementToItemMap.value(element);
|
||||||
for (QGraphicsItem *item : std::as_const(m_selectedItems)) {
|
// We have to create a copy since "setSelected" may modify m_selectedItems
|
||||||
|
const QSet<QGraphicsItem *> copy = m_selectedItems;
|
||||||
|
for (QGraphicsItem *item : copy) {
|
||||||
if (item != selectItem)
|
if (item != selectItem)
|
||||||
item->setSelected(false);
|
item->setSelected(false);
|
||||||
}
|
}
|
||||||
|
@@ -53,7 +53,8 @@ public:
|
|||||||
uint ownerId(FileOwner) const override;
|
uint ownerId(FileOwner) const override;
|
||||||
QString owner(FileOwner) const override;
|
QString owner(FileOwner) const override;
|
||||||
|
|
||||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
|
// The FileTime change in QAbstractFileEngine, in qtbase, is in since Qt 6.7.1
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 7, 1)
|
||||||
using FileTime = QFile::FileTime;
|
using FileTime = QFile::FileTime;
|
||||||
#endif
|
#endif
|
||||||
bool setFileTime(const QDateTime &newDate, FileTime time) override;
|
bool setFileTime(const QDateTime &newDate, FileTime time) override;
|
||||||
|
@@ -45,7 +45,11 @@ signals:
|
|||||||
void lostFocus();
|
void lostFocus();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void focusOutEvent(QFocusEvent *) override { emit lostFocus(); }
|
void focusOutEvent(QFocusEvent *e) override
|
||||||
|
{
|
||||||
|
QPlainTextEdit::focusOutEvent(e);
|
||||||
|
emit lostFocus();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
|
@@ -769,6 +769,7 @@ private:
|
|||||||
std::unique_ptr<ProcessInterfaceHandler> m_processHandler;
|
std::unique_ptr<ProcessInterfaceHandler> m_processHandler;
|
||||||
mutable QMutex m_mutex;
|
mutable QMutex m_mutex;
|
||||||
QList<ProcessInterfaceSignal *> m_signals;
|
QList<ProcessInterfaceSignal *> m_signals;
|
||||||
|
Guard m_guard;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ProcessPrivate : public QObject
|
class ProcessPrivate : public QObject
|
||||||
@@ -961,6 +962,10 @@ GeneralProcessBlockingImpl::GeneralProcessBlockingImpl(ProcessPrivate *parent)
|
|||||||
|
|
||||||
bool GeneralProcessBlockingImpl::waitForSignal(ProcessSignalType newSignal, QDeadlineTimer timeout)
|
bool GeneralProcessBlockingImpl::waitForSignal(ProcessSignalType newSignal, QDeadlineTimer timeout)
|
||||||
{
|
{
|
||||||
|
QTC_ASSERT(!m_guard.isLocked(), qWarning("Process::waitForSignal() called recursively. "
|
||||||
|
"The call is being ignored."); return false);
|
||||||
|
GuardLocker locker(m_guard);
|
||||||
|
|
||||||
m_processHandler->setParent(nullptr);
|
m_processHandler->setParent(nullptr);
|
||||||
|
|
||||||
QThread thread;
|
QThread thread;
|
||||||
|
@@ -532,7 +532,7 @@ QString androidNameForApiLevel(int x)
|
|||||||
case 33:
|
case 33:
|
||||||
return QLatin1String("Android 13.0 (\"Tiramisu\")");
|
return QLatin1String("Android 13.0 (\"Tiramisu\")");
|
||||||
case 34:
|
case 34:
|
||||||
return QLatin1String("Android API 34");
|
return QLatin1String("Android 14.0 (\"UpsideDownCake\")");
|
||||||
default:
|
default:
|
||||||
return Tr::tr("Unknown Android version. API Level: %1").arg(x);
|
return Tr::tr("Unknown Android version. API Level: %1").arg(x);
|
||||||
}
|
}
|
||||||
|
@@ -126,10 +126,8 @@ static void sdkManagerCommand(const AndroidConfig &config, const QStringList &ar
|
|||||||
bool assertionFound = false;
|
bool assertionFound = false;
|
||||||
proc.setStdOutCallback([offset, progressQuota, &proc, &assertionFound, &promise](const QString &out) {
|
proc.setStdOutCallback([offset, progressQuota, &proc, &assertionFound, &promise](const QString &out) {
|
||||||
int progressPercent = parseProgress(out, assertionFound);
|
int progressPercent = parseProgress(out, assertionFound);
|
||||||
if (assertionFound) {
|
if (assertionFound)
|
||||||
proc.stop();
|
proc.stop();
|
||||||
proc.waitForFinished();
|
|
||||||
}
|
|
||||||
if (progressPercent != -1)
|
if (progressPercent != -1)
|
||||||
promise.setProgressValue(offset + qRound((progressPercent / 100.0) * progressQuota));
|
promise.setProgressValue(offset + qRound((progressPercent / 100.0) * progressQuota));
|
||||||
});
|
});
|
||||||
|
@@ -132,7 +132,7 @@ void ActivationSequenceContextProcessor::processComment()
|
|||||||
|
|
||||||
void ActivationSequenceContextProcessor::processInclude()
|
void ActivationSequenceContextProcessor::processInclude()
|
||||||
{
|
{
|
||||||
if (m_token.isLiteral() && !isCompletionKindStringLiteralOrSlash())
|
if (m_token.isStringLiteral() && !isCompletionKindStringLiteralOrSlash())
|
||||||
m_completionKind = CPlusPlus::T_EOF_SYMBOL;
|
m_completionKind = CPlusPlus::T_EOF_SYMBOL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -749,12 +749,15 @@ CMakeBuildSystem::projectFileArgumentPosition(const QString &targetName, const Q
|
|||||||
&& func.Arguments().size() > 1 && func.Arguments().front().Value == target_name;
|
&& func.Arguments().size() > 1 && func.Arguments().front().Value == target_name;
|
||||||
});
|
});
|
||||||
|
|
||||||
for (const auto &func : {function, targetSourcesFunc, addQmlModuleFunc}) {
|
auto setSourceFilePropFunc = findFunction(*cmakeListFile, [](const auto &func) {
|
||||||
|
return func.LowerCaseName() == "set_source_files_properties";
|
||||||
|
});
|
||||||
|
|
||||||
|
for (const auto &func : {function, targetSourcesFunc, addQmlModuleFunc, setSourceFilePropFunc}) {
|
||||||
if (!func.has_value())
|
if (!func.has_value())
|
||||||
continue;
|
continue;
|
||||||
auto filePathArgument = Utils::findOrDefault(func->Arguments(),
|
auto filePathArgument = Utils::findOrDefault(
|
||||||
[file_name = fileName.toStdString()](
|
func->Arguments(), [file_name = fileName.toStdString()](const auto &arg) {
|
||||||
const auto &arg) {
|
|
||||||
return arg.Value == file_name;
|
return arg.Value == file_name;
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -925,49 +928,60 @@ bool CMakeBuildSystem::renameFile(Node *context,
|
|||||||
{
|
{
|
||||||
if (auto n = dynamic_cast<CMakeTargetNode *>(context)) {
|
if (auto n = dynamic_cast<CMakeTargetNode *>(context)) {
|
||||||
const FilePath projDir = n->filePath().canonicalPath();
|
const FilePath projDir = n->filePath().canonicalPath();
|
||||||
const QString newRelPathName
|
const FilePath newRelPath = newFilePath.canonicalPath().relativePathFrom(projDir).cleanPath();
|
||||||
= newFilePath.canonicalPath().relativePathFrom(projDir).cleanPath().toString();
|
const QString newRelPathName = newRelPath.toString();
|
||||||
|
|
||||||
|
// FilePath needs the file to exist on disk, the old file has already been renamed
|
||||||
|
const QString oldRelPathName
|
||||||
|
= newRelPath.parentDir().pathAppended(oldFilePath.fileName()).cleanPath().toString();
|
||||||
|
|
||||||
const QString targetName = n->buildKey();
|
const QString targetName = n->buildKey();
|
||||||
const QString key
|
const QString key
|
||||||
= QStringList{projDir.path(), targetName, oldFilePath.path(), newFilePath.path()}.join(
|
= QStringList{projDir.path(), targetName, oldFilePath.path(), newFilePath.path()}.join(
|
||||||
";");
|
";");
|
||||||
|
|
||||||
auto fileToRename = m_filesToBeRenamed.take(key);
|
std::optional<CMakeBuildSystem::ProjectFileArgumentPosition> fileToRename
|
||||||
if (!fileToRename.cmakeFile.exists()) {
|
= m_filesToBeRenamed.take(key);
|
||||||
|
if (!fileToRename->cmakeFile.exists()) {
|
||||||
qCCritical(cmakeBuildSystemLog).noquote()
|
qCCritical(cmakeBuildSystemLog).noquote()
|
||||||
<< "File" << fileToRename.cmakeFile.path() << "does not exist.";
|
<< "File" << fileToRename->cmakeFile.path() << "does not exist.";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
do {
|
||||||
BaseTextEditor *editor = qobject_cast<BaseTextEditor *>(
|
BaseTextEditor *editor = qobject_cast<BaseTextEditor *>(
|
||||||
Core::EditorManager::openEditorAt({fileToRename.cmakeFile,
|
Core::EditorManager::openEditorAt(
|
||||||
static_cast<int>(fileToRename.argumentPosition.Line),
|
{fileToRename->cmakeFile,
|
||||||
static_cast<int>(fileToRename.argumentPosition.Column
|
static_cast<int>(fileToRename->argumentPosition.Line),
|
||||||
- 1)},
|
static_cast<int>(fileToRename->argumentPosition.Column - 1)},
|
||||||
Constants::CMAKE_EDITOR_ID,
|
Constants::CMAKE_EDITOR_ID,
|
||||||
Core::EditorManager::DoNotMakeVisible));
|
Core::EditorManager::DoNotMakeVisible));
|
||||||
if (!editor) {
|
if (!editor) {
|
||||||
qCCritical(cmakeBuildSystemLog).noquote()
|
qCCritical(cmakeBuildSystemLog).noquote()
|
||||||
<< "BaseTextEditor cannot be obtained for" << fileToRename.cmakeFile.path()
|
<< "BaseTextEditor cannot be obtained for" << fileToRename->cmakeFile.path()
|
||||||
<< fileToRename.argumentPosition.Line << int(fileToRename.argumentPosition.Column);
|
<< fileToRename->argumentPosition.Line
|
||||||
|
<< int(fileToRename->argumentPosition.Column);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If quotes were used for the source file, skip the starting quote
|
// If quotes were used for the source file, skip the starting quote
|
||||||
if (fileToRename.argumentPosition.Delim == cmListFileArgument::Quoted)
|
if (fileToRename->argumentPosition.Delim == cmListFileArgument::Quoted)
|
||||||
editor->setCursorPosition(editor->position() + 1);
|
editor->setCursorPosition(editor->position() + 1);
|
||||||
|
|
||||||
if (!fileToRename.fromGlobbing)
|
if (!fileToRename->fromGlobbing)
|
||||||
editor->replace(fileToRename.relativeFileName.length(), newRelPathName);
|
editor->replace(fileToRename->relativeFileName.length(), newRelPathName);
|
||||||
|
|
||||||
editor->editorWidget()->autoIndent();
|
editor->editorWidget()->autoIndent();
|
||||||
if (!Core::DocumentManager::saveDocument(editor->document())) {
|
if (!Core::DocumentManager::saveDocument(editor->document())) {
|
||||||
qCCritical(cmakeBuildSystemLog).noquote()
|
qCCritical(cmakeBuildSystemLog).noquote()
|
||||||
<< "Changes to" << fileToRename.cmakeFile.path() << "could not be saved.";
|
<< "Changes to" << fileToRename->cmakeFile.path() << "could not be saved.";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Try the next occurrence. This can happen if set_source_file_properties is used
|
||||||
|
fileToRename = projectFileArgumentPosition(targetName, oldRelPathName);
|
||||||
|
} while (fileToRename);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -633,7 +633,7 @@ static FolderNode *createSourceGroupNode(const QString &sourceGroupName,
|
|||||||
FolderNode *existingNode = currentNode->findChildFolderNode(
|
FolderNode *existingNode = currentNode->findChildFolderNode(
|
||||||
[&p](const FolderNode *fn) { return fn->displayName() == p; });
|
[&p](const FolderNode *fn) { return fn->displayName() == p; });
|
||||||
if (!existingNode) {
|
if (!existingNode) {
|
||||||
auto node = createCMakeVFolder(sourceDirectory, Node::DefaultFolderPriority + 5, p, true);
|
auto node = createCMakeVFolder(sourceDirectory, Node::DefaultFolderPriority + 5, p);
|
||||||
node->setListInProject(false);
|
node->setListInProject(false);
|
||||||
node->setIcon([] { return Icon::fromTheme("edit-copy"); });
|
node->setIcon([] { return Icon::fromTheme("edit-copy"); });
|
||||||
|
|
||||||
@@ -654,7 +654,6 @@ static void addCompileGroups(ProjectNode *targetRoot,
|
|||||||
const FilePath &buildDirectory,
|
const FilePath &buildDirectory,
|
||||||
const TargetDetails &td)
|
const TargetDetails &td)
|
||||||
{
|
{
|
||||||
const bool showSourceFolders = settings().showSourceSubFolders();
|
|
||||||
const bool inSourceBuild = (sourceDirectory == buildDirectory);
|
const bool inSourceBuild = (sourceDirectory == buildDirectory);
|
||||||
|
|
||||||
QSet<FilePath> alreadyListed;
|
QSet<FilePath> alreadyListed;
|
||||||
@@ -685,6 +684,9 @@ static void addCompileGroups(ProjectNode *targetRoot,
|
|||||||
if (isPchFile(buildDirectory, sourcePath) || isUnityFile(buildDirectory, sourcePath))
|
if (isPchFile(buildDirectory, sourcePath) || isUnityFile(buildDirectory, sourcePath))
|
||||||
node->setIsGenerated(true);
|
node->setIsGenerated(true);
|
||||||
|
|
||||||
|
const bool showSourceFolders = settings().showSourceSubFolders()
|
||||||
|
&& defaultCMakeSourceGroupFolder(td.sourceGroups[si.sourceGroup]);
|
||||||
|
|
||||||
// Where does the file node need to go?
|
// Where does the file node need to go?
|
||||||
if (showSourceFolders && sourcePath.isChildOf(buildDirectory) && !inSourceBuild) {
|
if (showSourceFolders && sourcePath.isChildOf(buildDirectory) && !inSourceBuild) {
|
||||||
buildFileNodes.emplace_back(std::move(node));
|
buildFileNodes.emplace_back(std::move(node));
|
||||||
@@ -696,6 +698,9 @@ static void addCompileGroups(ProjectNode *targetRoot,
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (size_t i = 0; i < sourceGroupFileNodes.size(); ++i) {
|
for (size_t i = 0; i < sourceGroupFileNodes.size(); ++i) {
|
||||||
|
const bool showSourceFolders = settings().showSourceSubFolders()
|
||||||
|
&& defaultCMakeSourceGroupFolder(td.sourceGroups[i]);
|
||||||
|
|
||||||
std::vector<std::unique_ptr<FileNode>> ¤t = sourceGroupFileNodes[i];
|
std::vector<std::unique_ptr<FileNode>> ¤t = sourceGroupFileNodes[i];
|
||||||
FolderNode *insertNode = td.sourceGroups[i] == "TREE"
|
FolderNode *insertNode = td.sourceGroups[i] == "TREE"
|
||||||
? targetRoot
|
? targetRoot
|
||||||
|
@@ -18,15 +18,22 @@ using namespace ProjectExplorer;
|
|||||||
|
|
||||||
namespace CMakeProjectManager::Internal {
|
namespace CMakeProjectManager::Internal {
|
||||||
|
|
||||||
|
bool defaultCMakeSourceGroupFolder(const QString &displayName)
|
||||||
|
{
|
||||||
|
return displayName == "Source Files" || displayName == "Header Files"
|
||||||
|
|| displayName == "Resources" || displayName == ""
|
||||||
|
|| displayName == "Precompile Header File" || displayName == "CMake Rules"
|
||||||
|
|| displayName == "Object Files";
|
||||||
|
}
|
||||||
|
|
||||||
std::unique_ptr<FolderNode> createCMakeVFolder(const Utils::FilePath &basePath,
|
std::unique_ptr<FolderNode> createCMakeVFolder(const Utils::FilePath &basePath,
|
||||||
int priority,
|
int priority,
|
||||||
const QString &displayName,
|
const QString &displayName)
|
||||||
bool sourcesOrHeaders)
|
|
||||||
{
|
{
|
||||||
auto newFolder = std::make_unique<VirtualFolderNode>(basePath);
|
auto newFolder = std::make_unique<VirtualFolderNode>(basePath);
|
||||||
newFolder->setPriority(priority);
|
newFolder->setPriority(priority);
|
||||||
newFolder->setDisplayName(displayName);
|
newFolder->setDisplayName(displayName);
|
||||||
newFolder->setIsSourcesOrHeaders(sourcesOrHeaders);
|
newFolder->setIsSourcesOrHeaders(defaultCMakeSourceGroupFolder(displayName));
|
||||||
return newFolder;
|
return newFolder;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -35,14 +42,13 @@ void addCMakeVFolder(FolderNode *base,
|
|||||||
int priority,
|
int priority,
|
||||||
const QString &displayName,
|
const QString &displayName,
|
||||||
std::vector<std::unique_ptr<FileNode>> &&files,
|
std::vector<std::unique_ptr<FileNode>> &&files,
|
||||||
bool sourcesOrHeaders,
|
|
||||||
bool listInProject)
|
bool listInProject)
|
||||||
{
|
{
|
||||||
if (files.size() == 0)
|
if (files.size() == 0)
|
||||||
return;
|
return;
|
||||||
FolderNode *folder = base;
|
FolderNode *folder = base;
|
||||||
if (!displayName.isEmpty()) {
|
if (!displayName.isEmpty()) {
|
||||||
auto newFolder = createCMakeVFolder(basePath, priority, displayName, sourcesOrHeaders);
|
auto newFolder = createCMakeVFolder(basePath, priority, displayName);
|
||||||
folder = newFolder.get();
|
folder = newFolder.get();
|
||||||
base->addNode(std::move(newFolder));
|
base->addNode(std::move(newFolder));
|
||||||
}
|
}
|
||||||
@@ -90,7 +96,6 @@ void addCMakeInputs(FolderNode *root,
|
|||||||
10,
|
10,
|
||||||
Tr::tr("<Other Locations>"),
|
Tr::tr("<Other Locations>"),
|
||||||
removeKnownNodes(knownFiles, std::move(rootInputs)),
|
removeKnownNodes(knownFiles, std::move(rootInputs)),
|
||||||
/*sourcesOrHeaders=*/false,
|
|
||||||
/*listInProject=*/false);
|
/*listInProject=*/false);
|
||||||
|
|
||||||
root->addNode(std::move(cmakeVFolder));
|
root->addNode(std::move(cmakeVFolder));
|
||||||
|
@@ -11,17 +11,17 @@
|
|||||||
|
|
||||||
namespace CMakeProjectManager::Internal {
|
namespace CMakeProjectManager::Internal {
|
||||||
|
|
||||||
|
bool defaultCMakeSourceGroupFolder(const QString &displayName);
|
||||||
|
|
||||||
std::unique_ptr<ProjectExplorer::FolderNode> createCMakeVFolder(const Utils::FilePath &basePath,
|
std::unique_ptr<ProjectExplorer::FolderNode> createCMakeVFolder(const Utils::FilePath &basePath,
|
||||||
int priority,
|
int priority,
|
||||||
const QString &displayName,
|
const QString &displayName);
|
||||||
bool sourcesOrHeaders);
|
|
||||||
|
|
||||||
void addCMakeVFolder(ProjectExplorer::FolderNode *base,
|
void addCMakeVFolder(ProjectExplorer::FolderNode *base,
|
||||||
const Utils::FilePath &basePath,
|
const Utils::FilePath &basePath,
|
||||||
int priority,
|
int priority,
|
||||||
const QString &displayName,
|
const QString &displayName,
|
||||||
std::vector<std::unique_ptr<ProjectExplorer::FileNode>> &&files,
|
std::vector<std::unique_ptr<ProjectExplorer::FileNode>> &&files,
|
||||||
bool sourcesOrHeaders = false,
|
|
||||||
bool listInProject = true);
|
bool listInProject = true);
|
||||||
|
|
||||||
std::vector<std::unique_ptr<ProjectExplorer::FileNode>> &&removeKnownNodes(
|
std::vector<std::unique_ptr<ProjectExplorer::FileNode>> &&removeKnownNodes(
|
||||||
|
@@ -100,10 +100,10 @@ DebuggerRunConfigurationAspect::DebuggerRunConfigurationAspect(Target *target)
|
|||||||
};
|
};
|
||||||
setSummaryText();
|
setSummaryText();
|
||||||
|
|
||||||
connect(&m_cppAspect, &BaseAspect::changed, this, setSummaryText);
|
connect(&m_cppAspect, &BaseAspect::changed, details, setSummaryText);
|
||||||
connect(&m_qmlAspect, &BaseAspect::changed, this, setSummaryText);
|
connect(&m_qmlAspect, &BaseAspect::changed, details, setSummaryText);
|
||||||
connect(&m_pythonAspect, &BaseAspect::changed, this, setSummaryText);
|
connect(&m_pythonAspect, &BaseAspect::changed, details, setSummaryText);
|
||||||
connect(&m_overrideStartupAspect, &BaseAspect::changed, this, setSummaryText);
|
connect(&m_overrideStartupAspect, &BaseAspect::changed, details, setSummaryText);
|
||||||
|
|
||||||
return details;
|
return details;
|
||||||
});
|
});
|
||||||
|
@@ -999,6 +999,7 @@ bool FakeVimUserCommandsModel::setData(const QModelIndex &index,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef WITH_TESTS
|
||||||
static void setupTest(QString *title, FakeVimHandler **handler, QWidget **edit)
|
static void setupTest(QString *title, FakeVimHandler **handler, QWidget **edit)
|
||||||
{
|
{
|
||||||
*title = QString::fromLatin1("test.cpp");
|
*title = QString::fromLatin1("test.cpp");
|
||||||
@@ -1040,7 +1041,6 @@ static void setupTest(QString *title, FakeVimHandler **handler, QWidget **edit)
|
|||||||
(*handler)->handleCommand("set iskeyword=@,48-57,_,192-255,a-z,A-Z");
|
(*handler)->handleCommand("set iskeyword=@,48-57,_,192-255,a-z,A-Z");
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef WITH_TESTS
|
|
||||||
QObject *createFakeVimTester( void (*setupTest)(QString *, FakeVimHandler **, QWidget **) ); // in fakevim_test.cpp
|
QObject *createFakeVimTester( void (*setupTest)(QString *, FakeVimHandler **, QWidget **) ); // in fakevim_test.cpp
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@@ -60,19 +60,30 @@ using namespace Tasking;
|
|||||||
|
|
||||||
namespace Ios::Internal {
|
namespace Ios::Internal {
|
||||||
|
|
||||||
|
static QString identifierForRunControl(RunControl *runControl)
|
||||||
|
{
|
||||||
|
const IosDeviceTypeAspect::Data *data = runControl->aspect<IosDeviceTypeAspect>();
|
||||||
|
return data ? data->deviceType.identifier : QString();
|
||||||
|
}
|
||||||
|
|
||||||
static void stopRunningRunControl(RunControl *runControl)
|
static void stopRunningRunControl(RunControl *runControl)
|
||||||
{
|
{
|
||||||
static QMap<Id, QPointer<RunControl>> activeRunControls;
|
static QMap<Id, QPointer<RunControl>> activeRunControls;
|
||||||
|
|
||||||
|
// clean up deleted
|
||||||
|
Utils::erase(activeRunControls, [](const QPointer<RunControl> &rc) { return !rc; });
|
||||||
|
|
||||||
Target *target = runControl->target();
|
Target *target = runControl->target();
|
||||||
Id devId = DeviceKitAspect::deviceId(target->kit());
|
const Id devId = DeviceKitAspect::deviceId(target->kit());
|
||||||
|
const QString identifier = identifierForRunControl(runControl);
|
||||||
|
|
||||||
// The device can only run an application at a time, if an app is running stop it.
|
// The device can only run an application at a time, if an app is running stop it.
|
||||||
if (activeRunControls.contains(devId)) {
|
if (QPointer<RunControl> activeRunControl = activeRunControls[devId]) {
|
||||||
if (QPointer<RunControl> activeRunControl = activeRunControls[devId])
|
if (identifierForRunControl(activeRunControl) == identifier) {
|
||||||
activeRunControl->initiateStop();
|
activeRunControl->initiateStop();
|
||||||
activeRunControls.remove(devId);
|
activeRunControls.remove(devId);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (devId.isValid())
|
if (devId.isValid())
|
||||||
activeRunControls[devId] = runControl;
|
activeRunControls[devId] = runControl;
|
||||||
|
@@ -391,9 +391,9 @@ void AppOutputPane::createNewOutputWindow(RunControl *rc)
|
|||||||
const CommandLine thisCommand = rc->commandLine();
|
const CommandLine thisCommand = rc->commandLine();
|
||||||
const FilePath thisWorkingDirectory = rc->workingDirectory();
|
const FilePath thisWorkingDirectory = rc->workingDirectory();
|
||||||
const Environment thisEnvironment = rc->environment();
|
const Environment thisEnvironment = rc->environment();
|
||||||
const auto tab = std::find_if(m_runControlTabs.begin(), m_runControlTabs.end(),
|
const auto tab = std::find_if(
|
||||||
[&](const RunControlTab &tab) {
|
m_runControlTabs.begin(), m_runControlTabs.end(), [&](const RunControlTab &tab) {
|
||||||
if (!tab.runControl || tab.runControl->isRunning() || tab.runControl->isStarting())
|
if (!tab.runControl || !tab.runControl->isStopped())
|
||||||
return false;
|
return false;
|
||||||
return thisCommand == tab.runControl->commandLine()
|
return thisCommand == tab.runControl->commandLine()
|
||||||
&& thisWorkingDirectory == tab.runControl->workingDirectory()
|
&& thisWorkingDirectory == tab.runControl->workingDirectory()
|
||||||
|
@@ -617,7 +617,15 @@ FilePath BuildConfiguration::buildDirectoryFromTemplate(const FilePath &projectD
|
|||||||
[buildType] { return buildTypeName(buildType); });
|
[buildType] { return buildTypeName(buildType); });
|
||||||
exp.registerSubProvider([kit] { return kit->macroExpander(); });
|
exp.registerSubProvider([kit] { return kit->macroExpander(); });
|
||||||
|
|
||||||
FilePath buildDir = FilePath::fromUserInput(buildPropertiesSettings().buildDirectoryTemplate());
|
auto project = ProjectManager::projectWithProjectFilePath(mainFilePath);
|
||||||
|
auto environment = Environment::systemEnvironment();
|
||||||
|
// This adds the environment variables from the <project>.shared file
|
||||||
|
if (project)
|
||||||
|
environment.modify(project->additionalEnvironment());
|
||||||
|
|
||||||
|
FilePath buildDir = FilePath::fromUserInput(environment.value_or(
|
||||||
|
Constants::QTC_DEFAULT_BUILD_DIRECTORY_TEMPLATE,
|
||||||
|
buildPropertiesSettings().buildDirectoryTemplate()));
|
||||||
qCDebug(bcLog) << "build dir template:" << buildDir.toUserOutput();
|
qCDebug(bcLog) << "build dir template:" << buildDir.toUserOutput();
|
||||||
buildDir = exp.expand(buildDir);
|
buildDir = exp.expand(buildDir);
|
||||||
qCDebug(bcLog) << "expanded build:" << buildDir.toUserOutput();
|
qCDebug(bcLog) << "expanded build:" << buildDir.toUserOutput();
|
||||||
|
@@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
#include <coreplugin/dialogs/ioptionspage.h>
|
#include <coreplugin/dialogs/ioptionspage.h>
|
||||||
|
|
||||||
|
#include <utils/environment.h>
|
||||||
#include <utils/layoutbuilder.h>
|
#include <utils/layoutbuilder.h>
|
||||||
|
|
||||||
using namespace Utils;
|
using namespace Utils;
|
||||||
@@ -16,7 +17,9 @@ namespace ProjectExplorer {
|
|||||||
|
|
||||||
static QString defaultBuildDirectoryTemplate()
|
static QString defaultBuildDirectoryTemplate()
|
||||||
{
|
{
|
||||||
return "./build/%{Asciify:%{Kit:FileSystemName}-%{BuildConfig:Name}}";
|
return qtcEnvironmentVariable(
|
||||||
|
Constants::QTC_DEFAULT_BUILD_DIRECTORY_TEMPLATE,
|
||||||
|
"./build/%{Asciify:%{Kit:FileSystemName}-%{BuildConfig:Name}}");
|
||||||
}
|
}
|
||||||
|
|
||||||
BuildPropertiesSettings &buildPropertiesSettings()
|
BuildPropertiesSettings &buildPropertiesSettings()
|
||||||
|
@@ -281,7 +281,7 @@ const char CLEAR_ISSUES_ON_REBUILD_SETTINGS_KEY[] = "ProjectExplorer/Settings/Cl
|
|||||||
const char ABORT_BUILD_ALL_ON_ERROR_SETTINGS_KEY[]
|
const char ABORT_BUILD_ALL_ON_ERROR_SETTINGS_KEY[]
|
||||||
= "ProjectExplorer/Settings/AbortBuildAllOnError";
|
= "ProjectExplorer/Settings/AbortBuildAllOnError";
|
||||||
const char LOW_BUILD_PRIORITY_SETTINGS_KEY[] = "ProjectExplorer/Settings/LowBuildPriority";
|
const char LOW_BUILD_PRIORITY_SETTINGS_KEY[] = "ProjectExplorer/Settings/LowBuildPriority";
|
||||||
const char WARN_AGAINST_NON_ASCII_BUILD_DIR_SETTINGS_KEY[] = "ProjectExplorer/Settings/LowBuildPriority";
|
const char WARN_AGAINST_NON_ASCII_BUILD_DIR_SETTINGS_KEY[] = "ProjectExplorer/Settings/WarnAgainstNonAsciiBuildDir";
|
||||||
const char APP_ENV_CHANGES_SETTINGS_KEY[] = "ProjectExplorer/Settings/AppEnvChanges";
|
const char APP_ENV_CHANGES_SETTINGS_KEY[] = "ProjectExplorer/Settings/AppEnvChanges";
|
||||||
|
|
||||||
const char CUSTOM_PARSER_COUNT_KEY[] = "ProjectExplorer/Settings/CustomParserCount";
|
const char CUSTOM_PARSER_COUNT_KEY[] = "ProjectExplorer/Settings/CustomParserCount";
|
||||||
|
@@ -145,6 +145,8 @@ const char CUSTOM_TOOLCHAIN_TYPEID[] = "ProjectExplorer.ToolChain.Custom";
|
|||||||
const char DEFAULT_WORKING_DIR[] = "%{buildDir}";
|
const char DEFAULT_WORKING_DIR[] = "%{buildDir}";
|
||||||
const char DEFAULT_WORKING_DIR_ALTERNATE[] = "%{sourceDir}";
|
const char DEFAULT_WORKING_DIR_ALTERNATE[] = "%{sourceDir}";
|
||||||
|
|
||||||
|
const char QTC_DEFAULT_BUILD_DIRECTORY_TEMPLATE[] = "QTC_DEFAULT_BUILD_DIRECTORY_TEMPLATE";
|
||||||
|
|
||||||
// Desktop Device related ids:
|
// Desktop Device related ids:
|
||||||
const char DESKTOP_DEVICE_ID[] = "Desktop Device";
|
const char DESKTOP_DEVICE_ID[] = "Desktop Device";
|
||||||
const char DESKTOP_DEVICE_TYPE[] = "Desktop";
|
const char DESKTOP_DEVICE_TYPE[] = "Desktop";
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
import Qt.SafeRenderer 2.0
|
import Qt.SafeRenderer
|
||||||
import QtQuick.Window 2.15
|
import QtQuick.Window
|
||||||
|
|
||||||
Window {
|
Window {
|
||||||
id: window
|
id: window
|
||||||
@@ -14,13 +14,12 @@ Window {
|
|||||||
x: 206
|
x: 206
|
||||||
y: 208
|
y: 208
|
||||||
width: 340
|
width: 340
|
||||||
height: 34
|
height: 40
|
||||||
color: "#8ae234"
|
color: "#8ae234"
|
||||||
fillColor: "black"
|
fillColor: "black"
|
||||||
text: "Hello Qt Safe Renderer!"
|
text: "Hello Qt Safe Renderer!"
|
||||||
font.family: "Lato"
|
font.family: "Lato"
|
||||||
horizontalAlignment: Text.AlignLeft
|
horizontalAlignment: Text.AlignLeft
|
||||||
font.pixelSize: 32
|
font.pixelSize: 32
|
||||||
runtimeEditable: true
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -24,6 +24,21 @@
|
|||||||
" <sub-class-of type='text/plain'/>",
|
" <sub-class-of type='text/plain'/>",
|
||||||
" <glob pattern='*.dts' weight='80'/>",
|
" <glob pattern='*.dts' weight='80'/>",
|
||||||
" </mime-type>",
|
" </mime-type>",
|
||||||
|
" <mime-type type='text/x-yacc'>",
|
||||||
|
" <comment>Yacc/Bison source files</comment>",
|
||||||
|
" <sub-class-of type='text/plain'/>",
|
||||||
|
" <glob pattern='*.y'/>",
|
||||||
|
" <glob pattern='*.yy'/>",
|
||||||
|
" <glob pattern='*.ypp'/>",
|
||||||
|
" <glob pattern='*.y++'/>",
|
||||||
|
" </mime-type>",
|
||||||
|
" <mime-type type='text/x-lex'>",
|
||||||
|
" <comment>Lex/Flex source files</comment>",
|
||||||
|
" <sub-class-of type='text/plain'/>",
|
||||||
|
" <glob pattern='*.l'/>",
|
||||||
|
" <glob pattern='*.lex'/>",
|
||||||
|
" <glob pattern='*.flex'/>",
|
||||||
|
" </mime-type>",
|
||||||
"</mime-info>"
|
"</mime-info>"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@@ -4381,7 +4381,7 @@ static QColor calcBlendColor(const QColor &baseColor, int level, int count)
|
|||||||
if (level == count - 1)
|
if (level == count - 1)
|
||||||
return color90;
|
return color90;
|
||||||
|
|
||||||
const int blendFactor = level * (256 / (count - 2));
|
const int blendFactor = level * (256 / (count - 1));
|
||||||
|
|
||||||
return blendColors(color80, color90, blendFactor);
|
return blendColors(color80, color90, blendFactor);
|
||||||
}
|
}
|
||||||
@@ -6876,8 +6876,7 @@ void TextEditorWidgetPrivate::handleBackspaceKey()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (typingSettings.m_smartBackspaceBehavior == TypingSettings::BackspaceUnindents) {
|
} else if (typingSettings.m_smartBackspaceBehavior == TypingSettings::BackspaceUnindents) {
|
||||||
const QChar previousChar = q->document()->characterAt(pos - 1);
|
if (c.positionInBlock() > TabSettings::firstNonSpace(c.block().text())) {
|
||||||
if (!(previousChar == QLatin1Char(' ') || previousChar == QLatin1Char('\t'))) {
|
|
||||||
if (cursorWithinSnippet)
|
if (cursorWithinSnippet)
|
||||||
c.beginEditBlock();
|
c.beginEditBlock();
|
||||||
c.deletePreviousChar();
|
c.deletePreviousChar();
|
||||||
|
@@ -12,7 +12,7 @@
|
|||||||
:*Qt Creator.findEdit_Utils::FilterLineEdit {name='findEdit' type='Utils::FancyLineEdit' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
:*Qt Creator.findEdit_Utils::FilterLineEdit {name='findEdit' type='Utils::FancyLineEdit' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
||||||
:*Qt Creator_Core::Internal::FancyToolButton {name='KitSelector.Button' type='Core::Internal::FancyToolButton' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
:*Qt Creator_Core::Internal::FancyToolButton {name='KitSelector.Button' type='Core::Internal::FancyToolButton' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
||||||
:*Qt Creator_Utils::FilterLineEdit {type='Utils::FancyLineEdit' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
:*Qt Creator_Utils::FilterLineEdit {type='Utils::FancyLineEdit' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
||||||
:*Qt Creator_Utils::IconButton {occurrence='5' type='Utils::FancyIconButton' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
:*Qt Creator_Utils::IconButton {toolTip='Clear text' type='Utils::FancyIconButton' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
||||||
:About Qt Creator_Core::Internal::VersionDialog {type='Core::Internal::VersionDialog' unnamed='1' visible='1' windowTitle='About Qt Creator'}
|
:About Qt Creator_Core::Internal::VersionDialog {type='Core::Internal::VersionDialog' unnamed='1' visible='1' windowTitle='About Qt Creator'}
|
||||||
:Activate completion:_QComboBox {buddy=':Behavior.Activate completion:_QLabel' type='QComboBox' unnamed='1' visible='1'}
|
:Activate completion:_QComboBox {buddy=':Behavior.Activate completion:_QLabel' type='QComboBox' unnamed='1' visible='1'}
|
||||||
:Add Bookmark.ExpandBookmarksList_QToolButton {text='+' type='QToolButton' unnamed='1' visible='1' window=':Add Bookmark_BookmarkDialog'}
|
:Add Bookmark.ExpandBookmarksList_QToolButton {text='+' type='QToolButton' unnamed='1' visible='1' window=':Add Bookmark_BookmarkDialog'}
|
||||||
@@ -92,7 +92,6 @@
|
|||||||
:JsonWizard_ProjectExplorer::JsonFieldPage {type='ProjectExplorer::JsonFieldPage' unnamed='1' visible='1' window=':New_ProjectExplorer::JsonWizard'}
|
:JsonWizard_ProjectExplorer::JsonFieldPage {type='ProjectExplorer::JsonFieldPage' unnamed='1' visible='1' window=':New_ProjectExplorer::JsonWizard'}
|
||||||
:Kits_QtVersion_QComboBox {container=':qt_tabwidget_stackedwidget_QWidget' leftWidget=':QtVersionLabel_KitPage' type='QComboBox' unnamed='1' visible='1'}
|
:Kits_QtVersion_QComboBox {container=':qt_tabwidget_stackedwidget_QWidget' leftWidget=':QtVersionLabel_KitPage' type='QComboBox' unnamed='1' visible='1'}
|
||||||
:Locals and Expressions_Debugger::Internal::WatchTreeView {container=':Debugger.Docks.LocalsAndWatchersDockWidget.Inspector_QFrame' name='WatchWindow' type='Debugger::Internal::WatchTreeView' visible='1'}
|
:Locals and Expressions_Debugger::Internal::WatchTreeView {container=':Debugger.Docks.LocalsAndWatchersDockWidget.Inspector_QFrame' name='WatchWindow' type='Debugger::Internal::WatchTreeView' visible='1'}
|
||||||
:New Text File.Add to project:_QLabel {name='projectLabel' text='Add to project:' type='QLabel' visible='1' window=':New_ProjectExplorer::JsonWizard'}
|
|
||||||
:New Text File.nameLineEdit_Utils::FileNameValidatingLineEdit {name='nameLineEdit' type='Utils::FileNameValidatingLineEdit' visible='1' window=':New_ProjectExplorer::JsonWizard'}
|
:New Text File.nameLineEdit_Utils::FileNameValidatingLineEdit {name='nameLineEdit' type='Utils::FileNameValidatingLineEdit' visible='1' window=':New_ProjectExplorer::JsonWizard'}
|
||||||
:New.comboBox_QComboBox {type='QComboBox' unnamed='1' visible='1' window=':New_Core::Internal::NewDialog'}
|
:New.comboBox_QComboBox {type='QComboBox' unnamed='1' visible='1' window=':New_Core::Internal::NewDialog'}
|
||||||
:New.templateCategoryView_QTreeView {name='templateCategoryView' type='QTreeView' visible='1' window=':New_Core::Internal::NewDialog'}
|
:New.templateCategoryView_QTreeView {name='templateCategoryView' type='QTreeView' visible='1' window=':New_Core::Internal::NewDialog'}
|
||||||
@@ -141,11 +140,11 @@
|
|||||||
:Qt Creator.WelcomeScreenStackedWidget {name='WelcomeScreenStackedWidget' type='QStackedWidget' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
:Qt Creator.WelcomeScreenStackedWidget {name='WelcomeScreenStackedWidget' type='QStackedWidget' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
||||||
:Qt Creator.replaceEdit_Utils::FilterLineEdit {name='replaceEdit' type='Utils::FancyLineEdit' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
:Qt Creator.replaceEdit_Utils::FilterLineEdit {name='replaceEdit' type='Utils::FancyLineEdit' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
||||||
:Qt Creator.splitter_QSplitter {name='splitter' type='QSplitter' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
:Qt Creator.splitter_QSplitter {name='splitter' type='QSplitter' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
||||||
:Qt Creator_AppOutput_Core::Internal::OutputPaneToggleButton {occurrence='3' type='Core::Internal::OutputPaneToggleButton' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
:Qt Creator_AppOutput_Core::Internal::OutputPaneToggleButton {toolTip?='*Application Output*' type='Core::Internal::OutputPaneToggleButton' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
||||||
:Qt Creator_BinEditor::BinEditorWidget {type='BinEditor::Internal::BinEditorWidget' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
:Qt Creator_BinEditor::BinEditorWidget {type='BinEditor::Internal::BinEditorWidget' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
||||||
:Qt Creator_Bookmarks_TreeView {type='TreeView' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
:Qt Creator_Bookmarks_TreeView {type='TreeView' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
||||||
:Qt Creator_CloseButton {type='CloseButton' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
:Qt Creator_CloseButton {type='CloseButton' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
||||||
:Qt Creator_CompileOutput_Core::Internal::OutputPaneToggleButton {occurrence='4' type='Core::Internal::OutputPaneToggleButton' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
:Qt Creator_CompileOutput_Core::Internal::OutputPaneToggleButton {toolTip?='*Compile Output*' type='Core::Internal::OutputPaneToggleButton' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
||||||
:Qt Creator_Core::Internal::CommandComboBox {type='Core::Internal::CommandComboBox' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
:Qt Creator_Core::Internal::CommandComboBox {type='Core::Internal::CommandComboBox' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
||||||
:Qt Creator_Core::Internal::MainWindow {type='Utils::AppMainWindow' visible='1' windowTitle?='*Qt Creator'}
|
:Qt Creator_Core::Internal::MainWindow {type='Utils::AppMainWindow' visible='1' windowTitle?='*Qt Creator'}
|
||||||
:Qt Creator_Core::Internal::NavComboBox {type='Core::Internal::NavComboBox' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
:Qt Creator_Core::Internal::NavComboBox {type='Core::Internal::NavComboBox' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
||||||
@@ -153,17 +152,17 @@
|
|||||||
:Qt Creator_Core::OutputWindow {type='Core::OutputWindow' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
:Qt Creator_Core::OutputWindow {type='Core::OutputWindow' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
||||||
:Qt Creator_CppEditor::Internal::CPPEditorWidget {type='CppEditor::CppEditorWidget' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
:Qt Creator_CppEditor::Internal::CPPEditorWidget {type='CppEditor::CppEditorWidget' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
||||||
:Qt Creator_DiffEditor::Internal::DescriptionEditorWidget {type='DiffEditor::Internal::DescriptionEditorWidget' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
:Qt Creator_DiffEditor::Internal::DescriptionEditorWidget {type='DiffEditor::Internal::DescriptionEditorWidget' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
||||||
:Qt Creator_DiffEditor::SideDiffEditorWidget {type='DiffEditor::Internal::SideDiffEditorWidget' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
:Qt Creator_DiffEditor::SideDiffEditorWidgetChanged {type='DiffEditor::Internal::SideDiffEditorWidget' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow' x~='[1-9][0-9]*'}
|
||||||
:Qt Creator_DiffEditor::SideDiffEditorWidget2 {occurrence='2' type='DiffEditor::Internal::SideDiffEditorWidget' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
:Qt Creator_DiffEditor::SideDiffEditorWidgetOriginal {type='DiffEditor::Internal::SideDiffEditorWidget' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow' x='0'}
|
||||||
:Qt Creator_FilenameQComboBox {leftWidget=':Qt Creator.DragDoc_QToolButton' type='QComboBox' unnamed='1' visible='1'}
|
:Qt Creator_FilenameQComboBox {leftWidget=':Qt Creator.DragDoc_QToolButton' type='QComboBox' unnamed='1' visible='1'}
|
||||||
:Qt Creator_Find::Internal::SearchResultTreeView {type='Core::Internal::SearchResultTreeView' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
:Qt Creator_Find::Internal::SearchResultTreeView {type='Core::Internal::SearchResultTreeView' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
||||||
:Qt Creator_Git::Internal::GitEditor {type='Git::Internal::GitEditorWidget' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
:Qt Creator_Git::Internal::GitEditor {type='Git::Internal::GitEditorWidget' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
||||||
:Qt Creator_HelpSelector_QComboBox {occurrence='3' type='QComboBox' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
:Qt Creator_HelpSelector_QComboBox {occurrence='3' type='QComboBox' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
||||||
:Qt Creator_Issues_Core::Internal::OutputPaneToggleButton {occurrence='1' type='Core::Internal::OutputPaneToggleButton' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
:Qt Creator_Issues_Core::Internal::OutputPaneToggleButton {toolTip?='*Issues*' type='Core::Internal::OutputPaneToggleButton' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
||||||
:Qt Creator_QHelpContentWidget {name='helpContentWidget' type='QTreeView' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
:Qt Creator_QHelpContentWidget {name='helpContentWidget' type='QTreeView' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
||||||
:Qt Creator_QmlJSEditor::Internal::QmlJSOutlineTreeView {type='QmlJSEditor::Internal::QmlJSOutlineTreeView' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
:Qt Creator_QmlJSEditor::Internal::QmlJSOutlineTreeView {type='QmlJSEditor::Internal::QmlJSOutlineTreeView' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
||||||
:Qt Creator_QmlJSEditor::QmlJSTextEditorWidget {type='QmlJSEditor::QmlJSEditorWidget' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
:Qt Creator_QmlJSEditor::QmlJSTextEditorWidget {type='QmlJSEditor::QmlJSEditorWidget' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
||||||
:Qt Creator_SearchResult_Core::Internal::OutputPaneToggleButton {occurrence='2' type='Core::Internal::OutputPaneToggleButton' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
:Qt Creator_SearchResult_Core::Internal::OutputPaneToggleButton {toolTip?='*Search Results*' type='Core::Internal::OutputPaneToggleButton' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
||||||
:Qt Creator_TextEditor::TextEditorWidget {type='TextEditor::TextEditorWidget' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
:Qt Creator_TextEditor::TextEditorWidget {type='TextEditor::TextEditorWidget' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
||||||
:Qt Creator_Utils::BuildDirectoryLineEdit {name='LineEdit' type='Utils::FancyLineEdit' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
:Qt Creator_Utils::BuildDirectoryLineEdit {name='LineEdit' type='Utils::FancyLineEdit' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
||||||
:Qt Creator_Utils::NavigationTreeView {name='projectTreeView' type='QTreeView' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
:Qt Creator_Utils::NavigationTreeView {name='projectTreeView' type='QTreeView' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
||||||
@@ -205,8 +204,7 @@
|
|||||||
:headerFileLineEdit_Utils::FileNameValidatingLineEdit {name='HdrFileName' type='Utils::FancyLineEdit' visible='1' window=':New_ProjectExplorer::JsonWizard'}
|
:headerFileLineEdit_Utils::FileNameValidatingLineEdit {name='HdrFileName' type='Utils::FancyLineEdit' visible='1' window=':New_ProjectExplorer::JsonWizard'}
|
||||||
:popupFrame_Proposal_QListView {container=':popupFrame_TextEditor::GenericProposalWidget' type='QListView' unnamed='1' visible='1'}
|
:popupFrame_Proposal_QListView {container=':popupFrame_TextEditor::GenericProposalWidget' type='QListView' unnamed='1' visible='1'}
|
||||||
:popupFrame_TextEditor::GenericProposalWidget {name='m_popupFrame' type='TextEditor::GenericProposalWidget' visible='1'}
|
:popupFrame_TextEditor::GenericProposalWidget {name='m_popupFrame' type='TextEditor::GenericProposalWidget' visible='1'}
|
||||||
:projectComboBox_QComboBox {buddy=':New Text File.Add to project:_QLabel' name='projectComboBox' type='QComboBox' visible='1'}
|
:projectComboBox_QComboBox {name='projectComboBox' type='QComboBox' visible='1'}
|
||||||
:projectComboBox_Utils::TreeViewComboBox {buddy=':New Text File.Add to project:_QLabel' name='projectComboBox' type='QComboBox' visible='1'}
|
|
||||||
:qdesigner_internal::WidgetBoxCategoryListView {container=':Widget Box_qdesigner_internal::WidgetBoxTreeWidget' occurrence='3' type='qdesigner_internal::WidgetBoxCategoryListView' unnamed='1' visible='1'}
|
:qdesigner_internal::WidgetBoxCategoryListView {container=':Widget Box_qdesigner_internal::WidgetBoxTreeWidget' occurrence='3' type='qdesigner_internal::WidgetBoxCategoryListView' unnamed='1' visible='1'}
|
||||||
:qt_tabwidget_stackedwidget.QtSupport__Internal__QtVersionManager_QtSupport::Internal::QtOptionsPageWidget {container=':Options.qt_tabwidget_stackedwidget_QStackedWidget' type='QScrollArea' unnamed='1' visible='1'}
|
:qt_tabwidget_stackedwidget.QtSupport__Internal__QtVersionManager_QtSupport::Internal::QtOptionsPageWidget {container=':Options.qt_tabwidget_stackedwidget_QStackedWidget' type='QScrollArea' unnamed='1' visible='1'}
|
||||||
:qt_tabwidget_stackedwidget_QScrollArea {container=':Options.qt_tabwidget_stackedwidget_QStackedWidget' type='QScrollArea' unnamed='1' visible='1'}
|
:qt_tabwidget_stackedwidget_QScrollArea {container=':Options.qt_tabwidget_stackedwidget_QStackedWidget' type='QScrollArea' unnamed='1' visible='1'}
|
||||||
|
@@ -4,23 +4,6 @@
|
|||||||
<qtcreator>
|
<qtcreator>
|
||||||
<data>
|
<data>
|
||||||
<variable>DebuggerItem.0</variable>
|
<variable>DebuggerItem.0</variable>
|
||||||
<valuemap type="QVariantMap">
|
|
||||||
<valuelist type="QVariantList" key="Abis">
|
|
||||||
<value type="QString">x86-windows-msvc2015-pe-SQUISH_DEBUGGER_BITNESSbit</value>
|
|
||||||
</valuelist>
|
|
||||||
<value type="bool" key="AutoDetected">true</value>
|
|
||||||
<value type="QString" key="AutoDetectionSource"></value>
|
|
||||||
<value type="QString" key="Binary">C:/Program Files (x86)/Windows Kits/10/Debuggers/SQUISH_DEBUGGER_ARCHITECTURE/cdb.exe</value>
|
|
||||||
<value type="QString" key="DisplayName">Auto-detected CDB at C:\Program Files (x86)\Windows Kits\10\Debuggers\SQUISH_DEBUGGER_ARCHITECTURE\cdb.exe</value>
|
|
||||||
<value type="int" key="EngineType">4</value>
|
|
||||||
<value type="QString" key="Id">{1b25f20a-d584-4fb7-85b3-74dd15b82f6f}</value>
|
|
||||||
<value type="QDateTime" key="LastModified"></value>
|
|
||||||
<value type="QString" key="Version"></value>
|
|
||||||
<value type="QString" key="WorkingDirectory"></value>
|
|
||||||
</valuemap>
|
|
||||||
</data>
|
|
||||||
<data>
|
|
||||||
<variable>DebuggerItem.1</variable>
|
|
||||||
<valuemap type="QVariantMap">
|
<valuemap type="QVariantMap">
|
||||||
<valuelist type="QVariantList" key="Abis">
|
<valuelist type="QVariantList" key="Abis">
|
||||||
<value type="QString">x86-windows-msys-pe-unknown</value>
|
<value type="QString">x86-windows-msys-pe-unknown</value>
|
||||||
@@ -36,7 +19,7 @@
|
|||||||
</data>
|
</data>
|
||||||
<data>
|
<data>
|
||||||
<variable>DebuggerItem.Count</variable>
|
<variable>DebuggerItem.Count</variable>
|
||||||
<value type="int">2</value>
|
<value type="int">1</value>
|
||||||
</data>
|
</data>
|
||||||
<data>
|
<data>
|
||||||
<variable>Version</variable>
|
<variable>Version</variable>
|
||||||
|
@@ -37,7 +37,6 @@
|
|||||||
<value type="QString" key="PE.Profile.AutoDetectionSource"></value>
|
<value type="QString" key="PE.Profile.AutoDetectionSource"></value>
|
||||||
<valuemap type="QVariantMap" key="PE.Profile.Data">
|
<valuemap type="QVariantMap" key="PE.Profile.Data">
|
||||||
<value type="QString" key="Android.GdbServer.Information"></value>
|
<value type="QString" key="Android.GdbServer.Information"></value>
|
||||||
<value type="QString" key="Debugger.Information">{1b25f20a-d584-4fb7-85b3-74dd15b82f6f}</value>
|
|
||||||
<value type="QString" key="PE.Profile.Device">Desktop Device</value>
|
<value type="QString" key="PE.Profile.Device">Desktop Device</value>
|
||||||
<value type="QByteArray" key="PE.Profile.DeviceType">Desktop</value>
|
<value type="QByteArray" key="PE.Profile.DeviceType">Desktop</value>
|
||||||
<valuelist type="QVariantList" key="PE.Profile.Environment"/>
|
<valuelist type="QVariantList" key="PE.Profile.Environment"/>
|
||||||
@@ -65,7 +64,6 @@
|
|||||||
<valuemap type="QVariantMap" key="PE.Profile.Data">
|
<valuemap type="QVariantMap" key="PE.Profile.Data">
|
||||||
<value type="QString"></value>
|
<value type="QString"></value>
|
||||||
<value type="QString" key="Android.GdbServer.Information"></value>
|
<value type="QString" key="Android.GdbServer.Information"></value>
|
||||||
<value type="QString" key="Debugger.Information">{1b25f20a-d584-4fb7-85b3-74dd15b82f6f}</value>
|
|
||||||
<value type="QString" key="PE.Profile.Device">Desktop Device</value>
|
<value type="QString" key="PE.Profile.Device">Desktop Device</value>
|
||||||
<value type="QByteArray" key="PE.Profile.DeviceType">Desktop</value>
|
<value type="QByteArray" key="PE.Profile.DeviceType">Desktop</value>
|
||||||
<valuelist type="QVariantList" key="PE.Profile.Environment">
|
<valuelist type="QVariantList" key="PE.Profile.Environment">
|
||||||
@@ -94,7 +92,6 @@
|
|||||||
<value type="bool" key="PE.Profile.AutoDetected">false</value>
|
<value type="bool" key="PE.Profile.AutoDetected">false</value>
|
||||||
<value type="QString" key="PE.Profile.AutoDetectionSource"></value>
|
<value type="QString" key="PE.Profile.AutoDetectionSource"></value>
|
||||||
<valuemap type="QVariantMap" key="PE.Profile.Data">
|
<valuemap type="QVariantMap" key="PE.Profile.Data">
|
||||||
<value type="QString" key="Debugger.Information">{1b25f20a-d584-4fb7-85b3-74dd15b82f6f}</value>
|
|
||||||
<value type="QString" key="PE.Profile.Device">Desktop Device</value>
|
<value type="QString" key="PE.Profile.Device">Desktop Device</value>
|
||||||
<value type="QString" key="PE.Profile.DeviceType">Desktop</value>
|
<value type="QString" key="PE.Profile.DeviceType">Desktop</value>
|
||||||
<valuemap type="QVariantMap" key="PE.Profile.ToolChainsV3">
|
<valuemap type="QVariantMap" key="PE.Profile.ToolChainsV3">
|
||||||
|
@@ -524,7 +524,7 @@ def __getSupportedPlatforms__(text, templateName, getAsStrings=False, ignoreVali
|
|||||||
version = res.group("version")
|
version = res.group("version")
|
||||||
else:
|
else:
|
||||||
version = None
|
version = None
|
||||||
if templateName == "Qt Quick Application":
|
if templateName in ("Qt Quick 2 Extension Plugin", "Qt Quick Application"):
|
||||||
result = set([Targets.DESKTOP_6_2_4])
|
result = set([Targets.DESKTOP_6_2_4])
|
||||||
elif 'Supported Platforms' in text:
|
elif 'Supported Platforms' in text:
|
||||||
supports = text[text.find('Supported Platforms'):].split(":")[1].strip().split("\n")
|
supports = text[text.find('Supported Platforms'):].split(":")[1].strip().split("\n")
|
||||||
@@ -662,7 +662,7 @@ def addCPlusPlusFile(name, template, projectName, forceOverwrite=False, addToVCS
|
|||||||
test.compare(str(waitForObject("{name='HdrFileName' type='QLineEdit' visible='1'}").text),
|
test.compare(str(waitForObject("{name='HdrFileName' type='QLineEdit' visible='1'}").text),
|
||||||
expectedHeaderName)
|
expectedHeaderName)
|
||||||
clickButton(waitForObject(":Next_QPushButton"))
|
clickButton(waitForObject(":Next_QPushButton"))
|
||||||
projectComboBox = waitForObjectExists(":projectComboBox_Utils::TreeViewComboBox")
|
projectComboBox = waitForObjectExists(":projectComboBox_QComboBox")
|
||||||
test.compare(projectComboBox.enabled, projectName != None,
|
test.compare(projectComboBox.enabled, projectName != None,
|
||||||
"Project combo box must be enabled when a project is open")
|
"Project combo box must be enabled when a project is open")
|
||||||
projectNameToDisplay = "<None>"
|
projectNameToDisplay = "<None>"
|
||||||
|
@@ -201,31 +201,6 @@ def substituteDefaultCompiler(settingsDir):
|
|||||||
__substitute__(qtversion, "SQUISH_DEFAULT_COMPILER", compiler)
|
__substitute__(qtversion, "SQUISH_DEFAULT_COMPILER", compiler)
|
||||||
test.log("Injected default compiler '%s' to qtversion.xml..." % compiler)
|
test.log("Injected default compiler '%s' to qtversion.xml..." % compiler)
|
||||||
|
|
||||||
def substituteCdb(settingsDir):
|
|
||||||
def canUse64bitCdb():
|
|
||||||
try:
|
|
||||||
serverIni = readFile(os.path.join(os.getenv("APPDATA"), "froglogic",
|
|
||||||
"Squish", "ver1", "server.ini"))
|
|
||||||
autLine = next(iter(filter(lambda line: "AUT/qtcreator" in line,
|
|
||||||
serverIni.splitlines())))
|
|
||||||
autPath = autLine.split("\"")[1]
|
|
||||||
return os.path.exists(os.path.join(autPath, "..", "lib", "qtcreatorcdbext64"))
|
|
||||||
except:
|
|
||||||
test.fatal("Something went wrong when determining debugger bitness",
|
|
||||||
"Did Squish's file structure change? Guessing 32-bit cdb can be used...")
|
|
||||||
return True
|
|
||||||
|
|
||||||
if canUse64bitCdb():
|
|
||||||
architecture = "x64"
|
|
||||||
bitness = "64"
|
|
||||||
else:
|
|
||||||
architecture = "x86"
|
|
||||||
bitness = "32"
|
|
||||||
debuggers = os.path.join(settingsDir, "QtProject", 'qtcreator', 'debuggers.xml')
|
|
||||||
__substitute__(debuggers, "SQUISH_DEBUGGER_ARCHITECTURE", architecture)
|
|
||||||
__substitute__(debuggers, "SQUISH_DEBUGGER_BITNESS", bitness)
|
|
||||||
test.log("Injected architecture '%s' and bitness '%s' in cdb path..." % (architecture, bitness))
|
|
||||||
|
|
||||||
|
|
||||||
def substituteMsvcPaths(settingsDir, version, targetBitness=64):
|
def substituteMsvcPaths(settingsDir, version, targetBitness=64):
|
||||||
if not version in ['2017', '2019']:
|
if not version in ['2017', '2019']:
|
||||||
@@ -298,7 +273,6 @@ def copySettingsToTmpDir(destination=None, omitFiles=[]):
|
|||||||
substituteTildeWithinQtVersion(tmpSettingsDir)
|
substituteTildeWithinQtVersion(tmpSettingsDir)
|
||||||
substituteDefaultCompiler(tmpSettingsDir)
|
substituteDefaultCompiler(tmpSettingsDir)
|
||||||
elif platform.system() in ('Windows', 'Microsoft'):
|
elif platform.system() in ('Windows', 'Microsoft'):
|
||||||
substituteCdb(tmpSettingsDir)
|
|
||||||
substituteMsvcPaths(tmpSettingsDir, '2017', 64)
|
substituteMsvcPaths(tmpSettingsDir, '2017', 64)
|
||||||
substituteMsvcPaths(tmpSettingsDir, '2017', 32)
|
substituteMsvcPaths(tmpSettingsDir, '2017', 32)
|
||||||
substituteMsvcPaths(tmpSettingsDir, '2019', 64)
|
substituteMsvcPaths(tmpSettingsDir, '2019', 64)
|
||||||
|
@@ -81,6 +81,14 @@ def selectFromCombo(objectSpec, itemName):
|
|||||||
mouseClick(waitForObjectItem(comboObject, itemName.replace(".", "\\.")))
|
mouseClick(waitForObjectItem(comboObject, itemName.replace(".", "\\.")))
|
||||||
test.verify(waitFor("str(comboObject.currentText)==itemName", 5000),
|
test.verify(waitFor("str(comboObject.currentText)==itemName", 5000),
|
||||||
"Switched combo item to '%s'" % itemName)
|
"Switched combo item to '%s'" % itemName)
|
||||||
|
def __collapsed__():
|
||||||
|
try:
|
||||||
|
waitForObject("{container='%s' type='QModelIndex'}" % objectSpec, 100)
|
||||||
|
return False
|
||||||
|
except:
|
||||||
|
return True
|
||||||
|
|
||||||
|
waitFor(__collapsed__, 1000)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def selectFromLocator(filter, itemName = None):
|
def selectFromLocator(filter, itemName = None):
|
||||||
|
@@ -53,10 +53,6 @@ def checkQtCreatorHelpVersion(expectedVersion):
|
|||||||
test.fail("Missing Qt Creator Manual.")
|
test.fail("Missing Qt Creator Manual.")
|
||||||
|
|
||||||
|
|
||||||
def _shortcutMatches_(shortcutEdit, expectedText):
|
|
||||||
return str(findObject(shortcutEdit).text) == expectedText
|
|
||||||
|
|
||||||
|
|
||||||
def setKeyboardShortcutForAboutQtC():
|
def setKeyboardShortcutForAboutQtC():
|
||||||
invokeMenuItem("Edit", "Preferences...")
|
invokeMenuItem("Edit", "Preferences...")
|
||||||
mouseClick(waitForObjectItem(":Options_QListView", "Environment"))
|
mouseClick(waitForObjectItem(":Options_QListView", "Environment"))
|
||||||
@@ -78,16 +74,16 @@ def setKeyboardShortcutForAboutQtC():
|
|||||||
"placeholderText='Enter key sequence as text'}" % shortcutGB)
|
"placeholderText='Enter key sequence as text'}" % shortcutGB)
|
||||||
clickButton(record)
|
clickButton(record)
|
||||||
nativeType(keysToType)
|
nativeType(keysToType)
|
||||||
waitFor("_shortcutMatches_(shortcut, expectedKeys)", 5000)
|
waitFor(lambda: str(findObject(shortcut).text) == expectedKeys, 5000)
|
||||||
clickButton(record)
|
clickButton(record)
|
||||||
|
|
||||||
gotExpectedShortcut = _shortcutMatches_(shortcut, expectedKeys)
|
foundShortcut = str(findObject(shortcut).text)
|
||||||
if not gotExpectedShortcut and platform.system() == 'Darwin':
|
if foundShortcut != expectedKeys and platform.system() == 'Darwin':
|
||||||
test.warning("Squish Issue: shortcut was set to %s - entering it manually now"
|
test.warning("Squish Issue: shortcut was set to %s - entering it manually now"
|
||||||
% waitForObject(shortcut).text)
|
% waitForObject(shortcut).text)
|
||||||
replaceEditorContent(shortcut, expectedKeys)
|
replaceEditorContent(shortcut, expectedKeys)
|
||||||
else:
|
else:
|
||||||
test.verify(gotExpectedShortcut, "Expected key sequence is displayed.")
|
test.compare(foundShortcut, expectedKeys, "Expected key sequence is displayed?")
|
||||||
clickButton(waitForObject(":Options.OK_QPushButton"))
|
clickButton(waitForObject(":Options.OK_QPushButton"))
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
@@ -14,8 +14,7 @@ def addFileToProject(projectPath, category, fileTemplate, fileName):
|
|||||||
projectPath, "Verifying whether path is correct."):
|
projectPath, "Verifying whether path is correct."):
|
||||||
replaceEditorContent(pathLineEdit, projectPath)
|
replaceEditorContent(pathLineEdit, projectPath)
|
||||||
clickButton(waitForObject(":Next_QPushButton"))
|
clickButton(waitForObject(":Next_QPushButton"))
|
||||||
projCombo = findObject("{buddy={name='projectLabel' text='Add to project:' type='QLabel' "
|
projCombo = waitForObjectExists(":projectComboBox_QComboBox", 1000)
|
||||||
"visible='1'} name='projectComboBox' type='QComboBox' visible='1'}")
|
|
||||||
proFileName = os.path.basename(projectPath) + ".pro"
|
proFileName = os.path.basename(projectPath) + ".pro"
|
||||||
test.verify(not selectFromCombo(projCombo, proFileName), "Verifying project is selected.")
|
test.verify(not selectFromCombo(projCombo, proFileName), "Verifying project is selected.")
|
||||||
__createProjectHandleLastPage__()
|
__createProjectHandleLastPage__()
|
||||||
|
@@ -41,9 +41,6 @@ def main():
|
|||||||
# needed because categoriesView and templatesView using same model
|
# needed because categoriesView and templatesView using same model
|
||||||
for template in dumpItems(templatesView.model(), templatesView.rootIndex()):
|
for template in dumpItems(templatesView.model(), templatesView.rootIndex()):
|
||||||
template = template.replace(".", "\\.")
|
template = template.replace(".", "\\.")
|
||||||
# FIXME this needs Qt6.2+
|
|
||||||
if template == "Qt Quick 2 Extension Plugin":
|
|
||||||
continue
|
|
||||||
# skip non-configurable
|
# skip non-configurable
|
||||||
if template not in ["Qt Quick UI Prototype", "Qt Creator Plugin"]:
|
if template not in ["Qt Quick UI Prototype", "Qt Creator Plugin"]:
|
||||||
availableProjectTypes.append({category:template})
|
availableProjectTypes.append({category:template})
|
||||||
@@ -119,6 +116,9 @@ def handleBuildSystemVerifyKits(category, template, kits, displayedPlatforms,
|
|||||||
if template == 'Qt Quick Application':
|
if template == 'Qt Quick Application':
|
||||||
fixedBuildSystems.remove('qmake')
|
fixedBuildSystems.remove('qmake')
|
||||||
test.log("Skipped qmake (not supported).")
|
test.log("Skipped qmake (not supported).")
|
||||||
|
elif template == 'Qt Quick 2 Extension Plugin':
|
||||||
|
fixedBuildSystems.remove('Qbs')
|
||||||
|
test.log("Skipped Qbs (not supported).")
|
||||||
|
|
||||||
for counter, buildSystem in enumerate(fixedBuildSystems):
|
for counter, buildSystem in enumerate(fixedBuildSystems):
|
||||||
test.log("Using build system '%s'" % buildSystem)
|
test.log("Using build system '%s'" % buildSystem)
|
||||||
|
@@ -21,13 +21,13 @@ def main():
|
|||||||
openQmakeProject(os.path.join(pathSpeedcrunch, "src", "speedcrunch.pro"),
|
openQmakeProject(os.path.join(pathSpeedcrunch, "src", "speedcrunch.pro"),
|
||||||
[Targets.DESKTOP_5_14_1_DEFAULT])
|
[Targets.DESKTOP_5_14_1_DEFAULT])
|
||||||
# Wait for parsing to complete
|
# Wait for parsing to complete
|
||||||
waitFor("runButton.enabled", 30000)
|
waitFor(lambda: runButton.enabled, 30000)
|
||||||
# Starting before opening, because this is where Creator froze (QTCREATORBUG-10733)
|
# Starting before opening, because this is where Creator froze (QTCREATORBUG-10733)
|
||||||
startopening = datetime.utcnow()
|
startopening = datetime.utcnow()
|
||||||
openQmakeProject(pathCreator, [Targets.DESKTOP_5_14_1_DEFAULT])
|
openQmakeProject(pathCreator, [Targets.DESKTOP_5_14_1_DEFAULT])
|
||||||
# Wait for parsing to complete
|
# Wait for parsing to complete
|
||||||
startreading = datetime.utcnow()
|
startreading = datetime.utcnow()
|
||||||
waitFor("runButton.enabled", 300000)
|
waitFor(lambda: runButton.enabled, 300000)
|
||||||
secondsOpening = (datetime.utcnow() - startopening).seconds
|
secondsOpening = (datetime.utcnow() - startopening).seconds
|
||||||
secondsReading = (datetime.utcnow() - startreading).seconds
|
secondsReading = (datetime.utcnow() - startreading).seconds
|
||||||
timeoutOpen = 45
|
timeoutOpen = 45
|
||||||
|
@@ -35,7 +35,7 @@ def main():
|
|||||||
test.verify(" files changed, 229938 insertions(+)" in commitDetails,
|
test.verify(" files changed, 229938 insertions(+)" in commitDetails,
|
||||||
"Summary in details view?")
|
"Summary in details view?")
|
||||||
clickButton(waitForObject(":Select a Git Commit.Show_QPushButton"))
|
clickButton(waitForObject(":Select a Git Commit.Show_QPushButton"))
|
||||||
changedEdit = waitForObject(":Qt Creator_DiffEditor::SideDiffEditorWidget")
|
changedEdit = waitForObject(":Qt Creator_DiffEditor::SideDiffEditorWidgetChanged")
|
||||||
waitFor("len(str(changedEdit.plainText)) > 0 and "
|
waitFor("len(str(changedEdit.plainText)) > 0 and "
|
||||||
"str(changedEdit.plainText) != 'Waiting for data...'", 40000)
|
"str(changedEdit.plainText) != 'Waiting for data...'", 40000)
|
||||||
diffPlainText = str(changedEdit.plainText)
|
diffPlainText = str(changedEdit.plainText)
|
||||||
|
@@ -82,7 +82,8 @@ def __clickCommit__(count):
|
|||||||
test.verify(waitFor('str(fileName.currentText) == expected', 5000),
|
test.verify(waitFor('str(fileName.currentText) == expected', 5000),
|
||||||
"Verifying editor switches to Git Show.")
|
"Verifying editor switches to Git Show.")
|
||||||
description = waitForObject(":Qt Creator_DiffEditor::Internal::DescriptionEditorWidget")
|
description = waitForObject(":Qt Creator_DiffEditor::Internal::DescriptionEditorWidget")
|
||||||
waitFor('len(str(description.plainText)) != 0', 5000)
|
waitFor('len(str(description.plainText)) != 0 '
|
||||||
|
'and str(description.plainText) != "Waiting for data..."', 5000)
|
||||||
show = str(description.plainText)
|
show = str(description.plainText)
|
||||||
id = "Nobody <nobody@nowhere\.com>"
|
id = "Nobody <nobody@nowhere\.com>"
|
||||||
time = "\w{3} \w{3} \d{1,2} \d{2}:\d{2}:\d{2} \d{4}.* seconds ago\)"
|
time = "\w{3} \w{3} \d{1,2} \d{2}:\d{2}:\d{2} \d{4}.* seconds ago\)"
|
||||||
@@ -104,8 +105,8 @@ def verifyClickCommit():
|
|||||||
for i in range(1, 3):
|
for i in range(1, 3):
|
||||||
if not __clickCommit__(i):
|
if not __clickCommit__(i):
|
||||||
continue
|
continue
|
||||||
changed = waitForObject(":Qt Creator_DiffEditor::SideDiffEditorWidget")
|
changed = waitForObject(":Qt Creator_DiffEditor::SideDiffEditorWidgetChanged")
|
||||||
original = waitForObject(":Qt Creator_DiffEditor::SideDiffEditorWidget2")
|
original = waitForObject(":Qt Creator_DiffEditor::SideDiffEditorWidgetOriginal")
|
||||||
waitFor('str(changed.plainText) != "Waiting for data..." '
|
waitFor('str(changed.plainText) != "Waiting for data..." '
|
||||||
'and str(original.plainText) != "Waiting for data..."', 5000)
|
'and str(original.plainText) != "Waiting for data..."', 5000)
|
||||||
# content of diff editors is merge of modified files
|
# content of diff editors is merge of modified files
|
||||||
@@ -201,7 +202,7 @@ def main():
|
|||||||
type(gitEditor, "<Right>")
|
type(gitEditor, "<Right>")
|
||||||
rect = gitEditor.cursorRect(gitEditor.textCursor())
|
rect = gitEditor.cursorRect(gitEditor.textCursor())
|
||||||
mouseClick(gitEditor, rect.x+rect.width/2, rect.y+rect.height/2, 0, Qt.LeftButton)
|
mouseClick(gitEditor, rect.x+rect.width/2, rect.y+rect.height/2, 0, Qt.LeftButton)
|
||||||
changed = waitForObject(":Qt Creator_DiffEditor::SideDiffEditorWidget")
|
changed = waitForObject(":Qt Creator_DiffEditor::SideDiffEditorWidgetChanged")
|
||||||
waitFor('str(changed.plainText) != "Waiting for data..."', 5000)
|
waitFor('str(changed.plainText) != "Waiting for data..."', 5000)
|
||||||
test.compare(str(changed.plainText), "Retrieving data failed.",
|
test.compare(str(changed.plainText), "Retrieving data failed.",
|
||||||
"Showing an invalid commit can't succeed but Creator survived.")
|
"Showing an invalid commit can't succeed but Creator survived.")
|
||||||
|