addCutButton(editorPanel);
addCopyButton(editorPanel);
addPasteButton(editorPanel);
- addMergeButton(editorPanel);
- addSplitButton(editorPanel);
controlPanel.add(editorPanel);
final JPanel runPanel = new JPanel(new GridBagLayout());
}
}, AllIcons.Actions.Menu_cut, "Cut Cell");
}
-
- private void addMergeButton(@NotNull final JPanel controlPanel) {
- addButton(controlPanel, new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- IpnbMergeCellAboveAction.mergeCell(myIpnbFilePanel);
- }
- }, AllIcons.Modules.Merge, "Merge Cell Above");
- }
-
- private void addSplitButton(@NotNull final JPanel controlPanel) {
- addButton(controlPanel, new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- IpnbSplitCellAction.splitCell(myIpnbFilePanel);
- }
- }, AllIcons.Modules.Split, "Split Cellхо");
- }
private void addCopyButton(@NotNull final JPanel controlPanel) {
addButton(controlPanel, new ActionListener() {
import org.jetbrains.plugins.ipnb.editor.panels.IpnbFilePanel;
public class IpnbMergeCellAboveAction extends AnAction {
+
+ public IpnbMergeCellAboveAction() {
+ super("Merge Cell Above");
+ }
+
@Override
public void actionPerformed(AnActionEvent e) {
final DataContext context = e.getDataContext();
import org.jetbrains.plugins.ipnb.editor.panels.IpnbFilePanel;
public class IpnbMergeCellBelowAction extends AnAction {
+
+ public IpnbMergeCellBelowAction() {
+ super("Merge Cell Below");
+ }
+
@Override
public void actionPerformed(AnActionEvent e) {
final DataContext context = e.getDataContext();
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.command.CommandProcessor;
import org.jetbrains.plugins.ipnb.editor.IpnbFileEditor;
-import org.jetbrains.plugins.ipnb.editor.panels.IpnbEditablePanel;
import org.jetbrains.plugins.ipnb.editor.panels.IpnbFilePanel;
public class IpnbSplitCellAction extends AnAction {
+
+ public IpnbSplitCellAction() {
+ super("Split Cell");
+ }
+
@Override
public void actionPerformed(AnActionEvent e) {
final DataContext context = e.getDataContext();
CommandProcessor.getInstance().executeCommand(filePanel.getProject(), () -> ApplicationManager.getApplication().runWriteAction(
() -> filePanel.splitCell()), "Ipnb.splitCell", new Object());
}
-
- @Override
- public void update(AnActionEvent e) {
- final DataContext context = e.getDataContext();
- final IpnbFileEditor ipnbEditor = IpnbFileEditor.DATA_KEY.getData(context);
- if (ipnbEditor != null) {
- final IpnbFilePanel ipnbFilePanel = ipnbEditor.getIpnbFilePanel();
- final IpnbEditablePanel selectedCellPanel = ipnbFilePanel.getSelectedCell();
- final boolean isEnabled = selectedCellPanel != null && selectedCellPanel.isEditing();
- e.getPresentation().setEnabled(isEnabled);
- }
- }
}
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;
+import com.intellij.ui.awt.RelativePoint;
import com.intellij.ui.OnePixelSplitter;
import com.intellij.util.ui.JBUI;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.plugins.ipnb.editor.IpnbEditorUtil;
+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.format.cells.IpnbEditableCell;
import javax.swing.*;
mySplitter.setSecondComponent(null);
setBackground(IpnbEditorUtil.getBackground());
add(mySplitter);
+ addRightClickMenu();
}
private void addEditablePanel() {
public void updateCellView() { // TODO: make abstract
}
-
+
public int getCaretPosition() {
if (myEditing) {
if (myEditablePanel != null) {
}
return -1;
}
-
+
+ public 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(), new IpnbSplitCellAction());
+ createClickMenu(e.getLocationOnScreen(), group);
+ }
+ }
+ });
+ }
+
+ protected void createClickMenu(@NotNull Point point, @NotNull DefaultActionGroup group) {
+ final DataContext context = DataManager.getInstance().getDataContext(this);
+ final ListPopup popup = JBPopupFactory.getInstance().createActionGroupPopup(null, group, context,
+ JBPopupFactory.ActionSelectionAid.MNEMONICS,
+ true);
+ popup.show(RelativePoint.fromScreen(point));
+ }
+
@Nullable
public String getText(int from, int to) {
if (myEditing && myEditablePanel != null) {
package org.jetbrains.plugins.ipnb.editor.panels;
+import com.intellij.openapi.actionSystem.DefaultActionGroup;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.plugins.ipnb.IpnbUtils;
+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.format.cells.IpnbMarkdownCell;
import javax.swing.*;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
public class IpnbMarkdownPanel extends IpnbEditablePanel<JComponent, IpnbMarkdownCell> {
initPanel();
}
+ @Override
+ public 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());
+ createClickMenu(e.getLocationOnScreen(), group);
+ }
+ }
+ });
+ myEditablePanel.addMouseListener(new MouseAdapter() {
+ @Override
+ public void mousePressed(MouseEvent e) {
+ if (SwingUtilities.isRightMouseButton(e) && e.getClickCount() == 1) {
+ final DefaultActionGroup group = new DefaultActionGroup(new IpnbSplitCellAction());
+ createClickMenu(e.getLocationOnScreen(), group);
+ }
+ }
+ });
+ }
+
@SuppressWarnings("CloneDoesntCallSuperClone")
@Override
protected Object clone() {
import com.google.common.collect.Lists;
import com.intellij.icons.AllIcons;
+import com.intellij.openapi.actionSystem.DefaultActionGroup;
import com.intellij.openapi.application.Application;
import com.intellij.openapi.application.ApplicationManager;
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.util.TextRange;
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.panels.IpnbEditablePanel;
import org.jetbrains.plugins.ipnb.editor.panels.IpnbFilePanel;
import org.jetbrains.plugins.ipnb.editor.panels.IpnbPanel;
myViewPanel = createViewPanel();
add(myViewPanel);
+ addRightClickMenu();
}
@NotNull
return panel;
}
+ @Override
+ public void addRightClickMenu() {
+ myCodeSourcePanel.addMouseListener(new EditorMouseAdapter() {
+ @Override
+ public void mousePressed(EditorMouseEvent e) {
+ final MouseEvent mouseEvent = e.getMouseEvent();
+ if (SwingUtilities.isRightMouseButton(mouseEvent) && mouseEvent.getClickCount() == 1) {
+ createClickMenu(mouseEvent.getLocationOnScreen(),
+ new DefaultActionGroup(new IpnbMergeCellAboveAction(), new IpnbMergeCellBelowAction(), new IpnbSplitCellAction()));
+ }
+ }
+ });
+ }
+
@NotNull
private JPanel createCodeComponent() {
myCodeSourcePanel = new IpnbCodeSourcePanel(myProject, this, myCell);
import com.intellij.openapi.actionSystem.CustomShortcutSet;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.EditorFactory;
+import com.intellij.openapi.editor.event.EditorMouseListener;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Disposer;
import com.intellij.ui.Gray;
final JComponent panel = createViewPanel();
add(panel);
}
+
+ public void addMouseListener(@NotNull final EditorMouseListener listener) {
+ myEditor.addEditorMouseListener(listener);
+ }
@NotNull
public IpnbCodePanel getIpnbCodePanel() {