Skip to content

Replace deprecated ComboBoxWithBrowserButton #7931

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Apr 9, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
<text resource-bundle="io/flutter/FlutterBundle" key="flutter.sdk.path.label"/>
</properties>
</component>
<component id="83a87" class="com.intellij.ui.ComboboxWithBrowseButton" binding="mySdkCombo" custom-create="true">
<component id="83a87" class="com.intellij.openapi.ui.ComboBox" binding="mySdkCombo" custom-create="true">
<constraints>
<grid row="0" column="1" row-span="1" col-span="2" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
</constraints>
Expand Down
54 changes: 37 additions & 17 deletions flutter-idea/src/io/flutter/sdk/FlutterSettingsConfigurable.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
package io.flutter.sdk;

import com.intellij.execution.process.ProcessOutput;
import com.intellij.icons.AllIcons;
import com.intellij.ide.actions.ShowSettingsUtilImpl;
import com.intellij.ide.actionsOnSave.ActionsOnSaveConfigurable;
import com.intellij.notification.Notification;
Expand All @@ -14,24 +15,29 @@
import com.intellij.openapi.actionSystem.ActionToolbar;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.fileChooser.FileChooser;
import com.intellij.openapi.fileChooser.FileChooserDescriptor;
import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory;
import com.intellij.openapi.ide.CopyPasteManager;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.options.SearchableConfigurable;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.ComboBox;
import com.intellij.openapi.ui.FixedSizeButton;
import com.intellij.openapi.ui.TextComponentAccessor;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.io.FileUtilRt;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.ui.ComboboxWithBrowseButton;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.ui.DocumentAdapter;
import com.intellij.ui.components.ActionLink;
import com.intellij.ui.components.JBLabel;
import com.intellij.ui.components.fields.ExtendableTextComponent;
import com.intellij.ui.components.fields.ExtendableTextField;
import com.intellij.util.PlatformIcons;
import icons.FlutterIcons;
import io.flutter.*;
import io.flutter.FlutterBundle;
import io.flutter.FlutterConstants;
import io.flutter.FlutterMessages;
import io.flutter.bazel.Workspace;
import io.flutter.bazel.WorkspaceCache;
import io.flutter.font.FontPreviewProcessor;
Expand All @@ -44,6 +50,7 @@

import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.plaf.basic.BasicComboBoxEditor;
import javax.swing.text.JTextComponent;
import java.awt.datatransfer.StringSelection;
import java.util.List;
Expand All @@ -57,7 +64,7 @@ public class FlutterSettingsConfigurable implements SearchableConfigurable {
private static final String FLUTTER_SETTINGS_HELP_TOPIC = "flutter.settings.help";

private JPanel mainPanel;
private ComboboxWithBrowseButton mySdkCombo;
private ComboBox<String> mySdkCombo;
private JBLabel myVersionLabel;
private JCheckBox myHotReloadOnSaveCheckBox;
private JCheckBox myEnableVerboseLoggingCheckBox;
Expand Down Expand Up @@ -104,7 +111,7 @@ private void init() {
if (sdk != null) {
previousSdkVersion = sdk.getVersion();
}
mySdkCombo.getComboBox().setEditable(true);
mySdkCombo.setEditable(true);

myCopyButton.setSize(ActionToolbar.DEFAULT_MINIMUM_BUTTON_SIZE);
myCopyButton.setIcon(PlatformIcons.COPY_ICON);
Expand All @@ -114,7 +121,7 @@ private void init() {
}
});

final JTextComponent sdkEditor = (JTextComponent)mySdkCombo.getComboBox().getEditor().getEditorComponent();
final JTextComponent sdkEditor = (JTextComponent)mySdkCombo.getEditor().getEditorComponent();
sdkEditor.getDocument().addDocumentListener(new DocumentAdapter() {
@Override
protected void textChanged(@NotNull final DocumentEvent e) {
Expand All @@ -123,13 +130,7 @@ protected void textChanged(@NotNull final DocumentEvent e) {
}
}
});

workspaceCache.subscribe(this::onVersionChanged);

mySdkCombo.addBrowseFolderListener("Select Flutter SDK Path", null, null,
FileChooserDescriptorFactory.createSingleFolderDescriptor(),
TextComponentAccessor.STRING_COMBOBOX_WHOLE_TEXT);

myFormatCodeOnSaveCheckBox.addChangeListener(
(e) -> myOrganizeImportsOnSaveCheckBox.setEnabled(myFormatCodeOnSaveCheckBox.isSelected()));
myShowStructuredErrors.addChangeListener(
Expand All @@ -139,7 +140,26 @@ protected void textChanged(@NotNull final DocumentEvent e) {
}

private void createUIComponents() {
mySdkCombo = new ComboboxWithBrowseButton(new ComboBox<>());
ExtendableTextComponent.Extension browseExtension =
ExtendableTextComponent.Extension.create(
AllIcons.General.OpenDisk,
AllIcons.General.OpenDiskHover,
"Select Flutter SDK Path",
() -> {
FileChooserDescriptor descriptor = FileChooserDescriptorFactory.createSingleFolderDescriptor();
VirtualFile file = FileChooser.chooseFile(descriptor, mySdkCombo, null, null);
mySdkCombo.setItem(file.getPath());
});
mySdkCombo = new ComboBox<>();
mySdkCombo.setEditor(new BasicComboBoxEditor() {
@Override
protected JTextField createEditorComponent() {
ExtendableTextField ecbEditor = new ExtendableTextField();
ecbEditor.addExtension(browseExtension);
ecbEditor.setBorder(null);
return ecbEditor;
}
});
settingsLink = ActionsOnSaveConfigurable.createGoToActionsOnSavePageLink();
}

Expand Down Expand Up @@ -293,8 +313,8 @@ public void reset() {
// (This can happen if the user changed the Dart SDK.)
try {
ignoringSdkChanges = true;
FlutterSdkUtil.addKnownSDKPathsToCombo(mySdkCombo.getComboBox());
mySdkCombo.getComboBox().getEditor().setItem(FileUtil.toSystemDependentName(path));
FlutterSdkUtil.addKnownSDKPathsToCombo(mySdkCombo);
mySdkCombo.getEditor().setItem(FileUtil.toSystemDependentName(path));
}
finally {
ignoringSdkChanges = false;
Expand Down Expand Up @@ -356,7 +376,7 @@ private void onVersionChanged() {
assert (workspace != null);

mySdkCombo.setEnabled(false);
mySdkCombo.getComboBox().getEditor()
mySdkCombo.getEditor()
.setItem(workspace.getRoot().getPath() + '/' + workspace.getSdkHome() + " <set by bazel project>");
}
}
Expand Down Expand Up @@ -442,7 +462,7 @@ public String getHelpTopic() {

@NotNull
private String getSdkPathText() {
return FileUtilRt.toSystemIndependentName(mySdkCombo.getComboBox().getEditor().getItem().toString().trim());
return FileUtilRt.toSystemIndependentName(mySdkCombo.getEditor().getItem().toString().trim());
}

private void checkFontPackages(String value, String previous) {
Expand Down