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 }