remove qmlpackages

belongs to kde-workspace
This commit is contained in:
Marco Martin 2013-11-08 22:25:13 +01:00
parent 9e32090b50
commit 2b55808042
77 changed files with 0 additions and 6654 deletions

View File

@ -89,4 +89,3 @@ endif(X11_FOUND)
install(TARGETS plasma-shell ${INSTALL_TARGETS_DEFAULT_ARGS})
add_subdirectory(qmlpackages)

View File

@ -1,5 +0,0 @@
plasma_install_package(desktop org.kde.desktop plasma/shells shell)
plasma_install_package(blank org.kde.blank plasma/shells shell)
plasma_install_package(lookandfeel org.kde.lookandfeel plasma/look-and-feel lookandfeel)

View File

@ -1,3 +0,0 @@
#! /usr/bin/env bash
$XGETTEXT `find . -name \*.qml` -L Java -o $podir/plasma_shell_org.kde.desktop.pot
rm -f rc.cpp

View File

@ -1,45 +0,0 @@
/*
* Copyright 2013 Marco Martin <mart@kde.org>
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA.
*/
import QtQuick 2.0
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.components 2.0 as PlasmaComponents
Row {
id: root
property alias reason: messageText.text
clip: true
PlasmaCore.IconItem {
id: icon
anchors.verticalCenter: parent
width: theme.hugeIconSize
height: width
source: "dialog-error"
}
PlasmaComponents.Label {
id: messageText
anchors.verticalCenter: parent
width: parent.width - icon.width
wrapMode: Text.Wrap
}
}

View File

@ -1,68 +0,0 @@
/*
* Copyright 2013 Marco Martin <mart@kde.org>
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA.
*/
import QtQuick 2.0
import QtQuick.Window 2.0
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.components 2.0 as PlasmaComponents
Item {
id: root
property Item applet
property Item compactRepresentation
onAppletChanged: {
applet.parent = appletParent
applet.anchors.fill = applet.parent
}
onCompactRepresentationChanged: {
compactRepresentation.parent = root
compactRepresentation.anchors.fill = root
}
PlasmaCore.Dialog {
id: popupWindow
//windowFlags: Qt.Popup
color: Qt.rgba(0,0,0,0)
visible: plasmoid.expanded
visualParent: root
mainItem: Item {
id: appletParent
width: applet && applet.implicitWidth > 0 ? applet.implicitWidth : theme.mSize(theme.defaultFont).width * 35
height: applet && applet.implicitHeight > 0 ? applet.implicitHeight : theme.mSize(theme.defaultFont).height * 25
onWidthChanged: applet.width = width
onHeightChanged: applet.height = height
}
onActiveWindowChanged: {
if (!activeWindow) {
// plasmoid.expanded = false
}
}
onVisibleChanged: {
if (!visible) {
plasmoid.expanded = false
}
}
}
}

View File

@ -1,36 +0,0 @@
/*
* Copyright 2013 Marco Martin <mart@kde.org>
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA.
*/
import QtQuick 2.0
import org.kde.plasma.core 2.0 as PlasmaCore
PlasmaCore.IconItem {
id: icon
source: plasmoid.icon ? plasmoid.icon : "plasma"
active: mouseArea.containsMouse
MouseArea {
id: mouseArea
anchors.fill: parent
hoverEnabled: true
onClicked: plasmoid.expanded = !plasmoid.expanded
}
}

View File

@ -1,237 +0,0 @@
/*
* Copyright 2013 Marco Martin <mart@kde.org>
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA.
*/
import QtQuick 2.0
import QtQuick.Controls 1.0 as QtControls
import QtQuick.Layouts 1.0
import org.kde.plasma.configuration 2.0
//TODO: all of this will be done with desktop components
Rectangle {
id: root
property int _m: theme.defaultFont.pointSize
//BEGIN properties
color: syspal.window
width: 640
height: 480
//END properties
//BEGIN model
property ConfigModel globalConfigModel: globalAppletConfigModel
ConfigModel {
id: globalAppletConfigModel
ConfigCategory {
name: "Keyboard shortcuts"
icon: "preferences-desktop-keyboard"
source: "ConfigurationShortcuts.qml"
}
}
//END model
//BEGIN functions
function saveConfig() {
for (var key in plasmoid.configuration) {
if (main.currentPage["cfg_"+key] !== undefined) {
plasmoid.configuration[key] = main.currentPage["cfg_"+key]
}
}
}
function restoreConfig() {
for (var key in plasmoid.configuration) {
if (main.currentPage["cfg_"+key] !== undefined) {
main.currentPage["cfg_"+key] = plasmoid.configuration[key]
}
}
}
//END functions
//BEGIN connections
Component.onCompleted: {
if (configDialog.configModel && configDialog.configModel.count > 0) {
main.sourceFile = configDialog.configModel.get(0).source
} else {
main.sourceFile = globalConfigModel.get(0).source
}
root.restoreConfig()
// root.width = mainColumn.implicitWidth
// root.height = mainColumn.implicitHeight
}
//END connections
//BEGIN UI components
SystemPalette {id: syspal}
ColumnLayout {
id: mainColumn
anchors.fill: parent
property int implicitWidth: Math.max(contentRow.implicitWidth, buttonsRow.implicitWidth) + 8
property int implicitHeight: contentRow.implicitHeight + buttonsRow.implicitHeight + 8
RowLayout {
id: contentRow
anchors {
left: parent.left
right: parent.right
}
Layout.fillHeight: true
Layout.preferredHeight: parent.height - buttonsRow.height
QtControls.ScrollView{
id: categoriesScroll
frameVisible: true
anchors {
top: parent.top
bottom: parent.bottom
}
visible: (configDialog.configModel ? configDialog.configModel.count : 0) + globalConfigModel.count > 1
width: visible ? 100 : 0
implicitWidth: width
Flickable {
id: categoriesView
contentWidth: width
contentHeight: childrenRect.height
anchors.fill: parent
property Item currentItem
Rectangle {
id: categories
width: parent.width
height: Math.max(categoriesView.height, categoriesColumn.height)
color: syspal.base
Rectangle {
color: syspal.highlight
width: parent.width
height: theme.iconSizes.IconSizeHuge
y: index * height
Behavior on y {
NumberAnimation {
duration: 250
easing.type: "InOutQuad"
}
}
}
Column {
id: categoriesColumn
width: parent.width
Repeater {
model: configDialog.configModel
delegate: ConfigCategoryDelegate {
onClicked: categoriesView.currentIndex = index
}
}
Repeater {
model: globalConfigModel
delegate: ConfigCategoryDelegate {}
}
}
}
}
}
QtControls.ScrollView{
id: pageScroll
anchors {
top: parent.top
bottom: parent.bottom
}
Layout.fillWidth: true
Flickable {
contentWidth: width
contentHeight: main.height
Item {
width: parent.width
height: childrenRect.height
QtControls.StackView {
id: main
anchors.fill: parent
anchors.margins: 12
property string sourceFile
Timer {
id: pageSizeSync
interval: 100
onTriggered: {
// root.width = mainColumn.implicitWidth
// root.height = mainColumn.implicitHeight
}
}
onImplicitWidthChanged: pageSizeSync.restart()
onImplicitHeightChanged: pageSizeSync.restart()
onSourceFileChanged: {
print("Source file changed in flickable" + sourceFile);
replace(Qt.resolvedUrl(sourceFile))
/*
* This is not needed on a desktop shell that has ok/apply/cancel buttons, i'll leave it here only for future reference until we have a prototype for the active shell.
* root.pageChanged will start a timer, that in turn will call saveConfig() when triggered
for (var prop in currentPage) {
if (prop.indexOf("cfg_") === 0) {
currentPage[prop+"Changed"].connect(root.pageChanged)
}
}*/
}
}
}
}
}
}
RowLayout {
id: buttonsRow
anchors {
right: parent.right
rightMargin: spacing
}
QtControls.Button {
iconSource: "dialog-ok"
text: "Ok"
onClicked: {
if (main.currentPage.saveConfig !== undefined) {
main.currentPage.saveConfig()
} else {
root.saveConfig()
}
configDialog.close()
}
}
QtControls.Button {
iconSource: "dialog-ok-apply"
text: "Apply"
onClicked: {
if (main.currentPage.saveConfig !== undefined) {
main.currentPage.saveConfig()
} else {
root.saveConfig()
}
}
}
QtControls.Button {
iconSource: "dialog-cancel"
text: "Cancel"
onClicked: configDialog.close()
}
}
}
//END UI components
}

View File

@ -1,81 +0,0 @@
/*
* Copyright 2013 Marco Martin <mart@kde.org>
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA.
*/
import QtQuick 2.0
import QtQuick.Controls 1.0 as QtControls
import org.kde.plasma.core 2.0 as PlasmaCore
MouseArea {
id: delegate
anchors {
left: parent.left
right: parent.right
}
//BEGIN properties
width: childrenRect.width
height: childrenRect.height
property bool current: model.source == main.sourceFile
//END properties
//BEGIN connections
onClicked: {
print("model source: " + model.source + " " + main.sourceFile);
if (delegate.current) {
return
} else {
if (typeof(categoriesView.currentIndex) != "undefined") {
categoriesView.currentIndex = index;
}
main.sourceFile = model.source
root.restoreConfig()
}
}
onCurrentChanged: {
if (current) {
categoriesView.currentIndex = index
}
}
//END connections
//BEGIN UI components
Column {
spacing: 4
anchors {
left: parent.left
right: parent.right
topMargin: _m
}
PlasmaCore.IconItem {
anchors.horizontalCenter: parent.horizontalCenter
width: theme.IconSizeHuge
height: width
source: model.icon
}
QtControls.Label {
anchors {
left: parent.left
right: parent.right
}
text: model.name
wrapMode: Text.Wrap
horizontalAlignment: Text.AlignHCenter
}
}
//END UI components
}

View File

@ -1,30 +0,0 @@
/*
* Copyright 2013 Marco Martin <mart@kde.org>
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA.
*/
import QtQuick 2.0
import org.kde.plasma.components 2.0 as PlasmaComponents
Item {
implicitWidth: childrenRect.width
implicitHeight: childrenRect.height
PlasmaComponents.Label {
text: "Containment actions go here"
}
}

View File

@ -1,133 +0,0 @@
/*
* Copyright 2013 Marco Martin <mart@kde.org>
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA.
*/
import QtQuick 2.0
import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.plasma.extras 2.0 as PlasmaExtras
import org.kde.plasma.configuration 2.0
import QtQuick.Controls 1.0 as QtControls
Column {
id: root
spacing: _m
PlasmaExtras.Title {
text: "Plugins"
}
//BEGIN functions
function saveConfig() {
for (var key in configDialog.wallpaperConfiguration) {
if (main.currentPage["cfg_"+key] !== undefined) {
configDialog.wallpaperConfiguration[key] = main.currentPage["cfg_"+key]
}
}
configDialog.applyWallpaper()
}
function restoreConfig() {
for (var key in configDialog.wallpaperConfiguration) {
if (main.currentPage["cfg_"+key] !== undefined) {
main.currentPage["cfg_"+key] = configDialog.wallpaperConfiguration[key]
}
}
}
//END functions
ListView {
id: categoriesView
anchors {
left: parent.left
right: parent.right
}
height: 100
orientation: ListView.Horizontal
model: configDialog.wallpaperConfigModel
delegate: ConfigCategoryDelegate {
id: delegate
current: categoriesView.currentIndex == index
anchors {
top: parent.top
bottom: parent.bottom
left: undefined
right: undefined
}
width: 64
onClicked: {
configDialog.currentWallpaper = model.pluginName
if (categoriesView.currentIndex == index) {
return
} else {
categoriesView.currentIndex = index;
main.sourceFile = model.source
root.restoreConfig()
}
}
onCurrentChanged: {
categoriesView.currentIndex = index
if (current) {
categoriesView.currentIndex = index
}
}
Component.onCompleted: {
if (configDialog.currentWallpaper == model.pluginName) {
loadWallpaperTimer.pendingCurrent = model
loadWallpaperTimer.restart()
}
}
}
highlight: Rectangle {
color: theme.highlightColor
}
Timer {
id: loadWallpaperTimer
interval: 100
property variant pendingCurrent
onTriggered: {
if (pendingCurrent) {
categoriesView.currentIndex = pendingCurrent.index
main.sourceFile = pendingCurrent.source
root.restoreConfig()
}
}
}
}
PlasmaComponents.PageStack {
id: main
anchors {
left: categoriesView.left;
right: parent.right;
}
width: implicitWidth
height: implicitHeight
property string sourceFile
onSourceFileChanged: {
if (sourceFile != "") {
main.opacity = 1;
replace(Qt.resolvedUrl(sourceFile))
//main.width = mainColumn.implicitWidth
main.height = mainColumn.implicitHeight
} else {
main.opacity = 0
}
}
Behavior on opacity { NumberAnimation {} }
}
}

View File

@ -1,32 +0,0 @@
/*
* Copyright 2013 Marco Martin <mart@kde.org>
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA.
*/
import QtQuick 2.0
import org.kde.plasma.components 2.0 as PlasmaComponents
Item {
id: iconsPage
width: childrenRect.width
height: childrenRect.height
PlasmaComponents.Button {
iconSource: "settings"
text: "None"
}
}

View File

@ -1,47 +0,0 @@
/*
* Copyright 2013 Marco Martin <mart@kde.org>
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA.
*/
import QtQuick 2.0
import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.plasma.extras 2.0 as PlasmaExtras
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.configuration 2.0
AppletConfiguration {
id: root
//BEGIN model
globalConfigModel: globalContainmentConfigModel
ConfigModel {
id: globalContainmentConfigModel
ConfigCategory {
name: "Appearance"
icon: "preferences-desktop-wallpaper"
source: "ConfigurationContainmentAppearance.qml"
}
ConfigCategory {
name: "Mouse Actions"
icon: "preferences-desktop-mouse"
source: "ConfigurationContainmentActions.qml"
}
}
//END model
}

View File

@ -1,186 +0,0 @@
/*
* Copyright 2013 Marco Martin <mart@kde.org>
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA.
*/
import QtQuick 2.0
import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.plasma.extras 2.0 as PlasmaExtras
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.configuration 2.0
import org.kde.qtextracomponents 2.0 as QtExtras
import "panelconfiguration"
//TODO: all of this will be done with desktop components
PlasmaCore.FrameSvgItem {
id: dialogRoot
//BEGIN Properties
width: 640
height: 64
imagePath: "dialogs/background"
state: {
switch (panel.location) {
//TopEdge
case 3:
return "TopEdge"
//LeftEdge
case 5:
return "LeftEdge"
//RightEdge
case 6:
return "RightEdge"
//BottomEdge
case 4:
default:
return "BottomEdge"
}
}
property bool vertical: (panel.location == 5 || panel.location == 6)
//END properties
//BEGIN Connections
Connections {
target: panel
onOffsetChanged: ruler.offset = panel.offset
onMinimumLengthChanged: ruler.minimumLength = panel.minimumLength
onMaximumLengthChanged: ruler.maximumLength = panel.maximumLength
}
//END Connections
//BEGIN UI components
Ruler {
id: ruler
state: dialogRoot.state
}
ToolBar {
id: toolBar
}
//END UI components
//BEGIN Animations
//when EdgeHandle is released animate to old panel position
ParallelAnimation {
id: panelResetAnimation
NumberAnimation {
target: panel
properties: (panel.location == 5 || panel.location == 6) ? "x" : "y"
to: {
switch (panel.location) {
//TopEdge
case 3:
return 0
break
//LeftEdge
case 5:
return 0
break;
//RightEdge
case 6:
return panel.screenGeometry.x + panel.screenGeometry.width - panel.width
break;
//BottomEdge
case 4:
default:
return panel.screenGeometry.y + panel.screenGeometry.height - panel.height
}
}
duration: 150
}
NumberAnimation {
target: configDialog
properties: (panel.location == 5 || panel.location == 6) ? "x" : "y"
to: {
panel.height
switch (panel.location) {
//TopEdge
case 3:
return panel.height
break
//LeftEdge
case 5:
return panel.width
break;
//RightEdge
case 6:
return panel.screenGeometry.x + panel.screenGeometry.width - panel.width - configDialog.width
break;
//BottomEdge
case 4:
default:
return panel.screenGeometry.y + panel.screenGeometry.height - panel.height - configDialog.height
}
}
duration: 150
}
}
//END Animations
//BEGIN States
states: [
State {
name: "TopEdge"
PropertyChanges {
target: dialogRoot
enabledBorders: "TopBorder|BottomBorder"
}
PropertyChanges {
target: dialogRoot
implicitHeight: ruler.implicitHeight + toolBar.implicitHeight
}
},
State {
name: "BottomEdge"
PropertyChanges {
target: dialogRoot
enabledBorders: "TopBorder|BottomBorder"
}
PropertyChanges {
target: dialogRoot
implicitHeight: ruler.implicitHeight + toolBar.implicitHeight
}
},
State {
name: "LeftEdge"
PropertyChanges {
target: dialogRoot
enabledBorders: "LeftBorder|RightBorder"
}
PropertyChanges {
target: dialogRoot
implicitWidth: ruler.implicitWidth + toolBar.implicitWidth
}
},
State {
name: "RightEdge"
PropertyChanges {
target: dialogRoot
enabledBorders: "LeftBorder|RightBorder"
}
PropertyChanges {
target: dialogRoot
implicitWidth: ruler.implicitWidth + toolBar.implicitWidth
}
}
]
//END States
}

View File

