Falkon Develop
Cross-platform Qt-based web browser
navigationbarconfigdialog.cpp
Go to the documentation of this file.
1/* ============================================================
2* Falkon - Qt web browser
3* Copyright (C) 2018 David Rosca <nowrep@gmail.com>
4*
5* This program is free software: you can redistribute it and/or modify
6* it under the terms of the GNU General Public License as published by
7* the Free Software Foundation, either version 3 of the License, or
8* (at your option) any later version.
9*
10* This program is distributed in the hope that it will be useful,
11* but WITHOUT ANY WARRANTY; without even the implied warranty of
12* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13* GNU General Public License for more details.
14*
15* You should have received a copy of the GNU General Public License
16* along with this program. If not, see <http://www.gnu.org/licenses/>.
17* ============================================================ */
19#include "ui_navigationbarconfigdialog.h"
20#include "navigationbar.h"
21#include "toolbutton.h"
22#include "settings.h"
23#include "mainapplication.h"
24#include "websearchbar.h"
25
27 : QDialog(navigationBar)
29 , m_navigationBar(navigationBar)
30{
31 setAttribute(Qt::WA_DeleteOnClose);
32
33 ui->setupUi(this);
34
35 connect(ui->buttonBox, &QDialogButtonBox::clicked, this, &NavigationBarConfigDialog::buttonClicked);
36
37 loadSettings();
38}
39
40void NavigationBarConfigDialog::loadSettings()
41{
42 auto createItem = [this](const NavigationBar::WidgetData &data) {
43 auto *item = new QListWidgetItem();
44 item->setText(data.name);
45 item->setData(Qt::UserRole + 10, data.id);
46#if 0
47 // XXX: Crashes in Qt on items drag&drop...
48 ToolButton *button = qobject_cast<ToolButton*>(data.widget);
49 if (button) {
50 item->setIcon(button->icon());
51 }
52#endif
53 return item;
54 };
55
56 ui->currentItems->clear();
57 for (const QString &id : std::as_const(m_navigationBar->m_layoutIds)) {
58 NavigationBar::WidgetData data = m_navigationBar->m_widgets.value(id);
59 if (data.id.isEmpty()) {
60 data.id = id;
61 data.name = id;
62 }
63 ui->currentItems->addItem(createItem(data));
64 }
65
66 ui->availableItems->clear();
67 for (const NavigationBar::WidgetData &data : std::as_const(m_navigationBar->m_widgets)) {
68 if (!m_navigationBar->m_layoutIds.contains(data.id)) {
69 ui->availableItems->addItem(createItem(data));
70 }
71 }
72
73 ui->showSearchBar->setChecked(m_navigationBar->webSearchBar()->isVisible());
74}
75
76void NavigationBarConfigDialog::saveSettings()
77{
78 QStringList ids;
79 for (int i = 0; i < ui->currentItems->count(); ++i) {
80 ids.append(ui->currentItems->item(i)->data(Qt::UserRole + 10).toString());
81 }
82
83 Settings settings;
84 settings.beginGroup(QSL("NavigationBar"));
85 settings.setValue(QSL("Layout"), ids);
86 settings.setValue(QSL("ShowSearchBar"), ui->showSearchBar->isChecked());
87 settings.endGroup();
88
89 const auto windows = mApp->windows();
90 for (BrowserWindow *window : windows) {
91 window->navigationBar()->loadSettings();
92 }
93}
94
95void NavigationBarConfigDialog::resetToDefaults()
96{
97 Settings settings;
98 settings.beginGroup(QSL("NavigationBar"));
99 settings.remove(QSL("Layout"));
100 settings.remove(QSL("ShowSearchBar"));
101 settings.endGroup();
102
103 const auto windows = mApp->windows();
104 for (BrowserWindow *window : windows) {
105 window->navigationBar()->loadSettings();
106 }
107}
108
109void NavigationBarConfigDialog::buttonClicked(QAbstractButton *button)
110{
111 switch (ui->buttonBox->buttonRole(button)) {
112 case QDialogButtonBox::ApplyRole:
113 saveSettings();
114 loadSettings();
115 break;
116
117 case QDialogButtonBox::RejectRole:
118 close();
119 break;
120
121 case QDialogButtonBox::ResetRole:
122 resetToDefaults();
123 loadSettings();
124 break;
125
126 case QDialogButtonBox::AcceptRole:
127 saveSettings();
128 close();
129 break;
130
131 default:
132 break;
133 }
134}
NavigationBarConfigDialog(NavigationBar *navigationBar)
WebSearchBar * webSearchBar()
Definition: navigationbar.h:58
void beginGroup(const QString &prefix)
Definition: settings.cpp:79
void endGroup()
Definition: settings.cpp:84
void remove(const QString &key)
Definition: settings.cpp:64
void setValue(const QString &key, const QVariant &defaultValue=QVariant())
Definition: settings.cpp:69
QIcon icon
Definition: toolbutton.h:34
#define mApp
i
Definition: i18n.py:23
#define QSL(x)
Definition: qzcommon.h:40