mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-28 11:45:40 +08:00
refs #757, materialize filtered data
* menu item / flag * functions in view class * some minor formatting
This commit is contained in:
committed by
Roland Winklmeier
parent
c848d7ca61
commit
610dba2028
@@ -56,6 +56,7 @@ namespace BlackGui
|
|||||||
ui->tvp_OwnModelSet->menuAddItems(CAircraftModelView::MenuStashing);
|
ui->tvp_OwnModelSet->menuAddItems(CAircraftModelView::MenuStashing);
|
||||||
ui->tvp_OwnModelSet->menuRemoveItems(CAircraftModelView::MenuDisplayAutomaticallyAndRefresh | CAircraftModelView::MenuBackend | CAircraftModelView::MenuRefresh);
|
ui->tvp_OwnModelSet->menuRemoveItems(CAircraftModelView::MenuDisplayAutomaticallyAndRefresh | CAircraftModelView::MenuBackend | CAircraftModelView::MenuRefresh);
|
||||||
ui->tvp_OwnModelSet->menuAddItems(CAircraftModelView::MenuRemoveSelectedRows | CAircraftModelView::MenuClear);
|
ui->tvp_OwnModelSet->menuAddItems(CAircraftModelView::MenuRemoveSelectedRows | CAircraftModelView::MenuClear);
|
||||||
|
ui->tvp_OwnModelSet->menuAddItems(CAircraftModelView::MenuRemoveSelectedRows | CAircraftModelView::MenuMaterializeFilter);
|
||||||
ui->tvp_OwnModelSet->addFilterDialog();
|
ui->tvp_OwnModelSet->addFilterDialog();
|
||||||
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));
|
||||||
|
|||||||
@@ -32,12 +32,10 @@ class QWidget;
|
|||||||
|
|
||||||
namespace BlackMisc { namespace Simulation { class CAircraftModel; } }
|
namespace BlackMisc { namespace Simulation { class CAircraftModel; } }
|
||||||
namespace Ui { class CDbOwnModelSetComponent; }
|
namespace Ui { class CDbOwnModelSetComponent; }
|
||||||
|
|
||||||
namespace BlackGui
|
namespace BlackGui
|
||||||
{
|
{
|
||||||
namespace Menus { class CMenuActions; }
|
namespace Menus { class CMenuActions; }
|
||||||
namespace Views { class CAircraftModelView; }
|
namespace Views { class CAircraftModelView; }
|
||||||
|
|
||||||
namespace Components
|
namespace Components
|
||||||
{
|
{
|
||||||
class CDbMappingComponent;
|
class CDbMappingComponent;
|
||||||
|
|||||||
@@ -499,6 +499,25 @@ namespace BlackGui
|
|||||||
return this->m_container;
|
return this->m_container;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename ObjectType, typename ContainerType, bool UseCompare>
|
||||||
|
const ContainerType &CListModelBase<ObjectType, ContainerType, UseCompare>::containerFiltered() const
|
||||||
|
{
|
||||||
|
return this->m_containerFiltered;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename ObjectType, typename ContainerType, bool UseCompare>
|
||||||
|
const ContainerType &CListModelBase<ObjectType, ContainerType, UseCompare>::containerOrFilteredContainer() const
|
||||||
|
{
|
||||||
|
if (this->hasFilter())
|
||||||
|
{
|
||||||
|
return this->m_containerFiltered;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return this->m_container;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
template <typename ObjectType, typename ContainerType, bool UseCompare>
|
template <typename ObjectType, typename ContainerType, bool UseCompare>
|
||||||
void CListModelBase<ObjectType, ContainerType, UseCompare>::push_back(const ObjectType &object)
|
void CListModelBase<ObjectType, ContainerType, UseCompare>::push_back(const ObjectType &object)
|
||||||
{
|
{
|
||||||
@@ -585,19 +604,6 @@ namespace BlackGui
|
|||||||
return this->update(c, sort);
|
return this->update(c, sort);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename ObjectType, typename ContainerType, bool UseCompare>
|
|
||||||
const ContainerType &CListModelBase<ObjectType, ContainerType, UseCompare>::containerOrFilteredContainer() const
|
|
||||||
{
|
|
||||||
if (this->hasFilter())
|
|
||||||
{
|
|
||||||
return this->m_containerFiltered;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return this->m_container;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename ObjectType, typename ContainerType, bool UseCompare>
|
template <typename ObjectType, typename ContainerType, bool UseCompare>
|
||||||
void CListModelBase<ObjectType, ContainerType, UseCompare>::updateFilteredContainer()
|
void CListModelBase<ObjectType, ContainerType, UseCompare>::updateFilteredContainer()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -37,7 +37,6 @@ class QMimeData;
|
|||||||
class QModelIndex;
|
class QModelIndex;
|
||||||
|
|
||||||
namespace BlackMisc { class CWorker; }
|
namespace BlackMisc { class CWorker; }
|
||||||
|
|
||||||
namespace BlackGui
|
namespace BlackGui
|
||||||
{
|
{
|
||||||
namespace Models
|
namespace Models
|
||||||
@@ -205,6 +204,9 @@ namespace BlackGui
|
|||||||
//! Used container data
|
//! Used container data
|
||||||
const ContainerType &container() const;
|
const ContainerType &container() const;
|
||||||
|
|
||||||
|
//! Used container data
|
||||||
|
const ContainerType &containerFiltered() const;
|
||||||
|
|
||||||
//! Full container or cached filtered container as approproiate
|
//! Full container or cached filtered container as approproiate
|
||||||
const ContainerType &containerOrFilteredContainer() const;
|
const ContainerType &containerOrFilteredContainer() const;
|
||||||
|
|
||||||
|
|||||||
@@ -41,12 +41,10 @@ namespace BlackMisc
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
namespace BlackMisc { namespace Simulation { class CAircraftModel; } }
|
namespace BlackMisc { namespace Simulation { class CAircraftModel; } }
|
||||||
|
|
||||||
namespace BlackGui
|
namespace BlackGui
|
||||||
{
|
{
|
||||||
namespace Filters { class CAircraftModelFilterDialog; }
|
namespace Filters { class CAircraftModelFilterDialog; }
|
||||||
namespace Menus { class CMenuActions; }
|
namespace Menus { class CMenuActions; }
|
||||||
|
|
||||||
namespace Views
|
namespace Views
|
||||||
{
|
{
|
||||||
//! Aircraft view
|
//! Aircraft view
|
||||||
|
|||||||
@@ -257,6 +257,7 @@ namespace BlackGui
|
|||||||
ma.addAction(CIcons::filter16(), "Remove Filter", CMenuAction::pathViewFilter(), { this, &CViewBaseNonTemplate::ps_removeFilter });
|
ma.addAction(CIcons::filter16(), "Remove Filter", CMenuAction::pathViewFilter(), { this, &CViewBaseNonTemplate::ps_removeFilter });
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case MenuMaterializeFilter: { ma.addAction(CIcons::tableRelationship16(), "Materialize filtered data", CMenuAction::pathViewFilter(), { this, &CViewBaseNonTemplate::materializeFilter }); break; }
|
||||||
case MenuLoad: { ma.addAction(CIcons::disk16(), "Load from file", CMenuAction::pathViewLoadSave(), { this, &CViewBaseNonTemplate::ps_loadJsonAction }); break; }
|
case MenuLoad: { ma.addAction(CIcons::disk16(), "Load from file", CMenuAction::pathViewLoadSave(), { this, &CViewBaseNonTemplate::ps_loadJsonAction }); break; }
|
||||||
case MenuSave: { ma.addAction(CIcons::disk16(), "Save data in file", CMenuAction::pathViewLoadSave(), { this, &CViewBaseNonTemplate::ps_saveJsonAction }, CShortcut::keySaveViews()); break; }
|
case MenuSave: { ma.addAction(CIcons::disk16(), "Save data in file", CMenuAction::pathViewLoadSave(), { this, &CViewBaseNonTemplate::ps_saveJsonAction }, CShortcut::keySaveViews()); break; }
|
||||||
default:
|
default:
|
||||||
@@ -297,6 +298,10 @@ namespace BlackGui
|
|||||||
if (this->m_menus.testFlag(MenuFilter))
|
if (this->m_menus.testFlag(MenuFilter))
|
||||||
{
|
{
|
||||||
menuActions.addActions(this->initMenuActions(MenuFilter));
|
menuActions.addActions(this->initMenuActions(MenuFilter));
|
||||||
|
if (this->m_menus.testFlag(MenuMaterializeFilter))
|
||||||
|
{
|
||||||
|
menuActions.addActions(this->initMenuActions(MenuMaterializeFilter));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// selection menus, not in menu action list because it depends on current selection
|
// selection menus, not in menu action list because it depends on current selection
|
||||||
@@ -967,6 +972,17 @@ namespace BlackGui
|
|||||||
return this->m_model->clearHighlighting();
|
return this->m_model->clearHighlighting();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <class ModelClass, class ContainerType, class ObjectType>
|
||||||
|
void CViewBase<ModelClass, ContainerType, ObjectType>::materializeFilter()
|
||||||
|
{
|
||||||
|
Q_ASSERT(this->m_model);
|
||||||
|
if (!this->m_model->hasFilter()) { return; }
|
||||||
|
if (this->isEmpty()) { return; }
|
||||||
|
ContainerType filtered(this->m_model->containerFiltered());
|
||||||
|
this->removeFilter();
|
||||||
|
this->updateContainerMaybeAsync(filtered);
|
||||||
|
}
|
||||||
|
|
||||||
template <class ModelClass, class ContainerType, class ObjectType>
|
template <class ModelClass, class ContainerType, class ObjectType>
|
||||||
int CViewBase<ModelClass, ContainerType, ObjectType>::rowCount() const
|
int CViewBase<ModelClass, ContainerType, ObjectType>::rowCount() const
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -107,10 +107,11 @@ namespace BlackGui
|
|||||||
MenuDisplayAutomatically = 1 << 4, //!< allow to switch display automatically
|
MenuDisplayAutomatically = 1 << 4, //!< allow to switch display automatically
|
||||||
MenuDisplayAutomaticallyAndRefresh = MenuDisplayAutomatically | MenuRefresh, //!< should come together
|
MenuDisplayAutomaticallyAndRefresh = MenuDisplayAutomatically | MenuRefresh, //!< should come together
|
||||||
MenuFilter = 1 << 5, //!< filter can be opened
|
MenuFilter = 1 << 5, //!< filter can be opened
|
||||||
MenuSave = 1 << 6, //!< save as JSON
|
MenuMaterializeFilter = 1 << 6, //!< materialize filter (filtered data become model data)
|
||||||
MenuLoad = 1 << 7, //!< load from JSON
|
MenuSave = 1 << 7, //!< save as JSON
|
||||||
MenuToggleSelectionMode = 1 << 8, //!< allow to toggle selection mode
|
MenuLoad = 1 << 8, //!< load from JSON
|
||||||
MenuOrderable = 1 << 9, //!< items can be ordered (if container is BlackMisc::IOrderableList
|
MenuToggleSelectionMode = 1 << 9, //!< allow to toggle selection mode
|
||||||
|
MenuOrderable = 1 << 10, //!< items can be ordered (if container is BlackMisc::IOrderableList
|
||||||
MenuStandard = MenuClear | MenuRemoveSelectedRows | MenuRefresh | MenuBackend |
|
MenuStandard = MenuClear | MenuRemoveSelectedRows | MenuRefresh | MenuBackend |
|
||||||
MenuDisplayAutomatically | MenuFilter | MenuSave | MenuLoad | MenuToggleSelectionMode,
|
MenuDisplayAutomatically | MenuFilter | MenuSave | MenuLoad | MenuToggleSelectionMode,
|
||||||
MenuLoadAndSave = MenuLoad | MenuSave,
|
MenuLoadAndSave = MenuLoad | MenuSave,
|
||||||
@@ -119,8 +120,8 @@ namespace BlackGui
|
|||||||
MenuDefaultDbViews = MenuToggleSelectionMode | MenuBackend,
|
MenuDefaultDbViews = MenuToggleSelectionMode | MenuBackend,
|
||||||
// special menus, should be in derived classes, but enums cannot be inherited
|
// special menus, should be in derived classes, but enums cannot be inherited
|
||||||
// maybe shifted in the future to elsewhere
|
// maybe shifted in the future to elsewhere
|
||||||
MenuHighlightStashed = 1 << 10, //!< highlight stashed models
|
MenuHighlightStashed = 1 << 11, //!< highlight stashed models
|
||||||
MenuCanStashModels = 1 << 11, //!< stash models
|
MenuCanStashModels = 1 << 12, //!< stash models
|
||||||
MenuStashing = MenuHighlightStashed | MenuCanStashModels,
|
MenuStashing = MenuHighlightStashed | MenuCanStashModels,
|
||||||
};
|
};
|
||||||
Q_DECLARE_FLAGS(Menu, MenuFlag)
|
Q_DECLARE_FLAGS(Menu, MenuFlag)
|
||||||
@@ -312,6 +313,9 @@ namespace BlackGui
|
|||||||
//! Clear any highlighted objects
|
//! Clear any highlighted objects
|
||||||
virtual void clearHighlighting() = 0;
|
virtual void clearHighlighting() = 0;
|
||||||
|
|
||||||
|
//! Materialize filter
|
||||||
|
virtual void materializeFilter() = 0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
//! Constructor
|
//! Constructor
|
||||||
CViewBaseNonTemplate(QWidget *parent);
|
CViewBaseNonTemplate(QWidget *parent);
|
||||||
@@ -547,6 +551,7 @@ namespace BlackGui
|
|||||||
virtual int removeSelectedRows() override;
|
virtual int removeSelectedRows() override;
|
||||||
virtual void presizeOrFullResizeToContents() override;
|
virtual void presizeOrFullResizeToContents() override;
|
||||||
virtual void clearHighlighting() override;
|
virtual void clearHighlighting() override;
|
||||||
|
virtual void materializeFilter() override;
|
||||||
//! @}
|
//! @}
|
||||||
|
|
||||||
//! \name BlackGui::Views::CViewBaseNonTemplate implementations
|
//! \name BlackGui::Views::CViewBaseNonTemplate implementations
|
||||||
|
|||||||
Reference in New Issue
Block a user