diff --git a/src/Gui/DlgGeneral.ui b/src/Gui/DlgGeneral.ui
index 542ffd0e88..b54c5e08dd 100644
--- a/src/Gui/DlgGeneral.ui
+++ b/src/Gui/DlgGeneral.ui
@@ -533,40 +533,6 @@ this according to your screen size or personal taste
6
-
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 6
-
-
-
-
-
- Auto load module after start up:
-
-
-
- -
-
-
- Choose which workbench will be activated and shown
-after FreeCAD launches
-
-
-
-
-
- -
A Splash screen is a small loading window that is shown
diff --git a/src/Gui/DlgGeneralImp.cpp b/src/Gui/DlgGeneralImp.cpp
index e35375b69a..f63f00cc86 100644
--- a/src/Gui/DlgGeneralImp.cpp
+++ b/src/Gui/DlgGeneralImp.cpp
@@ -62,37 +62,6 @@ DlgGeneralImp::DlgGeneralImp( QWidget* parent )
{
ui->setupUi(this);
- // fills the combo box with all available workbenches
- // sorted by their menu text
- QStringList work = Application::Instance->workbenches();
- QMap menuText;
- for (const auto & it : work) {
- QString text = Application::Instance->workbenchMenuText(it);
- menuText[text] = it;
- }
-
- { // add special workbench to selection
- QPixmap px = Application::Instance->workbenchIcon(QString::fromLatin1("NoneWorkbench"));
- QString key = QString::fromLatin1("");
- QString value = QString::fromLatin1("$LastModule");
- if (px.isNull()) {
- ui->AutoloadModuleCombo->addItem(key, QVariant(value));
- }
- else {
- ui->AutoloadModuleCombo->addItem(px, key, QVariant(value));
- }
- }
-
- for (QMap::Iterator it = menuText.begin(); it != menuText.end(); ++it) {
- QPixmap px = Application::Instance->workbenchIcon(it.value());
- if (px.isNull()) {
- ui->AutoloadModuleCombo->addItem(it.key(), QVariant(it.value()));
- }
- else {
- ui->AutoloadModuleCombo->addItem(px, it.key(), QVariant(it.value()));
- }
- }
-
recreatePreferencePackMenu();
connect(ui->ImportConfig, &QPushButton::clicked, this, &DlgGeneralImp::onImportConfigClicked);
@@ -177,12 +146,6 @@ void DlgGeneralImp::setDecimalPointConversion(bool on)
void DlgGeneralImp::saveSettings()
{
- int index = ui->AutoloadModuleCombo->currentIndex();
- QVariant data = ui->AutoloadModuleCombo->itemData(index);
- QString startWbName = data.toString();
- App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/General")->
- SetASCII("AutoloadModule", startWbName.toLatin1());
-
ui->SubstituteDecimal->onSave();
ui->UseLocaleFormatting->onSave();
ui->RecentFiles->onSave();
@@ -232,12 +195,6 @@ void DlgGeneralImp::saveSettings()
void DlgGeneralImp::loadSettings()
{
- std::string start = App::Application::Config()["StartWorkbench"];
- start = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/General")->
- GetASCII("AutoloadModule", start.c_str());
- QString startWbName = QLatin1String(start.c_str());
- ui->AutoloadModuleCombo->setCurrentIndex(ui->AutoloadModuleCombo->findData(startWbName));
-
ui->SubstituteDecimal->onRestore();
ui->UseLocaleFormatting->onRestore();
ui->RecentFiles->onRestore();
diff --git a/src/Gui/DlgSettingsWorkbenches.ui b/src/Gui/DlgSettingsWorkbenches.ui
index 50cc9cfbbf..47d48642c8 100644
--- a/src/Gui/DlgSettingsWorkbenches.ui
+++ b/src/Gui/DlgSettingsWorkbenches.ui
@@ -41,6 +41,40 @@ Your currently system has the following workbenches:</p></body></
-
+
+
+ 6
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
-
+
+
+ Start up workbench:
+
+
+
+ -
+
+
+ Choose which workbench will be activated and shown
+after FreeCAD launches
+
+
+
+
+
+ -
6
diff --git a/src/Gui/DlgSettingsWorkbenchesImp.cpp b/src/Gui/DlgSettingsWorkbenchesImp.cpp
index f41f7620e6..5ece29f084 100644
--- a/src/Gui/DlgSettingsWorkbenchesImp.cpp
+++ b/src/Gui/DlgSettingsWorkbenchesImp.cpp
@@ -54,6 +54,7 @@ DlgSettingsWorkbenchesImp::DlgSettingsWorkbenchesImp( QWidget* parent )
, ui(new Ui_DlgSettingsWorkbenches)
{
ui->setupUi(this);
+ connect(ui->AutoloadModuleCombo, QOverload::of(&QComboBox::activated), this, [this](int index) { onStartWbChangedClicked(index); });
}
/**
@@ -114,6 +115,12 @@ void DlgSettingsWorkbenchesImp::saveSettings()
SetASCII("BackgroundAutoloadModules", autoloadStr.str().c_str());
saveWorkbenchSelector();
+
+ int index = ui->AutoloadModuleCombo->currentIndex();
+ QVariant data = ui->AutoloadModuleCombo->itemData(index);
+ QString startWbName = data.toString();
+ App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/General")->
+ SetASCII("AutoloadModule", startWbName.toLatin1());
}
void DlgSettingsWorkbenchesImp::loadSettings()
@@ -137,8 +144,10 @@ void DlgSettingsWorkbenchesImp::loadSettings()
while (std::getline(stream, workbench, ','))
_backgroundAutoloadedModules.push_back(workbench);
-
buildWorkbenchList();
+
+ //We set the startup setting after building the list so that we can put only the enabled wb.
+ setStartWorkbenchComboItems();
}
void DlgSettingsWorkbenchesImp::onLoadClicked(const QString &wbName)
@@ -184,6 +193,9 @@ void DlgSettingsWorkbenchesImp::onWbActivated(const QString &wbName, bool checke
break;
}
}
+
+ // Reset the start combo items.
+ setStartWorkbenchComboItems();
}
/**
@@ -394,4 +406,73 @@ void DlgSettingsWorkbenchesImp::loadWorkbenchSelector()
ui->WorkbenchSelectorPosition->setCurrentIndex(WorkbenchSwitcher::getIndex());
}
+void DlgSettingsWorkbenchesImp::setStartWorkbenchComboItems()
+{
+ ui->AutoloadModuleCombo->clear();
+
+ // fills the combo box with activated workbenches.
+ QStringList enabledWbs;
+ for (int i = 0; i < ui->wbList->count(); i++) {
+ QWidget* widget = ui->wbList->itemWidget(ui->wbList->item(i));
+ if (widget) {
+ QCheckBox* enableCheckbox = widget->findChild(enableCheckboxStr);
+ if (enableCheckbox && enableCheckbox->isChecked()) {
+ enabledWbs << widget->objectName();
+ }
+ }
+ }
+
+ QMap menuText;
+ for (const auto& it : enabledWbs) {
+ QString text = Application::Instance->workbenchMenuText(it);
+ menuText[text] = it;
+ }
+
+ { // add special workbench to selection
+ QPixmap px = Application::Instance->workbenchIcon(QString::fromLatin1("NoneWorkbench"));
+ QString key = QString::fromLatin1("");
+ QString value = QString::fromLatin1("$LastModule");
+ if (px.isNull()) {
+ ui->AutoloadModuleCombo->addItem(key, QVariant(value));
+ }
+ else {
+ ui->AutoloadModuleCombo->addItem(px, key, QVariant(value));
+ }
+ }
+
+ for (QMap::Iterator it = menuText.begin(); it != menuText.end(); ++it) {
+ QPixmap px = Application::Instance->workbenchIcon(it.value());
+ if (px.isNull()) {
+ ui->AutoloadModuleCombo->addItem(it.key(), QVariant(it.value()));
+ }
+ else {
+ ui->AutoloadModuleCombo->addItem(px, it.key(), QVariant(it.value()));
+ }
+ }
+
+ ui->AutoloadModuleCombo->setCurrentIndex(ui->AutoloadModuleCombo->findData(QString::fromStdString(_startupModule)));
+}
+
+void Gui::Dialog::DlgSettingsWorkbenchesImp::onStartWbChangedClicked(int index)
+{
+ //Update _startupModule
+ QVariant data = ui->AutoloadModuleCombo->itemData(index);
+ QString wbName = data.toString();
+ _startupModule = wbName.toStdString();
+
+ //Change wb that user can't deactivate.
+ for (int i = 0; i < ui->wbList->count(); i++) {
+ QWidget* widget = ui->wbList->itemWidget(ui->wbList->item(i));
+ if (widget) {
+ QCheckBox* enableCheckbox = widget->findChild(enableCheckboxStr);
+ if (enableCheckbox && widget->objectName() == wbName) {
+ enableCheckbox->setEnabled(false);
+ }
+ else {
+ enableCheckbox->setEnabled(true);
+ }
+ }
+ }
+}
+
#include "moc_DlgSettingsWorkbenchesImp.cpp"
diff --git a/src/Gui/DlgSettingsWorkbenchesImp.h b/src/Gui/DlgSettingsWorkbenchesImp.h
index 3a5bd9a2c7..78bc20baa6 100644
--- a/src/Gui/DlgSettingsWorkbenchesImp.h
+++ b/src/Gui/DlgSettingsWorkbenchesImp.h
@@ -68,6 +68,9 @@ private:
void saveWorkbenchSelector();
void loadWorkbenchSelector();
+ void setStartWorkbenchComboItems();
+ void onStartWbChangedClicked(int index);
+
std::unique_ptr ui;
static const QString iconLabelStr;
static const QString nameLabelStr;