Browse Source

New Filters in Logbookwidget

Implemented new filter/search functionality in logbookwidget.
Felix Turo 4 years ago
parent
commit
f6a2aa3f97

+ 9 - 1
src/database/adatabasesetup.cpp

@@ -234,6 +234,14 @@ const QString createViewTotals = "CREATE VIEW viewTotals AS "
         "CAST(SUM(toDay) AS INT) AS \"TO Day\", CAST(SUM(toNight) AS INT) AS \"TO Night\", "
         "CAST(SUM(ldgDay) AS INT) AS \"LDG Day\", CAST(SUM(ldgNight) AS INT) AS \"LDG Night\" "
         "FROM flights";
+
+/*const QString createViewPilotsTailsMap = "CREATE VIEW viewPilotsTailsMap AS "
+        "SELECT "
+        "pilot_id, piclastname, picfirstname, tail_id, registration "
+        "FROM pilots "
+        "LEFT JOIN tails "
+        "ON pilots.pilot_id = tails.tail_id";*/
+
 const QStringList tables = {
     createTablePilots,
     createTableTails,
@@ -248,7 +256,7 @@ const QStringList views = {
     createViewTails,
     createViewPilots,
     createViewTotals,
-    createViewQCompleter
+    createViewQCompleter,
 };
 const QStringList userTables = {
     "flights",

+ 1 - 6
src/gui/widgets/debugwidget.cpp

@@ -164,12 +164,7 @@ void DebugWidget::on_importCsvPushButton_clicked()
 
 void DebugWidget::on_debugPushButton_clicked()
 {
-    using namespace experimental;
-    auto flight = aDB()->getFlightEntry(775);
-    DEB(flight.getData());
-    DEB(flight.summary());
-    DEB(flight.pilotName(experimental::AFlightEntry::pic));
-    DEB(flight.registration());
+
 }
 
 /* //Comparing two functions template

+ 46 - 14
src/gui/widgets/logbookwidget.cpp

@@ -19,6 +19,12 @@
 #include "ui_logbookwidget.h"
 #include "src/testing/adebug.h"
 
+const QMap<int, QString> filterMap = {
+    {0, "Date LIKE \"%"}, {1, "Dept LIKE \"%"}, {2, "Dest LIKE \"%"},
+    {3, "Registration LIKE \"%"}, {4, "\"Name PIC\" LIKE \"%"}
+};
+const auto NON_WORD_CHAR = QRegularExpression("\\W");
+
 LogbookWidget::LogbookWidget(QWidget *parent) :
     QWidget(parent),
     ui(new Ui::LogbookWidget)
@@ -71,12 +77,12 @@ void LogbookWidget::connectSignalsAndSlots()
 void LogbookWidget::setupDefaultView()
 {
     DEB("Loading Default View...");
-    model = new QSqlTableModel;
-    model->setTable("viewDefault");
-    model->select();
+    displayModel = new QSqlTableModel;
+    displayModel->setTable("viewDefault");
+    displayModel->select();
 
     view = ui->tableView;
-    view->setModel(model);
+    view->setModel(displayModel);
 
     view->setColumnWidth(1, 120);
     view->setColumnWidth(2, 60);
@@ -104,12 +110,12 @@ void LogbookWidget::setupDefaultView()
 void LogbookWidget::setupEasaView()
 {
     DEB("Loading EASA View...");
-    model = new QSqlTableModel;
-    model->setTable("viewEASA");
-    model->select();
+    displayModel = new QSqlTableModel;
+    displayModel->setTable("viewEASA");
+    displayModel->select();
 
     view = ui->tableView;
-    view->setModel(model);
+    view->setModel(displayModel);
 
     view->setColumnWidth(1,120);
     view->setColumnWidth(2,60);
@@ -163,7 +169,7 @@ void LogbookWidget::on_newFlightButton_clicked()
     auto nf = new NewFlightDialog(this, Db::createNew);
     nf->setAttribute(Qt::WA_DeleteOnClose);
     nf->exec();
-    model->select();
+    displayModel->select();
 }
 
 void LogbookWidget::on_editFlightButton_clicked()
@@ -172,7 +178,7 @@ void LogbookWidget::on_editFlightButton_clicked()
         auto ef = new NewFlightDialog(this,Flight(selectedFlights.first()), Db::editExisting);
         ef->setAttribute(Qt::WA_DeleteOnClose);
         ef->exec();
-        model->select();
+        displayModel->select();
     } else if (selectedFlights.isEmpty()) {
         nope->setText("No flight selected.\n");
         nope->exec();
@@ -247,8 +253,8 @@ void LogbookWidget::on_deleteFlightPushButton_clicked()
 void LogbookWidget::on_showAllButton_clicked()
 {
     ui->flightSearchLlineEdit->setText(QString());
-    model->setFilter(QString());
-    model->select();
+    displayModel->setFilter(QString());
+    displayModel->select();
 }
 
 void LogbookWidget::on_tableView_customContextMenuRequested(const QPoint &pos)
@@ -273,6 +279,32 @@ void LogbookWidget::on_tableView_doubleClicked()
 
 void LogbookWidget::on_flightSearchLlineEdit_textChanged(const QString &arg1)
 {
-    // to do:
-    // model->setFilter(arg1); depending on flightSearchComboBox Selection
+    if(arg1.length() == 0) {
+        DEB("Resetting filter...");
+        displayModel->setFilter("");
+        displayModel->select();
+        return;
+    }
+
+    if (ui->flightSearchComboBox->currentIndex() < 3) {
+        displayModel->setFilter(filterMap.value(ui->flightSearchComboBox->currentIndex())
+                         + arg1 + "%\"");
+        //DEB("display model filter:" << displayModel->filter());
+        return;
+    } else if (ui->flightSearchComboBox->currentIndex() == 3) { // registration
+        displayModel->setFilter(filterMap.value(ui->flightSearchComboBox->currentIndex())
+                         + arg1 + "%\"");
+        //DEB("display model filter:" << displayModel->filter());
+        return;
+    } else if (ui->flightSearchComboBox->currentIndex() == 4) { // Name Pic
+        displayModel->setFilter(filterMap.value(ui->flightSearchComboBox->currentIndex())
+                         + arg1 + "%\"");
+        //DEB("display model filter:" << displayModel->filter());
+        return;
+    }
+}
+
+void LogbookWidget::on_flightSearchComboBox_currentIndexChanged()
+{
+    ui->flightSearchLlineEdit->setText(QString());
 }

+ 4 - 1
src/gui/widgets/logbookwidget.h

@@ -31,6 +31,7 @@
 #include "src/database/db.h"
 #include "src/classes/flight.h"
 #include "src/gui/dialogues/newflightdialog.h"
+#include "src/experimental/aflightentry.h"
 
 namespace Ui {
 class LogbookWidget;
@@ -65,12 +66,14 @@ private slots:
 
     void on_flightSearchLlineEdit_textChanged(const QString &arg1);
 
+    void on_flightSearchComboBox_currentIndexChanged();
+
 private:
     Ui::LogbookWidget *ui;
 
     QTableView* view;
 
-    QSqlTableModel* model;
+    QSqlTableModel* displayModel;
 
     QItemSelectionModel* selection;