mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-19 03:45:30 +08:00
refs #907, menu to consolidate against own models
* restructured menu paths * menu providing the functionality
This commit is contained in:
committed by
Mathew Sutcliffe
parent
60a937b5b6
commit
c5f89d0deb
@@ -63,6 +63,7 @@ namespace BlackGui
|
|||||||
ui->tvp_OwnModelSet->setJsonLoad(CAircraftModelView::AllowOnlySingleSimulator | CAircraftModelView::ReduceToOneSimulator);
|
ui->tvp_OwnModelSet->setJsonLoad(CAircraftModelView::AllowOnlySingleSimulator | CAircraftModelView::ReduceToOneSimulator);
|
||||||
ui->tvp_OwnModelSet->setCustomMenu(new CLoadModelsMenu(this));
|
ui->tvp_OwnModelSet->setCustomMenu(new CLoadModelsMenu(this));
|
||||||
ui->tvp_OwnModelSet->setCustomMenu(new CConsolidateWithDbDataMenu(ui->tvp_OwnModelSet, this, true));
|
ui->tvp_OwnModelSet->setCustomMenu(new CConsolidateWithDbDataMenu(ui->tvp_OwnModelSet, this, true));
|
||||||
|
ui->tvp_OwnModelSet->setCustomMenu(new CConsolidateWithSimulatorModels(ui->tvp_OwnModelSet, this, false));
|
||||||
ui->tvp_OwnModelSet->menuAddItems(CAircraftModelView::MenuOrderable);
|
ui->tvp_OwnModelSet->menuAddItems(CAircraftModelView::MenuOrderable);
|
||||||
ui->tvp_OwnModelSet->setSorting(CAircraftModel::IndexOrderString);
|
ui->tvp_OwnModelSet->setSorting(CAircraftModel::IndexOrderString);
|
||||||
ui->tvp_OwnModelSet->initAsOrderable();
|
ui->tvp_OwnModelSet->initAsOrderable();
|
||||||
|
|||||||
@@ -9,12 +9,13 @@
|
|||||||
|
|
||||||
#include "aircraftmodelmenus.h"
|
#include "aircraftmodelmenus.h"
|
||||||
#include "blackgui/guiapplication.h"
|
#include "blackgui/guiapplication.h"
|
||||||
|
#include "blackgui/components/dbmappingcomponent.h"
|
||||||
|
#include "blackgui/components/dbmappingcomponentaware.h"
|
||||||
#include "blackcore/webdataservices.h"
|
#include "blackcore/webdataservices.h"
|
||||||
#include "blackcore/db/databaseutils.h"
|
#include "blackcore/db/databaseutils.h"
|
||||||
#include "blackmisc/verify.h"
|
#include "blackmisc/verify.h"
|
||||||
#include "blackmisc/icons.h"
|
#include "blackmisc/icons.h"
|
||||||
#include "blackmisc/logmessage.h"
|
#include "blackmisc/logmessage.h"
|
||||||
#include "blackmisc/simulation/aircraftmodelinterfaces.h"
|
|
||||||
#include "blackmisc/simulation/aircraftmodelutils.h"
|
#include "blackmisc/simulation/aircraftmodelutils.h"
|
||||||
|
|
||||||
#include <QDesktopServices>
|
#include <QDesktopServices>
|
||||||
@@ -24,6 +25,7 @@ using namespace BlackMisc::Simulation;
|
|||||||
using namespace BlackGui;
|
using namespace BlackGui;
|
||||||
using namespace BlackGui::Views;
|
using namespace BlackGui::Views;
|
||||||
using namespace BlackGui::Models;
|
using namespace BlackGui::Models;
|
||||||
|
using namespace BlackGui::Components;
|
||||||
using namespace BlackCore::Db;
|
using namespace BlackCore::Db;
|
||||||
|
|
||||||
namespace BlackGui
|
namespace BlackGui
|
||||||
@@ -130,6 +132,8 @@ namespace BlackGui
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --------------------------------- with DB data ---------------------------------
|
||||||
|
|
||||||
CConsolidateWithDbDataMenu::CConsolidateWithDbDataMenu(CAircraftModelView *modelView, QObject *modelsTarget, bool separator) :
|
CConsolidateWithDbDataMenu::CConsolidateWithDbDataMenu(CAircraftModelView *modelView, QObject *modelsTarget, bool separator) :
|
||||||
IAircraftModelViewMenu(modelView, separator), m_modelsTarget(modelsTarget)
|
IAircraftModelViewMenu(modelView, separator), m_modelsTarget(modelsTarget)
|
||||||
{
|
{
|
||||||
@@ -154,13 +158,12 @@ namespace BlackGui
|
|||||||
if (mv->isEmpty()) { this->nestedCustomMenu(menuActions); return; }
|
if (mv->isEmpty()) { this->nestedCustomMenu(menuActions); return; }
|
||||||
if (!sGui->hasWebDataServices()) { this->nestedCustomMenu(menuActions); return; }
|
if (!sGui->hasWebDataServices()) { this->nestedCustomMenu(menuActions); return; }
|
||||||
|
|
||||||
menuActions.addMenuDatabase();
|
menuActions.addMenuConsolidateModels();
|
||||||
menuActions.addMenu(CIcons::databaseEdit16(), "Consolidate with DB data", CMenuAction::pathViewDatabaseConsolidate());
|
|
||||||
|
|
||||||
this->m_consolidateAll = menuActions.addAction(this->m_consolidateAll, "All", CMenuAction::pathViewDatabaseConsolidate(), { this, &CConsolidateWithDbDataMenu::ps_consolidateData });
|
this->m_consolidateAll = menuActions.addAction(this->m_consolidateAll, CIcons::databaseEdit16(), "All with DB data", CMenuAction::pathViewModelsConsolidate(), { this, &CConsolidateWithDbDataMenu::ps_consolidateData });
|
||||||
if (mv->hasSelection())
|
if (mv->hasSelection())
|
||||||
{
|
{
|
||||||
this->m_consolidateSelected = menuActions.addAction(this->m_consolidateSelected, "Selected only", CMenuAction::pathViewDatabaseConsolidate(), { this, &CConsolidateWithDbDataMenu::ps_consolidateSelectedData });
|
this->m_consolidateSelected = menuActions.addAction(this->m_consolidateSelected, CIcons::databaseEdit16(), "Selected with DB data", CMenuAction::pathViewModelsConsolidate(), { this, &CConsolidateWithDbDataMenu::ps_consolidateSelectedData });
|
||||||
}
|
}
|
||||||
this->nestedCustomMenu(menuActions);
|
this->nestedCustomMenu(menuActions);
|
||||||
}
|
}
|
||||||
@@ -235,5 +238,136 @@ namespace BlackGui
|
|||||||
{
|
{
|
||||||
return qobject_cast<IModelsUpdatable *>(this->m_modelsTarget);
|
return qobject_cast<IModelsUpdatable *>(this->m_modelsTarget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --------------------------------- with simulator models ---------------------------------
|
||||||
|
|
||||||
|
CConsolidateWithSimulatorModels::CConsolidateWithSimulatorModels(CAircraftModelView *modelView, QObject *modelsTarget, bool separator) :
|
||||||
|
IAircraftModelViewMenu(modelView, separator), m_modelsTarget(modelsTarget)
|
||||||
|
{
|
||||||
|
// it can be the target is not yet known
|
||||||
|
if (modelsTarget)
|
||||||
|
{
|
||||||
|
bool ok = modelsTargetSetable() || modelsTargetUpdatable();
|
||||||
|
Q_ASSERT_X(ok, Q_FUNC_INFO, "Neither setable nor updatable");
|
||||||
|
Q_UNUSED(ok);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const CLogCategoryList &CConsolidateWithSimulatorModels::getLogCategories()
|
||||||
|
{
|
||||||
|
static const CLogCategoryList cats { CLogCategory::mapping(), CLogCategory::guiComponent() };
|
||||||
|
return cats;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CConsolidateWithSimulatorModels::customMenu(CMenuActions &menuActions)
|
||||||
|
{
|
||||||
|
const CAircraftModelView *mv = modelView();
|
||||||
|
if (mv->isEmpty()) { this->nestedCustomMenu(menuActions); return; }
|
||||||
|
if (!sGui->hasWebDataServices()) { this->nestedCustomMenu(menuActions); return; }
|
||||||
|
|
||||||
|
menuActions.addMenuConsolidateModels();
|
||||||
|
|
||||||
|
this->m_consolidateAll = menuActions.addAction(this->m_consolidateAll, CIcons::appModels16(), "All with simulator models", CMenuAction::pathViewModelsConsolidate(), { this, &CConsolidateWithSimulatorModels::ps_consolidateData });
|
||||||
|
if (mv->hasSelection())
|
||||||
|
{
|
||||||
|
this->m_consolidateSelected = menuActions.addAction(this->m_consolidateSelected, CIcons::appModels16(), "Selected with simulator models", CMenuAction::pathViewModelsConsolidate(), { this, &CConsolidateWithSimulatorModels::ps_consolidateSelectedData });
|
||||||
|
}
|
||||||
|
this->nestedCustomMenu(menuActions);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CConsolidateWithSimulatorModels::ps_consolidateData()
|
||||||
|
{
|
||||||
|
bool filtered = false;
|
||||||
|
const CAircraftModelList models(this->getAllOrAllFilteredAircraftModels(&filtered));
|
||||||
|
if (models.isEmpty()) { return; }
|
||||||
|
const int i = this->modelView()->showLoadIndicator();
|
||||||
|
const CAircraftModelList consolidated = CDatabaseUtils::consolidateModelsWithSimulatorModelsAllowsGuiRefresh(models, this->getSimulatorModels(), true);
|
||||||
|
const CSimulatorInfo sim(this->getSimulator());
|
||||||
|
|
||||||
|
if (!filtered)
|
||||||
|
{
|
||||||
|
this->modelsTargetSetable()->setModels(consolidated, sim);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!this->modelsTargetUpdatable())
|
||||||
|
{
|
||||||
|
CLogMessage(this).warning("No updatable target");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this->modelsTargetUpdatable()->updateModels(consolidated, sim);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this->modelView()->hideLoadIndicator(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CConsolidateWithSimulatorModels::ps_consolidateSelectedData()
|
||||||
|
{
|
||||||
|
Q_ASSERT_X(sGui, Q_FUNC_INFO, "Missing sGui");
|
||||||
|
const CAircraftModelList models(this->getSelectedAircraftModels());
|
||||||
|
if (models.isEmpty()) { return; }
|
||||||
|
if (!this->modelsTargetUpdatable())
|
||||||
|
{
|
||||||
|
CLogMessage(this).warning("No updatable target");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const int i = this->modelView()->showLoadIndicator();
|
||||||
|
const CAircraftModelList consolidated = CDatabaseUtils::consolidateModelsWithSimulatorModelsAllowsGuiRefresh(models, this->getSimulatorModels(), true);
|
||||||
|
const CSimulatorInfo sim(this->getSimulator());
|
||||||
|
|
||||||
|
this->modelsTargetUpdatable()->updateModels(consolidated, sim);
|
||||||
|
this->modelView()->hideLoadIndicator(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
CAircraftModelList CConsolidateWithSimulatorModels::getSimulatorModels() const
|
||||||
|
{
|
||||||
|
CDbMappingComponent *mc = this->getMappingComponent();
|
||||||
|
Q_ASSERT_X(mc, Q_FUNC_INFO, "No mapping component");
|
||||||
|
const CSimulatorInfo sim = this->getSimulator();
|
||||||
|
mc->setOwnModelsSimulator(sim);
|
||||||
|
return mc->getOwnModels();
|
||||||
|
}
|
||||||
|
|
||||||
|
CSimulatorInfo CConsolidateWithSimulatorModels::getSimulator() const
|
||||||
|
{
|
||||||
|
const ISimulatorSelectable *s = this->simulatorSelectable();
|
||||||
|
Q_ASSERT_X(s, Q_FUNC_INFO, "No ISimulatorSelectable");
|
||||||
|
const CSimulatorInfo sim = s->getSelectedSimulator();
|
||||||
|
Q_ASSERT_X(sim.isSingleSimulator(), Q_FUNC_INFO, "Need single simulator");
|
||||||
|
return sim;
|
||||||
|
}
|
||||||
|
|
||||||
|
IModelsPerSimulatorSetable *CConsolidateWithSimulatorModels::modelsTargetSetable() const
|
||||||
|
{
|
||||||
|
return qobject_cast<IModelsPerSimulatorSetable *>(this->m_modelsTarget);
|
||||||
|
}
|
||||||
|
|
||||||
|
IModelsPerSimulatorUpdatable *CConsolidateWithSimulatorModels::modelsTargetUpdatable() const
|
||||||
|
{
|
||||||
|
return qobject_cast<IModelsPerSimulatorUpdatable *>(this->m_modelsTarget);
|
||||||
|
}
|
||||||
|
|
||||||
|
ISimulatorSelectable *CConsolidateWithSimulatorModels::simulatorSelectable() const
|
||||||
|
{
|
||||||
|
return qobject_cast<ISimulatorSelectable *>(this->m_modelsTarget);
|
||||||
|
}
|
||||||
|
|
||||||
|
Components::CDbMappingComponent *CConsolidateWithSimulatorModels::getMappingComponent() const
|
||||||
|
{
|
||||||
|
// try to cast target
|
||||||
|
CDbMappingComponent *mc = nullptr;
|
||||||
|
CDbMappingComponentAware *mca = qobject_cast<CDbMappingComponentAware *>(this->m_modelsTarget);
|
||||||
|
if (mca)
|
||||||
|
{
|
||||||
|
mc = mca->getMappingComponent();
|
||||||
|
}
|
||||||
|
if (!mc)
|
||||||
|
{
|
||||||
|
mc = qobject_cast<CDbMappingComponent *>(this->m_modelsTarget);
|
||||||
|
}
|
||||||
|
return mc;
|
||||||
|
}
|
||||||
} // ns
|
} // ns
|
||||||
} // ns
|
} // ns
|
||||||
|
|||||||
@@ -13,23 +13,16 @@
|
|||||||
#include "blackgui/menus/menudelegate.h"
|
#include "blackgui/menus/menudelegate.h"
|
||||||
#include "blackgui/overlaymessagesframe.h"
|
#include "blackgui/overlaymessagesframe.h"
|
||||||
#include "blackgui/views/aircraftmodelview.h"
|
#include "blackgui/views/aircraftmodelview.h"
|
||||||
|
#include "blackmisc/simulation/aircraftmodelinterfaces.h"
|
||||||
|
|
||||||
#include <QMenu>
|
#include <QMenu>
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
|
||||||
class QAction;
|
class QAction;
|
||||||
|
|
||||||
namespace BlackMisc
|
|
||||||
{
|
|
||||||
namespace Simulation
|
|
||||||
{
|
|
||||||
class IModelsSetable;
|
|
||||||
class IModelsUpdatable;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace BlackGui
|
namespace BlackGui
|
||||||
{
|
{
|
||||||
|
namespace Components { class CDbMappingComponent; }
|
||||||
namespace Menus
|
namespace Menus
|
||||||
{
|
{
|
||||||
//! Menu base for aircraft model view menus
|
//! Menu base for aircraft model view menus
|
||||||
@@ -115,6 +108,48 @@ namespace BlackGui
|
|||||||
QAction *m_consolidateAll = nullptr; //!< consolidate data with DB (all)
|
QAction *m_consolidateAll = nullptr; //!< consolidate data with DB (all)
|
||||||
QAction *m_consolidateSelected = nullptr; //!< consolidate data with DB (selected)
|
QAction *m_consolidateSelected = nullptr; //!< consolidate data with DB (selected)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! Merge with simulator models (e.g. remove no longer existing models)
|
||||||
|
class CConsolidateWithSimulatorModels : public IAircraftModelViewMenu
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
//! Constructor
|
||||||
|
using IAircraftModelViewMenu::IAircraftModelViewMenu;
|
||||||
|
|
||||||
|
//! Constructor
|
||||||
|
CConsolidateWithSimulatorModels(BlackGui::Views::CAircraftModelView *modelView, QObject *modelsTarget, bool separator = true);
|
||||||
|
|
||||||
|
//! Log.categories
|
||||||
|
static const BlackMisc::CLogCategoryList &getLogCategories();
|
||||||
|
|
||||||
|
//! \copydoc IMenuDelegate::customMenu
|
||||||
|
virtual void customMenu(CMenuActions &menuActions) override;
|
||||||
|
|
||||||
|
//! Change target
|
||||||
|
void setModelsTarget(QObject *target) { this->m_modelsTarget = target; }
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void ps_consolidateData();
|
||||||
|
void ps_consolidateSelectedData();
|
||||||
|
|
||||||
|
private:
|
||||||
|
//! Get models
|
||||||
|
BlackMisc::Simulation::CAircraftModelList getSimulatorModels() const;
|
||||||
|
|
||||||
|
//! Simulator
|
||||||
|
BlackMisc::Simulation::CSimulatorInfo getSimulator() const;
|
||||||
|
|
||||||
|
BlackMisc::Simulation::IModelsPerSimulatorSetable *modelsTargetSetable() const;
|
||||||
|
BlackMisc::Simulation::IModelsPerSimulatorUpdatable *modelsTargetUpdatable() const;
|
||||||
|
BlackMisc::Simulation::ISimulatorSelectable *simulatorSelectable() const;
|
||||||
|
BlackGui::Components::CDbMappingComponent *getMappingComponent() const;
|
||||||
|
|
||||||
|
QObject *m_modelsTarget = nullptr; //!< optional target for setting/updating the models
|
||||||
|
QAction *m_consolidateAll = nullptr; //!< consolidate data with DB (all)
|
||||||
|
QAction *m_consolidateSelected = nullptr; //!< consolidate data with DB (selected)
|
||||||
|
};
|
||||||
} // ns
|
} // ns
|
||||||
} // ns
|
} // ns
|
||||||
|
|
||||||
|
|||||||
@@ -90,6 +90,12 @@ namespace BlackGui
|
|||||||
return subdir;
|
return subdir;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const CMenuAction &CMenuAction::subMenuConsolidateModels()
|
||||||
|
{
|
||||||
|
static const CMenuAction subdir(CIcons::appModels16(), "Consolidate models", CMenuAction::pathViewModelsConsolidate());
|
||||||
|
return subdir;
|
||||||
|
}
|
||||||
|
|
||||||
const CMenuAction &CMenuAction::subMenuSimulator()
|
const CMenuAction &CMenuAction::subMenuSimulator()
|
||||||
{
|
{
|
||||||
static const CMenuAction subdir(CIcons::appSimulator16(), "Simulator", CMenuAction::pathSimulator());
|
static const CMenuAction subdir(CIcons::appSimulator16(), "Simulator", CMenuAction::pathSimulator());
|
||||||
@@ -422,6 +428,12 @@ namespace BlackGui
|
|||||||
return this->addMenu(CMenuAction::subMenuDatabase());
|
return this->addMenu(CMenuAction::subMenuDatabase());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CMenuAction CMenuActions::addMenuConsolidateModels()
|
||||||
|
{
|
||||||
|
if (this->containsMenu(CMenuAction::pathViewModelsConsolidate())) { CMenuAction(); }
|
||||||
|
return this->addMenu(CMenuAction::subMenuConsolidateModels());
|
||||||
|
}
|
||||||
|
|
||||||
CMenuAction CMenuActions::addMenuModelSet()
|
CMenuAction CMenuActions::addMenuModelSet()
|
||||||
{
|
{
|
||||||
if (this->containsMenu(CMenuAction::pathModelSet())) { CMenuAction(); }
|
if (this->containsMenu(CMenuAction::pathModelSet())) { CMenuAction(); }
|
||||||
|
|||||||
@@ -149,29 +149,29 @@ namespace BlackGui
|
|||||||
//! Database
|
//! Database
|
||||||
static const QString &pathViewDatabase() { static const QString p("View.10.Database/Database"); return p; }
|
static const QString &pathViewDatabase() { static const QString p("View.10.Database/Database"); return p; }
|
||||||
|
|
||||||
//! Database consolidation
|
//! Consolidate
|
||||||
static const QString &pathViewDatabaseConsolidate() { static const QString p("View.10.Database/Database/Consolidate"); return p; }
|
static const QString &pathViewModelsConsolidate() { static const QString p("View.11.Models/Consolidate"); return p; }
|
||||||
|
|
||||||
//! Select add remove
|
//! Select add remove
|
||||||
static const QString &pathViewAddRemove() { static const QString p("View.11.AddRemove"); return p; }
|
static const QString &pathViewAddRemove() { static const QString p("View.12.AddRemove"); return p; }
|
||||||
|
|
||||||
//! View selection mode
|
//! View selection mode
|
||||||
static const QString &pathViewSelection() { static const QString p("View.12.Selection/Selection"); return p; }
|
static const QString &pathViewSelection() { static const QString p("View.13.Selection/Selection"); return p; }
|
||||||
|
|
||||||
//! Order submenus
|
//! Order submenus
|
||||||
static const QString &pathViewOrder() { static const QString p("View.13.Order/Order"); return p; }
|
static const QString &pathViewOrder() { static const QString p("View.14.Order/Order"); return p; }
|
||||||
|
|
||||||
//! View resizing
|
//! View resizing
|
||||||
static const QString &pathViewResize() { static const QString p("View.14.Resize"); return p; }
|
static const QString &pathViewResize() { static const QString p("View.15.Resize"); return p; }
|
||||||
|
|
||||||
//! View clear highlighting
|
//! View clear highlighting
|
||||||
static const QString &pathViewClearHighlighting() { static const QString p("View.15.ClearHighlight"); return p; }
|
static const QString &pathViewClearHighlighting() { static const QString p("View.16.ClearHighlight"); return p; }
|
||||||
|
|
||||||
//! View filter
|
//! View filter
|
||||||
static const QString &pathViewFilter() { static const QString p("View.16.Filter"); return p; }
|
static const QString &pathViewFilter() { static const QString p("View.17.Filter"); return p; }
|
||||||
|
|
||||||
//! View update
|
//! View update
|
||||||
static const QString &pathViewUpdates() { static const QString p("View.17.Updates"); return p; }
|
static const QString &pathViewUpdates() { static const QString p("View.18.Updates"); return p; }
|
||||||
|
|
||||||
//! View load/save
|
//! View load/save
|
||||||
static const QString &pathViewLoadSave() { static const QString p("View.18.LoadSave"); return p; }
|
static const QString &pathViewLoadSave() { static const QString p("View.18.LoadSave"); return p; }
|
||||||
@@ -186,15 +186,16 @@ namespace BlackGui
|
|||||||
//! @{
|
//! @{
|
||||||
static const CMenuAction &subMenuDatabase();
|
static const CMenuAction &subMenuDatabase();
|
||||||
static const CMenuAction &subMenuSimulator();
|
static const CMenuAction &subMenuSimulator();
|
||||||
|
static const CMenuAction &subMenuConsolidateModels();
|
||||||
//! @}
|
//! @}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QAction *m_action = nullptr; //!< the action
|
QAction *m_action = nullptr; //!< the action
|
||||||
QIcon m_icon; //!< icon
|
QIcon m_icon; //!< icon
|
||||||
QString m_title; //!< title
|
QString m_title; //!< title
|
||||||
QString m_path; //!< path in menu
|
QString m_path; //!< path in menu
|
||||||
bool m_separator = false; //!< separator
|
bool m_separator = false; //!< separator
|
||||||
bool m_isMenu = false; //!< is menu?
|
bool m_isMenu = false; //!< is menu?
|
||||||
};
|
};
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -317,6 +318,9 @@ namespace BlackGui
|
|||||||
//! Database menu
|
//! Database menu
|
||||||
CMenuAction addMenuDatabase();
|
CMenuAction addMenuDatabase();
|
||||||
|
|
||||||
|
//! Consolidate models menu
|
||||||
|
CMenuAction addMenuConsolidateModels();
|
||||||
|
|
||||||
//! Model set menu
|
//! Model set menu
|
||||||
CMenuAction addMenuModelSet();
|
CMenuAction addMenuModelSet();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user