refs #757, materialize filtered data

* menu item / flag
* functions in view class
* some minor formatting
This commit is contained in:
Klaus Basan
2016-09-03 23:22:10 +02:00
committed by Roland Winklmeier
parent c848d7ca61
commit 610dba2028
7 changed files with 50 additions and 24 deletions

View File

@@ -56,6 +56,7 @@ namespace BlackGui
ui->tvp_OwnModelSet->menuAddItems(CAircraftModelView::MenuStashing);
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::MenuMaterializeFilter);
ui->tvp_OwnModelSet->addFilterDialog();
ui->tvp_OwnModelSet->setJsonLoad(CAircraftModelView::AllowOnlySingleSimulator | CAircraftModelView::ReduceToOneSimulator);
ui->tvp_OwnModelSet->setCustomMenu(new CLoadModelsMenu(this));

View File

@@ -32,12 +32,10 @@ class QWidget;
namespace BlackMisc { namespace Simulation { class CAircraftModel; } }
namespace Ui { class CDbOwnModelSetComponent; }
namespace BlackGui
{
namespace Menus { class CMenuActions; }
namespace Views { class CAircraftModelView; }
namespace Components
{
class CDbMappingComponent;

View File

@@ -499,6 +499,25 @@ namespace BlackGui
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>
void CListModelBase<ObjectType, ContainerType, UseCompare>::push_back(const ObjectType &object)
{
@@ -585,19 +604,6 @@ namespace BlackGui
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>
void CListModelBase<ObjectType, ContainerType, UseCompare>::updateFilteredContainer()
{

View File

@@ -37,7 +37,6 @@ class QMimeData;
class QModelIndex;
namespace BlackMisc { class CWorker; }
namespace BlackGui
{
namespace Models
@@ -205,6 +204,9 @@ namespace BlackGui
//! Used container data
const ContainerType &container() const;
//! Used container data
const ContainerType &containerFiltered() const;
//! Full container or cached filtered container as approproiate
const ContainerType &containerOrFilteredContainer() const;

View File

@@ -41,12 +41,10 @@ namespace BlackMisc
}
}
namespace BlackMisc { namespace Simulation { class CAircraftModel; } }
namespace BlackGui
{
namespace Filters { class CAircraftModelFilterDialog; }
namespace Menus { class CMenuActions; }
namespace Views
{
//! Aircraft view

View File

@@ -257,6 +257,7 @@ namespace BlackGui
ma.addAction(CIcons::filter16(), "Remove Filter", CMenuAction::pathViewFilter(), { this, &CViewBaseNonTemplate::ps_removeFilter });
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 MenuSave: { ma.addAction(CIcons::disk16(), "Save data in file", CMenuAction::pathViewLoadSave(), { this, &CViewBaseNonTemplate::ps_saveJsonAction }, CShortcut::keySaveViews()); break; }
default:
@@ -297,6 +298,10 @@ namespace BlackGui
if (this->m_menus.testFlag(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
@@ -967,6 +972,17 @@ namespace BlackGui
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>
int CViewBase<ModelClass, ContainerType, ObjectType>::rowCount() const
{

View File

@@ -107,10 +107,11 @@ namespace BlackGui
MenuDisplayAutomatically = 1 << 4, //!< allow to switch display automatically
MenuDisplayAutomaticallyAndRefresh = MenuDisplayAutomatically | MenuRefresh, //!< should come together
MenuFilter = 1 << 5, //!< filter can be opened
MenuSave = 1 << 6, //!< save as JSON
MenuLoad = 1 << 7, //!< load from JSON
MenuToggleSelectionMode = 1 << 8, //!< allow to toggle selection mode
MenuOrderable = 1 << 9, //!< items can be ordered (if container is BlackMisc::IOrderableList
MenuMaterializeFilter = 1 << 6, //!< materialize filter (filtered data become model data)
MenuSave = 1 << 7, //!< save as JSON
MenuLoad = 1 << 8, //!< load from JSON
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 |
MenuDisplayAutomatically | MenuFilter | MenuSave | MenuLoad | MenuToggleSelectionMode,
MenuLoadAndSave = MenuLoad | MenuSave,
@@ -119,8 +120,8 @@ namespace BlackGui
MenuDefaultDbViews = MenuToggleSelectionMode | MenuBackend,
// special menus, should be in derived classes, but enums cannot be inherited
// maybe shifted in the future to elsewhere
MenuHighlightStashed = 1 << 10, //!< highlight stashed models
MenuCanStashModels = 1 << 11, //!< stash models
MenuHighlightStashed = 1 << 11, //!< highlight stashed models
MenuCanStashModels = 1 << 12, //!< stash models
MenuStashing = MenuHighlightStashed | MenuCanStashModels,
};
Q_DECLARE_FLAGS(Menu, MenuFlag)
@@ -312,6 +313,9 @@ namespace BlackGui
//! Clear any highlighted objects
virtual void clearHighlighting() = 0;
//! Materialize filter
virtual void materializeFilter() = 0;
protected:
//! Constructor
CViewBaseNonTemplate(QWidget *parent);
@@ -547,6 +551,7 @@ namespace BlackGui
virtual int removeSelectedRows() override;
virtual void presizeOrFullResizeToContents() override;
virtual void clearHighlighting() override;
virtual void materializeFilter() override;
//! @}
//! \name BlackGui::Views::CViewBaseNonTemplate implementations