Skip to content
Open
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
74 changes: 74 additions & 0 deletions src/gui/nmcgui/nmcsettingsdialog.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
/*
* 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 "nmcsettingsdialog.h"
#include "settingsdialog.h"

#include <QScrollArea>
#include <QToolBar>

namespace OCC {

NMCSettingsDialog::NMCSettingsDialog(ownCloudGui *gui, QWidget *parent)
: SettingsDialog(gui, parent)
{
fixAccountButton();
fixNavigationBackground();
}

void NMCSettingsDialog::slotAccountAvatarChanged()
{
fixAccountButton();
}

void NMCSettingsDialog::fixAccountButton() const
{
auto *toolbar = getToolBar();

Check warning on line 37 in src/gui/nmcgui/nmcsettingsdialog.cpp

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Make the type of this variable a pointer-to-const. The current type of "toolbar" is "class QToolBar *".

See more on https://sonarcloud.io/project/issues?id=nextmcloud_desktop&issues=AZ6DRbMI1UfC3XlEd0ur&open=AZ6DRbMI1UfC3XlEd0ur&pullRequest=434
if (!toolbar) {
return;
}

const auto actions = toolbar->actions();
if (actions.isEmpty()) {
return;
}
}

void NMCSettingsDialog::fixNavigationBackground() const
{
auto *navigationScroll = findChild<QScrollArea *>(QStringLiteral("settings_navigation_scroll"));
if (!navigationScroll) {
return;
}

navigationScroll->setAttribute(Qt::WA_StyledBackground, true);
navigationScroll->setStyleSheet(QStringLiteral(
"QScrollArea#settings_navigation_scroll {"
" background: palette(light);"
" border-radius: 10px;"
" border: none;"
" padding: 4px;"
"}"
"QScrollArea#settings_navigation_scroll > QWidget > QWidget {"
" background: transparent;"
"}"
));

if (navigationScroll->viewport()) {
navigationScroll->viewport()->setAutoFillBackground(false);
navigationScroll->viewport()->setStyleSheet(QStringLiteral("background: transparent;"));
}
}

} // namespace OCC
69 changes: 69 additions & 0 deletions src/gui/nmcgui/nmcsettingsdialog.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
/*
* 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_SETTINGSDIALOGMAGENTA_H
#define MIRALL_SETTINGSDIALOGMAGENTA_H

#include <settingsdialog.h>

namespace OCC {

/**
* @brief The NMCSettingsDialog class
*
* This class represents the settings dialog specific to the Magenta theme.
* It inherits from SettingsDialog and provides additional functionalities
* or customizations related to the Magenta theme.
*
* @ingroup gui
*/
class NMCSettingsDialog : public SettingsDialog
{
Q_OBJECT

public:
/**
* @brief Constructor for NMCSettingsDialog
*
* @param gui Pointer to the ownCloudGui instance.
* @param parent Pointer to the parent QWidget (default is nullptr).
*/
explicit NMCSettingsDialog(ownCloudGui *gui, QWidget *parent = nullptr);

/**
* @brief Destructor for NMCSettingsDialog
*/
~NMCSettingsDialog() = default;

public slots:
/**
* @brief Slot for handling changes in the account avatar
*/
void slotAccountAvatarChanged();

Check warning on line 53 in src/gui/nmcgui/nmcsettingsdialog.h

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Annotate this function with "override" or "final".

See more on https://sonarcloud.io/project/issues?id=nextmcloud_desktop&issues=AZ5kibNDZRembQO_yQYs&open=AZ5kibNDZRembQO_yQYs&pullRequest=434

// NMCGuiInterface interface

private:
/**
* @brief Fixes the appearance of the account button
*/
void fixAccountButton() const;
/**
* @brief Fixes the appearance of the navigation background
*/
void fixNavigationBackground() const;
};

} // namespace OCC
#endif // MIRALL_SETTINGSDIALOGMAGENTA_H
3 changes: 2 additions & 1 deletion src/gui/owncloudgui.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
#include "owncloudsetupwizard.h"
#include "progressdispatcher.h"
#include "settingsdialog.h"
#include "nmcgui/nmcsettingsdialog.h"
#include "theme.h"
#include "wheelhandler.h"
#include "syncconflictsmodel.h"
Expand Down Expand Up @@ -621,7 +622,7 @@ void ownCloudGui::slotShowGuiMessage(const QString &title, const QString &messag
void ownCloudGui::slotShowSettings()
{
if (_settingsDialog.isNull()) {
_settingsDialog = new SettingsDialog(this);
_settingsDialog = new NMCSettingsDialog(this);
_settingsDialog->setAttribute(Qt::WA_DeleteOnClose, true);

#ifdef Q_OS_MACOS
Expand Down
11 changes: 6 additions & 5 deletions src/gui/settingsdialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -92,14 +92,14 @@ class CurrentPageSizeStackedWidget : public QStackedWidget

constexpr auto TOOLBAR_CSS = QLatin1String(
"QToolBar { background: transparent; margin: 0; padding: 0; border: none; spacing: 0; } "
"QToolBar QToolButton { background: transparent; border: none; margin: 0; padding: 8px 12px; font-size: 14px; border-radius: 8px; } "
"QToolBar QToolButton { background: transparent; border: none; margin: 0 0 8px; padding: 8px 12px; font-size: 14px; border-radius: 8px; } "
"QToolBar QToolBarExtension { padding: 0; } "
"QToolBar QToolButton:checked { background: palette(highlight); color: palette(highlighted-text); }"
);

const float buttonSizeRatio = 1.618f; // golden ratio
constexpr auto settingsDialogDefaultWidth = 950;
constexpr auto settingsDialogDefaultHeight = 500;
constexpr auto settingsDialogDefaultWidth = 1024;
constexpr auto settingsDialogDefaultHeight = 666;

/** display name with two lines that is displayed in the settings
* If width is bigger than 0, the string will be ellided so it does not exceed that width
Expand All @@ -119,7 +119,7 @@ QString shortDisplayNameForSettings(OCC::Account *account, int width)
host = fm.elidedText(host, Qt::ElideMiddle, width);
user = fm.elidedText(user, Qt::ElideRight, width);
}
return QStringLiteral("%1\n%2").arg(user, host);
return QStringLiteral("%1").arg(user);
}
}

Expand Down Expand Up @@ -410,6 +410,7 @@ void SettingsDialog::slotAccountDisplayNameChanged()
QString displayName = account->displayName();
action->setText(displayName);
auto height = _toolBar->sizeHint().height();
action->setToolTip(shortDisplayNameForSettings(account, static_cast<int>(height * buttonSizeRatio)));
action->setIconText(shortDisplayNameForSettings(account, static_cast<int>(height * buttonSizeRatio)));
}
}
Expand Down Expand Up @@ -550,7 +551,7 @@ void SettingsDialog::setupUi()
setLayout(mainLayout);

_toolBar = new QToolBar;
_toolBar->setIconSize(QSize(32, 32));
_toolBar->setIconSize(QSize(24, 24));
_toolBar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
_toolBar->setOrientation(Qt::Vertical);
_toolBar->setMovable(false);
Expand Down
10 changes: 8 additions & 2 deletions src/gui/settingsdialog.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,13 +43,18 @@ class SettingsDialog : public QDialog

QWidget* currentPage();

QToolBar *getToolBar() const
{
return _toolBar;
}

public slots:
void showFirstPage();
void showAccount(OCC::AccountState *account);
void setInitialAccount(OCC::AccountState *account);
void showIssuesList(OCC::AccountState *account);
void slotSwitchPage(QAction *action);
void slotAccountAvatarChanged();
virtual void slotAccountAvatarChanged();
void slotAccountDisplayNameChanged();

signals:
Expand All @@ -67,11 +72,12 @@ private slots:
void accountAdded(OCC::AccountState *);
void accountRemoved(OCC::AccountState *);

private:
protected:
void customizeStyle();
void requestStyleUpdate();
void updateAccountAvatar(const Account *account);

private:
QAction *createColorAwareAction(const QString &iconName, const QString &fileName);
QAction *createActionWithIcon(const QIcon &icon, const QString &text, const QString &iconPath = QString());

Expand Down
12 changes: 6 additions & 6 deletions theme/account.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
8 changes: 7 additions & 1 deletion theme/network.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
12 changes: 6 additions & 6 deletions theme/settings.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.