diff --git a/examples/Gallery.qml b/examples/Gallery.qml index 7d8b67bd462ff1cbf6df9d8fd618ad5ad2b34e92..b332e280dd3ef8e7e531a332c1fc525bfbee8552 100644 --- a/examples/Gallery.qml +++ b/examples/Gallery.qml @@ -208,7 +208,6 @@ ApplicationWindow { Controls { id: controlPage } } Tab { - id:mytab title: "Itemviews" ModelView { } } diff --git a/examples/content/Styles.qml b/examples/content/Styles.qml index d322bafb4dba82ade13f3b4815287c277be4dc74..3f3ea1fec327f1e20784f1e5245ed7756bea83ab 100644 --- a/examples/content/Styles.qml +++ b/examples/content/Styles.qml @@ -43,6 +43,7 @@ import QtDesktop 1.0 import QtDesktop.Styles 1.0 Item { + id: root width: 300 height: 200 @@ -138,11 +139,13 @@ Item { Row { TabFrame { - width: 300 - height: 60 - Tab { title: "One" } - Tab { title: "Two" } - frame: false + width: 400 + height: 30 + Tab { title: "One" ; Item {}} + Tab { title: "Two" ; Item {}} + Tab { title: "Three" ; Item {}} + Tab { title: "Four" ; Item {}} + style: tabFrameStyle } } } @@ -216,5 +219,38 @@ Item { radius: height/2 } } + property Component tabFrameStyle: TabFrameStyle { + tabOverlap: 16 + leftMargin: 12 + + frame: Item { + Rectangle { + gradient: Gradient{ + GradientStop { color: "#e5e5e5" ; position: 0 } + GradientStop { color: "#e0e0e0" ; position: 1 } + } + anchors.fill: parent + anchors.topMargin: -4 + border.color: "#898989" + Rectangle { anchors.fill: parent ; anchors.margins: 1 ; border.color: "white" ; color: "transparent" } + } + } + tab: Item { + implicitWidth: image.sourceSize.width + implicitHeight: image.sourceSize.height + BorderImage { + id: image + anchors.fill: parent + source: tab.selected ? "../images/tab_selected.png" : "../images/tab.png" + border.left: 50 + smooth: false + border.right: 50 + } + Text { + text: tab.title + anchors.centerIn: parent + } + } + } } diff --git a/examples/images/tab.png b/examples/images/tab.png new file mode 100644 index 0000000000000000000000000000000000000000..74fefab78a719e4883756d2bcc1b968835dd4fa0 Binary files /dev/null and b/examples/images/tab.png differ diff --git a/examples/images/tab_selected.png b/examples/images/tab_selected.png new file mode 100644 index 0000000000000000000000000000000000000000..665400ccfd2da9264fa4cf0e653e2573a8f7daf7 Binary files /dev/null and b/examples/images/tab_selected.png differ diff --git a/src/qtdesktop/TabFrame.qml b/src/qtdesktop/TabFrame.qml index 7c8e7570692a12be92a00924215ad97ee615ca04..675e5bfcfa8e5efbe4c935916fefe659c19ee79f 100644 --- a/src/qtdesktop/TabFrame.qml +++ b/src/qtdesktop/TabFrame.qml @@ -40,26 +40,29 @@ import QtQuick 2.0 import QtDesktop 1.0 +import "private" import "Styles/Settings.js" as Settings /*! \qmltype TabFrame \inqmlmodule QtDesktop 1.0 - \brief TabFrame is doing bla...bla... + \brief Represents a control that contains multiple items that share the same space on the screen. + */ Item { id: tabWidget width: 100 height: 100 + property int current: 0 property int count: stack.children.length property bool frame: true property bool tabsVisible: true property string position: "North" default property alias tabs : stack.children - property Item tabBar: tabbarItem - property Component delegate: Qt.createComponent(Settings.THEME_PATH + "/TabFrameStyle.qml") + property Component style: Qt.createComponent(Settings.THEME_PATH + "/TabFrameStyle.qml") + property var __styleItem: loader.item onCurrentChanged: __setOpacities() Component.onCompleted: __setOpacities() @@ -93,10 +96,19 @@ Item { Loader { id: loader + sourceComponent: style + property var control: tabWidget + } + + Loader { + id: frameLoader + anchors.fill: parent anchors.topMargin: tabbarItem && tabsVisible && position == "North" ? Math.max(0, tabbarItem.height - stack.baseOverlap) : 0 anchors.bottomMargin: tabbarItem && tabsVisible && position == "South" ? Math.max(0, tabbarItem.height - stack.baseOverlap) : 0 - sourceComponent: frame ? delegate : null + sourceComponent: frame && loader.item ? loader.item.frame : null + property var control: tabWidget + Item { id: stack anchors.fill: parent @@ -107,12 +119,13 @@ Item { property string style property int baseOverlap } - onLoaded: item.z = -1 + onLoaded: { item.z = -1 } } TabBar { id: tabbarItem tabFrame: tabWidget + style: loader.item anchors.top: parent.top anchors.left: tabWidget.left anchors.right: tabWidget.right diff --git a/src/qtdesktop/TabBar.qml b/src/qtdesktop/private/TabBar.qml similarity index 73% rename from src/qtdesktop/TabBar.qml rename to src/qtdesktop/private/TabBar.qml index 0c92050b90a95b622e5c92e64c085417e944c410..adde6c73a238c59b2c6a1259bea5d102f685165a 100644 --- a/src/qtdesktop/TabBar.qml +++ b/src/qtdesktop/private/TabBar.qml @@ -40,18 +40,12 @@ import QtQuick 2.0 import QtDesktop 1.0 -import "Styles/Settings.js" as Settings - -/*! - \qmltype TabBar - \inqmlmodule QtDesktop 1.0 - \brief TabBar is doing bla...bla... -*/ Item { id: tabbar - property int tabHeight: tabrow.height - property int tabWidth: tabrow.width + height: tabrow.height + width: tabrow.width + Keys.onRightPressed: { if (tabFrame && tabFrame.current < tabFrame.count - 1) @@ -62,20 +56,19 @@ Item { tabFrame.current = tabFrame.current - 1 } - height: tabHeight + onTabFrameChanged: parent = tabFrame + visible: tabFrame ? tabFrame.tabsVisible : true property Item tabFrame - onTabFrameChanged: parent = tabFrame - visible: tabFrame ? tabFrame.tabsVisible : true + property var style + property var styleItem: tabFrame.__styleItem ? tabFrame.__styleItem : null - property int __overlap : loader.item ? loader.item.__overlap : 0 + property string tabBarAlignment: styleItem ? styleItem.tabBarAlignment : "center" property string position: tabFrame ? tabFrame.position : "North" - property string tabBarAlignment: loader.item ? loader.item.tabBarAlignment : "Center" - property int tabOverlap: loader.item ? loader.item.tabOverlap : 0 - property int tabBaseOverlap: loader.item ? loader.item.tabBaseOverlap : 0 - property int tabHSpace: loader.item ? loader.item.tabHSpace : 0 - property int tabVSpace: loader.item ? loader.item.tabVSpace : 0 + + property int tabOverlap: styleItem ? styleItem.tabOverlap : 0 + property int tabBaseOverlap: styleItem ? styleItem.tabBaseOverlap : 0 function tab(index) { for (var i = 0; i < tabrow.children.length; ++i) { @@ -86,33 +79,37 @@ Item { return null; } - property Component style: Qt.createComponent(Settings.THEME_PATH + "/TabBarStyle.qml") - - Loader { - id: loader - sourceComponent: style - property alias control: tabbar - } - Row { id: tabrow Accessible.role: Accessible.PageTabList - states: + spacing: -tabOverlap + + states: [ + State { + name: "center" + AnchorChanges { target:tabrow ; anchors.horizontalCenter: tabbar.horizontalCenter } + }, State { - when: tabBarAlignment == "center" - name: "centered" - AnchorChanges { - target:tabrow - anchors.horizontalCenter: tabbar.horizontalCenter + name: "left" + when: tabBarAlignment == "left" + AnchorChanges { target:tabrow ; anchors.left: parent.left } + PropertyChanges { target:tabrow ; anchors.leftMargin: styleItem ? styleItem.leftMargin : 0 } + }, + State { + name: "right" + when: tabBarAlignment == "right" + AnchorChanges { target:tabrow ; anchors.right: parent.right } + PropertyChanges { target:tabrow ; anchors.rightMargin: styleItem ? styleItem.rightMargin : 0 } } - } + ] + Repeater { id: repeater focus: true model: tabFrame ? tabFrame.tabs.length : null delegate: Item { - id: tab + id: tabitem focus: true property int tabindex: index @@ -120,20 +117,24 @@ Item { property bool selected : tabFrame.current == index property bool hover: mousearea.containsMouse property bool first: index === 0 + property string title: tabFrame.tabs[index].title - z: selected ? 1 : -1 + z: selected ? 1 : -index implicitWidth: Math.min(tabloader.implicitWidth, tabbar.width/tabs.length) + 1 implicitHeight: tabloader.implicitHeight Loader { id: tabloader + sourceComponent: loader.item ? loader.item.tab : null anchors.fill: parent - property alias control: tab + property Item control: tabFrame + property Item tab: tabitem property int index: tabindex property bool nextSelected: tabFrame.current === index + 1 property bool previousSelected: tabFrame.current === index - 1 + property string title: tab.title } MouseArea { @@ -141,6 +142,7 @@ Item { anchors.fill: parent hoverEnabled: true onPressed: tabFrame.current = index + onPressAndHold: tabitem.parent = null } Accessible.role: Accessible.PageTab Accessible.name: tabFrame.tabs[index].title diff --git a/src/qtdesktop/qmldir b/src/qtdesktop/qmldir index 19df0c8268e188e973b4b2b6839bf76198bf1b31..dca36d6aba1dc8dba886d29b687e93db6e72f3a3 100644 --- a/src/qtdesktop/qmldir +++ b/src/qtdesktop/qmldir @@ -26,7 +26,6 @@ SplitterRow 1.0 SplitterRow.qml SplitterColumn 1.0 SplitterColumn.qml StatusBar 1.0 StatusBar.qml Tab 1.0 Tab.qml -TabBar 1.0 TabBar.qml TabFrame 1.0 TabFrame.qml TableView 1.0 TableView.qml TableColumn 1.0 TableColumn.qml diff --git a/src/qtdesktop/qtdesktop.pro b/src/qtdesktop/qtdesktop.pro index 8395ec1ecd2e58296b1343e13d6370ea37c87d62..3c85616d63813e7dde03fd17b911a990243b5ccf 100644 --- a/src/qtdesktop/qtdesktop.pro +++ b/src/qtdesktop/qtdesktop.pro @@ -33,7 +33,6 @@ QML_FILES = \ SplitterRow.qml \ StatusBar.qml \ Tab.qml \ - TabBar.qml \ TabFrame.qml \ TableColumn.qml \ TableView.qml \ @@ -44,6 +43,7 @@ QML_FILES = \ # private qml files QML_FILES += \ + private/TabBar.qml \ private/BasicButton.qml \ private/ButtonBehavior.qml \ private/ButtonGroup.js \ diff --git a/src/styles/Desktop/TabBarStyle.qml b/src/styles/Desktop/TabBarStyle.qml deleted file mode 100644 index 4dedbfc6330edcdd1e533a46c97f15d631f77f28..0000000000000000000000000000000000000000 --- a/src/styles/Desktop/TabBarStyle.qml +++ /dev/null @@ -1,81 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the Qt Components project. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names -** of its contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -import QtQuick 2.0 -import QtDesktop 1.0 - -Item { - 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"); - - StyleItem { id: styleitem } - - property Component tab: StyleItem { - id: styleitem - elementType: "tab" - anchors.fill: parent - - implicitWidth: Math.max(50, textitem.width) + styleitem.pixelMetric("tabhspace") + 2 - implicitHeight: Math.max(styleitem.font.pixelSize + styleitem.pixelMetric("tabvspace") + 6, 0) - - property string tabpos: tabFrame.count === 1 ? "only" : index === 0 ? "beginning" : index === tabFrame.count - 1 ? "end" : "middle" - property string selectedpos: nextSelected ? "next" : previousSelected ? "previous" : "" - - hint: [tabFrame.position, tabpos, selectedpos] - anchors.leftMargin: (selected && style == "mac") ? -1 : 0 - - selected: control.selected - info: tabbar.position - text: tabFrame.tabs[index].title - hover: control.hover - hasFocus: tabbar.focus && selected - anchors.margins: paintMargins - - Text { - id: textitem - visible: false - text: styleitem.text - } - } -} diff --git a/src/styles/Desktop/TabFrameStyle.qml b/src/styles/Desktop/TabFrameStyle.qml index e46fa6df9f4ed9b1d172d1d80b76c7c8d0d854a3..e681d0cb27dc6dd5555a9b61b3b865b33f0adf32 100644 --- a/src/styles/Desktop/TabFrameStyle.qml +++ b/src/styles/Desktop/TabFrameStyle.qml @@ -40,14 +40,26 @@ import QtQuick 2.0 import QtDesktop 1.0 -Item { +QtObject { + id: root + + property int leftMargin: 0 + property int rightMargin: 0 + + property string tabBarAlignment: __barstyle.styleHint("tabbaralignment"); + + property var __framestyle: StyleItem { elementType: "tabframe" ; visible: false } + property var __barstyle: StyleItem { elementType: "tabbar" ; visible: false } + property rect contentRect - property int margins: frame ? stack.frameWidth : 0 - property int __baseOverlap: frameitem.pixelMetric("tabbaseoverlap") // add paintmargins; - contentRect: Qt.rect(margins, margins, 8 + margins + (frameitem.style == "mac" ? 6 : 0), margins + (frameitem.style =="mac" ? 6 : 0)) + property int margins: control.frame ? stack.frameWidth : 0 + property int tabOverlap: __barstyle.pixelMetric("taboverlap"); + property int tabBaseOverlap: __barstyle.pixelMetric("tabbaseoverlap"); + property int tabHSpace: __barstyle.pixelMetric("tabhspace"); + property int tabVSpace: __barstyle.pixelMetric("tabvspace"); - StyleItem { - id: frameitem + property Component frame: StyleItem { + id: styleitem anchors.fill: parent anchors.topMargin: 1//stack.baseOverlap z: style == "oxygen" ? 1 : 0 @@ -55,22 +67,42 @@ Item { info: position value: tabbarItem && tabsVisible && tabbarItem.tab(current) ? tabbarItem.tab(current).x : 0 minimum: tabbarItem && tabsVisible && tabbarItem.tab(current) ? tabbarItem.tab(current).width : 0 - maximum: tabbarItem && tabsVisible ? tabbarItem.tabWidth : width + maximum: tabbarItem && tabsVisible ? tabbarItem.width : width Component.onCompleted: { - stack.frameWidth = pixelMetric("defaultframewidth") - stack.style = style - stack.baseOverlap = pixelMetric("tabbaseoverlap")// add paintmargins; + stack.frameWidth = styleitem.pixelMetric("defaultframewidth"); + stack.style = style; + stack.baseOverlap = root.tabBaseOverlap; } - states: [ - State { - name: "South" - when: position == "South" && tabbarItem!= undefined - PropertyChanges { - target: frameitem - anchors.topMargin: 0 - anchors.bottomMargin: 1//stack.baseOverlap - } + } + + property Component tab: Item { + property string tabpos: control.count === 1 ? "only" : index === 0 ? "beginning" : index === control.count - 1 ? "end" : "middle" + property string selectedpos: nextSelected ? "next" : previousSelected ? "previous" : "" + implicitWidth: Math.max(50, textitem.width) + tabHSpace + 2 + implicitHeight: Math.max(styleitem.font.pixelSize + tabVSpace + 6, 0) + + StyleItem { + id: styleitem + + elementType: "tab" + + anchors.fill: parent + anchors.leftMargin: (selected && style == "mac") ? -1 : 0 + + hint: [control.position, tabpos, selectedpos] + + selected: tab.selected + info: control.position + text: title + hover: tab.hover + hasFocus: tab.focus && selected + anchors.margins: paintMargins + + Text { + id: textitem + visible: false + text: styleitem.text } - ] + } } } diff --git a/src/styles/TabBarStyle.qml b/src/styles/TabBarStyle.qml deleted file mode 100644 index 644a2730b69dffa068f50a4d73c0377a691ae792..0000000000000000000000000000000000000000 --- a/src/styles/TabBarStyle.qml +++ /dev/null @@ -1,76 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the Qt Components project. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names -** of its contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -import QtQuick 2.0 -import QtDesktop 1.0 - -/*! - \qmltype TabBarStyle - \inqmlmodule QtDesktop.Styles 1.0 - \brief TabBarStyle is doing bla...bla... -*/ - -Item { - width: textitem.implicitWidth + 20 - height: textitem.implicitHeight + 4 - - property Component background: Rectangle { - anchors.fill: parent - gradient: Gradient{ - GradientStop{color: control.selected ? "lightgray" : "white" ; position: 0} - GradientStop{color: control.selected ? "lightgray" : "lightgray" ; position: 1} - } - border.color: "#aaa" - - } - - Loader { - id: backgorundLoader - sourceComponent: background - anchors.fill: parent - } - - Text { - id: textitem - anchors.centerIn: parent - // Used for size hint - text: tabFrame.tabs[index].title - renderType: Text.NativeRendering - } -} diff --git a/src/styles/TabFrameStyle.qml b/src/styles/TabFrameStyle.qml index 84d55f1a0de0076c889aa829921cfdce813d0b89..d205736570a3ddae9744c0e4ea0b5c5f24796f65 100644 --- a/src/styles/TabFrameStyle.qml +++ b/src/styles/TabFrameStyle.qml @@ -45,13 +45,61 @@ import QtQuick 2.0 \brief TabFrameStyle is doing bla...bla... */ -Item { - property rect contentRect - - Rectangle { - anchors.fill: parent - anchors.topMargin: -10 - color: "lightgray" - border.color: "gray" +QtObject { + + /*! This property holds the base alignment of the tab bar. + The default value is "left". Supporeted alignments are + "left", "center" or "right". + */ + property string tabBarAlignment: "left" + + /*! This property holds the left margin of the tab bar. + It will only affect tabs \l tabBarAligment set to "right". + */ + property int leftMargin: 0 + + /*! This property holds the right margin of the tab bar. + It will only affect tabs \l tabBarAligment set to "right". + */ + property int rightMargin: 0 + + /*! This property holds the amount of overlap there are between + individual tab buttons. The default value is 0 + */ + property int tabOverlap: 0 + + property int tabvshift : 0 + property int tabBaseOverlap: 0 + + property Component frame: Item { + Rectangle { + anchors.fill: parent + anchors.topMargin: -10 + color: "lightgray" + border.color: "gray" + } } + + property Component tab: Item { + implicitWidth: textitem.implicitWidth + 20 + implicitHeight: textitem.implicitHeight + 4 + + Rectangle { + anchors.fill: parent + gradient: Gradient{ + GradientStop { color: tab.selected ? "lightgray" : "white" ; position: 0} + GradientStop { color: tab.selected ? "lightgray" : "lightgray" ; position: 1} + } + border.color: "#aaa" + + } + + Text { + id: textitem + anchors.centerIn: parent + text: tab.title + renderType: Text.NativeRendering + } + } + } diff --git a/src/styles/styles.pro b/src/styles/styles.pro index b00372d7eac6b56abc477917793a969231619231..fa4105578df66bb34d78257bd9d5d9415a0ec03f 100644 --- a/src/styles/styles.pro +++ b/src/styles/styles.pro @@ -13,7 +13,6 @@ QML_FILES = \ Settings.js \ SliderStyle.qml \ SpinBoxStyle.qml \ - TabBarStyle.qml \ TabFrameStyle.qml \ TextFieldStyle.qml \ ToolBarStyle.qml \ @@ -32,7 +31,6 @@ QML_FILES += \ Desktop/ScrollBarStyle.qml \ Desktop/SliderStyle.qml \ Desktop/SpinBoxStyle.qml \ - Desktop/TabBarStyle.qml \ Desktop/TabFrameStyle.qml \ Desktop/TextFieldStyle.qml \ Desktop/ToolBarStyle.qml \