Merge remote-tracking branch 'origin/4.12'

Change-Id: I4523ea36332772a310fd462df55683c93c61bb18
This commit is contained in:
Eike Ziller
2020-02-27 09:41:05 +01:00
110 changed files with 542 additions and 589 deletions

View File

@@ -41,6 +41,18 @@ if (CMAKE_VERSION VERSION_GREATER_EQUAL 3.16)
${exclusion_mask}
)
# QtCreator's "System Information..." needs qtdiag
set(qtdiag_destination ${IDE_BIN_PATH})
if (NOT APPLE AND NOT WIN32)
set(qtdiag_destination ${IDE_LIBRARY_BASE_PATH}/Qt/bin)
endif()
install(PROGRAMS
"${QT_BASE_DIR}/bin/qtdiag${CMAKE_EXECUTABLE_SUFFIX}"
DESTINATION ${qtdiag_destination}
COMPONENT Dependencies
EXCLUDE_FROM_ALL
)
# Analyze the binaries and install missing dependencies if they are
# found the CMAKE_PREFIX_PATH e.g. Qt, Clang
configure_file(InstallDependentSharedObjects.cmake.in InstallDependentSharedObjects.cmake @ONLY)

View File

@@ -10,6 +10,11 @@ find_package(yaml-cpp 0.5 QUIET NO_MODULE)
if (yaml-cpp_FOUND)
# target doesn't set include directory for some reason
get_filename_component(yaml_cpp_include_dir ${YAML_CPP_INCLUDE_DIR} ABSOLUTE)
if (NOT EXISTS yaml_cpp_include_dir)
unset(yaml_cpp_include_dir)
unset(yaml_cpp_include_dir CACHE)
find_path(yaml_cpp_include_dir yaml-cpp/yaml.h)
endif()
target_include_directories(yaml-cpp INTERFACE ${yaml_cpp_include_dir})
else()
set(yaml-cpp_FOUND 1)

View File

