Wt
4.11.0
|
A proxy model for Wt's item models that provides batch editing. More...
#include <Wt/WBatchEditProxyModel.h>
Public Member Functions | |
WBatchEditProxyModel () | |
Constructor. | |
virtual | ~WBatchEditProxyModel () |
Destructor. | |
bool | isDirty () const |
Returns whether changes have not yet been committed. | |
void | commitAll () |
Commits changes. | |
void | revertAll () |
Reverts changes. | |
void | setNewRowData (int column, const cpp17::any &data, ItemDataRole role=ItemDataRole::Display) |
Sets default data for a newly inserted row. | |
void | setNewRowFlags (int column, WFlags< ItemFlag > flags) |
Sets the item flags for items in a newly inserted row. | |
void | setDirtyIndication (ItemDataRole role, const cpp17::any &data) |
Configures data used to indicate a modified item. | |
virtual WModelIndex | mapFromSource (const WModelIndex &sourceIndex) const override |
Maps a source model index to the proxy model. | |
virtual WModelIndex | mapToSource (const WModelIndex &proxyIndex) const override |
Maps a proxy model index to the source model. | |
virtual void | setSourceModel (const std::shared_ptr< WAbstractItemModel > &sourceModel) override |
Sets the source model. | |
virtual int | columnCount (const WModelIndex &parent=WModelIndex()) const override |
Returns the number of columns. | |
virtual int | rowCount (const WModelIndex &parent=WModelIndex()) const override |
Returns the number of rows. | |
virtual WModelIndex | parent (const WModelIndex &index) const override |
Returns the parent for a model index. | |
virtual WModelIndex | index (int row, int column, const WModelIndex &parent=WModelIndex()) const override |
Returns the child index for the given row and column. | |
virtual cpp17::any | data (const WModelIndex &index, ItemDataRole role=ItemDataRole::Display) const override |
Returns the data at a specific model index. | |
virtual bool | setData (const WModelIndex &index, const cpp17::any &value, ItemDataRole role=ItemDataRole::Edit) override |
Sets item data. | |
virtual WFlags< ItemFlag > | flags (const WModelIndex &index) const override |
Returns the flags for an item. | |
virtual cpp17::any | headerData (int section, Orientation orientation=Orientation::Horizontal, ItemDataRole role=ItemDataRole::Display) const override |
Returns the row or column header data. | |
virtual bool | insertRows (int row, int count, const WModelIndex &parent=WModelIndex()) override |
Inserts one or more rows. | |
virtual bool | removeRows (int row, int count, const WModelIndex &parent=WModelIndex()) override |
Removes rows. | |
virtual bool | insertColumns (int column, int count, const WModelIndex &parent=WModelIndex()) override |
Inserts one or more columns. | |
virtual bool | removeColumns (int column, int count, const WModelIndex &parent=WModelIndex()) override |
Removes columns. | |
virtual void | sort (int column, SortOrder order=SortOrder::Ascending) override |
Sorts the model according to a particular column. | |
virtual bool | setData (const WModelIndex &index, const cpp17::any &value, ItemDataRole role=ItemDataRole::Edit) |
Sets data at the given model index. | |
bool | setData (int row, int column, const cpp17::any &value, ItemDataRole role=ItemDataRole::Edit, const WModelIndex &parent=WModelIndex()) |
Sets data at the given row and column. | |
virtual cpp17::any | data (const WModelIndex &index, ItemDataRole role=ItemDataRole::Display) const=0 |
Returns data at a specified model index for the given role. | |
cpp17::any | data (int row, int column, ItemDataRole role=ItemDataRole::Display, const WModelIndex &parent=WModelIndex()) const |
Returns the data item at the given column and row. | |
virtual bool | setHeaderData (int section, Orientation orientation, const cpp17::any &value, ItemDataRole role=ItemDataRole::Edit) |
Sets header data for a column or row. | |
bool | setHeaderData (int section, const cpp17::any &value) |
Sets column header data. | |
Public Member Functions inherited from Wt::WAbstractProxyModel | |
WAbstractProxyModel () | |
Constructor. | |
std::shared_ptr< WAbstractItemModel > | sourceModel () const |
Returns the source model. | |
virtual bool | setItemData (const WModelIndex &index, const DataMap &values) override |
Sets the data at the given model index. | |
virtual WFlags< HeaderFlag > | headerFlags (int section, Orientation orientation=Orientation::Horizontal) const override |
Returns the flags for a header. | |
virtual std::string | mimeType () const override |
Returns a mime-type for dragging a set of indexes. | |
virtual std::vector< std::string > | acceptDropMimeTypes () const override |
Returns a list of mime-types that could be accepted for a drop event. | |
virtual void | dropEvent (const WDropEvent &e, DropAction action, int row, int column, const WModelIndex &parent) override |
Handles a drop event. | |
virtual void * | toRawIndex (const WModelIndex &index) const override |
Converts a model index to a raw pointer that remains valid while the model's layout is changed. | |
virtual WModelIndex | fromRawIndex (void *rawIndex) const override |
Converts a raw pointer to a model index. | |
bool | setData (int row, int column, const cpp17::any &value, ItemDataRole role=ItemDataRole::Edit, const WModelIndex &parent=WModelIndex()) |
Sets data at the given row and column. | |
cpp17::any | data (int row, int column, ItemDataRole role=ItemDataRole::Display, const WModelIndex &parent=WModelIndex()) const |
Returns the data item at the given column and row. | |
bool | setHeaderData (int section, const cpp17::any &value) |
Sets column header data. | |
Public Member Functions inherited from Wt::WAbstractItemModel | |
WAbstractItemModel () | |
Creates a new data model. | |
virtual bool | hasChildren (const WModelIndex &index) const |
Returns if there are children at an index. | |
virtual DataMap | itemData (const WModelIndex &index) const |
Returns all data at a specific index. | |
virtual WModelIndexList | match (const WModelIndex &start, ItemDataRole role, const cpp17::any &value, int hits=-1, WFlags< MatchFlag > flags=WFlags< MatchFlag >(MatchFlag::StartsWith|MatchFlag::Wrap)) const |
Returns an index list for data items that match. | |
cpp17::any | data (int row, int column, ItemDataRole role=ItemDataRole::Display, const WModelIndex &parent=WModelIndex()) const |
Returns the data item at the given column and row. | |
virtual bool | hasIndex (int row, int column, const WModelIndex &parent=WModelIndex()) const |
Returns if an index at the given position is valid (i.e. falls within the column-row bounds). | |
bool | setHeaderData (int section, const cpp17::any &value) |
Sets column header data. | |
virtual void | expandColumn (int column) |
Expands a column. | |
virtual void | collapseColumn (int column) |
Collapses a column. | |
virtual void | dropEvent (const WDropEvent &e, DropAction action, const WModelIndex &index, Wt::Side side) |
Handles a drop event. | |
bool | insertColumn (int column, const WModelIndex &parent=WModelIndex()) |
Inserts one column. | |
bool | insertRow (int row, const WModelIndex &parent=WModelIndex()) |
Inserts one row. | |
bool | removeColumn (int column, const WModelIndex &parent=WModelIndex()) |
Removes one column. | |
bool | removeRow (int row, const WModelIndex &parent=WModelIndex()) |
Removes one row. | |
bool | setData (int row, int column, const cpp17::any &value, ItemDataRole role=ItemDataRole::Edit, const WModelIndex &parent=WModelIndex()) |
Sets data at the given row and column. | |
virtual Signal< WModelIndex, int, int > & | columnsAboutToBeInserted () |
Signal emitted before a number of columns will be inserted. | |
virtual Signal< WModelIndex, int, int > & | columnsAboutToBeRemoved () |
Signal emitted before a number of columns will be removed. | |
virtual Signal< WModelIndex, int, int > & | columnsInserted () |
Signal emitted after a number of columns were inserted. | |
virtual Signal< WModelIndex, int, int > & | columnsRemoved () |
Signal emitted after a number of columns were removed. | |
virtual Signal< WModelIndex, int, int > & | rowsAboutToBeInserted () |
Signal emitted before a number of rows will be inserted. | |
virtual Signal< WModelIndex, int, int > & | rowsAboutToBeRemoved () |
Signal emitted before a number of rows will be removed. | |
virtual Signal< WModelIndex, int, int > & | rowsInserted () |
Signal emitted after a number of rows were inserted. | |
virtual Signal< WModelIndex, int, int > & | rowsRemoved () |
Signal emitted after a number of rows were removed. | |
virtual Signal< WModelIndex, WModelIndex > & | dataChanged () |
Signal emitted when some data was changed. | |
virtual Signal< Orientation, int, int > & | headerDataChanged () |
Signal emitted when some header data was changed. | |
virtual Signal & | layoutAboutToBeChanged () |
Signal emitted when the layout is about to be changed. | |
virtual Signal & | layoutChanged () |
Signal emitted when the layout is changed. | |
virtual Signal & | modelReset () |
Signal emitted when the model was reset. | |
Public Member Functions inherited from Wt::WObject | |
void | addChild (std::unique_ptr< WObject > child) |
Add a child WObject whose lifetime is determined by this WObject. | |
template<typename Child > | |
Child * | addChild (std::unique_ptr< Child > child) |
Add a child WObject, returning a raw pointer. | |
std::unique_ptr< WObject > | removeChild (WObject *child) |
Remove a child WObject, so its lifetime is no longer determined by this WObject. | |
template<typename Child > | |
std::unique_ptr< Child > | removeChild (Child *child) |
Remove a child WObject, so its lifetime is no longer determined by this WObject. | |
virtual const std::string | id () const |
Returns the (unique) identifier for this object. | |
virtual void | setObjectName (const std::string &name) |
Sets an object name. | |
virtual std::string | objectName () const |
Returns the object name. | |
void | resetLearnedSlots () |
Resets learned stateless slot implementations. | |
template<class T > | |
void | resetLearnedSlot (void(T::*method)()) |
Resets a learned stateless slot implementation. | |
template<class T > | |
WStatelessSlot * | implementStateless (void(T::*method)()) |
Declares a slot to be stateless and learn client-side behaviour on first invocation. | |
template<class T > | |
WStatelessSlot * | implementStateless (void(T::*method)(), void(T::*undoMethod)()) |
Declares a slot to be stateless and learn client-side behaviour in advance. | |
void | isNotStateless () |
Marks the current function as not stateless. | |
template<class T > | |
WStatelessSlot * | implementJavaScript (void(T::*method)(), const std::string &jsCode) |
Provides a JavaScript implementation for a method. | |
Public Member Functions inherited from Wt::Core::observable | |
observable () noexcept | |
Default constructor. | |
virtual | ~observable () |
Destructor. | |
template<typename... Args, typename C > | |
auto | bindSafe (void(C::*method)(Args...)) noexcept |
Protects a method call against object destruction. | |
template<typename... Args, typename C > | |
auto | bindSafe (void(C::*method)(Args...) const) const noexcept |
Protects a const method call against object destruction. | |
template<typename Function > | |
auto | bindSafe (const Function &function) noexcept |
Protects a function against object destruction. | |
Additional Inherited Members | |
Public Types inherited from Wt::WAbstractItemModel | |
typedef std::map< ItemDataRole, cpp17::any > | DataMap |
Data map. | |
Public Types inherited from Wt::WObject | |
typedef void(WObject::* | Method) () |
Typedef for a WObject method without arguments. | |
Protected Types inherited from Wt::WAbstractProxyModel | |
typedef std::map< WModelIndex, BaseItem * > | ItemMap |
A map for items. | |
Protected Member Functions inherited from Wt::WAbstractProxyModel | |
WModelIndex | createSourceIndex (int row, int column, void *ptr) const |
Create a source model index. | |
void | startShiftModelIndexes (const WModelIndex &sourceParent, int start, int count, ItemMap &items) |
Utility methods to shift items in an item map. | |
Protected Member Functions inherited from Wt::WAbstractItemModel | |
void | reset () |
Resets the model and invalidate any data. | |
WModelIndex | createIndex (int row, int column, void *ptr) const |
Creates a model index for the given row and column. | |
WModelIndex | createIndex (int row, int column, ::uint64_t id) const |
Creates a model index for the given row and column. | |
void | beginInsertColumns (const WModelIndex &parent, int first, int last) |
Method to be called before inserting columns. | |
void | beginInsertRows (const WModelIndex &parent, int first, int last) |
Method to be called before inserting rows. | |
void | beginRemoveColumns (const WModelIndex &parent, int first, int last) |
Method to be called before removing columns. | |
void | beginRemoveRows (const WModelIndex &parent, int first, int last) |
Method to be called before removing rows. | |
void | endInsertColumns () |
Method to be called after inserting columns. | |
void | endInsertRows () |
Method to be called after inserting rows. | |
void | endRemoveColumns () |
Method to be called after removing columns. | |
void | endRemoveRows () |
Method to be called after removing rows. | |
virtual void | copyData (const WModelIndex &sIndex, const WModelIndex &dIndex) |
Copy data to an index in this model. | |
Protected Member Functions inherited from Wt::WObject | |
virtual WStatelessSlot * | getStateless (Method method) |
On-demand stateless slot implementation. | |
A proxy model for Wt's item models that provides batch editing.
This proxy model presents data from a source model, and caches any editing operation without affecting the underlying source model, until commitAll() or revertAll() is called. In this way, you can commit all the editing in batch to the underlying source model, only when the user confirms the changes.
All editing operations are supported:
The model supports both simple tabular models, as well as hierarchical (tree-like / treetable-like) models, with children under items in the first column.
Default values for a newly inserted row can be set using setNewRowData() and flags for its items using setNewRowFlags().
|
overridevirtual |
Returns the number of columns.
This returns the number of columns at index parent
.
Implements Wt::WAbstractItemModel.
void Wt::WBatchEditProxyModel::commitAll | ( | ) |
|
overridevirtual |
Returns the data at a specific model index.
The default proxy implementation translates the index to the source model, and calls sourceModel()->data() with this index.
Reimplemented from Wt::WAbstractProxyModel.
|
virtual |
Returns data at a specified model index for the given role.
You should check the role
to decide what data to return. Usually a View class will ask for data for several roles which affect not only the contents (Wt::ItemDataRole::Display) but also icons (Wt::ItemDataRole::Decoration), URLs (Wt::ItemDataRole::Link), and other visual aspects. If your item does not specify data for a particular role, it should simply return a Wt::cpp17::any().
Reimplemented from Wt::WAbstractProxyModel.
cpp17::any Wt::WAbstractItemModel::data | ( | int | row, |
int | column, | ||
ItemDataRole | role = ItemDataRole::Display , |
||
const WModelIndex & | parent = WModelIndex() |
||
) | const |
Returns the data item at the given column and row.
This is a convenience method, and is equivalent to:
|
overridevirtual |
Returns the flags for an item.
The default proxy implementation calls sourceModel()->flags(mapToSource(index))
Reimplemented from Wt::WAbstractProxyModel.
|
overridevirtual |
Returns the row or column header data.
The default proxy implementation constructs a dummy WModelIndex with the row set to 0 and column set to section
if the orientation is Wt::Orientation::Horizontal, or with the row set to section
and the column set to 0 if the orientation is Wt::Orientation::Vertical.
The resulting section that is forwarded to sourceModel()->headerData() depends on how the WModelIndex is transformed with mapToSource().
Reimplemented from Wt::WAbstractProxyModel.
|
overridevirtual |
Returns the child index for the given row and column.
When implementing this method, you can use createIndex() to create an index that corresponds to the item at row
and column
within parent
.
If the location is invalid (out of bounds at the parent), then an invalid index must be returned.
Implements Wt::WAbstractItemModel.
|
overridevirtual |
Inserts one or more columns.
The default proxy implementation calls sourceModel()->insertColumns(column, count, parent)
Reimplemented from Wt::WAbstractProxyModel.
|
overridevirtual |
Inserts one or more rows.
In models that support row insertion, this inserts count
rows, starting at row
, and returns true
if the operation was successful. The new rows are inserted under parent
.
If parent had no children, then a single column is added with count
rows.
The default implementation returns false
.
The model implementation must call beginInsertRows() and endInsertRows() before and after the operation whenever its geometry is changed by inserting rows. This emits signals for views to properly react to these changes.
Reimplemented from Wt::WAbstractItemModel.
bool Wt::WBatchEditProxyModel::isDirty | ( | ) | const |
Returns whether changes have not yet been committed.
Returns whether have been made to the proxy model, which could be committed using commitAll() or reverted using revertAll().
|
overridevirtual |
Maps a source model index to the proxy model.
This method returns a model index in the proxy model that corresponds to the model index sourceIndex
in the source model. This method must only be implemented for source model indexes that are mapped and thus are the result of mapToSource().
Implements Wt::WAbstractProxyModel.
|
overridevirtual |
Maps a proxy model index to the source model.
This method returns a model index in the source model that corresponds to the proxy model index proxyIndex
.
Implements Wt::WAbstractProxyModel.
|
overridevirtual |
Returns the parent for a model index.
An implementation should use createIndex() to create a model index that corresponds to the parent of a given index.
Note that the index itself may be stale (referencing a row/column within the parent that is outside the model geometry), but its parent (identified by the WModelIndex::internalPointer()) is referencing an existing parent. A stale index can only be used while the model geometry is being updated, i.e. during the emission of the corresponding [rows/columns](Being)[Removed/Inserted]() signals.
Implements Wt::WAbstractItemModel.
|
overridevirtual |
Removes columns.
The default proxy implementation calls sourceModel()->removeColumns(column, count, parent)
Reimplemented from Wt::WAbstractProxyModel.
|
overridevirtual |
Removes rows.
Returns true
if the operation was successful.
The default implementation returns false
.
The model implementation must call beginRemoveRows() and endRemoveRows() before and after the operation whenever its geometry is changed by removing rows. This emits signals for views to properly react to these changes.
Reimplemented from Wt::WAbstractItemModel.
void Wt::WBatchEditProxyModel::revertAll | ( | ) |
|
overridevirtual |
Returns the number of rows.
This returns the number of rows at index parent
.
Implements Wt::WAbstractItemModel.
|
virtual |
Sets data at the given model index.
Returns true
if the operation was successful.
The default implementation returns false
.
The model implementation must emit the dataChanged() signal after data was changed.
Reimplemented from Wt::WAbstractProxyModel.
|
overridevirtual |
Sets item data.
The default implementation will copy Wt::ItemDataRole::Edit data to Wt::ItemDataRole::Display. You may want to specialize the model to provide a more specialized editing behaviour.
Reimplemented from Wt::WAbstractProxyModel.
bool Wt::WAbstractItemModel::setData | ( | int | row, |
int | column, | ||
const cpp17::any & | value, | ||
ItemDataRole | role = ItemDataRole::Edit , |
||
const WModelIndex & | parent = WModelIndex() |
||
) |
Sets data at the given row and column.
This is a convience method, and is equivalent to:
Returns true
if the operation was successful.
void Wt::WBatchEditProxyModel::setDirtyIndication | ( | ItemDataRole | role, |
const cpp17::any & | data | ||
) |
Configures data used to indicate a modified item.
This sets data
for item data role role
to be returned by data() for an item that is dirty (e.g. because it belongs to a newly inserted row/column, or because new data has been set for it.
When role
is Wt::ItemDataRole::StyleClass, the style class is appended to any style already returned by the source model or set by setNewRowData().
By default there is no dirty indication.
Sets column header data.
Returns true
if the operation was successful.
|
virtual |
Sets header data for a column or row.
Returns true
if the operation was successful.
Reimplemented from Wt::WAbstractProxyModel.
void Wt::WBatchEditProxyModel::setNewRowData | ( | int | column, |
const cpp17::any & | data, | ||
ItemDataRole | role = ItemDataRole::Display |
||
) |
Sets default data for a newly inserted row.
You can use this method to initialize data for a newly inserted row.
Sets the item flags for items in a newly inserted row.
By default, flags() will return ItemFlag::Selectable.
|
overridevirtual |
Sets the source model.
The source model provides the actual data for the proxy model.
Ownership of the source model is not transferred.
All signals of the source model are propagated to the proxy model.
Reimplemented from Wt::WAbstractProxyModel.
|
overridevirtual |
Sorts the model according to a particular column.
If the model supports sorting, then it should emit the layoutAboutToBeChanged() signal, rearrange its items, and afterwards emit the layoutChanged() signal.
Reimplemented from Wt::WAbstractItemModel.