| 
									
										
										
										
											2011-07-06 15:48:52 +00:00
										 |  |  | /************************************************************************** | 
					
						
							|  |  |  | ** | 
					
						
							|  |  |  | ** This file is part of Qt Creator | 
					
						
							|  |  |  | ** | 
					
						
							|  |  |  | ** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). | 
					
						
							|  |  |  | ** | 
					
						
							| 
									
										
										
										
											2011-11-02 15:59:12 +01:00
										 |  |  | ** Contact: Nokia Corporation (qt-info@nokia.com) | 
					
						
							| 
									
										
										
										
											2011-07-06 15:48:52 +00:00
										 |  |  | ** | 
					
						
							|  |  |  | ** | 
					
						
							|  |  |  | ** 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 | 
					
						
							| 
									
										
										
										
											2011-11-02 15:59:12 +01:00
										 |  |  | ** Nokia at qt-info@nokia.com. | 
					
						
							| 
									
										
										
										
											2011-07-06 15:48:52 +00:00
										 |  |  | ** | 
					
						
							|  |  |  | **************************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-11 16:49:17 +01:00
										 |  |  | 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 | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |