Skip to content

Commit

Permalink
Merge #271 [stable-3.13] nmc/2003-Main_Settings_Dialog
Browse files Browse the repository at this point in the history
  • Loading branch information
memurats committed Jul 17, 2024
2 parents a83afe9 + ec6f344 commit d85cf39
Show file tree
Hide file tree
Showing 7 changed files with 212 additions and 24 deletions.
89 changes: 89 additions & 0 deletions src/gui/nmcgui/nmcsettingsdialog.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
/*
* 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 "QtWidgets/qboxlayout.h"
#include "QtWidgets/qlabel.h"
#include "QtWidgets/qtoolbar.h"
#include "settingsdialog.h"

namespace OCC {

NMCSettingsDialog::NMCSettingsDialog(ownCloudGui *gui, QWidget *parent)
: SettingsDialog(gui, parent)
{
setLayout();

//The window has no background widget, use palette
QPalette palette;
palette.setColor(QPalette::Window, QColor("#F3f3f3"));
setPalette(palette);

setFixedSize(750,760);

getToolBar()->setFixedHeight(91); ///75px button height + 8 + 8 margin top and bottom
getToolBar()->setStyleSheet("QToolBar{background: #f3f3f3; background-color: #f3f3f3; border-width: 0px; border-color: none;}");
getToolBar()->setContentsMargins(8,0,8,0); //Left margin not accepted, Qt bug?
}

void NMCSettingsDialog::slotAccountAvatarChanged()
{
//Intercept the base class slot, so the round avatar is not set. (dont pass to base class)
//Fix Account button size, for ech new created account
fixAccountButton();
}

void OCC::NMCSettingsDialog::setLayout() const
{
//Fix network and general settings button size
const auto actions = getToolBar()->actions();
for(auto *action : actions)
{
if((action->text() == QCoreApplication::translate("OCC::SettingsDialog","General") || action->text() == QCoreApplication::tr("General")) ||
(action->text() == QCoreApplication::translate("OCC::SettingsDialog","Network") || action->text() == QCoreApplication::tr("Network")) ||
(action->text() == QCoreApplication::translate("OCC::SettingsDialog","Account") || action->text() == QCoreApplication::tr("Account")))
{
auto *widget = getToolBar()->widgetForAction(action);
if(widget)
{
widget->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
widget->setFixedSize(75, 75);
widget->setStyleSheet(
"QToolButton { border: none; background-color: #f3f3f3; border-radius: 4px; font-size: 13px; padding: 8px;}"
"QToolButton:hover { background-color: #e5e5e5; }"
);
}
}
}

//Fix initial account button size and stylesheet
fixAccountButton();
}

void NMCSettingsDialog::fixAccountButton() const
{
auto action = getToolBar()->actions().at(0);
auto *widget = getToolBar()->widgetForAction(action);
if(widget)
{
widget->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
widget->setFixedSize(128, 75);
widget->setStyleSheet(
"QToolButton { border: none; background-color: #f3f3f3; border-radius: 4px; font-size: 13px; padding: 8px;}"
"QToolButton:hover { background-color: #e5e5e5; }"
);
}
}

} // namespace OCC
70 changes: 70 additions & 0 deletions src/gui/nmcgui/nmcsettingsdialog.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
/*
* 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();

// NMCGuiInterface interface
protected:
/**
* @brief Sets the layout for the NMCSettingsDialog
*/
void setLayout() const;

private:
/**
* @brief Fixes the appearance of the account button
*/
void fixAccountButton() 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 @@ -25,6 +25,7 @@
#include "guiutility.h"
#include "logbrowser.h"
#include "logger.h"
#include "nmcgui/nmcsettingsdialog.h"
#include "openfilemanager.h"
#include "owncloudsetupwizard.h"
#include "progressdispatcher.h"
Expand Down Expand Up @@ -597,7 +598,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);
_settingsDialog->show();
}
Expand Down
35 changes: 24 additions & 11 deletions src/gui/settingsdialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
*/

#include "settingsdialog.h"
#include "QtWidgets/qmainwindow.h"
#include "ui_settingsdialog.h"

