forked from qt-creator/qt-creator
Merge "Merge commit '029f926bcfcbb01' (origin/8.0) into 9.0" into 9.0
This commit is contained in:
91
dist/changes-8.0.2.md
vendored
Normal file
91
dist/changes-8.0.2.md
vendored
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
Qt Creator 8.0.2
|
||||||
|
================
|
||||||
|
|
||||||
|
Qt Creator version 8.0.2 contains bug fixes.
|
||||||
|
|
||||||
|
The most important changes are listed in this document. For a complete list of
|
||||||
|
changes, see the Git log for the Qt Creator sources that you can check out from
|
||||||
|
the public Git repository. For example:
|
||||||
|
|
||||||
|
git clone git://code.qt.io/qt-creator/qt-creator.git
|
||||||
|
git log --cherry-pick --pretty=oneline origin/v8.0.1..v8.0.2
|
||||||
|
|
||||||
|
Editing
|
||||||
|
-------
|
||||||
|
|
||||||
|
* Fixed importing color schemes
|
||||||
|
* Fixed moving text between editors by drag & drop (QTCREATORBUG-28125,
|
||||||
|
QTCREATORBUG-28126)
|
||||||
|
* Fixed that the default font could be blurry (QTCREATORBUG-28106,
|
||||||
|
QTCREATORBUG-28139)
|
||||||
|
|
||||||
|
### C++
|
||||||
|
|
||||||
|
* Re-added non-Clangd version of `Extract Function` (QTCREATORBUG-28030)
|
||||||
|
|
||||||
|
### Language Client
|
||||||
|
|
||||||
|
* Fixed issues after resetting server (QTCREATORBUG-27596)
|
||||||
|
|
||||||
|
### SCXML
|
||||||
|
|
||||||
|
* Fixed crash when closing document (QTCREATORBUG-28027)
|
||||||
|
|
||||||
|
Version Control
|
||||||
|
---------------
|
||||||
|
|
||||||
|
* Fixed handling of `\r` in tool output (QTCREATORBUG-27615)
|
||||||
|
|
||||||
|
Test Integration
|
||||||
|
----------------
|
||||||
|
|
||||||
|
* GTest
|
||||||
|
* Fixed running selected tests (QTCREATORBUG-28153)
|
||||||
|
* Catch2
|
||||||
|
* Fixed crash when running tests (QTCREATORBUG-28269)
|
||||||
|
|
||||||
|
Platforms
|
||||||
|
---------
|
||||||
|
|
||||||
|
### Android
|
||||||
|
|
||||||
|
* Fixed deployment in release mode (QTCREATORBUG-28163)
|
||||||
|
|
||||||
|
### Remote Linux
|
||||||
|
|
||||||
|
* Fixed issue with deployment (QTCREATORBUG-28167)
|
||||||
|
* Fixed key deployment on Windows (QTCREATORBUG-28092)
|
||||||
|
* Fixed killing remote processes (QTCREATORBUG-28072)
|
||||||
|
|
||||||
|
Credits for these changes go to:
|
||||||
|
--------------------------------
|
||||||
|
Aleksei German
|
||||||
|
Ali Kianian
|
||||||
|
André Pönitz
|
||||||
|
Antti Määttä
|
||||||
|
Brook Cronin
|
||||||
|
Christian Kandeler
|
||||||
|
Christian Stenger
|
||||||
|
Cristian Adam
|
||||||
|
David Schulz
|
||||||
|
Eike Ziller
|
||||||
|
Fawzi Mohamed
|
||||||
|
Henning Gruendl
|
||||||
|
Ivan Komissarov
|
||||||
|
Jaroslaw Kobus
|
||||||
|
Knud Dollereder
|
||||||
|
Leena Miettinen
|
||||||
|
Mahmoud Badri
|
||||||
|
Marco Bubke
|
||||||
|
Marcus Tillmanns
|
||||||
|
Mats Honkamaa
|
||||||
|
Miikka Heikkinen
|
||||||
|
Petri Virkkunen
|
||||||
|
Pranta Dastider
|
||||||
|
Robert Löhning
|
||||||
|
Samuel Ghinet
|
||||||
|
Sivert Krøvel
|
||||||
|
Sona Kurazyan
|
||||||
|
Thomas Hartmann
|
||||||
|
Tim Jenssen
|
||||||
|
Vikas Pachdha
|
@@ -11,8 +11,8 @@
|
|||||||
\QDS provides a set of 3D effects, which are visible in the \l {2D} view.
|
\QDS provides a set of 3D effects, which are visible in the \l {2D} view.
|
||||||
To apply a visual effect to a scene, drag-and-drop an effect from
|
To apply a visual effect to a scene, drag-and-drop an effect from
|
||||||
\uicontrol Components > \uicontrol {Qt Quick 3D} >
|
\uicontrol Components > \uicontrol {Qt Quick 3D} >
|
||||||
\uicontrol {Qt Quick 3D Effects} to a \uicontrol View3D component in
|
\uicontrol {Qt Quick 3D Effects} to a \uicontrol SceneEnvironment component
|
||||||
\l Navigator.
|
in \l Navigator.
|
||||||
|
|
||||||
You can use the \l Effect component available in \uicontrol Components >
|
You can use the \l Effect component available in \uicontrol Components >
|
||||||
\uicontrol {Qt Quick 3D} > \uicontrol {Qt Quick 3D} as the base
|
\uicontrol {Qt Quick 3D} > \uicontrol {Qt Quick 3D} as the base
|
||||||
|
@@ -2,7 +2,6 @@
|
|||||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0 WITH Qt-GPL-exception-1.0
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0 WITH Qt-GPL-exception-1.0
|
||||||
|
|
||||||
import QtQuick 2.15
|
import QtQuick 2.15
|
||||||
import QtQuick.Layouts 1.15
|
|
||||||
import QtQuickDesignerTheme 1.0
|
import QtQuickDesignerTheme 1.0
|
||||||
import HelperWidgets 2.0
|
import HelperWidgets 2.0
|
||||||
import StudioControls 1.0 as StudioControls
|
import StudioControls 1.0 as StudioControls
|
||||||
@@ -14,12 +13,7 @@ Item {
|
|||||||
readonly property int cellWidth: 100
|
readonly property int cellWidth: 100
|
||||||
readonly property int cellHeight: 120
|
readonly property int cellHeight: 120
|
||||||
|
|
||||||
property var currentMaterial: null
|
property var currMaterialItem: null
|
||||||
property int currentMaterialIdx: 0
|
|
||||||
property var currentBundleMaterial: null
|
|
||||||
property int copiedMaterialInternalId: -1
|
|
||||||
|
|
||||||
property var matSectionsModel: []
|
|
||||||
|
|
||||||
// Called also from C++ to close context menu on focus out
|
// Called also from C++ to close context menu on focus out
|
||||||
function closeContextMenu()
|
function closeContextMenu()
|
||||||
@@ -54,10 +48,9 @@ Item {
|
|||||||
var userMatsSecBottom = mapFromItem(userMaterialsSection, 0, userMaterialsSection.y).y
|
var userMatsSecBottom = mapFromItem(userMaterialsSection, 0, userMaterialsSection.y).y
|
||||||
+ userMaterialsSection.height;
|
+ userMaterialsSection.height;
|
||||||
|
|
||||||
if (!materialBrowserModel.hasMaterialRoot && (!materialBrowserBundleModel.matBundleExists
|
if (!materialBrowserModel.hasMaterialRoot && materialBrowserModel.hasQuick3DImport
|
||||||
|| mouse.y < userMatsSecBottom)) {
|
&& (!materialBrowserBundleModel.matBundleExists || mouse.y < userMatsSecBottom)) {
|
||||||
root.currentMaterial = null
|
ctxMenu.popupMenu()
|
||||||
ctxMenu.popup()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -67,11 +60,23 @@ Item {
|
|||||||
|
|
||||||
function onSelectedIndexChanged() {
|
function onSelectedIndexChanged() {
|
||||||
// commit rename upon changing selection
|
// commit rename upon changing selection
|
||||||
var item = gridRepeater.itemAt(currentMaterialIdx);
|
if (root.currMaterialItem)
|
||||||
if (item)
|
root.currMaterialItem.commitRename();
|
||||||
item.commitRename();
|
|
||||||
|
|
||||||
currentMaterialIdx = materialBrowserModel.selectedIndex;
|
root.currMaterialItem = gridRepeater.itemAt(materialBrowserModel.selectedIndex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
MaterialBrowserContextMenu {
|
||||||
|
id: ctxMenu
|
||||||
|
}
|
||||||
|
|
||||||
|
MaterialBundleContextMenu {
|
||||||
|
id: ctxMenuBundle
|
||||||
|
|
||||||
|
onUnimport: (bundleMat) => {
|
||||||
|
unimportBundleMaterialDialog.targetBundleMaterial = bundleMat
|
||||||
|
unimportBundleMaterialDialog.open()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -79,152 +84,6 @@ Item {
|
|||||||
id: unimportBundleMaterialDialog
|
id: unimportBundleMaterialDialog
|
||||||
}
|
}
|
||||||
|
|
||||||
StudioControls.Menu {
|
|
||||||
id: ctxMenu
|
|
||||||
|
|
||||||
closePolicy: StudioControls.Menu.CloseOnEscape | StudioControls.Menu.CloseOnPressOutside
|
|
||||||
|
|
||||||
StudioControls.MenuItem {
|
|
||||||
text: qsTr("Apply to selected (replace)")
|
|
||||||
enabled: root.currentMaterial && materialBrowserModel.hasModelSelection
|
|
||||||
onTriggered: materialBrowserModel.applyToSelected(root.currentMaterial.materialInternalId, false)
|
|
||||||
}
|
|
||||||
|
|
||||||
StudioControls.MenuItem {
|
|
||||||
text: qsTr("Apply to selected (add)")
|
|
||||||
enabled: root.currentMaterial && materialBrowserModel.hasModelSelection
|
|
||||||
onTriggered: materialBrowserModel.applyToSelected(root.currentMaterial.materialInternalId, true)
|
|
||||||
}
|
|
||||||
|
|
||||||
StudioControls.MenuSeparator {
|
|
||||||
height: StudioTheme.Values.border
|
|
||||||
}
|
|
||||||
|
|
||||||
StudioControls.Menu {
|
|
||||||
title: qsTr("Copy properties")
|
|
||||||
enabled: root.currentMaterial
|
|
||||||
|
|
||||||
width: parent.width
|
|
||||||
|
|
||||||
onAboutToShow: {
|
|
||||||
if (root.currentMaterial.hasDynamicProperties)
|
|
||||||
root.matSectionsModel = ["All", "Custom"];
|
|
||||||
else
|
|
||||||
root.matSectionsModel = ["All"];
|
|
||||||
|
|
||||||
switch (root.currentMaterial.materialType) {
|
|
||||||
case "DefaultMaterial":
|
|
||||||
root.matSectionsModel = root.matSectionsModel.concat(materialBrowserModel.defaultMaterialSections);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "PrincipledMaterial":
|
|
||||||
root.matSectionsModel = root.matSectionsModel.concat(materialBrowserModel.principledMaterialSections);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "CustomMaterial":
|
|
||||||
root.matSectionsModel = root.matSectionsModel.concat(materialBrowserModel.customMaterialSections);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Repeater {
|
|
||||||
model: root.matSectionsModel
|
|
||||||
|
|
||||||
StudioControls.MenuItem {
|
|
||||||
text: modelData
|
|
||||||
enabled: root.currentMaterial
|
|
||||||
onTriggered: {
|
|
||||||
root.copiedMaterialInternalId = root.currentMaterial.materialInternalId
|
|
||||||
materialBrowserModel.copyMaterialProperties(root.currentMaterialIdx, modelData)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
StudioControls.MenuItem {
|
|
||||||
text: qsTr("Paste properties")
|
|
||||||
enabled: root.currentMaterial
|
|
||||||
&& root.copiedMaterialInternalId !== root.currentMaterial.materialInternalId
|
|
||||||
&& root.currentMaterial.materialType === materialBrowserModel.copiedMaterialType
|
|
||||||
&& materialBrowserModel.isCopiedMaterialValid()
|
|
||||||
onTriggered: materialBrowserModel.pasteMaterialProperties(root.currentMaterialIdx)
|
|
||||||
}
|
|
||||||
|
|
||||||
StudioControls.MenuSeparator {
|
|
||||||
height: StudioTheme.Values.border
|
|
||||||
}
|
|
||||||
|
|
||||||
StudioControls.MenuItem {
|
|
||||||
text: qsTr("Duplicate")
|
|
||||||
enabled: root.currentMaterial
|
|
||||||
onTriggered: materialBrowserModel.duplicateMaterial(root.currentMaterialIdx)
|
|
||||||
}
|
|
||||||
|
|
||||||
StudioControls.MenuItem {
|
|
||||||
text: qsTr("Rename")
|
|
||||||
enabled: root.currentMaterial
|
|
||||||
onTriggered: {
|
|
||||||
var item = gridRepeater.itemAt(root.currentMaterialIdx);
|
|
||||||
if (item)
|
|
||||||
item.startRename();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
StudioControls.MenuItem {
|
|
||||||
text: qsTr("Delete")
|
|
||||||
enabled: root.currentMaterial
|
|
||||||
|
|
||||||
onTriggered: materialBrowserModel.deleteMaterial(root.currentMaterialIdx)
|
|
||||||
}
|
|
||||||
|
|
||||||
StudioControls.MenuSeparator {}
|
|
||||||
|
|
||||||
StudioControls.MenuItem {
|
|
||||||
text: qsTr("Create New Material")
|
|
||||||
|
|
||||||
onTriggered: materialBrowserModel.addNewMaterial()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
StudioControls.Menu {
|
|
||||||
id: ctxMenuBundle
|
|
||||||
|
|
||||||
closePolicy: StudioControls.Menu.CloseOnEscape | StudioControls.Menu.CloseOnPressOutside
|
|
||||||
|
|
||||||
StudioControls.MenuItem {
|
|
||||||
text: qsTr("Apply to selected (replace)")
|
|
||||||
enabled: root.currentBundleMaterial && materialBrowserModel.hasModelSelection
|
|
||||||
onTriggered: materialBrowserBundleModel.applyToSelected(root.currentBundleMaterial, false)
|
|
||||||
}
|
|
||||||
|
|
||||||
StudioControls.MenuItem {
|
|
||||||
text: qsTr("Apply to selected (add)")
|
|
||||||
enabled: root.currentBundleMaterial && materialBrowserModel.hasModelSelection
|
|
||||||
onTriggered: materialBrowserBundleModel.applyToSelected(root.currentBundleMaterial, true)
|
|
||||||
}
|
|
||||||
|
|
||||||
StudioControls.MenuSeparator {}
|
|
||||||
|
|
||||||
StudioControls.MenuItem {
|
|
||||||
enabled: !materialBrowserBundleModel.importerRunning
|
|
||||||
text: qsTr("Add an instance to project")
|
|
||||||
|
|
||||||
onTriggered: {
|
|
||||||
materialBrowserBundleModel.addToProject(root.currentBundleMaterial)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
StudioControls.MenuItem {
|
|
||||||
enabled: !materialBrowserBundleModel.importerRunning && root.currentBundleMaterial.bundleMaterialImported
|
|
||||||
text: qsTr("Remove from project")
|
|
||||||
|
|
||||||
onTriggered: {
|
|
||||||
unimportBundleMaterialDialog.targetBundleMaterial = root.currentBundleMaterial
|
|
||||||
unimportBundleMaterialDialog.open()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Column {
|
Column {
|
||||||
id: col
|
id: col
|
||||||
y: 5
|
y: 5
|
||||||
@@ -266,6 +125,7 @@ Item {
|
|||||||
anchors.verticalCenter: parent.verticalCenter
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
buttonSize: searchBox.height
|
buttonSize: searchBox.height
|
||||||
onClicked: materialBrowserModel.addNewMaterial()
|
onClicked: materialBrowserModel.addNewMaterial()
|
||||||
|
enabled: materialBrowserModel.hasQuick3DImport
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -324,8 +184,7 @@ Item {
|
|||||||
height: root.cellHeight
|
height: root.cellHeight
|
||||||
|
|
||||||
onShowContextMenu: {
|
onShowContextMenu: {
|
||||||
root.currentMaterial = model
|
ctxMenu.popupMenu(this, model)
|
||||||
ctxMenu.popup()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -387,8 +246,7 @@ Item {
|
|||||||
height: root.cellHeight
|
height: root.cellHeight
|
||||||
|
|
||||||
onShowContextMenu: {
|
onShowContextMenu: {
|
||||||
root.currentBundleMaterial = modelData
|
ctxMenuBundle.popupMenu(modelData)
|
||||||
ctxMenuBundle.popup()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,140 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2022 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator.
|
||||||
|
**
|
||||||
|
** 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 General Public License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
|
** General Public License version 3 as published by the Free Software
|
||||||
|
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
|
||||||
|
** included in the packaging of this file. Please review the following
|
||||||
|
** information to ensure the GNU General Public License requirements will
|
||||||
|
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
import QtQuick
|
||||||
|
import HelperWidgets
|
||||||
|
import StudioControls as StudioControls
|
||||||
|
import StudioTheme as StudioTheme
|
||||||
|
|
||||||
|
StudioControls.Menu {
|
||||||
|
id: root
|
||||||
|
|
||||||
|
property var targetMaterial: null
|
||||||
|
property var targetItem: null
|
||||||
|
property int copiedMaterialInternalId: -1
|
||||||
|
property var matSectionsModel: []
|
||||||
|
|
||||||
|
function popupMenu(targetItem = null, targetMaterial = null)
|
||||||
|
{
|
||||||
|
this.targetItem = targetItem
|
||||||
|
this.targetMaterial = targetMaterial
|
||||||
|
popup()
|
||||||
|
}
|
||||||
|
|
||||||
|
closePolicy: StudioControls.Menu.CloseOnEscape | StudioControls.Menu.CloseOnPressOutside
|
||||||
|
|
||||||
|
StudioControls.MenuItem {
|
||||||
|
text: qsTr("Apply to selected (replace)")
|
||||||
|
enabled: root.targetMaterial && materialBrowserModel.hasModelSelection
|
||||||
|
onTriggered: materialBrowserModel.applyToSelected(root.targetMaterial.materialInternalId, false)
|
||||||
|
}
|
||||||
|
|
||||||
|
StudioControls.MenuItem {
|
||||||
|
text: qsTr("Apply to selected (add)")
|
||||||
|
enabled: root.targetMaterial && materialBrowserModel.hasModelSelection
|
||||||
|
onTriggered: materialBrowserModel.applyToSelected(root.targetMaterial.materialInternalId, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
StudioControls.MenuSeparator {}
|
||||||
|
|
||||||
|
StudioControls.Menu {
|
||||||
|
title: qsTr("Copy properties")
|
||||||
|
enabled: root.targetMaterial
|
||||||
|
|
||||||
|
width: parent.width
|
||||||
|
|
||||||
|
onAboutToShow: {
|
||||||
|
if (root.targetMaterial.hasDynamicProperties)
|
||||||
|
root.matSectionsModel = ["All", "Custom"];
|
||||||
|
else
|
||||||
|
root.matSectionsModel = ["All"];
|
||||||
|
|
||||||
|
switch (root.targetMaterial.materialType) {
|
||||||
|
case "DefaultMaterial":
|
||||||
|
root.matSectionsModel = root.matSectionsModel.concat(materialBrowserModel.defaultMaterialSections);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "PrincipledMaterial":
|
||||||
|
root.matSectionsModel = root.matSectionsModel.concat(materialBrowserModel.principledMaterialSections);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "CustomMaterial":
|
||||||
|
root.matSectionsModel = root.matSectionsModel.concat(materialBrowserModel.customMaterialSections);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Repeater {
|
||||||
|
model: root.matSectionsModel
|
||||||
|
|
||||||
|
StudioControls.MenuItem {
|
||||||
|
text: modelData
|
||||||
|
enabled: root.targetMaterial
|
||||||
|
onTriggered: {
|
||||||
|
root.copiedMaterialInternalId = root.targetMaterial.materialInternalId
|
||||||
|
materialBrowserModel.copyMaterialProperties(materialBrowserModel.selectedIndex, modelData)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
StudioControls.MenuItem {
|
||||||
|
text: qsTr("Paste properties")
|
||||||
|
enabled: root.targetMaterial
|
||||||
|
&& root.copiedMaterialInternalId !== root.targetMaterial.materialInternalId
|
||||||
|
&& root.targetMaterial.materialType === materialBrowserModel.copiedMaterialType
|
||||||
|
&& materialBrowserModel.isCopiedMaterialValid()
|
||||||
|
onTriggered: materialBrowserModel.pasteMaterialProperties(materialBrowserModel.selectedIndex)
|
||||||
|
}
|
||||||
|
|
||||||
|
StudioControls.MenuSeparator {}
|
||||||
|
|
||||||
|
StudioControls.MenuItem {
|
||||||
|
text: qsTr("Duplicate")
|
||||||
|
enabled: root.targetMaterial
|
||||||
|
onTriggered: materialBrowserModel.duplicateMaterial(materialBrowserModel.selectedIndex)
|
||||||
|
}
|
||||||
|
|
||||||
|
StudioControls.MenuItem {
|
||||||
|
text: qsTr("Rename")
|
||||||
|
enabled: root.targetItem
|
||||||
|
onTriggered: root.targetItem.startRename();
|
||||||
|
}
|
||||||
|
|
||||||
|
StudioControls.MenuItem {
|
||||||
|
text: qsTr("Delete")
|
||||||
|
enabled: root.targetMaterial
|
||||||
|
|
||||||
|
onTriggered: materialBrowserModel.deleteMaterial(materialBrowserModel.selectedIndex)
|
||||||
|
}
|
||||||
|
|
||||||
|
StudioControls.MenuSeparator {}
|
||||||
|
|
||||||
|
StudioControls.MenuItem {
|
||||||
|
text: qsTr("Create New Material")
|
||||||
|
|
||||||
|
onTriggered: materialBrowserModel.addNewMaterial()
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,74 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2022 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator.
|
||||||
|
**
|
||||||
|
** 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 General Public License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
|
** General Public License version 3 as published by the Free Software
|
||||||
|
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
|
||||||
|
** included in the packaging of this file. Please review the following
|
||||||
|
** information to ensure the GNU General Public License requirements will
|
||||||
|
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
import QtQuick 2.15
|
||||||
|
import HelperWidgets 2.0
|
||||||
|
import StudioControls 1.0 as StudioControls
|
||||||
|
import StudioTheme 1.0 as StudioTheme
|
||||||
|
|
||||||
|
StudioControls.Menu {
|
||||||
|
id: root
|
||||||
|
|
||||||
|
property var targetMaterial: null
|
||||||
|
signal unimport(var bundleMat);
|
||||||
|
|
||||||
|
function popupMenu(targetMaterial = null)
|
||||||
|
{
|
||||||
|
this.targetMaterial = targetMaterial
|
||||||
|
popup()
|
||||||
|
}
|
||||||
|
|
||||||
|
closePolicy: StudioControls.Menu.CloseOnEscape | StudioControls.Menu.CloseOnPressOutside
|
||||||
|
|
||||||
|
StudioControls.MenuItem {
|
||||||
|
text: qsTr("Apply to selected (replace)")
|
||||||
|
enabled: root.targetMaterial && materialBrowserModel.hasModelSelection
|
||||||
|
onTriggered: materialBrowserBundleModel.applyToSelected(root.targetMaterial, false)
|
||||||
|
}
|
||||||
|
|
||||||
|
StudioControls.MenuItem {
|
||||||
|
text: qsTr("Apply to selected (add)")
|
||||||
|
enabled: root.targetMaterial && materialBrowserModel.hasModelSelection
|
||||||
|
onTriggered: materialBrowserBundleModel.applyToSelected(root.targetMaterial, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
StudioControls.MenuSeparator {}
|
||||||
|
|
||||||
|
StudioControls.MenuItem {
|
||||||
|
enabled: !materialBrowserBundleModel.importerRunning
|
||||||
|
text: qsTr("Add an instance to project")
|
||||||
|
|
||||||
|
onTriggered: {
|
||||||
|
materialBrowserBundleModel.addToProject(root.targetMaterial)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
StudioControls.MenuItem {
|
||||||
|
enabled: !materialBrowserBundleModel.importerRunning && root.targetMaterial.bundleMaterialImported
|
||||||
|
text: qsTr("Remove from project")
|
||||||
|
|
||||||
|
onTriggered: root.unimport(root.targetMaterial);
|
||||||
|
}
|
||||||
|
}
|
@@ -1500,68 +1500,6 @@ QString getTemplateDialog(const Utils::FilePath &projectPath)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void styleMerge(const SelectionContext &selectionContext, const QString &templateFile)
|
|
||||||
{
|
|
||||||
Model *parentModel = selectionContext.view()->model();
|
|
||||||
|
|
||||||
QTC_ASSERT(parentModel, return);
|
|
||||||
|
|
||||||
auto templateModel(Model::create("QtQuick.Item", 2, 1, parentModel));
|
|
||||||
Q_ASSERT(templateModel.get());
|
|
||||||
|
|
||||||
templateModel->setFileUrl(QUrl::fromLocalFile(templateFile));
|
|
||||||
|
|
||||||
QPlainTextEdit textEditTemplate;
|
|
||||||
Utils::FileReader reader;
|
|
||||||
|
|
||||||
QTC_ASSERT(reader.fetch(Utils::FilePath::fromString(templateFile)), return);
|
|
||||||
QString qmlTemplateString = QString::fromUtf8(reader.data());
|
|
||||||
QString imports;
|
|
||||||
|
|
||||||
for (const Import &import : parentModel->imports())
|
|
||||||
imports += QStringLiteral("import ") + import.toString(true) + QLatin1Char(';') + QLatin1Char('\n');
|
|
||||||
|
|
||||||
textEditTemplate.setPlainText(imports + qmlTemplateString);
|
|
||||||
NotIndentingTextEditModifier textModifierTemplate(&textEditTemplate);
|
|
||||||
|
|
||||||
QScopedPointer<RewriterView> templateRewriterView(new RewriterView(RewriterView::Amend));
|
|
||||||
templateRewriterView->setTextModifier(&textModifierTemplate);
|
|
||||||
templateModel->attachView(templateRewriterView.data());
|
|
||||||
templateRewriterView->setCheckSemanticErrors(false);
|
|
||||||
|
|
||||||
ModelNode templateRootNode = templateRewriterView->rootModelNode();
|
|
||||||
QTC_ASSERT(templateRootNode.isValid(), return);
|
|
||||||
|
|
||||||
auto styleModel(Model::create("QtQuick.Item", 2, 1, parentModel));
|
|
||||||
Q_ASSERT(styleModel.get());
|
|
||||||
|
|
||||||
styleModel->setFileUrl(QUrl::fromLocalFile(templateFile));
|
|
||||||
|
|
||||||
QPlainTextEdit textEditStyle;
|
|
||||||
RewriterView *parentRewriterView = selectionContext.view()->model()->rewriterView();
|
|
||||||
QTC_ASSERT(parentRewriterView, return);
|
|
||||||
textEditStyle.setPlainText(parentRewriterView->textModifierContent());
|
|
||||||
NotIndentingTextEditModifier textModifierStyle(&textEditStyle);
|
|
||||||
|
|
||||||
QScopedPointer<RewriterView> styleRewriterView(new RewriterView(RewriterView::Amend));
|
|
||||||
styleRewriterView->setTextModifier(&textModifierStyle);
|
|
||||||
styleModel->attachView(styleRewriterView.data());
|
|
||||||
|
|
||||||
StylesheetMerger merger(templateRewriterView.data(), styleRewriterView.data());
|
|
||||||
|
|
||||||
try {
|
|
||||||
merger.merge();
|
|
||||||
} catch (Exception &e) {
|
|
||||||
e.showException();
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
parentRewriterView->textModifier()->textDocument()->setPlainText(templateRewriterView->textModifierContent());
|
|
||||||
} catch (Exception &e) {
|
|
||||||
e.showException();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void mergeWithTemplate(const SelectionContext &selectionContext)
|
void mergeWithTemplate(const SelectionContext &selectionContext)
|
||||||
{
|
{
|
||||||
const Utils::FilePath projectPath = Utils::FilePath::fromString(baseDirectory(selectionContext.view()->model()->fileUrl()));
|
const Utils::FilePath projectPath = Utils::FilePath::fromString(baseDirectory(selectionContext.view()->model()->fileUrl()));
|
||||||
@@ -1569,7 +1507,7 @@ void mergeWithTemplate(const SelectionContext &selectionContext)
|
|||||||
const QString templateFile = getTemplateDialog(projectPath);
|
const QString templateFile = getTemplateDialog(projectPath);
|
||||||
|
|
||||||
if (QFileInfo::exists(templateFile))
|
if (QFileInfo::exists(templateFile))
|
||||||
styleMerge(selectionContext, templateFile);
|
StylesheetMerger::styleMerge(selectionContext.view()->model(), templateFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
void removeGroup(const SelectionContext &selectionContext)
|
void removeGroup(const SelectionContext &selectionContext)
|
||||||
|
@@ -139,10 +139,18 @@ Edit3DWidget::Edit3DWidget(Edit3DView *view)
|
|||||||
m_onboardingLabel = new QLabel(this);
|
m_onboardingLabel = new QLabel(this);
|
||||||
QString labelText =
|
QString labelText =
|
||||||
tr("Your file does not import Qt Quick 3D.<br><br>"
|
tr("Your file does not import Qt Quick 3D.<br><br>"
|
||||||
"To create a 3D view, add the QtQuick3D module in the Library view. Or click"
|
"To create a 3D view, add the"
|
||||||
|
" <b>QtQuick3D</b>"
|
||||||
|
" module in the"
|
||||||
|
" <b>Components</b>"
|
||||||
|
" view or click"
|
||||||
" <a href=\"#add_import\"><span style=\"text-decoration:none;color:%1\">here</span></a>"
|
" <a href=\"#add_import\"><span style=\"text-decoration:none;color:%1\">here</span></a>"
|
||||||
"to add it immediately.<br><br>"
|
".<br><br>"
|
||||||
"To import 3D assets from another tool, click the \"Add New Assets...\" button in the Assets tab of the Library view.");
|
"To import 3D assets, select"
|
||||||
|
" <b>+</b>"
|
||||||
|
" in the"
|
||||||
|
" <b>Assets</b>"
|
||||||
|
" view.");
|
||||||
m_onboardingLabel->setText(labelText.arg(Utils::creatorTheme()->color(Utils::Theme::TextColorLink).name()));
|
m_onboardingLabel->setText(labelText.arg(Utils::creatorTheme()->color(Utils::Theme::TextColorLink).name()));
|
||||||
m_onboardingLabel->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
m_onboardingLabel->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
||||||
connect(m_onboardingLabel, &QLabel::linkActivated, this, &Edit3DWidget::linkActivated);
|
connect(m_onboardingLabel, &QLabel::linkActivated, this, &Edit3DWidget::linkActivated);
|
||||||
|
@@ -26,6 +26,8 @@ class QMLDESIGNERCORE_EXPORT StylesheetMerger
|
|||||||
public:
|
public:
|
||||||
StylesheetMerger(AbstractView*, AbstractView*);
|
StylesheetMerger(AbstractView*, AbstractView*);
|
||||||
void merge();
|
void merge();
|
||||||
|
static void styleMerge(Model *model, const QString &templateFile);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void preprocessStyleSheet();
|
void preprocessStyleSheet();
|
||||||
bool idExistsInBothModels(const QString& id);
|
bool idExistsInBothModels(const QString& id);
|
||||||
|
@@ -785,6 +785,8 @@ NodeMetaInfoPrivate::NodeMetaInfoPrivate(Model *model, TypeName type, int maj, i
|
|||||||
if (importInfo.type() == ImportType::Library) {
|
if (importInfo.type() == ImportType::Library) {
|
||||||
m_majorVersion = importInfo.version().majorVersion();
|
m_majorVersion = importInfo.version().majorVersion();
|
||||||
m_minorVersion = importInfo.version().minorVersion();
|
m_minorVersion = importInfo.version().minorVersion();
|
||||||
|
} else {
|
||||||
|
m_isFileComponent = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_qualfiedTypeName = getUnqualifiedName(m_qualfiedTypeName);
|
m_qualfiedTypeName = getUnqualifiedName(m_qualfiedTypeName);
|
||||||
@@ -793,6 +795,8 @@ NodeMetaInfoPrivate::NodeMetaInfoPrivate(Model *model, TypeName type, int maj, i
|
|||||||
|| importInfo.type() == ImportType::Directory);
|
|| importInfo.type() == ImportType::Directory);
|
||||||
if (prepandName)
|
if (prepandName)
|
||||||
m_qualfiedTypeName.prepend(importInfo.name().toUtf8() + '.');
|
m_qualfiedTypeName.prepend(importInfo.name().toUtf8() + '.');
|
||||||
|
|
||||||
|
m_qualfiedTypeName.replace("/", ".");
|
||||||
}
|
}
|
||||||
|
|
||||||
m_objectValue = getObjectValue();
|
m_objectValue = getObjectValue();
|
||||||
|
@@ -703,10 +703,15 @@ void ModelPrivate::setAuxiliaryData(const InternalNodePointer &node,
|
|||||||
|
|
||||||
void ModelPrivate::resetModelByRewriter(const QString &description)
|
void ModelPrivate::resetModelByRewriter(const QString &description)
|
||||||
{
|
{
|
||||||
if (rewriterView())
|
if (rewriterView()) {
|
||||||
rewriterView()->resetToLastCorrectQml();
|
rewriterView()->resetToLastCorrectQml();
|
||||||
|
|
||||||
throw RewritingException(__LINE__, __FUNCTION__, __FILE__, description.toUtf8(), rewriterView()->textModifierContent());
|
throw RewritingException(__LINE__,
|
||||||
|
__FUNCTION__,
|
||||||
|
__FILE__,
|
||||||
|
description.toUtf8(),
|
||||||
|
rewriterView()->textModifierContent());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ModelPrivate::attachView(AbstractView *view)
|
void ModelPrivate::attachView(AbstractView *view)
|
||||||
|
@@ -12,8 +12,14 @@
|
|||||||
#include <nodelistproperty.h>
|
#include <nodelistproperty.h>
|
||||||
#include <nodemetainfo.h>
|
#include <nodemetainfo.h>
|
||||||
#include <nodeproperty.h>
|
#include <nodeproperty.h>
|
||||||
|
#include <plaintexteditmodifier.h>
|
||||||
|
#include <rewriterview.h>
|
||||||
#include <variantproperty.h>
|
#include <variantproperty.h>
|
||||||
|
|
||||||
|
#include <utils/fileutils.h>
|
||||||
|
#include <utils/qtcassert.h>
|
||||||
|
|
||||||
|
#include <QPlainTextEdit>
|
||||||
#include <QQueue>
|
#include <QQueue>
|
||||||
#include <QRegularExpression>
|
#include <QRegularExpression>
|
||||||
|
|
||||||
@@ -508,4 +514,69 @@ void StylesheetMerger::merge()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void StylesheetMerger::styleMerge(Model *model, const QString &templateFile)
|
||||||
|
{
|
||||||
|
Model *parentModel = model;
|
||||||
|
|
||||||
|
QTC_ASSERT(parentModel, return);
|
||||||
|
|
||||||
|
auto templateModel(Model::create("QtQuick.Item", 2, 1, parentModel));
|
||||||
|
Q_ASSERT(templateModel.get());
|
||||||
|
|
||||||
|
templateModel->setFileUrl(parentModel->fileUrl());
|
||||||
|
|
||||||
|
QPlainTextEdit textEditTemplate;
|
||||||
|
Utils::FileReader reader;
|
||||||
|
|
||||||
|
QTC_ASSERT(reader.fetch(Utils::FilePath::fromString(templateFile)), return);
|
||||||
|
QString qmlTemplateString = QString::fromUtf8(reader.data());
|
||||||
|
QString imports;
|
||||||
|
|
||||||
|
for (const Import &import : parentModel->imports()) {
|
||||||
|
imports += QStringLiteral("import ") + import.toString(true) + QLatin1Char(';')
|
||||||
|
+ QLatin1Char('\n');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
textEditTemplate.setPlainText(imports + qmlTemplateString);
|
||||||
|
NotIndentingTextEditModifier textModifierTemplate(&textEditTemplate);
|
||||||
|
|
||||||
|
QScopedPointer<RewriterView> templateRewriterView(new RewriterView(RewriterView::Amend));
|
||||||
|
templateRewriterView->setTextModifier(&textModifierTemplate);
|
||||||
|
templateModel->attachView(templateRewriterView.data());
|
||||||
|
templateRewriterView->setCheckSemanticErrors(false);
|
||||||
|
|
||||||
|
ModelNode templateRootNode = templateRewriterView->rootModelNode();
|
||||||
|
QTC_ASSERT(templateRootNode.isValid(), return);
|
||||||
|
|
||||||
|
auto styleModel(Model::create("QtQuick.Item", 2, 1, parentModel));
|
||||||
|
Q_ASSERT(styleModel.get());
|
||||||
|
|
||||||
|
styleModel->setFileUrl(parentModel->fileUrl());
|
||||||
|
|
||||||
|
QPlainTextEdit textEditStyle;
|
||||||
|
RewriterView *parentRewriterView = parentModel->rewriterView();
|
||||||
|
QTC_ASSERT(parentRewriterView, return);
|
||||||
|
textEditStyle.setPlainText(parentRewriterView->textModifierContent());
|
||||||
|
NotIndentingTextEditModifier textModifierStyle(&textEditStyle);
|
||||||
|
|
||||||
|
QScopedPointer<RewriterView> styleRewriterView(new RewriterView(RewriterView::Amend));
|
||||||
|
styleRewriterView->setTextModifier(&textModifierStyle);
|
||||||
|
styleModel->attachView(styleRewriterView.data());
|
||||||
|
|
||||||
|
StylesheetMerger merger(templateRewriterView.data(), styleRewriterView.data());
|
||||||
|
|
||||||
|
try {
|
||||||
|
merger.merge();
|
||||||
|
} catch (Exception &e) {
|
||||||
|
e.showException();
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
parentRewriterView->textModifier()->textDocument()->setPlainText(
|
||||||
|
templateRewriterView->textModifierContent());
|
||||||
|
} catch (Exception &e) {
|
||||||
|
e.showException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} // namespace QmlDesigner
|
||||||
|
@@ -510,7 +510,7 @@ public:
|
|||||||
if (metaInfo.isValid())
|
if (metaInfo.isValid())
|
||||||
qDebug() << metaInfo.superClasses().front().typeName();
|
qDebug() << metaInfo.superClasses().front().typeName();
|
||||||
|
|
||||||
if (!typeName.startsWith("...") && m_model == m_model->metaInfoProxyModel()
|
if (!metaInfo.isFileComponent() && m_model == m_model->metaInfoProxyModel()
|
||||||
&& metaInfo.isValid())
|
&& metaInfo.isValid())
|
||||||
throw RewritingException(__LINE__, __FUNCTION__, __FILE__, "test", "test");
|
throw RewritingException(__LINE__, __FUNCTION__, __FILE__, "test", "test");
|
||||||
}
|
}
|
||||||
@@ -1355,6 +1355,7 @@ void TextToModelMerger::syncNode(ModelNode &modelNode,
|
|||||||
}
|
}
|
||||||
|
|
||||||
syncSignalDeclarationProperty(modelProperty, signature, differenceHandler);
|
syncSignalDeclarationProperty(modelProperty, signature, differenceHandler);
|
||||||
|
modelPropertyNames.remove(astName.toUtf8());
|
||||||
continue; // Done
|
continue; // Done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -163,7 +163,7 @@ public:
|
|||||||
ImageCacheCollector collector{connectionManager,
|
ImageCacheCollector collector{connectionManager,
|
||||||
QSize{300, 300},
|
QSize{300, 300},
|
||||||
QSize{1000, 1000},
|
QSize{1000, 1000},
|
||||||
ImageCacheCollectorNullImageHandling::DontCaptureNullImage};
|
ImageCacheCollectorNullImageHandling::CaptureNullImage};
|
||||||
PreviewTimeStampProvider timeStampProvider;
|
PreviewTimeStampProvider timeStampProvider;
|
||||||
AsynchronousImageFactory factory;
|
AsynchronousImageFactory factory;
|
||||||
ProjectStorageData projectStorageData;
|
ProjectStorageData projectStorageData;
|
||||||
@@ -193,6 +193,11 @@ QmlDesignerProjectManager::QmlDesignerProjectManager()
|
|||||||
QObject::connect(sessionManager,
|
QObject::connect(sessionManager,
|
||||||
&::ProjectExplorer::SessionManager::projectRemoved,
|
&::ProjectExplorer::SessionManager::projectRemoved,
|
||||||
[&](auto *project) { projectRemoved(project); });
|
[&](auto *project) { projectRemoved(project); });
|
||||||
|
|
||||||
|
QObject::connect(&m_previewTimer,
|
||||||
|
&QTimer::timeout,
|
||||||
|
this,
|
||||||
|
&QmlDesignerProjectManager::generatePreview);
|
||||||
}
|
}
|
||||||
|
|
||||||
QmlDesignerProjectManager::~QmlDesignerProjectManager() = default;
|
QmlDesignerProjectManager::~QmlDesignerProjectManager() = default;
|
||||||
@@ -222,13 +227,7 @@ void QmlDesignerProjectManager::currentEditorChanged(::Core::IEditor *)
|
|||||||
if (!m_projectData || !m_projectData->activeTarget)
|
if (!m_projectData || !m_projectData->activeTarget)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
::QmlProjectManager::QmlBuildSystem *qmlBuildSystem = getQmlBuildSystem(
|
m_previewTimer.start(10000);
|
||||||
m_projectData->activeTarget);
|
|
||||||
|
|
||||||
if (qmlBuildSystem) {
|
|
||||||
m_previewImageCacheData->collector.setTarget(m_projectData->activeTarget);
|
|
||||||
m_previewImageCacheData->factory.generate(qmlBuildSystem->mainFilePath().toString().toUtf8());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void QmlDesignerProjectManager::editorsClosed(const QList<::Core::IEditor *> &) {}
|
void QmlDesignerProjectManager::editorsClosed(const QList<::Core::IEditor *> &) {}
|
||||||
@@ -382,6 +381,20 @@ void QmlDesignerProjectManager::aboutToRemoveProject(::ProjectExplorer::Project
|
|||||||
|
|
||||||
void QmlDesignerProjectManager::projectRemoved(::ProjectExplorer::Project *) {}
|
void QmlDesignerProjectManager::projectRemoved(::ProjectExplorer::Project *) {}
|
||||||
|
|
||||||
|
void QmlDesignerProjectManager::generatePreview()
|
||||||
|
{
|
||||||
|
if (!m_projectData || !m_projectData->activeTarget)
|
||||||
|
return;
|
||||||
|
|
||||||
|
::QmlProjectManager::QmlBuildSystem *qmlBuildSystem = getQmlBuildSystem(
|
||||||
|
m_projectData->activeTarget);
|
||||||
|
|
||||||
|
if (qmlBuildSystem) {
|
||||||
|
m_previewImageCacheData->collector.setTarget(m_projectData->activeTarget);
|
||||||
|
m_previewImageCacheData->factory.generate(qmlBuildSystem->mainFilePath().toString().toUtf8());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
QmlDesignerProjectManager::ImageCacheData *QmlDesignerProjectManager::imageCacheData()
|
QmlDesignerProjectManager::ImageCacheData *QmlDesignerProjectManager::imageCacheData()
|
||||||
{
|
{
|
||||||
std::call_once(imageCacheFlag, [this]() {
|
std::call_once(imageCacheFlag, [this]() {
|
||||||
|
@@ -7,6 +7,7 @@
|
|||||||
|
|
||||||
#include <QList>
|
#include <QList>
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
#include <QTimer>
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
@@ -48,6 +49,7 @@ private:
|
|||||||
void projectAdded(::ProjectExplorer::Project *project);
|
void projectAdded(::ProjectExplorer::Project *project);
|
||||||
void aboutToRemoveProject(::ProjectExplorer::Project *project);
|
void aboutToRemoveProject(::ProjectExplorer::Project *project);
|
||||||
void projectRemoved(::ProjectExplorer::Project *project);
|
void projectRemoved(::ProjectExplorer::Project *project);
|
||||||
|
void generatePreview();
|
||||||
ImageCacheData *imageCacheData();
|
ImageCacheData *imageCacheData();
|
||||||
|
|
||||||
void fileListChanged();
|
void fileListChanged();
|
||||||
@@ -64,5 +66,6 @@ private:
|
|||||||
std::unique_ptr<ImageCacheData> m_imageCacheData;
|
std::unique_ptr<ImageCacheData> m_imageCacheData;
|
||||||
std::unique_ptr<PreviewImageCacheData> m_previewImageCacheData;
|
std::unique_ptr<PreviewImageCacheData> m_previewImageCacheData;
|
||||||
std::unique_ptr<QmlDesignerProjectManagerProjectData> m_projectData;
|
std::unique_ptr<QmlDesignerProjectManagerProjectData> m_projectData;
|
||||||
|
QTimer m_previewTimer;
|
||||||
};
|
};
|
||||||
} // namespace QmlDesigner
|
} // namespace QmlDesigner
|
||||||
|
Reference in New Issue
Block a user