Merge remote-tracking branch 'origin/4.15'
Change-Id: I613b60f7d5cfca19ed611b3777548738d7bd7d67
4
coin/product_dependencies.yaml
Normal file
@@ -0,0 +1,4 @@
|
||||
dependencies:
|
||||
../../qt/qt5.git:
|
||||
ref: "6.1"
|
||||
|
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 7.1 KiB After Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 8.0 KiB After Width: | Height: | Size: 6.5 KiB |
BIN
doc/qtcreator/images/qtquick-library-context-menu-hide.png
Normal file
After Width: | Height: | Size: 7.6 KiB |
BIN
doc/qtcreator/images/qtquick-library-context-menu.png
Normal file
After Width: | Height: | Size: 9.0 KiB |
@@ -1,6 +1,6 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2020 The Qt Company Ltd.
|
||||
** Copyright (C) 2021 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the Qt Creator documentation.
|
||||
@@ -45,9 +45,9 @@
|
||||
|
||||
To run an example application on a Boot2Qt device, you must set up
|
||||
Qt for Device Creation on the development host and create connections
|
||||
between the host and devices. For more information, see the
|
||||
\l{http://doc.qt.io/QtForDeviceCreation/qtee-installation-guide.html}
|
||||
{Installation Guide} in the
|
||||
between the host and devices. For more information, see
|
||||
\l{https://doc.qt.io/QtForDeviceCreation/b2qt-installation-guides.html}
|
||||
{Installation Guides} in the
|
||||
\l{http://doc.qt.io/QtForDeviceCreation/index.html}{Qt for Device Creation}
|
||||
documentation.
|
||||
|
||||
|
@@ -116,6 +116,10 @@
|
||||
|
||||
\endlist
|
||||
|
||||
If the \l{glossary-buildandrun-kit}{kit} specifies Qt for Android
|
||||
version 5.14.0 or later, you can select the ABIs for the Android device
|
||||
architectures to build the project for in the \uicontrol ABIs field.
|
||||
|
||||
The \uicontrol {Equivalent command line} field displays the build command
|
||||
that is constructed based on the selected options.
|
||||
|
||||
|
@@ -76,8 +76,8 @@
|
||||
\li Merge File with Template
|
||||
\li \l{Merging Files with Templates}
|
||||
\row
|
||||
\li Move Component into Separate File
|
||||
\li \l{Moving Components into Separate Files}
|
||||
\li Move Component Instances into Separate Files
|
||||
\li \l{Moving Component Instances into Separate Files}
|
||||
\row
|
||||
\li Add New Signal Handler
|
||||
\li \l{Adding Signal Handlers}
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2020 The Qt Company Ltd.
|
||||
** Copyright (C) 2021 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the Qt Creator documentation.
|
||||
@@ -42,73 +42,84 @@
|
||||
|
||||
A \e component is a reusable building block for a UI.
|
||||
|
||||
\QDS comes with \e {preset components} that you can use in your project.
|
||||
These are similar to \e Symbols in Sketch or \e Prefab in Unity.
|
||||
\QDS comes with \e {preset components} that you can use in your UI by
|
||||
creating instances of them.
|
||||
The preset components are similar to \e Symbols in Sketch or \e Prefab in
|
||||
Unity.
|
||||
|
||||
Some of the preset components represent simple shapes, text, or images,
|
||||
while others represent complex UI controls with full functionality, such
|
||||
as spin boxes or sliders.
|
||||
as spin boxes or sliders. You can also add instances of preset
|
||||
\l {Using 3D Components}{3D components} to your UIs.
|
||||
|
||||
You can modify the \e properties of the preset components and combine them
|
||||
to build your own components.
|
||||
To build your own components, you can modify the \e properties of the
|
||||
component instances and combine them.
|
||||
|
||||
A component is specified within one file (with the file extension
|
||||
\e ui.qml or \e .qml). For example, a Button component may be defined
|
||||
in \e Button.ui.qml. Typically, the visual appearance of a component
|
||||
is defined in a \e {UI file} (ui.qml).
|
||||
is defined in a \e {UI file} (ui.qml). To create component files,
|
||||
you can use \l{Creating Components from Scratch}{wizard templates}, or
|
||||
\l{Moving Component Instances into Separate Files}
|
||||
{move component instances into separate component files}.
|
||||
|
||||
The \l {Library} view \uicontrol Components tab lists the components that
|
||||
have been added to your project.
|
||||
Select \l Library > \uicontrol Components to view the preset components that
|
||||
have been added to your project. If you cannot find the components you need,
|
||||
add the relevant modules to your project, as described in
|
||||
\l {Adding and Removing Modules}.
|
||||
|
||||
\image qmldesigner-qml-components.png "Components"
|
||||
\image qtquick-components-tab.png "Components in Library"
|
||||
|
||||
\note Use as few components as possible. To minimize the number of
|
||||
components, use \l{Adding Property Aliases}{alias properties} and
|
||||
\l{Adding States}{states} to create the differences in your component
|
||||
instances. We recommend reusing components instead of duplicating them,
|
||||
so the components do not need to be processed as completely new component
|
||||
types. This reduces the time needed to load and build the application,
|
||||
as well as the size of the application package.
|
||||
instances. Using component instances instead of duplicating the components
|
||||
reduces the time needed to load and build the application, as well as the
|
||||
size of the application package.
|
||||
|
||||
\section1 Adding Components to Designs
|
||||
\section1 Creating Component Instances
|
||||
|
||||
\image qmldesigner-editing-components.png "Editing components in Form Editor"
|
||||
\image qmldesigner-editing-components.png "Creating Component Instances"
|
||||
|
||||
\list 1
|
||||
\li Drag and drop components from \uicontrol Library (1) to
|
||||
\uicontrol Navigator (2) or \uicontrol {Form Editor} (3).
|
||||
\li Select components in \uicontrol Navigator to edit the
|
||||
\li Drag-and-drop components from \uicontrol Library (1) to
|
||||
\uicontrol Navigator (2), \uicontrol {Form Editor} (3), or
|
||||
\l {3D Editor} (4). This creates instances of the components in the
|
||||
current component file.
|
||||
\li Select component instances in \uicontrol Navigator to edit the
|
||||
values of their properties in \uicontrol Properties.
|
||||
\image qmldesigner-properties-view.png "Properties view"
|
||||
For more information, see \l {Specifying Component Properties}.
|
||||
\li To change the appearance and behavior of your components in ways
|
||||
that are not supported out of the box, you can define custom
|
||||
properties for your components in the \uicontrol Connections view,
|
||||
\uicontrol Properties tab.
|
||||
\image qmldesigner-dynamicprops.png "Connections view Properties tab"
|
||||
\li To change the appearance and behavior of the component instances
|
||||
in ways that are not supported in \QDS by default, you can define
|
||||
custom properties in \uicontrol {Connection View} >
|
||||
\uicontrol {Properties}.
|
||||
\image qmldesigner-dynamicprops.png "Connection View Properties tab"
|
||||
For more information, see \l{Specifying Dynamic Properties}.
|
||||
\li To enable users to interact with components, connect the components
|
||||
to signals in the \uicontrol Connections view. For example, you can
|
||||
specify what happens when a component is clicked.
|
||||
For more information, see \l{Connecting Components to Signals}.
|
||||
\image qmldesigner-connections.png "Connections view Connections tab"
|
||||
\li To dynamically change the behavior of an object when another object
|
||||
changes, create bindings between components in the
|
||||
\uicontrol {Connection View}, \uicontrol Bindings tab.
|
||||
\li To enable users to interact with the component instances, connect
|
||||
the instances to signals in \uicontrol {Connection View} >
|
||||
\uicontrol Connections. For example, you can specify what happens
|
||||
when a component instance is clicked. For more information, see
|
||||
\l{Connecting Components to Signals}.
|
||||
\image qmldesigner-connections.png "Connection View Connections tab"
|
||||
\li To dynamically change the behavior of a component instance when
|
||||
another component instance changes, create bindings between them in
|
||||
\uicontrol {Connection View} > \uicontrol Bindings.
|
||||
For more information, see \l{Adding Bindings Between Properties}.
|
||||
\image qmldesigner-bindings.png "Connections view Bindings tab"
|
||||
\image qmldesigner-bindings.png "Connection View Bindings tab"
|
||||
\li Add states to apply sets of changes to the property values of one
|
||||
or several components in the \uicontrol States view.
|
||||
or several component instances in the \uicontrol States view.
|
||||
For more information, see \l{Adding States}.
|
||||
\li Animate component properties in the \uicontrol Timeline view.
|
||||
For more information, see \l{Creating Animations}.
|
||||
\li Animate the properties of component instances in the \uicontrol
|
||||
Timeline view. For more information, see \l{Creating Animations}.
|
||||
\endlist
|
||||
|
||||
\section1 Creating Your Own Components
|
||||
|
||||
You can either use project wizard templates to create custom components and
|
||||
controls or \l{Moving Components into Separate Files}{move subcomponents
|
||||
into separate files} to make them reusable in other components.
|
||||
controls or move component instances into separate files to turn them into
|
||||
new components that you can create instances of. You can then use the
|
||||
instances of the new components in other components.
|
||||
|
||||
\section2 Creating Components from Scratch
|
||||
|
||||
@@ -128,27 +139,30 @@
|
||||
tab in the \uicontrol Library view only if the filename begins with
|
||||
a capital letter.
|
||||
|
||||
\li Click \uicontrol Design to open the component file (ui.qml] in
|
||||
\li Click \uicontrol Design to open the component file (ui.qml) in
|
||||
\uicontrol {Form Editor}.
|
||||
|
||||
\li Drag and drop a component from \uicontrol Library to
|
||||
\li Drag-and-drop a component from \uicontrol Library to
|
||||
\uicontrol Navigator or \uicontrol {Form Editor}.
|
||||
|
||||
\li Edit component properties in \uicontrol Properties.
|
||||
|
||||
\li Edit component properties in the \uicontrol Properties view.
|
||||
\image qmldesigner-custom-component-properties.png
|
||||
|
||||
The available properties depend on the component type. You can
|
||||
\l{Specifying Dynamic Properties}{add properties for
|
||||
components} in the \uicontrol Properties tab of the
|
||||
\uicontrol {Connection View}.
|
||||
components} in \uicontrol {Connection View} > \uicontrol Properties.
|
||||
|
||||
\li To change the appearance and behavior of the component instances
|
||||
in ways that are not supported in \QDS by default, you can define
|
||||
custom properties in \uicontrol {Connection View} >
|
||||
\uicontrol {Properties}.
|
||||
|
||||
\endlist
|
||||
|
||||
The following sections contain more information about how to use
|
||||
\uicontrol {Form Editor} to edit 2D content and \uicontrol {3D Editor}
|
||||
to edit 3D scenes, as well as examples of how to create UI controls
|
||||
using basic components:
|
||||
using instances of basic components:
|
||||
|
||||
\list
|
||||
|
||||
@@ -166,26 +180,26 @@
|
||||
\include qtdesignstudio-components.qdocinc creating studio components
|
||||
\endif
|
||||
|
||||
\section2 Moving Components into Separate Files
|
||||
\section2 Moving Component Instances into Separate Files
|
||||
|
||||
An alternative way of creating reusable components is to move them
|
||||
into separate component files (.ui.qml). Right-click a component
|
||||
in \uicontrol Navigator or \uicontrol {Form Editor} and select
|
||||
An alternative way of creating reusable components is to move component
|
||||
instances into separate component files (.ui.qml). Right-click a component
|
||||
instance in \uicontrol Navigator or \uicontrol {Form Editor}, and select
|
||||
\uicontrol {Move Component into Separate File} in the context menu.
|
||||
|
||||
\image qtcreator-move-component-into-separate-file.png
|
||||
|
||||
Give the new component a name and select whether properties are set for
|
||||
Give the new component a name, and select whether properties are set for
|
||||
the new component or for the original one.
|
||||
|
||||
When you select \uicontrol OK, a new component file is created and a
|
||||
reference to the component is added to the code in the current component
|
||||
file. The way things look in \uicontrol {Form Editor} does not change.
|
||||
When you select \uicontrol OK, a new component file is created and an
|
||||
instance of the component is added to the code in the current component
|
||||
file. The look of your UI in \uicontrol {Form Editor} does not change.
|
||||
|
||||
To open the new component file for editing the properties that you want
|
||||
to change for all instances of the component, right-click the component
|
||||
to change for all instances of the component, right-click the component,
|
||||
and then select \uicontrol {Go into Component} in the context menu. For
|
||||
additional ways of opening subcomponents, see \l{Moving Within Components}.
|
||||
additional ways of opening base components, see \l{Moving Within Components}.
|
||||
|
||||
For an example of creating a reusable custom component, see
|
||||
\if defined(qtcreator)
|
||||
@@ -194,17 +208,17 @@
|
||||
\l{Progress Bar}.
|
||||
\endif
|
||||
|
||||
Custom components are listed in the \uicontrol {My Components} section
|
||||
of the \uicontrol Components tab in \uicontrol Library and you can use
|
||||
them to build more components.
|
||||
Custom components are listed in \uicontrol Library > \uicontrol Components
|
||||
> \uicontrol {My Components}, and you can use instances of them to build
|
||||
more components.
|
||||
|
||||
\include qtquick-mcu-support.qdocinc mcu qtquick components
|
||||
|
||||
\section1 Merging Files with Templates
|
||||
|
||||
You can merge the current component file against an existing second
|
||||
component file and using the second file in a way similar to using a
|
||||
CSS stylesheet.
|
||||
component file using the second file in a way similar to using a CSS
|
||||
stylesheet.
|
||||
|
||||
To use this experimental feature, right-click a component in the
|
||||
\uicontrol Navigator or \uicontrol {Form Editor} view and select
|
||||
|
@@ -41,9 +41,10 @@
|
||||
\image qtquick-components-tab.png "Library view Components tab"
|
||||
|
||||
\uicontrol Components displays modules that have been added to your project.
|
||||
The modules contain visual components, such as basic shapes, UI controls,
|
||||
and 3D components, and add functionality to the project. All components have
|
||||
a type.
|
||||
In many modules the components have been further organized into different
|
||||
categories. The modules contain visual components, such as basic shapes,
|
||||
UI controls, and 3D components, and add functionality to the project.
|
||||
All components have a type.
|
||||
|
||||
The UI controls can be styled to have the look and feel of a particular
|
||||
operating system, such as \macOS, Windows, Android, or iOS.
|
||||
@@ -110,4 +111,24 @@
|
||||
or \uicontrol {Form Editor}, components with a suitable type are
|
||||
automatically created for you. For example, components of the
|
||||
\l{Images}{Image} type will be created for graphics files.
|
||||
|
||||
\section1 Context Menu Commands
|
||||
|
||||
\image qtquick-library-context-menu.png "Context menu commands in Library"
|
||||
\image qtquick-library-context-menu-hide.png "Context menu command Hide Category"
|
||||
|
||||
To use the context menu commands in Library, right-click on the name of
|
||||
a module or category and select one of the following commands:
|
||||
|
||||
\list
|
||||
\li \uicontrol {Remove Module}: removes the component module added to
|
||||
\uicontrol Library.
|
||||
\li \uicontrol {Expand All}: expands all the modules.
|
||||
\li \uicontrol {Collapse All}: collapses all the modules.
|
||||
\li \uicontrol {Hide Category}: hides the category from the module.
|
||||
\li \uicontrol {Show Module Hidden Categories}: shows the hidden
|
||||
categories of the module.
|
||||
\li \uicontrol {Show All Hidden Categories}: shows the hidden
|
||||
categories in all of the modules.
|
||||
\endlist
|
||||
*/
|
||||
|
@@ -78,7 +78,7 @@
|
||||
\list
|
||||
\li \l{Creating Components}{Library}
|
||||
\li \l{Component Types}{Preset Components}
|
||||
\li \l{Adding Components to Designs}{My Components}
|
||||
\li \l{Creating Component Instances}{My Components}
|
||||
\endlist
|
||||
|
||||
\section1 Device
|
||||
|
@@ -32,6 +32,7 @@ from __future__ import print_function
|
||||
|
||||
import argparse
|
||||
import collections
|
||||
import glob
|
||||
import os
|
||||
|
||||
import common
|
||||
@@ -63,20 +64,24 @@ def get_arguments():
|
||||
args.with_debug_info = args.build_type == 'RelWithDebInfo'
|
||||
return args
|
||||
|
||||
def qtcreator_prefix_path(qt_creator_path):
|
||||
# on macOS the prefix path must be inside the app bundle, but we want to allow
|
||||
# simpler values for --qtc-path, so search in some variants of that
|
||||
candidates = [qt_creator_path, os.path.join(qt_creator_path, 'Contents', 'Resources')]
|
||||
candidates += [os.path.join(path, 'Contents', 'Resources')
|
||||
for path in glob.glob(os.path.join(qt_creator_path, '*.app'))]
|
||||
for path in candidates:
|
||||
if os.path.exists(os.path.join(path, 'lib', 'cmake')):
|
||||
return [path]
|
||||
return [qt_creator_path]
|
||||
|
||||
def build(args, paths):
|
||||
if not os.path.exists(paths.build):
|
||||
os.makedirs(paths.build)
|
||||
if not os.path.exists(paths.result):
|
||||
os.makedirs(paths.result)
|
||||
prefix_paths = [os.path.abspath(fp) for fp in args.prefix_paths] + [paths.qt_creator, paths.qt]
|
||||
if common.is_mac_platform():
|
||||
# --qtc-path may be
|
||||
# "/path/Qt Creator.app/Contents/Resources",
|
||||
# "/path/Qt Creator.app", or
|
||||
# "/path",
|
||||
# so add some variants to the prefix path
|
||||
prefix_paths += [os.path.join(paths.qt_creator, 'Contents', 'Resources'),
|
||||
os.path.join(paths.qt_creator, 'Qt Creator.app', 'Contents', 'Resources')]
|
||||
prefix_paths = [os.path.abspath(fp) for fp in args.prefix_paths] + [paths.qt]
|
||||
prefix_paths += qtcreator_prefix_path(paths.qt_creator)
|
||||
prefix_paths = [common.to_posix_path(fp) for fp in prefix_paths]
|
||||
separate_debug_info_option = 'ON' if args.with_debug_info else 'OFF'
|
||||
cmake_args = ['cmake',
|
||||
|
@@ -1782,7 +1782,7 @@ class DumperBase():
|
||||
def metaString(self, metaObjectPtr, index, revision):
|
||||
ptrSize = self.ptrSize()
|
||||
stringdataOffset = ptrSize
|
||||
if self.isWindowsTarget():
|
||||
if self.isWindowsTarget() and self.qtVersion() >= 0x060000:
|
||||
stringdataOffset += ptrSize # indirect super data member
|
||||
stringdata = self.extractPointer(toInteger(metaObjectPtr) + stringdataOffset)
|
||||
|
||||
|
@@ -27,6 +27,8 @@
|
||||
|
||||
#include <QDataStream>
|
||||
|
||||
#include <vector>
|
||||
|
||||
namespace ClangBackEnd {
|
||||
|
||||
class ProjectPartId
|
||||
|
@@ -54,6 +54,7 @@ public:
|
||||
#endif
|
||||
bool m_backgroundCheckered;
|
||||
bool m_alphaAllowed;
|
||||
bool m_dialogOpen;
|
||||
};
|
||||
|
||||
void QtColorButtonPrivate::slotEditColor()
|
||||
@@ -61,9 +62,14 @@ void QtColorButtonPrivate::slotEditColor()
|
||||
QColorDialog::ColorDialogOptions options;
|
||||
if (m_alphaAllowed)
|
||||
options |= QColorDialog::ShowAlphaChannel;
|
||||
emit q_ptr->colorChangeStarted();
|
||||
m_dialogOpen = true;
|
||||
const QColor newColor = QColorDialog::getColor(m_color, q_ptr, QString(), options);
|
||||
if (!newColor.isValid() || newColor == q_ptr->color())
|
||||
m_dialogOpen = false;
|
||||
if (!newColor.isValid() || newColor == q_ptr->color()) {
|
||||
emit q_ptr->colorUnchanged();
|
||||
return;
|
||||
}
|
||||
q_ptr->setColor(newColor);
|
||||
emit q_ptr->colorChanged(m_color);
|
||||
}
|
||||
@@ -117,6 +123,7 @@ QtColorButton::QtColorButton(QWidget *parent)
|
||||
d_ptr->m_dragging = false;
|
||||
d_ptr->m_backgroundCheckered = true;
|
||||
d_ptr->m_alphaAllowed = true;
|
||||
d_ptr->m_dialogOpen = false;
|
||||
|
||||
setAcceptDrops(true);
|
||||
|
||||
@@ -165,6 +172,11 @@ bool QtColorButton::isAlphaAllowed() const
|
||||
return d_ptr->m_alphaAllowed;
|
||||
}
|
||||
|
||||
bool QtColorButton::isDialogOpen() const
|
||||
{
|
||||
return d_ptr->m_dialogOpen;
|
||||
}
|
||||
|
||||
void QtColorButton::paintEvent(QPaintEvent *event)
|
||||
{
|
||||
QToolButton::paintEvent(event);
|
||||
|
@@ -49,11 +49,16 @@ public:
|
||||
|
||||
QColor color() const;
|
||||
|
||||
bool isDialogOpen() const;
|
||||
|
||||
public slots:
|
||||
void setColor(const QColor &color);
|
||||
|
||||
signals:
|
||||
void colorChangeStarted();
|
||||
void colorChanged(const QColor &color);
|
||||
void colorUnchanged();
|
||||
|
||||
protected:
|
||||
void paintEvent(QPaintEvent *event) override;
|
||||
void mousePressEvent(QMouseEvent *event) override;
|
||||
@@ -63,7 +68,7 @@ protected:
|
||||
void dragLeaveEvent(QDragLeaveEvent *event) override;
|
||||
void dropEvent(QDropEvent *event) override;
|
||||
#endif
|
||||
private:
|
||||
|
||||
class QtColorButtonPrivate *d_ptr;
|
||||
friend class QtColorButtonPrivate;
|
||||
};
|
||||
|
@@ -388,6 +388,25 @@ void Project::setExtraProjectFiles(const QSet<Utils::FilePath> &projectDocumentP
|
||||
}
|
||||
}
|
||||
|
||||
void Project::updateExtraProjectFiles(const QSet<Utils::FilePath> &projectDocumentPaths,
|
||||
const DocUpdater &docUpdater)
|
||||
{
|
||||
for (const Utils::FilePath &fp : projectDocumentPaths) {
|
||||
for (const auto &doc : d->m_extraProjectDocuments) {
|
||||
if (doc->filePath() == fp) {
|
||||
docUpdater(doc.get());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Project::updateExtraProjectFiles(const DocUpdater &docUpdater)
|
||||
{
|
||||
for (const auto &doc : qAsConst(d->m_extraProjectDocuments))
|
||||
docUpdater(doc.get());
|
||||
}
|
||||
|
||||
Target *Project::target(Utils::Id id) const
|
||||
{
|
||||
return Utils::findOrDefault(d->m_targets, Utils::equal(&Target::id, id));
|
||||
|
@@ -169,6 +169,9 @@ public:
|
||||
void setExtraProjectFiles(const QSet<Utils::FilePath> &projectDocumentPaths,
|
||||
const DocGenerator &docGenerator = {},
|
||||
const DocUpdater &docUpdater = {});
|
||||
void updateExtraProjectFiles(const QSet<Utils::FilePath> &projectDocumentPaths,
|
||||
const DocUpdater &docUpdater);
|
||||
void updateExtraProjectFiles(const DocUpdater &docUpdater);
|
||||
|
||||
void setDisplayName(const QString &name);
|
||||
void setProjectLanguage(Utils::Id id, bool enabled);
|
||||
|
@@ -122,7 +122,8 @@ public:
|
||||
Q_UNUSED(errorString)
|
||||
Q_UNUSED(flag)
|
||||
Q_UNUSED(type)
|
||||
m_priFile->scheduleUpdate();
|
||||
if (m_priFile)
|
||||
m_priFile->scheduleUpdate();
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -692,7 +693,26 @@ void QmakeBuildSystem::asyncUpdate()
|
||||
return;
|
||||
}
|
||||
|
||||
// Make sure we ignore requests for re-evaluation for files whose QmakePriFile objects
|
||||
// will get deleted during the parse.
|
||||
const auto docUpdater = [](Core::IDocument *doc) {
|
||||
static_cast<QmakePriFileDocument *>(doc)->setPriFile(nullptr);
|
||||
};
|
||||
if (m_asyncUpdateState != AsyncFullUpdatePending) {
|
||||
QSet<FilePath> projectFilePaths;
|
||||
for (QmakeProFile * const file : qAsConst(m_partialEvaluate)) {
|
||||
QVector<QmakePriFile *> priFiles = file->children();
|
||||
for (int i = 0; i < priFiles.count(); ++i) {
|
||||
const QmakePriFile * const priFile = priFiles.at(i);
|
||||
projectFilePaths << priFile->filePath();
|
||||
priFiles << priFile->children();
|
||||
}
|
||||
}
|
||||
project()->updateExtraProjectFiles(projectFilePaths, docUpdater);
|
||||
}
|
||||
|
||||
if (m_asyncUpdateState == AsyncFullUpdatePending) {
|
||||
project()->updateExtraProjectFiles(docUpdater);
|
||||
rootProFile()->asyncUpdate();
|
||||
} else {
|
||||
foreach (QmakeProFile *file, m_partialEvaluate)
|
||||
|
@@ -187,12 +187,46 @@ void CommentValueDelegate::setEditorData(QWidget *editor, const QModelIndex &ind
|
||||
auto *e = qobject_cast<QLineEdit *>(editor);
|
||||
e->setText(data.toString());
|
||||
} else if (data.userType() == QMetaType::QColor) {
|
||||
auto *e = qobject_cast<Utils::QtColorButton *>(editor);
|
||||
auto *e = qobject_cast<AnnotationTableColorButton *>(editor);
|
||||
e->setColor(data.value<QColor>());
|
||||
e->installEventFilter(e);
|
||||
connect(e,
|
||||
&AnnotationTableColorButton::editorFinished,
|
||||
this,
|
||||
&CommentValueDelegate::slotEditorFinished,
|
||||
Qt::UniqueConnection);
|
||||
connect(e,
|
||||
&AnnotationTableColorButton::editorCanceled,
|
||||
this,
|
||||
&CommentValueDelegate::slotEditorCanceled,
|
||||
Qt::UniqueConnection);
|
||||
} else
|
||||
QItemDelegate::setEditorData(editor, index);
|
||||
}
|
||||
|
||||
bool AnnotationTableColorButton::eventFilter(QObject *object, QEvent *event)
|
||||
{
|
||||
AnnotationTableColorButton *editor = qobject_cast<AnnotationTableColorButton*>(object);
|
||||
if (editor && event->type() == QEvent::FocusOut && editor->isDialogOpen())
|
||||
return true;
|
||||
|
||||
return QObject::eventFilter(object, event);
|
||||
}
|
||||
|
||||
void CommentValueDelegate::slotEditorCanceled(QWidget *editor)
|
||||
{
|
||||
emit closeEditor(editor);
|
||||
}
|
||||
|
||||
void CommentValueDelegate::slotEditorFinished(QWidget *editor)
|
||||
{
|
||||
AnnotationTableColorButton* e = qobject_cast<AnnotationTableColorButton *>(editor);
|
||||
if (e) {
|
||||
emit commitData(editor);
|
||||
emit closeEditor(editor, QAbstractItemDelegate::SubmitModelCache);
|
||||
}
|
||||
}
|
||||
|
||||
void CommentValueDelegate::setModelData(QWidget *editor,
|
||||
QAbstractItemModel *model,
|
||||
const QModelIndex &index) const
|
||||
@@ -201,9 +235,11 @@ void CommentValueDelegate::setModelData(QWidget *editor,
|
||||
if (data.userType() == qMetaTypeId<RichTextProxy>())
|
||||
return;
|
||||
else if (data.userType() == QMetaType::QColor)
|
||||
{
|
||||
model->setData(index,
|
||||
qobject_cast<Utils::QtColorButton *>(editor)->color(),
|
||||
qobject_cast<AnnotationTableColorButton *>(editor)->color(),
|
||||
Qt::DisplayRole);
|
||||
}
|
||||
else if (data.userType() == QMetaType::QString)
|
||||
model->setData(index, qobject_cast<QLineEdit *>(editor)->text(), Qt::DisplayRole);
|
||||
else
|
||||
@@ -247,6 +283,16 @@ void RichTextCellEditor::mouseReleaseEvent(QMouseEvent *)
|
||||
emit clicked();
|
||||
}
|
||||
|
||||
AnnotationTableColorButton::AnnotationTableColorButton(QWidget *parent)
|
||||
: Utils::QtColorButton(parent)
|
||||
{
|
||||
connect(this, &Utils::QtColorButton::colorChangeStarted, this, [this](){emit editorStarted(this);});
|
||||
connect(this, &Utils::QtColorButton::colorChanged, this, [this](QColor){emit editorFinished(this);});
|
||||
connect(this, &Utils::QtColorButton::colorUnchanged, this, [this](){emit editorCanceled(this);});
|
||||
}
|
||||
|
||||
AnnotationTableColorButton::~AnnotationTableColorButton() {}
|
||||
|
||||
AnnotationTableView::AnnotationTableView(QWidget *parent)
|
||||
: QTableView(parent)
|
||||
, m_model(std::make_unique<QStandardItemModel>())
|
||||
@@ -283,7 +329,7 @@ AnnotationTableView::AnnotationTableView(QWidget *parent)
|
||||
m_editorFactory->registerEditor(qMetaTypeId<RichTextProxy>(),
|
||||
new QItemEditorCreator<RichTextCellEditor>("richText"));
|
||||
m_editorFactory->registerEditor(QMetaType::QColor,
|
||||
new QItemEditorCreator<Utils::QtColorButton>("color"));
|
||||
new QItemEditorCreator<AnnotationTableColorButton>("color"));
|
||||
|
||||
m_valueDelegate.setItemEditorFactory(m_editorFactory.get());
|
||||
connect(&m_valueDelegate,
|
||||
|
@@ -33,12 +33,15 @@
|
||||
#include "annotation.h"
|
||||
#include "defaultannotations.h"
|
||||
|
||||
#include <utils/qtcolorbutton.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
class QStandardItemModel;
|
||||
class QCompleter;
|
||||
QT_END_NAMESPACE
|
||||
|
||||
namespace QmlDesigner {
|
||||
|
||||
class CommentDelegate : public QItemDelegate
|
||||
{
|
||||
Q_OBJECT
|
||||
@@ -98,6 +101,11 @@ public:
|
||||
void setModelData(QWidget *editor,
|
||||
QAbstractItemModel *model,
|
||||
const QModelIndex &index) const override;
|
||||
|
||||
public slots:
|
||||
void slotEditorFinished(QWidget* editor);
|
||||
void slotEditorCanceled(QWidget* editor);
|
||||
|
||||
signals:
|
||||
void richTextEditorRequested(int index, QString const &richText);
|
||||
};
|
||||
@@ -129,6 +137,21 @@ private:
|
||||
QMetaObject::Connection m_connection;
|
||||
};
|
||||
|
||||
class AnnotationTableColorButton : public Utils::QtColorButton
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
AnnotationTableColorButton(QWidget* parent);
|
||||
~AnnotationTableColorButton();
|
||||
|
||||
bool eventFilter(QObject *object, QEvent *event) override;
|
||||
|
||||
signals:
|
||||
void editorStarted(QWidget* editor);
|
||||
void editorFinished(QWidget* editor);
|
||||
void editorCanceled(QWidget* editor);
|
||||
};
|
||||
|
||||
class AnnotationTableView : public QTableView
|
||||
{
|
||||
Q_OBJECT
|
||||
|
@@ -292,7 +292,7 @@ void ItemLibraryWidget::handleAddImport(int index)
|
||||
}
|
||||
|
||||
m_model->changeImports({import}, {});
|
||||
QmlDesignerPlugin::instance()->currentDesignDocument()->updateSubcomponentManager();
|
||||
|
||||
m_stackedWidget->setCurrentIndex(0); // switch to the Components view after import is added
|
||||
updateSearch();
|
||||
}
|
||||
|
@@ -3669,7 +3669,7 @@ void TextEditorWidgetPrivate::highlightSearchResults(const QTextBlock &block, co
|
||||
QString text = block.text();
|
||||
text.replace(QChar::Nbsp, QLatin1Char(' '));
|
||||
int idx = -1;
|
||||
int l = 1;
|
||||
int l = 0;
|
||||
|
||||
const int left = data.viewportRect.left() - int(data.offset.x());
|
||||
const int right = data.viewportRect.right() - int(data.offset.x());
|
||||
|