import Qt 4.7 import com.nokia.meego 1.0 Item { id: articleViewer //width: 480; height: 360; width: parent.width; height: parent.height; property string feedid: parent.feedid //property string feedid: "61ac1458d761423344998dc76770e36e" //articlesItem.feedid; //property string hideReadArticles: ""; //property alias articleShown: articleView.visible; property bool zoomEnabled: false; property bool vertPanningEnabled: true signal openArticle(string articleid); function modulo(x,y) { // Fixes modulo for negative numbers return ((x%y)+y)%y; } function reload() { articles.xml = articleViewer.feedid == "" ? "" : controller.getArticlesXml(articleViewer.feedid); articles.reload() } function next() { if (articleView.visible) { //articleView.positionViewAtIndex(modulo(articleView.currentIndex+1, articleView.count), ListView.Contain); articleView.incrementCurrentIndex(); } } function prev() { if (articleView.visible) { //articleView.positionViewAtIndex(modulo(articleView.currentIndex-1, articleView.count), ListView.Contain); articleView.decrementCurrentIndex(); } } function markAllAsRead() { if (feedid!="") { controller.markAllAsRead(feedid) articles.reload(); } } function getCurrentArticleId() { var object = articleView.model.get(articleView.currentIndex) return object.articleid } ListView { id: articleList; /*model: visualModel.parts.list;*/ z: 6 model: articles delegate: listing width: parent.width; height: updateBarArticles.visible? parent.height-updateBarArticles.height : parent.height; /*x: 0;*/ cacheBuffer: 100; flickDeceleration: 1500 visible: articles.status==XmlListModel.Ready clip: true } // ListView { // id: articleView; // property int webviewFontSize: settings.webviewFontSize // model: articles; // delegate: viewer // orientation: ListView.Horizontal // width: parent.width; // height: updateBarArticles.visible? parent.height-updateBarArticles.height : parent.height; // visible: false; z:8 // onCurrentIndexChanged: articleView.positionViewAtIndex(currentIndex, ListView.Contain) // highlightRangeMode: ListView.StrictlyEnforceRange; snapMode: ListView.SnapOneItem // //cacheBuffer: 5; // onMovementStarted: articleViewer.vertPanningEnabled=false; // onMovementEnded: articleViewer.vertPanningEnabled=true; // highlightMoveDuration: 300; // clip: true // } ProgressBar { id: updateBarArticles minimumValue: 0 maximumValue: 100 value: window.updateProgressValue visible: window.isUpdateInProgress width: parent.width anchors.bottom: parent.bottom } Rectangle { id: noArticle //width: parent.width; height: parent.height; color: "black" opacity: 0.8 //anchors.centerIn: parent; anchors.fill: parent visible: false; z:8; Text { id: noText; color: "#ffffff"; anchors.centerIn: parent; text: qsTr("No articles available"); font.pixelSize: settings.mainTextSize } BusyIndicator { id: loadingIndicator anchors.centerIn: parent; running: visible visible: false platformStyle: BusyIndicatorStyle { size: "large" } } MouseArea { // Disable clicks when this item is visible anchors.fill: parent enabled: parent.visible } states: [ State { name: "noArticle"; when: articles.count==0 && articles.status==XmlListModel.Ready PropertyChanges { target: noArticle; visible: true; } PropertyChanges { target: loadingImage; visible: false; } PropertyChanges { target: noText; visible: true; } }, State { name: "loading"; when: articles.status != XmlListModel.Ready PropertyChanges { target: noArticle; visible: true; } PropertyChanges { target: noText; visible: false; } PropertyChanges { target: loadingIndicator; visible: true; } } ] } Rectangle { id: reloading visible: articles.status != XmlListModel.Ready } Component { id: listing; Item { width: articleViewer.width; height: backRect.height + 3 id: listItem Rectangle { id: backRect; color: settings.backColour; opacity: index % 2 ? 0.2 : 0.4; height: articleText.height + 22; width: listItem.width; y: 1 } Text { id: articleText anchors.verticalCenter: backRect.verticalCenter x: 3 width: listItem.width - 6; anchors.margins: 5 verticalAlignment: Text.AlignVCenter; text: title; color: (unread=="True") ? settings.mainTextColour : settings.secondaryTextColour; wrapMode: Text.WordWrap; font.bold: false; font.pointSize: settings.articleListingTextSize } MouseArea { anchors.fill: listItem; onClicked: { articleViewer.openArticle(articleid) //articleView.currentIndex = index; articleView.visible = true; } } } } // Component { // id: viewer // Item { // id: flipItem; // width: articleDisplay.width; // height: articleView.height; // //property string url: (articleView.visible && Math.abs(articleView.currentIndex-index)<2) ? path: ""; // property string html: controller.getArticle(articleViewer.feedid, articleid) // ArticleDisplay { // id: articleDisplay // zoomEnabled: articleViewer.zoomEnabled; // property bool vertPanningEnabled: articleViewer.vertPanningEnabled; // states: [ State { // name: 'articleIsRead'; // when: articleView.visible && articleView.currentIndex == index; // StateChangeScript { // name: "myScript" // script: { // //flipItem.url=path; // controller.setEntryRead(articleViewer.feedid, articleid) // } // } // } // ] // } // } // } XmlListModel { id: articles //source: articleViewer.feedid == "" ? "" : "http://localhost:8000/articles/" + feedid + "?onlyUnread=" + hideReadArticles xml: articleViewer.feedid == "" ? "" : controller.getArticlesXml(articleViewer.feedid) query: "/xml/article" XmlRole { name: "title"; query: "title/string()" } XmlRole { name: "articleid"; query: "articleid/string()"; isKey: true } XmlRole { name: "path"; query: "path/string()" } XmlRole { name: "unread"; query: "unread/string()"; isKey: true} } }