@ -1,112 +0,0 @@
/*
* Copyright 2013 Marco Martin <mart@kde.org>
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA.
*/
import QtQuick 2.0
import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.plasma.extras 2.0 as PlasmaExtras
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.configuration 2.0
import org.kde.qtextracomponents 2.0 as QtExtras
PlasmaComponents.ToolButton {
flat: false
text: "Screen edge"
QtExtras.MouseEventListener {
anchors.fill: parent
property int lastX
property int lastY
property int startMouseX
property int startMouseY
onPressed: {
lastX = mouse.screenX
lastY = mouse.screenY
startMouseX = mouse.x
startMouseY = mouse.y
}
onPositionChanged: {
switch (panel.location) {
//TopEdge
case 3:
configDialog.y = mouse.screenY - mapToItem(dialogRoot, 0, startMouseY).y
panel.y = configDialog.y - panel.height
break
//LeftEdge
case 5:
configDialog.x = mouse.screenX - mapToItem(dialogRoot, startMouseX, 0).x
panel.x = configDialog.x - panel.width
break;
//RightEdge
case 6:
configDialog.x = mouse.screenX - mapToItem(dialogRoot, startMouseX, 0).x
panel.x = configDialog.x + configDialog.width
break;
//BottomEdge
case 4:
default:
configDialog.y = mouse.screenY - mapToItem(dialogRoot, 0, startMouseY).y
panel.y = configDialog.y + configDialog.height
}
lastX = mouse.screenX
lastY = mouse.screenY
var screenAspect = panel.screenGeometry.height / panel.screenGeometry.width
var newLocation = panel.location
//If the mouse is in an internal rectangle, do nothing
if ((mouse.screenX > panel.screenGeometry.x + panel.screenGeometry.width/3 &&
mouse.screenX < panel.screenGeometry.x + panel.screenGeometry.width/3*2) &&
(mouse.screenY > panel.screenGeometry.y + panel.screenGeometry.height/3 &&
mouse.screenY < panel.screenGeometry.y + panel.screenGeometry.height/3*2)) {
return;
}
if (mouse.screenY < panel.screenGeometry.y+(mouse.screenX-panel.screenGeometry.x)*screenAspect) {
if (mouse.screenY < panel.screenGeometry.y + panel.screenGeometry.height-(mouse.screenX-panel.screenGeometry.x)*screenAspect) {
if (panel.location == 3) {
return;
} else {
newLocation = 3; //FIXME: Plasma::TopEdge;
}
} else if (panel.location == 6) {
return;
} else {
newLocation = 6; //FIXME: Plasma::RightEdge;
}
} else {
if (mouse.screenY < panel.screenGeometry.y + panel.screenGeometry.height-(mouse.screenX-panel.screenGeometry.x)*screenAspect) {
if (panel.location == 5) {
return;
} else {
newLocation = 5; //FIXME: Plasma::LeftEdge;
}
} else if(panel.location == 4) {
return;
} else {
newLocation = 4; //FIXME: Plasma::BottomEdge;
}
}
panel.location = newLocation
print("New Location: " + newLocation);
}
onReleased: panelResetAnimation.running = true
}
}

View File

@ -1,352 +0,0 @@
/*
* Copyright 2013 Marco Martin <mart@kde.org>
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA.
*/
import QtQuick 2.0
import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.plasma.extras 2.0 as PlasmaExtras
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.configuration 2.0
import org.kde.qtextracomponents 2.0 as QtExtras
PlasmaCore.FrameSvgItem {
id: root
property alias offset: offsetHandle.value
property alias minimumLength: minimumLengthHandle.value
property alias maximumLength: maximumLengthHandle.value
imagePath: "widgets/containment-controls"
state: "BottomEdge"
implicitWidth: offsetHandle.width + minimumLengthHandle.width
implicitHeight: offsetHandle.height + minimumLengthHandle.height
onMinimumLengthChanged: leftMinimumLengthHandle.value = minimumLength
onMaximumLengthChanged: leftMaximumLengthHandle.value = maximumLength
Component.onCompleted: {
offsetHandle.value = panel.offset
minimumLengthHandle.value = panel.minimumLength
maximumLengthHandle.value = panel.maximumLength
leftMinimumLengthHandle.value = panel.minimumLength
leftMaximumLengthHandle.value = panel.maximumLength
}
PlasmaCore.Svg {
id: containmentControlsSvg
imagePath: "widgets/containment-controls"
}
PlasmaCore.SvgItem {
id: centerMark
svg: containmentControlsSvg
elementId: dialogRoot.vertical ? "vertical-centerindicator" : "horizontal-centerindicator"
visible: panel.alignment == Qt.AlignCenter
width: dialogRoot.vertical ? parent.width : naturalSize.width
height: dialogRoot.vertical ? naturalSize.height : parent.height
anchors.centerIn: parent
}
SliderHandle {
id: offsetHandle
graphicElementName: "offsetslider"
onValueChanged: panel.offset = value
}
SliderHandle {
id: minimumLengthHandle
alignment: panel.alignment | Qt.AlignLeft
visible: panel.alignment != Qt.AlignRight
offset: panel.offset
graphicElementName: "minslider"
onValueChanged: panel.minimumLength = value
}
SliderHandle {
id: maximumLengthHandle
alignment: panel.alignment | Qt.AlignLeft
visible: panel.alignment != Qt.AlignRight
offset: panel.offset
graphicElementName: "maxslider"
onValueChanged: panel.maximumLength = value
}
SliderHandle {
id: leftMinimumLengthHandle
alignment: panel.alignment | Qt.AlignRight
visible: panel.alignment != Qt.AlignLeft
offset: panel.offset
graphicElementName: "maxslider"
onValueChanged: panel.minimumLength = value
}
SliderHandle {
id: leftMaximumLengthHandle
alignment: panel.alignment | Qt.AlignRight
visible: panel.alignment != Qt.AlignLeft
offset: panel.offset
graphicElementName: "minslider"
onValueChanged: panel.maximumLength = value
}
states: [
State {
name: "TopEdge"
PropertyChanges {
target: root
prefix: "north"
height: root.implicitHeight
}
AnchorChanges {
target: root
anchors {
top: root.parent.top
bottom: undefined
left: root.parent.left
right: root.parent.right
}
}
AnchorChanges {
target: offsetHandle
anchors {
top: undefined
bottom: root.bottom
left: undefined
right: undefined
}
}
AnchorChanges {
target: minimumLengthHandle
anchors {
top: root.top
bottom: undefined
left: undefined
right: undefined
}
}
AnchorChanges {
target: maximumLengthHandle
anchors {
top: undefined
bottom: root.bottom
left: undefined
right: undefined
}
}
AnchorChanges {
target: leftMinimumLengthHandle
anchors {
top: root.top
bottom: undefined
left: undefined
right: undefined
}
}
AnchorChanges {
target: leftMaximumLengthHandle
anchors {
top: undefined
bottom: root.bottom
left: undefined
right: undefined
}
}
},
State {
name: "BottomEdge"
PropertyChanges {
target: root
prefix: "south"
height: root.implicitHeight
}
AnchorChanges {
target: root
anchors {
top: undefined
bottom: root.parent.bottom
left: root.parent.left
right: root.parent.right
}
}
AnchorChanges {
target: offsetHandle
anchors {
top: root.top
bottom: undefined
left: undefined
right: undefined
}
}
AnchorChanges {
target: minimumLengthHandle
anchors {
top: undefined
bottom: root.bottom
left: undefined
right: undefined
}
}
AnchorChanges {
target: maximumLengthHandle
anchors {
top: root.top
bottom: undefined
left: undefined
right: undefined
}
}
AnchorChanges {
target: leftMinimumLengthHandle
anchors {
top: undefined
bottom: root.bottom
left: undefined
right: undefined
}
}
AnchorChanges {
target: leftMaximumLengthHandle
anchors {
top: root.top
bottom: undefined
left: undefined
right: undefined
}
}
},
State {
name: "LeftEdge"
PropertyChanges {
target: root
prefix: "west"
width: root.implicitWidth
}
AnchorChanges {
target: root
anchors {
top: root.parent.top
bottom: root.parent.bottom
left: root.parent.left
right: undefined
}
}
AnchorChanges {
target: offsetHandle
anchors {
top: undefined
bottom: undefined
left: undefined
right: root.right
}
}
AnchorChanges {
target: minimumLengthHandle
anchors {
top: undefined
bottom: undefined
left: root.left
right: undefined
}
}
AnchorChanges {
target: maximumLengthHandle
anchors {
top: undefined
bottom: undefined
left: undefined
right: root.right
}
}
AnchorChanges {
target: leftMinimumLengthHandle
anchors {
top: undefined
bottom: undefined
left: root.left
right: undefined
}
}
AnchorChanges {
target: leftMaximumLengthHandle
anchors {
top: undefined
bottom: undefined
left: undefined
right: root.right
}
}
},
State {
name: "RightEdge"
PropertyChanges {
target: root
prefix: "east"
width: root.implicitWidth
}
AnchorChanges {
target: root
anchors {
top: root.parent.top
bottom: root.parent.bottom
left: undefined
right: root.parent.right
}
}
AnchorChanges {
target: offsetHandle
anchors {
top: undefined
bottom: undefined
left: parent.left
right: undefined
}
}
AnchorChanges {
target: minimumLengthHandle
anchors {
top: undefined
bottom: undefined
left: undefined
right: parent.right
}
}
AnchorChanges {
target: maximumLengthHandle
anchors {
top: undefined
bottom: undefined
left: parent.left
right: undefined
}
}
AnchorChanges {
target: leftMinimumLengthHandle
anchors {
top: undefined
bottom: undefined
left: undefined
right: parent.right
}
}
AnchorChanges {
target: leftMaximumLengthHandle
anchors {
top: undefined
bottom: undefined
left: parent.left
right: undefined
}
}
}
]
}

View File

@ -1,62 +0,0 @@
/*
* Copyright 2013 Marco Martin <mart@kde.org>
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA.
*/
import QtQuick 2.0
import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.plasma.extras 2.0 as PlasmaExtras
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.configuration 2.0
import org.kde.qtextracomponents 2.0 as QtExtras
PlasmaComponents.ToolButton {
flat: false
text: "Height"
QtExtras.MouseEventListener {
anchors.fill: parent
property int startMouseX
property int startMouseY
onPressed: {
startMouseX = mouse.x
startMouseY = mouse.y
}
onPositionChanged: {
switch (panel.location) {
//TopEdge
case 3:
configDialog.y = mouse.screenY - mapToItem(dialogRoot, 0, startMouseY).y
panel.thickness = configDialog.y - panel.y
break;
//LeftEdge
case 5:
configDialog.x = mouse.screenX - mapToItem(dialogRoot, startMouseX, 0).x
panel.thickness = configDialog.x - panel.x
break;
//RightEdge
case 6:
configDialog.x = mouse.screenX - mapToItem(dialogRoot, startMouseX, 0).x
panel.thickness = (panel.x + panel.width) - (configDialog.x + configDialog.width)
break;
//BottomEdge
case 4:
default:
configDialog.y = mouse.screenY - mapToItem(dialogRoot, 0, startMouseY).y
panel.thickness = (panel.y + panel.height) - (configDialog.y + configDialog.height)
}
}
}
}

View File

@ -1,166 +0,0 @@
/*
* Copyright 2013 Marco Martin <mart@kde.org>
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA.
*/
import QtQuick 2.0
import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.plasma.extras 2.0 as PlasmaExtras
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.configuration 2.0
import org.kde.qtextracomponents 2.0 as QtExtras
PlasmaCore.SvgItem {
id: root
svg: containmentControlsSvg
state: parent.state
width: naturalSize.width
height: naturalSize.height
//value expressed by this slider
property int value
//name of the graphics to load
property string graphicElementName
//where the point "0" is
property int offset: 0
//handle type: behave in different ways based on the alignment
property int alignment: panel.alignment
function syncPos() {
if (dialogRoot.vertical) {
if (alignment == Qt.AlignRight) {
y = root.parent.height - (value + offset + root.height/2)
} else if (alignment == Qt.AlignLeft) {
y = value + offset - root.height/2
} else {
if (root.alignment & Qt.AlignRight) {
y = root.parent.height/2 - value/2 - offset + root.height/2
} else if (root.alignment & Qt.AlignLeft) {
y = root.parent.height/2 + value/2 + offset - root.height/2
} else {
y = root.parent.height/2 + value + offset -root.height/2
}
}
} else {
if (alignment == Qt.AlignRight) {
x = root.parent.width - (value + offset + root.width/2)
} else if (alignment == Qt.AlignLeft) {
x = value + offset - root.width/2
} else {
if (root.alignment & Qt.AlignRight) {
x = root.parent.width/2 - value/2 + offset - root.width/2
} else if (root.alignment & Qt.AlignLeft) {
x = root.parent.width/2 + value/2 + offset -root.width/2
} else {
x = root.parent.width/2 + value + offset -root.width/2
}
}
}
}
onValueChanged: syncPos()
onOffsetChanged: syncPos()
onAlignmentChanged: syncPos()
Connections {
target: root.parent
onWidthChanged: syncPos()
onHeightChanged: syncPos()
}
MouseArea {
drag {
target: parent
axis: (dialogRoot.vertical) ? Drag.YAxis : Drag.XAxis
}
anchors.fill: parent
onPositionChanged: {
if (dialogRoot.vertical) {
if (root.alignment == Qt.AlignRight) {
root.value = root.parent.height - (parent.y + offset + root.height/2)
} else if (alignment == Qt.AlignLeft) {
root.value = parent.y - offset + root.height/2
//Center
} else {
if (root.alignment & Qt.AlignRight) {
root.value = (root.parent.height/2 - parent.y + offset)*2 + root.height/2
} else if (root.alignment & Qt.AlignLeft) {
root.value = (parent.y - offset - root.parent.height/2)*2 + root.height/2
} else {
var value = parent.y - root.parent.height/2 - offset + root.height/2
//Snap
if (Math.abs(value) < 5) {
root.value = 0
} else {
root.value = value
}
}
}
} else {
if (root.alignment == Qt.AlignRight) {
root.value = root.parent.width - (parent.x + offset + root.width/2)
} else if (alignment == Qt.AlignLeft) {
root.value = parent.x - offset + root.width/2
//Center
} else {
if (root.alignment & Qt.AlignRight) {
root.value = (root.parent.width/2 - parent.x + offset)*2 + root.width/2
} else if (root.alignment & Qt.AlignLeft) {
root.value = (parent.x - offset - root.parent.width/2)*2 + root.width/2
} else {
var value = parent.x - root.parent.width/2 - offset + root.width/2
//Snap
if (Math.abs(value) < 5) {
root.value = 0
} else {
root.value = value
}
}
}
}
}
}
states: [
State {
name: "TopEdge"
PropertyChanges {
target: root
elementId: "north-" + graphicElementName
}
},
State {
name: "BottomEdge"
PropertyChanges {
target: root
elementId: "south-" + graphicElementName
}
},
State {
name: "LeftEdge"
PropertyChanges {
target: root
elementId: "west-" + graphicElementName
}
},
State {
name: "RightEdge"
PropertyChanges {
target: root
elementId: "east-" + graphicElementName
}
}
]
}

View File

@ -1,232 +0,0 @@
/*
* Copyright 2013 Marco Martin <mart@kde.org>
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA.
*/
import QtQuick 2.0
import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.plasma.extras 2.0 as PlasmaExtras
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.configuration 2.0
Item {
id: root
state: parent.state
implicitWidth: childrenRect.width + 20
implicitHeight: childrenRect.height + 20
PlasmaComponents.ButtonRow {
id: row
spacing: 0
exclusive: false
visible: !dialogRoot.vertical
anchors {
centerIn: parent
}
EdgeHandle {
id: edgeHandle
}
SizeHandle {
id: sizeHandle
}
}
//FIXME: remove this duplication, use desktopcomponents linear layouts that can switch between horizontal and vertical
PlasmaComponents.ButtonColumn {
id: column
spacing: 0
exclusive: false
visible: dialogRoot.vertical
anchors {
centerIn: parent
}
EdgeHandle {
width: 80
}
SizeHandle {
width: 80
}
}
PlasmaComponents.Button {
id: moreSettingsButton
property QtObject contextMenu
text: "More settings"
onClicked: {
if (!contextMenu) {
contextMenu = contextMenuComponent.createObject(moreSettingsButton)
}
contextMenu.open()
}
}
Component {
id: contextMenuComponent
PlasmaComponents.ContextMenu {
visualParent: moreSettingsButton
PlasmaComponents.MenuItem {
id: leftToggle
text: "Left"
checkable: true
checked: panel.alignment == Qt.AlignLeft
onClicked: panel.alignment = Qt.AlignLeft
onToggled: {
if (checked) {
centerToggle.checked = false
rightToggle.checked = false
}
}
}
PlasmaComponents.MenuItem {
id: centerToggle
text: "Center"
checkable: true
checked: panel.alignment == Qt.AlignCenter
onClicked: panel.alignment = Qt.AlignCenter
onToggled: {
if (checked) {
leftToggle.checked = false
rightToggle.checked = false
}
}
}
PlasmaComponents.MenuItem {
id: rightToggle
text: "Right"
checkable: true
checked: panel.alignment == Qt.AlignRight
onClicked: panel.alignment = Qt.AlignRight
onToggled: {
if (checked) {
centerToggle.checked = false
leftToggle.checked = false
}
}
}
}
}
//BEGIN States
states: [
State {
name: "TopEdge"
PropertyChanges {
target: root
height: root.implicitHeight
}
AnchorChanges {
target: root
anchors {
top: undefined
bottom: root.parent.bottom
left: root.parent.left
right: root.parent.right
}
}
AnchorChanges {
target: moreSettingsButton
anchors {
verticalCenter: root.verticalCenter
horizontalCenter: undefined
top: undefined
bottom: undefined
left: undefined
right: root.right
}
}
},
State {
name: "BottomEdge"
PropertyChanges {
target: root
height: root.implicitHeight
}
AnchorChanges {
target: root
anchors {
top: root.parent.top
bottom: undefined
left: root.parent.left
right: root.parent.right
}
}
AnchorChanges {
target: moreSettingsButton
anchors {
verticalCenter: root.verticalCenter
horizontalCenter: undefined
top: undefined
bottom: undefined
left: undefined
right: root.right
}
}
},
State {
name: "LeftEdge"
PropertyChanges {
target: root
width: root.implicitWidth
}
AnchorChanges {
target: root
anchors {
top: root.parent.top
bottom: root.parent.bottom
left: undefined
right: root.parent.right
}
}
AnchorChanges {
target: moreSettingsButton
anchors {
verticalCenter: undefined
horizontalCenter: root.verticalCenter
top: undefined
bottom: root.bottom
left: undefined
right: undefined
}
}
},
State {
name: "RightEdge"
PropertyChanges {
target: root
width: root.implicitWidth
}
AnchorChanges {
target: root
anchors {
top: root.parent.top
bottom: root.parent.bottom
left: root.parent.left
right: undefined
}
}
AnchorChanges {
target: moreSettingsButton
anchors {
verticalCenter: undefined
horizontalCenter: root.verticalCenter
top: undefined
bottom: root.bottom
left: undefined
right: undefined
}
}
}
]
//END States
}

View File

