From ed40a7f1cbc1da5ae21c58882df241fc0071c2f7 Mon Sep 17 00:00:00 2001 From: "Javier S. Pedro" Date: Sat, 6 Sep 2014 03:25:38 +0200 Subject: adding initial UI to select device --- qml/cover/CoverPage.qml | 14 +----- qml/pages/FirstPage.qml | 114 +++++++++++++++++++++++------------------------ qml/pages/SecondPage.qml | 62 -------------------------- rpm/salmeta.spec | 2 + rpm/salmeta.yaml | 2 + salmeta.pro | 7 +-- src/controller.cpp | 7 +-- src/reconnecttimer.cpp | 27 ++++++----- src/reconnecttimer.h | 7 +-- src/salmeta.cpp | 10 ++--- src/watchviewitem.cpp | 15 +++++++ src/watchviewitem.h | 20 +++++++++ translations/salmeta.ts | 24 ++-------- 13 files changed, 126 insertions(+), 185 deletions(-) delete mode 100644 qml/pages/SecondPage.qml create mode 100644 src/watchviewitem.cpp create mode 100644 src/watchviewitem.h diff --git a/qml/cover/CoverPage.qml b/qml/cover/CoverPage.qml index 786b78f..e6c3216 100644 --- a/qml/cover/CoverPage.qml +++ b/qml/cover/CoverPage.qml @@ -35,19 +35,7 @@ CoverBackground { Label { id: label anchors.centerIn: parent - text: qsTr("My Cover") - } - - CoverActionList { - id: coverAction - - CoverAction { - iconSource: "image://theme/icon-cover-next" - } - - CoverAction { - iconSource: "image://theme/icon-cover-pause" - } + text: "Salmeta" } } diff --git a/qml/pages/FirstPage.qml b/qml/pages/FirstPage.qml index 14d7410..b86029e 100644 --- a/qml/pages/FirstPage.qml +++ b/qml/pages/FirstPage.qml @@ -1,73 +1,69 @@ -/* - Copyright (C) 2013 Jolla Ltd. - Contact: Thomas Perl - All rights reserved. +import QtQuick 2.0 +import Sailfish.Silica 1.0 +import Sailfish.Bluetooth 1.0 +import org.nemomobile.configuration 1.0 +import com.javispedro.salmeta 1.0 - You may use this file under the terms of BSD license as follows: +Page { + id: page - 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 the Jolla Ltd nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. + ConfigurationValue { + id: deviceAddress + key: settingsPrefix + "/address" + defaultValue: "Select" + } - 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 HOLDERS 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. -*/ + SilicaFlickable { + anchors.fill: parent -import QtQuick 2.0 -import Sailfish.Silica 1.0 + PullDownMenu { + MenuItem { + text: qsTr("Not done yet") + } + } + contentHeight: column.height -Page { - id: page + Column { + id: column + width: page.width + spacing: Theme.paddingLarge + + PageHeader { + title: "Salmeta" + } + + SectionHeader { + text: qsTr("Device settings"); + } - // To enable PullDownMenu, place our content in a SilicaFlickable - SilicaFlickable { - anchors.fill: parent + ValueButton { + x: Theme.paddingLarge + label: "Device" + value: deviceAddress.value - // PullDownMenu and PushUpMenu must be declared in SilicaFlickable, SilicaListView or SilicaGridView - PullDownMenu { - MenuItem { - text: qsTr("Show Page 2") - onClicked: pageStack.push(Qt.resolvedUrl("SecondPage.qml")) - } - } + onClicked: { + var dialog = pageStack.push("Sailfish.Bluetooth.BluetoothDevicePickerDialog"); - // Tell SilicaFlickable the height of its content. - contentHeight: column.height + dialog.selectedDeviceChanged.connect(function() { + if (dialog.selectedDevice != "") { + deviceAddress.value = dialog.selectedDevice + } + }); + } + } - // Place our content in a Column. The PageHeader is always placed at the top - // of the page, followed by our content. - Column { - id: column + SectionHeader { + text: qsTr("Widgets"); + } - width: page.width - spacing: Theme.paddingLarge - PageHeader { - title: qsTr("UI Template") - } - Label { - x: Theme.paddingLarge - text: qsTr("Hello Sailors") - color: Theme.secondaryHighlightColor - font.pixelSize: Theme.fontSizeExtraLarge - } - } - } + WatchView { + anchors.horizontalCenter: parent.horizontalCenter + width: 96 * 4 + height: 96 * 4 + } + } + } } diff --git a/qml/pages/SecondPage.qml b/qml/pages/SecondPage.qml deleted file mode 100644 index 4f37362..0000000 --- a/qml/pages/SecondPage.qml +++ /dev/null @@ -1,62 +0,0 @@ -/* - Copyright (C) 2013 Jolla Ltd. - Contact: Thomas Perl - All rights reserved. - - You may use this file under the terms of 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 the Jolla Ltd 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 HOLDERS 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. -*/ - -import QtQuick 2.0 -import Sailfish.Silica 1.0 - - -Page { - id: page - SilicaListView { - id: listView - model: 20 - anchors.fill: parent - header: PageHeader { - title: qsTr("Nested Page") - } - delegate: BackgroundItem { - id: delegate - - Label { - x: Theme.paddingLarge - text: qsTr("Item") + " " + index - anchors.verticalCenter: parent.verticalCenter - color: delegate.highlighted ? Theme.highlightColor : Theme.primaryColor - } - onClicked: console.log("Clicked " + index) - } - VerticalScrollDecorator {} - } -} - - - - - diff --git a/rpm/salmeta.spec b/rpm/salmeta.spec index dfafb60..de24543 100644 --- a/rpm/salmeta.spec +++ b/rpm/salmeta.spec @@ -21,6 +21,8 @@ URL: http://javispedro.com Source0: %{name}-%{version}.tar.bz2 Source100: salmeta.yaml Requires: sailfishsilica-qt5 >= 0.10.9 +Requires: sailfish-components-bluetooth-qt5 +Requires: nemo-qml-plugin-configuration-qt5 Requires: systemd Requires: systemd-user-session-targets BuildRequires: pkgconfig(sailfishapp) >= 1.0.2 diff --git a/rpm/salmeta.yaml b/rpm/salmeta.yaml index 14e443f..d664d45 100644 --- a/rpm/salmeta.yaml +++ b/rpm/salmeta.yaml @@ -24,6 +24,8 @@ PkgConfigBR: Requires: - sailfishsilica-qt5 >= 0.10.9 + - sailfish-components-bluetooth-qt5 + - nemo-qml-plugin-configuration-qt5 - systemd - systemd-user-session-targets diff --git a/salmeta.pro b/salmeta.pro index c8d68cc..740bb53 100644 --- a/salmeta.pro +++ b/salmeta.pro @@ -17,7 +17,8 @@ SOURCES += src/salmeta.cpp \ src/reconnecttimer.cpp \ src/notificationmonitor.cpp \ src/widgetview.cpp \ - src/widgetinfo.cpp + src/widgetinfo.cpp \ + src/watchviewitem.cpp HEADERS += \ src/controller.h \ @@ -27,12 +28,12 @@ HEADERS += \ src/reconnecttimer.h \ src/notificationmonitor.h \ src/widgetview.h \ - src/widgetinfo.h + src/widgetinfo.h \ + src/watchviewitem.h OTHER_FILES += qml/salmeta.qml \ qml/cover/CoverPage.qml \ qml/pages/FirstPage.qml \ - qml/pages/SecondPage.qml \ rpm/salmeta.changes.in \ rpm/salmeta.spec \ rpm/salmeta.yaml \ diff --git a/src/controller.cpp b/src/controller.cpp index 02c8252..047ad96 100644 --- a/src/controller.cpp +++ b/src/controller.cpp @@ -22,10 +22,11 @@ Controller::Controller(const QString &settingsPrefix, QQuickView *view, QObject connect(_settings, &MDConfGroup::valueChanged, this, &Controller::handleSettingChanged); connect(_metawatch, &MetaWatch::connected, _reconnect, &ReconnectTimer::stop); connect(_metawatch, &MetaWatch::connected, this, &Controller::handleMetaWatchConnected); - connect(_metawatch, &MetaWatch::disconnected, _reconnect, &ReconnectTimer::start); + connect(_metawatch, &MetaWatch::disconnected, _reconnect, &ReconnectTimer::scheduleNextAttempt); connect(_metawatch, &MetaWatch::batteryStatus, this, &Controller::handleMetaWatchBatteryStatus); - connect(_reconnect, &ReconnectTimer::tick, _metawatch, &MetaWatch::connectDevice); - _reconnect->start(); + connect(_reconnect, &ReconnectTimer::tryReconnect, _metawatch, &MetaWatch::connectDevice); + + _reconnect->scheduleNextAttempt(); reloadPages(); } diff --git a/src/reconnecttimer.cpp b/src/reconnecttimer.cpp index eaf6cbb..a58a13e 100644 --- a/src/reconnecttimer.cpp +++ b/src/reconnecttimer.cpp @@ -15,33 +15,33 @@ ReconnectTimer::ReconnectTimer(QObject *parent) : QObject(parent), _iphb(iphb_open(0)), _notifier(new QSocketNotifier(iphb_get_fd(_iphb), QSocketNotifier::Read, this)), - _active(false) + _active(false), + _counter(0) { connect(_notifier, &QSocketNotifier::activated, this, &ReconnectTimer::handleIphbActivity); } ReconnectTimer::~ReconnectTimer() { - iphb_close(_iphb); + _active = false; + _iphb = iphb_close(_iphb); } -void ReconnectTimer::start() +void ReconnectTimer::scheduleNextAttempt() { _active = true; - _counter = 0; - setupWait(); + + time_t res = iphb_wait2(_iphb, wait_times[_counter] / 2, wait_times[_counter], 0, 0); + + if (res == -1) { + qErrnoWarning("Failed to iphb_wait"); + } } void ReconnectTimer::stop() { _active = false; _counter = 0; - iphb_wait(_iphb, 0, 0, 0); -} - -void ReconnectTimer::setupWait() -{ - iphb_wait(_iphb, wait_times[_counter] / 2, wait_times[_counter], 0); } void ReconnectTimer::handleIphbActivity() @@ -55,10 +55,9 @@ void ReconnectTimer::handleIphbActivity() return; } - emit tick(); - + _active = false; if (++_counter > num_wait_times) _counter = num_wait_times; - setupWait(); + emit tryReconnect(); } diff --git a/src/reconnecttimer.h b/src/reconnecttimer.h index c8d901f..af4ae98 100644 --- a/src/reconnecttimer.h +++ b/src/reconnecttimer.h @@ -13,14 +13,11 @@ public: ~ReconnectTimer(); public slots: - void start(); + void scheduleNextAttempt(); void stop(); signals: - void tick(); - -private: - void setupWait(); + void tryReconnect(); private slots: void handleIphbActivity(); diff --git a/src/salmeta.cpp b/src/salmeta.cpp index c4bcb0c..f13cd64 100644 --- a/src/salmeta.cpp +++ b/src/salmeta.cpp @@ -2,9 +2,10 @@ #include #include "controller.h" +#include "watchviewitem.h" static bool launch_daemon = false; -static QString settings_key_prefix; +static QString settings_key_prefix("/apps/salmeta/watch0"); int main(int argc, char *argv[]) { @@ -24,16 +25,15 @@ int main(int argc, char *argv[]) ++it; } - if (launch_daemon) { - if (settings_key_prefix.isEmpty()) { - settings_key_prefix = "/apps/salmeta/watch0"; - } + qmlRegisterType("com.javispedro.salmeta", 1, 0, "WatchView"); + if (launch_daemon) { qDebug() << "Starting salmeta (daemon) with settings from" << settings_key_prefix; new Controller(settings_key_prefix, SailfishApp::createView()); } else { QQuickView *view = SailfishApp::createView(); + view->rootContext()->setContextProperty("settingsPrefix", settings_key_prefix); view->setSource(SailfishApp::pathTo("qml/salmeta.qml")); view->show(); } diff --git a/src/watchviewitem.cpp b/src/watchviewitem.cpp new file mode 100644 index 0000000..dbd4e8a --- /dev/null +++ b/src/watchviewitem.cpp @@ -0,0 +1,15 @@ +#include +#include + +#include "watchviewitem.h" + +WatchViewItem::WatchViewItem(QQuickItem *parent) : + QQuickPaintedItem(parent) +{ + setFillColor(Qt::white); +} + +void WatchViewItem::paint(QPainter *painter) +{ + +} diff --git a/src/watchviewitem.h b/src/watchviewitem.h new file mode 100644 index 0000000..5219852 --- /dev/null +++ b/src/watchviewitem.h @@ -0,0 +1,20 @@ +#ifndef WATCHVIEWITEM_H +#define WATCHVIEWITEM_H + +#include + +class WatchViewItem : public QQuickPaintedItem +{ + Q_OBJECT +public: + explicit WatchViewItem(QQuickItem *parent = 0); + + void paint(QPainter *painter); + +signals: + +public slots: + +}; + +#endif // WATCHVIEWITEM_H diff --git a/translations/salmeta.ts b/translations/salmeta.ts index 0374c0e..09129a8 100644 --- a/translations/salmeta.ts +++ b/translations/salmeta.ts @@ -1,36 +1,18 @@ - - CoverPage - - My Cover - - - FirstPage - Show Page 2 + Not done yet - UI Template - - - - Hello Sailors - - - - - SecondPage - - Nested Page + Device settings - Item + Widgets -- cgit v1.2.3