[ModelContextMenu] Use Instantiator instead of Repeater-and-reparent-hack

Differential Revision: https://phabricator.kde.org/D5215
This commit is contained in:
Kai Uwe Broulik 2017-03-29 12:11:02 +02:00
parent 5ae0651045
commit 8d42e0072f

View File

@ -1,5 +1,6 @@
/* /*
* Copyright 2014 David Edmundson <davidedmundson@kde.org> * Copyright 2014 David Edmundson <davidedmundson@kde.org>
* Copyright 2017 Kai Uwe Broulik <kde@privat.broulik.de>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Library General Public License as * it under the terms of the GNU Library General Public License as
@ -20,6 +21,7 @@
import org.kde.plasma.components 2.0 as PlasmaComponents import org.kde.plasma.components 2.0 as PlasmaComponents
import QtQuick 2.1 import QtQuick 2.1
import QtQml 2.0
/** /**
* A ModelMenu creates a context menu with items populated from a model or a QList<QAction*> * A ModelMenu creates a context menu with items populated from a model or a QList<QAction*>
@ -52,7 +54,7 @@ PlasmaComponents.ContextMenu {
/** /**
* The model containing menu items * The model containing menu items
*/ */
property alias model: repeater.model property alias model: instantiator.model
/** /**
* This signal is emitted when a menu item is clicked. * This signal is emitted when a menu item is clicked.
@ -62,24 +64,22 @@ PlasmaComponents.ContextMenu {
//ContextMenu cannot have child items, so in order to have ContextMenu as the root object of this item //ContextMenu cannot have child items, so in order to have ContextMenu as the root object of this item
//we create a new property which contains an item which can then load the child items //we create a new property which contains an item which can then load the child items
property Item _children : Item { property Instantiator _children: Instantiator {
Repeater { id: instantiator
id: repeater delegate: PlasmaComponents.MenuItem {
delegate: PlasmaComponents.MenuItem { //for QList<QAction*> Repeater adds an attached property modelData
//for QList<QAction*> Repeater adds an attached property modelData //for QAbstractItemModel* it doesn't. Not checking causes errors
//for QAbstractItemModel* it doesn't. Not checking causes errors text: typeof(modelData) != "undefined" ? modelData.text : model.display
text: typeof(modelData) != "undefined" ? modelData.text : model.display icon: typeof(modelData) != "undefined" ? modelData.icon : model.decoration
icon: typeof(modelData) != "undefined" ? modelData.icon : model.decoration separator: typeof(modelData) != "undefined" ? modelData.separator : model.separator === true
separator: typeof(modelData) != "undefined" ? modelData.separator : model.separator === true section: typeof(modelData) != "undefined" ? modelData.section : model.section === true
section: typeof(modelData) != "undefined" ? modelData.section : model.section === true onClicked: {
onClicked: { menu.clicked(typeof(modelData) != "undefined" ? modelData : model)
menu.clicked(typeof(modelData) != "undefined" ? modelData : model)
}
Component.onCompleted: {
parent = menu
}
} }
} }
onObjectAdded: menu.addMenuItem(object)
onObjectRemoved: menu.removeMenuItem(object)
} }
Accessible.role: Accessible.PopupMenu Accessible.role: Accessible.PopupMenu
} }