src/org/jetbrains/plugins/ipnb/editor/actions/IpnbAddCellAboveAction.java (44 lines of code) (raw):

package org.jetbrains.plugins.ipnb.editor.actions; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.DataContext; import org.jetbrains.annotations.NotNull; import org.jetbrains.plugins.ipnb.editor.IpnbFileEditor; import org.jetbrains.plugins.ipnb.editor.panels.IpnbEditablePanel; import org.jetbrains.plugins.ipnb.editor.panels.IpnbFilePanel; import org.jetbrains.plugins.ipnb.format.cells.IpnbCodeCell; public class IpnbAddCellAboveAction extends AnAction { private final IpnbFileEditor myFileEditor; public IpnbAddCellAboveAction(IpnbFileEditor fileEditor) { super("Insert Cell Above"); myFileEditor = fileEditor; } @Override public void actionPerformed(@NotNull AnActionEvent event) { final IpnbFilePanel component = myFileEditor.getIpnbFilePanel(); addCell(component); } private static void addCell(@NotNull final IpnbFilePanel ipnbFilePanel) { ipnbFilePanel.executeUndoableCommand(() -> { ipnbFilePanel.createAndAddCell(false, IpnbCodeCell.createEmptyCodeCell()); ipnbFilePanel.saveToFile(false); }, "Add cell above"); } @Override public void update(@NotNull AnActionEvent e) { final DataContext context = e.getDataContext(); final IpnbFileEditor editor = IpnbFileEditor.DATA_KEY.getData(context); if (editor == null) { e.getPresentation().setEnabledAndVisible(false); return; } IpnbFilePanel panel = editor.getIpnbFilePanel(); IpnbEditablePanel selectedCellPanel = panel.getSelectedCellPanel(); if (selectedCellPanel != null && selectedCellPanel.isEditing()) { e.getPresentation().setEnabledAndVisible(false); } else { e.getPresentation().setEnabledAndVisible(true); } } }