Experimental frontend

This commit is contained in:
Aleix Pol 2015-06-13 01:30:38 +02:00
parent 7c2e2fb726
commit de9671e26a
6 changed files with 244 additions and 0 deletions

View file

@ -40,6 +40,10 @@ add_subdirectory(kio)
add_subdirectory(icon) add_subdirectory(icon)
add_subdirectory(interfaces) add_subdirectory(interfaces)
option(EXPERIMENTALAPP_ENABLED OFF)
if(EXPERIMENTALAPP_ENABLED)
add_subdirectory(app)
endif()
add_subdirectory(daemon) add_subdirectory(daemon)
add_subdirectory(plugins) add_subdirectory(plugins)
add_subdirectory(plasmoid) add_subdirectory(plasmoid)

9
app/CMakeLists.txt Normal file
View file

@ -0,0 +1,9 @@
find_package(KF5 COMPONENTS Declarative)
qt5_add_resources(kcapp_SRCS resources.qrc)
add_executable(kcapp main.cpp ${kcapp_SRCS})
target_link_libraries(kcapp Qt5::Quick Qt5::Widgets KF5::Declarative KF5::CoreAddons KF5::I18n)
install(TARGETS kcapp ${INSTALL_TARGETS_DEFAULT_ARGS})
# install(PROGRAMS kcapp.desktop DESTINATION ${XDG_APPS_INSTALL_DIR} )

49
app/main.cpp Normal file
View file

@ -0,0 +1,49 @@
/*
* Copyright (C) 2014 Aleix Pol Gonzalez <aleixpol@blue-systems.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <QApplication>
#include <QQmlApplicationEngine>
#include <QCommandLineParser>
#include <KDeclarative/KDeclarative>
#include <KAboutData>
#include <KLocalizedString>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
KAboutData aboutData("kdeconnect-kde", i18n("Awesome App"), "1.0", i18n("KDE Connect App"), KAboutLicense::GPL, i18n("(c) 2015, Aleix Pol Gonzalez"));
aboutData.addAuthor(i18n("Aleix Pol Gonzalez"), i18n("Maintainer"), "aleixpol@kde.org");
KAboutData::setApplicationData(aboutData);
{
QCommandLineParser parser;
aboutData.setupCommandLine(&parser);
parser.addVersionOption();
parser.addHelpOption();
parser.process(app);
aboutData.processCommandLine(&parser);
}
QQmlApplicationEngine engine(QUrl("qrc:/qml/main.qml"));
KDeclarative::KDeclarative kdeclarative;
kdeclarative.setDeclarativeEngine(&engine);
kdeclarative.setupBindings();
return app.exec();
}

View file

@ -0,0 +1,55 @@
/*
* Copyright 2015 Aleix Pol Gonzalez <aleixpol@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) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
import QtQuick 2.2
import QtQuick.Controls 1.2
import QtQuick.Layouts 1.2
import org.kde.kquickcontrolsaddons 2.0
import org.kde.kdeconnect 1.0
Item
{
height: info.height
signal clicked
QIconItem {
id: icon
width: 40
height: 40
icon: iconName
}
MouseArea {
anchors.fill: parent
onClicked: parent.clicked()
}
ColumnLayout {
id: info
anchors {
left: icon.right
top: parent.top
right: parent.right
}
property bool expand: false
Label {
Layout.fillWidth: true
horizontalAlignment: Text.AlignHCenter
text: display + "\n" + toolTip
}
}
}

121
app/qml/main.qml Normal file
View file

@ -0,0 +1,121 @@
/*
* Copyright 2015 Aleix Pol Gonzalez <aleixpol@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) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
import QtQuick 2.2
import QtQuick.Controls 1.1
import QtQuick.Layouts 1.1
import org.kde.kdeconnect 1.0
ApplicationWindow
{
id: root
visible: true
width: 400
height: 500
StackView {
id: stack
anchors {
fill: parent
margins: 5
}
initialItem: ScrollView {
Layout.fillHeight: true
ListView {
id: devicesView
spacing: 5
model: DevicesSortProxyModel {
sourceModel: DevicesModel {
id: connectDeviceModel
displayFilter: DevicesModel.StatusReachable
}
}
delegate: DeviceDelegate {
width: parent.width
onClicked: {
var data = {
item: deviceViewComponent,
properties: {currentDevice: device}
};
stack.push(data);
}
}
}
}
}
Component {
id: deviceViewComponent
ColumnLayout {
id: deviceView
property QtObject currentDevice
Button {
text: "<"
onClicked: stack.pop()
}
Loader {
Layout.fillHeight: true
Layout.fillWidth: true
sourceComponent: currentDevice.isPaired ? trustedDevice : untrustedDevice
Component {
id: trustedDevice
ColumnLayout {
id: trustedView
Layout.fillHeight: true
Layout.fillWidth: true
Button {
text: i18n("Un-Pair")
onClicked: deviceView.currentDevice.unpair()
}
Button {
text: i18n("Send Ping")
onClicked: deviceView.currentDevice.pluginCall("ping", "sendPing");
}
Button {
text: i18n("Open Multimedia Remote Control")
enabled: false
}
Button {
text: i18n("Remote touch and keyboard")
enabled: false
}
Item { Layout.fillHeight: true }
}
}
Component {
id: untrustedDevice
ColumnLayout {
id: untrustedView
Layout.fillHeight: true
Layout.fillWidth: true
Button {
text: i18n("Pair")
onClicked: deviceView.currentDevice.requestPair()
}
}
}
}
}
}
}

6
app/resources.qrc Normal file
View file

@ -0,0 +1,6 @@
<!DOCTYPE RCC><RCC version="1.0">
<qresource>
<file>qml/main.qml</file>
<file>qml/DeviceDelegate.qml</file>
</qresource>
</RCC>