Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
73 commits
Select commit Hold shift + click to select a range
029f03d
#1296: implemented basic IdeDialog Class
laim2003 Mar 27, 2026
89cfb67
#1296: Added basic context state manager class
laim2003 Mar 30, 2026
a53296d
#1785: Added basic question/confirmation modal implementation
laim2003 Mar 30, 2026
37cad74
#1296: implemented basic IdeDialog Class
laim2003 Mar 27, 2026
55a50ce
#1296: Added basic context state manager class
laim2003 Mar 30, 2026
3f1569f
#1785: Added basic question/confirmation modal implementation
laim2003 Mar 30, 2026
6ce99b3
Merge remote-tracking branch 'origin/#1296-implement-idecontext-for-g…
laim2003 Mar 30, 2026
7ef65f3
#1785: - Added logging to IdeGuiStateManager.
laim2003 Mar 30, 2026
1764b2f
#1724: implemented basic gui state management
laim2003 Apr 7, 2026
ddd3e5f
#1802: implemented basic gui state management
laim2003 Apr 7, 2026
9c5a720
Merge remote-tracking branch 'origin/#1802-state-management-implement…
laim2003 Apr 7, 2026
b28e216
#1802: removed a few changes so this branch can be the base for other…
laim2003 Apr 7, 2026
234e98b
#1802: disabled javadoc warning
laim2003 Apr 9, 2026
1c4e766
#1802: - fixed AppBaseTest being stuck
laim2003 Apr 9, 2026
6fc3884
Merge branch 'main' into #1802-state-management-implementation
laim2003 Apr 14, 2026
2026757
#1802: Added ProjectManager class to handle business logic of reading…
laim2003 Apr 14, 2026
c76e185
#1802: Updated IdeGuiStateManager to also update its projectManager, …
laim2003 Apr 14, 2026
6f92d93
#1802: javafx updated to java 25
laim2003 Apr 15, 2026
9f741a5
Merge branch 'main' into #1802-state-management-implementation
laim2003 Apr 21, 2026
48fe018
Revert "#1802: javafx updated to java 25"
laim2003 Apr 21, 2026
e0ad015
#1803: added DI for IDE_ROOT in GuiStateManager
laim2003 Apr 21, 2026
2c9fc55
#1802: added DI for IDE_ROOT in GuiStateManager
laim2003 Apr 21, 2026
2b62c60
Merge remote-tracking branch 'origin/#1802-state-management-implement…
laim2003 Apr 21, 2026
40ff54e
#1802: Workaround for IDE_ROOT=null issue. The ideRoot in GuiStateMan…
laim2003 Apr 21, 2026
0b67210
#1802: removed redundant DI variant of switchContext() (DI via getIns…
laim2003 Apr 21, 2026
2e15d60
#1802: Added tests for GuiStateManager
laim2003 Apr 21, 2026
10cf940
Merge branch 'main' into #1802-state-management-implementation
laim2003 Apr 23, 2026
5f0b40a
#1802: Extracted mock IDE_ROOT logic into seperate class that can be …
laim2003 Apr 23, 2026
3b567ef
Merge remote-tracking branch 'origin/#1802-state-management-implement…
laim2003 Apr 23, 2026
e406b65
#1802: added ProjectManagerTest
laim2003 Apr 23, 2026
e0e2d9d
#1802: Detached startContext creation from switchContext in IdeGuiSta…
laim2003 Apr 24, 2026
d70f460
#1802: Fixed bug in IdeGuiStateManagerTest leading to test failure
laim2003 Apr 24, 2026
d6aace2
Merge branch 'main' into #1802-state-management-implementation
laim2003 Apr 24, 2026
9c78eac
#1802: Added ContextChangeListener; improved thread safety of IdeGuiS…
laim2003 Apr 24, 2026
4c84bb9
Merge branch 'main' into #1802-state-management-implementation
laim2003 Apr 24, 2026
69055d9
#1802: tests now use AbstractIdeContextTest
laim2003 Apr 28, 2026
9978ce9
#1802: Updated UI logic to:
laim2003 Apr 28, 2026
ac3a045
#1802: cleaned up ProjectManagerTest, fixed AppBaseTest to follow new…
laim2003 Apr 28, 2026
6c44432
#1802: cleaned up IdeGuiStateManagerTest
laim2003 Apr 28, 2026
c30c2ea
Merge branch 'main' into #1802-state-management-implementation
laim2003 Apr 28, 2026
1e8b556
#1802: cleaned up ProjectManagerTest to use FileUtils instead of own …
laim2003 Apr 28, 2026
d51111d
Merge remote-tracking branch 'origin/#1802-state-management-implement…
laim2003 Apr 28, 2026
98a7072
Merge branch 'main' into #1802-state-management-implementation
laim2003 May 5, 2026
c55a3a3
Merge branch 'main' into #1802-state-management-implementation
laim2003 May 12, 2026
4747bae
#1802: cleaned up test folders, fixed wrong Logger used in ProjectMan…
laim2003 May 26, 2026
e03949d
#1802: cleaned up test folders #2
laim2003 May 26, 2026
e4e5bd9
#1802: cleaned up test folders nr. 3
laim2003 May 26, 2026
44791ef
Merge branch 'main' into #1802-state-management-implementation
laim2003 May 26, 2026
dab292f
#1802: removed caching from ProjectManager
laim2003 May 26, 2026
11a9546
#1802: cleanup
laim2003 May 26, 2026
4781ea5
#1802: cleanup
laim2003 May 26, 2026
9ee0bc2
#1802: cleanup of ide.properties
laim2003 May 26, 2026
07b7773
#1936: Implement i18n locale-switching
KarimALotfy May 27, 2026
5943b23
#1936: Add to CHANGELOG.adoc
KarimALotfy May 27, 2026
01d696b
Merge "PR-1807" to "feature/1936-improve-localization-of-gui"
KarimALotfy May 28, 2026
df6f21b
Merge main into "feature/1936-improve-localization-of-gui"
KarimALotfy May 28, 2026
519a8bb
#1928: Merge "main" into "feature/1936-improve-localization-of-gui"
KarimALotfy Jun 16, 2026
aaa1763
#1928: Remove duplicated Imports
KarimALotfy Jun 16, 2026
3441ed4
#1928: Align structure of ide-projects with main
KarimALotfy Jun 16, 2026
a63acb0
#1936: Refactor I18n wording to Localization
KarimALotfy Jun 17, 2026
d8b8377
Merge branch 'main' of https://github.com/devonfw/IDEasy into feature…
KarimALotfy Jun 19, 2026
625d407
#2045: Add tool configuration for ide.properties through the GUI
KarimALotfy Jun 22, 2026
9232b7b
#2045:add Tools Configuration dialog to manage tool versions and edit…
KarimALotfy Jun 26, 2026
9f5c58b
#2045: Changed the Tool Settings Editor from a dialog to a tab in Mai…
KarimALotfy Jul 1, 2026
5d5b301
Merge remote-tracking branch 'origin/main' into feature/2045-add-tool…
maybeec Jul 4, 2026
e79536f
Merge remote-tracking branch 'upstream/main' into feature/2045-add-to…
maybeec Jul 4, 2026
15c20cb
Merge "main" into "feature/2045-add-tool-selection-and-version-or-edi…
KarimALotfy Jul 7, 2026
828d20c
Merge "main" into "feature/2045-add-tool-selection-and-version-or-edi…
KarimALotfy Jul 7, 2026
b2e10b7
#2045: Align latest changes from Localization Feature merged to main
KarimALotfy Jul 7, 2026
f703e8e
#2045: Add Interaction Tests to AppBaseTest, small change to ToolSett…
KarimALotfy Jul 7, 2026
e029f44
#2045: Fix
KarimALotfy Jul 10, 2026
eca23a5
#2045: Merge main into feature branch
KarimALotfy Jul 10, 2026
8b34cbc
#2045: Fix tool version pattern validation and Tool Config UI issues
KarimALotfy Jul 10, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions CHANGELOG.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,12 @@ Release with new features and bugfixes:
* https://github.com/devonfw/IDEasy/issues/822[#822] : Added Cwd path limit in shell
* https://github.com/devonfw/IDEasy/issues/1689[#1689]: Fix misleading message in `set-version` when the version is already installed
* https://github.com/devonfw/IDEasy/issues/1517[#1517]: Fix IDEasy MSI does not configure Windows Terminal for git-bash
* https://github.com/devonfw/IDEasy/issues/1227[#1227]: Added Setup instrcutions to the Windows installer
* https://github.com/devonfw/IDEasy/issues/1227[#1227]: Added Setup instructions to the Windows installer
* https://github.com/devonfw/IDEasy/issues/2114[#2114]: Fix false "Cygwin is not supported" warning in Git Bash
* https://github.com/devonfw/IDEasy/issues/865[#865]: az not working on Mac
* https://github.com/devonfw/IDEasy/issues/1936[#1936]: Improve localization of GUI
* https://github.com/devonfw/IDEasy/issues/2045[#2045]: Add tool selection and version or edition configuration to GUI

