mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-14 18:05:27 +07:00
it should be possible to undo pasting an image into the project pane (IJPL-160554)
GitOrigin-RevId: 364544b6623b3f09e748a313202d7392d460de22
This commit is contained in:
committed by
intellij-monorepo-bot
parent
f78ebb663a
commit
2a0ccb7079
@@ -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
|
||||
|
||||
@@ -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,41 +65,44 @@ open class ImagePasteProvider : PasteProvider {
|
||||
return
|
||||
}
|
||||
|
||||
runWriteAction {
|
||||
val nextAvailableName = VfsUtil.getNextAvailableName(newFileParent, "img", "png")
|
||||
val fileName = VfsUtil.getNextAvailableName(newFileParent, "img", "png")
|
||||
val project = CommonDataKeys.PROJECT.getData(dataContext)
|
||||
CommandProcessor.getInstance().executeCommand(project, {
|
||||
runWriteAction {
|
||||
|
||||
// Step 2: Create file
|
||||
val imageFile = try {
|
||||
newFileParent.createChildData(this, nextAvailableName)
|
||||
}
|
||||
catch (ioException: IOException) {
|
||||
logger.error("Failed to create a pasted image file due to I/O error. Aborting operation.", ioException)
|
||||
null
|
||||
} ?: return@runWriteAction
|
||||
// Step 2: Create file
|
||||
val imageFile = try {
|
||||
newFileParent.createChildData(this, fileName)
|
||||
}
|
||||
catch (ioException: IOException) {
|
||||
logger.error("Failed to create a pasted image file due to I/O error. Aborting operation.", ioException)
|
||||
null
|
||||
} ?: return@runWriteAction
|
||||
|
||||
// Step 3: Save image data to the created file
|
||||
try {
|
||||
imageFile.getOutputStream(this)
|
||||
.use {
|
||||
ImageIO.write(imageToPaste, "png", it)
|
||||
}
|
||||
}
|
||||
catch (ioException: IOException) {
|
||||
logger.error("Failed to save a pasted image to a file due to I/O error. Aborting operation", ioException)
|
||||
|
||||
// cleaning empty file
|
||||
// Step 3: Save image data to the created file
|
||||
try {
|
||||
imageFile.delete(this)
|
||||
imageFile.getOutputStream(this)
|
||||
.use {
|
||||
ImageIO.write(imageToPaste, "png", it)
|
||||
}
|
||||
}
|
||||
catch (ioException: IOException) {
|
||||
// just skip it
|
||||
logger.error("Failed to save a pasted image to a file due to I/O error. Aborting operation", ioException)
|
||||
|
||||
// cleaning empty file
|
||||
try {
|
||||
imageFile.delete(this)
|
||||
}
|
||||
catch (_: IOException) {
|
||||
// just skip it
|
||||
}
|
||||
|
||||
return@runWriteAction
|
||||
}
|
||||
|
||||
return@runWriteAction
|
||||
imageFilePasted(dataContext, imageFile)
|
||||
}
|
||||
|
||||
imageFilePasted(dataContext, imageFile)
|
||||
}
|
||||
}, ImagesBundle.message("paste.image.command.name", fileName), null, UndoConfirmationPolicy.REQUEST_CONFIRMATION)
|
||||
}
|
||||
|
||||
open fun imageFilePasted(dataContext: DataContext, imageFile: VirtualFile) = Unit
|
||||
|
||||
Reference in New Issue
Block a user