pragma ComponentBehavior: Bound import QtQuick import QtQuick.Controls Control { id: root property list valueWeights: [1] property list values: [0.5] property list valueHighlights: ["white"] property list valueTroughs: [] readonly property list normalizedValueWeights: { const totalWeight = valueWeights.reduce((sum, weight) => sum + weight, 0) return valueWeights.map(weight => weight / totalWeight) } readonly property list visualEnds: { let cumsum = 0; let positions = []; for (let i = 0; i < normalizedValueWeights.length; i++) { cumsum += normalizedValueWeights[i]; positions.push(cumsum); } return positions; } readonly property list visualPositions: { let positions = []; let lastEnd = 0; for(let i = 0; i < visualEnds.length; i++) { const thisEnd = visualEnds[i]; const width = thisEnd - lastEnd; const thisPos = lastEnd + width * values[i]; positions.push(thisPos); lastEnd = visualEnds[i]; } return positions; } readonly property list visualSegments: { let segs = []; let lastEnd = 0; for(let i = 0; i < visualEnds.length; i++) { const thisEnd = visualEnds[i]; const thisPos = visualPositions[i]; segs.push([lastEnd, thisPos]); segs.push([thisPos, thisEnd]); lastEnd = visualEnds[i]; } return segs; } readonly property list segmentColors: { var cols = []; for(let i = 0; i < valueHighlights.length; i++) { cols.push(valueHighlights[i]); cols.push(valueTroughs[i]); } return cols; } }