X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fsearchview.cpp;h=ec5829511df93dad736b665f057f2358bf6a0f98;hb=dc017a83d762c52d9224064e9b78fd1d833dc785;hp=2e3ac2769a846007bee9ff583a42927c1b2ef8ab;hpb=6670ba1908780dd31492e266fcfb3221953ced87;p=minitube diff --git a/src/searchview.cpp b/src/searchview.cpp index 2e3ac27..ec58295 100644 --- a/src/searchview.cpp +++ b/src/searchview.cpp @@ -24,7 +24,7 @@ $END_LICENSE */ #include "searchparams.h" #include "ytsuggester.h" #include "channelsuggest.h" -#ifdef APP_MAC +#ifdef APP_MAC_SEARCHFIELD #include "searchlineedit_mac.h" #else #include "searchlineedit.h" @@ -48,17 +48,12 @@ static const int PADDING = 30; SearchView::SearchView(QWidget *parent) : QWidget(parent) { - QFont biggerFont = FontUtils::big(); - QFont smallerFont = FontUtils::smallBold(); - #if defined(APP_MAC) | defined(APP_WIN) // speedup painting since we'll paint the whole background // by ourselves anyway in paintEvent() setAttribute(Qt::WA_OpaquePaintEvent); #endif - setAutoFillBackground(true); - QBoxLayout *mainLayout = new QVBoxLayout(this); mainLayout->setMargin(PADDING); mainLayout->setSpacing(0); @@ -87,19 +82,18 @@ SearchView::SearchView(QWidget *parent) : QWidget(parent) { new QLabel("

