QPrinter::setup()
Simon Rutishauser
simon.rutishauser at web.de
Sun Oct 17 15:06:35 CEST 2004
Hello,
for the last few days I've done some work on QPrinter::setup(). It's not
yet done - the printer dialog does ignore some settings I make (page
size, orientation, greyscale/color, paper source - all I think
correctly set in the DEVMODE structure) while it accepts others.
Interestingly these settings all worked once but don't anymore now, no
idea why.
I post this now because I probabely won't have time to work on it during
the next few weeks.
Simon
-------------- next part --------------
Index: qprinter_win.cpp
===================================================================
RCS file: /cvsroot/kde-cygwin/qt-3/src/kernel/Attic/qprinter_win.cpp,v
retrieving revision 1.1.2.6.2.8
diff -r1.1.2.6.2.8 qprinter_win.cpp
13a14
> ** Copyright (C) 2004 Simon Rutishauser
50a52
> #include "qt_windows.h"
107c109,148
< {}
---
> {
> viewOffsetDone = false;
> painter = 0;
> hdevmode = new DEVMODE();
> hdevnames = new DEVNAMES();
>
> orient = Portrait;
> page_size = A4;
> page_order = FirstPageFirst;
> printer_name = QString();
> color_mode = Color;
> ncopies = 1;
> from_pg = to_pg = min_pg = max_pg = 0;
> state = PST_IDLE;
> output_file = FALSE;
> to_edge = FALSE;
> paper_source = OnlyOne;
> switch ( m ) {
> case ScreenResolution:
> //#ifdef Q_WS_QWS
> res = 72;
> /*#else
> res = QPaintDevice::x11AppDpiY();
> #endif*/
> break;
> case Compatible:
> case PrinterResolution:
> res = 72;
> break;
> case HighResolution:
> res = 600;
> }
>
> d = new QPrinterPrivate;
> //D->marginsSpecified = false;
> //d->printerOptions = 0;
> setOptionEnabled( PrintToFile, TRUE );
> setOptionEnabled( PrintPageRange, TRUE );
> setPrintRange( AllPages );
> }
193,194c234,385
< bool result = FALSE;
< return result;
---
> //resolution? duplex? custom paper size?
> PRINTDLG pd;
> pd.lStructSize = sizeof(pd);
> pd.hwndOwner = parent->winId();
>
> DEVMODE* devmode = static_cast<DEVMODE*>(hdevmode);
>
> if (printerName().length() != 0)
> qt_strncpy(devmode->dmDeviceName, printerName().left(31).ucs2(), 32);
> devmode->dmFields = DM_ORIENTATION | DM_PAPERSIZE | DM_COPIES | DM_DEFAULTSOURCE | DM_COLOR;
> devmode->dmOrientation = orientation() == Portrait ? DMORIENT_PORTRAIT : DMORIENT_LANDSCAPE;
>
> switch(pageSize()) {
> case Letter: devmode->dmPaperSize = DMPAPER_LETTER; break;
> case Legal: devmode->dmPaperSize = DMPAPER_LEGAL; break;
> case Executive: devmode->dmPaperSize = DMPAPER_EXECUTIVE; break;
> case A2: devmode->dmPaperSize = DMPAPER_A2; break;
> case A3: devmode->dmPaperSize = DMPAPER_A3; break;
> case A4: devmode->dmPaperSize = DMPAPER_A4; break;
> case A5: devmode->dmPaperSize = DMPAPER_A5; break;
> case B4: devmode->dmPaperSize = DMPAPER_B4; break;
> case B5: devmode->dmPaperSize = DMPAPER_B5; break;
> case C5E: devmode->dmPaperSize = DMPAPER_ENV_C5; break;
> case Comm10E: devmode->dmPaperSize = DMPAPER_ENV_10; break;
> case DLE: devmode->dmPaperSize = DMPAPER_ENV_DL; break;
> case Folio: devmode->dmPaperSize = DMPAPER_FOLIO; break;
> case Ledger: devmode->dmPaperSize = DMPAPER_LEDGER; break;
> case Tabloid: devmode->dmPaperSize = DMPAPER_TABLOID; break;
> case Custom:
> devmode->dmPaperSize = 0;
> //devmode->dmPaperLength =
> //devmode->dmPaperWidth =
> break;
> }
> devmode->dmCopies = numCopies();
> switch(paperSource()) {
> case OnlyOne: devmode->dmDefaultSource = DMBIN_ONLYONE; break;
> case Lower: devmode->dmDefaultSource = DMBIN_LOWER; break;
> case Middle: devmode->dmDefaultSource = DMBIN_MIDDLE; break;
> case Manual: devmode->dmDefaultSource = DMBIN_MANUAL; break;
> case Envelope: devmode->dmDefaultSource = DMBIN_ENVELOPE; break;
> case EnvelopeManual: devmode->dmDefaultSource = DMBIN_ENVMANUAL; break;
> case Auto: devmode->dmDefaultSource = DMBIN_AUTO; break;
> case Tractor: devmode->dmDefaultSource = DMBIN_TRACTOR; break;
> case SmallFormat: devmode->dmDefaultSource = DMBIN_SMALLFMT; break;
> case LargeFormat: devmode->dmDefaultSource = DMBIN_LARGEFMT; break;
> case LargeCapacity: devmode->dmDefaultSource = DMBIN_LARGECAPACITY; break;
> case Cassette: devmode->dmDefaultSource = DMBIN_CASSETTE; break;
> case FormSource: devmode->dmDefaultSource = DMBIN_FORMSOURCE; break;
> }
> devmode->dmColor = colorMode() == Color ? DMCOLOR_COLOR : DMCOLOR_MONOCHROME;
>
> pd.hDevMode = hdevmode;
> pd.hDevNames = hdevnames;
> pd.hDC = hdc;
>
> switch (printRange()) {
> case AllPages:
> pd.Flags = PD_ALLPAGES;
> break;
> case Selection:
> pd.Flags = PD_SELECTION;
> break;
> case PageRange:
> pd.Flags = PD_PAGENUMS;
> break;
> }
> //pd.Flags |= PD_COLLATE;
> pd.Flags |= PD_USEDEVMODECOPIESANDCOLLATE; //printer driver handles multipage and collation
> if (!isOptionEnabled(PrintToFile))
> pd.Flags |= PD_HIDEPRINTTOFILE | PD_DISABLEPRINTTOFILE; //?
> if (!isOptionEnabled(PrintSelection))
> pd.Flags |= PD_NOSELECTION;
> if (!isOptionEnabled(PrintPageRange))
> pd.Flags |= PD_NOPAGENUMS;
> if (outputToFile())
> pd.Flags |= PD_PRINTTOFILE;
>
> pd.nFromPage = fromPage();
> pd.nToPage = toPage();
> pd.nMinPage = minPage();
> pd.nMaxPage = maxPage();
> pd.nCopies = numCopies();
>
> if (!PrintDlg(&pd))
> return false;
>
> if (hdevmode != 0) {
> setPrinterName( qt_winQString(devmode->dmDeviceName));
> setPrintProgram(qt_winQString(devmode->dmDeviceName));
>
> if (devmode->dmFields & DM_ORIENTATION)
> setOrientation( devmode->dmOrientation == DMORIENT_PORTRAIT ? Portrait : Landscape );
> if (devmode->dmFields & DM_PAPERSIZE)
> switch(devmode->dmPaperSize) {
> case DMPAPER_LETTER: setPageSize(Letter); break;
> case DMPAPER_LEGAL: setPageSize(Legal); break;
> case DMPAPER_EXECUTIVE: setPageSize(Executive); break;
> case DMPAPER_A2: setPageSize(A2); break;
> case DMPAPER_A3: setPageSize(A3); break;
> case DMPAPER_A4: setPageSize(A4); break;
> case DMPAPER_A5: setPageSize(A5); break;
> case DMPAPER_B4: setPageSize(B4); break;
> case DMPAPER_B5: setPageSize(B5); break;
> case DMPAPER_ENV_C5: setPageSize(C5E); break;
> case DMPAPER_ENV_10: setPageSize(Comm10E); break;
> case DMPAPER_ENV_DL: setPageSize(DLE); break;
> case DMPAPER_FOLIO: setPageSize(Folio); break;
> case DMPAPER_LEDGER: setPageSize(Ledger); break;
> case DMPAPER_TABLOID: setPageSize(Tabloid); break;
> default:
> setPageSize(Custom);
> //devmode->dmPaperLength
> //devmode->dmPaperWidth
> break;
> }
>
> if (devmode->dmFields & DM_COPIES)
> setNumCopies(devmode->dmCopies);
> if (devmode->dmFields & DM_DEFAULTSOURCE)
> switch(devmode->dmDefaultSource) {
> case DMBIN_ONLYONE: setPaperSource(OnlyOne); break;
> case DMBIN_LOWER: setPaperSource(Lower); break;
> case DMBIN_MIDDLE: setPaperSource(Middle); break;
> case DMBIN_MANUAL: setPaperSource(Manual); break;
> case DMBIN_ENVELOPE: setPaperSource(Envelope); break;
> case DMBIN_ENVMANUAL: setPaperSource(EnvelopeManual); break;
> case DMBIN_AUTO: setPaperSource(Auto); break;
> case DMBIN_TRACTOR: setPaperSource(Tractor); break;
> case DMBIN_SMALLFMT: setPaperSource(SmallFormat); break;
> case DMBIN_LARGEFMT: setPaperSource(LargeFormat); break;
> case DMBIN_LARGECAPACITY: setPaperSource(LargeCapacity); break;
> case DMBIN_CASSETTE: setPaperSource(Cassette); break;
> case DMBIN_FORMSOURCE: setPaperSource(FormSource); break;
> }
> if (devmode->dmFields & DM_COLOR)
> setColorMode( devmode->dmColor == DMCOLOR_COLOR ? Color : GrayScale);
> }
>
> if (pd.Flags & PD_ALLPAGES)
> setPrintRange(AllPages);
> else if (pd.Flags & PD_SELECTION)
> setPrintRange(Selection);
> else if (pd.Flags & PD_PAGENUMS)
> setPrintRange(PageRange);
>
> setOutputToFile(pd.Flags & PD_PRINTTOFILE);
> setFromTo(pd.nFromPage, pd.nToPage);
> setMinMax(pd.nMinPage, pd.nMaxPage);
> setNumCopies(pd.nCopies);
>
> return true;
More information about the kde-cygwin
mailing list