#include "folderman.h"
Expand Down Expand Up @@ -75,7 +76,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 @@ -128,6 +129,13 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent)
auto *generalSettings = new NMCGeneralSettings;
_ui->stack->addWidget(generalSettings);

//NMC customization
//Adds space between general and network actions
auto *spacer2 = new QWidget();
spacer2->setFixedWidth(8);
spacer2->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
_toolBar->addWidget(spacer2);

// Connect styleChanged events to our widgets, so they can adapt (Dark-/Light-Mode switching)
connect(this, &SettingsDialog::styleChanged, generalSettings, &GeneralSettings::slotStyleChanged);

Expand Down Expand Up @@ -241,7 +249,7 @@ void SettingsDialog::accountAdded(AccountState *s)
const auto accountAction = createColorAwareAction(QLatin1String(":/client/theme/account.svg"), actionText);

if (!brandingSingleAccount) {
accountAction->setToolTip(s->account()->displayName());
accountAction->setToolTip(shortDisplayNameForSettings(s->account().data(), static_cast<int>(height * buttonSizeRatio)));
accountAction->setIconText(shortDisplayNameForSettings(s->account().data(), static_cast<int>(height * buttonSizeRatio)));
}

Expand Down Expand Up @@ -301,6 +309,7 @@ void SettingsDialog::slotAccountDisplayNameChanged()
action->setText(displayName);
auto height = _toolBar->sizeHint().height();
action->setIconText(shortDisplayNameForSettings(account, static_cast<int>(height * buttonSizeRatio)));
action->setToolTip(shortDisplayNameForSettings(account, static_cast<int>(height * buttonSizeRatio)));
}
}
}
Expand Down Expand Up @@ -346,13 +355,15 @@ void SettingsDialog::customizeStyle()
QString background(palette().base().color().name());
_toolBar->setStyleSheet(TOOLBAR_CSS().arg(background, dark, highlightColor, highlightTextColor));

Q_FOREACH (QAction *a, _actionGroup->actions()) {
QIcon icon = Theme::createColorAwareIcon(a->property("iconPath").toString(), palette());
a->setIcon(icon);
auto *btn = qobject_cast<QToolButton *>(_toolBar->widgetForAction(a));
if (btn)
btn->setIcon(icon);
}
//NMC cusomization, in Windows its setting the icon color to white?

// Q_FOREACH (QAction *a, _actionGroup->actions()) {
// QIcon icon = Theme::createColorAwareIcon(a->property("iconPath").toString(), palette());
// a->setIcon(icon);
// auto *btn = qobject_cast<QToolButton *>(_toolBar->widgetForAction(a));
// if (btn)
// btn->setIcon(icon);
// }
}

class ToolButtonAction : public QWidgetAction
Expand Down Expand Up @@ -399,8 +410,10 @@ QAction *SettingsDialog::createActionWithIcon(const QIcon &icon, const QString &
QAction *SettingsDialog::createColorAwareAction(const QString &iconPath, const QString &text)
{
// all buttons must have the same size in order to keep a good layout
QIcon coloredIcon = Theme::createColorAwareIcon(iconPath, palette());
return createActionWithIcon(coloredIcon, text, iconPath);

//NMC cusomization, in Windows its setting the icon color to white?
//QIcon coloredIcon = Theme::createColorAwareIcon(iconPath, palette());
return createActionWithIcon(QIcon(iconPath), text, iconPath);
}

} // namespace OCC
10 changes: 8 additions & 2 deletions src/gui/settingsdialog.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,11 +53,16 @@ class SettingsDialog : public QDialog

QWidget* currentPage();

QToolBar *getToolBar() const
{
return _toolBar;
}

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

signals:
Expand All @@ -74,9 +79,10 @@ private slots:
void accountAdded(OCC::AccountState *);
void accountRemoved(OCC::AccountState *);

private:
protected:
void customizeStyle();

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

Expand Down
21 changes: 12 additions & 9 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.

0 comments on commit d85cf39

Please sign in to comment.