2
* This file is part of unity-2d
4
* Copyright 2010-2011 Canonical Ltd.
6
* This program is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation; version 3.
10
* This program is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
* GNU General Public License for more details.
15
* You should have received a copy of the GNU General Public License
16
* along with this program. If not, see <http://www.gnu.org/licenses/>.
24
property alias model: list.model
25
property alias count: list.count
26
property int cellWidth: Math.floor(width / count)
28
/* Keep track of active cells with array, from which determine index
29
of leftmost and rightmost active cells.*/
30
property variant activeCells: Array(count)
31
property int leftActiveCell: -1
32
property int rightActiveCell: -1
34
function cellActivationChanged(cellId, state) {
38
setSelectionBarPosition()
41
function setSelectionBarPosition() {
42
leftActiveCell = activeCells.indexOf(true)
43
rightActiveCell = activeCells.lastIndexOf(true);
49
/* FIXME: Rectangle's borders grow half inside and half outside of the
50
rectangle. In order to avoid it being clipped, we adjust its size
51
and position depending on its border's width.
53
Ref.: http://lists.qt.nokia.com/pipermail/qt-qml/2010-May/000264.html
55
x: Math.floor(border.width / 2)
56
y: Math.floor(border.width / 2)
57
width: parent.width - border.width
58
height: parent.height - border.width
60
border.color: "#21ffffff" // 80% opaque white
70
orientation: ListView.Horizontal
72
boundsBehavior: Flickable.StopAtBounds
74
delegate: MultiRangeButton {
75
height: ListView.view.height
79
onClicked: item.active = !item.active
80
onCheckedChanged: cellActivationChanged(model.index, checked)
81
isLast: ( model.index == count-1 )
82
Component.onCompleted: cellActivationChanged(model.index, item.active)
86
MultiRangeSelectionBar {
89
visible: ( leftActiveCell != -1 && rightActiveCell != -1 )
90
isFirst: ( leftActiveCell == 0 )
91
isLast: ( rightActiveCell == count-1 )
92
leftPos: ( leftActiveCell == 0 ) ? 0 : leftActiveCell*cellWidth-2
93
/* Hack: Rounding errors can mean the right of the selectionBar fails
94
to wholly cover the container Rectangle (and its border) */
95
rightPos: ( rightActiveCell == count-1 ) ? parent.width : (rightActiveCell+1)*cellWidth+3