diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 301ceb4eaa4ac03be331e0fa5861ef5848763335..79a68fb5d1ceabb9d238d26327f965382f42e4be 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,6 +1,7 @@ set(vehiclevoyage_SRCS db/sqlvehicle.cpp db/sqlservicerecord.cpp + jsonio.cpp main.cpp ) diff --git a/src/contents/ui/main.qml b/src/contents/ui/main.qml index 7da701101d79428b9d64d94bef40735433640f7d..8acd4050f9fea8a6ec5fd591969977cd97c085a5 100644 --- a/src/contents/ui/main.qml +++ b/src/contents/ui/main.qml @@ -1,8 +1,9 @@ -import QtQuick 2.9 +import QtQuick 2.14 import org.kde.kirigami 2.12 as Kirigami -import QtQuick.Controls 2.9 as Controls -import QtQuick.Layouts 1.12 as Layouts +import QtQuick.Controls 2.14 as Controls +import QtQuick.Layouts 1.14 as Layouts import QtQuick.Controls 1.4 as Old +import QtQuick.Dialogs 1.3 as Dialogs Kirigami.ApplicationWindow { id: root @@ -38,6 +39,13 @@ Kirigami.ApplicationWindow { } } contextualActions: [ + Kirigami.Action { + iconName: "application-javascript" + text: qsTr("Import From Carfax") + onTriggered: { + importDialog.visible = true; + } + }, Kirigami.Action { iconName: "help-about" text: qsTr("About") @@ -47,6 +55,14 @@ Kirigami.ApplicationWindow { } ] title: "Vehicles" + Dialogs.FileDialog { + id: importDialog + title: qsTr("Select Carfax Json file to import...") + nameFilters: ["Carfax Vehicle Json (*.json)"] + onAccepted: { + jsonConverter.importCarfaxJsonToDB(importDialog.fileUrl); + } + } Kirigami.CardsListView { anchors.fill: parent id: vehicleView @@ -56,21 +72,34 @@ Kirigami.ApplicationWindow { banner { title: name } - header: Row { - layoutDirection: Qt.RightToLeft + header: Row{ topPadding: 10.0 rightPadding: 10.0 + leftPadding: 10.0 + layoutDirection: Qt.RightToLeft spacing: 5 - Controls.Label { - text: vin - anchors.verticalCenter: parent.verticalCenter - } - Image { - source: "qrc:/license.svg" - sourceSize.width: 32 - sourceSize.height: 32 - anchors.verticalCenter: parent.verticalCenter - } + Controls.Label { + text: vin + visible: root.wideScreen && mainPage.width > 550 + anchors.verticalCenter: parent.verticalCenter + } + Image { + id: vinIcon + source: "qrc:/license.svg" + sourceSize.width: 32 + sourceSize.height: 32 + anchors.verticalCenter: parent.verticalCenter + MouseArea { + id: vinMouse + hoverEnabled: true + anchors.fill: vinIcon + } + Controls.ToolTip { + id: vinTip + text: vin + visible: vinMouse.containsMouse + } + } } contentItem: Item{ implicitHeight: Kirigami.Units.gridUnit * 4 diff --git a/src/db/sqlservicerecord.cpp b/src/db/sqlservicerecord.cpp index 43bf477b14bffca36c435f7837c412224640230c..7509c8ee23138770a1f88471550e028585142139 100644 --- a/src/db/sqlservicerecord.cpp +++ b/src/db/sqlservicerecord.cpp @@ -52,9 +52,14 @@ QVariant SqlServiceRecord::data ( const QModelIndex& index, int role ) const } void SqlServiceRecord::addNewRecord(QString serviceProvider, int serviceType, QString serviceTypeName, QString dateISO, int miles, QString notes) +{ + this->addNewRecord(this->currentVehicleID, serviceProvider, serviceType, serviceTypeName, dateISO, miles, notes); +} + +void SqlServiceRecord::addNewRecord(int vehicleId, QString serviceProvider, int serviceType, QString serviceTypeName, QString dateISO, int miles, QString notes) { QSqlRecord newItem = this->record(); - newItem.setValue("vehicle", this->currentVehicleID); + newItem.setValue("vehicle", vehicleId); newItem.setValue("serviceprovider", serviceProvider); newItem.setValue("servicetype", serviceType); newItem.setValue("servicetypename", serviceTypeName); @@ -63,12 +68,12 @@ void SqlServiceRecord::addNewRecord(QString serviceProvider, int serviceType, QS newItem.setValue("notes", notes); this->insertRecord(-1, newItem); if(this->submitAll()) { - printf("inserted new service record"); + printf("inserted new service record\n"); this->database().commit(); this->select(); } else { this->database().rollback(); - printf("database error"); + printf("database error\n"); } } @@ -76,12 +81,12 @@ void SqlServiceRecord::removeRecord(int index) { this->removeRow(index); if(this->submitAll()) { - printf("removed service record"); + printf("removed service record\n"); this->database().commit(); this->select(); } else { this->database().rollback(); - printf("database error"); + printf("database error\n"); } } diff --git a/src/db/sqlservicerecord.h b/src/db/sqlservicerecord.h index c85c6f3d595ad8bf049ff4317a0d3bb1f0574a64..6816686d716a686f7253a34d72255df3ece5f093 100644 --- a/src/db/sqlservicerecord.h +++ b/src/db/sqlservicerecord.h @@ -27,9 +27,10 @@ class SqlServiceRecord : public QSqlTableModel { Q_OBJECT public: - explicit SqlServiceRecord(QObject *parent = nullptr, QSqlDatabase db = QSqlDatabase()); + SqlServiceRecord(QObject *parent = nullptr, QSqlDatabase db = QSqlDatabase()); QHash roleNames() const override; Q_INVOKABLE QVariant data(const QModelIndex &index, int role) const override; + Q_INVOKABLE void addNewRecord(int vehicleId, QString serviceProvider, int serviceType, QString serviceTypeName, QString dateISO, int miles, QString notes); Q_INVOKABLE void addNewRecord(QString serviceProvider, int serviceType, QString serviceTypeName, QString dateISO, int miles, QString notes); Q_INVOKABLE void removeRecord(int index); Q_INVOKABLE void changeVehicleFilter(int id); diff --git a/src/db/sqlvehicle.cpp b/src/db/sqlvehicle.cpp index 5b5044e3b190fad920be342efdd9eecf3ecbec42..eea9143b3d49e3a6f66887bc5e93f1bc8d649b08 100644 --- a/src/db/sqlvehicle.cpp +++ b/src/db/sqlvehicle.cpp @@ -64,12 +64,12 @@ void SqlVehicle::addNewVehicle ( const QString name, const QString maker, const newItem.setValue("vin", vin); this->insertRecord(-1, newItem); if(this->submitAll()) { - printf("inserted new vehicle record"); + printf("inserted new vehicle record\n"); this->database().commit(); this->select(); } else { this->database().rollback(); - printf("database error"); + printf("database error\n"); } } @@ -78,12 +78,12 @@ void SqlVehicle::removeVehicle(int index) this->database().exec("DELETE FROM records WHERE records.vehicle="+this->record(index).value("id").toString()); this->removeRow(index); if(this->submitAll()) { - printf("removed vehicle record"); + printf("removed vehicle record\n"); this->database().commit(); this->select(); } else { this->database().rollback(); - printf("database error"); + printf("database error\n"); } } diff --git a/src/db/sqlvehicle.h b/src/db/sqlvehicle.h index fb82f4769c3aca513dbe4cf8e6096cb7a9a98a17..b88982b585c0d6becd8abd1504ce206f9d15d579 100644 --- a/src/db/sqlvehicle.h +++ b/src/db/sqlvehicle.h @@ -27,7 +27,7 @@ class SqlVehicle : public QSqlTableModel { Q_OBJECT public: - explicit SqlVehicle(QObject *parent = nullptr, QSqlDatabase db = QSqlDatabase()); + SqlVehicle(QObject *parent = nullptr, QSqlDatabase db = QSqlDatabase()); QHash roleNames() const override; Q_INVOKABLE QVariant data(const QModelIndex &index, int role) const override; Q_INVOKABLE void addNewVehicle(const QString name, const QString maker, const QString model, const int year, const QString image, const QString vin); diff --git a/src/main.cpp b/src/main.cpp index 926faa5a650f4f89896d08b4e3fd82df5d820265..1283dc957e579d277277e8f2924069683b159388 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -30,6 +30,7 @@ #include #include "db/sqlvehicle.h" #include "db/sqlservicerecord.h" +#include "jsonio.h" Q_DECL_EXPORT int main(int argc, char *argv[]) { @@ -75,11 +76,13 @@ Q_DECL_EXPORT int main(int argc, char *argv[]) //Fill model with inital data. vehicles.select(); records.select(); + JsonIO converter(&vehicles, &records); QQmlApplicationEngine engine; engine.rootContext()->setContextProperty(QStringLiteral("appAboutData"), QVariant::fromValue(aboutData)); engine.rootContext()->setContextProperty(QStringLiteral("vehicleModel"), &vehicles); engine.rootContext()->setContextProperty(QStringLiteral("recordModel"), &records); + engine.rootContext()->setContextProperty(QStringLiteral("jsonConverter"), &converter); engine.load(QUrl(QStringLiteral("qrc:///main.qml"))); if (engine.rootObjects().isEmpty()) {