Browse Source

Added NewAirportDialog

Skeleton for a NewAirportDialog that can be used to add a new Airport to the Database.
Felix Turo 2 years ago
parent
commit
e905fc053f

+ 3 - 0
CMakeLists.txt

@@ -34,6 +34,9 @@ set(PROJECT_SOURCES
     src/gui/dialogues/firstrundialog.h
     src/gui/dialogues/firstrundialog.cpp
     src/gui/dialogues/firstrundialog.ui
+    src/gui/dialogues/newairportdialog.h
+    src/gui/dialogues/newairportdialog.cpp
+    src/gui/dialogues/newairportdialog.ui
     src/gui/dialogues/newflightdialog.h
     src/gui/dialogues/newflightdialog.cpp
     src/gui/dialogues/newflightdialog.ui

+ 97 - 0
src/gui/dialogues/newairportdialog.cpp

@@ -0,0 +1,97 @@
+#include "newairportdialog.h"
+#include "ui_newairportdialog.h"
+#include <QValidator>
+
+#include "src/opl.h"
+
+NewAirportDialog::NewAirportDialog(QWidget *parent) :
+    QDialog(parent),
+    ui(new Ui::NewAirportDialog)
+{
+    ui->setupUi(this);
+    setValidators();
+}
+
+NewAirportDialog::~NewAirportDialog()
+{
+    delete ui;
+}
+
+void NewAirportDialog::setValidators()
+{
+    ui->latitudeLineEdit ->setValidator(new QDoubleValidator(-90,90,10,this));   // -90  <= Latitude  <= 90
+    ui->longitudeLineEdit->setValidator(new QDoubleValidator(-180,180,10,this)); // -180 <= Longitude <= 180
+    ui->icaoLineEdit     ->setValidator(new QRegularExpressionValidator(QRegularExpression("\\w{4}"), this)); // 4 letter code
+    ui->iataLineEdit     ->setValidator(new QRegularExpressionValidator(QRegularExpression("\\w{3}"), this)); // 3 letter code
+}
+
+void NewAirportDialog::on_buttonBox_accepted()
+{
+    // validate input
+    if (!ui->latitudeLineEdit->hasAcceptableInput()) {
+        WARN(tr("The entered latitude is invalid. Please enter the latitude as a decimal number between -90.0 and 90.0 degrees."));
+        return;
+    }
+    if (!ui->longitudeLineEdit->hasAcceptableInput()) {
+        WARN(tr("The entered longitude is invalid. Please enter the longitude as a decimal number between -180.0 and 180.0 degrees."));
+        return;
+    }
+    // create Entry object
+    // if submit() then accept()
+    QDialog::accept();
+}
+
+void NewAirportDialog::on_iataLineEdit_textChanged(const QString &arg1)
+{
+    ui->iataLineEdit->setText(arg1.toUpper());
+}
+
+void NewAirportDialog::on_icaoLineEdit_textChanged(const QString &arg1)
+{
+    ui->icaoLineEdit->setText(arg1.toUpper());
+}
+
+void NewAirportDialog::on_nameLineEdit_editingFinished()
+{
+    DEB << "Editing finished: ";
+}
+
+void NewAirportDialog::on_iataLineEdit_editingFinished()
+{
+    DEB << "Editing finished: ";
+}
+
+void NewAirportDialog::on_icaoLineEdit_editingFinished()
+{
+    DEB << "Editing finished: ";
+}
+
+void NewAirportDialog::on_latitudeLineEdit_editingFinished()
+{
+    DEB << "Editing finished: ";
+}
+
+void NewAirportDialog::on_longitudeLineEdit_editingFinished()
+{
+    DEB << "Editing finished: ";
+}
+
+void NewAirportDialog::on_latitudeLineEdit_inputRejected()
+{
+    DEB << "Input Rejected";
+}
+
+void NewAirportDialog::on_longitudeLineEdit_inputRejected()
+{
+    DEB << "Input Rejected";
+}
+
+void NewAirportDialog::on_icaoLineEdit_inputRejected()
+{
+    DEB << "Input Rejected";
+}
+
+void NewAirportDialog::on_iataLineEdit_inputRejected()
+{
+    DEB << "Input Rejected";
+}

+ 48 - 0
src/gui/dialogues/newairportdialog.h

@@ -0,0 +1,48 @@
+#ifndef NEWAIRPORTDIALOG_H
+#define NEWAIRPORTDIALOG_H
+
+#include <QDialog>
+
+namespace Ui {
+class NewAirportDialog;
+}
+
+class NewAirportDialog : public QDialog
+{
+    Q_OBJECT
+
+public:
+    explicit NewAirportDialog(QWidget *parent = nullptr);
+    ~NewAirportDialog();
+
+private slots:
+    void on_buttonBox_accepted();
+
+    void on_iataLineEdit_textChanged(const QString &arg1);
+
+    void on_icaoLineEdit_textChanged(const QString &arg1);
+
+    void on_nameLineEdit_editingFinished();
+
+    void on_iataLineEdit_editingFinished();
+
+    void on_icaoLineEdit_editingFinished();
+
+    void on_latitudeLineEdit_editingFinished();
+
+    void on_longitudeLineEdit_editingFinished();
+
+    void on_latitudeLineEdit_inputRejected();
+
+    void on_longitudeLineEdit_inputRejected();
+
+    void on_icaoLineEdit_inputRejected();
+
+    void on_iataLineEdit_inputRejected();
+
+private:
+    Ui::NewAirportDialog *ui;
+    void setValidators();
+};
+
+#endif // NEWAIRPORTDIALOG_H

+ 86 - 0
src/gui/dialogues/newairportdialog.ui

@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>NewAirportDialog</class>
+ <widget class="QDialog" name="NewAirportDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>300</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Dialog</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="0" column="0">
+    <widget class="QLabel" name="nameLabel">
+     <property name="text">
+      <string>Airport Name</string>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="1">
+    <widget class="QLineEdit" name="nameLineEdit"/>
+   </item>
+   <item row="1" column="0">
+    <widget class="QLabel" name="iataLabel">
+     <property name="text">
+      <string>IATA Code</string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="1">
+    <widget class="QLineEdit" name="iataLineEdit">
+     <property name="maxLength">
+      <number>3</number>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="0">
+    <widget class="QLabel" name="icaoLabel">
+     <property name="text">
+      <string>ICAO Code</string>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="1">
+    <widget class="QLineEdit" name="icaoLineEdit">
+     <property name="maxLength">
+      <number>4</number>
+     </property>
+    </widget>
+   </item>
+   <item row="3" column="0">
+    <widget class="QLabel" name="latitudeLabel">
+     <property name="text">
+      <string>Latitude</string>
+     </property>
+    </widget>
+   </item>
+   <item row="3" column="1">
+    <widget class="QLineEdit" name="latitudeLineEdit"/>
+   </item>
+   <item row="4" column="0">
+    <widget class="QLabel" name="longitudeLabel">
+     <property name="text">
+      <string>Longitude</string>
+     </property>
+    </widget>
+   </item>
+   <item row="4" column="1">
+    <widget class="QLineEdit" name="longitudeLineEdit"/>
+   </item>
+   <item row="5" column="1">
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>

+ 8 - 14
src/gui/widgets/airportwidget.cpp

@@ -1,19 +1,6 @@
 #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")},
-};
+#include "src/gui/dialogues/newairportdialog.h"
 
 AirportWidget::AirportWidget(QWidget *parent) :
     QWidget(parent),
