diff --git a/oqtopus/core/modules_config.py b/oqtopus/core/modules_config.py
index d21b66d..9ce1088 100644
--- a/oqtopus/core/modules_config.py
+++ b/oqtopus/core/modules_config.py
@@ -7,6 +7,7 @@ class ModuleConfig(BaseModel):
organisation: str
repository: str
exclude_releases: str | None = None # Regexp pattern to exclude releases
+ experimental: bool = False # Whether this module is experimental
class ModulesConfig(BaseModel):
diff --git a/oqtopus/default_config.yaml b/oqtopus/default_config.yaml
index c834a3d..176acd2 100644
--- a/oqtopus/default_config.yaml
+++ b/oqtopus/default_config.yaml
@@ -15,6 +15,7 @@ modules:
id: tce
organisation: teksi
repository: cemetery
+ experimental: true
- name: SIGNALO
id: signalo
diff --git a/oqtopus/gui/main_dialog.py b/oqtopus/gui/main_dialog.py
index 5f58f29..737e562 100644
--- a/oqtopus/gui/main_dialog.py
+++ b/oqtopus/gui/main_dialog.py
@@ -180,6 +180,8 @@ def __open_settings_dialog(self):
if dlg.exec() == QDialog.DialogCode.Accepted:
# Update column visibility from settings
self.__logsWidget.update_column_visibility_from_settings()
+ # Reload modules in case experimental visibility changed
+ self.__moduleSelectionWidget.reloadModules()
def __cleanup_cache(self):
"""Delete all cached data (downloaded packages and GitHub API cache)."""
diff --git a/oqtopus/gui/module_selection_widget.py b/oqtopus/gui/module_selection_widget.py
index daddeeb..4dc5e2c 100644
--- a/oqtopus/gui/module_selection_widget.py
+++ b/oqtopus/gui/module_selection_widget.py
@@ -43,23 +43,7 @@ def __init__(self, modules_config_path, parent=None):
self.module_progressBar.setVisible(False)
- self.module_module_comboBox.clear()
- self.module_module_comboBox.addItem(self.tr("Please select a module"), None)
- if self.__modules_config is not None:
- for config_module in self.__modules_config.modules:
- module = Module(
- name=config_module.name,
- id=config_module.id,
- organisation=config_module.organisation,
- repository=config_module.repository,
- exclude_releases=config_module.exclude_releases,
- parent=self,
- )
- self.module_module_comboBox.addItem(module.name, module)
- module.signal_versionsLoaded.connect(self.__loadVersionsFinished)
- module.signal_developmentVersionsLoaded.connect(
- self.__loadDevelopmentVersionsFinished
- )
+ self.__populate_module_combobox()
self.module_latestVersion_label.setText("")
QtUtils.setForegroundColor(self.module_latestVersion_label, PluginUtils.COLOR_GREEN)
@@ -80,6 +64,39 @@ def __init__(self, modules_config_path, parent=None):
self.__packagePrepareTaskProgress
)
+ def reloadModules(self):
+ """Reload the module combobox, e.g. after settings change."""
+ self.__populate_module_combobox()
+
+ def __populate_module_combobox(self):
+ """Populate the module combobox based on config and current settings."""
+ self.module_module_comboBox.blockSignals(True)
+ self.module_module_comboBox.clear()
+ self.module_module_comboBox.addItem(self.tr("Please select a module"), None)
+ show_experimental = PluginUtils.get_show_experimental_modules()
+ if self.__modules_config is not None:
+ for config_module in self.__modules_config.modules:
+ if config_module.experimental and not show_experimental:
+ continue
+ module = Module(
+ name=config_module.name,
+ id=config_module.id,
+ organisation=config_module.organisation,
+ repository=config_module.repository,
+ exclude_releases=config_module.exclude_releases,
+ parent=self,
+ )
+ display_name = (
+ f"{module.name} (experimental)" if config_module.experimental else module.name
+ )
+ self.module_module_comboBox.addItem(display_name, module)
+ module.signal_versionsLoaded.connect(self.__loadVersionsFinished)
+ module.signal_developmentVersionsLoaded.connect(
+ self.__loadDevelopmentVersionsFinished
+ )
+ self.module_module_comboBox.blockSignals(False)
+ self.module_module_comboBox.setCurrentIndex(0)
+
def close(self):
if self.__packagePrepareTask.isRunning():
# Disconnect signals first to prevent crashes when emitting to destroyed widgets
diff --git a/oqtopus/gui/settings_dialog.py b/oqtopus/gui/settings_dialog.py
index 4fa5296..e2469b7 100644
--- a/oqtopus/gui/settings_dialog.py
+++ b/oqtopus/gui/settings_dialog.py
@@ -12,6 +12,9 @@ def __init__(self, parent=None):
self.githubToken_lineEdit.setText(PluginUtils.get_github_token())
self.allow_multiple_modules_checkBox.setChecked(PluginUtils.get_allow_multiple_modules())
+ self.show_experimental_modules_checkBox.setChecked(
+ PluginUtils.get_show_experimental_modules()
+ )
# Load log column visibility settings
self.log_show_datetime_checkBox.setChecked(PluginUtils.get_log_show_datetime())
@@ -26,6 +29,9 @@ def __init__(self, parent=None):
def accept(self):
PluginUtils.set_github_token(self.githubToken_lineEdit.text())
PluginUtils.set_allow_multiple_modules(self.allow_multiple_modules_checkBox.isChecked())
+ PluginUtils.set_show_experimental_modules(
+ self.show_experimental_modules_checkBox.isChecked()
+ )
PluginUtils.set_log_show_datetime(self.log_show_datetime_checkBox.isChecked())
PluginUtils.set_log_show_level(self.log_show_level_checkBox.isChecked())
PluginUtils.set_log_show_module(self.log_show_module_checkBox.isChecked())
diff --git a/oqtopus/ui/settings_dialog.ui b/oqtopus/ui/settings_dialog.ui
index 5202cfd..a68e55d 100644
--- a/oqtopus/ui/settings_dialog.ui
+++ b/oqtopus/ui/settings_dialog.ui
@@ -52,6 +52,13 @@
-
+
+
+ Show experimental modules
+
+
+
+ -
Log display columns
@@ -81,7 +88,7 @@
- -
+
-
Qt::Vertical
@@ -94,7 +101,7 @@
- -
+
-
Qt::Horizontal
diff --git a/oqtopus/utils/plugin_utils.py b/oqtopus/utils/plugin_utils.py
index f778907..ed86dce 100644
--- a/oqtopus/utils/plugin_utils.py
+++ b/oqtopus/utils/plugin_utils.py
@@ -241,6 +241,16 @@ def set_allow_multiple_modules(allow: bool):
settings = QSettings()
settings.setValue("oqtopus/allow_multiple_modules", allow)
+ @staticmethod
+ def get_show_experimental_modules():
+ settings = QSettings()
+ return settings.value("oqtopus/show_experimental_modules", False, type=bool)
+
+ @staticmethod
+ def set_show_experimental_modules(show: bool):
+ settings = QSettings()
+ settings.setValue("oqtopus/show_experimental_modules", show)
+
@staticmethod
def get_log_show_datetime():
settings = QSettings()