@@ -1044,7 +1044,18 @@ function(add_qtc_executable name)
\"Prefix=\${qt_conf_binaries}\n\"
)
endif()
if (WIN32 OR APPLE)
file(RELATIVE_PATH qt_binaries
\"\${install_prefix}/\${base_dir}\"
\"\${install_prefix}/${IDE_BIN_PATH}\"
)
if (NOT qt_binaries)
set(qt_binaries .)
endif()
file(APPEND \"\${CMAKE_INSTALL_PREFIX}/\${location}/qt.conf\"
\"# Needed by QtCreator for qtdiag\n\"
\"Binaries=\${qt_binaries}\n\")
endif()
endfunction()
if(APPLE)
create_qt_conf(\"${_EXECUTABLE_PATH}\" \"${IDE_DATA_PATH}/..\")

View File

@@ -35,15 +35,16 @@ Editing
* Added `Go to Last Edit`
* Added option for default line terminator style (QTCREATORBUG-3590)
* Improved performance of syntax highlighting (QTCREATORBUG-23281)
* Fixed that wizards ignored default file encoding
* Fixed that only restricted number of sizes were allowed for font size (QTCREATORBUG-22536)
* Fixed completion after undo (QTCREATORBUG-15038)
### Language Client
* Added support for Markdown in tooltips
* Added support for auto-formatting
* Added outline dropdown (QTCREATORBUG-21916)
* Improved protocol error reporting
* Fixed `Ctrl-click` for `Follow Symbol Under Cursor` (QTCREATORBUG-21848)
### QML
@@ -93,6 +94,7 @@ Projects
* Added automatic registration of CMake documentation, if available (QTCREATORBUG-21338)
* Fixed issues with `snap` on Ubuntu Linux (QTCREATORBUG-23376)
* Fixed handling of `Enable QML` in debugger settings (QTCREATORBUG-23541)
* Fixed unneeded reparsing of files
### Qbs
@@ -122,6 +124,8 @@ Debugging
---------
* Added option to hide columns from views (QTCREATORBUG-23342)
* Added option for `init` and `reset` GDB commands when attaching to remote server
* Fixed pretty printer for `std::optional` (QTCREATORBUG-22436)
Analyzer
--------
@@ -149,6 +153,7 @@ Qt Quick Designer
-----------------
* Added locking and pinning of animation curves (QDS-550, QDS-551)
* Added support for annotations (QDS-39)
* Fixed dragging of keyframes in curve editor (QDS-1405)
Version Control Systems
@@ -159,6 +164,8 @@ Version Control Systems
* Added option to create branch when trying to push to a non-existing branch (QTCREATORBUG-21154)
* Added option to start interactive rebase from log view (QTCREATORBUG-11200)
* Added information about upstream status to `Git Branches` view
* Added option to `grep` and `pickaxe` git log (QTCREATORBUG-22512)
* Made references in VCS output view clickable (QTCREATORBUG-16477)
Test Integration
----------------
@@ -184,8 +191,15 @@ Platforms
* Added auto-detection of Java JDK (QTCREATORBUG-23407)
* Added option to automatically download and install required Android tools (QTCREATORBUG-23285)
* Added automatic selection of correct NDK for Qt version (QTCREATORBUG-23583)
* Added support for Android 11 with API level 30
* Improved examples browser to only show items tagged with `android` (QTBUG-80716)
* Fixed several issues with AVD manager (QTCREATORBUG-23284, QTCREATORBUG-23448)
### iOS
* Improved examples browser to only show items tagged with `ios`
### Remote Linux
* Added option to use custom command for install step (QTCREATORBUG-23320)

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2019 The Qt Company Ltd.
** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Creator documentation.
@@ -44,7 +44,7 @@
\li Select \uicontrol Help > \uicontrol {About Plugins} >
\uicontrol {Code Analyzer} > \uicontrol Cppcheck to enable the
plugin.
\li Restart \QC to load the plugin.
\li Select \uicontrol {Restart Now} to restart \QC and load the plugin.
\li Select \uicontrol Tools > \uicontrol Options > \uicontrol Analyzer
> \uicontrol Cppcheck to specify settings for running Cppcheck.
\image qtcreator-cppcheck-options.png "Cppcheck options"

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2019 The Qt Company Ltd.
** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Creator documentation.
@@ -49,7 +49,7 @@
\uicontrol {Device Support} > \uicontrol {Bare Metal} to enable the
Bare Metal Device plugin.
\li Restart \QC to be able to use the plugin.
\li Select \uicontrol {Restart Now} to restart \QC and load the plugin.
\li Select \uicontrol Tools > \uicontrol Options > \uicontrol Devices >
\uicontrol {Bare Metal} > \uicontrol Add > \uicontrol Default,

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2019 The Qt Company Ltd.
** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Creator documentation.
@@ -33,8 +33,8 @@
library for automatic formatting and indentation.
To enable the plugin, select \uicontrol Help > \uicontrol {About Plugins} >
\uicontrol {C++} > \uicontrol {ClangFormat}. Then restart \QC to load the
plugin.
\uicontrol {C++} > \uicontrol {ClangFormat}. Then select
\uicontrol {Restart Now} to restart \QC and load the plugin.
\note If you enable the plugin, do not use the \l{Beautifying Source Code}
{Beautifier}, because combining the two can provide unexpected results.

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2018 The Qt Company Ltd.
** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Creator documentation.
@@ -74,7 +74,7 @@
\li Select \uicontrol Help > \uicontrol {About Plugins} > \uicontrol {C++} >
\uicontrol Beautifier to enable the plugin.
\li Restart \QC to be able to use the plugin.
\li Select \uicontrol {Restart Now} to restart \QC and load the plugin.
\li Select \uicontrol Tools > \uicontrol Options >
\uicontrol Beautifier to specify settings for beautifying files.

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2018 The Qt Company Ltd.
** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Creator documentation.
@@ -105,8 +105,8 @@
To use the built-in code model instead, select \uicontrol Help >
\uicontrol {About Plugins} > \uicontrol C++, and deselect the
\uicontrol ClangCodeModel check box. The changes take effect after
you restart \QC.
\uicontrol ClangCodeModel check box. Select \uicontrol {Restart Now}
to restart \QC and have the changes take effect.
You can configure Clang diagnostics either globally or separately for:

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2019 The Qt Company Ltd.
** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Creator documentation.
@@ -56,7 +56,7 @@
To enable the plugin, select \uicontrol Help > \uicontrol {About Plugins} >
\uicontrol {Build Systems} > \uicontrol {Compilation Database Project Manager}.
Then restart \QC to load the plugin.
Then select \uicontrol {Restart Now} to restart \QC and load the plugin.
//! [using compilation databases]
*/

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2018 The Qt Company Ltd.
** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Creator documentation.
@@ -107,8 +107,9 @@
\list 1
\li Select \uicontrol Help > \uicontrol {About Plugins} >
\uicontrol Modeling > \uicontrol ScxmlEditor and restart \QC to
enable the plugin.
\uicontrol Modeling > \uicontrol ScxmlEditor.
\li Select \uicontrol {Restart Now} to restart \QC and load the plugin.
\li Select \uicontrol File > \uicontrol {New File or Project} >
\uicontrol {Files and Classes} > \uicontrol Modeling >

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2018 The Qt Company Ltd.
** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Creator documentation.
@@ -245,7 +245,7 @@
\uicontrol {Utilities} > \uicontrol {SilverSearcher} to enable the
plugin.
\li Restart \QC to be able to use the plugin.
\li Select \uicontrol {Restart Now} to restart \QC and load the plugin.
\li When searching, select \uicontrol {Silver Searcher} in the
\uicontrol {Search engine} field.
@@ -267,7 +267,7 @@
\li Select \uicontrol Help > \uicontrol {About Plugins} > \uicontrol C++
> \uicontrol {ClangRefactoring} to enable the plugin.
\li Restart \QC to be able to use the plugin.
\li Select \uicontrol {Restart Now} to restart \QC and load the plugin.
\li When searching, select \uicontrol {Clang Query Project} in the
\uicontrol {Scope} field.

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2019 The Qt Company Ltd.
** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Creator documentation.
@@ -51,7 +51,7 @@
\li To display the full help on a Qt class or function, press \key F1 or
select \uicontrol {Context Help} in the context menu.
The documentation is displayed in a
pane next to the code editor, or, if there is not enough vertical
view next to the code editor, or, if there is not enough vertical
space, in the fullscreen \uicontrol Help mode.
\li To select and configure how the documentation is displayed in the
@@ -215,7 +215,7 @@
You can select the page to display when you open the \uicontrol Help mode in the
\uicontrol Tools > \uicontrol Options > \uicontrol Help > \uicontrol General
> \uicontrol {On help start} field.
To display the page and help panes that were open when you exited the mode,
To display the page and help views that were open when you exited the mode,
select the \uicontrol {Show My Tabs from Last Session} option. However, Web pages
are not opened, because loading them would slow down opening the \uicontrol Help
mode.
@@ -232,7 +232,7 @@
You can filter the documents displayed in the \uicontrol Help mode to find
relevant information faster. Select a filter from a list of filters (1). The
contents of the \uicontrol Index and \uicontrol Contents
pane in the sidebar change accordingly.
view in the sidebar change accordingly.
\image qtcreator-help-filters.png "Help filters"

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2019 The Qt Company Ltd.
** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Creator documentation.
@@ -239,14 +239,14 @@
Where the number is the number of the output pane.
\if defined(qtcreator)
\row
\li Activate \uicontrol Bookmarks pane
\li Activate \uicontrol Bookmarks view
\li Alt+M
\endif
\row
\li Activate \uicontrol{File System} pane
\li Activate \uicontrol{File System} view
\li Alt+Y
\row
\li Activate \uicontrol{Open Documents} pane
\li Activate \uicontrol{Open Documents} view
\li Alt+O
\row
\li Maximize output panes
@@ -258,7 +258,7 @@
\li Move to previous item in output panes
\li Shift+F6
\row
\li Activate \uicontrol Projects pane
\li Activate \uicontrol Projects view
\li Alt+X
\row
\li Full screen

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2019 The Qt Company Ltd.
** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Creator documentation.
@@ -67,8 +67,8 @@
\QC has been localized into several languages. If the system
language is one of the supported languages, it is automatically selected.
To change the language, select \uicontrol {Tools > Options > Environment} and
select a language in the \uicontrol Language field. The change takes effect after
you restart \QC.
select a language in the \uicontrol Language field. Select
\uicontrol {Restart Now} to restart \QC and have the change take effect.
\b {Has a reported issue been addressed?}

View File

@@ -118,7 +118,8 @@
is one of the supported languages, it is automatically selected. To
change the language, select \uicontrol Tools > \uicontrol Options >
\uicontrol Environment and select a language in the \uicontrol Language
field. The change takes effect after you restart \QC.
field. Select \uicontrol {Restart Now} to restart \QC and have the change
take effect.
\section1 Viewing Images
@@ -612,8 +613,8 @@
The Todo plugin is disabled by default. To enable the plugin, select
\uicontrol Help > \uicontrol {About Plugins} > \uicontrol Utilities >
\uicontrol Todo and restart
\QC.
\uicontrol Todo. Then select \uicontrol {Restart Now} to restart \QC
and load the plugin.
In addition, you can open task list files generated by code scanning and
analysis tools in the \uicontrol Issues pane. For more information, see

View File

@@ -103,7 +103,7 @@
\uicontrol {Device Support} > \uicontrol {Bare Metal} and
\uicontrol {MCU Support} to enable the Bare Metal and MCU
plugins.
\li Restart \QC to be able to use the plugins.
\li Select \uicontrol {Restart Now} to restart \QC and load the plugins.
\li Create connections for debugging on the MCU board, as described in
\l{Connecting Bare Metal Devices}.
\endlist

View File

@@ -36,9 +36,8 @@
The AutotoolsProjectManager is a plugin for autotools support. It is
disabled by default. To enable the plugin, select \uicontrol Help >
\uicontrol {About Plugins} > \uicontrol {Build Systems} >
\uicontrol AutotoolsProjectManager.
To use the plugin, restart \QC.
\uicontrol AutotoolsProjectManager.Then select \uicontrol {Restart Now}
to restart \QC and load the plugin.
To work with your Autotools project in \QC:

View File

@@ -434,16 +434,16 @@
\image qtcreator-new-opengl-file.png "New OpenGL file wizard"
\section2 Displaying Additional File Types in Projects Pane
\section2 Displaying Additional File Types in Projects View
\QC determines whether to display files from the project folder
in the \uicontrol Projects pane depending on the file type (.pro, .pri, .cpp,
in the \uicontrol Projects view depending on the file type (.pro, .pri, .cpp,
.h, .qrc, and so on). To display other types of files, edit the
project file. Add filenames as values of the \c {DISTFILES} variable.
You can also use wildcards.
For example, the following code specifies that text files are displayed
in the \uicontrol Projects pane:
in the \uicontrol Projects view:
\code
@@ -478,7 +478,7 @@
{SUBDIRS variable}. It also adds all the necessary files for the subproject.
To create more subprojects, right-click the project name in the
\uicontrol Projects pane to open the context menu, and select
\uicontrol Projects view to open the context menu, and select
\uicontrol {New Subproject}. Follow the steps in the
\uicontrol {New Subproject} wizard to create a subproject.
@@ -489,7 +489,7 @@
In the file browser dialog, locate your subproject.
To remove subprojects, right-click the project name in the \uicontrol Projects
pane, and select \uicontrol {Remove Subproject} in the context menu.
view, and select \uicontrol {Remove Subproject} in the context menu.
To specify dependencies, use the \uicontrol{Add Library} wizard. For more
information, see \l{Adding Libraries to Projects}.

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2018 The Qt Company Ltd.
** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Creator documentation.
@@ -88,7 +88,7 @@
\list 1
\li In the \uicontrol Projects pane, right-click the project name to open the
\li In the \uicontrol Projects view, right-click the project name to open the
context menu and select
\uicontrol {Add Library}.
@@ -122,7 +122,7 @@
\uicontrol {Project Management} dialog. In the \uicontrol {Add to project}
list, select a project. For example, \b myapp.
\li In the \uicontrol Projects pane, right-click the project name to open the
\li In the \uicontrol Projects view, right-click the project name to open the
context menu and select
\uicontrol {Add Library > Internal Library > Next}.

View File

@@ -38,7 +38,8 @@
To use \QC for Nim development, you need to enable the experimental
Nim plugin. Select \uicontrol Help > \uicontrol {About Plugins} >
\uicontrol {Other Languages} > \uicontrol Nim, and then restart \QC.
\uicontrol {Other Languages} > \uicontrol Nim. Then select
\uicontrol {Restart Now} to restart \QC and load the plugin.
In addition, you have to download and install Nim and set up a Nim kit
in \QC.

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2019 The Qt Company Ltd.
** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Creator documentation.
@@ -109,7 +109,7 @@
\li In \uicontrol Library > \uicontrol Assets, select Bluebubble.svg
and drag and drop it to \e mainWindow in the navigator.
\li In the \uicontrol Properties pane, \uicontrol Id field, enter
\li In the \uicontrol Properties view, \uicontrol Id field, enter
\e bubble to be able to reference the image from other places.
\li Select the \inlineimage export_unchecked.png

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2019 The Qt Company Ltd.
** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Creator documentation.
@@ -98,7 +98,7 @@
properties. Some properties, such as position, size, and visibility,
are common to all QML types, whereas others are specific to the QML
type. You can specify properties for your components in the
\uicontrol Properties pane.
\uicontrol Properties view.
\li \l {Creating Animations}

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2018 The Qt Company Ltd.
** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Creator documentation.
@@ -32,7 +32,7 @@
the state machine in the \uicontrol Backends tab in the Design mode, as
described in \l {Managing C++ Backend Objects}.
In the \uicontrol States pane, you can edit the \c when condition of states
In the \uicontrol States view, you can edit the \c when condition of states
to map QML states to the states of the SCXML state machine. For an example,
see \l {Qt SCXML Traffic Light QML Example (Dynamic)}.

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2019 The Qt Company Ltd.
** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Creator documentation.
@@ -58,14 +58,14 @@
\li In the \uicontrol Navigator, select \uicontrol Item and set the
width (\uicontrol W) and height (\uicontrol H) of the button in the
\uicontrol Properties pane.
\uicontrol Properties view.
\li Drag and drop a \uicontrol Rectangle from the \uicontrol Library to
the item in the navigator. This creates a nested item where the
item is the parent of the rectangle. Items are positioned relative
to their parents.
\li In the \uicontrol Properties pane, modify the appearance of the
\li In the \uicontrol Properties view, modify the appearance of the
rectangle:
\list a
@@ -85,7 +85,7 @@
\li Drag and drop a \uicontrol {Text} type to the item in the navigator.
\li In the \uicontrol Properties pane, edit the properties of the \uicontrol Text
\li In the \uicontrol Properties view, edit the properties of the \uicontrol Text
type.
\list a
@@ -167,7 +167,7 @@
\li In the \uicontrol Navigator, select \uicontrol Item and set the
width (\uicontrol W) and height (\uicontrol H) of the button in the
\uicontrol Properties pane.
\uicontrol Properties view.
\li Select \uicontrol Connections > \uicontrol {Properties} >
\uicontrol Add to add properties for the item:
@@ -193,7 +193,7 @@
navigator.
\li In the navigator, select a border image to specify settings for it
in the \uicontrol Properties pane:
in the \uicontrol Properties view:
\list a

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2019 The Qt Company Ltd.
** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Creator documentation.
@@ -47,7 +47,7 @@
is generally defined in its own QML file. You can import components to
applications.
The \uicontrol {Library} pane lists the available QML types, UI
The \uicontrol {Library} view lists the available QML types, UI
components, assets, and QML imports.
\image qmldesigner-qml-components.png "QML Components"
@@ -77,13 +77,13 @@
\li Drag and drop components from the \uicontrol Library (2) to the
\uicontrol Navigator (3) or \uicontrol {Form Editor} (1).
\li Select components in the \uicontrol Navigator to edit their
properties in the \uicontrol Properties pane (4). For more
properties in the \uicontrol Properties view (4). For more
information, see \l {Specifying Item Properties}.
\li Connect components to signals or create bindings between components
in the \uicontrol Connections pane (5). For more information, see
in the \uicontrol Connections view (5). For more information, see
\l{Adding Connections}.
\li Add states to apply sets of changes to the properties of one or
several components in the \uicontrol States pane (6). For more
several components in the \uicontrol States view (6). For more
information, see \l{Adding States}.
\endlist
@@ -135,7 +135,7 @@
When you add a \l{GridView}{Grid View}, \l{ListView}{List View}, or
\l{PathView}{Path View}, the ListModel and the delegate component that
creates an instance for each item in the model are added automatically.
You can edit item properties in the \uicontrol Properties pane or
You can edit item properties in the \uicontrol Properties view or
in the \uicontrol {Text Editor}. You can also replace the default model and
delegate with other, more complex models and delegates in the
\uicontrol {Text Editor}. \l{ItemDelegate}{Item Delegate} and
@@ -212,7 +212,7 @@
invisible \e anchor lines: top, bottom, left, right, fill, horizontal
center, vertical center, and baseline.
In the \uicontrol Layout pane you can set anchors and margins for items. To
In the \uicontrol Layout tab you can set anchors and margins for items. To
set the anchors of an item, click the anchor buttons. You can combine the
top/bottom, left/right, and horizontal/vertical anchors to anchor items in
the corners of the parent item or center them horizontally or vertically
@@ -558,7 +558,7 @@
\li Drag and drop a QML type from the \uicontrol Library to the
\uicontrol Navigator or \uicontrol {Form Editor}.
\li Edit its properties in the \uicontrol Properties pane.
\li Edit its properties in the \uicontrol Properties view.
The available properties depend on the QML type.

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2019 The Qt Company Ltd.
** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Creator documentation.
@@ -102,13 +102,13 @@
\endlist
\li \uicontrol {States} pane (6) displays the different states of the item.
\li \uicontrol {States} view (6) displays the different states of the item.
QML states typically describe user interface configurations, such as
the UI controls, their properties and behavior and the available
actions. For more information, see \l{Adding States}.
\if defined(qtdesignstudio)
\li \uicontrol Timeline pane (7) provides a timeline and keyframe based
\li \uicontrol Timeline view (7) provides a timeline and keyframe based
editor that enables you to animate the properties of UI components.
\endif
@@ -165,9 +165,9 @@
To experiment with different component sizes, enter values in the
\uicontrol {Override Width} and \uicontrol {Override Height} fields (1) on
the canvas toolbar. The changes are displayed on the canvas (2)
and in the \uicontrol States pane (3), but the property
and in the \uicontrol States view (3), but the property
values are not changed permanently in the QML file. You can permanently
change the property values in the \uicontrol Properties pane (4).
change the property values in the \uicontrol Properties view (4).
\image qmldesigner-preview-size.png "Canvas width and height"

View File

@@ -114,6 +114,12 @@
\quotefile progressbar/main.cpp
\section1 Adding Custom Fonts
To \l{Using Custom Fonts}{use custom fonts} from the Qt Quick UI project,
call the QFontDatabase::addApplicationFont() function from the \e {main.cpp}
file.
\section1 Adding Qt Quick Timeline Module to Qt Installations
\note You only need to do this if your Qt version is older than 5.14.

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2019 The Qt Company Ltd.
** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Creator documentation.
@@ -38,7 +38,7 @@
\image qmldesigner-navigator.png "Navigator"
You can select items in the \uicontrol Navigator to edit their properties
in the \uicontrol Properties pane. Items can access the properties of their
in the \uicontrol Properties view. Items can access the properties of their
parent item. To select items on the canvas, right-click an item, and select
another type in the context menu.
@@ -55,7 +55,7 @@
To show and hide items on the canvas when focusing on specific parts of the
application, click \inlineimage eye_open.png
. To change the visibility of an item in the application code, select the
\uicontrol Visibility check box in the \uicontrol Properties pane or select
\uicontrol Visibility check box in the \uicontrol Properties view or select
\uicontrol Edit > \uicontrol Visibility in the context menu.
You can also set the \uicontrol Opacity field to 0 to hide items that you

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2019 The Qt Company Ltd.
** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Creator documentation.
@@ -59,7 +59,7 @@
To add intermediary points to a curve segment, select \uicontrol {Split Segment}
in the context menu.
In the \uicontrol Properties pane, you can specify other properties for
In the \uicontrol Properties view, you can specify other properties for
the path view. For example, what is the maximum distance from the path that
initiates mouse dragging and what is the rate at which a flick will
decelerate.

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2019 The Qt Company Ltd.
** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Creator documentation.
@@ -35,19 +35,19 @@
\title Specifying Item Properties
The \uicontrol Properties pane displays all the properties of the selected
item. The properties are grouped by type. The top part of the pane displays
The \uicontrol Properties view displays all the properties of the selected
item. The properties are grouped by type. The top part of the view displays
properties that are common to all QML types, such as position, size, and
visibility.
The bottom part of the pane displays properties that are specific to each
The bottom part of the view displays properties that are specific to each
QML type. For example, the following image displays the properties you can
set for \uicontrol Rectangle (1) and \uicontrol Text (2) items.
\image qmldesigner-element-properties.png
To change the item type, double-click the \uicontrol Type field in the
\uicontrol Properties pane, and enter the name of another QML type in the
\uicontrol Properties view, and enter the name of another QML type in the
field. If you have specified properties for the item that are not supported
for the new type, the type cannot be changed and an error message is
displayed. Select the \inlineimage icons/action-icon.png
@@ -130,7 +130,7 @@
\section1 Picking Colors
To specify the color of the selected item in the color picker view (1),
select the color picker icon (2) in the \uicontrol Properties pane.
select the color picker icon (2) in the \uicontrol Properties view.
\image qtquick-designer-color-picker.png "Color Picker view"
@@ -163,7 +163,7 @@
\section1 Marking Text Items for Translation
To support translators, mark each text item that should be translated.
In the \uicontrol Properties pane, \uicontrol Text field, select \uicontrol tr (1).
In the \uicontrol Properties view, \uicontrol Text field, select \uicontrol tr (1).
\image qmldesigner-text-property-tr.png "Text properties"
@@ -281,7 +281,7 @@
\section1 Building Transformations on Items
The \uicontrol Advanced pane allows you to configure advanced
The \uicontrol Advanced tab allows you to configure advanced
transformations, such as rotation, scale, and translation. You
can assign any number of transformations to an item. Each
transformation is applied in order, one at a time.

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2019 The Qt Company Ltd.
** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Creator documentation.
@@ -62,12 +62,12 @@
\li Show a different view.
\endlist
The \uicontrol States pane displays the different \l{State}{states}
of the component in the Design mode. The \uicontrol States pane is
The \uicontrol States view displays the different \l{State}{states}
of the component in the Design mode. The \uicontrol States view is
collapsed by default to save space. Select \uicontrol Expand in
the context menu to view the whole pane.
the context menu to view the whole view.
\image qmldesigner-transitions.png "States pane"
\image qmldesigner-transitions.png "States view"
To add states, click the \inlineimage plus.png
button. Then modify the new state in the editor. For example, to change the
@@ -86,9 +86,9 @@
a button is pressed, you could select a button component and
its pressed property.
\image qtquick-states-binding-editor.png "Binding editor in States pane"
\image qtquick-states-binding-editor.png "Binding editor in States view"
You can preview the states in the \uicontrol States pane and click them to
You can preview the states in the \uicontrol States view and click them to
switch between states on the canvas.
\section1 Using States
@@ -97,11 +97,11 @@
controls, their properties and behavior and the available actions. For
example, you can use states to create two views.
To add states, click the empty slot in the \uicontrol States pane.
To add states, click the empty slot in the \uicontrol States view.
Then modify the new state in the \uicontrol {Form Editor} or the
\uicontrol Properties pane.
\uicontrol Properties view.
\image qmldesigner-states.png "States pane"
\image qmldesigner-states.png "States view"
The properties that you change in a state are highlighted with blue color.
In the \uicontrol {Text Editor}, you can see the changes recorded as changes
@@ -130,9 +130,9 @@
(1). While you work on one view, you can click the
\inlineimage eye_open.png
icon to hide items on the canvas that are not part of a view.
\li In the \uicontrol States pane, click the empty slot to create a
\li In the \uicontrol States view, click the empty slot to create a
new state and give it a name. For example, \c Normal.
\li In the \uicontrol Properties pane (2), deselect the
\li In the \uicontrol Properties view (2), deselect the
\uicontrol Visibility check box or set \uicontrol Opacity to 0
for each item that is not needed in this view. If you specify
the setting for the parent item, all child items inherit it and

View File

@@ -60,8 +60,9 @@
The \uicontrol Timeline view is not visible in \QC by default. To enable
it, select \uicontrol Tools > \uicontrol Options > \uicontrol {Qt Quick} >
\uicontrol {Qt Quick Designer} > \uicontrol {Enable Timeline editor}. You
need to restart \QC for the \uicontrol Timeline view to appear.
\uicontrol {Qt Quick Designer} > \uicontrol {Enable Timeline editor}.
Select \uicontrol {Restart Now} to restart \QC with the \uicontrol Timeline
view visible.
To be able to create timelines, you also need the \l {Qt Quick Timeline}
module, which is delivered with Qt 5.14, and later. For more

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2019 The Qt Company Ltd.
** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Creator documentation.
@@ -42,7 +42,8 @@
Since \QC 4.9, the Perforce plugin is disabled by default. To enable
it, select \uicontrol Help > \uicontrol {About Plugins} >
\uicontrol {Version Control} > \uicontrol Perforce, and then restart \QC.
\uicontrol {Version Control} > \uicontrol Perforce. Then select
\uicontrol {Restart Now} to restart \QC and load the plugin.
\section1 Configuring Perforce

View File

@@ -52,8 +52,9 @@
\li \l{http://www-01.ibm.com/software/awdtools/clearcase/}
\li Disabled by default. To enable the plugin, select
\uicontrol Help > \uicontrol {About Plugins} >
\uicontrol {Version Control} > \uicontrol ClearCase, and then
restart \QC.
\uicontrol {Version Control} > \uicontrol ClearCase.
Then select \uicontrol {Restart Now} to restart \QC
and load the plugin.
\row
\li \l{Using CVS}{CVS}
\li \l{http://www.nongnu.org/cvs/}
@@ -75,8 +76,9 @@
Disabled by default. To enable the plugin, select
\uicontrol Help > \uicontrol {About Plugins} >
\uicontrol {Version Control} > \uicontrol Perforce,
and then restart \QC.
\uicontrol {Version Control} > \uicontrol Perforce.
Then select \uicontrol {Restart Now} to restart \QC
and load the plugin.
\row
\li \l{Using Subversion}{Subversion}
\li \l{http://subversion.apache.org/}

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2019 The Qt Company Ltd.
** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Creator documentation.
@@ -189,7 +189,7 @@
The \uicontrol {Diff Selected Files} button brings up a diff view of the
files selected in the file list. Since the commit page is just another
editor, you can go back to it by closing the diff view. You can also switch
to an open diff view by selecting it in the \uicontrol {Open Documents} pane
to an open diff view by selecting it in the \uicontrol {Open Documents} view
in the sidebar.
\section2 Amending Commits

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2019 The Qt Company Ltd.
** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Creator documentation.
@@ -80,7 +80,7 @@
\li In \QC, select \uicontrol Help > \uicontrol {About Plugins} >
\uicontrol {Device Support} > \uicontrol {WebAssembly} to enable
the plugin.
\li Restart \QC to be able to use the plugin.
\li Select \uicontrol {Restart Now} to restart \QC and load the plugin.
\li Select \uicontrol Tools > \uicontrol Options > \uicontrol Kits >
\uicontrol {Qt Versions} > \uicontrol Add to add Qt for WebAssembly
(wasm_32).

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2018 The Qt Company Ltd.
** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Creator documentation.
@@ -157,7 +157,7 @@
\li Double-click the \uicontrol{Push Button} widget and enter the text
\b{Find}.
\li In the \uicontrol Properties pane, change the \uicontrol objectName to
\li In the \uicontrol Properties view, change the \uicontrol objectName to
\b findButton.
\image qtcreator-textfinder-objectname.png "Changing object names"
@@ -216,7 +216,7 @@
\list 1
\li In the \uicontrol{Projects} pane in the \uicontrol {Edit view}, double-click the
\li In the \uicontrol{Projects} view in the \uicontrol {Edit view}, double-click the
\c{textfinder.h} file to open it for editing.
\li Add a private function to the \c{private} section, after the
@@ -234,7 +234,7 @@
\list 1
\li In the \uicontrol{Projects} pane in the \uicontrol Edit view, double-click the
\li In the \uicontrol{Projects} view in the \uicontrol Edit view, double-click the
textfinder.cpp file to open it for editing.
\li Add code to load a text file using QFile, read it with QTextStream,

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2019 The Qt Company Ltd.
** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Design Studio documentation.
@@ -79,7 +79,7 @@
\QDS creates a set of boilerplate files and folders that you need to create
a UI using Qt Quick and QML. The files are listed in the \uicontrol Project
tab in the \uicontrol Navigator and in the \uicontrol Projects pane. For
tab in the \uicontrol Navigator and in the \uicontrol Projects view. For
more information, see \l {Viewing Project Files}.
\image loginui1-project-files.png

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2019 The Qt Company Ltd.
** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Design Studio documentation.
@@ -117,9 +117,9 @@
components on the canvas:
\list 1
\li In the \uicontrol States pane, select the \inlineimage plus.png
\li In the \uicontrol States view, select the \inlineimage plus.png
button.
\image loginui3-login-state.png "States pane"
\image loginui3-login-state.png "States view"
\li Enter \e loginState as the state name.
\li Select \e verifyPasswordField in the \uicontrol Navigator,
and deselect the \uicontrol Visibility check box in

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2019 The Qt Company Ltd.
** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Design Studio documentation.
@@ -85,7 +85,7 @@
\list 1
\li Open \e {Screen01.ui.qml} in the Design mode for editing.
\li In the \uicontrol States pane, select the \inlineimage close.png
\li In the \uicontrol States view, select the \inlineimage close.png
(\uicontrol Close) button in \e loginState and \e registerState
to remove the states.
\li In the \uicontrol {Text Editor}, remove the following line:
@@ -259,11 +259,11 @@
\section1 Binding Animation to States
You will now bring back the \l{Adding States}{states} in the
\uicontrol States pane and bind them to the animation settings
\uicontrol States view and bind them to the animation settings
in the \uicontrol Timeline view:
\list 1
\li In the \uicontrol States pane, select the \inlineimage plus.png
\li In the \uicontrol States view, select the \inlineimage plus.png
button twice to add two states called \e loginState and
\e registerState. You don't need to make any property changes this
time, because you'll bind the states to property animations.

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2019 The Qt Company Ltd.
** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Design Studio documentation.
@@ -70,7 +70,7 @@
\note Components are listed in the \uicontrol {QML Components}
section of the \uicontrol Library only if the filename begins
with a capital letter.
\li Edit component properties in the \uicontrol Properties pane.
\li Edit component properties in the \uicontrol Properties view.
The available properties depend on the QML type.
\endlist

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2019 The Qt Company Ltd.
** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Design Studio documentation.
@@ -72,7 +72,7 @@
properties. Some properties, such as position, size, and visibility,
are common to all QML types, whereas others are specific to the QML
type. You can specify properties for your components in the
\uicontrol Properties pane.
\uicontrol Properties view.
\li \l {Using Custom Fonts}

View File

@@ -1,83 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Creator documentation.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU Free Documentation License Usage
** Alternatively, this file may be used under the terms of the GNU Free
** Documentation License version 1.3 as published by the Free Software
** Foundation and appearing in the file included in the packaging of
** this file. Please review the following information to ensure
** the GNU Free Documentation License version 1.3 requirements
** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
**
****************************************************************************/
/*!
\contentspage index.html
\previouspage creator-project-generic.html
\page creator-project-nimble.html
\nextpage creator-cli.html
\title Setting Up Nimble
\l {https://github.com/nim-lang/nimble#readme}{Nimble} is a package
manager for the Nim programming language. It is delivered with
\l{https://nim-lang.org/}{Nim} and uses the Nim compiler to generate
executables that are supported on Windows, Linux, and \macos.
To use \QC for Nim development, you need to enable the experimental
Nim plugin. Select \uicontrol Help > \uicontrol {About Plugins} >
\uicontrol {Other Languages} > \uicontrol Nim, and then restart \QC.
In addition, you have to download and install Nim and set up a Nim kit
in \QC.
You can use wizards to create Nim and Nimble projects.
\section1 Setting Up the Development Environment
To configure \QC to build Nim executables:
\list 1
\li Select \uicontrol Tools > \uicontrol Options > \uicontrol Kits
\uicontrol Compilers > \uicontrol Add > \uicontrol Nim to specify
the path to the the Nim compiler.
\li Select \uicontrol Apply to add the compiler.
\li Select \uicontrol Kits > \uicontrol Add to add a kit for building
applications with Nimble:
\image qtcreator-kit-nimble.png "Nimble kit"
\list 1
\li In the \uicontrol Name field, specify a name for the kit.
\li In the \uicontrol Compiler group, \uicontrol Nim field,
select the Nim compiler you added above.
\li Select \uicontrol Apply to add the kit.
\endlist
\endlist
\section1 Creating Nimble Applications
To use a wizard to create boilerplate files for a Nim package that is
managed with Nimble:
\list 1
\li Select \uicontrol File > \uicontrol {New File or Project} >
\uicontrol Projects > \uicontrol {Non-Qt Project} >
\uicontrol {Nimble Application}.
\li Specify the name and location of the application.
\li Select \uicontrol Next.
\li Specify information about your application package.
\image qtcreator-project-nimble.png
\li Select \uicontrol Next to create the project.
\endlist
*/

View File

@@ -44,7 +44,9 @@ def default_python3():
path_system = os.path.join('/usr', 'bin') if not common.is_windows_platform() else None
path = os.environ.get('PYTHON3_PATH') or path_system
postfix = '.exe' if common.is_windows_platform() else ''
return existing_path(os.path.join(path, 'python3' + postfix)) or existing_path(os.path.join(path, 'python' + postfix))
return (path if not path
else (existing_path(os.path.join(path, 'python3' + postfix)) or
existing_path(os.path.join(path, 'python' + postfix))))
def get_arguments():
parser = argparse.ArgumentParser(description='Build Qt Creator for packaging')

View File

@@ -353,7 +353,7 @@ class Dumper(DumperBase):
def putVTableChildren(self, item, itemCount):
p = item.address()
for i in xrange(itemCount):
for i in range(itemCount):
deref = self.extractPointer(p)
if deref == 0:
n = i

View File

@@ -48,7 +48,6 @@ except ModuleNotFoundError:
if sys.version_info[0] >= 3:
xrange = range
toInteger = int
else:
toInteger = long
@@ -306,8 +305,8 @@ class DumperBase:
def childRange(self):
if self.currentMaxNumChild is None:
return xrange(0, self.currentNumChild)
return xrange(min(self.currentMaxNumChild, self.currentNumChild))
return range(0, self.currentNumChild)
return range(min(self.currentMaxNumChild, self.currentNumChild))
def enterSubItem(self, item):
if self.useTimeStamps:
@@ -820,7 +819,7 @@ class DumperBase:
def putVTableChildren(self, item, itemCount):
p = item.pointer()
for i in xrange(itemCount):
for i in range(itemCount):
deref = self.extractPointer(p)
if deref == 0:
itemCount = i
@@ -901,7 +900,7 @@ class DumperBase:
self.warn('REDUCING READING MAXIMUM TO %s' % maximum)
#DumperBase.warn('BASE: 0x%x TSIZE: %s MAX: %s' % (base, tsize, maximum))
for i in xrange(0, maximum, tsize):
for i in range(0, maximum, tsize):
t = struct.unpack_from(code, blob, i)[0]
if t == 0:
return 0, i, self.hexencode(blob[:i])
@@ -2090,7 +2089,7 @@ class DumperBase:
base = self.extractPointer(connections)
data, size, alloc = self.vectorDataHelper(base)
connectionType = self.createType('@QObjectPrivate::Connection')
for i in xrange(size):
for i in range(size):
first = self.extractPointer(data + i * 2 * ptrSize)
while first:
self.putSubItem('%s' % pp,
@@ -2193,7 +2192,7 @@ class DumperBase:
if self.currentIName in self.expandedINames:
p = value
with Children(self, n):
for i in xrange(n):
for i in range(n):
self.putSubItem(i, p.dereference())
p += 1
@@ -2340,7 +2339,7 @@ class DumperBase:
self.putField('exp', exp)
self.putItemCount(n)
self.putNoType()
for i in xrange(n):
for i in range(n):
self.handleWatch(exps[i], exps[i], '%s.%d' % (iname, i))
return

View File

@@ -101,7 +101,7 @@ PPPCommand()
def scanStack(p, n):
p = int(p)
r = []
for i in xrange(n):
for i in range(n):
f = gdb.parse_and_eval('{void*}%s' % p)
m = gdb.execute('info symbol %s' % f, to_string=True)
if not m.startswith('No symbol matches'):

View File

@@ -810,7 +810,7 @@ class Dumper(DumperBase):
needle = self.canonicalTypeName(name)
#DumperBase.warn('NEEDLE: %s ' % needle)
self.warn('Searching for type %s across all target modules, this could be very slow' % name)
for i in xrange(self.target.GetNumModules()):
for i in range(self.target.GetNumModules()):
module = self.target.GetModuleAtIndex(i)
# SBModule.GetType is new somewhere after early 300.x
# So this may fail.
@@ -1000,7 +1000,7 @@ class Dumper(DumperBase):
return None if thread is None else thread.GetSelectedFrame()
def firstStoppedThread(self):
for i in xrange(0, self.process.GetNumThreads()):
for i in range(0, self.process.GetNumThreads()):
thread = self.process.GetThreadAtIndex(i)
reason = thread.GetStopReason()
if (reason == lldb.eStopReasonBreakpoint or
@@ -1013,7 +1013,7 @@ class Dumper(DumperBase):
def fetchThreads(self, args):
result = 'threads=['
for i in xrange(0, self.process.GetNumThreads()):
for i in range(0, self.process.GetNumThreads()):
thread = self.process.GetThreadAtIndex(i)
if thread.is_stopped:
state = 'stopped'
@@ -1043,7 +1043,7 @@ class Dumper(DumperBase):
self.reportResult(result, args)
def firstUsableFrame(self, thread):
for i in xrange(10):
for i in range(10):
frame = thread.GetFrameAtIndex(i)
lineEntry = frame.GetLineEntry()
line = lineEntry.GetLine()
@@ -1067,7 +1067,7 @@ class Dumper(DumperBase):
self.currentCallContext = None
result = 'stack={current-thread="%s"' % thread.GetThreadID()
result += ',frames=['
for i in xrange(n):
for i in range(n):
frame = thread.GetFrameAtIndex(i)
if not frame.IsValid():
isLimited = False
@@ -1183,7 +1183,7 @@ class Dumper(DumperBase):
with Children(self):
statics = frame.GetVariables(False, False, True, False)
if len(statics):
for i in xrange(len(statics)):
for i in range(len(statics)):
staticVar = statics[i]
staticVar.SetPreferSyntheticValue(False)
typename = staticVar.GetType().GetName()
@@ -1408,7 +1408,7 @@ class Dumper(DumperBase):
if bp.IsValid() and isinstance(bp, lldb.SBBreakpoint):
result += ',locations=['
lineEntry = None
for i in xrange(bp.GetNumLocations()):
for i in range(bp.GetNumLocations()):
loc = bp.GetLocationAtIndex(i)
addr = loc.GetAddress()
lineEntry = addr.GetLineEntry()
@@ -1539,7 +1539,7 @@ class Dumper(DumperBase):
def fetchModules(self, args):
result = 'modules=['
for i in xrange(self.target.GetNumModules()):
for i in range(self.target.GetNumModules()):
module = self.target.GetModuleAtIndex(i)
result += '{file="%s"' % module.file.fullpath
result += ',name="%s"' % module.file.basename
@@ -1559,7 +1559,7 @@ class Dumper(DumperBase):
moduleName = args['module']
#file = lldb.SBFileSpec(moduleName)
#module = self.target.FindModule(file)
for i in xrange(self.target.GetNumModules()):
for i in range(self.target.GetNumModules()):
module = self.target.GetModuleAtIndex(i)
if module.file.fullpath == moduleName:
break
@@ -1872,7 +1872,7 @@ class Tester(Dumper):
break
if state == lldb.eStateStopped: # 5
stoppedThread = None
for i in xrange(0, self.process.GetNumThreads()):
for i in range(0, self.process.GetNumThreads()):
thread = self.process.GetThreadAtIndex(i)
reason = thread.GetStopReason()
#DumperBase.warn('THREAD: %s REASON: %s' % (thread, reason))

View File

@@ -65,7 +65,7 @@ def qdump____m512d(d, value):
def qdump____m128i(d, value):
data = d.hexencode(value.data(16))
d.putValue(':'.join('%04x' % int(data[i:i+4], 16) for i in xrange(0, 32, 4)))
d.putValue(':'.join('%04x' % int(data[i:i+4], 16) for i in range(0, 32, 4)))
if d.isExpanded():
with Children(d):
addr = value.address()
@@ -76,7 +76,7 @@ def qdump____m128i(d, value):
def qdump____m256i(d, value):
data = d.hexencode(value.data(32))
d.putValue(':'.join('%04x' % int(data[i:i+4], 16) for i in xrange(0, 64, 4)))
d.putValue(':'.join('%04x' % int(data[i:i+4], 16) for i in range(0, 64, 4)))
if d.isExpanded():
with Children(d):
addr = value.address()
@@ -87,8 +87,8 @@ def qdump____m256i(d, value):
def qdump____m512i(d, value):
data = d.hexencode(value.data(64))
d.putValue(':'.join('%04x' % int(data[i:i+4], 16) for i in xrange(0, 64, 4))
+ ', ' + ':'.join('%04x' % int(data[i:i+4], 16) for i in xrange(64, 128, 4)))
d.putValue(':'.join('%04x' % int(data[i:i+4], 16) for i in range(0, 64, 4))
+ ', ' + ':'.join('%04x' % int(data[i:i+4], 16) for i in range(64, 128, 4)))
if d.isExpanded():
with Children(d):
d.putArrayItem('uint32x16', value.address(), 16, 'unsigned int')
@@ -279,14 +279,14 @@ if False:
d.putNoType()
if d.isExpanded():
with Children(d):
for i in xrange(count):
for i in range(count):
d.putSubItem(Item(entries[i], iname))
with SubItem(d, 'data'):
d.putEmptyValue()
d.putNoType()
if d.isExpanded():
with Children(d):
for i in xrange(count):
for i in range(count):
with SubItem(d, i):
entry = entries[i]
mpitype = str(entry['type'])

View File

@@ -126,8 +126,8 @@ def qdump_X_QAbstractItemModel(d, value):
if d.isExpanded():
with Children(d, numChild=rowCount * columnCount, childType=ri.type):
i = 0
for row in xrange(rowCount):
for column in xrange(columnCount):
for row in range(rowCount):
for column in range(columnCount):
with SubItem(d, i):
d.putName('[%s, %s]' % (row, column))
mi = d.parseAndEvaluate('%s.index(%d,%d,%s)'
@@ -182,8 +182,8 @@ def qdump_X_QModelIndex(d, value):
with Children(d):
d.putFields(value, False)
i = 0
for row in xrange(rowCount):
for column in xrange(columnCount):
for row in range(rowCount):
for column in range(columnCount):
with UnnamedSubItem(d, i):
d.putName('[%s, %s]' % (row, column))
mi2 = d.parseAndEvaluate('%s.index(%d,%d,%s)'
@@ -912,7 +912,7 @@ def qdump__QHostAddress(d, value):
if protocol == 1:
# value.d.d->a6
data = d.hexencode(a6)
address = ':'.join('%x' % int(data[i:i+4], 16) for i in xrange(0, 32, 4))
address = ':'.join('%x' % int(data[i:i+4], 16) for i in range(0, 32, 4))
d.putValue(address)
elif protocol == 0:
# value.d.d->a
@@ -938,7 +938,7 @@ def qdump__QHostAddress(d, value):
def qdump__QIPv6Address(d, value):
raw = d.split('16s', value)[0]
data = d.hexencode(raw)
d.putValue(':'.join('%x' % int(data[i:i+4], 16) for i in xrange(0, 32, 4)))
d.putValue(':'.join('%x' % int(data[i:i+4], 16) for i in range(0, 32, 4)))
d.putArrayData(value.address(), 16, d.lookupType('unsigned char'))
def qform__QList():

View File

@@ -1160,7 +1160,7 @@ def qdump____gnu_cxx__hash_set(d, value):
bucketFinish = buckets["_M_finish"]
p = bucketStart
itemCount = 0
for i in xrange((bucketFinish.pointer() - bucketStart.pointer()) // d.ptrSize()):
for i in range((bucketFinish.pointer() - bucketStart.pointer()) // d.ptrSize()):
if p.dereference().pointer():
cur = p.dereference()
while cur.pointer():

View File

@@ -138,13 +138,13 @@ struct DockOverlayCrossPrivate;
* You can style the cross icon using the property system.
* \code
* ADS--DockOverlayCross
{
qproperty-iconFrameColor: palette(highlight);
qproperty-iconBackgroundColor: palette(base);
qproperty-iconOverlayColor: palette(highlight);
qproperty-iconArrowColor: rgb(227, 227, 227);
qproperty-iconShadowColor: rgb(0, 0, 0);
}
* {
* qproperty-iconFrameColor: palette(highlight);
* qproperty-iconBackgroundColor: palette(base);
* qproperty-iconOverlayColor: palette(highlight);
* qproperty-iconArrowColor: rgb(227, 227, 227);
* qproperty-iconShadowColor: rgb(0, 0, 0);
* }
* \endcode
* Or you can use the iconColors property to pass in AARRGGBB values as
* hex string like shown in the example below.

View File

@@ -154,16 +154,18 @@ namespace ADS
void DockWidgetPrivate::updateParentDockArea()
{
if (!m_dockArea) {
if (!m_dockArea)
return;
// we don't need to change the current tab if the current DockWidget is not the one being closed
if (m_dockArea->currentDockWidget() != q)
return;
}
auto nextDockWidget = m_dockArea->nextOpenDockWidget(q);
if (nextDockWidget) {
if (nextDockWidget)
m_dockArea->setCurrentDockWidget(nextDockWidget);
} else {
else
m_dockArea->hideAreaWithNoVisibleContent();
}
}
void DockWidgetPrivate::setupToolBar()
@@ -222,9 +224,8 @@ namespace ADS
QScrollArea *scrollAreaWidget = qobject_cast<QScrollArea *>(widget);
if (scrollAreaWidget || ForceNoScrollArea == insertMode) {
d->m_layout->addWidget(widget);
if (scrollAreaWidget && scrollAreaWidget->viewport()) {
if (scrollAreaWidget && scrollAreaWidget->viewport())
scrollAreaWidget->viewport()->setProperty("dockWidgetContent", true);
}
} else {
d->setupScrollArea();
d->m_scrollArea->setWidget(widget);
@@ -283,9 +284,8 @@ namespace ADS
bool DockWidget::isFloating() const
{
if (!isInFloatingContainer()) {
if (!isInFloatingContainer())
return false;
}
return dockContainer()->topLevelDockWidget() == this;
}
@@ -293,13 +293,11 @@ namespace ADS
bool DockWidget::isInFloatingContainer() const
{
auto container = dockContainer();
if (!container) {
if (!container)
return false;
}
if (!container->isFloating()) {
if (!container->isFloating())
return false;
}
return true;
}
@@ -324,17 +322,16 @@ namespace ADS
// If the toggle view action mode is ActionModeShow, then Open is always
// true if the sender is the toggle view action
QAction *action = qobject_cast<QAction *>(sender());
if (action == d->m_toggleViewAction && !d->m_toggleViewAction->isCheckable()) {
if (action == d->m_toggleViewAction && !d->m_toggleViewAction->isCheckable())
open = true;
}
// If the dock widget state is different, then we really need to toggle
// the state. If we are in the right state, then we simply make this
// dock widget the current dock widget
if (d->m_closed != !open) {
if (d->m_closed != !open)
toggleViewInternal(open);
} else if (open && d->m_dockArea) {
else if (open && d->m_dockArea)
d->m_dockArea->setCurrentDockWidget(this);
}
}
void DockWidget::toggleViewInternal(bool open)
@@ -353,13 +350,11 @@ namespace ADS
//d->m_toggleViewAction->blockSignals(true);
d->m_toggleViewAction->setChecked(open);
//d->m_toggleViewAction->blockSignals(false);
if (d->m_dockArea) {
if (d->m_dockArea)
d->m_dockArea->toggleDockWidgetView(this, open);
}
if (open && topLevelDockWidgetBefore) {
if (open && topLevelDockWidgetBefore)
DockWidget::emitTopLevelEventForWidget(topLevelDockWidgetBefore, false);
}
// Here we need to call the dockContainer() function again, because if
// this dock widget was unassigned before the call to showDockWidget() then
@@ -370,13 +365,12 @@ namespace ADS
: nullptr;
DockWidget::emitTopLevelEventForWidget(topLevelDockWidgetAfter, true);
FloatingDockContainer *floatingContainer = dockContainerWidget->floatingWidget();
if (floatingContainer) {
if (floatingContainer)
floatingContainer->updateWindowTitle();
}
if (!open) {
if (!open)
emit closed();
}
emit viewToggled(open);
}
@@ -440,24 +434,22 @@ namespace ADS
#ifndef QT_NO_TOOLTIP
void DockWidget::setTabToolTip(const QString &text)
{
if (d->m_tabWidget) {
if (d->m_tabWidget)
d->m_tabWidget->setToolTip(text);
}
if (d->m_toggleViewAction) {
if (d->m_toggleViewAction)
d->m_toggleViewAction->setToolTip(text);
}
if (d->m_dockArea) {
if (d->m_dockArea)
d->m_dockArea->markTitleBarMenuOutdated(); //update tabs menu
}
}
#endif
void DockWidget::setIcon(const QIcon &icon)
{
d->m_tabWidget->setIcon(icon);
if (!d->m_toggleViewAction->isCheckable()) {
if (!d->m_toggleViewAction->isCheckable())
d->m_toggleViewAction->setIcon(icon);
}
}
QIcon DockWidget::icon() const { return d->m_tabWidget->icon(); }
@@ -466,18 +458,16 @@ namespace ADS
QToolBar *DockWidget::createDefaultToolBar()
{
if (!d->m_toolBar) {
if (!d->m_toolBar)
d->setupToolBar();
}
return d->m_toolBar;
}
void DockWidget::setToolBar(QToolBar *toolBar)
{
if (d->m_toolBar) {
if (d->m_toolBar)
delete d->m_toolBar;
}
d->m_toolBar = toolBar;
d->m_layout->insertWidget(0, d->m_toolBar);
@@ -487,59 +477,52 @@ namespace ADS
void DockWidget::setToolBarStyle(Qt::ToolButtonStyle style, eState state)
{
if (StateFloating == state) {
if (StateFloating == state)
d->m_toolBarStyleFloating = style;
} else {
else
d->m_toolBarStyleDocked = style;
}
setToolbarFloatingStyle(isFloating());
}
Qt::ToolButtonStyle DockWidget::toolBarStyle(eState state) const
{
if (StateFloating == state) {
if (StateFloating == state)
return d->m_toolBarStyleFloating;
} else {
else
return d->m_toolBarStyleDocked;
}
}
void DockWidget::setToolBarIconSize(const QSize &iconSize, eState state)
{
if (StateFloating == state) {
if (StateFloating == state)
d->m_toolBarIconSizeFloating = iconSize;
} else {
else
d->m_toolBarIconSizeDocked = iconSize;
}
setToolbarFloatingStyle(isFloating());
}
QSize DockWidget::toolBarIconSize(eState state) const
{
if (StateFloating == state) {
if (StateFloating == state)
return d->m_toolBarIconSizeFloating;
} else {
else
return d->m_toolBarIconSizeDocked;
}
}
void DockWidget::setToolbarFloatingStyle(bool floating)
{
if (!d->m_toolBar) {
if (!d->m_toolBar)
return;
}
auto iconSize = floating ? d->m_toolBarIconSizeFloating : d->m_toolBarIconSizeDocked;
if (iconSize != d->m_toolBar->iconSize()) {
if (iconSize != d->m_toolBar->iconSize())
d->m_toolBar->setIconSize(iconSize);
}
auto buttonStyle = floating ? d->m_toolBarStyleFloating : d->m_toolBarStyleDocked;
if (buttonStyle != d->m_toolBar->toolButtonStyle()) {
if (buttonStyle != d->m_toolBar->toolButtonStyle())
d->m_toolBar->setToolButtonStyle(buttonStyle);
}
}
void DockWidget::emitTopLevelEventForWidget(DockWidget *topLevelDockWidget, bool floating)
@@ -564,9 +547,9 @@ namespace ADS
void DockWidget::setFloating()
{
if (isClosed()) {
if (isClosed())
return;
}
d->m_tabWidget->detachDockWidget();
}
@@ -584,13 +567,11 @@ namespace ADS
bool DockWidget::closeDockWidgetInternal(bool forceClose)
{
if (!forceClose) {
if (!forceClose)
emit closeRequested();
}
if (!forceClose && features().testFlag(DockWidget::CustomCloseHandling)) {
if (!forceClose && features().testFlag(DockWidget::CustomCloseHandling))
return false;
}
if (features().testFlag(DockWidget::DockWidgetDeleteOnClose)) {
// If the dock widget is floating, then we check if we also need to
@@ -598,11 +579,10 @@ namespace ADS
if (isFloating()) {
FloatingDockContainer* floatingWidget = internal::findParent<
FloatingDockContainer *>(this);
if (floatingWidget->dockWidgets().count() == 1) {
if (floatingWidget->dockWidgets().count() == 1)
floatingWidget->deleteLater();
} else {
else
floatingWidget->hide();
}
}
deleteDockWidget();
} else {

View File

@@ -112,7 +112,7 @@ namespace ADS
if (testConfigFlag(DockManager::FloatingContainerHasWidgetTitle)) {
setWindowTitle(currentWidget->windowTitle());
} else {
setWindowTitle(qApp->applicationDisplayName());
setWindowTitle(QApplication::applicationDisplayName());
}
// reflect CurrentWidget's icon if configured to do so, otherwise display application icon as window icon
@@ -495,7 +495,7 @@ namespace ADS
&FloatingDockContainer::onDockAreaCurrentChanged);
d->m_singleDockArea = nullptr;
}
d->setWindowTitle(qApp->applicationDisplayName());
d->setWindowTitle(QApplication::applicationDisplayName());
setWindowIcon(QApplication::windowIcon());
}
}
@@ -507,7 +507,7 @@ namespace ADS
DockWidget *currentWidget = topLevelDockArea->currentDockWidget();
d->reflectCurrentWidget(currentWidget);
} else {
d->setWindowTitle(qApp->applicationDisplayName());
d->setWindowTitle(QApplication::applicationDisplayName());
setWindowIcon(QApplication::windowIcon());
}
}

View File

@@ -96,22 +96,19 @@ namespace ADS
void FloatingDragPreviewPrivate::updateDropOverlays(const QPoint &globalPosition)
{
if (!q->isVisible() || !m_dockManager) {
if (!q->isVisible() || !m_dockManager)
return;
}
auto containers = m_dockManager->dockContainers();
DockContainerWidget *topContainer = nullptr;
for (auto containerWidget : containers) {
if (!containerWidget->isVisible()) {
if (!containerWidget->isVisible())
continue;
}
QPoint mappedPosition = containerWidget->mapFromGlobal(globalPosition);
if (containerWidget->rect().contains(mappedPosition)) {
if (!topContainer || containerWidget->isInFrontOf(topContainer)) {
if (!topContainer || containerWidget->isInFrontOf(topContainer))
topContainer = containerWidget;
}
}
}
@@ -124,9 +121,9 @@ namespace ADS
if (!topContainer) {
containerOverlay->hideOverlay();
dockAreaOverlay->hideOverlay();
if (DockManager::configFlags().testFlag(DockManager::DragPreviewIsDynamic)) {
if (DockManager::configFlags().testFlag(DockManager::DragPreviewIsDynamic))
setHidden(false);
}
return;
}
@@ -153,9 +150,8 @@ namespace ADS
}
} else {
dockAreaOverlay->hideOverlay();
if (dockArea == m_contentSourceArea && InvalidDockWidgetArea == containerDropArea) {
if (dockArea == m_contentSourceArea && InvalidDockWidgetArea == containerDropArea)
m_dropContainer = nullptr;
}
}
if (DockManager::configFlags().testFlag(DockManager::DragPreviewIsDynamic)) {
@@ -199,7 +195,10 @@ namespace ADS
connect(qApp,
&QApplication::applicationStateChanged,
this,
&FloatingDragPreview::onApplicationStateChanged); // TODO
&FloatingDragPreview::onApplicationStateChanged);
// The focused object will receive key press events and therefore we install
// the event filter on it to receive escape key press for drag canceling
QApplication::focusObject()->installEventFilter(this);
}
FloatingDragPreview::FloatingDragPreview(DockWidget *content)
@@ -212,9 +211,6 @@ namespace ADS
d->m_contenSourceContainer = content->dockContainer();
}
setWindowTitle(content->windowTitle());
// We need to install an event filter for the given content
// widget to receive the escape key press
content->dockAreaWidget()->installEventFilter(this);
}
FloatingDragPreview::FloatingDragPreview(DockAreaWidget *content)
@@ -225,10 +221,6 @@ namespace ADS
d->m_contentSourceArea = content;
d->m_contenSourceContainer = content->dockContainer();
setWindowTitle(content->currentDockWidget()->windowTitle());
// We need to install an event filter for the given Content
// widget to receive the escape key press
content->installEventFilter(this);
}
FloatingDragPreview::~FloatingDragPreview() { delete d; }
@@ -277,9 +269,8 @@ namespace ADS
floatingWidget = new FloatingDockContainer(dockWidget);
} else {
DockAreaWidget *dockArea = qobject_cast<DockAreaWidget *>(d->m_content);
if (dockArea->features().testFlag(DockWidget::DockWidgetFloatable)) {
if (dockArea->features().testFlag(DockWidget::DockWidgetFloatable))
floatingWidget = new FloatingDockContainer(dockArea);
}
}
if (floatingWidget) {
@@ -303,14 +294,12 @@ namespace ADS
void FloatingDragPreview::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event)
if (d->m_hidden) {
if (d->m_hidden)
return;
}
QPainter painter(this);
if (DockManager::configFlags().testFlag(DockManager::DragPreviewShowsContentPixmap)) {
if (DockManager::configFlags().testFlag(DockManager::DragPreviewShowsContentPixmap))
painter.drawPixmap(QPoint(0, 0), d->m_contentPreviewPixmap);
}
// If we do not have a window frame then we paint a QRubberBand like frameless window
if (!DockManager::configFlags().testFlag(DockManager::DragPreviewHasWindowFrame)) {

View File

@@ -1,19 +1,8 @@
if (IDE_LIBEXEC_PATH AND IDE_BIN_PATH)
get_filename_component(bin_path
"${CMAKE_INSTALL_PREFIX}/${IDE_BIN_PATH}" ABSOLUTE "${CMAKE_BINARY_DIR}")
get_filename_component(libexec_path
"${CMAKE_INSTALL_PREFIX}/${IDE_LIBEXEC_PATH}" ABSOLUTE "${CMAKE_BINARY_DIR}")
file(RELATIVE_PATH RELATIVE_TOOLS_PATH "${bin_path}" "${libexec_path}")
else()
message(WARNING "IDE_LIBEXEC_PATH or IDE_BIN_PATH undefined when calculating tools path")
set(RELATIVE_TOOLS_PATH "")
endif()
add_qtc_library(Utils
DEPENDS Qt5::Xml
PUBLIC_DEPENDS Qt5::Concurrent Qt5::Core Qt5::Network Qt5::Qml Qt5::Gui Qt5::Widgets
DEFINES
"QTC_REL_TOOLS_PATH=\"${RELATIVE_TOOLS_PATH}\""
"QTC_REL_TOOLS_PATH=\"${RELATIVE_LIBEXEC_PATH}\""
SOURCES
../3rdparty/optional/optional.hpp
../3rdparty/variant/variant.hpp

View File

@@ -228,8 +228,16 @@ ToolChainList AndroidToolChainFactory::autodetectToolChainsForNdk(const ToolChai
const Abi &abi = targetItr.value();
const QString target = targetItr.key();
ToolChain *tc = findToolChain(compilerCommand, lang, target, alreadyKnown);
const QString displayName(QString("Android Clang (%1, %2, NDK %3)")
.arg(ToolChainManager::displayNameOfLanguageId(lang),
AndroidConfig::displayName(abi),
config.ndkVersion(qtVersion).toString()));
if (tc) {
qCDebug(androidTCLog) << "Tool chain already known" << abi.toString() << lang;
// make sure to update the toolchain with current name format
if (tc->displayName() != displayName)
tc->setDisplayName(displayName);
} else {
qCDebug(androidTCLog) << "New Clang toolchain found" << abi.toString() << lang;
auto atc = new AndroidToolChain();
@@ -239,14 +247,11 @@ ToolChainList AndroidToolChainFactory::autodetectToolChainsForNdk(const ToolChai
atc->setTargetAbi(ClangTargets[target]);
atc->setPlatformCodeGenFlags({"-target", target});
atc->setPlatformLinkerFlags({"-target", target});
atc->setDetection(ToolChain::AutoDetection);
atc->setDisplayName(QString("Android Clang (%1, %2, NDK %3)")
.arg(ToolChainManager::displayNameOfLanguageId(lang),
AndroidConfig::displayName(abi),
config.ndkVersion(qtVersion).toString()));
atc->setDisplayName(displayName);
atc->resetToolChain(compilerCommand);
tc = atc;
}
tc->setDetection(ToolChain::AutoDetection);
result << tc;
++targetItr;
}

View File

@@ -236,7 +236,7 @@ void AutotestPluginPrivate::initializeMenuEntries()
this, &AutotestPlugin::updateMenuItemsEnabledState);
connect(BuildManager::instance(), &BuildManager::buildQueueFinished,
this, &AutotestPlugin::updateMenuItemsEnabledState);
connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::updateRunActions,
connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::runActionsUpdated,
this, &AutotestPlugin::updateMenuItemsEnabledState);
connect(TestTreeModel::instance(), &TestTreeModel::testTreeModelChanged,
this, &AutotestPlugin::updateMenuItemsEnabledState);

View File

@@ -59,7 +59,7 @@ public:
if (auto debugAspect = aspect<Debugger::DebuggerRunConfigurationAspect>()) {
debugAspect->setUseQmlDebugger(enableQuick);
ProjectExplorer::ProjectExplorerPlugin::instance()->updateRunActions();
ProjectExplorer::ProjectExplorerPlugin::updateRunActions();
}
m_testConfig = config;
}

View File

@@ -215,8 +215,11 @@ void ClangCompletionAssistProcessor::handleAvailableCompletions(const CodeComple
return;
}
if (!m_fallbackToNormalCompletion)
if (!m_fallbackToNormalCompletion) {
// We must report back to the code assistant under all circumstances
setAsyncProposalAvailable(nullptr);
return;
}
// else: Proceed with a normal completion in case:
// 1) it was not a function call, but e.g. a function declaration like "void f("
// 2) '{' meant not a constructor call.

View File

@@ -602,7 +602,7 @@ ClangTool::ClangTool()
update();
connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::updateRunActions,
connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::runActionsUpdated,
this, &ClangTool::update);
connect(CppModelManager::instance(), &CppModelManager::projectPartsUpdated,
this, &ClangTool::update);

View File

@@ -176,7 +176,7 @@ bool CppcheckPlugin::initialize(const QStringList &arguments, QString *errorStri
}
using ProjectExplorer::ProjectExplorerPlugin;
connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::updateRunActions,
connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::runActionsUpdated,
d.get(), &CppcheckPluginPrivate::updateManualRunAction);
d->updateManualRunAction();

