it should be possible to undo pasting an image into the project pane (IJPL-160554)

GitOrigin-RevId: 364544b6623b3f09e748a313202d7392d460de22
This commit is contained in:
Bas Leijdekkers
2024-08-19 20:28:36 +02:00
committed by intellij-monorepo-bot
parent f78ebb663a
commit 2a0ccb7079
2 changed files with 35 additions and 29 deletions

View File

@@ -76,6 +76,7 @@ action.Images.ShowBorder.description=Show border around the image
action.Images.ChangeBackground.text=Change Background
action.Images.ChangeBackground.description=Change editor background
paste.image.command.name=Paste Image File ''{0}''
group.ImagesRootGroup.text=Images
black.cell.color.descriptor='Black' cell
white.cell.color.descriptor='White' cell

View File

@@ -1,4 +1,4 @@
// Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package org.intellij.images.ide
import com.intellij.ide.PasteProvider
@@ -6,10 +6,13 @@ import com.intellij.openapi.actionSystem.ActionUpdateThread
import com.intellij.openapi.actionSystem.CommonDataKeys
import com.intellij.openapi.actionSystem.DataContext
import com.intellij.openapi.application.runWriteAction
import com.intellij.openapi.command.CommandProcessor
import com.intellij.openapi.command.UndoConfirmationPolicy
import com.intellij.openapi.diagnostic.logger
import com.intellij.openapi.ide.CopyPasteManager
import com.intellij.openapi.vfs.VfsUtil
import com.intellij.openapi.vfs.VirtualFile
import org.intellij.images.ImagesBundle
import java.awt.Image
import java.awt.datatransfer.DataFlavor.imageFlavor
import java.awt.image.BufferedImage
@@ -17,7 +20,6 @@ import java.awt.image.MultiResolutionImage
import java.io.IOException
import javax.imageio.ImageIO
/**
* Represents a basic paste provider that allows to paste screenshots (from clipboard) as PNG files.
*
@@ -63,12 +65,14 @@ open class ImagePasteProvider : PasteProvider {
return
}
val fileName = VfsUtil.getNextAvailableName(newFileParent, "img", "png")
val project = CommonDataKeys.PROJECT.getData(dataContext)
CommandProcessor.getInstance().executeCommand(project, {
runWriteAction {
val nextAvailableName = VfsUtil.getNextAvailableName(newFileParent, "img", "png")
// Step 2: Create file
val imageFile = try {
newFileParent.createChildData(this, nextAvailableName)
newFileParent.createChildData(this, fileName)
}
catch (ioException: IOException) {
logger.error("Failed to create a pasted image file due to I/O error. Aborting operation.", ioException)
@@ -89,7 +93,7 @@ open class ImagePasteProvider : PasteProvider {
try {
imageFile.delete(this)
}
catch (ioException: IOException) {
catch (_: IOException) {
// just skip it
}
@@ -98,6 +102,7 @@ open class ImagePasteProvider : PasteProvider {
imageFilePasted(dataContext, imageFile)
}
}, ImagesBundle.message("paste.image.command.name", fileName), null, UndoConfirmationPolicy.REQUEST_CONFIRMATION)
}
open fun imageFilePasted(dataContext: DataContext, imageFile: VirtualFile) = Unit