GP-6870 - Updated the New Project Wizard to have better default focus

This commit is contained in:
dragonmacher
2026-05-28 17:49:26 -04:00
parent 3f8fd55f18
commit bd66419fc0
12 changed files with 75 additions and 3 deletions

View File

@@ -29,6 +29,7 @@ import docking.widgets.label.GDLabel;
import generic.theme.GThemeDefaults.Colors.Messages;
import generic.theme.Gui;
import ghidra.util.HelpLocation;
import ghidra.util.Swing;
import help.Help;
import help.HelpService;
import resources.Icons;
@@ -193,6 +194,17 @@ public class WizardDialog extends DialogComponentProvider {
HelpService help = Help.getHelpService();
help.registerHelp(getComponent(), helpLocation);
statusChanged();
initializeFocus(step);
}
private void initializeFocus(WizardStep<?> step) {
Component toFocus = step.getDefaultFocusComponent();
if (toFocus != null) {
Swing.runLater(() -> {
toFocus.requestFocusInWindow();
});
}
}
private void createButtons() {

View File

@@ -112,6 +112,10 @@ public class ProjectAccessPanel extends JPanel {
createMainPanel(knownUsers, anonymousServerAccessAllowed);
}
public Component getDefaultFocusComponent() {
return knownUsersPanel;
}
/**
* Sets the help location.
*
@@ -573,4 +577,5 @@ public class ProjectAccessPanel extends JPanel {
}
}
}
}

View File

@@ -16,6 +16,7 @@
package ghidra.framework.main;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
@@ -49,6 +50,10 @@ public class ServerInfoComponent extends JPanel {
buildMainPanel();
}
public Component getDefaultFocusComponent() {
return nameField;
}
/**
* Set the status listener
* @param statusListener
@@ -218,4 +223,5 @@ public class ServerInfoComponent extends JPanel {
public boolean isValidInformation() {
return checkServerName() && checkPortNumber();
}
}

View File

@@ -15,6 +15,7 @@
*/
package ghidra.framework.main.wizard.project;
import java.awt.Component;
import java.io.IOException;
import java.util.ArrayList;
@@ -45,6 +46,11 @@ public class ProjectAccessStep extends WizardStep<ProjectWizardData> {
this.tool = tool;
}
@Override
public Component getDefaultFocusComponent() {
return panel.getDefaultFocusComponent();
}
@Override
public void initialize(ProjectWizardData data) {
setTitle("Specify Users for Repository: " + data.getRepositoryName());

View File

@@ -16,6 +16,7 @@
package ghidra.framework.main.wizard.project;
import java.awt.BorderLayout;
import java.awt.Component;
import javax.swing.*;
@@ -55,4 +56,8 @@ public class ProjectTypePanel extends JPanel {
boolean isSharedProject() {
return sharedRB.isSelected();
}
public Component getDefaultFocusComponent() {
return nonSharedRB;
}
}

View File

@@ -15,6 +15,8 @@
*/
package ghidra.framework.main.wizard.project;
import java.awt.Component;
import javax.swing.JComponent;
import docking.wizard.WizardModel;
@@ -35,6 +37,11 @@ public class ProjectTypeStep extends WizardStep<ProjectWizardData> {
panel = new ProjectTypePanel();
}
@Override
public Component getDefaultFocusComponent() {
return panel.getDefaultFocusComponent();
}
@Override
public void initialize(ProjectWizardData data) {
// do nothing

View File

@@ -16,6 +16,7 @@
package ghidra.framework.main.wizard.project;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
@@ -53,6 +54,10 @@ public class RepositoryPanel extends JPanel {
buildMainPanel(repositoryNames, readOnlyServerAccess);
}
public Component getDefaultFocusComponent() {
return nameList;
}
public boolean isCreateRepositorySelected() {
return createRepButton.isSelected();
}

View File

@@ -15,6 +15,7 @@
*/
package ghidra.framework.main.wizard.project;
import java.awt.Component;
import java.io.IOException;
import java.util.List;
@@ -42,6 +43,11 @@ public class RepositoryStep extends WizardStep<ProjectWizardData> {
super(model, "", new HelpLocation(GenericHelpTopics.FRONT_END, "SelectRepository"));
}
@Override
public Component getDefaultFocusComponent() {
return panel.getDefaultFocusComponent();
}
@Override
public void initialize(ProjectWizardData data) {
ServerInfo serverInfo = data.getServerInfo();

View File

@@ -16,6 +16,7 @@
package ghidra.framework.main.wizard.project;
import java.awt.BorderLayout;
import java.awt.Component;
import java.io.File;
import javax.swing.*;
@@ -64,6 +65,10 @@ public class SelectProjectPanel extends JPanel {
buildMainPanel();
}
public Component getDefaultFocusComponent() {
return directoryField;
}
void setProjectName(String projectName) {
projectNameField.setText(projectName);
}

View File

@@ -17,6 +17,7 @@ package ghidra.framework.main.wizard.project;
import static ghidra.app.util.GenericHelpTopics.*;
import java.awt.Component;
import java.io.File;
import javax.swing.JComponent;
@@ -41,6 +42,11 @@ public class SelectProjectStep extends WizardStep<ProjectWizardData> {
panel = new SelectProjectPanel(() -> notifyStatusChanged());
}
@Override
public Component getDefaultFocusComponent() {
return panel.getDefaultFocusComponent();
}
@Override
public void initialize(ProjectWizardData data) {
boolean isShared = data.isSharedProject();

View File

@@ -16,6 +16,7 @@
package ghidra.framework.main.wizard.project;
import java.awt.BorderLayout;
import java.awt.Component;
import javax.swing.JPanel;
@@ -41,6 +42,10 @@ public class ServerInfoPanel extends JPanel {
serverInfoComponent.setChangeListener(e -> statusChangedCallback.call());
}
public Component getDefaultFocusComponent() {
return serverInfoComponent.getDefaultFocusComponent();
}
public boolean isValidInformation() {
return serverInfoComponent.isValidInformation();
}
@@ -57,9 +62,6 @@ public class ServerInfoPanel extends JPanel {
return serverInfoComponent.getPortNumber();
}
/**
* Set the field values using the given server info.
*/
public void setServerInfo(ServerInfo info) {
serverInfoComponent.setServerInfo(info);
}

View File

@@ -15,6 +15,8 @@
*/
package ghidra.framework.main.wizard.project;
import java.awt.Component;
import javax.swing.JComponent;
import docking.wizard.WizardModel;
@@ -40,6 +42,11 @@ public class ServerStep extends WizardStep<ProjectWizardData> {
panel = new ServerInfoPanel(this::notifyStatusChanged);
}
@Override
public Component getDefaultFocusComponent() {
return panel.getDefaultFocusComponent();
}
@Override
public void initialize(ProjectWizardData data) {
if (panel.getServerName().isBlank()) {