KTextEditor

kateprinter.cpp
1/*
2 SPDX-FileCopyrightText: 2002-2010 Anders Lund <anders@alweb.dk>
3
4 Rewritten based on code of:
5 SPDX-FileCopyrightText: 2002 Michael Goffioul <kdeprint@swing.be>
6
7 SPDX-License-Identifier: LGPL-2.0-or-later
8*/
9
10#include "kateprinter.h"
11
12#include "kateconfig.h"
13#include "katedocument.h"
14#include "kateglobal.h"
15#include "kateview.h"
16
17#include <KConfigGroup>
18#include <KSharedConfig>
19
20#include <QApplication>
21#include <QMarginsF>
22#include <QPageLayout>
23#include <QPrintDialog>
24#include <QPrintPreviewDialog>
25#include <QPrinter>
26
27#include "printconfigwidgets.h"
28#include "printpainter.h"
29
30using namespace KatePrinter;
31
32// BEGIN KatePrinterPrivate
33class KatePrinterPrivate : public QObject
34{
35public:
36 KatePrinterPrivate(KTextEditor::DocumentPrivate *doc, KTextEditor::ViewPrivate *view);
37
38 bool print(QPrinter *printer, QWidget *parentWidget);
39 void setColorScheme(const QString &scheme);
40
41public:
42 void paint(QPrinter *printer);
43
44private:
45 KTextEditor::ViewPrivate *m_view;
46 KTextEditor::DocumentPrivate *m_doc;
47 PrintPainter m_painter;
48 static void readSettings(QPrinter *printer);
49 static void writeSettings(QPrinter *printer);
50};
51
52KatePrinterPrivate::KatePrinterPrivate(KTextEditor::DocumentPrivate *doc, KTextEditor::ViewPrivate *view)
53 : QObject()
54 , m_view(view)
55 , m_doc(doc)
56 , m_painter(m_doc, m_view)
57{
58}
59
60bool KatePrinterPrivate::print(QPrinter *printer, QWidget *parentWidget)
61{
62 // docname is now always there, including the right Untitled name
63 printer->setDocName(m_doc->documentName());
64
65 KatePrintTextSettings *kpts = new KatePrintTextSettings;
66 KatePrintHeaderFooter *kphf = new KatePrintHeaderFooter;
67 KatePrintLayout *kpl = new KatePrintLayout;
68
69 QList<QWidget *> tabs;
70 tabs << kpts;
71 tabs << kphf;
72 tabs << kpl;
73
74 readSettings(printer);
75
76 QPointer<QPrintDialog> printDialog(new QPrintDialog(printer, parentWidget));
77 printDialog->setOptionTabs(tabs);
78
79 if (m_view && m_view->selection()) {
81 printDialog->setOption(QAbstractPrintDialog::PrintSelection, true);
82 }
83
84 printDialog->setOption(QAbstractPrintDialog::PrintPageRange, true);
85
86 const int dlgCode = printDialog->exec();
87 if (dlgCode != QDialog::Accepted || !printDialog) {
88 delete printDialog;
89 return false;
90 }
91
92 writeSettings(printer);
93
94 // configure the painter
95 m_painter.setPrintGuide(kpts->printGuide());
96 m_painter.setPrintLineNumbers(kpts->printLineNumbers());
97 m_painter.setDontPrintFoldedCode(kpts->dontPrintFoldedCode());
98
99 m_painter.setColorScheme(kpl->colorScheme());
100 m_painter.setTextFont(kpl->textFont());
101 m_painter.setUseBackground(kpl->useBackground());
102 m_painter.setUseBox(kpl->useBox());
103 m_painter.setBoxMargin(kpl->boxMargin());
104 m_painter.setBoxWidth(kpl->boxWidth());
105 m_painter.setBoxColor(kpl->boxColor());
106
107 m_painter.setHeadersFont(kphf->font());
108
109 m_painter.setUseHeader(kphf->useHeader());
110 m_painter.setHeaderBackground(kphf->headerBackground());
111 m_painter.setHeaderForeground(kphf->headerForeground());
112 m_painter.setUseHeaderBackground(kphf->useHeaderBackground());
113 m_painter.setHeaderFormat(kphf->headerFormat());
114
115 m_painter.setUseFooter(kphf->useFooter());
116 m_painter.setFooterBackground(kphf->footerBackground());
117 m_painter.setFooterForeground(kphf->footerForeground());
118 m_painter.setUseFooterBackground(kphf->useFooterBackground());
119 m_painter.setFooterFormat(kphf->footerFormat());
120
121 delete printDialog;
122 m_painter.paint(printer);
123
124 return true;
125}
126
127void KatePrinterPrivate::paint(QPrinter *printer)
128{
129 m_painter.paint(printer);
130}
131
132void KatePrinterPrivate::setColorScheme(const QString &scheme)
133{
134 m_painter.setColorScheme(scheme);
135}
136
137void KatePrinterPrivate::writeSettings(QPrinter *printer)
138{
139 KSharedConfigPtr config = KTextEditor::EditorPrivate::config();
140 KConfigGroup group(config, QStringLiteral("Kate Print Settings"));
141 KConfigGroup margins(&group, QStringLiteral("Margins"));
142
143 QMarginsF m = printer->pageLayout().margins(QPageLayout::Millimeter);
144 margins.writeEntry("left", m.left());
145 margins.writeEntry("top", m.top());
146 margins.writeEntry("right", m.right());
147 margins.writeEntry("bottom", m.bottom());
148}
149
150void KatePrinterPrivate::readSettings(QPrinter *printer)
151{
152 KSharedConfigPtr config = KTextEditor::EditorPrivate::config();
153 KConfigGroup group(config, QStringLiteral("Kate Print Settings"));
154 KConfigGroup margins(&group, QStringLiteral("Margins"));
155
156 qreal left{};
157 qreal right{};
158 qreal top{};
159 qreal bottom{};
160 left = margins.readEntry("left", left);
161 top = margins.readEntry("top", top);
162 right = margins.readEntry("right", right);
163 bottom = margins.readEntry("bottom", bottom);
164 QMarginsF m = QMarginsF(left, top, right, bottom);
166}
167
168// END KatePrinterPrivate
169
170// BEGIN KatePrinter
171
172bool KatePrinter::print(KTextEditor::DocumentPrivate *doc, KTextEditor::ViewPrivate *view)
173{
174 QPrinter printer;
175 KatePrinterPrivate p(doc, view);
176 return p.print(&printer, view ? view : QApplication::activeWindow());
177}
178
179bool KatePrinter::printPreview(KTextEditor::DocumentPrivate *doc, KTextEditor::ViewPrivate *view)
180{
181 QPrinter printer;
182 KatePrinterPrivate p(doc, view);
183 p.setColorScheme(QStringLiteral("Printing"));
184
185 // ensure proper parent & sizing
186 auto dialogParent = view ? view : QApplication::activeWindow();
187 QPrintPreviewDialog preview(&printer, dialogParent);
188 if (dialogParent && dialogParent->window()) {
189 preview.resize(dialogParent->window()->size() * 0.75);
190 }
191
192 QObject::connect(&preview, &QPrintPreviewDialog::paintRequested, &p, &KatePrinterPrivate::paint);
193 return preview.exec();
194}
195
196// END KatePrinter
Backend of KTextEditor::Document related public KTextEditor interfaces.
static KSharedConfigPtr config()
The global configuration of katepart, e.g.
QWidget * activeWindow()
qreal bottom() const const
qreal left() const const
qreal right() const const
qreal top() const const
QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)
QPageLayout pageLayout() const const
virtual bool setPageMargins(const QMarginsF &margins, QPageLayout::Unit units)
QMarginsF margins() const const
void setDocName(const QString &name)
void setPrintRange(PrintRange range)
void paintRequested(QPrinter *printer)
QTextStream & left(QTextStream &stream)
QTextStream & right(QTextStream &stream)
This file is part of the KDE documentation.
Documentation copyright © 1996-2025 The KDE developers.
Generated on Fri Apr 25 2025 11:52:17 by doxygen 1.13.2 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.