/* * Copyright (C) by Daniel Molkentin * * This program 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 2 of the License, or * (at your option) any later version. * * This program 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. */ #include "generalsettings.h" #include "ui_generalsettings.h" #include "theme.h" #include "configfile.h" #include "application.h" #include "configfile.h" #include "owncloudsetupwizard.h" #include "accountmanager.h" #include "synclogdialog.h" #include "updater/updater.h" #include "updater/ocupdater.h" #include "ignorelisteditor.h" #include "config.h" #include #include #include namespace OCC { GeneralSettings::GeneralSettings(QWidget *parent) : QWidget(parent) , _ui(new Ui::GeneralSettings) , _currentlyLoading(false) { _ui->setupUi(this); connect(_ui->desktopNotificationsCheckBox, &QAbstractButton::toggled, this, &GeneralSettings::slotToggleOptionalDesktopNotifications); connect(_ui->showInExplorerNavigationPaneCheckBox, &QAbstractButton::toggled, this, &GeneralSettings::slotShowInExplorerNavigationPane); _ui->autostartCheckBox->setChecked(Utility::hasLaunchOnStartup(Theme::instance()->appName())); connect(_ui->autostartCheckBox, &QAbstractButton::toggled, this, &GeneralSettings::slotToggleLaunchOnStartup); // setup about section QString about = Theme::instance()->about(); if (about.isEmpty()) { _ui->aboutGroupBox->hide(); } else { _ui->aboutLabel->setTextInteractionFlags(Qt::TextSelectableByMouse | Qt::TextBrowserInteraction); _ui->aboutLabel->setText(about); _ui->aboutLabel->setWordWrap(true); _ui->aboutLabel->setOpenExternalLinks(true); } loadMiscSettings(); slotUpdateInfo(); // misc connect(_ui->monoIconsCheckBox, &QAbstractButton::toggled, this, &GeneralSettings::saveMiscSettings); connect(_ui->crashreporterCheckBox, &QAbstractButton::toggled, this, &GeneralSettings::saveMiscSettings); connect(_ui->newFolderLimitCheckBox, &QAbstractButton::toggled, this, &GeneralSettings::saveMiscSettings); connect(_ui->newFolderLimitSpinBox, static_cast(&QSpinBox::valueChanged), this, &GeneralSettings::saveMiscSettings); connect(_ui->newExternalStorage, &QAbstractButton::toggled, this, &GeneralSettings::saveMiscSettings); #ifndef WITH_CRASHREPORTER _ui->crashreporterCheckBox->setVisible(false); #endif // Hide on non-Windows, or WindowsVersion < 10. // The condition should match the default value of ConfigFile::showInExplorerNavigationPane. #ifdef Q_OS_WIN if (QSysInfo::windowsVersion() < QSysInfo::WV_WINDOWS10) #endif _ui->showInExplorerNavigationPaneCheckBox->setVisible(false); /* Set the left contents margin of the layout to zero to make the checkboxes * align properly vertically , fixes bug #3758 */ int m0, m1, m2, m3; _ui->horizontalLayout_3->getContentsMargins(&m0, &m1, &m2, &m3); _ui->horizontalLayout_3->setContentsMargins(0, m1, m2, m3); // OEM themes are not obliged to ship mono icons, so there // is no point in offering an option _ui->monoIconsCheckBox->setVisible(Theme::instance()->monoIconsAvailable()); connect(_ui->ignoredFilesButton, &QAbstractButton::clicked, this, &GeneralSettings::slotIgnoreFilesEditor); // accountAdded means the wizard was finished and the wizard might change some options. connect(AccountManager::instance(), &AccountManager::accountAdded, this, &GeneralSettings::loadMiscSettings); } GeneralSettings::~GeneralSettings() { delete _ui; delete _syncLogDialog; } QSize GeneralSettings::sizeHint() const { return QSize(ownCloudGui::settingsDialogSize().width(), QWidget::sizeHint().height()); } void GeneralSettings::loadMiscSettings() { QScopedValueRollback scope(_currentlyLoading, true); ConfigFile cfgFile; _ui->monoIconsCheckBox->setChecked(cfgFile.monoIcons()); _ui->desktopNotificationsCheckBox->setChecked(cfgFile.optionalDesktopNotifications()); _ui->showInExplorerNavigationPaneCheckBox->setChecked(cfgFile.showInExplorerNavigationPane()); _ui->crashreporterCheckBox->setChecked(cfgFile.crashReporter()); auto newFolderLimit = cfgFile.newBigFolderSizeLimit(); _ui->newFolderLimitCheckBox->setChecked(newFolderLimit.first); _ui->newFolderLimitSpinBox->setValue(newFolderLimit.second); _ui->newExternalStorage->setChecked(cfgFile.confirmExternalStorage()); _ui->monoIconsCheckBox->setChecked(cfgFile.monoIcons()); } void GeneralSettings::slotUpdateInfo() { // Note: the sparkle-updater is not an OCUpdater OCUpdater *updater = qobject_cast(Updater::instance()); if (ConfigFile().skipUpdateCheck()) { updater = 0; // don't show update info if updates are disabled } if (updater) { connect(updater, &OCUpdater::downloadStateChanged, this, &GeneralSettings::slotUpdateInfo, Qt::UniqueConnection); connect(_ui->restartButton, &QAbstractButton::clicked, updater, &OCUpdater::slotStartInstaller, Qt::UniqueConnection); connect(_ui->restartButton, &QAbstractButton::clicked, qApp, &QApplication::quit, Qt::UniqueConnection); _ui->updateStateLabel->setText(updater->statusString()); _ui->restartButton->setVisible(updater->downloadState() == OCUpdater::DownloadComplete); } else { // can't have those infos from sparkle currently _ui->updatesGroupBox->setVisible(false); } } void GeneralSettings::saveMiscSettings() { if (_currentlyLoading) return; ConfigFile cfgFile; bool isChecked = _ui->monoIconsCheckBox->isChecked(); cfgFile.setMonoIcons(isChecked); Theme::instance()->setSystrayUseMonoIcons(isChecked); cfgFile.setCrashReporter(_ui->crashreporterCheckBox->isChecked()); cfgFile.setNewBigFolderSizeLimit(_ui->newFolderLimitCheckBox->isChecked(), _ui->newFolderLimitSpinBox->value()); cfgFile.setConfirmExternalStorage(_ui->newExternalStorage->isChecked()); } void GeneralSettings::slotToggleLaunchOnStartup(bool enable) { Theme *theme = Theme::instance(); Utility::setLaunchOnStartup(theme->appName(), theme->appNameGUI(), enable); } void GeneralSettings::slotToggleOptionalDesktopNotifications(bool enable) { ConfigFile cfgFile; cfgFile.setOptionalDesktopNotifications(enable); } void GeneralSettings::slotShowInExplorerNavigationPane(bool checked) { ConfigFile cfgFile; cfgFile.setShowInExplorerNavigationPane(checked); // Now update the registry with the change. FolderMan::instance()->navigationPaneHelper().setShowInExplorerNavigationPane(checked); } void GeneralSettings::slotIgnoreFilesEditor() { if (_ignoreEditor.isNull()) { _ignoreEditor = new IgnoreListEditor(this); _ignoreEditor->setAttribute(Qt::WA_DeleteOnClose, true); _ignoreEditor->open(); } else { ownCloudGui::raiseDialog(_ignoreEditor); } } } // namespace OCC