--- /dev/null
+package org.jetbrains.plugins.ipnb.editor.actions;
+
+import com.intellij.openapi.actionSystem.AnAction;
+import com.intellij.openapi.actionSystem.AnActionEvent;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.plugins.ipnb.editor.panels.code.IpnbCodePanel;
+
+public class IpnbHideOutputAction extends AnAction {
+ private IpnbCodePanel myParent;
+
+ public IpnbHideOutputAction(@NotNull IpnbCodePanel parent) {
+ super("Toggle Output Button (Double-Click)");
+ myParent = parent;
+ }
+
+ @Override
+ public void actionPerformed(AnActionEvent e) {
+ myParent.hideOutputPanel();
+ }
+}
package org.jetbrains.plugins.ipnb.editor.panels;
-import com.intellij.ide.DataManager;
-import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.actionSystem.DefaultActionGroup;
import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.ui.popup.JBPopupFactory;
import com.intellij.openapi.ui.popup.ListPopup;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.ui.JBColor;
return (myEditing && myEditablePanel != null) ? myEditablePanel.getCaretPosition() : -1;
}
- public void addRightClickMenu() {
+ @Override
+ protected void addRightClickMenu() {
myViewPanel.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
if (SwingUtilities.isRightMouseButton(e) && e.getClickCount() == 1) {
final DefaultActionGroup group = new DefaultActionGroup(new IpnbMergeCellAboveAction(), new IpnbMergeCellBelowAction());
- final ListPopup menu = createClickMenu(group);
+ final ListPopup menu = createPopupMenu(group);
menu.show(RelativePoint.fromScreen(e.getLocationOnScreen()));
}
}
public void mousePressed(MouseEvent e) {
if (SwingUtilities.isRightMouseButton(e) && e.getClickCount() == 1) {
final DefaultActionGroup group = new DefaultActionGroup(new IpnbSplitCellAction());
- final ListPopup menu = createClickMenu(group);
+ final ListPopup menu = createPopupMenu(group);
menu.show(RelativePoint.fromScreen(e.getLocationOnScreen()));
}
}
});
}
- protected ListPopup createClickMenu(@NotNull DefaultActionGroup group) {
- final DataContext context = DataManager.getInstance().getDataContext(this);
- return JBPopupFactory.getInstance().createActionGroupPopup(null, group, context, JBPopupFactory.ActionSelectionAid.MNEMONICS,
- false);
- }
+
@Nullable
public String getText(int from, int to) {
package org.jetbrains.plugins.ipnb.editor.panels;
+import com.intellij.ide.DataManager;
+import com.intellij.openapi.actionSystem.DataContext;
+import com.intellij.openapi.actionSystem.DefaultActionGroup;
+import com.intellij.openapi.ui.popup.JBPopupFactory;
+import com.intellij.openapi.ui.popup.ListPopup;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.plugins.ipnb.format.cells.IpnbCell;
return myCell;
}
+ public ListPopup createPopupMenu(@NotNull DefaultActionGroup group) {
+ final DataContext context = DataManager.getInstance().getDataContext(this);
+ return JBPopupFactory.getInstance().createActionGroupPopup(null, group, context, JBPopupFactory.ActionSelectionAid.MNEMONICS,
+ false);
+ }
+
protected abstract T createViewPanel();
+
+ protected abstract void addRightClickMenu();
}
package org.jetbrains.plugins.ipnb.editor.panels.code;
+import com.intellij.openapi.actionSystem.DefaultActionGroup;
import com.intellij.openapi.editor.colors.EditorColorsManager;
+import com.intellij.openapi.ui.popup.ListPopup;
+import com.intellij.ui.awt.RelativePoint;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.plugins.ipnb.editor.IpnbEditorUtil;
+import org.jetbrains.plugins.ipnb.editor.actions.IpnbHideOutputAction;
import org.jetbrains.plugins.ipnb.editor.panels.IpnbFilePanel;
import org.jetbrains.plugins.ipnb.editor.panels.IpnbPanel;
import org.jetbrains.plugins.ipnb.format.cells.output.IpnbOutputCell;
import javax.swing.*;
import java.awt.*;
-import java.awt.event.MouseListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
public class IpnbCodeOutputPanel<K extends IpnbOutputCell> extends IpnbPanel<JComponent, K> {
protected final IpnbFilePanel myParent;
+ private final IpnbCodePanel myCodePanel;
- public IpnbCodeOutputPanel(@NotNull final K cell, @Nullable final IpnbFilePanel parent, @Nullable final MouseListener hideOutputAdapter) {
+ public IpnbCodeOutputPanel(@NotNull final K cell, @Nullable final IpnbFilePanel parent, @Nullable final IpnbCodePanel codePanel) {
super(cell, new BorderLayout());
myParent = parent;
myViewPanel = createViewPanel();
add(myViewPanel);
- addHideOutputListener(hideOutputAdapter);
+ myCodePanel = codePanel;
+ myViewPanel.addMouseListener(createHideOutputListener());
+ addRightClickMenu();
}
protected JComponent createViewPanel() {
textArea.setBackground(IpnbEditorUtil.getBackground());
return textArea;
}
+
+ @Override
+ public void addRightClickMenu() {
+ myViewPanel.addMouseListener(new MouseAdapter() {
+ @Override
+ public void mousePressed(MouseEvent e) {
+ if (SwingUtilities.isRightMouseButton(e) && e.getClickCount() == 1) {
+ final ListPopup menu = createPopupMenu(new DefaultActionGroup(new IpnbHideOutputAction(myCodePanel)));
+ menu.show(RelativePoint.fromScreen(e.getLocationOnScreen()));
+ }
+ }
+ });
+ }
+
+ @NotNull
+ private MouseAdapter createHideOutputListener() {
+ return new MouseAdapter() {
- public void addHideOutputListener(@Nullable final MouseListener mouseAdapter) {
- myViewPanel.addMouseListener(mouseAdapter);
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ if (SwingUtilities.isLeftMouseButton(e) && e.getClickCount() == 2) {
+ myCodePanel.hideOutputPanel();
+ }
+ }
+ };
}
}
import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.Editor;
-import com.intellij.openapi.editor.event.EditorMouseAdapter;
-import com.intellij.openapi.editor.event.EditorMouseEvent;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.VerticalFlowLayout;
import com.intellij.openapi.ui.popup.ListPopup;
import org.jetbrains.plugins.ipnb.configuration.IpnbConnectionManager;
import org.jetbrains.plugins.ipnb.editor.IpnbEditorUtil;
import org.jetbrains.plugins.ipnb.editor.IpnbFileEditor;
-import org.jetbrains.plugins.ipnb.editor.actions.IpnbMergeCellAboveAction;
-import org.jetbrains.plugins.ipnb.editor.actions.IpnbMergeCellBelowAction;
-import org.jetbrains.plugins.ipnb.editor.actions.IpnbSplitCellAction;
+import org.jetbrains.plugins.ipnb.editor.actions.IpnbHideOutputAction;
import org.jetbrains.plugins.ipnb.editor.panels.IpnbEditablePanel;
import org.jetbrains.plugins.ipnb.editor.panels.IpnbFilePanel;
import org.jetbrains.plugins.ipnb.editor.panels.IpnbPanel;
import javax.swing.*;
import java.awt.*;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Arrays;
private final static String COLLAPSED_METADATA = "collapsed";
private IpnbCodeSourcePanel myCodeSourcePanel;
private final List<IpnbPanel> myOutputPanels = Lists.newArrayList();
+ private HideableOutputPanel myHideableOutputPanel;
private boolean mySelectNext;
public IpnbCodePanel(@NotNull final Project project, @NotNull final IpnbFileEditor parent, @NotNull final IpnbCodeCell cell) {
final JPanel panel = new JPanel(new VerticalFlowLayout(VerticalFlowLayout.TOP));
panel.setBackground(IpnbEditorUtil.getBackground());
panel.add(createCodeComponent());
- panel.add(createHideableOutputPanel());
+ myHideableOutputPanel = new HideableOutputPanel();
+ panel.add(myHideableOutputPanel);
return panel;
}
@Override
- public void addRightClickMenu() {
- myCodeSourcePanel.addMouseListener(new EditorMouseAdapter() {
+ protected void addRightClickMenu() {
+ myHideableOutputPanel.addMouseListener(new MouseAdapter() {
@Override
- public void mousePressed(EditorMouseEvent e) {
- final MouseEvent mouseEvent = e.getMouseEvent();
- if (SwingUtilities.isRightMouseButton(mouseEvent) && mouseEvent.getClickCount() == 1) {
- final ListPopup menu = createClickMenu(new DefaultActionGroup(new IpnbMergeCellAboveAction(), new IpnbMergeCellBelowAction(),
- new IpnbSplitCellAction()));
- menu.show(RelativePoint.fromScreen(e.getMouseEvent().getLocationOnScreen()));
+ public void mousePressed(MouseEvent e) {
+ if (SwingUtilities.isRightMouseButton(e) && e.getClickCount() == 1) {
+ final ListPopup menu = createPopupMenu(new DefaultActionGroup(new IpnbHideOutputAction(IpnbCodePanel.this)));
+ menu.show(RelativePoint.fromScreen(e.getLocationOnScreen()));
}
}
});
}
+ class HideableOutputPanel extends OnePixelSplitter{
+ final JPanel myToggleBar;
+ final JPanel myOutputComponent;
+
+ public HideableOutputPanel() {
+ super(true);
+ myToggleBar = createToggleBar(this);
+ myOutputComponent = createOutputPanel();
+
+ final Map<String, Object> metadata = myCell.getMetadata();
+ if (metadata.containsKey(COLLAPSED_METADATA)) {
+ final boolean isCollapsed = (Boolean)metadata.get(COLLAPSED_METADATA);
+ if (isCollapsed && !myCell.getCellOutputs().isEmpty()) {
+ setFirstComponent(myToggleBar);
+ return;
+ }
+ }
+ setSecondComponent(myOutputComponent);
+ }
+
+ public void hideOutputPanel() {
+ setOutputStateInCell(true);
+ setFirstComponent(myToggleBar);
+ setSecondComponent(null);
+ }
+ }
+
@NotNull
private JPanel createCodeComponent() {
myCodeSourcePanel = new IpnbCodeSourcePanel(myProject, this, myCell);
return topComponent;
}
- public JPanel createHideableOutputPanel() {
- final OnePixelSplitter splitter = new OnePixelSplitter(true);
- final JPanel toggleBar = createToggleBar(splitter);
- final JPanel outputComponent = createOutputPanel(createHideOutputListener(splitter, toggleBar));
-
- final Map<String, Object> metadata = myCell.getMetadata();
- if (metadata.containsKey(COLLAPSED_METADATA)) {
- final boolean isCollapsed = (Boolean)metadata.get(COLLAPSED_METADATA);
- if (isCollapsed && !myCell.getCellOutputs().isEmpty()) {
- splitter.setFirstComponent(toggleBar);
- return splitter;
- }
- }
- splitter.setSecondComponent(outputComponent);
-
- return splitter;
- }
-
@NotNull
- private JPanel createOutputPanel(MouseAdapter hideOutputListener) {
+ private JPanel createOutputPanel() {
final JPanel outputPanel = new JPanel(new VerticalFlowLayout(VerticalFlowLayout.TOP, true, false));
outputPanel.setBackground(IpnbEditorUtil.getBackground());
for (IpnbOutputCell outputCell : myCell.getCellOutputs()) {
- addOutputPanel(outputPanel, outputCell, hideOutputListener, true);
- }
-
- if (!myCell.getCellOutputs().isEmpty()) {
- outputPanel.addMouseListener(hideOutputListener);
+ addOutputPanel(outputPanel, outputCell, this, true);
}
return outputPanel;
}
- @NotNull
- private MouseAdapter createHideOutputListener(final OnePixelSplitter splitter, final JPanel toggleBar) {
- return new MouseAdapter() {
- private static final String TOGGLE_OUTPUT_TEXT = " Toggle output (Double-Click)";
-
- @Override
- public void mouseClicked(MouseEvent e) {
- if (SwingUtilities.isLeftMouseButton(e) && e.getClickCount() == 2) {
- hideOutputPanel();
- }
- }
+
- @Override
- public void mousePressed(MouseEvent e) {
- if (SwingUtilities.isRightMouseButton(e) && e.getClickCount() == 1) {
- final JPopupMenu menu = new JPopupMenu("");
-
- final JMenuItem item = new JMenuItem(TOGGLE_OUTPUT_TEXT);
- item.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- hideOutputPanel();
- }
- });
-
- menu.add(item);
- menu.show(e.getComponent(), e.getX(), e.getY());
- }
- }
-
- private void hideOutputPanel() {
- setOutputStateInCell(true);
- splitter.setFirstComponent(toggleBar);
- splitter.setSecondComponent(null);
- }
- };
+ public void hideOutputPanel() {
+ myHideableOutputPanel.hideOutputPanel();
}
@NotNull
setOutputStateInCell(false);
updateBackground(IpnbEditorUtil.getBackground());
splitter.setFirstComponent(null);
- final JPanel outputPanel = createOutputPanel(createHideOutputListener(splitter, IpnbCodePanel.this.createToggleBar(splitter)));
+ final JPanel outputPanel = createOutputPanel();
splitter.setSecondComponent(outputPanel);
}
};
}
private void addOutputPanel(@NotNull final JComponent mainPanel,
- @NotNull final IpnbOutputCell outputCell, MouseAdapter hideOutputListener, boolean addPrompt) {
+ @NotNull final IpnbOutputCell outputCell, IpnbCodePanel ipnbCodePanel, boolean addPrompt) {
final IpnbEditorUtil.PromptType promptType = addPrompt ? IpnbEditorUtil.PromptType.Out : IpnbEditorUtil.PromptType.None;
final JPanel panel = new JPanel(new GridBagLayout());
panel.setBackground(IpnbEditorUtil.getBackground());
if (outputCell instanceof IpnbImageOutputCell) {
addPromptPanel(panel, myCell.getPromptNumber(), promptType,
- new IpnbImagePanel((IpnbImageOutputCell)outputCell, hideOutputListener));
+ new IpnbImagePanel((IpnbImageOutputCell)outputCell, ipnbCodePanel));
}
else if (outputCell instanceof IpnbHtmlOutputCell) {
addPromptPanel(panel, myCell.getPromptNumber(), promptType,
- new IpnbHtmlPanel((IpnbHtmlOutputCell)outputCell, myParent.getIpnbFilePanel(), hideOutputListener));
+ new IpnbHtmlPanel((IpnbHtmlOutputCell)outputCell, myParent.getIpnbFilePanel(), ipnbCodePanel));
}
else if (outputCell instanceof IpnbLatexOutputCell) {
addPromptPanel(panel, myCell.getPromptNumber(), promptType,
- new IpnbLatexPanel((IpnbLatexOutputCell)outputCell, myParent.getIpnbFilePanel(), hideOutputListener));
+ new IpnbLatexPanel((IpnbLatexOutputCell)outputCell, myParent.getIpnbFilePanel(), ipnbCodePanel));
}
else if (outputCell instanceof IpnbErrorOutputCell) {
addPromptPanel(panel, myCell.getPromptNumber(), promptType,
- new IpnbErrorPanel((IpnbErrorOutputCell)outputCell, hideOutputListener));
+ new IpnbErrorPanel((IpnbErrorOutputCell)outputCell, ipnbCodePanel));
}
else if (outputCell instanceof IpnbStreamOutputCell) {
addPromptPanel(panel, myCell.getPromptNumber(), IpnbEditorUtil.PromptType.None,
- new IpnbStreamPanel((IpnbStreamOutputCell)outputCell, hideOutputListener));
+ new IpnbStreamPanel((IpnbStreamOutputCell)outputCell, ipnbCodePanel));
}
else if (outputCell.getSourceAsString() != null) {
addPromptPanel(panel, myCell.getPromptNumber(), promptType,
- new IpnbCodeOutputPanel<>(outputCell, myParent.getIpnbFilePanel(), hideOutputListener));
+ new IpnbCodeOutputPanel<>(outputCell, myParent.getIpnbFilePanel(), ipnbCodePanel));
}
mainPanel.add(panel);
}
*/
package org.jetbrains.plugins.ipnb.editor.panels.code;
+import com.intellij.ide.DataManager;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.actionSystem.CustomShortcutSet;
+import com.intellij.openapi.actionSystem.DataContext;
+import com.intellij.openapi.actionSystem.DefaultActionGroup;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.EditorFactory;
+import com.intellij.openapi.editor.event.EditorMouseAdapter;
+import com.intellij.openapi.editor.event.EditorMouseEvent;
import com.intellij.openapi.editor.event.EditorMouseListener;
import com.intellij.openapi.project.Project;
+import com.intellij.openapi.ui.popup.JBPopupFactory;
+import com.intellij.openapi.ui.popup.ListPopup;
import com.intellij.openapi.util.Disposer;
import com.intellij.ui.Gray;
+import com.intellij.ui.awt.RelativePoint;
import com.intellij.ui.components.panels.HorizontalLayout;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.plugins.ipnb.editor.IpnbEditorUtil;
import org.jetbrains.plugins.ipnb.editor.IpnbFileEditor;
-import org.jetbrains.plugins.ipnb.editor.actions.IpnbRunCellAction;
-import org.jetbrains.plugins.ipnb.editor.actions.IpnbRunCellBaseAction;
-import org.jetbrains.plugins.ipnb.editor.actions.IpnbRunCellInplaceAction;
+import org.jetbrains.plugins.ipnb.editor.actions.*;
import org.jetbrains.plugins.ipnb.editor.panels.IpnbEditorPanel;
import org.jetbrains.plugins.ipnb.editor.panels.IpnbFilePanel;
import org.jetbrains.plugins.ipnb.editor.panels.IpnbPanel;
mySource = cell.getSourceAsString();
final JComponent panel = createViewPanel();
add(panel);
+ addRightClickMenu();
}
public void addMouseListener(@NotNull final EditorMouseListener listener) {
});
return panel;
}
+
+ @Override
+ protected void addRightClickMenu() {
+ addMouseListener(new EditorMouseAdapter() {
+ @Override
+ public void mousePressed(EditorMouseEvent e) {
+ final MouseEvent mouseEvent = e.getMouseEvent();
+ if (SwingUtilities.isRightMouseButton(mouseEvent) && mouseEvent.getClickCount() == 1) {
+ final ListPopup menu = createPopupMenu(new DefaultActionGroup(new IpnbMergeCellAboveAction(), new IpnbMergeCellBelowAction(),
+ new IpnbSplitCellAction()));
+ menu.show(RelativePoint.fromScreen(e.getMouseEvent().getLocationOnScreen()));
+ }
+ }
+ });
+ }
+
+ public ListPopup createPopupMenu(@NotNull DefaultActionGroup group) {
+ final DataContext context = DataManager.getInstance().getDataContext(this);
+ return JBPopupFactory.getInstance().createActionGroupPopup(null, group, context, JBPopupFactory.ActionSelectionAid.MNEMONICS,
+ false);
+ }
}
import javax.swing.text.StyleConstants;
import javax.swing.text.StyleContext;
import java.awt.*;
-import java.awt.event.MouseAdapter;
import java.util.List;
public class IpnbErrorPanel extends IpnbCodeOutputPanel<IpnbErrorOutputCell> {
- public IpnbErrorPanel(@NotNull final IpnbErrorOutputCell cell, @Nullable MouseAdapter hideOutputListener) {
- super(cell, null, hideOutputListener);
+ public IpnbErrorPanel(@NotNull final IpnbErrorOutputCell cell, @Nullable IpnbCodePanel ipnbCodePanel) {
+ super(cell, null, ipnbCodePanel);
}
@Override
import org.jetbrains.plugins.ipnb.format.cells.output.IpnbHtmlOutputCell;
import javax.swing.*;
-import java.awt.event.MouseAdapter;
public class IpnbHtmlPanel extends IpnbCodeOutputPanel<IpnbHtmlOutputCell> {
public IpnbHtmlPanel(@NotNull final IpnbHtmlOutputCell cell, @NotNull final IpnbFilePanel parent,
- @Nullable MouseAdapter hideOutputListener) {
- super(cell, parent, hideOutputListener);
+ @Nullable IpnbCodePanel ipnbCodePanel) {
+ super(cell, parent, ipnbCodePanel);
}
@Override
import javax.imageio.ImageIO;
import javax.swing.*;
-import java.awt.event.MouseAdapter;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
public class IpnbImagePanel extends IpnbCodeOutputPanel<IpnbImageOutputCell> {
private static final Logger LOG = Logger.getInstance(IpnbImagePanel.class);
- public IpnbImagePanel(@NotNull final IpnbImageOutputCell cell, @Nullable MouseAdapter hideOutputListener) {
- super(cell, null, hideOutputListener);
+ public IpnbImagePanel(@NotNull final IpnbImageOutputCell cell, @Nullable IpnbCodePanel ipnbCodePanel) {
+ super(cell, null, ipnbCodePanel);
}
@Override
import org.jetbrains.plugins.ipnb.format.cells.output.IpnbLatexOutputCell;
import javax.swing.*;
-import java.awt.event.MouseAdapter;
public class IpnbLatexPanel extends IpnbCodeOutputPanel<IpnbLatexOutputCell> {
public IpnbLatexPanel(@NotNull final IpnbLatexOutputCell cell, @NotNull final IpnbFilePanel parent,
- @Nullable MouseAdapter hideOutputListener) {
- super(cell, parent, hideOutputListener);
+ @Nullable IpnbCodePanel ipnbCodePanel) {
+ super(cell, parent, ipnbCodePanel);
setLayout(new VerticalFlowLayout(VerticalFlowLayout.TOP));
setBackground(IpnbEditorUtil.getBackground());
}
import org.jetbrains.plugins.ipnb.format.cells.output.IpnbStreamOutputCell;
import javax.swing.*;
-import java.awt.event.MouseAdapter;
public class IpnbStreamPanel extends IpnbCodeOutputPanel<IpnbStreamOutputCell> {
- public IpnbStreamPanel(@NotNull final IpnbStreamOutputCell cell, @Nullable MouseAdapter hideOutputListener) {
- super(cell, null, hideOutputListener);
+ public IpnbStreamPanel(@NotNull final IpnbStreamOutputCell cell, @Nullable IpnbCodePanel ipnbCodePanel) {
+ super(cell, null, ipnbCodePanel);
}
@Override