Răsfoiți Sursa

Implemented Signals and Slots for DB and NewPilotDialog

Also changed some things according to comments on earlier commit.
Felix Turo 4 ani în urmă
părinte
comite
66f909bc51

+ 9 - 6
src/experimental/DataBase.cpp

@@ -57,8 +57,7 @@ void DataBase::disconnect()
 
 QSqlDatabase DataBase::database()
 {
-    auto db = QSqlDatabase::database("qt_sql_default_connection");
-    return db;
+    return QSqlDatabase::database("qt_sql_default_connection");
 }
 
 bool DataBase::commit(Entry entry)
@@ -135,13 +134,15 @@ bool DataBase::update(Entry updated_entry)
     if (q.lastError().type() == QSqlError::NoError)
     {
         DEB("Entry successfully committed.");
-        /// [F] emit commitSuccessful();
+        emit commitSuccessful();
+        /// [F] emit DB(), &DataBase::commitSuccessful, NewPilotDialog, &NewPilotDialog::onCommitSuccessful);
         return true;
     } else {
         DEB("Unable to commit.");
         DEB("Query: " << statement);
         DEB("Query Error: " << q.lastError().text());
-        /// [F] emit commitUnsuccessful(q.lastError().type(), statement);
+        emit commitUnsuccessful(q.lastError().text(), statement);
+        /// [F] emit DB(), &DataBase::commitSuccessful, NewPilotDialog, &NewPilotDialog::onCommitSuccessful);
         return false;
     }
 }
@@ -168,13 +169,15 @@ bool DataBase::insert(Entry newEntry)
     if (q.lastError().type() == QSqlError::NoError)
     {
         DEB("Entry successfully committed.");
-        /// [F] emit commitSuccessful();
+        emit commitSuccessful();
+        /// [F] emit DB(), &DataBase::commitSuccessful, NewPilotDialog, &NewPilotDialog::onCommitSuccessful);
         return true;
     } else {
         DEB("Unable to commit.");
         DEB("Query: " << statement);
         DEB("Query Error: " << q.lastError().text());
-        /// [F] emit commitUnsuccessful(q.lastError().type(), statement);
+        emit commitUnsuccessful(q.lastError().text(), statement);
+        /// [F] emit DB(), &DataBase::commitSuccessful, NewPilotDialog, &NewPilotDialog::onCommitSuccessful);
         return false;
     }
 

+ 5 - 1
src/experimental/DataBase.h

@@ -18,7 +18,8 @@ namespace experimental {
  * \brief The DB class encapsulates the SQL database by providing fast access
  * to hot database data.
  */
-class DataBase {
+class DataBase : public QObject {
+    Q_OBJECT
 private:
     TableNames tableNames;
     TableColumns tableColumns;
@@ -92,7 +93,10 @@ public:
      */
     PilotEntry getPilotEntry(RowId);
     ///[F] the same can easily be implemented for tails/flights
+signals:
+    void commitSuccessful();
 
+    void commitUnsuccessful(const QString &sqlError, const QString &sqlStatement);
 
 };
 

+ 3 - 18
src/experimental/Entry.cpp

@@ -4,21 +4,7 @@ namespace experimental {
 
 Entry::Entry(DataPosition position_)
     : position(position_)
-{
-//    position = position_;
-}
-/// [F] from what I understand the initialiser list should do exactly the same as
-///     the body, but for some reason it doesn't. Example:
-///     auto entry = DB()->getPilotEntry(7);
-///     DEB(entry.position); // returns {"pilots",7}
-///
-///     PilotEntry copiedEntry;
-///     copiedEntry = entry;
-///     DEB(copiedEntry.position);
-///     returns {"pilots",0} with initalizer list
-///     returns {"pilots", 7} with constructor as above.
-///
-///     I think I'm missing something but can't figure it out.
+{}
 
 void Entry::setData(TableData table_data)
 {
@@ -31,9 +17,8 @@ const TableData& Entry::getData()
 }
 
 PilotEntry::PilotEntry(int row_id)
-{
-    position = DataPosition("pilots", row_id);
-}
+    : Entry::Entry(DataPosition("pilots", row_id))
+{}
 
 PilotEntry::PilotEntry(TableData fromNewPilotDialog)
     : Entry::Entry(DEFAULT_PILOT_POSITION)

+ 13 - 9
src/gui/dialogues/newpilotdialog.cpp

@@ -65,8 +65,12 @@ NewPilotDialog::NewPilotDialog(QWidget *parent) :
     setupCompleter();
 
     using namespace experimental;
-    //    connect(DB(), &DataBase::commitUnsuccessful,
-    //            this, &NewPilotDialog::onCommitUnsuccessful);
+
+    QObject::connect(DB(), &DataBase::commitSuccessful,
+            this, &NewPilotDialog::onCommitSuccessful);
+    QObject::connect(DB(), &DataBase::commitUnsuccessful,
+            this, &NewPilotDialog::onCommitUnsuccessful);
+
     pilotEntry = PilotEntry();
     ui->piclastnameLineEdit->setFocus();
 }
@@ -80,8 +84,12 @@ NewPilotDialog::NewPilotDialog(int rowId, QWidget *parent) :
     setupCompleter();
 
     using namespace experimental;
-//    connect(DB(), &DataBase::commitUnsuccessful,
-//            this, &NewPilotDialog::onCommitUnsuccessful);
+
+    QObject::connect(DB(), &DataBase::commitSuccessful,
+            this, &NewPilotDialog::onCommitSuccessful);
+    QObject::connect(DB(), &DataBase::commitUnsuccessful,
+            this, &NewPilotDialog::onCommitUnsuccessful);
+
     pilotEntry = DB()->getPilotEntry(rowId);
     DEB("Pilot Entry position: " << pilotEntry.position);
     formFiller();
@@ -102,7 +110,6 @@ void NewPilotDialog::on_buttonBox_accepted()
         mb.show();
     } else {
         submitForm();
-        accept(); /// [F] once the signals and slots are in place this line goes away as it is called in the slot below
     }
 }
 
