mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
convenience option for duplex printing of multiple files (IDEA-164472)
This commit is contained in:
@@ -26,12 +26,15 @@ import java.util.List;
|
||||
|
||||
class MultiFilePainter extends BasePainter {
|
||||
private final List<PsiFile> myFilesList;
|
||||
private final boolean myEvenNumberOfPagesPerFile;
|
||||
private int myFileIndex = 0;
|
||||
private int myStartPageIndex = 0;
|
||||
private TextPainter myTextPainter = null;
|
||||
private int myLargestPrintedPage = -1;
|
||||
|
||||
public MultiFilePainter(List<PsiFile> filesList) {
|
||||
public MultiFilePainter(List<PsiFile> filesList, boolean evenNumberOfPagesPerFile) {
|
||||
myFilesList = filesList;
|
||||
myEvenNumberOfPagesPerFile = evenNumberOfPagesPerFile;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -57,13 +60,19 @@ class MultiFilePainter extends BasePainter {
|
||||
return Printable.NO_SUCH_PAGE;
|
||||
}
|
||||
if (ret == Printable.PAGE_EXISTS) {
|
||||
myLargestPrintedPage = pageIndex;
|
||||
return Printable.PAGE_EXISTS;
|
||||
}
|
||||
if (myEvenNumberOfPagesPerFile && pageIndex == (myLargestPrintedPage + 1) && (pageIndex % 2) == 1 &&
|
||||
myFileIndex < (myFilesList.size() - 1)) {
|
||||
return PAGE_EXISTS;
|
||||
}
|
||||
myTextPainter.dispose();
|
||||
myTextPainter = null;
|
||||
myStartPageIndex = pageIndex;
|
||||
}
|
||||
myFileIndex++;
|
||||
myLargestPrintedPage = -1;
|
||||
}
|
||||
return Printable.NO_SUCH_PAGE;
|
||||
}
|
||||
|
||||
@@ -63,6 +63,7 @@ class PrintDialog extends DialogWrapper {
|
||||
private JTextField myRightMarginField = null;
|
||||
|
||||
private JCheckBox myCbDrawBorder = null;
|
||||
private JCheckBox myCbEvenNumberOfPages = null;
|
||||
|
||||
private JTextField myLineTextField1 = null;
|
||||
private JComboBox myLinePlacementCombo1 = null;
|
||||
@@ -144,12 +145,7 @@ class PrintDialog extends DialogWrapper {
|
||||
buttonGroup.add(myRbSelectedText);
|
||||
buttonGroup.add(myRbCurrentPackage);
|
||||
|
||||
ActionListener actionListener = new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
myCbIncludeSubpackages.setEnabled(myRbCurrentPackage.isSelected());
|
||||
}
|
||||
};
|
||||
ActionListener actionListener = e -> updateDependentComponents();
|
||||
|
||||
myRbCurrentFile.addActionListener(actionListener);
|
||||
myRbSelectedText.addActionListener(actionListener);
|
||||
@@ -158,6 +154,11 @@ class PrintDialog extends DialogWrapper {
|
||||
return panel;
|
||||
}
|
||||
|
||||
private void updateDependentComponents() {
|
||||
myCbIncludeSubpackages.setEnabled(myRbCurrentPackage.isSelected());
|
||||
myCbEvenNumberOfPages.setVisible(myRbCurrentFile.isSelected() && mySelectedFileCount > 1 || myRbCurrentPackage.isSelected());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected JComponent createCenterPanel() {
|
||||
TabbedPaneWrapper tabbedPaneWrapper = new TabbedPaneWrapper(myDisposable);
|
||||
@@ -211,6 +212,10 @@ class PrintDialog extends DialogWrapper {
|
||||
gbConstraints.gridy++;
|
||||
panel.add(myCbDrawBorder, gbConstraints);
|
||||
|
||||
myCbEvenNumberOfPages = new JCheckBox(CodeEditorBundle.message("print.settings.even.number.of.pages"));
|
||||
gbConstraints.gridy++;
|
||||
panel.add(myCbEvenNumberOfPages, gbConstraints);
|
||||
|
||||
gbConstraints.insets = new Insets(0, 0, 6, 4);
|
||||
gbConstraints.gridx = 0;
|
||||
gbConstraints.gridwidth = 3;
|
||||
@@ -515,7 +520,8 @@ class PrintDialog extends DialogWrapper {
|
||||
myRbCurrentPackage.setSelected(myDirectoryName != null && !isSelectedTextEnabled && myFileName == null);
|
||||
|
||||
myCbIncludeSubpackages.setSelected(printSettings.isIncludeSubdirectories());
|
||||
myCbIncludeSubpackages.setEnabled(myRbCurrentPackage.isSelected());
|
||||
|
||||
updateDependentComponents();
|
||||
|
||||
Object selectedPageSize = PageSizes.getItem(printSettings.PAPER_SIZE);
|
||||
if(selectedPageSize != null) {
|
||||
@@ -549,7 +555,7 @@ class PrintDialog extends DialogWrapper {
|
||||
myRightMarginField.setText(String.valueOf(printSettings.RIGHT_MARGIN));
|
||||
|
||||
myCbDrawBorder.setSelected(printSettings.DRAW_BORDER);
|
||||
|
||||
myCbEvenNumberOfPages.setSelected(printSettings.EVEN_NUMBER_OF_PAGES);
|
||||
|
||||
myLineTextField1.setText(printSettings.FOOTER_HEADER_TEXT1);
|
||||
myLinePlacementCombo1.setSelectedItem(printSettings.FOOTER_HEADER_PLACEMENT1);
|
||||
@@ -618,6 +624,7 @@ class PrintDialog extends DialogWrapper {
|
||||
catch(NumberFormatException ignored) { }
|
||||
|
||||
printSettings.DRAW_BORDER = myCbDrawBorder.isSelected();
|
||||
printSettings.EVEN_NUMBER_OF_PAGES = myCbEvenNumberOfPages.isSelected();
|
||||
printSettings.FOOTER_HEADER_TEXT1 = myLineTextField1.getText();
|
||||
printSettings.FOOTER_HEADER_ALIGNMENT1 = (String)myLineAlignmentCombo1.getSelectedItem();
|
||||
printSettings.FOOTER_HEADER_PLACEMENT1 = (String)myLinePlacementCombo1.getSelectedItem();
|
||||
|
||||
@@ -98,13 +98,13 @@ class PrintManager {
|
||||
|
||||
PrintSettings printSettings = PrintSettings.getInstance();
|
||||
if (printSettings.getPrintScope() == PrintSettings.PRINT_FILE && psiFiles.size() > 1) {
|
||||
painter = new MultiFilePainter(psiFiles);
|
||||
painter = new MultiFilePainter(psiFiles, printSettings.EVEN_NUMBER_OF_PAGES);
|
||||
}
|
||||
else if (printSettings.getPrintScope() == PrintSettings.PRINT_DIRECTORY) {
|
||||
List<PsiFile> filesList = ContainerUtil.newArrayList();
|
||||
boolean isRecursive = printSettings.isIncludeSubdirectories();
|
||||
addToPsiFileList(psiDirectory, filesList, isRecursive);
|
||||
painter = new MultiFilePainter(filesList);
|
||||
painter = new MultiFilePainter(filesList, printSettings.EVEN_NUMBER_OF_PAGES);
|
||||
}
|
||||
else {
|
||||
if (psiFile == null && editor == null) return;
|
||||
|
||||
@@ -47,6 +47,8 @@ public class PrintSettings implements PersistentStateComponent<PrintSettings> {
|
||||
|
||||
public boolean DRAW_BORDER = true;
|
||||
|
||||
public boolean EVEN_NUMBER_OF_PAGES = false;
|
||||
|
||||
public String FOOTER_HEADER_TEXT1 = CodeEditorBundle.message("print.header.default.line.1");
|
||||
public String FOOTER_HEADER_PLACEMENT1 = HEADER;
|
||||
public String FOOTER_HEADER_ALIGNMENT1 = LEFT;
|
||||
|
||||
@@ -29,6 +29,7 @@ print.settings.paper.size.label=Paper size
|
||||
print.settings.font.label=Font
|
||||
print.settings.show.line.numbers.checkbox=Show line numbers
|
||||
print.settings.draw.border.checkbox=Draw border
|
||||
print.settings.even.number.of.pages=Even number of pages per file (for duplex printing)
|
||||
print.orientation.group=Orientation
|
||||
print.orientation.portrait.radio=Portrait
|
||||
print.orientation.landscape.radio=Landscape
|
||||
|
||||
Reference in New Issue
Block a user