Commit b130a76d authored by Jonah Brüchert's avatar Jonah Brüchert 🌳 Committed by Jonah Brüchert

Remove phonebook

A replacement is in development that already has more features and uses modern technology
parent eb821dc6
......@@ -44,9 +44,6 @@ plasma_install_package(look-and-feel org.kde.plasma.phone look-and-feel)
plasma_install_package(shell org.kde.plasma.phone shells)
install(DIRECTORY wallpaper/ DESTINATION "${WALLPAPER_INSTALL_DIR}/org.kde.plasma.phone.lockers")
#kpackage_install_package(phonebook org.kde.phone.phonebook genericqml)
#install(FILES phonebook/metadata.desktop DESTINATION ${XDG_APPS_INSTALL_DIR} RENAME org.kde.phone.phonebook.desktop)
install( DIRECTORY kwinmultitasking/ DESTINATION ${DATA_INSTALL_DIR}/kwin/scripts/org.kde.phone.multitasking )
install( FILES kwinmultitasking/metadata.desktop DESTINATION ${SERVICES_INSTALL_DIR} RENAME kwin-script-org.kde.phone.multitasking.desktop )
......@@ -62,7 +59,7 @@ add_subdirectory(bin)
#add_subdirectory(services)
add_subdirectory(applets)
add_subdirectory(containments)
add_subdirectory(components)
add_subdirectory(components)
add_subdirectory(dialer)
add_subdirectory(sounds)
#add_subdirectory(touchscreentest)
......
/*
* Copyright 2015 Martin Klapetek <mklapetek@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 QtQuick.Controls 1.3
import QtQuick.Layouts 1.1
import org.kde.people 1.0 as KPeople
import org.kde.kquickcontrolsaddons 2.0 as ExtraComponents
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.plasma.extras 2.0 as PlasmaExtras
PlasmaExtras.ScrollArea {
anchors.fill: parent
verticalScrollBarPolicy: Qt.ScrollBarAlwaysOff
contentItem: ListView {
id: contactsList
property bool delegateSelected: false
section.property: "display"
section.criteria: ViewSection.FirstCharacter
clip: true
model: PlasmaCore.SortFilterModel {
sortRole: "display"
sourceModel: KPeople.PersonsModel {
id: contactsModel
}
}
boundsBehavior: Flickable.StopAtBounds
highlight: PlasmaComponents.Highlight {
hover: contactsList.focus
}
highlightMoveDuration: 0
delegate: PlasmaComponents.ListItem {
height: units.gridUnit * 6
enabled: true
clip: true
opacity: contactsList.delegateSelected && contactsList.currentIndex != index ? 0.4 : 1
onClicked: {
if (contactsList.delegateSelected) {
contactsList.currentIndex = -1;
contactsList.delegateSelected = false;
} else {
contactsList.currentIndex = index;
contactsList.delegateSelected = true;
}
contactsList.toggleOverlayButtons(contactsList.delegateSelected);
}
RowLayout {
id: mainLayout
anchors.fill: parent
ExtraComponents.QPixmapItem {
id: avatarLabel
Layout.maximumWidth: parent.height
Layout.minimumWidth: parent.height
Layout.fillHeight: true
pixmap: model.decoration
fillMode: ExtraComponents.QPixmapItem.PreserveAspectFit
smooth: true
}
ColumnLayout {
Layout.fillHeight: true
Layout.fillWidth: true
Label {
id: nickLabel
Layout.fillWidth: true
text: model.display
elide: Text.ElideRight
}
Label {
id: dataLabel
Layout.fillWidth: true
text: "605-909-123"
elide: Text.ElideRight
}
}
}
}
function toggleOverlayButtons(show) {
if (show) {
settingsRect.parent = contactsList.currentItem
settingsRect.visible = true;
callRect.parent = contactsList.currentItem
callRect.visible = true;
} else {
settingsRect.visible = false;
callRect.visible = false;
}
}
Rectangle {
id: settingsRect
height: units.gridUnit * 6
width: height + units.gridUnit * 2
radius: 45
z: 100
visible: false
color: "lightblue"
anchors {
left: parent.left
leftMargin: -width/2
verticalCenter: parent.verticalCenter
}
PlasmaCore.IconItem {
anchors.right: parent.right
anchors.verticalCenter: parent.verticalCenter
anchors.rightMargin: parent.height / 4
source: "configure-shortcuts"
}
}
Rectangle {
id: callRect
height: settingsRect.height
width: settingsRect.width
radius: height
z: 100
visible: false
color: "lightgreen"
anchors {
right: parent.right
rightMargin: -width/2
verticalCenter: parent.verticalCenter
}
PlasmaCore.IconItem {
anchors.left: parent.left
anchors.verticalCenter: parent.verticalCenter
anchors.leftMargin: parent.height / 4
source: "call-start"
}
MouseArea {
anchors.fill: parent
//TODO: needs the proper number
onClicked: Qt.openUrlExternally("call://" + "605909123")
}
}
CustomSectionScroller {
listView: contactsList
}
}
}
/****************************************************************************
**
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** This file is part of the Qt Components project.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
** * Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in
** the documentation and/or other materials provided with the
** distribution.
** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
** the names of its contributors may be used to endorse or promote
** products derived from this software without specific prior written
** permission.
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
** $QT_END_LICENSE$
**
****************************************************************************/
import QtQuick 2.1
import QtQuick.Layouts 1.1
import "private/SectionScroller.js" as Sections
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.extras 2.0 as PlasmaExtras
import org.kde.plasma.components 2.0 as PlasmaComponents
/**
* Similar to a ScrollBar or a ScrollDecorator.
*
* It's interactive and works on ListViews that have section.property set, so
* its contents are categorized.
*
* An indicator will say to what category the user scrolled to. Useful for
* things like address books or things sorted by date. Don't use with models
* too big (thousands of items) because it implies loading all the items to
* memory, as well loses precision.
*
* @inherit QtQuick.Item
*/
Item {
id: root
/**
* The listview the sectionScroller will operate on. This component doesn't
* work with Flickable or GridView.
*/
property ListView listView
onListViewChanged: {
if (listView && listView.model)
internal.initDirtyObserver();
}
Connections {
target: listView
onModelChanged: {
if (listView && listView.model) {
internal.initDirtyObserver()
}
}
}
implicitWidth: scrollBar.implicitWidth
Behavior on opacity {
NumberAnimation {
duration: units.longDuration
}
}
anchors {
right: listView.right
top: listView.top
bottom: listView.bottom
}
PlasmaComponents.RangeModel {
id: range
minimumValue: 0
maximumValue: Math.max(0, listView.contentHeight - listView.height)
stepSize: 0
//inverted: true
positionAtMinimum: root.width*2
positionAtMaximum: root.height - root.width*2
value: listView.contentY
onPositionChanged: {
var section = Sections.closestSection(position/listView.height);
if (section) {
if (listView.section.criteria == ViewSection.FirstCharacter) {
sectionLabel.text = section[0];
} else {
sectionLabel.text = section;
}
}
}
}
PlasmaComponents.ScrollBar {
id: scrollBar
flickableItem: listView
anchors.fill: parent
interactive: true
}
PlasmaCore.FrameSvgItem {
id: tooltip
imagePath: "widgets/background"
width: units.gridUnit * 5 + margins.left + margins.right
height: sectionLabel.height + subtitle.height + margins.top + margins.bottom
ColumnLayout {
anchors.centerIn: parent
PlasmaExtras.Title {
id: sectionLabel
Layout.fillWidth: true
Layout.fillHeight: true
horizontalAlignment: Text.AlignHCenter
}
PlasmaComponents.Label {
id: subtitle
Layout.fillWidth: true
horizontalAlignment: Text.AlignHCenter
visible: text.length > 0
text: "Thursday, 7th"
}
}
y: 0
x: -listView.width/2 - width/2
opacity: sectionLabel.text && scrollBar.pressed ? 1 : 0
Behavior on opacity {
NumberAnimation {
duration: units.longDuration
}
}
}
Timer {
id: dirtyTimer
interval: 250
onTriggered: {
Sections.initSectionData(listView);
internal.modelDirty = false;
tooltip.visible = Sections._sections.length > 1
}
}
QtObject {
id: internal
property bool modelDirty: false
function initDirtyObserver() {
Sections.initSectionData(listView);
tooltip.visible = Sections._sections.length > 1
function dirtyObserver() {
if (!internal.modelDirty) {
internal.modelDirty = true;
dirtyTimer.running = true;
}
}
if (listView.model.countChanged)
listView.model.countChanged.connect(dirtyObserver);
if (listView.model.itemsChanged)
listView.model.itemsChanged.connect(dirtyObserver);
if (listView.model.itemsInserted)
listView.model.itemsInserted.connect(dirtyObserver);
if (listView.model.itemsMoved)
listView.model.itemsMoved.connect(dirtyObserver);
if (listView.model.itemsRemoved)
listView.model.itemsRemoved.connect(dirtyObserver);
}
}
Accessible.role: Accessible.ScrollBar
}
/*
* Copyright 2015 Martin Klapetek <mklapetek@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 QtQuick.Controls 1.3
import QtQuick.Layouts 1.1
ApplicationWindow {
width: 720
height: 1280
visible: true
toolBar: ToolBar {
RowLayout {
anchors.fill: parent
Layout.fillWidth: true
ToolButton {
text: i18n("Settings")
iconName: "call-start"
}
ToolButton {
text: i18n("Recent")
iconName: "appointment-new"
}
ToolButton {
text: i18n("Alphabetical")
iconName: "im-user"
}
}
}
ColumnLayout {
anchors.fill: parent
ContactsList {
Layout.fillWidth: true
Layout.fillHeight: true
}
}
}
/****************************************************************************
**
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** This file is part of the Qt Components project.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
** * Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in
** the documentation and/or other materials provided with the
** distribution.
** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
** the names of its contributors may be used to endorse or promote
** products derived from this software without specific prior written
** permission.
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
** $QT_END_LICENSE$
**
****************************************************************************/
var _sectionData = [];
var _sections = [];
function initSectionData(list) {
if (!list || !list.model) return;
_sectionData = [];
_sections = [];
var current = "";
var prop = list.section.property;
for (var i = 0, count = list.model.count; i < count; i++) {
var item = list.model.get(i);
if (item[prop] !== current) {
current = item[prop];
_sections.push(current);
_sectionData.push({ index: i, header: current });
}
}
}
function closestSection(pos) {
var tmp = (_sections.length) * pos;
var val = Math.ceil(tmp) // TODO: better algorithm
val = val < 2 ? 1 : val;
return _sections[val-1];
}
function indexOf(sectionName) {
var val = _sectionData[_sections.indexOf(sectionName)].index;
return val === 0 || val > 0 ? val : -1;
}
[Desktop Entry]
Comment=
Encoding=UTF-8
Keywords=
Name=Phonebook
Name[ca]=Guia telefònica
Name[ca@valencia]=Guia telefònica
Name[de]=Telefonbuch
Name[en_GB]=Phonebook
Name[es]=Listín telefónico
Name[fi]=Puhelinmuistio
Name[fr]=Répertoire téléphonique
Name[gl]=Axenda telefónica
Name[it]=Rubrica
Name[ko]=전화번호부
Name[nl]=Telefoonboek
Name[nn]=Telefonkatalog
Name[pl]=Książka telefoniczna
Name[pt]=Lista Telefónica
Name[sv]=Telefonkatalog
Name[tr]=Telefon Rehberi
Name[uk]=Телефонна книга
Name[x-test]=xxPhonebookxx
Name[zh_CN]=电话簿
Name[zh_TW]=通訊錄
Type=Application
Icon=system-users
Exec=kpackagelauncherqml -a org.kde.phone.phonebook
X-KDE-ParentApp=
X-KDE-PluginInfo-Author=Martin Klapetek
X-KDE-PluginInfo-Category=Miscellaneous
X-KDE-PluginInfo-Email=mklapetek@kde.org
X-KDE-PluginInfo-License=GPL
X-KDE-PluginInfo-Name=org.kde.phone.phonebook
X-KDE-PluginInfo-Version=
X-KDE-PluginInfo-Website=
X-KDE-ServiceTypes=KPackage/GenericQML
X-Plasma-MainScript=ui/main.qml
X-Plasma-RemoteLocation=
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment