import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.DefaultActionGroup;
+import com.intellij.openapi.application.ApplicationManager;
+import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.fileChooser.FileChooserDescriptor;
import com.intellij.openapi.fileChooser.FileChooserFactory;
import com.intellij.openapi.ide.CopyPasteManager;
+import com.intellij.openapi.options.ex.SingleConfigurableEditor;
+import com.intellij.openapi.options.newEditor.SettingsDialog;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.*;
import com.intellij.openapi.util.SystemInfo;
import com.intellij.ui.HyperlinkLabel;
import com.intellij.ui.TextFieldWithHistory;
import com.intellij.ui.TextFieldWithHistoryWithBrowseButton;
+import com.intellij.util.Consumer;
import com.intellij.util.NotNullProducer;
import com.intellij.util.ObjectUtils;
import com.intellij.util.PlatformIcons;
import com.intellij.util.containers.ComparatorUtil;
import com.intellij.util.containers.ContainerUtil;
+import com.intellij.util.ui.update.UiNotifyConnector;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class SwingHelper {
private static final Logger LOG = Logger.getInstance(SwingHelper.class);
+ private static final String DIALOG_RESIZED_TO_FIT_TEXT = "INTELLIJ_DIALOG_RESIZED_TO_FIT_TEXT";
/**
* Creates panel whose content consists of given {@code children} components
LOG.info("DialogWrapper '" + dialogWrapper.getTitle() + "' has been re-sized (added width: " + dw + ", added height: " + dh + ")");
}
+ public static void resizeDialogToFitTextFor(@NotNull final JComponent... components) {
+ if (components.length == 0) return;
+ doWithDialogWrapper(components[0], new Consumer<DialogWrapper>() {
+ @Override
+ public void consume(final DialogWrapper dialogWrapper) {
+ if (dialogWrapper instanceof SettingsDialog || dialogWrapper instanceof SingleConfigurableEditor) {
+ for (Component component : components) {
+ if (component instanceof TextFieldWithHistoryWithBrowseButton) {
+ setPreferredWidthToFitText((TextFieldWithHistoryWithBrowseButton)component);
+ }
+ else if (component instanceof TextFieldWithBrowseButton) {
+ setPreferredWidthToFitText((TextFieldWithBrowseButton)component);
+ }
+ else if (component instanceof JTextField) {
+ setPreferredWidthToFitText((JTextField)component);
+ }
+ }
+ ApplicationManager.getApplication().invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ adjustDialogSizeToFitPreferredSize(dialogWrapper);
+ }
+ }, ModalityState.any());
+ }
+ }
+ });
+ }
+
+ private static void doWithDialogWrapper(@NotNull final JComponent component, @NotNull final Consumer<DialogWrapper> consumer) {
+ UIUtil.invokeLaterIfNeeded(new Runnable() {
+ @Override
+ public void run() {
+ if (component.getClientProperty(DIALOG_RESIZED_TO_FIT_TEXT) != null) {
+ return;
+ }
+ component.putClientProperty(DIALOG_RESIZED_TO_FIT_TEXT, true);
+ DialogWrapper dialogWrapper = DialogWrapper.findInstance(component);
+ if (dialogWrapper != null) {
+ consumer.consume(dialogWrapper);
+ }
+ else {
+ UiNotifyConnector.doWhenFirstShown(component, new Runnable() {
+ @Override
+ public void run() {
+ DialogWrapper dialogWrapper = DialogWrapper.findInstance(component);
+ if (dialogWrapper != null) {
+ consumer.consume(dialogWrapper);
+ }
+ }
+ });
+ }
+ }
+ });
+ }
+
public static <T> void updateItems(@NotNull JComboBox comboBox,
@NotNull List<T> newItems,
@Nullable T newSelectedItemIfSelectionCannotBePreserved) {
BrowserUtil.browse(myUrl);
}
}
-}
\ No newline at end of file
+}