@ -1,17 +0,0 @@
[Desktop]
Containment=org.kde.desktopcontainment
ToolBox=org.kde.desktoptoolbox
RuntimePlatform=
[Desktop][ContainmentActions]
Ctrl;LeftButton=org.kde.standardmenu
MiddleButton=org.kde.paste
[Panel]
Containment=org.kde.panel
ToolBox=org.kde.paneltoolbox
[Panel][ContainmentActions]
Ctrl;LeftButton=org.kde.standardmenu
[Theme]
Theme=default

View File

@ -1,197 +0,0 @@
/*
* Copyright 2011 Marco Martin <mart@kde.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Library General Public License as
* published by the Free Software Foundation; either version 2 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 Library General Public
* License along with this program; if not, write to the
* Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import QtQuick 2.0
import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.plasma.extras 2.0 as PlasmaExtras
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.draganddrop 2.0
import org.kde.qtextracomponents 2.0
PlasmaCore.FrameSvgItem {
id: background
width: list.delegateWidth
height: list.delegateHeight
property variant icon: decoration
property string title: name
property string description: model.description
property string author: model.author
property string email: model.email
property string license: model.license
property string pluginName: model.pluginName
property bool local: model.local
ListView.onRemove: SequentialAnimation {
PropertyAction {
target: background
property: "ListView.delayRemove"
value: true
}
NumberAnimation {
target: background
property: widgetExplorer.orientation == Qt.Horizontal ? "y" : "x"
to: widgetExplorer.orientation == Qt.Horizontal ? list.delegateHeight : list.delegateWidth
duration: 150
easing.type: Easing.InOutQuad
}
NumberAnimation {
target: background
property: widgetExplorer.orientation == Qt.Horizontal ? "y" : "x"
to: widgetExplorer.orientation == Qt.Horizontal ? list.delegateHeight : list.delegateWidth
duration: 150
easing.type: Easing.InOutQuad
}
NumberAnimation {
target: background
property: widgetExplorer.orientation == Qt.Horizontal ? "width" : "height"
from: widgetExplorer.orientation == Qt.Horizontal ? list.delegateWidth : list.delegateHeight
to: 0
duration: 150
easing.type: Easing.InOutQuad
}
PropertyAction {
target: background
property: "ListView.delayRemove"
value: false
}
}
ListView.onAdd: SequentialAnimation {
PropertyAction {
target: background
property: "y"
value: widgetExplorer.orientation == Qt.Horizontal ? -list.delegateHeight : -list.delegateWidth
}
NumberAnimation {
target: background
property: widgetExplorer.orientation == Qt.Horizontal ? "width" : "height"
from: 0
to: widgetExplorer.orientation == Qt.Horizontal ? list.delegateWidth : list.delegateHeight
duration: 150
easing.type: Easing.InOutQuad
}
NumberAnimation {
target: background
property: widgetExplorer.orientation == Qt.Horizontal ? "y" : "x"
to: 0
duration: 150
easing.type: Easing.InOutQuad
}
}
imagePath: "widgets/viewitem"
prefix: "normal"
DragArea {
anchors.fill: parent
supportedActions: Qt.MoveAction | Qt.LinkAction
onDragStarted: tooltipDialog.visible = false
delegateImage: background.icon
mimeData {
source: parent
}
Component.onCompleted: mimeData.setData("text/x-plasmoidservicename", pluginName)
QIconItem {
id: iconWidget
anchors.verticalCenter: parent.verticalCenter
x: y
width: theme.hugeIconSize
height: width
icon: background.icon
}
Column {
anchors {
left: iconWidget.right
right: parent.right
verticalCenter: parent.verticalCenter
leftMargin: background.margins.left
rightMargin: background.margins.right
}
spacing: 4
PlasmaExtras.Heading {
id: titleText
level: 4
text: title
// font {
// weight: Font.Bold
// pointSize: theme.smallestFont.pointSize
// }
anchors {
left: parent.left
right: parent.right
}
height: paintedHeight
wrapMode: Text.WordWrap
//go with nowrap only if there is a single word too long
onPaintedWidthChanged: {
wrapTimer.restart()
}
Timer {
id: wrapTimer
interval: 200
onTriggered: {
//give it some pixels of tolerance
if (titleText.paintedWidth > titleText.width + 3) {
titleText.wrapMode = Text.NoWrap
titleText.elide = Text.ElideRight
} else {
titleText.wrapMode = Text.WordWrap
titleText.elide = Text.ElideNone
}
}
}
}
PlasmaComponents.Label {
text: description
font.pointSize: theme.smallestFont.pointSize
anchors {
left: parent.left
right: parent.right
}
//elide: Text.ElideRight
wrapMode: Text.WordWrap
verticalAlignment: Text.AlignTop
maximumLineCount: 3
}
}
QIconItem {
icon: running ? "dialog-ok-apply" : undefined
visible: running
width: theme.smallIconSize
height: width
anchors {
right: parent.right
bottom: parent.bottom
rightMargin: background.margins.right
bottomMargin: background.margins.bottom
}
}
MouseArea {
anchors.fill: parent
hoverEnabled: true
onDoubleClicked: widgetExplorer.addApplet(pluginName)
onEntered: tooltipDialog.appletDelegate = background
onExited: tooltipDialog.appletDelegate = null
}
}
}

View File

@ -1,51 +0,0 @@
/*
* Copyright 2013 Sebastian Kügler <sebas@kde.org>
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA.
*/
import QtQuick 2.0
//import org.kde.plasma.core 2.0 as PlasmaCore
//import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.plasma.extras 2.0 as PlasmaExtras
Rectangle {
id: root
color: "pink"
width: 400
height: 800
ListView {
anchors.fill: parent
model: widgetExplorer.widgetsModel
header: PlasmaExtras.Title { text: "Add Widgets" }
delegate: Item {
width: parent.width
height: 48
Text { text: "Applet: " + pluginName }
MouseArea {
anchors.fill: parent
onClicked: widgetExplorer.addApplet(pluginName)
}
}
}
Component.onCompleted: {
print("WidgetExplorer QML loaded");
print(" found " + widgetExplorer.widgetsModel.count + " widgets");
}
}

View File

@ -1,142 +0,0 @@
/*
* Copyright 2011 Marco Martin <mart@kde.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Library General Public License as
* published by the Free Software Foundation; either version 2 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 Library General Public
* License along with this program; if not, write to the
* Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import QtQuick 2.0
import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.qtextracomponents 2.0
MouseArea {
id: main
hoverEnabled: true
onEntered: toolTipHideTimer.running = false
onExited: toolTipHideTimer.running = true
width: childrenRect.width
height: 200
property variant icon
property string title
property string description
property string author
property string email
property string license
property string pluginName
property bool local
onClicked: tooltipDialog.visible = false
Connections {
target: tooltipDialog
onAppletDelegateChanged: {
if (!tooltipDialog.appletDelegate) {
return
}
icon = tooltipDialog.appletDelegate.icon
title = tooltipDialog.appletDelegate.title
description = tooltipDialog.appletDelegate.description
author = tooltipDialog.appletDelegate.author
email = tooltipDialog.appletDelegate.email
license = tooltipDialog.appletDelegate.license
pluginName = tooltipDialog.appletDelegate.pluginName
local = tooltipDialog.appletDelegate.local
}
}
QIconItem {
id: tooltipIconWidget
anchors.left: parent.left
anchors.top: parent.top
width: theme.hugeIconSize
height: width
icon: main.icon
}
Column {
id: nameColumn
spacing: 8
anchors {
left: tooltipIconWidget.right
leftMargin: 8
top: parent.top
right: parent.right
}
PlasmaComponents.Label {
text: title
font.bold:true
anchors.left: parent.left
anchors.right: parent.right
height: paintedHeight
wrapMode: Text.Wrap
}
PlasmaComponents.Label {
text: description
anchors.left: parent.left
anchors.right: parent.right
wrapMode: Text.Wrap
}
}
Grid {
anchors.top: tooltipIconWidget.bottom
anchors.topMargin: 16
anchors.bottom: uninstallButton.top
anchors.bottomMargin: 4
rows: 3
columns: 2
spacing: 4
PlasmaComponents.Label {
text: i18n("License:")
}
PlasmaComponents.Label {
id: licenseText
text: license
wrapMode: Text.Wrap
}
PlasmaComponents.Label {
text: i18n("Author:")
}
PlasmaComponents.Label {
text: author
wrapMode: Text.Wrap
}
PlasmaComponents.Label {
text: i18n("Email:")
}
PlasmaComponents.Label {
text: email
}
}
PlasmaComponents.Button {
id: uninstallButton
anchors {
horizontalCenter: parent.horizontalCenter
bottom: parent.bottom
}
opacity: local ? 1 : 0
Behavior on opacity {
NumberAnimation { duration: 250 }
}
iconSource: "application-exit"
text: i18n("Uninstall")
onClicked: {
widgetExplorer.uninstall(pluginName)
tooltipDialog.visible = false
}
}
}

View File

@ -1,378 +0,0 @@
/*
* Copyright 2011 Marco Martin <mart@kde.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Library General Public License as
* published by the Free Software Foundation; either version 2 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 Library General Public
* License along with this program; if not, write to the
* Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import QtQuick 2.0
import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.qtextracomponents 2.0
Item {
id: main
width: 240
height: 800
//this is used to perfectly align the filter field and delegates
property int cellWidth: theme.defaultFont.pixelSize * 20
PlasmaCore.FrameSvgItem {
imagePath: "dialogs/background"
anchors.fill: parent
anchors.margins: margins
//color: "orange"
//opacity: 0.3
}
property int minimumWidth: cellWidth + (
widgetExplorer.orientation == Qt.Horizontal
? 0
: (scrollBar.width + 4 * 2) // 4 * 2 == left and right margins
)
property int minimumHeight: topBar.height + list.delegateHeight + (widgetExplorer.orientation == Qt.Horizontal ? scrollBar.height : 0) + 4
property Item getWidgetsButton
property Item categoryButton
function i18n(inp) { return inp; }
PlasmaComponents.ContextMenu {
id: categoriesDialog
visualParent: main.categoryButton
}
Repeater {
parent: categoriesDialog
model: widgetExplorer.filterModel
delegate: PlasmaComponents.MenuItem {
text: display
separator: model["separator"] != undefined ? model["separator"] : false
onClicked: {
list.contentX = 0
list.contentY = 0
main.categoryButton.text = display
widgetExplorer.widgetsModel.filterQuery = model["filterData"]
widgetExplorer.widgetsModel.filterType = model["filterType"]
}
Component.onCompleted: {
parent = categoriesDialog
}
}
}
PlasmaComponents.ContextMenu {
id: getWidgetsDialog
visualParent: main.getWidgetsButton
}
Repeater {
parent: getWidgetsDialog
model: widgetExplorer.widgetsMenuActions
delegate: PlasmaComponents.MenuItem {
icon: modelData.icon
text: modelData.text
separator: modelData.separator
onClicked: modelData.trigger()
Component.onCompleted: {
parent = getWidgetsDialog
}
}
}
PlasmaCore.Dialog {
id: tooltipDialog
property Item appletDelegate
Component.onCompleted: {
tooltipDialog.setAttribute(Qt.WA_X11NetWmWindowTypeToolTip, true)
tooltipDialog.windowFlags = Qt.Window|Qt.WindowStaysOnTopHint|Qt.X11BypassWindowManagerHint
}
onAppletDelegateChanged: {
if (!appletDelegate) {
toolTipHideTimer.restart()
toolTipShowTimer.running = false
} else if (tooltipDialog.visible) {
var point = main.tooltipPosition()
tooltipDialog.x = point.x
tooltipDialog.y = point.y
} else {
toolTipShowTimer.restart()
toolTipHideTimer.running = false
}
}
mainItem: Tooltip { id: tooltipWidget }
Behavior on x {
enabled: widgetExplorer.orientation == Qt.Horizontal
NumberAnimation { duration: 250 }
}
Behavior on y {
enabled: widgetExplorer.orientation == Qt.Vertical
NumberAnimation { duration: 250 }
}
}
Timer {
id: toolTipShowTimer
interval: 500
repeat: false
onTriggered: {
var point = main.tooltipPosition()
tooltipDialog.x = point.x
tooltipDialog.y = point.y
tooltipDialog.visible = true
}
}
Timer {
id: toolTipHideTimer
interval: 1000
repeat: false
onTriggered: tooltipDialog.visible = false
}
function tooltipPosition() {
return widgetExplorer.tooltipPosition(tooltipDialog.appletDelegate, tooltipDialog.width, tooltipDialog.height);
}
Loader {
id: topBar
property Item categoryButton
sourceComponent: (widgetExplorer.orientation == Qt.Horizontal) ? horizontalTopBarComponent : verticalTopBarComponent
height: item.height + 2
anchors {
top: parent.top
left: parent.left
right: parent.right
topMargin: widgetExplorer.orientation == Qt.Horizontal ? 4 : 0
leftMargin: 4
}
}
Component {
id: horizontalTopBarComponent
Item {
anchors {
top: parent.top
left: parent.left
right: parent.right
}
height: filterField.height
Row {
spacing: 5
anchors {
left: parent.left
leftMargin: 2
}
PlasmaComponents.TextField {
id: filterField
width: list.width / Math.floor(list.width / cellWidth) - 4
clearButtonShown: true
placeholderText: i18n("Enter search term...")
onTextChanged: {
list.contentX = 0
list.contentY = 0
widgetExplorer.widgetsModel.searchTerm = text
}
Component.onCompleted: forceActiveFocus()
}
PlasmaComponents.Button {
id: categoryButton
text: i18n("Categories")
onClicked: categoriesDialog.open(0, categoryButton.height)
}
}
Row {
anchors.right: parent.right
spacing: 5
PlasmaComponents.Button {
id: getWidgetsButton
iconSource: "get-hot-new-stuff"
text: i18n("Get new widgets")
onClicked: getWidgetsDialog.open()
}
Repeater {
model: widgetExplorer.extraActions.length
PlasmaComponents.Button {
iconSource: widgetExplorer.extraActions[modelData].icon
text: widgetExplorer.extraActions[modelData].text
onClicked: {
widgetExplorer.extraActions[modelData].trigger()
}
}
}
PlasmaComponents.ToolButton {
iconSource: "window-close"
onClicked: widgetExplorer.closeClicked()
}
}
Component.onCompleted: {
main.getWidgetsButton = getWidgetsButton
main.categoryButton = categoryButton
}
}
}
Component {
id: verticalTopBarComponent
Column {
anchors.top: parent.top
anchors.left:parent.left
anchors.right: parent.right
spacing: 4
PlasmaComponents.ToolButton {
anchors.right: parent.right
iconSource: "window-close"
onClicked: widgetExplorer.closeClicked()
}
PlasmaComponents.TextField {
anchors {
left: parent.left
right: parent.right
}
clearButtonShown: true
placeholderText: i18n("Enter search term...")
onTextChanged: {
list.contentX = 0
list.contentY = 0
widgetExplorer.widgetsModel.searchTerm = text
}
Component.onCompleted: forceActiveFocus()
}
PlasmaComponents.Button {
anchors {
left: parent.left
right: parent.right
}
id: categoryButton
text: i18n("Categories")
onClicked: categoriesDialog.open(0, categoryButton.height)
}
Component.onCompleted: {
main.categoryButton = categoryButton
}
}
}
MouseEventListener {
id: listParent
anchors {
top: topBar.bottom
left: parent.left
right: widgetExplorer.orientation == Qt.Horizontal
? parent.right
: (scrollBar.visible ? scrollBar.left : parent.right)
bottom: widgetExplorer.orientation == Qt.Horizontal ? scrollBar.top : bottomBar.top
leftMargin: 4
bottomMargin: 4
}
onWheelMoved: {
//use this only if the wheel orientation is vertical and the list orientation is horizontal, otherwise will be the list itself managing the wheel
if (wheel.orientation == Qt.Vertical && list.orientation == ListView.Horizontal) {
var delta = wheel.delta > 0 ? 20 : -20
list.contentX = Math.min(Math.max(0, list.contentWidth - list.width),
Math.max(0, list.contentX - delta))
}
}
ListView {
id: list
property int delegateWidth: (widgetExplorer.orientation == Qt.Horizontal) ? (list.width / Math.floor(list.width / cellWidth)) : list.width
property int delegateHeight: theme.defaultFont.pixelSize * 7 - 4
anchors.fill: parent
orientation: widgetExplorer.orientation == Qt.Horizontal ? ListView.Horizontal : ListView.Vertical
snapMode: ListView.SnapToItem
model: widgetExplorer.widgetsModel
clip: widgetExplorer.orientation == Qt.Vertical
delegate: AppletDelegate {}
}
}
PlasmaComponents.ScrollBar {
id: scrollBar
orientation: widgetExplorer.orientation == Qt.Horizontal ? ListView.Horizontal : ListView.Vertical
anchors {
top: widgetExplorer.orientation == Qt.Horizontal ? undefined : listParent.top
bottom: widgetExplorer.orientation == Qt.Horizontal ? parent.bottom : bottomBar.top
left: widgetExplorer.orientation == Qt.Horizontal ? parent.left : undefined
right: parent.right
}
flickableItem: list
}
Loader {
id: bottomBar
sourceComponent: (widgetExplorer.orientation == Qt.Horizontal) ? undefined : verticalBottomBarComponent
//height: item.height
height: 48 // FIXME
anchors {
left: parent.left
right: parent.right
bottom: parent.bottom
leftMargin: 4
}
}
Component {
id: verticalBottomBarComponent
Column {
anchors {
left: parent.left
right: parent.right
bottom: parent.bottom
}
spacing: 4
PlasmaComponents.Button {
anchors {
left: parent.left
right: parent.right
}
id: getWidgetsButton
iconSource: "get-hot-new-stuff"
text: i18n("Get new widgets")
onClicked: getWidgetsDialog.open()
}
Repeater {
model: widgetExplorer.extraActions.length
PlasmaComponents.Button {
anchors {
left: parent.left
right: parent.right
}
iconSource: widgetExplorer.extraActions[modelData].icon
text: widgetExplorer.extraActions[modelData].text
onClicked: {
widgetExplorer.extraActions[modelData].trigger()
}
}
}
Component.onCompleted: {
main.getWidgetsButton = getWidgetsButton
}
}
}
}

View File

@ -1,16 +0,0 @@
// var panel = new Panel
// panel.screen = 0
// panel.location = 'top'
// panel.addWidget("org.kde.testapplet")
// panel.addWidget("org.kde.testcomponentsapplet")
//
// for (var i = 0; i < screenCount; ++i) {
// var desktop = new Activity
// desktop.name = i18n("Desktop")
// desktop.screen = i
// desktop.wallpaperPlugin = 'org.kde.image'
//
// desktop.addWidget("org.kde.testapplet")
// var testComponents = desktop.addWidget("org.kde.testcomponentsapplet")
// }

View File

@ -1,70 +0,0 @@
/* vim:set foldmethod=marker:
*
* Copyright (C) 2013 Ivan Cukic <ivan.cukic(at)kde.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2,
* or (at your option) any later version, as published by the Free
* Software Foundation
*
* 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, write to the
* Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import QtQuick 2
import org.kde.solid 1.0 as Solid
import org.kde.plasma.platformcomponents 1.0 as Platform
import QtQuick.Window 2.0
Item {
id: main
property string shell : "org.kde.blank"
property bool willing : false
property int priority : 0
// This is not needed, but allows the
// handler to know whether its shell is loaded
property bool loaded : false
Solid.Devices {
id: keyboards
query: "IS Keyboard"
}
Platform.Application {
application: "xterm"
running: main.loaded
}
// TODO: This is not needed - just for testing purposes
Window {
id: blankDialog
visible: main.loaded
width: 500
height: 500
Rectangle {
anchors.fill: parent
color: "white"
}
Text {
anchors.fill: parent
font.pointSize: 32
text: "Blank"
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
}
}
}

View File

@ -1,43 +0,0 @@
/*
* Copyright 2012 Marco Martin <mart@kde.org>
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA.
*/
import QtQuick 2.0
//import org.kde.plasma 2.0
import org.kde.plasma.core 2.0 as PlasmaCore
Rectangle {
id: root
color: "gray"
width: 1024
height: 768
property Item containment
onContainmentChanged: {
print("New Containment: " + containment)
//containment.parent = root
containment.visible = true
containment.anchors.fill = root
}
Component.onCompleted: {
print("View org.kde.blank QML loaded")
}
}

