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 "twitterapisearchdialog.h"
0010 
0011 #include <QComboBox>
0012 #include <QDialogButtonBox>
0013 #include <QLabel>
0014 #include <QLineEdit>
0015 #include <QPushButton>
0016 #include <QVBoxLayout>
0017 
0018 #include <KLocalizedString>
0019 
0020 #include "twitterapiaccount.h"
0021 #include "twitterapidebug.h"
0022 #include "twitterapimicroblog.h"
0023 #include "twitterapisearch.h"
0024 
0025 class TwitterApiSearchDialog::Private
0026 {
0027 public:
0028     Private(TwitterApiAccount *theAccount)
0029         : account(theAccount)
0030     {
0031         qCDebug(CHOQOK);
0032         mBlog = qobject_cast<TwitterApiMicroBlog *>(account->microblog());
0033         if (!mBlog) {
0034             qCCritical(CHOQOK) << "microblog is not a TwitterApiMicroBlog";
0035         }
0036         Q_ASSERT(mBlog);
0037     }
0038     QComboBox *searchTypes;
0039     QLineEdit *searchQuery;
0040     TwitterApiAccount *account;
0041     TwitterApiMicroBlog *mBlog;
0042 };
0043 
0044 TwitterApiSearchDialog::TwitterApiSearchDialog(TwitterApiAccount *theAccount, QWidget *parent)
0045     : QDialog(parent), d(new Private(theAccount))
0046 {
0047     qCDebug(CHOQOK);
0048     setWindowTitle(i18nc("@title:window", "Search"));
0049     setAttribute(Qt::WA_DeleteOnClose);
0050     createUi();
0051     d->searchQuery->setFocus();
0052     connect(d->searchTypes, (void (QComboBox::*)(int))&QComboBox::currentIndexChanged, this,
0053             &TwitterApiSearchDialog::slotSearchTypeChanged);
0054 }
0055 
0056 TwitterApiSearchDialog::~TwitterApiSearchDialog()
0057 {
0058     delete d;
0059 }
0060 
0061 void TwitterApiSearchDialog::createUi()
0062 {
0063     qCDebug(CHOQOK);
0064     QWidget *wd = new QWidget(this);
0065 
0066     QVBoxLayout *layout = new QVBoxLayout;
0067     setLayout(layout);
0068     layout->addWidget(wd);
0069 
0070     d->searchTypes = new QComboBox(wd);
0071     fillSearchTypes();
0072     qCDebug(CHOQOK);
0073     layout->addWidget(d->searchTypes);
0074 
0075     QHBoxLayout *queryLayout = new QHBoxLayout;
0076     layout->addLayout(queryLayout);
0077     QLabel *lblType = new QLabel(i18nc("Search query", "Query:"), wd);
0078     lblType->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
0079     queryLayout->addWidget(lblType);
0080 
0081     d->searchQuery = new QLineEdit(this);
0082     queryLayout->addWidget(d->searchQuery);
0083 
0084     QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
0085     QPushButton *okButton = buttonBox->button(QDialogButtonBox::Ok);
0086     okButton->setDefault(true);
0087     okButton->setShortcut(Qt::CTRL | Qt::Key_Return);
0088     okButton->setText(i18nc("@action:button", "Search"));
0089     connect(buttonBox, &QDialogButtonBox::accepted, this, &TwitterApiSearchDialog::accept);
0090     connect(buttonBox, &QDialogButtonBox::rejected, this, &TwitterApiSearchDialog::reject);
0091     layout->addWidget(buttonBox);
0092 
0093     adjustSize();
0094 }
0095 
0096 void TwitterApiSearchDialog::fillSearchTypes()
0097 {
0098     qCDebug(CHOQOK);
0099     QMap<int, QPair<QString, bool> > searchTypes = d->mBlog->searchBackend()->getSearchTypes();
0100     int count = searchTypes.count();
0101     for (int i = 0; i < count; ++i) {
0102         d->searchTypes->insertItem(i, searchTypes[i].first);
0103     }
0104 }
0105 
0106 void TwitterApiSearchDialog::accept()
0107 {
0108     bool isB = d->mBlog->searchBackend()->getSearchTypes()[d->searchTypes->currentIndex()].second;
0109     SearchInfo info(d->account, d->searchQuery->text(), d->searchTypes->currentIndex(), isB);
0110     d->mBlog->searchBackend()->requestSearchResults(info);
0111     QDialog::accept();
0112 }
0113 
0114 void TwitterApiSearchDialog::slotSearchTypeChanged(int)
0115 {
0116     d->searchQuery->setFocus();
0117 }
0118 
0119 #include "moc_twitterapisearchdialog.cpp"