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
00033 #include <kiconloader.h>
00034 #include <klocale.h>
00035 #include <kdebug.h>
00036
00037 #define ORIENT_PORTRAIT_ID 0
00038 #define ORIENT_LANDSCAPE_ID 1
00039
00040 #define COLORMODE_COLOR_ID 0
00041 #define COLORMODE_GRAYSCALE_ID 1
00042
00043 #define NUP_1 0
00044 #define NUP_2 1
00045 #define NUP_4 2
00046 #define NUP_OTHER 3
00047
00048
00049
00050 KPQtPage::KPQtPage(QWidget *parent, const char *name)
00051 : KPrintDialogPage(parent,name)
00052 {
00053 init();
00054 }
00055
00056 KPQtPage::KPQtPage(DrMain *driver, QWidget *parent, const char *name)
00057 : KPrintDialogPage(0, (driver && driver->findOption("PageSize") ? driver : 0), parent, name)
00058 {
00059 init();
00060 }
00061
00062 KPQtPage::~KPQtPage()
00063 {
00064 }
00065
00066 void KPQtPage::init()
00067 {
00068 setTitle(i18n("Print Format"));
00069
00070
00071 m_pagesize = new QComboBox(this);
00072 QLabel *m_pagesizelabel = new QLabel(i18n("Page s&ize:"), this);
00073 m_pagesizelabel->setAlignment(Qt::AlignVCenter|Qt::AlignRight);
00074 m_pagesizelabel->setBuddy(m_pagesize);
00075 m_orientbox = new QButtonGroup(0, Qt::Vertical, i18n("Orientation"), this);
00076 m_colorbox = new QButtonGroup(0, Qt::Vertical, i18n("Color Mode"), this);
00077 QRadioButton *m_portrait = new QRadioButton(i18n("&Portrait"), m_orientbox);
00078 QRadioButton *m_landscape = new QRadioButton(i18n("&Landscape"), m_orientbox);
00079 m_orientpix = new QLabel(m_orientbox);
00080 m_orientpix->setAlignment(Qt::AlignCenter);
00081 QRadioButton *m_color = new QRadioButton(i18n("Colo&r"), m_colorbox);
00082 QRadioButton *m_grayscale = new QRadioButton(i18n("&Grayscale"), m_colorbox);
00083 m_colorpix = new QLabel(m_colorbox);
00084 m_colorpix->setAlignment(Qt::AlignCenter);
00085 m_nupbox = new QButtonGroup(0, Qt::Vertical, i18n("Pages per Sheet"), this);
00086 QRadioButton *m_nup1 = new QRadioButton("&1", m_nupbox);
00087 QRadioButton *m_nup2 = new QRadioButton("&2", m_nupbox);
00088 QRadioButton *m_nup4 = new QRadioButton("&4", m_nupbox);
00089 QRadioButton *m_nupother = new QRadioButton(i18n("Ot&her"), m_nupbox);
00090 m_nuppix = new QLabel(m_nupbox);
00091 m_nuppix->setAlignment(Qt::AlignCenter);
00092
00093
00094 QGridLayout *lay0 = new QGridLayout(this, 3, 2, 0, 10);
00095 lay0->setRowStretch(1,1);
00096 lay0->setRowStretch(2,1);
00097 lay0->addWidget(m_pagesizelabel,0,0);
00098 lay0->addWidget(m_pagesize,0,1);
00099 lay0->addWidget(m_orientbox,1,0);
00100 lay0->addWidget(m_colorbox,1,1);
00101 lay0->addWidget(m_nupbox,2,0);
00102 QGridLayout *lay1 = new QGridLayout(m_orientbox->layout(), 2, 2, 10);
00103 lay1->addWidget(m_portrait,0,0);
00104 lay1->addWidget(m_landscape,1,0);
00105 lay1->addMultiCellWidget(m_orientpix,0,1,1,1);
00106 QGridLayout *lay2 = new QGridLayout(m_colorbox->layout(), 2, 2, 10);
00107 lay2->addWidget(m_color,0,0);
00108 lay2->addWidget(m_grayscale,1,0);
00109 lay2->addMultiCellWidget(m_colorpix,0,1,1,1);
00110 QGridLayout *lay3 = new QGridLayout(m_nupbox->layout(), 4, 2, 5);
00111 lay3->addWidget(m_nup1,0,0);
00112 lay3->addWidget(m_nup2,1,0);
00113 lay3->addWidget(m_nup4,2,0);
00114 lay3->addWidget(m_nupother,3,0);
00115 lay3->addMultiCellWidget(m_nuppix,0,3,1,1);
00116
00117
00118 m_portrait->setChecked(true);
00119 slotOrientationChanged(0);
00120 m_color->setChecked(true);
00121 slotColorModeChanged(0);
00122 m_nup1->setChecked(true);
00123 slotNupChanged(0);
00124
00125 if (!KXmlCommandManager::self()->checkCommand("psnup"))
00126 m_nupbox->setEnabled(false);
00127 if (KPrinter::applicationType() != KPrinter::Dialog
00128 && KPrinter::applicationType() >= 0 )
00129 {
00130 m_orientbox->setEnabled(false);
00131 m_colorbox->setEnabled(false);
00132 m_pagesize->setEnabled(driver());
00133 m_pagesizelabel->setEnabled(driver());
00134 }
00135
00136 if (!driver())
00137 {
00138 for (int i=0; i<KPrinter::NPageSize-1; i++)
00139 m_pagesize->insertItem(i18n(page_sizes[i].text));
00140
00141 m_pagesize->setCurrentItem(findIndex((KPrinter::PageSize)(KGlobal::locale()->pageSize())));
00142 }
00143 else
00144 {
00145 DrListOption *lopt = static_cast<DrListOption*>(driver()->findOption("PageSize"));
00146 QPtrListIterator<DrBase> it(*(lopt->choices()));
00147 for (; it.current(); ++it)
00148 {
00149 m_pagesize->insertItem(it.current()->get("text"));
00150 if (it.current() == lopt->currentChoice())
00151 m_pagesize->setCurrentItem(m_pagesize->count()-1);
00152 }
00153 }
00154
00155
00156 connect(m_orientbox,SIGNAL(clicked(int)),SLOT(slotOrientationChanged(int)));
00157 connect(m_colorbox,SIGNAL(clicked(int)),SLOT(slotColorModeChanged(int)));
00158 connect(m_nupbox,SIGNAL(clicked(int)),SLOT(slotNupChanged(int)));
00159 }
00160
00161 void KPQtPage::slotOrientationChanged(int ID)
00162 {
00163 m_orientpix->setPixmap(UserIcon((ID == ORIENT_PORTRAIT_ID ? "kdeprint_portrait" : "kdeprint_landscape")));
00164 }
00165
00166 void KPQtPage::slotColorModeChanged(int ID)
00167 {
00168 m_colorpix->setPixmap(UserIcon((ID == COLORMODE_COLOR_ID ? "kdeprint_color" : "kdeprint_grayscale")));
00169 }
00170
00171 void KPQtPage::slotNupChanged(int ID)
00172 {
00173 QString pixstr;
00174 switch (ID)
00175 {
00176 case NUP_1: pixstr = "kdeprint_nup1"; break;
00177 case NUP_2: pixstr = "kdeprint_nup2"; break;
00178 case NUP_4: pixstr = "kdeprint_nup4"; break;
00179 case NUP_OTHER: pixstr = "kdeprint_nupother"; break;
00180 }
00181 m_nuppix->setPixmap(UserIcon(pixstr));
00182 }
00183
00184 void KPQtPage::setOptions(const QMap<QString,QString>& opts)
00185 {
00186 int ID = (opts["kde-orientation"] == "Landscape" ? ORIENT_LANDSCAPE_ID : ORIENT_PORTRAIT_ID);
00187 m_orientbox->setButton(ID);
00188 slotOrientationChanged(ID);
00189 ID = (opts["kde-colormode"] == "GrayScale" ? COLORMODE_GRAYSCALE_ID : COLORMODE_COLOR_ID);
00190 m_colorbox->setButton(ID);
00191 slotColorModeChanged(ID);
00192 if (driver())
00193 {
00194 QString val = opts["PageSize"];
00195 if (!val.isEmpty())
00196 {
00197 DrListOption *opt = static_cast<DrListOption*>(driver()->findOption("PageSize"));
00198 DrBase *ch = opt->findChoice(val);
00199 if (ch)
00200 m_pagesize->setCurrentItem(opt->choices()->findRef(ch));
00201 }
00202 }
00203 else if (!opts["kde-pagesize"].isEmpty())
00204 m_pagesize->setCurrentItem(findIndex(opts["kde-pagesize"].toInt()));
00205 ID = NUP_1;
00206 if (opts["_kde-filters"].find("psnup") != -1)
00207 {
00208 ID = opts["_kde-psnup-nup"].toInt();
00209 if (ID == 1 || ID == 2 || ID == 4)
00210 {
00211 if (ID == 4) ID = 3;
00212 ID--;
00213 }
00214 else
00215 {
00216 ID = NUP_OTHER;
00217 }
00218 }
00219 m_nupbox->setButton(ID);
00220 slotNupChanged(ID);
00221
00222 if ( m_orientbox->isEnabled() )
00223 m_orientbox->setDisabled( opts[ "kde-orientation-fixed" ] == "1" );
00224 if ( m_pagesize->isEnabled() )
00225 m_pagesize->setDisabled( opts[ "kde-pagesize-fixed" ] == "1" );
00226 }
00227
00228 void KPQtPage::getOptions(QMap<QString,QString>& opts, bool incldef)
00229 {
00230 opts["kde-orientation"] = (m_orientbox->id(m_orientbox->selected()) == ORIENT_LANDSCAPE_ID ? "Landscape" : "Portrait");
00231 opts["kde-colormode"] = (m_colorbox->id(m_colorbox->selected()) == COLORMODE_GRAYSCALE_ID ? "GrayScale" : "Color");
00232 if (driver())
00233 {
00234 DrListOption *opt = static_cast<DrListOption*>(driver()->findOption("PageSize"));
00235 if (opt)
00236 {
00237 DrBase *ch = opt->choices()->at(m_pagesize->currentItem());
00238 if (ch && (incldef || ch->name() != opt->get("default")))
00239 {
00240 opts["PageSize"] = ch->name();
00241 }
00242 }
00243 }
00244 else
00245 opts["kde-pagesize"] = QString::number(page_sizes[m_pagesize->currentItem()].ID);
00246 int ID = m_nupbox->id(m_nupbox->selected());
00247 QString s = opts["_kde-filters"];
00248 if (ID == NUP_1)
00249 {
00250 opts.remove("_kde-psnup-nup");
00251 }
00252 else if (ID != NUP_OTHER)
00253 {
00254 int nup(ID == NUP_2 ? 2 : 4);
00255 if (s.find("psnup") == -1)
00256 {
00257 QStringList fl = QStringList::split(',', s, false);
00258 KXmlCommandManager::self()->insertCommand(fl, "psnup");
00259 s = fl.join(",");
00260 }
00261 opts["_kde-psnup-nup"] = QString::number(nup);
00262 }
00263 opts["_kde-filters"] = s;
00264 }
00265 #include "kpqtpage.moc"