36
36
signal selectionDone(var selected_id_list)
37
37
property string continueText: i18n.tr("Continue")
38
38
readonly property alias model: selectionModel
39
property alias keys: keysDelegator
39
40
property bool onlyOneAllowed: false
40
41
property bool emptyAllowed: false
41
42
property bool largeBuffer: false
46
47
property var selectedCount : 0
48
property var filteredSelectedCount: 0
47
49
property var disabledSelectedCount: 0
50
property var filter: new RegExp('.*');
48
51
state : selectedCount > 0 ? "nonempty selection" :
49
52
(disabledSelectedCount > 0 ? "disabled only selection" : "empty selection")
54
// This model holds all items that can be selected, even when filtered-out
51
58
// A function that needs to be called after changes are done to the model
52
59
// to re-count number of selected items on the list
55
62
disabledSelectedCount = 0;
56
63
for (var i=0; i < selectionModel.count; i++) {
57
if (selectionModel.get(i).mod_selected) {
58
if (selectionModel.get(i).mod_disabled) {
64
var modelItem = selectionModel.get(i);
65
if (modelItem.mod_selected) {
66
if (modelItem.mod_disabled) {
59
67
disabledSelectedCount++;
73
updateFilteredModel();
75
function updateFilteredModel() {
76
filteredSelectionModel.clear();
77
filteredSelectedCount = 0;
78
for (var i=0; i < selectionModel.count; i++) {
79
var modelItem = selectionModel.get(i);
80
modelItem['fullListIndex'] = i;
81
if (modelItem.mod_name.search(filter) > -1) {
82
filteredSelectionModel.append(modelItem);
83
if (modelItem.mod_selected) {
84
filteredSelectedCount++;
66
89
function gatherSelection() {
67
90
var selected_id_list = [];
77
100
continueButton.unlatch();
79
102
function deselectAll() {
81
disabledSelectedCount = 0;
82
for (var i=0; i<selectionModel.count; i++) {
83
if (!selectionModel.get(i)["mod_disabled"]) {
84
selectionModel.setProperty(i, "mod_selected", false);
86
if (selectionModel.get(i).mod_selected) {
87
disabledSelectedCount++;
103
for (var i=0; i<filteredSelectionModel.count; i++) {
104
var modelItem = filteredSelectionModel.get(i);
105
if (!modelItem.mod_disabled) {
106
if (modelItem.mod_selected) {
107
filteredSelectionModel.setProperty(i, "mod_selected", false);
108
selectionModel.setProperty(modelItem.fullListIndex, "mod_selected", false);
110
filteredSelectedCount--;
92
115
function selectAll() {
94
disabledSelectedCount = 0;
95
for (var i=0; i<selectionModel.count; i++) {
96
if (!selectionModel.get(i)["mod_disabled"]) {
97
selectionModel.setProperty(i, "mod_selected", true);
100
if (selectionModel.get(i).mod_selected) {
101
disabledSelectedCount++;
116
for (var i=0; i<filteredSelectionModel.count; i++) {
117
var modelItem = filteredSelectionModel.get(i);
118
if (!modelItem.mod_disabled) {
119
if (!modelItem.mod_selected) {
120
filteredSelectionModel.setProperty(i, "mod_selected", true);
121
selectionModel.setProperty(modelItem.fullListIndex, "mod_selected", true);
123
filteredSelectedCount++;
117
139
visible: !onlyOneAllowed
119
141
if (state === "empty selection" || state == "disabled only selection") {
142
if (!onlyOneAllowed) // still reachable via key shortcut
122
145
else if (state === "nonempty selection") {
152
text: i18n.tr("Find")
155
if (!searchBox.visible) {
156
searchBox.visible = true;
157
searchBox.forceActiveFocus();
159
searchBox.visible = false;
187
if (event.modifiers == 0 && c.search(/[a-z]/, 'i') > -1) {
188
searchBox.insert(searchBox.cursorPosition, c)
189
searchBox.forceActiveFocus();
190
searchBox.visible = true
191
searchBox.focus = true
193
if (event.key == Qt.Key_Escape) {
195
searchBox.focus = false;
196
searchBox.visible = false;
199
Component.onCompleted: {
200
rootKeysDelegator.setHandler('alt+t', root, function() {
201
if (selectedCount > 0 || disabledSelectedCount > 0) {
202
continueButton.clicked();
205
rootKeysDelegator.setHandler('ctrl+a', root, toggleSelection.trigger);
149
210
spacing: units.gu(3)
218
294
// Toggle the mod_selected property
220
296
if (onlyOneAllowed && !checked && selectedCount > 0) {
221
// clear other selections
298
// clear other selections on the original list
299
for (var i=0; i < selectionModel.count; i++) {
300
var modelItem = selectionModel.get(i);
301
if (!modelItem.mod_disabled) {
302
if (modelItem.mod_selected) {
303
selectionModel.setProperty(i, "mod_selected", false);
224
selectionModel.setProperty(index, 'mod_selected', !checked);
309
filteredSelectionModel.setProperty(index, 'mod_selected', !checked);
225
310
selectedCount += checked ? 1 : -1;
311
// propagate selection to the original list
312
selectionModel.setProperty(fullListIndex, 'mod_selected', checked);
228
316
onClicked: checkBox.clicked()