@@ -73,3 +60,10 @@ void AirportWidget::on_searchComboBox_currentIndexChanged(int index)
 {
     ui->searchLineEdit->setText(QString());
 }
+
+void AirportWidget::on_newAirportPushButton_clicked()
+{
+    auto ap_dialog = NewAirportDialog(this);
+    if (ap_dialog.exec() == QDialog::Accepted)
+        model->select();
+}

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

@@ -22,6 +22,8 @@ private slots:
 
     void on_searchComboBox_currentIndexChanged(int index);
 
+    void on_newAirportPushButton_clicked();
+
 private:
     Ui::AirportWidget *ui;
     QSqlTableModel *model;
@@ -29,6 +31,20 @@ private:
 
     void setupModelAndeView();
     void setupSearch();
+
+    inline const static QString TABLE_NAME = QStringLiteral("airports");
+    inline const static QHash<int, QString> FILTER_MAP = {
+        {0, QStringLiteral("icao LIKE \"%")},
+        {1, QStringLiteral("iata LIKE \"%")},
+        {2, QStringLiteral("name LIKE \"%")},
+        {3, QStringLiteral("country LIKE \"%")},
+    };
+    inline const static QHash<int, QString> HEADER_MAP = {
+        {0, QStringLiteral("ICAO")},
+        {1, QStringLiteral("IATA")},
+        {2, QStringLiteral("Name")},
+        {3, QStringLiteral("Country")},
+    };
 };
 
 #endif // AIRPORTWIDGET_H

+ 17 - 10
src/gui/widgets/airportwidget.ui

@@ -14,16 +14,6 @@
    <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>
@@ -34,9 +24,26 @@
      </property>
     </widget>
    </item>
+   <item row="1" column="0">
+    <widget class="QLabel" name="searchLabel">
+     <property name="text">
+      <string>Search</string>
+     </property>
+    </widget>
+   </item>
    <item row="1" column="3">
     <widget class="QComboBox" name="searchComboBox"/>
    </item>
+   <item row="0" column="0" colspan="4">
+    <widget class="QTableView" name="tableView"/>
+   </item>
+   <item row="2" column="0" colspan="4">
+    <widget class="QPushButton" name="newAirportPushButton">
+     <property name="text">
+      <string>Add New Airport</string>
+     </property>
+    </widget>
+   </item>
   </layout>
  </widget>
  <resources/>