Gui: Try to load Theme Parameters from file

This creates logic that tries to load user parameters from file as the
priority and pushes back older mechanism to lower layer. Older way of
loading theme parameters should be preserved until we release first 1.1
RC.
This commit is contained in:
Kacper Donat
2025-08-16 12:51:16 +02:00
parent 333a6c4585
commit f3b5748643
3 changed files with 52 additions and 9 deletions

View File

@@ -141,6 +141,7 @@
#include "QtWidgets.h"
#include <OverlayManager.h>
#include <ParamHandler.h>
#include <Base/ServiceProvider.h>
#ifdef BUILD_TRACY_FRAME_PROFILER
@@ -381,20 +382,48 @@ struct PyMethodDef FreeCADGui_methods[] = {
void Application::initStyleParameterManager()
{
static ParamHandlers handlers;
const auto deduceParametersFilePath = []() -> std::string {
const auto hMainWindowGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/MainWindow");
if (const std::string& path = hMainWindowGrp->GetASCII("ThemeStyleParametersFile");
!path.empty()) {
return path;
}
return fmt::format("qss:parameters/{}.yaml", hMainWindowGrp->GetASCII("Theme", "Classic"));
};
auto themeParametersSource = new StyleParameters::YamlParameterSource(
deduceParametersFilePath(),
{.name = QT_TR_NOOP("Theme Parameters"),
.options = StyleParameters::ParameterSourceOption::UserEditable});
handlers.addDelayedHandler(
"BaseApp/Preferences/MainWindow",
{"ThemeStyleParametersFiles", "Theme"},
[themeParametersSource, deduceParametersFilePath](ParameterGrp::handle) {
themeParametersSource->changeFilePath(deduceParametersFilePath());
});
Base::registerServiceImplementation<StyleParameters::ParameterSource>(
new StyleParameters::BuiltInParameterSource({.name = QT_TR_NOOP("Built-in Parameters")}));
Base::registerServiceImplementation<StyleParameters::ParameterSource>(
new StyleParameters::UserParameterSource(
App::GetApplication().GetParameterGroupByPath(
"User parameter:BaseApp/Preferences/Themes/Tokens"),
{.name = QT_TR_NOOP("Theme Parameters"),
.options = StyleParameters::ParameterSourceOption::UserEditable}));
// todo: left for compatibility with older theme versions, to be removed before release
Base::registerServiceImplementation<StyleParameters::ParameterSource>(
new StyleParameters::UserParameterSource(
App::GetApplication().GetParameterGroupByPath(
"User parameter:BaseApp/Preferences/Themes/UserTokens"),
{.name = QT_TR_NOOP("Theme Parameters - Fallback"),
.options = StyleParameters::ParameterSourceOption::ReadOnly}));
Base::registerServiceImplementation<StyleParameters::ParameterSource>(themeParametersSource);
Base::registerServiceImplementation<StyleParameters::ParameterSource>(
new StyleParameters::UserParameterSource(
App::GetApplication().GetParameterGroupByPath(
"User parameter:BaseApp/Preferences/Themes/UserParameters"),
{.name = QT_TR_NOOP("User Parameters"),
.options = StyleParameters::ParameterSource::UserEditable}));