diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/IpnbUtils.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/IpnbUtils.java index d38894085224..9dae7b77101a 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/IpnbUtils.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/IpnbUtils.java @@ -11,7 +11,7 @@ import net.sourceforge.jeuclid.context.LayoutContextImpl; import net.sourceforge.jeuclid.context.Parameter; import net.sourceforge.jeuclid.converter.Converter; import org.jetbrains.annotations.NotNull; -import org.jetbrains.plugins.ipnb.editor.IpnbEditorUtil; +import org.jetbrains.plugins.ipnb.editor.panels.IpnbFilePanel; import org.jetbrains.plugins.ipnb.editor.panels.IpnbTexPackageDefinitions; import org.w3c.dom.Document; import org.xml.sax.SAXException; @@ -26,6 +26,8 @@ import javax.swing.text.html.HTMLEditorKit; import javax.swing.text.html.StyleSheet; import javax.xml.parsers.ParserConfigurationException; import java.awt.*; +import java.awt.event.HierarchyBoundsAdapter; +import java.awt.event.HierarchyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.image.BufferedImage; @@ -42,8 +44,7 @@ public class IpnbUtils { private static final String ourImagePrefix = "http:\\image"; private static final Font ourFont = new Font(Font.SERIF, Font.PLAIN, 16); private static final String ourBodyRule = "body { font-family: \"DejaVu\"; " + - "font-size: " + ourFont.getSize() + "pt; " + - "width: " + IpnbEditorUtil.PANEL_WIDTH + "px;}"; + "font-size: " + ourFont.getSize() + "pt;}"; private static final String ourCodeRule = "code { font-family: \"DejaVu\"; " + "font-size: " + ourFont.getSize() + "pt;}"; @@ -88,6 +89,7 @@ public class IpnbUtils { final String html = convertToHtml(source, editorPane); editorPane.setText("
" + html + ""); + editorPane.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { @@ -97,9 +99,33 @@ public class IpnbUtils { }); editorPane.addHyperlinkListener(new BrowserHyperlinkListener()); //TODO: jump to the section (see User Interface#Utilities) + + editorPane.addHierarchyBoundsListener(new IpnbHierarchyBoundsAdapter(editorPane)); + panel.add(editorPane); } + public static class IpnbHierarchyBoundsAdapter extends HierarchyBoundsAdapter { + private final JComponent myComponent; + + public IpnbHierarchyBoundsAdapter(@NotNull final JComponent component) { + myComponent = component; + } + + @Override + public void ancestorResized(HierarchyEvent e) { + final Component component = e.getChanged(); + if (component instanceof IpnbFilePanel) { + final int width = component.getWidth(); + if (width > 0) { + myComponent.setPreferredSize(new Dimension(width - 300, myComponent.getPreferredSize().height)); + myComponent.revalidate(); + myComponent.repaint(); + } + } + } + } + private static String convertToHtml(@NotNull final String source, @NotNull final JEditorPane editorPane) { final StringBuilder result = new StringBuilder(); StringBuilder markdown = new StringBuilder(); diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/IpnbEditorUtil.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/IpnbEditorUtil.java index a756d9c93b96..b78c44464d89 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/IpnbEditorUtil.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/IpnbEditorUtil.java @@ -44,7 +44,6 @@ public class IpnbEditorUtil { public enum PromptType { In, Out, None } public static Dimension PROMPT_SIZE = new Dimension(80, 30); - public static int PANEL_WIDTH = (int)(Toolkit.getDefaultToolkit().getScreenSize().width * 0.5); public static Editor createPythonCodeEditor(@NotNull final Project project, @NotNull final IpnbCodeSourcePanel codeSourcePanel) { final EditorFactory editorFactory = EditorFactory.getInstance(); diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/IpnbEditablePanel.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/IpnbEditablePanel.java index d64f830b44be..33c04fac5c4e 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/IpnbEditablePanel.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/IpnbEditablePanel.java @@ -6,14 +6,14 @@ import com.intellij.ui.Gray; import com.intellij.ui.JBColor; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; +import org.jetbrains.plugins.ipnb.IpnbUtils; import org.jetbrains.plugins.ipnb.format.cells.IpnbEditableCell; import javax.swing.*; +import javax.swing.text.BadLocationException; +import javax.swing.text.Utilities; import java.awt.*; -import java.awt.event.KeyAdapter; -import java.awt.event.KeyEvent; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; +import java.awt.event.*; public abstract class IpnbEditablePanel