File indexing completed on 2024-05-12 04:58:09

0001 /* ============================================================
0002 * Falkon - Qt web browser
0003 * Copyright (C) 2018 David Rosca <nowrep@gmail.com>
0004 *
0005 * This program is free software: you can redistribute it and/or modify
0006 * it under the terms of the GNU General Public License as published by
0007 * the Free Software Foundation, either version 3 of the License, or
0008 * (at your option) any later version.
0009 *
0010 * This program is distributed in the hope that it will be useful,
0011 * but WITHOUT ANY WARRANTY; without even the implied warranty of
0012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0013 * GNU General Public License for more details.
0014 *
0015 * You should have received a copy of the GNU General Public License
0016 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
0017 * ============================================================ */
0018 #include "navigationbarconfigdialog.h"
0019 #include "ui_navigationbarconfigdialog.h"
0020 #include "navigationbar.h"
0021 #include "toolbutton.h"
0022 #include "settings.h"
0023 #include "mainapplication.h"
0024 #include "websearchbar.h"
0025 
0026 NavigationBarConfigDialog::NavigationBarConfigDialog(NavigationBar *navigationBar)
0027     : QDialog(navigationBar)
0028     , ui(new Ui::NavigationBarConfigDialog)
0029     , m_navigationBar(navigationBar)
0030 {
0031     setAttribute(Qt::WA_DeleteOnClose);
0032 
0033     ui->setupUi(this);
0034 
0035     connect(ui->buttonBox, &QDialogButtonBox::clicked, this, &NavigationBarConfigDialog::buttonClicked);
0036 
0037     loadSettings();
0038 }
0039 
0040 void NavigationBarConfigDialog::loadSettings()
0041 {
0042     auto createItem = [this](const NavigationBar::WidgetData &data) {
0043         auto *item = new QListWidgetItem();
0044         item->setText(data.name);
0045         item->setData(Qt::UserRole + 10, data.id);
0046 #if 0
0047         // XXX: Crashes in Qt on items drag&drop...
0048         ToolButton *button = qobject_cast<ToolButton*>(data.widget);
0049         if (button) {
0050             item->setIcon(button->icon());
0051         }
0052 #endif
0053         return item;
0054     };
0055 
0056     ui->currentItems->clear();
0057     for (const QString &id : std::as_const(m_navigationBar->m_layoutIds)) {
0058         NavigationBar::WidgetData data = m_navigationBar->m_widgets.value(id);
0059         if (data.id.isEmpty()) {
0060             data.id = id;
0061             data.name = id;
0062         }
0063         ui->currentItems->addItem(createItem(data));
0064     }
0065 
0066     ui->availableItems->clear();
0067     for (const NavigationBar::WidgetData &data : std::as_const(m_navigationBar->m_widgets)) {
0068         if (!m_navigationBar->m_layoutIds.contains(data.id)) {
0069             ui->availableItems->addItem(createItem(data));
0070         }
0071     }
0072 
0073     ui->showSearchBar->setChecked(m_navigationBar->webSearchBar()->isVisible());
0074 }
0075 
0076 void NavigationBarConfigDialog::saveSettings()
0077 {
0078     QStringList ids;
0079     for (int i = 0; i < ui->currentItems->count(); ++i) {
0080         ids.append(ui->currentItems->item(i)->data(Qt::UserRole + 10).toString());
0081     }
0082 
0083     Settings settings;
0084     settings.beginGroup(QSL("NavigationBar"));
0085     settings.setValue(QSL("Layout"), ids);
0086     settings.setValue(QSL("ShowSearchBar"), ui->showSearchBar->isChecked());
0087     settings.endGroup();
0088 
0089     const auto windows = mApp->windows();
0090     for (BrowserWindow *window : windows) {
0091         window->navigationBar()->loadSettings();
0092     }
0093 }
0094 
0095 void NavigationBarConfigDialog::resetToDefaults()
0096 {
0097     Settings settings;
0098     settings.beginGroup(QSL("NavigationBar"));
0099     settings.remove(QSL("Layout"));
0100     settings.remove(QSL("ShowSearchBar"));
0101     settings.endGroup();
0102 
0103     const auto windows = mApp->windows();
0104     for (BrowserWindow *window : windows) {
0105         window->navigationBar()->loadSettings();
0106     }
0107 }
0108 
0109 void NavigationBarConfigDialog::buttonClicked(QAbstractButton *button)
0110 {
0111     switch (ui->buttonBox->buttonRole(button)) {
0112     case QDialogButtonBox::ApplyRole:
0113         saveSettings();
0114         loadSettings();
0115         break;
0116 
0117     case QDialogButtonBox::RejectRole:
0118         close();
0119         break;
0120 
0121     case QDialogButtonBox::ResetRole:
0122         resetToDefaults();
0123         loadSettings();
0124         break;
0125 
0126     case QDialogButtonBox::AcceptRole:
0127         saveSettings();
0128         close();
0129         break;
0130 
0131     default:
0132         break;
0133     }
0134 }