2
0
Эх сурвалжийг харах

Initial Draft of Airport Widget

A Basic Idea of how editing airport data could be implemented
Felix Turo 2 жил өмнө
parent
commit
d849b6f42d

+ 4 - 0
CMakeLists.txt

@@ -51,6 +51,9 @@ set(PROJECT_SOURCES
     src/gui/widgets/aircraftwidget.h
     src/gui/widgets/aircraftwidget.cpp
     src/gui/widgets/aircraftwidget.ui
+    src/gui/widgets/airportwidget.h
+    src/gui/widgets/airportwidget.cpp
+    src/gui/widgets/airportwidget.ui
     src/gui/widgets/backupwidget.h
     src/gui/widgets/backupwidget.cpp
     src/gui/widgets/backupwidget.ui
@@ -70,6 +73,7 @@ set(PROJECT_SOURCES
     src/gui/widgets/settingswidget.h
     src/gui/widgets/settingswidget.ui
 
+
     # Classes
     src/classes/acompletiondata.h
     src/classes/acompletiondata.cpp

+ 3 - 9
mainwindow.cpp

@@ -30,15 +30,9 @@
 // Quick and dirty Debug area
 void MainWindow::doDebugStuff()
 {
-    //QSqlQuery query;
-    QFile f(OPL::Assets::DATABASE_SCHEMA);
-    f.open(QIODevice::ReadOnly);
-    QByteArray filedata = f.readAll();
-
-    auto list = filedata.split(';');
-    for (const auto &string : list)
-        //query.exec(string);
-        LOG << string;
+    auto widget = new AirportWidget(this);
+    ui->stackedWidget->addWidget(widget);
+    ui->stackedWidget->setCurrentWidget(widget);
 }
 
 MainWindow::MainWindow(QWidget *parent)

+ 1 - 0
mainwindow.h

@@ -33,6 +33,7 @@
 #include "src/gui/widgets/settingswidget.h"
 #include "src/gui/widgets/logbookwidget.h"
 #include "src/gui/widgets/aircraftwidget.h"
+#include "src/gui/widgets/airportwidget.h"
 #include "src/gui/widgets/backupwidget.h"
 #include "src/gui/widgets/pilotswidget.h"
 #include "src/gui/widgets/debugwidget.h"

+ 75 - 0
src/gui/widgets/airportwidget.cpp

@@ -0,0 +1,75 @@
+#include "airportwidget.h"
+#include "ui_airportwidget.h"
+
+const QString TABLE_NAME = QStringLiteral("airports");
+const QHash<int, QString> FILTER_MAP = {
+    {0, QStringLiteral("icao LIKE \"%")},
+    {1, QStringLiteral("iata LIKE \"%")},
+    {2, QStringLiteral("name LIKE \"%")},
+    {3, QStringLiteral("country LIKE \"%")},
+};
+const QHash<int, QString> HEADER_MAP = {
+    {0, QStringLiteral("ICAO")},
+    {1, QStringLiteral("IATA")},
+    {2, QStringLiteral("Name")},
+    {3, QStringLiteral("Country")},
+};
+
+AirportWidget::AirportWidget(QWidget *parent) :
+    QWidget(parent),
+    ui(new Ui::AirportWidget)
+{
+    ui->setupUi(this);
+    setupModelAndeView();
+    setupSearch();
+}
+
+AirportWidget::~AirportWidget()
+{
+    delete ui;
+}
+
+void AirportWidget::setupModelAndeView()
+{
+    model = new QSqlTableModel(this);
+    model->setTable(TABLE_NAME);
+    model->select();
+
+    view = ui->tableView;
+    view->setModel(model);
+
+    // To Do: Decide on and implement editing behaviour
+    //view->setSelectionBehavior(QAbstractItemView::SelectRows);
+    //view->setSelectionMode(QAbstractItemView::SingleSelection);
+    //view->setEditTriggers(QAbstractItemView::NoEditTriggers);
+    view->horizontalHeader()->setStretchLastSection(QHeaderView::Stretch);
+    view->hideColumn(0);
+    view->resizeColumnsToContents();
+    view->verticalHeader()->hide();
+    view->setAlternatingRowColors(true);
+    view->show();
+}
+
+void AirportWidget::setupSearch()
+{
+    for (const auto &item : HEADER_MAP)
+        ui->searchComboBox->addItem(item);
+}
+
+void AirportWidget::on_searchLineEdit_textChanged(const QString &arg1)
+{
+    if(arg1.length() == 0) {
+        model->setFilter("");
+        model->select();
+        return;
+    }
+
+    model->setFilter(FILTER_MAP.value(ui->searchComboBox->currentIndex())
+                     + arg1 + QLatin1String("%\""));
+}
+
+
+void AirportWidget::on_searchComboBox_currentIndexChanged(int index)
+{
+    ui->searchLineEdit->setText(QString());
+}

+ 34 - 0
src/gui/widgets/airportwidget.h

@@ -0,0 +1,34 @@
+#ifndef AIRPORTWIDGET_H
+#define AIRPORTWIDGET_H
+
+#include <QWidget>
+#include <QSqlTableModel>
+#include <QTableView>
+
+namespace Ui {
+class AirportWidget;
+}
+
+class AirportWidget : public QWidget
+{
+    Q_OBJECT
+
+public:
+    explicit AirportWidget(QWidget *parent = nullptr);
+    ~AirportWidget();
+
+private slots:
+    void on_searchLineEdit_textChanged(const QString &arg1);
+
+    void on_searchComboBox_currentIndexChanged(int index);
+
+private:
+    Ui::AirportWidget *ui;
+    QSqlTableModel *model;
+    QTableView *view;
+
+    void setupModelAndeView();
+    void setupSearch();
+};
+
+#endif // AIRPORTWIDGET_H

+ 44 - 0
src/gui/widgets/airportwidget.ui

@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>AirportWidget</class>
+ <widget class="QWidget" name="AirportWidget">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>300</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="0" column="0" colspan="4">
+    <widget class="QTableView" name="tableView"/>
+   </item>
+   <item row="1" column="0">
+    <widget class="QLabel" name="searchLabel">
+     <property name="text">
+      <string>Search</string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="1">
+    <widget class="QLineEdit" name="searchLineEdit"/>
+   </item>
+   <item row="1" column="2">
+    <widget class="QLabel" name="searchInLabel">
+     <property name="text">
+      <string>in</string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="3">
+    <widget class="QComboBox" name="searchComboBox"/>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>