" + tr("Welcome to %2,") // .replace("", this); welcomeLabel->setOpenExternalLinks(true); -#ifdef APP_WIN + welcomeLabel->setProperty("heading", true); +#ifdef APP_MAC + QFont f = welcomeLabel->font(); + f.setFamily("Helvetica Neue"); + f.setStyleName("Thin"); + welcomeLabel->setFont(f); +#elif APP_WIN QFont f = welcomeLabel->font(); - f.setHintingPreference(QFont::PreferNoHinting); f.setFamily("Segoe UI Light"); welcomeLabel->setFont(f); #endif @@ -110,20 +104,28 @@ SearchView::SearchView(QWidget *parent) : QWidget(parent) { QBoxLayout *tipLayout = new QHBoxLayout(); tipLayout->setSpacing(10); + const QFont &biggerFont = FontUtils::big(); + //: "Enter", as in "type". The whole phrase says: "Enter a keyword to start watching videos" QLabel *tipLabel = new QLabel(tr("Enter"), this); +#ifndef APP_MAC tipLabel->setFont(biggerFont); +#endif tipLayout->addWidget(tipLabel); typeCombo = new QComboBox(this); typeCombo->addItem(tr("a keyword")); typeCombo->addItem(tr("a channel")); +#ifndef APP_MAC typeCombo->setFont(biggerFont); +#endif connect(typeCombo, SIGNAL(currentIndexChanged(int)), SLOT(searchTypeChanged(int))); tipLayout->addWidget(typeCombo); tipLabel = new QLabel(tr("to start watching videos."), this); +#ifndef APP_MAC tipLabel->setFont(biggerFont); +#endif tipLayout->addWidget(tipLabel); layout->addLayout(tipLayout); @@ -132,19 +134,23 @@ SearchView::SearchView(QWidget *parent) : QWidget(parent) { QHBoxLayout *searchLayout = new QHBoxLayout(); searchLayout->setAlignment(Qt::AlignVCenter); +#ifdef APP_MAC_SEARCHFIELD + queryEdit = new SearchLineEditMac(this); +#else queryEdit = new SearchLineEdit(this); -#ifndef APP_MAC - queryEdit->setFont(biggerFont); + queryEdit->toWidget()->setFont(biggerFont); #endif - connect(queryEdit, SIGNAL(search(const QString&)), SLOT(watch(const QString&))); - connect(queryEdit, SIGNAL(textEdited(const QString &)), SLOT(textChanged(const QString &))); - connect(queryEdit, SIGNAL(suggestionAccepted(Suggestion*)), SLOT(suggestionAccepted(Suggestion*))); + + qDebug() << "queryEdit->toWidget()" << (queryEdit->toWidget() == 0) << queryEdit->toWidget(); + connect(queryEdit->toWidget(), SIGNAL(search(const QString&)), SLOT(watch(const QString&))); + connect(queryEdit->toWidget(), SIGNAL(textEdited(const QString &)), SLOT(textChanged(const QString &))); + connect(queryEdit->toWidget(), SIGNAL(suggestionAccepted(Suggestion*)), SLOT(suggestionAccepted(Suggestion*))); youtubeSuggest = new YTSuggester(this); channelSuggest = new ChannelSuggest(this); searchTypeChanged(0); - searchLayout->addWidget(queryEdit); + searchLayout->addWidget(queryEdit->toWidget()); searchLayout->addSpacing(10); watchButton = new QPushButton(tr("Watch"), this); @@ -165,11 +171,10 @@ SearchView::SearchView(QWidget *parent) : QWidget(parent) { recentKeywordsLayout = new QVBoxLayout(); recentKeywordsLayout->setSpacing(5); recentKeywordsLayout->setAlignment(Qt::AlignTop | Qt::AlignLeft); - recentKeywordsLabel = new QLabel(tr("Recent keywords").toUpper(), this); + recentKeywordsLabel = new QLabel(tr("Recent keywords"), this); recentKeywordsLabel->setProperty("recentHeader", true); recentKeywordsLabel->setForegroundRole(QPalette::Dark); recentKeywordsLabel->hide(); - recentKeywordsLabel->setFont(smallerFont); recentKeywordsLayout->addWidget(recentKeywordsLabel); otherLayout->addLayout(recentKeywordsLayout); @@ -178,11 +183,10 @@ SearchView::SearchView(QWidget *parent) : QWidget(parent) { recentChannelsLayout = new QVBoxLayout(); recentChannelsLayout->setSpacing(5); recentChannelsLayout->setAlignment(Qt::AlignTop | Qt::AlignLeft); - recentChannelsLabel = new QLabel(tr("Recent channels").toUpper(), this); + recentChannelsLabel = new QLabel(tr("Recent channels"), this); recentChannelsLabel->setProperty("recentHeader", true); recentChannelsLabel->setForegroundRole(QPalette::Dark); recentChannelsLabel->hide(); - recentChannelsLabel->setFont(smallerFont); recentChannelsLayout->addWidget(recentChannelsLabel); otherLayout->addLayout(recentChannelsLayout); @@ -198,15 +202,26 @@ SearchView::SearchView(QWidget *parent) : QWidget(parent) { } void SearchView::appear() { + MainWindow::instance()->showActionInStatusBar(The::globalActions()->value("definition"), true); + updateRecentKeywords(); updateRecentChannels(); queryEdit->selectAll(); queryEdit->enableSuggest(); - if (!queryEdit->hasFocus()) - QTimer::singleShot(10, queryEdit, SLOT(setFocus())); + + if (!queryEdit->toWidget()->hasFocus()) queryEdit->toWidget()->setFocus(); +} + +void SearchView::disappear() { + MainWindow::instance()->showActionInStatusBar(The::globalActions()->value("definition"), false); } void SearchView::updateRecentKeywords() { + // load + QSettings settings; + QStringList keywords = settings.value(recentKeywordsKey).toStringList(); + if (keywords == recentKeywords) return; + recentKeywords = keywords; // cleanup QLayoutItem *item; @@ -215,13 +230,10 @@ void SearchView::updateRecentKeywords() { delete item; } - // load - QSettings settings; - QStringList keywords = settings.value(recentKeywordsKey).toStringList(); recentKeywordsLabel->setVisible(!keywords.isEmpty()); The::globalActions()->value("clearRecentKeywords")->setEnabled(!keywords.isEmpty()); - foreach (QString keyword, keywords) { + foreach (const QString &keyword, keywords) { QString link = keyword; QString display = keyword; if (keyword.startsWith("http://") || keyword.startsWith("https://")) { @@ -242,7 +254,7 @@ void SearchView::updateRecentKeywords() { + display + "", this); itemLabel->setAttribute(Qt::WA_DeleteOnClose); itemLabel->setProperty("recentItem", true); - itemLabel->setMaximumWidth(queryEdit->width() + watchButton->width()); + itemLabel->setMaximumWidth(queryEdit->toWidget()->width() + watchButton->width()); // itemLabel->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); // Make links navigable with the keyboard too itemLabel->setTextInteractionFlags(Qt::LinksAccessibleByKeyboard | Qt::LinksAccessibleByMouse); @@ -255,6 +267,11 @@ void SearchView::updateRecentKeywords() { } void SearchView::updateRecentChannels() { + // load + QSettings settings; + QStringList keywords = settings.value(recentChannelsKey).toStringList(); + if (keywords == recentChannels) return; + recentChannels = keywords; // cleanup QLayoutItem *item; @@ -263,13 +280,10 @@ void SearchView::updateRecentChannels() { delete item; } - // load - QSettings settings; - QStringList keywords = settings.value(recentChannelsKey).toStringList(); recentChannelsLabel->setVisible(!keywords.isEmpty()); // TODO The::globalActions()->value("clearRecentKeywords")->setEnabled(!keywords.isEmpty()); - foreach (QString keyword, keywords) { + foreach (const QString &keyword, keywords) { QString link = keyword; QString display = keyword; int separator = keyword.indexOf('|'); @@ -282,7 +296,7 @@ void SearchView::updateRecentChannels() { + display + "", this); itemLabel->setAttribute(Qt::WA_DeleteOnClose); itemLabel->setProperty("recentItem", true); - itemLabel->setMaximumWidth(queryEdit->width() + watchButton->width()); + itemLabel->setMaximumWidth(queryEdit->toWidget()->width() + watchButton->width()); // itemLabel->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); // Make links navigable with the keyboard too itemLabel->setTextInteractionFlags(Qt::LinksAccessibleByKeyboard | Qt::LinksAccessibleByMouse); @@ -302,23 +316,22 @@ void SearchView::textChanged(const QString &text) { watchButton->setEnabled(!text.simplified().isEmpty()); } -void SearchView::watch(QString query) { - - query = query.simplified(); +void SearchView::watch(const QString &query) { + QString q = query.simplified(); // check for empty query - if (query.length() == 0) { - queryEdit->setFocus(Qt::OtherFocusReason); + if (q.length() == 0) { + queryEdit->toWidget()->setFocus(Qt::OtherFocusReason); return; } SearchParams *searchParams = new SearchParams(); if (typeCombo->currentIndex() == 0) - searchParams->setKeywords(query); + searchParams->setKeywords(q); else { // remove spaces from channel name - query = query.simplified(); - searchParams->setAuthor(query); + q.remove(' '); + searchParams->setChannelId(q); searchParams->setSortBy(SearchParams::SortByNewest); } @@ -326,44 +339,41 @@ void SearchView::watch(QString query) { emit search(searchParams); } -void SearchView::watchChannel(QString channel) { - - channel = channel.simplified(); - - // check for empty query - if (channel.length() == 0) { - queryEdit->setFocus(Qt::OtherFocusReason); +void SearchView::watchChannel(const QString &channelId) { + if (channelId.length() == 0) { + queryEdit->toWidget()->setFocus(Qt::OtherFocusReason); return; } - // remove spaces from channel name - channel = channel.remove(" "); + QString id = channelId; + + // Fix old settings + if (!id.startsWith("UC")) id = "UC" + id; SearchParams *searchParams = new SearchParams(); - searchParams->setAuthor(channel); + searchParams->setChannelId(id); searchParams->setSortBy(SearchParams::SortByNewest); // go! emit search(searchParams); } -void SearchView::watchKeywords(QString query) { - - query = query.simplified(); +void SearchView::watchKeywords(const QString &query) { + QString q = query.simplified(); // check for empty query if (query.length() == 0) { - queryEdit->setFocus(Qt::OtherFocusReason); + queryEdit->toWidget()->setFocus(Qt::OtherFocusReason); return; } if (typeCombo->currentIndex() == 0) { - queryEdit->setText(query); + queryEdit->setText(q); watchButton->setEnabled(true); } SearchParams *searchParams = new SearchParams(); - searchParams->setKeywords(query); + searchParams->setKeywords(q); // go! emit search(searchParams); @@ -374,7 +384,7 @@ void SearchView::paintEvent(QPaintEvent *event) { #if defined(APP_MAC) | defined(APP_WIN) QBrush brush; if (window()->isActiveWindow()) { - brush = QBrush(QColor(0xdd, 0xe4, 0xeb)); + brush = Qt::white; } else { brush = palette().window(); } @@ -388,7 +398,6 @@ void SearchView::paintEvent(QPaintEvent *event) { QPainter p(this); style()->drawPrimitive(QStyle::PE_Widget, &o, &p, this); #endif - PainterUtils::topShadow(this); } void SearchView::searchTypeChanged(int index) { @@ -398,9 +407,11 @@ void SearchView::searchTypeChanged(int index) { queryEdit->setSuggester(channelSuggest); } queryEdit->selectAll(); - queryEdit->setFocus(); + queryEdit->toWidget()->setFocus(); } void SearchView::suggestionAccepted(Suggestion *suggestion) { - watch(suggestion->value); + if (suggestion->type == QLatin1String("channel")) { + watchChannel(suggestion->userData); + } else watch(suggestion->value); }