From 15de7f0b716b4e3c28fee4f4ccbac4788a8d84b1 Mon Sep 17 00:00:00 2001 From: Dirk Hohndel Date: Sun, 12 Jul 2015 17:39:13 -0700 Subject: [PATCH] QML UI: implement a message area to show information to the user This is just a quick first stab to do this, but it at least allows us to share some information with the user. Signed-off-by: Dirk Hohndel --- qt-gui.cpp | 9 +++++++-- qt-gui.h | 5 +++++ qt-mobile/main.qml | 15 +++++++++++++++ qt-mobile/qmlmanager.cpp | 23 ++++++++++++++++++++++- 4 files changed, 49 insertions(+), 3 deletions(-) diff --git a/qt-gui.cpp b/qt-gui.cpp index 1bd0e65ac..175e9c27d 100644 --- a/qt-gui.cpp +++ b/qt-gui.cpp @@ -45,9 +45,14 @@ void run_ui() QQmlContext *ctxt = engine.rootContext(); ctxt->setContextProperty("diveModel", &diveListModel); engine.load(QUrl(QStringLiteral("qrc:///qml/main.qml"))); - QObject *mainWindow = engine.rootObjects().value(0); - QQuickWindow *qml_window = qobject_cast(mainWindow); + qqWindowObject = engine.rootObjects().value(0); + if (!qqWindowObject) { + fprintf(stderr, "can't create window object\n"); + exit(1); + } + QQuickWindow *qml_window = qobject_cast(qqWindowObject); qml_window->setIcon(QIcon(":/subsurface-mobile-icon")); + qqWindowObject->setProperty("messageText", QVariant("Subsurface mobile startup")); #if !defined(Q_OS_ANDROID) qml_window->setHeight(1200); qml_window->setWidth(800); diff --git a/qt-gui.h b/qt-gui.h index 7761eb462..ca038b145 100644 --- a/qt-gui.h +++ b/qt-gui.h @@ -9,4 +9,9 @@ void init_ui(); void run_ui(); void exit_ui(); +#if defined(SUBSURFACE_MOBILE) +#include +extern QObject *qqWindowObject; +#endif + #endif // QT_GUI_H diff --git a/qt-mobile/main.qml b/qt-mobile/main.qml index ffe83d19b..dac37e09b 100644 --- a/qt-mobile/main.qml +++ b/qt-mobile/main.qml @@ -8,6 +8,7 @@ import org.subsurfacedivelog.mobile 1.0 ApplicationWindow { title: qsTr("Subsurface mobile") property bool fullscreen: true + property alias messageText: message.text visible: true StackView { @@ -68,6 +69,20 @@ ApplicationWindow { } } + Rectangle { + id: messageArea + height: childrenRect.height + Layout.fillWidth: true + + Text { + id: message + color: "#000000" + text: "" + styleColor: "#ff0000" + font.pointSize: 10 + } + } + } } } diff --git a/qt-mobile/qmlmanager.cpp b/qt-mobile/qmlmanager.cpp index 5ccd4cde7..118465a2d 100644 --- a/qt-mobile/qmlmanager.cpp +++ b/qt-mobile/qmlmanager.cpp @@ -1,11 +1,19 @@ #include "qmlmanager.h" #include #include +#include #include "qt-models/divelistmodel.h" #include "divelist.h" #include "pref.h" #include "qthelper.h" +#include "qt-gui.h" + +static void showMessage(const char *errorString) +{ + if (!qqWindowObject->setProperty("messageText", QVariant(errorString))) + qDebug() << "couldn't set property messageText to" << errorString; +} QMLManager::QMLManager() { @@ -25,20 +33,33 @@ void QMLManager::savePreferences() s.setValue("email", cloudUserName()); s.setValue("password", cloudPassword()); s.sync(); + if (!same_string(prefs.cloud_storage_email, qPrintable(cloudUserName()))) { + free(prefs.cloud_storage_email); + prefs.cloud_storage_email = strdup(qPrintable(cloudUserName())); + } + if (!same_string(prefs.cloud_storage_password, qPrintable(cloudPassword()))) { + free(prefs.cloud_storage_password); + prefs.cloud_storage_password = strdup(qPrintable(cloudPassword())); + } } void QMLManager::loadDives() { QString url; if (getCloudURL(url)) { - //TODO: Show error in QML + showMessage(get_error_string()); return; } + showMessage("got email / password"); QByteArray fileNamePrt = QFile::encodeName(url); int error = parse_file(fileNamePrt.data()); if (!error) { + report_error("filename is now %s", fileNamePrt.data()); + showMessage(get_error_string()); set_filename(fileNamePrt.data(), true); + } else { + showMessage(get_error_string()); } process_dives(false, false); int i;