Adjust to new API
This commit is contained in:
commit
8c93578acf
@ -1,10 +1,12 @@
|
|||||||
|
|
||||||
|
plasma_install_package(config org.kde.example.configuration)
|
||||||
plasma_install_package(localegallery org.kde.example.locale)
|
plasma_install_package(localegallery org.kde.example.locale)
|
||||||
|
plasma_install_package(notes org.kde.example.notes)
|
||||||
plasma_install_package(widgetgallery org.kde.example.widgetgallery)
|
plasma_install_package(widgetgallery org.kde.example.widgetgallery)
|
||||||
plasma_install_package(qmltasks org.kde.example.tasks)
|
plasma_install_package(qmltasks org.kde.example.tasks)
|
||||||
plasma_install_package(windowthumbnails org.kde.example.windowthumbnails)
|
plasma_install_package(windowthumbnails org.kde.example.windowthumbnails)
|
||||||
plasma_install_package(conditionalloader org.kde.example.conditionalloader)
|
plasma_install_package(conditionalloader org.kde.example.conditionalloader)
|
||||||
plasma_install_package(testcomponents org.kde.example.testcomponents)
|
plasma_install_package(testcomponents org.kde.example.testcomponents)
|
||||||
plasma_install_package(testshaders org.kde.example.testshaders)
|
plasma_install_package(testshaders org.kde.example.testshaders)
|
||||||
plasma_install_package(helloworld org.kde.examples.helloworld)
|
plasma_install_package(helloworld org.kde.example.helloworld)
|
||||||
plasma_install_package(compactrepresentation org.kde.examples.compactrepresentation)
|
plasma_install_package(compactrepresentation org.kde.example.compactrepresentation)
|
||||||
|
@ -3,6 +3,7 @@ Comment=
|
|||||||
Encoding=UTF-8
|
Encoding=UTF-8
|
||||||
Keywords=
|
Keywords=
|
||||||
Name=hello world
|
Name=hello world
|
||||||
|
Name[de]=Hallo Welt
|
||||||
Name[nl]=hallo wereld
|
Name[nl]=hallo wereld
|
||||||
Name[pt]=olá mundo
|
Name[pt]=olá mundo
|
||||||
Name[pt_BR]=Olá mundo
|
Name[pt_BR]=Olá mundo
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import QtQuick 2.0
|
import QtQuick 2.0
|
||||||
|
import QtQuick.Controls 1.0 as QtControls
|
||||||
|
|
||||||
import org.kde.plasma.core 2.0 as PlasmaCore
|
import org.kde.plasma.core 2.0 as PlasmaCore
|
||||||
import org.kde.plasma.components 2.0 as PlasmaComponents
|
import org.kde.plasma.components 2.0 as PlasmaComponents
|
||||||
@ -36,10 +37,10 @@ Item {
|
|||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
spacing: 4
|
spacing: 4
|
||||||
Row {
|
Row {
|
||||||
PlasmaComponents.Label {
|
QtControls.Label {
|
||||||
text: "Text Config value"
|
text: "Text Config value"
|
||||||
}
|
}
|
||||||
PlasmaComponents.TextField {
|
QtControls.TextField {
|
||||||
id: testConfigField
|
id: testConfigField
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
34
examples/applets/config/contents/config/config.qml
Normal file
34
examples/applets/config/contents/config/config.qml
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* 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
|
||||||
|
|
||||||
|
ConfigModel {
|
||||||
|
ConfigCategory {
|
||||||
|
name: "General"
|
||||||
|
icon: "plasma"
|
||||||
|
source: "configGeneral.qml"
|
||||||
|
}
|
||||||
|
ConfigCategory {
|
||||||
|
name: "Other page"
|
||||||
|
icon: "konqueror"
|
||||||
|
source: "configSecondPage.qml"
|
||||||
|
}
|
||||||
|
}
|
42
examples/applets/config/contents/config/main.xml
Normal file
42
examples/applets/config/contents/config/main.xml
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<kcfg xmlns="http://www.kde.org/standards/kcfg/1.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0
|
||||||
|
http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" >
|
||||||
|
<kcfgfile name=""/>
|
||||||
|
|
||||||
|
<group name="General">
|
||||||
|
<entry name="Test" type="String">
|
||||||
|
<label>This is a test</label>
|
||||||
|
<default>test</default>
|
||||||
|
</entry>
|
||||||
|
<entry name="BoolTest" type="Bool">
|
||||||
|
<default>true</default>
|
||||||
|
</entry>
|
||||||
|
<entry name="IntTest" type="Int">
|
||||||
|
<default>1</default>
|
||||||
|
<min>-1</min>
|
||||||
|
<max>100</max>
|
||||||
|
</entry>
|
||||||
|
</group>
|
||||||
|
|
||||||
|
<group name="Group2">
|
||||||
|
<entry name="OtherTest" type="String">
|
||||||
|
<label>This is another test</label>
|
||||||
|
<default>test2</default>
|
||||||
|
</entry>
|
||||||
|
<entry name="EnumTest" type="Enum">
|
||||||
|
<default>Value2</default>
|
||||||
|
<choices>
|
||||||
|
<choice name="Value0"/>
|
||||||
|
<choice name="Value1"/>
|
||||||
|
<choice name="Value2"/>
|
||||||
|
<choice name="Value3"/>
|
||||||
|
<choice name="Value4"/>
|
||||||
|
<choice name="Value5"/>
|
||||||
|
<choice name="Value6"/>
|
||||||
|
</choices>
|
||||||
|
</entry>
|
||||||
|
</group>
|
||||||
|
|
||||||
|
</kcfg>
|
57
examples/applets/config/contents/ui/configGeneral.qml
Normal file
57
examples/applets/config/contents/ui/configGeneral.qml
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
/*
|
||||||
|
* 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
|
||||||
|
import org.kde.plasma.components 2.0 as PlasmaComponents
|
||||||
|
|
||||||
|
|
||||||
|
Item {
|
||||||
|
id: iconsPage
|
||||||
|
width: childrenRect.width
|
||||||
|
height: childrenRect.height
|
||||||
|
implicitWidth: mainColumn.implicitWidth
|
||||||
|
implicitHeight: pageColumn.implicitHeight
|
||||||
|
|
||||||
|
property alias cfg_Test: testConfigField.text
|
||||||
|
property alias cfg_BoolTest: testBoolConfigField.checked
|
||||||
|
|
||||||
|
Column {
|
||||||
|
id: pageColumn
|
||||||
|
anchors.fill: parent
|
||||||
|
spacing: 4
|
||||||
|
Row {
|
||||||
|
QtControls.Label {
|
||||||
|
text: "Text Config value"
|
||||||
|
}
|
||||||
|
QtControls.TextField {
|
||||||
|
id: testConfigField
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Row {
|
||||||
|
QtControls.Label {
|
||||||
|
text: "Bool Config value"
|
||||||
|
}
|
||||||
|
QtControls.CheckBox {
|
||||||
|
id: testBoolConfigField
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
76
examples/applets/config/contents/ui/main.qml
Normal file
76
examples/applets/config/contents/ui/main.qml
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
/*
|
||||||
|
* 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.1
|
||||||
|
import QtQuick.Layouts 1.0
|
||||||
|
|
||||||
|
import org.kde.plasma.core 2.0 as PlasmaCore
|
||||||
|
import org.kde.plasma.components 2.0 as PlasmaComponents
|
||||||
|
|
||||||
|
Item {
|
||||||
|
id: root
|
||||||
|
width: 100
|
||||||
|
height: 100
|
||||||
|
property int minimumWidth: units.gridUnit * 20
|
||||||
|
property int minimumHeight: column.implicitHeight
|
||||||
|
|
||||||
|
|
||||||
|
ColumnLayout {
|
||||||
|
id: column
|
||||||
|
anchors.centerIn: parent
|
||||||
|
PlasmaComponents.Label {
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
text: i18n("String test")
|
||||||
|
}
|
||||||
|
PlasmaComponents.TextField {
|
||||||
|
text: plasmoid.configuration.Test
|
||||||
|
onTextChanged: plasmoid.configuration.Test = text
|
||||||
|
}
|
||||||
|
PlasmaComponents.CheckBox {
|
||||||
|
enabled: true
|
||||||
|
checked: plasmoid.configuration.BoolTest
|
||||||
|
text: i18n("Bool from config")
|
||||||
|
onCheckedChanged: plasmoid.configuration.BoolTest = checked
|
||||||
|
}
|
||||||
|
PlasmaComponents.Label {
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
text: i18n("String from another group")
|
||||||
|
}
|
||||||
|
PlasmaComponents.TextField {
|
||||||
|
text: plasmoid.configuration.OtherTest
|
||||||
|
onTextChanged: plasmoid.configuration.OtherTest = text
|
||||||
|
}
|
||||||
|
PlasmaComponents.Label {
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
text: i18n("Enum: displayed as int,\n written as string")
|
||||||
|
}
|
||||||
|
PlasmaComponents.TextField {
|
||||||
|
text: plasmoid.configuration.EnumTest
|
||||||
|
onTextChanged: plasmoid.configuration.EnumTest = text
|
||||||
|
}
|
||||||
|
PlasmaComponents.Label {
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
text: i18n("Integer: minimum -1,\n maximum 100")
|
||||||
|
}
|
||||||
|
PlasmaComponents.TextField {
|
||||||
|
text: plasmoid.configuration.IntTest
|
||||||
|
onTextChanged: plasmoid.configuration.IntTest = text
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
25
examples/applets/config/metadata.desktop
Normal file
25
examples/applets/config/metadata.desktop
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Encoding=UTF-8
|
||||||
|
Keywords=
|
||||||
|
Name=Configuration test
|
||||||
|
Name[de]=Einrichtungstest
|
||||||
|
Name[nl]=Test van instellingen
|
||||||
|
Name[pt]=Teste de configuração
|
||||||
|
Name[pt_BR]=Teste de configuração
|
||||||
|
Name[sk]=Test nastavenia
|
||||||
|
Name[sv]=Inställningstest
|
||||||
|
Name[uk]=Перевірка налаштувань
|
||||||
|
Name[x-test]=xxConfiguration testxx
|
||||||
|
Type=Service
|
||||||
|
|
||||||
|
X-KDE-ServiceTypes=Plasma/Applet
|
||||||
|
X-Plasma-API=declarativeappletscript
|
||||||
|
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.example.configuration
|
||||||
|
X-KDE-PluginInfo-Version=
|
||||||
|
X-KDE-PluginInfo-Website=
|
||||||
|
X-Plasma-MainScript=ui/main.qml
|
@ -3,6 +3,7 @@ Comment=
|
|||||||
Encoding=UTF-8
|
Encoding=UTF-8
|
||||||
Keywords=
|
Keywords=
|
||||||
Name=hello world
|
Name=hello world
|
||||||
|
Name[de]=Hallo Welt
|
||||||
Name[nl]=hallo wereld
|
Name[nl]=hallo wereld
|
||||||
Name[pt]=olá mundo
|
Name[pt]=olá mundo
|
||||||
Name[pt_BR]=Olá mundo
|
Name[pt_BR]=Olá mundo
|
||||||
|
@ -1,12 +1,14 @@
|
|||||||
[Desktop Entry]
|
[Desktop Entry]
|
||||||
Encoding=UTF-8
|
Encoding=UTF-8
|
||||||
Name=Locale gallery
|
Name=Locale gallery
|
||||||
|
Name[nl]=Lokale galerij
|
||||||
Name[pt]=Galeria regional
|
Name[pt]=Galeria regional
|
||||||
Name[pt_BR]=Galeria regional
|
Name[pt_BR]=Galeria regional
|
||||||
Name[sv]=Locale-galleri
|
Name[sv]=Locale-galleri
|
||||||
Name[uk]=Галерея локалей
|
Name[uk]=Галерея локалей
|
||||||
Name[x-test]=xxLocale galleryxx
|
Name[x-test]=xxLocale galleryxx
|
||||||
Comment=gallery of KLocale QML Bindings
|
Comment=gallery of KLocale QML Bindings
|
||||||
|
Comment[nl]=galerij van KLocale QML-bindingen
|
||||||
Comment[pt]=Galeria de Interfaces em QML do KLocale
|
Comment[pt]=Galeria de Interfaces em QML do KLocale
|
||||||
Comment[pt_BR]=Galeria de interfaces em QML do KLocale
|
Comment[pt_BR]=Galeria de interfaces em QML do KLocale
|
||||||
Comment[sv]=galleri av QML-bindningar för KLocale
|
Comment[sv]=galleri av QML-bindningar för KLocale
|
||||||
|
15
examples/applets/notes/contents/config/main.xml
Normal file
15
examples/applets/notes/contents/config/main.xml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<kcfg xmlns="http://www.kde.org/standards/kcfg/1.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0
|
||||||
|
http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" >
|
||||||
|
<kcfgfile name=""/>
|
||||||
|
|
||||||
|
<group name="General">
|
||||||
|
<entry name="Text" type="String">
|
||||||
|
<label>Notes text</label>
|
||||||
|
<default>Hello!</default>
|
||||||
|
</entry>
|
||||||
|
</group>
|
||||||
|
|
||||||
|
</kcfg>
|
45
examples/applets/notes/contents/ui/main.qml
Normal file
45
examples/applets/notes/contents/ui/main.qml
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
/*
|
||||||
|
* 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
|
||||||
|
|
||||||
|
PlasmaCore.SvgItem {
|
||||||
|
property int minimumWidth: 150
|
||||||
|
property int minimumHeight: 150
|
||||||
|
svg: PlasmaCore.Svg("widgets/notes")
|
||||||
|
elementId: "yellow-notes"
|
||||||
|
|
||||||
|
Connections {
|
||||||
|
target: plasmoid
|
||||||
|
onExternalData: {
|
||||||
|
if (mimetype === "text/plain") {
|
||||||
|
noteText.text = data
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
PlasmaComponents.TextArea {
|
||||||
|
id: noteText
|
||||||
|
anchors.fill: parent
|
||||||
|
text: plasmoid.configuration.Text
|
||||||
|
onTextChanged: plasmoid.configuration.Text = text
|
||||||
|
}
|
||||||
|
}
|
31
examples/applets/notes/metadata.desktop
Normal file
31
examples/applets/notes/metadata.desktop
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Comment=Example on how to manage Drop data
|
||||||
|
Comment[nl]=Voorbeeld van hoe gegevens van Drop te beheren
|
||||||
|
Comment[pt]=Exemplo de gestão de dados do Drop
|
||||||
|
Comment[pt_BR]=Exemplo de gerenciamento de dados do Drop
|
||||||
|
Comment[sv]=Exempel på hur Släpp data hanteras
|
||||||
|
Comment[uk]=Приклад керування скинутими даними
|
||||||
|
Comment[x-test]=xxExample on how to manage Drop dataxx
|
||||||
|
Encoding=UTF-8
|
||||||
|
Keywords=
|
||||||
|
Name=Example notes
|
||||||
|
Name[nl]=Voorbeeldnotities
|
||||||
|
Name[pt]=Notas de exemplo
|
||||||
|
Name[pt_BR]=Notas de exemplo
|
||||||
|
Name[sv]=Exempelanteckningar
|
||||||
|
Name[uk]=Приклад нотаток
|
||||||
|
Name[x-test]=xxExample notesxx
|
||||||
|
Type=Service
|
||||||
|
Icon=knotes
|
||||||
|
X-KDE-ParentApp=
|
||||||
|
X-KDE-PluginInfo-Author=Marco Martin
|
||||||
|
X-KDE-PluginInfo-Category=Miscellaneous
|
||||||
|
X-KDE-PluginInfo-Email=mart@kde.org
|
||||||
|
X-KDE-PluginInfo-License=GPL
|
||||||
|
X-KDE-PluginInfo-Name=org.kde.example.notes
|
||||||
|
X-KDE-PluginInfo-Version=
|
||||||
|
X-KDE-PluginInfo-Website=
|
||||||
|
X-KDE-ServiceTypes=Plasma/Applet
|
||||||
|
X-Plasma-API=declarativeappletscript
|
||||||
|
X-Plasma-MainScript=ui/main.qml
|
||||||
|
X-Plasma-DropMimeTypes=text/plain
|
@ -1,11 +1,14 @@
|
|||||||
[Desktop Entry]
|
[Desktop Entry]
|
||||||
Name=Now playing (QML)
|
Name=Now playing (QML)
|
||||||
|
Name[de]=Musiktitel-Anzeige (QML)
|
||||||
|
Name[nl]=Speelt nu (QML)
|
||||||
Name[pt]=Agora a tocar (QML)
|
Name[pt]=Agora a tocar (QML)
|
||||||
Name[pt_BR]=Reproduzindo (QML)
|
Name[pt_BR]=Reproduzindo (QML)
|
||||||
Name[sv]=Spelar nu (QML)
|
Name[sv]=Spelar nu (QML)
|
||||||
Name[uk]=Зараз відтворюється (QML)
|
Name[uk]=Зараз відтворюється (QML)
|
||||||
Name[x-test]=xxNow playing (QML)xx
|
Name[x-test]=xxNow playing (QML)xx
|
||||||
Comment=A proof of concept media player controller qml
|
Comment=A proof of concept media player controller qml
|
||||||
|
Comment[nl]=Een 'proof of concept' qml voor besturing van een mediaspeler
|
||||||
Comment[pt]=A prova de conceito de um QML com controlo de leitor multimédia
|
Comment[pt]=A prova de conceito de um QML com controlo de leitor multimédia
|
||||||
Comment[pt_BR]=A prova de conceito de um QML com controle de reprodutor multimídia
|
Comment[pt_BR]=A prova de conceito de um QML com controle de reprodutor multimídia
|
||||||
Comment[sv]=Ett koncept för styrning av mediaspelare i QML
|
Comment[sv]=Ett koncept för styrning av mediaspelare i QML
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
[Desktop Entry]
|
[Desktop Entry]
|
||||||
Name=Poor Man's Tasks
|
Name=Poor Man's Tasks
|
||||||
|
Name[nl]=Taken van 'Poor Man'
|
||||||
Name[pt]=Tarefas Simples
|
Name[pt]=Tarefas Simples
|
||||||
Name[pt_BR]=Tarefas simples
|
Name[pt_BR]=Tarefas simples
|
||||||
Name[sv]=Fattigmans aktiviteter
|
Name[sv]=Fattigmans aktiviteter
|
||||||
Name[uk]=Задачі для початківців
|
Name[uk]=Задачі для початківців
|
||||||
Name[x-test]=xxPoor Man's Tasksxx
|
Name[x-test]=xxPoor Man's Tasksxx
|
||||||
Comment=Example showing how to write your own tasks Widget
|
Comment=Example showing how to write your own tasks Widget
|
||||||
|
Comment[nl]=Voorbeeld die toont hoe u uw eigen taak-widget schrijft
|
||||||
Comment[pt]=Um exemplo que demonstra como criar o seu próprio item de tarefas
|
Comment[pt]=Um exemplo que demonstra como criar o seu próprio item de tarefas
|
||||||
Comment[pt_BR]=Exemplo que mostra como criar seu próprio widget de tarefas
|
Comment[pt_BR]=Exemplo que mostra como criar seu próprio widget de tarefas
|
||||||
Comment[sv]=Exempel som visar hur man skriver en egen grafisk komponent för aktiviteter
|
Comment[sv]=Exempel som visar hur man skriver en egen grafisk komponent för aktiviteter
|
||||||
|
@ -1,12 +1,14 @@
|
|||||||
[Desktop Entry]
|
[Desktop Entry]
|
||||||
Encoding=UTF-8
|
Encoding=UTF-8
|
||||||
Name=Same game (QML)
|
Name=Same game (QML)
|
||||||
|
Name[nl]=Zelfde spel (QML)
|
||||||
Name[pt]=Jogo de bolas (QML)
|
Name[pt]=Jogo de bolas (QML)
|
||||||
Name[pt_BR]=Jogo de bolas (QML)
|
Name[pt_BR]=Jogo de bolas (QML)
|
||||||
Name[sv]=Samegame (QML)
|
Name[sv]=Samegame (QML)
|
||||||
Name[uk]=Та сама гра (QML)
|
Name[uk]=Та сама гра (QML)
|
||||||
Name[x-test]=xxSame game (QML)xx
|
Name[x-test]=xxSame game (QML)xx
|
||||||
Comment=The Same game QML Qt demo converted as plasmoid
|
Comment=The Same game QML Qt demo converted as plasmoid
|
||||||
|
Comment[nl]=De demo van QML Qt van 'Zelfde spel' geconverteerd als plasmoid
|
||||||
Comment[pt]=A demonstração do jogo Same Game do Qt em QML
|
Comment[pt]=A demonstração do jogo Same Game do Qt em QML
|
||||||
Comment[pt_BR]=Demonstração do jogo Same Game do Qt em QML convertido como plasmoide
|
Comment[pt_BR]=Demonstração do jogo Same Game do Qt em QML convertido como plasmoide
|
||||||
Comment[sv]=Samegame QML Qt-demonstrationen konverterad till Plasmoid
|
Comment[sv]=Samegame QML Qt-demonstrationen konverterad till Plasmoid
|
||||||
|
@ -1,12 +1,14 @@
|
|||||||
[Desktop Entry]
|
[Desktop Entry]
|
||||||
Encoding=UTF-8
|
Encoding=UTF-8
|
||||||
Name=Widgets gallery
|
Name=Widgets gallery
|
||||||
|
Name[nl]=Galerij van widgets
|
||||||
Name[pt]=Galeria de elementos
|
Name[pt]=Galeria de elementos
|
||||||
Name[pt_BR]=Galeria de widgets
|
Name[pt_BR]=Galeria de widgets
|
||||||
Name[sv]=Grafiskt komponentgalleri
|
Name[sv]=Grafiskt komponentgalleri
|
||||||
Name[uk]=Галерея віджетів
|
Name[uk]=Галерея віджетів
|
||||||
Name[x-test]=xxWidgets galleryxx
|
Name[x-test]=xxWidgets galleryxx
|
||||||
Comment=gallery of widgets done with Plasma QtComponents
|
Comment=gallery of widgets done with Plasma QtComponents
|
||||||
|
Comment[nl]=galerij van widgets gemaakt met Plasma QtComponents
|
||||||
Comment[pt]=Uma galeria de elementos gráficos feita com o QtComponents do Plasma
|
Comment[pt]=Uma galeria de elementos gráficos feita com o QtComponents do Plasma
|
||||||
Comment[pt_BR]=Galeria de widgets gráficos feita com o QtComponents do Plasma
|
Comment[pt_BR]=Galeria de widgets gráficos feita com o QtComponents do Plasma
|
||||||
Comment[sv]=galleri av grafiska komponenter skapade med Plasma Qt-komponenter
|
Comment[sv]=galleri av grafiska komponenter skapade med Plasma Qt-komponenter
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
[Desktop Entry]
|
[Desktop Entry]
|
||||||
Name=Example window thumbnails list
|
Name=Example window thumbnails list
|
||||||
Name[pt]=Lista de janelas de exemplo
|
Name[nl]=Voorbeeld van lijst met miniaturen van vensters
|
||||||
Name[pt_BR]=Lista de janelas de exemplo
|
Name[pt]=Lista de miniaturas das janelas de exemplo
|
||||||
Name[sv]=Exempel på fönsterlista
|
Name[pt_BR]=Lista de miniaturas das janelas de exemplo
|
||||||
Name[uk]=Приклад списку вікон
|
Name[sv]=Exempel på miniatyrbilder av fönster
|
||||||
Name[x-test]=xxExample window listxx
|
Name[uk]=Приклад списку мініатюр вікон
|
||||||
|
Name[x-test]=xxExample window thumbnails listxx
|
||||||
Comment=Example showing how to display window thumbnails
|
Comment=Example showing how to display window thumbnails
|
||||||
|
Comment[nl]=Voorbeeld van hoe miniaturen van vensters te tonen
|
||||||
Comment[pt]=Exemplo que demonstra como apresentar miniaturas das janelas
|
Comment[pt]=Exemplo que demonstra como apresentar miniaturas das janelas
|
||||||
Comment[pt_BR]=Exemplo que demostra como apresentar as miniaturas das janelas
|
Comment[pt_BR]=Exemplo que demostra como apresentar as miniaturas das janelas
|
||||||
Comment[sv]=Exempel som visar hur miniatyrbilder av fönster visas
|
Comment[sv]=Exempel som visar hur miniatyrbilder av fönster visas
|
||||||
|
@ -1,11 +1,14 @@
|
|||||||
[Desktop Entry]
|
[Desktop Entry]
|
||||||
Name=Custom DataContainers
|
Name=Custom DataContainers
|
||||||
|
Name[de]=Benutzerdefinierte Datencontainer
|
||||||
|
Name[nl]=Aangepaste gegevenscontainers
|
||||||
Name[pt]=Contentores Personalizados
|
Name[pt]=Contentores Personalizados
|
||||||
Name[pt_BR]=DataContainers personalizados
|
Name[pt_BR]=DataContainers personalizados
|
||||||
Name[sv]=Egen DataContainer
|
Name[sv]=Egen DataContainer
|
||||||
Name[uk]=Нетипові контейнери даних
|
Name[uk]=Нетипові контейнери даних
|
||||||
Name[x-test]=xxCustom DataContainersxx
|
Name[x-test]=xxCustom DataContainersxx
|
||||||
Comment=A demonstration of how to subclass DataContainer
|
Comment=A demonstration of how to subclass DataContainer
|
||||||
|
Comment[nl]=Een demonstratie van hoe een subklasse toe te kennen aan een gegevenscontainer
|
||||||
Comment[pt]=Um demonstração de como usar a classe DataContainer
|
Comment[pt]=Um demonstração de como usar a classe DataContainer
|
||||||
Comment[pt_BR]=Demonstração de como usar a subclasse DataContainer
|
Comment[pt_BR]=Demonstração de como usar a subclasse DataContainer
|
||||||
Comment[sv]=En demonstration av hur en delklass av DataContainer skapas
|
Comment[sv]=En demonstration av hur en delklass av DataContainer skapas
|
||||||
|
@ -8,6 +8,7 @@ Name[sv]=Enkelt exempel på DataEngine
|
|||||||
Name[uk]=Простий приклад рушія даних
|
Name[uk]=Простий приклад рушія даних
|
||||||
Name[x-test]=xxSimple DataEngine Examplexx
|
Name[x-test]=xxSimple DataEngine Examplexx
|
||||||
Comment=A very basic DataEngine implementation
|
Comment=A very basic DataEngine implementation
|
||||||
|
Comment[nl]=Een erge basisimplementatie van een gegevens-engine
|
||||||
Comment[pt]=Uma implementação muito básica do DataEngine
|
Comment[pt]=Uma implementação muito básica do DataEngine
|
||||||
Comment[pt_BR]=Implementação muito básica do DataEngine
|
Comment[pt_BR]=Implementação muito básica do DataEngine
|
||||||
Comment[sv]=En mycket grundläggande implementering av DataEngine
|
Comment[sv]=En mycket grundläggande implementering av DataEngine
|
||||||
|
@ -1,11 +1,14 @@
|
|||||||
[Desktop Entry]
|
[Desktop Entry]
|
||||||
Name=Sources On Request
|
Name=Sources On Request
|
||||||
|
Name[de]=Ressourcen auf Anforderung
|
||||||
|
Name[nl]=Bronnen op verzoek
|
||||||
Name[pt]=Fontes a Pedido
|
Name[pt]=Fontes a Pedido
|
||||||
Name[pt_BR]=Fontes a pedido
|
Name[pt_BR]=Fontes a pedido
|
||||||
Name[sv]=Källor på begäran
|
Name[sv]=Källor på begäran
|
||||||
Name[uk]=Джерела за запитом
|
Name[uk]=Джерела за запитом
|
||||||
Name[x-test]=xxSources On Requestxx
|
Name[x-test]=xxSources On Requestxx
|
||||||
Comment=A DataEngine example showing how to respond to requests for source creation and updates
|
Comment=A DataEngine example showing how to respond to requests for source creation and updates
|
||||||
|
Comment[nl]=Een voorbeeld van een gegevens-engine die toont hoe te antwoorden op verzoeken voor aanmaken van een bron en bijwerken
|
||||||
Comment[pt]=Um exemplo de DataEngine que demonstra como responder a pedidos de criação e actualização da fonte
|
Comment[pt]=Um exemplo de DataEngine que demonstra como responder a pedidos de criação e actualização da fonte
|
||||||
Comment[pt_BR]=Exemplo de DataEngine que demonstra como responder a solicitações de criação e atualização da fonte
|
Comment[pt_BR]=Exemplo de DataEngine que demonstra como responder a solicitações de criação e atualização da fonte
|
||||||
Comment[sv]=Ett exempel på en DataEngine som visar hur man svara på en begäran om att skapa källor och uppdateringar
|
Comment[sv]=Ett exempel på en DataEngine som visar hur man svara på en begäran om att skapa källor och uppdateringar
|
||||||
|
@ -12,6 +12,7 @@ Icon=plasma-example-kpart-shell
|
|||||||
Type=Application
|
Type=Application
|
||||||
X-DocPath=plasma-kpart-shell/index.html
|
X-DocPath=plasma-kpart-shell/index.html
|
||||||
GenericName=A KPart shell for Plasma
|
GenericName=A KPart shell for Plasma
|
||||||
|
GenericName[nl]=Een KPart-shell voor Plasma
|
||||||
GenericName[pt]=Uma consola de KPart para o Plasma
|
GenericName[pt]=Uma consola de KPart para o Plasma
|
||||||
GenericName[pt_BR]=Shell KPart para o Plasma
|
GenericName[pt_BR]=Shell KPart para o Plasma
|
||||||
GenericName[sv]=Ett delprogramskal för Plasma
|
GenericName[sv]=Ett delprogramskal för Plasma
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
[Desktop Entry]
|
[Desktop Entry]
|
||||||
Name=Home Files
|
Name=Home Files
|
||||||
|
Name[nl]=Persoonlijke bestanden
|
||||||
Name[pt]=Ficheiros Pessoais
|
Name[pt]=Ficheiros Pessoais
|
||||||
Name[pt_BR]=Arquivos pessoais
|
Name[pt_BR]=Arquivos pessoais
|
||||||
Name[sv]=Hemfiler
|
Name[sv]=Hemfiler
|
||||||
Name[uk]=Файли у домашній теці
|
Name[uk]=Файли у домашній теці
|
||||||
Name[x-test]=xxHome Filesxx
|
Name[x-test]=xxHome Filesxx
|
||||||
Comment=Part of a tutorial demonstrating how to create Runner plugins
|
Comment=Part of a tutorial demonstrating how to create Runner plugins
|
||||||
|
Comment[nl]=Deel van een inleiding die demonstreert hoe Runner-plug-ins te maken
|
||||||
Comment[pt]=Parte de um tutorial que demonstra como criar 'plugins' do Runner
|
Comment[pt]=Parte de um tutorial que demonstra como criar 'plugins' do Runner
|
||||||
Comment[pt_BR]=Parte de um tutorial que demonstra como criar plugins do Runner
|
Comment[pt_BR]=Parte de um tutorial que demonstra como criar plugins do Runner
|
||||||
Comment[sv]=Del av en handledning som demonstrerar hur insticksprogram till Runner skapas
|
Comment[sv]=Del av en handledning som demonstrerar hur insticksprogram till Runner skapas
|
||||||
|
@ -71,6 +71,14 @@ WindowThumbnail::WindowThumbnail(QQuickItem* parent)
|
|||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
setFlag(ItemHasContents);
|
setFlag(ItemHasContents);
|
||||||
|
connect(this, &QQuickItem::windowChanged, [this](QQuickWindow *window) {
|
||||||
|
if (!window) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// restart the redirection, it might not have been active yet
|
||||||
|
stopRedirecting();
|
||||||
|
startRedirecting();
|
||||||
|
});
|
||||||
if (QGuiApplication *gui = dynamic_cast<QGuiApplication*>(QCoreApplication::instance())) {
|
if (QGuiApplication *gui = dynamic_cast<QGuiApplication*>(QCoreApplication::instance())) {
|
||||||
m_xcb = (gui->platformName() == QStringLiteral("xcb"));
|
m_xcb = (gui->platformName() == QStringLiteral("xcb"));
|
||||||
if (m_xcb) {
|
if (m_xcb) {
|
||||||
@ -111,6 +119,10 @@ void WindowThumbnail::setWinId(uint32_t winId)
|
|||||||
// invalid Id, don't updated
|
// invalid Id, don't updated
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (window() && winId == window()->winId()) {
|
||||||
|
// don't redirect to yourself
|
||||||
|
return;
|
||||||
|
}
|
||||||
stopRedirecting();
|
stopRedirecting();
|
||||||
m_winId = winId;
|
m_winId = winId;
|
||||||
startRedirecting();
|
startRedirecting();
|
||||||
@ -125,7 +137,7 @@ QSGNode *WindowThumbnail::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData
|
|||||||
node = new WindowTextureNode();
|
node = new WindowTextureNode();
|
||||||
node->setFiltering(QSGTexture::Linear);
|
node->setFiltering(QSGTexture::Linear);
|
||||||
}
|
}
|
||||||
if (!m_xcb || m_winId == 0) {
|
if (!m_xcb || m_winId == 0 || (window() && window()->winId() == m_winId)) {
|
||||||
iconToTexture(node);
|
iconToTexture(node);
|
||||||
} else {
|
} else {
|
||||||
windowToTexture(node);
|
windowToTexture(node);
|
||||||
@ -347,7 +359,7 @@ void WindowThumbnail::stopRedirecting()
|
|||||||
|
|
||||||
void WindowThumbnail::startRedirecting()
|
void WindowThumbnail::startRedirecting()
|
||||||
{
|
{
|
||||||
if (!m_xcb) {
|
if (!m_xcb || !window() || window()->winId() == m_winId) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#if HAVE_XCB_COMPOSITE
|
#if HAVE_XCB_COMPOSITE
|
||||||
|
@ -40,47 +40,47 @@ install(DIRECTORY qml/ DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/components)
|
|||||||
#The platform specific stuff, overwrites a copy of the desktop one
|
#The platform specific stuff, overwrites a copy of the desktop one
|
||||||
#it does install some files on top of the old ones, has to be done file by file since if some component from the generic set is more recent than the specifc ones, it wouldn't be overwritten
|
#it does install some files on top of the old ones, has to be done file by file since if some component from the generic set is more recent than the specifc ones, it wouldn't be overwritten
|
||||||
|
|
||||||
install(TARGETS plasmacomponentsplugin DESTINATION ${PLUGIN_INSTALL_DIR}/platformimports/touch/org/kde/plasma/components)
|
install(TARGETS plasmacomponentsplugin DESTINATION ${QML_INSTALL_DIR}/../platformqml/touch/org/kde/plasma/components)
|
||||||
|
|
||||||
install(FILES qml/BusyIndicator.qml DESTINATION ${PLUGIN_INSTALL_DIR}/platformimports/touch/org/kde/plasma/components)
|
install(FILES qml/BusyIndicator.qml DESTINATION ${QML_INSTALL_DIR}/../platformqml/touch/org/kde/plasma/components)
|
||||||
install(FILES qml/ButtonColumn.qml DESTINATION ${PLUGIN_INSTALL_DIR}/platformimports/touch/org/kde/plasma/components)
|
install(FILES qml/ButtonColumn.qml DESTINATION ${QML_INSTALL_DIR}/../platformqml/touch/org/kde/plasma/components)
|
||||||
install(FILES qml/ButtonGroup.js DESTINATION ${PLUGIN_INSTALL_DIR}/platformimports/touch/org/kde/plasma/components)
|
install(FILES qml/ButtonGroup.js DESTINATION ${QML_INSTALL_DIR}/../platformqml/touch/org/kde/plasma/components)
|
||||||
install(FILES qml/Button.qml DESTINATION ${PLUGIN_INSTALL_DIR}/platformimports/touch/org/kde/plasma/components)
|
install(FILES qml/Button.qml DESTINATION ${QML_INSTALL_DIR}/../platformqml/touch/org/kde/plasma/components)
|
||||||
install(FILES qml/ButtonRow.qml DESTINATION ${PLUGIN_INSTALL_DIR}/platformimports/touch/org/kde/plasma/components)
|
install(FILES qml/ButtonRow.qml DESTINATION ${QML_INSTALL_DIR}/../platformqml/touch/org/kde/plasma/components)
|
||||||
install(FILES qml/CheckBox.qml DESTINATION ${PLUGIN_INSTALL_DIR}/platformimports/touch/org/kde/plasma/components)
|
install(FILES qml/CheckBox.qml DESTINATION ${QML_INSTALL_DIR}/../platformqml/touch/org/kde/plasma/components)
|
||||||
install(FILES qml/CommonDialog.qml DESTINATION ${PLUGIN_INSTALL_DIR}/platformimports/touch/org/kde/plasma/components)
|
install(FILES qml/CommonDialog.qml DESTINATION ${QML_INSTALL_DIR}/../platformqml/touch/org/kde/plasma/components)
|
||||||
install(FILES qml/Dialog.qml DESTINATION ${PLUGIN_INSTALL_DIR}/platformimports/touch/org/kde/plasma/components)
|
install(FILES qml/Dialog.qml DESTINATION ${QML_INSTALL_DIR}/../platformqml/touch/org/kde/plasma/components)
|
||||||
install(FILES qml/Highlight.qml DESTINATION ${PLUGIN_INSTALL_DIR}/platformimports/touch/org/kde/plasma/components)
|
install(FILES qml/Highlight.qml DESTINATION ${QML_INSTALL_DIR}/../platformqml/touch/org/kde/plasma/components)
|
||||||
install(FILES qml/Label.qml DESTINATION ${PLUGIN_INSTALL_DIR}/platformimports/touch/org/kde/plasma/components)
|
install(FILES qml/Label.qml DESTINATION ${QML_INSTALL_DIR}/../platformqml/touch/org/kde/plasma/components)
|
||||||
install(FILES qml/ListItem.qml DESTINATION ${PLUGIN_INSTALL_DIR}/platformimports/touch/org/kde/plasma/components)
|
install(FILES qml/ListItem.qml DESTINATION ${QML_INSTALL_DIR}/../platformqml/touch/org/kde/plasma/components)
|
||||||
install(FILES qml/Page.qml DESTINATION ${PLUGIN_INSTALL_DIR}/platformimports/touch/org/kde/plasma/components)
|
install(FILES qml/Page.qml DESTINATION ${QML_INSTALL_DIR}/../platformqml/touch/org/kde/plasma/components)
|
||||||
install(FILES qml/PageStack.qml DESTINATION ${PLUGIN_INSTALL_DIR}/platformimports/touch/org/kde/plasma/components)
|
install(FILES qml/PageStack.qml DESTINATION ${QML_INSTALL_DIR}/../platformqml/touch/org/kde/plasma/components)
|
||||||
install(FILES qml/ProgressBar.qml DESTINATION ${PLUGIN_INSTALL_DIR}/platformimports/touch/org/kde/plasma/components)
|
install(FILES qml/ProgressBar.qml DESTINATION ${QML_INSTALL_DIR}/../platformqml/touch/org/kde/plasma/components)
|
||||||
install(FILES qml/QueryDialog.qml DESTINATION ${PLUGIN_INSTALL_DIR}/platformimports/touch/org/kde/plasma/components)
|
install(FILES qml/QueryDialog.qml DESTINATION ${QML_INSTALL_DIR}/../platformqml/touch/org/kde/plasma/components)
|
||||||
install(FILES qml/RadioButton.qml DESTINATION ${PLUGIN_INSTALL_DIR}/platformimports/touch/org/kde/plasma/components)
|
install(FILES qml/RadioButton.qml DESTINATION ${QML_INSTALL_DIR}/../platformqml/touch/org/kde/plasma/components)
|
||||||
install(FILES qml/SelectionDialog.qml DESTINATION ${PLUGIN_INSTALL_DIR}/platformimports/touch/org/kde/plasma/components)
|
install(FILES qml/SelectionDialog.qml DESTINATION ${QML_INSTALL_DIR}/../platformqml/touch/org/kde/plasma/components)
|
||||||
install(FILES qml/Slider.qml DESTINATION ${PLUGIN_INSTALL_DIR}/platformimports/touch/org/kde/plasma/components)
|
install(FILES qml/Slider.qml DESTINATION ${QML_INSTALL_DIR}/../platformqml/touch/org/kde/plasma/components)
|
||||||
install(FILES qml/TabBar.qml DESTINATION ${PLUGIN_INSTALL_DIR}/platformimports/touch/org/kde/plasma/components)
|
install(FILES qml/TabBar.qml DESTINATION ${QML_INSTALL_DIR}/../platformqml/touch/org/kde/plasma/components)
|
||||||
install(FILES qml/TabButton.qml DESTINATION ${PLUGIN_INSTALL_DIR}/platformimports/touch/org/kde/plasma/components)
|
install(FILES qml/TabButton.qml DESTINATION ${QML_INSTALL_DIR}/../platformqml/touch/org/kde/plasma/components)
|
||||||
install(FILES qml/TabGroup.qml DESTINATION ${PLUGIN_INSTALL_DIR}/platformimports/touch/org/kde/plasma/components)
|
install(FILES qml/TabGroup.qml DESTINATION ${QML_INSTALL_DIR}/../platformqml/touch/org/kde/plasma/components)
|
||||||
#install(FILES qml/TextArea.qml DESTINATION ${PLUGIN_INSTALL_DIR}/platformimports/touch/org/kde/plasma/components)
|
#install(FILES qml/TextArea.qml DESTINATION ${QML_INSTALL_DIR}/../platformqml/touch/org/kde/plasma/components)
|
||||||
#install(FILES qml/TextField.qml DESTINATION ${PLUGIN_INSTALL_DIR}/platformimports/touch/org/kde/plasma/components)
|
#install(FILES qml/TextField.qml DESTINATION ${QML_INSTALL_DIR}/../platformqml/touch/org/kde/plasma/components)
|
||||||
install(FILES qml/ToolBarLayout.qml DESTINATION ${PLUGIN_INSTALL_DIR}/platformimports/touch/org/kde/plasma/components)
|
install(FILES qml/ToolBarLayout.qml DESTINATION ${QML_INSTALL_DIR}/../platformqml/touch/org/kde/plasma/components)
|
||||||
install(FILES qml/ToolBar.qml DESTINATION ${PLUGIN_INSTALL_DIR}/platformimports/touch/org/kde/plasma/components)
|
install(FILES qml/ToolBar.qml DESTINATION ${QML_INSTALL_DIR}/../platformqml/touch/org/kde/plasma/components)
|
||||||
install(FILES qml/ToolButton.qml DESTINATION ${PLUGIN_INSTALL_DIR}/platformimports/touch/org/kde/plasma/components)
|
install(FILES qml/ToolButton.qml DESTINATION ${QML_INSTALL_DIR}/../platformqml/touch/org/kde/plasma/components)
|
||||||
|
|
||||||
|
|
||||||
#Now install the private stuff!
|
#Now install the private stuff!
|
||||||
install(FILES qml/private/DualStateButton.qml DESTINATION ${PLUGIN_INSTALL_DIR}/platformimports/touch/org/kde/plasma/components/private)
|
install(FILES qml/private/DualStateButton.qml DESTINATION ${QML_INSTALL_DIR}/../platformqml/touch/org/kde/plasma/components/private)
|
||||||
install(FILES qml/private/InlineDialog.qml DESTINATION ${PLUGIN_INSTALL_DIR}/platformimports/touch/org/kde/plasma/components/private)
|
install(FILES qml/private/InlineDialog.qml DESTINATION ${QML_INSTALL_DIR}/../platformqml/touch/org/kde/plasma/components/private)
|
||||||
install(FILES qml/private/PageStack.js DESTINATION ${PLUGIN_INSTALL_DIR}/platformimports/touch/org/kde/plasma/components/private)
|
install(FILES qml/private/PageStack.js DESTINATION ${QML_INSTALL_DIR}/../platformqml/touch/org/kde/plasma/components/private)
|
||||||
install(FILES qml/private/TabGroup.js DESTINATION ${PLUGIN_INSTALL_DIR}/platformimports/touch/org/kde/plasma/components/private)
|
install(FILES qml/private/TabGroup.js DESTINATION ${QML_INSTALL_DIR}/../platformqml/touch/org/kde/plasma/components/private)
|
||||||
install(FILES qml/private/ScrollBarDelegate.qml DESTINATION ${PLUGIN_INSTALL_DIR}/platformimports/touch/org/kde/plasma/components/private)
|
install(FILES qml/private/ScrollBarDelegate.qml DESTINATION ${QML_INSTALL_DIR}/../platformqml/touch/org/kde/plasma/components/private)
|
||||||
install(FILES qml/private/ScrollDecoratorDelegate.qml DESTINATION ${PLUGIN_INSTALL_DIR}/platformimports/touch/org/kde/plasma/components/private)
|
install(FILES qml/private/ScrollDecoratorDelegate.qml DESTINATION ${QML_INSTALL_DIR}/../platformqml/touch/org/kde/plasma/components/private)
|
||||||
install(FILES qml/private/SectionScroller.js DESTINATION ${PLUGIN_INSTALL_DIR}/platformimports/touch/org/kde/plasma/components/private)
|
install(FILES qml/private/SectionScroller.js DESTINATION ${QML_INSTALL_DIR}/../platformqml/touch/org/kde/plasma/components/private)
|
||||||
install(FILES qml/private/AppManager.js DESTINATION ${PLUGIN_INSTALL_DIR}/platformimports/touch/org/kde/plasma/components/private)
|
install(FILES qml/private/AppManager.js DESTINATION ${QML_INSTALL_DIR}/../platformqml/touch/org/kde/plasma/components/private)
|
||||||
install(FILES qml/private/TabBarLayout.qml DESTINATION ${PLUGIN_INSTALL_DIR}/platformimports/touch/org/kde/plasma/components/private)
|
install(FILES qml/private/TabBarLayout.qml DESTINATION ${QML_INSTALL_DIR}/../platformqml/touch/org/kde/plasma/components/private)
|
||||||
install(FILES qml/private/TextFieldFocus.qml DESTINATION ${PLUGIN_INSTALL_DIR}/platformimports/touch/org/kde/plasma/components/private)
|
install(FILES qml/private/TextFieldFocus.qml DESTINATION ${QML_INSTALL_DIR}/../platformqml/touch/org/kde/plasma/components/private)
|
||||||
|
|
||||||
#install platform overrides
|
#install platform overrides
|
||||||
install(DIRECTORY platformcomponents/touch/ DESTINATION ${PLUGIN_INSTALL_DIR}/platformimports/touch/org/kde/plasma/components)
|
install(DIRECTORY platformcomponents/touch/ DESTINATION ${QML_INSTALL_DIR}/../platformqml/touch/org/kde/plasma/components)
|
||||||
|
@ -87,8 +87,6 @@ Item {
|
|||||||
textInput.forceActiveFocus();
|
textInput.forceActiveFocus();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Overriding QtQuick.Item activeFocus property.
|
|
||||||
property alias activeFocus: textInput.activeFocus
|
|
||||||
|
|
||||||
// TODO: fix default size
|
// TODO: fix default size
|
||||||
implicitWidth: theme.mSize(theme.defaultFont).width*12
|
implicitWidth: theme.mSize(theme.defaultFont).width*12
|
||||||
|
@ -93,6 +93,7 @@ Item {
|
|||||||
id: label
|
id: label
|
||||||
|
|
||||||
text: dualButton.text
|
text: dualButton.text
|
||||||
|
renderType: Text.NativeRendering
|
||||||
anchors {
|
anchors {
|
||||||
top: parent.top
|
top: parent.top
|
||||||
bottom: parent.bottom
|
bottom: parent.bottom
|
||||||
|
@ -29,20 +29,20 @@ class FallbackComponent : public QObject
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prefix of the path
|
* Prefix of the path
|
||||||
* This should be something like "plasma","kwin","plasmate",etc
|
* This should be something like "plasma","kwin","plasmate",etc
|
||||||
* If the basePath is "plasma", it will be set for the data of plasma like,
|
* If the basePath is "plasma", it will be set for the data of plasma like,
|
||||||
* or it can be an absolute path
|
* or it can be an absolute path
|
||||||
**/
|
**/
|
||||||
Q_PROPERTY(QString basePath READ basePath WRITE setBasePath NOTIFY basePathChanged)
|
Q_PROPERTY(QString basePath READ basePath WRITE setBasePath NOTIFY basePathChanged)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The possible candidates in order to have a complete path.
|
* The possible candidates in order to have a complete path.
|
||||||
* basepath/candidate, where candidate is the first one in the list of candidates
|
* basepath/candidate, where candidate is the first one in the list of candidates
|
||||||
* in order of importance that matches an existing file
|
* in order of importance that matches an existing file
|
||||||
**/
|
**/
|
||||||
Q_PROPERTY(QStringList candidates READ candidates WRITE setCandidates NOTIFY candidatesChanged)
|
Q_PROPERTY(QStringList candidates READ candidates WRITE setCandidates NOTIFY candidatesChanged)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
FallbackComponent(QObject *parent = 0);
|
FallbackComponent(QObject *parent = 0);
|
||||||
|
@ -30,7 +30,7 @@ class KDeclarativeMouseEvent : public QObject
|
|||||||
Q_PROPERTY(int y READ y)
|
Q_PROPERTY(int y READ y)
|
||||||
Q_PROPERTY(int screenX READ screenX)
|
Q_PROPERTY(int screenX READ screenX)
|
||||||
Q_PROPERTY(int screenY READ screenY)
|
Q_PROPERTY(int screenY READ screenY)
|
||||||
Q_PROPERTY(Qt::MouseButton button READ button)
|
Q_PROPERTY(int button READ button)
|
||||||
Q_PROPERTY(Qt::MouseButtons buttons READ buttons)
|
Q_PROPERTY(Qt::MouseButtons buttons READ buttons)
|
||||||
Q_PROPERTY(Qt::KeyboardModifiers modifiers READ modifiers)
|
Q_PROPERTY(Qt::KeyboardModifiers modifiers READ modifiers)
|
||||||
|
|
||||||
@ -52,7 +52,7 @@ public:
|
|||||||
int y() const { return m_y; }
|
int y() const { return m_y; }
|
||||||
int screenX() const { return m_screenX; }
|
int screenX() const { return m_screenX; }
|
||||||
int screenY() const { return m_screenY; }
|
int screenY() const { return m_screenY; }
|
||||||
Qt::MouseButton button() const { return m_button; }
|
int button() const { return m_button; }
|
||||||
Qt::MouseButtons buttons() const { return m_buttons; }
|
Qt::MouseButtons buttons() const { return m_buttons; }
|
||||||
Qt::KeyboardModifiers modifiers() const { return m_modifiers; }
|
Qt::KeyboardModifiers modifiers() const { return m_modifiers; }
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@
|
|||||||
#include <QUiLoader>
|
#include <QUiLoader>
|
||||||
|
|
||||||
#include <kactioncollection.h>
|
#include <kactioncollection.h>
|
||||||
#include <kcoreauthorized.h>
|
#include <kauthorized.h>
|
||||||
#include <kcolorscheme.h>
|
#include <kcolorscheme.h>
|
||||||
#include <kdesktopfile.h>
|
#include <kdesktopfile.h>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
@ -332,11 +332,12 @@ void Applet::setTitle(const QString &title) const
|
|||||||
|
|
||||||
QString Applet::icon() const
|
QString Applet::icon() const
|
||||||
{
|
{
|
||||||
if (!d->appletDescription.isValid()) {
|
return d->icon;
|
||||||
return QString();
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return d->appletDescription.icon();
|
void Applet::setIcon(const QString &icon)
|
||||||
|
{
|
||||||
|
d->icon = icon;
|
||||||
}
|
}
|
||||||
|
|
||||||
KPluginInfo Applet::pluginInfo() const
|
KPluginInfo Applet::pluginInfo() const
|
||||||
|
@ -282,10 +282,16 @@ class PLASMA_EXPORT Applet : public QObject
|
|||||||
static Applet *loadPlasmoid(const QString &path, uint appletId = 0);
|
static Applet *loadPlasmoid(const QString &path, uint appletId = 0);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the icon related to this applet
|
* @returns The icon name related to this applet
|
||||||
|
* By default is the one in the plasmoid desktop file
|
||||||
**/
|
**/
|
||||||
QString icon() const;
|
QString icon() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets an icon name for this applet
|
||||||
|
* @param icon Freedesktop compatible icon name
|
||||||
|
*/
|
||||||
|
void setIcon(const QString &icon);
|
||||||
|
|
||||||
|
|
||||||
//ACTIONS
|
//ACTIONS
|
||||||
|
@ -70,7 +70,7 @@ void PluginTest::listContainmentsOfType()
|
|||||||
void PluginTest::loadDataEngine()
|
void PluginTest::loadDataEngine()
|
||||||
{
|
{
|
||||||
Plasma::DataEngine *engine = Plasma::PluginLoader::self()->loadDataEngine("time");
|
Plasma::DataEngine *engine = Plasma::PluginLoader::self()->loadDataEngine("time");
|
||||||
qDebug() << "ENgine loaded successfully" << engine->pluginInfo().name();
|
//qDebug() << "Engine loaded successfully" << engine->pluginInfo().name();
|
||||||
QVERIFY(engine != 0 || buildonly);
|
QVERIFY(engine != 0 || buildonly);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -223,11 +223,24 @@ void ConfigLoaderHandler::addItem()
|
|||||||
QDateTime::fromString(m_default), m_key);
|
QDateTime::fromString(m_default), m_key);
|
||||||
} else if (m_type == "enum") {
|
} else if (m_type == "enum") {
|
||||||
m_key = (m_key.isEmpty()) ? m_name : m_key;
|
m_key = (m_key.isEmpty()) ? m_name : m_key;
|
||||||
|
bool ok;
|
||||||
|
int value = m_default.toUInt(&ok);
|
||||||
|
//if is not an integer, try to find the string value among the registered choices
|
||||||
|
if (!ok) {
|
||||||
|
int i = 0;
|
||||||
|
foreach (const KConfigSkeleton::ItemEnum::Choice &choice, m_enumChoices) {
|
||||||
|
if (choice.name == m_default) {
|
||||||
|
value = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
}
|
||||||
KConfigSkeleton::ItemEnum *enumItem =
|
KConfigSkeleton::ItemEnum *enumItem =
|
||||||
new KConfigSkeleton::ItemEnum(m_config->currentGroup(),
|
new KConfigSkeleton::ItemEnum(m_config->currentGroup(),
|
||||||
m_key, *d->newInt(),
|
m_key, *d->newInt(),
|
||||||
m_enumChoices,
|
m_enumChoices,
|
||||||
m_default.toUInt());
|
value);
|
||||||
m_config->addItem(enumItem, m_name);
|
m_config->addItem(enumItem, m_name);
|
||||||
item = enumItem;
|
item = enumItem;
|
||||||
} else if (m_type == "font") {
|
} else if (m_type == "font") {
|
||||||
|
@ -37,7 +37,7 @@
|
|||||||
#include <qmimedatabase.h>
|
#include <qmimedatabase.h>
|
||||||
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <kcoreauthorized.h>
|
#include <kauthorized.h>
|
||||||
#include <klocalizedstring.h>
|
#include <klocalizedstring.h>
|
||||||
#include <kservicetypetrader.h>
|
#include <kservicetypetrader.h>
|
||||||
|
|
||||||
@ -181,15 +181,15 @@ void Containment::restore(KConfigGroup &group)
|
|||||||
setFormFactor((Plasma::Types::FormFactor)group.readEntry("formfactor", (int)d->formFactor));
|
setFormFactor((Plasma::Types::FormFactor)group.readEntry("formfactor", (int)d->formFactor));
|
||||||
|
|
||||||
setWallpaper(group.readEntry("wallpaperplugin", ContainmentPrivate::defaultWallpaper));
|
setWallpaper(group.readEntry("wallpaperplugin", ContainmentPrivate::defaultWallpaper));
|
||||||
//qDebug() << "setScreen from restore";
|
|
||||||
d->setScreen(group.readEntry("screen", d->screen));
|
|
||||||
d->activityId = group.readEntry("activityId", QString());
|
d->activityId = group.readEntry("activityId", QString());
|
||||||
|
|
||||||
flushPendingConstraintsEvents();
|
flushPendingConstraintsEvents();
|
||||||
restoreContents(group);
|
restoreContents(group);
|
||||||
setImmutability((Types::ImmutabilityType)group.readEntry("immutability", (int)Types::Mutable));
|
setImmutability((Types::ImmutabilityType)group.readEntry("immutability", (int)Types::Mutable));
|
||||||
|
|
||||||
|
//qDebug() << "setScreen from restore";
|
||||||
|
d->setScreen(group.readEntry("screen", d->screen));
|
||||||
|
|
||||||
KConfigGroup cfg = KConfigGroup(corona()->config(), "ActionPlugins");
|
KConfigGroup cfg = KConfigGroup(corona()->config(), "ActionPlugins");
|
||||||
cfg = KConfigGroup(&cfg, QString::number(containmentType()));
|
cfg = KConfigGroup(&cfg, QString::number(containmentType()));
|
||||||
|
@ -52,6 +52,11 @@ static PluginLoader *s_pluginLoader = 0;
|
|||||||
class PluginLoaderPrivate
|
class PluginLoaderPrivate
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
PluginLoaderPrivate()
|
||||||
|
: packageRE("[^a-zA-Z0-9\\-_]")
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
static QSet<QString> knownCategories();
|
static QSet<QString> knownCategories();
|
||||||
static QString parentAppConstraint(const QString &parentApp = QString());
|
static QString parentAppConstraint(const QString &parentApp = QString());
|
||||||
|
|
||||||
@ -59,6 +64,7 @@ public:
|
|||||||
QHash<QString, QWeakPointer<PackageStructure> > structures;
|
QHash<QString, QWeakPointer<PackageStructure> > structures;
|
||||||
bool isDefaultLoader;
|
bool isDefaultLoader;
|
||||||
QString pluginDir;
|
QString pluginDir;
|
||||||
|
QRegExp packageRE;
|
||||||
};
|
};
|
||||||
|
|
||||||
QSet<QString> PluginLoaderPrivate::s_customCategories;
|
QSet<QString> PluginLoaderPrivate::s_customCategories;
|
||||||
@ -250,9 +256,7 @@ DataEngine *PluginLoader::loadDataEngine(const QString &name)
|
|||||||
allArgs << offers.first()->storageId();
|
allArgs << offers.first()->storageId();
|
||||||
QString api = offers.first()->property("X-Plasma-API").toString();
|
QString api = offers.first()->property("X-Plasma-API").toString();
|
||||||
if (api.isEmpty()) {
|
if (api.isEmpty()) {
|
||||||
engine = KPluginTrader::createInstanceFromQuery<Plasma::DataEngine>("Plasma/DataEngine",
|
engine = KPluginTrader::createInstanceFromQuery<Plasma::DataEngine>(d->pluginDir, "Plasma/DataEngine", constraint, 0);
|
||||||
d->pluginDir,
|
|
||||||
constraint, 0);
|
|
||||||
} else {
|
} else {
|
||||||
engine = new DataEngine(KPluginInfo(offers.first()), 0);
|
engine = new DataEngine(KPluginInfo(offers.first()), 0);
|
||||||
}
|
}
|
||||||
@ -423,9 +427,8 @@ Package PluginLoader::loadPackage(const QString &packageFormat, const QString &s
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!specialization.isEmpty()) {
|
if (!specialization.isEmpty()) {
|
||||||
QRegExp re("[^a-zA-Z0-9\\-_]");
|
|
||||||
// check that the provided strings are safe to use in a ServiceType query
|
// check that the provided strings are safe to use in a ServiceType query
|
||||||
if (re.indexIn(specialization) == -1 && re.indexIn(packageFormat) == -1) {
|
if (d->packageRE.indexIn(specialization) == -1 && d->packageRE.indexIn(packageFormat) == -1) {
|
||||||
// FIXME: The query below is rather spepcific to script engines. generify if possible
|
// FIXME: The query below is rather spepcific to script engines. generify if possible
|
||||||
const QString component = packageFormat.right(packageFormat.size() - packageFormat.lastIndexOf('/') - 1);
|
const QString component = packageFormat.right(packageFormat.size() - packageFormat.lastIndexOf('/') - 1);
|
||||||
const QString constraint = QString("[X-Plasma-API] == '%1' and " "'%2' in [X-Plasma-ComponentTypes]").arg(specialization, component);
|
const QString constraint = QString("[X-Plasma-API] == '%1' and " "'%2' in [X-Plasma-ComponentTypes]").arg(specialization, component);
|
||||||
@ -708,8 +711,7 @@ KPluginInfo::List PluginLoader::listDataEngineInfo(const QString &parentApp)
|
|||||||
constraint.append("[X-KDE-ParentApp] == '").append(parentApp).append("'");
|
constraint.append("[X-KDE-ParentApp] == '").append(parentApp).append("'");
|
||||||
}
|
}
|
||||||
|
|
||||||
list.append(KPluginTrader::self()->query(QStringLiteral("Plasma/DataEngine"),
|
list.append(KPluginTrader::self()->query(d->pluginDir, "Plasma/DataEngine", constraint));
|
||||||
d->pluginDir, constraint));
|
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,6 +52,7 @@ AppletPrivate::AppletPrivate(KService::Ptr service, const KPluginInfo *info, int
|
|||||||
q(applet),
|
q(applet),
|
||||||
immutability(Types::Mutable),
|
immutability(Types::Mutable),
|
||||||
appletDescription(info ? *info : KPluginInfo(service)),
|
appletDescription(info ? *info : KPluginInfo(service)),
|
||||||
|
icon(appletDescription.isValid() ? appletDescription.icon() : QString()),
|
||||||
mainConfig(0),
|
mainConfig(0),
|
||||||
pendingConstraints(Types::NoConstraint),
|
pendingConstraints(Types::NoConstraint),
|
||||||
script(0),
|
script(0),
|
||||||
@ -280,6 +281,8 @@ void AppletPrivate::setUiReady()
|
|||||||
//if we are the containment and there is still some uncomplete applet, we're still incomplete
|
//if we are the containment and there is still some uncomplete applet, we're still incomplete
|
||||||
if (!c->d->loadingApplets.isEmpty()) {
|
if (!c->d->loadingApplets.isEmpty()) {
|
||||||
return;
|
return;
|
||||||
|
} else if (!uiReady) {
|
||||||
|
emit c->uiReadyChanged(true);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
c = q->containment();
|
c = q->containment();
|
||||||
|
@ -87,6 +87,7 @@ public:
|
|||||||
// applet info we keep around in case its needed
|
// applet info we keep around in case its needed
|
||||||
KPluginInfo appletDescription;
|
KPluginInfo appletDescription;
|
||||||
QString customTitle;
|
QString customTitle;
|
||||||
|
QString icon;
|
||||||
|
|
||||||
// bookkeeping
|
// bookkeeping
|
||||||
KConfigGroup *mainConfig;
|
KConfigGroup *mainConfig;
|
||||||
|
@ -2,9 +2,11 @@ project(PlasmaQuick)
|
|||||||
|
|
||||||
set(plasmaquick_LIB_SRC
|
set(plasmaquick_LIB_SRC
|
||||||
plasmaquickview.cpp
|
plasmaquickview.cpp
|
||||||
|
configmodel.cpp
|
||||||
configview.cpp
|
configview.cpp
|
||||||
containmentconfigview_p.cpp
|
private/configcategory_p.cpp
|
||||||
currentcontainmentactionsmodel_p.cpp
|
#private/containmentconfigview_p.cpp
|
||||||
|
#private/currentcontainmentactionsmodel_p.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -12,9 +14,9 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}
|
|||||||
${CMAKE_CURRENT_BINARY_DIR}
|
${CMAKE_CURRENT_BINARY_DIR}
|
||||||
)
|
)
|
||||||
|
|
||||||
add_library(plasmaquick SHARED ${plasmaquick_LIB_SRC})
|
add_library(PlasmaQuick SHARED ${plasmaquick_LIB_SRC})
|
||||||
|
|
||||||
target_link_libraries(plasmaquick
|
target_link_libraries(PlasmaQuick
|
||||||
${Qt5Quick_LIBRARIES}
|
${Qt5Quick_LIBRARIES}
|
||||||
${Qt5Qml_LIBRARIES}
|
${Qt5Qml_LIBRARIES}
|
||||||
${KWindowSystem_LIBRARIES}
|
${KWindowSystem_LIBRARIES}
|
||||||
@ -26,19 +28,20 @@ target_link_libraries(plasmaquick
|
|||||||
kdeclarative
|
kdeclarative
|
||||||
)
|
)
|
||||||
|
|
||||||
set_target_properties(plasmaquick PROPERTIES
|
set_target_properties(PlasmaQuick PROPERTIES
|
||||||
VERSION 5.0.0
|
VERSION 5.0.0
|
||||||
SOVERSION 5
|
SOVERSION 5
|
||||||
)
|
)
|
||||||
|
|
||||||
install(TARGETS plasmaquick EXPORT PlasmaQuickTargets ${INSTALL_TARGETS_DEFAULT_ARGS})
|
install(TARGETS PlasmaQuick EXPORT PlasmaQuickTargets ${INSTALL_TARGETS_DEFAULT_ARGS})
|
||||||
|
|
||||||
generate_export_header(plasmaquick)
|
generate_export_header(PlasmaQuick)
|
||||||
|
|
||||||
set(plasmaquick_LIB_INCLUDES
|
set(plasmaquick_LIB_INCLUDES
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/plasmaquick_export.h
|
${CMAKE_CURRENT_BINARY_DIR}/plasmaquick_export.h
|
||||||
plasmaquickview.h
|
plasmaquickview.h
|
||||||
configview.h
|
configview.h
|
||||||
|
configmodel.h
|
||||||
)
|
)
|
||||||
|
|
||||||
install(FILES ${plasmaquick_LIB_INCLUDES}
|
install(FILES ${plasmaquick_LIB_INCLUDES}
|
||||||
|
247
src/plasmaquick/configmodel.cpp
Normal file
247
src/plasmaquick/configmodel.cpp
Normal file
@ -0,0 +1,247 @@
|
|||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "private/configcategory_p.h"
|
||||||
|
#include "configview.h"
|
||||||
|
#include "configmodel.h"
|
||||||
|
#include "Plasma/Applet"
|
||||||
|
#include "Plasma/Containment"
|
||||||
|
//#include "plasmoid/wallpaperinterface.h"
|
||||||
|
#include "kdeclarative/configpropertymap.h"
|
||||||
|
|
||||||
|
#include <QDebug>
|
||||||
|
#include <QDir>
|
||||||
|
#include <QQmlComponent>
|
||||||
|
#include <QQmlEngine>
|
||||||
|
#include <QQmlContext>
|
||||||
|
#include <QQuickItem>
|
||||||
|
|
||||||
|
#include <KGlobal>
|
||||||
|
#include <KLocalizedString>
|
||||||
|
#include <kdeclarative/kdeclarative.h>
|
||||||
|
|
||||||
|
#include <Plasma/Corona>
|
||||||
|
#include <Plasma/PluginLoader>
|
||||||
|
|
||||||
|
|
||||||
|
//////////////////////////////ConfigModel
|
||||||
|
|
||||||
|
class ConfigModelPrivate
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ConfigModelPrivate(ConfigModel *model);
|
||||||
|
~ConfigModelPrivate();
|
||||||
|
|
||||||
|
ConfigModel *q;
|
||||||
|
QList<ConfigCategory*> categories;
|
||||||
|
QWeakPointer<Plasma::Applet> appletInterface;
|
||||||
|
|
||||||
|
void appendCategory(ConfigCategory *c);
|
||||||
|
void clear();
|
||||||
|
QVariant get(int row) const;
|
||||||
|
|
||||||
|
static ConfigCategory *categories_at(QQmlListProperty<ConfigCategory> *prop, int index);
|
||||||
|
static void categories_append(QQmlListProperty<ConfigCategory> *prop, ConfigCategory *o);
|
||||||
|
static int categories_count(QQmlListProperty<ConfigCategory> *prop);
|
||||||
|
static void categories_clear(QQmlListProperty<ConfigCategory> *prop);
|
||||||
|
};
|
||||||
|
|
||||||
|
ConfigModelPrivate::ConfigModelPrivate(ConfigModel *model)
|
||||||
|
: q(model)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
ConfigModelPrivate::~ConfigModelPrivate()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
ConfigCategory *ConfigModelPrivate::categories_at(QQmlListProperty<ConfigCategory> *prop, int index)
|
||||||
|
{
|
||||||
|
ConfigModel *model = qobject_cast<ConfigModel *>(prop->object);
|
||||||
|
if (!model || index >= model->d->categories.count() || index < 0) {
|
||||||
|
return 0;
|
||||||
|
} else {
|
||||||
|
return model->d->categories.at(index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ConfigModelPrivate::categories_append(QQmlListProperty<ConfigCategory> *prop, ConfigCategory *o)
|
||||||
|
{
|
||||||
|
ConfigModel *model = qobject_cast<ConfigModel *>(prop->object);
|
||||||
|
if (!o || !model) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (o->parent() == prop->object) {
|
||||||
|
o->setParent(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
o->setParent(prop->object);
|
||||||
|
model->d->appendCategory(o);
|
||||||
|
}
|
||||||
|
|
||||||
|
int ConfigModelPrivate::categories_count(QQmlListProperty<ConfigCategory> *prop)
|
||||||
|
{
|
||||||
|
ConfigModel *model = qobject_cast<ConfigModel *>(prop->object);
|
||||||
|
if (model) {
|
||||||
|
return model->d->categories.count();
|
||||||
|
} else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ConfigModelPrivate::categories_clear(QQmlListProperty<ConfigCategory> *prop)
|
||||||
|
{
|
||||||
|
ConfigModel *model = qobject_cast<ConfigModel *>(prop->object);
|
||||||
|
if (!model) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
model->clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ConfigModelPrivate::clear()
|
||||||
|
{
|
||||||
|
q->beginResetModel();
|
||||||
|
while (!categories.isEmpty()) {
|
||||||
|
categories.first()->setParent(0);
|
||||||
|
categories.pop_front();
|
||||||
|
}
|
||||||
|
q->endResetModel();
|
||||||
|
emit q->countChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ConfigModelPrivate::appendCategory(ConfigCategory *c)
|
||||||
|
{
|
||||||
|
q->beginInsertRows(QModelIndex(), categories.size(), categories.size());
|
||||||
|
categories.append(c);
|
||||||
|
q->endInsertRows();
|
||||||
|
emit q->countChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
QVariant ConfigModelPrivate::get(int row) const
|
||||||
|
{
|
||||||
|
QVariantMap value;
|
||||||
|
if (row < 0 || row >= categories.count()) {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
value["name"] = categories.at(row)->name();
|
||||||
|
value["icon"] = categories.at(row)->icon();
|
||||||
|
value["pluginName"] = categories.at(row)->pluginName();
|
||||||
|
if (appletInterface) {
|
||||||
|
value["source"] = QUrl::fromLocalFile(appletInterface.data()->package().filePath("ui", categories.at(row)->source()));
|
||||||
|
} else {
|
||||||
|
value["source"] = categories.at(row)->source();
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ConfigModel::ConfigModel(QObject *parent)
|
||||||
|
: QAbstractListModel(parent),
|
||||||
|
d(new ConfigModelPrivate(this))
|
||||||
|
{
|
||||||
|
QHash<int, QByteArray> roleNames;
|
||||||
|
roleNames[NameRole] = "name";
|
||||||
|
roleNames[IconRole] = "icon";
|
||||||
|
roleNames[SourceRole] = "source";
|
||||||
|
roleNames[PluginNameRole] = "pluginName";
|
||||||
|
|
||||||
|
setRoleNames(roleNames);
|
||||||
|
}
|
||||||
|
|
||||||
|
ConfigModel::~ConfigModel()
|
||||||
|
{
|
||||||
|
delete d;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ConfigModel::rowCount(const QModelIndex &index) const
|
||||||
|
{
|
||||||
|
if (index.column() > 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return d->categories.count();
|
||||||
|
}
|
||||||
|
|
||||||
|
QVariant ConfigModel::data(const QModelIndex& index, int role) const
|
||||||
|
{
|
||||||
|
if (index.row() < 0 || index.row() >= d->categories.count()) {
|
||||||
|
return QVariant();
|
||||||
|
}
|
||||||
|
switch (role) {
|
||||||
|
case NameRole:
|
||||||
|
return d->categories.at(index.row())->name();
|
||||||
|
case IconRole:
|
||||||
|
return d->categories.at(index.row())->icon();
|
||||||
|
case SourceRole:
|
||||||
|
if (d->appletInterface) {
|
||||||
|
return QUrl::fromLocalFile(d->appletInterface.data()->package().filePath("ui", d->categories.at(index.row())->source()));
|
||||||
|
} else {
|
||||||
|
return d->categories.at(index.row())->source();
|
||||||
|
}
|
||||||
|
case PluginNameRole:
|
||||||
|
return d->categories.at(index.row())->pluginName();
|
||||||
|
default:
|
||||||
|
return QVariant();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QVariant ConfigModel::get(int row) const
|
||||||
|
{
|
||||||
|
return d->get(row);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ConfigModel::appendCategory(const QString &iconName, const QString &name,
|
||||||
|
const QString &path, const QString &pluginName)
|
||||||
|
{
|
||||||
|
ConfigCategory *cat = new ConfigCategory(this);
|
||||||
|
cat->setIcon(iconName);
|
||||||
|
cat->setName(name);
|
||||||
|
cat->setSource(path);
|
||||||
|
cat->setPluginName(pluginName);
|
||||||
|
d->appendCategory(cat);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ConfigModel::clear()
|
||||||
|
{
|
||||||
|
d->clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ConfigModel::setApplet(Plasma::Applet *interface)
|
||||||
|
{
|
||||||
|
d->appletInterface = interface;
|
||||||
|
}
|
||||||
|
|
||||||
|
Plasma::Applet *ConfigModel::applet() const
|
||||||
|
{
|
||||||
|
return d->appletInterface.data();
|
||||||
|
}
|
||||||
|
|
||||||
|
QQmlListProperty<ConfigCategory> ConfigModel::categories()
|
||||||
|
{
|
||||||
|
return QQmlListProperty<ConfigCategory>(this, 0, ConfigModelPrivate::categories_append,
|
||||||
|
ConfigModelPrivate::categories_count,
|
||||||
|
ConfigModelPrivate::categories_at,
|
||||||
|
ConfigModelPrivate::categories_clear);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#include "moc_configmodel.cpp"
|
103
src/plasmaquick/configmodel.h
Normal file
103
src/plasmaquick/configmodel.h
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef CONFIGMODEL_H
|
||||||
|
#define CONFIGMODEL_H
|
||||||
|
|
||||||
|
|
||||||
|
#include <QQmlListProperty>
|
||||||
|
#include <QAbstractListModel>
|
||||||
|
|
||||||
|
#include <plasmaquick/plasmaquick_export.h>
|
||||||
|
|
||||||
|
namespace Plasma {
|
||||||
|
class Applet;
|
||||||
|
}
|
||||||
|
|
||||||
|
class ConfigPropertyMap;
|
||||||
|
|
||||||
|
class ConfigCategoryPrivate;
|
||||||
|
|
||||||
|
class ConfigModelPrivate;
|
||||||
|
class ConfigCategory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This model contains all the possible config categories for a dialog,
|
||||||
|
* such as categories of the config dialog for an Applet
|
||||||
|
* TODO: it should probably become an import instead of a library?
|
||||||
|
*/
|
||||||
|
class PLASMAQUICK_EXPORT ConfigModel : public QAbstractListModel
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
Q_PROPERTY(QQmlListProperty<ConfigCategory> categories READ categories CONSTANT)
|
||||||
|
Q_CLASSINFO("DefaultProperty", "categories")
|
||||||
|
Q_PROPERTY(int count READ count NOTIFY countChanged)
|
||||||
|
|
||||||
|
public:
|
||||||
|
enum Roles {
|
||||||
|
NameRole = Qt::UserRole+1,
|
||||||
|
IconRole,
|
||||||
|
SourceRole,
|
||||||
|
PluginNameRole
|
||||||
|
};
|
||||||
|
ConfigModel(QObject *parent = 0);
|
||||||
|
~ConfigModel();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* add a new category in the model
|
||||||
|
* @param ConfigCategory the new category
|
||||||
|
**/
|
||||||
|
void appendCategory(const QString &iconName, const QString &name,
|
||||||
|
const QString &path, const QString &pluginName);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* clears the model
|
||||||
|
**/
|
||||||
|
void clear();
|
||||||
|
|
||||||
|
void setApplet(Plasma::Applet *interface);
|
||||||
|
Plasma::Applet *applet() const;
|
||||||
|
|
||||||
|
int count() {return rowCount();}
|
||||||
|
virtual int rowCount(const QModelIndex &index = QModelIndex()) const;
|
||||||
|
virtual QVariant data(const QModelIndex&, int) const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param row the row for which the data will be returned
|
||||||
|
* @raturn the data of the specified row
|
||||||
|
**/
|
||||||
|
Q_INVOKABLE QVariant get(int row) const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the categories of the model
|
||||||
|
**/
|
||||||
|
QQmlListProperty<ConfigCategory> categories();
|
||||||
|
|
||||||
|
Q_SIGNALS:
|
||||||
|
/**
|
||||||
|
* emitted when the count is changed
|
||||||
|
**/
|
||||||
|
void countChanged();
|
||||||
|
|
||||||
|
private:
|
||||||
|
friend class ConfigModelPrivate;
|
||||||
|
ConfigModelPrivate *const d;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // multiple inclusion guard
|
@ -17,8 +17,9 @@
|
|||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "configview_p.h"
|
#include "private/configcategory_p.h"
|
||||||
#include "configview.h"
|
#include "configview.h"
|
||||||
|
#include "configmodel.h"
|
||||||
#include "Plasma/Applet"
|
#include "Plasma/Applet"
|
||||||
#include "Plasma/Containment"
|
#include "Plasma/Containment"
|
||||||
//#include "plasmoid/wallpaperinterface.h"
|
//#include "plasmoid/wallpaperinterface.h"
|
||||||
@ -38,297 +39,6 @@
|
|||||||
#include <Plasma/Corona>
|
#include <Plasma/Corona>
|
||||||
#include <Plasma/PluginLoader>
|
#include <Plasma/PluginLoader>
|
||||||
|
|
||||||
///////////////////////ConfigCategory
|
|
||||||
|
|
||||||
ConfigCategory::ConfigCategory(QObject *parent)
|
|
||||||
: QObject(parent)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
ConfigCategory::~ConfigCategory()
|
|
||||||
{}
|
|
||||||
|
|
||||||
QString ConfigCategory::name() const
|
|
||||||
{
|
|
||||||
return m_name;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ConfigCategory::setName(const QString &name)
|
|
||||||
{
|
|
||||||
if (m_name == name) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_name = name;
|
|
||||||
emit nameChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
QString ConfigCategory::icon() const
|
|
||||||
{
|
|
||||||
return m_icon;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ConfigCategory::setIcon(const QString &icon)
|
|
||||||
{
|
|
||||||
if (m_icon == icon) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_icon = icon;
|
|
||||||
emit iconChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
QString ConfigCategory::source() const
|
|
||||||
{
|
|
||||||
return m_source;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ConfigCategory::setSource(const QString &source)
|
|
||||||
{
|
|
||||||
if (m_source == source) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_source = source;
|
|
||||||
emit sourceChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
QString ConfigCategory::pluginName() const
|
|
||||||
{
|
|
||||||
return m_pluginName;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ConfigCategory::setPluginName(const QString &name)
|
|
||||||
{
|
|
||||||
if (m_pluginName == name) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_pluginName = name;
|
|
||||||
emit pluginNameChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////ConfigModel
|
|
||||||
|
|
||||||
class ConfigModelPrivate
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
ConfigModelPrivate(ConfigModel *model);
|
|
||||||
~ConfigModelPrivate();
|
|
||||||
|
|
||||||
ConfigModel *q;
|
|
||||||
QList<ConfigCategory*> categories;
|
|
||||||
QWeakPointer<Plasma::Applet> appletInterface;
|
|
||||||
|
|
||||||
void appendCategory(ConfigCategory *c);
|
|
||||||
void clear();
|
|
||||||
QVariant get(int row) const;
|
|
||||||
|
|
||||||
static ConfigCategory *categories_at(QQmlListProperty<ConfigCategory> *prop, int index);
|
|
||||||
static void categories_append(QQmlListProperty<ConfigCategory> *prop, ConfigCategory *o);
|
|
||||||
static int categories_count(QQmlListProperty<ConfigCategory> *prop);
|
|
||||||
static void categories_clear(QQmlListProperty<ConfigCategory> *prop);
|
|
||||||
};
|
|
||||||
|
|
||||||
ConfigModelPrivate::ConfigModelPrivate(ConfigModel *model)
|
|
||||||
: q(model)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
ConfigModelPrivate::~ConfigModelPrivate()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
ConfigCategory *ConfigModelPrivate::categories_at(QQmlListProperty<ConfigCategory> *prop, int index)
|
|
||||||
{
|
|
||||||
ConfigModel *model = qobject_cast<ConfigModel *>(prop->object);
|
|
||||||
if (!model || index >= model->d->categories.count() || index < 0) {
|
|
||||||
return 0;
|
|
||||||
} else {
|
|
||||||
return model->d->categories.at(index);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void ConfigModelPrivate::categories_append(QQmlListProperty<ConfigCategory> *prop, ConfigCategory *o)
|
|
||||||
{
|
|
||||||
ConfigModel *model = qobject_cast<ConfigModel *>(prop->object);
|
|
||||||
if (!o || !model) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (o->parent() == prop->object) {
|
|
||||||
o->setParent(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
o->setParent(prop->object);
|
|
||||||
model->appendCategory(o);
|
|
||||||
}
|
|
||||||
|
|
||||||
int ConfigModelPrivate::categories_count(QQmlListProperty<ConfigCategory> *prop)
|
|
||||||
{
|
|
||||||
ConfigModel *model = qobject_cast<ConfigModel *>(prop->object);
|
|
||||||
if (model) {
|
|
||||||
return model->d->categories.count();
|
|
||||||
} else {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void ConfigModelPrivate::categories_clear(QQmlListProperty<ConfigCategory> *prop)
|
|
||||||
{
|
|
||||||
ConfigModel *model = qobject_cast<ConfigModel *>(prop->object);
|
|
||||||
if (!model) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
model->clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ConfigModelPrivate::clear()
|
|
||||||
{
|
|
||||||
q->beginResetModel();
|
|
||||||
while (!categories.isEmpty()) {
|
|
||||||
categories.first()->setParent(0);
|
|
||||||
categories.pop_front();
|
|
||||||
}
|
|
||||||
q->endResetModel();
|
|
||||||
emit q->countChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ConfigModelPrivate::appendCategory(ConfigCategory *c)
|
|
||||||
{
|
|
||||||
q->beginInsertRows(QModelIndex(), categories.size(), categories.size());
|
|
||||||
categories.append(c);
|
|
||||||
q->endInsertRows();
|
|
||||||
emit q->countChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
QVariant ConfigModelPrivate::get(int row) const
|
|
||||||
{
|
|
||||||
QVariantMap value;
|
|
||||||
if (row < 0 || row >= categories.count()) {
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
value["name"] = categories.at(row)->name();
|
|
||||||
value["icon"] = categories.at(row)->icon();
|
|
||||||
value["pluginName"] = categories.at(row)->pluginName();
|
|
||||||
if (appletInterface) {
|
|
||||||
value["source"] = QUrl::fromLocalFile(appletInterface.data()->package().filePath("ui", categories.at(row)->source()));
|
|
||||||
} else {
|
|
||||||
value["source"] = categories.at(row)->source();
|
|
||||||
}
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
ConfigModel::ConfigModel(QObject *parent)
|
|
||||||
: QAbstractListModel(parent),
|
|
||||||
d(new ConfigModelPrivate(this))
|
|
||||||
{
|
|
||||||
QHash<int, QByteArray> roleNames;
|
|
||||||
roleNames[NameRole] = "name";
|
|
||||||
roleNames[IconRole] = "icon";
|
|
||||||
roleNames[SourceRole] = "source";
|
|
||||||
roleNames[PluginNameRole] = "pluginName";
|
|
||||||
|
|
||||||
setRoleNames(roleNames);
|
|
||||||
}
|
|
||||||
|
|
||||||
ConfigModel::~ConfigModel()
|
|
||||||
{
|
|
||||||
delete d;
|
|
||||||
}
|
|
||||||
|
|
||||||
int ConfigModel::rowCount(const QModelIndex &index) const
|
|
||||||
{
|
|
||||||
if (index.column() > 0) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return d->categories.count();
|
|
||||||
}
|
|
||||||
|
|
||||||
QVariant ConfigModel::data(const QModelIndex& index, int role) const
|
|
||||||
{
|
|
||||||
if (index.row() < 0 || index.row() >= d->categories.count()) {
|
|
||||||
return QVariant();
|
|
||||||
}
|
|
||||||
switch (role) {
|
|
||||||
case NameRole:
|
|
||||||
return d->categories.at(index.row())->name();
|
|
||||||
case IconRole:
|
|
||||||
return d->categories.at(index.row())->icon();
|
|
||||||
case SourceRole:
|
|
||||||
if (d->appletInterface) {
|
|
||||||
return QUrl::fromLocalFile(d->appletInterface.data()->package().filePath("ui", d->categories.at(index.row())->source()));
|
|
||||||
} else {
|
|
||||||
return d->categories.at(index.row())->source();
|
|
||||||
}
|
|
||||||
case PluginNameRole:
|
|
||||||
return d->categories.at(index.row())->pluginName();
|
|
||||||
default:
|
|
||||||
return QVariant();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
QVariant ConfigModel::get(int row) const
|
|
||||||
{
|
|
||||||
return d->get(row);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ConfigModel::appendCategory(ConfigCategory *c)
|
|
||||||
{
|
|
||||||
d->appendCategory(c);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ConfigModel::clear()
|
|
||||||
{
|
|
||||||
d->clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ConfigModel::setApplet(Plasma::Applet *interface)
|
|
||||||
{
|
|
||||||
d->appletInterface = interface;
|
|
||||||
}
|
|
||||||
|
|
||||||
Plasma::Applet *ConfigModel::applet() const
|
|
||||||
{
|
|
||||||
return d->appletInterface.data();
|
|
||||||
}
|
|
||||||
|
|
||||||
QQmlListProperty<ConfigCategory> ConfigModel::categories()
|
|
||||||
{
|
|
||||||
return QQmlListProperty<ConfigCategory>(this, 0, ConfigModel::categories_append,
|
|
||||||
ConfigModel::categories_count,
|
|
||||||
ConfigModel::categories_at,
|
|
||||||
ConfigModel::categories_clear);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
ConfigCategory *ConfigModel::categories_at(QQmlListProperty<ConfigCategory> *prop, int index)
|
|
||||||
{
|
|
||||||
return ConfigModelPrivate::categories_at(prop, index);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ConfigModel::categories_append(QQmlListProperty<ConfigCategory> *prop, ConfigCategory *o)
|
|
||||||
{
|
|
||||||
ConfigModelPrivate::categories_append(prop, o);
|
|
||||||
}
|
|
||||||
|
|
||||||
int ConfigModel::categories_count(QQmlListProperty<ConfigCategory> *prop)
|
|
||||||
{
|
|
||||||
return ConfigModelPrivate::categories_count(prop);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ConfigModel::categories_clear(QQmlListProperty<ConfigCategory> *prop)
|
|
||||||
{
|
|
||||||
ConfigModelPrivate::categories_clear(prop);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////ConfigView
|
//////////////////////////////ConfigView
|
||||||
|
@ -17,14 +17,11 @@
|
|||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef CONFIGUILOADER_H
|
#ifndef CONFIGVIEW_H
|
||||||
#define CONFIGUILOADER_H
|
#define CONFIGVIEW_H
|
||||||
|
|
||||||
|
|
||||||
#include <QQuickView>
|
#include <QQuickView>
|
||||||
#include <QJSValue>
|
|
||||||
#include <QQmlListProperty>
|
|
||||||
#include <QStandardItemModel>
|
|
||||||
|
|
||||||
#include <plasmaquick/plasmaquick_export.h>
|
#include <plasmaquick/plasmaquick_export.h>
|
||||||
|
|
||||||
@ -32,78 +29,10 @@ namespace Plasma {
|
|||||||
class Applet;
|
class Applet;
|
||||||
}
|
}
|
||||||
|
|
||||||
class ConfigPropertyMap;
|
|
||||||
|
|
||||||
class ConfigCategoryPrivate;
|
|
||||||
|
|
||||||
class ConfigModelPrivate;
|
|
||||||
class ConfigCategory;
|
|
||||||
|
|
||||||
class PLASMAQUICK_EXPORT ConfigModel : public QAbstractListModel
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
Q_PROPERTY(QQmlListProperty<ConfigCategory> categories READ categories CONSTANT)
|
|
||||||
Q_CLASSINFO("DefaultProperty", "categories")
|
|
||||||
Q_PROPERTY(int count READ count NOTIFY countChanged)
|
|
||||||
|
|
||||||
public:
|
|
||||||
enum Roles {
|
|
||||||
NameRole = Qt::UserRole+1,
|
|
||||||
IconRole,
|
|
||||||
SourceRole,
|
|
||||||
PluginNameRole
|
|
||||||
};
|
|
||||||
ConfigModel(QObject *parent = 0);
|
|
||||||
~ConfigModel();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* add a new category in the model
|
|
||||||
* @param ConfigCategory the new category
|
|
||||||
**/
|
|
||||||
void appendCategory(ConfigCategory *c);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* clears the model
|
|
||||||
**/
|
|
||||||
void clear();
|
|
||||||
|
|
||||||
void setApplet(Plasma::Applet *interface);
|
|
||||||
Plasma::Applet *applet() const;
|
|
||||||
|
|
||||||
int count() {return rowCount();}
|
|
||||||
virtual int rowCount(const QModelIndex &index = QModelIndex()) const;
|
|
||||||
virtual QVariant data(const QModelIndex&, int) const;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param row the row for which the data will be returned
|
|
||||||
* @raturn the data of the specified row
|
|
||||||
**/
|
|
||||||
Q_INVOKABLE QVariant get(int row) const;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return the categories of the model
|
|
||||||
**/
|
|
||||||
QQmlListProperty<ConfigCategory> categories();
|
|
||||||
|
|
||||||
static ConfigCategory *categories_at(QQmlListProperty<ConfigCategory> *prop, int index);
|
|
||||||
static void categories_append(QQmlListProperty<ConfigCategory> *prop, ConfigCategory *o);
|
|
||||||
static int categories_count(QQmlListProperty<ConfigCategory> *prop);
|
|
||||||
static void categories_clear(QQmlListProperty<ConfigCategory> *prop);
|
|
||||||
|
|
||||||
Q_SIGNALS:
|
|
||||||
/**
|
|
||||||
* emitted when the count is changed
|
|
||||||
**/
|
|
||||||
void countChanged();
|
|
||||||
|
|
||||||
private:
|
|
||||||
friend class ConfigModelPrivate;
|
|
||||||
ConfigModelPrivate *const d;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
class ConfigViewPrivate;
|
class ConfigViewPrivate;
|
||||||
|
|
||||||
|
class ConfigModel;
|
||||||
|
|
||||||
class PLASMAQUICK_EXPORT ConfigView : public QQuickView
|
class PLASMAQUICK_EXPORT ConfigView : public QQuickView
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
@ -17,7 +17,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "plasmaquickview.h"
|
#include "plasmaquickview.h"
|
||||||
#include "containmentconfigview_p.h"
|
|
||||||
#include "configview.h"
|
#include "configview.h"
|
||||||
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
@ -35,7 +34,6 @@ public:
|
|||||||
PlasmaQuickViewPrivate(Plasma::Corona *corona, PlasmaQuickView *view);
|
PlasmaQuickViewPrivate(Plasma::Corona *corona, PlasmaQuickView *view);
|
||||||
~PlasmaQuickViewPrivate();
|
~PlasmaQuickViewPrivate();
|
||||||
|
|
||||||
void init();
|
|
||||||
void setContainment(Plasma::Containment *cont);
|
void setContainment(Plasma::Containment *cont);
|
||||||
Plasma::Types::FormFactor formFactor() const;
|
Plasma::Types::FormFactor formFactor() const;
|
||||||
Plasma::Types::Location location() const;
|
Plasma::Types::Location location() const;
|
||||||
@ -58,31 +56,6 @@ PlasmaQuickViewPrivate::~PlasmaQuickViewPrivate()
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlasmaQuickViewPrivate::init()
|
|
||||||
{
|
|
||||||
//FIXME: for some reason all windows must have alpha enable otherwise the ones that do won't paint.
|
|
||||||
//Probably is an architectural problem
|
|
||||||
QSurfaceFormat format;
|
|
||||||
format.setAlphaBufferSize(8);
|
|
||||||
|
|
||||||
q->setFormat(format);
|
|
||||||
q->setColor(Qt::transparent);
|
|
||||||
|
|
||||||
|
|
||||||
QObject::connect(q->screen(), &QScreen::virtualGeometryChanged,
|
|
||||||
q, &PlasmaQuickView::screenGeometryChanged);
|
|
||||||
|
|
||||||
if (!corona->package().isValid()) {
|
|
||||||
qWarning() << "Invalid home screen package";
|
|
||||||
}
|
|
||||||
|
|
||||||
q->setResizeMode(PlasmaQuickView::SizeRootObjectToView);
|
|
||||||
q->setSource(QUrl::fromLocalFile(corona->package().filePath("views", "Desktop.qml")));
|
|
||||||
|
|
||||||
QObject::connect(corona, &Plasma::Corona::packageChanged,
|
|
||||||
q, &PlasmaQuickView::coronaPackageChanged);
|
|
||||||
}
|
|
||||||
|
|
||||||
void PlasmaQuickViewPrivate::setContainment(Plasma::Containment *cont)
|
void PlasmaQuickViewPrivate::setContainment(Plasma::Containment *cont)
|
||||||
{
|
{
|
||||||
if (containment.data() == cont) {
|
if (containment.data() == cont) {
|
||||||
@ -129,7 +102,9 @@ void PlasmaQuickViewPrivate::setContainment(Plasma::Containment *cont)
|
|||||||
if (graphicObject) {
|
if (graphicObject) {
|
||||||
qDebug() << "using as graphic containment" << graphicObject << containment.data();
|
qDebug() << "using as graphic containment" << graphicObject << containment.data();
|
||||||
|
|
||||||
//graphicObject->setProperty("visible", false);
|
//by resizing before adding, it will avoid some resizes in most cases
|
||||||
|
graphicObject->setProperty("width", q->width());
|
||||||
|
graphicObject->setProperty("height", q->height());
|
||||||
graphicObject->setProperty("drawWallpaper",
|
graphicObject->setProperty("drawWallpaper",
|
||||||
(cont->containmentType() == Plasma::Types::DesktopContainment ||
|
(cont->containmentType() == Plasma::Types::DesktopContainment ||
|
||||||
cont->containmentType() == Plasma::Types::CustomContainment));
|
cont->containmentType() == Plasma::Types::CustomContainment));
|
||||||
@ -167,13 +142,8 @@ void PlasmaQuickViewPrivate::showConfigurationInterface(Plasma::Applet *applet)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Plasma::Containment *cont = qobject_cast<Plasma::Containment *>(applet);
|
configView = new ConfigView(applet);
|
||||||
|
|
||||||
if (cont) {
|
|
||||||
configView = new ContainmentConfigView(cont);
|
|
||||||
} else {
|
|
||||||
configView = new ConfigView(applet);
|
|
||||||
}
|
|
||||||
configView.data()->init();
|
configView.data()->init();
|
||||||
configView.data()->show();
|
configView.data()->show();
|
||||||
}
|
}
|
||||||
@ -185,7 +155,24 @@ PlasmaQuickView::PlasmaQuickView(Plasma::Corona *corona, QWindow *parent)
|
|||||||
: QQuickView(parent),
|
: QQuickView(parent),
|
||||||
d(new PlasmaQuickViewPrivate(corona, this))
|
d(new PlasmaQuickViewPrivate(corona, this))
|
||||||
{
|
{
|
||||||
d->init();
|
QSurfaceFormat format;
|
||||||
|
format.setAlphaBufferSize(8);
|
||||||
|
|
||||||
|
setFormat(format);
|
||||||
|
setColor(Qt::transparent);
|
||||||
|
|
||||||
|
|
||||||
|
QObject::connect(screen(), &QScreen::virtualGeometryChanged,
|
||||||
|
this, &PlasmaQuickView::screenGeometryChanged);
|
||||||
|
|
||||||
|
if (!corona->package().isValid()) {
|
||||||
|
qWarning() << "Invalid home screen package";
|
||||||
|
}
|
||||||
|
|
||||||
|
setResizeMode(PlasmaQuickView::SizeRootObjectToView);
|
||||||
|
|
||||||
|
QObject::connect(corona, &Plasma::Corona::packageChanged,
|
||||||
|
this, &PlasmaQuickView::coronaPackageChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
PlasmaQuickView::~PlasmaQuickView()
|
PlasmaQuickView::~PlasmaQuickView()
|
||||||
|
115
src/plasmaquick/private/configcategory_p.cpp
Normal file
115
src/plasmaquick/private/configcategory_p.cpp
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "configcategory_p.h"
|
||||||
|
#include "configview.h"
|
||||||
|
#include "configmodel.h"
|
||||||
|
#include "Plasma/Applet"
|
||||||
|
#include "Plasma/Containment"
|
||||||
|
//#include "plasmoid/wallpaperinterface.h"
|
||||||
|
#include "kdeclarative/configpropertymap.h"
|
||||||
|
|
||||||
|
#include <QDebug>
|
||||||
|
#include <QDir>
|
||||||
|
#include <QQmlComponent>
|
||||||
|
#include <QQmlEngine>
|
||||||
|
#include <QQmlContext>
|
||||||
|
#include <QQuickItem>
|
||||||
|
|
||||||
|
#include <KGlobal>
|
||||||
|
#include <KLocalizedString>
|
||||||
|
#include <kdeclarative/kdeclarative.h>
|
||||||
|
|
||||||
|
#include <Plasma/Corona>
|
||||||
|
#include <Plasma/PluginLoader>
|
||||||
|
|
||||||
|
///////////////////////ConfigCategory
|
||||||
|
|
||||||
|
ConfigCategory::ConfigCategory(QObject *parent)
|
||||||
|
: QObject(parent)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
ConfigCategory::~ConfigCategory()
|
||||||
|
{}
|
||||||
|
|
||||||
|
QString ConfigCategory::name() const
|
||||||
|
{
|
||||||
|
return m_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ConfigCategory::setName(const QString &name)
|
||||||
|
{
|
||||||
|
if (m_name == name) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_name = name;
|
||||||
|
emit nameChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QString ConfigCategory::icon() const
|
||||||
|
{
|
||||||
|
return m_icon;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ConfigCategory::setIcon(const QString &icon)
|
||||||
|
{
|
||||||
|
if (m_icon == icon) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_icon = icon;
|
||||||
|
emit iconChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QString ConfigCategory::source() const
|
||||||
|
{
|
||||||
|
return m_source;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ConfigCategory::setSource(const QString &source)
|
||||||
|
{
|
||||||
|
if (m_source == source) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_source = source;
|
||||||
|
emit sourceChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
QString ConfigCategory::pluginName() const
|
||||||
|
{
|
||||||
|
return m_pluginName;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ConfigCategory::setPluginName(const QString &name)
|
||||||
|
{
|
||||||
|
if (m_pluginName == name) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_pluginName = name;
|
||||||
|
emit pluginNameChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#include "private/moc_configcategory_p.cpp"
|
@ -17,11 +17,13 @@
|
|||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef CONFIGUILOADER_P_H
|
#ifndef CONFIGCATEGORY_P_H
|
||||||
#define CONFIGUILOADER_P_H
|
#define CONFIGCATEGORY_P_H
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
|
||||||
|
//This class represents a single row item of the ConfigModel model in a QML friendly manner.
|
||||||
|
//the properties contains all the data needed to represent an icon in the sidebar of a configuration dialog, of applets or containments
|
||||||
class ConfigCategory : public QObject
|
class ConfigCategory : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
@ -6,6 +6,7 @@ X-KDE-DBus-ModuleName=plaformstatus
|
|||||||
X-KDE-Kded-autoload=true
|
X-KDE-Kded-autoload=true
|
||||||
X-KDE-Kded-load-on-demand=false
|
X-KDE-Kded-load-on-demand=false
|
||||||
Name=Platform Status
|
Name=Platform Status
|
||||||
|
Name[de]=Plattform-Status
|
||||||
Name[fr]=État de la plate-forme
|
Name[fr]=État de la plate-forme
|
||||||
Name[nl]=Status van platform
|
Name[nl]=Status van platform
|
||||||
Name[pl]=Stan Platformy
|
Name[pl]=Stan Platformy
|
||||||
|
@ -15,6 +15,7 @@ include_directories(${KDE4_INCLUDE_DIR}/KDE ${PHONON_INCLUDES} ${CMAKE_CURRENT_S
|
|||||||
set(declarative_appletscript_SRCS
|
set(declarative_appletscript_SRCS
|
||||||
declarative/packageaccessmanager.cpp
|
declarative/packageaccessmanager.cpp
|
||||||
declarative/packageaccessmanagerfactory.cpp
|
declarative/packageaccessmanagerfactory.cpp
|
||||||
|
declarative/packageurlinterceptor.cpp
|
||||||
plasmoid/appletinterface.cpp
|
plasmoid/appletinterface.cpp
|
||||||
plasmoid/containmentinterface.cpp
|
plasmoid/containmentinterface.cpp
|
||||||
plasmoid/declarativeappletscript.cpp
|
plasmoid/declarativeappletscript.cpp
|
||||||
|
@ -3,6 +3,15 @@ Type=ServiceType
|
|||||||
X-KDE-ServiceType=Plasma/Wallpaper
|
X-KDE-ServiceType=Plasma/Wallpaper
|
||||||
|
|
||||||
Comment=Plasma wallpaper
|
Comment=Plasma wallpaper
|
||||||
|
Comment[cs]=Tapeta Plasmy
|
||||||
|
Comment[de]=Plasma-Hintergrundbild
|
||||||
|
Comment[nl]=Plasma-bureaubladachtergrond
|
||||||
|
Comment[pt]=Papel de parede do Plasma
|
||||||
|
Comment[pt_BR]=Papel de parede do Plasma
|
||||||
|
Comment[sk]=Tapeta Plasma
|
||||||
|
Comment[sv]=Plasma skrivbordsunderlägg
|
||||||
|
Comment[uk]=Тло стільниці Плазми
|
||||||
|
Comment[x-test]=xxPlasma wallpaperxx
|
||||||
|
|
||||||
[PropertyDef::X-Plasma-FormFactors]
|
[PropertyDef::X-Plasma-FormFactors]
|
||||||
Type=QStringList
|
Type=QStringList
|
||||||
|
112
src/scriptengines/qml/declarative/packageurlinterceptor.cpp
Normal file
112
src/scriptengines/qml/declarative/packageurlinterceptor.cpp
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2013 Marco Martin <notmart@gmail.com>
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "packageurlinterceptor.h"
|
||||||
|
|
||||||
|
#include <QDebug>
|
||||||
|
#include <QQmlEngine>
|
||||||
|
#include <QFile>
|
||||||
|
|
||||||
|
#include <kdeclarative/kdeclarative.h>
|
||||||
|
|
||||||
|
PackageUrlInterceptor::PackageUrlInterceptor(QQmlEngine *engine, const Plasma::Package &p)
|
||||||
|
: QQmlAbstractUrlInterceptor(),
|
||||||
|
m_package(p),
|
||||||
|
m_engine(engine)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
PackageUrlInterceptor::~PackageUrlInterceptor()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
QUrl PackageUrlInterceptor::intercept(const QUrl &path, QQmlAbstractUrlInterceptor::DataType type)
|
||||||
|
{
|
||||||
|
//qDebug() << "Intercepted URL:" << path;
|
||||||
|
|
||||||
|
//TODO: security: permission for remote urls
|
||||||
|
if (!path.isLocalFile() ) {
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
//FIXME: probably needed for QmldirFile as well.
|
||||||
|
//at the moment a qt bug prevents intercept() working with qmldirs
|
||||||
|
//see https://codereview.qt-project.org/#change,61208
|
||||||
|
if (type != QQmlAbstractUrlInterceptor::QmldirFile) {
|
||||||
|
|
||||||
|
//asked a file inside a package: let's rewrite the url!
|
||||||
|
if (path.path().startsWith(m_package.path())) {
|
||||||
|
//qDebug() << "Found URL in package" << path;
|
||||||
|
|
||||||
|
//tries to isolate the relative path asked relative to the contentsPrefixPath: like ui/foo.qml
|
||||||
|
QString relativePath;
|
||||||
|
foreach (const QString &prefix, m_package.contentsPrefixPaths()) {
|
||||||
|
if (path.path().startsWith(m_package.path()+prefix)) {
|
||||||
|
//obtain a string in the form ui/foo/bar/baz.qml
|
||||||
|
relativePath = path.path().mid(QString(m_package.path()+prefix).length());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//should never happen
|
||||||
|
Q_ASSERT(!relativePath.isEmpty());
|
||||||
|
|
||||||
|
QStringList components = relativePath.split("/");
|
||||||
|
//a path with less than 2 items should ever happen
|
||||||
|
Q_ASSERT(components.count() >= 2);
|
||||||
|
|
||||||
|
components.pop_front();
|
||||||
|
//obtain a string in the form foo/bar/baz.qml: ui/ gets discarded
|
||||||
|
QString filename = components.join("/");
|
||||||
|
|
||||||
|
//qDebug() << "Returning" << QUrl::fromLocalFile(m_package.filePath(prefixForType(type, filename), filename));
|
||||||
|
return QUrl::fromLocalFile(m_package.filePath(prefixForType(type, filename), filename));
|
||||||
|
|
||||||
|
//forbid to load random absolute paths
|
||||||
|
} else {
|
||||||
|
foreach (const QString &import, m_engine->importPathList()) {
|
||||||
|
//it's from an import, good
|
||||||
|
//TODO: implement imports whitelist?
|
||||||
|
if (path.path().startsWith(import)) {
|
||||||
|
qDebug() << "Found import, access granted" << path;
|
||||||
|
|
||||||
|
//check if there is a platform specific file that overrides this import
|
||||||
|
foreach (const QString &platform, KDeclarative::runtimePlatform()) {
|
||||||
|
qDebug() << "Trying" << platform;
|
||||||
|
|
||||||
|
//search for a platformqml/ path sibling of this import path
|
||||||
|
QString platformPath = import+"/../platformqml/"+platform+path.path().mid(import.length());
|
||||||
|
QFile f(platformPath);
|
||||||
|
|
||||||
|
qDebug() << "Found a platform specific file:" << QUrl::fromLocalFile(platformPath)<<f.exists();
|
||||||
|
if (f.exists()) {
|
||||||
|
return QUrl::fromLocalFile(platformPath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
qWarning() << "WARNING: Access denied for URL" << path;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
73
src/scriptengines/qml/declarative/packageurlinterceptor.h
Normal file
73
src/scriptengines/qml/declarative/packageurlinterceptor.h
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2013 Marco Martin <notmart@gmail.com>
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef PACKAGEURLINTERCEPTOR_H
|
||||||
|
#define PACKAGEURLINTERCEPTOR_H
|
||||||
|
|
||||||
|
#include "qqmlabstracturlinterceptor_p.h"
|
||||||
|
|
||||||
|
#include <Plasma/Package>
|
||||||
|
|
||||||
|
class QQmlEngine;
|
||||||
|
|
||||||
|
//depends from https://codereview.qt-project.org/#change,65626
|
||||||
|
class PackageUrlInterceptor: public QQmlAbstractUrlInterceptor
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
PackageUrlInterceptor(QQmlEngine *engine, const Plasma::Package &p);
|
||||||
|
virtual ~PackageUrlInterceptor();
|
||||||
|
|
||||||
|
virtual QUrl intercept(const QUrl &path, QQmlAbstractUrlInterceptor::DataType type);
|
||||||
|
|
||||||
|
static inline QByteArray prefixForType(QQmlAbstractUrlInterceptor::DataType type, const QString &fileName)
|
||||||
|
{
|
||||||
|
switch (type) {
|
||||||
|
case QQmlAbstractUrlInterceptor::QmlFile:
|
||||||
|
return "ui";
|
||||||
|
case QQmlAbstractUrlInterceptor::JavaScriptFile:
|
||||||
|
return "scripts";
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
//failed by type, let's try by extension
|
||||||
|
const QString extension = fileName.mid(fileName.lastIndexOf(".") + 1).toLower();
|
||||||
|
|
||||||
|
if (extension == "svg" || extension == "svgz" ||
|
||||||
|
extension == "png" || extension == "gif" ||
|
||||||
|
extension == "jpg" || extension == "jpeg") {
|
||||||
|
return "images";
|
||||||
|
//FIXME: are those necessary? are they *always* catched by type?
|
||||||
|
} else if (extension == "js") {
|
||||||
|
return "scripts";
|
||||||
|
} else if (extension == "qml") {
|
||||||
|
return "ui";
|
||||||
|
//everything else, throw it in "data"
|
||||||
|
} else {
|
||||||
|
return "data";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
Plasma::Package m_package;
|
||||||
|
QQmlEngine *m_engine;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,66 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2013 Research In Motion.
|
||||||
|
** Contact: http://www.qt-project.org/legal
|
||||||
|
**
|
||||||
|
** This file is part of the QtQml module of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and Digia. For licensing terms and
|
||||||
|
** conditions see http://qt.digia.com/licensing. For further information
|
||||||
|
** use the contact form at http://qt.digia.com/contact-us.
|
||||||
|
**
|
||||||
|
** GNU Lesser General Public License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
|
** General Public License version 2.1 as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||||
|
** packaging of this file. Please review the following information to
|
||||||
|
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||||
|
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||||
|
**
|
||||||
|
** In addition, as a special exception, Digia gives you certain additional
|
||||||
|
** rights. These rights are described in the Digia Qt LGPL Exception
|
||||||
|
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||||
|
**
|
||||||
|
** GNU General Public License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
|
** General Public License version 3.0 as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.GPL included in the
|
||||||
|
** packaging of this file. Please review the following information to
|
||||||
|
** ensure the GNU General Public License version 3.0 requirements will be
|
||||||
|
** met: http://www.gnu.org/copyleft/gpl.html.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
//Private API for 5.1 (at least)
|
||||||
|
#ifndef QQMLABSTRACTURLINTERCEPTOR_H
|
||||||
|
#define QQMLABSTRACTURLINTERCEPTOR_H
|
||||||
|
|
||||||
|
#include <QtCore/qurl.h>
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
class QQmlAbstractUrlInterceptor
|
||||||
|
{
|
||||||
|
Q_FLAGS(InterceptionPoint)
|
||||||
|
public:
|
||||||
|
enum DataType { //Matches QQmlDataBlob::Type
|
||||||
|
QmlFile = 0,
|
||||||
|
JavaScriptFile = 1,
|
||||||
|
QmldirFile = 2,
|
||||||
|
UrlString = 0x1000
|
||||||
|
};
|
||||||
|
|
||||||
|
QQmlAbstractUrlInterceptor() {}
|
||||||
|
virtual ~QQmlAbstractUrlInterceptor() {}
|
||||||
|
virtual QUrl intercept(const QUrl &path, DataType type) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
#endif
|
@ -49,6 +49,7 @@
|
|||||||
#include <kdeclarative/configpropertymap.h>
|
#include <kdeclarative/configpropertymap.h>
|
||||||
#include <kdeclarative/qmlobject.h>
|
#include <kdeclarative/qmlobject.h>
|
||||||
#include "declarative/packageaccessmanagerfactory.h"
|
#include "declarative/packageaccessmanagerfactory.h"
|
||||||
|
#include "declarative/packageurlinterceptor.h"
|
||||||
|
|
||||||
Q_DECLARE_METATYPE(AppletInterface*)
|
Q_DECLARE_METATYPE(AppletInterface*)
|
||||||
|
|
||||||
@ -112,6 +113,10 @@ void AppletInterface::init()
|
|||||||
delete factory;
|
delete factory;
|
||||||
engine->setNetworkAccessManagerFactory(new PackageAccessManagerFactory(m_appletScriptEngine->package()));
|
engine->setNetworkAccessManagerFactory(new PackageAccessManagerFactory(m_appletScriptEngine->package()));
|
||||||
|
|
||||||
|
//Hook generic url resolution to the applet package as well
|
||||||
|
//TODO: same thing will have to be done for every qqmlengine: PackageUrlInterceptor is material for plasmaquick?
|
||||||
|
engine->setUrlInterceptor(new PackageUrlInterceptor(engine, m_appletScriptEngine->package()));
|
||||||
|
|
||||||
m_qmlObject->setSource(QUrl::fromLocalFile(m_appletScriptEngine->mainScript()));
|
m_qmlObject->setSource(QUrl::fromLocalFile(m_appletScriptEngine->mainScript()));
|
||||||
|
|
||||||
if (!m_qmlObject->engine() || !m_qmlObject->engine()->rootContext() || !m_qmlObject->engine()->rootContext()->isValid() || m_qmlObject->mainComponent()->isError()) {
|
if (!m_qmlObject->engine() || !m_qmlObject->engine()->rootContext() || !m_qmlObject->engine()->rootContext()->isValid() || m_qmlObject->mainComponent()->isError()) {
|
||||||
@ -138,7 +143,11 @@ void AppletInterface::init()
|
|||||||
|
|
||||||
m_qmlObject->engine()->rootContext()->setContextProperty("plasmoid", this);
|
m_qmlObject->engine()->rootContext()->setContextProperty("plasmoid", this);
|
||||||
|
|
||||||
m_qmlObject->completeInitialization();
|
//initialize size, so an useless resize less
|
||||||
|
QVariantHash initialProperties;
|
||||||
|
initialProperties["width"] = width();
|
||||||
|
initialProperties["height"] = height();
|
||||||
|
m_qmlObject->completeInitialization(initialProperties);
|
||||||
|
|
||||||
qDebug() << "Graphic object created:" << applet() << applet()->property("graphicObject");
|
qDebug() << "Graphic object created:" << applet() << applet()->property("graphicObject");
|
||||||
|
|
||||||
@ -212,21 +221,31 @@ QObject* AppletInterface::configuration() const
|
|||||||
return m_configuration;
|
return m_configuration;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint AppletInterface::id() const
|
||||||
|
{
|
||||||
|
return applet()->id();
|
||||||
|
}
|
||||||
|
|
||||||
QString AppletInterface::icon() const
|
QString AppletInterface::icon() const
|
||||||
{
|
{
|
||||||
return applet()->icon();
|
return applet()->icon();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AppletInterface::setIcon(const QString &icon)
|
||||||
|
{
|
||||||
|
if (applet()->icon() == icon) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
applet()->setIcon(icon);
|
||||||
|
emit iconChanged();
|
||||||
|
}
|
||||||
|
|
||||||
QString AppletInterface::title() const
|
QString AppletInterface::title() const
|
||||||
{
|
{
|
||||||
return applet()->title();
|
return applet()->title();
|
||||||
}
|
}
|
||||||
|
|
||||||
uint AppletInterface::id() const
|
|
||||||
{
|
|
||||||
return applet()->id();
|
|
||||||
}
|
|
||||||
|
|
||||||
void AppletInterface::setTitle(const QString &title)
|
void AppletInterface::setTitle(const QString &title)
|
||||||
{
|
{
|
||||||
if (applet()->title() == title) {
|
if (applet()->title() == title) {
|
||||||
@ -634,7 +653,8 @@ void AppletInterface::geometryChanged(const QRectF &newGeometry, const QRectF &o
|
|||||||
|
|
||||||
void AppletInterface::compactRepresentationCheck()
|
void AppletInterface::compactRepresentationCheck()
|
||||||
{
|
{
|
||||||
if (!m_qmlObject->rootObject() || qobject_cast<ContainmentInterface *>(this)) {
|
if (width() <= 0 || height() <= 0 || !m_qmlObject->rootObject() ||
|
||||||
|
qobject_cast<ContainmentInterface *>(this)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -648,7 +668,7 @@ void AppletInterface::compactRepresentationCheck()
|
|||||||
minHint.setHeight(m_qmlObject->rootObject()->property("minimumHeight").toReal());
|
minHint.setHeight(m_qmlObject->rootObject()->property("minimumHeight").toReal());
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: completely arbitrary for now
|
//Make it an icon
|
||||||
if (width() < minHint.width() || height() < minHint.height()) {
|
if (width() < minHint.width() || height() < minHint.height()) {
|
||||||
m_expanded = false;
|
m_expanded = false;
|
||||||
|
|
||||||
@ -686,12 +706,31 @@ void AppletInterface::compactRepresentationCheck()
|
|||||||
//replace the full applet with the collapsed view
|
//replace the full applet with the collapsed view
|
||||||
m_compactUiObject.data()->setProperty("visible", true);
|
m_compactUiObject.data()->setProperty("visible", true);
|
||||||
m_compactUiObject.data()->setProperty("parent", QVariant::fromValue(this));
|
m_compactUiObject.data()->setProperty("parent", QVariant::fromValue(this));
|
||||||
//set anchors
|
|
||||||
QQmlExpression expr(m_qmlObject->engine()->rootContext(), m_compactUiObject.data(), "parent");
|
{
|
||||||
QQmlProperty prop(m_compactUiObject.data(), "anchors.fill");
|
//set anchors
|
||||||
prop.write(expr.evaluate());
|
QQmlExpression expr(m_qmlObject->engine()->rootContext(), m_compactUiObject.data(), "parent");
|
||||||
|
QQmlProperty prop(m_compactUiObject.data(), "anchors.fill");
|
||||||
|
prop.write(expr.evaluate());
|
||||||
|
}
|
||||||
|
|
||||||
m_qmlObject->rootObject()->setProperty("parent", QVariant::fromValue(m_compactUiObject.data()));
|
m_qmlObject->rootObject()->setProperty("parent", QVariant::fromValue(m_compactUiObject.data()));
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
//reset all the anchors
|
||||||
|
QQmlExpression expr(m_qmlObject->engine()->rootContext(), m_qmlObject->rootObject(), "anchors.fill=undefined;anchors.left=undefined;anchors.right=undefined;anchors.top=undefined;anchors.bottom=undefined;");
|
||||||
|
expr.evaluate();
|
||||||
|
}
|
||||||
|
|
||||||
|
KConfigGroup cg = applet()->config();
|
||||||
|
cg = KConfigGroup(&cg, "PopupApplet");
|
||||||
|
int width = cg.readEntry("DialogWidth", 0);
|
||||||
|
int height = cg.readEntry("DialogHeight", 0);
|
||||||
|
|
||||||
|
m_qmlObject->rootObject()->setProperty("width", width);
|
||||||
|
m_qmlObject->rootObject()->setProperty("height", height);
|
||||||
|
|
||||||
m_compactUiObject.data()->setProperty("applet", QVariant::fromValue(m_qmlObject->rootObject()));
|
m_compactUiObject.data()->setProperty("applet", QVariant::fromValue(m_qmlObject->rootObject()));
|
||||||
|
|
||||||
//hook m_compactUiObject size hints to this size hint
|
//hook m_compactUiObject size hints to this size hint
|
||||||
@ -699,6 +738,13 @@ void AppletInterface::compactRepresentationCheck()
|
|||||||
if (m_qmlObject->rootObject()) {
|
if (m_qmlObject->rootObject()) {
|
||||||
disconnect(m_qmlObject->rootObject(), 0, this, 0);
|
disconnect(m_qmlObject->rootObject(), 0, this, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//resize of the root object means popup resize when iconified
|
||||||
|
connect(m_qmlObject->rootObject(), SIGNAL(widthChanged()),
|
||||||
|
this, SLOT(updatePopupSize()));
|
||||||
|
connect(m_qmlObject->rootObject(), SIGNAL(heightChanged()),
|
||||||
|
this, SLOT(updatePopupSize()));
|
||||||
|
|
||||||
if (m_compactUiObject.data()->property("minimumWidth").isValid()) {
|
if (m_compactUiObject.data()->property("minimumWidth").isValid()) {
|
||||||
connect(m_compactUiObject.data(), SIGNAL(minimumWidthChanged()),
|
connect(m_compactUiObject.data(), SIGNAL(minimumWidthChanged()),
|
||||||
this, SIGNAL(minimumWidthChanged()));
|
this, SIGNAL(minimumWidthChanged()));
|
||||||
@ -741,6 +787,7 @@ void AppletInterface::compactRepresentationCheck()
|
|||||||
|
|
||||||
emit expandedChanged();
|
emit expandedChanged();
|
||||||
|
|
||||||
|
//show the full UI
|
||||||
} else {
|
} else {
|
||||||
m_expanded = true;
|
m_expanded = true;
|
||||||
emit expandedChanged();
|
emit expandedChanged();
|
||||||
@ -750,6 +797,11 @@ void AppletInterface::compactRepresentationCheck()
|
|||||||
disconnect(m_compactUiObject.data(), 0, this, 0);
|
disconnect(m_compactUiObject.data(), 0, this, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
disconnect(m_qmlObject->rootObject(), SIGNAL(widthChanged()),
|
||||||
|
this, SLOT(updatePopupSize()));
|
||||||
|
disconnect(m_qmlObject->rootObject(), SIGNAL(heightChanged()),
|
||||||
|
this, SLOT(updatePopupSize()));
|
||||||
|
|
||||||
//Here we have to use the old connect syntax, because we don't have access to the class type
|
//Here we have to use the old connect syntax, because we don't have access to the class type
|
||||||
if (m_qmlObject->rootObject()->property("minimumWidth").isValid()) {
|
if (m_qmlObject->rootObject()->property("minimumWidth").isValid()) {
|
||||||
connect(m_qmlObject->rootObject(), SIGNAL(minimumWidthChanged()),
|
connect(m_qmlObject->rootObject(), SIGNAL(minimumWidthChanged()),
|
||||||
@ -799,6 +851,14 @@ void AppletInterface::compactRepresentationCheck()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AppletInterface::updatePopupSize()
|
||||||
|
{
|
||||||
|
KConfigGroup cg = applet()->config();
|
||||||
|
cg = KConfigGroup(&cg, "PopupApplet");
|
||||||
|
cg.writeEntry("DialogWidth", m_qmlObject->rootObject()->property("width").toInt());
|
||||||
|
cg.writeEntry("DialogHeight", m_qmlObject->rootObject()->property("height").toInt());
|
||||||
|
}
|
||||||
|
|
||||||
void AppletInterface::itemChange(ItemChange change, const ItemChangeData &value)
|
void AppletInterface::itemChange(ItemChange change, const ItemChangeData &value)
|
||||||
{
|
{
|
||||||
if (change == QQuickItem::ItemSceneChange) {
|
if (change == QQuickItem::ItemSceneChange) {
|
||||||
|
@ -64,11 +64,10 @@ class AppletInterface : public QQuickItem
|
|||||||
*/
|
*/
|
||||||
Q_PROPERTY(QString title READ title WRITE setTitle NOTIFY titleChanged)
|
Q_PROPERTY(QString title READ title WRITE setTitle NOTIFY titleChanged)
|
||||||
|
|
||||||
//TODO: writable icon
|
|
||||||
/**
|
/**
|
||||||
* Icon to represent the plasmoid
|
* Icon to represent the plasmoid
|
||||||
*/
|
*/
|
||||||
Q_PROPERTY(QString icon READ icon CONSTANT)
|
Q_PROPERTY(QString icon READ icon WRITE setIcon NOTIFY iconChanged)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Applet id: is unique in the whole Plasma session and will never change across restarts
|
* Applet id: is unique in the whole Plasma session and will never change across restarts
|
||||||
@ -192,6 +191,7 @@ public:
|
|||||||
Q_INVOKABLE QAction *action(QString name) const;
|
Q_INVOKABLE QAction *action(QString name) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* FIXME: remove?
|
||||||
* Retrieve the path of a file from the Plasmoid package
|
* Retrieve the path of a file from the Plasmoid package
|
||||||
* @param fileName the package-recognized name, such as "mainscript"
|
* @param fileName the package-recognized name, such as "mainscript"
|
||||||
* @returns the full absolute path of the file, if found, an empty string if not
|
* @returns the full absolute path of the file, if found, an empty string if not
|
||||||
@ -199,6 +199,7 @@ public:
|
|||||||
Q_INVOKABLE QString file(const QString &fileName);
|
Q_INVOKABLE QString file(const QString &fileName);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* FIXME: remove?
|
||||||
* Retrieve the path of a file from the Plasmoid package
|
* Retrieve the path of a file from the Plasmoid package
|
||||||
* @param fileType the type supported from the package, such as "ui", "config" or "image"
|
* @param fileType the type supported from the package, such as "ui", "config" or "image"
|
||||||
* @param filePath the name of the file, such as "foo.qml" or "bar.png"
|
* @param filePath the name of the file, such as "foo.qml" or "bar.png"
|
||||||
@ -233,6 +234,7 @@ public:
|
|||||||
|
|
||||||
//PROPERTY ACCESSORS-------------------------------------------------------------------
|
//PROPERTY ACCESSORS-------------------------------------------------------------------
|
||||||
QString icon() const;
|
QString icon() const;
|
||||||
|
void setIcon(const QString &icon);
|
||||||
|
|
||||||
QString title() const;
|
QString title() const;
|
||||||
void setTitle(const QString &title);
|
void setTitle(const QString &title);
|
||||||
@ -281,10 +283,18 @@ public:
|
|||||||
qreal implicitHeight() const;
|
qreal implicitHeight() const;
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
|
/**
|
||||||
|
* somebody else, usually the containment sent some data to the applet
|
||||||
|
* @param mimetype the mime type of the data such as text/plain
|
||||||
|
* @param data either the actual data or an URL representing it
|
||||||
|
*/
|
||||||
|
void externalData(const QString &mimetype, const QVariant &data);
|
||||||
|
|
||||||
void releaseVisualFocus();
|
void releaseVisualFocus();
|
||||||
void configNeedsSaving();
|
void configNeedsSaving();
|
||||||
|
|
||||||
//PROPERTY change notifiers--------------
|
//PROPERTY change notifiers--------------
|
||||||
|
void iconChanged();
|
||||||
void titleChanged();
|
void titleChanged();
|
||||||
void formFactorChanged();
|
void formFactorChanged();
|
||||||
void locationChanged();
|
void locationChanged();
|
||||||
@ -317,6 +327,7 @@ protected Q_SLOTS:
|
|||||||
|
|
||||||
private Q_SLOTS:
|
private Q_SLOTS:
|
||||||
void compactRepresentationCheck();
|
void compactRepresentationCheck();
|
||||||
|
void updatePopupSize();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
//Helper for minimumWidth etc.
|
//Helper for minimumWidth etc.
|
||||||
|
@ -55,7 +55,6 @@ ContainmentInterface::ContainmentInterface(DeclarativeAppletScript *parent)
|
|||||||
m_wallpaperInterface(0)
|
m_wallpaperInterface(0)
|
||||||
{
|
{
|
||||||
setAcceptedMouseButtons(Qt::AllButtons);
|
setAcceptedMouseButtons(Qt::AllButtons);
|
||||||
setFlag(QQuickItem::ItemAcceptsDrops);
|
|
||||||
|
|
||||||
qmlRegisterType<ContainmentInterface>();
|
qmlRegisterType<ContainmentInterface>();
|
||||||
|
|
||||||
@ -76,26 +75,16 @@ ContainmentInterface::ContainmentInterface(DeclarativeAppletScript *parent)
|
|||||||
connect(containment()->corona(), &Plasma::Corona::availableScreenRegionChanged,
|
connect(containment()->corona(), &Plasma::Corona::availableScreenRegionChanged,
|
||||||
this, &ContainmentInterface::availableScreenRegionChanged);
|
this, &ContainmentInterface::availableScreenRegionChanged);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void ContainmentInterface::init()
|
|
||||||
{
|
|
||||||
AppletInterface::init();
|
|
||||||
|
|
||||||
foreach (QObject *appletObj, m_appletInterfaces) {
|
|
||||||
AppletInterface *applet = qobject_cast<AppletInterface *>(appletObj);
|
|
||||||
if (applet) {
|
|
||||||
if (!applet->qmlObject()) {
|
|
||||||
applet->init();
|
|
||||||
}
|
|
||||||
m_appletInterfaces << applet;
|
|
||||||
emit appletAdded(applet, 0, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!m_appletInterfaces.isEmpty()) {
|
if (!m_appletInterfaces.isEmpty()) {
|
||||||
emit appletsChanged();
|
emit appletsChanged();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ContainmentInterface::init()
|
||||||
|
{
|
||||||
|
|
||||||
|
AppletInterface::init();
|
||||||
|
|
||||||
if (m_qmlObject->rootObject()->property("minimumWidth").isValid()) {
|
if (m_qmlObject->rootObject()->property("minimumWidth").isValid()) {
|
||||||
connect(m_qmlObject->rootObject(), SIGNAL(minimumWidthChanged()),
|
connect(m_qmlObject->rootObject(), SIGNAL(minimumWidthChanged()),
|
||||||
@ -195,7 +184,7 @@ QVariantList ContainmentInterface::availableScreenRegion(int id) const
|
|||||||
return regVal;
|
return regVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ContainmentInterface::addApplet(const QString &plugin, const QVariantList &args, const QPoint &pos)
|
Plasma::Applet *ContainmentInterface::addApplet(const QString &plugin, const QVariantList &args, const QPoint &pos)
|
||||||
{
|
{
|
||||||
//HACK
|
//HACK
|
||||||
//This is necessary to delay the appletAdded signal (of containmentInterface) AFTER the applet graphics object has been created
|
//This is necessary to delay the appletAdded signal (of containmentInterface) AFTER the applet graphics object has been created
|
||||||
@ -211,6 +200,19 @@ void ContainmentInterface::addApplet(const QString &plugin, const QVariantList &
|
|||||||
|
|
||||||
emit appletAdded(appletGraphicObject, pos.x(), pos.y());
|
emit appletAdded(appletGraphicObject, pos.x(), pos.y());
|
||||||
emit appletsChanged();
|
emit appletsChanged();
|
||||||
|
return applet;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ContainmentInterface::setAppletArgs(Plasma::Applet *applet, const QString &mimetype, const QString &data)
|
||||||
|
{
|
||||||
|
if (!applet) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
AppletInterface *appletInterface = applet->property("graphicObject").value<AppletInterface *>();
|
||||||
|
if (appletInterface) {
|
||||||
|
emit appletInterface->externalData(mimetype, data);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ContainmentInterface::processMimeData(QMimeData *mimeData, int x, int y)
|
void ContainmentInterface::processMimeData(QMimeData *mimeData, int x, int y)
|
||||||
@ -309,24 +311,9 @@ void ContainmentInterface::processMimeData(QMimeData *mimeData, int x, int y)
|
|||||||
|
|
||||||
if (!selectedPlugin.isEmpty()) {
|
if (!selectedPlugin.isEmpty()) {
|
||||||
|
|
||||||
KTemporaryFile tempFile;
|
Plasma::Applet *applet = addApplet(selectedPlugin, QVariantList(), QPoint(x, y));
|
||||||
if (mimeData && tempFile.open()) {
|
setAppletArgs(applet, pluginFormats[selectedPlugin], mimeData->data(pluginFormats[selectedPlugin]));
|
||||||
//TODO: what should we do with files after the applet is done with them??
|
|
||||||
tempFile.setAutoRemove(false);
|
|
||||||
|
|
||||||
{
|
|
||||||
QDataStream stream(&tempFile);
|
|
||||||
QByteArray data = mimeData->data(pluginFormats[selectedPlugin]);
|
|
||||||
stream.writeRawData(data, data.size());
|
|
||||||
}
|
|
||||||
|
|
||||||
QVariantList args;
|
|
||||||
args << tempFile.fileName();
|
|
||||||
qDebug() << args;
|
|
||||||
tempFile.close();
|
|
||||||
|
|
||||||
addApplet(selectedPlugin, args, QPoint(x, y));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -394,10 +381,8 @@ void ContainmentInterface::mimeTypeRetrieved(KIO::Job *job, const QString &mimet
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariantList args;
|
|
||||||
args << tjob->url().url() << mimetype;
|
|
||||||
|
|
||||||
qDebug() << "Creating menu for:" << mimetype << posi << args;
|
qDebug() << "Creating menu for:" << mimetype << posi;
|
||||||
|
|
||||||
appletList << Plasma::PluginLoader::self()->listAppletInfoForMimeType(mimetype);
|
appletList << Plasma::PluginLoader::self()->listAppletInfoForMimeType(mimetype);
|
||||||
KPluginInfo::List wallpaperList;
|
KPluginInfo::List wallpaperList;
|
||||||
@ -467,7 +452,8 @@ void ContainmentInterface::mimeTypeRetrieved(KIO::Job *job, const QString &mimet
|
|||||||
m_wallpaperInterface->setUrl(tjob->url());
|
m_wallpaperInterface->setUrl(tjob->url());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
addApplet(actionsToApplets[choice], args, posi);
|
Plasma::Applet *applet = addApplet(actionsToApplets[choice], QVariantList(), posi);
|
||||||
|
setAppletArgs(applet, mimetype, tjob->url().toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
clearDataForMimeJob(job);
|
clearDataForMimeJob(job);
|
||||||
@ -475,7 +461,8 @@ void ContainmentInterface::mimeTypeRetrieved(KIO::Job *job, const QString &mimet
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// we can at least create an icon as a link to the URL
|
// we can at least create an icon as a link to the URL
|
||||||
addApplet("org.kde.icon", args, posi);
|
Plasma::Applet *applet = addApplet("org.kde.icon", QVariantList(), posi);
|
||||||
|
setAppletArgs(applet, mimetype, tjob->url().toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -555,6 +542,24 @@ QString ContainmentInterface::activity() const
|
|||||||
return containment()->activity();
|
return containment()->activity();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QList<QObject*> ContainmentInterface::actions() const
|
||||||
|
{
|
||||||
|
//FIXME: giving directly a QList<QAction*> crashes
|
||||||
|
|
||||||
|
//use a multimap to sort by action type
|
||||||
|
QMultiMap<int, QObject*> actions;
|
||||||
|
foreach (QAction *a, containment()->actions()->actions()) {
|
||||||
|
if (a->isEnabled()) {
|
||||||
|
actions.insert(a->data().toInt(), a);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
foreach (QAction *a, containment()->corona()->actions()->actions()) {
|
||||||
|
if (a->isEnabled()) {
|
||||||
|
actions.insert(a->data().toInt(), a);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return actions.values();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -58,6 +58,11 @@ class ContainmentInterface : public AppletInterface
|
|||||||
*/
|
*/
|
||||||
Q_PROPERTY(QString activity READ activity NOTIFY activityChanged)
|
Q_PROPERTY(QString activity READ activity NOTIFY activityChanged)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Actions associated to this containment or corona
|
||||||
|
*/
|
||||||
|
Q_PROPERTY(QList<QObject*> actions READ actions NOTIFY actionsChanged)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ContainmentInterface(DeclarativeAppletScript *parent);
|
ContainmentInterface(DeclarativeAppletScript *parent);
|
||||||
//Not for QML
|
//Not for QML
|
||||||
@ -75,6 +80,8 @@ public:
|
|||||||
|
|
||||||
QString activity() const;
|
QString activity() const;
|
||||||
|
|
||||||
|
QList<QObject*> actions() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* FIXME: either a property or not accessible at all. Lock or unlock widgets
|
* FIXME: either a property or not accessible at all. Lock or unlock widgets
|
||||||
*/
|
*/
|
||||||
@ -127,6 +134,7 @@ Q_SIGNALS:
|
|||||||
void drawWallpaperChanged();
|
void drawWallpaperChanged();
|
||||||
void containmentTypeChanged();
|
void containmentTypeChanged();
|
||||||
///void immutableChanged();
|
///void immutableChanged();
|
||||||
|
void actionsChanged();
|
||||||
|
|
||||||
protected Q_SLOTS:
|
protected Q_SLOTS:
|
||||||
void appletAddedForward(Plasma::Applet *applet);
|
void appletAddedForward(Plasma::Applet *applet);
|
||||||
@ -137,7 +145,8 @@ protected Q_SLOTS:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void clearDataForMimeJob(KIO::Job *job);
|
void clearDataForMimeJob(KIO::Job *job);
|
||||||
void addApplet(const QString &plugin, const QVariantList &args, const QPoint &pos);
|
Plasma::Applet *addApplet(const QString &plugin, const QVariantList &args, const QPoint &pos);
|
||||||
|
void setAppletArgs(Plasma::Applet *applet, const QString &mimetype, const QString &data);
|
||||||
|
|
||||||
WallpaperInterface *m_wallpaperInterface;
|
WallpaperInterface *m_wallpaperInterface;
|
||||||
QList<QObject *> m_appletInterfaces;
|
QList<QObject *> m_appletInterfaces;
|
||||||
|
@ -179,12 +179,10 @@ void WallpaperInterface::setAction(const QString &name, const QString &text, con
|
|||||||
if (action) {
|
if (action) {
|
||||||
action->setText(text);
|
action->setText(text);
|
||||||
} else {
|
} else {
|
||||||
|
Q_ASSERT(!m_actions->action(name));
|
||||||
action = new QAction(text, this);
|
action = new QAction(text, this);
|
||||||
m_actions->addAction(name, action);
|
m_actions->addAction(name, action);
|
||||||
|
|
||||||
Q_ASSERT(!m_actions->actions().contains(name));
|
|
||||||
m_actions->addAction(name, action);
|
|
||||||
|
|
||||||
if (!m_actionSignals) {
|
if (!m_actionSignals) {
|
||||||
m_actionSignals = new QSignalMapper(this);
|
m_actionSignals = new QSignalMapper(this);
|
||||||
connect(m_actionSignals, SIGNAL(mapped(QString)),
|
connect(m_actionSignals, SIGNAL(mapped(QString)),
|
||||||
|
@ -57,6 +57,8 @@ set(widgetexplorer_SRC
|
|||||||
|
|
||||||
add_executable(plasma-shell
|
add_executable(plasma-shell
|
||||||
main.cpp
|
main.cpp
|
||||||
|
containmentconfigview.cpp
|
||||||
|
currentcontainmentactionsmodel.cpp
|
||||||
desktopview.cpp
|
desktopview.cpp
|
||||||
panelview.cpp
|
panelview.cpp
|
||||||
panelconfigview.cpp
|
panelconfigview.cpp
|
||||||
@ -79,7 +81,7 @@ target_link_libraries(plasma-shell
|
|||||||
${KWindowSystem_LIBRARIES}
|
${KWindowSystem_LIBRARIES}
|
||||||
${KCoreAddons_LIBRARIES}
|
${KCoreAddons_LIBRARIES}
|
||||||
plasma
|
plasma
|
||||||
plasmaquick
|
PlasmaQuick
|
||||||
${Qt5Script_LIBRARIES}
|
${Qt5Script_LIBRARIES}
|
||||||
${KDE4Support_LIBRARIES}
|
${KDE4Support_LIBRARIES}
|
||||||
${Solid_LIBRARIES}
|
${Solid_LIBRARIES}
|
||||||
|
@ -17,9 +17,9 @@
|
|||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "currentcontainmentactionsmodel_p.h"
|
#include "currentcontainmentactionsmodel.h"
|
||||||
#include "containmentconfigview_p.h"
|
#include "containmentconfigview.h"
|
||||||
#include "configview_p.h"
|
#include "configmodel.h"
|
||||||
|
|
||||||
#include <kdeclarative/configpropertymap.h>
|
#include <kdeclarative/configpropertymap.h>
|
||||||
|
|
||||||
@ -45,7 +45,7 @@ ContainmentConfigView::ContainmentConfigView(Plasma::Containment *cont, QWindow
|
|||||||
m_currentWallpaperConfig(0),
|
m_currentWallpaperConfig(0),
|
||||||
m_ownWallpaperConfig(0)
|
m_ownWallpaperConfig(0)
|
||||||
{
|
{
|
||||||
qmlRegisterType<QStandardItemModel>();
|
qmlRegisterType<QAbstractItemModel>();
|
||||||
engine()->rootContext()->setContextProperty("configDialog", this);
|
engine()->rootContext()->setContextProperty("configDialog", this);
|
||||||
setCurrentWallpaper(cont->containment()->wallpaper());
|
setCurrentWallpaper(cont->containment()->wallpaper());
|
||||||
|
|
||||||
@ -78,19 +78,14 @@ ConfigModel *ContainmentConfigView::containmentActionConfigModel()
|
|||||||
|
|
||||||
foreach (const KPluginInfo &info, actions) {
|
foreach (const KPluginInfo &info, actions) {
|
||||||
pkg.setDefaultPackageRoot(QStandardPaths::locate(QStandardPaths::GenericDataLocation, "plasma/containmentactions", QStandardPaths::LocateDirectory));
|
pkg.setDefaultPackageRoot(QStandardPaths::locate(QStandardPaths::GenericDataLocation, "plasma/containmentactions", QStandardPaths::LocateDirectory));
|
||||||
ConfigCategory *cat = new ConfigCategory(m_containmentActionConfigModel);
|
m_containmentActionConfigModel->appendCategory(info.icon(), info.name(), pkg.filePath("ui", "config.qml"), info.pluginName());
|
||||||
cat->setName(info.name());
|
|
||||||
cat->setIcon(info.icon());
|
|
||||||
cat->setSource(pkg.filePath("ui", "config.qml"));
|
|
||||||
cat->setPluginName(info.pluginName());
|
|
||||||
m_containmentActionConfigModel->appendCategory(cat);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
return m_containmentActionConfigModel;
|
return m_containmentActionConfigModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
QStandardItemModel *ContainmentConfigView::currentContainmentActionsModel()
|
QAbstractItemModel *ContainmentConfigView::currentContainmentActionsModel()
|
||||||
{
|
{
|
||||||
if (!m_currentContainmentActionsModel) {
|
if (!m_currentContainmentActionsModel) {
|
||||||
m_currentContainmentActionsModel = new CurrentContainmentActionsModel(m_containment, this);
|
m_currentContainmentActionsModel = new CurrentContainmentActionsModel(m_containment, this);
|
||||||
@ -121,12 +116,7 @@ ConfigModel *ContainmentConfigView::wallpaperConfigModel()
|
|||||||
if (!pkg.isValid()) {
|
if (!pkg.isValid()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
ConfigCategory *cat = new ConfigCategory(m_wallpaperConfigModel);
|
m_wallpaperConfigModel->appendCategory(pkg.metadata().icon(), pkg.metadata().name(), pkg.filePath("ui", "config.qml"), package);
|
||||||
cat->setName(pkg.metadata().name());
|
|
||||||
cat->setIcon(pkg.metadata().icon());
|
|
||||||
cat->setSource(pkg.filePath("ui", "config.qml"));
|
|
||||||
cat->setPluginName(package);
|
|
||||||
m_wallpaperConfigModel->appendCategory(cat);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -191,4 +181,4 @@ void ContainmentConfigView::syncWallpaperObjects()
|
|||||||
m_currentWallpaperConfig = static_cast<ConfigPropertyMap *>(wallpaperGraphicsObject->property("configuration").value<QObject *>());
|
m_currentWallpaperConfig = static_cast<ConfigPropertyMap *>(wallpaperGraphicsObject->property("configuration").value<QObject *>());
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "moc_containmentconfigview_p.cpp"
|
#include "private/moc_containmentconfigview.cpp"
|
@ -28,15 +28,16 @@ namespace Plasma {
|
|||||||
class Containment;
|
class Containment;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class QAbstractItemModel;
|
||||||
class ConfigPropertyMap;
|
class ConfigPropertyMap;
|
||||||
class CurrentContainmentActionsModel;
|
class CurrentContainmentActionsModel;
|
||||||
|
|
||||||
|
//TODO: out of the library?
|
||||||
class ContainmentConfigView : public ConfigView
|
class ContainmentConfigView : public ConfigView
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
Q_PROPERTY(ConfigModel *containmentActionConfigModel READ containmentActionConfigModel CONSTANT)
|
Q_PROPERTY(ConfigModel *containmentActionConfigModel READ containmentActionConfigModel CONSTANT)
|
||||||
Q_PROPERTY(QStandardItemModel *currentContainmentActionsModel READ currentContainmentActionsModel CONSTANT)
|
Q_PROPERTY(QAbstractItemModel *currentContainmentActionsModel READ currentContainmentActionsModel CONSTANT)
|
||||||
Q_PROPERTY(ConfigModel *wallpaperConfigModel READ wallpaperConfigModel CONSTANT)
|
Q_PROPERTY(ConfigModel *wallpaperConfigModel READ wallpaperConfigModel CONSTANT)
|
||||||
Q_PROPERTY(ConfigPropertyMap *wallpaperConfiguration READ wallpaperConfiguration NOTIFY wallpaperConfigurationChanged)
|
Q_PROPERTY(ConfigPropertyMap *wallpaperConfiguration READ wallpaperConfiguration NOTIFY wallpaperConfigurationChanged)
|
||||||
Q_PROPERTY(QString currentWallpaper READ currentWallpaper WRITE setCurrentWallpaper NOTIFY currentWallpaperChanged)
|
Q_PROPERTY(QString currentWallpaper READ currentWallpaper WRITE setCurrentWallpaper NOTIFY currentWallpaperChanged)
|
||||||
@ -48,7 +49,7 @@ public:
|
|||||||
virtual void init();
|
virtual void init();
|
||||||
|
|
||||||
ConfigModel *containmentActionConfigModel();
|
ConfigModel *containmentActionConfigModel();
|
||||||
QStandardItemModel *currentContainmentActionsModel();
|
QAbstractItemModel *currentContainmentActionsModel();
|
||||||
ConfigModel *wallpaperConfigModel();
|
ConfigModel *wallpaperConfigModel();
|
||||||
QString currentWallpaper() const;
|
QString currentWallpaper() const;
|
||||||
void setCurrentWallpaper(const QString &wallpaper);
|
void setCurrentWallpaper(const QString &wallpaper);
|
@ -17,7 +17,7 @@
|
|||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "currentcontainmentactionsmodel_p.h"
|
#include "currentcontainmentactionsmodel.h"
|
||||||
|
|
||||||
#include <QMouseEvent>
|
#include <QMouseEvent>
|
||||||
|
|
||||||
@ -259,4 +259,4 @@ void CurrentContainmentActionsModel::save()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "moc_currentcontainmentactionsmodel_p.cpp"
|
#include "private/moc_currentcontainmentactionsmodel.cpp"
|
@ -30,6 +30,8 @@ namespace Plasma {
|
|||||||
class ContainmentActions;
|
class ContainmentActions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//This model load the data about available containment actions plugins, such as context menus that can be loaded on mouse click
|
||||||
|
//TODO: out of the library?
|
||||||
class CurrentContainmentActionsModel : public QStandardItemModel
|
class CurrentContainmentActionsModel : public QStandardItemModel
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
@ -17,20 +17,99 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "desktopview.h"
|
#include "desktopview.h"
|
||||||
|
#include "containmentconfigview.h"
|
||||||
#include "shellcorona.h"
|
#include "shellcorona.h"
|
||||||
|
#include "shellmanager.h"
|
||||||
|
|
||||||
|
#include <QQmlEngine>
|
||||||
|
#include <QQmlContext>
|
||||||
|
#include <QScreen>
|
||||||
|
|
||||||
|
#include <KWindowSystem>
|
||||||
|
|
||||||
|
#include <Plasma/Package>
|
||||||
|
|
||||||
DesktopView::DesktopView(ShellCorona *corona, QWindow *parent)
|
DesktopView::DesktopView(ShellCorona *corona, QWindow *parent)
|
||||||
: PlasmaQuickView(corona, parent)
|
: PlasmaQuickView(corona, parent),
|
||||||
|
m_stayBehind(false),
|
||||||
|
m_fillScreen(false)
|
||||||
{
|
{
|
||||||
|
engine()->rootContext()->setContextProperty("desktop", this);
|
||||||
|
setSource(QUrl::fromLocalFile(corona->package().filePath("views", "Desktop.qml")));
|
||||||
}
|
}
|
||||||
|
|
||||||
DesktopView::~DesktopView()
|
DesktopView::~DesktopView()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
|
bool DesktopView::stayBehind() const
|
||||||
|
{
|
||||||
|
return m_stayBehind;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DesktopView::setStayBehind(bool stayBehind)
|
||||||
|
{
|
||||||
|
if (ShellManager::s_forceWindowed || stayBehind == m_stayBehind) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (stayBehind) {
|
||||||
|
KWindowSystem::setType(winId(), NET::Desktop);
|
||||||
|
} else {
|
||||||
|
KWindowSystem::setType(winId(), NET::Normal);
|
||||||
|
}
|
||||||
|
|
||||||
|
m_stayBehind = stayBehind;
|
||||||
|
emit stayBehindChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DesktopView::fillScreen() const
|
||||||
|
{
|
||||||
|
return m_fillScreen;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DesktopView::setFillScreen(bool fillScreen)
|
||||||
|
{
|
||||||
|
if (ShellManager::s_forceWindowed || fillScreen == m_fillScreen) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
resize(screen()->geometry().width(), screen()->geometry().height());
|
||||||
|
connect(screen(), &QScreen::geometryChanged, [=]{resize(screen()->geometry().width(), screen()->geometry().height());});
|
||||||
|
|
||||||
|
fillScreen = fillScreen;
|
||||||
|
emit fillScreenChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DesktopView::setDashboardShown(bool shown)
|
||||||
|
{
|
||||||
|
if (shown) {
|
||||||
|
if (m_stayBehind) {
|
||||||
|
KWindowSystem::setType(winId(), NET::Normal);
|
||||||
|
}
|
||||||
|
raise();
|
||||||
|
KWindowSystem::raiseWindow(winId());
|
||||||
|
|
||||||
|
QObject *wpGraphicObject = containment()->property("wallpaperGraphicsObject").value<QObject *>();
|
||||||
|
if (wpGraphicObject) {
|
||||||
|
wpGraphicObject->setProperty("opacity", 0.3);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (m_stayBehind) {
|
||||||
|
KWindowSystem::setType(winId(), NET::Desktop);
|
||||||
|
}
|
||||||
|
lower();
|
||||||
|
KWindowSystem::lowerWindow(winId());
|
||||||
|
|
||||||
|
QObject *wpGraphicObject = containment()->property("wallpaperGraphicsObject").value<QObject *>();
|
||||||
|
if (wpGraphicObject) {
|
||||||
|
wpGraphicObject->setProperty("opacity", 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void DesktopView::showConfigurationInterface(Plasma::Applet *applet)
|
void DesktopView::showConfigurationInterface(Plasma::Applet *applet)
|
||||||
{
|
{
|
||||||
if (m_configView) {
|
if (m_configView) {
|
||||||
@ -45,13 +124,13 @@ void DesktopView::showConfigurationInterface(Plasma::Applet *applet)
|
|||||||
Plasma::Containment *cont = qobject_cast<Plasma::Containment *>(applet);
|
Plasma::Containment *cont = qobject_cast<Plasma::Containment *>(applet);
|
||||||
|
|
||||||
if (cont) {
|
if (cont) {
|
||||||
m_configView = new PanelConfigView(cont, this);
|
m_configView = new ContainmentConfigView(cont);
|
||||||
} else {
|
} else {
|
||||||
m_configView = new ConfigView(applet);
|
m_configView = new ConfigView(applet);
|
||||||
}
|
}
|
||||||
m_configView.data()->init();
|
m_configView.data()->init();
|
||||||
m_configView.data()->show();
|
m_configView.data()->show();
|
||||||
}*/
|
}
|
||||||
|
|
||||||
|
|
||||||
#include "moc_desktopview.cpp"
|
#include "moc_desktopview.cpp"
|
||||||
|
@ -29,19 +29,35 @@ class ShellCorona;
|
|||||||
class DesktopView : public PlasmaQuickView
|
class DesktopView : public PlasmaQuickView
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
Q_PROPERTY(bool stayBehind READ stayBehind WRITE setStayBehind NOTIFY stayBehindChanged)
|
||||||
|
Q_PROPERTY(bool fillScreen READ fillScreen WRITE setFillScreen NOTIFY fillScreenChanged)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit DesktopView(ShellCorona *corona, QWindow *parent = 0);
|
explicit DesktopView(ShellCorona *corona, QWindow *parent = 0);
|
||||||
virtual ~DesktopView();
|
virtual ~DesktopView();
|
||||||
|
|
||||||
|
bool stayBehind() const;
|
||||||
|
void setStayBehind(bool stayBehind);
|
||||||
|
|
||||||
|
bool fillScreen() const;
|
||||||
|
void setFillScreen(bool fillScreen);
|
||||||
|
|
||||||
|
void setDashboardShown(bool shown);
|
||||||
|
|
||||||
protected Q_SLOTS:
|
protected Q_SLOTS:
|
||||||
/**
|
/**
|
||||||
* It will be called when the configuration is requested
|
* It will be called when the configuration is requested
|
||||||
*/
|
*/
|
||||||
//virtual void showConfigurationInterface(Plasma::Applet *applet);
|
virtual void showConfigurationInterface(Plasma::Applet *applet);
|
||||||
|
|
||||||
|
Q_SIGNALS:
|
||||||
|
void stayBehindChanged();
|
||||||
|
void fillScreenChanged();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QPointer<ConfigView> m_configView;
|
QPointer<ConfigView> m_configView;
|
||||||
|
bool m_stayBehind : 1;
|
||||||
|
bool m_fillScreen : 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // DESKTOVIEW_H
|
#endif // DESKTOVIEW_H
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
#include "shellmanager.h"
|
#include "shellmanager.h"
|
||||||
|
|
||||||
#include <QtQml/QQmlDebuggingEnabler>
|
#include <QtQml/QQmlDebuggingEnabler>
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
static const char description[] = "Plasma Shell";
|
static const char description[] = "Plasma Shell";
|
||||||
static const char version[] = "2.0";
|
static const char version[] = "2.0";
|
||||||
@ -38,9 +39,13 @@ int main(int argc, char** argv)
|
|||||||
QCommandLineOption dbg = QCommandLineOption(QStringList() << QStringLiteral("d") << QStringLiteral("qmljsdebugger"),
|
QCommandLineOption dbg = QCommandLineOption(QStringList() << QStringLiteral("d") << QStringLiteral("qmljsdebugger"),
|
||||||
QStringLiteral("Enable QML Javascript debugger"));
|
QStringLiteral("Enable QML Javascript debugger"));
|
||||||
|
|
||||||
|
QCommandLineOption windowed = QCommandLineOption(QStringList() << QStringLiteral("w") << QStringLiteral("windowed"),
|
||||||
|
QStringLiteral("force a windowed view for desktop purposes"));
|
||||||
|
|
||||||
parser.addVersionOption();
|
parser.addVersionOption();
|
||||||
parser.setApplicationDescription(description);
|
parser.setApplicationDescription(description);
|
||||||
parser.addOption(dbg);
|
parser.addOption(dbg);
|
||||||
|
parser.addOption(windowed);
|
||||||
parser.process(app);
|
parser.process(app);
|
||||||
|
|
||||||
//enable the QML debugger only if --qmljsdebugger (or -d) is passed as a command line arg
|
//enable the QML debugger only if --qmljsdebugger (or -d) is passed as a command line arg
|
||||||
@ -58,6 +63,8 @@ int main(int argc, char** argv)
|
|||||||
// corona->processUpdateScripts();
|
// corona->processUpdateScripts();
|
||||||
// corona->checkScreens();
|
// corona->checkScreens();
|
||||||
|
|
||||||
|
ShellManager::s_forceWindowed = parser.isSet(windowed);
|
||||||
|
|
||||||
ShellManager::instance();
|
ShellManager::instance();
|
||||||
|
|
||||||
return app.exec();
|
return app.exec();
|
||||||
|
@ -341,8 +341,6 @@ void PanelView::restore()
|
|||||||
m_offset = qMax(0, m_offset);
|
m_offset = qMax(0, m_offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_maxLength = config().readEntry<int>("maxLength", -1);
|
|
||||||
m_minLength = config().readEntry<int>("minLength", -1);
|
|
||||||
m_alignment = (Qt::Alignment)config().readEntry<int>("alignment", Qt::AlignLeft);
|
m_alignment = (Qt::Alignment)config().readEntry<int>("alignment", Qt::AlignLeft);
|
||||||
|
|
||||||
setMinimumSize(QSize(-1, -1));
|
setMinimumSize(QSize(-1, -1));
|
||||||
@ -350,6 +348,9 @@ void PanelView::restore()
|
|||||||
setMaximumSize(screen()->size());
|
setMaximumSize(screen()->size());
|
||||||
|
|
||||||
if (containment()->formFactor() == Plasma::Types::Vertical) {
|
if (containment()->formFactor() == Plasma::Types::Vertical) {
|
||||||
|
m_maxLength = config().readEntry<int>("maxLength", screen()->size().height());
|
||||||
|
m_minLength = config().readEntry<int>("minLength", screen()->size().height());
|
||||||
|
|
||||||
const int maxSize = screen()->size().height() - m_offset;
|
const int maxSize = screen()->size().height() - m_offset;
|
||||||
m_maxLength = qBound<int>(MINSIZE, m_maxLength, maxSize);
|
m_maxLength = qBound<int>(MINSIZE, m_maxLength, maxSize);
|
||||||
m_minLength = qBound<int>(MINSIZE, m_minLength, maxSize);
|
m_minLength = qBound<int>(MINSIZE, m_minLength, maxSize);
|
||||||
@ -362,11 +363,14 @@ void PanelView::restore()
|
|||||||
|
|
||||||
//Horizontal
|
//Horizontal
|
||||||
} else {
|
} else {
|
||||||
|
m_maxLength = config().readEntry<int>("maxLength", screen()->size().width());
|
||||||
|
m_minLength = config().readEntry<int>("minLength", screen()->size().width());
|
||||||
|
|
||||||
const int maxSize = screen()->size().width() - m_offset;
|
const int maxSize = screen()->size().width() - m_offset;
|
||||||
m_maxLength = qBound<int>(MINSIZE, m_maxLength, maxSize);
|
m_maxLength = qBound<int>(MINSIZE, m_maxLength, maxSize);
|
||||||
m_minLength = qBound<int>(MINSIZE, m_minLength, maxSize);
|
m_minLength = qBound<int>(MINSIZE, m_minLength, maxSize);
|
||||||
|
|
||||||
resize(qBound<int>(MINSIZE, config().readEntry<int>("length", screen()->size().height()), maxSize),
|
resize(qBound<int>(MINSIZE, config().readEntry<int>("length", screen()->size().width()), maxSize),
|
||||||
config().readEntry<int>("thickness", 32));
|
config().readEntry<int>("thickness", 32));
|
||||||
|
|
||||||
setMinimumWidth(m_minLength);
|
setMinimumWidth(m_minLength);
|
||||||
|
@ -27,7 +27,7 @@ Item {
|
|||||||
id: main
|
id: main
|
||||||
|
|
||||||
property string shell : "org.kde.blank"
|
property string shell : "org.kde.blank"
|
||||||
property bool willing : keyboards.count != 1
|
property bool willing : false
|
||||||
property int priority : 0
|
property int priority : 0
|
||||||
|
|
||||||
// This is not needed, but allows the
|
// This is not needed, but allows the
|
||||||
|
@ -10,6 +10,7 @@ Encoding=UTF-8
|
|||||||
Keywords=
|
Keywords=
|
||||||
Name=Blank Desktop
|
Name=Blank Desktop
|
||||||
Name[cs]=Prázdná pracovní plocha
|
Name[cs]=Prázdná pracovní plocha
|
||||||
|
Name[de]=Leere Arbeitsfläche
|
||||||
Name[fi]=Tyhjä työpöytä
|
Name[fi]=Tyhjä työpöytä
|
||||||
Name[nl]=Blanco bureaublad
|
Name[nl]=Blanco bureaublad
|
||||||
Name[pt]=Ambiente de Trabalho em Branco
|
Name[pt]=Ambiente de Trabalho em Branco
|
||||||
|
@ -42,8 +42,17 @@ Item {
|
|||||||
property Item compactRepresentation
|
property Item compactRepresentation
|
||||||
|
|
||||||
onAppletChanged: {
|
onAppletChanged: {
|
||||||
applet.parent = appletParent
|
|
||||||
applet.anchors.fill = applet.parent
|
//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: {
|
onCompactRepresentationChanged: {
|
||||||
compactRepresentation.parent = root
|
compactRepresentation.parent = root
|
||||||
@ -62,8 +71,6 @@ Item {
|
|||||||
|
|
||||||
width: applet && applet.implicitHeight > 0 ? applet.implicitHeight : theme.mSize(theme.defaultFont).width * 35
|
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
|
height: applet && applet.implicitHeight > 0 ? applet.implicitHeight : theme.mSize(theme.defaultFont).height * 25
|
||||||
onWidthChanged: applet.width = width
|
|
||||||
onHeightChanged: applet.height = height
|
|
||||||
}
|
}
|
||||||
|
|
||||||
onActiveWindowChanged: {
|
onActiveWindowChanged: {
|
||||||
|
@ -2,8 +2,7 @@
|
|||||||
var panel = new Panel
|
var panel = new Panel
|
||||||
panel.screen = 0
|
panel.screen = 0
|
||||||
panel.location = 'top'
|
panel.location = 'top'
|
||||||
panel.addWidget("org.kde.testapplet")
|
panel.addWidget("org.kde.taskmanager")
|
||||||
panel.addWidget("org.kde.windowlist")
|
|
||||||
|
|
||||||
for (var i = 0; i < screenCount; ++i) {
|
for (var i = 0; i < screenCount; ++i) {
|
||||||
var desktop = new Activity
|
var desktop = new Activity
|
||||||
|
@ -26,7 +26,7 @@ Item {
|
|||||||
id: main
|
id: main
|
||||||
|
|
||||||
property string shell : "org.kde.desktop"
|
property string shell : "org.kde.desktop"
|
||||||
property bool willing : keyboards.count == 1
|
property bool willing : true
|
||||||
property int priority : 1
|
property int priority : 1
|
||||||
|
|
||||||
// This is not needed, but allows the
|
// This is not needed, but allows the
|
||||||
|
@ -24,7 +24,7 @@ import org.kde.plasma.core 2.0 as PlasmaCore
|
|||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
id: root
|
id: root
|
||||||
color: "black"
|
color: Qt.rgba(0, 0, 0, 0.2)
|
||||||
width: 1024
|
width: 1024
|
||||||
height: 768
|
height: 768
|
||||||
|
|
||||||
@ -38,6 +38,8 @@ Rectangle {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Component.onCompleted: {
|
Component.onCompleted: {
|
||||||
|
desktop.stayBehind = true;
|
||||||
|
desktop.fillScreen = true;
|
||||||
print("View QML loaded")
|
print("View QML loaded")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,6 +27,7 @@
|
|||||||
#include <QQmlContext>
|
#include <QQmlContext>
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
|
|
||||||
|
#include <KActionCollection>
|
||||||
#include <KLocalizedString>
|
#include <KLocalizedString>
|
||||||
#include <Plasma/Package>
|
#include <Plasma/Package>
|
||||||
#include <Plasma/PluginLoader>
|
#include <Plasma/PluginLoader>
|
||||||
@ -95,6 +96,17 @@ ShellCorona::ShellCorona(QObject *parent)
|
|||||||
connect(d->scriptEngine, &WorkspaceScripting::ScriptEngine::print,
|
connect(d->scriptEngine, &WorkspaceScripting::ScriptEngine::print,
|
||||||
this, &ShellCorona::printScriptMessage);
|
this, &ShellCorona::printScriptMessage);
|
||||||
|
|
||||||
|
QAction *dashboardAction = actions()->add<QAction>("show dashboard");
|
||||||
|
QObject::connect(dashboardAction, &QAction::triggered,
|
||||||
|
this, &ShellCorona::setDashboardShown);
|
||||||
|
dashboardAction->setText(i18n("Show Dashboard"));
|
||||||
|
dashboardAction->setAutoRepeat(true);
|
||||||
|
dashboardAction->setCheckable(true);
|
||||||
|
dashboardAction->setIcon(QIcon::fromTheme("dashboard-show"));
|
||||||
|
dashboardAction->setData(Plasma::Types::ControlAction);
|
||||||
|
dashboardAction->setShortcut(QKeySequence("ctrl+f12"));
|
||||||
|
dashboardAction->setShortcutContext(Qt::ApplicationShortcut);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ShellCorona::~ShellCorona()
|
ShellCorona::~ShellCorona()
|
||||||
@ -114,6 +126,7 @@ void ShellCorona::setShell(const QString &shell)
|
|||||||
setPackage(package);
|
setPackage(package);
|
||||||
|
|
||||||
load();
|
load();
|
||||||
|
//TODO: panel views should be synced here: either creating views for panels without, or deleting views for panels that don't have one anymore
|
||||||
}
|
}
|
||||||
|
|
||||||
QString ShellCorona::shell() const
|
QString ShellCorona::shell() const
|
||||||
@ -363,6 +376,7 @@ void ShellCorona::updateScreenOwner(int wasScreen, int isScreen, Plasma::Contain
|
|||||||
} else {
|
} else {
|
||||||
|
|
||||||
if (containment->isUiReady()) {
|
if (containment->isUiReady()) {
|
||||||
|
d->loadingDesktops.remove(containment);
|
||||||
checkLoadingDesktopsComplete();
|
checkLoadingDesktopsComplete();
|
||||||
} else {
|
} else {
|
||||||
d->loadingDesktops.insert(containment);
|
d->loadingDesktops.insert(containment);
|
||||||
@ -383,6 +397,9 @@ void ShellCorona::handleContainmentAdded(Plasma::Containment* c)
|
|||||||
{
|
{
|
||||||
connect(c, &Plasma::Containment::showAddWidgetsInterface,
|
connect(c, &Plasma::Containment::showAddWidgetsInterface,
|
||||||
this, &ShellCorona::showWidgetExplorer);
|
this, &ShellCorona::showWidgetExplorer);
|
||||||
|
connect(c, &QObject::destroyed, [=] (QObject *o) {
|
||||||
|
d->loadingDesktops.remove(static_cast<Plasma::Containment *>(o));
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShellCorona::showWidgetExplorer()
|
void ShellCorona::showWidgetExplorer()
|
||||||
@ -412,6 +429,20 @@ void ShellCorona::syncAppConfig()
|
|||||||
applicationConfig()->sync();
|
applicationConfig()->sync();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ShellCorona::setDashboardShown(bool show)
|
||||||
|
{
|
||||||
|
qDebug() << "TODO: Toggling dashboard view";
|
||||||
|
|
||||||
|
QAction *dashboardAction = actions()->action("show dashboard");
|
||||||
|
|
||||||
|
if (dashboardAction) {
|
||||||
|
dashboardAction->setText(show ? i18n("Hide Dashboard") : i18n("Show Dashboard"));
|
||||||
|
}
|
||||||
|
foreach (DesktopView *view, d->views) {
|
||||||
|
view->setDashboardShown(show);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ShellCorona::printScriptError(const QString &error)
|
void ShellCorona::printScriptError(const QString &error)
|
||||||
{
|
{
|
||||||
qWarning() << error;
|
qWarning() << error;
|
||||||
|
@ -120,6 +120,7 @@ private Q_SLOTS:
|
|||||||
void handleContainmentAdded(Plasma::Containment *c);
|
void handleContainmentAdded(Plasma::Containment *c);
|
||||||
void showWidgetExplorer();
|
void showWidgetExplorer();
|
||||||
void syncAppConfig();
|
void syncAppConfig();
|
||||||
|
void setDashboardShown(bool show);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
class Private;
|
class Private;
|
||||||
|
@ -36,6 +36,8 @@ static const QString s_shellsDir(
|
|||||||
QString(CMAKE_INSTALL_PREFIX) + "/" + DATA_INSTALL_DIR + "/" + "plasma/shells/");
|
QString(CMAKE_INSTALL_PREFIX) + "/" + DATA_INSTALL_DIR + "/" + "plasma/shells/");
|
||||||
static const QString s_shellLoaderPath = QString("/contents/loader.qml");
|
static const QString s_shellLoaderPath = QString("/contents/loader.qml");
|
||||||
|
|
||||||
|
bool ShellManager::s_forceWindowed = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
// ShellManager
|
// ShellManager
|
||||||
//
|
//
|
||||||
|
@ -22,6 +22,8 @@
|
|||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class ShellManager: public QObject {
|
class ShellManager: public QObject {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
@ -30,6 +32,8 @@ public:
|
|||||||
|
|
||||||
void loadHandlers();
|
void loadHandlers();
|
||||||
|
|
||||||
|
static bool s_forceWindowed;
|
||||||
|
|
||||||
protected Q_SLOTS:
|
protected Q_SLOTS:
|
||||||
void registerHandler(QObject * handler);
|
void registerHandler(QObject * handler);
|
||||||
void deregisterHandler(QObject * handler);
|
void deregisterHandler(QObject * handler);
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
# kDebug() becomes qDebug() in cpp files
|
# kDebug() becomes qDebug() in cpp files
|
||||||
|
|
||||||
for FS in `find $PWD -name '*.h' -o -name '*.cpp'`; do
|
for FS in `find $PWD -name '*.h' -o -name '*.cpp'`; do
|
||||||
|
perl -p -i -e 's/\#include \<KDebug\>/\#include \<QDebug\>/g' $FS
|
||||||
perl -p -i -e 's/\#include \<KDebug\>/\#include \<QDebug\>/g' $FS
|
perl -p -i -e 's/\#include \<KDebug\>/\#include \<QDebug\>/g' $FS
|
||||||
perl -p -i -e 's/\#include \<kdebug\.h\>/\#include \<QDebug\>/g' $FS
|
perl -p -i -e 's/\#include \<kdebug\.h\>/\#include \<QDebug\>/g' $FS
|
||||||
perl -p -i -e 's/kDebug\(\)/qDebug()/g' $FS
|
perl -p -i -e 's/kDebug\(\)/qDebug()/g' $FS
|
||||||
|
@ -50,6 +50,7 @@ for FS in `find $PWD -name '*.h' -o -name '*.cpp'`; do
|
|||||||
# Fix up includes
|
# Fix up includes
|
||||||
perl -p -i -e 's/\#include \<QtGui\/QQuickItem\>/\#include \<QtQuick\/QQuickItem\>/g' $FS
|
perl -p -i -e 's/\#include \<QtGui\/QQuickItem\>/\#include \<QtQuick\/QQuickItem\>/g' $FS
|
||||||
perl -p -i -e 's/\#include \<QtGui\/QMenu\>/\#include \<QtWidgets\/QMenu\>/g' $FS
|
perl -p -i -e 's/\#include \<QtGui\/QMenu\>/\#include \<QtWidgets\/QMenu\>/g' $FS
|
||||||
|
perl -p -i -e 's/\#include \<QtGui\/QWidget\>/\#include \<QtWidgets\/QWidget\>/g' $FS
|
||||||
perl -p -i -e 's/\#include \<QtDeclarative\/QQuickItem\>/\#include \<QtQuick\/QQuickItem\>/g' $FS
|
perl -p -i -e 's/\#include \<QtDeclarative\/QQuickItem\>/\#include \<QtQuick\/QQuickItem\>/g' $FS
|
||||||
perl -p -i -e 's/\#include \<QtDeclarative\/QQmlContext\>/\#include \<QtQml\/QQmlContext\>/g' $FS
|
perl -p -i -e 's/\#include \<QtDeclarative\/QQmlContext\>/\#include \<QtQml\/QQmlContext\>/g' $FS
|
||||||
perl -p -i -e 's/\#include \<QtDeclarative\/QQmlEngine\>/\#include \<QtQml\/QQmlEngine\>/g' $FS
|
perl -p -i -e 's/\#include \<QtDeclarative\/QQmlEngine\>/\#include \<QtQml\/QQmlEngine\>/g' $FS
|
||||||
|
Loading…
Reference in New Issue
Block a user