View File

@ -1,43 +0,0 @@
/*
* Copyright 2012 Marco Martin <mart@kde.org>
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA.
*/
import QtQuick 2.0
//import org.kde.plasma 2.0
import org.kde.plasma.core 2.0 as PlasmaCore
PlasmaCore.FrameSvgItem {
id: root
width: 640
height: 32
imagePath: "widgets/panel-background"
property Item containment
onContainmentChanged: {
print("New panel Containment: " + containment)
//containment.parent = root
containment.visible = true
containment.anchors.fill = root
}
Component.onCompleted: {
print("PanelView QML loaded")
}
}

View File

@ -1,34 +0,0 @@
[Desktop Entry]
Comment=Blank desktop view furniture
Comment[nl]=Meubilair voor weergave op blanco bureaublad
Comment[pt]=Disposição do ambiente de trabalho em branco
Comment[pt_BR]=Acessório de visualização da área de trabalho vazia
Comment[sk]=Prázdna plocha zobraziť nábytok
Comment[sv]=Visa tomt skrivbordsmöbler
Comment[uk]=Компоненти для перегляду порожньої стільниці
Comment[x-test]=xxBlank desktop view furniturexx
Encoding=UTF-8
Keywords=
Name=Blank Desktop
Name[cs]=Prázdná pracovní plocha
Name[de]=Leere Arbeitsfläche
Name[fi]=Tyhjä työpöytä
Name[nl]=Blanco bureaublad
Name[pt]=Ambiente de Trabalho em Branco
Name[pt_BR]=Área de trabalho vazia
Name[sk]=Prázdna plocha
Name[sv]=Tomt skrivbord
Name[uk]=Порожня стільниця
Name[x-test]=xxBlank Desktopxx
Type=Service
X-KDE-ServiceTypes=Plasma/Shell
X-KDE-ParentApp=
X-KDE-PluginInfo-Author=Marco Martin
X-KDE-PluginInfo-Category=
X-KDE-PluginInfo-Email=mart@kde.org
X-KDE-PluginInfo-License=GPLv2+
X-KDE-PluginInfo-Name=org.kde.blank
X-KDE-PluginInfo-Version=
X-KDE-PluginInfo-Website=
X-Plasma-MainScript=layout.js

View File

@ -1,3 +0,0 @@
#! /usr/bin/env bash
$XGETTEXT `find . -name \*.qml` -L Java -o $podir/plasma_shell_org.kde.desktop.pot
rm -f rc.cpp

View File

@ -1,293 +0,0 @@
/*
* Copyright 2011 Marco Martin <mart@kde.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Library General Public License as
* published by the Free Software Foundation; either version 2 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 Library General Public
* License along with this program; if not, write to the
* Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import QtQuick 2.1
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.qtextracomponents 2.0
PlasmaCore.FrameSvgItem {
id: background
width: Math.max((delegateStack.currentPage ? delegateStack.currentPage.implicitWidth : 0) + margins.left + margins.right, list.delegateWidth)
height: Math.max((delegateStack.currentPage ? delegateStack.currentPage.implicitHeight : 0) + margins.top + margins.bottom, list.delegateHeight)
imagePath: "widgets/viewitem"
prefix: Current ? (mainMouseArea.containsMouse ? "selected+hover" : "selected") : (mainMouseArea.containsMouse ? "hover" : "normal")
Behavior on width {
NumberAnimation { duration: 250 }
}
Behavior on height {
NumberAnimation { duration: 250 }
}
PlasmaComponents.PageStack {
id: delegateStack
anchors {
fill: parent
leftMargin: background.margins.left
topMargin: background.margins.top
rightMargin: background.margins.right
bottomMargin: background.margins.bottom
}
clip: true
initialPage: iconComponent
}
property Item mainMouseArea
Component {
id: iconComponent
Item {
anchors.fill: parent
MouseArea {
id: mouseArea
anchors.fill: parent
hoverEnabled: true
onClicked: {
var activityId = model["DataEngineSource"]
var service = activitySource.serviceForSource(activityId)
var operation = service.operationDescription("setCurrent")
service.startOperationCall(operation)
}
Component.onCompleted: mainMouseArea = mouseArea
PlasmaCore.IconItem {
id: iconWidget
anchors.verticalCenter: parent.verticalCenter
x: y
width: theme.hugeIconSize
height: width
source: Icon
}
QPixmapItem {
anchors.fill: iconWidget
pixmap: Icon ? undefined : activityManager.pixmapForActivity(model["DataEngineSource"])
visible: Icon == ""
}
PlasmaCore.IconItem {
width: theme.mediumIconSize
height: width
anchors.centerIn: iconWidget
source: "media-playback-start"
visible: model["State"] != "Running"
}
Column {
anchors {
left: iconWidget.right
right: parent.right
verticalCenter: parent.verticalCenter
leftMargin: background.margins.left
}
PlasmaComponents.Label {
id: titleText
text: Name
anchors.left: parent.left
anchors.right: parent.right
horizontalAlignment: Text.AlignHCenter
height: paintedHeight
wrapMode: Text.WordWrap
//go with nowrap only if there is a single word too long
onPaintedWidthChanged: {
wrapTimer.restart()
}
Timer {
id: wrapTimer
interval: 200
onTriggered: {
//give it some pixels of tolerance
if (titleText.paintedWidth > titleText.width + 3) {
titleText.wrapMode = Text.NoWrap
titleText.elide = Text.ElideRight
} else {
titleText.wrapMode = Text.WordWrap
titleText.elide = Text.ElideNone
}
}
}
}
Row {
id: buttonsRow
visible: model["State"] == "Running"
anchors.horizontalCenter: parent.horizontalCenter
PlasmaComponents.ToolButton {
id: configureButton
flat: false
iconSource: "configure"
onClicked: delegateStack.push(configurationComponent)
}
PlasmaComponents.ToolButton {
visible: !model["Current"]
iconSource: "media-playback-stop"
flat: false
onClicked: {
var activityId = model["DataEngineSource"]
var service = activitySource.serviceForSource(activityId)
var operation = service.operationDescription("stop")
service.startOperationCall(operation)
}
}
}
PlasmaComponents.ToolButton {
visible: model["State"] != "Running"
iconSource: "edit-delete"
text: i18n("Delete")
width: Math.min(implicitWidth, parent.width)
anchors.horizontalCenter: parent.horizontalCenter
onClicked: delegateStack.push(confirmationComponent)
}
}
}
}
}
Component {
id: confirmationComponent
MouseArea {
anchors.fill: parent
//20 is just a number arbitrarly low, won't be followed
implicitWidth: (activityManager.orientation == Qt.Horizontal) ? confirmationLabel.paintedWidth : 20
implicitHeight: (activityManager.orientation == Qt.Horizontal) ? 20 : confirmationColumn.childrenRect.height
onClicked: delegateStack.pop()
Column {
id: confirmationColumn
anchors.fill: parent
spacing: 4
PlasmaComponents.Label {
id: confirmationLabel
anchors {
left: parent.left
right: parent.right
}
horizontalAlignment: Text.AlignHCenter
text: i18n("Remove activity %1?", Name)
wrapMode: (activityManager.orientation == Qt.Horizontal) ? Text.NoWrap : Text.Wrap
}
PlasmaComponents.Button {
anchors.horizontalCenter: parent.horizontalCenter
text: i18n("Remove")
onClicked: {
var activityId = model["DataEngineSource"]
var service = activitySource.serviceForSource(activityId)
var operation = service.operationDescription("remove")
operation["Id"] = activityId
service.startOperationCall(operation)
}
}
PlasmaComponents.Button {
anchors.horizontalCenter: parent.horizontalCenter
text: i18n("Cancel")
onClicked: delegateStack.pop()
}
}
}
}
Component {
id: configurationComponent
MouseArea {
anchors.fill: parent
//20 is just a number arbitrarly low, won't be followed
implicitWidth: (activityManager.orientation == Qt.Horizontal) ? (iconButton.x*3 + iconButton.width + theme.mSize(theme.defaultFont).width * 12) : 20
// set the implicit height to a meaningful value, otherwise the layouting goes a little crazy :)
implicitHeight: iconButton.y*3
onClicked: delegateStack.pop()
PlasmaComponents.Button {
id: iconButton
iconSource: Icon
anchors {
top: configurationLayout.top
bottom: configurationLayout.bottom
}
x: y
width: height
QPixmapItem {
anchors.centerIn: parent
width: theme.largeIconSize
height: width
smooth: true
visible: iconButton.iconSource == ""
pixmap: visible ? undefined : activityManager.pixmapForActivity(model["DataEngineSource"])
}
onClicked: iconSource = activityManager.chooseIcon()
}
Column {
id: configurationLayout
anchors {
left: iconButton.right
verticalCenter: parent.verticalCenter
right: parent.right
leftMargin: iconButton.x
rightMargin: iconButton.x
}
spacing: 4
PlasmaComponents.TextField {
id: activityNameField
text: Name
anchors {
left: parent.left
right: parent.right
}
}
PlasmaComponents.Button {
anchors.horizontalCenter: parent.horizontalCenter
text: i18n("Apply")
onClicked: {
var activityId = model["DataEngineSource"]
var service = activitySource.serviceForSource(activityId)
var operation = service.operationDescription("setName")
operation["Name"] = activityNameField.text
service.startOperationCall(operation)
var operation = service.operationDescription("setIcon")
operation["Icon"] = iconButton.iconSource
service.startOperationCall(operation)
delegateStack.pop()
}
anchors {
left: parent.left
right: parent.right
}
}
PlasmaComponents.Button {
anchors.horizontalCenter: parent.horizontalCenter
text: i18n("Cancel")
onClicked: delegateStack.pop()
anchors {
left: parent.left
right: parent.right
}
}
}
}
}
}

View File

@ -1,308 +0,0 @@
/*
* Copyright 2013 Marco Martin <mart@kde.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Library General Public License as
* published by the Free Software Foundation; either version 2 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 Library General Public
* License along with this program; if not, write to the
* Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import QtQuick 2.0
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.qtextracomponents 2.0
Item {
id: main
signal closed()
//this is used to perfectly align the filter field and delegates
property int cellWidth: theme.mSize(theme.defaultFont).width * 20
QtObject {
id: activityManager
property int orientation: Qt.Vertical
}
property int minimumWidth: cellWidth + (
activityManager.orientation == Qt.Horizontal
? 0
: (scrollBar.width + 4 * 2) // 4 * 2 == left and right margins
)
property int minimumHeight: topBar.height + list.delegateHeight + (activityManager.orientation == Qt.Horizontal ? scrollBar.height : 0) + 4
PlasmaCore.DataSource {
id: activitySource
engine: "org.kde.activities"
onSourceAdded: {
if (source != "Status") {
connectSource(source)
}
}
Component.onCompleted: {
connectedSources = sources.filter(function(val) {
return val != "Status";
})
}
}
PlasmaComponents.ContextMenu {
id: newActivityMenu
visualParent: topBar.newActivityButton
PlasmaComponents.MenuItem {
id: templatesItem
text: i18n("Templates")
onClicked: activityTemplatesMenu.open()
}
PlasmaComponents.MenuItem {
icon: "user-desktop"
text: i18n("Empty Desktop")
onClicked: activityManager.createActivity("desktop")
}
PlasmaComponents.MenuItem {
icon: "edit-copy"
text: i18n("Clone current activity")
onClicked: activityManager.cloneCurrentActivity()
}
}
PlasmaComponents.ContextMenu {
id: activityTemplatesMenu
visualParent: templatesItem
}
Repeater {
parent: activityTemplatesMenu
model: activityManager.activityTypeActions
delegate: PlasmaComponents.MenuItem {
icon: modelData.icon
text: modelData.text
separator: modelData.separator
onClicked: {
//is a plugin?
if (modelData.pluginName) {
activityManager.createActivity(modelData.pluginName)
//is a script?
} else if (modelData.scriptFile) {
activityManager.createActivityFromScript(modelData.scriptFile, modelData.text, modelData.icon, modelData.startupApps)
//invoke ghns
} else {
activityManager.downloadActivityScripts()
}
}
Component.onCompleted: {
parent = activityTemplatesMenu
}
}
}
Loader {
id: topBar
property string query
property Item newActivityButton
sourceComponent: (activityManager.orientation == Qt.Horizontal) ? horizontalTopBarComponent : verticalTopBarComponent
height: item.height + 2
anchors {
top: parent.top
left: parent.left
right: parent.right
topMargin: activityManager.orientation == Qt.Horizontal ? 4 : 0
leftMargin: 4
}
}
Component {
id: horizontalTopBarComponent
Item {
anchors {
top: parent.top
left:parent.left
right: parent.right
}
height: filterField.height
PlasmaComponents.TextField {
id: filterField
anchors {
left: parent.left
leftMargin: 2
}
width: list.width / Math.floor(list.width / cellWidth) - 4
clearButtonShown: true
onTextChanged: topBar.query = text
placeholderText: i18n("Enter search term...")
Component.onCompleted: forceActiveFocus()
}
Row {
anchors.right: parent.right
spacing: 4
PlasmaComponents.Button {
id: newActivityButton
iconSource: "list-add"
text: i18n("Create activity...")
onClicked: newActivityMenu.open()
}
PlasmaComponents.Button {
iconSource: "plasma"
text: i18n("Add widgets")
onClicked: activityManager.addWidgetsRequested()
}
PlasmaComponents.ToolButton {
iconSource: "window-close"
onClicked: main.closed()
}
}
Component.onCompleted: {
topBar.newActivityButton = newActivityButton
}
}
}
Component {
id: verticalTopBarComponent
Column {
spacing: 4
anchors {
top: parent.top
left:parent.left
right: parent.right
}
PlasmaComponents.ToolButton {
anchors.right: parent.right
iconSource: "window-close"
onClicked: main.closed()
}
PlasmaComponents.TextField {
id: filterField
anchors {
left: parent.left
right: parent.right
}
clearButtonShown: true
onTextChanged: topBar.query = text
placeholderText: i18n("Enter search term...")
Component.onCompleted: forceActiveFocus()
}
PlasmaComponents.Button {
id: newActivityButton
anchors {
left: parent.left
right: parent.right
}
iconSource: "list-add"
text: i18n("Create activity...")
onClicked: newActivityMenu.open()
}
Component.onCompleted: {
topBar.newActivityButton = newActivityButton
}
}
}
MouseEventListener {
id: listParent
anchors {
top: topBar.bottom
left: parent.left
right: activityManager.orientation == Qt.Horizontal
? parent.right
: (scrollBar.visible ? scrollBar.left : parent.right)
bottom: activityManager.orientation == Qt.Horizontal ? scrollBar.top : bottomBar.top
leftMargin: 4
bottomMargin: 4
}
onWheelMoved: {
//use this only if the wheel orientation is vertical and the list orientation is horizontal, otherwise will be the list itself managing the wheel
if (wheel.orientation == Qt.Vertical && list.orientation == ListView.Horizontal) {
var delta = wheel.delta > 0 ? 20 : -20
list.contentX = Math.min(Math.max(0, list.contentWidth - list.width),
Math.max(0, list.contentX - delta))
}
}
ListView {
id: list
property int delegateWidth: (activityManager.orientation == Qt.Horizontal) ? (list.width / Math.floor(list.width / cellWidth)) : list.width
property int delegateHeight: theme.mSize(theme.defaultFont).height * 7 - 4
anchors.fill: parent
orientation: activityManager.orientation == Qt.Horizontal ? ListView.Horizontal : ListView.vertical
snapMode: ListView.SnapToItem
model: PlasmaCore.SortFilterModel {
sourceModel: PlasmaCore.DataModel {
dataSource: activitySource
}
filterRole: "Name"
filterRegExp: ".*"+topBar.query+".*"
}
clip: activityManager.orientation == Qt.Vertical
delegate: ActivityDelegate {}
}
}
PlasmaComponents.ScrollBar {
id: scrollBar
orientation: activityManager.orientation == Qt.Horizontal ? ListView.Horizontal : ListView.Vertical
anchors {
top: activityManager.orientation == Qt.Horizontal ? undefined : listParent.top
bottom: activityManager.orientation == Qt.Horizontal ? parent.bottom : bottomBar.top
left: activityManager.orientation == Qt.Horizontal ? parent.left : undefined
right: parent.right
}
flickableItem: list
}
Loader {
id: bottomBar
sourceComponent: (activityManager.orientation == Qt.Horizontal) ? undefined : verticalBottomBarComponent
height: item.height
anchors {
left: parent.left
right: parent.right
bottom: parent.bottom
leftMargin: 4
}
}
Component {
id: verticalBottomBarComponent
Column {
anchors {
left: parent.left
right: parent.right
bottom: parent.bottom
}
spacing: 4
PlasmaComponents.Button {
anchors {
left: parent.left
right: parent.right
}
iconSource: "plasma"
text: i18n("Add widgets")
onClicked: activityManager.addWidgetsRequested()
}
}
}
}

View File

@ -1,45 +0,0 @@
/*
* Copyright 2013 Marco Martin <mart@kde.org>
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA.
*/
import QtQuick 2.0
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.components 2.0 as PlasmaComponents
Row {
id: root
property alias reason: messageText.text
clip: true
PlasmaCore.IconItem {
id: icon
anchors.verticalCenter: parent
width: theme.hugeIconSize
height: width
source: "dialog-error"
}
PlasmaComponents.Label {
id: messageText
anchors.verticalCenter: parent
width: parent.width - icon.width
wrapMode: Text.Wrap
}
}