* https://github.com/devonfw/IDEasy/issues/2026[#2026]: Create UvRepository and UvBasedCommandlet

The full list of changes for this release can be found in https://github.com/devonfw/IDEasy/milestone/46?closed=1[milestone 2026.07.001].
Expand Down Expand Up @@ -100,8 +103,6 @@ Release with new features and bugfixes:
* https://github.com/devonfw/IDEasy/issues/1904[#1904]: Add Inso CLI to IDEasy commandlets
* https://github.com/devonfw/IDEasy/issues/1952[#1952]: Ability for platform specific dependencies
* https://github.com/devonfw/IDEasy/issues/1950[#1950]: Fix exit autocompletion
* https://github.com/devonfw/IDEasy/issues/1936[#1936]: Improve localization of GUI

* https://github.com/devonfw/IDEasy/issues/1958[#1958]: Fix git pull on settings with local branch without remote

The full list of changes for this release can be found in https://github.com/devonfw/IDEasy/milestone/44?closed=1[milestone 2026.05.001].
Expand Down
55 changes: 54 additions & 1 deletion gui/src/main/java/com/devonfw/ide/gui/MainController.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,13 @@
import java.util.Locale;
import java.util.Map;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;
import javafx.scene.control.Tooltip;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand All @@ -17,6 +22,7 @@
import com.devonfw.ide.gui.context.ProjectManager;
import com.devonfw.ide.gui.modal.IdeDialog;
import com.devonfw.ide.gui.nls.NlsService;
import com.devonfw.ide.gui.settings.ToolSettingsController;

