rssguard/src/gui/formsettings.cpp

867 lines
42 KiB
C++
Raw Normal View History

2014-02-26 07:41:40 +01:00
// This file is part of RSS Guard.
//
2015-01-04 14:12:14 +01:00
// Copyright (C) 2011-2015 by Martin Rotter <rotter.martinos@gmail.com>
2014-02-26 07:41:40 +01:00
//
// RSS Guard is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// RSS Guard is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with RSS Guard. If not, see <http://www.gnu.org/licenses/>.
#include "gui/formsettings.h"
2013-12-21 21:08:52 +01:00
2014-03-27 08:40:23 +01:00
#include "definitions/definitions.h"
2013-12-23 11:39:24 +01:00
#include "core/feeddownloader.h"
2014-03-26 20:20:13 +01:00
#include "core/feedsmodel.h"
2014-10-20 18:38:24 +02:00
#include "core/messagesmodel.h"
2014-08-22 09:27:01 +02:00
#include "miscellaneous/application.h"
2014-03-27 08:40:23 +01:00
#include "miscellaneous/settings.h"
#include "miscellaneous/databasefactory.h"
#include "miscellaneous/localization.h"
#include "miscellaneous/systemfactory.h"
2014-03-28 09:04:36 +01:00
#include "miscellaneous/iconfactory.h"
2014-03-27 08:40:23 +01:00
#include "miscellaneous/skinfactory.h"
2014-03-26 12:23:27 +01:00
#include "network-web/webfactory.h"
#include "network-web/webbrowsernetworkaccessmanager.h"
#include "network-web/silentnetworkaccessmanager.h"
2014-03-26 13:30:18 +01:00
#include "network-web/webbrowser.h"
2013-12-21 21:08:52 +01:00
#include "gui/systemtrayicon.h"
2014-01-13 21:43:35 +01:00
#include "gui/feedmessageviewer.h"
#include "gui/feedsview.h"
2014-04-07 08:21:55 +02:00
#include "gui/feedstoolbar.h"
2013-12-21 21:08:52 +01:00
#include "gui/formmain.h"
2014-01-22 20:29:05 +01:00
#include "gui/messagebox.h"
2014-04-03 08:18:29 +02:00
#include "gui/basetoolbar.h"
#include "gui/messagestoolbar.h"
2014-10-20 18:38:24 +02:00
#include "gui/messagesview.h"
2014-03-27 08:40:23 +01:00
#include "dynamic-shortcuts/dynamicshortcuts.h"
2013-12-21 21:08:52 +01:00
#include <QProcess>
#include <QNetworkProxy>
#include <QColorDialog>
#include <QFileDialog>
2014-09-19 08:31:25 +02:00
#include <QKeyEvent>
2015-05-07 08:01:12 +02:00
#include <QDir>
FormSettings::FormSettings(QWidget *parent) : QDialog(parent), m_ui(new Ui::FormSettings) {
m_ui->setupUi(this);
2013-06-26 19:04:38 +02:00
// Set flags and attributes.
2014-08-20 09:05:19 +02:00
setWindowFlags(Qt::MSWindowsFixedSizeDialogHint | Qt::Dialog | Qt::WindowSystemMenuHint | Qt::WindowTitleHint);
2014-08-27 14:57:51 +02:00
setWindowIcon(qApp->icons()->fromTheme("application-settings"));
2014-09-19 08:31:25 +02:00
m_ui->m_editorMessagesToolbar->activeItemsWidget()->viewport()->installEventFilter(this);
m_ui->m_editorFeedsToolbar->activeItemsWidget()->viewport()->installEventFilter(this);
m_ui->m_editorMessagesToolbar->availableItemsWidget()->viewport()->installEventFilter(this);
m_ui->m_editorFeedsToolbar->availableItemsWidget()->viewport()->installEventFilter(this);
2014-11-09 10:22:15 +01:00
#if defined(Q_OS_OS2)
MessageBox::iconify(m_ui->m_buttonBox);
#endif
2013-06-27 19:57:23 +02:00
// Setup behavior.
2014-02-27 18:15:16 +01:00
m_ui->m_listSettings->setCurrentRow(0);
2013-06-27 19:57:23 +02:00
m_ui->m_treeLanguages->setColumnCount(5);
m_ui->m_treeLanguages->setHeaderHidden(false);
2013-09-25 20:21:32 +02:00
m_ui->m_treeLanguages->setHeaderLabels(QStringList()
2014-02-26 21:41:13 +01:00
<< /*: Language column of language list. */ tr("Language")
<< /*: Lang. code column of language list. */ tr("Code")
2013-09-25 20:21:32 +02:00
<< tr("Version")
<< tr("Author")
<< tr("Email"));
m_ui->m_treeSkins->setColumnCount(4);
m_ui->m_treeSkins->setHeaderHidden(false);
m_ui->m_treeSkins->setHeaderLabels(QStringList()
2014-02-27 18:15:16 +01:00
<< /*: Skin list name column. */ tr("Name")
<< /*: Version column of skin list. */ tr("Version")
2013-09-25 20:21:32 +02:00
<< tr("Author")
<< tr("Email"));
#if QT_VERSION >= 0x050000
2013-09-20 18:18:49 +02:00
// Setup languages.
2013-06-27 19:57:23 +02:00
m_ui->m_treeLanguages->header()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
m_ui->m_treeLanguages->header()->setSectionResizeMode(1, QHeaderView::ResizeToContents);
m_ui->m_treeLanguages->header()->setSectionResizeMode(2, QHeaderView::ResizeToContents);
m_ui->m_treeLanguages->header()->setSectionResizeMode(3, QHeaderView::ResizeToContents);
m_ui->m_treeLanguages->header()->setSectionResizeMode(4, QHeaderView::ResizeToContents);
2013-09-20 18:18:49 +02:00
// Setup skins.
m_ui->m_treeSkins->header()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
m_ui->m_treeSkins->header()->setSectionResizeMode(1, QHeaderView::ResizeToContents);
m_ui->m_treeSkins->header()->setSectionResizeMode(2, QHeaderView::ResizeToContents);
m_ui->m_treeSkins->header()->setSectionResizeMode(3, QHeaderView::ResizeToContents);
#else
2013-09-20 18:18:49 +02:00
// Setup languages.
m_ui->m_treeLanguages->header()->setResizeMode(0, QHeaderView::ResizeToContents);
m_ui->m_treeLanguages->header()->setResizeMode(1, QHeaderView::ResizeToContents);
m_ui->m_treeLanguages->header()->setResizeMode(2, QHeaderView::ResizeToContents);
m_ui->m_treeLanguages->header()->setResizeMode(3, QHeaderView::ResizeToContents);
m_ui->m_treeLanguages->header()->setResizeMode(4, QHeaderView::ResizeToContents);
2013-09-20 18:18:49 +02:00
// Setup skins.
m_ui->m_treeSkins->header()->setResizeMode(0, QHeaderView::ResizeToContents);
m_ui->m_treeSkins->header()->setResizeMode(1, QHeaderView::ResizeToContents);
m_ui->m_treeSkins->header()->setResizeMode(2, QHeaderView::ResizeToContents);
m_ui->m_treeSkins->header()->setResizeMode(3, QHeaderView::ResizeToContents);
#endif
// Establish needed connections.
connect(m_ui->m_buttonBox, SIGNAL(accepted()), this, SLOT(saveSettings()));
connect(m_ui->m_cmbProxyType, SIGNAL(currentIndexChanged(int)), this, SLOT(onProxyTypeChanged(int)));
connect(m_ui->m_checkShowPassword, SIGNAL(stateChanged(int)), this, SLOT(displayProxyPassword(int)));
connect(m_ui->m_treeSkins, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), this, SLOT(onSkinSelected(QTreeWidgetItem*,QTreeWidgetItem*)));
connect(m_ui->m_cmbExternalBrowserPreset, SIGNAL(currentIndexChanged(int)), this, SLOT(changeDefaultBrowserArguments(int)));
connect(m_ui->m_btnExternalBrowserExecutable, SIGNAL(clicked()), this, SLOT(selectBrowserExecutable()));
2015-05-12 09:48:22 +02:00
connect(m_ui->m_cmbExternalEmailPreset, SIGNAL(currentIndexChanged(int)), this, SLOT(changeDefaultEmailArguments(int)));
connect(m_ui->m_btnExternalEmailExecutable, SIGNAL(clicked()), this, SLOT(selectEmailExecutable()));
connect(m_ui->m_txtMysqlUsername->lineEdit(), SIGNAL(textChanged(QString)), this, SLOT(onMysqlUsernameChanged(QString)));
connect(m_ui->m_txtMysqlHostname->lineEdit(), SIGNAL(textChanged(QString)), this, SLOT(onMysqlHostnameChanged(QString)));
connect(m_ui->m_txtMysqlPassword->lineEdit(), SIGNAL(textChanged(QString)), this, SLOT(onMysqlPasswordChanged(QString)));
2015-04-28 20:01:59 +02:00
connect(m_ui->m_txtMysqlDatabase->lineEdit(), SIGNAL(textChanged(QString)), this, SLOT(onMysqlDatabaseChanged(QString)));
connect(m_ui->m_btnMysqlTestSetup, SIGNAL(clicked()), this, SLOT(mysqlTestConnection()));
connect(m_ui->m_spinMysqlPort, SIGNAL(editingFinished()), this, SLOT(onMysqlDataStorageEdited()));
connect(m_ui->m_txtMysqlHostname->lineEdit(), SIGNAL(textEdited(QString)), this, SLOT(onMysqlDataStorageEdited()));
connect(m_ui->m_txtMysqlPassword->lineEdit(), SIGNAL(textEdited(QString)), this, SLOT(onMysqlDataStorageEdited()));
connect(m_ui->m_txtMysqlUsername->lineEdit(), SIGNAL(textEdited(QString)), this, SLOT(onMysqlDataStorageEdited()));
connect(m_ui->m_cmbSelectToolBar, SIGNAL(currentIndexChanged(int)), m_ui->m_stackedToolbars, SLOT(setCurrentIndex(int)));
connect(m_ui->m_cmbDatabaseDriver, SIGNAL(currentIndexChanged(int)), this, SLOT(selectSqlBackend(int)));
2015-01-24 09:32:54 +01:00
connect(m_ui->m_btnDownloadsTargetDirectory, SIGNAL(clicked()), this, SLOT(selectDownloadsDirectory()));
2015-04-06 18:55:40 +02:00
connect(m_ui->m_checkMysqlShowPassword, SIGNAL(toggled(bool)), this, SLOT(switchMysqlPasswordVisiblity(bool)));
// Load all settings.
loadGeneral();
2014-02-07 21:39:59 +01:00
loadDataStorage();
loadShortcuts();
loadInterface();
2013-07-02 18:57:04 +02:00
loadProxy();
2013-07-24 19:06:09 +02:00
loadBrowser();
2013-06-27 19:57:23 +02:00
loadLanguage();
2013-12-09 16:05:16 +01:00
loadFeedsMessages();
2015-01-24 09:32:54 +01:00
loadDownloads();
}
FormSettings::~FormSettings() {
2013-12-21 21:08:52 +01:00
qDebug("Destroying FormSettings distance.");
delete m_ui;
}
2013-12-09 16:05:16 +01:00
void FormSettings::changeDefaultBrowserArguments(int index) {
if (index != 0) {
m_ui->m_txtExternalBrowserArguments->setText(m_ui->m_cmbExternalBrowserPreset->itemData(index).toString());
}
}
void FormSettings::onSkinSelected(QTreeWidgetItem *current,
QTreeWidgetItem *previous) {
2013-12-12 10:10:17 +01:00
Q_UNUSED(previous)
if (current != NULL) {
Skin skin = current->data(0, Qt::UserRole).value<Skin>();
m_ui->m_lblSelectedContents->setText(skin.m_visibleName);
}
}
2015-01-24 09:32:54 +01:00
void FormSettings::loadDownloads() {
2015-05-07 08:01:12 +02:00
m_ui->m_txtDownloadsTargetDirectory->setText(QDir::toNativeSeparators(qApp->settings()->value(GROUP(Downloads),
SETTING(Downloads::TargetDirectory)).toString()));
2015-01-24 09:32:54 +01:00
m_ui->m_rbDownloadsAskEachFile->setChecked(qApp->settings()->value(GROUP(Downloads),
SETTING(Downloads::AlwaysPromptForFilename)).toBool());
}
void FormSettings::saveDownloads() {
qApp->settings()->setValue(GROUP(Downloads), Downloads::TargetDirectory, m_ui->m_txtDownloadsTargetDirectory->text());
2015-05-07 08:01:12 +02:00
qApp->settings()->setValue(GROUP(Downloads), Downloads::AlwaysPromptForFilename, m_ui->m_rbDownloadsAskEachFile->isChecked());
qApp->downloadManager()->setDownloadDirectory(m_ui->m_txtDownloadsTargetDirectory->text());
2015-01-24 09:32:54 +01:00
}
void FormSettings::selectDownloadsDirectory() {
QString target_directory = QFileDialog::getExistingDirectory(this,
tr("Select downloads target directory"),
m_ui->m_txtDownloadsTargetDirectory->text()
);
if (!target_directory.isEmpty()) {
m_ui->m_txtDownloadsTargetDirectory->setText(QDir::toNativeSeparators(target_directory));
}
}
2013-12-11 15:00:15 +01:00
void FormSettings::selectBrowserExecutable() {
QString executable_file = QFileDialog::getOpenFileName(this,
tr("Select web browser executable"),
2014-10-09 18:20:54 +02:00
qApp->homeFolderPath(),
2014-02-27 18:15:16 +01:00
//: File filter for external browser selection dialog.
2014-11-09 10:22:15 +01:00
#if defined(Q_OS_LINUX)
tr("Executables (*)")
#else
tr("Executables (*.*)")
#endif
);
2013-12-11 15:00:15 +01:00
if (!executable_file.isEmpty()) {
2015-05-12 09:48:22 +02:00
m_ui->m_txtExternalBrowserExecutable->setText(QDir::toNativeSeparators(executable_file));
}
}
void FormSettings::changeDefaultEmailArguments(int index) {
if (index != 0) {
m_ui->m_txtExternalEmailArguments->setText(m_ui->m_cmbExternalEmailPreset->itemData(index).toString());
}
}
void FormSettings::selectEmailExecutable() {
QString executable_file = QFileDialog::getOpenFileName(this,
tr("Select e-mail executable"),
qApp->homeFolderPath(),
//: File filter for external e-mail selection dialog.
#if defined(Q_OS_LINUX)
tr("Executables (*)")
#else
tr("Executables (*.*)")
#endif
);
if (!executable_file.isEmpty()) {
m_ui->m_txtExternalEmailExecutable->setText(QDir::toNativeSeparators(executable_file));
2013-12-11 15:00:15 +01:00
}
}
2013-12-09 16:05:16 +01:00
void FormSettings::loadFeedsMessages() {
2014-07-26 14:44:03 +02:00
Settings *settings = qApp->settings();
2014-11-10 18:11:45 +01:00
m_ui->m_checkKeppMessagesInTheMiddle->setChecked(settings->value(GROUP(Messages), SETTING(Messages::KeepCursorInCenter)).toBool());
m_ui->m_checkRemoveReadMessagesOnExit->setChecked(settings->value(GROUP(Messages), SETTING(Messages::ClearReadOnExit)).toBool());
m_ui->m_checkAutoUpdate->setChecked(settings->value(GROUP(Feeds), SETTING(Feeds::AutoUpdateEnabled)).toBool());
m_ui->m_spinAutoUpdateInterval->setValue(settings->value(GROUP(Feeds), SETTING(Feeds::AutoUpdateInterval)).toInt());
2014-11-08 17:44:00 +01:00
m_ui->m_spinFeedUpdateTimeout->setValue(settings->value(GROUP(Feeds), SETTING(Feeds::UpdateTimeout)).toInt());
2014-11-10 18:11:45 +01:00
m_ui->m_checkUpdateAllFeedsOnStartup->setChecked(settings->value(GROUP(Feeds), SETTING(Feeds::FeedsUpdateOnStartup)).toBool());
2014-03-03 13:25:30 +01:00
m_ui->m_cmbCountsFeedList->addItems(QStringList() << "(%unread)" << "[%unread]" << "%unread/%all" << "%unread-%all" << "[%unread|%all]");
2014-11-10 18:11:45 +01:00
m_ui->m_cmbCountsFeedList->setEditText(settings->value(GROUP(Feeds), SETTING(Feeds::CountFormat)).toString());
2015-01-04 14:12:14 +01:00
m_ui->m_checkRemoveDuplicateMessages->setChecked(settings->value(GROUP(Messages), SETTING(Messages::RemoveDuplicates)).toBool());
2014-10-20 18:38:24 +02:00
initializeMessageDateFormats();
2014-11-10 18:11:45 +01:00
m_ui->m_checkMessagesDateTimeFormat->setChecked(settings->value(GROUP(Messages), SETTING(Messages::UseCustomDate)).toBool());
int index_format = m_ui->m_cmbMessagesDateTimeFormat->findData(settings->value(GROUP(Messages), SETTING(Messages::CustomDateFormat)).toString());
2014-10-20 18:38:24 +02:00
if (index_format >= 0) {
m_ui->m_cmbMessagesDateTimeFormat->setCurrentIndex(index_format);
}
}
void FormSettings::initializeMessageDateFormats() {
QStringList best_formats; best_formats << "d/M/yyyy hh:mm:ss" << "ddd, d. M. yy hh:mm:ss" <<
"yyyy-MM-dd HH:mm:ss.z" << "yyyy-MM-ddThh:mm:ss" <<
"MMM d yyyy hh:mm:ss";;
QLocale current_locale = qApp->localization()->loadedLocale();
QDateTime current_dt = QDateTime::currentDateTime();
foreach (const QString &format, best_formats) {
m_ui->m_cmbMessagesDateTimeFormat->addItem(current_locale.toString(current_dt, format), format);
}
2013-12-09 16:05:16 +01:00
}
void FormSettings::saveFeedsMessages() {
2014-07-26 14:44:03 +02:00
Settings *settings = qApp->settings();
2014-11-10 18:11:45 +01:00
settings->setValue(GROUP(Messages), Messages::KeepCursorInCenter, m_ui->m_checkKeppMessagesInTheMiddle->isChecked());
settings->setValue(GROUP(Messages), Messages::ClearReadOnExit, m_ui->m_checkRemoveReadMessagesOnExit->isChecked());
settings->setValue(GROUP(Feeds), Feeds::AutoUpdateEnabled, m_ui->m_checkAutoUpdate->isChecked());
settings->setValue(GROUP(Feeds), Feeds::AutoUpdateInterval, m_ui->m_spinAutoUpdateInterval->value());
2014-11-08 17:44:00 +01:00
settings->setValue(GROUP(Feeds), Feeds::UpdateTimeout, m_ui->m_spinFeedUpdateTimeout->value());
2014-11-10 18:11:45 +01:00
settings->setValue(GROUP(Feeds), Feeds::FeedsUpdateOnStartup, m_ui->m_checkUpdateAllFeedsOnStartup->isChecked());
settings->setValue(GROUP(Feeds), Feeds::CountFormat, m_ui->m_cmbCountsFeedList->currentText());
settings->setValue(GROUP(Messages), Messages::UseCustomDate, m_ui->m_checkMessagesDateTimeFormat->isChecked());
settings->setValue(GROUP(Messages), Messages::CustomDateFormat,
2014-10-20 18:38:24 +02:00
m_ui->m_cmbMessagesDateTimeFormat->itemData(m_ui->m_cmbMessagesDateTimeFormat->currentIndex()).toString());
2015-01-04 14:12:14 +01:00
settings->setValue(GROUP(Messages), Messages::RemoveDuplicates, m_ui->m_checkRemoveDuplicateMessages->isChecked());
2014-02-03 18:16:48 +01:00
2014-08-22 09:27:01 +02:00
qApp->mainForm()->tabWidget()->feedMessageViewer()->feedsView()->updateAutoUpdateStatus();
qApp->mainForm()->tabWidget()->feedMessageViewer()->feedsView()->sourceModel()->reloadWholeLayout();
2014-10-20 18:38:24 +02:00
qApp->mainForm()->tabWidget()->feedMessageViewer()->messagesView()->sourceModel()->updateDateFormat();
qApp->mainForm()->tabWidget()->feedMessageViewer()->messagesView()->sourceModel()->reloadWholeLayout();
2013-12-09 16:05:16 +01:00
}
void FormSettings::displayProxyPassword(int state) {
if (state == Qt::Checked) {
m_ui->m_txtProxyPassword->setEchoMode(QLineEdit::Normal);
}
else {
m_ui->m_txtProxyPassword->setEchoMode(QLineEdit::PasswordEchoOnEdit);
}
}
2013-09-20 18:18:49 +02:00
bool FormSettings::doSaveCheck() {
bool everything_ok = true;
2013-12-07 20:33:41 +01:00
QStringList resulting_information;
2013-09-20 18:18:49 +02:00
2013-12-07 20:33:41 +01:00
// Setup indication of settings consistence.
2013-09-20 18:18:49 +02:00
if (!m_ui->m_shortcuts->areShortcutsUnique()) {
2013-12-10 22:06:45 +01:00
everything_ok = false;
resulting_information.append(tr("some keyboard shortcuts are not unique"));
2013-09-20 18:18:49 +02:00
}
// User selected custom external browser but did not set its
// properties.
if (m_ui->m_grpCustomExternalBrowser->isChecked() &&
(m_ui->m_txtExternalBrowserExecutable->text().simplified().isEmpty() ||
!m_ui->m_txtExternalBrowserArguments->text().simplified().contains("%1"))) {
everything_ok = false;
resulting_information.append(tr("custom external browser is not set correctly"));
}
2013-09-20 18:18:49 +02:00
if (!everything_ok) {
2014-11-10 18:11:45 +01:00
resulting_information.replaceInStrings(QRegExp("^"), QString::fromUtf8(""));
2014-01-22 20:29:05 +01:00
MessageBox::show(this,
QMessageBox::Critical,
tr("Cannot save settings"),
tr("Some critical settings are not set. You must fix these settings in order confirm new settings."),
QString(),
tr("List of errors:\n%1.").arg(resulting_information.join(",\n")));
2013-09-20 18:18:49 +02:00
}
return everything_ok;
}
2013-11-30 22:23:01 +01:00
void FormSettings::promptForRestart() {
2014-08-28 08:15:33 +02:00
if (!m_changedDataTexts.isEmpty()) {
2014-08-19 17:21:32 +02:00
QStringList changed_settings_description = m_changedDataTexts.replaceInStrings(QRegExp("^"), QString::fromUtf8(""));
2014-10-05 17:33:46 +02:00
QMessageBox::StandardButton clicked_button = MessageBox::show(this,
QMessageBox::Question,
tr("Critical settings were changed"),
tr("Some critical settings were changed and will be applied after the application gets restarted. "
"\n\nYou have to restart manually."),
tr("Do you want to restart now?"),
tr("List of changes:\n%1.").arg(changed_settings_description .join(",\n")),
QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
if (clicked_button == QMessageBox::Yes) {
qApp->restart();
}
2013-11-30 22:23:01 +01:00
}
}
void FormSettings::saveSettings() {
2013-09-20 18:18:49 +02:00
// Make sure everything is saveable.
if (!doSaveCheck()) {
return;
}
// Save all settings.
saveGeneral();
2014-02-07 21:39:59 +01:00
saveDataStorage();
saveShortcuts();
saveInterface();
2013-07-02 18:57:04 +02:00
saveProxy();
2013-07-24 19:06:09 +02:00
saveBrowser();
2013-06-27 19:57:23 +02:00
saveLanguage();
2013-12-09 16:05:16 +01:00
saveFeedsMessages();
2015-01-24 09:32:54 +01:00
saveDownloads();
2013-06-30 19:02:24 +02:00
2014-07-26 14:44:03 +02:00
qApp->settings()->checkSettings();
2013-11-30 22:23:01 +01:00
promptForRestart();
2013-09-20 18:18:49 +02:00
accept();
2013-06-27 19:57:23 +02:00
}
2013-07-02 18:57:04 +02:00
void FormSettings::onProxyTypeChanged(int index) {
QNetworkProxy::ProxyType selected_type = static_cast<QNetworkProxy::ProxyType>(m_ui->m_cmbProxyType->itemData(index).toInt());
2014-02-14 17:22:20 +01:00
bool is_proxy_selected = selected_type != QNetworkProxy::NoProxy && selected_type != QNetworkProxy::DefaultProxy;
2013-07-02 18:57:04 +02:00
m_ui->m_txtProxyHost->setEnabled(is_proxy_selected);
m_ui->m_txtProxyPassword->setEnabled(is_proxy_selected);
m_ui->m_txtProxyUsername->setEnabled(is_proxy_selected);
m_ui->m_spinProxyPort->setEnabled(is_proxy_selected);
m_ui->m_checkShowPassword->setEnabled(is_proxy_selected);
m_ui->m_lblProxyHost->setEnabled(is_proxy_selected);
m_ui->m_lblProxyInfo->setEnabled(is_proxy_selected);
m_ui->m_lblProxyPassword->setEnabled(is_proxy_selected);
m_ui->m_lblProxyPort->setEnabled(is_proxy_selected);
m_ui->m_lblProxyUsername->setEnabled(is_proxy_selected);
2013-07-02 18:57:04 +02:00
}
2013-07-24 19:06:09 +02:00
void FormSettings::loadBrowser() {
2014-07-26 14:44:03 +02:00
Settings *settings = qApp->settings();
2013-07-24 19:06:09 +02:00
// Load settings of web browser GUI.
2014-11-10 18:11:45 +01:00
m_ui->m_checkMouseGestures->setChecked(settings->value(GROUP(Browser), SETTING(Browser::GesturesEnabled)).toBool());
m_ui->m_checkQueueTabs->setChecked(settings->value(GROUP(Browser), SETTING(Browser::QueueTabs)).toBool());
2014-02-01 17:32:31 +01:00
m_ui->m_cmbExternalBrowserPreset->addItem(tr("Opera 12 or older"), "-nosession %1");
2014-11-10 18:11:45 +01:00
m_ui->m_txtExternalBrowserExecutable->setText(settings->value(GROUP(Browser), SETTING(Browser::CustomExternalBrowserExecutable)).toString());
m_ui->m_txtExternalBrowserArguments->setText(settings->value(GROUP(Browser), SETTING(Browser::CustomExternalBrowserArguments)).toString());
m_ui->m_grpCustomExternalBrowser->setChecked(settings->value(GROUP(Browser), SETTING(Browser::CustomExternalBrowserEnabled)).toBool());
2014-03-09 11:45:36 +01:00
m_ui->m_checkAutoLoadImages->setChecked(WebFactory::instance()->autoloadImages());
m_ui->m_checkEnableJavascript->setChecked(WebFactory::instance()->javascriptEnabled());
m_ui->m_checkEnablePlugins->setChecked(WebFactory::instance()->pluginsEnabled());
2015-05-12 09:48:22 +02:00
// Load settings of e-mail.
m_ui->m_cmbExternalEmailPreset->addItem(tr("Mozilla Thunderbird"), "-compose \"subject='%1',body='%2'\"");
m_ui->m_txtExternalEmailExecutable->setText(settings->value(GROUP(Browser), SETTING(Browser::CustomExternalEmailExecutable)).toString());
m_ui->m_txtExternalEmailArguments->setText(settings->value(GROUP(Browser), SETTING(Browser::CustomExternalEmailArguments)).toString());
m_ui->m_grpCustomExternalEmail->setChecked(settings->value(GROUP(Browser), SETTING(Browser::CustomExternalEmailEnabled)).toBool());
2013-07-24 19:06:09 +02:00
}
void FormSettings::saveBrowser() {
2014-07-26 14:44:03 +02:00
Settings *settings = qApp->settings();
2013-07-24 19:06:09 +02:00
// Save settings of GUI of web browser.
2014-11-10 18:11:45 +01:00
settings->setValue(GROUP(Browser), Browser::CustomExternalBrowserEnabled, m_ui->m_grpCustomExternalBrowser->isChecked());
settings->setValue(GROUP(Browser), Browser::GesturesEnabled, m_ui->m_checkMouseGestures->isChecked());
settings->setValue(GROUP(Browser), Browser::QueueTabs, m_ui->m_checkQueueTabs->isChecked());
settings->setValue(GROUP(Browser), Browser::CustomExternalBrowserExecutable, m_ui->m_txtExternalBrowserExecutable->text());
settings->setValue(GROUP(Browser), Browser::CustomExternalBrowserArguments, m_ui->m_txtExternalBrowserArguments->text());
2014-02-01 17:32:31 +01:00
2015-05-12 09:48:22 +02:00
// Save settings of e-mail.
settings->setValue(GROUP(Browser), Browser::CustomExternalEmailExecutable, m_ui->m_txtExternalEmailExecutable->text());
settings->setValue(GROUP(Browser), Browser::CustomExternalEmailArguments, m_ui->m_txtExternalEmailArguments->text());
settings->setValue(GROUP(Browser), Browser::CustomExternalEmailEnabled, m_ui->m_grpCustomExternalEmail->isChecked());
2014-03-09 11:45:36 +01:00
WebFactory::instance()->switchImages(m_ui->m_checkAutoLoadImages->isChecked());
WebFactory::instance()->switchJavascript(m_ui->m_checkEnableJavascript->isChecked());
WebFactory::instance()->switchPlugins(m_ui->m_checkEnablePlugins->isChecked());
2013-07-24 19:06:09 +02:00
}
2013-07-02 18:57:04 +02:00
void FormSettings::loadProxy() {
m_ui->m_cmbProxyType->addItem(tr("No proxy"), QNetworkProxy::NoProxy);
m_ui->m_cmbProxyType->addItem(tr("System proxy"), QNetworkProxy::DefaultProxy);
2013-07-02 18:57:04 +02:00
m_ui->m_cmbProxyType->addItem(tr("Socks5"), QNetworkProxy::Socks5Proxy);
m_ui->m_cmbProxyType->addItem(tr("Http"), QNetworkProxy::HttpProxy);
// Load the settings.
2014-07-26 14:44:03 +02:00
Settings *settings = qApp->settings();
2014-11-10 18:11:45 +01:00
QNetworkProxy::ProxyType selected_proxy_type = static_cast<QNetworkProxy::ProxyType>(settings->value(GROUP(Proxy), SETTING(Proxy::Type)).toInt());
m_ui->m_cmbProxyType->setCurrentIndex(m_ui->m_cmbProxyType->findData(selected_proxy_type));
2014-11-10 18:11:45 +01:00
m_ui->m_txtProxyHost->setText(settings->value(GROUP(Proxy), SETTING(Proxy::Host)).toString());
m_ui->m_txtProxyUsername->setText(settings->value(GROUP(Proxy), SETTING(Proxy::Username)).toString());
m_ui->m_txtProxyPassword->setText(settings->value(GROUP(Proxy), SETTING(Proxy::Password)).toString());
m_ui->m_spinProxyPort->setValue(settings->value(GROUP(Proxy), SETTING(Proxy::Port)).toInt());
2013-07-02 18:57:04 +02:00
}
void FormSettings::saveProxy() {
2014-07-26 14:44:03 +02:00
Settings *settings = qApp->settings();
2014-11-10 18:11:45 +01:00
settings->setValue(GROUP(Proxy), Proxy::Type, m_ui->m_cmbProxyType->itemData(m_ui->m_cmbProxyType->currentIndex()));
settings->setValue(GROUP(Proxy), Proxy::Host, m_ui->m_txtProxyHost->text());
settings->setValue(GROUP(Proxy), Proxy::Username, m_ui->m_txtProxyUsername->text());
settings->setValue(GROUP(Proxy), Proxy::Password, m_ui->m_txtProxyPassword->text());
settings->setValue(GROUP(Proxy), Proxy::Port, m_ui->m_spinProxyPort->value());
// Reload settings for all network access managers.
2014-02-24 10:32:14 +01:00
WebBrowserNetworkAccessManager::instance()->loadSettings();
2013-07-02 18:57:04 +02:00
}
2013-06-27 19:57:23 +02:00
void FormSettings::loadLanguage() {
2014-08-27 08:05:30 +02:00
foreach (const Language &language, qApp->localization()->installedLanguages()) {
2013-06-27 19:57:23 +02:00
QTreeWidgetItem *item = new QTreeWidgetItem(m_ui->m_treeLanguages);
2013-12-03 18:38:43 +01:00
item->setText(0, language.m_name);
item->setText(1, language.m_code);
item->setText(2, language.m_version);
item->setText(3, language.m_author);
item->setText(4, language.m_email);
2014-11-10 18:11:45 +01:00
item->setIcon(0, qApp->icons()->fromTheme(QString(FLAG_ICON_SUBFOLDER) + QDir::separator() + language.m_code));
2013-06-27 19:57:23 +02:00
}
2014-11-10 18:11:45 +01:00
QList<QTreeWidgetItem*> matching_items = m_ui->m_treeLanguages->findItems(qApp->localization()->loadedLanguage(), Qt::MatchContains, 1);
2013-06-27 19:57:23 +02:00
if (!matching_items.isEmpty()) {
m_ui->m_treeLanguages->setCurrentItem(matching_items[0]);
}
}
void FormSettings::saveLanguage() {
if (m_ui->m_treeLanguages->currentItem() == NULL) {
qDebug("No localizations loaded in settings dialog, so no saving for them.");
return;
}
2014-07-26 14:44:03 +02:00
Settings *settings = qApp->settings();
2014-08-27 08:05:30 +02:00
QString actual_lang = qApp->localization()->loadedLanguage();
2013-06-27 19:57:23 +02:00
QString new_lang = m_ui->m_treeLanguages->currentItem()->text(1);
2013-12-06 15:12:30 +01:00
// Save prompt for restart if language has changed.
2013-06-27 19:57:23 +02:00
if (new_lang != actual_lang) {
m_changedDataTexts.append(tr("language changed"));
2014-11-12 17:56:05 +01:00
settings->setValue(GROUP(General), General::Language, new_lang);
2013-06-27 19:57:23 +02:00
}
}
void FormSettings::loadShortcuts() {
2014-08-22 09:27:01 +02:00
m_ui->m_shortcuts->populate(qApp->mainForm()->allActions());
}
void FormSettings::saveShortcuts() {
// Update the actual shortcuts of some actions.
m_ui->m_shortcuts->updateShortcuts();
// Save new shortcuts to the settings.
2014-08-22 09:27:01 +02:00
DynamicShortcuts::save(qApp->mainForm()->allActions());
}
2014-02-07 21:39:59 +01:00
void FormSettings::loadDataStorage() {
2014-11-10 18:11:45 +01:00
m_ui->m_lblMysqlTestResult->setStatus(WidgetWithStatus::Information, tr("No connection test triggered so far."), tr("You did not executed any connection test yet."));
2014-02-11 17:23:40 +01:00
2014-02-07 21:39:59 +01:00
// Load SQLite.
m_ui->m_cmbDatabaseDriver->addItem(tr("SQLite (embedded database)"), APP_DB_SQLITE_DRIVER);
2014-01-21 07:55:10 +01:00
// Load in-memory database status.
2014-07-26 14:44:03 +02:00
Settings *settings = qApp->settings();
2014-11-10 18:11:45 +01:00
m_ui->m_checkSqliteUseInMemoryDatabase->setChecked(settings->value(GROUP(Database), SETTING(Database::UseInMemory)).toBool());
2014-04-15 19:48:29 +02:00
if (QSqlDatabase::isDriverAvailable(APP_DB_MYSQL_DRIVER)) {
onMysqlHostnameChanged(QString());
onMysqlUsernameChanged(QString());
onMysqlPasswordChanged(QString());
2015-04-28 20:01:59 +02:00
onMysqlDatabaseChanged(QString());
// Load MySQL.
2014-07-26 14:44:03 +02:00
m_ui->m_cmbDatabaseDriver->addItem(tr("MySQL/MariaDB (dedicated database)"), APP_DB_MYSQL_DRIVER);
// Setup placeholders.
m_ui->m_txtMysqlHostname->lineEdit()->setPlaceholderText(tr("Hostname of your MySQL server"));
m_ui->m_txtMysqlUsername->lineEdit()->setPlaceholderText(tr("Username to login with"));
m_ui->m_txtMysqlPassword->lineEdit()->setPlaceholderText(tr("Password for your username"));
2015-04-28 20:01:59 +02:00
m_ui->m_txtMysqlDatabase->lineEdit()->setPlaceholderText(tr("Working database which you have full access to."));
2014-11-10 21:19:09 +01:00
m_ui->m_txtMysqlHostname->lineEdit()->setText(settings->value(GROUP(Database), SETTING(Database::MySQLHostname)).toString());
m_ui->m_txtMysqlUsername->lineEdit()->setText(settings->value(GROUP(Database), SETTING(Database::MySQLUsername)).toString());
2015-04-06 18:55:40 +02:00
m_ui->m_txtMysqlPassword->lineEdit()->setText(settings->value(GROUP(Database), SETTING(Database::MySQLPassword)).toString());
2015-04-28 20:01:59 +02:00
m_ui->m_txtMysqlDatabase->lineEdit()->setText(settings->value(GROUP(Database), SETTING(Database::MySQLDatabase)).toString());
2014-11-10 21:19:09 +01:00
m_ui->m_spinMysqlPort->setValue(settings->value(GROUP(Database), SETTING(Database::MySQLPort)).toInt());
2015-04-06 18:55:40 +02:00
m_ui->m_checkMysqlShowPassword->setChecked(false);
}
2014-11-10 21:19:09 +01:00
int index_current_backend = m_ui->m_cmbDatabaseDriver->findData(settings->value(GROUP(Database), SETTING(Database::ActiveDriver)).toString());
2014-02-09 17:12:05 +01:00
if (index_current_backend >= 0) {
m_ui->m_cmbDatabaseDriver->setCurrentIndex(index_current_backend);
}
}
2014-02-07 21:39:59 +01:00
void FormSettings::saveDataStorage() {
2014-01-21 07:55:10 +01:00
// Setup in-memory database status.
2014-07-26 14:44:03 +02:00
Settings *settings = qApp->settings();
2014-11-10 21:19:09 +01:00
bool original_inmemory = settings->value(GROUP(Database), SETTING(Database::UseInMemory)).toBool();
2014-02-07 16:57:16 +01:00
bool new_inmemory = m_ui->m_checkSqliteUseInMemoryDatabase->isChecked();
2014-01-21 07:55:10 +01:00
if (original_inmemory != new_inmemory) {
m_changedDataTexts.append(tr("in-memory database switched"));
}
// Save data storage settings.
2014-11-10 21:19:09 +01:00
QString original_db_driver = settings->value(GROUP(Database), SETTING(Database::ActiveDriver)).toString();
QString selected_db_driver = m_ui->m_cmbDatabaseDriver->itemData(m_ui->m_cmbDatabaseDriver->currentIndex()).toString();
// Save SQLite.
2014-11-10 21:19:09 +01:00
settings->setValue(GROUP(Database), Database::UseInMemory, new_inmemory);
2014-04-15 19:48:29 +02:00
if (QSqlDatabase::isDriverAvailable(APP_DB_MYSQL_DRIVER)) {
// Save MySQL.
2014-11-10 21:19:09 +01:00
settings->setValue(GROUP(Database), Database::MySQLHostname, m_ui->m_txtMysqlHostname->lineEdit()->text());
settings->setValue(GROUP(Database), Database::MySQLUsername, m_ui->m_txtMysqlUsername->lineEdit()->text());
settings->setValue(GROUP(Database), Database::MySQLPassword, m_ui->m_txtMysqlPassword->lineEdit()->text());
2015-04-28 20:01:59 +02:00
settings->setValue(GROUP(Database), Database::MySQLDatabase, m_ui->m_txtMysqlDatabase->lineEdit()->text());
2014-11-10 21:19:09 +01:00
settings->setValue(GROUP(Database), Database::MySQLPort, m_ui->m_spinMysqlPort->value());
}
2014-11-10 21:19:09 +01:00
settings->setValue(GROUP(Database), Database::ActiveDriver, selected_db_driver);
2014-02-08 22:13:58 +01:00
if (original_db_driver != selected_db_driver ||
m_initialSettings.m_dataStorageDataChanged) {
m_changedDataTexts.append(tr("data storage backend changed"));
}
}
void FormSettings::mysqlTestConnection() {
2014-08-27 14:57:51 +02:00
DatabaseFactory::MySQLError error_code = qApp->database()->mysqlTestConnection(m_ui->m_txtMysqlHostname->lineEdit()->text(),
2014-09-03 06:54:28 +02:00
m_ui->m_spinMysqlPort->value(),
2015-04-28 20:01:59 +02:00
m_ui->m_txtMysqlDatabase->lineEdit()->text(),
2014-09-03 06:54:28 +02:00
m_ui->m_txtMysqlUsername->lineEdit()->text(),
m_ui->m_txtMysqlPassword->lineEdit()->text());
2014-08-27 14:57:51 +02:00
QString interpretation = qApp->database()->mysqlInterpretErrorCode(error_code);
2014-02-11 17:23:40 +01:00
2015-04-28 20:01:59 +02:00
2014-02-11 17:23:40 +01:00
switch (error_code) {
case DatabaseFactory::MySQLOk:
2014-11-10 21:19:09 +01:00
m_ui->m_lblMysqlTestResult->setStatus(WidgetWithStatus::Ok, interpretation, interpretation);
2014-02-11 17:23:40 +01:00
break;
default:
2014-11-10 21:19:09 +01:00
m_ui->m_lblMysqlTestResult->setStatus(WidgetWithStatus::Error, interpretation, interpretation);
2014-02-11 17:23:40 +01:00
break;
}
}
void FormSettings::onMysqlHostnameChanged(const QString &new_hostname) {
if (new_hostname.isEmpty()) {
2014-11-10 18:11:45 +01:00
m_ui->m_txtMysqlHostname->setStatus(LineEditWithStatus::Warning, tr("Hostname is empty."));
}
else {
2014-11-10 18:11:45 +01:00
m_ui->m_txtMysqlHostname->setStatus(LineEditWithStatus::Ok, tr("Hostname looks ok."));
}
}
void FormSettings::onMysqlUsernameChanged(const QString &new_username) {
if (new_username.isEmpty()) {
2014-11-10 18:11:45 +01:00
m_ui->m_txtMysqlUsername->setStatus(LineEditWithStatus::Warning, tr("Username is empty."));
}
else {
2014-11-10 18:11:45 +01:00
m_ui->m_txtMysqlUsername->setStatus(LineEditWithStatus::Ok, tr("Username looks ok."));
}
}
void FormSettings::onMysqlPasswordChanged(const QString &new_password) {
if (new_password.isEmpty()) {
2014-11-10 18:11:45 +01:00
m_ui->m_txtMysqlPassword->setStatus(LineEditWithStatus::Warning, tr("Password is empty."));
}
else {
2014-11-10 18:11:45 +01:00
m_ui->m_txtMysqlPassword->setStatus(LineEditWithStatus::Ok, tr("Password looks ok."));
}
}
2015-04-28 20:01:59 +02:00
void FormSettings::onMysqlDatabaseChanged(const QString &new_database) {
if (new_database.isEmpty()) {
m_ui->m_txtMysqlDatabase->setStatus(LineEditWithStatus::Warning, tr("Working database is empty."));
}
else {
m_ui->m_txtMysqlDatabase->setStatus(LineEditWithStatus::Ok, tr("Working database is ok."));
}
}
2014-02-08 22:13:58 +01:00
void FormSettings::onMysqlDataStorageEdited() {
m_initialSettings.m_dataStorageDataChanged = true;
}
void FormSettings::selectSqlBackend(int index) {
QString selected_db_driver = m_ui->m_cmbDatabaseDriver->itemData(index).toString();
if (selected_db_driver == APP_DB_SQLITE_DRIVER) {
m_ui->m_stackedDatabaseDriver->setCurrentIndex(0);
}
else if (selected_db_driver == APP_DB_MYSQL_DRIVER) {
m_ui->m_stackedDatabaseDriver->setCurrentIndex(1);
}
else {
qWarning("GUI for given database driver '%s' is not available.", qPrintable(selected_db_driver));
}
2014-02-08 22:13:58 +01:00
}
2015-04-06 18:55:40 +02:00
void FormSettings::switchMysqlPasswordVisiblity(bool visible) {
2015-04-15 17:09:48 +02:00
m_ui->m_txtMysqlPassword->lineEdit()->setEchoMode(visible ? QLineEdit::Normal : QLineEdit::Password);
2015-04-06 18:55:40 +02:00
}
2014-02-07 21:39:59 +01:00
void FormSettings::loadGeneral() {
2014-02-26 21:41:13 +01:00
m_ui->m_checkAutostart->setText(m_ui->m_checkAutostart->text().arg(APP_NAME));
2014-11-10 21:19:09 +01:00
m_ui->m_checkForUpdatesOnStart->setChecked(qApp->settings()->value(GROUP(General), SETTING(General::UpdateOnStartup)).toBool());
2014-02-26 21:41:13 +01:00
2014-02-07 21:39:59 +01:00
// Load auto-start status.
2014-08-19 17:21:32 +02:00
SystemFactory::AutoStartStatus autostart_status = qApp->system()->getAutoStartStatus();
2014-02-07 21:39:59 +01:00
switch (autostart_status) {
case SystemFactory::Enabled:
m_ui->m_checkAutostart->setChecked(true);
break;
case SystemFactory::Disabled:
m_ui->m_checkAutostart->setChecked(false);
break;
default:
m_ui->m_checkAutostart->setEnabled(false);
2014-11-10 18:11:45 +01:00
m_ui->m_checkAutostart->setText(m_ui->m_checkAutostart->text() + tr(" (not supported on this platform)"));
2014-02-07 21:39:59 +01:00
break;
}
2014-10-07 16:37:44 +02:00
#if defined(Q_OS_WIN)
m_ui->m_checkRemoveTrolltechJunk->setVisible(true);
2014-11-10 21:19:09 +01:00
m_ui->m_checkRemoveTrolltechJunk->setChecked(qApp->settings()->value(GROUP(General), SETTING(General::RemoveTrolltechJunk)).toBool());
#else
m_ui->m_checkRemoveTrolltechJunk->setVisible(false);
2014-10-07 16:37:44 +02:00
#endif
2014-02-07 21:39:59 +01:00
}
void FormSettings::saveGeneral() {
2014-10-06 18:35:34 +02:00
// If auto-start feature is available and user wants to turn it on, then turn it on.
2014-02-07 21:39:59 +01:00
if (m_ui->m_checkAutostart->isChecked()) {
2014-08-19 17:21:32 +02:00
qApp->system()->setAutoStartStatus(SystemFactory::Enabled);
2014-02-07 21:39:59 +01:00
}
else {
2014-08-19 17:21:32 +02:00
qApp->system()->setAutoStartStatus(SystemFactory::Disabled);
2014-02-07 21:39:59 +01:00
}
2014-10-06 18:35:34 +02:00
2014-11-10 21:19:09 +01:00
qApp->settings()->setValue(GROUP(General), General::UpdateOnStartup, m_ui->m_checkForUpdatesOnStart->isChecked());
qApp->settings()->setValue(GROUP(General), General::RemoveTrolltechJunk, m_ui->m_checkRemoveTrolltechJunk->isChecked());
2014-02-07 21:39:59 +01:00
}
void FormSettings::loadInterface() {
2014-07-26 14:44:03 +02:00
Settings *settings = qApp->settings();
// Load settings of tray icon.
if (SystemTrayIcon::isSystemTrayAvailable()) {
2014-11-10 21:19:09 +01:00
m_ui->m_radioTrayOff->setChecked(!settings->value(GROUP(GUI), SETTING(GUI::UseTrayIcon)).toBool());
}
// Tray icon is not supported on this machine.
else {
2013-07-30 18:54:36 +02:00
m_ui->m_radioTrayOff->setText(tr("Disable (Tray icon is not available.)"));
m_ui->m_radioTrayOff->setChecked(true);
m_ui->m_grpTray->setDisabled(true);
}
2014-11-10 21:19:09 +01:00
m_ui->m_checkHidden->setChecked(settings->value(GROUP(GUI), SETTING(GUI::MainWindowStartsHidden)).toBool());
m_ui->m_checkHideWhenMinimized->setChecked(settings->value(GROUP(GUI), SETTING(GUI::HideMainWindowWhenMinimized)).toBool());
2014-02-13 19:25:57 +01:00
// Load settings of icon theme.
2014-08-27 14:57:51 +02:00
QString current_theme = qApp->icons()->currentIconTheme();
2014-08-27 14:57:51 +02:00
foreach (const QString &icon_theme_name, qApp->icons()->installedIconThemes()) {
2013-12-10 08:03:30 +01:00
if (icon_theme_name == APP_NO_THEME) {
2013-12-08 14:02:28 +01:00
// Add just "no theme" on other systems.
2014-02-26 21:41:13 +01:00
//: Label for disabling icon theme.
2014-11-10 18:11:45 +01:00
m_ui->m_cmbIconTheme->addItem(tr("no icon theme"), APP_NO_THEME);
}
else {
2014-11-10 18:11:45 +01:00
m_ui->m_cmbIconTheme->addItem(icon_theme_name, icon_theme_name);
}
2013-08-03 07:34:41 +02:00
}
// Mark active theme.
2013-12-10 08:03:30 +01:00
if (current_theme == APP_NO_THEME) {
// Because "no icon theme" lies at the index 0.
2013-08-03 07:34:41 +02:00
m_ui->m_cmbIconTheme->setCurrentIndex(0);
}
else {
#if QT_VERSION >= 0x050000
2013-08-03 07:34:41 +02:00
m_ui->m_cmbIconTheme->setCurrentText(current_theme);
#else
int theme_index = m_ui->m_cmbIconTheme->findText(current_theme);
if (theme_index >= 0) {
m_ui->m_cmbIconTheme->setCurrentIndex(theme_index);
}
#endif
}
2013-09-20 18:18:49 +02:00
// Load skin.
2014-08-27 08:05:30 +02:00
QString selected_skin = qApp->skins()->selectedSkinName();
2013-09-20 18:18:49 +02:00
2014-08-27 08:05:30 +02:00
foreach (const Skin &skin, qApp->skins()->installedSkins()) {
QTreeWidgetItem *new_item = new QTreeWidgetItem(QStringList() <<
skin.m_visibleName <<
skin.m_version <<
skin.m_author <<
skin.m_email);
new_item->setData(0, Qt::UserRole, QVariant::fromValue(skin));
2013-09-20 18:18:49 +02:00
// Add this skin and mark it as active if its active now.
m_ui->m_treeSkins->addTopLevelItem(new_item);
2013-09-20 18:18:49 +02:00
if (skin.m_baseName == selected_skin) {
m_ui->m_treeSkins->setCurrentItem(new_item);
2013-11-15 11:03:12 +01:00
m_ui->m_lblActiveContents->setText(skin.m_visibleName);
2013-09-20 18:18:49 +02:00
}
}
2013-07-30 18:54:36 +02:00
2013-11-15 11:03:12 +01:00
if (m_ui->m_treeSkins->currentItem() == NULL &&
m_ui->m_treeSkins->topLevelItemCount() > 0) {
// Currently active skin is NOT available, select another one as selected
// if possible.
m_ui->m_treeSkins->setCurrentItem(m_ui->m_treeSkins->topLevelItem(0));
}
2013-07-30 18:54:36 +02:00
// Load tab settings.
2014-11-10 21:19:09 +01:00
m_ui->m_checkCloseTabsMiddleClick->setChecked(settings->value(GROUP(GUI), SETTING(GUI::TabCloseMiddleClick)).toBool());
m_ui->m_checkCloseTabsDoubleClick->setChecked(settings->value(GROUP(GUI), SETTING(GUI::TabCloseDoubleClick)).toBool());
m_ui->m_checkNewTabDoubleClick->setChecked(settings->value(GROUP(GUI), SETTING(GUI::TabNewDoubleClick)).toBool());
m_ui->m_hideTabBarIfOneTabVisible->setChecked(settings->value(GROUP(GUI), SETTING(GUI::HideTabBarIfOnlyOneTab)).toBool());
// Load toolbar button style.
m_ui->m_cmbToolbarButtonStyle->addItem(tr("Icon only"), Qt::ToolButtonIconOnly);
m_ui->m_cmbToolbarButtonStyle->addItem(tr("Text only"), Qt::ToolButtonTextOnly);
m_ui->m_cmbToolbarButtonStyle->addItem(tr("Text beside icon"), Qt::ToolButtonTextBesideIcon);
m_ui->m_cmbToolbarButtonStyle->addItem(tr("Text under icon"), Qt::ToolButtonTextUnderIcon);
m_ui->m_cmbToolbarButtonStyle->addItem(tr("Follow OS style"), Qt::ToolButtonFollowStyle);
2014-11-08 17:44:00 +01:00
m_ui->m_cmbToolbarButtonStyle->setCurrentIndex(m_ui->m_cmbToolbarButtonStyle->findData(qApp->settings()->value(GROUP(GUI),
2014-11-10 21:19:09 +01:00
SETTING(GUI::ToolbarStyle)).toInt()));
2014-04-03 08:18:29 +02:00
// Load toolbars.
2014-08-22 09:27:01 +02:00
m_ui->m_editorFeedsToolbar->loadFromToolBar(qApp->mainForm()->tabWidget()->feedMessageViewer()->feedsToolBar());
m_ui->m_editorMessagesToolbar->loadFromToolBar(qApp->mainForm()->tabWidget()->feedMessageViewer()->messagesToolBar());
}
void FormSettings::saveInterface() {
2014-07-26 14:44:03 +02:00
Settings *settings = qApp->settings();
// Save toolbar.
2014-11-10 21:19:09 +01:00
settings->setValue(GROUP(GUI), GUI::ToolbarStyle, m_ui->m_cmbToolbarButtonStyle->itemData(m_ui->m_cmbToolbarButtonStyle->currentIndex()));
// Save tray icon.
if (SystemTrayIcon::isSystemTrayAvailable()) {
2014-11-10 21:19:09 +01:00
settings->setValue(GROUP(GUI), GUI::UseTrayIcon, m_ui->m_radioTrayOn->isChecked());
2014-07-26 14:44:03 +02:00
2014-11-10 21:19:09 +01:00
if (m_ui->m_radioTrayOn->isChecked()) {
2014-07-26 18:48:41 +02:00
qApp->showTrayIcon();
}
else {
2014-07-26 18:48:41 +02:00
qApp->deleteTrayIcon();
}
}
2014-11-10 21:19:09 +01:00
settings->setValue(GROUP(GUI), GUI::MainWindowStartsHidden, m_ui->m_checkHidden->isChecked());
settings->setValue(GROUP(GUI), GUI::HideMainWindowWhenMinimized, m_ui->m_checkHideWhenMinimized->isChecked());
2014-02-13 19:25:57 +01:00
// Save selected icon theme.
2013-07-30 18:54:36 +02:00
QString selected_icon_theme = m_ui->m_cmbIconTheme->itemData(m_ui->m_cmbIconTheme->currentIndex()).toString();
2014-08-27 14:57:51 +02:00
QString original_icon_theme = qApp->icons()->currentIconTheme();
qApp->icons()->setCurrentIconTheme(selected_icon_theme);
2013-07-30 18:54:36 +02:00
2013-12-07 20:33:41 +01:00
// Check if icon theme was changed.
2013-12-06 15:12:30 +01:00
if (selected_icon_theme != original_icon_theme) {
m_changedDataTexts.append(tr("icon theme changed"));
2013-12-06 15:12:30 +01:00
}
2013-09-20 18:18:49 +02:00
// Save and activate new skin.
2013-11-15 22:09:38 +01:00
if (m_ui->m_treeSkins->selectedItems().size() > 0) {
Skin active_skin = m_ui->m_treeSkins->currentItem()->data(0, Qt::UserRole).value<Skin>();
2013-12-03 18:38:43 +01:00
2014-08-27 08:05:30 +02:00
if (qApp->skins()->selectedSkinName() != active_skin.m_baseName) {
qApp->skins()->setCurrentSkinName(active_skin.m_baseName);
m_changedDataTexts.append(tr("skin changed"));
2013-12-03 18:38:43 +01:00
}
2013-11-15 22:09:38 +01:00
}
2013-09-20 18:18:49 +02:00
2013-07-30 18:54:36 +02:00
// Save tab settings.
2014-11-12 17:56:05 +01:00
settings->setValue(GROUP(GUI), GUI::TabCloseMiddleClick, m_ui->m_checkCloseTabsMiddleClick->isChecked());
settings->setValue(GROUP(GUI), GUI::TabCloseDoubleClick, m_ui->m_checkCloseTabsDoubleClick->isChecked());
settings->setValue(GROUP(GUI), GUI::TabNewDoubleClick, m_ui->m_checkNewTabDoubleClick->isChecked());
settings->setValue(GROUP(GUI), GUI::HideTabBarIfOnlyOneTab, m_ui->m_hideTabBarIfOneTabVisible->isChecked());
2014-01-13 21:43:35 +01:00
2014-04-07 08:21:55 +02:00
m_ui->m_editorFeedsToolbar->saveToolBar();
m_ui->m_editorMessagesToolbar->saveToolBar();
2014-04-05 13:48:26 +02:00
2014-08-22 09:27:01 +02:00
qApp->mainForm()->tabWidget()->checkTabBarVisibility();
qApp->mainForm()->tabWidget()->feedMessageViewer()->refreshVisualProperties();
}
2014-09-19 08:31:25 +02:00
bool FormSettings::eventFilter(QObject *obj, QEvent *e) {
Q_UNUSED(obj)
if (e->type() == QEvent::Drop) {
QDropEvent *drop_event = static_cast<QDropEvent*>(e);
if (drop_event->keyboardModifiers() != Qt::NoModifier) {
drop_event->setDropAction(Qt::MoveAction);
}
}
return false;
}