6 #include <QDialogButtonBox>
7 #include <QModelIndexList>
9 #include <QStringBuilder>
11 #include "ui_dbloaddatadialog.h"
20 using namespace swift::misc::network;
21 using namespace swift::misc::simulation;
22 using namespace swift::misc::simulation::data;
28 CDbLoadDataDialog::CDbLoadDataDialog(QWidget *parent) : QDialog(parent), ui(new Ui::
CDbLoadDataDialog)
30 Q_ASSERT_X(
sGui, Q_FUNC_INFO,
"Need sGui");
32 this->setWindowFlags(this->windowFlags() & ~Qt::WindowContextHelpButtonHint);
33 QStringListModel *lvm =
new QStringListModel(ui->lv_Entities);
35 ui->lv_Entities->setModel(lvm);
36 ui->bb_loadDataDialog->button(QDialogButtonBox::Apply)->setText(
"Load");
37 ui->wi_WorkStatus->setVisible(
false);
38 ui->wi_Consolidate->setVisible(
false);
39 ui->comp_SimulatorSelector->setRememberSelection(
true);
41 Qt::QueuedConnection);
43 &CDbLoadDataDialog::onEntityDownloadProgress, Qt::QueuedConnection);
44 connect(ui->bb_loadDataDialog, &QDialogButtonBox::clicked,
this, &CDbLoadDataDialog::onButtonClicked);
45 connect(ui->pb_Consolidate, &QPushButton::clicked,
this, &CDbLoadDataDialog::consolidate);
46 connect(
this, &CDbLoadDataDialog::rejected,
this, &CDbLoadDataDialog::onRejected);
55 if (m_consolidating) {
return false; }
56 if (m_pendingEntities != CEntityFlags::NoEntity) {
return false; }
57 if (loadEntities == CEntityFlags::NoEntity) {
return false; }
58 m_autoConsolidate =
false;
59 const QStringList entitiesStringList = CEntityFlags::entitiesToStringList(loadEntities);
60 this->entitiesModel()->setStringList(entitiesStringList);
61 ui->lv_Entities->selectAll();
65 QStringListModel *CDbLoadDataDialog::entitiesModel()
const
67 return qobject_cast<QStringListModel *>(ui->lv_Entities->model());
70 QStringList CDbLoadDataDialog::selectedEntities()
const
73 const QModelIndexList indexes = ui->lv_Entities->selectionModel()->selectedIndexes();
74 for (
const QModelIndex &index : indexes) { entities.append(index.data(Qt::DisplayRole).toString()); }
78 void CDbLoadDataDialog::onButtonClicked(QAbstractButton *button)
80 if (!button) {
return; }
81 if (button == ui->bb_loadDataDialog->button(QDialogButtonBox::Apply))
83 const QStringList entityList = this->selectedEntities();
84 if (entityList.isEmpty()) {
return; }
85 const CEntityFlags::Entity loadEntities = CEntityFlags::multipleEntitiesByNames(entityList);
87 const int pending = CEntityFlags::numberOfEntities(m_pendingEntities);
89 ui->pb_Loading->setMaximum(m_pendingEntitiesCount > 0 ? m_pendingEntitiesCount : pending);
90 ui->pb_Loading->setValue(0);
91 ui->wi_WorkStatus->setVisible(pending > 0);
92 ui->wi_Consolidate->setVisible(
false);
93 ui->le_Info->setText(
"Loading started ...");
100 if (m_pendingEntities == CEntityFlags::NoEntity) {
return; }
101 if (!m_pendingEntities.testFlag(CEntityFlags::entityToEntityFlag(entity))) {
return; }
103 const QString e = CEntityFlags::entitiesToString(entity);
104 const QString s = CEntityFlags::stateToString(state);
106 ui->le_Info->setText(e % u
" " % s);
107 if (!CEntityFlags::isFinishedReadStateOrFailure(state)) {
return; }
108 if (state == CEntityFlags::ReadFailed)
113 m_pendingEntities &= ~entity;
114 const int pending = CEntityFlags::numberOfEntities(m_pendingEntities);
115 const int max = ui->pb_Loading->maximum();
116 if (m_pendingEntitiesCount < 0) { ui->pb_Loading->setValue(max - pending); }
119 m_pendingEntitiesCount -= number;
120 ui->pb_Loading->setValue(max - m_pendingEntitiesCount);
124 m_pendingEntitiesCount = -1;
125 const bool defaultConsolidate = !ui->cb_AllModels->isChecked() && ui->cb_ModelSet->isChecked();
127 QPointer<CDbLoadDataDialog> myself(
this);
129 if (!myself) {
return; }
130 ui->wi_Consolidate->setVisible(
true);
131 ui->wi_WorkStatus->setVisible(
false);
132 if (defaultConsolidate)
134 m_autoConsolidate =
true;
135 QPointer<CDbLoadDataDialog>
self(
138 if (!
self) {
return; }
146 void CDbLoadDataDialog::onEntityDownloadProgress(CEntityFlags::Entity entity,
int logId,
int progress,
147 qint64 current, qint64 max,
const QUrl &url)
157 void CDbLoadDataDialog::onRejected()
159 m_pendingEntities = CEntityFlags::NoEntity;
160 m_pendingEntitiesCount = -1;
161 m_autoConsolidate =
false;
162 ui->pb_Loading->setVisible(
false);
165 void CDbLoadDataDialog::consolidate()
167 const bool set = ui->cb_ModelSet->isChecked();
168 const bool all = ui->cb_AllModels->isChecked();
169 if (m_consolidating) {
return; }
170 if (!set && !all) {
return; }
171 ui->wi_WorkStatus->setVisible(
true);
172 ui->pb_Loading->setValue(0);
173 ui->pb_Loading->setMaximum(0);
174 const CSimulatorInfo simulator = ui->comp_SimulatorSelector->getValue();
179 ui->le_Info->setText(
"Model set");
181 const int c = CDatabaseUtils::consolidateModelsWithDbDataAllowsGuiRefresh(models,
true,
true);
185 if (!this->isVisible()) {
break; }
188 ui->le_Info->setText(
"All models");
190 const int c = CDatabaseUtils::consolidateModelsWithDbDataAllowsGuiRefresh(models,
true,
true);
196 m_consolidating =
false;
198 QPointer<CDbLoadDataDialog> myself(
this);
200 if (!myself) {
return; }
201 ui->pb_Loading->setMaximum(100);
202 ui->wi_WorkStatus->setVisible(
false);
203 if (m_autoConsolidate)
205 m_autoConsolidate =
false;
CWebDataServices * getWebDataServices() const
Get the web data services.
swift::misc::network::CEntityFlags::Entity triggerLoadingDirectlyFromSharedFiles(swift::misc::network::CEntityFlags::Entity whatToRead, bool checkCacheTsUpfront)
Trigger reload from shared files, loads the data and bypasses caches.
int getDbInfoObjectsCount(swift::misc::network::CEntityFlags::Entity entities, bool stopIfNotFound=true) const
Count for 1-n entities from DB entity objects.
static void modalWindowToFront()
Bring any modal dialog to front.
Load data from DB as dialog.
virtual ~CDbLoadDataDialog()
Destructor.
bool newerOrEmptyEntitiesDetected(swift::misc::network::CEntityFlags::Entity loadEntities)
Newer or empty entities detected.
Class for emitting a log message.
Derived & warning(const char16_t(&format)[N])
Set the severity to warning, providing a format string.
ReadState
State of operation.
Value object encapsulating a list of aircraft models.
Simple hardcoded info about the corresponding simulator.
CAircraftModelList getCachedModels(const CSimulatorInfo &simulator) const
Models for simulator.
CStatusMessage setCachedModels(const CAircraftModelList &models, const CSimulatorInfo &simulator)
Set cached models.
CStatusMessage setCachedModels(const CAircraftModelList &models, const CSimulatorInfo &simulator)
Set cached models.
CAircraftModelList getCachedModels(const CSimulatorInfo &simulator) const
Models for simulator.
SWIFT_GUI_EXPORT swift::gui::CGuiApplication * sGui
Single instance of GUI application object.
Classes interacting with the swift database (aka "datastore").
Backend services of the swift project, like dealing with the network or the simulators.
High level reusable GUI components.
Free functions in swift::misc.
auto singleShot(int msec, QObject *target, F &&task)
Starts a single-shot timer which will call a task in the thread of the given object when it times out...