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 <dirk@hohndel.org>
This commit is contained in:
Dirk Hohndel 2015-07-12 17:39:13 -07:00
parent 16759715e6
commit 15de7f0b71
4 changed files with 49 additions and 3 deletions

View file

@ -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<QQuickWindow *>(mainWindow);
qqWindowObject = engine.rootObjects().value(0);
if (!qqWindowObject) {
fprintf(stderr, "can't create window object\n");
exit(1);
}
QQuickWindow *qml_window = qobject_cast<QQuickWindow *>(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);

View file

@ -9,4 +9,9 @@ void init_ui();
void run_ui();
void exit_ui();
#if defined(SUBSURFACE_MOBILE)
#include <QQuickWindow>
extern QObject *qqWindowObject;
#endif
#endif // QT_GUI_H

View file

@ -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
}
}
}
}
}

View file

@ -1,11 +1,19 @@
#include "qmlmanager.h"
#include <QUrl>
#include <QSettings>
#include <QDebug>
#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;