2013-08-22 02:21:08 +01:00
/ * *
2020-08-17 10:48:10 +01:00
* SPDX - FileCopyrightText: 2013 Albert Vaca < albertvaka @ gmail . com >
2013-08-21 17:28:11 +01:00
*
2020-08-17 10:48:10 +01:00
* SPDX - License - Identifier: GPL - 2.0 - only OR GPL - 3.0 - only OR LicenseRef - KDE - Accepted - GPL
2013-08-21 17:28:11 +01:00
* /
2014-06-18 01:35:48 +01:00
import QtQuick 2.1
2015-09-25 10:04:24 +01:00
import QtQuick . Layouts 1.1
2014-06-18 01:35:48 +01:00
import org . kde . plasma . core 2.0 as PlasmaCore
import org . kde . plasma . components 2.0 as PlasmaComponents
2018-11-09 18:06:35 +00:00
import org . kde . plasma . components 3.0 as PlasmaComponents3
2013-08-22 02:21:08 +01:00
import org . kde . kdeconnect 1.0
2018-10-31 19:58:52 +00:00
import QtQuick . Dialogs 1.0
2018-11-08 01:01:51 +00:00
import QtQuick . Controls 2.4
2013-08-21 17:28:11 +01:00
2013-08-22 02:21:08 +01:00
PlasmaComponents . ListItem
{
id: root
2016-08-21 17:57:27 +01:00
readonly property QtObject device: DeviceDbusInterfaceFactory . create ( model . deviceId )
2014-01-29 05:16:23 +00:00
2019-01-02 17:26:21 +00:00
DropArea {
id: fileDropArea
anchors.fill: parent
onDropped: {
if ( drop . hasUrls ) {
var urls = [ ] ;
for ( var v in drop . urls ) {
if ( drop . urls [ v ] != null ) {
if ( urls . indexOf ( drop . urls [ v ] . toString ( ) ) == - 1 ) {
urls . push ( drop . urls [ v ] . toString ( ) ) ;
}
}
}
var i ;
for ( i = 0 ; i < urls . length ; i ++ ) {
share . plugin . shareUrl ( urls [ i ] ) ;
}
}
drop . accepted = true ;
}
PlasmaCore . ToolTipArea {
id: dropAreaToolTip
anchors.fill: parent
location: plasmoid . location
active: true
mainText: i18n ( "File Transfer" )
subText: i18n ( "Drop a file to transfer it onto your phone." )
}
}
2013-08-22 02:21:08 +01:00
Column {
width: parent . width
2018-05-09 00:15:03 +01:00
2015-09-11 16:51:50 +01:00
RowLayout
2014-01-27 16:52:29 +00:00
{
2019-10-12 19:06:12 +01:00
width: parent . width
2017-07-26 23:40:47 +01:00
Battery {
id: battery
device: root . device
}
2018-05-09 00:15:03 +01:00
2021-03-12 23:27:16 +00:00
Connectivity {
id: connectivity
device: root . device
}
2014-01-27 16:52:29 +00:00
PlasmaComponents . Label {
2019-10-12 19:06:12 +01:00
id: deviceName
2015-09-11 16:51:50 +01:00
elide: Text . ElideRight
2021-03-12 23:27:16 +00:00
text: {
let statuses = [ ] ;
if ( connectivity . available ) {
statuses . push ( connectivity . displayString ) ;
}
if ( battery . available && battery . charge > - 1 ) {
2021-03-13 17:58:26 +00:00
statuses . push ( i18nc ( "Display the battery charge percentage with the label \"Battery:\" so the user knows what is being displayed" , "Battery: %1" , battery . displayString ) ) ;
2021-03-12 23:27:16 +00:00
}
if ( statuses . length > 0 ) {
return i18n ( "%1 (%2)" , display , statuses . join ( ", " ) ) ;
} else {
return display ;
}
}
2015-09-11 16:51:50 +01:00
Layout.fillWidth: true
2017-07-12 09:51:09 +01:00
textFormat: Text . PlainText
2015-09-11 16:51:50 +01:00
}
2019-10-12 19:06:12 +01:00
PlasmaComponents3 . ToolButton {
id: overflowMenu
2020-02-11 09:12:12 +00:00
icon.name: "application-menu"
2018-10-31 19:58:52 +00:00
onClicked: {
2020-02-11 09:12:12 +00:00
menu . open ( overflowMenu , overflowMenu . height )
2018-10-31 19:58:52 +00:00
}
2020-02-11 09:12:12 +00:00
PlasmaComponents . ContextMenu {
2019-10-12 19:06:12 +01:00
id: menu
//Share
2020-02-11 09:12:12 +00:00
PlasmaComponents . MenuItem
2019-10-12 19:06:12 +01:00
{
FileDialog {
id: fileDialog
title: i18n ( "Please choose a file" )
folder: shortcuts . home
selectMultiple: true
2020-07-08 19:09:35 +01:00
onAccepted: fileDialog . fileUrls . forEach ( url = > share . plugin . shareUrl ( url ) )
2019-10-12 19:06:12 +01:00
}
2015-09-11 16:51:50 +01:00
2019-10-12 19:06:12 +01:00
id: shareFile
2020-02-11 09:12:12 +00:00
icon: "document-share"
2019-10-12 19:06:12 +01:00
visible: share . available
text: i18n ( "Share file" )
2020-07-08 19:09:35 +01:00
onClicked: fileDialog . open ( )
2019-10-12 19:06:12 +01:00
}
2015-09-11 16:51:50 +01:00
2019-10-12 19:06:12 +01:00
//Find my phone
2020-02-11 09:12:12 +00:00
PlasmaComponents . MenuItem
2019-10-12 19:06:12 +01:00
{
FindMyPhone {
id: findmyphone
device: root . device
}
2014-02-14 16:11:41 +00:00
2019-10-12 19:06:12 +01:00
id: ring
2020-02-11 09:12:12 +00:00
icon: "irc-voice"
2019-10-12 19:06:12 +01:00
visible: findmyphone . available
text: i18n ( "Ring my phone" )
onClicked: {
findmyphone . ring ( )
}
}
2014-02-14 16:11:41 +00:00
2019-10-12 19:06:12 +01:00
//SFTP
2020-02-11 09:12:12 +00:00
PlasmaComponents . MenuItem
2019-10-12 19:06:12 +01:00
{
Sftp {
id: sftp
device: root . device
}
2014-02-19 15:28:17 +00:00
2019-10-12 19:06:12 +01:00
id: browse
2020-02-11 09:12:12 +00:00
icon: "document-open-folder"
2019-10-12 19:06:12 +01:00
visible: sftp . available
text: i18n ( "Browse this device" )
2014-02-14 16:11:41 +00:00
2019-10-12 19:06:12 +01:00
onClicked: {
sftp . browse ( )
}
}
2019-07-20 15:02:38 +01:00
2019-10-12 19:06:12 +01:00
//SMS
2020-02-11 09:12:12 +00:00
PlasmaComponents . MenuItem
2019-10-12 19:06:12 +01:00
{
SMS {
id: sms
device: root . device
}
2019-07-20 15:02:38 +01:00
2020-02-11 09:12:12 +00:00
icon: "message-new"
2019-10-12 19:06:12 +01:00
visible: sms . available
text: i18n ( "SMS Messages" )
onClicked: {
sms . plugin . launchApp ( )
}
}
2019-07-20 15:02:38 +01:00
}
}
2013-08-21 17:28:11 +01:00
}
2014-02-14 16:11:41 +00:00
2017-01-23 08:08:27 +00:00
//RemoteKeyboard
PlasmaComponents . ListItem {
2018-05-09 00:15:03 +01:00
visible: remoteKeyboard . remoteState
2017-01-23 08:08:27 +00:00
width: parent . width
2018-11-08 01:01:51 +00:00
RowLayout {
2017-01-23 08:08:27 +00:00
width: parent . width
spacing: 5
PlasmaComponents . Label {
id: remoteKeyboardLabel
text: i18n ( "Remote Keyboard" )
}
2018-11-08 01:01:51 +00:00
RemoteKeyboard {
id: remoteKeyboard
device: root . device
Layout.fillWidth: true
2017-01-23 08:08:27 +00:00
}
}
}
2013-08-22 02:21:08 +01:00
//Notifications
PlasmaComponents . ListItem {
visible: notificationsModel . count > 0
2013-08-28 18:33:46 +01:00
enabled: true
2013-11-15 16:41:33 +00:00
PlasmaComponents . Label {
2017-07-26 23:40:47 +01:00
text: i18n ( "Notifications:" )
2013-11-15 16:41:33 +00:00
}
2013-08-22 02:21:08 +01:00
PlasmaComponents . ToolButton {
2013-08-28 18:33:46 +01:00
enabled: true
visible: notificationsModel . isAnyDimissable ;
2013-08-22 02:21:08 +01:00
anchors.right: parent . right
2018-10-04 18:20:46 +01:00
iconSource: "edit-clear-history"
2018-03-24 14:31:10 +00:00
tooltip: i18n ( "Dismiss all notifications" )
2013-08-28 18:33:46 +01:00
onClicked: notificationsModel . dismissAll ( ) ;
2013-08-22 02:21:08 +01:00
}
}
Repeater {
id: notificationsView
model: NotificationsModel {
id: notificationsModel
2016-08-21 17:57:27 +01:00
deviceId: root . device . id ( )
2013-08-22 02:21:08 +01:00
}
delegate: PlasmaComponents . ListItem {
2016-10-04 00:12:04 +01:00
id: listitem
enabled: true
onClicked: checked = ! checked
2017-06-01 15:17:37 +01:00
PlasmaCore . IconItem {
id: notificationIcon
source: appIcon
width: ( valid && appIcon . length ) ? dismissButton.width : 0
height: width
anchors.left: parent . left
}
2013-08-22 02:21:08 +01:00
PlasmaComponents . Label {
2017-08-22 17:16:42 +01:00
text: appName + ": " + ( title . length > 0 ? ( appName == title ? notitext: title + ": " + notitext ) : display )
2017-06-01 15:17:37 +01:00
anchors.right: replyButton . left
anchors.left: notificationIcon . right
2016-10-04 00:12:04 +01:00
elide: listitem . checked ? Text.ElideNone : Text . ElideRight
maximumLineCount: listitem . checked ? 0 : 1
2013-09-06 20:12:14 +01:00
wrapMode: Text . WordWrap
2013-08-22 02:21:08 +01:00
}
2017-06-01 15:17:37 +01:00
PlasmaComponents . ToolButton {
id: replyButton
visible: repliable
enabled: repliable
anchors.right: dismissButton . left
iconSource: "mail-reply-sender"
2018-03-24 14:31:10 +00:00
tooltip: i18n ( "Reply" )
2017-06-01 15:17:37 +01:00
onClicked: dbusInterface . reply ( ) ;
}
2013-08-22 02:21:08 +01:00
PlasmaComponents . ToolButton {
2013-09-06 20:12:14 +01:00
id: dismissButton
2013-08-28 18:33:46 +01:00
visible: notificationsModel . isAnyDimissable ;
enabled: dismissable
2013-08-22 02:21:08 +01:00
anchors.right: parent . right
iconSource: "window-close"
2018-03-24 14:31:10 +00:00
tooltip: i18n ( "Dismiss" )
2013-08-22 02:21:08 +01:00
onClicked: dbusInterface . dismiss ( ) ;
}
}
}
2018-07-27 07:04:05 +01:00
RemoteCommands {
id: rc
device: root . device
}
// Commands
2018-11-02 14:38:52 +00:00
RowLayout {
2018-10-30 22:37:27 +00:00
visible: rc . available
2018-11-02 14:38:52 +00:00
width: parent . width
2018-10-30 22:37:27 +00:00
PlasmaComponents . Label {
2018-11-02 14:44:14 +00:00
text: i18n ( "Run command" )
2018-11-02 14:38:52 +00:00
Layout.fillWidth: true
2018-10-30 22:37:27 +00:00
}
2018-11-02 14:38:52 +00:00
2018-10-30 22:37:27 +00:00
PlasmaComponents . Button
{
id: addCommandButton
iconSource: "list-add"
tooltip: i18n ( "Add command" )
onClicked: rc . plugin . editCommands ( )
2019-01-31 15:38:03 +00:00
visible: rc . plugin && rc . plugin . canAddCommand
2018-10-30 22:37:27 +00:00
}
2018-07-27 07:04:05 +01:00
}
Repeater {
id: commandsView
visible: rc . available
model: RemoteCommandsModel {
id: commandsModel
deviceId: rc . device . id ( )
}
delegate: PlasmaComponents . ListItem {
enabled: true
onClicked: rc . plugin . triggerCommand ( key )
2013-08-22 02:21:08 +01:00
2018-07-27 07:04:05 +01:00
PlasmaComponents . Label {
text: name + "\n" + command
}
}
}
2018-11-05 19:34:17 +00:00
// Share
Share {
id: share
device: root . device
}
2013-08-22 02:21:08 +01:00
}
2013-08-21 17:28:11 +01:00
}