View File

@ -1,87 +0,0 @@
/*
* Copyright 2013 Marco Martin <mart@kde.org>
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA.
*/
import QtQuick 2.0
import QtQuick.Window 2.0
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.components 2.0 as PlasmaComponents
Item {
id: root
property int minimumWidth: compactRepresentation && compactRepresentation.minimumWidth !== undefined ? compactRepresentation.minimumWidth : -1
property int minimumHeight: compactRepresentation && compactRepresentation.minimumHeight !== undefined ? compactRepresentation.minimumHeight : -1
property int maximumWidth: compactRepresentation && compactRepresentation.maximumWidth !== undefined ? compactRepresentation.maximumWidth : -1
property int maximumHeight: compactRepresentation && compactRepresentation.maximumHeight !== undefined ? compactRepresentation.maximumHeight : -1
property int implicitWidth: compactRepresentation && compactRepresentation.implicitWidth !== undefined ? compactRepresentation.implicitWidth : -1
property int implicitHeight: compactRepresentation && compactRepresentation.implicitHeight !== undefined ? compactRepresentation.implicitHeight : -1
property bool fillWidth: compactRepresentation && compactRepresentation.fillWidth !== undefined ? compactRepresentation.fillWidth : false
property bool fillHeight: compactRepresentation && compactRepresentation.fillHeight !== undefined ? compactRepresentation.fillHeight : false
property Item applet
property Item compactRepresentation
onAppletChanged: {
//if the applet size was restored to a stored size, or if is dragged from the desktop, restore popup size
if (applet.width > 0) {
popupWindow.mainItem.width = applet.width;
}
if (applet.height > 0) {
popupWindow.mainItem.height = applet.height;
}
applet.parent = appletParent;
applet.anchors.fill = applet.parent;
}
onCompactRepresentationChanged: {
compactRepresentation.parent = root
compactRepresentation.anchors.fill = root
}
PlasmaCore.Dialog {
id: popupWindow
//windowFlags: Qt.Popup
color: Qt.rgba(0,0,0,0)
visible: plasmoid.expanded
visualParent: root
mainItem: Item {
id: appletParent
width: applet && applet.implicitHeight > 0 ? applet.implicitHeight : theme.mSize(theme.defaultFont).width * 35
height: applet && applet.implicitHeight > 0 ? applet.implicitHeight : theme.mSize(theme.defaultFont).height * 25
}
onActiveWindowChanged: {
if (!activeWindow) {
// plasmoid.expanded = false
}
}
onVisibleChanged: {
if (!visible) {
plasmoid.expanded = false
}
}
}
}

View File

@ -1,36 +0,0 @@
/*
* Copyright 2013 Marco Martin <mart@kde.org>
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA.
*/
import QtQuick 2.0
import org.kde.plasma.core 2.0 as PlasmaCore
PlasmaCore.IconItem {
id: icon
source: plasmoid.icon ? plasmoid.icon : "plasma"
active: mouseArea.containsMouse
MouseArea {
id: mouseArea
anchors.fill: parent
hoverEnabled: true
onClicked: plasmoid.expanded = !plasmoid.expanded
}
}

View File

@ -1,238 +0,0 @@
/*
* Copyright 2013 Marco Martin <mart@kde.org>
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA.
*/
import QtQuick 2.0
import QtQuick.Controls 1.0 as QtControls
import QtQuick.Layouts 1.0
import org.kde.plasma.configuration 2.0
//TODO: all of this will be done with desktop components
Rectangle {
id: root
property int _m: theme.defaultFont.pointSize
//BEGIN properties
color: syspal.window
width: 640
height: 480
//END properties
//BEGIN model
property ConfigModel globalConfigModel: globalAppletConfigModel
ConfigModel {
id: globalAppletConfigModel
ConfigCategory {
name: "Keyboard shortcuts"
icon: "preferences-desktop-keyboard"
source: "ConfigurationShortcuts.qml"
}
}
//END model
//BEGIN functions
function saveConfig() {
if (main.currentItem.saveConfig) {
main.currentItem.saveConfig()
} else {
for (var key in plasmoid.configuration) {
if (main.currentItem["cfg_"+key] !== undefined) {
plasmoid.configuration[key] = main.currentItem["cfg_"+key]
}
}
}
}
function restoreConfig() {
for (var key in plasmoid.configuration) {
if (main.currentItem["cfg_"+key] !== undefined) {
main.currentItem["cfg_"+key] = plasmoid.configuration[key]
}
}
}
//END functions
//BEGIN connections
Component.onCompleted: {
if (configDialog.configModel && configDialog.configModel.count > 0) {
main.sourceFile = configDialog.configModel.get(0).source
} else {
main.sourceFile = globalConfigModel.get(0).source
}
root.restoreConfig()
// root.width = mainColumn.implicitWidth
// root.height = mainColumn.implicitHeight
}
//END connections
//BEGIN UI components
SystemPalette {id: syspal}
ColumnLayout {
id: mainColumn
anchors.fill: parent
property int implicitWidth: Math.max(contentRow.implicitWidth, buttonsRow.implicitWidth) + 8
property int implicitHeight: contentRow.implicitHeight + buttonsRow.implicitHeight + 8
RowLayout {
id: contentRow
anchors {
left: parent.left
right: parent.right
}
Layout.fillHeight: true
Layout.preferredHeight: parent.height - buttonsRow.height
QtControls.ScrollView {
id: categoriesScroll
frameVisible: true
anchors {
top: parent.top
bottom: parent.bottom
}
visible: (configDialog.configModel ? configDialog.configModel.count : 0) + globalConfigModel.count > 1
width: visible ? 100 : 0
implicitWidth: width
Flickable {
id: categoriesView
contentWidth: width
contentHeight: childrenRect.height
anchors.fill: parent
property Item currentItem: categoriesColumn.children[1]
Item {
id: categories
width: parent.width
height: categoriesColumn.height
Item {
width: parent.width
height: categoriesView.currentItem.height
y: categoriesView.currentItem.y
Rectangle {
color: syspal.highlight
radius: 3
anchors {
fill: parent
margins: 2
}
}
Behavior on y {
NumberAnimation {
duration: 250
easing.type: "InOutQuad"
}
}
}
Column {
id: categoriesColumn
width: parent.width
Repeater {
model: configDialog.configModel
delegate: ConfigCategoryDelegate {
onClicked: categoriesView.currentIndex = index
}
}
Repeater {
model: globalConfigModel
delegate: ConfigCategoryDelegate {}
}
}
}
}
}
QtControls.StackView {
id: main
clip: true
anchors {
top: parent.top
bottom: parent.bottom
}
Layout.fillWidth: true
height: Math.max(pageScroll.height, currentItem != null ? currentItem.implicitHeight : 0)
property string sourceFile
Timer {
id: pageSizeSync
interval: 100
onTriggered: {
// root.width = mainColumn.implicitWidth
// root.height = mainColumn.implicitHeight
}
}
onImplicitWidthChanged: pageSizeSync.restart()
onImplicitHeightChanged: pageSizeSync.restart()
onSourceFileChanged: {
print("Source file changed in flickable" + sourceFile);
replace(Qt.resolvedUrl(sourceFile))
/*
* This is not needed on a desktop shell that has ok/apply/cancel buttons, i'll leave it here only for future reference until we have a prototype for the active shell.
* root.pageChanged will start a timer, that in turn will call saveConfig() when triggered
for (var prop in currentPage) {
if (prop.indexOf("cfg_") === 0) {
currentPage[prop+"Changed"].connect(root.pageChanged)
}
}*/
}
}
}
RowLayout {
id: buttonsRow
anchors {
right: parent.right
rightMargin: spacing
}
QtControls.Button {
iconName: "dialog-ok"
text: "Ok"
onClicked: {
if (main.currentItem.saveConfig !== undefined) {
main.currentItem.saveConfig();
} else {
root.saveConfig();
}
configDialog.close();
}
}
QtControls.Button {
iconName: "dialog-ok-apply"
text: "Apply"
onClicked: {
if (main.currentItem.saveConfig !== undefined) {
main.currentItem.saveConfig();
} else {
root.saveConfig();
}
}
}
QtControls.Button {
iconName: "dialog-cancel"
text: "Cancel"
onClicked: configDialog.close()
}
}
}
//END UI components
}

View File

@ -1,83 +0,0 @@
/*
* Copyright 2013 Marco Martin <mart@kde.org>
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA.
*/
import QtQuick 2.0
import QtQuick.Controls 1.0 as QtControls
import org.kde.plasma.core 2.0 as PlasmaCore
MouseArea {
id: delegate
anchors {
left: parent.left
right: parent.right
}
//BEGIN properties
width: childrenRect.width
height: childrenRect.height + 4
property bool current: model.source == main.sourceFile
//END properties
//BEGIN connections
onClicked: {
print("model source: " + model.source + " " + main.sourceFile);
if (delegate.current) {
return
} else {
if (typeof(categoriesView.currentItem) !== "undefined") {
categoriesView.currentItem = delegate;
}
main.sourceFile = model.source
root.restoreConfig()
}
}
onCurrentChanged: {
if (current) {
categoriesView.currentItem = delegate;
}
}
//END connections
//BEGIN UI components
Column {
spacing: 4
anchors {
verticalCenter: parent.verticalCenter
left: parent.left
right: parent.right
topMargin: _m
}
PlasmaCore.IconItem {
anchors.horizontalCenter: parent.horizontalCenter
width: theme.IconSizeHuge
height: width
source: model.icon
}
QtControls.Label {
anchors {
left: parent.left
right: parent.right
}
text: model.name
wrapMode: Text.Wrap
horizontalAlignment: Text.AlignHCenter
color: current ? syspal.highlightedText : syspal.text
}
}
//END UI components
}

View File

@ -1,119 +0,0 @@
/*
* Copyright 2013 Marco Martin <mart@kde.org>
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA.
*/
import QtQuick 2.0
import QtQuick.Controls 1.0 as QtControls
import QtQuick.Layouts 1.0
Item {
id: root
implicitWidth: childrenRect.width
implicitHeight: childrenRect.height
property var prettyStrings: {
"LeftButton": i18n("Left-Button"),
"RightButton": i18n("Right-Button"),
"MidButton": i18n("Middle-Button"),
"wheel:Vertical": i18n("Vertical-Scroll"),
"wheel:Horizontal": i18n("Horizontal-Scroll"),
"ShiftModifier": i18n("Shift"),
"ControlModifier": i18n("Ctrl"),
"AltModifier": i18n("Alt"),
"MetaModifier": i18n("Meta")
}
function saveConfig() {
configDialog.currentContainmentActionsModel.save();
}
Column {
anchors {
top: parent.top
topMargin: 25
horizontalCenter: parent.horizontalCenter
}
Repeater {
model: configDialog.currentContainmentActionsModel
delegate: RowLayout {
width: root.width
MouseEventInputButton {
defaultText: prettyStrings ? (prettyStrings[model.action.split(';')[1]] ? prettyStrings[model.action.split(';')[1]] + "+" : "") + prettyStrings[model.action.split(';')[0]] : ""
eventString: model.action
onEventStringChanged: {
configDialog.currentContainmentActionsModel.update(index, eventString, model.pluginName);
}
}
QtControls.ComboBox {
id: pluginsCombo
Layout.fillWidth: true
model: configDialog.containmentActionConfigModel
textRole: "name"
property bool initialized: false
Component.onCompleted: {
for (var i = 0; i < configDialog.containmentActionConfigModel.count; ++i) {
if (configDialog.containmentActionConfigModel.get(i).pluginName == pluginName) {
pluginsCombo.currentIndex = i;
break;
}
}
pluginsCombo.initialized = true;
}
onCurrentIndexChanged: {
if (initialized && configDialog.containmentActionConfigModel.get(currentIndex).pluginName != pluginName) {
configDialog.currentContainmentActionsModel.update(index, action, configDialog.containmentActionConfigModel.get(currentIndex).pluginName);
}
}
}
QtControls.Button {
iconName: "configure"
width: height
enabled: model.hasConfigurationInterface
onClicked: {
configDialog.currentContainmentActionsModel.showConfiguration(index);
}
}
QtControls.Button {
iconName: "dialog-information"
width: height
onClicked: {
configDialog.currentContainmentActionsModel.showAbout(index);
}
}
QtControls.Button {
iconName: "list-remove"
width: height
onClicked: {
configDialog.currentContainmentActionsModel.remove(index);
}
}
}
}
MouseEventInputButton {
defaultText: i18n("Add Action");
onEventStringChanged: {
configDialog.currentContainmentActionsModel.append(eventString, "org.kde.contextmenu");
}
}
}
}

View File

@ -1,94 +0,0 @@
/*
* Copyright 2013 Marco Martin <mart@kde.org>
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA.
*/
import QtQuick 2.0
import org.kde.plasma.configuration 2.0
import QtQuick.Controls 1.0 as QtControls
import QtQuick.Layouts 1.0
ColumnLayout {
id: root
property int formAlignment: pluginComboBox.x
property string currentWallpaper: ""
//BEGIN functions
function saveConfig() {
for (var key in configDialog.wallpaperConfiguration) {
if (main.currentItem["cfg_"+key] !== undefined) {
configDialog.wallpaperConfiguration[key] = main.currentItem["cfg_"+key]
}
}
configDialog.currentWallpaper = root.currentWallpaper;
configDialog.applyWallpaper()
}
function restoreConfig() {
for (var key in configDialog.wallpaperConfiguration) {
if (main.currentItem["cfg_"+key] !== undefined) {
main.currentItem["cfg_"+key] = configDialog.wallpaperConfiguration[key]
}
}
}
//END functions
Component.onCompleted: {
for (var i = 0; i < configDialog.wallpaperConfigModel.count; ++i) {
var data = configDialog.wallpaperConfigModel.get(i);
for(var j in data) print(j)
if (configDialog.currentWallpaper == data.pluginName) {
pluginComboBox.currentIndex = i
break;
}
}
}
Row {
spacing: 4
QtControls.Label {
anchors.verticalCenter: pluginComboBox.verticalCenter
text: "Wallpaper plugin:"
}
QtControls.ComboBox {
id: pluginComboBox
model: configDialog.wallpaperConfigModel
textRole: "name"
onCurrentIndexChanged: {
var model = configDialog.wallpaperConfigModel.get(currentIndex)
root.currentWallpaper = model.pluginName
main.sourceFile = model.source
root.restoreConfig()
}
}
}
QtControls.StackView {
id: main
Layout.fillHeight: true;
anchors {
left: parent.left;
right: parent.right;
}
property string sourceFile
onSourceFileChanged: {
if (sourceFile != "") {
replace(Qt.resolvedUrl(sourceFile))
}
}
}
}

View File

@ -1,32 +0,0 @@
/*
* Copyright 2013 Marco Martin <mart@kde.org>
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA.
*/
import QtQuick 2.0
import org.kde.plasma.components 2.0 as PlasmaComponents
Item {
id: iconsPage
width: childrenRect.width
height: childrenRect.height
PlasmaComponents.Button {
iconSource: "settings"
text: "None"
}
}

View File

@ -1,47 +0,0 @@
/*
* Copyright 2013 Marco Martin <mart@kde.org>
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA.
*/
import QtQuick 2.0
import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.plasma.extras 2.0 as PlasmaExtras
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.configuration 2.0
AppletConfiguration {
id: root
//BEGIN model
globalConfigModel: globalContainmentConfigModel
ConfigModel {
id: globalContainmentConfigModel
ConfigCategory {
name: "Appearance"
icon: "preferences-desktop-wallpaper"
source: "ConfigurationContainmentAppearance.qml"
}
ConfigCategory {
name: "Mouse Actions"
icon: "preferences-desktop-mouse"
source: "ConfigurationContainmentActions.qml"
}
}
//END model
}

View File

@ -1,71 +0,0 @@
/*
* Copyright 2013 Marco Martin <mart@kde.org>
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA.
*/
import QtQuick 2.0
import QtQuick.Controls 1.0 as QtControls
import QtQuick.Layouts 1.0
import org.kde.plasma.core 2.0 as PlasmaCore
QtControls.Button {
id: mouseInputButton
property string defaultText: i18n("Add Action")
text: defaultText
checkable: true
property string eventString
implicitWidth: theme.mSize(theme.defaultFont).width * 15
Layout.minimumWidth: implicitWidth
Layout.maximumWidth: implicitWidth
onCheckedChanged: {
if (checked) {
text = i18n("Input Here");
mouseInputArea.enabled = true;
}
}
MouseArea {
id: mouseInputArea
anchors.fill: parent
acceptedButtons: Qt.AllButtons
enabled: false
onClicked: {
var newEventString = configDialog.currentContainmentActionsModel.mouseEventString(mouse.button, mouse.modifiers);
if (eventString === newEventString || !configDialog.currentContainmentActionsModel.isTriggerUsed(newEventString)) {
eventString = newEventString;
mouseInputButton.text = defaultText;
mouseInputButton.checked = false;
enabled = false;
}
}
onWheel: {
var newEventString = configDialog.currentContainmentActionsModel.wheelEventString(wheel.pixelDelta, wheel.buttons, wheel.modifiers);
if (eventString === newEventString || !configDialog.currentContainmentActionsModel.isTriggerUsed(newEventString)) {
eventString = newEventString;
mouseInputButton.text = defaultText;
mouseInputButton.checked = false;
enabled = false;
}
}
}
}

View File

