summaryrefslogtreecommitdiff
path: root/share/qtcreator/qmldesigner/materialBrowserQmlSource/MaterialBrowserContextMenu.qml
blob: f72d21b35b659857b4f16cc3a581233df20e395b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
// 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
import HelperWidgets
import StudioControls as StudioControls
import StudioTheme as StudioTheme
import MaterialBrowserBackend

StudioControls.Menu {
    id: root

    property var targetMaterial: null
    property var targetItem: null
    property int copiedMaterialInternalId: -1
    property var matSectionsModel: []
    property bool restoreFocusOnClose: true

    property var materialBrowserModel: MaterialBrowserBackend.materialBrowserModel

    function popupMenu(targetItem = null, targetMaterial = null)
    {
        this.targetItem = targetItem
        this.targetMaterial = targetMaterial
        restoreFocusOnClose = true
        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 "SpecularGlossyMaterial":
                root.matSectionsModel = root.matSectionsModel.concat(materialBrowserModel.specularGlossyMaterialSections);
                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: {
            restoreFocusOnClose = false
            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()
    }
}