Files
qt-creator/lib/qtcreator/qtcomponents/TabBar.qml
hjk 2931a499e6 Long live the king!
Change-Id: I2b72b34c0cfeafc8bdbaf49b83ff723544f2b6e2
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
2012-01-26 19:55:36 +01:00

143 lines
5.0 KiB
QML

/**************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2012 Nokia Corporation and/or its subsidiary(-ies).
**
** Contact: Nokia Corporation (qt-info@nokia.com)
**
**
** GNU Lesser General Public License Usage
**
** This file may be used under the terms of the GNU Lesser General Public
** License version 2.1 as published by the Free Software Foundation and
** appearing in the file LICENSE.LGPL included in the packaging of this file.
** Please review the following information to ensure the GNU Lesser General
** Public License version 2.1 requirements will be met:
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** Other Usage
**
** Alternatively, this file may be used in accordance with the terms and
** conditions contained in a signed written agreement between you and Nokia.
**
** If you have questions regarding the use of this file, please contact
** Nokia at qt-info@nokia.com.
**
**************************************************************************/
import QtQuick 1.0
import "custom" as Components
Item {
id: tabbar
property int tabHeight: tabrow.height
property int tabWidth: tabrow.width
Keys.onRightPressed: {
if (tabFrame && tabFrame.current < tabFrame.count - 1)
tabFrame.current = tabFrame.current + 1
}
Keys.onLeftPressed: {
if (tabFrame && tabFrame.current > 0)
tabFrame.current = tabFrame.current - 1
}
height: tabHeight
property Item tabFrame
onTabFrameChanged:parent = tabFrame
visible: tabFrame ? tabFrame.tabsVisible : true
property int __overlap : styleitem.pixelMetric("tabvshift");
property string position: tabFrame ? tabFrame.position : "North"
property string tabBarAlignment: styleitem.styleHint("tabbaralignment");
property int tabOverlap: styleitem.pixelMetric("taboverlap");
property int tabBaseOverlap: styleitem.pixelMetric("tabbaseoverlap");
property int tabHSpace: styleitem.pixelMetric("tabhspace");
property int tabVSpace: styleitem.pixelMetric("tabvspace");
function tab(index) {
for (var i = 0; i < tabrow.children.length; ++i) {
if (tabrow.children[i].tabindex == index) {
return tabrow.children[i]
}
}
return null;
}
QStyleItem {
visible:false
id:styleitem
elementType: "tab"
text: "generic"
}
Row {
id: tabrow
focus: true
property int paintMargins: 1
states:
State {
when: tabBarAlignment == "center"
name: "centered"
AnchorChanges {
target:tabrow
anchors.horizontalCenter: tabbar.horizontalCenter
}
}
Repeater {
id:repeater
focus:true
model: tabFrame ? tabFrame.tabs.length : null
delegate: Item {
id:tab
focus:true
property int tabindex: index
property bool selected : tabFrame.current == index
z: selected ? 1 : -1
function updateRect() {
var rect = style.sizeFromContents(textitem.width + tabHSpace + 2, Math.max(style.fontHeight + tabVSpace + 6, 0))
width = rect.width
height = rect.height
}
// Component.onCompleted: print("taboverlap" + tabOverlap + " tabbaseoverlap " + tabBaseOverlap + " overlap " +__overlap + " hspace " + tabHSpace)
QStyleItem {
id: style
elementType: "tab"
selected: tab.selected
info: tabbar.position
text: tabFrame.tabs[index].title
hover: mousearea.containsMouse
focus: tabbar.focus && selected
property bool first: index === 0
paintMargins: tabrow.paintMargins
activeControl: tabFrame.count == 1 ? "only" : index === 0 ? "beginning" :
index == tabFrame.count-1 ? "end" : "middle"
anchors.fill: parent
anchors.margins: -paintMargins
Text {
id: textitem
// Used for size hint
visible: false
onWidthChanged: updateRect()
onHeightChanged: updateRect()
text: tabFrame.tabs[index].title
}
}
MouseArea {
id: mousearea
anchors.fill: parent
hoverEnabled: true
onPressed: tabFrame.current = index
}
}
}
}
}