/**
* Controller of the main screen of the dashboard GUI.
Expand Down Expand Up @@ -49,6 +55,15 @@ public class MainController {
@FXML
private Button vsCodeOpen;

@FXML
private TabPane tabPane;

@FXML
private Tab mainTab;

@FXML
private Tab toolConfigTab;

private final String directoryPath;

private final Map<String, Locale> languageMap;
Expand All @@ -73,6 +88,13 @@ public MainController(String directoryPath, NlsService nlsService) {
private void initialize() {
setProjectsComboBox();
initLanguageComboBox();
toolConfigTab.setDisable(true);
toolConfigTab.setTooltip(new Tooltip(nlsService.get("toolConfigDisabled")));
tabPane.getSelectionModel().selectedItemProperty().addListener((obs, oldTab, newTab) -> {
if (newTab == toolConfigTab) {
loadToolConfigContent();
}
});
}

private void initLanguageComboBox() {
Expand Down Expand Up @@ -148,7 +170,6 @@ private void openVsCode() {
openIDE("vscode");
}


private void setProjectsComboBox() {

assert (directoryPath != null) : "directoryPath is null! Please check the setup of your environment variables (IDE_ROOT)";
Expand All @@ -163,6 +184,7 @@ private void setProjectsComboBox() {
setWorkspaceComboBox();

selectedWorkspace.setDisable(false);

});
}

Expand All @@ -185,9 +207,24 @@ private void setWorkspaceComboBox() {
eclipseOpen.setDisable(false);
intellijOpen.setDisable(false);
vsCodeOpen.setDisable(false);
toolConfigTab.setDisable(false);
// If tool config is already open, reload it to reflect the new context
if (toolConfigTab.isSelected()) {
loadToolConfigContent();
}
// Pre-warm ide-urls git repo in background so the first dropdown open is fast
Thread preWarm = new Thread(() -> {
try {
IdeGuiStateManager.getInstance().getCurrentContext().getUrls();
} catch (Exception ignored) {
}
});
preWarm.setDaemon(true);
preWarm.start();
});
}


private void openIDE(String inIde) {

IdeGuiStateManager
Expand All @@ -198,6 +235,22 @@ private void openIDE(String inIde) {
.run();
}

private void loadToolConfigContent() {

try {
ToolSettingsController controller = new ToolSettingsController(nlsService);
FXMLLoader loader = new FXMLLoader(getClass().getResource("/com/devonfw/ide/gui/tools-config.fxml"));
loader.setController(controller);
loader.setResources(nlsService.getResourceBundle());
Parent content = loader.load();
controller.setOnClose(() -> tabPane.getSelectionModel().select(mainTab));
toolConfigTab.setContent(content);
} catch (Exception e) {
LOG.error("Failed to load tool config view", e);
new IdeDialog(IdeDialog.AlertType.ERROR, e.getMessage()).showAndWait();
}
}

private void updateContext(String selectedProjectName, String selectedWorkspaceName) {
try {
IdeGuiStateManager.getInstance().switchContext(selectedProjectName, selectedWorkspaceName);
Expand Down
117 changes: 117 additions & 0 deletions gui/src/main/java/com/devonfw/ide/gui/settings/ToolConfiguration.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
package com.devonfw.ide.gui.settings;

import java.util.List;
import java.util.Objects;

/**
* Model representing the configurable settings for a single tool.
*/
public final class ToolConfiguration {

private final String toolName;

/** Group/type of the tool used for grouping in the UI. */
private ToolGroup group;

private boolean enabled;

private String configuredVersion;

private String configuredEdition;

private boolean supportsEdition;

private List<String> availableEditions;

private List<String> availableVersions;

//<------------ Constructor & Getters/Setters ------------>

public ToolConfiguration(String toolName) {
this.toolName = Objects.requireNonNull(toolName);
}

/**
* Tool groups used to group/sort tools in the UI. Order of declaration determines the default ordering.
*/
public enum ToolGroup {
IDE("toolGroupIde"),
LOCAL("toolGroupLocal"),
GLOBAL("toolGroupGlobal"),
PIP("toolGroupPip"),
NPM("toolGroupNpm"),
OTHER("toolGroupOther");

private final String label;

ToolGroup(String label) {
this.label = label;
}

public String getLabel() {
return this.label;
}
}

public String getToolName() {
return this.toolName;
}

public ToolGroup getGroup() {
return this.group;
}

public void setGroup(ToolGroup group) {
this.group = group;
}

public boolean isEnabled() {
return this.enabled;
}

public void setEnabled(boolean enabled) {
this.enabled = enabled;
}

public String getConfiguredVersion() {
return this.configuredVersion;
}

public void setConfiguredVersion(String configuredVersion) {
this.configuredVersion = configuredVersion;
}

public String getConfiguredEdition() {
return this.configuredEdition;
}

public void setConfiguredEdition(String configuredEdition) {
this.configuredEdition = configuredEdition;
}

public boolean isSupportsEdition() {
return this.supportsEdition;
}

public void setSupportsEdition(boolean supportsEdition) {
this.supportsEdition = supportsEdition;
}

public List<String> getAvailableEditions() {
return this.availableEditions;
}

public void setAvailableEditions(List<String> availableEditions) {
this.availableEditions = availableEditions;
}

public List<String> getAvailableVersions() {
return this.availableVersions;
}

public void setAvailableVersions(List<String> availableVersions) {
this.availableVersions = availableVersions;
}

}

Loading
Loading