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->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));

View File

@@ -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;

View File

@@ -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()
{ {

View File

@@ -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;

View File

@@ -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

View File

@@ -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
{ {

View File

@@ -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