diff --git a/.gitignore b/.gitignore index f3505a5ff4be5..5acf0bde00b77 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ -.gitmodules +# Ignorierte Dateien und Ordner + *build*/ *flymake* CMakeLists.txt.user* diff --git a/src/gui/generalsettings.cpp b/src/gui/generalsettings.cpp index 72426bda65d35..89c6e6408782b 100644 --- a/src/gui/generalsettings.cpp +++ b/src/gui/generalsettings.cpp @@ -537,4 +537,6 @@ void GeneralSettings::customizeStyle() #endif } + + } // namespace OCC diff --git a/src/gui/generalsettings.h b/src/gui/generalsettings.h index 70a726142db8b..e860e325629ef 100644 --- a/src/gui/generalsettings.h +++ b/src/gui/generalsettings.h @@ -41,6 +41,12 @@ class GeneralSettings : public QWidget ~GeneralSettings() override; [[nodiscard]] QSize sizeHint() const override; +protected: + Ui::GeneralSettings *getUi() const + { + return _ui; + } + public slots: void slotStyleChanged(); diff --git a/src/gui/nmcgui/nmcgeneralsettings.cpp b/src/gui/nmcgui/nmcgeneralsettings.cpp new file mode 100644 index 0000000000000..2a4162bbdd270 --- /dev/null +++ b/src/gui/nmcgui/nmcgeneralsettings.cpp @@ -0,0 +1,168 @@ +/* + * Copyright (C) by Eugen Fischer + * + * 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 "nmcgeneralsettings.h" +#include "generalsettings.h" +#include "nmclibsync/nmcconfigfile.h" +#include "ui_generalsettings.h" +#include "theme.h" + + +namespace OCC { + +NMCGeneralSettings::NMCGeneralSettings(QWidget *parent) + : GeneralSettings(parent) +{ + setDefaultSettings(); + setLayout(); +} + +void NMCGeneralSettings::setDefaultSettings() +{ + //Set default settings + //General settings + getUi()->autostartCheckBox->setCheckState(Qt::Checked); + getUi()->monoIconsCheckBox->setCheckState(Qt::Unchecked); + getUi()->serverNotificationsCheckBox->setCheckState(Qt::Unchecked); + getUi()->callNotificationsCheckBox->setCheckState(Qt::Unchecked); + //Advanced settings + getUi()->newFolderLimitCheckBox->setCheckState(Qt::Unchecked); + //Info settings + getUi()->aboutAndUpdatesGroupBox->setTitle(tr("Update")); + //Hide unsupported settings + //General settings + getUi()->monoIconsCheckBox->setVisible(false); + getUi()->callNotificationsCheckBox->setVisible(false); + //Advanced settings + getUi()->groupBox->setVisible(false); + //Info settings + getUi()->aboutAndUpdatesGroupBox->setVisible(false); +} + +void NMCGeneralSettings::setLayout() +{ + //General settings + auto generalSettingsLabel = new QLabel(tr("GENERAL_SETTINGS")); + generalSettingsLabel->setStyleSheet("QLabel{font-size: 12px; font-weight: bold;}"); + getUi()->generalGroupBox->setTitle(""); + getUi()->generalGroupBox->layout()->removeWidget(getUi()->serverNotificationsCheckBox); + getUi()->generalGroupBox->layout()->removeWidget(getUi()->autostartCheckBox); + static_cast(getUi()->generalGroupBox->layout())->addWidget(generalSettingsLabel, 0, 0); + static_cast(getUi()->generalGroupBox->layout())->addWidget(getUi()->autostartCheckBox, 1, 0); + static_cast(getUi()->generalGroupBox->layout())->addWidget(getUi()->serverNotificationsCheckBox, 2, 0); + getUi()->generalGroupBox->setStyleSheet("QGroupBox { background-color: white; border-radius: 4px; }"); + getUi()->autostartCheckBox->setFocusPolicy(Qt::FocusPolicy::NoFocus); + getUi()->serverNotificationsCheckBox->setFocusPolicy(Qt::FocusPolicy::NoFocus); + + //Advanced settings + auto advancedSettingsLabel = new QLabel(tr("ADVANCED_SETTINGS")); + advancedSettingsLabel->setStyleSheet("QLabel{font-size: 12px; font-weight: bold;}"); + QGroupBox *advancedSettingsBox = new QGroupBox(this); + advancedSettingsBox->setTitle(""); + advancedSettingsBox->setLayout(new QVBoxLayout); + advancedSettingsBox->layout()->setContentsMargins(12,12,12,12); //Like in Nextcloud .ui file + advancedSettingsBox->layout()->setSpacing(8); + advancedSettingsBox->setStyleSheet("QGroupBox { background-color: white; border-radius: 4px; }"); + + getUi()->horizontalLayout_10->removeWidget(getUi()->showInExplorerNavigationPaneCheckBox); + getUi()->horizontalLayout->removeWidget(getUi()->moveFilesToTrashCheckBox); + + advancedSettingsBox->layout()->addWidget(advancedSettingsLabel); + advancedSettingsBox->layout()->addWidget(getUi()->showInExplorerNavigationPaneCheckBox); + advancedSettingsBox->layout()->addWidget(getUi()->moveFilesToTrashCheckBox); + getUi()->showInExplorerNavigationPaneCheckBox->setFocusPolicy(Qt::FocusPolicy::NoFocus); + getUi()->moveFilesToTrashCheckBox->setFocusPolicy(Qt::FocusPolicy::NoFocus); + + getUi()->gridLayout_3->addWidget(advancedSettingsBox, 2, 0); + + //Datenschutz + auto updatesLabel = new QLabel(tr("UPDATES_SETTINGS")); + updatesLabel->setStyleSheet("QLabel{font-size: 12px; font-weight: bold;}"); + + QGroupBox *dataProtectionBox = new QGroupBox(this); + dataProtectionBox->setTitle(""); + dataProtectionBox->setLayout(new QVBoxLayout); + dataProtectionBox->layout()->setContentsMargins(12,12,12,12); //Like in Nextcloud .ui file + dataProtectionBox->layout()->setSpacing(8); + dataProtectionBox->setStyleSheet("QGroupBox { background-color: white; border-radius: 4px; }"); + + auto *dataAnalysisCheckBox = new QCheckBox(this); + dataAnalysisCheckBox->setText(tr("DATA_ANALYSIS")); + dataAnalysisCheckBox->setFocusPolicy(Qt::FocusPolicy::NoFocus); + getUi()->autoCheckForUpdatesCheckBox->setFocusPolicy(Qt::FocusPolicy::NoFocus); + + dataProtectionBox->layout()->addWidget(updatesLabel); + dataProtectionBox->layout()->addWidget(getUi()->autoCheckForUpdatesCheckBox); + dataProtectionBox->layout()->addWidget(dataAnalysisCheckBox); + + connect(dataAnalysisCheckBox, &QAbstractButton::toggled, this, [](bool toggle){ + NMCConfigFile cfgFile; + cfgFile.setTransferUsageData(toggle, QString()); + }); + NMCConfigFile cfgFile; + dataAnalysisCheckBox->setChecked(cfgFile.transferUsageData()); + + dataProtectionBox->layout()->addItem(new QSpacerItem(1,8,QSizePolicy::Fixed,QSizePolicy::Fixed)); + + auto *dataAnalysisImpressum = new QLabel(this); + dataAnalysisImpressum->setText(QString("%1").arg(tr("IMPRESSUM"))); + dataAnalysisImpressum->setTextFormat(Qt::RichText); + dataAnalysisImpressum->setTextInteractionFlags(Qt::TextBrowserInteraction); + dataAnalysisImpressum->setOpenExternalLinks(true); + dataAnalysisImpressum->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); + dataAnalysisImpressum->setStyleSheet("font-size: 13px"); + dataProtectionBox->layout()->addWidget(dataAnalysisImpressum); + + auto *dataAnalysisData = new QLabel(this); + dataAnalysisData->setText(QString("%1").arg(tr("DATA_PROTECTION"))); + dataAnalysisData->setTextFormat(Qt::RichText); + dataAnalysisData->setTextInteractionFlags(Qt::TextBrowserInteraction); + dataAnalysisData->setOpenExternalLinks(true); + dataAnalysisData->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); + dataAnalysisData->setStyleSheet("font-size: 13px"); + dataProtectionBox->layout()->addWidget(dataAnalysisData); + + auto *dataAnalysisOpenSource = new QLabel(this); + dataAnalysisOpenSource->setText(QString("%1").arg(tr("LICENCE"))); + dataAnalysisOpenSource->setTextFormat(Qt::RichText); + dataAnalysisOpenSource->setTextInteractionFlags(Qt::TextBrowserInteraction); + dataAnalysisOpenSource->setOpenExternalLinks(true); + dataAnalysisOpenSource->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); + dataAnalysisOpenSource->setStyleSheet("font-size: 13px"); + dataProtectionBox->layout()->addWidget(dataAnalysisOpenSource); + + auto *dataAnalysisFurtherInfo = new QLabel(this); + dataAnalysisFurtherInfo->setText(QString("%1").arg(tr("FURTHER_INFO"))); + dataAnalysisFurtherInfo->setTextFormat(Qt::RichText); + dataAnalysisFurtherInfo->setTextInteractionFlags(Qt::TextBrowserInteraction); + dataAnalysisFurtherInfo->setOpenExternalLinks(true); + dataAnalysisFurtherInfo->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); + dataAnalysisFurtherInfo->setStyleSheet("font-size: 13px"); + dataProtectionBox->layout()->addWidget(dataAnalysisFurtherInfo); + + dataProtectionBox->layout()->addItem(new QSpacerItem(1,8,QSizePolicy::Fixed,QSizePolicy::Fixed)); + + auto *currentVersion = new QLabel(this); + currentVersion->setText(Theme::instance()->about()); + currentVersion->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); + //Todo, set current version + dataProtectionBox->layout()->addWidget(currentVersion); + + getUi()->gridLayout_3->addWidget(dataProtectionBox, 3, 0); + + auto *vExpandSpacer = new QSpacerItem(1,1,QSizePolicy::Fixed,QSizePolicy::Expanding); + getUi()->gridLayout_3->layout()->addItem(vExpandSpacer); +} + +} // namespace OCC diff --git a/src/gui/nmcgui/nmcgeneralsettings.h b/src/gui/nmcgui/nmcgeneralsettings.h new file mode 100644 index 0000000000000..5edbca1a4c276 --- /dev/null +++ b/src/gui/nmcgui/nmcgeneralsettings.h @@ -0,0 +1,66 @@ +/* + * Copyright (C) by Eugen Fischer + * + * 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. + */ + +#ifndef MIRALL_GENERALSETTINGSMAGENTA_H +#define MIRALL_GENERALSETTINGSMAGENTA_H + +#include "generalsettings.h" + +namespace OCC { + +/** + * @brief The NMCGeneralSettings class + * + * This class represents the Magenta-specific implementation of general settings + * for a graphical user interface. It inherits from the base class GeneralSettings. + * + * @ingroup gui + */ +class NMCGeneralSettings : public GeneralSettings +{ + Q_OBJECT + +public: + /** + * @brief Constructor for NMCGeneralSettings + * + * Creates an instance of NMCGeneralSettings with the specified parent widget. + * + * @param parent The parent widget (default is nullptr). + */ + explicit NMCGeneralSettings(QWidget *parent = nullptr); + + /** + * @brief Destructor for NMCGeneralSettings + */ + ~NMCGeneralSettings() = default; + +protected: + /** + * @brief Set default settings + * + * Sets the default values for Magenta-specific general settings. + */ + void setDefaultSettings(); + + /** + * @brief Set layout + * + * Sets the layout for the Magenta-specific general settings user interface. + */ + void setLayout(); +}; + +} // namespace OCC +#endif // MIRALL_GENERALSETTINGSMAGENTA_H diff --git a/src/gui/settingsdialog.cpp b/src/gui/settingsdialog.cpp index 2754b7397c0a4..41518c6fc0ef7 100644 --- a/src/gui/settingsdialog.cpp +++ b/src/gui/settingsdialog.cpp @@ -17,7 +17,7 @@ #include "folderman.h" #include "theme.h" -#include "generalsettings.h" +#include "nmcgui/nmcgeneralsettings.h" #include "networksettings.h" #include "nmcgui/nmcaccountsettings.h" #include "configfile.h" @@ -120,7 +120,7 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent) QAction *generalAction = createColorAwareAction(QLatin1String(":/client/theme/settings.svg"), tr("General")); _actionGroup->addAction(generalAction); _toolBar->addAction(generalAction); - auto *generalSettings = new GeneralSettings; + auto *generalSettings = new NMCGeneralSettings; _ui->stack->addWidget(generalSettings); // Connect styleChanged events to our widgets, so they can adapt (Dark-/Light-Mode switching) diff --git a/src/libsync/CMakeLists.txt b/src/libsync/CMakeLists.txt index cd124bd3b653b..0b682c6845da0 100644 --- a/src/libsync/CMakeLists.txt +++ b/src/libsync/CMakeLists.txt @@ -134,6 +134,8 @@ set(libsync_SRCS creds/keychainchunk.cpp caseclashconflictsolver.h caseclashconflictsolver.cpp + nmclibsync/nmcconfigfile.h + nmclibsync/nmcconfigfile.cpp ) if (WIN32) diff --git a/src/libsync/configfile.h b/src/libsync/configfile.h index 7ae1f98df207b..17d13c2564469 100644 --- a/src/libsync/configfile.h +++ b/src/libsync/configfile.h @@ -245,10 +245,10 @@ class OWNCLOUDSYNC_EXPORT ConfigFile [[nodiscard]] QVariant retrieveData(const QString &group, const QString &key) const; void removeData(const QString &group, const QString &key); [[nodiscard]] bool dataExists(const QString &group, const QString &key) const; + [[nodiscard]] QVariant getValue(const QString ¶m, const QString &group = QString(), + const QVariant &defaultValue = QVariant()) const; private: - [[nodiscard]] QVariant getValue(const QString ¶m, const QString &group = QString(), - const QVariant &defaultValue = QVariant()) const; void setValue(const QString &key, const QVariant &value); [[nodiscard]] QString keychainProxyPasswordKey() const; diff --git a/src/libsync/nmclibsync/nmcconfigfile.cpp b/src/libsync/nmclibsync/nmcconfigfile.cpp new file mode 100644 index 0000000000000..52b5f869469a8 --- /dev/null +++ b/src/libsync/nmclibsync/nmcconfigfile.cpp @@ -0,0 +1,49 @@ +/* + * Copyright (C) by Eugen Fischer + * + * 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 "nmcconfigfile.h" + +namespace{ + static constexpr char TransferUsageDataC[] = "TransferUsageData"; +} + +namespace OCC { + +bool NMCConfigFile::transferUsageData(const QString &connection) const +{ + QString con(connection); + if (connection.isEmpty()) + con = defaultConnection(); + + QVariant fallback = getValue(QLatin1String(TransferUsageDataC), con, false); + fallback = getValue(QLatin1String(TransferUsageDataC), QString(), fallback); + + QVariant value = getPolicySetting(QLatin1String(TransferUsageDataC), fallback); + return value.toBool(); +} + +void NMCConfigFile::setTransferUsageData(bool usageData, const QString &connection) +{ + QString con(connection); + if (connection.isEmpty()) + con = defaultConnection(); + + QSettings settings(configFile(), QSettings::IniFormat); + settings.beginGroup(con); + + settings.setValue(QLatin1String(TransferUsageDataC), QVariant(usageData)); + settings.sync(); +} + +} // namespace OCC diff --git a/src/libsync/nmclibsync/nmcconfigfile.h b/src/libsync/nmclibsync/nmcconfigfile.h new file mode 100644 index 0000000000000..813460939acf1 --- /dev/null +++ b/src/libsync/nmclibsync/nmcconfigfile.h @@ -0,0 +1,40 @@ +/* + * 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. + */ + +#ifndef MIRALL_NMCCONFIGFILE_H +#define MIRALL_NMCCONFIGFILE_H + +#include "configfile.h" + +namespace OCC { + +/** + * @brief The NMCConfigFile class + * @ingroup lib + */ +class NMCConfigFile : public ConfigFile +{ + +public: + explicit NMCConfigFile() = default; + ~NMCConfigFile() = default; + + // MagentaCustomization + [[nodiscard]] bool transferUsageData(const QString &connection = QString()) const; + void setTransferUsageData(bool usageData, const QString &connection); +}; + + +} // namespace OCC +#endif // MIRALL_NMCCONFIGFILE_H