19#include "ui_searchenginesdialog.h"
29 , m_manager(
mApp->searchEnginesManager())
31 setAttribute(Qt::WA_DeleteOnClose);
35 connect(ui->add, &QAbstractButton::clicked,
this, &SearchEnginesDialog::addEngine);
36 connect(ui->remove, &QAbstractButton::clicked,
this, &SearchEnginesDialog::removeEngine);
37 connect(ui->edit, &QAbstractButton::clicked,
this, &SearchEnginesDialog::editEngine);
38 connect(ui->setAsDefault, &QAbstractButton::clicked,
this, &SearchEnginesDialog::setDefaultEngine);
39 connect(ui->defaults, &QAbstractButton::clicked,
this, &SearchEnginesDialog::defaults);
40 connect(ui->moveUp, &QAbstractButton::clicked,
this, &SearchEnginesDialog::moveUp);
41 connect(ui->moveDown, &QAbstractButton::clicked,
this, &SearchEnginesDialog::moveDown);
43 connect(ui->treeWidget, &QTreeWidget::itemDoubleClicked,
this, &SearchEnginesDialog::editEngine);
46 ui->treeWidget->sortByColumn(-1, Qt::AscendingOrder);
50void SearchEnginesDialog::addEngine()
53 dialog.hideIconLabels();
55 if (dialog.exec() != QDialog::Accepted) {
60 engine.
name = dialog.name();
61 engine.
url = dialog.url();
62 engine.
postData = dialog.postData().toUtf8();
66 if (engine.
name.isEmpty() || engine.
url.isEmpty()) {
70 auto* item =
new QTreeWidgetItem();
71 setEngine(item, engine);
73 changeItemToDefault(item,
false);
74 item->setIcon(0, engine.
icon);
77 ui->treeWidget->addTopLevelItem(item);
80void SearchEnginesDialog::removeEngine()
82 QTreeWidgetItem* item = ui->treeWidget->currentItem();
83 if (!item || ui->treeWidget->topLevelItemCount() == 1) {
87 if (isDefaultEngine(item)) {
89 QMessageBox::warning(
this, tr(
"Remove Engine"),
90 tr(
"You can't remove the default search engine.<br>"
91 "Set a different engine as default before removing %1.").arg(en.
name));
98void SearchEnginesDialog::editEngine()
100 QTreeWidgetItem* item = ui->treeWidget->currentItem();
109 dialog.setName(engine.
name);
110 dialog.setUrl(engine.
url);
111 dialog.setPostData(QString::fromUtf8(engine.
postData));
112 dialog.setShortcut(engine.
shortcut);
113 dialog.setIcon(engine.
icon);
115 if (dialog.exec() != QDialog::Accepted) {
119 engine.
name = dialog.name();
120 engine.
url = dialog.url();
121 engine.
postData = dialog.postData().toUtf8();
122 engine.
shortcut = dialog.shortcut();
123 engine.
icon = dialog.icon();
125 if (engine.
name.isEmpty() || engine.
url.isEmpty()) {
129 setEngine(item, engine);
131 changeItemToDefault(item, isDefaultEngine(item));
132 item->setIcon(0, engine.
icon);
136void SearchEnginesDialog::setDefaultEngine()
138 QTreeWidgetItem* item = ui->treeWidget->currentItem();
143 for (
int j = 0; j < ui->treeWidget->topLevelItemCount(); ++j) {
144 QTreeWidgetItem*
i = ui->treeWidget->topLevelItem(j);
145 if (isDefaultEngine(
i)) {
149 changeItemToDefault(
i,
false);
154 changeItemToDefault(item,
true);
157void SearchEnginesDialog::defaults()
163bool SearchEnginesDialog::isDefaultEngine(QTreeWidgetItem* item)
165 return item->data(0, DefaultRole).toBool();
168SearchEngine SearchEnginesDialog::getEngine(QTreeWidgetItem* item)
173void SearchEnginesDialog::setEngine(QTreeWidgetItem* item,
const SearchEngine &engine)
177 item->setData(0, EngineRole, v);
178 item->setText(0, engine.
name);
181void SearchEnginesDialog::changeItemToDefault(QTreeWidgetItem* item,
bool isDefault)
183 QFont font = item->font(0);
184 font.setBold(isDefault);
186 item->setFont(0, font);
187 item->setFont(1, font);
188 item->setData(0, DefaultRole, isDefault);
191void SearchEnginesDialog::moveUp()
193 QTreeWidgetItem* currentItem = ui->treeWidget->currentItem();
194 int index = ui->treeWidget->indexOfTopLevelItem(currentItem);
196 if (!currentItem || index == 0) {
200 ui->treeWidget->takeTopLevelItem(index);
201 ui->treeWidget->insertTopLevelItem(index - 1, currentItem);
202 ui->treeWidget->setCurrentItem(currentItem);
205void SearchEnginesDialog::moveDown()
207 QTreeWidgetItem* currentItem = ui->treeWidget->currentItem();
208 int index = ui->treeWidget->indexOfTopLevelItem(currentItem);
210 if (!currentItem || !ui->treeWidget->itemBelow(currentItem)) {
214 ui->treeWidget->takeTopLevelItem(index);
215 ui->treeWidget->insertTopLevelItem(index + 1, currentItem);
216 ui->treeWidget->setCurrentItem(currentItem);
219void SearchEnginesDialog::reloadEngines()
221 ui->treeWidget->clear();
222 const SearchEngine defaultEngine =
mApp->searchEnginesManager()->defaultEngine();
226 auto* item =
new QTreeWidgetItem();
228 changeItemToDefault(item, en == defaultEngine);
229 item->setIcon(0, en.
icon);
232 ui->treeWidget->addTopLevelItem(item);
236void SearchEnginesDialog::showEvent(QShowEvent *e)
238 QDialog::showEvent(e);
242void SearchEnginesDialog::resizeEvent(QResizeEvent *e)
244 QDialog::resizeEvent(e);
248void SearchEnginesDialog::resizeViewHeader()
250 const int headerWidth = ui->treeWidget->header()->width();
251 ui->treeWidget->header()->resizeSection(0, headerWidth - headerWidth / 4);
256 if (ui->treeWidget->topLevelItemCount() < 1) {
260 QVector<SearchEngine> allEngines;
262 for (
int i = 0;
i < ui->treeWidget->topLevelItemCount();
i++) {
263 QTreeWidgetItem* item = ui->treeWidget->topLevelItem(
i);
269 allEngines.append(engine);
271 if (isDefaultEngine(item)) {
SearchEnginesDialog(QWidget *parent=nullptr)
~SearchEnginesDialog() override
QVector< Engine > allEngines()
static QIcon iconForSearchEngine(const QUrl &url)
void setDefaultEngine(const Engine &engine)
void setAllEngines(const QVector< Engine > &engines)