@@ -14,16 +14,101 @@
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17−import QtQuick 2.0
17+import QtQuick 2.2
18+import Ubuntu.Components 1.1
18−import Ubuntu.Components 0.1
19+import Ubuntu.Components.Themes 0.1
19import "../Components"
20import "../Components"
21−Rectangle {
22+import Ubuntu.Components.Themes.Ambiance 1.1 as Ambiance
25− property string name: ""
27+ property color backgroundColor: d.undefinedColor
28+ property color headerColor: d.undefinedColor
29+ property color footerColor: d.undefinedColor
30+ property alias imageSource: overlaidImage.source
26− property url image: ""
31+ property url icon
32+ property alias title: header.title
33+ property alias showHeader: header.visible
42+ // As specified in qtmir, it will set the color value to this for fields left undefined
43+ // This is also the default value of a color property in QML.
44+ readonly property color undefinedColor: "#00000000"
46+ readonly property color defaultBackgroundColor: header.visible ? ambiancePalette.normal.background : "black"
48+ // Splash screen that shows the application icon and splashTitle
49+ readonly property bool showIcon: overlaidImage.status == Image.Null && !root.showHeader
56+ // mimic API of toolkit's MainView component required by MainViewStyle
57+ property color backgroundColor: Qt.colorEqual(root.backgroundColor, d.undefinedColor) ? d.defaultBackgroundColor
58+ : root.backgroundColor
59+ property color headerColor: Qt.colorEqual(root.headerColor, d.undefinedColor) ? styledItem.backgroundColor
61+ property color footerColor: Qt.colorEqual(root.footerColor, d.undefinedColor) ? styledItem.backgroundColor
64+ // FIXME: fake a Theme object as to expose the Palette corresponding to the backgroundColor (see MainViewStyle.qml)
65+ property var theme: QtObject {
67+ property Palette palette: Qt.createQmlObject("import QtQuick 2.2;\
68+ import Ubuntu.Components.Themes.%1 1.1;\
69+ Palette {}".arg(styledItem.theme.name),
70+ styledItem, "dynamicPalette");
73+ // FIXME: should instead use future toolkit API:
74+ // style: theme.createStyleComponent("MainViewStyle.qml", styledItem)
75+ style: Component { MainViewStyle {theme: styledItem.theme} }
86+ // mimic API of toolkit's AppHeader component required by PageHeadStyle
87+ property Item pageStack
88+ property Item contents
89+ property string title
90+ property var tabsModel
91+ property var config: QtObject {
92+ property color foregroundColor: styledItem.theme.palette.selected.backgroundText
93+ property var sections: QtObject {}
96+ // FIXME: should instead use future toolkit API:
97+ // style: theme.createStyleComponent("PageHeadStyle.qml", header)
98+ style: Component { PageHeadStyle {theme: styledItem.theme} }
103+ anchors.centerIn: parent
104+ anchors.verticalCenterOffset: header.visible ? header.height / 2 : 0
28 UbuntuShape {
113 UbuntuShape {
29 id: iconShape
114 id: iconShape
@@ -33,6 +118,8 @@ Rectangle {
33 width: units.gu(8)
118 width: units.gu(8)
34 height: units.gu(7.5)
119 height: units.gu(7.5)
36 radius: "medium"
123 radius: "medium"
37 borderSource: "none"
124 borderSource: "none"
@@ -40,24 +127,31 @@ Rectangle {
40 id: iconImage
127 id: iconImage
41 sourceSize.width: iconShape.width
128 sourceSize.width: iconShape.width
42 sourceSize.height: iconShape.height
129 sourceSize.height: iconShape.height
43− source: root.image
130+ source: d.showIcon ? root.icon : ""
44 fillMode: Image.PreserveAspectCrop
131 fillMode: Image.PreserveAspectCrop
49− text: root.name
136+ text: root.title
50 anchors.horizontalCenter: parent.horizontalCenter
137 anchors.horizontalCenter: parent.horizontalCenter
51 anchors.top: iconShape.bottom
138 anchors.top: iconShape.bottom
52 anchors.topMargin: units.gu(2)
139 anchors.topMargin: units.gu(2)
53 fontSize: "large"
140 fontSize: "large"
142+ color: styledItem.theme.palette.selected.backgroundText
56− WaitingDots {
146+ ActivityIndicator {
57− visible: parent.visible
147+ anchors.centerIn: header.visible ? parent : undefined
148+ anchors.verticalCenterOffset: header.visible ? header.height / 2 : 0
58− anchors.horizontalCenter: parent.horizontalCenter
150+ anchors.horizontalCenter: header.visible ? undefined : parent.horizontalCenter
59− anchors.bottom: parent.bottom
151+ anchors.bottom: header.visible ? undefined : parent.bottom
60− anchors.bottomMargin: units.gu(12)
152+ anchors.bottomMargin: header.visible ? 0 : units.gu(12)
63 MouseArea {
157 MouseArea {