diff --git a/kcmkwin/kwincompositing/qml/Effect.qml b/kcmkwin/kwincompositing/qml/Effect.qml index 4b03832d5..752e9a788 100644 --- a/kcmkwin/kwincompositing/qml/Effect.qml +++ b/kcmkwin/kwincompositing/qml/Effect.qml @@ -1,170 +1,166 @@ /************************************************************************** * KWin - the KDE window manager * * This file is part of the KDE project. * * * * Copyright (C) 2013 Antonis Tsiapaliokas * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ import QtQuick 2.1 import QtQuick.Controls 1.1 import QtQuick.Controls 2.0 as QQC2 import QtQuick.Layouts 1.0 import org.kde.kwin.kwincompositing 1.0 Rectangle { id: item width: parent.width height: rowEffect.implicitHeight - color: item.ListView.isCurrentItem ? effectView.backgroundActiveColor : index % 2 ? effectView.backgroundNormalColor : effectView.backgroundAlternateColor + color: index % 2 ? effectView.backgroundNormalColor : effectView.backgroundAlternateColor signal changed() property int checkedState: model.EffectStatusRole - MouseArea { - anchors.fill: parent - onClicked: { - effectView.currentIndex = index; - } - } - RowLayout { id: rowEffect property int maximumWidth: parent.width - 2 * spacing width: maximumWidth Layout.maximumWidth: maximumWidth x: spacing RowLayout { id: checkBoxLayout RadioButton { id: exclusiveGroupButton property bool exclusive: model.ExclusiveRole != "" visible: exclusive checked: model.EffectStatusRole property bool actuallyChanged: true property bool initiallyChecked: false exclusiveGroup: exclusive ? effectView.exclusiveGroupForCategory(model.ExclusiveRole) : null onCheckedChanged: { if (!visible) { return; } actuallyChanged = true; item.checkedState = exclusiveGroupButton.checked ? Qt.Checked : Qt.Unchecked item.changed(); } onClicked: { if (!actuallyChanged || initiallyChecked) { checked = false; } actuallyChanged = false; initiallyChecked = false; } Component.onCompleted: { exclusiveGroupButton.initiallyChecked = model.EffectStatusRole; } } CheckBox { id: effectStatusCheckBox checkedState: model.EffectStatusRole visible: model.ExclusiveRole == "" onCheckedStateChanged: { if (!visible) { return; } item.checkedState = effectStatusCheckBox.checkedState; item.changed(); } Connections { target: searchModel onDataChanged: { effectStatusCheckBox.checkedState = model.EffectStatusRole; } } } } ColumnLayout { id: effectItem property int maximumWidth: parent.maximumWidth - checkBoxLayout.width - (videoButton.width + configureButton.width + aboutButton.width) - parent.spacing * 5 Layout.maximumWidth: maximumWidth QQC2.Label { text: model.NameRole font.weight: Font.Bold wrapMode: Text.Wrap Layout.maximumWidth: parent.maximumWidth } QQC2.Label { id: desc text: model.DescriptionRole wrapMode: Text.Wrap Layout.maximumWidth: parent.maximumWidth } QQC2.Label { id:aboutItem text: i18n("Author: %1\nLicense: %2", model.AuthorNameRole, model.LicenseRole) font.weight: Font.Bold visible: false wrapMode: Text.Wrap Layout.maximumWidth: parent.maximumWidth } Loader { id: videoItem active: false + visible: false source: "Video.qml" function showHide() { if (!videoItem.active) { videoItem.active = true; + videoItem.visible = true; } else { - videoItem.item.showHide(); + videoItem.active = false; + videoItem.visible = false; } } onLoaded: { videoItem.item.showHide(); } } } Item { // spacer Layout.fillWidth: true } Button { id: videoButton visible: model.VideoRole.toString() !== "" iconName: "video" onClicked: videoItem.showHide() } Button { id: configureButton visible: ConfigurableRole enabled: item.checkedState != Qt.Unchecked iconName: "configure" onClicked: { effectConfig.openConfig(model.ServiceNameRole, model.ScriptedRole, model.NameRole); } } Button { id: aboutButton iconName: "dialog-information" onClicked: { aboutItem.visible = !aboutItem.visible; } } } //end Row } //end Rectangle diff --git a/kcmkwin/kwincompositing/qml/EffectView.qml b/kcmkwin/kwincompositing/qml/EffectView.qml index e92a8f3a3..f4b081d15 100644 --- a/kcmkwin/kwincompositing/qml/EffectView.qml +++ b/kcmkwin/kwincompositing/qml/EffectView.qml @@ -1,183 +1,182 @@ /************************************************************************** * KWin - the KDE window manager * * This file is part of the KDE project. * * * * Copyright (C) 2013 Antonis Tsiapaliokas * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ import QtQuick 2.1 import QtQuick.Controls 1.0 import QtQuick.Controls 2.0 as QQC2 import QtQuick.Layouts 1.0 import org.kde.kwin.kwincompositing 1.0 Rectangle { signal changed implicitWidth: col.implicitWidth implicitHeight: col.implicitHeight Component { id: sectionHeading Rectangle { width: parent.width implicitHeight: sectionText.implicitHeight + 2 * col.spacing color: searchModel.backgroundNormalColor QQC2.Label { id: sectionText x: col.spacing y: col.spacing text: section font.weight: Font.Bold color: searchModel.sectionColor anchors.horizontalCenter: parent.horizontalCenter } } } EffectConfig { id: effectConfig onEffectListChanged: { searchModel.load() } } ColumnLayout { id: col anchors.fill: parent QQC2.Label { id: hint text: i18n("Hint: To find out or configure how to activate an effect, look at the effect's settings.") anchors { top: parent.top left: parent.left } } RowLayout { QQC2.TextField { // TODO: needs clear button, missing in Qt id: searchField placeholderText: i18n("Search") Layout.fillWidth: true focus: true } Button { iconName: "configure" tooltip: i18n("Configure filter") menu: Menu { MenuItem { text: i18n("Exclude Desktop Effects not supported by the Compositor") checkable: true checked: searchModel.filterOutUnsupported onTriggered: { searchModel.filterOutUnsupported = !searchModel.filterOutUnsupported; } } MenuItem { text: i18n("Exclude internal Desktop Effects") checkable: true checked: searchModel.filterOutInternal onTriggered: { searchModel.filterOutInternal = !searchModel.filterOutInternal } } } } } EffectFilterModel { id: searchModel objectName: "filterModel" filter: searchField.text } ScrollView { id: scroll frameVisible: true highlightOnFocus: true Layout.fillWidth: true Layout.fillHeight: true Rectangle { color: effectView.backgroundNormalColor anchors.fill: parent } ListView { function exclusiveGroupForCategory(category) { for (var i = 0; i < effectView.exclusiveGroups.length; ++i) { var item = effectView.exclusiveGroups[i]; if (item.category == category) { return item.group; } } var newGroup = Qt.createQmlObject('import QtQuick 2.1; import QtQuick.Controls 1.1; ExclusiveGroup {}', effectView, "dynamicExclusiveGroup" + effectView.exclusiveGroups.length); effectView.exclusiveGroups[effectView.exclusiveGroups.length] = { 'category': category, 'group': newGroup }; return newGroup; } id: effectView property var exclusiveGroups: [] - property color backgroundActiveColor: searchModel.backgroundActiveColor property color backgroundNormalColor: searchModel.backgroundNormalColor property color backgroundAlternateColor: searchModel.backgroundAlternateColor anchors.fill: parent model: searchModel delegate: Effect{ id: effectDelegate Connections { id: effectStateConnection target: null onChanged: { searchModel.updateEffectStatus(index, checkedState); } } Component.onCompleted: { effectStateConnection.target = effectDelegate } } section.property: "CategoryRole" section.delegate: sectionHeading spacing: col.spacing focus: true } } RowLayout { Layout.fillWidth: true Item { Layout.fillWidth: true } Button { id: ghnsButton text: i18n("Get New Desktop Effects...") iconName: "get-hot-new-stuff" onClicked: effectConfig.openGHNS() } } }//End ColumnLayout Connections { target: searchModel onDataChanged: changed() } }//End item diff --git a/kcmkwin/kwincompositing/qml/Video.qml b/kcmkwin/kwincompositing/qml/Video.qml index 17c4b8d5a..e7a4d3d60 100644 --- a/kcmkwin/kwincompositing/qml/Video.qml +++ b/kcmkwin/kwincompositing/qml/Video.qml @@ -1,72 +1,55 @@ /************************************************************************** * KWin - the KDE window manager * * This file is part of the KDE project. * * * * Copyright (C) 2013 Antonis Tsiapaliokas * * Copyright (C) 2014 Martin Gräßlin * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * **************************************************************************/ import QtQuick 2.1 import QtQuick.Controls 1.1 +import QtQuick.Controls 2.0 as QQC2 import QtQuick.Layouts 1.0 import QtMultimedia 5.0 as Multimedia -import org.kde.kquickcontrolsaddons 2.0 as QtExtra Multimedia.Video { id: videoItem - function showHide() { - replayButton.visible = false; - if (videoItem.visible === true) { - videoItem.stop(); - videoItem.visible = false; - } else { - videoItem.visible = true; - videoItem.play(); - } - } autoLoad: false visible: false source: model.VideoRole width: 400 height: 400 - BusyIndicator { + QQC2.BusyIndicator { anchors.centerIn: parent visible: videoItem.status == Multimedia.MediaPlayer.Loading running: true } - MouseArea { - // it's a mouse area with icon inside to not have an ugly button background + Button { id: replayButton visible: false - anchors.fill: parent + anchors.centerIn: parent + iconName: "media-playback-start" onClicked: { replayButton.visible = false; videoItem.play(); } - QtExtra.QIconItem { - id: replayIcon - anchors.centerIn: parent - width: 16 - height: 16 - icon: "media-playback-start" - } Connections { target: videoItem onStopped: { replayButton.visible = true } } } }