View File

@@ -1186,7 +1186,7 @@ DebuggerPluginPrivate::DebuggerPluginPrivate(const QStringList &arguments)
this, &DebuggerPluginPrivate::writeSettings);
// ProjectExplorer
connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::updateRunActions,
connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::runActionsUpdated,
this, &DebuggerPluginPrivate::updatePresetState);
// EditorManager

View File

@@ -82,7 +82,7 @@ BranchView::BranchView() :
m_refreshButton(new QToolButton(this)),
m_repositoryLabel(new Utils::ElidingLabel(this)),
m_branchView(new Utils::NavigationTreeView(this)),
m_model(new BranchModel(GitPlugin::client(), this)),
m_model(new BranchModel(GitClient::instance(), this)),
m_filterModel(new BranchFilterModel(this))
{
m_addButton->setIcon(Utils::Icons::PLUS_TOOLBAR.icon());
@@ -122,7 +122,7 @@ BranchView::BranchView() :
this, &BranchView::setIncludeOldEntries);
m_includeTagsAction->setCheckable(true);
m_includeTagsAction->setChecked(
GitPlugin::client()->settings().boolValue(GitSettings::showTagsKey));
GitClient::instance()->settings().boolValue(GitSettings::showTagsKey));
connect(m_includeTagsAction, &QAction::toggled,
this, &BranchView::setIncludeTags);
@@ -214,12 +214,12 @@ void BranchView::slotCustomContextMenu(const QPoint &point)
const Utils::optional<QString> remote = m_model->remoteName(index);
if (remote.has_value()) {
contextMenu.addAction(tr("&Fetch"), this, [this, &remote]() {
GitPlugin::client()->fetch(m_repository, *remote);
GitClient::instance()->fetch(m_repository, *remote);
});
contextMenu.addSeparator();
if (!remote->isEmpty()) {
contextMenu.addAction(tr("Remove &Stale Branches"), this, [this, &remote]() {
GitPlugin::client()->removeStaleRemoteBranches(m_repository, *remote);
GitClient::instance()->removeStaleRemoteBranches(m_repository, *remote);
});
contextMenu.addSeparator();
}
@@ -238,7 +238,7 @@ void BranchView::slotCustomContextMenu(const QPoint &point)
contextMenu.addAction(tr("&Diff"), this, [this] {
const QString fullName = m_model->fullName(selectedIndex(), true);
if (!fullName.isEmpty())
GitPlugin::client()->diffBranch(m_repository, fullName);
GitClient::instance()->diffBranch(m_repository, fullName);
});
contextMenu.addAction(tr("&Log"), this, [this] { log(selectedIndex()); });
contextMenu.addAction(tr("Reflo&g"), this, [this] { reflog(selectedIndex()); });
@@ -289,7 +289,7 @@ void BranchView::setIncludeOldEntries(bool filter)
void BranchView::setIncludeTags(bool includeTags)
{
GitPlugin::client()->settings().setValue(GitSettings::showTagsKey, includeTags);
GitClient::instance()->settings().setValue(GitSettings::showTagsKey, includeTags);
refreshCurrentRepository();
}
@@ -365,7 +365,7 @@ bool BranchView::checkout()
' ' + nextBranch + "-AutoStash ";
BranchCheckoutDialog branchCheckoutDialog(this, currentBranch, nextBranch);
GitClient *client = GitPlugin::client();
GitClient *client = GitClient::instance();
if (client->gitStatus(m_repository, StatusMode(NoUntracked | NoSubmodules)) != GitClient::StatusChanged)
branchCheckoutDialog.foundNoLocalChanges();
@@ -500,7 +500,7 @@ bool BranchView::reset(const QByteArray &resetType)
if (QMessageBox::question(this, tr("Git Reset"), tr("Reset branch \"%1\" to \"%2\"?")
.arg(currentName).arg(branchName),
QMessageBox::Yes, QMessageBox::No) == QMessageBox::Yes) {
GitPlugin::client()->reset(m_repository, QLatin1String("--" + resetType), branchName);
GitClient::instance()->reset(m_repository, QLatin1String("--" + resetType), branchName);
return true;
}
return false;
@@ -512,7 +512,7 @@ bool BranchView::isFastForwardMerge()
QTC_CHECK(selected != m_model->currentBranch());
const QString branch = m_model->fullName(selected, true);
return GitPlugin::client()->isFastForwardMerge(m_repository, branch);
return GitClient::instance()->isFastForwardMerge(m_repository, branch);
}
bool BranchView::merge(bool allowFastForward)
@@ -523,7 +523,7 @@ bool BranchView::merge(bool allowFastForward)
QTC_CHECK(selected != m_model->currentBranch());
const QString branch = m_model->fullName(selected, true);
GitClient *client = GitPlugin::client();
GitClient *client = GitClient::instance();
if (client->beginStashScope(m_repository, "merge", AllowUnstashed))
return client->synchronousMerge(m_repository, branch, allowFastForward);
@@ -538,7 +538,7 @@ void BranchView::rebase()
QTC_CHECK(selected != m_model->currentBranch());
const QString baseBranch = m_model->fullName(selected, true);
GitClient *client = GitPlugin::client();
GitClient *client = GitClient::instance();
if (client->beginStashScope(m_repository, "rebase"))
client->rebase(m_repository, baseBranch);
}
@@ -551,21 +551,21 @@ bool BranchView::cherryPick()
QTC_CHECK(selected != m_model->currentBranch());
const QString branch = m_model->fullName(selected, true);
return GitPlugin::client()->synchronousCherryPick(m_repository, branch);
return GitClient::instance()->synchronousCherryPick(m_repository, branch);
}
void BranchView::log(const QModelIndex &idx)
{
const QString branchName = m_model->fullName(idx, true);
if (!branchName.isEmpty())
GitPlugin::client()->log(m_repository, QString(), false, {branchName});
GitClient::instance()->log(m_repository, QString(), false, {branchName});
}
void BranchView::reflog(const QModelIndex &idx)
{
const QString branchName = m_model->fullName(idx, true);
if (!branchName.isEmpty())
GitPlugin::client()->reflog(m_repository, branchName);
GitClient::instance()->reflog(m_repository, branchName);
}
void BranchView::push()
@@ -581,7 +581,7 @@ void BranchView::push()
const QString remoteBranch = fullTargetName.mid(pos + 1);
const QStringList pushArgs = {remoteName, localBranch + ':' + remoteBranch};
GitPlugin::client()->push(m_repository, pushArgs);
GitClient::instance()->push(m_repository, pushArgs);
}
BranchViewFactory::BranchViewFactory()

