diff --git a/src/contents/ui/main.qml b/src/contents/ui/main.qml index 53b4c7a08b0774797b789295c06b2ab206aec89e..b303054de3a7e8575a9e62ddb4150b68cb512019 100644 --- a/src/contents/ui/main.qml +++ b/src/contents/ui/main.qml @@ -34,10 +34,8 @@ Kirigami.ApplicationWindow { } ] title: "Vehicles" - Kirigami.CardsListView { - Layouts.Layout.fillWidth: true - Layouts.Layout.fillHeight: true + anchors.fill: parent id: vehicleView model: vehicleModel delegate: Kirigami.Card { @@ -45,6 +43,28 @@ Kirigami.ApplicationWindow { banner { title: name } + header: Row { + layoutDirection: Qt.RightToLeft + topPadding: 10.0 + rightPadding: 10.0 + Controls.Label { + text: vin + } + } + contentItem: Item{ + implicitHeight: Kirigami.Units.gridUnit * 4 + Layouts.ColumnLayout { + Controls.Label { + text: maker + } + Controls.Label { + text: vmodel + } + Controls.Label { + text: year + } + } + } } Controls.ScrollBar.vertical: Controls.ScrollBar {} } @@ -73,13 +93,14 @@ Kirigami.ApplicationWindow { name: "addvehicle" Component { Kirigami.Page { + id: vehicleAddPage title: qsTr("Add Vehicle") Layouts.ColumnLayout { anchors.fill: parent Kirigami.FormLayout { Layouts.Layout.alignment: Qt.AlignHCenter Layouts.Layout.fillWidth: true - width: page.width + width: vehicleAddPage.width Item { Kirigami.FormData.isSection: true @@ -87,21 +108,25 @@ Kirigami.ApplicationWindow { } Controls.TextField { + id: nameField selectByMouse: true Kirigami.FormData.label: qsTr("Name")+":" } Controls.TextField { + id: makeField selectByMouse: true Kirigami.FormData.label: qsTr("Make")+":" } Controls.TextField { + id: modelField selectByMouse: true Kirigami.FormData.label: qsTr("Model")+":" } Controls.TextField { + id: yearField selectByMouse: true Kirigami.FormData.label: qsTr("Year")+":" inputMethodHints: Qt.ImhDigitsOnly @@ -112,6 +137,7 @@ Kirigami.ApplicationWindow { } Controls.TextField { + id: vinField selectByMouse: true Kirigami.FormData.label: qsTr("VIN")+":" } @@ -120,6 +146,7 @@ Kirigami.ApplicationWindow { text: qsTr("Add") highlighted: true onClicked: { + vehicleModel.addNewVehicle(nameField.text, makeField.text, modelField.text, parseInt(yearField.text), "", vinField.text); router.popRoute(); } } diff --git a/src/db/sqlservicerecord.cpp b/src/db/sqlservicerecord.cpp index 2ca7fdbbbd04a0767d420127de9989971a812f96..9a9473d147161006ac556896ee9c3f544882aaae 100644 --- a/src/db/sqlservicerecord.cpp +++ b/src/db/sqlservicerecord.cpp @@ -35,7 +35,7 @@ QHash SqlServiceRecord::roleNames() const } -QVariant SqlServiceRecord::data(const QModelIndex& index, int role) const +QVariant SqlServiceRecord::data ( const QModelIndex& index, int role ) const { QVariant value = QSqlQueryModel::data(index, role); if(role < Qt::UserRole) diff --git a/src/db/sqlservicerecord.h b/src/db/sqlservicerecord.h index 303ae2b40cfe2a2969e815d94a078393d3371e73..5cf1c73b91c86cba0fbc3c208461d891bfd6ffbf 100644 --- a/src/db/sqlservicerecord.h +++ b/src/db/sqlservicerecord.h @@ -29,7 +29,7 @@ class SqlServiceRecord : public QSqlTableModel public: explicit SqlServiceRecord(QObject *parent = nullptr, QSqlDatabase db = QSqlDatabase()); QHash roleNames() const override; - QVariant data(const QModelIndex &index, int role) const override; + Q_INVOKABLE QVariant data(const QModelIndex &index, int role) const override; }; diff --git a/src/db/sqlvehicle.cpp b/src/db/sqlvehicle.cpp index 69508ed60982d745b997cdd7c92a77ae235f9c99..87921da58b5cd7ef8c32a333dc5120585060e39a 100644 --- a/src/db/sqlvehicle.cpp +++ b/src/db/sqlvehicle.cpp @@ -35,7 +35,7 @@ QHash SqlVehicle::roleNames() const } -QVariant SqlVehicle::data(const QModelIndex& index, int role) const +QVariant SqlVehicle::data ( const QModelIndex& index, int role ) const { QVariant value = QSqlQueryModel::data(index, role); if(role < Qt::UserRole) @@ -51,6 +51,28 @@ QVariant SqlVehicle::data(const QModelIndex& index, int role) const return value; } +void SqlVehicle::addNewVehicle ( const QString name, const QString maker, const QString model, const int year, const QString image, const QString vin ) +{ + QSqlRecord newItem = this->record(); + newItem.remove(newItem.indexOf("id")); + newItem.setValue("name", name); + newItem.setValue("maker", maker); + newItem.setValue("vmodel", model); + newItem.setValue("year", year); + newItem.setValue("image", image); + newItem.setValue("vin", vin); + this->insertRecord(-1, newItem); + if(this->submitAll()) { + printf("inserted new vehicle record"); + this->database().commit(); + } else { + this->database().rollback(); + printf("database error"); + } + +} + + diff --git a/src/db/sqlvehicle.h b/src/db/sqlvehicle.h index 551369011db8051e12094defb304f62517638457..faeed5b1af32d45715f179996333ce2607004bc3 100644 --- a/src/db/sqlvehicle.h +++ b/src/db/sqlvehicle.h @@ -29,7 +29,8 @@ class SqlVehicle : public QSqlTableModel public: explicit SqlVehicle(QObject *parent = nullptr, QSqlDatabase db = QSqlDatabase()); QHash roleNames() const override; - QVariant data(const QModelIndex &index, int role) 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); private: diff --git a/src/main.cpp b/src/main.cpp index a981b8638f74856cc4516890eff7955375fe777d..7da7d0aa60baaf88ff7f03eeb68a9444abf0059a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -58,7 +58,7 @@ Q_DECL_EXPORT int main(int argc, char *argv[]) QFile(db.databaseName()).open(QIODevice::ReadWrite); //Create table structure db.open(); - db.exec("CREATE TABLE vehicles (id INTEGER PRIMARY KEY, name TEXT, maker TEXT, model TEXT, year INTEGER, image TEXT, vin TEXT);"); + db.exec("CREATE TABLE vehicles (id INTEGER PRIMARY KEY, name TEXT, maker TEXT, vmodel TEXT, year INTEGER, image TEXT, vin TEXT);"); db.exec("CREATE TABLE records (id INTEGER PRIMARY KEY, servicetype TEXT, date INTEGER, miles INTEGER, notes TEXT);"); db.commit(); db.close(); @@ -72,6 +72,8 @@ Q_DECL_EXPORT int main(int argc, char *argv[]) SqlVehicle vehicles(nullptr, db); SqlServiceRecord records(nullptr, db); + vehicles.select(); + records.select(); QQmlApplicationEngine engine; engine.rootContext()->setContextProperty(QStringLiteral("appAboutData"), QVariant::fromValue(aboutData));