Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions src/gui/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ endif()
configure_file(${CMAKE_SOURCE_DIR}/theme.qrc.in ${CMAKE_SOURCE_DIR}/theme.qrc)
set(theme_dir ${CMAKE_SOURCE_DIR}/theme)

#NMC customization: needed to find the ui file in a different location than the header file
set(CMAKE_AUTOUIC_SEARCH_PATHS "${CMAKE_SOURCE_DIR}/src/gui")

set(client_UI_SRCS
accountsettings.ui
conflictdialog.ui
Expand Down Expand Up @@ -259,6 +262,10 @@ set(client_SRCS
integration/fileactionsmodel.cpp
)

file(GLOB NMC_FILES "nmcgui/*")
set(NMC_SRCS ${NMC_FILES})
list(APPEND client_SRCS ${NMC_SRCS})

if (NOT DISABLE_ACCOUNT_MIGRATION)
list(APPEND client_SRCS
legacyaccountselectiondialog.h
Expand Down
6 changes: 6 additions & 0 deletions src/gui/generalsettings.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,12 @@ class GeneralSettings : public QWidget
~GeneralSettings() override;
[[nodiscard]] QSize sizeHint() const override;

protected:
Ui::GeneralSettings *getUi() const
{
return _ui;
}

public slots:
void slotStyleChanged();
#if defined(BUILD_UPDATER)
Expand Down
4 changes: 2 additions & 2 deletions src/gui/ignorelisteditor.ui
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
<item row="0" column="0">
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Global Ignore Settings</string>
<string/>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
Expand All @@ -33,7 +33,7 @@
<item row="1" column="0">
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>Files Ignored by Patterns</string>
<string/>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
Expand Down
265 changes: 265 additions & 0 deletions src/gui/nmcgui/nmcgeneralsettings.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,265 @@
/*
* Copyright (C) by Mauro Mura
*
* 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"

#include <QAbstractButton>
#include <QCheckBox>
#include <QCoreApplication>
#include <QGridLayout>
#include <QGroupBox>
#include <QHBoxLayout>
#include <QLabel>
#include <QPushButton>
#include <QSpacerItem>
#include <QVBoxLayout>
#include <QWidget>

#ifdef Q_OS_WIN
#define BACKGROUND_PALETTE "alternate-base"

Check failure on line 33 in src/gui/nmcgui/nmcgeneralsettings.cpp

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Replace this macro by "const", "constexpr" or an "enum".

See more on https://sonarcloud.io/project/issues?id=nextmcloud_desktop&issues=AZ6HjZi0jcDXV85uOWbq&open=AZ6HjZi0jcDXV85uOWbq&pullRequest=435
#else
#define BACKGROUND_PALETTE "light"
#endif

namespace OCC {

NMCGeneralSettings::NMCGeneralSettings(QWidget *parent)
: GeneralSettings(parent)
{
setDefaultSettings();
setNMCLayout();
}

void NMCGeneralSettings::setDefaultSettings()
{
getUi()->monoIconsCheckBox->setVisible(false);
getUi()->chatNotificationsCheckBox->setVisible(false);
getUi()->callNotificationsCheckBox->setVisible(false);
getUi()->quotaWarningNotificationsCheckBox->setVisible(false);

getUi()->advancedGroupBox->setVisible(false);
getUi()->aboutAndUpdatesGroupBox->setVisible(false);
}

void NMCGeneralSettings::setNMCLayout()
{
// General settings
auto *generalSettingsLabel = new QLabel(QCoreApplication::translate("", "GENERAL_SETTINGS"), this);
generalSettingsLabel->setStyleSheet(QStringLiteral("font-size: 12px; font-weight: bold;"));

getUi()->generalGroupBoxTitle->hide();
getUi()->generalGroupBox->layout()->removeWidget(getUi()->generalGroupBoxTitle);
getUi()->generalGroupBox->layout()->removeWidget(getUi()->chatNotificationsCheckBox);
getUi()->generalGroupBox->layout()->removeWidget(getUi()->serverNotificationsCheckBox);
getUi()->generalGroupBox->layout()->removeWidget(getUi()->autostartCheckBox);
getUi()->generalGroupBox->layout()->removeWidget(getUi()->quotaWarningNotificationsCheckBox);

getUi()->generalGroupBox->setTitle({});
getUi()->generalGroupBox->setObjectName(QStringLiteral("nmcGeneralSettingsBox"));
getUi()->generalGroupBox->setAttribute(Qt::WA_StyledBackground, true);
getUi()->generalGroupBox->setStyleSheet(QStringLiteral(
"#nmcGeneralSettingsBox {"
" background: palette(" BACKGROUND_PALETTE ");"
" border-radius: 4px;"
" border: none;"
"}"
));

auto *generalLayout = static_cast<QGridLayout *>(getUi()->generalGroupBox->layout());
generalLayout->addWidget(generalSettingsLabel, 0, 0);
generalLayout->addWidget(getUi()->autostartCheckBox, 1, 0);
generalLayout->addWidget(getUi()->serverNotificationsCheckBox, 2, 0);
generalLayout->setContentsMargins(16, 16, 16, 16);
generalLayout->setSpacing(8);

getUi()->autostartCheckBox->setFocusPolicy(Qt::NoFocus);
getUi()->serverNotificationsCheckBox->setFocusPolicy(Qt::NoFocus);

// Advanced settings
auto *advancedSettingsLabel = new QLabel(QCoreApplication::translate("", "ADVANCED_SETTINGS"), this);
advancedSettingsLabel->setStyleSheet(QStringLiteral("font-size: 12px; font-weight: bold;"));

auto *advancedSettingsBox = new QGroupBox(this);
advancedSettingsBox->setObjectName(QStringLiteral("nmcAdvancedSettingsBox"));
advancedSettingsBox->setAttribute(Qt::WA_StyledBackground, true);
advancedSettingsBox->setTitle({});
advancedSettingsBox->setLayout(new QVBoxLayout);
advancedSettingsBox->layout()->setContentsMargins(16, 16, 16, 16);
advancedSettingsBox->layout()->setSpacing(8);
advancedSettingsBox->setStyleSheet(QStringLiteral(
"#nmcAdvancedSettingsBox {"
" background: palette(" BACKGROUND_PALETTE ");"
" border-radius: 4px;"
" border: none;"
"}"
));

getUi()->horizontalLayout_10->removeWidget(getUi()->showInExplorerNavigationPaneCheckBox);
getUi()->horizontalLayout_trash->removeWidget(getUi()->moveFilesToTrashCheckBox);
getUi()->horizontalLayout_4->removeWidget(getUi()->ignoredFilesButton);

getUi()->horizontalLayout_3->removeWidget(getUi()->newFolderLimitCheckBox);
getUi()->horizontalLayout_3->removeWidget(getUi()->newFolderLimitSpinBox);
getUi()->horizontalLayout_3->removeWidget(getUi()->label);

auto *newFolderLimitWidget = new QWidget(advancedSettingsBox);
newFolderLimitWidget->setContentsMargins(0, 0, 0, 0);
auto *newFolderLimitLayout = new QHBoxLayout(newFolderLimitWidget);
newFolderLimitLayout->setContentsMargins(0, 0, 0, 0);
newFolderLimitLayout->setSpacing(8);

newFolderLimitLayout->addWidget(getUi()->newFolderLimitCheckBox);
newFolderLimitLayout->addWidget(getUi()->newFolderLimitSpinBox);
newFolderLimitLayout->addWidget(getUi()->label);
newFolderLimitLayout->addStretch();

getUi()->newFolderLimitCheckBox->setVisible(true);
getUi()->newFolderLimitSpinBox->setVisible(true);
getUi()->label->setVisible(true);

getUi()->newFolderLimitCheckBox->setFocusPolicy(Qt::NoFocus);
getUi()->newFolderLimitSpinBox->setFocusPolicy(Qt::ClickFocus);
getUi()->newFolderLimitSpinBox->setKeyboardTracking(true);
getUi()->newFolderLimitSpinBox->setEnabled(getUi()->newFolderLimitCheckBox->isChecked());

connect(getUi()->newFolderLimitCheckBox, &QAbstractButton::toggled,
getUi()->newFolderLimitSpinBox, &QWidget::setEnabled);

newFolderLimitWidget->setVisible(true);

getUi()->ignoredFilesButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
getUi()->ignoredFilesButton->setFocusPolicy(Qt::NoFocus);
getUi()->ignoredFilesButton->setStyleSheet(QStringLiteral(
"QPushButton {"
" min-height: 32px;"
" min-width: 200px;"
" border: 1px solid black;"
" color: black;"
" background-color: #ededed;"
" font-size: 13px;"
" border-radius: 4px;"
"}"
"QPushButton:hover {"
" background-color: white;"
"}"
));

advancedSettingsBox->layout()->addWidget(advancedSettingsLabel);
advancedSettingsBox->layout()->addWidget(newFolderLimitWidget);
advancedSettingsBox->layout()->addWidget(getUi()->showInExplorerNavigationPaneCheckBox);
advancedSettingsBox->layout()->addWidget(getUi()->moveFilesToTrashCheckBox);
advancedSettingsBox->layout()->addItem(new QSpacerItem(1, 8, QSizePolicy::Fixed, QSizePolicy::Fixed));
advancedSettingsBox->layout()->addWidget(getUi()->ignoredFilesButton);

getUi()->showInExplorerNavigationPaneCheckBox->setFocusPolicy(Qt::NoFocus);
getUi()->moveFilesToTrashCheckBox->setFocusPolicy(Qt::NoFocus);

getUi()->gridLayout_3->addWidget(advancedSettingsBox, 2, 0);

// Updates & Info
auto *updatesLabel = new QLabel(QCoreApplication::translate("", "UPDATES_SETTINGS"), this);
updatesLabel->setStyleSheet(QStringLiteral("font-size: 12px; font-weight: bold;"));

auto *dataProtectionBox = new QGroupBox(this);
dataProtectionBox->setObjectName(QStringLiteral("nmcUpdatesInfoBox"));
dataProtectionBox->setAttribute(Qt::WA_StyledBackground, true);
dataProtectionBox->setTitle({});
dataProtectionBox->setLayout(new QVBoxLayout);
dataProtectionBox->layout()->setContentsMargins(16, 16, 16, 16);
dataProtectionBox->layout()->setSpacing(8);
dataProtectionBox->setStyleSheet(QStringLiteral(
"#nmcUpdatesInfoBox {"
" background: palette(" BACKGROUND_PALETTE ");"
" border-radius: 4px;"
" border: none;"
"}"
));

auto *dataAnalysisCheckBox = new QCheckBox(this);
dataAnalysisCheckBox->setText(QCoreApplication::translate("", "DATA_ANALYSIS"));
dataAnalysisCheckBox->setFocusPolicy(Qt::NoFocus);

getUi()->autoCheckForUpdatesCheckBox->setFocusPolicy(Qt::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(QStringLiteral("<a href=\"https://www.telekom.de/impressum/\"><span style=\"color:#2238df\">%1</span></a>")
.arg(QCoreApplication::translate("", "IMPRESSUM")));
dataAnalysisImpressum->setTextFormat(Qt::RichText);
dataAnalysisImpressum->setTextInteractionFlags(Qt::TextBrowserInteraction);
dataAnalysisImpressum->setOpenExternalLinks(true);
dataAnalysisImpressum->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
dataAnalysisImpressum->setStyleSheet(QStringLiteral("font-size: 13px"));
dataProtectionBox->layout()->addWidget(dataAnalysisImpressum);

auto *dataAnalysisData = new QLabel(this);
dataAnalysisData->setText(QStringLiteral("<a href=\"https://static.magentacloud.de/privacy/datenschutzhinweise_software.pdf\"><span style=\"color:#2238df\">%1</span></a>")
.arg(QCoreApplication::translate("", "DATA_PROTECTION")));
dataAnalysisData->setTextFormat(Qt::RichText);
dataAnalysisData->setTextInteractionFlags(Qt::TextBrowserInteraction);
dataAnalysisData->setOpenExternalLinks(true);
dataAnalysisData->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
dataAnalysisData->setStyleSheet(QStringLiteral("font-size: 13px"));
dataProtectionBox->layout()->addWidget(dataAnalysisData);

auto *dataAnalysisOpenSource = new QLabel(this);
dataAnalysisOpenSource->setText(QStringLiteral("<a href=\"https://static.magentacloud.de/licences/windowsdesktop.html\"><span style=\"color:#2238df\">%1</span></a>")
.arg(QCoreApplication::translate("", "LICENCE")));
dataAnalysisOpenSource->setTextFormat(Qt::RichText);
dataAnalysisOpenSource->setTextInteractionFlags(Qt::TextBrowserInteraction);
dataAnalysisOpenSource->setOpenExternalLinks(true);
dataAnalysisOpenSource->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
dataAnalysisOpenSource->setStyleSheet(QStringLiteral("font-size: 13px"));
dataProtectionBox->layout()->addWidget(dataAnalysisOpenSource);

auto *dataAnalysisFurtherInfo = new QLabel(this);
dataAnalysisFurtherInfo->setText(QStringLiteral("<a href=\"https://cloud.telekom-dienste.de/hilfe\"><span style=\"color:#2238df\">%1</span></a>")
.arg(QCoreApplication::translate("", "FURTHER_INFO")));
dataAnalysisFurtherInfo->setTextFormat(Qt::RichText);
dataAnalysisFurtherInfo->setTextInteractionFlags(Qt::TextBrowserInteraction);
dataAnalysisFurtherInfo->setOpenExternalLinks(true);
dataAnalysisFurtherInfo->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
dataAnalysisFurtherInfo->setStyleSheet(QStringLiteral("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);
dataProtectionBox->layout()->addWidget(currentVersion);

getUi()->gridLayout_3->addWidget(dataProtectionBox, 3, 0);

auto *vExpandSpacer = new QSpacerItem(1, 1, QSizePolicy::Fixed, QSizePolicy::Expanding);

Check failure on line 261 in src/gui/nmcgui/nmcgeneralsettings.cpp

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Replace the use of "new" with an operation that automatically manages the memory.

See more on https://sonarcloud.io/project/issues?id=nextmcloud_desktop&issues=AZ6HjZi0jcDXV85uOWbr&open=AZ6HjZi0jcDXV85uOWbr&pullRequest=435
getUi()->gridLayout_3->layout()->addItem(vExpandSpacer);
}

} // namespace OCC
66 changes: 66 additions & 0 deletions src/gui/nmcgui/nmcgeneralsettings.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
/*
* Copyright (C) by Mauro Mura
*
* 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 setNMCLayout();
};

} // namespace OCC
#endif // MIRALL_GENERALSETTINGSMAGENTA_H
Loading