Преглед изворни кода

work on formfiller for editing existing flight

fiffty-50 пре 4 година
родитељ
комит
4c4c908329

+ 1 - 1
src/classes/aircraft.cpp

@@ -42,7 +42,7 @@ Aircraft::Aircraft(int tail_id)
         DEB("No Entry found for row id: " << tail_id );
         position.second = 0;
     } else {
-        DEB("Retreiving data for row id: " << tail_id);
+        //DEB("Retreiving data for row id: " << tail_id);
         QString statement = "SELECT * FROM " + table + " WHERE _rowid_=" + QString::number(tail_id);
 
         QSqlQuery q(statement);

+ 4 - 4
src/classes/calc.cpp

@@ -361,12 +361,12 @@ int Calc::calculateNightTime(QString dept, QString dest, QDateTime departureTime
     double deptLon = degToRad(deptCoordinates[1].toDouble());
     double destLat = degToRad(destCoordinates[0].toDouble());
     double destLon = degToRad(destCoordinates[1].toDouble());
-
+/*
     qDebug() << "Calc::CalculateNightTime deptLat = " << deptLat;
     qDebug() << "Calc::CalculateNightTime deptLon = " << deptLon;
     qDebug() << "Calc::CalculateNightTime destLat = " << destLat;
     qDebug() << "Calc::CalculateNightTime destLon = " << destLon;
-
+*/
     QVector<QVector<double>> route = intermediatePointsOnGreatCircle(deptLat, deptLon, destLat, destLon,
                                                                      tblk);
 
@@ -377,8 +377,8 @@ int Calc::calculateNightTime(QString dept, QString dest, QDateTime departureTime
             nightTime ++;
         }
     }
-    qDebug() << "Calc::CalculateNightTime result for angle: "<< nightAngle
-             << " :" << nightTime << " minutes night flying time.";
+    //qDebug() << "Calc::CalculateNightTime result for angle: "<< nightAngle
+    //         << " :" << nightTime << " minutes night flying time.";
     return nightTime;
 }
 

+ 0 - 12
src/database/db.cpp

@@ -72,7 +72,6 @@ bool Db::iexists(QString column, QString table, QString checkColumn, QString val
         break;
     }
 
-    DEB(statement);
 
     QSqlQuery q(statement);
     q.exec();
