mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-08 15:09:39 +07:00
IDEA-320012 Fix cosmetics of 'New File' popup
GitOrigin-RevId: 317c38f0c90258edca9e7a3941a55d8ceab41416
This commit is contained in:
committed by
intellij-monorepo-bot
parent
f44687a1e8
commit
66e92024b5
@@ -17,11 +17,13 @@ import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.util.List;
|
||||
|
||||
import static com.intellij.ide.actions.newclass.TemplateListCellRendererKt.createTemplateListCellRenderer;
|
||||
|
||||
public class CreateWithTemplatesDialogPanel extends NewItemWithTemplatesPopupPanel<CreateWithTemplatesDialogPanel.TemplatePresentation> {
|
||||
public record TemplatePresentation(@Nls @NotNull String kind, @Nullable Icon icon, @NotNull String templateName) {}
|
||||
|
||||
public CreateWithTemplatesDialogPanel(@Nullable String selectedItem, @NotNull List<? extends TemplatePresentation> templates) {
|
||||
super(templates, new TemplateListCellRenderer());
|
||||
super(templates, ExperimentalUI.isNewUI() ? createTemplateListCellRenderer() : new TemplateListCellRenderer());
|
||||
myTemplatesList.addListSelectionListener(e -> {
|
||||
TemplatePresentation selectedValue = myTemplatesList.getSelectedValue();
|
||||
if (selectedValue != null) {
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.ide.actions.newclass
|
||||
|
||||
import com.intellij.ui.dsl.listCellRenderer.listCellRenderer
|
||||
import javax.swing.ListCellRenderer
|
||||
|
||||
internal fun createTemplateListCellRenderer(): ListCellRenderer<CreateWithTemplatesDialogPanel.TemplatePresentation> {
|
||||
return listCellRenderer {
|
||||
value.icon?.let {
|
||||
icon(it)
|
||||
}
|
||||
text(value.kind)
|
||||
}
|
||||
}
|
||||
@@ -12,6 +12,7 @@ import com.intellij.openapi.ui.popup.JBPopup;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.openapi.util.NlsContexts;
|
||||
import com.intellij.ui.DocumentAdapter;
|
||||
import com.intellij.ui.ExperimentalUI;
|
||||
import com.intellij.ui.awt.RelativePoint;
|
||||
import com.intellij.ui.components.JBPanel;
|
||||
import com.intellij.ui.components.JBTextField;
|
||||
@@ -22,6 +23,7 @@ import com.intellij.util.Consumer;
|
||||
import com.intellij.util.SlowOperations;
|
||||
import com.intellij.util.ui.JBInsets;
|
||||
import com.intellij.util.ui.JBUI;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import javax.swing.*;
|
||||
@@ -50,6 +52,10 @@ public class NewItemSimplePopupPanel extends JBPanel implements Disposable {
|
||||
|
||||
myTextField = createTextField(liveValidation);
|
||||
add(myTextField, BorderLayout.NORTH);
|
||||
setBottomSpace(true);
|
||||
if (ExperimentalUI.isNewUI()) {
|
||||
setBackground(JBUI.CurrentTheme.NewClassDialog.panelBackground());
|
||||
}
|
||||
|
||||
myErrorShowPoint = new RelativePoint(myTextField, new Point(0, myTextField.getHeight()));
|
||||
}
|
||||
@@ -70,6 +76,13 @@ public class NewItemSimplePopupPanel extends JBPanel implements Disposable {
|
||||
setMessage(warning, true);
|
||||
}
|
||||
|
||||
@ApiStatus.Internal
|
||||
protected void setBottomSpace(boolean spaceNeeded) {
|
||||
if (ExperimentalUI.isNewUI()) {
|
||||
setBorder(spaceNeeded ? JBUI.Borders.emptyBottom(JBUI.CurrentTheme.Popup.bodyBottomInsetNoAd()) : null);
|
||||
}
|
||||
}
|
||||
|
||||
private void setMessage(@NlsContexts.DialogMessage String message, boolean isWarning) {
|
||||
myTextField.putClientProperty("JComponent.outline", message != null ? (isWarning ? "warning" : "error") : null);
|
||||
|
||||
@@ -101,20 +114,25 @@ public class NewItemSimplePopupPanel extends JBPanel implements Disposable {
|
||||
return myTextField;
|
||||
}
|
||||
|
||||
protected @NotNull ExtendableTextField createTextField(boolean liveErrorValidation) {
|
||||
private @NotNull ExtendableTextField createTextField(boolean liveErrorValidation) {
|
||||
ExtendableTextField res = new ExtendableTextField();
|
||||
|
||||
int textFieldHeight = ExperimentalUI.isNewUI() ? 32 : 28;
|
||||
Dimension minSize = res.getMinimumSize();
|
||||
Dimension prefSize = res.getPreferredSize();
|
||||
minSize.height = JBUIScale.scale(28);
|
||||
prefSize.height = JBUIScale.scale(28);
|
||||
minSize.height = JBUIScale.scale(textFieldHeight);
|
||||
prefSize.height = JBUIScale.scale(textFieldHeight);
|
||||
res.setMinimumSize(minSize);
|
||||
res.setPreferredSize(prefSize);
|
||||
res.setColumns(30);
|
||||
|
||||
Border border = JBUI.Borders.customLine(JBUI.CurrentTheme.NewClassDialog.bordersColor(), 1, 0, 0, 0);
|
||||
Border errorBorder = new ErrorBorder(res.getBorder());
|
||||
res.setBorder(JBUI.Borders.merge(border, errorBorder, false));
|
||||
if (ExperimentalUI.isNewUI()) {
|
||||
res.setBorder(JBUI.Borders.compound(errorBorder, JBUI.Borders.emptyLeft(13)));
|
||||
} else {
|
||||
Border border = JBUI.Borders.customLine(JBUI.CurrentTheme.NewClassDialog.bordersColor(), 1, 0, 0, 0);
|
||||
res.setBorder(JBUI.Borders.compound(border, errorBorder));
|
||||
}
|
||||
res.setBackground(JBUI.CurrentTheme.NewClassDialog.searchFieldBackground());
|
||||
|
||||
res.putClientProperty(TextComponentEmptyText.STATUS_VISIBLE_FUNCTION, (Predicate<JBTextField>)field -> field.getText().isEmpty());
|
||||
|
||||
@@ -4,11 +4,12 @@ package com.intellij.ide.ui.newItemPopup;
|
||||
import com.intellij.ide.IdeBundle;
|
||||
import com.intellij.ui.ExperimentalUI;
|
||||
import com.intellij.ui.ScrollingUtil;
|
||||
import com.intellij.ui.SeparatorComponent;
|
||||
import com.intellij.ui.SeparatorOrientation;
|
||||
import com.intellij.ui.components.JBBox;
|
||||
import com.intellij.ui.components.JBList;
|
||||
import com.intellij.ui.components.JBScrollPane;
|
||||
import com.intellij.ui.render.RenderingUtil;
|
||||
import com.intellij.util.ui.JBEmptyBorder;
|
||||
import com.intellij.util.ui.JBUI;
|
||||
import com.intellij.util.ui.accessibility.ScreenReader;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -16,8 +17,8 @@ import org.jetbrains.annotations.NotNull;
|
||||
import javax.swing.*;
|
||||
import javax.swing.border.Border;
|
||||
import java.awt.*;
|
||||
import java.awt.event.KeyEvent;
|
||||
import java.awt.event.KeyAdapter;
|
||||
import java.awt.event.KeyEvent;
|
||||
import java.awt.event.MouseAdapter;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.util.ArrayList;
|
||||
@@ -75,16 +76,20 @@ public class NewItemWithTemplatesPopupPanel<T> extends NewItemSimplePopupPanel {
|
||||
scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
|
||||
templatesListHolder = new JBBox(BoxLayout.Y_AXIS);
|
||||
|
||||
Border lineBorder = JBUI.Borders.customLineTop(JBUI.CurrentTheme.NewClassDialog.bordersColor());
|
||||
JBEmptyBorder topMarginBorder = JBUI.Borders.emptyTop(JBUI.CurrentTheme.NewClassDialog.fieldsSeparatorWidth());
|
||||
Border outerBorder = JBUI.Borders.merge(topMarginBorder, lineBorder, true);
|
||||
|
||||
setBottomSpace(false);
|
||||
if (ExperimentalUI.isNewUI()) {
|
||||
scrollPane.setOverlappingScrollBar(true);
|
||||
SeparatorComponent separator =
|
||||
new SeparatorComponent(JBUI.CurrentTheme.Popup.separatorColor(), SeparatorOrientation.HORIZONTAL);
|
||||
separator.setHGap(JBUI.CurrentTheme.Popup.Selection.LEFT_RIGHT_INSET.get());
|
||||
templatesListHolder.add(separator);
|
||||
myTemplatesList.setBorder(JBUI.Borders.empty(4, 0, JBUI.CurrentTheme.Popup.bodyBottomInsetNoAd(), 0));
|
||||
templatesListHolder.setOpaque(true);
|
||||
templatesListHolder.setBackground(JBUI.CurrentTheme.Popup.BACKGROUND);
|
||||
myTemplatesList.setBorder(outerBorder);
|
||||
}
|
||||
else {
|
||||
Border lineBorder = JBUI.Borders.customLineTop(JBUI.CurrentTheme.NewClassDialog.bordersColor());
|
||||
Border outerBorder = JBUI.Borders.compound(lineBorder, JBUI.Borders.emptyTop(JBUI.CurrentTheme.NewClassDialog.fieldsSeparatorWidth()));
|
||||
templatesListHolder.setBorder(JBUI.Borders.merge(lineBorder, outerBorder, true));
|
||||
}
|
||||
templatesListHolder.add(scrollPane);
|
||||
@@ -102,6 +107,7 @@ public class NewItemWithTemplatesPopupPanel<T> extends NewItemSimplePopupPanel {
|
||||
|
||||
protected void setTemplatesListVisible(boolean visible) {
|
||||
if (templatesListHolder.isVisible() != visible) {
|
||||
setBottomSpace(!visible);
|
||||
templatesListHolder.setVisible(visible);
|
||||
myVisibilityListeners.forEach(l -> l.visibilityChanged(visible));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user