swift
dbaircraftcategorycomponent.cpp
1 // SPDX-FileCopyrightText: Copyright (C) 2019 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
5 
6 #include <QStringBuilder>
7 
8 #include "ui_dbaircraftcategorycomponent.h"
9 
10 #include "core/webdataservices.h"
11 #include "gui/guiapplication.h"
12 
13 using namespace swift::core;
14 using namespace swift::misc::network;
15 using namespace swift::misc::aviation;
16 using namespace swift::gui::views;
17 
18 namespace swift::gui::components
19 {
20  CDbAircraftCategoryComponent::CDbAircraftCategoryComponent(QWidget *parent)
22  {
23  ui->setupUi(this);
24  this->setViewWithIndicator(ui->tvp_AircraftCategoryView);
25 
26  ui->tvp_AircraftCategoryView->setResizeMode(CAircraftCategoryView::ResizingOff);
27  ui->tvp_AircraftCategoryView->allowDragDrop(true, false);
28  ui->tvp_AircraftCategoryView->menuAddItems(CViewBaseNonTemplate::MenuCopy);
29  // ui->tvp_AircraftCategoryView->setFilterWidget(ui->filter_AircraftIcao);
30 
31  connect(ui->tvp_AircraftCategoryView, &CAircraftCategoryView::requestNewBackendData, this,
32  &CDbAircraftCategoryComponent::onReload);
33  connect(sGui->getWebDataServices(), &CWebDataServices::dataRead, this,
34  &CDbAircraftCategoryComponent::onCategoryRead, Qt::QueuedConnection);
35  connect(sGui->getWebDataServices(), &CWebDataServices::entityDownloadProgress, this,
36  &CDbAircraftCategoryComponent::onEntityDownloadProgress, Qt::QueuedConnection);
37  this->onCategoryRead(CEntityFlags::AircraftCategoryEntity, CEntityFlags::ReadFinished,
39  }
40 
42 
43  void CDbAircraftCategoryComponent::onCategoryRead(CEntityFlags::Entity entity, CEntityFlags::ReadState readState,
44  int count)
45  {
46  using namespace std::chrono_literals;
47  Q_UNUSED(count);
48  if (!sGui || sGui->isShuttingDown() || !sGui->getWebDataServices()) { return; }
49  if (!entity.testFlag(CEntityFlags::AircraftCategoryEntity)) { return; }
50 
51  if (CEntityFlags::isFinishedReadState(readState))
52  {
53  this->showOverlayHTMLMessage(QStringLiteral("Updating %1").arg(CEntityFlags::entitiesToString(entity)), 2s);
55  ui->tvp_AircraftCategoryView->updateContainerMaybeAsync(categories);
56  ui->tvp_AircraftCategoryTree->updateContainer(categories);
57  }
58  else
59  {
60  this->showOverlayHTMLMessage(u"Current state: " % CEntityFlags::entitiesToString(entity) % u" " %
61  CEntityFlags::stateToString(readState),
62  10s);
63  }
64  }
65 
66  void CDbAircraftCategoryComponent::onEntityDownloadProgress(CEntityFlags::Entity entity, int logId, int progress,
67  qint64 current, qint64 max, const QUrl &url)
68  {
69  using namespace std::chrono_literals;
70 
71  if (!entity.testFlag(CEntityFlags::AircraftCategoryEntity)) { return; }
72  this->showDownloadProgress(progress, current, max, url, 5s);
73  Q_UNUSED(logId);
74  }
75 
76  void CDbAircraftCategoryComponent::onReload()
77  {
78  if (!sGui || sGui->isShuttingDown()) { return; }
79  sGui->getWebDataServices()->triggerLoadingDirectlyFromDb(CEntityFlags::AircraftCategoryEntity, QDateTime());
80  }
81 
82 } // namespace swift::gui::components
bool isShuttingDown() const
Is application shutting down?
CWebDataServices * getWebDataServices() const
Get the web data services.
int getAircraftCategoriesCount() const
Aircraft categories count.
swift::misc::network::CEntityFlags::Entity triggerLoadingDirectlyFromDb(swift::misc::network::CEntityFlags::Entity whatToRead, const QDateTime &newerThan=QDateTime())
Trigger reload from DB, loads the DB data and bypasses the caches checks and info objects.
swift::misc::aviation::CAircraftCategoryList getAircraftCategories() const
Aircraft categories.
void setViewWithIndicator(swift::gui::views::CViewBaseNonTemplate *viewWithIndicator)
Set the corresponding view.
bool showOverlayHTMLMessage(const QString &htmlMessage, std::chrono::milliseconds timeout=std::chrono::milliseconds(0))
HTML message.
void showDownloadProgress(int progress, qint64 current, qint64 max, const QUrl &url, std::chrono::milliseconds timeout=std::chrono::milliseconds(0))
Download progress.
Using this class provides a QFrame with the overlay functionality already integrated.
Value object encapsulating a list of ICAO codes.
SWIFT_GUI_EXPORT swift::gui::CGuiApplication * sGui
Single instance of GUI application object.
Backend services of the swift project, like dealing with the network or the simulators.
Definition: actionbind.cpp:7
High level reusable GUI components.
Definition: aboutdialog.cpp:13
Views, mainly QTableView.