SearchWidget::SearchWidget(MainWindow *mainWindow) : QWidget(mainWindow) , m_ui(new Ui::SearchWidget()) , m_mainWindow(mainWindow) , m_isNewQueryString(false) , m_noSearchResults(true) { m_ui->setupUi(this); QString searchPatternHint; QTextStream stream(&searchPatternHint, QIODevice::WriteOnly); stream << "<html><head/><body><p>" << tr("A phrase to search for.") << "<br>" << tr("Spaces in a search term may be protected by double quotes.") << "</p><p>" << tr("Example:", "Search phrase example") << "<br>" << tr("<b>foo bar</b>: search for <b>foo</b> and <b>bar</b>", "Search phrase example, illustrates quotes usage, a pair of " "space delimited words, individal words are highlighted") << "<br>" << tr("<b>"foo bar"</b>: search for <b>foo bar</b>", "Search phrase example, illustrates quotes usage, double quoted" "pair of space delimited words, the whole pair is highlighted") << "</p></body></html>" << flush; m_ui->m_searchPattern->setToolTip(searchPatternHint); // Icons m_ui->searchButton->setIcon(GuiIconProvider::instance()->getIcon("edit-find")); m_ui->downloadButton->setIcon(GuiIconProvider::instance()->getIcon("download")); m_ui->goToDescBtn->setIcon(GuiIconProvider::instance()->getIcon("application-x-mswinurl")); m_ui->pluginsButton->setIcon(GuiIconProvider::instance()->getIcon("preferences-system-network")); m_ui->copyURLBtn->setIcon(GuiIconProvider::instance()->getIcon("edit-copy")); connect(m_ui->tabWidget, SIGNAL(tabCloseRequested(int)), this, SLOT(closeTab(int))); m_searchEngine = new SearchEngine; connect(m_searchEngine, SIGNAL(searchStarted()), SLOT(searchStarted())); connect(m_searchEngine, SIGNAL(newSearchResults(QList<SearchResult>)), SLOT(appendSearchResults(QList<SearchResult>))); connect(m_searchEngine, SIGNAL(searchFinished(bool)), SLOT(searchFinished(bool))); connect(m_searchEngine, SIGNAL(searchFailed()), SLOT(searchFailed())); connect(m_searchEngine, SIGNAL(torrentFileDownloaded(QString)), SLOT(addTorrentToSession(QString))); // Fill in category combobox fillCatCombobox(); fillPluginComboBox(); connect(m_ui->m_searchPattern, SIGNAL(returnPressed()), m_ui->searchButton, SLOT(click())); connect(m_ui->m_searchPattern, SIGNAL(textEdited(QString)), this, SLOT(searchTextEdited(QString))); connect(m_ui->selectPlugin, SIGNAL(currentIndexChanged(int)), this, SLOT(selectMultipleBox(int))); }
void SearchLineEdit::findPrev() { if ( m_id == -1 || m_searchType != Okular::Document::PreviousMatch ) return; if ( !m_changed ) { emit searchStarted(); m_searchRunning = true; m_document->continueSearch( m_id, m_searchType ); } else startSearch(); }
/*SEARCH ENGINE START*/ SearchEngine::SearchEngine(MainWindow* parent) : QWidget(parent) , search_pattern(new LineEdit) , mp_mainWindow(parent) { setupUi(this); searchBarLayout->insertWidget(0, search_pattern); connect(search_pattern, SIGNAL(returnPressed()), search_button, SLOT(click())); // Icons search_button->setIcon(IconProvider::instance()->getIcon("edit-find")); download_button->setIcon(IconProvider::instance()->getIcon("download")); goToDescBtn->setIcon(IconProvider::instance()->getIcon("application-x-mswinurl")); enginesButton->setIcon(IconProvider::instance()->getIcon("preferences-system-network")); tabWidget->setTabsClosable(true); connect(tabWidget, SIGNAL(tabCloseRequested(int)), this, SLOT(closeTab(int))); // Boolean initialization search_stopped = false; // Creating Search Process #ifdef Q_WS_WIN has_python = addPythonPathToEnv(); #endif searchProcess = new QProcess(this); searchProcess->setEnvironment(QProcess::systemEnvironment()); connect(searchProcess, SIGNAL(started()), this, SLOT(searchStarted())); connect(searchProcess, SIGNAL(readyReadStandardOutput()), this, SLOT(readSearchOutput())); connect(searchProcess, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(searchFinished(int,QProcess::ExitStatus))); connect(tabWidget, SIGNAL(currentChanged(int)), this, SLOT(tab_changed(int))); searchTimeout = new QTimer(this); searchTimeout->setSingleShot(true); connect(searchTimeout, SIGNAL(timeout()), this, SLOT(on_search_button_clicked())); // Update nova.py search plugin if necessary updateNova(); supported_engines = new SupportedEngines( #ifdef Q_WS_WIN has_python #endif ); // Fill in category combobox fillCatCombobox(); connect(search_pattern, SIGNAL(textEdited(QString)), this, SLOT(searchTextEdited(QString))); }
void SearchModel::setQuery(const QString & query) { if (query == currentQuery) return ; beginRemoveRows(QModelIndex(), 0, shows.size() - 1); clear(); endRemoveRows(); currentQuery = query; if (query.isEmpty()) return ; DownloadWorker *worker = DownloadWorker::sharedInstance(); searchJob = worker->fetchSearchResults(query); emit searchStarted(); }
void SearchLineEdit::startSearch() { if ( m_id == -1 || !m_color.isValid() ) return; if ( m_changed && ( m_searchType == Okular::Document::NextMatch || m_searchType == Okular::Document::PreviousMatch ) ) { m_document->resetSearch( m_id ); } m_changed = false; // search text if have more than 3 chars or else clear search QString thistext = text(); if ( thistext.length() >= qMax( m_minLength, 1 ) ) { emit searchStarted(); m_searchRunning = true; m_document->searchText( m_id, thistext, m_fromStart, m_caseSensitivity, m_searchType, m_moveViewport, m_color ); } else m_document->resetSearch( m_id ); }
void MovieFileSearcher::reload(bool force) { m_aborted = false; emit searchStarted(tr("Searching for Movies..."), m_progressMessageId); if (force) Manager::instance()->database()->clearMovies(); Manager::instance()->movieModel()->clear(); m_lastModifications.clear(); QList<MovieContents> c; QList<Movie*> dbMovies; QStringList bluRays; QStringList dvds; int movieSum = 0; int movieCounter = 0; foreach (SettingsDir dir, m_directories) { if (m_aborted) return; QList<Movie*> moviesFromDb; if (!dir.autoReload && !force) moviesFromDb = Manager::instance()->database()->movies(dir.path); if (dir.autoReload || force || moviesFromDb.count() == 0) { Manager::instance()->database()->clearMovies(dir.path); QMap<QString, QStringList> contents; if (Settings::instance()->advanced()->movieFilters().isEmpty()) continue; qDebug() << "Scanning directory" << dir.path; qDebug() << "Filters are" << Settings::instance()->advanced()->movieFilters(); QDirIterator it(dir.path, Settings::instance()->advanced()->movieFilters(), QDir::NoDotAndDotDot | QDir::Dirs | QDir::Files, QDirIterator::Subdirectories | QDirIterator::FollowSymlinks); while (it.hasNext()) { if (m_aborted) return; it.next(); qDebug() << "Scanned file" << it.filePath(); if (it.fileName().contains("-trailer", Qt::CaseInsensitive) || it.fileName().contains("-sample", Qt::CaseInsensitive)) { qDebug() << "Skipping file, is trailer or sample"; continue; } // Skip extras folder QString dirName = it.fileInfo().dir().dirName(); if (QString::compare("extras", dirName, Qt::CaseInsensitive) == 0) { qDebug() << "Skipping file, is in extras folder"; continue; } // Skip BluRay backup folder if (QString::compare("backup", dirName, Qt::CaseInsensitive) == 0 && QString::compare("index.bdmv", it.fileName(), Qt::CaseInsensitive) == 0) { qDebug() << "Skipping file, is in backup folder"; continue; } if (QString::compare("index.bdmv", it.fileName(), Qt::CaseInsensitive) == 0) { qDebug() << "Found BluRay structure"; QDir dir(it.fileInfo().dir()); if (QString::compare(dir.dirName(), "BDMV", Qt::CaseInsensitive) == 0) dir.cdUp(); bluRays << dir.path(); } if (QString::compare("VIDEO_TS.IFO", it.fileName(), Qt::CaseInsensitive) == 0) { qDebug() << "Found DVD structure"; QDir dir(it.fileInfo().dir()); if (QString::compare(dir.dirName(), "VIDEO_TS", Qt::CaseInsensitive) == 0) dir.cdUp(); dvds << dir.path(); } QString path = it.fileInfo().path(); if (!contents.contains(path)) contents.insert(path, QStringList()); contents[path].append(it.filePath()); m_lastModifications.insert(it.filePath(), it.fileInfo().lastModified()); emit currentDir("/" + it.fileInfo().dir().dirName()); } movieSum += contents.count(); MovieContents con; con.path = dir.path; con.inSeparateFolder = dir.separateFolders; con.contents = contents; c.append(con); } else { dbMovies.append(moviesFromDb); movieSum += moviesFromDb.count(); } } emit searchStarted(tr("Loading Movies..."), m_progressMessageId); qDebug() << "Now processing files"; QList<Movie*> movies; foreach (const MovieContents &con, c) { Manager::instance()->database()->transaction(); QMapIterator<QString, QStringList> itContents(con.contents); while (itContents.hasNext()) { if (m_aborted) { Manager::instance()->database()->commit(); return; } itContents.next(); QStringList files = itContents.value(); qDebug() << "Files are" << files; DiscType discType = DiscSingle; // BluRay handling foreach (const QString &path, bluRays) { if (!files.isEmpty() && files.first().startsWith(path)) { QStringList f; foreach (const QString &file, files) { if (file.endsWith("index.bdmv", Qt::CaseInsensitive)) f.append(file); } files = f; discType = DiscBluRay; qDebug() << "It's a BluRay structure"; } } // DVD handling foreach (const QString &path, dvds) { if (!files.isEmpty() && files.first().startsWith(path)) { QStringList f; foreach (const QString &file, files) { if (file.endsWith("VIDEO_TS.IFO", Qt::CaseInsensitive)) f.append(file); } files = f; discType = DiscDvd; qDebug() << "It's a DVD structure"; } }
/** * @brief Starts the scanning process */ void ConcertFileSearcher::reload(bool force) { m_aborted = false; if (force) Manager::instance()->database()->clearConcerts(); Manager::instance()->concertModel()->clear(); emit searchStarted(tr("Searching for Concerts..."), m_progressMessageId); QList<Concert*> concerts; QList<Concert*> dbConcerts; QList<QStringList> contents; foreach (SettingsDir dir, m_directories) { if (m_aborted) return; QList<Concert*> concertsFromDb = Manager::instance()->database()->concerts(dir.path); if (dir.autoReload || force || concertsFromDb.count() == 0) { Manager::instance()->database()->clearConcerts(dir.path); scanDir(dir.path, dir.path, contents, dir.separateFolders, true); } else { dbConcerts.append(concertsFromDb); } } emit currentDir(""); emit searchStarted(tr("Loading Concerts..."), m_progressMessageId); int concertCounter=0; int concertSum=contents.size()+dbConcerts.size(); // Setup concerts Manager::instance()->database()->transaction(); foreach (const QStringList &files, contents) { if (m_aborted) return; bool inSeparateFolder = false; QString path; // get directory if (!files.isEmpty()) { int index = -1; for (int i=0, n=m_directories.count() ; i<n ; ++i) { if (files.at(0).startsWith(m_directories[i].path)) { if (index == -1) index = i; else if (m_directories[index].path.length() < m_directories[i].path.length()) index = i; } } if (index != -1) { inSeparateFolder = m_directories[index].separateFolders; path = m_directories[index].path; } } Concert *concert = new Concert(files, this); concert->setInSeparateFolder(inSeparateFolder); concert->controller()->loadData(Manager::instance()->mediaCenterInterface()); emit currentDir(concert->name()); Manager::instance()->database()->add(concert, path); concerts.append(concert); emit progress(++concertCounter, concertSum, m_progressMessageId); } Manager::instance()->database()->commit(); // Setup concerts loaded from database foreach (Concert *concert, dbConcerts) { if (m_aborted) return; concert->controller()->loadData(Manager::instance()->mediaCenterInterface(), false, false); emit currentDir(concert->name()); concerts.append(concert); emit progress(++concertCounter, concertSum, m_progressMessageId); } foreach (Concert *concert, concerts) Manager::instance()->concertModel()->addConcert(concert); qDebug() << "Searching for concerts done"; if (!m_aborted) emit concertsLoaded(m_progressMessageId); }
SearchWidget::SearchWidget(int _offset, bool _isWithButton, QWidget* _parent) : QWidget(_parent) { if (this->objectName().isEmpty()) this->setObjectName(QStringLiteral("search_widget")); active_ = false; parent_search_vertical_layout_ = new QVBoxLayout(this); parent_search_vertical_layout_->setContentsMargins(0, 0, 0, 0); parent_search_vertical_layout_->setSpacing(0); horizontal_search_layout_ = new QHBoxLayout(); horizontal_search_layout_->setContentsMargins(0, 0, 0, Utils::scale_value(0)); parent_search_vertical_layout_->addLayout(horizontal_search_layout_); horizontal_search_layout_->addSpacing(Utils::scale_value(_offset - 8)); search_icon_ = new Ui::CustomButton(this, ":/resources/contr_search_100.png"); search_icon_->setOffsets(Utils::scale_value(8), Utils::scale_value(0)); search_icon_->setActiveImage(":/resources/contr_search_100_active.png"); search_icon_->setFixedWidth(Utils::scale_value(34)); search_icon_->setFixedHeight(Utils::scale_value(53)); search_icon_->setStyleSheet("border: none;"); horizontal_search_layout_->addWidget(search_icon_); parent_widget_ = new QWidget(this); search_vertical_layout_ = new QVBoxLayout(parent_widget_); search_vertical_layout_->setContentsMargins(0, Utils::scale_value(5), 0, 0); search_edit_ = new LineEditEx(this); search_edit_->setProperty("SearchEdit", true); search_edit_->setPlaceholderText(QT_TRANSLATE_NOOP("search_widget", "Search")); search_edit_->setContentsMargins(Utils::scale_value(6), 0, Utils::scale_value(22), 0); search_edit_->setAttribute(Qt::WA_MacShowFocusRect, false); search_edit_->setStyleSheet(QString("background-color: transparent")); Testing::setAccessibleName(search_edit_, "search_edit"); search_vertical_layout_->addSpacing(Utils::scale_value(0)); search_vertical_layout_->addWidget(search_edit_); horizontal_search_layout_->addWidget(parent_widget_); search_edit_icon_ = new CustomButton(this, ":/resources/contr_compose_100.png"); search_edit_icon_->setOffsets(Utils::scale_value(0), Utils::scale_value(0)); search_edit_icon_->setOffsetsForActive(Utils::scale_value(2), Utils::scale_value(0)); search_edit_icon_->setHoverImage(":/resources/contr_compose_100_hover.png"); search_edit_icon_->setActiveImage(":/resources/contr_clear_100.png"); search_edit_icon_->setFixedWidth(Utils::scale_value(50)); search_edit_icon_->setFixedHeight(Utils::scale_value(53)); search_edit_icon_->setCursor(Qt::PointingHandCursor); search_edit_icon_->setFocusPolicy(Qt::NoFocus); search_edit_icon_->setStyleSheet("background-color: transparent;"); Testing::setAccessibleName(search_edit_icon_, "CreateGroupChat"); horizontal_search_layout_->addWidget(search_edit_icon_); horizontal_line_widget_ = new QWidget(this); horizontal_line_widget_->setFixedHeight(Utils::scale_value(1)); horizontal_line_widget_->setStyleSheet(QString("background-color: #dadada;")); parent_search_vertical_layout_->addSpacing(0); widget_2_ = new QWidget(this); horizontal_layout_2_ = new QHBoxLayout(widget_2_); horizontal_layout_2_->setContentsMargins(Utils::scale_value(_isWithButton ? 24 : 16), 0, Utils::scale_value(_isWithButton ? 24 : 60), Utils::scale_value(10)); horizontal_layout_2_->addWidget(horizontal_line_widget_); parent_search_vertical_layout_->addWidget(widget_2_); QMetaObject::connectSlotsByName(this); connect(search_edit_, SIGNAL(textEdited(QString)), this, SLOT(searchChanged(QString)), Qt::QueuedConnection); connect(search_edit_, SIGNAL(clicked()), this, SLOT(searchStarted()), Qt::QueuedConnection); connect(search_edit_, SIGNAL(escapePressed()), this, SLOT(searchCompleted()), Qt::QueuedConnection); connect(search_edit_, SIGNAL(enter()), this, SLOT(editEnterPressed()), Qt::QueuedConnection); connect(search_edit_, SIGNAL(upArrow()), this, SLOT(editUpPressed()), Qt::QueuedConnection); connect(search_edit_, SIGNAL(downArrow()), this, SLOT(editDownPressed()), Qt::QueuedConnection); connect(search_edit_, SIGNAL(focusOut()), this, SLOT(focusedOut()), Qt::QueuedConnection); connect(search_edit_icon_, SIGNAL(clicked()), this, SLOT(clearPressed()), Qt::QueuedConnection); setActive(false); }
/* * Constructs a KBabelDictView which is a child of 'parent', with the * name 'name' and widget flags set to 'f' */ KBabelDictView::KBabelDictView( QWidget* parent, const char* name, WFlags fl ) : QWidget( parent, name, fl ) { QVBoxLayout *mainLayout = new QVBoxLayout(this); mainLayout->setSpacing(KDialog::spacingHint()); mainLayout->setMargin(KDialog::marginHint()); splitter = new QSplitter(this); mainLayout->addWidget(splitter); QWidget *w = new QWidget(splitter); QVBoxLayout *wLayout= new QVBoxLayout(w); wLayout->setSpacing(KDialog::spacingHint()); wLayout->setMargin(KDialog::marginHint()); QHBoxLayout *hbox = new QHBoxLayout(wLayout); QLabel *label = new QLabel(i18n("Search in module:"), w); hbox->addWidget(label); moduleCombo = new KComboBox(w); hbox->addWidget(moduleCombo); QWidget *temp = new QWidget(w); hbox->addWidget(temp); hbox->setStretchFactor(temp,2); editButton = new QPushButton(i18n("&Edit"),w); editButton->setEnabled(false); hbox->addWidget(editButton); // added a button "clear search" here hbox = new QHBoxLayout(wLayout); QPushButton* clearButton = new QPushButton(w); clearButton->setFlat(true); clearButton->setPixmap(SmallIcon("locationbar_erase")); hbox->addWidget(clearButton); textEdit = new KLineEdit(w,"textedit"); textEdit->setFocus(); hbox->addWidget(textEdit); hbox = new QHBoxLayout(wLayout); startButton = new QPushButton(i18n("&Start Search"),w); hbox->addWidget(startButton); inTransButton = new QCheckBox(i18n("Sea&rch in translations"),w); hbox->addWidget(inTransButton); hbox->addStretch(1); stopButton = new QPushButton(i18n("S&top"),w); stopButton->setEnabled(false); hbox->addWidget(stopButton); KSeparator *sep = new KSeparator(w); wLayout->addWidget(sep); dictBox = new KBabelDictBox(w,"kbabeldictbox"); wLayout->addWidget(dictBox); prefWidget = new QWidget(splitter); QVBoxLayout *tempLayout= new QVBoxLayout(prefWidget); tempLayout->setSpacing(KDialog::spacingHint()); tempLayout->setMargin(KDialog::marginHint()); label = new QLabel(i18n("Settings:"),prefWidget); tempLayout->addWidget(label); prefStack = new QWidgetStack(prefWidget); tempLayout->addWidget(prefStack); tempLayout->addStretch(1); KConfig *config = KGlobal::config(); dictBox->readSettings(config); dictBox->setAutoUpdateOptions(true); QStringList modules = dictBox->moduleNames(); moduleCombo->insertStringList(modules); QPtrList<PrefWidget> prefs = dictBox->modPrefWidgets(prefStack); prefs.setAutoDelete(false); PrefWidget *p; int i=0; for(p = prefs.first(); p != 0; p=prefs.next()) { prefStack->addWidget(p,i); i++; } int active=dictBox->activeModule(); prefStack->raiseWidget(active); moduleCombo->setCurrentItem(active); QHBox *h = new QHBox(this); h->setSpacing(KDialog::spacingHint()); mainLayout->addWidget(h); progressLabel = new QLabel(h); progressBar = new KProgress(h); connect(textEdit,SIGNAL(returnPressed()),startButton,SLOT(animateClick())); connect(startButton,SIGNAL(clicked()),this, SLOT(startSearch())); connect(stopButton, SIGNAL(clicked()), dictBox,SLOT(slotStopSearch())); connect(editButton, SIGNAL(clicked()), dictBox, SLOT(edit())); connect(dictBox, SIGNAL(searchStarted()), this, SLOT(searchStarted())); connect(dictBox, SIGNAL(searchStopped()), this, SLOT(searchStopped())); connect(dictBox, SIGNAL(progressed(int)), progressBar, SLOT(setProgress(int))); connect(dictBox, SIGNAL(activeModuleChanged(bool)) , editButton, SLOT(setEnabled(bool))); connect(dictBox, SIGNAL(progressStarts(const QString&)) , this, SLOT(progressStarted(const QString&))); connect(dictBox, SIGNAL(progressEnds()), this, SLOT(progressStopped())); connect(moduleCombo, SIGNAL(activated(int)), dictBox, SLOT(setActiveModule(int))); connect(dictBox, SIGNAL(activeModuleChanged(int)) , this, SLOT(switchModule(int))); connect(clearButton, SIGNAL(clicked()), this, SLOT(slotClearSearch())); }
void SearchVideos::run() { // search started emit searchStarted(); // stop getting previews imageCatcher->stop(); // clear previous results searchResults->removeAllSearchResults(); // has plugins to search? if (internalPluginsIds.count() == 0) { // search finished emit searchFinished(); // abort process return; } // build the plugins search list QList<VideoInformationPlugin *> plugins; // check which plugins goes into the list if (internalPluginsIds.at(0) == SEARCH_ID_ALL) // all plugins plugins.append(VideoInformation::instance()->getAllSearchPlugins()); else if (internalPluginsIds.at(0) == SEARCH_ID_STANDARD) // all standard plugins plugins.append(VideoInformation::instance()->getAllSearchStandardPlugins()); else if (internalPluginsIds.at(0) == SEARCH_ID_ADULTS) // all adult plugins plugins.append(VideoInformation::instance()->getAllSearchAdultPlugins()); else if (internalPluginsIds.count() == 1) // single search plugins.append(VideoInformation::instance()->getRegisteredPlugin(internalPluginsIds.at(0))); else // custom search, so add them... for (int n = 0; n < internalPluginsIds.count(); n++) plugins.append(VideoInformation::instance()->getRegisteredPlugin(internalPluginsIds.at(n))); // if adult sites are disabled, then remove them from list if (VideoInformation::instance()->getBlockAdultContent()) for (int n = plugins.count() - 1; n >= 0; n--) if (plugins.at(n)->hasAdultContent()) plugins.removeAt(n); // inits int lastCount = 0; // start to search while (!plugins.isEmpty()) { VideoInformationPlugin *plugin = plugins.takeFirst(); if (plugin != NULL) { // execute search into current thread SearchResults results = plugin->searchVideos(internalKeyWords, internalPage); // check if we are destroying the searchResults (if yes, then abort the process) if (destroying) return; // add results searchResults->addSearchResults(results); searchResults->setSummary(results.getSummary()); // add new search block emit addNewSearchBlock(plugin); // has results? if (searchResults->getSearchResultCount() == 0) { // emit add no results emit searchResultAdded(NULL); // next search... continue; } // show results for (int n = lastCount; n < searchResults->getSearchResultCount(); n++) { // emit add result emit searchResultAdded(searchResults->getSearchResult(n)); // add to previews download previews imageCatcher->addPreview(searchResults->getSearchResult(n)); } } // update last count lastCount = searchResults->getSearchResultCount(); } // search finished emit searchFinished(); }