From d831e7ced90b782bb0b8977df78dbd3cf5604479 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Sun, 30 Aug 2015 16:47:26 +0200 Subject: [PATCH] base class to work with basic text copy2clipboard operations --- .../com/intellij/ide/TextCopyProvider.java | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 platform/platform-api/src/com/intellij/ide/TextCopyProvider.java diff --git a/platform/platform-api/src/com/intellij/ide/TextCopyProvider.java b/platform/platform-api/src/com/intellij/ide/TextCopyProvider.java new file mode 100644 index 000000000000..05c2d4bab6d9 --- /dev/null +++ b/platform/platform-api/src/com/intellij/ide/TextCopyProvider.java @@ -0,0 +1,64 @@ +/* + * Copyright 2000-2015 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.ide; + +import com.intellij.openapi.actionSystem.DataContext; +import com.intellij.openapi.ide.CopyPasteManager; +import com.intellij.openapi.util.text.StringUtil; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.awt.datatransfer.StringSelection; +import java.util.Collection; + +/** + * Base class for text-based copy provider + * + * @author Konstantin Bulenkov + */ +public abstract class TextCopyProvider implements CopyProvider { + /** + * Returns a collection of text blocks to be joined using {@link #getLinesSeparator()} separator. + * Returns null of empty collection if copy operation can not be performed + * + * @return collection of text blocks or null + */ + @Nullable + public abstract Collection getTextLinesToCopy(); + + @Override + public void performCopy(@NotNull DataContext dataContext) { + Collection lines = getTextLinesToCopy(); + if (lines != null && !lines.isEmpty()) { + String text = StringUtil.join(lines, getLinesSeparator()); + CopyPasteManager.getInstance().setContents(new StringSelection(text)); + } + } + + public String getLinesSeparator() { + return "\n"; + } + + @Override + public boolean isCopyEnabled(@NotNull DataContext dataContext) { + return getTextLinesToCopy() != null; + } + + @Override + public boolean isCopyVisible(@NotNull DataContext dataContext) { + return true; + } +}