4 #include "aircraftmodelmenus.h"
6 #include <QDesktopServices>
18 using namespace swift::config;
20 using namespace swift::misc::simulation;
27 namespace swift::gui::menus
29 void IAircraftModelViewMenu::anchor() {}
31 const QStringList &IAircraftModelViewMenu::getLogCategories()
33 static const QStringList cats { CLogCategories::guiComponent() };
40 Q_ASSERT_X(mv, Q_FUNC_INFO,
"no view");
47 Q_ASSERT_X(mv, Q_FUNC_INFO,
"no view");
51 const CAircraftModelList &IAircraftModelViewMenu::getAllOrAllFilteredAircraftModels(
bool *filtered)
const
54 Q_ASSERT_X(mv, Q_FUNC_INFO,
"no view");
61 Q_ASSERT_X(mv, Q_FUNC_INFO,
"no view");
71 static const QStringList cats { CLogCategories::guiComponent() };
78 Q_ASSERT_X(mv, Q_FUNC_INFO,
"no view");
87 m_fileAction = menuActions.
addAction(m_fileAction, CIcons::text16(),
"Open simulator file",
89 {
this, &CShowSimulatorFileMenu::showSimulatorFile });
91 if (CModelConverterX::supportsModelConverterX())
95 {
this, &CShowSimulatorFileMenu::startModelConverterX });
104 void CShowSimulatorFileMenu::showSimulatorFile()
109 if (!model.hasFileName()) {
return; }
110 if (QFile::exists(model.getFileName()))
112 const QUrl url = QUrl::fromLocalFile(model.getFileName());
113 QDesktopServices::openUrl(url);
119 QStringLiteral(
"No file for model '&1'").arg(model.getFileName()),
true);
121 CLogMessage::preformatted(m);
125 void CShowSimulatorFileMenu::startModelConverterX()
127 if (!CModelConverterX::supportsModelConverterX()) {
return; }
131 CModelConverterX::startModelConverterX(model,
sApp);
142 const bool ok = modelsTargetSetable() || modelsTargetUpdatable();
143 Q_ASSERT_X(ok, Q_FUNC_INFO,
"Neither setable nor updatable");
150 static const QStringList cats { CLogCategories::mapping(), CLogCategories::guiComponent() };
170 m_consolidateAll = menuActions.
addAction(m_consolidateAll, CIcons::databaseEdit16(),
"All with DB data",
172 {
this, &CConsolidateWithDbDataMenu::consolidateData });
175 m_consolidateSelected = menuActions.
addAction(
176 m_consolidateSelected, CIcons::databaseEdit16(),
"Selected with DB data",
182 void CConsolidateWithDbDataMenu::consolidateData()
186 if (dbModels.isEmpty())
191 if (!this->modelsTargetSetable())
198 bool filtered =
false;
201 const int c = CDatabaseUtils::consolidateModelsWithDbDataAllowsGuiRefresh(models,
true,
true);
202 if (c > 0 && this->modelsTargetSetable() && this->modelsTargetUpdatable())
207 CLogMessage(
this).
info(u
"Consolidated %1/%2 filtered models with DB") << c << models.size();
211 this->modelsTargetSetable()->
setModels(models);
212 CLogMessage(
this).
info(u
"Consolidated %1/%2 models with DB") << c << models.size();
222 void CConsolidateWithDbDataMenu::consolidateSelectedData()
224 Q_ASSERT_X(
sGui, Q_FUNC_INFO,
"Missing sGui");
228 if (models.isEmpty()) {
return; }
229 if (!this->modelsTargetUpdatable())
234 const int c = CDatabaseUtils::consolidateModelsWithDbDataAllowsGuiRefresh(models,
true,
true);
235 if (c > 0 && this->modelsTargetUpdatable()) { this->modelsTargetUpdatable()->
updateModels(models); }
238 IModelsSetable *CConsolidateWithDbDataMenu::modelsTargetSetable()
const
240 return qobject_cast<IModelsSetable *>(m_modelsTarget);
245 return qobject_cast<IModelsUpdatable *>(m_modelsTarget);
251 QObject *modelsTarget)
257 const bool ok = modelsTargetSetable() || modelsTargetUpdatable();
258 Q_ASSERT_X(ok, Q_FUNC_INFO,
"Neither setable nor updatable");
265 static const QStringList cats { CLogCategories::mapping(), CLogCategories::guiComponent() };
286 m_consolidateAll = menuActions.
addAction(m_consolidateAll, CIcons::appModels16(),
"All with simulator models",
288 {
this, &CConsolidateWithSimulatorModels::consolidateData });
291 m_consolidateSelected =
292 menuActions.
addAction(m_consolidateSelected, CIcons::appModels16(),
"Selected with simulator models",
294 {
this, &CConsolidateWithSimulatorModels::consolidateSelectedData });
298 m_updateDirsAll = menuActions.
addAction(m_updateDirsAll, CIcons::disk16(),
"Update all directories",
300 {
this, &CConsolidateWithSimulatorModels::updateDirectoryData });
303 m_updateDirsSelected =
304 menuActions.
addAction(m_updateDirsSelected, CIcons::disk16(),
"Update directories for selected",
306 {
this, &CConsolidateWithSimulatorModels::updateDirectorySelectedData });
312 void CConsolidateWithSimulatorModels::consolidateData()
314 using namespace std::chrono_literals;
316 bool filtered =
false;
318 if (models.isEmpty()) {
return; }
319 QStringList removedModelStrings;
321 const CAircraftModelList consolidated = CDatabaseUtils::consolidateModelsWithSimulatorModelsAllowsGuiRefresh(
322 models, this->getSimulatorModels(), removedModelStrings,
true);
325 if (!filtered) { this->modelsTargetSetable()->setModelsForSimulator(consolidated, sim); }
328 if (!this->modelsTargetUpdatable()) {
CLogMessage(
this).
warning(u
"No updatable target"); }
329 else { this->modelsTargetUpdatable()->updateModelsForSimulator(consolidated, sim); }
332 if (!removedModelStrings.isEmpty() && this->getMappingComponent())
335 this->getMappingComponent()->showOverlayMessage(m, 5s);
339 void CConsolidateWithSimulatorModels::consolidateSelectedData()
341 using namespace std::chrono_literals;
343 Q_ASSERT_X(
sGui, Q_FUNC_INFO,
"Missing sGui");
345 if (models.isEmpty()) {
return; }
346 if (!this->modelsTargetUpdatable())
352 QStringList removedModelStrings;
354 const CAircraftModelList consolidated = CDatabaseUtils::consolidateModelsWithSimulatorModelsAllowsGuiRefresh(
355 models, this->getSimulatorModels(), removedModelStrings,
true);
358 this->modelsTargetUpdatable()->updateModelsForSimulator(consolidated, sim);
360 if (!removedModelStrings.isEmpty() && this->getMappingComponent())
363 this->getMappingComponent()->showOverlayMessage(m, 5s);
367 void CConsolidateWithSimulatorModels::updateDirectoryData()
369 using namespace std::chrono_literals;
371 bool filtered =
false;
373 if (models.isEmpty()) {
return; }
374 QStringList removedModelStrings;
376 const CAircraftModelList consolidated = CDatabaseUtils::updateModelsDirectoriesAllowsGuiRefresh(
377 models, this->getSimulatorModels(), removedModelStrings,
true);
380 if (!filtered) { this->modelsTargetSetable()->setModelsForSimulator(consolidated, sim); }
383 if (!this->modelsTargetUpdatable()) {
CLogMessage(
this).
warning(u
"No updatable target"); }
384 else { this->modelsTargetUpdatable()->updateModelsForSimulator(consolidated, sim); }
387 if (!removedModelStrings.isEmpty() && this->getMappingComponent())
390 this->getMappingComponent()->showOverlayMessage(m, 5s);
394 void CConsolidateWithSimulatorModels::updateDirectorySelectedData()
396 using namespace std::chrono_literals;
398 Q_ASSERT_X(
sGui, Q_FUNC_INFO,
"Missing sGui");
400 if (models.isEmpty()) {
return; }
401 if (!this->modelsTargetUpdatable())
407 QStringList removedModelStrings;
409 const CAircraftModelList consolidated = CDatabaseUtils::updateModelsDirectoriesAllowsGuiRefresh(
410 models, this->getSimulatorModels(), removedModelStrings,
true);
413 this->modelsTargetUpdatable()->updateModelsForSimulator(consolidated, sim);
415 if (!removedModelStrings.isEmpty() && this->getMappingComponent())
418 this->getMappingComponent()->showOverlayMessage(m, 5s);
425 Q_ASSERT_X(mc, Q_FUNC_INFO,
"No mapping component");
431 CSimulatorInfo CConsolidateWithSimulatorModels::getSimulator()
const
434 Q_ASSERT_X(s, Q_FUNC_INFO,
"No ISimulatorSelectable");
442 return qobject_cast<IModelsForSimulatorSetable *>(m_modelsTarget);
447 return qobject_cast<IModelsForSimulatorUpdatable *>(m_modelsTarget);
452 return qobject_cast<ISimulatorSelectable *>(m_modelsTarget);
461 if (!mc) { mc = qobject_cast<CDbMappingComponent *>(m_modelsTarget); }
SWIFT_CORE_EXPORT swift::core::CApplication * sApp
Single instance of application object.
bool hasWebDataServices() const
Web data services available?
bool isShuttingDown() const
Is application shutting down?
CWebDataServices * getWebDataServices() const
Get the web data services.
swift::misc::simulation::CAircraftModelList getModels() const
Models.
bool showOverlayHTMLMessage(const QString &htmlMessage, std::chrono::milliseconds timeout=std::chrono::milliseconds(0))
HTML message.
Using this class provides a QFrame with the overlay functionality already integrated.
Allows subcomponents to gain access to model component.
CDbMappingComponent * getMappingComponent() const
Get the mapping component.
swift::misc::simulation::CAircraftModelList getOwnModels() const
Own cached models.
void setOwnModelsSimulator(const swift::misc::simulation::CSimulatorInfo &simulator)
Set simulator for own models.
virtual bool isEmpty() const
Empty?
virtual ContainerType selectedObjects() const
Selected objects.
ObjectType selectedObject() const
Selected object (or default)
const ContainerType & container() const
Access to container.
const ContainerType & containerOrFilteredContainer(bool *filtered=nullptr) const
Full container or cached filtered container as approproiate.
void hideLoadIndicator(int loadingId=-1)
Hide loading indicator.
bool hasSingleSelectedRow() const
Single selected row.
int showLoadIndicator(int containerSizeDependent=-1, std::chrono::milliseconds timeout=std::chrono::milliseconds { 0 }, bool processEvents=true)
Show loading indicator.
bool hasSelection() const
Selection (selected rows)
Class for emitting a log message.
Derived & warning(const char16_t(&format)[N])
Set the severity to warning, providing a format string.
Derived & info(const char16_t(&format)[N])
Set the severity to info, providing a format string.
Streamable status message, e.g.
Aircraft model (used by another pilot, my models on disk)
bool hasFileName() const
File name?
Value object encapsulating a list of aircraft models.
Simple hardcoded info about the corresponding simulator.
bool isSingleSimulator() const
Single simulator selected.
Interface to "something" backing models, which can be set.
Interface to "something" backing models, which can be modified (updated)
Interface to "something" backing models, which can be set.
virtual void setModels(const CAircraftModelList &models)=0
Set models.
Interface to "something" backing models, which can be modified (updated)
virtual int updateModels(const CAircraftModelList &models)=0
Update models.
Interface to "something" allowing a simulator selection.
virtual swift::misc::simulation::CSimulatorInfo getSelectedSimulator() const =0
Simulator.
SWIFT_GUI_EXPORT swift::gui::CGuiApplication * sGui
Single instance of GUI application object.
Classes interacting with the swift database (aka "datastore").
High level reusable GUI components.
Models to be used with views, mainly QTableView.
Views, mainly QTableView.
Free functions in swift::misc.