import QtQuick 2.0 import QtQuick.LocalStorage 2.0 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 import "qrc:/js/news.js" as Newsjs import "qrc:/js/layout.js" as Layoutjs Item { id: newsitem width: newsView.width height:Math.max((itemMessage.height+createdAtLabel.height+4*mm),profileImage.height+user_name.height+mm) property bool show_full: false property string conversation_id: "" property string attachments:"" property string attending: "" onAttendingChanged: {attendLabel.visible=true; attendLabel.text= qsTr("attending: ")+ qsTr(attending)} signal replyto(string parent_id) Rectangle{width:newsitem.width; height: 1; anchors.bottom: newsitem.bottom; color:"light grey"} Rectangle{ width:newsitem.width height:newsitem.height-1 color: (newsitemobject.directmessage)?"#ffe6e6" : "white" Column { id: authorcolumn width: 8*mm Image { id:profileImage source: "file://"+newsitemobject.user.profile_image x:1 width: 7*mm height: 7*mm MouseArea{ anchors.fill: parent onPressAndHold: { newsmenu.popup()} } onStatusChanged: if (profileImage.status == Image.Error) {source="qrc:/images/defaultcontact.jpg"} } Label { id:user_name color: "grey" //height:3.5*mm width:parent.width font.pixelSize: 1.5*mm wrapMode: Text.WrapAtWordBoundaryOrAnywhere text: Qt.atob(newsitemobject.user.name) } } Column { id:newscolumn anchors.left: authorcolumn.right Row{ spacing: 5 Label { color: "grey" text: if (newsitemobject.messagetype==0){qsTr("Source: ")+newsitemobject.source } else if (newsitemobject.messagetype==1){ qsTr("Direct Message")} else {" Notification"} font.pixelSize: 1.5*mm } Label { id:createdAtLabel color: "grey" height:3.5*mm font.pixelSize: 1.5*mm horizontalAlignment: Label.AlignRight text: dateDiff } CheckBox { id:favoritedCheckbox style: CheckBoxStyle { background: Rectangle { implicitWidth: 6*mm implicitHeight:2*mm color:"white" } indicator: Rectangle{x:3*mm width: 3*mm implicitHeight:2*mm Text{ anchors.centerIn: parent color:control.checked?"black":"grey" text:"\u2605" }} } checked:(newsitemobject.favorited>0) Text{ anchors.left: parent.right color: "grey" font.pixelSize: 1.5*mm text: (newsitemobject.favorited>0)? newsitemobject.favorited+qsTr(" Favorites"):"" } onClicked:{ if(favoritedCheckbox.checkedState==Qt.Checked) {Newsjs.favorite(login,true,newsitemobject.status_id,root)} else if(favoritedCheckbox.checkedState==Qt.Unchecked) {Newsjs.favorite(login,false,newsitemobject.status_id,root)} } } } Text { color: "#404040" linkColor: "light green" id: itemMessage textFormat: Text.RichText text: Qt.atob(newsitemobject.statusnet_html) width: newsitem.width-8*mm-2 height: implicitHeight wrapMode: Text.Wrap onLinkActivated:{ print("link "+link); Qt.openUrlExternally(link)} } Row { CheckBox{id:likeCheckbox height:3*mm width:8*mm style: CheckBoxStyle { background: Rectangle { implicitWidth: 7*mm implicitHeight: 3*mm color:"white" } indicator: Rectangle{ implicitWidth: 3*mm implicitHeight:3*mm color:control.checked?"yellow":"white" x: 5*mm Text{ font.pixelSize: 1.5*mm color:"grey" text:":-)" }} } onClicked: { if(likeCheckbox.checked==true){Newsjs.like(root.login,root.db,1,"like",newsitemobject.status_id,root);dislikeCheckbox.checked=false} else{Newsjs.like(root.login,root.db,0,"like",newsitemobject.status_id,root)}} } CheckBox{id: dislikeCheckbox height:3*mm width:8*mm style: CheckBoxStyle { background: Rectangle { implicitWidth: 7*mm implicitHeight:3*mm color:"white" } indicator: Rectangle{ implicitWidth: 3*mm implicitHeight:3*mm color:control.checked?"yellow":"white" x:5*mm Text{ font.pixelSize: 1.5*mm color:"grey" text:":-(" }} } onClicked: { if (dislikeCheckbox.checked==true){Newsjs.like(root.login,root.db,1,"dislike",newsitemobject.status_id);likeCheckbox.checked=false} else {Newsjs.like(root.login,root.db,0,"dislike",newsitemobject.status_id,root)}} } Label { id:replytoLabel color: "grey" height:3.5*mm font.pixelSize: 1.5*mm horizontalAlignment: Label.AlignRight text: try {qsTr("In reply to ")+newsitemobject.reply_user.screen_name }catch(e){" "} } Label { id:attendLabel visible: false color: "grey" height:3.5*mm font.pixelSize: 1.5*mm horizontalAlignment: Label.AlignRight text: qsTr("attending: ")+ qsTr(attending) } } } Menu { id:newsmenu MenuItem { text: qsTr("Reply") onTriggered: { newsStack.push({item:"qrc:/qml/MessageSend.qml",properties:{"reply_to_user": newsitemobject.user.screen_name,"parentId":newsitemobject.status_id}}); } } MenuItem { text: qsTr("DM") onTriggered: { root.directmessageSignal(newsitemobject.user.screen_name); } } MenuItem { text: qsTr("Repost") onTriggered: { Newsjs.retweetNews(root.login,db,newsitemobject.status_id,root,function(reply){ print(reply); }) } } MenuItem { text: qsTr("Conversation") onTriggered: { Newsjs.requestConversation(root.login,db,newsitemobject.status_id,root,function(){ var currentTime= new Date(); Newsjs.conversationfromdb(db,root.login.username,newsitemobject.statusnet_conversation_id, function(newsarray){ newsModel.clear(); var msg = {'currentTime': currentTime, 'model': newsModel,'news':newsarray,'latestmessage':0}; newsWorker.sendMessage(msg); }); } )} } Menu{ title: qsTr("Attending") MenuItem{text:qsTr("yes") onTriggered: {Newsjs.attend(root.login,db,"yes",newsitemobject.status_id,root,function(){ newsitem.attending="yes"; attendLabel.visible=true})} } MenuItem{text:qsTr("maybe") onTriggered: {Newsjs.attend(root.login,db,"maybe",newsitemobject.status_id,root,function(){ newsitem.attending="maybe"})} } MenuItem{text:qsTr("no") onTriggered: {Newsjs.attend(root.login,db,"no",newsitemobject.status_id,root,function(){ newsitem.attending="no"})} } } MenuItem { text: qsTr("Delete") onTriggered: { Newsjs.deleteNews(root.login,db,newsitemobject.status_id,root,function(reply){ print(JSON.stringify(reply)); newsModel.remove(index); }) } } } }}