com.intellij.codeEditor.printing.PrintDialog.java Source code

Java tutorial

Introduction

Here is the source code for com.intellij.codeEditor.printing.PrintDialog.java

Source

/*
 * Copyright 2000-2012 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.codeEditor.printing;

import com.intellij.openapi.help.HelpManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.ui.IdeBorderFactory;
import com.intellij.ui.TabbedPaneWrapper;
import com.intellij.ui.MappingListCellRenderer;
import org.jetbrains.annotations.NotNull;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashMap;
import java.util.Map;

class PrintDialog extends DialogWrapper {
    private JRadioButton myRbCurrentFile = null;
    private JRadioButton myRbSelectedText = null;
    private JRadioButton myRbCurrentPackage = null;
    private JCheckBox myCbIncludeSubpackages = null;

    private JComboBox myPaperSizeCombo = null;

    private JCheckBox myCbColorPrinting = null;
    private JCheckBox myCbSyntaxPrinting = null;
    private JCheckBox myCbPrintAsGraphics = null;

    private JRadioButton myRbPortrait = null;
    private JRadioButton myRbLandscape = null;

    private JComboBox myFontNameCombo = null;
    private JComboBox myFontSizeCombo = null;

    private JCheckBox myCbLineNumbers = null;

    private JRadioButton myRbNoWrap = null;
    private JRadioButton myRbWrapAtWordBreaks = null;

    private JTextField myTopMarginField = null;
    private JTextField myBottomMarginField = null;
    private JTextField myLeftMarginField = null;
    private JTextField myRightMarginField = null;

    private JCheckBox myCbDrawBorder = null;

    private JTextField myLineTextField1 = null;
    private JComboBox myLinePlacementCombo1 = null;
    private JComboBox myLineAlignmentCombo1 = null;
    private JTextField myLineTextField2 = null;
    private JComboBox myLinePlacementCombo2 = null;
    private JComboBox myLineAlignmentCombo2 = null;
    private JComboBox myFooterFontSizeCombo = null;
    private JComboBox myFooterFontNameCombo = null;
    private String myFileName = null;
    private String myDirectoryName = null;
    private final boolean isSelectedTextEnabled;

    private static final Map<Object, String> PLACEMENT_MAP = new HashMap<Object, String>();
    private static final Map<Object, String> ALIGNMENT_MAP = new HashMap<Object, String>();
    private final String mySelectedText;

    static {
        PLACEMENT_MAP.put(PrintSettings.HEADER, CodeEditorBundle.message("print.header.placement.header"));
        PLACEMENT_MAP.put(PrintSettings.FOOTER, CodeEditorBundle.message("print.header.placement.footer"));

        ALIGNMENT_MAP.put(PrintSettings.LEFT, CodeEditorBundle.message("print.header.alignment.left"));
        ALIGNMENT_MAP.put(PrintSettings.CENTER, CodeEditorBundle.message("print.header.alignment.center"));
        ALIGNMENT_MAP.put(PrintSettings.RIGHT, CodeEditorBundle.message("print.header.alignment.right"));
    }

    public PrintDialog(String fileName, String directoryName, String selectedText, Project project) {
        super(project, true);
        mySelectedText = selectedText;
        setOKButtonText(CodeEditorBundle.message("print.print.button"));
        myFileName = fileName;
        myDirectoryName = directoryName;
        this.isSelectedTextEnabled = selectedText != null;
        setTitle(CodeEditorBundle.message("print.title"));
        init();
    }

    @Override
    protected JComponent createNorthPanel() {
        JPanel panel = new JPanel(new GridBagLayout());
        panel.setBorder(BorderFactory.createEmptyBorder(4, 8, 8, 4));
        GridBagConstraints gbConstraints = new GridBagConstraints();
        gbConstraints.gridy = 0;
        gbConstraints.gridx = 0;
        gbConstraints.gridwidth = 1;
        gbConstraints.gridheight = 1;
        gbConstraints.weightx = 1;

        gbConstraints.fill = GridBagConstraints.BOTH;
        gbConstraints.insets = new Insets(0, 0, 0, 0);

        myRbCurrentFile = new JRadioButton(
                CodeEditorBundle.message("print.file.name.radio", (myFileName != null ? myFileName : "")));
        panel.add(myRbCurrentFile, gbConstraints);

        myRbSelectedText = new JRadioButton(
                mySelectedText != null ? mySelectedText : CodeEditorBundle.message("print.selected.text.radio"));
        gbConstraints.gridy++;
        gbConstraints.insets = new Insets(0, 0, 0, 0);
        panel.add(myRbSelectedText, gbConstraints);

        myRbCurrentPackage = new JRadioButton(CodeEditorBundle.message("print.all.files.in.directory.radio",
                (myDirectoryName != null ? myDirectoryName : "")));
        gbConstraints.gridy++;
        gbConstraints.insets = new Insets(0, 0, 0, 0);
        panel.add(myRbCurrentPackage, gbConstraints);

        myCbIncludeSubpackages = new JCheckBox(CodeEditorBundle.message("print.include.subdirectories.checkbox"));
        gbConstraints.gridy++;
        gbConstraints.insets = new Insets(0, 20, 0, 0);
        panel.add(myCbIncludeSubpackages, gbConstraints);

        ButtonGroup buttonGroup = new ButtonGroup();
        buttonGroup.add(myRbCurrentFile);
        buttonGroup.add(myRbSelectedText);
        buttonGroup.add(myRbCurrentPackage);

        ActionListener actionListener = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                myCbIncludeSubpackages.setEnabled(myRbCurrentPackage.isSelected());
            }
        };

        myRbCurrentFile.addActionListener(actionListener);
        myRbSelectedText.addActionListener(actionListener);
        myRbCurrentPackage.addActionListener(actionListener);

        return panel;
    }

    @Override
    protected JComponent createCenterPanel() {
        TabbedPaneWrapper tabbedPaneWrapper = new TabbedPaneWrapper(myDisposable);
        tabbedPaneWrapper.addTab(CodeEditorBundle.message("print.settings.tab"), createPrintSettingsPanel());
        tabbedPaneWrapper.addTab(CodeEditorBundle.message("print.header.footer.tab"), createHeaderAndFooterPanel());
        tabbedPaneWrapper.addTab(CodeEditorBundle.message("print.advanced.tab"), createAdvancedPanel());
        return tabbedPaneWrapper.getComponent();
    }

    private JPanel createPrintSettingsPanel() {
        JPanel panel = new JPanel(new GridBagLayout());
        GridBagConstraints gbConstraints = new GridBagConstraints();
        panel.setBorder(BorderFactory.createEmptyBorder(8, 8, 4, 4));
        gbConstraints.gridy = 0;
        gbConstraints.gridx = 0;
        gbConstraints.gridwidth = 1;
        gbConstraints.gridheight = 1;
        gbConstraints.weightx = 1;
        gbConstraints.weighty = 0;
        gbConstraints.insets = new Insets(0, 8, 6, 4);
        gbConstraints.fill = GridBagConstraints.BOTH;

        JLabel paperSizeLabel = new MyLabel(CodeEditorBundle.message("print.settings.paper.size.label"));
        panel.add(paperSizeLabel, gbConstraints);
        myPaperSizeCombo = createPageSizesCombo();
        gbConstraints.gridx = 1;
        gbConstraints.gridwidth = 2;
        panel.add(myPaperSizeCombo, gbConstraints);

        JLabel fontLabel = new MyLabel(CodeEditorBundle.message("print.settings.font.label"));
        gbConstraints.gridx = 0;
        gbConstraints.gridwidth = 1;
        gbConstraints.gridy++;
        panel.add(fontLabel, gbConstraints);

        myFontNameCombo = createFontNamesComboBox();
        gbConstraints.gridx = 1;
        panel.add(myFontNameCombo, gbConstraints);

        myFontSizeCombo = createFontSizesComboBox();
        gbConstraints.gridx = 2;
        panel.add(myFontSizeCombo, gbConstraints);

        myCbLineNumbers = new JCheckBox(CodeEditorBundle.message("print.settings.show.line.numbers.checkbox"));
        gbConstraints.gridx = 0;
        gbConstraints.gridwidth = 3;
        gbConstraints.gridy++;
        panel.add(myCbLineNumbers, gbConstraints);

        myCbDrawBorder = new JCheckBox(CodeEditorBundle.message("print.settings.draw.border.checkbox"));
        gbConstraints.gridy++;
        panel.add(myCbDrawBorder, gbConstraints);

        gbConstraints.insets = new Insets(0, 0, 6, 4);
        gbConstraints.gridx = 0;
        gbConstraints.gridwidth = 3;
        gbConstraints.gridy++;
        panel.add(createStyleAndLayoutPanel(), gbConstraints);

        gbConstraints.gridy++;
        gbConstraints.weighty = 1;
        panel.add(new MyTailPanel(), gbConstraints);
        return panel;
    }

    private JPanel createAdvancedPanel() {
        JPanel panel = new JPanel(new GridBagLayout());
        GridBagConstraints gbConstraints = new GridBagConstraints();
        panel.setBorder(BorderFactory.createEmptyBorder(8, 8, 4, 4));
        gbConstraints.gridy = 0;
        gbConstraints.gridx = 0;
        gbConstraints.gridwidth = 1;
        gbConstraints.gridheight = 1;
        gbConstraints.weightx = 1;
        gbConstraints.weighty = 0;
        gbConstraints.fill = GridBagConstraints.BOTH;
        gbConstraints.insets = new Insets(0, 0, 6, 4);

        panel.add(createWrappingPanel(), gbConstraints);

        gbConstraints.gridy++;
        panel.add(createMarginsPanel(), gbConstraints);

        gbConstraints.gridy++;
        gbConstraints.weighty = 1;
        panel.add(new MyTailPanel(), gbConstraints);

        return panel;
    }

    private JPanel createStyleAndLayoutPanel() {
        JPanel panel = new JPanel(new GridLayout(1, 2));
        panel.add(createOrientationPanel());
        panel.add(createStylePanel());
        return panel;
    }

    private JPanel createOrientationPanel() {
        JPanel panel = new JPanel();
        panel.setBorder(
                IdeBorderFactory.createTitledBorder(CodeEditorBundle.message("print.orientation.group"), true));
        panel.setLayout(new GridBagLayout());
        GridBagConstraints gbConstraints = new GridBagConstraints();
        gbConstraints.gridy = 0;
        gbConstraints.gridx = 0;
        gbConstraints.gridwidth = 1;
        gbConstraints.gridheight = 1;
        gbConstraints.weightx = 1;
        gbConstraints.fill = GridBagConstraints.BOTH;

        myRbPortrait = new JRadioButton(CodeEditorBundle.message("print.orientation.portrait.radio"));
        panel.add(myRbPortrait, gbConstraints);

        myRbLandscape = new JRadioButton(CodeEditorBundle.message("print.orientation.landscape.radio"));
        gbConstraints.gridy++;
        panel.add(myRbLandscape, gbConstraints);

        ButtonGroup buttonGroup = new ButtonGroup();
        buttonGroup.add(myRbPortrait);
        buttonGroup.add(myRbLandscape);

        return panel;
    }

    private JPanel createStylePanel() {
        JPanel panel = new JPanel();
        panel.setBorder(IdeBorderFactory.createTitledBorder(CodeEditorBundle.message("print.style.group"), true));
        panel.setLayout(new GridBagLayout());
        GridBagConstraints gbConstraints = new GridBagConstraints();
        gbConstraints.gridy = 0;
        gbConstraints.gridx = 0;
        gbConstraints.gridwidth = 1;
        gbConstraints.gridheight = 1;
        gbConstraints.weightx = 1;
        gbConstraints.fill = GridBagConstraints.BOTH;

        myCbColorPrinting = new JCheckBox(CodeEditorBundle.message("print.style.color.printing.checkbox"));
        panel.add(myCbColorPrinting, gbConstraints);

        myCbSyntaxPrinting = new JCheckBox(CodeEditorBundle.message("print.style.syntax.printing.checkbox"));
        gbConstraints.gridy++;
        panel.add(myCbSyntaxPrinting, gbConstraints);

        myCbPrintAsGraphics = new JCheckBox(CodeEditorBundle.message("print.style.print.as.graphics.checkbox"));
        gbConstraints.gridy++;
        panel.add(myCbPrintAsGraphics, gbConstraints);

        return panel;
    }

    private JPanel createWrappingPanel() {
        JPanel panel = new JPanel();
        panel.setBorder(
                IdeBorderFactory.createTitledBorder(CodeEditorBundle.message("print.wrapping.group"), true));
        panel.setLayout(new GridBagLayout());
        GridBagConstraints gbConstraints = new GridBagConstraints();
        gbConstraints.gridy = 0;
        gbConstraints.gridx = 0;
        gbConstraints.gridwidth = 1;
        gbConstraints.gridheight = 1;
        gbConstraints.weightx = 1;
        gbConstraints.fill = GridBagConstraints.BOTH;

        myRbNoWrap = new JRadioButton(CodeEditorBundle.message("print.wrapping.none.radio"));
        panel.add(myRbNoWrap, gbConstraints);

        myRbWrapAtWordBreaks = new JRadioButton(CodeEditorBundle.message("print.wrapping.word.breaks.radio"));
        gbConstraints.gridy++;
        panel.add(myRbWrapAtWordBreaks, gbConstraints);

        ButtonGroup buttonGroup = new ButtonGroup();
        buttonGroup.add(myRbNoWrap);
        buttonGroup.add(myRbWrapAtWordBreaks);

        return panel;
    }

    private JPanel createMarginsPanel() {
        JPanel panel = new JPanel();
        panel.setBorder(IdeBorderFactory.createTitledBorder(CodeEditorBundle.message("print.margins.group"), true));
        panel.setLayout(new GridBagLayout());
        GridBagConstraints gbConstraints = new GridBagConstraints();
        gbConstraints.gridy = 0;
        gbConstraints.gridx = 0;
        gbConstraints.gridwidth = 1;
        gbConstraints.gridheight = 1;
        gbConstraints.weightx = 1;
        gbConstraints.fill = GridBagConstraints.BOTH;

        panel.add(new MyLabel(CodeEditorBundle.message("print.margins.top.label")), gbConstraints);
        myTopMarginField = new MyTextField(6);
        gbConstraints.weightx = 0;
        gbConstraints.gridx = 1;
        panel.add(myTopMarginField, gbConstraints);

        gbConstraints.weightx = 1;
        gbConstraints.gridx = 2;
        panel.add(new MyLabel(CodeEditorBundle.message("print.margins.bottom.label")), gbConstraints);
        myBottomMarginField = new MyTextField(6);
        gbConstraints.weightx = 0;
        gbConstraints.gridx = 3;
        panel.add(myBottomMarginField, gbConstraints);

        gbConstraints.weightx = 1;
        gbConstraints.gridx = 0;
        gbConstraints.gridy++;
        panel.add(new MyLabel(CodeEditorBundle.message("print.margins.left.label")), gbConstraints);
        myLeftMarginField = new MyTextField(6);
        gbConstraints.weightx = 0;
        gbConstraints.gridx = 1;
        panel.add(myLeftMarginField, gbConstraints);

        gbConstraints.weightx = 1;
        gbConstraints.gridx = 2;
        panel.add(new MyLabel(CodeEditorBundle.message("print.margins.right.label")), gbConstraints);
        myRightMarginField = new MyTextField(6);
        gbConstraints.weightx = 0;
        gbConstraints.gridx = 3;
        panel.add(myRightMarginField, gbConstraints);

        return panel;
    }

    private JPanel createHeaderAndFooterPanel() {
        //    JPanel panel = createGroupPanel("Header");
        JPanel panel = new JPanel();
        panel.setBorder(BorderFactory.createEmptyBorder(8, 8, 4, 4));
        panel.setLayout(new GridBagLayout());
        GridBagConstraints gbConstraints = new GridBagConstraints();
        gbConstraints.gridy = 0;
        gbConstraints.gridx = 0;
        gbConstraints.gridwidth = 1;
        gbConstraints.gridheight = 1;
        gbConstraints.weightx = 1;
        gbConstraints.fill = GridBagConstraints.BOTH;
        gbConstraints.insets = new Insets(0, 0, 6, 4);

        gbConstraints.gridwidth = 3;
        myLineTextField1 = new MyTextField(30);
        myLinePlacementCombo1 = new JComboBox();
        myLineAlignmentCombo1 = new JComboBox();
        JPanel linePanel1 = createLinePanel(CodeEditorBundle.message("print.header.line.1.label"), myLineTextField1,
                myLinePlacementCombo1, myLineAlignmentCombo1);
        panel.add(linePanel1, gbConstraints);

        myLineTextField2 = new MyTextField(30);
        myLinePlacementCombo2 = new JComboBox();
        myLineAlignmentCombo2 = new JComboBox();
        JPanel linePanel2 = createLinePanel(CodeEditorBundle.message("print.header.line.2.label"), myLineTextField2,
                myLinePlacementCombo2, myLineAlignmentCombo2);
        gbConstraints.gridy++;
        panel.add(linePanel2, gbConstraints);

        gbConstraints.insets = new Insets(0, 8, 6, 4);
        gbConstraints.gridy++;
        gbConstraints.gridwidth = 1;
        gbConstraints.gridx = 0;
        panel.add(new MyLabel(CodeEditorBundle.message("print.header.font.label")), gbConstraints);
        myFooterFontNameCombo = createFontNamesComboBox();
        gbConstraints.gridx = 1;
        panel.add(myFooterFontNameCombo, gbConstraints);

        myFooterFontSizeCombo = createFontSizesComboBox();
        gbConstraints.gridx = 2;
        panel.add(myFooterFontSizeCombo, gbConstraints);

        return panel;
    }

    private static JPanel createLinePanel(String name, JTextField lineTextField, JComboBox linePlacementCombo,
            JComboBox lineAlignmentCombo) {
        JPanel panel = new JPanel();
        panel.setBorder(IdeBorderFactory.createTitledBorder(name, true));
        panel.setLayout(new GridBagLayout());
        GridBagConstraints gbConstraints = new GridBagConstraints();
        gbConstraints.gridy = 0;
        gbConstraints.gridx = 0;
        gbConstraints.gridwidth = 1;
        gbConstraints.gridheight = 1;
        gbConstraints.weightx = 0;
        gbConstraints.fill = GridBagConstraints.BOTH;
        gbConstraints.insets = new Insets(0, 0, 6, 0);

        panel.add(new MyLabel(CodeEditorBundle.message("print.header.text.line.editbox")), gbConstraints);
        gbConstraints.gridx = 1;
        gbConstraints.gridwidth = 4;
        gbConstraints.weightx = 1;
        panel.add(lineTextField, gbConstraints);

        gbConstraints.gridwidth = 1;
        gbConstraints.gridy++;
        gbConstraints.gridx = 0;
        gbConstraints.weightx = 0;
        panel.add(new MyLabel(CodeEditorBundle.message("print.header.placement.combobox")), gbConstraints);
        linePlacementCombo.addItem(PrintSettings.HEADER);
        linePlacementCombo.addItem(PrintSettings.FOOTER);
        linePlacementCombo
                .setRenderer(new MappingListCellRenderer(linePlacementCombo.getRenderer(), PLACEMENT_MAP));
        gbConstraints.gridx = 1;
        gbConstraints.weightx = 0;
        panel.add(linePlacementCombo, gbConstraints);

        gbConstraints.gridx = 2;
        gbConstraints.weightx = 1;
        panel.add(new MyTailPanel(), gbConstraints);

        gbConstraints.gridx = 3;
        gbConstraints.weightx = 0;
        panel.add(new MyLabel(CodeEditorBundle.message("print.header.alignment.combobox")), gbConstraints);
        linePlacementCombo
                .setRenderer(new MappingListCellRenderer(linePlacementCombo.getRenderer(), ALIGNMENT_MAP));
        lineAlignmentCombo.addItem(PrintSettings.LEFT);
        lineAlignmentCombo.addItem(PrintSettings.CENTER);
        lineAlignmentCombo.addItem(PrintSettings.RIGHT);
        gbConstraints.gridx = 4;
        gbConstraints.weightx = 0;
        panel.add(lineAlignmentCombo, gbConstraints);

        return panel;
    }

    private static JComboBox createFontNamesComboBox() {
        JComboBox comboBox = new JComboBox();
        GraphicsEnvironment graphicsEnvironment = GraphicsEnvironment.getLocalGraphicsEnvironment();
        Font[] fonts = graphicsEnvironment.getAllFonts();
        for (Font font : fonts) {
            comboBox.addItem(font.getName());
        }
        return comboBox;
    }

    private static JComboBox createFontSizesComboBox() {
        JComboBox comboBox = new JComboBox();
        for (int i = 6; i < 40; i++) {
            comboBox.addItem(String.valueOf(i));
        }
        return comboBox;
    }

    private static JComboBox createPageSizesCombo() {
        JComboBox pageSizesCombo = new JComboBox();
        String[] names = PageSizes.getNames();
        for (String name : names) {
            pageSizesCombo.addItem(PageSizes.getItem(name));
        }
        return pageSizesCombo;
    }

    private static class MyTailPanel extends JPanel {
        public MyTailPanel() {
            setFocusable(false);
        }

        @Override
        public Dimension getMinimumSize() {
            return new Dimension(0, 0);
        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(0, 0);
        }
    }

    public void reset() {
        PrintSettings printSettings = PrintSettings.getInstance();

        myRbSelectedText.setEnabled(isSelectedTextEnabled);
        myRbSelectedText.setSelected(isSelectedTextEnabled);
        myRbCurrentFile.setEnabled(myFileName != null);
        myRbCurrentFile.setSelected(myFileName != null && !isSelectedTextEnabled);
        myRbCurrentPackage.setEnabled(myDirectoryName != null);
        myRbCurrentPackage.setSelected(myDirectoryName != null && !isSelectedTextEnabled && myFileName == null);

        myCbIncludeSubpackages.setSelected(printSettings.isIncludeSubdirectories());
        myCbIncludeSubpackages.setEnabled(myRbCurrentPackage.isSelected());

        Object selectedPageSize = PageSizes.getItem(printSettings.PAPER_SIZE);
        if (selectedPageSize != null) {
            myPaperSizeCombo.setSelectedItem(selectedPageSize);
        }
        myCbColorPrinting.setSelected(printSettings.COLOR_PRINTING);
        myCbSyntaxPrinting.setSelected(printSettings.SYNTAX_PRINTING);
        myCbPrintAsGraphics.setSelected(printSettings.PRINT_AS_GRAPHICS);

        if (printSettings.PORTRAIT_LAYOUT) {
            myRbPortrait.setSelected(true);
        } else {
            myRbLandscape.setSelected(true);
        }
        myFontNameCombo.setSelectedItem(printSettings.FONT_NAME);
        myFontSizeCombo.setSelectedItem(String.valueOf(printSettings.FONT_SIZE));

        myCbLineNumbers.setSelected(printSettings.PRINT_LINE_NUMBERS);

        if (printSettings.WRAP) {
            myRbWrapAtWordBreaks.setSelected(true);
        } else {
            myRbNoWrap.setSelected(true);
        }

        myTopMarginField.setText(String.valueOf(printSettings.TOP_MARGIN));
        myBottomMarginField.setText(String.valueOf(printSettings.BOTTOM_MARGIN));
        myLeftMarginField.setText(String.valueOf(printSettings.LEFT_MARGIN));
        myRightMarginField.setText(String.valueOf(printSettings.RIGHT_MARGIN));

        myCbDrawBorder.setSelected(printSettings.DRAW_BORDER);

        myLineTextField1.setText(printSettings.FOOTER_HEADER_TEXT1);
        myLinePlacementCombo1.setSelectedItem(printSettings.FOOTER_HEADER_PLACEMENT1);
        myLineAlignmentCombo1.setSelectedItem(printSettings.FOOTER_HEADER_ALIGNMENT1);

        myLineTextField2.setText(printSettings.FOOTER_HEADER_TEXT2);
        myLinePlacementCombo2.setSelectedItem(printSettings.FOOTER_HEADER_PLACEMENT2);
        myLineAlignmentCombo2.setSelectedItem(printSettings.FOOTER_HEADER_ALIGNMENT2);

        myFooterFontSizeCombo.setSelectedItem(String.valueOf(printSettings.FOOTER_HEADER_FONT_SIZE));
        myFooterFontNameCombo.setSelectedItem(printSettings.FOOTER_HEADER_FONT_NAME);
    }

    public void apply() {
        PrintSettings printSettings = PrintSettings.getInstance();

        if (myRbCurrentFile.isSelected()) {
            printSettings.setPrintScope(PrintSettings.PRINT_FILE);
        } else if (myRbSelectedText.isSelected()) {
            printSettings.setPrintScope(PrintSettings.PRINT_SELECTED_TEXT);
        } else if (myRbCurrentPackage.isSelected()) {
            printSettings.setPrintScope(PrintSettings.PRINT_DIRECTORY);
        }
        printSettings.setIncludeSubdirectories(myCbIncludeSubpackages.isSelected());

        printSettings.PAPER_SIZE = PageSizes.getName(myPaperSizeCombo.getSelectedItem());
        printSettings.COLOR_PRINTING = myCbColorPrinting.isSelected();
        printSettings.SYNTAX_PRINTING = myCbSyntaxPrinting.isSelected();
        printSettings.PRINT_AS_GRAPHICS = myCbPrintAsGraphics.isSelected();

        printSettings.PORTRAIT_LAYOUT = myRbPortrait.isSelected();

        printSettings.FONT_NAME = (String) myFontNameCombo.getSelectedItem();

        try {
            String fontSizeStr = (String) myFontSizeCombo.getSelectedItem();
            printSettings.FONT_SIZE = Integer.parseInt(fontSizeStr);
        } catch (NumberFormatException ignored) {
        }

        printSettings.PRINT_LINE_NUMBERS = myCbLineNumbers.isSelected();

        printSettings.WRAP = myRbWrapAtWordBreaks.isSelected();

        try {
            printSettings.TOP_MARGIN = Float.parseFloat(myTopMarginField.getText());
        } catch (NumberFormatException ignored) {
        }

        try {
            printSettings.BOTTOM_MARGIN = Float.parseFloat(myBottomMarginField.getText());
        } catch (NumberFormatException ignored) {
        }

        try {
            printSettings.LEFT_MARGIN = Float.parseFloat(myLeftMarginField.getText());
        } catch (NumberFormatException ignored) {
        }

        try {
            printSettings.RIGHT_MARGIN = Float.parseFloat(myRightMarginField.getText());
        } catch (NumberFormatException ignored) {
        }

        printSettings.DRAW_BORDER = myCbDrawBorder.isSelected();
        printSettings.FOOTER_HEADER_TEXT1 = myLineTextField1.getText();
        printSettings.FOOTER_HEADER_ALIGNMENT1 = (String) myLineAlignmentCombo1.getSelectedItem();
        printSettings.FOOTER_HEADER_PLACEMENT1 = (String) myLinePlacementCombo1.getSelectedItem();

        printSettings.FOOTER_HEADER_TEXT2 = myLineTextField2.getText();
        printSettings.FOOTER_HEADER_ALIGNMENT2 = (String) myLineAlignmentCombo2.getSelectedItem();
        printSettings.FOOTER_HEADER_PLACEMENT2 = (String) myLinePlacementCombo2.getSelectedItem();

        try {
            printSettings.FOOTER_HEADER_FONT_SIZE = Integer
                    .parseInt((String) myFooterFontSizeCombo.getSelectedItem());
        } catch (NumberFormatException ignored) {
        }

        printSettings.FOOTER_HEADER_FONT_NAME = (String) myFooterFontNameCombo.getSelectedItem();

    }

    @Override
    @NotNull
    protected Action[] createActions() {
        return new Action[] { getOKAction(), getCancelAction(), new ApplyAction(), getHelpAction() };
    }

    @Override
    public void doHelpAction() {
        HelpManager.getInstance().invokeHelp(HelpID.PRINT);
    }

    class ApplyAction extends AbstractAction {
        public ApplyAction() {
            putValue(Action.NAME, CodeEditorBundle.message("print.apply.button"));
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            apply();
        }
    }

    private static class MyTextField extends JTextField {
        public MyTextField(int size) {
            super(size);
        }

        @Override
        public Dimension getMinimumSize() {
            return super.getPreferredSize();
        }
    }

    private static class MyLabel extends JLabel {
        public MyLabel(String text) {
            super(text);
        }

        @Override
        public Dimension getMinimumSize() {
            return super.getPreferredSize();
        }
    }

}