File indexing completed on 2024-05-19 12:37:35
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"