@@ -111,7 +118,7 @@ void NewPilotDialog::onCommitSuccessful()
     accept();
 }
 
-void NewPilotDialog::onCommitUnsuccessful(QString &sqlError, QString&)
+void NewPilotDialog::onCommitUnsuccessful(const QString &sqlError, const QString &)
 {
     auto mb = QMessageBox(this);
     mb.setText("The following error has ocurred. Your entry has not been saved./n/n"
@@ -182,7 +189,4 @@ void NewPilotDialog::submitForm()
     DEB("Pilot entry position: " << pilotEntry.position);
     DEB("Pilot entry data: " << pilotEntry.getData());
     DB()->commit(pilotEntry);
-    // to do: connect signals and slots to handle unsuccessful commit
-    // onSuccessfulCommit, accept();
-    // onError, show QMessageBox and prompt for user Input
 }

+ 1 - 1
src/gui/dialogues/newpilotdialog.h

@@ -46,7 +46,7 @@ private slots:
 
     void onCommitSuccessful();
 
-    void onCommitUnsuccessful(QString &sqlError, QString &);
+    void onCommitUnsuccessful(const QString &sqlError, const QString &);
 private:
     Ui::NewPilot *ui;
 

+ 1 - 30
src/gui/widgets/homewidget.cpp

@@ -38,34 +38,5 @@ HomeWidget::~HomeWidget()
 
 void HomeWidget::on_pushButton_clicked()
 {
-    using namespace experimental;
-    DB()->connect();
-
-    auto entry = DB()->getPilotEntry(7);
-    DEB(entry.position);
-    DEB(entry.getData());
-
-    PilotEntry copiedEntry;
-    copiedEntry = entry;
-    DEB(copiedEntry.position);
-    DEB(copiedEntry.getData());
-
-    /*long customFunc = 0;
-    long qSqlTableModelFunc = 0;
-    for (int i = 10; i < 100; i++) {
-        DataPosition dp = {"flights", i};
-
-        auto start = std::chrono::system_clock::now();
-        DB()->getEntryData(dp);
-        auto stop = std::chrono::system_clock::now();
-        auto duration = stop - start;
-        customFunc += duration.count();
-        auto start2 = std::chrono::system_clock::now();
-        DB()->getEntryDataNew(dp);
-        auto stop2 = std::chrono::system_clock::now();
-        auto duration2 = stop2 - start2;
-        qSqlTableModelFunc += duration2.count();
-    }
-    DEB("Average execution time: (custom Func)        " << customFunc/10000 << "ms");
-    DEB("Average execution time: (qSqlTableModelFunc) " << qSqlTableModelFunc/10000 << "ms");*/
+    // do debug stuff
 }