From a89aa320b7f995330f0115aa0d7bcb9e72aef194 Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Fri, 17 Oct 2014 18:19:05 +0400 Subject: [PATCH] get rid of fixed base panel size --- .../org/jetbrains/plugins/ipnb/IpnbUtils.java | 32 +++++++++-- .../plugins/ipnb/editor/IpnbEditorUtil.java | 1 - .../ipnb/editor/panels/IpnbEditablePanel.java | 54 +++++++++++++++++-- .../ipnb/editor/panels/IpnbFilePanel.java | 5 -- .../ipnb/editor/panels/IpnbHeadingPanel.java | 2 +- .../panels/code/IpnbCodeSourcePanel.java | 18 +++---- 6 files changed, 85 insertions(+), 27 deletions(-) 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 extends IpnbPanel { private static final Logger LOG = Logger.getInstance(IpnbEditablePanel.class); @@ -84,6 +84,24 @@ public abstract class IpnbEditablePanel 0) { + offset = Utilities.getRowStart(textArea, offset) - 1; + lineCount++; + } + } catch (BadLocationException e) { + return 1; + } + return lineCount; + } + public boolean contains(int y) { return y>= getTop() && y<=getBottom(); } diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/IpnbFilePanel.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/IpnbFilePanel.java index 043f03e103bc..33a5e19f05e9 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/IpnbFilePanel.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/IpnbFilePanel.java @@ -155,11 +155,6 @@ public class IpnbFilePanel extends JPanel implements Scrollable, DataProvider { c.gridwidth = 1; c.insets = new Insets(INSET_Y, INSET_X, 0, 0); - if (myIpnbPanels.isEmpty()) { - final int width = IpnbEditorUtil.PANEL_WIDTH + IpnbEditorUtil.PROMPT_SIZE.width; - final JLabel label = new JLabel(""); - add(label, c); - } final IpnbEditablePanel selectedCell = getSelectedCell(); final int index = myIpnbPanels.indexOf(selectedCell); myIpnbFile.addCell(cell, index + 1); diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/IpnbHeadingPanel.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/IpnbHeadingPanel.java index 448ea28d74d8..38c5cc4512f0 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/IpnbHeadingPanel.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/IpnbHeadingPanel.java @@ -18,7 +18,7 @@ public class IpnbHeadingPanel extends IpnbEditablePanel" + myCell.getSourceAsString() + "" + myCell.getSourceAsString() + ""; } diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/code/IpnbCodeSourcePanel.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/code/IpnbCodeSourcePanel.java index 2d0f3cb76a9c..c5044c4e23ec 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/code/IpnbCodeSourcePanel.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/code/IpnbCodeSourcePanel.java @@ -80,9 +80,13 @@ public class IpnbCodeSourcePanel extends IpnbPanel imp @Override public void keyReleased(KeyEvent e) { final int keyCode = e.getKeyCode(); - final int height = myEditor.getLineHeight() * Math.max(myEditor.getDocument().getLineCount(), 1); - component.setPreferredSize(new Dimension(IpnbEditorUtil.PANEL_WIDTH, height)); final Container parent = myParent.getParent(); + + final int height = myEditor.getLineHeight() * Math.max(myEditor.getDocument().getLineCount(), 1) + 5; + contentComponent.setPreferredSize(new Dimension(parent.getWidth() - 300, height)); + myParent.revalidate(); + myParent.repaint(); + if (parent instanceof IpnbFilePanel) { IpnbFilePanel ipnbFilePanel = (IpnbFilePanel)parent; ipnbFilePanel.revalidate(); @@ -115,16 +119,6 @@ public class IpnbCodeSourcePanel extends IpnbPanel imp panel.add(component); - component.addHierarchyBoundsListener(new HierarchyBoundsAdapter() { - @Override - public void ancestorResized(HierarchyEvent e) { - if (e.getChanged() instanceof IpnbFilePanel) { - myParent.setPreferredSize(new Dimension(e.getChanged().getWidth() - 200, myParent.getPreferredSize().height)); - } - } - }); - component.setPreferredSize(new Dimension(IpnbEditorUtil.PANEL_WIDTH, component.getPreferredSize().height)); - component.setMinimumSize(new Dimension(100, component.getPreferredSize().height)); return panel; } }