@ -1,186 +0,0 @@
/*
* Copyright 2013 Marco Martin <mart@kde.org>
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA.
*/
import QtQuick 2.0
import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.plasma.extras 2.0 as PlasmaExtras
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.configuration 2.0
import org.kde.qtextracomponents 2.0 as QtExtras
import "panelconfiguration"
//TODO: all of this will be done with desktop components
PlasmaCore.FrameSvgItem {
id: dialogRoot
//BEGIN Properties
width: 640
height: 64
imagePath: "dialogs/background"
state: {
switch (panel.location) {
//TopEdge
case PlasmaCore.Types.TopEdge:
return "TopEdge"
//LeftEdge
case PlasmaCore.Types.LeftEdge:
return "LeftEdge"
//RightEdge
case PlasmaCore.Types.RightEdge:
return "RightEdge"
//BottomEdge
case PlasmaCore.Types.BottomEdge:
default:
return "BottomEdge"
}
}
property bool vertical: (panel.location == 5 || panel.location == 6)
//END properties
//BEGIN Connections
Connections {
target: panel
onOffsetChanged: ruler.offset = panel.offset
onMinimumLengthChanged: ruler.minimumLength = panel.minimumLength
onMaximumLengthChanged: ruler.maximumLength = panel.maximumLength
}
//END Connections
//BEGIN UI components
Ruler {
id: ruler
state: dialogRoot.state
}
ToolBar {
id: toolBar
}
//END UI components
//BEGIN Animations
//when EdgeHandle is released animate to old panel position
ParallelAnimation {
id: panelResetAnimation
NumberAnimation {
target: panel
properties: (panel.location == 5 || panel.location == 6) ? "x" : "y"
to: {
switch (panel.location) {
//TopEdge
case PlasmaCore.Types.TopEdge:
return 0
break
//LeftEdge
case PlasmaCore.Types.LeftEdge:
return 0
break;
//RightEdge
case PlasmaCore.Types.RightEdge:
return panel.screenGeometry.x + panel.screenGeometry.width - panel.width
break;
//BottomEdge
case PlasmaCore.Types.BottomEdge:
default:
return panel.screenGeometry.y + panel.screenGeometry.height - panel.height
}
}
duration: 150
}
NumberAnimation {
target: configDialog
properties: (panel.location == 5 || panel.location == 6) ? "x" : "y"
to: {
switch (panel.location) {
//TopEdge
case PlasmaCore.Types.TopEdge:
return panel.height
break
//LeftEdge
case PlasmaCore.Types.LeftEdge:
return panel.width
break;
//RightEdge
case PlasmaCore.Types.RightEdge:
return panel.screenGeometry.x + panel.screenGeometry.width - panel.width - configDialog.width
break;
//BottomEdge
case PlasmaCore.Types.BottomEdge:
default:
return panel.screenGeometry.y + panel.screenGeometry.height - panel.height - configDialog.height
}
}
duration: 150
}
}
//END Animations
//BEGIN States
states: [
State {
name: "TopEdge"
PropertyChanges {
target: dialogRoot
enabledBorders: "TopBorder|BottomBorder"
}
PropertyChanges {
target: dialogRoot
implicitHeight: ruler.implicitHeight + toolBar.implicitHeight
}
},
State {
name: "BottomEdge"
PropertyChanges {
target: dialogRoot
enabledBorders: "TopBorder|BottomBorder"
}
PropertyChanges {
target: dialogRoot
implicitHeight: ruler.implicitHeight + toolBar.implicitHeight
}
},
State {
name: "LeftEdge"
PropertyChanges {
target: dialogRoot
enabledBorders: "LeftBorder|RightBorder"
}
PropertyChanges {
target: dialogRoot
implicitWidth: ruler.implicitWidth + toolBar.implicitWidth
}
},
State {
name: "RightEdge"
PropertyChanges {
target: dialogRoot
enabledBorders: "LeftBorder|RightBorder"
}
PropertyChanges {
target: dialogRoot
implicitWidth: ruler.implicitWidth + toolBar.implicitWidth
}
}
]
//END States
}

View File

@ -1,114 +0,0 @@
/*
* Copyright 2013 Marco Martin <mart@kde.org>
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA.
*/
import QtQuick 2.0
import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.plasma.extras 2.0 as PlasmaExtras
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.configuration 2.0
import org.kde.qtextracomponents 2.0 as QtExtras
PlasmaComponents.ToolButton {
flat: false
text: "Screen edge"
QtExtras.MouseEventListener {
anchors.fill: parent
property int lastX
property int lastY
property int startMouseX
property int startMouseY
onPressed: {
lastX = mouse.screenX
lastY = mouse.screenY
startMouseX = mouse.x
startMouseY = mouse.y
}
onPositionChanged: {
switch (panel.location) {
//TopEdge
case 3:
configDialog.y = mouse.screenY - mapToItem(dialogRoot, 0, startMouseY).y
panel.y = configDialog.y - panel.height
break
//LeftEdge
case 5:
configDialog.x = mouse.screenX - mapToItem(dialogRoot, startMouseX, 0).x
panel.x = configDialog.x - panel.width
break;
//RightEdge
case 6:
configDialog.x = mouse.screenX - mapToItem(dialogRoot, startMouseX, 0).x
panel.x = configDialog.x + configDialog.width
break;
//BottomEdge
case 4:
default:
configDialog.y = mouse.screenY - mapToItem(dialogRoot, 0, startMouseY).y
panel.y = configDialog.y + configDialog.height
}
lastX = mouse.screenX
lastY = mouse.screenY
var screenAspect = panel.screenGeometry.height / panel.screenGeometry.width
var newLocation = panel.location
//If the mouse is in an internal rectangle, do nothing
if ((mouse.screenX > panel.screenGeometry.x + panel.screenGeometry.width/3 &&
mouse.screenX < panel.screenGeometry.x + panel.screenGeometry.width/3*2) &&
(mouse.screenY > panel.screenGeometry.y + panel.screenGeometry.height/3 &&
mouse.screenY < panel.screenGeometry.y + panel.screenGeometry.height/3*2)) {
return;
}
if (mouse.screenY < panel.screenGeometry.y+(mouse.screenX-panel.screenGeometry.x)*screenAspect) {
if (mouse.screenY < panel.screenGeometry.y + panel.screenGeometry.height-(mouse.screenX-panel.screenGeometry.x)*screenAspect) {
if (panel.location == 3) {
return;
} else {
newLocation = PlasmaCore.Types.TopEdge;
}
} else if (panel.location == 6) {
return;
} else {
newLocation = PlasmaCore.Types.RightEdge;
}
} else {
if (mouse.screenY < panel.screenGeometry.y + panel.screenGeometry.height-(mouse.screenX-panel.screenGeometry.x)*screenAspect) {
if (panel.location == 5) {
return;
} else {
newLocation = PlasmaCore.Types.LeftEdge;
}
} else if(panel.location == 4) {
return;
} else {
newLocation = PlasmaCore.Types.BottomEdge;
}
}
panel.location = newLocation
print("New Location: " + newLocation);
}
onReleased: {
panelResetAnimation.running = true
}
}
}

View File

@ -1,352 +0,0 @@
/*
* Copyright 2013 Marco Martin <mart@kde.org>
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA.
*/
import QtQuick 2.0
import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.plasma.extras 2.0 as PlasmaExtras
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.configuration 2.0
import org.kde.qtextracomponents 2.0 as QtExtras
PlasmaCore.FrameSvgItem {
id: root
property alias offset: offsetHandle.value
property alias minimumLength: minimumLengthHandle.value
property alias maximumLength: maximumLengthHandle.value
imagePath: "widgets/containment-controls"
state: "BottomEdge"
implicitWidth: offsetHandle.width + minimumLengthHandle.width
implicitHeight: offsetHandle.height + minimumLengthHandle.height
onMinimumLengthChanged: leftMinimumLengthHandle.value = minimumLength
onMaximumLengthChanged: leftMaximumLengthHandle.value = maximumLength
Component.onCompleted: {
offsetHandle.value = panel.offset
minimumLengthHandle.value = panel.minimumLength
maximumLengthHandle.value = panel.maximumLength
leftMinimumLengthHandle.value = panel.minimumLength
leftMaximumLengthHandle.value = panel.maximumLength
}
PlasmaCore.Svg {
id: containmentControlsSvg
imagePath: "widgets/containment-controls"
}
PlasmaCore.SvgItem {
id: centerMark
svg: containmentControlsSvg
elementId: dialogRoot.vertical ? "vertical-centerindicator" : "horizontal-centerindicator"
visible: panel.alignment == Qt.AlignCenter
width: dialogRoot.vertical ? parent.width : naturalSize.width
height: dialogRoot.vertical ? naturalSize.height : parent.height
anchors.centerIn: parent
}
SliderHandle {
id: offsetHandle
graphicElementName: "offsetslider"
onValueChanged: panel.offset = value
}
SliderHandle {
id: minimumLengthHandle
alignment: panel.alignment | Qt.AlignLeft
visible: panel.alignment != Qt.AlignRight
offset: panel.offset
graphicElementName: "minslider"
onValueChanged: panel.minimumLength = value
}
SliderHandle {
id: maximumLengthHandle
alignment: panel.alignment | Qt.AlignLeft
visible: panel.alignment != Qt.AlignRight
offset: panel.offset
graphicElementName: "maxslider"
onValueChanged: panel.maximumLength = value
}
SliderHandle {
id: leftMinimumLengthHandle
alignment: panel.alignment | Qt.AlignRight
visible: panel.alignment != Qt.AlignLeft
offset: panel.offset
graphicElementName: "maxslider"
onValueChanged: panel.minimumLength = value
}
SliderHandle {
id: leftMaximumLengthHandle
alignment: panel.alignment | Qt.AlignRight
visible: panel.alignment != Qt.AlignLeft
offset: panel.offset
graphicElementName: "minslider"
onValueChanged: panel.maximumLength = value
}
states: [
State {
name: "TopEdge"
PropertyChanges {
target: root
prefix: "north"
height: root.implicitHeight
}
AnchorChanges {
target: root
anchors {
top: root.parent.top
bottom: undefined
left: root.parent.left
right: root.parent.right
}
}
AnchorChanges {
target: offsetHandle
anchors {
top: undefined
bottom: root.bottom
left: undefined
right: undefined
}
}
AnchorChanges {
target: minimumLengthHandle
anchors {
top: root.top
bottom: undefined
left: undefined
right: undefined
}
}
AnchorChanges {
target: maximumLengthHandle
anchors {
top: undefined
bottom: root.bottom
left: undefined
right: undefined
}
}
AnchorChanges {
target: leftMinimumLengthHandle
anchors {
top: root.top
bottom: undefined
left: undefined
right: undefined
}
}
AnchorChanges {
target: leftMaximumLengthHandle
anchors {
top: undefined
bottom: root.bottom
left: undefined
right: undefined
}
}
},
State {
name: "BottomEdge"
PropertyChanges {
target: root
prefix: "south"
height: root.implicitHeight
}
AnchorChanges {
target: root
anchors {
top: undefined
bottom: root.parent.bottom
left: root.parent.left
right: root.parent.right
}
}
AnchorChanges {
target: offsetHandle
anchors {
top: root.top
bottom: undefined
left: undefined
right: undefined
}
}
AnchorChanges {
target: minimumLengthHandle
anchors {
top: undefined
bottom: root.bottom
left: undefined
right: undefined
}
}
AnchorChanges {
target: maximumLengthHandle
anchors {
top: root.top
bottom: undefined
left: undefined
right: undefined
}
}
AnchorChanges {
target: leftMinimumLengthHandle
anchors {
top: undefined
bottom: root.bottom
left: undefined
right: undefined
}
}
AnchorChanges {
target: leftMaximumLengthHandle
anchors {
top: root.top
bottom: undefined
left: undefined
right: undefined
}
}
},
State {
name: "LeftEdge"
PropertyChanges {
target: root
prefix: "west"
width: root.implicitWidth
}
AnchorChanges {
target: root
anchors {
top: root.parent.top
bottom: root.parent.bottom
left: root.parent.left
right: undefined
}
}
AnchorChanges {
target: offsetHandle
anchors {
top: undefined
bottom: undefined
left: undefined
right: root.right
}
}
AnchorChanges {
target: minimumLengthHandle
anchors {
top: undefined
bottom: undefined
left: root.left
right: undefined
}
}
AnchorChanges {
target: maximumLengthHandle
anchors {
top: undefined
bottom: undefined
left: undefined
right: root.right
}
}
AnchorChanges {
target: leftMinimumLengthHandle
anchors {
top: undefined
bottom: undefined
left: root.left
right: undefined
}
}
AnchorChanges {
target: leftMaximumLengthHandle
anchors {
top: undefined
bottom: undefined
left: undefined
right: root.right
}
}
},
State {
name: "RightEdge"
PropertyChanges {
target: root
prefix: "east"
width: root.implicitWidth
}
AnchorChanges {
target: root
anchors {
top: root.parent.top
bottom: root.parent.bottom
left: undefined
right: root.parent.right
}
}
AnchorChanges {
target: offsetHandle
anchors {
top: undefined
bottom: undefined
left: parent.left
right: undefined
}
}
AnchorChanges {
target: minimumLengthHandle
anchors {
top: undefined
bottom: undefined
left: undefined
right: parent.right
}
}
AnchorChanges {
target: maximumLengthHandle
anchors {
top: undefined
bottom: undefined
left: parent.left
right: undefined
}
}
AnchorChanges {
target: leftMinimumLengthHandle
anchors {
top: undefined
bottom: undefined
left: undefined
right: parent.right
}
}
AnchorChanges {
target: leftMaximumLengthHandle
anchors {
top: undefined
bottom: undefined
left: parent.left
right: undefined
}
}
}
]
}

View File

@ -1,62 +0,0 @@
/*
* Copyright 2013 Marco Martin <mart@kde.org>
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA.
*/
import QtQuick 2.0
import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.plasma.extras 2.0 as PlasmaExtras
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.configuration 2.0
import org.kde.qtextracomponents 2.0 as QtExtras
PlasmaComponents.ToolButton {
flat: false
text: "Height"
QtExtras.MouseEventListener {
anchors.fill: parent
property int startMouseX
property int startMouseY
onPressed: {
startMouseX = mouse.x
startMouseY = mouse.y
}
onPositionChanged: {
switch (panel.location) {
//TopEdge
case 3:
configDialog.y = mouse.screenY - mapToItem(dialogRoot, 0, startMouseY).y
panel.thickness = configDialog.y - panel.y
break;
//LeftEdge
case 5:
configDialog.x = mouse.screenX - mapToItem(dialogRoot, startMouseX, 0).x
panel.thickness = configDialog.x - panel.x
break;
//RightEdge
case 6:
configDialog.x = mouse.screenX - mapToItem(dialogRoot, startMouseX, 0).x
panel.thickness = (panel.x + panel.width) - (configDialog.x + configDialog.width)
break;
//BottomEdge
case 4:
default:
configDialog.y = mouse.screenY - mapToItem(dialogRoot, 0, startMouseY).y
panel.thickness = (panel.y + panel.height) - (configDialog.y + configDialog.height)
}
}
}
}

View File

@ -1,166 +0,0 @@
/*
* Copyright 2013 Marco Martin <mart@kde.org>
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA.
*/
import QtQuick 2.0
import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.plasma.extras 2.0 as PlasmaExtras
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.configuration 2.0
import org.kde.qtextracomponents 2.0 as QtExtras
PlasmaCore.SvgItem {
id: root
svg: containmentControlsSvg
state: parent.state
width: naturalSize.width
height: naturalSize.height
//value expressed by this slider
property int value
//name of the graphics to load
property string graphicElementName
//where the point "0" is
property int offset: 0
//handle type: behave in different ways based on the alignment
property int alignment: panel.alignment
function syncPos() {
if (dialogRoot.vertical) {
if (alignment == Qt.AlignRight) {
y = root.parent.height - (value + offset + root.height/2)
} else if (alignment == Qt.AlignLeft) {
y = value + offset - root.height/2
} else {
if (root.alignment & Qt.AlignRight) {
y = root.parent.height/2 - value/2 - offset + root.height/2
} else if (root.alignment & Qt.AlignLeft) {
y = root.parent.height/2 + value/2 + offset - root.height/2
} else {
y = root.parent.height/2 + value + offset -root.height/2
}
}
} else {
if (alignment == Qt.AlignRight) {
x = root.parent.width - (value + offset + root.width/2)
} else if (alignment == Qt.AlignLeft) {
x = value + offset - root.width/2
} else {
if (root.alignment & Qt.AlignRight) {
x = root.parent.width/2 - value/2 + offset - root.width/2
} else if (root.alignment & Qt.AlignLeft) {
x = root.parent.width/2 + value/2 + offset -root.width/2
} else {
x = root.parent.width/2 + value + offset -root.width/2
}
}
}
}
onValueChanged: syncPos()
onOffsetChanged: syncPos()
onAlignmentChanged: syncPos()
Connections {
target: root.parent
onWidthChanged: syncPos()
onHeightChanged: syncPos()
}
MouseArea {
drag {
target: parent
axis: (dialogRoot.vertical) ? Drag.YAxis : Drag.XAxis
}
anchors.fill: parent
onPositionChanged: {
if (dialogRoot.vertical) {
if (root.alignment == Qt.AlignRight) {
root.value = root.parent.height - (parent.y + offset + root.height/2)
} else if (alignment == Qt.AlignLeft) {
root.value = parent.y - offset + root.height/2
//Center
} else {
if (root.alignment & Qt.AlignRight) {
root.value = (root.parent.height/2 - parent.y + offset)*2 + root.height/2
} else if (root.alignment & Qt.AlignLeft) {
root.value = (parent.y - offset - root.parent.height/2)*2 + root.height/2
} else {
var value = parent.y - root.parent.height/2 - offset + root.height/2
//Snap
if (Math.abs(value) < 5) {
root.value = 0
} else {
root.value = value
}
}
}
} else {
if (root.alignment == Qt.AlignRight) {
root.value = root.parent.width - (parent.x + offset + root.width/2)
} else if (alignment == Qt.AlignLeft) {
root.value = parent.x - offset + root.width/2
//Center
} else {
if (root.alignment & Qt.AlignRight) {
root.value = (root.parent.width/2 - parent.x + offset)*2 + root.width/2
} else if (root.alignment & Qt.AlignLeft) {
root.value = (parent.x - offset - root.parent.width/2)*2 + root.width/2
} else {
var value = parent.x - root.parent.width/2 - offset + root.width/2
//Snap
if (Math.abs(value) < 5) {
root.value = 0
} else {
root.value = value
}
}
}
}
}
}
states: [
State {
name: "TopEdge"
PropertyChanges {
target: root
elementId: "north-" + graphicElementName
}
},
State {
name: "BottomEdge"
PropertyChanges {
target: root
elementId: "south-" + graphicElementName
}
},
State {
name: "LeftEdge"
PropertyChanges {
target: root
elementId: "west-" + graphicElementName
}
},
State {
name: "RightEdge"
PropertyChanges {
target: root
elementId: "east-" + graphicElementName
}
}
]
}

