diff --git a/applet/contents/ui/ListItemBase.qml b/applet/contents/ui/ListItemBase.qml --- a/applet/contents/ui/ListItemBase.qml +++ b/applet/contents/ui/ListItemBase.qml @@ -122,13 +122,33 @@ ColumnLayout { id: column - PlasmaExtras.Heading { - id :textLabel - Layout.fillWidth: true - level: 5 - opacity: 0.6 - wrapMode: Text.NoWrap - elide: Text.ElideRight + RowLayout { + PlasmaExtras.Heading { + id: textLabel + Layout.fillWidth: true + level: 5 + opacity: 0.6 + wrapMode: Text.NoWrap + elide: Text.ElideRight + } + + PlasmaCore.IconItem { + source: "application-menu" + Layout.maximumHeight: parent.height * 0.85 + Layout.maximumWidth: Layout.maximumHeight + + MouseArea { + anchors.fill: parent + acceptedButtons: Qt.LeftButton + hoverEnabled: true + onClicked: contextMenu.show(parent.x, parent.y + parent.height) + onEntered: parent.opacity = 0.8 + onExited: parent.opacity = 1 + onReleased: parent.opacity = 1 + onCanceled: parent.opacity = 1 + } + } + } RowLayout { @@ -223,4 +243,80 @@ } } } + + PlasmaComponents.ContextMenu { + id: contextMenu + + function newSeperator() { + return Qt.createQmlObject("import org.kde.plasma.components 2.0 as PlasmaComponents; PlasmaComponents.MenuItem { separator: true }", contextMenu); + } + function newMenuItem() { + return Qt.createQmlObject("import org.kde.plasma.components 2.0 as PlasmaComponents; PlasmaComponents.MenuItem {}", contextMenu); + } + + function loadDynamicActions() { + contextMenu.clearMenuItems(); + + // Mute + var menuItem = newMenuItem(); + menuItem.text = i18n("Mute"); + menuItem.checkable = true; + menuItem.checked = PulseObject.muted; + menuItem.clicked.connect(function() { + PulseObject.muted = !PulseObject.muted + }); + contextMenu.addMenuItem(menuItem); + + // Default + if (typeof PulseObject.default === "boolean") { + var menuItem = newMenuItem(); + menuItem.text = i18n("Default"); + menuItem.checkable = true; + menuItem.checked = PulseObject.default + menuItem.clicked.connect(function() { + PulseObject.default = true + }); + contextMenu.addMenuItem(menuItem); + } + + // Ports + if (PulseObject.ports && 0 < PulseObject.ports.length) { + contextMenu.addMenuItem(newSeperator()); + + var isMultiplePorts = (1 < PulseObject.ports.length); + var menuItem = newMenuItem(); + menuItem.text = i18n("Ports"); + menuItem.enabled = false; + contextMenu.addMenuItem(menuItem); + + for (var i = 0; i < PulseObject.ports.length; i++) { + var port = PulseObject.ports[i]; + var menuItem = newMenuItem(); + menuItem.text = port.description; + menuItem.enabled = isMultiplePorts; + menuItem.checkable = true; + menuItem.checked = i === PulseObject.activePortIndex; + var setActivePort = function(portIndex) { + return function() { + PulseObject.activePortIndex = portIndex; + }; + }; + menuItem.clicked.connect(setActivePort(i)); + contextMenu.addMenuItem(menuItem); + } + } + } + + function show(x, y) { + loadDynamicActions(); + open(x, y); + } + } + + MouseArea { + acceptedButtons: Qt.RightButton + anchors.fill: parent + + onClicked: contextMenu.show(mouse.x, mouse.y); + } }