@@ -81,7 +80,6 @@ bool Db::iexists(QString column, QString table, QString checkColumn, QString val
         DEB("No result found. Check Query and Error.");
         DEB("Error: " << q.lastError().text());
     } else {
-        DEB("Success. Found a result.");
         output = true;
         if (q.next()) {
             DEB("More than one result in Database for your query");
@@ -117,8 +115,6 @@ QString Db::isingleSelect(QString column, QString table, QString checkColumn, QS
         break;
     }
 
-    DEB(statement);
-
     QSqlQuery q(statement);
     q.exec();
 
@@ -127,7 +123,6 @@ QString Db::isingleSelect(QString column, QString table, QString checkColumn, QS
         DEB("Error: " << q.lastError().text());
         return QString();
     } else {
-        DEB("Success. Found a result.");
         result.append(q.value(0).toString());
         if (q.next()) {
             DEB("More than one result in Database for your query");
@@ -162,8 +157,6 @@ QVector<QString> Db::imultiSelect(QVector<QString> columns, QString table, QStri
         break;
     }
 
-    DEB(statement);
-
     QSqlQuery q(statement);
     q.exec();
 
@@ -198,8 +191,6 @@ QVector<QString> Db::imultiSelect(QVector<QString> columns, QString table)
     }
     statement.append(" FROM " + table);
 
-    DEB(statement);
-
     QSqlQuery q(statement);
     q.exec();
 
@@ -241,8 +232,6 @@ bool Db::isingleUpdate(QString table, QString column, QString value, QString che
         break;
     }
 
-    DEB(statement);
-
     QSqlQuery q(statement);
     q.exec();
     QString error = q.lastError().text();
@@ -261,7 +250,6 @@ bool Db::isingleUpdate(QString table, QString column, QString value, QString che
 QVector<QString> Db::icustomQuery(QString query, int returnValues)
 {
     QSqlQuery q(query);
-    DEB(query);
     q.exec();
 
     if (!q.first()) {

+ 1 - 0
src/database/entry.cpp

@@ -196,6 +196,7 @@ bool Entry::update()
     statement.append(QLatin1String(" WHERE _rowid_=") + QString::number(position.second));
 
     //execute query
+    DEB("UPDATE QUERY: " << statement);
     QSqlQuery q(statement);
     //check result. Upon success, error should be " "
     error = q.lastError().text();

+ 274 - 99
src/gui/dialogues/newflight.cpp

@@ -53,7 +53,7 @@ static const auto TIME_INVALID_RGX       = QRegularExpression("[^0-9:]");
 static const auto LOC_INVALID_RGX        = QRegularExpression("[^A-Z0-9]");
 static const auto AIRCRAFT_INVALID_RGX   = QRegularExpression("[^a-zA-Z0-9\\-]");
 static const auto PILOT_NAME_INVALID_RGX = QRegularExpression("[^\\p{L}|\\s|,]");
-static const auto INVALID_CHARS_RGX      = QRegularExpression("[^\\p{L}|\\s|,|\\-|']");
+static const auto INVALID_CHARS_RGX      = QRegularExpression("[^\\p{L}|\\s|,|\\-|'|0-9|:]");
 
 /// Sql columns
 static const auto LOC_SQL_COL        = SqlColumnNum(1);  // TODO: locations are iata/icao so 1,2 merge columns in sql?
@@ -72,7 +72,21 @@ NewFlight::NewFlight(QWidget *parent, Db::editRole edRole) :
 {
     ui->setupUi(this);
     role = edRole;
+    doUpdate = true;
     setup();
+    //set date for new object
+    auto date = QDate::currentDate();
+    ui->doftDateEdit->setDate(date);
+
+    // Visually mark mandatory fields
+    ui->deptLocLineEdit->setStyleSheet("border: 1px solid orange");
+    ui->destLocLineEdit->setStyleSheet("border: 1px solid orange");
+    ui->tofbTimeLineEdit->setStyleSheet("border: 1px solid orange");
+    ui->tonbTimeLineEdit->setStyleSheet("border: 1px solid orange");
+    ui->picNameLineEdit->setStyleSheet("border: 1px solid orange");
+    ui->acftLineEdit->setStyleSheet("border: 1px solid orange");
+
+    readSettings();
 }
 //For editing an existing flight
 NewFlight::NewFlight(QWidget *parent, Flight oldFlight, Db::editRole edRole) :
@@ -82,6 +96,7 @@ NewFlight::NewFlight(QWidget *parent, Flight oldFlight, Db::editRole edRole) :
     ui->setupUi(this);
     role=edRole;
     entry = oldFlight;
+    doUpdate = true;
     setup();
     formFiller(oldFlight);
 }
@@ -159,19 +174,6 @@ void NewFlight::setup(){
     PilotTaskGroup->addButton(ui->PilotFlyingCheckBox);
     PilotTaskGroup->addButton(ui->PilotMonitoringCheckBox);
 
-    //set date for new object
-    auto date = QDate::currentDate();
-    ui->newDoft->setDate(date);
-
-    // Visually mark mandatory fields
-    ui->deptLocLineEdit->setStyleSheet("border: 1px solid orange");
-    ui->destLocLineEdit->setStyleSheet("border: 1px solid orange");
-    ui->tofbTimeLineEdit->setStyleSheet("border: 1px solid orange");
-    ui->tonbTimeLineEdit->setStyleSheet("border: 1px solid orange");
-    ui->picNameLineEdit->setStyleSheet("border: 1px solid orange");
-    ui->acftLineEdit->setStyleSheet("border: 1px solid orange");
-
-    readSettings();
     ui->flightDataTabWidget->setCurrentIndex(0);
     ui->deptLocLineEdit->setFocus();
 }
@@ -179,7 +181,12 @@ void NewFlight::setup(){
 void NewFlight::formFiller(Flight oldFlight)
 {
     DEBUG("Filling Line Edits...");
+    DEBUG("With Data: " << oldFlight.data);
+    // Date
+    ui->doftDateEdit->setDate(QDate::fromString(oldFlight.data.value("doft"), Qt::ISODate));
     QStringList filled;
+
+    // Line Edits
     auto line_edits = parent()->findChildren<QLineEdit *>();
     QStringList line_edits_names;
     for(const auto& le : line_edits){
@@ -224,6 +231,7 @@ void NewFlight::formFiller(Flight oldFlight)
                 //DEBUG("Time Match found: " << key << " - " << leName);
                 auto le = parent()->findChild<QLineEdit *>(leName);
                 if(le != nullptr){
+                    DEBUG("Setting " << le->objectName() << " to " << Calc::minutesToString(oldFlight.data.value(key)));
                     le->setText(Calc::minutesToString(
                                 oldFlight.data.value(key)));
                     filled << leName;
@@ -250,13 +258,67 @@ void NewFlight::formFiller(Flight oldFlight)
             }
         }
     }
+    //FunctionComboBox
+    QList<QLineEdit*> FCB = {ui->tPICTimeLineEdit,  ui->tPICUSTimeLineEdit, ui->tSICTimeLineEdit,
+                             ui->tDualTimeLineEdit, ui->tFITimeLineEdit};
+    for(const auto& le : FCB){
+        if(le->text() != "00:00"){
+            QString name = le->objectName();
+            name.chop(12);
+            name.remove(0,1);
+            ui->FunctionComboBox->setCurrentText(name);
+        }
+    }
+    // Approach Combo Box
+    const QString& app = oldFlight.data.value("ApproachType");
+    if(app != " "){
+        ui->ApproachComboBox->setCurrentText(app);
+    }
+    // Task and Rules
+    qint8 PF = oldFlight.data.value("pilotFlying").toInt();
+    if (PF > 0) {
+        ui->PilotFlyingCheckBox->setChecked(true);
+    } else {
+        ui->PilotMonitoringCheckBox->setChecked(true);
+    }
+    qint8 FR = oldFlight.data.value("tIFR").toInt();
+    if (FR > 0) {
+        ui->IfrCheckBox->setChecked(true);
+    } else {
+        ui->tIFRTimeLineEdit->setText("00:00");
+        ui->VfrCheckBox->setChecked(true);
+    }
+    // Take Off and Landing
+    qint8 TO = oldFlight.data.value("toDay").toInt() + oldFlight.data.value("toNight").toInt();
+    qint8 LDG = oldFlight.data.value("ldgDay").toInt() + oldFlight.data.value("ldgNight").toInt();
+    DEBUG("TO and LDG:" << TO << LDG);
+    if(TO > 0) {
+        ui->TakeoffCheckBox->setChecked(true);
+        ui->TakeoffSpinBox->setValue(TO);
+    } else {
+        ui->TakeoffCheckBox->setChecked(false);
+        ui->TakeoffSpinBox->setValue(0);
+    }
+    if(LDG > 0) {
+        ui->LandingCheckBox->setChecked(true);
+        ui->LandingSpinBox->setValue(LDG);
+    } else {
+        ui->LandingCheckBox->setChecked(false);
+        ui->LandingSpinBox->setValue(0);
+    }
+    qint8 AL = oldFlight.data.value("autoland").toInt();
+    if(AL > 0) {
+        ui->AutolandCheckBox->setChecked(true);
+        ui->AutolandSpinBox->setValue(AL);
+    }
+
     for(const auto& le : mandatoryLineEdits){
         emit le->editingFinished();
     }
-    DEBUG("Filled: ");
-    DEBUG(filled);
-    DEBUG("Unfilled: ");
-    DEBUG(line_edits_names);
+    //DEBUG("Filled: ");
+    //DEBUG(filled);
+    //DEBUG("Unfilled: ");
+    //DEBUG(line_edits_names);
 }
 
 /*
@@ -339,7 +401,7 @@ void NewFlight::readSettings()
     ui->AutolandCheckBox->setChecked(Settings::read("NewFlight/AutolandCheckBox").toInt());
     ui->IfrCheckBox->setChecked(Settings::read("NewFlight/IfrCheckBox").toInt());
     ui->VfrCheckBox->setChecked(Settings::read("NewFlight/VfrCheckBox").toInt());
-    ui->FlightNumberLineEdit->setText(Settings::read("userdata/flightnumberPrefix").toString() + QLatin1Char('-'));
+    ui->FlightNumberLineEdit->setText(Settings::read("flightlogging/flightnumberPrefix").toString());
 
     if(Settings::read("NewFlight/FunctionComboBox").toString() == "PIC"){
         ui->picNameLineEdit->setText("self");
@@ -378,19 +440,21 @@ void NewFlight::addNewPilotMessageBox()
  */
 void NewFlight::update()
 {
-    QVector<QLineEdit*> notFilled;
-    for(auto lineEdit : mandatoryLineEdits)
-    {
-        if(!allOkBits.testBit(lineEditBitMap[lineEdit]))
+    if(doUpdate){
+        QVector<QLineEdit*> notFilled;
+        for(auto lineEdit : mandatoryLineEdits)
         {
-            notFilled.push_back(lineEdit);
+            if(!allOkBits.testBit(lineEditBitMap[lineEdit]))
+            {
+                notFilled.push_back(lineEdit);
+            }
+        }
+        if(notFilled.empty()){
+            collectBasicData();
+            fillExtras();
+        } else {
+            DEBUG("No update - not enough variables known.");
         }
-    }
-    if(notFilled.empty()){
-        collectBasicData();
-        fillExtras();
-    } else {
-        DEBUG("No update - not enough variables known.");
     }
 }
 
@@ -401,9 +465,11 @@ void NewFlight::update()
  */
 void NewFlight::collectBasicData()
 {
+    // purge old data to ensure database integrity
+    newData.clear();
     DEBUG("Collecting Basic Input...");
     // Date of Flight
-    auto date = ui->newDoft->date();
+    auto date = ui->doftDateEdit->date();
     auto doft = date.toString(Qt::ISODate);
     newData.insert("doft",doft);
     // Departure Loc
@@ -456,8 +522,6 @@ void NewFlight::collectBasicData()
             }
         }
     }
-    DEBUG(newData);
-    DEBUG("Basic Input Collected. Should be 7 items. is:" << newData.count());
 }
 
 void NewFlight::collectAdditionalData()
@@ -511,39 +575,38 @@ void NewFlight::collectAdditionalData()
     auto tonb = QTime::fromString(ui->tonbTimeLineEdit->text(),"hh:mm");
     QString blockTime = Calc::blocktime(tofb, tonb).toString("hh:mm");
     QString blockMinutes = QString::number(Calc::stringToMinutes(blockTime));
-    DEBUG("Blocktime: " << blockTime << " (" << blockMinutes << " minutes)");
-
 
     auto acft = Aircraft(newData.value("acft").toInt());
 
-    DEBUG("aircraftDetails: " << acft);
     if(!acft.data.isEmpty()){// valid aircraft
         // SP SE
         if(acft.data.value("singlepilot") == "1" && acft.data.value("singleengine") == "1"){
-            DEBUG("SPSE yes");
             newData.insert("tSPSE", blockMinutes);
+            newData.insert("tSPME", "");
+            newData.insert("tMP", "");
         }
         // SP ME
         if(acft.data.value("singlepilot") == "1" && acft.data.value("multiengine") == "1"){
-            DEBUG("SP ME yes");
+            newData.insert("tSPSE", "");
             newData.insert("tSPME", blockMinutes);
+            newData.insert("tMP", "");
         }
         // MP
         if(acft.data.value("multipilot") == "1"){
-            DEBUG("Multipilot yes");
+            newData.insert("tSPSE", "");
+            newData.insert("tSPME", "");
             newData.insert("tMP", blockMinutes);
         }
     }else{DEBUG("Aircraft Details Empty");}//invalid aircraft
 
-    // TOTAL
-    newData.insert("tblk",blockMinutes);
     // IFR
     if(ui->IfrCheckBox->isChecked()){
         newData.insert("tIFR",blockMinutes);
-
+    } else {
+        newData.insert("tIFR","");
     }
     // Night
-    QString deptDate = ui->newDoft->date().toString(Qt::ISODate) + 'T' + tofb.toString("hh:mm");
+    QString deptDate = ui->doftDateEdit->date().toString(Qt::ISODate) + 'T' + tofb.toString("hh:mm");
     QDateTime deptDateTime = QDateTime::fromString(deptDate,"yyyy-MM-ddThh:mm");
     int tblk = blockMinutes.toInt();
     const int nightAngle = Settings::read("flightlogging/nightangle").toInt();
@@ -556,54 +619,91 @@ void NewFlight::collectAdditionalData()
     // Function times
     switch (ui->FunctionComboBox->currentIndex()) {
     case 0://PIC
-        newData.insert("tPIC",blockMinutes);
+        newData.insert("tPIC", blockMinutes);
+        newData.insert("tPICUS", "");
+        newData.insert("tSIC", "");
+        newData.insert("tDual", "");
+        newData.insert("tFI", "");
         break;
-    case 1://Co-Pilot
-        newData.insert("tSIC",blockMinutes);
+    case 1://PICUS
+        newData.insert("tPIC", "");
+        newData.insert("tPICUS", blockMinutes);
+        newData.insert("tSIC", "");
+        newData.insert("tDual", "");
+        newData.insert("tFI", "");
         break;
-    case 2://Dual
+    case 2://Co-Pilot
+        newData.insert("tPIC", "");
+        newData.insert("tPICUS", "");
+        newData.insert("tSIC", blockMinutes);
+        newData.insert("tDual", "");
+        newData.insert("tFI", "");
+        break;
+    case 3://Dual
+        newData.insert("tPIC", "");
+        newData.insert("tPICUS", "");
+        newData.insert("tSIC", "");
         newData.insert("tDual", blockMinutes);
+        newData.insert("tFI", "");
         break;
-    case 3://Instructor
+    case 4://Instructor
+        newData.insert("tPIC", "");
+        newData.insert("tPICUS", "");
+        newData.insert("tSIC", "");
+        newData.insert("tDual", "");
         newData.insert("tFI", blockMinutes);
     }
-    // Auto-Logging
+    // Pilot Flying
     newData.insert("pilotFlying", QString::number(ui->PilotFlyingCheckBox->isChecked()));
-    if(nightTime == "0"){ // all day
-        DEBUG("All Day.");
-        newData.insert("toDay", QString::number(ui->TakeoffSpinBox->value()));
-        newData.insert("ldgDay", QString::number(ui->LandingSpinBox->value()));
-        newData.insert("toNight", "0");
-        newData.insert("ldgNight", "0");
-    }else if (nightTime == blockTime) { // all night
-        DEBUG("All Night.");
-        newData.insert("toNight", QString::number(ui->TakeoffSpinBox->value()));
-        newData.insert("ldgNight", QString::number(ui->LandingSpinBox->value()));
-        newData.insert("toDay", "0");
-        newData.insert("ldgDay", "0");
-    } else {
-        if(Calc::isNight(ui->deptLocLineEdit->text(), deptDateTime,  nightAngle)){
-            newData.insert("toNight", QString::number(ui->TakeoffSpinBox->value()));
-            newData.insert("toDay", "0");
-        }else{
+    // TO and LDG
+    if(ui->TakeoffCheckBox->isChecked()) {
+        if(nightTime == "0"){ // all day
             newData.insert("toDay", QString::number(ui->TakeoffSpinBox->value()));
             newData.insert("toNight", "0");
+        }else if (nightTime == blockTime) { // all night
+            newData.insert("toDay", "0");
+            newData.insert("toNight", QString::number(ui->TakeoffSpinBox->value()));
+        } else { //check
+            if(Calc::isNight(ui->deptLocLineEdit->text(), deptDateTime,  nightAngle)){
+                newData.insert("toDay", "0");
+                newData.insert("toNight", QString::number(ui->TakeoffSpinBox->value()));
+            }else{
+                newData.insert("toDay", QString::number(ui->TakeoffSpinBox->value()));
+                newData.insert("toNight", "0");
+            }
         }
-        QString destDate = ui->newDoft->date().toString(Qt::ISODate) + 'T' + tonb.toString("hh:mm");
-        QDateTime destDateTime = QDateTime::fromString(destDate,"yyyy-MM-ddThh:mm");
-        if(Calc::isNight(ui->destLocLineEdit->text(), destDateTime,  nightAngle)){
-            newData.insert("ldgNight", QString::number(ui->LandingSpinBox->value()));
-            newData.insert("ldgDay", "0");
-        }else{
+    } else {
+        newData.insert("toDay", "0");
+        newData.insert("toNight", "0");
+    }
+
+    if(ui->LandingCheckBox->isChecked()) {
+        if(nightTime == "0"){ // all day
             newData.insert("ldgDay", QString::number(ui->LandingSpinBox->value()));
             newData.insert("ldgNight", "0");
+        }else if (nightTime == blockTime) { // all night
+            newData.insert("ldgDay", "0");
+            newData.insert("ldgNight", QString::number(ui->LandingSpinBox->value()));
+        } else { //check
+            QString destDate = ui->doftDateEdit->date().toString(Qt::ISODate) + 'T' + tonb.toString("hh:mm");
+            QDateTime destDateTime = QDateTime::fromString(destDate,"yyyy-MM-ddThh:mm");
+            if(Calc::isNight(ui->destLocLineEdit->text(), destDateTime,  nightAngle)){
+                newData.insert("ldgDay", "0");
+                newData.insert("ldgNight", QString::number(ui->LandingSpinBox->value()));
+            }else{
+                newData.insert("ldgDay", QString::number(ui->LandingSpinBox->value()));
+                newData.insert("ldgNight", "0");
+            }
         }
+    } else {
+        newData.insert("ldgDay", "0");
+        newData.insert("ldgNight", "0");
     }
+
     newData.insert("autoland", QString::number(ui->AutolandSpinBox->value()));
     newData.insert("ApproachType", ui->ApproachComboBox->currentText());
     newData.insert("FlightNumber", ui->FlightNumberLineEdit->text());
     newData.insert("Remarks", ui->RemarksLineEdit->text());
-    DEBUG("Collected Data: " << newData);
 }
 /*!
  * \brief NewFlight::fillExtrasLineEdits Fills the deductable items in the newData map and
@@ -626,10 +726,9 @@ void NewFlight::fillExtras()
     auto tonb = QTime::fromString(ui->tonbTimeLineEdit->text(),"hh:mm");
     QString blockTime = Calc::blocktime(tofb, tonb).toString("hh:mm");
     QString blockMinutes = QString::number(Calc::stringToMinutes(blockTime));
-    DEBUG("Blocktime: " << blockTime << " (" << blockMinutes << " minutes)");
+    ui->tblkTimeLineEdit->setText(blockTime);
     auto acft = Aircraft(newData.value("acft").toInt());
 
-    DEBUG("aircraftDetails: " << acft);
     if(!acft.data.isEmpty()){// valid aircraft
         // SP SE
         if(acft.data.value("singlepilot") == "1" && acft.data.value("singleengine") == "1"){
@@ -657,7 +756,7 @@ void NewFlight::fillExtras()
         ui->tIFRLabel->setText(blockTime);
     }
     // Night
-    QString deptDate = ui->newDoft->date().toString(Qt::ISODate) + 'T' + tofb.toString("hh:mm");
+    QString deptDate = ui->doftDateEdit->date().toString(Qt::ISODate) + 'T' + tofb.toString("hh:mm");
     QDateTime deptDateTime = QDateTime::fromString(deptDate,"yyyy-MM-ddThh:mm");
     int tblk = blockMinutes.toInt();
     const int nightAngle = Settings::read("flightlogging/nightangle").toInt();
@@ -674,15 +773,19 @@ void NewFlight::fillExtras()
         ui->tPICTimeLineEdit->setText(blockTime);
         ui->tPICLabel->setText(blockTime);
         break;
-    case 1://Co-Pilot
+    case 1://PICus
+        ui->tPICUSTimeLineEdit->setText(blockTime);
+        ui->tPICUSLabel->setText(blockTime);
+        break;
+    case 2://Co-Pilot
         ui->tSICTimeLineEdit->setText(blockTime);
         ui->tSICLabel->setText(blockTime);
         break;
-    case 2://Dual
+    case 3://Dual
         ui->tDualTimeLineEdit->setText(blockTime);
         ui->tDualLabel->setText(blockTime);
         break;
-    case 3://Instructor
+    case 4://Instructor
         ui->tFITimeLineEdit->setText(blockTime);
         ui->tFILabel->setText(blockTime);
     }
@@ -734,9 +837,15 @@ void NewFlight::on_buttonBox_accepted()
         switch (role) {
         case Db::editExisting:
             entry.setData(newData);
+            DEBUG("Editing entry: " << entry.position.first << " - " << entry.position.second);
+            DEBUG("with Data: " << newData);
+            DEBUG("Function Times: " << newData.value("tPIC") << newData.value("tPICus") << newData.value("tSIC")
+                  << newData.value("tDual") << newData.value("tFI"));
             break;
         case Db::createNew:
             entry = Flight(newData);
+            DEBUG("Creating New entry: " << entry.position.first << " - " << entry.position.second);
+            DEBUG("with Data: " << newData);
             break;
         }
 
@@ -764,17 +873,15 @@ void NewFlight::on_buttonBox_rejected()
  * valid characters are kept on the line edit.
  */
 void NewFlight::onInputRejected(QLineEdit* line_edit, QRegularExpression rgx){
-    DEBUG("Input rejected" << line_edit->text());
+    //DEBUG("Input rejected" << line_edit->text());
     line_edit->setStyleSheet("border: 1px solid red");
     this->allOkBits.setBit(this->lineEditBitMap[line_edit], false);
     auto text = line_edit->text();
     if(!rgx.match(text).hasMatch())
     {
-        DEBUG("1");
         line_edit->setText(text);
     }
     if(INVALID_CHARS_RGX.match(text).hasMatch()){//remove globaly inacceptable chars
-        DEBUG("invalid char");
         text.chop(1);
         line_edit->setText(text);
     }
@@ -785,7 +892,7 @@ void NewFlight::onInputRejected(QLineEdit* line_edit, QRegularExpression rgx){
  */
 void NewFlight::onEditingFinishedCleanup(QLineEdit* line_edit)
 {
-    DEBUG("Input accepted" << line_edit << line_edit->text());
+    //DEBUG("Input accepted" << line_edit << line_edit->text());
     line_edit->setStyleSheet("");
     this->allOkBits.setBit(this->lineEditBitMap[line_edit], true);
 }
@@ -810,7 +917,7 @@ void NewFlight::on_destTZ_currentIndexChanged(const QString &arg1)
 
 void NewFlight::on_deptLocLineEdit_inputRejected()
 {
-    DEBUG("SENDER --->" << sender());
+    //DEBUG("SENDER --->" << sender());
     ui->deptLocLineEdit->setText(ui->deptLocLineEdit->text().toUpper());
     onInputRejected(ui->deptLocLineEdit, QRegularExpression(LOC_INVALID_RGX));
 }
@@ -822,7 +929,7 @@ void NewFlight::on_deptLocLineEdit_textEdited(const QString &arg1)
 
 void NewFlight::on_deptLocLineEdit_editingFinished()
 {
-    DEBUG(sender()->objectName() << "EDITING FINISHED");
+    //DEBUG(sender()->objectName() << "EDITING FINISHED");
     auto line_edit = ui->deptLocLineEdit;
     auto text = ui->deptLocLineEdit->text();
 
@@ -832,11 +939,11 @@ void NewFlight::on_deptLocLineEdit_editingFinished()
     }
     // Check if 4-letter code is in locationList
     if(text.length() == 4 && airports.indexOf(text) == -1){
-        DEBUG("Airport not found.");
+        //DEBUG("Airport not found.");
         emit line_edit->inputRejected();
         return;
     }else{
-        DEBUG("Departure accepted: " << text);
+        //DEBUG("Departure accepted: " << text);
         line_edit->setText(text);
         onEditingFinishedCleanup(line_edit); //reset style sheet
         ui->deptNameLabel->setText(Db::singleSelect("name","airports","icao",text,Db::exactMatch));
@@ -860,7 +967,7 @@ void NewFlight::on_tofbTimeLineEdit_editingFinished()
     if(time.isValid()){
         int minutes = time.hour() * 60 + time.minute();
         QString tofb = QString::number(minutes);
-        DEBUG("Time Off Blocks accepted: " << tofb << " minutes - " << Calc::minutesToString(tofb));
+        //DEBUG("Time Off Blocks accepted: " << tofb << " minutes - " << Calc::minutesToString(tofb));
     }else{
         emit line_edit->inputRejected();
     }
@@ -883,7 +990,7 @@ void NewFlight::on_destLocLineEdit_textEdited(const QString &arg1)
 
 void NewFlight::on_destLocLineEdit_editingFinished()
 {
-    DEBUG(sender()->objectName() << "EDITING FINISHED");
+    //DEBUG(sender()->objectName() << "EDITING FINISHED");
     auto line_edit = ui->destLocLineEdit;
     auto text = ui->destLocLineEdit->text();
 
@@ -893,11 +1000,11 @@ void NewFlight::on_destLocLineEdit_editingFinished()
     }
     // Check if 4-letter code is in locationList
     if(text.length() == 4 && airports.indexOf(text) == -1){
-        DEBUG("Airport not found.");
+        //DEBUG("Airport not found.");
         emit line_edit->inputRejected();
         return;
     }else{
-        DEBUG("Destination accepted: " << text);
+        //DEBUG("Destination accepted: " << text);
         line_edit->setText(text);
         onEditingFinishedCleanup(line_edit); //reset style sheet
         ui->destNameLabel->setText(Db::singleSelect("name","airports","icao",text,Db::exactMatch));
@@ -919,7 +1026,7 @@ void NewFlight::on_tonbTimeLineEdit_editingFinished()
         int minutes = time.hour() * 60 + time.minute();
         QString tonb = QString::number(minutes);
         newData.insert("tonb",tonb);
-        DEBUG("Time On Blocks accepted: " << tonb << " minutes - " << Calc::minutesToString(tonb));
+        //DEBUG("Time On Blocks accepted: " << tonb << " minutes - " << Calc::minutesToString(tonb));
     }else{
         emit line_edit->inputRejected();
     }
@@ -949,7 +1056,7 @@ void NewFlight::on_acftLineEdit_editingFinished()
     auto text = ui->acftLineEdit->text();
 
     QStringList match = registrationList.filter(line_edit->text(), Qt::CaseInsensitive);
-    DEBUG("aircraft accepted: " << match);
+    //DEBUG("aircraft accepted: " << match);
     if(match.length() != 0) {
         text = match[0];
         line_edit->setText(text.toUpper());
@@ -977,7 +1084,7 @@ void NewFlight::on_picNameLineEdit_editingFinished()
     auto text = line_edit->text();
     if(text == "self" || text == "SELF") // Logbook owner is PIC
     {
-        DEBUG("Pilot selected: " << text);
+        //DEBUG("Pilot selected: " << text);
         onEditingFinishedCleanup(line_edit);
         ui->FunctionComboBox->setCurrentIndex(0);
         update();
@@ -991,7 +1098,7 @@ void NewFlight::on_picNameLineEdit_editingFinished()
         {
             QString pic = match[0];
             line_edit->setText(pic.insert(pic.indexOf(',')+1," "));
-            DEBUG("Pilot selected: " << pic);
+            //DEBUG("Pilot selected: " << pic);
             onEditingFinishedCleanup(line_edit);
             update();
         }else
@@ -1023,7 +1130,7 @@ void NewFlight::on_secondPilotNameLineEdit_editingFinished()
     auto text = line_edit->text();
     if(text == "self" || text == "SELF") // Logbook owner is Pilot
     {
-        DEBUG("Pilot selected: " << text);
+        //DEBUG("Pilot selected: " << text);
         onEditingFinishedCleanup(line_edit);
         ui->FunctionComboBox->setCurrentIndex(1);
         return;
@@ -1036,7 +1143,7 @@ void NewFlight::on_secondPilotNameLineEdit_editingFinished()
         {
             QString pic = match[0];
             line_edit->setText(pic.insert(pic.indexOf(',')+1," "));
-            DEBUG("Pilot selected: " << pic);
+            //DEBUG("Pilot selected: " << pic);
             onEditingFinishedCleanup(line_edit);
         }else
         {
@@ -1058,7 +1165,7 @@ void NewFlight::on_thirdPilotNameLineEdit_editingFinished()
     auto text = line_edit->text();
     if(text == "self" || text == "SELF") // Logbook owner is Pilot
     {
-        DEBUG("Pilot selected: " << text);
+        //DEBUG("Pilot selected: " << text);
         onEditingFinishedCleanup(line_edit);
         return;
     }else //check if entry is in pilotList
@@ -1070,7 +1177,7 @@ void NewFlight::on_thirdPilotNameLineEdit_editingFinished()
         {
             QString pic = match[0];
             line_edit->setText(pic.insert(pic.indexOf(',')+1," "));
-            DEBUG("Pilot selected: " << pic);
+            //DEBUG("Pilot selected: " << pic);
             onEditingFinishedCleanup(line_edit);
         }else
         {
@@ -1113,6 +1220,7 @@ void NewFlight::on_restoreDefaultButton_clicked()
  */
 void NewFlight::on_PilotFlyingCheckBox_stateChanged(int)
 {
+    DEBUG("PF checkbox state changed.");
     if(ui->PilotFlyingCheckBox->isChecked()){
         ui->TakeoffSpinBox->setValue(1);
         ui->TakeoffCheckBox->setCheckState(Qt::Checked);
@@ -1127,6 +1235,11 @@ void NewFlight::on_PilotFlyingCheckBox_stateChanged(int)
     }
 }
 
+void NewFlight::on_IfrCheckBox_stateChanged()
+{
+    update();
+}
+
 void NewFlight::on_ApproachComboBox_currentTextChanged(const QString &arg1)
 {
     if(arg1 == "ILS CAT III"){  //for a CAT III approach an Autoland is mandatory, so we can preselect it.
@@ -1195,6 +1308,16 @@ inline bool NewFlight::isLessOrEqualToTotalTime(QString timeString)
 
 }
 
+void NewFlight::on_tblkTimeLineEdit_editingFinished()
+{
+    const auto &le = ui->tblkTimeLineEdit;
+    le->setText(Calc::formatTimeInput(le->text()));
+    const auto &text = le->text();
+
+    newData.insert("tblk",QString::number(Calc::stringToMinutes(text)));
+    le->setText(QString());
+}
+
 void NewFlight::on_tSPSETimeLineEdit_editingFinished()
 {
     const auto &le = ui->tSPSETimeLineEdit;
@@ -1321,11 +1444,14 @@ void NewFlight::on_manualEditingCheckBox_stateChanged(int arg1)
     case 0:
         for(const auto& le : LE){
             le->setFocusPolicy(Qt::NoFocus);
+            doUpdate = true;
+            update();
         }
         break;
     case 2:
         for(const auto& le : LE){
             le->setFocusPolicy(Qt::StrongFocus);
+            doUpdate = false;
         }
         break;
     default:
@@ -1335,5 +1461,54 @@ void NewFlight::on_manualEditingCheckBox_stateChanged(int arg1)
 
 void NewFlight::on_FunctionComboBox_currentTextChanged()
 {
+    DEBUG("Current Index:" << ui->FunctionComboBox->currentIndex());
     update();
 }
+
+void NewFlight::on_TakeoffSpinBox_valueChanged(int arg1)
+{
+    if(arg1 > 0) {
+        ui->TakeoffCheckBox->setChecked(true);
+    }
+}
+
+void NewFlight::on_LandingSpinBox_valueChanged(int arg1)
+{
+    if(arg1 > 0) {
+        ui->LandingCheckBox->setChecked(true);
+    }
+}
+
+void NewFlight::on_AutolandSpinBox_valueChanged(int arg1)
+{
+    if(arg1 > 0) {
+        ui->AutolandCheckBox->setChecked(true);
+    }
+}
+
+void NewFlight::on_TakeoffCheckBox_stateChanged(int arg1)
+{
+    if(arg1 == 0) {
+        ui->TakeoffSpinBox->setValue(0);
+    } else if ( arg1 == 2) {
+        ui->TakeoffSpinBox->setValue(1);
+    }
+}
+
+void NewFlight::on_LandingCheckBox_stateChanged(int arg1)
+{
+    if(arg1 == 0) {
+        ui->LandingSpinBox->setValue(0);
+    } else if ( arg1 == 2) {
+        ui->LandingSpinBox->setValue(1);
+    }
+}
+
+void NewFlight::on_AutolandCheckBox_stateChanged(int arg1)
+{
+    if(arg1 == 0) {
+        ui->AutolandSpinBox->setValue(0);
+    } else if ( arg1 == 2) {
+        ui->AutolandSpinBox->setValue(1);
+    }
+}

+ 17 - 0
src/gui/dialogues/newflight.h

@@ -175,12 +175,29 @@ private slots:
 
     void on_FunctionComboBox_currentTextChanged();
 
+    void on_tblkTimeLineEdit_editingFinished();
+
+    void on_IfrCheckBox_stateChanged();
+
+    void on_TakeoffSpinBox_valueChanged(int arg1);
+
+    void on_LandingSpinBox_valueChanged(int arg1);
+
+    void on_AutolandSpinBox_valueChanged(int arg1);
+
+    void on_TakeoffCheckBox_stateChanged(int arg1);
+
+    void on_LandingCheckBox_stateChanged(int arg1);
+
+    void on_AutolandCheckBox_stateChanged(int arg1);
+
 signals:
     void mandatoryFieldsValid(NewFlight* nf);
 
 private:
     Db::editRole role;
     Flight entry;
+    bool doUpdate;
     Ui::NewFlight *ui;
     QMap<QLineEdit*, int> lineEditBitMap;
     QVector<QLineEdit*> mandatoryLineEdits;

+ 19 - 4
src/gui/dialogues/newflight.ui

@@ -193,7 +193,7 @@
         </widget>
        </item>
        <item row="0" column="2">
-        <widget class="QDateEdit" name="newDoft">
+        <widget class="QDateEdit" name="doftDateEdit">
          <property name="dateTime">
           <datetime>
            <hour>23</hour>
@@ -201,7 +201,7 @@
            <second>0</second>
            <year>2019</year>
            <month>12</month>
-           <day>4</day>
+           <day>3</day>
           </datetime>
          </property>
          <property name="displayFormat">
@@ -861,7 +861,12 @@
          </item>
          <item>
           <property name="text">
-           <string>Co-Pilot</string>
+           <string>PICUS</string>
+          </property>
+         </item>
+         <item>
+          <property name="text">
+           <string>SIC</string>
           </property>
          </item>
          <item>
@@ -1196,7 +1201,7 @@
        <item row="9" column="2">
         <widget class="QLabel" name="picTimeLabel_2">
          <property name="text">
-          <string>PICus</string>
+          <string>PICUS</string>
          </property>
         </widget>
        </item>
@@ -1333,6 +1338,16 @@
          </property>
         </widget>
        </item>
+       <item row="7" column="2">
+        <widget class="QLabel" name="tblkLabel_2">
+         <property name="text">
+          <string>Total</string>
+         </property>
+        </widget>
+       </item>
+       <item row="7" column="4">
+        <widget class="QLineEdit" name="tblkTimeLineEdit"/>
+       </item>
       </layout>
      </widget>
     </widget>

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

@@ -38,7 +38,7 @@ HomeWidget::~HomeWidget()
 
 void HomeWidget::on_pushButton_clicked()
 {
-    NewFlight nf(this, Flight(10), Db::editExisting);
+    NewFlight nf(this, Flight(11), Db::editExisting);
     nf.exec();
 }
 

+ 1 - 0
src/gui/widgets/settingswidget.cpp

@@ -255,6 +255,7 @@ void SettingsWidget::on_nightComboBox_currentIndexChanged(int index)
 void SettingsWidget::on_prefixLineEdit_textChanged(const QString &arg1)
 {
     Settings::write("flightlogging/flightnumberPrefix", arg1);
+
 }
 
 /*