View File

@ -1,232 +0,0 @@
/*
* Copyright 2013 Marco Martin <mart@kde.org>
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA.
*/
import QtQuick 2.0
import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.plasma.extras 2.0 as PlasmaExtras
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.configuration 2.0
Item {
id: root
state: parent.state
implicitWidth: column.width + 20
implicitHeight: row.height + 20
PlasmaComponents.ButtonRow {
id: row
spacing: 0
exclusive: false
visible: !dialogRoot.vertical
anchors {
centerIn: parent
}
EdgeHandle {
id: edgeHandle
}
SizeHandle {
id: sizeHandle
}
}
//FIXME: remove this duplication, use desktopcomponents linear layouts that can switch between horizontal and vertical
PlasmaComponents.ButtonColumn {
id: column
spacing: 0
exclusive: false
visible: dialogRoot.vertical
anchors {
centerIn: parent
}
EdgeHandle {
width: 80
}
SizeHandle {
width: 80
}
}
PlasmaComponents.Button {
id: moreSettingsButton
property QtObject contextMenu
text: "More settings"
onClicked: {
if (!contextMenu) {
contextMenu = contextMenuComponent.createObject(moreSettingsButton)
}
contextMenu.open()
}
}
Component {
id: contextMenuComponent
PlasmaComponents.ContextMenu {
visualParent: moreSettingsButton
PlasmaComponents.MenuItem {
id: leftToggle
text: "Left"
checkable: true
checked: panel.alignment == Qt.AlignLeft
onClicked: panel.alignment = Qt.AlignLeft
onToggled: {
if (checked) {
centerToggle.checked = false
rightToggle.checked = false
}
}
}
PlasmaComponents.MenuItem {
id: centerToggle
text: "Center"
checkable: true
checked: panel.alignment == Qt.AlignCenter
onClicked: panel.alignment = Qt.AlignCenter
onToggled: {
if (checked) {
leftToggle.checked = false
rightToggle.checked = false
}
}
}
PlasmaComponents.MenuItem {
id: rightToggle
text: "Right"
checkable: true
checked: panel.alignment == Qt.AlignRight
onClicked: panel.alignment = Qt.AlignRight
onToggled: {
if (checked) {
centerToggle.checked = false
leftToggle.checked = false
}
}
}
}
}
//BEGIN States
states: [
State {
name: "TopEdge"
PropertyChanges {
target: root
height: root.implicitHeight
}
AnchorChanges {
target: root
anchors {
top: undefined
bottom: root.parent.bottom
left: root.parent.left
right: root.parent.right
}
}
AnchorChanges {
target: moreSettingsButton
anchors {
verticalCenter: root.verticalCenter
horizontalCenter: undefined
top: undefined
bottom: undefined
left: undefined
right: root.right
}
}
},
State {
name: "BottomEdge"
PropertyChanges {
target: root
height: root.implicitHeight
}
AnchorChanges {
target: root
anchors {
top: root.parent.top
bottom: undefined
left: root.parent.left
right: root.parent.right
}
}
AnchorChanges {
target: moreSettingsButton
anchors {
verticalCenter: root.verticalCenter
horizontalCenter: undefined
top: undefined
bottom: undefined
left: undefined
right: root.right
}
}
},
State {
name: "LeftEdge"
PropertyChanges {
target: root
width: root.implicitWidth
}
AnchorChanges {
target: root
anchors {
top: root.parent.top
bottom: root.parent.bottom
left: undefined
right: root.parent.right
}
}
AnchorChanges {
target: moreSettingsButton
anchors {
verticalCenter: undefined
horizontalCenter: root.verticalCenter
top: undefined
bottom: root.bottom
left: undefined
right: undefined
}
}
},
State {
name: "RightEdge"
PropertyChanges {
target: root
width: root.implicitWidth
}
AnchorChanges {
target: root
anchors {
top: root.parent.top
bottom: root.parent.bottom
left: root.parent.left
right: undefined
}
}
AnchorChanges {
target: moreSettingsButton
anchors {
verticalCenter: undefined
horizontalCenter: root.verticalCenter
top: undefined
bottom: root.bottom
left: undefined
right: undefined
}
}
}
]
//END States
}

View File

@ -1,19 +0,0 @@
[Desktop]
Containment=org.kde.desktopcontainment
ToolBox=org.kde.desktoptoolbox
RuntimePlatform=
[Desktop][ContainmentActions]
RightButton;NoModifier=org.kde.contextmenu
MidButton;NoModifier=org.kde.paste
wheel:Vertical;NoModifier=org.kde.switchdesktop
[Panel]
Containment=org.kde.panel
ToolBox=org.kde.paneltoolbox
[Panel][ContainmentActions]
RightButton;NoModifier=org.kde.contextmenu
MidButton;NoModifier=org.kde.paste
[Theme]
Theme=default

View File

@ -1,197 +0,0 @@
/*
* Copyright 2011 Marco Martin <mart@kde.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Library General Public License as
* published by the Free Software Foundation; either version 2 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 Library General Public
* License along with this program; if not, write to the
* Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import QtQuick 2.0
import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.plasma.extras 2.0 as PlasmaExtras
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.draganddrop 2.0
import org.kde.qtextracomponents 2.0
PlasmaCore.FrameSvgItem {
id: background
width: list.delegateWidth
height: list.delegateHeight
property variant icon: decoration
property string title: name
property string description: model.description
property string author: model.author
property string email: model.email
property string license: model.license
property string pluginName: model.pluginName
property bool local: model.local
ListView.onRemove: SequentialAnimation {
PropertyAction {
target: background
property: "ListView.delayRemove"
value: true
}
NumberAnimation {
target: background
property: widgetExplorer.orientation == Qt.Horizontal ? "y" : "x"
to: widgetExplorer.orientation == Qt.Horizontal ? list.delegateHeight : list.delegateWidth
duration: 150
easing.type: Easing.InOutQuad
}
NumberAnimation {
target: background
property: widgetExplorer.orientation == Qt.Horizontal ? "y" : "x"
to: widgetExplorer.orientation == Qt.Horizontal ? list.delegateHeight : list.delegateWidth
duration: 150
easing.type: Easing.InOutQuad
}
NumberAnimation {
target: background
property: widgetExplorer.orientation == Qt.Horizontal ? "width" : "height"
from: widgetExplorer.orientation == Qt.Horizontal ? list.delegateWidth : list.delegateHeight
to: 0
duration: 150
easing.type: Easing.InOutQuad
}
PropertyAction {
target: background
property: "ListView.delayRemove"
value: false
}
}
ListView.onAdd: SequentialAnimation {
PropertyAction {
target: background
property: "y"
value: widgetExplorer.orientation == Qt.Horizontal ? -list.delegateHeight : -list.delegateWidth
}
NumberAnimation {
target: background
property: widgetExplorer.orientation == Qt.Horizontal ? "width" : "height"
from: 0
to: widgetExplorer.orientation == Qt.Horizontal ? list.delegateWidth : list.delegateHeight
duration: 150
easing.type: Easing.InOutQuad
}
NumberAnimation {
target: background
property: widgetExplorer.orientation == Qt.Horizontal ? "y" : "x"
to: 0
duration: 150
easing.type: Easing.InOutQuad
}
}
imagePath: "widgets/viewitem"
prefix: "normal"
DragArea {
anchors.fill: parent
supportedActions: Qt.MoveAction | Qt.LinkAction
onDragStarted: tooltipDialog.visible = false
delegateImage: background.icon
mimeData {
source: parent
}
Component.onCompleted: mimeData.setData("text/x-plasmoidservicename", pluginName)
QIconItem {
id: iconWidget
anchors.verticalCenter: parent.verticalCenter
x: y
width: theme.hugeIconSize
height: width
icon: background.icon
}
Column {
anchors {
left: iconWidget.right
right: parent.right
verticalCenter: parent.verticalCenter
leftMargin: background.margins.left
rightMargin: background.margins.right
}
spacing: 4
PlasmaExtras.Heading {
id: titleText
level: 4
text: title
// font {
// weight: Font.Bold
// pointSize: theme.smallestFont.pointSize
// }
anchors {
left: parent.left
right: parent.right
}
height: paintedHeight
wrapMode: Text.WordWrap
//go with nowrap only if there is a single word too long
onPaintedWidthChanged: {
wrapTimer.restart()
}
Timer {
id: wrapTimer
interval: 200
onTriggered: {
//give it some pixels of tolerance
if (titleText.paintedWidth > titleText.width + 3) {
titleText.wrapMode = Text.NoWrap
titleText.elide = Text.ElideRight
} else {
titleText.wrapMode = Text.WordWrap
titleText.elide = Text.ElideNone
}
}
}
}
PlasmaComponents.Label {
text: description
font.pointSize: theme.smallestFont.pointSize
anchors {
left: parent.left
right: parent.right
}
//elide: Text.ElideRight
wrapMode: Text.WordWrap
verticalAlignment: Text.AlignTop
maximumLineCount: 3
}
}
QIconItem {
icon: running ? "dialog-ok-apply" : undefined
visible: running
width: theme.smallIconSize
height: width
anchors {
right: parent.right
bottom: parent.bottom
rightMargin: background.margins.right
bottomMargin: background.margins.bottom
}
}
MouseArea {
anchors.fill: parent
hoverEnabled: true
onDoubleClicked: widgetExplorer.addApplet(pluginName)
onEntered: tooltipDialog.appletDelegate = background
onExited: tooltipDialog.appletDelegate = null
}
}
}

View File

@ -1,51 +0,0 @@
/*
* Copyright 2013 Sebastian Kügler <sebas@kde.org>
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA.
*/
import QtQuick 2.0
//import org.kde.plasma.core 2.0 as PlasmaCore
//import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.plasma.extras 2.0 as PlasmaExtras
Rectangle {
id: root
color: "pink"
width: 400
height: 800
ListView {
anchors.fill: parent
model: widgetExplorer.widgetsModel
header: PlasmaExtras.Title { text: "Add Widgets" }
delegate: Item {
width: parent.width
height: 48
Text { text: "Applet: " + pluginName }
MouseArea {
anchors.fill: parent
onClicked: widgetExplorer.addApplet(pluginName)
}
}
}
Component.onCompleted: {
print("WidgetExplorer QML loaded");
print(" found " + widgetExplorer.widgetsModel.count + " widgets");
}
}

View File

