Merge pull request #9312 from Rello/codex/rebuild-settings-screen-with-left-menu-m92x67

feat: adjust settings sidebar layout
This commit is contained in:
Rello
2026-01-14 07:17:58 +07:00
committed by GitHub
2 changed files with 36 additions and 14 deletions

View File

@ -49,7 +49,7 @@ public:
bool checkAccountExists(bool openSettings);
static void raiseDialog(QWidget *raiseWidget);
static QSize settingsDialogSize() { return {720, 500}; }
static QSize settingsDialogSize() { return {680, 500}; }
void setupOverlayIcons();
#ifdef WITH_LIBCLOUDPROVIDERS
void setupCloudProviders();

View File

@ -38,9 +38,9 @@ namespace {
const QString TOOLBAR_CSS()
{
return QStringLiteral("QToolBar { background: %1; margin: 0; padding: 0; border: none; spacing: 0; } "
"QToolBar QToolButton { background: %1; border: none; margin: 2px 8px; padding: 6px 10px; font-size: 14px; border-radius: 10px; } "
"QToolBar QAbstractButton { background: %1; border: none; margin: 2px 8px; padding: 6px 10px; font-size: 14px; border-radius: 10px; color: #111111; } "
"QToolBar QToolBarExtension { padding:0; } "
"QToolBar QToolButton:checked { background: %3; color: %4; }");
"QToolBar QAbstractButton:checked { background: %3; color: %4; }");
}
const float buttonSizeRatio = 1.618f; // golden ratio
@ -64,7 +64,7 @@ QString shortDisplayNameForSettings(OCC::Account *account, int width)
host = fm.elidedText(host, Qt::ElideMiddle, width);
user = fm.elidedText(user, Qt::ElideRight, width);
}
return QStringLiteral("<span style=\"font-weight:600; font-size:13px;\">%1</span><br>"
return QStringLiteral("<span style=\"font-weight:600; font-size:13px;\">%1</span><br/>"
"<span style=\"font-size:11px;\">%2</span>")
.arg(user.toHtmlEscaped(), host.toHtmlEscaped());
}
@ -88,7 +88,7 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent)
_toolBar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
_toolBar->setOrientation(Qt::Vertical);
_toolBar->setMovable(false);
_toolBar->setMinimumWidth(220);
_toolBar->setMinimumWidth(260);
_toolBar->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
auto *sidebarContainer = new QWidget(this);
sidebarContainer->setObjectName(QLatin1String("settings_sidebar"));
@ -100,6 +100,7 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent)
sidebarScroll->setFrameShape(QFrame::NoFrame);
sidebarScroll->setWidgetResizable(true);
sidebarScroll->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
sidebarScroll->viewport()->setAutoFillBackground(false);
sidebarScroll->setWidget(_toolBar);
sidebarLayout->addWidget(sidebarScroll);
_ui->mainLayout->insertWidget(0, sidebarContainer);
@ -139,7 +140,7 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent)
_actionGroup->addAction(generalAction);
_toolBar->addAction(generalAction);
auto *accountSpacer = new QWidget(this);
accountSpacer->setFixedHeight(16);
accountSpacer->setFixedHeight(24);
_toolBar->addWidget(accountSpacer);
auto *generalSettings = new GeneralSettings;
_ui->stack->addWidget(generalSettings);
@ -181,14 +182,18 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent)
cfg.restoreGeometry(this);
setStyleSheet(QStringLiteral(
"#Settings { background: #f2f2f2; }"
"#settings_sidebar, #settings_content { background: #e1e1e1; border-radius: 12px; }"
"#settings_sidebar { background: #e1e1e1; border-radius: 12px; }"
"#settings_content { background: transparent; }"
"#settings_sidebar_scroll { background: transparent; }"
"#settings_sidebar_scroll > QWidget { background: transparent; }"
"#generalGroupBox, #advancedGroupBox, #aboutAndUpdatesGroupBox,"
"#accountStatusPanel, #accountStoragePanel, #accountTabsPanel {"
" background: #e1e1e1; border-radius: 10px; border: none; }"
"#generalGroupBox, #advancedGroupBox, #aboutAndUpdatesGroupBox {"
" margin-top: 20px; padding: 12px; }"
" margin-top: 22px; padding: 12px; }"
"#generalGroupBox::title, #advancedGroupBox::title, #aboutAndUpdatesGroupBox::title {"
" subcontrol-origin: margin; left: 12px; top: 0px; padding: 0 4px; font-weight: 600; }"
" subcontrol-origin: margin; subcontrol-position: top left; left: 12px; top: -12px;"
" padding: 0 4px; font-weight: 600; }"
"#accountStatusPanel, #accountStoragePanel, #accountTabsPanel { padding: 12px; }"));
}
@ -371,14 +376,14 @@ void SettingsDialog::customizeStyle()
QString highlightColor(palette().highlight().color().name());
QString highlightTextColor(QStringLiteral("#ffffff"));
QString dark(palette().dark().color().name());
QString background(palette().base().color().name());
QString background(QStringLiteral("#e1e1e1"));
_toolBar->setStyleSheet(TOOLBAR_CSS().arg(background, dark, highlightColor, highlightTextColor));
const auto &allActions = _actionGroup->actions();
for (const auto a : allActions) {
QIcon icon = Theme::createColorAwareIcon(a->property("iconPath").toString(), palette());
a->setIcon(icon);
auto *btn = qobject_cast<QToolButton *>(_toolBar->widgetForAction(a));
auto *btn = qobject_cast<QAbstractButton *>(_toolBar->widgetForAction(a));
if (btn)
btn->setIcon(icon);
}
@ -403,14 +408,31 @@ public:
return nullptr;
}
auto *btn = new QToolButton(parent);
auto *btn = new QPushButton(parent);
QString objectName = QLatin1String("settingsdialog_toolbutton_");
objectName += text();
btn->setObjectName(objectName);
btn->setDefaultAction(this);
btn->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
btn->setFlat(true);
btn->setCheckable(true);
btn->setChecked(isChecked());
btn->setIcon(icon());
auto updateText = [this, btn](bool checked) {
const auto color = checked ? QStringLiteral("#ffffff") : QStringLiteral("#111111");
btn->setText(QStringLiteral("<span style=\"color:%1;\">%2</span>").arg(color, text()));
};
updateText(isChecked());
btn->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed);
btn->setStyleSheet(QStringLiteral("text-align: left;"));
connect(btn, &QPushButton::clicked, this, [this](bool checked) {
if (isCheckable()) {
setChecked(checked);
}
trigger();
});
connect(this, &QAction::toggled, btn, &QPushButton::setChecked);
connect(this, &QAction::toggled, btn, updateText);
return btn;
}
};