From 6ae2aac04aaf1836af1dd666abfd34b2cac4a2c8 Mon Sep 17 00:00:00 2001 From: "Gregory.Shrago" Date: Fri, 6 Nov 2015 03:32:02 +0300 Subject: [PATCH] DBE-515 Connecting dialog: provide a way to see the full database error message --- .../colors/ColorAndFontDescriptionPanel.java | 5 +- .../impl/ui/ConvertProjectDialog.java | 2 +- .../src/com/intellij/openapi/ui/Messages.java | 69 ++++++++++--------- .../ui/PasswordPromptComponent.form | 16 ++--- .../ui/PasswordPromptComponent.java | 17 ++--- 5 files changed, 56 insertions(+), 53 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/application/options/colors/ColorAndFontDescriptionPanel.java b/platform/lang-impl/src/com/intellij/application/options/colors/ColorAndFontDescriptionPanel.java index 0381cfbd4a87..f5001e97eb0b 100644 --- a/platform/lang-impl/src/com/intellij/application/options/colors/ColorAndFontDescriptionPanel.java +++ b/platform/lang-impl/src/com/intellij/application/options/colors/ColorAndFontDescriptionPanel.java @@ -36,8 +36,9 @@ import javax.swing.event.HyperlinkEvent; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.util.*; +import java.util.Collections; import java.util.List; +import java.util.Map; /** * @author cdr @@ -106,7 +107,7 @@ public class ColorAndFontDescriptionPanel extends JPanel { c.addActionListener(actionListener); } myEffectsCombo.addActionListener(actionListener); - Messages.configureMessagePaneUi(myInheritanceLabel, "", false); + Messages.configureMessagePaneUi(myInheritanceLabel, "", null); myInheritanceLabel.addHyperlinkListener(new HyperlinkAdapter() { @Override protected void hyperlinkActivated(HyperlinkEvent e) { diff --git a/platform/lang-impl/src/com/intellij/conversion/impl/ui/ConvertProjectDialog.java b/platform/lang-impl/src/com/intellij/conversion/impl/ui/ConvertProjectDialog.java index cf73dba84a3a..a9e531c729b3 100644 --- a/platform/lang-impl/src/com/intellij/conversion/impl/ui/ConvertProjectDialog.java +++ b/platform/lang-impl/src/com/intellij/conversion/impl/ui/ConvertProjectDialog.java @@ -77,7 +77,7 @@ public class ConvertProjectDialog extends DialogWrapper { ApplicationNamesInfo.getInstance().getFullProductName())); } message.append(IdeBundle.message("conversion.dialog.text.2", myBackupDir.getAbsolutePath())); - Messages.configureMessagePaneUi(myTextPane, XmlStringUtil.wrapInHtml(message), false); + Messages.configureMessagePaneUi(myTextPane, XmlStringUtil.wrapInHtml(message), null); myTextPane.addHyperlinkListener(new HyperlinkListener() { @Override diff --git a/platform/platform-api/src/com/intellij/openapi/ui/Messages.java b/platform/platform-api/src/com/intellij/openapi/ui/Messages.java index 269afab8d08c..6e56ff04df27 100644 --- a/platform/platform-api/src/com/intellij/openapi/ui/Messages.java +++ b/platform/platform-api/src/com/intellij/openapi/ui/Messages.java @@ -29,11 +29,7 @@ import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.wm.IdeFrame; import com.intellij.openapi.wm.WindowManager; -import com.intellij.ui.BrowserHyperlinkListener; -import com.intellij.ui.DocumentAdapter; -import com.intellij.ui.InsertPathAction; -import com.intellij.ui.ScrollPaneFactory; -import com.intellij.ui.MessageException; +import com.intellij.ui.*; import com.intellij.ui.components.JBScrollPane; import com.intellij.ui.mac.MacMessages; import com.intellij.ui.mac.foundation.MacUtil; @@ -1519,25 +1515,8 @@ public class Messages { panel.add(container, BorderLayout.WEST); } if (myMessage != null) { - final JTextPane messageComponent = createMessageComponent(myMessage); - - final Dimension screenSize = messageComponent.getToolkit().getScreenSize(); - final Dimension textSize = messageComponent.getPreferredSize(); - if (myMessage.length() > 100) { - final JScrollPane pane = ScrollPaneFactory.createScrollPane(messageComponent); - pane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); - pane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED); - pane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); - final int scrollSize = (int)new JScrollBar(Adjustable.VERTICAL).getPreferredSize().getWidth(); - final Dimension preferredSize = - new Dimension(Math.min(textSize.width, screenSize.width / 2) + scrollSize, - Math.min(textSize.height, screenSize.height / 3) + scrollSize); - pane.setPreferredSize(preferredSize); - panel.add(pane, BorderLayout.CENTER); - } - else { - panel.add(messageComponent, BorderLayout.CENTER); - } + JTextPane messageComponent = createMessageComponent(myMessage); + panel.add(wrapToScrollPaneIfNeeded(messageComponent, 50, 10), BorderLayout.CENTER); } return panel; } @@ -1586,22 +1565,25 @@ public class Messages { @NotNull public static JTextPane configureMessagePaneUi(JTextPane messageComponent, String message) { - return configureMessagePaneUi(messageComponent, message, true); + JTextPane pane = configureMessagePaneUi(messageComponent, message, null); + if (UIUtil.HTML_MIME.equals(pane.getContentType())) { + pane.addHyperlinkListener(BrowserHyperlinkListener.INSTANCE); + } + return pane; } @NotNull - public static JTextPane configureMessagePaneUi(JTextPane messageComponent, - String message, - final boolean addBrowserHyperlinkListener) { - messageComponent.setFont(UIUtil.getLabelFont()); + public static JTextPane configureMessagePaneUi(@NotNull JTextPane messageComponent, + @Nullable String message, + @Nullable UIUtil.FontSize fontSize) { + UIUtil.FontSize fixedFontSize = fontSize == null ? UIUtil.FontSize.NORMAL : fontSize; + messageComponent.setFont(UIUtil.getLabelFont(fixedFontSize)); if (BasicHTML.isHTMLString(message)) { - final HTMLEditorKit editorKit = new HTMLEditorKit(); - editorKit.getStyleSheet().addRule(UIUtil.displayPropertiesToCSS(UIUtil.getLabelFont(), UIUtil.getLabelForeground())); + HTMLEditorKit editorKit = new HTMLEditorKit(); + Font font = UIUtil.getLabelFont(fixedFontSize); + editorKit.getStyleSheet().addRule(UIUtil.displayPropertiesToCSS(font, UIUtil.getLabelForeground())); messageComponent.setEditorKit(editorKit); messageComponent.setContentType(UIUtil.HTML_MIME); - if (addBrowserHyperlinkListener) { - messageComponent.addHyperlinkListener(BrowserHyperlinkListener.INSTANCE); - } } messageComponent.setText(message); messageComponent.setEditable(false); @@ -1621,6 +1603,25 @@ public class Messages { return messageComponent; } + @NotNull + public static JComponent wrapToScrollPaneIfNeeded(@NotNull JComponent comp, int columns, int lines) { + float fontSize = comp.getFont().getSize2D(); + Dimension maxDim = new Dimension((int)(fontSize * columns), (int)(fontSize * lines)); + Dimension prefDim = comp.getPreferredSize(); + if (prefDim.width <= maxDim.width && prefDim.height <= maxDim.height) return comp; + + JScrollPane scrollPane = ScrollPaneFactory.createScrollPane(comp); + scrollPane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); + scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED); + scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); + int barWidth = UIUtil.getScrollBarWidth(); + Dimension preferredSize = new Dimension( + Math.min(prefDim.width, maxDim.width) + barWidth, + Math.min(prefDim.height, maxDim.height) + barWidth); + scrollPane.setPreferredSize(preferredSize); + return scrollPane; + } + protected static class TwoStepConfirmationDialog extends MessageDialog { private JCheckBox myCheckBox; private final String myCheckboxText; diff --git a/platform/platform-impl/src/com/intellij/ide/passwordSafe/ui/PasswordPromptComponent.form b/platform/platform-impl/src/com/intellij/ide/passwordSafe/ui/PasswordPromptComponent.form index 1e4e36458644..776472f27c50 100644 --- a/platform/platform-impl/src/com/intellij/ide/passwordSafe/ui/PasswordPromptComponent.form +++ b/platform/platform-impl/src/com/intellij/ide/passwordSafe/ui/PasswordPromptComponent.form @@ -18,14 +18,6 @@ - - - - - - - - @@ -101,6 +93,14 @@ + + + + + + + + diff --git a/platform/platform-impl/src/com/intellij/ide/passwordSafe/ui/PasswordPromptComponent.java b/platform/platform-impl/src/com/intellij/ide/passwordSafe/ui/PasswordPromptComponent.java index 7a30eac2a6ad..0393b983ca60 100644 --- a/platform/platform-impl/src/com/intellij/ide/passwordSafe/ui/PasswordPromptComponent.java +++ b/platform/platform-impl/src/com/intellij/ide/passwordSafe/ui/PasswordPromptComponent.java @@ -22,17 +22,18 @@ import com.intellij.util.ui.DialogUtil; import com.intellij.util.ui.UIUtil; import javax.swing.*; +import java.awt.*; /** * @author gregsh */ public class PasswordPromptComponent { private JPanel myRootPanel; + private JPanel myMessagePanel; private JPanel myUserPanel; private JPanel myPasswordPanel; private JPasswordField myPasswordField; private JCheckBox myRememberCheckBox; - private JLabel myMessageLabel; private JLabel myPasswordLabel; private JLabel myUserLabel; private JTextField myUserTextField; @@ -41,17 +42,17 @@ public class PasswordPromptComponent { public PasswordPromptComponent(PasswordSafeSettings.ProviderType type, String message, boolean showUserName, - String passwordPrompt, - String rememberPrompt) { + String passwordFieldLabel, + String rememberCheckBoxLabel) { myIconLabel.setText(""); myIconLabel.setIcon(Messages.getWarningIcon()); - myMessageLabel.setFont(UIUtil.getLabelFont(UIUtil.FontSize.SMALL)); - myMessageLabel.setText(message); + JTextPane messageField = Messages.configureMessagePaneUi(new JTextPane(), message, UIUtil.FontSize.SMALL); + myMessagePanel.add(Messages.wrapToScrollPaneIfNeeded(messageField, 0, 4), BorderLayout.CENTER); setTargetProviderType(type); setUserInputVisible(showUserName); - if (passwordPrompt != null) myPasswordLabel.setText(passwordPrompt); - if (rememberPrompt != null) { - myRememberCheckBox.setText(rememberPrompt); + if (passwordFieldLabel != null) myPasswordLabel.setText(passwordFieldLabel); + if (rememberCheckBoxLabel != null) { + myRememberCheckBox.setText(rememberCheckBoxLabel); DialogUtil.registerMnemonic(myRememberCheckBox); } }