00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
#include "kpqtpage.h"
00022
#include "kprinter.h"
00023
#include "kxmlcommand.h"
00024
#include "driver.h"
00025
#include "util.h"
00026
00027
#include <qcombobox.h>
00028
#include <qbuttongroup.h>
00029
#include <qradiobutton.h>
00030
#include <qlabel.h>
00031
#include <qlayout.h>
00032
#include <qwhatsthis.h>
00033
00034
#include <kiconloader.h>
00035
#include <klocale.h>
00036
#include <kdebug.h>
00037
00038
#define ORIENT_PORTRAIT_ID 0
00039
#define ORIENT_LANDSCAPE_ID 1
00040
00041
#define COLORMODE_COLOR_ID 0
00042
#define COLORMODE_GRAYSCALE_ID 1
00043
00044
#define NUP_1 0
00045
#define NUP_2 1
00046
#define NUP_4 2
00047
#define NUP_OTHER 3
00048
00049
00050
00051 KPQtPage::KPQtPage(
QWidget *parent,
const char *name)
00052 :
KPrintDialogPage(parent,name)
00053 {
00054 init();
00055 }
00056
00057 KPQtPage::KPQtPage(DrMain *driver,
QWidget *parent,
const char *name)
00058 :
KPrintDialogPage(0, (driver && driver->findOption("PageSize") ? driver : 0), parent, name)
00059 {
00060 init();
00061 }
00062
00063 KPQtPage::~KPQtPage()
00064 {
00065 }
00066
00067
void KPQtPage::init()
00068 {
00069
00070
QString whatsThisColorModeOtPageLabel = i18n(
" <qt> "
00071
" <b>Selection of color mode:</b> You can choose between 2 options: "
00072
" <ul><li><b>Color</b> and</li> "
00073
" <li><b>Grayscale</b></li></ul> "
00074
" <b>Note:</b> This selection field may be grayed out and made inactive. "
00075
" This happens if KDEPrint can not retrieve "
00076
" enough information about your print file. In this case the embedded color- or grayscale information "
00077
" of your printfile, and the default handling of the printer take precedence. "
00078
" </qt>" );
00079
QString whatsThisPageSizeOtPageLabel = i18n(
" <qt> "
00080
" <b>Selection of page size:</b> Select paper size to be printed on from "
00081
" the drop-down menu. "
00082
" <p>The exact list of choices depends on the printer driver (\"PPD\") you have installed. "
00083
" </qt>" );
00084
QString whatsThisPagesPerSheetOtPageLabel = i18n(
" <qt> "
00085
" <b>Selection of pages per sheet:</b> "
00086
" You can choose to print more than one page onto each sheet of paper. "
00087
" This is sometimes useful to save paper. "
00088
" <p><b>Note 1:</b> the page images get scaled down accordingly to print 2 or 4 pages per sheet. "
00089
" The page image does not get scaled if you print 1 page per sheet (the default setting.). "
00090
" <p><b>Note 2:</b> If you select multiple pages per sheet here, the scaling and re-arranging is done "
00091
" by your printing system. "
00092
" <p><b>Note 3, regarding \"Other\":</b> You cannot really select <em>Other</em> as the number of "
00093
" pages to print on one sheet.\"Other\" is checkmarked here for information purposes only. "
00094
" <p>To select 8, 9, 16 or other numbers of "
00095
" pages per sheet: "
00096
" <ul> "
00097
" <li> go to the tab headlined \"Filter\"</li>"
00098
" <li> enable the <em>Multiple Pages per Sheet</em> filter </li>"
00099
" <li> and configure it (bottom-most button on the right of the \"Filters\" tab). </li>"
00100
" </ul>"
00101
" </qt>" );
00102
QString whatsThisOrientationOtPageLabel = i18n(
" <qt> "
00103
" <b>Selection of image orientation:</b> Orientation of the printed "
00104
" pageimage on your paper is controlled by the radio buttons. By default, "
00105
" the orientation is <em>Portrait</em> "
00106
" <p>You can select 2 alternatives: "
00107
" <ul> "
00108
" <li> <b>Portrait.</b>.Portrait is the default setting. </li> "
00109
" <li> <b>Landscape.</b> </li> "
00110
" </ul> "
00111
" The icon changes according to your selection."
00112
" </qt>" );
00113 setTitle(i18n(
"Print Format"));
00114
00115
00116 m_pagesize =
new QComboBox(
this);
00117
QWhatsThis::add(m_pagesize, whatsThisPageSizeOtPageLabel);
00118
QLabel *m_pagesizelabel =
new QLabel(i18n(
"Page s&ize:"),
this);
00119 m_pagesizelabel->
setAlignment(Qt::AlignVCenter|Qt::AlignRight);
00120 m_pagesizelabel->
setBuddy(m_pagesize);
00121 m_orientbox =
new QButtonGroup(0, Qt::Vertical, i18n(
"Orientation"),
this);
00122
QWhatsThis::add(m_orientbox, whatsThisOrientationOtPageLabel);
00123 m_colorbox =
new QButtonGroup(0, Qt::Vertical, i18n(
"Color Mode"),
this);
00124
QWhatsThis::add(m_colorbox, whatsThisColorModeOtPageLabel);
00125
QRadioButton *m_portrait =
new QRadioButton(i18n(
"&Portrait"), m_orientbox);
00126
QWhatsThis::add(m_portrait, whatsThisOrientationOtPageLabel);
00127
00128 QRadioButton *m_landscape =
new QRadioButton(i18n(
"&Landscape"), m_orientbox);
00129
QWhatsThis::add(m_landscape, whatsThisOrientationOtPageLabel);
00130
00131 m_orientpix =
new QLabel(m_orientbox);
00132 m_orientpix->setAlignment(Qt::AlignCenter);
00133
QWhatsThis::add(m_orientpix, whatsThisOrientationOtPageLabel);
00134
00135 QRadioButton *m_color =
new QRadioButton(i18n(
"Colo&r"), m_colorbox);
00136
QWhatsThis::add(m_color, whatsThisColorModeOtPageLabel);
00137
00138 QRadioButton *m_grayscale =
new QRadioButton(i18n(
"&Grayscale"), m_colorbox);
00139 m_colorpix =
new QLabel(m_colorbox);
00140 m_colorpix->setAlignment(Qt::AlignCenter);
00141
QWhatsThis::add(m_colorpix, whatsThisColorModeOtPageLabel);
00142
00143 m_nupbox =
new QButtonGroup(0, Qt::Vertical, i18n(
"Pages per Sheet"),
this);
00144
00145 QRadioButton *m_nup1 =
new QRadioButton(
"&1", m_nupbox);
00146
QWhatsThis::add(m_nup1, whatsThisPagesPerSheetOtPageLabel);
00147 QRadioButton *m_nup2 =
new QRadioButton(
"&2", m_nupbox);
00148
QWhatsThis::add(m_nup2, whatsThisPagesPerSheetOtPageLabel);
00149 QRadioButton *m_nup4 =
new QRadioButton(
"&4", m_nupbox);
00150
QWhatsThis::add(m_nup4, whatsThisPagesPerSheetOtPageLabel);
00151 QRadioButton *m_nupother =
new QRadioButton(i18n(
"Ot&her"), m_nupbox);
00152
QWhatsThis::add(m_nupother, whatsThisPagesPerSheetOtPageLabel);
00153
00154 m_nuppix =
new QLabel(m_nupbox);
00155 m_nuppix->setAlignment(Qt::AlignCenter);
00156
QWhatsThis::add(m_nuppix, whatsThisPagesPerSheetOtPageLabel);
00157
00158
00159
QGridLayout *lay0 =
new QGridLayout(
this, 3, 2, 0, 10);
00160 lay0->
setRowStretch(1,1);
00161 lay0->
setRowStretch(2,1);
00162 lay0->
addWidget(m_pagesizelabel,0,0);
00163 lay0->
addWidget(m_pagesize,0,1);
00164 lay0->
addWidget(m_orientbox,1,0);
00165 lay0->
addWidget(m_colorbox,1,1);
00166 lay0->
addWidget(m_nupbox,2,0);
00167 QGridLayout *lay1 =
new QGridLayout(m_orientbox->layout(), 2, 2, 10);
00168 lay1->
addWidget(m_portrait,0,0);
00169 lay1->
addWidget(m_landscape,1,0);
00170 lay1->
addMultiCellWidget(m_orientpix,0,1,1,1);
00171 QGridLayout *lay2 =
new QGridLayout(m_colorbox->layout(), 2, 2, 10);
00172 lay2->
addWidget(m_color,0,0);
00173 lay2->
addWidget(m_grayscale,1,0);
00174 lay2->
addMultiCellWidget(m_colorpix,0,1,1,1);
00175 QGridLayout *lay3 =
new QGridLayout(m_nupbox->layout(), 4, 2, 5);
00176 lay3->
addWidget(m_nup1,0,0);
00177 lay3->
addWidget(m_nup2,1,0);
00178 lay3->
addWidget(m_nup4,2,0);
00179 lay3->
addWidget(m_nupother,3,0);
00180 lay3->
addMultiCellWidget(m_nuppix,0,3,1,1);
00181
00182
00183 m_portrait->
setChecked(
true);
00184 slotOrientationChanged(0);
00185 m_color->
setChecked(
true);
00186 slotColorModeChanged(0);
00187 m_nup1->
setChecked(
true);
00188 slotNupChanged(0);
00189
00190
if (!KXmlCommandManager::self()->checkCommand(
"psnup"))
00191 m_nupbox->setEnabled(
false);
00192
if (
KPrinter::applicationType() != KPrinter::Dialog
00193 &&
KPrinter::applicationType() >= 0 )
00194 {
00195 m_orientbox->setEnabled(
false);
00196 m_colorbox->setEnabled(
false);
00197 m_pagesize->setEnabled(driver());
00198 m_pagesizelabel->setEnabled(driver());
00199 }
00200
00201
if (!driver())
00202 {
00203
for (
int i=0; i<KPrinter::NPageSize-1; i++)
00204 m_pagesize->insertItem(i18n(page_sizes[i].text));
00205
00206 m_pagesize->setCurrentItem(findIndex((KPrinter::PageSize)(KGlobal::locale()->pageSize())));
00207 }
00208
else
00209 {
00210 DrListOption *lopt = static_cast<DrListOption*>(driver()->findOption(
"PageSize"));
00211
QPtrListIterator<DrBase> it(*(lopt->choices()));
00212
for (; it.
current(); ++it)
00213 {
00214 m_pagesize->insertItem(it.
current()->get(
"text"));
00215
if (it.
current() == lopt->currentChoice())
00216 m_pagesize->setCurrentItem(m_pagesize->count()-1);
00217 }
00218 }
00219
00220
00221 connect(m_orientbox,SIGNAL(clicked(
int)),SLOT(slotOrientationChanged(
int)));
00222 connect(m_colorbox,SIGNAL(clicked(
int)),SLOT(slotColorModeChanged(
int)));
00223 connect(m_nupbox,SIGNAL(clicked(
int)),SLOT(slotNupChanged(
int)));
00224 }
00225
00226
void KPQtPage::slotOrientationChanged(
int ID)
00227 {
00228 m_orientpix->setPixmap(UserIcon((ID == ORIENT_PORTRAIT_ID ?
"kdeprint_portrait" :
"kdeprint_landscape")));
00229 }
00230
00231
void KPQtPage::slotColorModeChanged(
int ID)
00232 {
00233 m_colorpix->setPixmap(UserIcon((ID == COLORMODE_COLOR_ID ?
"kdeprint_color" :
"kdeprint_grayscale")));
00234 }
00235
00236
void KPQtPage::slotNupChanged(
int ID)
00237 {
00238
QString pixstr;
00239
switch (ID)
00240 {
00241
case NUP_1: pixstr =
"kdeprint_nup1";
break;
00242
case NUP_2: pixstr =
"kdeprint_nup2";
break;
00243
case NUP_4: pixstr =
"kdeprint_nup4";
break;
00244
case NUP_OTHER: pixstr =
"kdeprint_nupother";
break;
00245 }
00246 m_nuppix->setPixmap(UserIcon(pixstr));
00247 }
00248
00249
void KPQtPage::setOptions(
const QMap<QString,QString>& opts)
00250 {
00251
int ID = (opts[
"kde-orientation"] ==
"Landscape" ? ORIENT_LANDSCAPE_ID : ORIENT_PORTRAIT_ID);
00252 m_orientbox->setButton(ID);
00253 slotOrientationChanged(ID);
00254 ID = (opts[
"kde-colormode"] ==
"GrayScale" ? COLORMODE_GRAYSCALE_ID : COLORMODE_COLOR_ID);
00255 m_colorbox->setButton(ID);
00256 slotColorModeChanged(ID);
00257
if (driver())
00258 {
00259
QString val = opts[
"PageSize"];
00260
if (!val.
isEmpty())
00261 {
00262 DrListOption *opt = static_cast<DrListOption*>(driver()->findOption(
"PageSize"));
00263 DrBase *ch = opt->findChoice(val);
00264
if (ch)
00265 m_pagesize->setCurrentItem(opt->choices()->findRef(ch));
00266 }
00267 }
00268
else if (!opts[
"kde-pagesize"].isEmpty())
00269 m_pagesize->setCurrentItem(findIndex(opts[
"kde-pagesize"].toInt()));
00270 ID = NUP_1;
00271
if (opts[
"_kde-filters"].find(
"psnup") != -1)
00272 {
00273 ID = opts[
"_kde-psnup-nup"].toInt();
00274
if (ID == 1 || ID == 2 || ID == 4)
00275 {
00276
if (ID == 4) ID = 3;
00277 ID--;
00278 }
00279
else
00280 {
00281 ID = NUP_OTHER;
00282 }
00283 }
00284 m_nupbox->setButton(ID);
00285 slotNupChanged(ID);
00286
00287
if ( m_orientbox->isEnabled() )
00288 m_orientbox->setDisabled( opts[
"kde-orientation-fixed" ] ==
"1" );
00289
if ( m_pagesize->isEnabled() )
00290 m_pagesize->setDisabled( opts[
"kde-pagesize-fixed" ] ==
"1" );
00291 }
00292
00293
void KPQtPage::getOptions(
QMap<QString,QString>& opts,
bool incldef)
00294 {
00295 opts[
"kde-orientation"] = (m_orientbox->id(m_orientbox->selected()) == ORIENT_LANDSCAPE_ID ?
"Landscape" :
"Portrait");
00296 opts[
"kde-colormode"] = (m_colorbox->id(m_colorbox->selected()) == COLORMODE_GRAYSCALE_ID ?
"GrayScale" :
"Color");
00297
if (driver())
00298 {
00299 DrListOption *opt = static_cast<DrListOption*>(driver()->findOption(
"PageSize"));
00300
if (opt)
00301 {
00302 DrBase *ch = opt->choices()->at(m_pagesize->currentItem());
00303
if (ch && (incldef || ch->name() != opt->get(
"default")))
00304 {
00305 opts[
"PageSize"] = ch->name();
00306 }
00307 }
00308 }
00309
else
00310 opts[
"kde-pagesize"] =
QString::number(page_sizes[m_pagesize->currentItem()].ID);
00311
int ID = m_nupbox->id(m_nupbox->selected());
00312
QString s = opts[
"_kde-filters"];
00313
if (ID == NUP_1)
00314 {
00315 opts.
remove(
"_kde-psnup-nup");
00316 }
00317
else if (ID != NUP_OTHER)
00318 {
00319
int nup(ID == NUP_2 ? 2 : 4);
00320
if (s.
find(
"psnup") == -1)
00321 {
00322
QStringList fl =
QStringList::split(
',', s,
false);
00323 KXmlCommandManager::self()->insertCommand(fl,
"psnup");
00324 s = fl.
join(
",");
00325 }
00326 opts[
"_kde-psnup-nup"] =
QString::number(nup);
00327 }
00328 opts[
"_kde-filters"] = s;
00329 }
00330
#include "kpqtpage.moc"