diff options
author | Yoann Lopes <yoann.lopes@nokia.com> | 2011-10-22 21:38:22 +0200 |
---|---|---|
committer | Yoann Lopes <yoann.lopes@nokia.com> | 2011-10-22 21:38:22 +0200 |
commit | 66aaf8a5da7550f8cf97b87ce3f7dd3461ef54b9 (patch) | |
tree | 41b2b61f4dc3fa415048b9e60d515f6f56266640 | |
parent | 49ce7f225fc49793fe628f7c5a923577ae648522 (diff) |
Fixed playlist selection dialog not showing anything.
-rw-r--r-- | MeeSpot.pro | 6 | ||||
-rw-r--r-- | qml/AlbumMenu.qml | 19 | ||||
-rw-r--r-- | qml/MyCommonDialog.qml | 164 | ||||
-rw-r--r-- | qml/MySelectionDialog.qml | 160 | ||||
-rw-r--r-- | qml/TrackMenu.qml | 21 | ||||
-rw-r--r-- | res.qrc | 2 |
6 files changed, 342 insertions, 30 deletions
diff --git a/MeeSpot.pro b/MeeSpot.pro index 74a365d..65e68bd 100644 --- a/MeeSpot.pro +++ b/MeeSpot.pro @@ -76,7 +76,9 @@ OTHER_FILES += \ qml/HeaderSearchField.qml \ qml/Separator.qml \ qtc_packaging/debian_harmattan/postrm \ - qml/ToplistPage.qml + qml/ToplistPage.qml \ + qml/MySelectionDialog.qml \ + qml/MyCommonDialog.qml RESOURCES += \ res.qrc @@ -109,3 +111,5 @@ QMAKE_LFLAGS += -pie -rdynamic -Wl,-rpath,/opt/MeeSpot/lib + + diff --git a/qml/AlbumMenu.qml b/qml/AlbumMenu.qml index e00eae0..2ae2748 100644 --- a/qml/AlbumMenu.qml +++ b/qml/AlbumMenu.qml @@ -57,18 +57,12 @@ MyMenu { id: banner } - SelectionDialog { + MySelectionDialog { id: selectionDialog - property alias dialogModel: playlistsModel - - ListModel { - id: playlistsModel - } - titleText: "Playlists" parent: trackMenu.parent - model: playlistsModel + model: ListModel { } onAccepted: { var playlistItem = model.get(selectionDialog.selectedIndex); if (playlistItem.object) { @@ -123,19 +117,16 @@ MyMenu { } onPlaylistsChanged: { - selectionDialog.dialogModel.clear(); + selectionDialog.model.clear(); if (playlists === null) return; for (var i in trackMenu.playlists) { if (trackMenu.playlists[i].type == SpotifyPlaylist.Playlist && spotifySession.user.canModifyPlaylist(trackMenu.playlists[i])) - selectionDialog.dialogModel.append({"name": trackMenu.playlists[i].name, "object": trackMenu.playlists[i] }) + selectionDialog.model.append({"name": trackMenu.playlists[i].name, "object": trackMenu.playlists[i] }) } - selectionDialog.dialogModel.append({"name": "New playlist" }); - - selectionDialog.model = 0; - selectionDialog.model = selectionDialog.dialogModel; + selectionDialog.model.append({"name": "New playlist" }); } onStatusChanged: { diff --git a/qml/MyCommonDialog.qml b/qml/MyCommonDialog.qml new file mode 100644 index 0000000..1b08aab --- /dev/null +++ b/qml/MyCommonDialog.qml @@ -0,0 +1,164 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** 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 Nokia Corporation 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 1.1 +import com.meego 1.0 + +Dialog { + id: genericDialog + + property string titleText: "" + + property Style platformStyle: SelectionDialogStyle {} + + //Deprecated, TODO Remove this on w13 + property alias style: genericDialog.platformStyle + + //private + property bool __drawFooterLine: false + + title: Item { + id: header + height: genericDialog.platformStyle.titleBarHeight + + anchors.left: parent.left + anchors.right: parent.right + anchors.top: parent.top + anchors.bottom: parent.bottom + + Item { + id: labelField + + anchors.fill: parent + + Item { + id: labelWrapper + anchors.left: labelField.left + anchors.right: closeButton.left + + anchors.bottom: parent.bottom + anchors.bottomMargin: genericDialog.platformStyle.titleBarLineMargin + + //anchors.verticalCenter: labelField.verticalCenter + + height: titleLabel.height + + Label { + id: titleLabel + x: genericDialog.platformStyle.titleBarIndent + width: parent.width - closeButton.width + //anchors.baseline: parent.bottom + font: genericDialog.platformStyle.titleBarFont + color: genericDialog.platformStyle.commonLabelColor + elide: genericDialog.platformStyle.titleElideMode + text: genericDialog.titleText + } + + } + + Image { + id: closeButton + anchors.bottom: parent.bottom + anchors.bottomMargin: genericDialog.platformStyle.titleBarLineMargin-6 + //anchors.verticalCenter: labelField.verticalCenter + anchors.right: labelField.right + + opacity: closeButtonArea.pressed ? 0.5 : 1.0 + + source: "image://theme/icon-m-common-dialog-close" + + MouseArea { + id: closeButtonArea + anchors.fill: parent + onClicked: {genericDialog.reject();} + } + + } + + } + + Rectangle { + id: headerLine + + anchors.left: parent.left + anchors.right: parent.right + + anchors.bottom: header.bottom + + height: 1 + + color: "#4D4D4D" + } + + } + + content: Item {id: contentField} + + buttons: Item { + id: footer + + width: parent.width + height: childrenRect.height + + //hack to make sure, we're evaluating the correct height + Item { + id: lineWrapper + width: parent.width + height: childrenRect.height + y: 10 + + Rectangle { + id: footerLine + + anchors.left: parent.left + anchors.right: parent.right + anchors.top: parent.top + height: genericDialog.__drawFooterLine ? 1 : 0 + + color: "#4D4D4D" + } + } + + //ugly hack to assure, that we're always evaluating the correct height + Item {id: dummy; anchors.fill: parent} + + } + +} diff --git a/qml/MySelectionDialog.qml b/qml/MySelectionDialog.qml new file mode 100644 index 0000000..5e8d60f --- /dev/null +++ b/qml/MySelectionDialog.qml @@ -0,0 +1,160 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** 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 Nokia Corporation 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 1.1 +import com.meego 1.0 +import "UIConstants.js" as UI + +MyCommonDialog { + id: root + + // Common API + property ListModel model: ListModel{} + property int selectedIndex: -1 // read & write + //property string titleText: "Selection Dialog" + + property Component delegate: // Note that this is the default delegate for the list + Component { + id: defaultDelegate + + Item { + id: delegateItem + property bool selected: index == selectedIndex; + + height: root.platformStyle.itemHeight + anchors.left: parent.left + anchors.right: parent.right + + MouseArea { + id: delegateMouseArea + anchors.fill: parent; + onPressed: selectedIndex = index; + onClicked: accept(); + } + + + Rectangle { + id: backgroundRect + anchors.fill: parent + color: delegateItem.selected ? root.platformStyle.itemSelectedBackgroundColor : root.platformStyle.itemBackgroundColor + } + + BorderImage { + id: background + anchors.fill: parent + border { left: UI.CORNER_MARGINS; top: UI.CORNER_MARGINS; right: UI.CORNER_MARGINS; bottom: UI.CORNER_MARGINS } + source: delegateMouseArea.pressed ? root.platformStyle.itemPressedBackground : + delegateItem.selected ? root.platformStyle.itemSelectedBackground : + root.platformStyle.itemBackground + } + + Text { + id: itemText + elide: Text.ElideRight + color: delegateItem.selected ? root.platformStyle.itemSelectedTextColor : root.platformStyle.itemTextColor + anchors.verticalCenter: delegateItem.verticalCenter + anchors.left: parent.left + anchors.right: parent.right + anchors.leftMargin: root.platformStyle.itemLeftMargin + anchors.rightMargin: root.platformStyle.itemRightMargin + text: name; + font: root.platformStyle.itemFont + } + } + } + + onStatusChanged: { + if (status == DialogStatus.Opening && selectedIndex >= 0) { + selectionListView.positionViewAtIndex(selectedIndex, ListView.Center) + } + } + + // Style API + property Style platformStyle: SelectionDialogStyle {} + + //Deprecated, TODO Remove this on w13 + property alias style: root.platformStyle + + // private api + property int __pressDelay: platformStyle.pressDelay + + // the title field consists of the following parts: title string and + // a close button (which is in fact an image) + // it can additionally have an icon + titleText:"Selection Dialog" + + // the content field which contains the selection content + content: Item { + + id: selectionContent + property int listViewHeight : root.model.count * root.platformStyle.itemHeight + property int maxListViewHeight : visualParent + ? visualParent.height * 0.87 + - root.platformStyle.titleBarHeight - root.platformStyle.contentSpacing - 50 + : root.parent + ? root.parent.height * 0.87 + - root.platformStyle.titleBarHeight - root.platformStyle.contentSpacing - 50 + : 350 + height: listViewHeight > maxListViewHeight ? maxListViewHeight : listViewHeight + width: root.width + y : root.platformStyle.contentSpacing + + ListView { + id: selectionListView + + currentIndex : -1 + anchors.fill: parent + model: root.model + delegate: root.delegate + focus: true + clip: true + pressDelay: __pressDelay + + ScrollDecorator { + id: scrollDecorator + flickableItem: selectionListView + platformStyle.inverted: true + } + } + + } +} + + diff --git a/qml/TrackMenu.qml b/qml/TrackMenu.qml index 86e0c73..06c1e9a 100644 --- a/qml/TrackMenu.qml +++ b/qml/TrackMenu.qml @@ -60,18 +60,12 @@ MyMenu { id: banner } - SelectionDialog { + MySelectionDialog { id: selectionDialog - - property alias dialogModel: playlistsModel - - ListModel { - id: playlistsModel - } - + titleText: "Playlists" parent: trackMenu.parent - model: playlistsModel + model: ListModel { } onAccepted: { var playlistItem = model.get(selectionDialog.selectedIndex); if (playlistItem.object) { @@ -143,19 +137,16 @@ MyMenu { } onPlaylistsChanged: { - selectionDialog.dialogModel.clear(); + selectionDialog.model.clear(); if (playlists === null) return; for (var i in trackMenu.playlists) { if (trackMenu.playlists[i].type == SpotifyPlaylist.Playlist && spotifySession.user.canModifyPlaylist(trackMenu.playlists[i])) - selectionDialog.dialogModel.append({"name": trackMenu.playlists[i].name, "object": trackMenu.playlists[i] }) + selectionDialog.model.append({"name": trackMenu.playlists[i].name, "object": trackMenu.playlists[i] }) } - selectionDialog.dialogModel.append({"name": "New playlist" }); - - selectionDialog.model = 0; - selectionDialog.model = selectionDialog.dialogModel; + selectionDialog.model.append({"name": "New playlist" }); } onStatusChanged: { @@ -63,5 +63,7 @@ <file>qml/HeaderSearchField.qml</file> <file>qml/Separator.qml</file> <file>qml/ToplistPage.qml</file> + <file>qml/MySelectionDialog.qml</file> + <file>qml/MyCommonDialog.qml</file> </qresource> </RCC> |