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;