PreferencesSearchPageWidget::PreferencesSearchPageWidget(QWidget *parent) : QWidget(parent), m_defaultSearchEngine(SettingsManager::getValue(QLatin1String("Search/DefaultSearchEngine")).toString()), m_ui(new Ui::PreferencesSearchPageWidget) { m_ui->setupUi(this); QStandardItemModel *searchEnginesModel(new QStandardItemModel(this)); searchEnginesModel->setHorizontalHeaderLabels(QStringList({tr("Name"), tr("Keyword")})); const QStringList searchEngines(SearchEnginesManager::getSearchEngines()); for (int i = 0; i < searchEngines.count(); ++i) { const SearchEnginesManager::SearchEngineDefinition searchEngine(SearchEnginesManager::getSearchEngine(searchEngines.at(i))); if (searchEngine.identifier.isEmpty()) { continue; } m_searchEngines[searchEngine.identifier] = qMakePair(false, searchEngine); QList<QStandardItem*> items({new QStandardItem(searchEngine.icon, searchEngine.title), new QStandardItem(searchEngine.keyword)}); items[0]->setData(searchEngine.identifier, Qt::UserRole); items[0]->setToolTip(searchEngine.description); items[0]->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable | Qt::ItemIsDragEnabled); items[1]->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable | Qt::ItemIsDragEnabled); searchEnginesModel->appendRow(items); } m_ui->searchViewWidget->setModel(searchEnginesModel); m_ui->searchViewWidget->setItemDelegateForColumn(1, new SearchKeywordDelegate(this)); m_ui->searchSuggestionsCheckBox->setChecked(SettingsManager::getValue(QLatin1String("Search/SearchEnginesSuggestions")).toBool()); QMenu *addSearchMenu(new QMenu(m_ui->addSearchButton)); addSearchMenu->addAction(tr("New…")); addSearchMenu->addAction(tr("Readd"))->setMenu(new QMenu(m_ui->addSearchButton)); m_ui->addSearchButton->setMenu(addSearchMenu); m_ui->moveDownSearchButton->setIcon(ThemesManager::getIcon(QLatin1String("arrow-down"))); m_ui->moveUpSearchButton->setIcon(ThemesManager::getIcon(QLatin1String("arrow-up"))); updateReaddSearchMenu(); connect(m_ui->searchFilterLineEdit, SIGNAL(textChanged(QString)), m_ui->searchViewWidget, SLOT(setFilterString(QString))); connect(m_ui->searchViewWidget, SIGNAL(canMoveDownChanged(bool)), m_ui->moveDownSearchButton, SLOT(setEnabled(bool))); connect(m_ui->searchViewWidget, SIGNAL(canMoveUpChanged(bool)), m_ui->moveUpSearchButton, SLOT(setEnabled(bool))); connect(m_ui->searchViewWidget, SIGNAL(needsActionsUpdate()), this, SLOT(updateSearchActions())); connect(m_ui->searchViewWidget, SIGNAL(modified()), this, SIGNAL(settingsModified())); connect(m_ui->addSearchButton->menu()->actions().at(0), SIGNAL(triggered()), this, SLOT(addSearchEngine())); connect(m_ui->addSearchButton->menu()->actions().at(1)->menu(), SIGNAL(triggered(QAction*)), this, SLOT(readdSearchEngine(QAction*))); connect(m_ui->editSearchButton, SIGNAL(clicked()), this, SLOT(editSearchEngine())); connect(m_ui->removeSearchButton, SIGNAL(clicked()), this, SLOT(removeSearchEngine())); connect(m_ui->moveDownSearchButton, SIGNAL(clicked()), m_ui->searchViewWidget, SLOT(moveDownRow())); connect(m_ui->moveUpSearchButton, SIGNAL(clicked()), m_ui->searchViewWidget, SLOT(moveUpRow())); }
void PreferencesSearchPageWidget::save() { for (int i = 0; i < m_filesToRemove.count(); ++i) { QFile::remove(m_filesToRemove.at(i)); } m_filesToRemove.clear(); QStringList searchEnginesOrder; for (int i = 0; i < m_ui->searchViewWidget->getRowCount(); ++i) { const QString identifier = m_ui->searchViewWidget->getIndex(i, 0).data(Qt::UserRole).toString(); const QString keyword = m_ui->searchViewWidget->getIndex(i, 1).data(Qt::DisplayRole).toString(); if (!identifier.isEmpty()) { searchEnginesOrder.append(identifier); } if (m_searchEngines.contains(identifier) && m_searchEngines[identifier].second.keyword != keyword) { m_searchEngines[identifier].first = true; m_searchEngines[identifier].second.keyword = keyword; } } QDir().mkpath(SessionsManager::getWritableDataPath(QLatin1String("searches"))); QHash<QString, QPair<bool, SearchInformation> >::iterator searchEnginesIterator; for (searchEnginesIterator = m_searchEngines.begin(); searchEnginesIterator != m_searchEngines.end(); ++searchEnginesIterator) { if (searchEnginesIterator.value().first) { SearchesManager::saveSearchEngine(searchEnginesIterator.value().second); } } if (SettingsManager::getValue(QLatin1String("Search/SearchEnginesOrder")).toStringList().join(QLatin1Char(',')) == searchEnginesOrder.join(QLatin1Char(','))) { SearchesManager::loadSearchEngines(); } else { SettingsManager::setValue(QLatin1String("Search/SearchEnginesOrder"), searchEnginesOrder); } SettingsManager::setValue(QLatin1String("Search/DefaultSearchEngine"), m_defaultSearchEngine); SettingsManager::setValue(QLatin1String("Search/SearchEnginesSuggestions"), m_ui->searchSuggestionsCheckBox->isChecked()); updateReaddSearchMenu(); }
void PreferencesSearchPageWidget::readdSearchEngine(QAction *action) { if (!action || action->data().isNull()) { return; } const QString identifier = action->data().toString(); QFile file(SessionsManager::getReadableDataPath(QLatin1String("searches/") + identifier + QLatin1String(".xml"))); if (!file.open(QIODevice::ReadOnly)) { return; } const SearchInformation engine = SearchesManager::loadSearchEngine(&file, identifier); file.close(); if (engine.identifier.isEmpty() || m_searchEngines.contains(identifier)) { return; } m_searchEngines[identifier] = qMakePair(false, engine); QList<QStandardItem*> items; items.append(new QStandardItem(engine.icon, engine.title)); items[0]->setToolTip(engine.description); items[0]->setData(identifier, Qt::UserRole); items[0]->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable | Qt::ItemIsDragEnabled); items.append(new QStandardItem(engine.keyword)); items[1]->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable | Qt::ItemIsDragEnabled); m_ui->searchViewWidget->insertRow(items); updateReaddSearchMenu(); emit settingsModified(); }
void PreferencesSearchPageWidget::removeSearchEngine() { const QString identifier(m_ui->searchViewWidget->getIndex(m_ui->searchViewWidget->getCurrentRow(), 0).data(Qt::UserRole).toString()); if (identifier.isEmpty() || !m_searchEngines.contains(identifier)) { return; } QMessageBox messageBox; messageBox.setWindowTitle(tr("Question")); messageBox.setText(tr("Do you really want to remove this search engine?")); messageBox.setIcon(QMessageBox::Question); messageBox.setStandardButtons(QMessageBox::Yes | QMessageBox::Cancel); messageBox.setDefaultButton(QMessageBox::Cancel); const QString path(SessionsManager::getWritableDataPath(QLatin1String("searches/") + identifier + QLatin1String(".xml"))); if (QFile::exists(path)) { messageBox.setCheckBox(new QCheckBox(tr("Delete search engine permanently"))); } if (messageBox.exec() == QMessageBox::Yes) { if (messageBox.checkBox() && messageBox.checkBox()->isChecked()) { m_filesToRemove.append(path); } m_searchEngines.remove(identifier); m_ui->searchViewWidget->removeRow(); updateReaddSearchMenu(); emit settingsModified(); } }