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}
}
}