forked from qt-creator/qt-creator
bigger conflicts resolved at: src/plugins/qmldesigner/CMakeLists.txt src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp Change-Id: I08e2a109d8e37cbd77225129854e9e633725bfc7
157 lines
5.0 KiB
QML
157 lines
5.0 KiB
QML
// Copyright (C) 2022 The Qt Company Ltd.
|
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
|
|
|
import QtQuick 2.15
|
|
import QtQuick.Layouts 1.15
|
|
import QtQuickDesignerTheme 1.0
|
|
import HelperWidgets 2.0
|
|
import StudioTheme 1.0 as StudioTheme
|
|
import MaterialBrowserBackend
|
|
|
|
Rectangle {
|
|
id: root
|
|
|
|
signal showContextMenu()
|
|
|
|
function refreshPreview()
|
|
{
|
|
img.source = ""
|
|
img.source = "image://materialBrowser/" + materialInternalId
|
|
}
|
|
|
|
function startRename()
|
|
{
|
|
matName.readOnly = false
|
|
matName.selectAll()
|
|
matName.forceActiveFocus()
|
|
matName.ensureVisible(matName.text.length)
|
|
nameMouseArea.enabled = false
|
|
}
|
|
|
|
function commitRename()
|
|
{
|
|
if (matName.readOnly)
|
|
return;
|
|
|
|
MaterialBrowserBackend.materialBrowserModel.renameMaterial(index, matName.text);
|
|
mouseArea.forceActiveFocus()
|
|
}
|
|
|
|
border.width: MaterialBrowserBackend.materialBrowserModel.selectedIndex === index ? MaterialBrowserBackend.rootView.materialSectionFocused ? 3 : 1 : 0
|
|
border.color: MaterialBrowserBackend.materialBrowserModel.selectedIndex === index
|
|
? StudioTheme.Values.themeControlOutlineInteraction
|
|
: "transparent"
|
|
color: "transparent"
|
|
visible: materialVisible
|
|
|
|
DropArea {
|
|
anchors.fill: parent
|
|
|
|
onEntered: (drag) => {
|
|
drag.accepted = drag.formats[0] === "application/vnd.qtdesignstudio.texture"
|
|
|| drag.formats[0] === "application/vnd.qtdesignstudio.bundletexture"
|
|
|| (drag.formats[0] === "application/vnd.qtdesignstudio.assets"
|
|
&& rootView.hasAcceptableAssets(drag.urls))
|
|
}
|
|
|
|
onDropped: (drag) => {
|
|
drag.accept()
|
|
|
|
if (drag.formats[0] === "application/vnd.qtdesignstudio.texture")
|
|
MaterialBrowserBackend.rootView.acceptTextureDropOnMaterial(index, drag.getDataAsString(drag.keys[0]))
|
|
else if (drag.formats[0] === "application/vnd.qtdesignstudio.bundletexture")
|
|
MaterialBrowserBackend.rootView.acceptBundleTextureDropOnMaterial(index, drag.urls[0])
|
|
else if (drag.formats[0] === "application/vnd.qtdesignstudio.assets")
|
|
MaterialBrowserBackend.rootView.acceptAssetsDropOnMaterial(index, drag.urls)
|
|
}
|
|
}
|
|
|
|
MouseArea {
|
|
id: mouseArea
|
|
|
|
anchors.fill: parent
|
|
acceptedButtons: Qt.LeftButton | Qt.RightButton
|
|
|
|
onPressed: (mouse) => {
|
|
MaterialBrowserBackend.materialBrowserModel.selectMaterial(index)
|
|
MaterialBrowserBackend.rootView.focusMaterialSection(true)
|
|
|
|
if (mouse.button === Qt.LeftButton)
|
|
MaterialBrowserBackend.rootView.startDragMaterial(index, mapToGlobal(mouse.x, mouse.y))
|
|
else if (mouse.button === Qt.RightButton)
|
|
root.showContextMenu()
|
|
}
|
|
|
|
onDoubleClicked: MaterialBrowserBackend.materialBrowserModel.openMaterialEditor();
|
|
}
|
|
|
|
Column {
|
|
anchors.fill: parent
|
|
spacing: 1
|
|
|
|
Item { width: 1; height: 5 } // spacer
|
|
|
|
Image {
|
|
id: img
|
|
|
|
width: root.width - 10
|
|
height: img.width
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
source: "image://materialBrowser/" + materialInternalId
|
|
cache: false
|
|
}
|
|
|
|
// Eat keys so they are not passed to parent while editing name
|
|
Keys.onPressed: (e) => {
|
|
e.accepted = true;
|
|
}
|
|
|
|
TextInput {
|
|
id: matName
|
|
|
|
text: materialName
|
|
|
|
width: img.width
|
|
clip: true
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
horizontalAlignment: TextInput.AlignHCenter
|
|
|
|
font.pixelSize: StudioTheme.Values.myFontSize
|
|
|
|
readOnly: true
|
|
selectByMouse: !matName.readOnly
|
|
|
|
color: StudioTheme.Values.themeTextColor
|
|
selectionColor: StudioTheme.Values.themeTextSelectionColor
|
|
selectedTextColor: StudioTheme.Values.themeTextSelectedTextColor
|
|
|
|
// allow only alphanumeric characters, underscores, no space at start, and 1 space between words
|
|
validator: RegExpValidator { regExp: /^(\w+\s)*\w+$/ }
|
|
|
|
onEditingFinished: root.commitRename()
|
|
|
|
onActiveFocusChanged: {
|
|
if (!activeFocus) {
|
|
matName.readOnly = true
|
|
nameMouseArea.enabled = true
|
|
ensureVisible(0)
|
|
}
|
|
}
|
|
|
|
Component.onCompleted: ensureVisible(0)
|
|
|
|
MouseArea {
|
|
id: nameMouseArea
|
|
|
|
anchors.fill: parent
|
|
|
|
onClicked: {
|
|
MaterialBrowserBackend.materialBrowserModel.selectMaterial(index)
|
|
MaterialBrowserBackend.rootView.focusMaterialSection(true)
|
|
}
|
|
onDoubleClicked: root.startRename()
|
|
}
|
|
}
|
|
}
|
|
}
|