50 DEVMODE *devMode = d->ep->devMode;
53 int size =
sizeof(DEVMODE) + devMode->dmDriverExtra;
54 pd->hDevMode = GlobalAlloc(GHND, size);
56 void *dest = GlobalLock(pd->hDevMode);
57 memcpy(dest, devMode, size);
58 GlobalUnlock(pd->hDevMode);
63 pd->hDevNames = tempDevNames;
65 pd->Flags = PD_RETURNDC;
66 pd->Flags |= PD_USEDEVMODECOPIESANDCOLLATE;
68 if (!pdlg->testOption(QPrintDialog::PrintSelection))
69 pd->Flags |= PD_NOSELECTION;
70 if (pdlg->testOption(QPrintDialog::PrintPageRange)) {
71 pd->nMinPage = pdlg->minPage();
72 pd->nMaxPage = pdlg->maxPage();
75 if (!pdlg->testOption(QPrintDialog::PrintToFile))
76 pd->Flags |= PD_DISABLEPRINTTOFILE;
78 if (pdlg->testOption(QPrintDialog::PrintSelection) && pdlg->printRange() == QPrintDialog::Selection)
79 pd->Flags |= PD_SELECTION;
80 else if (pdlg->testOption(QPrintDialog::PrintPageRange) && pdlg->printRange() == QPrintDialog::PageRange)
81 pd->Flags |= PD_PAGENUMS;
82 else if (pdlg->testOption(QPrintDialog::PrintCurrentPage) && pdlg->printRange() == QPrintDialog::CurrentPage)
83 pd->Flags |= PD_CURRENTPAGE;
85 pd->Flags |= PD_ALLPAGES;
89 if (pd->nMinPage==0 && pd->nMaxPage==0)
90 pd->Flags |= PD_NOPAGENUMS;
93 if (!pdlg->testOption(QPrintDialog::PrintCurrentPage))
101 pd->nMaxPageRanges = 1;
103 if (d->ep->printToFile)
104 pd->Flags |= PD_PRINTTOFILE;
106 WId wId = parentWindow ? parentWindow->winId() : 0;
110 pd->hwndOwner = wId != 0 ? HWND(wId) : GetDesktopWindow();
111 pd->lpPageRanges[0].nFromPage = qMax(pdlg->fromPage(), pdlg->minPage());
112 pd->lpPageRanges[0].nToPage = (pdlg->toPage() > 0) ? qMin(pdlg->toPage(), pdlg->maxPage()) : 1;
113 pd->nCopies = d->printer->copyCount();
118 if (pd->Flags & PD_SELECTION) {
119 pdlg->setPrintRange(QPrintDialog::Selection);
120 pdlg->printer()->setPageRanges(QPageRanges());
121 }
else if (pd->Flags & PD_PAGENUMS) {
122 pdlg->setPrintRange(QPrintDialog::PageRange);
123 pdlg->setFromTo(pd->lpPageRanges[0].nFromPage, pd->lpPageRanges[0].nToPage);
124 }
else if (pd->Flags & PD_CURRENTPAGE) {
125 pdlg->setPrintRange(QPrintDialog::CurrentPage);
126 pdlg->printer()->setPageRanges(QPageRanges());
128 pdlg->setPrintRange(QPrintDialog::AllPages);
129 pdlg->printer()->setPageRanges(QPageRanges());
132 d->ep->printToFile = (pd->Flags & PD_PRINTTOFILE) != 0;
134 d->engine->setGlobalDevMode(pd->hDevNames, pd->hDevMode);
136 if (d->ep->printToFile && d->ep->fileName.isEmpty())
137 d->ep->fileName =
"FILE:"_L1;
138 else if (!d->ep->printToFile && d->ep->fileName ==
"FILE:"_L1)
139 d->ep->fileName.clear();
152 : QAbstractPrintDialog( *(
new QPrintDialogPrivate), printer, parent)
163 : QAbstractPrintDialog( *(
new QPrintDialogPrivate), 0, parent)
189 QWindow *parentWindow = q->windowHandle() ? q->windowHandle()->transientParent() :
nullptr;
191 QWidget *parent = q->parentWidget();
193 parent = parent->window();
195 parent = QApplication::activeWindow();
201 parentWindow = parent->windowHandle();
204 q->QDialog::setVisible(
true);
206 HGLOBAL *tempDevNames = engine->createGlobalDevNames();
212 PRINTPAGERANGE pageRange;
214 memset(&pd, 0,
sizeof(PRINTDLGEX));
215 pd.lStructSize =
sizeof(PRINTDLGEX);
216 pd.lpPageRanges = &pageRange;
217 qt_win_setup_PRINTDLGEX(&pd, parentWindow, q,
this, tempDevNames);
222 result = (PrintDlgEx(&pd) == S_OK);
227 if ((pd.Flags & PD_PAGENUMS)
228 && (pd.lpPageRanges[0].nFromPage > pd.lpPageRanges[0].nToPage))
230 pd.lpPageRanges[0].nFromPage = 1;
231 pd.lpPageRanges[0].nToPage = 1;
239 QMessageBox::warning(
nullptr,
240 QPrintDialog::tr(
"Print"),
241 QPrintDialog::tr(
"The 'From' value cannot be greater than the 'To' value."));
245 q->QDialog::setVisible(
false);
253 qt_win_read_back_PRINTDLGEX(&pd, q,
this);
255 printer->d_func()->validPrinter = !printer->printerName().isEmpty();
259 GlobalFree(tempDevNames);
261 q->done(result && doPrinting);
263 return result && doPrinting;