first commit
This commit is contained in:
@@ -0,0 +1,112 @@
|
||||
import QtQuick 2.0
|
||||
|
||||
Item {
|
||||
id: root
|
||||
property int activeTab: -1
|
||||
property var tabs: []
|
||||
property var titles: []
|
||||
property int __panelWidth: 250
|
||||
|
||||
readonly property int panelWidth: __panelWidth
|
||||
|
||||
Rectangle {
|
||||
id: contentBox
|
||||
x: parent.width - width // can't use an anchors, for dragability
|
||||
|
||||
height: parent.height
|
||||
width: (activeTab >= 0) ? __panelWidth : 0
|
||||
color: "#1f1f1f"
|
||||
Behavior on width {
|
||||
enabled: !splitterDrag.drag.active
|
||||
NumberAnimation {
|
||||
duration: 250
|
||||
}
|
||||
}
|
||||
|
||||
clip: true
|
||||
|
||||
Loader {
|
||||
id: loader
|
||||
anchors.fill: parent
|
||||
sourceComponent: (activeTab >= 0) ? tabs[activeTab] : null
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: loader.item
|
||||
onRequestPanelClose: root.activeTab = -1;
|
||||
ignoreUnknownSignals: true
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
id: splitter
|
||||
width: 2
|
||||
height: parent.height
|
||||
anchors.right: contentBox.left
|
||||
|
||||
color: "orange"
|
||||
|
||||
MouseArea {
|
||||
id: splitterDrag
|
||||
height: parent.height
|
||||
width: parent.width * 25
|
||||
|
||||
drag.target: contentBox
|
||||
drag.axis: Drag.XAxis
|
||||
drag.minimumX: 0
|
||||
drag.maximumX: root.width
|
||||
|
||||
onMouseXChanged: {
|
||||
__panelWidth = root.width - contentBox.x
|
||||
}
|
||||
|
||||
// enabled when open?
|
||||
|
||||
// click to toggle open / close
|
||||
|
||||
cursorShape: Qt.SizeHorCursor
|
||||
}
|
||||
}
|
||||
|
||||
Column {
|
||||
anchors.right: splitter.left
|
||||
anchors.top: parent.top
|
||||
anchors.topMargin: 20
|
||||
spacing: 1
|
||||
|
||||
Repeater {
|
||||
model: tabs
|
||||
Rectangle {
|
||||
readonly property bool tabIsActive: (model.index == activeTab)
|
||||
width: tabLabel.implicitHeight + 10
|
||||
height: tabLabel.implicitWidth + 20
|
||||
|
||||
color: "#3f3f3f"
|
||||
border.width: 1
|
||||
border.color: "#5f5f5f"
|
||||
|
||||
Text {
|
||||
anchors.centerIn: parent
|
||||
id: tabLabel
|
||||
text: titles[model.index]
|
||||
rotation: 90
|
||||
color: tabIsActive ? "orange" : tabMouse.containsMouse ? "#afafaf" : "#9f9f9f"
|
||||
transformOrigin: Item.Center
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
id: tabMouse
|
||||
hoverEnabled: true
|
||||
anchors.fill: parent
|
||||
onClicked: {
|
||||
if (parent.tabIsActive) {
|
||||
activeTab = -1
|
||||
} else {
|
||||
activeTab = model.index
|
||||
}
|
||||
}
|
||||
}
|
||||
} // rectangle
|
||||
} // of repeater
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user