|
@@ -22,7 +22,7 @@
|
|
|
#define DEB(expr) \
|
|
|
qDebug() << "NewTail ::" << __func__ << "\t" << expr
|
|
|
|
|
|
-//Dialog to be used to edit existing tail
|
|
|
+/*Dialog to be used to edit existing tail
|
|
|
NewTail::NewTail(aircraft acft, QWidget *parent) :
|
|
|
QDialog(parent),
|
|
|
ui(new Ui::NewTail)
|
|
@@ -31,139 +31,108 @@ NewTail::NewTail(aircraft acft, QWidget *parent) :
|
|
|
ui->searchLabel->hide();
|
|
|
ui->searchLineEdit->hide();
|
|
|
formFiller(acft);
|
|
|
-}
|
|
|
+}*/
|
|
|
|
|
|
-//Dialog to be used to create new tail
|
|
|
-NewTail::NewTail(QString newreg, QWidget *parent) :
|
|
|
+//Dialog to be used to create a new tail
|
|
|
+NewTail::NewTail(QString newreg, sql::editRole edRole, QWidget *parent) :
|
|
|
QDialog(parent),
|
|
|
ui(new Ui::NewTail)
|
|
|
{
|
|
|
ui->setupUi(this);
|
|
|
+ role = edRole;
|
|
|
+ setupCompleter();
|
|
|
+
|
|
|
ui->editLabel->hide();
|
|
|
ui->registrationLineEdit->setText(newreg);
|
|
|
-
|
|
|
- //creating a QMap<id,searchstring>
|
|
|
- auto query = QLatin1String("SELECT make||' '||model||'-'||variant, aircraft_id FROM aircraft");
|
|
|
- auto vector = db::customQuery(query,2);
|
|
|
- QMap<QString, int> map;
|
|
|
- for (int i = 0; i < vector.length()-2 ; i += 2){
|
|
|
- if(vector[i] != QLatin1String("")){
|
|
|
- map.insert(vector[i],vector[i+1].toInt());
|
|
|
- }
|
|
|
- }
|
|
|
- //creating QStringlist for QCompleter
|
|
|
- auto cl = new completionList(completerTarget::aircraft);
|
|
|
-
|
|
|
- aircraftlist = cl->list;
|
|
|
- idMap = map;
|
|
|
-
|
|
|
- QCompleter* completer = new QCompleter(aircraftlist,ui->searchLineEdit);
|
|
|
- completer->setCaseSensitivity(Qt::CaseInsensitive);
|
|
|
- completer->setCompletionMode(QCompleter::PopupCompletion);
|
|
|
- completer->setFilterMode(Qt::MatchContains);
|
|
|
- ui->searchLineEdit->setCompleter(completer);
|
|
|
ui->searchLineEdit->setStyleSheet("border: 1px solid blue");
|
|
|
ui->searchLineEdit->setFocus();
|
|
|
}
|
|
|
|
|
|
+//Dialog to be used to edit an existing tail
|
|
|
+NewTail::NewTail(db dbentry, sql::editRole edRole, QWidget *parent) :
|
|
|
+ QDialog(parent),
|
|
|
+ ui(new Ui::NewTail)
|
|
|
+{
|
|
|
+ oldEntry = dbentry;
|
|
|
+ ui->setupUi(this);
|
|
|
+ role = edRole;
|
|
|
+ ui->searchLabel->hide();
|
|
|
+ ui->searchLineEdit->hide();
|
|
|
+ formFiller(dbentry);
|
|
|
+}
|
|
|
|
|
|
NewTail::~NewTail()
|
|
|
{
|
|
|
delete ui;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-/// Slots
|
|
|
-
|
|
|
-void NewTail::on_searchLineEdit_textChanged(const QString &arg1)
|
|
|
+/*!
|
|
|
+ * \brief NewTail::formFiller populates the Dialog with the
|
|
|
+ * information contained in an aircraft object.
|
|
|
+ * \param db - entry retreived from database
|
|
|
+ */
|
|
|
+void NewTail::formFiller(db entry)
|
|
|
{
|
|
|
- if(aircraftlist.contains(arg1)){//equivalent to editing finished for this purpose. todo: consider connecing qcompleter activated signal with editing finished slot.
|
|
|
-
|
|
|
- DEB("Template Selected. aircraft_id is: " << idMap.value(arg1));
|
|
|
- //call autofiller for dialog
|
|
|
- formFiller(aircraft(idMap.value(arg1),aircraft::acft));
|
|
|
- ui->searchLineEdit->setStyleSheet("border: 1px solid green");
|
|
|
- }else{
|
|
|
- //for example, editing finished without selecting a result from Qcompleter
|
|
|
- ui->searchLineEdit->setStyleSheet("border: 1px solid orange");
|
|
|
+ DEB("Filling Form for a/c" << entry);
|
|
|
+ //fill Line Edits
|
|
|
+ auto line_edits = parent()->findChildren<QLineEdit*>();
|
|
|
+ for (const auto& le : line_edits) {
|
|
|
+ QString name = le->objectName();
|
|
|
+ name.chop(8);//remove "LineEdit"
|
|
|
+ QString value = entry.data.value(name);
|
|
|
+ if(!value.isEmpty()){
|
|
|
+ le->setText(value);
|
|
|
+ };
|
|
|
}
|
|
|
-}
|
|
|
+ //select comboboxes
|
|
|
+ QVector<QString> operation = {entry.data.value("singleengine"),entry.data.value("multiengine")};
|
|
|
+ QVector<QString> ppNumber = {entry.data.value("singlepilot"),entry.data.value("multipilot")};
|
|
|
+ QVector<QString> ppType = {entry.data.value("unpowered"),entry.data.value("piston"),
|
|
|
+ entry.data.value("turboprop"),entry.data.value("jet")};
|
|
|
+ QVector<QString> weight = {entry.data.value("light"),entry.data.value("medium"),
|
|
|
+ entry.data.value("heavy"),entry.data.value("super")};
|
|
|
|
|
|
-void NewTail::on_operationComboBox_currentIndexChanged(int index)
|
|
|
-{
|
|
|
- if(index != 0){
|
|
|
- ui->operationComboBox->setStyleSheet("");
|
|
|
- }
|
|
|
-}
|
|
|
|
|
|
-void NewTail::on_ppTypeComboBox_currentIndexChanged(int index)
|
|
|
-{
|
|
|
- if(index != 0){
|
|
|
- ui->ppTypeComboBox->setStyleSheet("");
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-void NewTail::on_ppNumberComboBox_currentIndexChanged(int index)
|
|
|
-{
|
|
|
- if(index != 0){
|
|
|
- ui->ppNumberComboBox->setStyleSheet("");
|
|
|
- }
|
|
|
+ ui->operationComboBox->setCurrentIndex(operation.indexOf("1")+1);
|
|
|
+ ui->ppNumberComboBox->setCurrentIndex(ppNumber.indexOf("1")+1);
|
|
|
+ ui->ppTypeComboBox->setCurrentIndex(ppType.indexOf("1")+1);
|
|
|
+ ui->weightComboBox->setCurrentIndex(weight.indexOf("1")+1);
|
|
|
}
|
|
|
|
|
|
-void NewTail::on_weightComboBox_currentIndexChanged(int index)
|
|
|
-{
|
|
|
- if(index != 0){
|
|
|
- ui->weightComboBox->setStyleSheet("");
|
|
|
- }
|
|
|
-}
|
|
|
+/// Functions
|
|
|
|
|
|
-void NewTail::on_buttonBox_accepted()
|
|
|
+/*!
|
|
|
+ * \brief NewTail::setupCompleter creates a QMap<aircaft_id,searchstring> for auto completion,
|
|
|
+ * obtains a QStringList for QCompleter and sets up search line edit accordingly
|
|
|
+ */
|
|
|
+void NewTail::setupCompleter()
|
|
|
{
|
|
|
- DEB("Button Box Accepted.");
|
|
|
- if(ui->registrationLineEdit->text().isEmpty()){
|
|
|
- auto nope = new QMessageBox(this);
|
|
|
- nope->setText("Registration cannot be empty.");
|
|
|
- nope->show();
|
|
|
- }else{
|
|
|
- if(verify()){
|
|
|
- DEB("Form verified");
|
|
|
- switch (role) {
|
|
|
- case sql::createNew:
|
|
|
- break;
|
|
|
- case sql::editExisting:
|
|
|
- break;
|
|
|
- }
|
|
|
- //auto acOut = createAircraftFromSelection();
|
|
|
- createEntry();
|
|
|
- //commit to database
|
|
|
- //accept();
|
|
|
- }else{
|
|
|
- QMessageBox::StandardButton reply;
|
|
|
- reply = QMessageBox::question(this, "Warning",
|
|
|
- "Some recommended fields are empty.\n\n"
|
|
|
- "If you do not fill out the aircraft details, "
|
|
|
- "it will be impossible to automatically determine Single/Multi Pilot Times or Single/Multi Engine Time."
|
|
|
- "This will also impact statistics and auto-logging capabilites.\n\n"
|
|
|
- "It is highly recommended to fill in all the details.\n\n"
|
|
|
- "Are you sure you want to proceed?",
|
|
|
- QMessageBox::Yes|QMessageBox::No);
|
|
|
- if (reply == QMessageBox::Yes)
|
|
|
- {
|
|
|
- //auto acOut = createAircraftFromSelection();
|
|
|
- //commit to database (?)
|
|
|
- //accept();
|
|
|
- }
|
|
|
+ auto query = QLatin1String("SELECT make||' '||model||'-'||variant, aircraft_id FROM aircraft");
|
|
|
+ auto vector = db::customQuery(query,2);
|
|
|
+ QMap<QString, int> map;
|
|
|
+ for (int i = 0; i < vector.length()-2 ; i += 2){
|
|
|
+ if(vector[i] != QLatin1String("")){
|
|
|
+ map.insert(vector[i],vector[i+1].toInt());
|
|
|
}
|
|
|
}
|
|
|
-}
|
|
|
+ //creating QStringlist for QCompleter
|
|
|
+ auto cl = new completionList(completerTarget::aircraft);
|
|
|
|
|
|
-/// Functions
|
|
|
+ aircraftlist = cl->list;
|
|
|
+ idMap = map;
|
|
|
+
|
|
|
+ QCompleter* completer = new QCompleter(aircraftlist,ui->searchLineEdit);
|
|
|
+ completer->setCaseSensitivity(Qt::CaseInsensitive);
|
|
|
+ completer->setCompletionMode(QCompleter::PopupCompletion);
|
|
|
+ completer->setFilterMode(Qt::MatchContains);
|
|
|
+ ui->searchLineEdit->setCompleter(completer);
|
|
|
+}
|
|
|
|
|
|
/*!
|
|
|
* \brief NewTail::formFiller populates the Dialog with the
|
|
|
* information contained in an aircraft object.
|
|
|
* \param ac
|
|
|
- */
|
|
|
+ *
|
|
|
void NewTail::formFiller(aircraft ac)
|
|
|
{
|
|
|
DEB("Filling Form for a/c" << ac);
|
|
@@ -207,7 +176,7 @@ void NewTail::formFiller(aircraft ac)
|
|
|
}else if (ac.super) {
|
|
|
ui->weightComboBox->setCurrentIndex(4);
|
|
|
}
|
|
|
-}
|
|
|
+}*/
|
|
|
|
|
|
/*!
|
|
|
* \brief NewTail::verify A simple check for empty recommended fields in the form
|
|
@@ -250,11 +219,52 @@ bool NewTail::verify()
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+void NewTail::submitForm(sql::editRole edRole)
|
|
|
+{
|
|
|
+ DEB("Creating Database Object...");
|
|
|
+ QMap<QString,QString> newData;
|
|
|
+ //retreive Line Edits
|
|
|
+ auto line_edits = parent()->findChildren<QLineEdit*>();
|
|
|
+
|
|
|
+ for (const auto& le : line_edits) {
|
|
|
+ QString name = le->objectName();
|
|
|
+ name.chop(8);//remove "LineEdit"
|
|
|
+ if(!le->text().isEmpty()){
|
|
|
+ newData.insert(name,le->text());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //prepare comboboxes
|
|
|
+ QVector<QString> operation = {"singlepilot","multipilot"};
|
|
|
+ QVector<QString> ppNumber = {"singleengine","multiengine"};
|
|
|
+ QVector<QString> ppType = {"unpowered","piston",
|
|
|
+ "turboprop","jet"};
|
|
|
+ QVector<QString> weight = {"light","medium",
|
|
|
+ "heavy","super"};
|
|
|
+
|
|
|
+ newData.insert(operation[ui->operationComboBox->currentIndex()-1],QLatin1String("1"));
|
|
|
+ newData.insert(ppNumber[ui->ppNumberComboBox->currentIndex()-1],QLatin1String("1"));
|
|
|
+ newData.insert(ppType[ui->ppTypeComboBox->currentIndex()-1],QLatin1String("1"));
|
|
|
+ newData.insert(weight[ui->weightComboBox->currentIndex()-1],QLatin1String("1"));
|
|
|
+ //create db object
|
|
|
+ switch (edRole) {
|
|
|
+ case sql::createNew:{
|
|
|
+ auto newEntry = db(sql::tails,newData);;
|
|
|
+ newEntry.commit();
|
|
|
+ break;}
|
|
|
+ case sql::editExisting:
|
|
|
+ oldEntry.setData(newData);
|
|
|
+ oldEntry.update();
|
|
|
+ break;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
/*!
|
|
|
* \brief NewTail::createAircraftFromSelection Creates an aircraft object
|
|
|
* from the current ui selections
|
|
|
* \return
|
|
|
- */
|
|
|
+ *
|
|
|
aircraft NewTail::createAircraftFromSelection()
|
|
|
{
|
|
|
auto newacft = aircraft();
|
|
@@ -294,89 +304,79 @@ aircraft NewTail::createAircraftFromSelection()
|
|
|
newacft.heavy = true;
|
|
|
}
|
|
|
return newacft;
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+}*/
|
|
|
|
|
|
-//=============================DB Object ==================================
|
|
|
+/// Slots
|
|
|
|
|
|
+void NewTail::on_searchLineEdit_textChanged(const QString &arg1)
|
|
|
+{
|
|
|
+ if(aircraftlist.contains(arg1)){//equivalent to editing finished for this purpose. todo: consider connecing qcompleter activated signal with editing finished slot.
|
|
|
|
|
|
+ DEB("Template Selected. aircraft_id is: " << idMap.value(arg1));
|
|
|
+ //call autofiller for dialog
|
|
|
+ formFiller(db(sql::aircraft,idMap.value(arg1)));
|
|
|
+ ui->searchLineEdit->setStyleSheet("border: 1px solid green");
|
|
|
+ }else{
|
|
|
+ //for example, editing finished without selecting a result from Qcompleter
|
|
|
+ ui->searchLineEdit->setStyleSheet("border: 1px solid orange");
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
-//Dialog to be used to edit existing tail
|
|
|
-NewTail::NewTail(db dbentry, sql::editRole edRole, QWidget *parent) :
|
|
|
- QDialog(parent),
|
|
|
- ui(new Ui::NewTail)
|
|
|
+void NewTail::on_operationComboBox_currentIndexChanged(int index)
|
|
|
{
|
|
|
- ui->setupUi(this);
|
|
|
- role = edRole;
|
|
|
- ui->searchLabel->hide();
|
|
|
- ui->searchLineEdit->hide();
|
|
|
- formFiller(dbentry);
|
|
|
+ if(index != 0){
|
|
|
+ ui->operationComboBox->setStyleSheet("");
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
-/*!
|
|
|
- * \brief NewTail::formFiller populates the Dialog with the
|
|
|
- * information contained in an aircraft object.
|
|
|
- * \param db - entry retreived from database
|
|
|
- */
|
|
|
-void NewTail::formFiller(db entry)
|
|
|
+void NewTail::on_ppTypeComboBox_currentIndexChanged(int index)
|
|
|
{
|
|
|
- DEB("Filling Form for a/c" << entry);
|
|
|
- //fill Line Edits
|
|
|
- auto line_edits = parent()->findChildren<QLineEdit*>();
|
|
|
- for (const auto& le : line_edits) {
|
|
|
- QString name = le->objectName();
|
|
|
- name.chop(8);//remove "LineEdit"
|
|
|
- QString value = entry.data.value(name);
|
|
|
- le->setText(value);
|
|
|
+ if(index != 0){
|
|
|
+ ui->ppTypeComboBox->setStyleSheet("");
|
|
|
}
|
|
|
- //select comboboxes
|
|
|
- QVector<QString> operation = {entry.data.value("singleengine"),entry.data.value("multiengine")};
|
|
|
- QVector<QString> ppNumber = {entry.data.value("singlepilot"),entry.data.value("multipilot")};
|
|
|
- QVector<QString> ppType = {entry.data.value("unpowered"),entry.data.value("piston"),
|
|
|
- entry.data.value("turboprop"),entry.data.value("jet")};
|
|
|
- QVector<QString> weight = {entry.data.value("light"),entry.data.value("medium"),
|
|
|
- entry.data.value("heavy"),entry.data.value("super")};
|
|
|
-
|
|
|
+}
|
|
|
|
|
|
- ui->operationComboBox->setCurrentIndex(operation.indexOf("1")+1);
|
|
|
- ui->ppNumberComboBox->setCurrentIndex(ppNumber.indexOf("1")+1);
|
|
|
- ui->ppTypeComboBox->setCurrentIndex(ppType.indexOf("1")+1);
|
|
|
- ui->weightComboBox->setCurrentIndex(weight.indexOf("1")+1);
|
|
|
+void NewTail::on_ppNumberComboBox_currentIndexChanged(int index)
|
|
|
+{
|
|
|
+ if(index != 0){
|
|
|
+ ui->ppNumberComboBox->setStyleSheet("");
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
-void NewTail::createEntry()
|
|
|
+void NewTail::on_weightComboBox_currentIndexChanged(int index)
|
|
|
{
|
|
|
- DEB("Creating Object...");
|
|
|
- QMap<QString,QString> newData;
|
|
|
- //retreive Line Edits
|
|
|
- auto line_edits = parent()->findChildren<QLineEdit*>();
|
|
|
+ if(index != 0){
|
|
|
+ ui->weightComboBox->setStyleSheet("");
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
- for (const auto& le : line_edits) {
|
|
|
- QString name = le->objectName();
|
|
|
- name.chop(8);//remove "LineEdit"
|
|
|
- if(!le->text().isEmpty()){
|
|
|
- newData.insert(name,le->text());
|
|
|
+void NewTail::on_buttonBox_accepted()
|
|
|
+{
|
|
|
+ DEB("Button Box Accepted.");
|
|
|
+ if(ui->registrationLineEdit->text().isEmpty()){
|
|
|
+ auto nope = new QMessageBox(this);
|
|
|
+ nope->setText("Registration cannot be empty.");
|
|
|
+ nope->show();
|
|
|
+ }else{
|
|
|
+ if(verify()){
|
|
|
+ DEB("Form verified");
|
|
|
+ submitForm(role);
|
|
|
+ accept();
|
|
|
+ }else{
|
|
|
+ QMessageBox::StandardButton reply;
|
|
|
+ reply = QMessageBox::question(this, "Warning",
|
|
|
+ "Some recommended fields are empty.\n\n"
|
|
|
+ "If you do not fill out the aircraft details, "
|
|
|
+ "it will be impossible to automatically determine Single/Multi Pilot Times or Single/Multi Engine Time."
|
|
|
+ "This will also impact statistics and auto-logging capabilites.\n\n"
|
|
|
+ "It is highly recommended to fill in all the details.\n\n"
|
|
|
+ "Are you sure you want to proceed?",
|
|
|
+ QMessageBox::Yes|QMessageBox::No);
|
|
|
+ if (reply == QMessageBox::Yes)
|
|
|
+ {
|
|
|
+ submitForm(role);
|
|
|
+ accept();
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- //prepare comboboxes
|
|
|
- QVector<QString> operation = {"singlepilot","multipilot"};
|
|
|
- QVector<QString> ppNumber = {"singleengine","multiengine"};
|
|
|
- QVector<QString> ppType = {"unpowered","piston",
|
|
|
- "turboprop","jet"};
|
|
|
- QVector<QString> weight = {"light","medium",
|
|
|
- "heavy","super"};
|
|
|
-
|
|
|
- newData.insert(operation[ui->operationComboBox->currentIndex()-1],QLatin1String("1"));
|
|
|
- newData.insert(ppNumber[ui->ppNumberComboBox->currentIndex()-1],QLatin1String("1"));
|
|
|
- newData.insert(ppType[ui->ppTypeComboBox->currentIndex()-1],QLatin1String("1"));
|
|
|
- newData.insert(weight[ui->weightComboBox->currentIndex()-1],QLatin1String("1"));
|
|
|
- //create db object
|
|
|
- auto newObject = db(sql::tails,newData);
|
|
|
- //DEB("Committing Succesfull: " << newObject.commit());
|
|
|
}
|