/
WItemSelectionModel
117 lines (101 loc) · 3.49 KB
/
WItemSelectionModel
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
// This may look like C code, but it's really -*- C++ -*-
/*
* Copyright (C) 2008 Emweb bvba, Kessel-Lo, Belgium.
*
* See the LICENSE file for terms of use.
*/
#ifndef WITEM_SELECTION_MODEL_H_
#define WITEM_SELECTION_MODEL_H_
#include <Wt/WObject>
#include <Wt/WModelIndex>
#include <Wt/WGlobal>
#include <string>
namespace Wt {
class WAbstractItemModel;
class WAbstractItemView;
/*! \class WItemSelectionModel Wt/WItemSelectionModel Wt/WItemSelectionModel
* \brief A class that represents a selection for a WAbstractItemView.
*
* This model is currently only used by WTreeView, and plays only
* a role in drag & drop of an item selection.
*
* When an item selection is dragged from a view widget, the generated
* drop events will have as source object (see WDropEvent::source())
* this selection model.
*
* Although this class does not (yet) allow you to modify the
* selection, note that manipulations to the model may modify the
* selection (row insertions and removals may shift the selection, and
* row deletions may shrink the selection).
*
* \note Currently this class cannot be shared between multiple views.
*
* \ingroup modelview
*
* \sa WTreeView, WTableView, WAbstractItemModel
*/
class WT_API WItemSelectionModel : public WObject
{
public:
/*! \brief Returns the WAbstractItemModel.
*/
WAbstractItemModel *model() const { return model_; }
/*! \brief Returns the set of selected items.
*
* The model indexes are returned as a set, topologically ordered (in
* the order they appear in the view).
*
* When selection operates on rows (\link Wt::SelectRows SelectRows\endlink),
* this method only returns the model index of first column's element of the
* selected rows.
*/
WModelIndexSet selectedIndexes() const { return selection_; }
/*! \brief Returns wheter an item is selected.
*
* When selection operates on rows (\link Wt::SelectRows SelectRows\endlink),
* this method returns true for each element in a selected row.
*
* \sa selectedIndexes()
*/
bool isSelected(const WModelIndex& index) const;
/*! \brief Sets the selection behaviour.
*
* By default, the selection contains rows (\link Wt::SelectRows
* SelectRows\endlink), in which case model indexes will always be
* have column 0, but represent the whole row.
*
* Alternatively, you can allow selection for individual items
* (\link Wt::SelectItems SelectItems\endlink).
*/
void setSelectionBehavior(SelectionBehavior behavior);
/*! \brief Returns the selection behaviour.
*
* \sa setSelectionBehavior()
*/
SelectionBehavior selectionBehavior() const { return selectionBehavior_; }
/*! \brief Returns the selection mime type.
*
* This should return the mime type for the current selection, or an emtpy
* string if the selection cannot be dragged.
*
* The default implementation returns the mime type based on MimeTypeRole data
* if all selected items indicate the same mime type, or the model mimeType()
* otherwise.
*
* If one or more items indicate that they cannot be dragged, then an empty
* string is returned.
*/
virtual std::string mimeType();
private:
WModelIndexSet selection_;
WAbstractItemModel *model_;
SelectionBehavior selectionBehavior_;
WItemSelectionModel(WAbstractItemModel *model, WObject *parent = 0);
void modelLayoutAboutToBeChanged();
void modelLayoutChanged();
friend class WAbstractItemView;
friend class WTableView;
friend class WTreeView;
};
}
#endif // WITEM_SELECTION_MODEL_H_