Friendiqa/source-linux/qml/newsqml/MessageSend.qml

555 lines
24 KiB
QML
Raw Normal View History

2018-02-19 22:36:00 +01:00
// This file is part of Friendiqa
2018-11-09 22:06:13 +01:00
// https://git.friendi.ca/lubuwest/Friendiqa
2018-02-19 22:36:00 +01:00
// Copyright (C) 2017 Marco R. <thomasschmidt45@gmx.net>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// In addition, as a special exception, the copyright holders give
// permission to link the code of portions of this program with the
// OpenSSL library under certain conditions as described in each
// individual source file, and distribute linked combinations including
// the two.
//
// You must obey the GNU General Public License in all respects for all
// of the code used other than OpenSSL. If you modify file(s) with this
// exception, you may extend this exception to your version of the
// file(s), but you are not obligated to do so. If you do not wish to do
// so, delete this exception statement from your version. If you delete
// this exception statement from all source files in the program, then
// also delete it here.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
2017-01-26 21:55:31 +01:00
// message.qml
// message with buttons
2019-06-25 20:59:10 +02:00
import QtQuick 2.4
import QtQuick.Controls 2.4
2018-07-20 21:15:54 +02:00
//import QtQuick.Dialogs 1.2
2017-01-26 21:55:31 +01:00
import "qrc:/js/helper.js" as Helperjs
2017-03-25 23:36:14 +01:00
import "qrc:/js/smiley.js" as Smileyjs
2019-06-25 20:59:10 +02:00
import "qrc:/js/news.js" as Newsjs
2017-01-26 21:55:31 +01:00
import "qrc:/qml/genericqml"
2017-03-25 23:36:14 +01:00
2018-07-01 15:09:21 +02:00
Rectangle{
2019-06-25 20:59:10 +02:00
color:"#EEEEEE"
width:parent.width
height: (newsSwipeview.stacktype!="Notifications")?messageColumn.height+mm:0
id:messageSend
visible:(newsSwipeview.stacktype!="Notifications")?true:false
2017-01-26 21:55:31 +01:00
property string parentId: ""
2019-12-10 21:12:32 +01:00
property bool textfocus: false
2019-06-25 20:59:10 +02:00
//property var parentObject:({})
property bool conversation: false
2017-01-26 21:55:31 +01:00
property string reply_to_user:""
2018-04-22 21:12:40 +02:00
property alias bodyMessage: bodyField.text
2017-05-11 22:15:34 +02:00
property var attachImageURLs: [];
2019-06-25 20:59:10 +02:00
//property int directmessage: 0;
2017-01-26 21:55:31 +01:00
property var contacts: []
property var groups: []
2019-12-10 21:12:32 +01:00
property var contact_allow:login.hasOwnProperty("permissions")?login.permissions[0]:[]
property var contact_deny:login.hasOwnProperty("permissions")?login.permissions[1]:[]
property var group_allow:login.hasOwnProperty("permissions")?login.permissions[2]:[]
property var group_deny:login.hasOwnProperty("permissions")?login.permissions[3]:[]
// onReply_to_userChanged: {
// if (reply_to_user!=""){
// print("reply "+reply_to_user)
// //receiverLabel.visible=true
// receiverLabel.text=reply_to_user
// }
// }
2019-06-25 20:59:10 +02:00
function directmessagePrepare(friend){
messageSend.state="active";
reply_to_user=friend.screen_name;
2019-12-10 21:12:32 +01:00
receiverLabel.text=friend.screen_name;
2019-06-25 20:59:10 +02:00
}
function sendUrls(urls){
if((urls.length==1 && attachImageURLs.length==0)){
attachImage(urls);
attachImageURLs.push(urls);
messageSend.state="active";
}
}
function sendtext(text){
if(text){
if (text.subject=="undefined"){text.subject=""}
if(text.plaintext.lastIndexOf(".jpg")>-1 || text.plaintext.lastIndexOf(".jpeg")>-1 || text.plaintext.lastIndexOf(".png")>-1 || text.plaintext.lastIndexOf(".gif")>-1){
text.plaintext="<a href="+text.plaintext+"><img src="+text.plaintext+"></a>"}
bodyField.text=text.subject+"\n"+text.plaintext;
messageSend.state="active";
}
}
function attachImage(url){
2019-12-10 21:12:32 +01:00
imageAttachment.source=url.toString();
// var imageAttachmentObject=Qt.createQmlObject('import QtQuick 2.0; Image {id:imageAttachment'+attachImageURLs.length+'; source:"'+
// url.toString()+'"; x:2*mm; width: 45*mm; height: 45*mm;fillMode: Image.PreserveAspectFit;MouseArea{anchors.fill:parent;onClicked:{attachImageURLs.splice(attachImageURLs.indexOf("'+
// url+'"),1); imageAttachment'+attachImageURLs.length+'.destroy()}}}',messageColumn,"attachedImage");
2019-06-25 20:59:10 +02:00
}
2017-05-11 22:15:34 +02:00
2017-01-26 21:55:31 +01:00
function statusUpdate(title,status,in_reply_to_status_id,attachImageURL) {
2018-07-01 15:09:21 +02:00
//xhr.url= login.server + "/api/statuses/update.json";
2019-06-25 20:59:10 +02:00
newsBusy.running=true;
2017-01-26 21:55:31 +01:00
xhr.setLogin(login.username+":"+Qt.atob(login.password));
2018-07-01 15:09:21 +02:00
xhr.setUrl(login.server);
xhr.setApi("/api/statuses/update");
2017-01-26 21:55:31 +01:00
xhr.clearParams();
xhr.setParam("source", "Friendiqa");
2018-07-20 21:15:54 +02:00
xhr.setParam("htmlstatus", status);
2017-01-26 21:55:31 +01:00
if (parentId!="") {xhr.setParam("in_reply_to_status_id", parentId)};
if (title!=="") {xhr.setParam("title", title)};
if (group_allow.length>0) {xhr.setParam("group_allow", Helperjs.cleanArray(group_allow))};
if (group_deny.length>0) {xhr.setParam("group_deny", Helperjs.cleanArray(group_deny))};
if (contact_allow.length>0) {xhr.setParam("contact_allow", Helperjs.cleanArray(contact_allow))};
if (contact_deny.length>0) {xhr.setParam("contact_deny", Helperjs.cleanArray(contact_deny))};
2019-12-10 21:12:32 +01:00
if (attachImageURL.length>0) {
for (var image in attachImageURL){
xhr.setImageFileParam("media", attachImageURL[image]);
xhr.setImageFileParam("angle", rotator.angle.toString());
}
};
2017-01-26 21:55:31 +01:00
xhr.post();
}
function dmUpdate(title,text,replyto,screen_name,attachImageURL) {
2019-06-25 20:59:10 +02:00
newsBusy.running=true;
2018-07-01 15:09:21 +02:00
//xhr.url= login.server + "/api/direct_messages/new.json";
2017-01-26 21:55:31 +01:00
xhr.setLogin(login.username+":"+Qt.atob(login.password));
2018-07-01 15:09:21 +02:00
xhr.setUrl(login.server);
xhr.setApi("/api/direct_messages/new");
2017-01-26 21:55:31 +01:00
xhr.clearParams();
xhr.setParam("text", text);
xhr.setParam("screen_name", screen_name);
if (parentId!="") {xhr.setParam("replyto", replyto)};
2018-07-01 15:09:21 +02:00
//if (title!=="") {xhr.setParam("title", title)};
2017-01-26 21:55:31 +01:00
xhr.post();
}
2019-06-25 20:59:10 +02:00
function setParent(newsitemobject){
//print("Newsobject "+newsitemobject.id+ " "+JSON.stringify(newsitemobject.user));
if (newsitemobject!=""){
messageSend.state="conversation"
reply_to_user=newsitemobject.user.screen_name;
parentId=newsitemobject.id
} else {
2020-01-27 21:53:51 +01:00
messageSend.state="";
2019-06-25 20:59:10 +02:00
reply_to_user="";
parentId="";
bodyField.text="";
attachImageURLs.pop();
2019-12-10 21:12:32 +01:00
imageAttachment.source=""
2019-06-25 20:59:10 +02:00
}
}
2020-02-02 21:49:07 +01:00
function contactmenu(letter){//print("letter "+letter)
2019-06-25 20:59:10 +02:00
Newsjs.listFriends(login,db,function(contacts){
2019-12-10 21:12:32 +01:00
contactModel.clear();
2019-06-25 20:59:10 +02:00
for (var i=0;i<contacts.length;i++){
2019-12-10 21:12:32 +01:00
contactModel.append({"contact":contacts[i]})
2019-06-25 20:59:10 +02:00
}
2019-12-10 21:12:32 +01:00
contactSelector.visible=true
2019-06-25 20:59:10 +02:00
},letter);
}
// Flickable{
// anchors.fill: parent
// contentHeight: messageColumn.height
// boundsBehavior: Flickable.StopAtBounds
2018-07-20 21:15:54 +02:00
Column {
2019-06-25 20:59:10 +02:00
y:0.5*mm
2017-01-26 21:55:31 +01:00
id:messageColumn
2018-04-22 21:12:40 +02:00
spacing: 0.5*mm
2017-01-26 21:55:31 +01:00
width: parent.width
2019-06-25 20:59:10 +02:00
height: 10*mm//implicitHeight
2019-12-10 21:12:32 +01:00
// Row{
// x: 0.5*mm
// Label{
// id:toLabel
// width: 7*mm
// height: 6*mm
// topPadding: 1.5* mm
// font.pixelSize: 3*mm
// text: newsSwipeview.stacktype=="DirectMessages"?qsTr("to:"):""
// visible:false// ((parentId !== "") || (newsStack.parent.stacktype=="DirectMessages"))
// }
TextArea{
id:receiverLabel
//x: 8*mm
width: messageColumn.width//-8*mm
font.pixelSize: 3*mm
placeholderText:qsTr("to:")
text: ""//newsSwipeview.stacktype=="DirectMessages"?qsTr("to:")+ " "+ reply_to_user:""
visible:false// ((parentId !== "") || (newsStack.parent.stacktype=="DirectMessages"))
//onLengthChanged: contactmenu(text)
//onPreeditTextChanged: contactmenu(text)
// onActiveFocusChanged:{
// if (activeFocus==true){contactmenu("")}
// }
onTextChanged: {
//print (text)
contactmenu(text)}
// MouseArea{
// anchors.fill: parent
// onClicked:{print("receiverlabel")
// if(newsSwipeview.stacktype=="DirectMessages"){
// contactmenu();
// }}
// }
2019-06-25 20:59:10 +02:00
}
2019-12-10 21:12:32 +01:00
// }
2017-01-26 21:55:31 +01:00
TextField {
id: titleField
2019-06-25 20:59:10 +02:00
x: 0.5*mm
width: parent.width-mm
font.pixelSize: 3*mm
2017-01-26 21:55:31 +01:00
placeholderText: qsTr("Title (optional)")
2019-06-25 20:59:10 +02:00
visible: false//(parentId === "") && (bodyField.length>1)
onVisibleChanged: if ((visible==true)&&(conversation==true)){
conversationView.contentY=conversationView.contentY+titleField.height
}
2017-01-26 21:55:31 +01:00
}
2018-04-22 21:12:40 +02:00
Rectangle{
color: "white"
radius: 0.5*mm
x:mm
width: parent.width-2*mm
2019-06-25 20:59:10 +02:00
height:Math.max(bodyField.contentHeight+4*mm,10*mm)
2019-12-10 21:12:32 +01:00
2018-04-22 21:12:40 +02:00
TextArea {
id: bodyField
2019-12-10 21:12:32 +01:00
property string contactprefix:""
2018-04-22 21:12:40 +02:00
anchors.fill: parent
font.pixelSize: 3*mm
2019-06-25 20:59:10 +02:00
font.family: "Noto Sans"
2018-04-22 21:12:40 +02:00
wrapMode: Text.Wrap
selectByMouse: true
2019-06-25 20:59:10 +02:00
placeholderText: conversation?"": qsTr("What's on your mind?")
2018-07-20 21:15:54 +02:00
textFormat: TextEdit.RichText //TextEdit.PlainText
2019-06-25 20:59:10 +02:00
onLineCountChanged: (conversation==true)?conversationView.contentY=conversationView.contentY+3*mm:newsView.contentY=newsView.contentY+3*mm
2018-07-20 21:15:54 +02:00
onLinkActivated:{Qt.openUrlExternally(link)}
2019-06-25 20:59:10 +02:00
onActiveFocusChanged:{
if (activeFocus==true){
if (conversation==true){
setParent(conversationModel.get(0).newsitemobject);
2019-12-10 21:12:32 +01:00
messageSend.state="conversation";
conversationView.contentY=conversationView.contentY+20*mm
} else if (textfocus==false){
messageSend.state="active";
newsView.positionViewAtBeginning();
2019-06-25 20:59:10 +02:00
}
}
}
onTextChanged:{
if (text!=""){
2019-12-10 21:12:32 +01:00
var plaintext=getText(0,cursorPosition)
//print(plaintext+plaintext.lastIndexOf("@",cursorPosition)+getText(plaintext.lastIndexOf('@',cursorPosition),cursorPosition) +" preedit: "+ preeditText+cursorPosition);
var regex1 = /@[a-z]+/;var regex2 = /![a-z]+/;var regex3 = /\s/;
//print(text.substring(cursorPosition-2,cursorPosition));
//if (regex.test(getText(bodyField.cursorPosition-2,bodyField.cursorPosition)) || regex.test(preeditText) || regex.test(text)){
if (regex1.test(getText(plaintext.lastIndexOf('@',cursorPosition),cursorPosition)+preeditText) && !regex3.test(getText(plaintext.lastIndexOf('@',cursorPosition),cursorPosition)+preeditText)){
var letter=(getText(plaintext.lastIndexOf('@',cursorPosition),cursorPosition)).match(/[a-z]+/);
contactprefix="@";
contactmenu(letter.toString())
2020-02-02 21:49:07 +01:00
} else if( regex2.test(getText(plaintext.lastIndexOf('!',cursorPosition),cursorPosition)+preeditText) && !regex3.test(getText(plaintext.lastIndexOf('!',cursorPosition),cursorPosition)+preeditText) ){
2019-12-10 21:12:32 +01:00
var letter=(getText(plaintext.lastIndexOf('!',cursorPosition),cursorPosition)).match(/[a-z]+/);
contactprefix="!";
contactmenu(letter.toString())
}else {contactSelector.visible=false}
}else{contactSelector.visible=false}
}
2018-04-22 21:12:40 +02:00
}
2017-01-26 21:55:31 +01:00
}
2019-12-10 21:12:32 +01:00
ListView{
id:contactSelector
visible: false
z:3
x:8*mm
width: parent.width-9*mm
height: messageSend.height/2
model:contactModel
function processContactSelection(contact){
if(Helperjs.getCount(db,login,"contacts","screen_name",contact.screen_name)>1){
contact.screen_name=contact.screen_name+"+"+contacts.cid
}
if (newsSwipeview.stacktype=='DirectMessages'){
receiverLabel.text=contact.screen_name;
reply_to_user=contact.screen_name
} else {
bodyField.remove(bodyField.getText(0,bodyField.cursorPosition).lastIndexOf(bodyField.contactprefix,bodyField.cursorPosition),bodyField.cursorPosition);
bodyField.insert(bodyField.cursorPosition, bodyField.contactprefix+contact.screen_name+" ");
bodyField.cursorPosition=bodyField.cursorPosition+contact.screen_name.length+1
}
//receiverLabel.text=contact.screen_name;
contactSelector.visible=false
}
delegate: ContactComponent { }
}
ListModel{id:contactModel}
Item{
id:imageAttachment;
property alias source:realimage.source
//property alias angle:rotator.angle
visible: source!=""
width: 45*mm
height: 45*mm;
MouseArea{
anchors.fill: parent
onClicked: {
attachImageURLs.splice(attachImageURLs.indexOf(source),1);
imageAttachment.source=""
}
}
Image{id:realimage
source:"";
x:2*mm;
width: 45*mm;
height: source==""?0:45*mm;
fillMode: Image.PreserveAspectFit;
transform: Rotation {id:rotator; origin.x: 22.5*mm; origin.y: 22.5*mm; angle: 0}
}
Rectangle{
width: 5*mm
height: 5*mm
visible: imageAttachment.source!=""
anchors.bottom: imageAttachment.bottom
anchors.right: imageAttachment.right
color: "black"
opacity: 0.5
Text{anchors.centerIn:parent;text: "\uf01e";color: "white"}
MouseArea{
anchors.fill:parent;
onClicked:{
rotator.angle+=90;
}
}
}
}
2018-04-22 21:12:40 +02:00
2019-06-25 20:59:10 +02:00
// Row{
// spacing: 2
// width: parent.width
// CheckBox{
// id:dmCheckbox
// text:"DM"
// enabled: false
// checked: (directmessage==1)?true:false
// onClicked:{
// if(dmCheckbox.checkedState==Qt.Checked){directmessage=1}
// else if(dmCheckbox.checkedState==Qt.Unchecked){directmessage=0}
// }
// }
2017-01-26 21:55:31 +01:00
2019-06-25 20:59:10 +02:00
// Button{
// text:"\uf0c1"
// height:8*mm
// onClicked: {
// if(bodyField.selectedText==""){Helperjs.showMessage("Error","No text selected",messageSend)}
// else{urlTextEdit.text="";
// urlRectangle.visible=true}}
// }
// }
// Rectangle{
// id:urlRectangle
// height: 7*mm //parent.height
// width:parent.width-2*mm
// visible:false
// TextField{
// id:urlTextEdit
// width:parent.width-7*mm
// height:parent.height
// }
// Button{
// anchors.left:urlTextEdit.right
// anchors.leftMargin:mm
// height:8*mm
// text:"\u2713"
// onClicked: {if(urlTextEdit.text!=""){
// var start = bodyField.selectionStart;
// var text=bodyField.selectedText
// if(text.lastIndexOf(".jpg")>-1 || text.lastIndexOf(".jpeg")>-1 || text.lastIndexOf(".png")>-1){text="<img src="+text+">"}
// text = "[url="+urlTextEdit.text+"]" + text + "[/url]";
// bodyField.remove(start,bodyField.selectionEnd);
// bodyField.insert(start,text);}
// urlRectangle.visible=false}
// }
// }
2017-01-26 21:55:31 +01:00
Row{
2019-06-25 20:59:10 +02:00
id:buttonRow
visible:false //(bodyField.length>1)||(attachImageURLs.length>0)
spacing: mm
height: 12*mm
MButton{id:permButton
visible: (newsSwipeview.stacktype!=="DirectMessages")
height: 6*mm
width: 7*mm
2017-05-11 22:15:34 +02:00
text: ((contact_allow.length==0)&&(contact_deny.length==0)&&(group_allow.length==0)&&(group_deny.length==0))?"\uf09c":"\uf023"
2019-06-25 20:59:10 +02:00
onClicked: { if (permissionDialog.visible==false){permissionDialog.visible=true} else{permissionDialog.visible=false}}
2018-04-22 21:12:40 +02:00
}
2019-06-25 20:59:10 +02:00
MButton {
2017-01-26 21:55:31 +01:00
id: attachButton
2019-06-25 20:59:10 +02:00
height: 6*mm
width: 7*mm
2018-04-22 21:12:40 +02:00
text: "\uf03e"
2019-06-25 20:59:10 +02:00
visible:(newsSwipeview.stacktype!="DirectMessages")
2017-01-26 21:55:31 +01:00
onClicked: {
2017-05-11 22:15:34 +02:00
if (attachImageURLs.length>0){//Server currently accepts only one attachment
Helperjs.showMessage( qsTr("Error"),qsTr("Only one attachment supported at the moment.\n Remove other attachment first!"), messageColumn)
}
else{
2019-06-25 20:59:10 +02:00
root.imagePicking=false;
2018-02-19 22:36:00 +01:00
var imagePicker = Qt.createQmlObject('import QtQuick 2.0; import "qrc:/qml/genericqml";'+
osSettings.imagePickQml+'{multiple : false;onReady: {attachImageURLs.push(imageUrl);'+
2018-08-25 16:17:09 +02:00
'attachImage(imageUrl)}}',root,"imagePicker");
2018-02-19 22:36:00 +01:00
imagePicker.pickImage()
2017-05-11 22:15:34 +02:00
}
2017-01-26 21:55:31 +01:00
}
}
2017-03-25 23:36:14 +01:00
2019-06-25 20:59:10 +02:00
MButton{
2017-03-25 23:36:14 +01:00
id:smileyButton
text: "\uf118"
2019-06-25 20:59:10 +02:00
height: 6*mm
width: 7*mm
onClicked: {if (smileyDialog.visible==false){smileyDialog.visible=true} else{smileyDialog.visible=false}}
2018-04-22 21:12:40 +02:00
}
2017-03-25 23:36:14 +01:00
2019-06-25 20:59:10 +02:00
MButton {
2017-01-26 21:55:31 +01:00
id: cancelButton
2019-06-25 20:59:10 +02:00
height: 6*mm
width: 7*mm
2017-03-25 23:36:14 +01:00
text: "\uf057"
2018-04-22 21:12:40 +02:00
onClicked: {
2019-12-10 21:12:32 +01:00
if (textfocus==true){messageSend.destroy()}
else{
bodyField.text="";
messageSend.state="";
permissionDialog.visible=false;
receiverLabel.visible=false;
reply_to_user="";
attachImage("");
attachImageURLs.pop();
}
2018-04-22 21:12:40 +02:00
}
2019-06-25 20:59:10 +02:00
}
MButton {
2017-01-26 21:55:31 +01:00
id: sendButton
2019-06-25 20:59:10 +02:00
height: 6*mm
width: 7*mm
2017-03-25 23:36:14 +01:00
text: "\uf1d9"
2017-01-26 21:55:31 +01:00
onClicked: {
var title=titleField.text.replace("\"","\'");
2018-07-20 21:15:54 +02:00
var body=bodyField.getFormattedText(0,bodyField.length);
var dmbody=bodyField.getText(0,bodyField.length);
2019-06-25 20:59:10 +02:00
if (newsSwipeview.stacktype!=="DirectMessages"){
2018-07-20 21:15:54 +02:00
statusUpdate(title,body,parentId,attachImageURLs)}
2019-06-25 20:59:10 +02:00
else {
if (reply_to_user!=""){dmUpdate(title,dmbody,parentId,reply_to_user)}
else{Helperjs.showMessage(qsTr("Error"),qsTr("No receiver supplied!"),root)}
}
if (conversation==true){
newstab.newstabstatus=login.newsViewType; newsStack.pop(null)
}
2017-01-26 21:55:31 +01:00
}
}
}
2018-04-22 21:12:40 +02:00
PermissionDialog{id:permissionDialog;x:mm;visible: false}
SmileyDialog{id:smileyDialog;x:mm;visible: false}
2017-03-25 23:36:14 +01:00
}
2019-06-25 20:59:10 +02:00
Component.onCompleted:{
//parentId=conversationModel.get(conversationModel.count-1).newsitemobject.id
//if(attachImageURLs.length>0){attachImage(attachImageURLs[0])}
newsStack.replySignal.connect(setParent);
root.directmessageSignal.connect(directmessagePrepare);
root.uploadSignal.connect(sendUrls);
root.sendtextSignal.connect(sendtext);
2019-12-10 21:12:32 +01:00
if (textfocus==true){bodyField.forceActiveFocus()}
2019-06-25 20:59:10 +02:00
}
states: [ State {
name: "active"
PropertyChanges {
target: messageColumn; height: implicitHeight
}
PropertyChanges {
target: buttonRow; visible:true
}
PropertyChanges {
target: titleField; visible:(newsSwipeview.stacktype!="DirectMessages")//true
}
PropertyChanges {
target: receiverLabel; visible:(newsSwipeview.stacktype=="DirectMessages");
}
2019-12-10 21:12:32 +01:00
// PropertyChanges {
// target: toLabel; visible:(newsSwipeview.stacktype=="DirectMessages");
// }
2019-06-25 20:59:10 +02:00
},
State {
name: "conversation"
PropertyChanges {
target: messageColumn; height: implicitHeight
}
PropertyChanges {
target: buttonRow; visible:true
}
PropertyChanges {
target: titleField; visible:(newsSwipeview.stacktype!="DirectMessages")
}
// PropertyChanges {
// target: receiverLabel; visible:true; text:qsTr("to")+": "+ conversationModel.get(0).newsitemobject.user.name
// }
// PropertyChanges {
// target: messageSend; reply_to_user: conversationModel.get(0).newsitemobject.user.screen_name
// }
// PropertyChanges {
// target: messageSend; parentId: conversationModel.get(0).newsitemobject.status_id
// }
2019-12-10 21:12:32 +01:00
},
State {
name: "reply"
PropertyChanges {
target: messageColumn; height: implicitHeight
}
PropertyChanges {
target: buttonRow; visible:true
}
PropertyChanges {
target: titleField; visible:false
}
PropertyChanges {
target: bodyField; placeholderText:"";focus:true
}
}
]
2018-07-01 15:09:21 +02:00
}
2019-06-25 20:59:10 +02:00
//}