in src/org/jetbrains/plugins/ipnb/editor/panels/IpnbFilePanel.java [533:565]
public void replaceComponent(@NotNull final IpnbEditablePanel from, @NotNull final IpnbCell cell) {
CommandProcessor.getInstance().executeCommand(getProject(), () -> ApplicationManager.getApplication().runWriteAction(() -> {
final int index = myIpnbPanels.indexOf(from);
IpnbEditablePanel panel;
if (cell instanceof IpnbCodeCell) {
panel = new IpnbCodePanel(myProject, myParent, (IpnbCodeCell)cell);
}
else if (cell instanceof IpnbMarkdownCell) {
panel = new IpnbMarkdownPanel((IpnbMarkdownCell)cell, myParent.getIpnbFilePanel());
}
else if (cell instanceof IpnbHeadingCell) {
panel = new IpnbHeadingPanel((IpnbHeadingCell)cell);
}
else {
throw new UnsupportedOperationException(cell.getClass().toString());
}
if (index >= 0) {
myIpnbFile.removeCell(index);
myIpnbPanels.remove(index);
remove(index);
myIpnbFile.addCell(cell, index);
myIpnbPanels.add(index, panel);
add(panel, index);
}
if (from instanceof IpnbCodePanel) {
panel.switchToEditing();
}
setSelectedCellPanel(panel);
saveToFile(false);
}), "Ipnb.changeCellType", new Object());
}