197 Q_Q(QPrintPreviewDialog);
202 preview =
new QPrintPreviewWidget(_printer, q);
206 printer =
new QPrinter;
207 preview =
new QPrintPreviewWidget(printer, q);
209 QObject::connect(preview, SIGNAL(paintRequested(QPrinter*)), q, SIGNAL(paintRequested(QPrinter*)));
210 QObject::connect(preview, SIGNAL(previewChanged()), q, SLOT(_q_previewChanged()));
213 pageNumEdit =
new LineEdit;
214 pageNumEdit->setAlignment(Qt::AlignRight);
215 pageNumEdit->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
216 pageNumLabel =
new QLabel;
217 QObject::connect(pageNumEdit, SIGNAL(editingFinished()), q, SLOT(_q_pageNumEdited()));
219 zoomFactor =
new QComboBox;
220 zoomFactor->setEditable(
true);
221 zoomFactor->setMinimumContentsLength(7);
222 zoomFactor->setInsertPolicy(QComboBox::NoInsert);
223 LineEdit *zoomEditor =
new LineEdit;
224 zoomEditor->setValidator(
new ZoomFactorValidator(1, 1000, 1, zoomEditor));
225 zoomFactor->setLineEdit(zoomEditor);
226 static const short factorsX2[] = { 25, 50, 100, 200, 250, 300, 400, 800, 1600 };
227 for (
auto factorX2 : factorsX2)
228 zoomFactor->addItem(formattedZoomFactor(factorX2 / 2.0));
229 QObject::connect(zoomFactor->lineEdit(), SIGNAL(editingFinished()),
230 q, SLOT(_q_zoomFactorChanged()));
231 QObject::connect(zoomFactor, SIGNAL(currentIndexChanged(
int)),
232 q, SLOT(_q_zoomFactorChanged()));
234 QPrintPreviewMainWindow *mw =
new QPrintPreviewMainWindow(q);
235 QToolBar *toolbar =
new QToolBar(mw);
236 toolbar->addAction(fitWidthAction);
237 toolbar->addAction(fitPageAction);
238 toolbar->addSeparator();
239 toolbar->addWidget(zoomFactor);
240 toolbar->addAction(zoomOutAction);
241 toolbar->addAction(zoomInAction);
242 toolbar->addSeparator();
243 toolbar->addAction(portraitAction);
244 toolbar->addAction(landscapeAction);
245 toolbar->addSeparator();
246 toolbar->addAction(firstPageAction);
247 toolbar->addAction(prevPageAction);
252 QWidget *pageEdit =
new QWidget(toolbar);
253 QVBoxLayout *vboxLayout =
new QVBoxLayout;
254 vboxLayout->setContentsMargins(0, 0, 0, 0);
258 QSize pageNumEditSize, pageNumLabelSize;
259 pageNumEditSize = pageNumEdit->minimumSizeHint();
260 pageNumLabelSize = pageNumLabel->minimumSizeHint();
261 pageNumEdit->resize(pageNumEditSize);
262 pageNumLabel->resize(pageNumLabelSize);
264 QFormLayout *formLayout =
new QFormLayout;
267 formLayout->setFieldGrowthPolicy(QFormLayout::AllNonFixedFieldsGrow);
269 formLayout->setWidget(0, QFormLayout::LabelRole, pageNumEdit);
270 formLayout->setWidget(0, QFormLayout::FieldRole, pageNumLabel);
271 vboxLayout->addLayout(formLayout);
272 vboxLayout->setAlignment(Qt::AlignVCenter);
273 pageEdit->setLayout(vboxLayout);
274 toolbar->addWidget(pageEdit);
276 toolbar->addAction(nextPageAction);
277 toolbar->addAction(lastPageAction);
278 toolbar->addSeparator();
279 toolbar->addAction(singleModeAction);
280 toolbar->addAction(facingModeAction);
281 toolbar->addAction(overviewModeAction);
282 toolbar->addSeparator();
283 toolbar->addAction(pageSetupAction);
284 toolbar->addAction(printAction);
287 QToolButton *zoomInButton =
static_cast<QToolButton *>(toolbar->widgetForAction(zoomInAction));
288 QToolButton *zoomOutButton =
static_cast<QToolButton *>(toolbar->widgetForAction(zoomOutAction));
289 zoomInButton->setAutoRepeat(
true);
290 zoomInButton->setAutoRepeatInterval(200);
291 zoomInButton->setAutoRepeatDelay(200);
292 zoomOutButton->setAutoRepeat(
true);
293 zoomOutButton->setAutoRepeatInterval(200);
294 zoomOutButton->setAutoRepeatDelay(200);
295 QObject::connect(zoomInButton, SIGNAL(clicked()), q, SLOT(_q_zoomIn()));
296 QObject::connect(zoomOutButton, SIGNAL(clicked()), q, SLOT(_q_zoomOut()));
298 mw->addToolBar(toolbar);
299 mw->setCentralWidget(preview);
302 mw->setParent(q, Qt::Widget);
304 QVBoxLayout *topLayout =
new QVBoxLayout;
305 topLayout->addWidget(mw);
306 topLayout->setContentsMargins(0, 0, 0, 0);
307 q->setLayout(topLayout);
309 QString caption = QCoreApplication::translate(
"QPrintPreviewDialog",
"Print Preview");
310 if (!printer->docName().isEmpty())
311 caption +=
": "_L1 + printer->docName();
312 q->setWindowTitle(caption);
314 if (!printer->isValid()
315#if defined(Q_OS_WIN) || defined(Q_OS_APPLE)
316 || printer->outputFormat() != QPrinter::NativeFormat
319 pageSetupAction->setEnabled(
false);
334 Q_Q(QPrintPreviewDialog);
337 navGroup =
new QActionGroup(q);
338 navGroup->setExclusive(
false);
339 nextPageAction = navGroup->addAction(QCoreApplication::translate(
"QPrintPreviewDialog",
"Next page"));
340 prevPageAction = navGroup->addAction(QCoreApplication::translate(
"QPrintPreviewDialog",
"Previous page"));
341 firstPageAction = navGroup->addAction(QCoreApplication::translate(
"QPrintPreviewDialog",
"First page"));
342 lastPageAction = navGroup->addAction(QCoreApplication::translate(
"QPrintPreviewDialog",
"Last page"));
343 qt_setupActionIcon(nextPageAction,
"go-next"_L1);
344 qt_setupActionIcon(prevPageAction,
"go-previous"_L1);
345 qt_setupActionIcon(firstPageAction,
"go-first"_L1);
346 qt_setupActionIcon(lastPageAction,
"go-last"_L1);
347 QObject::connect(navGroup, SIGNAL(triggered(QAction*)), q, SLOT(_q_navigate(QAction*)));
350 fitGroup =
new QActionGroup(q);
351 fitWidthAction = fitGroup->addAction(QCoreApplication::translate(
"QPrintPreviewDialog",
"Fit width"));
352 fitPageAction = fitGroup->addAction(QCoreApplication::translate(
"QPrintPreviewDialog",
"Fit page"));
353 fitWidthAction->setObjectName(
"fitWidthAction"_L1);
354 fitPageAction->setObjectName(
"fitPageAction"_L1);
355 fitWidthAction->setCheckable(
true);
356 fitPageAction->setCheckable(
true);
357 qt_setupActionIcon(fitWidthAction,
"zoom-fit-width"_L1);
358 qt_setupActionIcon(fitPageAction,
"zoom-fit-page"_L1);
359 QObject::connect(fitGroup, SIGNAL(triggered(QAction*)), q, SLOT(_q_fit(QAction*)));
362 zoomGroup =
new QActionGroup(q);
363 zoomInAction = zoomGroup->addAction(QCoreApplication::translate(
"QPrintPreviewDialog",
"Zoom in"));
364 zoomOutAction = zoomGroup->addAction(QCoreApplication::translate(
"QPrintPreviewDialog",
"Zoom out"));
365 qt_setupActionIcon(zoomInAction,
"zoom-in"_L1);
366 qt_setupActionIcon(zoomOutAction,
"zoom-out"_L1);
369 orientationGroup =
new QActionGroup(q);
370 portraitAction = orientationGroup->addAction(QCoreApplication::translate(
"QPrintPreviewDialog",
"Portrait"));
371 landscapeAction = orientationGroup->addAction(QCoreApplication::translate(
"QPrintPreviewDialog",
"Landscape"));
372 portraitAction->setCheckable(
true);
373 landscapeAction->setCheckable(
true);
374 qt_setupActionIcon(portraitAction,
"layout-portrait"_L1);
375 qt_setupActionIcon(landscapeAction,
"layout-landscape"_L1);
376 QObject::connect(portraitAction, SIGNAL(triggered(
bool)), preview, SLOT(setPortraitOrientation()));
377 QObject::connect(landscapeAction, SIGNAL(triggered(
bool)), preview, SLOT(setLandscapeOrientation()));
380 modeGroup =
new QActionGroup(q);
381 singleModeAction = modeGroup->addAction(QCoreApplication::translate(
"QPrintPreviewDialog",
"Show single page"));
382 facingModeAction = modeGroup->addAction(QCoreApplication::translate(
"QPrintPreviewDialog",
"Show facing pages"));
383 overviewModeAction = modeGroup->addAction(QCoreApplication::translate(
"QPrintPreviewDialog",
"Show overview of all pages"));
384 qt_setupActionIcon(singleModeAction,
"view-pages-single"_L1);
385 qt_setupActionIcon(facingModeAction,
"view-pages-facing"_L1);
386 qt_setupActionIcon(overviewModeAction,
"view-pages-overview"_L1);
387 singleModeAction->setObjectName(
"singleModeAction"_L1);
388 facingModeAction->setObjectName(
"facingModeAction"_L1);
389 overviewModeAction->setObjectName(
"overviewModeAction"_L1);
391 singleModeAction->setCheckable(
true);
392 facingModeAction->setCheckable(
true);
393 overviewModeAction->setCheckable(
true);
394 QObject::connect(modeGroup, SIGNAL(triggered(QAction*)), q, SLOT(_q_setMode(QAction*)));
397 printerGroup =
new QActionGroup(q);
398 printAction = printerGroup->addAction(QCoreApplication::translate(
"QPrintPreviewDialog",
"Print"));
399 pageSetupAction = printerGroup->addAction(QCoreApplication::translate(
"QPrintPreviewDialog",
"Page setup"));
400 qt_setupActionIcon(printAction,
"printer"_L1);
401 qt_setupActionIcon(pageSetupAction,
"page-setup"_L1);
402 QObject::connect(printAction, SIGNAL(triggered(
bool)), q, SLOT(_q_print()));
403 QObject::connect(pageSetupAction, SIGNAL(triggered(
bool)), q, SLOT(_q_pageSetup()));
406 fitPageAction->setChecked(
true);
407 singleModeAction->setChecked(
true);
408 if (preview->orientation() == QPageLayout::Portrait)
409 portraitAction->setChecked(
true);
411 landscapeAction->setChecked(
true);