swift
dbdistributorcomponent.cpp
1 // SPDX-FileCopyrightText: Copyright (C) 2015 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
5 
6 #include <QFrame>
7 #include <QPointer>
8 #include <QtGlobal>
9 
10 #include "ui_dbdistributorcomponent.h"
11 
12 #include "core/webdataservices.h"
13 #include "gui/guiapplication.h"
15 #include "gui/views/viewbase.h"
17 
18 using namespace swift::core;
19 using namespace swift::misc::network;
20 using namespace swift::misc::simulation;
21 using namespace swift::gui::views;
22 
23 namespace swift::gui::components
24 {
25  CDbDistributorComponent::CDbDistributorComponent(QWidget *parent)
26  : QFrame(parent), ui(new Ui::CDbDistributorComponent)
27  {
28  ui->setupUi(this);
29  this->setViewWithIndicator(ui->tvp_Distributors);
30  ui->tvp_Distributors->setResizeMode(CViewBaseNonTemplate::ResizingAuto);
31  ui->tvp_Distributors->allowDragDrop(true, false);
32  ui->tvp_Distributors->setFilterWidget(ui->filter_Distributor);
33 
34  connect(ui->tvp_Distributors, &CDistributorView::requestNewBackendData, this, &CDbDistributorComponent::reload);
35  connect(ui->pb_SelectAllFsFamily, &QPushButton::released, this, &CDbDistributorComponent::selectStandardModels);
36  connect(ui->pb_SelectXPlaneBB, &QPushButton::released, this, &CDbDistributorComponent::selectStandardModels);
37  connect(ui->pb_SelectXplaneXCSL, &QPushButton::released, this, &CDbDistributorComponent::selectStandardModels);
38 
39  if (sGui && sGui->getWebDataServices())
40  {
41  connect(sGui->getWebDataServices(), &CWebDataServices::dataRead, this,
42  &CDbDistributorComponent::onDistributorsRead, Qt::QueuedConnection);
43  this->onDistributorsRead(CEntityFlags::DistributorEntity, CEntityFlags::ReadFinished,
45  }
46  }
47 
49 
50  CDistributorView *CDbDistributorComponent::view() const { return ui->tvp_Distributors; }
51 
53  {
54  ui->filter_Distributor->setSimulator(simulator);
55  }
56 
58  {
59  return ui->tvp_Distributors->selectedObjects();
60  }
61 
63  {
64  if (ui->tvp_Distributors->isEmpty() || !distributor.isLoadedFromDb()) { return false; }
65  return ui->tvp_Distributors->selectDbKey(distributor.getDbKey());
66  }
67 
68  bool CDbDistributorComponent::hasSelectedDistributors() const { return ui->tvp_Distributors->hasSelection(); }
69 
70  void CDbDistributorComponent::onDistributorsRead(CEntityFlags::Entity entity, CEntityFlags::ReadState readState,
71  int count)
72  {
73  Q_UNUSED(count)
74  if (!sGui || sGui->isShuttingDown() || !sGui->hasWebDataServices()) { return; }
75  if (entity.testFlag(CEntityFlags::DistributorEntity) && CEntityFlags::isFinishedReadState(readState))
76  {
77  const CDistributorList distributors = sGui->getWebDataServices()->getDistributors();
78  ui->tvp_Distributors->updateContainer(distributors);
79  }
80  }
81 
82  void CDbDistributorComponent::selectStandardModels()
83  {
84  const QObject *s = QObject::sender();
85  QSet<QString> keys;
86  if (s == ui->pb_SelectAllFsFamily)
87  {
88  this->filterBySimulator(CSimulatorInfo::AllFsFamily);
89  keys = CDistributor::standardAllFsFamily();
90  }
91  else if (s == ui->pb_SelectXPlaneBB)
92  {
93  this->filterBySimulator(CSimulatorInfo::XPLANE);
94  keys = QSet<QString>({ CDistributor::xplaneBlueBell() });
95  }
96  else if (s == ui->pb_SelectXplaneXCSL)
97  {
98  this->filterBySimulator(CSimulatorInfo::XPLANE);
99  keys = QSet<QString>({ CDistributor::xplaneXcsl() });
100  }
101 
102  // deferred because filter must first work and update
103  const QPointer<CDbDistributorComponent> myself(this);
104  QTimer::singleShot(2000, this, [=] {
105  if (!myself || !sApp || sApp->isShuttingDown()) { return; }
106  ui->tvp_Distributors->selectDbKeys(keys);
107  });
108  }
109 
110  void CDbDistributorComponent::reload()
111  {
112  if (!sGui || sGui->isShuttingDown() || !sGui->hasWebDataServices()) { return; }
113  sGui->getWebDataServices()->triggerLoadingDirectlyFromDb(CEntityFlags::DistributorEntity);
114  }
115 } // namespace swift::gui::components
SWIFT_CORE_EXPORT swift::core::CApplication * sApp
Single instance of application object.
Definition: application.cpp:71
bool hasWebDataServices() const
Web data services available?
bool isShuttingDown() const
Is application shutting down?
CWebDataServices * getWebDataServices() const
Get the web data services.
int getDistributorsCount() const
Distributors count.
swift::misc::simulation::CDistributorList getDistributors() const
Distributors.
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.
void setViewWithIndicator(swift::gui::views::CViewBaseNonTemplate *viewWithIndicator)
Set the corresponding view.
swift::gui::views::CDistributorView * view() const
Get the view.
bool selectDistributor(const swift::misc::simulation::CDistributor &distributor)
Select the given distributor.
bool hasSelectedDistributors() const
Having selected distributors.
void filterBySimulator(const swift::misc::simulation::CSimulatorInfo &simulator)
Filter by simulator.
swift::misc::simulation::CDistributorList getSelectedDistributors() const
The selected distributors.
bool isLoadedFromDb() const
Loaded from DB.
Definition: datastore.h:204
const QString & getDbKey() const
Get DB key.
Definition: datastore.h:180
Value object encapsulating information of software distributor.
Definition: distributor.h:33
Value object encapsulating a list of distributors.
Simple hardcoded info about the corresponding simulator.
Definition: simulatorinfo.h:41
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.
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...
Definition: threadutils.h:30