diff --git a/src/plugins/qmldesigner/components/stateseditor/stateslist.qml b/src/plugins/qmldesigner/components/stateseditor/stateslist.qml index 9d5464cbaa5dc411d809ace3fbfb244d280034c4..45658049bc0dd2968046e73871abc78c788fb3a8 100644 --- a/src/plugins/qmldesigner/components/stateseditor/stateslist.qml +++ b/src/plugins/qmldesigner/components/stateseditor/stateslist.qml @@ -39,19 +39,33 @@ Rectangle { anchors.bottomMargin: 10; anchors.topMargin: 2; - anchors.leftMargin: 29; - anchors.rightMargin: 40; + anchors.leftMargin: 2; + anchors.rightMargin: 2; viewportHeight: height - viewportWidth: listViewRow.width + viewportWidth: statesRow.width+2 Row { - id: listViewRow - spacing: 4 - Repeater { - model: statesEditorModel - delegate: Delegate + id: statesRow + spacing:4 + Row { + id: listViewRow + spacing: 4 + Repeater { + model: statesEditorModel + delegate: Delegate + } + } + Loader { + sourceComponent: newStateBox; + // make it square + width: height + height: listViewRow.height - 21 + y:18 + id: newStateBoxLoader; } + + } focus: true; @@ -65,7 +79,7 @@ Rectangle { id: Delegate Item { id: container - width: Math.max(img.width, txt.width) + 4 + width: Math.max(img.width, txt.width+removeState.width+2) + 4 height: img.height + txt.height + 4 Rectangle { @@ -87,7 +101,7 @@ Rectangle { id: img pixmap: statePixmap anchors.horizontalCenter: parent.horizontalCenter - anchors.top: parent.top + anchors.top: textLimits.bottom anchors.topMargin: 2 } @@ -106,162 +120,195 @@ Rectangle { script: txt.unFocus() } - TextInput { - anchors.top: img.bottom - anchors.horizontalCenter: img.horizontalCenter - id: txt - text: stateName - color: "#E1E1E1"; - function unFocus() { - focus=false; - focusStealer.focus=true; - txtRegion.enabled=true; - if (index!=0) - statesEditorModel.renameState(index,text); + Item { + id: textLimits + anchors.top: parent.top + anchors.left:parent.left + anchors.right:removeState.left + height: txt.height + clip: true + + TextInput { + anchors.top: parent.top + anchors.topMargin: 2 + anchors.horizontalCenter: textLimits.horizontalCenter + id: txt + text: stateName + color: "#E1E1E1"; + function unFocus() { + focus=false; + focusStealer.focus=true; + txtRegion.enabled=true; + if (index!=0) + statesEditorModel.renameState(index,text); + } + onAccepted: unFocus(); + MouseRegion { + id: txtRegion + anchors.fill:parent + onClicked: { + root.currentStateIndex = index; + root.unFocus(); + } + onDoubleClicked: if (index!=0) { + parent.focus=true; + enabled=false; + } + } + } + } + + // The erase button + Rectangle { + id: removeState + + visible: { index != 0 } + + anchors.right: parent.right + anchors.top: parent.top + anchors.topMargin: 4; + anchors.rightMargin:2; + + width: 12 + height: width + + color: "#AEAEAE" + radius: 6 + + // "clicked" overlay + Rectangle { + anchors.fill:parent + opacity:parent.state=="Pressed" + color: "#909090" + radius: parent.radius + } + + states: State{ name: "Pressed"; } + + // "minus" sign + Rectangle { + width: parent.width - 4; + height:2 + color:(root.currentStateIndex==index?Highlight.color:root.color); + anchors.centerIn:parent } - onAccepted: unFocus(); + + + MouseRegion { - id: txtRegion anchors.fill:parent onClicked: { + var oldindex = root.currentStateIndex; root.currentStateIndex = index; root.unFocus(); + root.deleteCurrentState(); + root.currentStateIndex = oldindex; + if (root.currentStateIndex >= statesEditorModel.count) + root.currentStateIndex = root.currentStateIndex-1; + horizontalScrollbar.totalLengthDecreased(); } - onDoubleClicked: if (index!=0) { - parent.focus=true; - enabled=false; - } + onPressed: {parent.state="Pressed"} + onReleased: {parent.state=""} + } } } } - // The add button - Rectangle { - id: addState - - anchors.left: root.left - anchors.top: root.top - anchors.topMargin: 4; - anchors.leftMargin: 4; - width: 20 - height: 50 + Component { + id: newStateBox + Rectangle { + anchors.fill: parent + color: "transparent" + border.width: 1 + border.color: "#4F4F4F" - // Appearance - gradient: Gradient { - GradientStop { position: 0.0; color: "#909090" } - GradientStop { position: 1.0; color: "#AEAEAE" } - } - border.width : 1 - border.color : "#4F4F4F" - radius: 4 + Loader { + sourceComponent: addState + anchors.fill: parent - // "clicked" overlay - Rectangle { - anchors.fill:parent - opacity:parent.state=="Pressed" - gradient: Gradient { - GradientStop { position: 0.0; color: "#727272" } - GradientStop { position: 1.0; color: "#909090" } } - border.width : 1 - border.color : "#4F4F4F" - radius: 4 } + } - states: State{ name: "Pressed"; } + Rectangle { + id: floatingNewStateBox - // "plus" sign - Rectangle { - width:12 - height:2 - color:"black" - anchors.centerIn:parent - } - Rectangle { - width:2 - height:12 - color:"black" - anchors.centerIn:parent - } + color: root.color + border.width: 1 + border.color: "#4F4F4F" + width: 40 + height: 40 + anchors.bottom:horizontalScrollbar.top + anchors.right:root.right + anchors.bottomMargin:1 + anchors.rightMargin:1 - MouseRegion { - anchors.fill:parent - onClicked: { - root.unFocus(); - if (root.currentStateIndex == 0) - root.createNewState(); //create new state - else - root.duplicateCurrentState(); //duplicate current state - - listView.viewportX = horizontalScrollbar.viewPosition; - // select the newly created state - root.currentStateIndex=statesEditorModel.count - 1; - } - onPressed: {parent.state="Pressed"} - onReleased: {parent.state=""} + visible:(newStateBoxLoader.x+newStateBoxLoader.width/2-11>listView.width+listView.viewportX); + + + Loader { + sourceComponent: addState + anchors.fill: parent } } - // The erase button - Rectangle { - id: removeState - anchors.left: root.left - anchors.top: addState.bottom - anchors.topMargin: 4; - anchors.leftMargin: 4; - width: 20 - height: 50 + // The add button + Component { + id: addState + Rectangle { - // Appearance - gradient: Gradient { - GradientStop { position: 0.0; color: "#909090" } - GradientStop { position: 1.0; color: "#AEAEAE" } - } - border.width : 1 - border.color : "#4F4F4F" - radius: 4 + anchors.centerIn: parent - // "clicked" overlay - Rectangle { - anchors.fill:parent - opacity:parent.state=="Pressed" - gradient: Gradient { - GradientStop { position: 0.0; color: "#727272" } - GradientStop { position: 1.0; color: "#909090" } - } - border.width : 1 - border.color : "#4F4F4F" - radius: 4 - } + width: 21 + height: width - states: State{ name: "Pressed"; } + color:"#4F4F4F" + radius: width/2 - // "minus" sign - Rectangle { - width:12 - height:2 - color:"black" - anchors.centerIn:parent - } + // "clicked" overlay + Rectangle { + anchors.fill:parent + opacity:parent.state=="Pressed" + color : "#282828" + radius: parent.radius + } - visible: { root.currentStateIndex != 0 } + states: State{ name: "Pressed"; } - MouseRegion { - anchors.fill:parent - onClicked: { - root.unFocus(); - root.deleteCurrentState(); - if (root.currentStateIndex >= statesEditorModel.count) - root.currentStateIndex = root.currentStateIndex-1; - horizontalScrollbar.totalLengthDecreased(); + // "plus" sign + Rectangle { + width:parent.width-10 + height:3 + color:root.color + anchors.centerIn:parent + } + Rectangle { + width:3 + height:parent.height-10 + color:root.color + anchors.centerIn:parent + } + + MouseRegion { + anchors.fill:parent + onClicked: { + root.unFocus(); + if (root.currentStateIndex == 0) + root.createNewState(); //create new state + else + root.duplicateCurrentState(); //duplicate current state + + listView.viewportX = horizontalScrollbar.viewPosition; + // select the newly created state + root.currentStateIndex=statesEditorModel.count - 1; + } + onPressed: {parent.state="Pressed"} + onReleased: {parent.state=""} } - onPressed: {parent.state="Pressed"} - onReleased: {parent.state=""} - enabled: { root.currentStateIndex != 0 } } }