From 24f3c60fab7595c893dcc7820c6187c0ae58c80f Mon Sep 17 00:00:00 2001 From: memurats Date: Fri, 24 Oct 2025 12:53:36 +0200 Subject: [PATCH 1/5] network settings changes --- src/gui/CMakeLists.txt | 7 ++ src/gui/networksettings.h | 5 ++ src/gui/networksettings.ui | 4 +- src/gui/nmcgui/nmcnetworksettings.cpp | 120 ++++++++++++++++++++++++++ src/gui/nmcgui/nmcnetworksettings.h | 57 ++++++++++++ 5 files changed, 191 insertions(+), 2 deletions(-) create mode 100644 src/gui/nmcgui/nmcnetworksettings.cpp create mode 100644 src/gui/nmcgui/nmcnetworksettings.h diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index c3a77451aee2d..81b3bcc44e0bf 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -6,6 +6,9 @@ find_package(Qt${QT_MAJOR_VERSION} REQUIRED COMPONENTS Widgets Svg Qml Quick Qui find_package(KF6Archive REQUIRED) find_package(KF6GuiAddons) +#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") + if(CMAKE_BUILD_TYPE MATCHES Debug) add_definitions(-DQT_QML_DEBUG) endif() @@ -260,6 +263,10 @@ set(client_SRCS wizard/wizardproxysettingsdialog.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 diff --git a/src/gui/networksettings.h b/src/gui/networksettings.h index b3b7e5ffc91ea..00b3cbff044a3 100644 --- a/src/gui/networksettings.h +++ b/src/gui/networksettings.h @@ -31,6 +31,11 @@ class NetworkSettings : public QWidget ~NetworkSettings() override; [[nodiscard]] QSize sizeHint() const override; + Ui::NetworkSettings *getUi() const + { + return _ui; + } + private slots: void saveProxySettings(); void saveBWLimitSettings(); diff --git a/src/gui/networksettings.ui b/src/gui/networksettings.ui index 068cc6e8967af..9309096f1e2f9 100644 --- a/src/gui/networksettings.ui +++ b/src/gui/networksettings.ui @@ -337,7 +337,7 @@ Limit to 3/4 of estimated bandwidth - Limit automatically + Limit to 3/4 of estimated bandwidth @@ -460,7 +460,7 @@ Limit to 3/4 of estimated bandwidth - Limit automatically + Limit to 3/4 of estimated bandwidth diff --git a/src/gui/nmcgui/nmcnetworksettings.cpp b/src/gui/nmcgui/nmcnetworksettings.cpp new file mode 100644 index 0000000000000..8891e57fb3184 --- /dev/null +++ b/src/gui/nmcgui/nmcnetworksettings.cpp @@ -0,0 +1,120 @@ +/* +* 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 "nmcgui/nmcnetworksettings.h" +#include "networksettings.h" +#include "ui_networksettings.h" + +#include +#include +#include +#include +#include + +namespace OCC { + +NMCNetworkSettings::NMCNetworkSettings(const AccountPtr &account, QWidget *parent) + : NetworkSettings(account, parent) +{ + setLayout(); +} + +void NMCNetworkSettings::setLayout() +{ + auto *ui = getUi(); + + // + // Proxy Settings + // + ui->proxyGroupBox->setTitle({}); + ui->proxyGroupBox->layout()->removeWidget(ui->manualProxyRadioButton); + ui->proxyGroupBox->layout()->removeWidget(ui->noProxyRadioButton); + ui->proxyGroupBox->layout()->removeWidget(ui->systemProxyRadioButton); + ui->proxyGroupBox->layout()->removeItem(ui->horizontalLayout_7); + ui->proxyGroupBox->layout()->removeItem(ui->horizontalSpacer_2); + ui->proxyGroupBox->layout()->setContentsMargins(16, 16, 16, 16); + ui->proxyGroupBox->setStyleSheet("border-radius: 4px;"); + + auto *proxyLayout = qobject_cast(ui->proxyGroupBox->layout()); + auto *proxyLabel = new QLabel(QCoreApplication::translate("", "PROXY_SETTINGS")); + proxyLabel->setStyleSheet("font-size: 12px; font-weight: bold;"); + + proxyLayout->addWidget(proxyLabel, 0, 0); + proxyLayout->addItem(new QSpacerItem(1, 8, QSizePolicy::Fixed, QSizePolicy::Fixed), 1, 0); + proxyLayout->addWidget(ui->noProxyRadioButton, 2, 0); + proxyLayout->addWidget(ui->systemProxyRadioButton, 3, 0); + proxyLayout->addWidget(ui->manualProxyRadioButton, 4, 0); + proxyLayout->addLayout(ui->horizontalLayout_7, 5, 0); + + ui->horizontalSpacer->changeSize(0, 0, QSizePolicy::Fixed, QSizePolicy::Fixed); + ui->proxyGroupBox->setStyleSheet(ui->proxyGroupBox->styleSheet()); + + // + // Download Bandwidth + // + ui->verticalSpacer_2->changeSize(0, 0, QSizePolicy::Fixed, QSizePolicy::Fixed); + ui->downloadBox->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); + ui->horizontalLayout_3->setSpacing(8); + ui->downloadBox->setTitle({}); + ui->downloadBox->layout()->removeWidget(ui->noDownloadLimitRadioButton); + ui->downloadBox->layout()->removeWidget(ui->autoDownloadLimitRadioButton); + ui->downloadBox->layout()->removeWidget(ui->downloadLimitRadioButton); + ui->downloadBox->layout()->removeItem(ui->horizontalLayout_3); + ui->downloadBox->layout()->setContentsMargins(16, 16, 16, 16); + ui->downloadBox->setStyleSheet("border-radius: 4px;"); + + auto *downLayout = qobject_cast(ui->downloadBox->layout()); + auto *downLabel = new QLabel(QCoreApplication::translate("", "DOWNLOAD_BANDWIDTH")); + downLabel->setStyleSheet("font-size: 12px; font-weight: bold;"); + + downLayout->addWidget(downLabel, 0, 0); + downLayout->addItem(new QSpacerItem(1, 8, QSizePolicy::Fixed, QSizePolicy::Fixed), 1, 0); + downLayout->addWidget(ui->noDownloadLimitRadioButton, 2, 0); + downLayout->addWidget(ui->autoDownloadLimitRadioButton, 3, 0); + downLayout->addWidget(ui->downloadLimitRadioButton, 4, 0); + downLayout->addLayout(ui->horizontalLayout_3, 4, 1); + + ui->downloadLimitRadioButton->setFixedHeight(ui->downloadSpinBox->height()); + ui->downloadBox->setStyleSheet(ui->downloadBox->styleSheet()); + + // + // Upload Bandwidth + // + ui->verticalSpacer_3->changeSize(0, 0, QSizePolicy::Fixed, QSizePolicy::Fixed); + ui->uploadBox->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); + ui->horizontalLayout_4->setSpacing(8); + ui->uploadBox->setTitle({}); + ui->uploadBox->layout()->removeWidget(ui->noUploadLimitRadioButton); + ui->uploadBox->layout()->removeWidget(ui->autoUploadLimitRadioButton); + ui->uploadBox->layout()->removeWidget(ui->uploadLimitRadioButton); + ui->uploadBox->layout()->removeItem(ui->horizontalLayout_4); + ui->uploadBox->layout()->setContentsMargins(16, 16, 16, 16); + ui->uploadBox->setStyleSheet("border-radius: 4px;"); + + auto *upLayout = qobject_cast(ui->uploadBox->layout()); + auto *upLabel = new QLabel(QCoreApplication::translate("", "UPLOAD_BANDWIDTH")); + upLabel->setStyleSheet("font-size: 12px; font-weight: bold;"); + + upLayout->addWidget(upLabel, 0, 0); + upLayout->addItem(new QSpacerItem(1, 8, QSizePolicy::Fixed, QSizePolicy::Fixed), 1, 0); + upLayout->addWidget(ui->noUploadLimitRadioButton, 2, 0); + upLayout->addWidget(ui->autoUploadLimitRadioButton, 3, 0); + upLayout->addWidget(ui->uploadLimitRadioButton, 4, 0); + upLayout->addLayout(ui->horizontalLayout_4, 4, 1); + + ui->uploadLimitRadioButton->setFixedHeight(ui->uploadSpinBox->height()); + ui->uploadBox->setStyleSheet(ui->uploadBox->styleSheet()); +} + +} // namespace OCC diff --git a/src/gui/nmcgui/nmcnetworksettings.h b/src/gui/nmcgui/nmcnetworksettings.h new file mode 100644 index 0000000000000..5fe0fcc004df1 --- /dev/null +++ b/src/gui/nmcgui/nmcnetworksettings.h @@ -0,0 +1,57 @@ +/* + * 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_NETWORKSETTINGSMAGENTA_H +#define MIRALL_NETWORKSETTINGSMAGENTA_H + +#include "networksettings.h" + +QT_BEGIN_NAMESPACE +class QWidget; +QT_END_NAMESPACE + +namespace OCC { + +/** + * @class NMCNetworkSettings + * @ingroup gui + * @brief Derived class for network settings specific to NMC (Magenta) in the ownCloud client. + */ +class NMCNetworkSettings : public NetworkSettings +{ + Q_OBJECT + + public: + /** + * @brief Constructor + * @param account Account pointer used to configure settings + * @param parent Parent widget + */ + explicit NMCNetworkSettings(const AccountPtr &account = {}, QWidget *parent = nullptr); + + /** + * @brief Destructor + */ + ~NMCNetworkSettings() override = default; + + private: + /** + * @brief Initializes and sets the custom layout + */ + void setLayout(); + }; + +} // namespace OCC + +#endif // MIRALL_NETWORKSETTINGSMAGENTA_H \ No newline at end of file From 4a3fa3d47dd8863d042e6905810be74c83115b1e Mon Sep 17 00:00:00 2001 From: memurats Date: Mon, 27 Oct 2025 14:51:33 +0100 Subject: [PATCH 2/5] updated gui cmake file --- src/gui/CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 81b3bcc44e0bf..5440742d96f7c 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -6,9 +6,6 @@ find_package(Qt${QT_MAJOR_VERSION} REQUIRED COMPONENTS Widgets Svg Qml Quick Qui find_package(KF6Archive REQUIRED) find_package(KF6GuiAddons) -#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") - if(CMAKE_BUILD_TYPE MATCHES Debug) add_definitions(-DQT_QML_DEBUG) endif() @@ -26,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 From 4e724dc0013dc688abbd4e02ae7bb68aed92b6fa Mon Sep 17 00:00:00 2001 From: memurats Date: Wed, 29 Oct 2025 08:39:45 +0100 Subject: [PATCH 3/5] added network settings button --- src/gui/settingsdialog.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/gui/settingsdialog.cpp b/src/gui/settingsdialog.cpp index dc6ab9cb802ca..8cf62730f63b3 100644 --- a/src/gui/settingsdialog.cpp +++ b/src/gui/settingsdialog.cpp @@ -11,6 +11,7 @@ #include "theme.h" #include "generalsettings.h" #include "networksettings.h" +#include "nmcgui/nmcnetworksettings.h" #include "accountsettings.h" #include "configfile.h" #include "progressdispatcher.h" @@ -126,7 +127,14 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent) connect(AccountManager::instance(), &AccountManager::capabilitiesChanged, generalSettings, &GeneralSettings::loadUpdateChannelsList); #endif + QAction *networkAction = createColorAwareAction(QLatin1String(":/client/theme/network.svg"), tr("Network")); + _actionGroup->addAction(networkAction); + _toolBar->addAction(networkAction); + auto *networkSettings = new NMCNetworkSettings; + _ui->stack->addWidget(networkSettings); + _actionGroupWidgets.insert(generalAction, generalSettings); + _actionGroupWidgets.insert(networkAction, networkSettings); const auto accountsList = AccountManager::instance()->accounts(); for (const auto &account : accountsList) { From c8b9f8a49425ac6867f338ec28f4503cbe9c90b2 Mon Sep 17 00:00:00 2001 From: memurats Date: Wed, 29 Oct 2025 13:23:59 +0100 Subject: [PATCH 4/5] fix crash --- src/gui/nmcgui/nmcnetworksettings.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/gui/nmcgui/nmcnetworksettings.cpp b/src/gui/nmcgui/nmcnetworksettings.cpp index 8891e57fb3184..ec4535477e21c 100644 --- a/src/gui/nmcgui/nmcnetworksettings.cpp +++ b/src/gui/nmcgui/nmcnetworksettings.cpp @@ -41,8 +41,10 @@ void NMCNetworkSettings::setLayout() ui->proxyGroupBox->layout()->removeWidget(ui->manualProxyRadioButton); ui->proxyGroupBox->layout()->removeWidget(ui->noProxyRadioButton); ui->proxyGroupBox->layout()->removeWidget(ui->systemProxyRadioButton); - ui->proxyGroupBox->layout()->removeItem(ui->horizontalLayout_7); - ui->proxyGroupBox->layout()->removeItem(ui->horizontalSpacer_2); + + delete ui->horizontalLayout_7; + delete ui->horizontalSpacer_2; + ui->proxyGroupBox->layout()->setContentsMargins(16, 16, 16, 16); ui->proxyGroupBox->setStyleSheet("border-radius: 4px;"); @@ -55,7 +57,6 @@ void NMCNetworkSettings::setLayout() proxyLayout->addWidget(ui->noProxyRadioButton, 2, 0); proxyLayout->addWidget(ui->systemProxyRadioButton, 3, 0); proxyLayout->addWidget(ui->manualProxyRadioButton, 4, 0); - proxyLayout->addLayout(ui->horizontalLayout_7, 5, 0); ui->horizontalSpacer->changeSize(0, 0, QSizePolicy::Fixed, QSizePolicy::Fixed); ui->proxyGroupBox->setStyleSheet(ui->proxyGroupBox->styleSheet()); @@ -67,10 +68,13 @@ void NMCNetworkSettings::setLayout() ui->downloadBox->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); ui->horizontalLayout_3->setSpacing(8); ui->downloadBox->setTitle({}); + ui->downloadBox->layout()->removeWidget(ui->noDownloadLimitRadioButton); ui->downloadBox->layout()->removeWidget(ui->autoDownloadLimitRadioButton); ui->downloadBox->layout()->removeWidget(ui->downloadLimitRadioButton); - ui->downloadBox->layout()->removeItem(ui->horizontalLayout_3); + + delete ui->horizontalLayout_3; + ui->downloadBox->layout()->setContentsMargins(16, 16, 16, 16); ui->downloadBox->setStyleSheet("border-radius: 4px;"); @@ -83,7 +87,6 @@ void NMCNetworkSettings::setLayout() downLayout->addWidget(ui->noDownloadLimitRadioButton, 2, 0); downLayout->addWidget(ui->autoDownloadLimitRadioButton, 3, 0); downLayout->addWidget(ui->downloadLimitRadioButton, 4, 0); - downLayout->addLayout(ui->horizontalLayout_3, 4, 1); ui->downloadLimitRadioButton->setFixedHeight(ui->downloadSpinBox->height()); ui->downloadBox->setStyleSheet(ui->downloadBox->styleSheet()); @@ -95,10 +98,13 @@ void NMCNetworkSettings::setLayout() ui->uploadBox->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); ui->horizontalLayout_4->setSpacing(8); ui->uploadBox->setTitle({}); + ui->uploadBox->layout()->removeWidget(ui->noUploadLimitRadioButton); ui->uploadBox->layout()->removeWidget(ui->autoUploadLimitRadioButton); ui->uploadBox->layout()->removeWidget(ui->uploadLimitRadioButton); - ui->uploadBox->layout()->removeItem(ui->horizontalLayout_4); + + delete ui->horizontalLayout_4; + ui->uploadBox->layout()->setContentsMargins(16, 16, 16, 16); ui->uploadBox->setStyleSheet("border-radius: 4px;"); @@ -111,7 +117,6 @@ void NMCNetworkSettings::setLayout() upLayout->addWidget(ui->noUploadLimitRadioButton, 2, 0); upLayout->addWidget(ui->autoUploadLimitRadioButton, 3, 0); upLayout->addWidget(ui->uploadLimitRadioButton, 4, 0); - upLayout->addLayout(ui->horizontalLayout_4, 4, 1); ui->uploadLimitRadioButton->setFixedHeight(ui->uploadSpinBox->height()); ui->uploadBox->setStyleSheet(ui->uploadBox->styleSheet()); From 7f241b188ab4acc054242a394dee0f457334a14a Mon Sep 17 00:00:00 2001 From: memurats Date: Fri, 14 Nov 2025 13:31:36 +0100 Subject: [PATCH 5/5] network settings layout --- src/gui/networksettings.cpp | 27 +++++++++++++++++++++++++++ src/gui/networksettings.h | 1 + src/gui/networksettings.ui | 19 ++++++++++++++----- src/gui/settingsdialog.cpp | 8 -------- 4 files changed, 42 insertions(+), 13 deletions(-) diff --git a/src/gui/networksettings.cpp b/src/gui/networksettings.cpp index eb73c7f4c3036..6901c9be8e318 100644 --- a/src/gui/networksettings.cpp +++ b/src/gui/networksettings.cpp @@ -17,6 +17,8 @@ #include #include #include +#include +#include #include namespace OCC { @@ -28,6 +30,11 @@ NetworkSettings::NetworkSettings(const AccountPtr &account, QWidget *parent) { _ui->setupUi(this); + _ui->gridLayout_3->setContentsMargins(8, 8, 8, 0); + + setAttribute(Qt::WA_OpaquePaintEvent, true); + setAutoFillBackground(false); + _ui->manualSettings->setVisible(_ui->manualProxyRadioButton->isChecked()); _ui->proxyGroupBox->setVisible(!Theme::instance()->doNotUseProxy()); @@ -276,5 +283,25 @@ void NetworkSettings::checkAccountLocalhost() _ui->labelLocalhost->setVisible(visible); } +void NetworkSettings::paintEvent(QPaintEvent *event) +{ + QPainter painter(this); + painter.setRenderHint(QPainter::Antialiasing); + + const int radius = 4; + QRect rect(0, 0, width(), height()); + + QPainterPath path; + path.addRoundedRect(rect, radius, radius); + + QPalette palette = this->palette(); + QColor backgroundColor = palette.color(QPalette::Window); + QColor baseColor = palette.color(QPalette::Base); + + painter.fillRect(rect, backgroundColor); + painter.fillPath(path, baseColor); + + QWidget::paintEvent(event); +} } // namespace OCC diff --git a/src/gui/networksettings.h b/src/gui/networksettings.h index 00b3cbff044a3..48c83cf99332c 100644 --- a/src/gui/networksettings.h +++ b/src/gui/networksettings.h @@ -47,6 +47,7 @@ private slots: protected: void showEvent(QShowEvent *event) override; + void paintEvent(QPaintEvent *event) override; private: void loadProxySettings(); diff --git a/src/gui/networksettings.ui b/src/gui/networksettings.ui index 9309096f1e2f9..e7fe931703564 100644 --- a/src/gui/networksettings.ui +++ b/src/gui/networksettings.ui @@ -44,7 +44,13 @@ Proxy Settings + + true + + + 8 + @@ -304,15 +310,18 @@ Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignTop + + true + - 9 + 8 0 - 6 + 8 @@ -402,17 +411,17 @@ Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignTop - false + true - 9 + 8 0 - 6 + 8 diff --git a/src/gui/settingsdialog.cpp b/src/gui/settingsdialog.cpp index 8cf62730f63b3..dc6ab9cb802ca 100644 --- a/src/gui/settingsdialog.cpp +++ b/src/gui/settingsdialog.cpp @@ -11,7 +11,6 @@ #include "theme.h" #include "generalsettings.h" #include "networksettings.h" -#include "nmcgui/nmcnetworksettings.h" #include "accountsettings.h" #include "configfile.h" #include "progressdispatcher.h" @@ -127,14 +126,7 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent) connect(AccountManager::instance(), &AccountManager::capabilitiesChanged, generalSettings, &GeneralSettings::loadUpdateChannelsList); #endif - QAction *networkAction = createColorAwareAction(QLatin1String(":/client/theme/network.svg"), tr("Network")); - _actionGroup->addAction(networkAction); - _toolBar->addAction(networkAction); - auto *networkSettings = new NMCNetworkSettings; - _ui->stack->addWidget(networkSettings); - _actionGroupWidgets.insert(generalAction, generalSettings); - _actionGroupWidgets.insert(networkAction, networkSettings); const auto accountsList = AccountManager::instance()->accounts(); for (const auto &account : accountsList) {