fix(gui): UI appearance polish — Wayland scaling, menu icon size pref, dialog cleanup
Some checks failed
Build and Test / build (pull_request) Failing after 13m13s
Some checks failed
Build and Test / build (pull_request) Failing after 13m13s
- Fix hazy text on Wayland by setting QT_SCALE_FACTOR_ROUNDING_POLICY=RoundPreferFloor and QT_ENABLE_HIGHDPI_SCALING=1 in deb and AppImage launchers; remove forced QT_QPA_PLATFORM=xcb from AppImage to allow native Wayland (fixes #33) - Add menu icon size preference selector (Small/Medium/Large/Extra large) in General preferences, applied via QMenu stylesheet at startup and on save (fixes #46) - Replace verbose theme customization banner with concise 'Kindred Create Theme' label in UI preferences; split Overlay group into 'Panel Visibility' and 'Overlay Interaction' sections (fixes #35) - Remove Addon Manager branding label from General preferences, change recent file list default from 4 to 10 (fixes #36)
This commit is contained in:
@@ -28,6 +28,7 @@
|
||||
#include <QApplication>
|
||||
#include <QFileDialog>
|
||||
#include <QLocale>
|
||||
#include <QMenu>
|
||||
#include <QMessageBox>
|
||||
#include <QString>
|
||||
#include <algorithm>
|
||||
@@ -96,7 +97,6 @@ DlgSettingsGeneral::DlgSettingsGeneral(QWidget* parent)
|
||||
ui->SaveNewPreferencePack->setEnabled(false);
|
||||
ui->ManagePreferencePacks->setEnabled(false);
|
||||
ui->themesCombobox->setEnabled(false);
|
||||
ui->moreThemesLabel->setEnabled(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -121,7 +121,6 @@ DlgSettingsGeneral::DlgSettingsGeneral(QWidget* parent)
|
||||
this,
|
||||
&DlgSettingsGeneral::onThemeChanged
|
||||
);
|
||||
connect(ui->moreThemesLabel, &QLabel::linkActivated, this, &DlgSettingsGeneral::onLinkActivated);
|
||||
}
|
||||
|
||||
// If there are any saved config file backs, show the revert button, otherwise hide it:
|
||||
@@ -147,9 +146,6 @@ DlgSettingsGeneral::DlgSettingsGeneral(QWidget* parent)
|
||||
const auto visible = UnitsApi::isMultiUnitLength();
|
||||
ui->comboBox_FracInch->setVisible(visible);
|
||||
ui->fractionalInchLabel->setVisible(visible);
|
||||
ui->moreThemesLabel->setEnabled(
|
||||
Application::Instance->commandManager().getCommandByName("Std_AddonMgr") != nullptr
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -166,7 +162,7 @@ void DlgSettingsGeneral::setRecentFileSize()
|
||||
auto recent = getMainWindow()->findChild<RecentFilesAction*>(QLatin1String("recentFiles"));
|
||||
if (recent) {
|
||||
ParameterGrp::handle hGrp = WindowParameter::getDefaultParameter()->GetGroup("RecentFiles");
|
||||
recent->resizeList(hGrp->GetInt("RecentFiles", 4));
|
||||
recent->resizeList(hGrp->GetInt("RecentFiles", 10));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -264,6 +260,11 @@ void DlgSettingsGeneral::saveSettings()
|
||||
hGrp->SetInt("ToolbarIconSize", pixel);
|
||||
getMainWindow()->setIconSize(QSize(pixel, pixel));
|
||||
|
||||
QVariant menuSize = ui->menuIconSize->itemData(ui->menuIconSize->currentIndex());
|
||||
int menuPixel = menuSize.toInt();
|
||||
hGrp->SetInt("MenuIconSize", menuPixel);
|
||||
applyMenuIconSize(menuPixel);
|
||||
|
||||
int blinkTime {hGrp->GetBool("EnableCursorBlinking", true) ? -1 : 0};
|
||||
qApp->setCursorFlashTime(blinkTime);
|
||||
|
||||
@@ -348,6 +349,7 @@ void DlgSettingsGeneral::loadSettings()
|
||||
}
|
||||
|
||||
addIconSizes(getCurrentIconSize());
|
||||
addMenuIconSizes(getCurrentMenuIconSize());
|
||||
|
||||
// TreeMode combobox setup.
|
||||
loadDockWindowVisibility();
|
||||
@@ -395,8 +397,9 @@ void DlgSettingsGeneral::resetSettingsToDefaults()
|
||||
hGrp = WindowParameter::getDefaultParameter()->GetGroup("General");
|
||||
// reset "Language" parameter
|
||||
hGrp->RemoveASCII("Language");
|
||||
// reset "ToolbarIconSize" parameter
|
||||
// reset "ToolbarIconSize" and "MenuIconSize" parameters
|
||||
hGrp->RemoveInt("ToolbarIconSize");
|
||||
hGrp->RemoveInt("MenuIconSize");
|
||||
|
||||
// finally reset all the parameters associated to Gui::Pref* widgets
|
||||
PreferencePage::resetSettingsToDefaults();
|
||||
@@ -534,6 +537,63 @@ void DlgSettingsGeneral::translateIconSizes()
|
||||
}
|
||||
}
|
||||
|
||||
int DlgSettingsGeneral::getCurrentMenuIconSize() const
|
||||
{
|
||||
ParameterGrp::handle hGrp = WindowParameter::getDefaultParameter()->GetGroup("General");
|
||||
return hGrp->GetInt("MenuIconSize", 24);
|
||||
}
|
||||
|
||||
void DlgSettingsGeneral::addMenuIconSizes(int current)
|
||||
{
|
||||
ui->menuIconSize->clear();
|
||||
|
||||
QList<int> sizes {16, 20, 24, 28};
|
||||
if (!sizes.contains(current)) {
|
||||
sizes.append(current);
|
||||
}
|
||||
|
||||
for (int size : sizes) {
|
||||
ui->menuIconSize->addItem(QString(), QVariant(size));
|
||||
}
|
||||
|
||||
int index = ui->menuIconSize->findData(QVariant(current));
|
||||
ui->menuIconSize->setCurrentIndex(index);
|
||||
translateMenuIconSizes();
|
||||
}
|
||||
|
||||
void DlgSettingsGeneral::translateMenuIconSizes()
|
||||
{
|
||||
auto getSize = [this](int index) {
|
||||
return ui->menuIconSize->itemData(index).toInt();
|
||||
};
|
||||
|
||||
QStringList sizes;
|
||||
sizes << tr("Small (%1px)").arg(getSize(0));
|
||||
sizes << tr("Medium (%1px)").arg(getSize(1));
|
||||
sizes << tr("Large (%1px)").arg(getSize(2));
|
||||
sizes << tr("Extra large (%1px)").arg(getSize(3));
|
||||
if (ui->menuIconSize->count() > 4) {
|
||||
sizes << tr("Custom (%1px)").arg(getSize(4));
|
||||
}
|
||||
|
||||
for (int index = 0; index < sizes.size(); index++) {
|
||||
ui->menuIconSize->setItemText(index, sizes[index]);
|
||||
}
|
||||
}
|
||||
|
||||
void DlgSettingsGeneral::applyMenuIconSize(int pixel)
|
||||
{
|
||||
// Apply menu icon size via stylesheet override on all QMenu widgets
|
||||
QString rule = QStringLiteral("QMenu::icon { width: %1px; height: %1px; }").arg(pixel);
|
||||
for (auto* widget : qApp->allWidgets()) {
|
||||
if (auto* menu = qobject_cast<QMenu*>(widget)) {
|
||||
menu->setStyleSheet(rule);
|
||||
}
|
||||
}
|
||||
// Store the rule so new menus pick it up via the main window
|
||||
getMainWindow()->setProperty("_menuIconSizeRule", rule);
|
||||
}
|
||||
|
||||
void DlgSettingsGeneral::retranslateUnits()
|
||||
{
|
||||
auto setItem = [&, index {0}](const std::string& item) mutable {
|
||||
@@ -547,6 +607,7 @@ void DlgSettingsGeneral::changeEvent(QEvent* event)
|
||||
{
|
||||
if (event->type() == QEvent::LanguageChange) {
|
||||
translateIconSizes();
|
||||
translateMenuIconSizes();
|
||||
retranslateUnits();
|
||||
int index = ui->UseLocaleFormatting->currentIndex();
|
||||
ui->retranslateUi(this);
|
||||
@@ -823,24 +884,6 @@ void DlgSettingsGeneral::onThemeChanged(int index)
|
||||
themeChanged = true;
|
||||
}
|
||||
|
||||
void DlgSettingsGeneral::onLinkActivated(const QString& link)
|
||||
{
|
||||
auto const addonManagerLink = QStringLiteral("freecad:Std_AddonMgr");
|
||||
|
||||
if (link != addonManagerLink) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Set the user preferences to include only preference packs.
|
||||
// This is a quick and dirty way to open Addon Manager with only themes.
|
||||
auto pref = App::GetApplication().GetParameterGroupByPath(
|
||||
"User parameter:BaseApp/Preferences/Addons"
|
||||
);
|
||||
pref->SetInt("PackageTypeSelection", 3); // 3 stands for Preference Packs
|
||||
pref->SetInt("StatusSelection", 0); // 0 stands for any installation status
|
||||
|
||||
Gui::Application::Instance->commandManager().runCommandByName("Std_AddonMgr");
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
namespace
|
||||
|
||||
Reference in New Issue
Block a user