@ -1,148 +0,0 @@
/*
* Copyright 2011 Marco Martin <mart@kde.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Library General Public License as
* published by the Free Software Foundation; either version 2 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 Library General Public
* License along with this program; if not, write to the
* Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import QtQuick 2.1
import QtQuick.Layouts 1.0 as Layouts
import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.extras 2.0 as PlasmaExtras
MouseArea {
id: main
hoverEnabled: true
onEntered: toolTipHideTimer.running = false
onExited: toolTipHideTimer.running = true
width: theme.mSize(theme.defaultFont).width * 35
height: theme.mSize(theme.defaultFont).height * 16
property variant icon
property string title
property string description
property string author
property string email
property string license
property string pluginName
property bool local
onClicked: tooltipDialog.visible = false
Connections {
target: tooltipDialog
onAppletDelegateChanged: {
if (!tooltipDialog.appletDelegate) {
return
}
icon = tooltipDialog.appletDelegate.icon
title = tooltipDialog.appletDelegate.title
description = tooltipDialog.appletDelegate.description
author = tooltipDialog.appletDelegate.author
email = tooltipDialog.appletDelegate.email
license = tooltipDialog.appletDelegate.license
pluginName = tooltipDialog.appletDelegate.pluginName
local = tooltipDialog.appletDelegate.local
}
}
PlasmaCore.IconItem {
id: tooltipIconWidget
anchors {
left: parent.left
top: parent.top
margins: 8
}
width: theme.hugeIconSize
height: width
source: main.icon
}
Column {
id: nameColumn
spacing: 8
anchors {
left: tooltipIconWidget.right
margins: 8
top: parent.top
right: parent.right
}
PlasmaExtras.Heading {
text: title
level: 2
anchors.left: parent.left
anchors.right: parent.right
height: paintedHeight
wrapMode: Text.Wrap
}
PlasmaComponents.Label {
text: description
anchors.left: parent.left
anchors.right: parent.right
wrapMode: Text.Wrap
}
}
Layouts.GridLayout {
columns: 2
anchors {
top: (nameColumn.height > tooltipIconWidget.height) ? nameColumn.bottom : tooltipIconWidget.bottom
topMargin: 16
horizontalCenter: parent.horizontalCenter
}
PlasmaComponents.Label {
text: i18n("License:")
Layouts.Layout.alignment: Qt.AlignVCenter|Qt.AlignRight
}
PlasmaComponents.Label {
id: licenseText
text: license
wrapMode: Text.Wrap
}
PlasmaComponents.Label {
text: i18n("Author:")
Layouts.Layout.alignment: Qt.AlignVCenter|Qt.AlignRight
}
PlasmaComponents.Label {
text: author
wrapMode: Text.Wrap
}
PlasmaComponents.Label {
text: i18n("Email:")
Layouts.Layout.alignment: Qt.AlignVCenter|Qt.AlignRight
}
PlasmaComponents.Label {
text: email
}
}
PlasmaComponents.Button {
id: uninstallButton
anchors {
horizontalCenter: parent.horizontalCenter
bottom: parent.bottom
}
opacity: local ? 1 : 0
Behavior on opacity {
NumberAnimation { duration: 250 }
}
iconSource: "application-exit"
text: i18n("Uninstall")
onClicked: {
widgetExplorer.uninstall(pluginName)
tooltipDialog.visible = false
}
}
}

View File

@ -1,366 +0,0 @@
/*
* Copyright 2011 Marco Martin <mart@kde.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Library General Public License as
* published by the Free Software Foundation; either version 2 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 Library General Public
* License along with this program; if not, write to the
* Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import QtQuick 2.0
import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.extras 2.0 as PlasmaExtras
import org.kde.qtextracomponents 2.0
import QtQuick.Window 2.1
import org.kde.plasma.private.shell 2.0
Item {
id: main
width: 240
height: 800//Screen.height
//this is used to perfectly align the filter field and delegates
property int cellWidth: theme.mSize(theme.defaultFont).width * 10
property int minimumWidth: theme.mSize(theme.defaultFont).width * 12
property int minimumHeight: 800//topBar.height + list.delegateHeight + (widgetExplorer.orientation == Qt.Horizontal ? scrollBar.height : 0) + 4
property alias containment: widgetExplorer.containment
property Item getWidgetsButton
property Item categoryButton
signal closed()
WidgetExplorer {
id: widgetExplorer
//view: desktop
onShouldClose: main.closed();
}
PlasmaComponents.ContextMenu {
id: categoriesDialog
visualParent: main.categoryButton
}
Repeater {
parent: categoriesDialog
model: widgetExplorer.filterModel
delegate: Item {
PlasmaComponents.MenuItem {
text: display
separator: model["separator"] != undefined ? model["separator"] : false
onClicked: {
list.contentX = 0
list.contentY = 0
main.categoryButton.text = display
widgetExplorer.widgetsModel.filterQuery = model["filterData"]
widgetExplorer.widgetsModel.filterType = model["filterType"]
}
Component.onCompleted: {
parent = categoriesDialog
}
}
}
}
PlasmaComponents.ContextMenu {
id: getWidgetsDialog
visualParent: main.getWidgetsButton
}
Repeater {
parent: getWidgetsDialog
model: widgetExplorer.widgetsMenuActions
delegate: Item {
PlasmaComponents.MenuItem {
icon: modelData.icon
text: modelData.text
separator: modelData.separator
onClicked: modelData.trigger()
Component.onCompleted: {
parent = getWidgetsDialog
}
}
}
}
PlasmaCore.Dialog {
id: tooltipDialog
property Item appletDelegate
location: PlasmaCore.Types.LeftEdge
type: PlasmaCore.Dialog.Tooltip
windowFlags:Qt.Window|Qt.WindowStaysOnTopHint|Qt.X11BypassWindowManagerHint
onAppletDelegateChanged: {
if (!appletDelegate) {
toolTipHideTimer.restart()
toolTipShowTimer.running = false
} else if (tooltipDialog.visible) {
tooltipDialog.visualParent = appletDelegate
tooltipDialog.x = point.x
tooltipDialog.y = point.y
} else {
tooltipDialog.visualParent = appletDelegate
toolTipShowTimer.restart()
toolTipHideTimer.running = false
}
}
mainItem: Tooltip { id: tooltipWidget }
Behavior on x {
enabled: widgetExplorer.orientation == Qt.Horizontal
NumberAnimation { duration: 250 }
}
Behavior on y {
enabled: widgetExplorer.orientation == Qt.Vertical
NumberAnimation { duration: 250 }
}
}
Timer {
id: toolTipShowTimer
interval: 500
repeat: false
onTriggered: {
tooltipDialog.visible = true
}
}
Timer {
id: toolTipHideTimer
interval: 1000
repeat: false
onTriggered: tooltipDialog.visible = false
}
Loader {
id: topBar
property Item categoryButton
sourceComponent: (widgetExplorer.orientation == Qt.Horizontal) ? horizontalTopBarComponent : verticalTopBarComponent
height: item.height + 2
anchors {
top: parent.top
left: parent.left
right: parent.right
topMargin: widgetExplorer.orientation == Qt.Horizontal ? 4 : 0
leftMargin: 4
}
}
Component {
id: horizontalTopBarComponent
Item {
anchors {
top: parent.top
left: parent.left
right: parent.right
}
height: filterField.height
Row {
spacing: 5
anchors {
left: parent.left
leftMargin: 2
}
PlasmaComponents.TextField {
id: filterField
width: list.width / Math.floor(list.width / cellWidth) - 4
clearButtonShown: true
placeholderText: i18n("Enter search term...")
onTextChanged: {
list.contentX = 0
list.contentY = 0
widgetExplorer.widgetsModel.searchTerm = text
}
Component.onCompleted: forceActiveFocus()
}
PlasmaComponents.Button {
id: categoryButton
text: i18n("Categories")
onClicked: categoriesDialog.open(0, categoryButton.height)
}
}
Row {
anchors.right: parent.right
spacing: 5
PlasmaComponents.Button {
id: getWidgetsButton
iconSource: "get-hot-new-stuff"
text: i18n("Get new widgets")
onClicked: getWidgetsDialog.open()
}
Repeater {
model: widgetExplorer.extraActions.length
PlasmaComponents.Button {
iconSource: widgetExplorer.extraActions[modelData].icon
text: widgetExplorer.extraActions[modelData].text
onClicked: {
widgetExplorer.extraActions[modelData].trigger()
}
}
}
PlasmaComponents.ToolButton {
iconSource: "window-close"
onClicked: main.closed()
}
}
Component.onCompleted: {
main.getWidgetsButton = getWidgetsButton
main.categoryButton = categoryButton
}
}
}
Component {
id: verticalTopBarComponent
Column {
anchors.top: parent.top
anchors.left:parent.left
anchors.right: parent.right
spacing: 4
PlasmaComponents.ToolButton {
anchors.right: parent.right
iconSource: "window-close"
onClicked: main.closed()
}
PlasmaComponents.TextField {
anchors {
left: parent.left
right: parent.right
}
clearButtonShown: true
placeholderText: i18n("Enter search term...")
onTextChanged: {
list.contentX = 0
list.contentY = 0
widgetExplorer.widgetsModel.searchTerm = text
}
Component.onCompleted: forceActiveFocus()
}
PlasmaComponents.Button {
anchors {
left: parent.left
right: parent.right
}
id: categoryButton
text: i18n("Categories")
onClicked: categoriesDialog.open(0, categoryButton.height)
}
Component.onCompleted: {
main.categoryButton = categoryButton
}
}
}
MouseEventListener {
id: listParent
anchors {
top: topBar.bottom
left: parent.left
right: parent.right
bottom: widgetExplorer.orientation == Qt.Horizontal ? parent.bottom : bottomBar.top
leftMargin: 4
bottomMargin: 4
}
onWheelMoved: {
//use this only if the wheel orientation is vertical and the list orientation is horizontal, otherwise will be the list itself managing the wheel
if (wheel.orientation == Qt.Vertical && list.orientation == ListView.Horizontal) {
var delta = wheel.delta > 0 ? 20 : -20
list.contentX = Math.min(Math.max(0, list.contentWidth - list.width),
Math.max(0, list.contentX - delta))
}
}
PlasmaExtras.ScrollArea {
anchors.fill: parent
ListView {
id: list
property int delegateWidth: (widgetExplorer.orientation == Qt.Horizontal) ? (list.width / Math.floor(list.width / cellWidth)) : list.width
property int delegateHeight: theme.defaultFont.pixelSize * 7 - 4
anchors.fill: parent
orientation: widgetExplorer.orientation == Qt.Horizontal ? ListView.Horizontal : ListView.Vertical
snapMode: ListView.SnapToItem
model: widgetExplorer.widgetsModel
clip: widgetExplorer.orientation == Qt.Vertical
delegate: AppletDelegate {}
}
}
}
Loader {
id: bottomBar
sourceComponent: (widgetExplorer.orientation == Qt.Horizontal) ? undefined : verticalBottomBarComponent
//height: item.height
height: 48 // FIXME
anchors {
left: parent.left
right: parent.right
bottom: parent.bottom
leftMargin: 4
}
}
Component {
id: verticalBottomBarComponent
Column {
anchors {
left: parent.left
right: parent.right
bottom: parent.bottom
}
spacing: 4
PlasmaComponents.Button {
anchors {
left: parent.left
right: parent.right
}
id: getWidgetsButton
iconSource: "get-hot-new-stuff"
text: i18n("Get new widgets")
onClicked: getWidgetsDialog.open()
}
Repeater {
model: widgetExplorer.extraActions.length
PlasmaComponents.Button {
anchors {
left: parent.left
right: parent.right
}
iconSource: widgetExplorer.extraActions[modelData].icon
text: widgetExplorer.extraActions[modelData].text
onClicked: {
widgetExplorer.extraActions[modelData].trigger()
}
}
}
Component.onCompleted: {
main.getWidgetsButton = getWidgetsButton
}
}
}
}

View File

@ -1,16 +0,0 @@
var panel = new Panel
panel.screen = 0
panel.location = 'top'
panel.addWidget("org.kde.kickoff")
panel.addWidget("org.kde.plasma.taskmanager")
panel.addWidget("org.kde.systemtray")
for (var i = 0; i < screenCount; ++i) {
var desktop = new Activity
desktop.name = i18n("Desktop")
desktop.screen = i
desktop.wallpaperPlugin = 'org.kde.image'
var clock = desktop.addWidget("org.kde.analogclock");
}

View File

@ -1,41 +0,0 @@
/* vim:set foldmethod=marker:
*
* Copyright (C) 2013 Ivan Cukic <ivan.cukic(at)kde.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2,
* or (at your option) any later version, as published by the Free
* Software Foundation
*
* 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, write to the
* Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import QtQuick 2
import org.kde.solid 1.0 as Solid
import QtQuick.Window 2.0
Item {
id: main
property string shell : "org.kde.desktop"
property bool willing : true
property int priority : 1
// This is not needed, but allows the
// handler to know whether its shell is loaded
property bool loaded : false
Solid.Devices {
id: keyboards
query: "IS Keyboard"
}
}

View File

@ -1,191 +0,0 @@
/*
* Copyright 2012 Marco Martin <mart@kde.org>
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA.
*/
import QtQuick 2.0
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.components 2.0 as PlasmaComponents
import "../activitymanager"
import "../explorer"
Rectangle {
id: root
color: Qt.rgba(0, 0, 0, 0.2)
width: 1024
height: 768
property Item containment
function toggleWidgetExplorer(containment) {
console.log("Widget Explorer toggled");
sidePanelStack.pop(blankPage);
if (sidePanelStack.state == "widgetExplorer") {
sidePanelStack.state = "closed";
} else {
var page = sidePanelStack.push(Qt.resolvedUrl("../explorer/WidgetExplorer.qml"));
page.closed.connect(function(){sidePanelStack.state = "closed";});
page.containment = containment;
sidePanelStack.state = "widgetExplorer";
}
}
function toggleActivityManager() {
console.log("Activity manger toggled");
sidePanelStack.pop(blankPage);
if (sidePanelStack.state == "activityManager") {
sidePanelStack.state = "closed";
} else {
var page = sidePanelStack.push(Qt.resolvedUrl("../activitymanager/ActivityManager.qml"));
page.closed.connect(function(){sidePanelStack.state = "closed";});
sidePanelStack.state = "activityManager";
}
}
PlasmaCore.Dialog {
id: sidePanel
location: PlasmaCore.Types.LeftEdge
onVisibleChanged: {
if (!visible) {
sidePanelStack.pop(blankPage);
}
}
type: PlasmaCore.Dialog.Dock
windowFlags: Qt.Window|Qt.WindowStaysOnTopHint|Qt.X11BypassWindowManagerHint
mainItem: PlasmaComponents.PageStack {
id: sidePanelStack
state: "closed"
width: 250
height: 500
initialPage: Item {
id: blankPage
}
states: [
State {
name: "closed"
PropertyChanges {
target: sidePanel
visible: false
height: containment.availableScreenRegion(containment.screen)[0].height;
}
},
State {
name: "widgetExplorer"
PropertyChanges {
target: sidePanel
visible: true
height: containment.availableScreenRegion(containment.screen)[0].height;
}
},
State {
name: "activityManager"
PropertyChanges {
target: sidePanel
visible: true
height: containment.availableScreenRegion(containment.screen)[0].height;
}
}
]
}
}
onContainmentChanged: {
print("New Containment: " + containment);
print("Old Containment: " + internal.oldContainment);
//containment.parent = root;
containment.visible = true;
internal.newContainment = containment;
if (internal.oldContainment && internal.oldContainment != containment) {
switchAnim.running = true;
} else {
internal.oldContainment = containment;
}
}
//some properties that shouldn't be accessible from elsewhere
QtObject {
id: internal;
property Item oldContainment;
property Item newContainment;
}
SequentialAnimation {
id: switchAnim
ScriptAction {
script: {
containment.anchors.left = undefined;
containment.anchors.top = undefined;
containment.anchors.right = undefined;
containment.anchors.bottom = undefined;
internal.oldContainment.anchors.left = undefined;
internal.oldContainment.anchors.top = undefined;
internal.oldContainment.anchors.right = undefined;
internal.oldContainment.anchors.bottom = undefined;
internal.oldContainment.z = 0;
internal.oldContainment.x = 0;
containment.z = 1;
containment.x = root.width;
}
}
ParallelAnimation {
NumberAnimation {
target: internal.oldContainment
properties: "x"
to: -root.width
duration: 400
easing.type: Easing.InOutQuad
}
NumberAnimation {
target: internal.newContainment
properties: "x"
to: 0
duration: 250
easing.type: Easing.InOutQuad
}
}
ScriptAction {
script: {
containment.anchors.left = root.left;
containment.anchors.top = root.top;
containment.anchors.right = root.right;
containment.anchors.bottom = root.bottom;
internal.oldContainment.visible = false;
internal.oldContainment = containment;
}
}
}
Component.onCompleted: {
//configure the view behavior
desktop.stayBehind = true;
desktop.fillScreen = true;
print("View org.kde.desktop QML loaded")
}
}

View File

@ -1,142 +0,0 @@
/*
* Copyright 2012 Marco Martin <mart@kde.org>
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA.
*/
import QtQuick 2.0
//import org.kde.plasma 2.0
import org.kde.plasma.core 2.0 as PlasmaCore
PlasmaCore.FrameSvgItem {
id: root
width: 640
height: 32
imagePath: "widgets/panel-background"
property Item containment
function adjustBorders() {
if (!containment) {
return;
}
var borders = PlasmaCore.FrameSvg.AllBorders;
switch (containment.location) {
case PlasmaCore.Types.TopEdge:
borders = borders & ~PlasmaCore.FrameSvg.TopBorder;
break;
case PlasmaCore.Types.LeftEdge:
borders = borders & ~PlasmaCore.FrameSvg.LeftBorder;
break;
case PlasmaCore.Types.RightEdge:
borders = borders & ~PlasmaCore.FrameSvg.RightBorder;
break;
case PlasmaCore.Types.BottomEdge:
default:
borders = borders & ~PlasmaCore.FrameSvg.BottomBorder;
break;
}
if (panel.x <= panel.screen.geometry.x) {
borders = borders & ~PlasmaCore.FrameSvg.LeftBorder;
}
if (panel.x + panel.width >= panel.screen.geometry.x + panel.screen.geometry.width) {
borders = borders & ~PlasmaCore.FrameSvg.RightBorder;
}
if (panel.y <= panel.screen.geometry.y) {
borders = borders & ~PlasmaCore.FrameSvg.TopBorder;
}
if (panel.y + panel.height >= panel.screen.geometry.y + panel.screen.geometry.height) {
borders = borders & ~PlasmaCore.FrameSvg.BottomBorder;
}
root.enabledBorders = borders;
}
onContainmentChanged: {
print("New panel Containment: " + containment)
//containment.parent = root
containment.visible = true
containment.anchors.fill = root
}
Connections {
target: containment
onLocationChanged: {
adjustBorders()
}
onMinimumWidthChanged: {
if (containment.formFactor === PlasmaCore.Types.Horizontal) {
panel.width = Math.max(panel.width, panel.minimumLength);
}
}
onMaximumWidthChanged: {
if (containment.formFactor === PlasmaCore.Types.Horizontal) {
panel.width = Math.min(panel.width, panel.maximumLength);
}
}
onImplicitWidthChanged: {
if (containment.formFactor === PlasmaCore.Types.Horizontal) {
panel.width = Math.min(panel.maximumLength, Math.max(containment.implicitWidth, panel.minimumLength));
}
}
onMinimumHeightChanged: {
if (containment.formFactor === PlasmaCore.Types.Vertical) {
panel.width = Math.max(panel.width, panel.minimumLength);
}
}
onMaximumHeightChanged: {
if (containment.formFactor === PlasmaCore.Types.Vertical) {
panel.width = Math.min(panel.width, panel.maximumLength);
}
}
onImplicitHeightChanged: {
if (containment.formFactor === PlasmaCore.Types.Vertical) {
panel.width = Math.min(panel.maximumLength, Math.max(containment.implicitHeight, panel.minimumLength));
}
}
}
Connections {
target: panel
onXChanged: {
adjustBorders();
}
onYChanged: {
adjustBorders();
}
onWidthChanged: {
adjustBorders();
}
onHeightChanged: {
adjustBorders();
}
}
Connections {
target: panel.screen
onGeometryChanged: {
adjustBorders();
}
}
Component.onCompleted: {
print("PanelView QML loaded")
}
}

View File

@ -1,44 +0,0 @@
[Desktop Entry]
Comment=Desktop view furniture
Comment[fr]=Présentation de la vue du bureau
Comment[mr]= ि
Comment[nl]=Meubilair voor weergave op het bureaublad
Comment[pl]=Umeblowanie widoku pulpitu
Comment[pt]=Componentes do ecrã
Comment[pt_BR]=Acessório de visualização da área de trabalho
Comment[sk]=Zobrazenie plochy nábytok
Comment[sv]=Visa skrivbordsmöbler
Comment[uk]=Компоненти для перегляду стільниці
Comment[x-test]=xxDesktop view furniturexx
Encoding=UTF-8
Keywords=
Name=Desktop
Name[bs]=Površ
Name[cs]=Pracovní plocha
Name[de]=Arbeitsfläche
Name[es]=Escritorio
Name[fi]=Työpöytä
Name[fr]=Bureau
Name[mr]=
Name[nl]=Bureaublad
Name[pl]=Pulpit
Name[pt]=Ambiente de Trabalho
Name[pt_BR]=Área de trabalho
Name[sk]=Plocha
Name[sv]=Skrivbord
Name[tr]=Masaüstü
Name[ug]=ئۈستەلئۈستى
Name[uk]=Стільниця
Name[x-test]=xxDesktopxx
Type=Service
X-KDE-ServiceTypes=Plasma/Shell
X-KDE-ParentApp=
X-KDE-PluginInfo-Author=Marco Martin
X-KDE-PluginInfo-Category=
X-KDE-PluginInfo-Email=mart@kde.org
X-KDE-PluginInfo-License=GPLv2+
X-KDE-PluginInfo-Name=org.kde.desktop
X-KDE-PluginInfo-Version=
X-KDE-PluginInfo-Website=
X-Plasma-MainScript=layout.js

View File

@ -1,3 +0,0 @@
#! /usr/bin/env bash
$XGETTEXT `find . -name \*.qml` -L Java -o $podir/plasma_lookandfeel_org.kde.lookandfeel.pot
rm -f rc.cpp

View File

@ -1,49 +0,0 @@
[Desktop Entry]
Comment=Desktop Design Language
Comment[fr]=Langage de conception de bureau
Comment[nl]=Ontwerptaal van het bureaublad
Comment[pl]=Język Projektu Pulpitu
Comment[pt]=Linguagem de Desenho do Ecrã
Comment[pt_BR]=Linguagem de desenho da área de trabalho
Comment[sk]=Jazyk dizajnu plochy
Comment[sv]=Konstruktionsspråk för skrivbord
Comment[uk]=Мова розробки для стільниці
Comment[x-test]=xxDesktop Design Languagexx
Encoding=UTF-8
Keywords=Desktop, Workspace, Appearance, Look and Feel, Logout, Lock, Suspend, Shutdown, Hibernate,
Keywords[fr]=Bureau,Espace de travail,Apparence,Déconnexion,Verouillage,Mise en veille,Extinction,Hibernation.
Keywords[nl]=Bureaublad, werkruimte, uiterlijk, uiterlijk en gedrag, afmelden, vergrendelen, onderbreken, afsluiten, slapen,
Keywords[pl]=Pulpit, Przestrzeń robocza, Wygląd, Wygląd, Wyloguj, Zablokuj, Wstrzymaj, Wyłącz, Hibernuj,
Keywords[pt]=Ecrã, Área de Trabalho, Aparência, Aparência e Comportamento, Encerrar, Bloquear, Suspender, Desligar, Hibernar,
Keywords[pt_BR]=Área de trabalho, Espaço de trabalho, Aparência, Aparência e Comportamento, Encerrar sessão, Bloquear, Suspender, Desligar, Hibernar,
Keywords[sk]=Plocha, pracovná plocha, vzhľad, nastavenie, odhlásenie, zamknutie, uspanie, vypnutie, hibernácia,
Keywords[sv]=Skrivbord, Arbetsyta, Utseende, Utseende och känsla, Utloggning, Lås, Viloläge, Avstängning, Dvala,
Keywords[uk]=стільниця;робочий;простір;вигляд;поведінка;вихід;блокування;призупинення;призупинка;присипляння;вимикання;Desktop;Workspace;Appearance;Look and Feel;Logout;Lock;Suspend;Shutdown;Hibernate;
Keywords[x-test]=xxDesktop, Workspace, Appearance, Look and Feel, Logout, Lock, Suspend, Shutdown, Hibernate,xx
Name=Look and Feel
Name[cs]=Vzhled a dojem
Name[de]=Erscheinungsbild
Name[fi]=Ulkoasu ja tuntuma
Name[fr]=Apparence
Name[hu]=Megjelenés
Name[nl]=Uiterlijk en gedrag
Name[pl]=Wygląd
Name[pt]=Aparência e Comportamento
Name[pt_BR]=Aparência e comportamento
Name[sk]=Vzhľad a nastavenie
Name[sv]=Utseende och känsla
Name[ug]=كۆرۈنۈش ۋە تۇيغۇ
Name[uk]=Вигляд і поведінка
Name[x-test]=xxLook and Feelxx
Type=Service
X-KDE-ServiceTypes=Plasma/LookAndFeel
X-KDE-ParentApp=
X-KDE-PluginInfo-Author=Sebastian Kügler
X-KDE-PluginInfo-Category=
X-KDE-PluginInfo-Email=sebas@kde.org
X-KDE-PluginInfo-License=GPLv2+
X-KDE-PluginInfo-Name=org.kde.lookandfeel
X-KDE-PluginInfo-Version=2.0
X-KDE-PluginInfo-Website=http://www.kde.org
X-Plasma-MainScript=defaults