File indexing completed on 2024-04-28 04:55:38
0001 /* 0002 This file is part of Choqok, the KDE micro-blogging client 0003 0004 SPDX-FileCopyrightText: 2008-2012 Mehrdad Momeny <mehrdad.momeny@gmail.com> 0005 0006 SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0007 */ 0008 0009 #include "twitterapishowthread.h" 0010 0011 #include <QScrollArea> 0012 #include <QVBoxLayout> 0013 0014 #include <KLocalizedString> 0015 0016 #include "postwidget.h" 0017 #include "twitterapiaccount.h" 0018 #include "twitterapidebug.h" 0019 0020 class TwitterApiShowThread::Private 0021 { 0022 public: 0023 Private(Choqok::Account *currentAccount) 0024 : account(currentAccount) 0025 {} 0026 QVBoxLayout *mainLayout; 0027 Choqok::Account *account; 0028 QString desiredPostId; 0029 }; 0030 0031 TwitterApiShowThread::TwitterApiShowThread(Choqok::Account *account, Choqok::Post *finalPost, 0032 QWidget *parent) 0033 : QWidget(parent), d(new Private(account)) 0034 { 0035 qCDebug(CHOQOK); 0036 setupUi(); 0037 setWindowTitle(i18n("Conversation")); 0038 connect(account->microblog(), &Choqok::MicroBlog::postFetched, this, &TwitterApiShowThread::slotAddNewPost); 0039 Choqok::UI::PostWidget *widget = d->account->microblog()->createPostWidget(d->account, finalPost, this); 0040 if (widget) { 0041 addPostWidgetToUi(widget); 0042 Choqok::Post *ps = new Choqok::Post; 0043 ps->postId = finalPost->replyToPostId; 0044 d->desiredPostId = finalPost->replyToPostId; 0045 d->account->microblog()->fetchPost(d->account, ps); 0046 } 0047 } 0048 0049 TwitterApiShowThread::~TwitterApiShowThread() 0050 { 0051 delete d; 0052 } 0053 0054 void TwitterApiShowThread::setupUi() 0055 { 0056 qCDebug(CHOQOK); 0057 QVBoxLayout *gridLayout; 0058 QScrollArea *scrollArea; 0059 QWidget *scrollAreaWidgetContents; 0060 QVBoxLayout *verticalLayout_2; 0061 QSpacerItem *verticalSpacer; 0062 gridLayout = new QVBoxLayout(this); 0063 gridLayout->setMargin(0); 0064 gridLayout->setObjectName(QLatin1String("gridLayout")); 0065 scrollArea = new QScrollArea(this); 0066 scrollArea->setObjectName(QLatin1String("scrollArea")); 0067 scrollArea->setFrameShape(QFrame::NoFrame); 0068 scrollArea->setWidgetResizable(true); 0069 scrollAreaWidgetContents = new QWidget(); 0070 scrollAreaWidgetContents->setObjectName(QLatin1String("scrollAreaWidgetContents")); 0071 scrollAreaWidgetContents->setGeometry(QRect(0, 0, 254, 300)); 0072 verticalLayout_2 = new QVBoxLayout(scrollAreaWidgetContents); 0073 verticalLayout_2->setMargin(1); 0074 d->mainLayout = new QVBoxLayout(); 0075 verticalSpacer = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding); 0076 0077 d->mainLayout->addItem(verticalSpacer); 0078 d->mainLayout->setSpacing(3); 0079 d->mainLayout->setMargin(1); 0080 0081 verticalLayout_2->addLayout(d->mainLayout); 0082 0083 scrollArea->setWidget(scrollAreaWidgetContents); 0084 0085 gridLayout->addWidget(scrollArea); 0086 } 0087 0088 void TwitterApiShowThread::slotAddNewPost(Choqok::Account *theAccount, Choqok::Post *post) 0089 { 0090 qCDebug(CHOQOK); 0091 if (theAccount == d->account && post->postId == d->desiredPostId) { 0092 Choqok::UI::PostWidget *widget = d->account->microblog()->createPostWidget(d->account, post, this); 0093 if (widget) { 0094 addPostWidgetToUi(widget); 0095 Choqok::Post *ps = new Choqok::Post; 0096 ps->postId = post->replyToPostId; 0097 d->desiredPostId = ps->postId; 0098 d->account->microblog()->fetchPost(d->account, ps); 0099 } 0100 } 0101 } 0102 0103 void TwitterApiShowThread::addPostWidgetToUi(Choqok::UI::PostWidget *widget) 0104 { 0105 qCDebug(CHOQOK); 0106 widget->initUi(); 0107 widget->setRead(); 0108 widget->setFocusProxy(this); 0109 widget->setObjectName(widget->currentPost()->postId); 0110 connect(widget, &Choqok::UI::PostWidget::resendPost, this, &TwitterApiShowThread::forwardResendPost); 0111 connect(widget, &Choqok::UI::PostWidget::resendPost, this, &TwitterApiShowThread::raiseMainWindow); 0112 connect(widget, &Choqok::UI::PostWidget::reply, this, &TwitterApiShowThread::raiseMainWindow); 0113 connect(widget, &Choqok::UI::PostWidget::reply, this, &TwitterApiShowThread::forwardReply); 0114 // connect( widget, SIGNAL(aboutClosing(QString,PostWidget*)), 0115 // SLOT(postWidgetClosed(QString,PostWidget*)) ); 0116 d->mainLayout->insertWidget(0, widget); 0117 // d->posts.insert(widget->currentPost().postId, widget); 0118 Choqok::UI::Global::SessionManager::self()->emitNewPostWidgetAdded(widget, d->account); 0119 } 0120 0121 void TwitterApiShowThread::raiseMainWindow() 0122 { 0123 Choqok::UI::Global::mainWindow()->activateWindow(); 0124 } 0125 0126 #include "moc_twitterapishowthread.cpp"