View File

@@ -25,7 +25,6 @@
#include "changeselectiondialog.h"
#include "logchangedialog.h"
#include "gitplugin.h"
#include "gitclient.h"
#include "ui_changeselectiondialog.h"
@@ -57,12 +56,12 @@ ChangeSelectionDialog::ChangeSelectionDialog(const QString &workingDirectory, Co
QWidget *parent) :
QDialog(parent), m_ui(new Ui::ChangeSelectionDialog)
{
m_gitExecutable = GitPlugin::client()->vcsBinary();
m_gitExecutable = GitClient::instance()->vcsBinary();
m_ui->setupUi(this);
m_ui->workingDirectoryChooser->setExpectedKind(PathChooser::ExistingDirectory);
m_ui->workingDirectoryChooser->setPromptDialogTitle(tr("Select Git Directory"));
m_ui->workingDirectoryChooser->setPath(workingDirectory);
m_gitEnvironment = GitPlugin::client()->processEnvironment();
m_gitEnvironment = GitClient::instance()->processEnvironment();
m_ui->changeNumberEdit->setFocus();
m_ui->changeNumberEdit->selectAll();
@@ -203,7 +202,7 @@ void ChangeSelectionDialog::recalculateCompletion()
if (workingDir.isEmpty())
return;
GitClient *client = GitPlugin::client();
GitClient *client = GitClient::instance();
VcsBase::VcsCommand *command = client->asyncForEachRefCmd(
workingDir, {"--format=%(refname:short)"});
connect(this, &QObject::destroyed, command, &VcsBase::VcsCommand::abort);

View File

@@ -24,7 +24,6 @@
****************************************************************************/
#include "branchcombobox.h"
#include "../gitplugin.h"
#include "../gitclient.h"
using namespace Git::Internal;
@@ -36,7 +35,7 @@ BranchComboBox::BranchComboBox(QWidget *parent) : QComboBox(parent)
void BranchComboBox::init(const QString &repository)
{
m_repository = repository;
QString currentBranch = GitPlugin::client()->synchronousCurrentLocalBranch(repository);
QString currentBranch = GitClient::instance()->synchronousCurrentLocalBranch(repository);
if (currentBranch.isEmpty()) {
m_detached = true;
currentBranch = "HEAD";
@@ -44,7 +43,7 @@ void BranchComboBox::init(const QString &repository)
}
QString output;
const QString branchPrefix("refs/heads/");
if (!GitPlugin::client()->synchronousForEachRefCmd(
if (!GitClient::instance()->synchronousForEachRefCmd(
m_repository, {"--format=%(refname)", branchPrefix}, &output)) {
return;
}

View File

@@ -24,7 +24,6 @@
****************************************************************************/
#include "gerritmodel.h"
#include "../gitplugin.h"
#include "../gitclient.h"
#include <coreplugin/progressmanager/progressmanager.h>
@@ -295,7 +294,7 @@ QueryContext::QueryContext(const QString &query,
connect(&m_process, &QProcess::errorOccurred, this, &QueryContext::processError);
connect(&m_watcher, &QFutureWatcherBase::canceled, this, &QueryContext::terminate);
m_watcher.setFuture(m_progress.future());
m_process.setProcessEnvironment(Git::Internal::GitPlugin::client()->processEnvironment());
m_process.setProcessEnvironment(Git::Internal::GitClient::instance()->processEnvironment());
m_progress.setProgressRange(0, 1);
m_timer.setInterval(timeOutMS);

View File

@@ -148,7 +148,7 @@ FetchContext::FetchContext(const QSharedPointer<GerritChange> &change,
connect(&m_watcher, &QFutureWatcher<void>::canceled, this, &FetchContext::terminate);
m_watcher.setFuture(m_progress.future());
m_process.setWorkingDirectory(repository);
m_process.setProcessEnvironment(GitPlugin::client()->processEnvironment());
m_process.setProcessEnvironment(GitClient::instance()->processEnvironment());
m_process.closeWriteChannel();
}
@@ -240,7 +240,7 @@ void FetchContext::show()
{
const QString title = QString::number(m_change->number) + '/'
+ QString::number(m_change->currentPatchSet.patchSetNumber);
GitPlugin::client()->show(m_repository, "FETCH_HEAD", title);
GitClient::instance()->show(m_repository, "FETCH_HEAD", title);
}
void FetchContext::cherryPick()
@@ -248,12 +248,12 @@ void FetchContext::cherryPick()
// Point user to errors.
VcsBase::VcsOutputWindow::instance()->popup(IOutputPane::ModeSwitch
| IOutputPane::WithFocus);
GitPlugin::client()->synchronousCherryPick(m_repository, "FETCH_HEAD");
GitClient::instance()->synchronousCherryPick(m_repository, "FETCH_HEAD");
}
void FetchContext::checkout()
{
GitPlugin::client()->checkout(m_repository, "FETCH_HEAD");
GitClient::instance()->checkout(m_repository, "FETCH_HEAD");
}
void FetchContext::terminate()
@@ -328,7 +328,7 @@ void GerritPlugin::push(const QString &topLevel)
dialog.storeTopic();
m_reviewers = dialog.reviewers();
GitPlugin::client()->push(topLevel, {dialog.selectedRemoteName(), dialog.pushTarget()});
GitClient::instance()->push(topLevel, {dialog.selectedRemoteName(), dialog.pushTarget()});
}
static QString currentRepository()
@@ -375,19 +375,19 @@ void GerritPlugin::push()
Utils::FilePath GerritPlugin::gitBinDirectory()
{
return GitPlugin::client()->gitBinDirectory();
return GitClient::instance()->gitBinDirectory();
}
// Find the branch of a repository.
QString GerritPlugin::branch(const QString &repository)
{
return GitPlugin::client()->synchronousCurrentLocalBranch(repository);
return GitClient::instance()->synchronousCurrentLocalBranch(repository);
}
void GerritPlugin::fetch(const QSharedPointer<GerritChange> &change, int mode)
{
// Locate git.
const Utils::FilePath git = GitPlugin::client()->vcsBinary();
const Utils::FilePath git = GitClient::instance()->vcsBinary();
if (git.isEmpty()) {
VcsBase::VcsOutputWindow::appendError(tr("Git is not available."));
return;
@@ -400,7 +400,7 @@ void GerritPlugin::fetch(const QSharedPointer<GerritChange> &change, int mode)
if (!repository.isEmpty()) {
// Check if remote from a working dir is the same as remote from patch
QMap<QString, QString> remotesList = GitPlugin::client()->synchronousRemotesList(repository);
QMap<QString, QString> remotesList = GitClient::instance()->synchronousRemotesList(repository);
if (!remotesList.isEmpty()) {
const QStringList remotes = remotesList.values();
for (QString remote : remotes) {
@@ -413,7 +413,7 @@ void GerritPlugin::fetch(const QSharedPointer<GerritChange> &change, int mode)
}
if (!verifiedRepository) {
const SubmoduleDataMap submodules = GitPlugin::client()->submoduleList(repository);
const SubmoduleDataMap submodules = GitClient::instance()->submoduleList(repository);
for (const SubmoduleData &submoduleData : submodules) {
QString remote = submoduleData.url;
if (remote.endsWith(".git"))

View File

@@ -27,7 +27,6 @@
#include "ui_gerritpushdialog.h"
#include "branchcombobox.h"
#include "../gitplugin.h"
#include "../gitclient.h"
#include "../gitconstants.h"
@@ -70,7 +69,7 @@ QString GerritPushDialog::determineRemoteBranch(const QString &localBranch)
QString output;
QString error;
if (!GitPlugin::client()->synchronousBranchCmd(
if (!GitClient::instance()->synchronousBranchCmd(
m_workingDir, {"-r", "--contains", earliestCommit + '^'}, &output, &error)) {
return QString();
}
@@ -79,7 +78,7 @@ QString GerritPushDialog::determineRemoteBranch(const QString &localBranch)
QString remoteTrackingBranch;
if (localBranch != "HEAD")
remoteTrackingBranch = GitPlugin::client()->synchronousTrackingBranch(m_workingDir, localBranch);
remoteTrackingBranch = GitClient::instance()->synchronousTrackingBranch(m_workingDir, localBranch);
QString remoteBranch;
for (const QString &reference : refs) {
@@ -103,7 +102,7 @@ void GerritPushDialog::initRemoteBranches()
const QString head = "/HEAD";
QString remotesPrefix("refs/remotes/");
if (!GitPlugin::client()->synchronousForEachRefCmd(
if (!GitClient::instance()->synchronousForEachRefCmd(
m_workingDir, {"--format=%(refname)\t%(committerdate:raw)", remotesPrefix}, &output)) {
return;
}
@@ -186,8 +185,8 @@ QString GerritPushDialog::calculateChangeRange(const QString &branch)
QString number;
QString error;
GitPlugin::client()->synchronousRevListCmd(m_workingDir, { remote + ".." + branch, "--count" },
&number, &error);
GitClient::instance()->synchronousRevListCmd(
m_workingDir, { remote + ".." + branch, "--count" }, &number, &error);
number.chop(1);
return number;
@@ -303,8 +302,8 @@ QString GerritPushDialog::pushTarget() const
void GerritPushDialog::storeTopic()
{
const QString branch = m_ui->localBranchComboBox->currentText();
GitPlugin::client()->setConfigValue(m_workingDir, QString("branch.%1.topic").arg(branch),
selectedTopic());
GitClient::instance()->setConfigValue(
m_workingDir, QString("branch.%1.topic").arg(branch), selectedTopic());
}
void GerritPushDialog::setRemoteBranches(bool includeOld)
@@ -316,7 +315,7 @@ void GerritPushDialog::setRemoteBranches(bool includeOld)
const QString remoteName = selectedRemoteName();
if (!m_remoteBranches.contains(remoteName)) {
const QStringList remoteBranches =
GitPlugin::client()->synchronousRepositoryBranches(remoteName, m_workingDir);
GitClient::instance()->synchronousRepositoryBranches(remoteName, m_workingDir);
for (const QString &branch : remoteBranches)
m_remoteBranches.insertMulti(remoteName, qMakePair(branch, QDate()));
if (remoteBranches.isEmpty()) {
@@ -354,7 +353,7 @@ void GerritPushDialog::updateCommits(int index)
{
const QString branch = m_ui->localBranchComboBox->itemText(index);
m_hasLocalCommits = m_ui->commitView->init(m_workingDir, branch, LogChangeWidget::Silent);
QString topic = GitPlugin::client()->readConfigValue(
QString topic = GitClient::instance()->readConfigValue(
m_workingDir, QString("branch.%1.topic").arg(branch));
if (!topic.isEmpty())
m_ui->topicLineEdit->setText(topic);

View File

@@ -27,7 +27,6 @@
#include "gerritparameters.h"
#include "gerritserver.h"
#include "../gitclient.h"
#include "../gitplugin.h"
#include <utils/qtcassert.h>
#include <utils/utilsicons.h>
@@ -104,7 +103,7 @@ bool GerritRemoteChooser::updateRemotes(bool forceReload)
m_remotes.clear();
QString errorMessage; // Mute errors. We'll just fallback to the defaults
const QMap<QString, QString> remotesList =
Git::Internal::GitPlugin::client()->synchronousRemotesList(m_repository, &errorMessage);
Git::Internal::GitClient::instance()->synchronousRemotesList(m_repository, &errorMessage);
for (auto mapIt = remotesList.cbegin(), end = remotesList.cend(); mapIt != end; ++mapIt) {
GerritServer server;
if (!server.fillFromRemote(mapIt.value(), *m_parameters, forceReload))

View File

@@ -241,7 +241,7 @@ QStringList GerritServer::curlArguments() const
int GerritServer::testConnection()
{
static GitClient *const client = GitPlugin::client();
static GitClient *const client = GitClient::instance();
const QStringList arguments = curlArguments() << (url(RestUrl) + accountUrlC);
const SynchronousProcessResponse resp = client->vcsFullySynchronousExec(
QString(), {curlBinary, arguments},
@@ -333,7 +333,7 @@ bool GerritServer::resolveRoot()
void GerritServer::resolveVersion(const GerritParameters &p, bool forceReload)
{
static GitClient *const client = GitPlugin::client();
static GitClient *const client = GitClient::instance();
QSettings *settings = Core::ICore::settings();
const QString fullVersionKey = "Gerrit/" + host + '/' + versionKey;
version = settings->value(fullVersionKey).toString();

View File

@@ -106,6 +106,8 @@ using namespace VcsBase;
namespace Git {
namespace Internal {
static GitClient *m_instance = nullptr;
// Suppress git diff warnings about "LF will be replaced by CRLF..." on Windows.
static unsigned diffExecutionFlags()
{
@@ -300,7 +302,7 @@ void GitDiffEditorController::updateBranchList()
return;
const QString workingDirectory = baseDirectory();
VcsCommand *command = GitPlugin::client()->vcsExec(
VcsCommand *command = m_instance->vcsExec(
workingDirectory, {"branch", noColorOption, "-a", "--contains", revision}, nullptr,
false, 0, workingDirectory);
connect(command, &VcsCommand::stdOutText, this, [this](const QString &text) {
@@ -375,7 +377,7 @@ QStringList GitDiffEditorController::addHeadWhenCommandInProgress() const
// This is workaround for lack of support for merge commits and resolving conflicts,
// we compare the current state of working tree to the HEAD of current branch
// instead of showing unsupported combined diff format.
GitClient::CommandInProgress commandInProgress = GitPlugin::client()->checkCommandInProgress(workingDirectory());
GitClient::CommandInProgress commandInProgress = m_instance->checkCommandInProgress(workingDirectory());
if (commandInProgress != GitClient::NoCommand)
return {HEAD};
return QStringList();
@@ -478,7 +480,7 @@ public:
setReloader([this] {
m_state = GettingDescription;
const QStringList args = {"show", "-s", noColorOption, showFormatC, m_id};
runCommand({args}, GitPlugin::client()->encoding(workingDirectory(), "i18n.commitEncoding"));
runCommand({args}, m_instance->encoding(workingDirectory(), "i18n.commitEncoding"));
setStartupFile(VcsBase::source(this->document()));
});
}
@@ -495,7 +497,7 @@ void ShowController::processCommandOutput(const QString &output)
{
QTC_ASSERT(m_state != Idle, return);
if (m_state == GettingDescription) {
setDescription(GitPlugin::client()->extendedShowDescription(workingDirectory(), output));
setDescription(m_instance->extendedShowDescription(workingDirectory(), output));
// stage 2
m_state = GettingDiff;
const QStringList args = {"show", "--format=format:", // omit header, already generated
@@ -669,12 +671,11 @@ private:
{
// If interactive rebase editor window is closed, plugin is terminated
// but referenced here when the command ends
GitClient *client = GitPlugin::client();
if (m_commit.isEmpty() && m_files.isEmpty()) {
if (client->checkCommandInProgress(m_workingDirectory) == GitClient::NoCommand)
client->endStashScope(m_workingDirectory);
if (m_instance->checkCommandInProgress(m_workingDirectory) == GitClient::NoCommand)
m_instance->endStashScope(m_workingDirectory);
} else {
client->handleMergeConflicts(m_workingDirectory, m_commit, m_files, m_abortCommand);
m_instance->handleMergeConflicts(m_workingDirectory, m_commit, m_files, m_abortCommand);
}
}
@@ -763,11 +764,17 @@ GitClient::GitClient(GitSettings *settings) : VcsBase::VcsBaseClientImpl(setting
m_cachedGitVersion(0),
m_disableEditor(false)
{
m_instance = this;
m_gitQtcEditor = QString::fromLatin1("\"%1\" -client -block -pid %2")
.arg(QCoreApplication::applicationFilePath())
.arg(QCoreApplication::applicationPid());
}
GitClient *GitClient::instance()
{
return m_instance;
}
QString GitClient::findRepositoryForDirectory(const QString &directory) const
{
if (directory.isEmpty() || directory.endsWith("/.git") || directory.contains("/.git/"))
@@ -3476,8 +3483,8 @@ bool GitClient::StashInfo::init(const QString &workingDirectory, const QString &
m_pushAction = pushAction;
QString errorMessage;
QString statusOutput;
switch (GitPlugin::client()->gitStatus(m_workingDir, StatusMode(NoUntracked | NoSubmodules),
&statusOutput, &errorMessage)) {
switch (m_instance->gitStatus(m_workingDir, StatusMode(NoUntracked | NoSubmodules),
&statusOutput, &errorMessage)) {
case GitClient::StatusChanged:
if (m_flags & NoPrompt)
executeStash(command, &errorMessage);
@@ -3529,14 +3536,14 @@ void GitClient::StashInfo::stashPrompt(const QString &command, const QString &st
msgBox.exec();
if (msgBox.clickedButton() == discardButton) {
m_stashResult = GitPlugin::client()->synchronousReset(m_workingDir, QStringList(), errorMessage) ?
m_stashResult = m_instance->synchronousReset(m_workingDir, QStringList(), errorMessage) ?
StashUnchanged : StashFailed;
} else if (msgBox.clickedButton() == ignoreButton) { // At your own risk, so.
m_stashResult = NotStashed;
} else if (msgBox.clickedButton() == cancelButton) {
m_stashResult = StashCanceled;
} else if (msgBox.clickedButton() == stashButton) {
const bool result = GitPlugin::client()->executeSynchronousStash(
const bool result = m_instance->executeSynchronousStash(
m_workingDir, creatorStashMessage(command), false, errorMessage);
m_stashResult = result ? StashUnchanged : StashFailed;
} else if (msgBox.clickedButton() == stashAndPopButton) {
@@ -3547,7 +3554,7 @@ void GitClient::StashInfo::stashPrompt(const QString &command, const QString &st
void GitClient::StashInfo::executeStash(const QString &command, QString *errorMessage)
{
m_message = creatorStashMessage(command);
if (!GitPlugin::client()->executeSynchronousStash(m_workingDir, m_message, false, errorMessage))
if (!m_instance->executeSynchronousStash(m_workingDir, m_message, false, errorMessage))
m_stashResult = StashFailed;
else
m_stashResult = Stashed;
@@ -3570,12 +3577,12 @@ void GitClient::StashInfo::end()
{
if (m_stashResult == Stashed) {
QString stashName;
if (GitPlugin::client()->stashNameFromMessage(m_workingDir, m_message, &stashName))
GitPlugin::client()->stashPop(m_workingDir, stashName);
if (m_instance->stashNameFromMessage(m_workingDir, m_message, &stashName))
m_instance->stashPop(m_workingDir, stashName);
}
if (m_pushAction == NormalPush)
GitPlugin::client()->push(m_workingDir);
m_instance->push(m_workingDir);
else if (m_pushAction == PushToGerrit)
GitPlugin::gerritPush(m_workingDir);
@@ -3589,6 +3596,55 @@ GitRemote::GitRemote(const QString &location) : Core::IVersionControl::RepoUrl(l
isValid = QDir(path).exists() || QDir(path + ".git").exists();
}
void GitClient::addChangeActions(QMenu *menu, const QString &workingDir, const QString &change)
{
menu->addAction(tr("Cherr&y-Pick Change %1").arg(change), [workingDir, change] {
m_instance->synchronousCherryPick(workingDir, change);
});
menu->addAction(tr("Re&vert Change %1").arg(change), [workingDir, change] {
m_instance->synchronousRevert(workingDir, change);
});
menu->addAction(tr("C&heckout Change %1").arg(change), [workingDir, change] {
m_instance->checkout(workingDir, change);
});
connect(menu->addAction(tr("&Interactive Rebase from Change %1...").arg(change)),
&QAction::triggered, [workingDir, change] {
GitPlugin::startRebaseFromCommit(workingDir, change);
});
menu->addAction(tr("&Log for Change %1").arg(change), [workingDir, change] {
m_instance->log(workingDir, QString(), false, {change});
});
menu->addAction(tr("Add &Tag for Change %1...").arg(change), [workingDir, change] {
QString output;
QString errorMessage;
m_instance->synchronousTagCmd(workingDir, QStringList(),
&output, &errorMessage);
const QStringList tags = output.split('\n');
BranchAddDialog dialog(tags, BranchAddDialog::Type::AddTag, Core::ICore::dialogParent());
if (dialog.exec() == QDialog::Rejected)
return;
m_instance->synchronousTagCmd(workingDir,
{dialog.branchName(), change},
&output, &errorMessage);
VcsOutputWindow::append(output);
if (!errorMessage.isEmpty())
VcsOutputWindow::append(errorMessage, VcsOutputWindow::MessageStyle::Error);
});
auto resetChange = [workingDir, change](const QByteArray &resetType) {
m_instance->reset(
workingDir, QLatin1String("--" + resetType), change);
};
auto resetMenu = new QMenu(tr("&Reset to Change %1").arg(change), menu);
resetMenu->addAction(tr("&Hard"), std::bind(resetChange, "hard"));
resetMenu->addAction(tr("&Mixed"), std::bind(resetChange, "mixed"));
resetMenu->addAction(tr("&Soft"), std::bind(resetChange, "soft"));
menu->addMenu(resetMenu);
}
} // namespace Internal
} // namespace Git

View File

@@ -139,6 +139,7 @@ public:
};
explicit GitClient(GitSettings *settings);
static GitClient *instance();
Utils::FilePath vcsBinary() const override;
unsigned gitVersion(QString *errorMessage = nullptr) const;
@@ -352,6 +353,9 @@ public:
VcsBase::VcsCommand *asyncUpstreamStatus(const QString &workingDirectory,
const QString &branch, const QString &upstream);
static void addChangeActions(QMenu *menu, const QString &workingDir, const QString &change);
private:
void finishSubmoduleUpdate();
void chunkActionsRequested(QMenu *menu, int fileIndex, int chunkIndex,

View File

@@ -152,7 +152,7 @@ static QString sanitizeBlameOutput(const QString &b)
if (b.isEmpty())
return b;
const bool omitDate = GitPlugin::client()->settings().boolValue(
const bool omitDate = GitClient::instance()->settings().boolValue(
GitSettings::omitAnnotationDateKey);
const QChar space(' ');
const int parenPos = b.indexOf(')');
@@ -216,12 +216,6 @@ void GitEditorWidget::setPlainText(const QString &text)
textDocument()->setPlainText(modText);
}
void GitEditorWidget::resetChange(const QByteArray &resetType)
{
GitPlugin::client()->reset(
sourceWorkingDirectory(), QLatin1String("--" + resetType), m_currentChange);
}
void GitEditorWidget::applyDiffChunk(const DiffChunk& chunk, bool revert)
{
Utils::TemporaryFile patchFile("git-apply-chunk");
@@ -237,7 +231,7 @@ void GitEditorWidget::applyDiffChunk(const DiffChunk& chunk, bool revert)
if (revert)
args << "--reverse";
QString errorMessage;
if (GitPlugin::client()->synchronousApplyPatch(baseDir, patchFile.fileName(), &errorMessage, args)) {
if (GitClient::instance()->synchronousApplyPatch(baseDir, patchFile.fileName(), &errorMessage, args)) {
if (errorMessage.isEmpty())
VcsOutputWindow::append(tr("Chunk successfully staged"));
else
@@ -286,14 +280,14 @@ void GitEditorWidget::aboutToOpen(const QString &fileName, const QString &realFi
const QString gitPath = fi.absolutePath();
setSource(gitPath);
textDocument()->setCodec(
GitPlugin::client()->encoding(gitPath, "i18n.commitEncoding"));
GitClient::instance()->encoding(gitPath, "i18n.commitEncoding"));
}
}
QString GitEditorWidget::decorateVersion(const QString &revision) const
{
// Format verbose, SHA1 being first token
return GitPlugin::client()->synchronousShortDescription(sourceWorkingDirectory(), revision);
return GitClient::instance()->synchronousShortDescription(sourceWorkingDirectory(), revision);
}
QStringList GitEditorWidget::annotationPreviousVersions(const QString &revision) const
@@ -301,8 +295,8 @@ QStringList GitEditorWidget::annotationPreviousVersions(const QString &revision)
QStringList revisions;
QString errorMessage;
// Get the SHA1's of the file.
if (!GitPlugin::client()->synchronousParentRevisions(sourceWorkingDirectory(),
revision, &revisions, &errorMessage)) {
if (!GitClient::instance()->synchronousParentRevisions(
sourceWorkingDirectory(), revision, &revisions, &errorMessage)) {
VcsOutputWindow::appendSilently(errorMessage);
return QStringList();
}
@@ -311,56 +305,13 @@ QStringList GitEditorWidget::annotationPreviousVersions(const QString &revision)
bool GitEditorWidget::isValidRevision(const QString &revision) const
{
return GitPlugin::client()->isValidRevision(revision);
return GitClient::instance()->isValidRevision(revision);
}
void GitEditorWidget::addChangeActions(QMenu *menu, const QString &change)
{
m_currentChange = change;
if (contentType() == OtherContent)
return;
menu->addAction(tr("Cherr&y-Pick Change %1").arg(change), this, [this] {
GitPlugin::client()->synchronousCherryPick(sourceWorkingDirectory(), m_currentChange);
});
menu->addAction(tr("Re&vert Change %1").arg(change), this, [this] {
GitPlugin::client()->synchronousRevert(sourceWorkingDirectory(), m_currentChange);
});
menu->addAction(tr("C&heckout Change %1").arg(change), this, [this] {
GitPlugin::client()->checkout(sourceWorkingDirectory(), m_currentChange);
});
connect(menu->addAction(tr("&Interactive Rebase from Change %1...").arg(change)),
&QAction::triggered, this, [this] {
GitPlugin::startRebaseFromCommit(sourceWorkingDirectory(), m_currentChange);
});
menu->addAction(tr("&Log for Change %1").arg(change), this, [this] {
GitPlugin::client()->log(sourceWorkingDirectory(), QString(), false, {m_currentChange});
});
menu->addAction(tr("Add &Tag for Change %1...").arg(change), this, [this] {
QString output;
QString errorMessage;
GitPlugin::client()->synchronousTagCmd(sourceWorkingDirectory(), QStringList(),
&output, &errorMessage);
const QStringList tags = output.split('\n');
BranchAddDialog dialog(tags, BranchAddDialog::Type::AddTag, Core::ICore::dialogParent());
if (dialog.exec() == QDialog::Rejected)
return;
GitPlugin::client()->synchronousTagCmd(sourceWorkingDirectory(),
{dialog.branchName(), m_currentChange},
&output, &errorMessage);
VcsOutputWindow::append(output);
if (!errorMessage.isEmpty())
VcsOutputWindow::append(errorMessage, VcsOutputWindow::MessageStyle::Error);
});
auto resetMenu = new QMenu(tr("&Reset to Change %1").arg(change), menu);
resetMenu->addAction(tr("&Hard"), this, [this] { resetChange("hard"); });
resetMenu->addAction(tr("&Mixed"), this, [this] { resetChange("mixed"); });
resetMenu->addAction(tr("&Soft"), this, [this] { resetChange("soft"); });
menu->addMenu(resetMenu);
if (contentType() != OtherContent)
GitClient::addChangeActions(menu, change, sourceWorkingDirectory());
}
QString GitEditorWidget::revisionSubject(const QTextBlock &inBlock) const

View File

@@ -58,7 +58,6 @@ private:
void applyDiffChunk(const VcsBase::DiffChunk& chunk, bool revert);
void init() override;
void resetChange(const QByteArray &resetType);
void addDiffActions(QMenu *menu, const VcsBase::DiffChunk &chunk) override;
void aboutToOpen(const QString &fileName, const QString &realFileName) override;
QString changeUnderCursor(const QTextCursor &) const override;
@@ -73,7 +72,6 @@ private:
QString sourceWorkingDirectory() const;
mutable QRegExp m_changeNumberPattern;
QString m_currentChange;
GitLogFilterWidget *m_logFilterWidget = nullptr;
};

View File

@@ -26,7 +26,6 @@
#include "gitgrep.h"
#include "gitclient.h"
#include "gitconstants.h"
#include "gitplugin.h"
#include <coreplugin/editormanager/editormanager.h>
#include <coreplugin/progressmanager/progressmanager.h>
@@ -187,7 +186,7 @@ public:
return QString(":!" + filter);
});
arguments << "--" << filterArgs << exclusionArgs;
QScopedPointer<VcsCommand> command(GitPlugin::client()->createCommand(m_directory));
QScopedPointer<VcsCommand> command(GitClient::instance()->createCommand(m_directory));
command->addFlags(VcsCommand::SilentOutput | VcsCommand::SuppressFailMessage);
command->setProgressiveOutput(true);
QFutureWatcher<FileSearchResultList> watcher;
@@ -195,7 +194,7 @@ public:
connect(&watcher, &QFutureWatcher<FileSearchResultList>::canceled,
command.data(), &VcsCommand::cancel);
connect(command.data(), &VcsCommand::stdOutText, this, &GitGrepRunner::read);
SynchronousProcessResponse resp = command->runCommand({GitPlugin::client()->vcsBinary(), arguments}, 0);
SynchronousProcessResponse resp = command->runCommand({GitClient::instance()->vcsBinary(), arguments}, 0);
switch (resp.result) {
case SynchronousProcessResponse::TerminatedAbnormally:
case SynchronousProcessResponse::StartFailed:

View File

@@ -1760,11 +1760,11 @@ void GitPluginPrivate::updateCurrentBranch()
QObject *GitPlugin::remoteCommand(const QStringList &options, const QString &workingDirectory,
const QStringList &)
{
if (!GitPlugin::client() || options.size() < 2)
if (options.size() < 2)
return nullptr;
if (options.first() == "-git-show")
GitPlugin::client()->show(workingDirectory, options.at(1));
dd->m_gitClient.show(workingDirectory, options.at(1));
return nullptr;
}

View File

@@ -88,8 +88,8 @@ CommitDataFetchResult CommitDataFetchResult::fetch(CommitType commitType, const
CommitDataFetchResult result;
result.commitData.commitType = commitType;
QString commitTemplate;
result.success = GitPlugin::client()->getCommitData(workingDirectory, &commitTemplate,
result.commitData, &result.errorMessage);
result.success = GitClient::instance()->getCommitData(
workingDirectory, &commitTemplate, result.commitData, &result.errorMessage);
return result;
}
@@ -202,15 +202,15 @@ void GitSubmitEditor::slotDiffSelected(const QList<int> &rows)
}
}
if (!unstagedFiles.empty() || !stagedFiles.empty())
GitPlugin::client()->diffFiles(m_workingDirectory, unstagedFiles, stagedFiles);
GitClient::instance()->diffFiles(m_workingDirectory, unstagedFiles, stagedFiles);
if (!unmergedFiles.empty())
GitPlugin::client()->merge(m_workingDirectory, unmergedFiles);
GitClient::instance()->merge(m_workingDirectory, unmergedFiles);
}
void GitSubmitEditor::showCommit(const QString &commit)
{
if (!m_workingDirectory.isEmpty())
GitPlugin::client()->show(m_workingDirectory, commit);
GitClient::instance()->show(m_workingDirectory, commit);
}
void GitSubmitEditor::updateFileModel()
@@ -230,7 +230,7 @@ void GitSubmitEditor::updateFileModel()
Core::ProgressManager::addTask(m_fetchWatcher.future(), tr("Refreshing Commit Data"),
TASK_UPDATE_COMMIT);
GitPlugin::client()->addFuture(m_fetchWatcher.future());
GitClient::instance()->addFuture(m_fetchWatcher.future());
}
void GitSubmitEditor::forceUpdateFileModel()

View File

@@ -24,7 +24,6 @@
****************************************************************************/
#include "logchangedialog.h"
#include "gitplugin.h"
#include "gitclient.h"
#include <vcsbase/vcsoutputwindow.h>
@@ -79,7 +78,7 @@ bool LogChangeWidget::init(const QString &repository, const QString &commit, Log
return true;
if (!(flags & Silent)) {
VcsOutputWindow::appendError(
GitPlugin::client()->msgNoCommits(flags & IncludeRemotes));
GitClient::instance()->msgNoCommits(flags & IncludeRemotes));
}
return false;
}
@@ -159,8 +158,10 @@ bool LogChangeWidget::populateLog(const QString &repository, const QString &comm
arguments << "--not" << "--remotes";
arguments << "--";
QString output;
if (!GitPlugin::client()->synchronousLog(repository, arguments, &output, nullptr, VcsCommand::NoOutput))
if (!GitClient::instance()->synchronousLog(
repository, arguments, &output, nullptr, VcsCommand::NoOutput)) {
return false;
}
const QStringList lines = output.split('\n');
for (const QString &line : lines) {
const int colonPos = line.indexOf(':');
@@ -211,8 +212,8 @@ LogChangeDialog::LogChangeDialog(bool isReset, QWidget *parent) :
m_resetTypeComboBox->addItem(tr("Hard"), "--hard");
m_resetTypeComboBox->addItem(tr("Mixed"), "--mixed");
m_resetTypeComboBox->addItem(tr("Soft"), "--soft");
m_resetTypeComboBox->setCurrentIndex(GitPlugin::client()->settings().intValue(
GitSettings::lastResetIndexKey));
m_resetTypeComboBox->setCurrentIndex(
GitClient::instance()->settings().intValue(GitSettings::lastResetIndexKey));
popUpLayout->addWidget(m_resetTypeComboBox);
popUpLayout->addItem(new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Ignored));
}
@@ -239,8 +240,8 @@ bool LogChangeDialog::runDialog(const QString &repository,
if (QDialog::exec() == QDialog::Accepted) {
if (m_resetTypeComboBox) {
GitPlugin::client()->settings().setValue(GitSettings::lastResetIndexKey,
m_resetTypeComboBox->currentIndex());
GitClient::instance()->settings().setValue(
GitSettings::lastResetIndexKey, m_resetTypeComboBox->currentIndex());
}
return true;
}

View File

@@ -60,7 +60,7 @@ bool MergeTool::start(const QString &workingDirectory, const QStringList &files)
m_process->setWorkingDirectory(workingDirectory);
m_process->setProcessEnvironment(env);
m_process->setProcessChannelMode(QProcess::MergedChannels);
const Utils::FilePath binary = GitPlugin::client()->vcsBinary();
const Utils::FilePath binary = GitClient::instance()->vcsBinary();
VcsOutputWindow::appendCommand(workingDirectory, {binary, arguments});
m_process->start(binary.toString(), arguments);
if (m_process->waitForStarted()) {
@@ -263,7 +263,7 @@ void MergeTool::done()
VcsOutputWindow::appendError(tr("Merge tool process terminated with exit code %1")
.arg(exitCode));
}
GitPlugin::client()->continueCommandIfNeeded(workingDirectory, exitCode == 0);
GitClient::instance()->continueCommandIfNeeded(workingDirectory, exitCode == 0);
GitPlugin::emitRepositoryChanged(workingDirectory);
deleteLater();
}

View File

@@ -203,7 +203,7 @@ void RemoteDialog::pushToRemote()
const int row = indexList.at(0).row();
const QString remoteName = m_remoteModel->remoteName(row);
GitPlugin::client()->push(m_remoteModel->workingDirectory(), {remoteName});
GitClient::instance()->push(m_remoteModel->workingDirectory(), {remoteName});
}
void RemoteDialog::fetchFromRemote()
@@ -214,7 +214,7 @@ void RemoteDialog::fetchFromRemote()
int row = indexList.at(0).row();
const QString remoteName = m_remoteModel->remoteName(row);
GitPlugin::client()->fetch(m_remoteModel->workingDirectory(), remoteName);
GitClient::instance()->fetch(m_remoteModel->workingDirectory(), remoteName);
}
void RemoteDialog::updateButtonState()

View File

@@ -24,7 +24,6 @@
****************************************************************************/
#include "remotemodel.h"
#include "gitplugin.h"
#include "gitclient.h"
#include <utils/algorithm.h>
@@ -55,7 +54,7 @@ bool RemoteModel::removeRemote(int row)
{
QString output;
QString error;
bool success = GitPlugin::client()->synchronousRemoteCmd(
bool success = GitClient::instance()->synchronousRemoteCmd(
m_workingDirectory, {"rm", remoteName(row)}, &output, &error);
if (success)
success = refresh(m_workingDirectory, &error);
@@ -69,7 +68,7 @@ bool RemoteModel::addRemote(const QString &name, const QString &url)
if (name.isEmpty() || url.isEmpty())
return false;
bool success = GitPlugin::client()->synchronousRemoteCmd(
bool success = GitClient::instance()->synchronousRemoteCmd(
m_workingDirectory, {"add", name, url}, &output, &error);
if (success)
success = refresh(m_workingDirectory, &error);
@@ -80,7 +79,7 @@ bool RemoteModel::renameRemote(const QString &oldName, const QString &newName)
{
QString output;
QString error;
bool success = GitPlugin::client()->synchronousRemoteCmd(
bool success = GitClient::instance()->synchronousRemoteCmd(
m_workingDirectory, {"rename", oldName, newName}, &output, &error);
if (success)
success = refresh(m_workingDirectory, &error);
@@ -91,7 +90,7 @@ bool RemoteModel::updateUrl(const QString &name, const QString &newUrl)
{
QString output;
QString error;
bool success = GitPlugin::client()->synchronousRemoteCmd(
bool success = GitClient::instance()->synchronousRemoteCmd(
m_workingDirectory, {"set-url", name, newUrl}, &output, &error);
if (success)
success = refresh(m_workingDirectory, &error);
@@ -186,7 +185,7 @@ bool RemoteModel::refresh(const QString &workingDirectory, QString *errorMessage
// get list of remotes.
QMap<QString,QString> remotesList
= GitPlugin::client()->synchronousRemotesList(workingDirectory, errorMessage);
= GitClient::instance()->synchronousRemotesList(workingDirectory, errorMessage);
beginResetModel();
m_remotes.clear();

View File

@@ -161,7 +161,7 @@ void StashDialog::refresh(const QString &repository, bool force)
m_model->setStashes(QList<Stash>());
} else {
QList<Stash> stashes;
GitPlugin::client()->synchronousStashList(m_repository, &stashes);
GitClient::instance()->synchronousStashList(m_repository, &stashes);
m_model->setStashes(stashes);
if (!stashes.isEmpty()) {
for (int c = 0; c < ColumnCount; c++)
@@ -177,7 +177,7 @@ void StashDialog::deleteAll()
if (!ask(title, tr("Do you want to delete all stashes?")))
return;
QString errorMessage;
if (GitPlugin::client()->synchronousStashRemove(m_repository, QString(), &errorMessage))
if (GitClient::instance()->synchronousStashRemove(m_repository, QString(), &errorMessage))
refresh(m_repository, true);
else
warning(title, errorMessage);
@@ -194,7 +194,7 @@ void StashDialog::deleteSelection()
QStringList errors;
// Delete in reverse order as stashes rotate
for (int r = rows.size() - 1; r >= 0; r--)
if (!GitPlugin::client()->synchronousStashRemove(m_repository, m_model->at(rows.at(r)).name, &errorMessage))
if (!GitClient::instance()->synchronousStashRemove(m_repository, m_model->at(rows.at(r)).name, &errorMessage))
errors.push_back(errorMessage);
refresh(m_repository, true);
if (!errors.isEmpty())
@@ -205,7 +205,7 @@ void StashDialog::showCurrent()
{
const int index = currentRow();
QTC_ASSERT(index >= 0, return);
GitPlugin::client()->show(m_repository, QString(m_model->at(index).name));
GitClient::instance()->show(m_repository, QString(m_model->at(index).name));
}
// Suggest Branch name to restore 'stash@{0}' -> 'stash0-date'
@@ -266,7 +266,8 @@ bool StashDialog::promptForRestore(QString *stash,
{
const QString stashIn = *stash;
bool modifiedPromptShown = false;
switch (GitPlugin::client()->gitStatus(m_repository, StatusMode(NoUntracked | NoSubmodules), nullptr, errorMessage)) {
switch (GitClient::instance()->gitStatus(
m_repository, StatusMode(NoUntracked | NoSubmodules), nullptr, errorMessage)) {
case GitClient::StatusFailed:
return false;
case GitClient::StatusChanged: {
@@ -274,13 +275,15 @@ bool StashDialog::promptForRestore(QString *stash,
case ModifiedRepositoryCancel:
return false;
case ModifiedRepositoryStash:
if (GitPlugin::client()->synchronousStash(m_repository, QString(), GitClient::StashPromptDescription).isEmpty())
if (GitClient::instance()->synchronousStash(
m_repository, QString(), GitClient::StashPromptDescription).isEmpty()) {
return false;
}
*stash = nextStash(*stash); // Our stash id to be restored changed
QTC_ASSERT(!stash->isEmpty(), return false);
break;
case ModifiedRepositoryDiscard:
if (!GitPlugin::client()->synchronousReset(m_repository))
if (!GitClient::instance()->synchronousReset(m_repository))
return false;
break;
}
@@ -317,7 +320,7 @@ void StashDialog::restoreCurrent()
// Make sure repository is not modified, restore. The command will
// output to window on success.
if (promptForRestore(&name, nullptr, &errorMessage)
&& GitPlugin::client()->synchronousStashRestore(m_repository, name)) {
&& GitClient::instance()->synchronousStashRestore(m_repository, name)) {
refresh(m_repository, true); // Might have stashed away local changes.
} else if (!errorMessage.isEmpty()) {
warning(msgRestoreFailedTitle(name), errorMessage);
@@ -332,7 +335,7 @@ void StashDialog::restoreCurrentInBranch()
QString branch;
QString name = m_model->at(index).name;
if (promptForRestore(&name, &branch, &errorMessage)
&& GitPlugin::client()->synchronousStashRestore(m_repository, name, false, branch)) {
&& GitClient::instance()->synchronousStashRestore(m_repository, name, false, branch)) {
refresh(m_repository, true); // git deletes the stash, unfortunately.
} else if (!errorMessage.isEmpty()) {
warning(msgRestoreFailedTitle(name), errorMessage);

View File

@@ -1,5 +1,5 @@
add_qtc_plugin(LanguageClient
DEPENDS LanguageServerProtocol Qt5::Core
PUBLIC_DEPENDS LanguageServerProtocol Qt5::Core
PLUGIN_DEPENDS ProjectExplorer Core TextEditor
SOURCES
client.cpp client.h

View File

@@ -35,6 +35,7 @@
#include <texteditor/codeassist/genericproposal.h>
#include <texteditor/codeassist/genericproposalmodel.h>
#include <utils/algorithm.h>
#include <utils/executeondestruction.h>
#include <utils/textutils.h>
#include <utils/utilsicons.h>
@@ -361,6 +362,9 @@ void LanguageClientCompletionAssistProcessor::cancel()
void LanguageClientCompletionAssistProcessor::handleCompletionResponse(
const CompletionRequest::Response &response)
{
LanguageClientCompletionProposal *proposal = nullptr;
// We must report back to the code assistant under all circumstances
Utils::ExecuteOnDestruction eod([this, proposal]() { setAsyncProposalAvailable(proposal); });
qCDebug(LOGLSPCOMPLETION) << QTime::currentTime() << " : got completions";
m_currentRequest = MessageId();
QTC_ASSERT(m_client, return);
@@ -383,12 +387,11 @@ void LanguageClientCompletionAssistProcessor::handleCompletionResponse(
model->loadContent(Utils::transform(items, [](const CompletionItem &item){
return static_cast<AssistProposalItemInterface *>(new LanguageClientCompletionItem(item));
}));
auto proposal = new LanguageClientCompletionProposal(m_pos, model);
proposal = new LanguageClientCompletionProposal(m_pos, model);
proposal->m_document = m_document;
proposal->m_pos = m_pos;
proposal->setFragile(true);
proposal->setSupportsPrefix(false);
setAsyncProposalAvailable(proposal);
qCDebug(LOGLSPCOMPLETION) << QTime::currentTime() << " : "
<< items.count() << " completions handled";
}

View File

@@ -58,8 +58,8 @@ public:
setDisplayName(tr("Current Build Target"));
setDefaultDisplayName(tr("Current Build Target"));
setUpdater([this] {
auto buildConfiguration = qobject_cast<NimBuildConfiguration *>(activeBuildConfiguration());
setUpdater([this, target] {
auto buildConfiguration = qobject_cast<NimBuildConfiguration *>(target->activeBuildConfiguration());
QTC_ASSERT(buildConfiguration, return);
const QFileInfo outFileInfo = buildConfiguration->outFilePath().toFileInfo();
aspect<ExecutableAspect>()->setExecutable(FilePath::fromString(outFileInfo.absoluteFilePath()));

View File

@@ -159,7 +159,7 @@ PerfProfilerTool::PerfProfilerTool()
tracePointsAction->setEnabled(m_startAction->isEnabled());
});
connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::updateRunActions,
connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::runActionsUpdated,
this, &PerfProfilerTool::updateRunActions);
m_recordButton = new QToolButton;

View File

@@ -779,7 +779,7 @@ void AppOutputPane::slotRunControlFinished2(RunControl *sender)
if (current && current == sender)
enableButtons(current);
emit ProjectExplorerPlugin::instance()->updateRunActions();
ProjectExplorerPlugin::updateRunActions();
#ifdef Q_OS_WIN
const bool isRunning = Utils::anyOf(m_runControlTabs, [](const RunControlTab &rt) {

View File

@@ -183,7 +183,7 @@ BuildConfiguration::BuildConfiguration(Target *target, Core::Id id)
connect(this, &BuildConfiguration::enabledChanged, this, [this] {
if (isActive() && project() == SessionManager::startupProject()) {
ProjectExplorerPlugin::updateActions();
emit ProjectExplorerPlugin::instance()->updateRunActions();
ProjectExplorerPlugin::updateRunActions();
}
});
}

View File

@@ -265,9 +265,6 @@ BuildManager::BuildManager(QObject *parent, QAction *cancelBuildAction)
connect(d->m_taskWindow, &Internal::TaskWindow::tasksChanged,
this, &BuildManager::updateTaskCount);
connect(d->m_taskWindow, &Internal::TaskWindow::tasksCleared,
this,&BuildManager::tasksCleared);
connect(&d->m_progressWatcher, &QFutureWatcherBase::canceled,
this, &BuildManager::cancel);
connect(&d->m_progressWatcher, &QFutureWatcherBase::finished,
@@ -457,7 +454,6 @@ void BuildManager::updateTaskCount()
{
const int errors = getErrorTaskCount();
ProgressManager::setApplicationLabel(errors > 0 ? QString::number(errors) : QString());
emit m_instance->tasksChanged();
}
void BuildManager::finish()

View File

@@ -102,9 +102,6 @@ public slots:
signals:
void buildStateChanged(ProjectExplorer::Project *pro);
void buildQueueFinished(bool success);
void tasksChanged();
void taskAdded(const ProjectExplorer::Task &task);
void tasksCleared();
private:
static void addToTaskWindow(const ProjectExplorer::Task &task, int linkedOutputLines, int skipLines);

View File

@@ -316,7 +316,7 @@ void BuildSystem::emitBuildSystemUpdated()
QString BuildSystem::disabledReason(const QString &buildKey) const
{
if (hasParsingData()) {
if (!hasParsingData()) {
QString msg = isParsing() ? tr("The project is currently being parsed.")
: tr("The project could not be fully parsed.");
const FilePath projectFilePath = buildTarget(buildKey).projectFilePath;

View File

@@ -2053,6 +2053,7 @@ Utils::optional<QString> MsvcToolChain::generateEnvironmentSettings(const Utils:
}
if (Utils::HostOsInfo::isWindowsHost())
saver.write("chcp 65001\r\n");
saver.write("set VSCMD_SKIP_SENDTELEMETRY=1\r\n");
saver.write(call + "\r\n");
saver.write("@echo " + marker.toLocal8Bit() + "\r\n");
saver.write("set\r\n");

View File

@@ -453,7 +453,7 @@ public:
void activeRunConfigurationChanged();
void activeBuildConfigurationChanged();
void slotUpdateRunActions();
void doUpdateRunActions();
void currentModeChanged(Core::Id mode, Core::Id oldMode);
@@ -1714,8 +1714,6 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
connect(dd->m_projectTreeExpandAllAction, &QAction::triggered,
ProjectTree::instance(), &ProjectTree::expandAll);
connect(this, &ProjectExplorerPlugin::updateRunActions,
dd, &ProjectExplorerPluginPrivate::slotUpdateRunActions);
connect(this, &ProjectExplorerPlugin::settingsChanged,
dd, &ProjectExplorerPluginPrivate::updateRunWithoutDeployMenu);
@@ -2483,7 +2481,7 @@ void ProjectExplorerPluginPrivate::startRunControl(RunControl *runControl)
Qt::QueuedConnection);
++m_activeRunControlCount;
runControl->initiateStart();
emit m_instance->updateRunActions();
doUpdateRunActions();
}
void ProjectExplorerPluginPrivate::showOutputPaneForRunControl(RunControl *runControl)
@@ -2540,7 +2538,7 @@ void ProjectExplorerPluginPrivate::buildQueueFinished(bool success)
m_delayedRunConfiguration = nullptr;
m_shouldHaveRunConfiguration = false;
m_runMode = Constants::NO_RUN_MODE;
emit m_instance->updateRunActions();
doUpdateRunActions();
}
QList<QPair<QString, QString> > ProjectExplorerPluginPrivate::recentProjects() const
@@ -2903,7 +2901,8 @@ void ProjectExplorerPlugin::runRunConfiguration(RunConfiguration *rc,
dd->executeRunConfiguration(rc, runMode);
break;
}
emit m_instance->updateRunActions();
dd->doUpdateRunActions();
}
QList<QPair<Runnable, Utils::ProcessHandle>> ProjectExplorerPlugin::runningRunControlProcesses()
@@ -3001,7 +3000,7 @@ void ProjectExplorerPluginPrivate::activeRunConfigurationChanged()
if (rc == previousRunConfiguration)
return;
updateActions();
emit m_instance->updateRunActions();
doUpdateRunActions();
}
void ProjectExplorerPluginPrivate::activeBuildConfigurationChanged()
@@ -3015,7 +3014,7 @@ void ProjectExplorerPluginPrivate::activeBuildConfigurationChanged()
return;
updateActions();
emit m_instance->updateRunActions();
doUpdateRunActions();
}
void ProjectExplorerPluginPrivate::updateDeployActions()
@@ -3064,7 +3063,7 @@ void ProjectExplorerPluginPrivate::updateDeployActions()
enableDeploySessionAction = false;
m_deploySessionAction->setEnabled(enableDeploySessionAction);
emit m_instance->updateRunActions();
doUpdateRunActions();
}
bool ProjectExplorerPlugin::canRunStartupProject(Core::Id runMode, QString *whyNot)
@@ -3139,13 +3138,15 @@ bool ProjectExplorerPlugin::canRunStartupProject(Core::Id runMode, QString *whyN
return true;
}
void ProjectExplorerPluginPrivate::slotUpdateRunActions()
void ProjectExplorerPluginPrivate::doUpdateRunActions()
{
QString whyNot;
const bool state = ProjectExplorerPlugin::canRunStartupProject(Constants::NORMAL_RUN_MODE, &whyNot);
m_runAction->setEnabled(state);
m_runAction->setToolTip(whyNot);
m_runWithoutDeployAction->setEnabled(state);
emit m_instance->runActionsUpdated();
}
void ProjectExplorerPluginPrivate::addToRecentProjects(const QString &fileName, const QString &displayName)
@@ -4002,6 +4003,11 @@ void ProjectExplorerPlugin::removeFromRecentProjects(const QString &fileName,
dd->removeFromRecentProjects(fileName, displayName);
}
void ProjectExplorerPlugin::updateRunActions()
{
dd->doUpdateRunActions();
}
QList<QPair<QString, QString> > ProjectExplorerPlugin::recentProjects()
{
return dd->recentProjects();

View File

@@ -182,6 +182,8 @@ public:
static void clearRecentProjects();
static void removeFromRecentProjects(const QString &fileName, const QString &displayName);
static void updateRunActions();
signals:
void finishedInitialization();
@@ -193,7 +195,7 @@ signals:
void settingsChanged();
void updateRunActions();
void runActionsUpdated();
private:
static bool coreAboutToClose();

View File

@@ -203,11 +203,6 @@ RunConfiguration::RunConfiguration(Target *target, Core::Id id)
RunConfiguration::~RunConfiguration() = default;
bool RunConfiguration::isActive() const
{
return target()->isActive() && target()->activeRunConfiguration() == this;
}
QString RunConfiguration::disabledReason() const
{
BuildSystem *bs = activeBuildSystem();
@@ -252,11 +247,6 @@ QMap<Core::Id, QVariantMap> RunConfiguration::aspectData() const
return data;
}
BuildConfiguration *RunConfiguration::activeBuildConfiguration() const
{
return target()->activeBuildConfiguration();
}
BuildSystem *RunConfiguration::activeBuildSystem() const
{
return target()->buildSystem();
@@ -304,8 +294,10 @@ void RunConfiguration::update()
emit enabledChanged();
if (isActive() && project() == SessionManager::startupProject())
emit ProjectExplorerPlugin::instance()->updateRunActions();
const bool isActive = target()->isActive() && target()->activeRunConfiguration() == this;
if (isActive && project() == SessionManager::startupProject())
ProjectExplorerPlugin::updateRunActions();
}
BuildTargetInfo RunConfiguration::buildTargetInfo() const

View File

@@ -128,8 +128,6 @@ class PROJECTEXPLORER_EXPORT RunConfiguration : public ProjectConfiguration
public:
~RunConfiguration() override;
bool isActive() const;
virtual QString disabledReason() const;
virtual bool isEnabled() const;
@@ -179,8 +177,7 @@ signals:
protected:
RunConfiguration(Target *target, Core::Id id);
/// convenience function to get current build configuration.
BuildConfiguration *activeBuildConfiguration() const;
/// convenience function to get current build system. Try to avoid.
BuildSystem *activeBuildSystem() const;
using Updater = std::function<void()>;

View File

@@ -380,7 +380,6 @@ void TaskWindow::clearTasks(Core::Id categoryId)
d->m_model->clearTasks(categoryId);
emit tasksChanged();
emit tasksCleared();
navigateStateChanged();
}

View File

@@ -79,7 +79,6 @@ public:
signals:
void tasksChanged();
void tasksCleared();
private:
void updateFilter() override;

Some files were not shown because too many files have changed in this diff Show More