printing code cleanup

This commit is contained in:
Dmitry Batrak
2016-12-19 11:04:09 +03:00
parent 606895246b
commit 0880fab771
3 changed files with 33 additions and 42 deletions
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2014 JetBrains s.r.o.
* Copyright 2000-2016 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.
@@ -15,9 +15,7 @@
*/
package com.intellij.codeEditor.printing;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.progress.ProcessCanceledException;
import com.intellij.openapi.util.Pair;
import com.intellij.psi.PsiFile;
import java.awt.*;
@@ -27,12 +25,12 @@ import java.awt.print.PrinterException;
import java.util.List;
class MultiFilePainter extends BasePainter {
private final List<Pair<PsiFile, Editor>> myFilesList;
private final List<PsiFile> myFilesList;
private int myFileIndex = 0;
private int myStartPageIndex = 0;
private TextPainter myTextPainter = null;
public MultiFilePainter(List<Pair<PsiFile, Editor>> filesList) {
public MultiFilePainter(List<PsiFile> filesList) {
myFilesList = filesList;
}
@@ -43,8 +41,8 @@ class MultiFilePainter extends BasePainter {
}
while (myFileIndex < myFilesList.size()) {
if (myTextPainter == null) {
Pair<PsiFile, Editor> pair = myFilesList.get(myFileIndex);
myTextPainter = PrintManager.initTextPainter(pair.first, pair.second);
PsiFile psiFile = myFilesList.get(myFileIndex);
myTextPainter = PrintManager.initTextPainter(psiFile);
}
if (myTextPainter != null) {
myTextPainter.setProgress(myProgress);
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2015 JetBrains s.r.o.
* Copyright 2000-2016 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.
@@ -31,18 +31,20 @@ import com.intellij.openapi.fileTypes.FileTypes;
import com.intellij.openapi.progress.*;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Computable;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiDirectory;
import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.util.PsiUtilBase;
import com.intellij.util.ObjectUtils;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import java.awt.print.*;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.util.Collections;
import java.util.List;
class PrintManager {
@@ -52,24 +54,24 @@ class PrintManager {
final Project project = CommonDataKeys.PROJECT.getData(dataContext);
if (project == null) return;
PsiDirectory[] psiDirectory = new PsiDirectory[1];
PsiDirectory psiDirectory = null;
PsiElement psiElement = CommonDataKeys.PSI_ELEMENT.getData(dataContext);
if (psiElement instanceof PsiDirectory) {
psiDirectory[0] = (PsiDirectory)psiElement;
psiDirectory = (PsiDirectory)psiElement;
}
PsiFile psiFile = CommonDataKeys.PSI_FILE.getData(dataContext);
String[] shortFileName = new String[1];
String[] directoryName = new String[1];
if (psiFile != null || psiDirectory[0] != null) {
String shortFileName = null;
String directoryName = null;
if (psiFile != null || psiDirectory != null) {
if (psiFile != null) {
shortFileName[0] = psiFile.getName();
if (psiDirectory[0] == null) {
psiDirectory[0] = psiFile.getContainingDirectory();
shortFileName = psiFile.getName();
if (psiDirectory == null) {
psiDirectory = psiFile.getContainingDirectory();
}
}
if (psiDirectory[0] != null) {
directoryName[0] = psiDirectory[0].getVirtualFile().getPresentableUrl();
if (psiDirectory != null) {
directoryName = psiDirectory.getVirtualFile().getPresentableUrl();
}
}
@@ -84,7 +86,7 @@ class PrintManager {
}
}
PrintDialog printDialog = new PrintDialog(shortFileName[0], directoryName[0], text, project);
PrintDialog printDialog = new PrintDialog(shortFileName, directoryName, text, project);
printDialog.reset();
if (!printDialog.showAndGet()) {
return;
@@ -98,7 +100,7 @@ class PrintManager {
if (printSettings.getPrintScope() != PrintSettings.PRINT_DIRECTORY) {
if (psiFile == null && editor == null) return;
TextPainter textPainter =
psiFile != null ? initTextPainter(psiFile, editor) : initTextPainter((DocumentEx)editor.getDocument(), project);
psiFile != null ? initTextPainter(psiFile) : initTextPainter((DocumentEx)editor.getDocument(), project);
if (textPainter == null) return;
if (printSettings.getPrintScope() == PrintSettings.PRINT_SELECTED_TEXT &&
@@ -109,9 +111,9 @@ class PrintManager {
painter = textPainter;
}
else {
List<Pair<PsiFile, Editor>> filesList = ContainerUtil.newArrayList();
List<PsiFile> filesList = ContainerUtil.newArrayList();
boolean isRecursive = printSettings.isIncludeSubdirectories();
addToPsiFileList(psiDirectory[0], filesList, isRecursive);
addToPsiFileList(psiDirectory, filesList, isRecursive);
painter = new MultiFilePainter(filesList);
}
@@ -155,11 +157,9 @@ class PrintManager {
});
}
private static void addToPsiFileList(PsiDirectory psiDirectory, List<Pair<PsiFile, Editor>> filesList, boolean isRecursive) {
private static void addToPsiFileList(PsiDirectory psiDirectory, List<PsiFile> filesList, boolean isRecursive) {
PsiFile[] files = psiDirectory.getFiles();
for (PsiFile file : files) {
filesList.add(Pair.create(file, PsiUtilBase.findEditor(file)));
}
Collections.addAll(filesList, files);
if (isRecursive) {
for (PsiDirectory directory : psiDirectory.getSubdirectories()) {
if (!Project.DIRECTORY_STORE_FOLDER.equals(directory.getName())) {
@@ -198,16 +198,11 @@ class PrintManager {
return pageFormat;
}
static TextPainter initTextPainter(final PsiFile psiFile, final Editor editor) {
return ApplicationManager.getApplication().runReadAction(new Computable<TextPainter>() {
@Override
public TextPainter compute() {
return doInitTextPainter(psiFile, editor);
}
});
static TextPainter initTextPainter(final PsiFile psiFile) {
return ApplicationManager.getApplication().runReadAction((Computable<TextPainter>)() -> doInitTextPainter(psiFile));
}
private static TextPainter doInitTextPainter(final PsiFile psiFile, final Editor editor) {
private static TextPainter doInitTextPainter(final PsiFile psiFile) {
VirtualFile virtualFile = psiFile.getVirtualFile();
if (virtualFile == null) return null;
DocumentEx doc = (DocumentEx)PsiDocumentManager.getInstance(psiFile.getProject()).getDocument(psiFile);
@@ -215,7 +210,7 @@ class PrintManager {
EditorHighlighter highlighter = HighlighterFactory.createHighlighter(psiFile.getProject(), virtualFile);
highlighter.setText(doc.getCharsSequence());
return new TextPainter(doc, highlighter, virtualFile.getPresentableUrl(), virtualFile.getPresentableName(),
psiFile, psiFile.getFileType(), editor);
psiFile, psiFile.getFileType());
}
private static TextPainter initTextPainter(@NotNull final DocumentEx doc, final Project project) {
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2015 JetBrains s.r.o.
* Copyright 2000-2016 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.
@@ -17,7 +17,6 @@ package com.intellij.codeEditor.printing;
import com.intellij.codeInsight.daemon.LineMarkerInfo;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.RangeMarker;
import com.intellij.openapi.editor.ex.DocumentEx;
import com.intellij.openapi.editor.ex.LineIterator;
@@ -97,8 +96,7 @@ class TextPainter extends BasePainter {
String fullFileName,
String shortFileName,
@NotNull PsiFile psiFile,
FileType fileType,
Editor editor) {
FileType fileType) {
this(editorDocument, highlighter, fullFileName, shortFileName, psiFile.getProject(), fileType,
FileSeparatorProvider.getFileSeparators(psiFile, editorDocument));
}