diff options
Diffstat (limited to 'tdeprint/kpqtpage.cpp')
-rw-r--r-- | tdeprint/kpqtpage.cpp | 336 |
1 files changed, 336 insertions, 0 deletions
diff --git a/tdeprint/kpqtpage.cpp b/tdeprint/kpqtpage.cpp new file mode 100644 index 000000000..e2c28ebb1 --- /dev/null +++ b/tdeprint/kpqtpage.cpp @@ -0,0 +1,336 @@ +/* + * This file is part of the KDE libraries + * Copyright (c) 2001 Michael Goffioul <tdeprint@swing.be> + * + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License version 2 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + **/ + +#include "kpqtpage.h" +#include "kprinter.h" +#include "kxmlcommand.h" +#include "driver.h" +#include "util.h" + +#include <tqcombobox.h> +#include <tqbuttongroup.h> +#include <tqradiobutton.h> +#include <tqlabel.h> +#include <tqlayout.h> +#include <tqwhatsthis.h> + +#include <kiconloader.h> +#include <klocale.h> +#include <kdebug.h> + +#define ORIENT_PORTRAIT_ID 0 +#define ORIENT_LANDSCAPE_ID 1 + +#define COLORMODE_COLOR_ID 0 +#define COLORMODE_GRAYSCALE_ID 1 + +#define NUP_1 0 +#define NUP_2 1 +#define NUP_4 2 +#define NUP_OTHER 3 + +//***************************************************************************************************** + +KPQtPage::KPQtPage(TQWidget *parent, const char *name) +: KPrintDialogPage(parent,name) +{ + init(); +} + +KPQtPage::KPQtPage(DrMain *driver, TQWidget *parent, const char *name) +: KPrintDialogPage(0, (driver && driver->findOption("PageSize") ? driver : 0), parent, name) +{ + init(); +} + +KPQtPage::~KPQtPage() +{ +} + +void KPQtPage::init() +{ + //WhatsThis strings.... (added by pfeifle@kde.org) + TQString whatsThisColorModeOtPageLabel = i18n( " <qt> " + " <b>Selection of color mode:</b> You can choose between 2 options: " + " <ul><li><b>Color</b> and</li> " + " <li><b>Grayscale</b></li></ul> " + " <b>Note:</b> This selection field may be grayed out and made inactive. " + " This happens if KDEPrint can not retrieve " + " enough information about your print file. In this case the embedded color- or grayscale information " + " of your printfile, and the default handling of the printer take precedence. " + " </qt>" ); + TQString whatsThisPageSizeOtPageLabel = i18n( " <qt> " + " <b>Selection of page size:</b> Select paper size to be printed on from " + " the drop-down menu. " + " <p>The exact list of choices depends on the printer driver (\"PPD\") you have installed. " + " </qt>" ); + TQString whatsThisPagesPerSheetOtPageLabel = i18n( " <qt> " + " <b>Selection of pages per sheet:</b> " + " You can choose to print more than one page onto each sheet of paper. " + " This is sometimes useful to save paper. " + " <p><b>Note 1:</b> the page images get scaled down accordingly to print 2 or 4 pages per sheet. " + " The page image does not get scaled if you print 1 page per sheet (the default setting.). " + " <p><b>Note 2:</b> If you select multiple pages per sheet here, the scaling and re-arranging is done " + " by your printing system. " + " <p><b>Note 3, regarding \"Other\":</b> You cannot really select <em>Other</em> as the number of " + " pages to print on one sheet.\"Other\" is checkmarked here for information purposes only. " + " <p>To select 8, 9, 16 or other numbers of " + " pages per sheet: " + " <ul> " + " <li> go to the tab headlined \"Filter\"</li>" + " <li> enable the <em>Multiple Pages per Sheet</em> filter </li>" + " <li> and configure it (bottom-most button on the right of the \"Filters\" tab). </li>" + " </ul>" + " </qt>" ); + TQString whatsThisOrientationOtPageLabel = i18n( " <qt> " + " <b>Selection of image orientation:</b> Orientation of the printed " + " pageimage on your paper is controlled by the radio buttons. By default, " + " the orientation is <em>Portrait</em> " + " <p>You can select 2 alternatives: " + " <ul> " + " <li> <b>Portrait.</b>.Portrait is the default setting. </li> " + " <li> <b>Landscape.</b> </li> " + " </ul> " + " The icon changes according to your selection." + " </qt>" ); + setTitle(i18n("Print Format")); + + // widget creation + m_pagesize = new TQComboBox(this); + TQWhatsThis::add(m_pagesize, whatsThisPageSizeOtPageLabel); + TQLabel *m_pagesizelabel = new TQLabel(i18n("Page s&ize:"), this); + m_pagesizelabel->tqsetAlignment(Qt::AlignVCenter|Qt::AlignRight); + m_pagesizelabel->setBuddy(m_pagesize); + m_orientbox = new TQButtonGroup(0, Qt::Vertical, i18n("Orientation"), this); + TQWhatsThis::add(m_orientbox, whatsThisOrientationOtPageLabel); + m_colorbox = new TQButtonGroup(0, Qt::Vertical, i18n("Color Mode"), this); + TQWhatsThis::add(m_colorbox, whatsThisColorModeOtPageLabel); + TQRadioButton *m_portrait = new TQRadioButton(i18n("&Portrait"), m_orientbox); + TQWhatsThis::add(m_portrait, whatsThisOrientationOtPageLabel); + + TQRadioButton *m_landscape = new TQRadioButton(i18n("&Landscape"), m_orientbox); + TQWhatsThis::add(m_landscape, whatsThisOrientationOtPageLabel); + + m_orientpix = new TQLabel(m_orientbox); + m_orientpix->tqsetAlignment(Qt::AlignCenter); + TQWhatsThis::add(m_orientpix, whatsThisOrientationOtPageLabel); + + TQRadioButton *m_color = new TQRadioButton(i18n("Colo&r"), m_colorbox); + TQWhatsThis::add(m_color, whatsThisColorModeOtPageLabel); + + TQRadioButton *m_grayscale = new TQRadioButton(i18n("&Grayscale"), m_colorbox); + m_colorpix = new TQLabel(m_colorbox); + m_colorpix->tqsetAlignment(Qt::AlignCenter); + TQWhatsThis::add(m_colorpix, whatsThisColorModeOtPageLabel); + + m_nupbox = new TQButtonGroup(0, Qt::Vertical, i18n("Pages per Sheet"), this); + // TQWhatsThis::add(m_nupbox, whatsThisPagesPerSheetOtPageLabel); + TQRadioButton *m_nup1 = new TQRadioButton("&1", m_nupbox); + TQWhatsThis::add(m_nup1, whatsThisPagesPerSheetOtPageLabel); + TQRadioButton *m_nup2 = new TQRadioButton("&2", m_nupbox); + TQWhatsThis::add(m_nup2, whatsThisPagesPerSheetOtPageLabel); + TQRadioButton *m_nup4 = new TQRadioButton("&4", m_nupbox); + TQWhatsThis::add(m_nup4, whatsThisPagesPerSheetOtPageLabel); + TQRadioButton *m_nupother = new TQRadioButton(i18n("Ot&her"), m_nupbox); + TQWhatsThis::add(m_nupother, whatsThisPagesPerSheetOtPageLabel); + + m_nuppix = new TQLabel(m_nupbox); + m_nuppix->tqsetAlignment(Qt::AlignCenter); + TQWhatsThis::add(m_nuppix, whatsThisPagesPerSheetOtPageLabel); + + // layout creation + TQGridLayout *lay0 = new TQGridLayout(this, 3, 2, 0, 10); + lay0->setRowStretch(1,1); + lay0->setRowStretch(2,1); + lay0->addWidget(m_pagesizelabel,0,0); + lay0->addWidget(m_pagesize,0,1); + lay0->addWidget(m_orientbox,1,0); + lay0->addWidget(m_colorbox,1,1); + lay0->addWidget(m_nupbox,2,0); + TQGridLayout *lay1 = new TQGridLayout(m_orientbox->tqlayout(), 2, 2, 10); + lay1->addWidget(m_portrait,0,0); + lay1->addWidget(m_landscape,1,0); + lay1->addMultiCellWidget(m_orientpix,0,1,1,1); + TQGridLayout *lay2 = new TQGridLayout(m_colorbox->tqlayout(), 2, 2, 10); + lay2->addWidget(m_color,0,0); + lay2->addWidget(m_grayscale,1,0); + lay2->addMultiCellWidget(m_colorpix,0,1,1,1); + TQGridLayout *lay3 = new TQGridLayout(m_nupbox->tqlayout(), 4, 2, 5); + lay3->addWidget(m_nup1,0,0); + lay3->addWidget(m_nup2,1,0); + lay3->addWidget(m_nup4,2,0); + lay3->addWidget(m_nupother,3,0); + lay3->addMultiCellWidget(m_nuppix,0,3,1,1); + + // initialization + m_portrait->setChecked(true); + slotOrientationChanged(0); + m_color->setChecked(true); + slotColorModeChanged(0); + m_nup1->setChecked(true); + slotNupChanged(0); + + if (!KXmlCommandManager::self()->checkCommand("psnup")) + m_nupbox->setEnabled(false); + if (KPrinter::applicationType() != KPrinter::Dialog + && KPrinter::applicationType() >= 0 ) + { + m_orientbox->setEnabled(false); + m_colorbox->setEnabled(false); + m_pagesize->setEnabled(driver()); + m_pagesizelabel->setEnabled(driver()); + } + + if (!driver()) + { + for (int i=0; i<KPrinter::NPageSize-1; i++) + m_pagesize->insertItem(i18n(page_sizes[i].text)); + // default page size to locale settings + m_pagesize->setCurrentItem(findIndex((KPrinter::PageSize)(KGlobal::locale()->pageSize()))); + } + else + { + DrListOption *lopt = static_cast<DrListOption*>(driver()->findOption("PageSize")); + TQPtrListIterator<DrBase> it(*(lopt->choices())); + for (; it.current(); ++it) + { + m_pagesize->insertItem(it.current()->get("text")); + if (it.current() == lopt->currentChoice()) + m_pagesize->setCurrentItem(m_pagesize->count()-1); + } + } + + // connections + connect(m_orientbox,TQT_SIGNAL(clicked(int)),TQT_SLOT(slotOrientationChanged(int))); + connect(m_colorbox,TQT_SIGNAL(clicked(int)),TQT_SLOT(slotColorModeChanged(int))); + connect(m_nupbox,TQT_SIGNAL(clicked(int)),TQT_SLOT(slotNupChanged(int))); +} + +void KPQtPage::slotOrientationChanged(int ID) +{ + m_orientpix->setPixmap(UserIcon((ID == ORIENT_PORTRAIT_ID ? "tdeprint_portrait" : "tdeprint_landscape"))); +} + +void KPQtPage::slotColorModeChanged(int ID) +{ + m_colorpix->setPixmap(UserIcon((ID == COLORMODE_COLOR_ID ? "tdeprint_color" : "tdeprint_grayscale"))); +} + +void KPQtPage::slotNupChanged(int ID) +{ + QString pixstr; + switch (ID) + { + case NUP_1: pixstr = "tdeprint_nup1"; break; + case NUP_2: pixstr = "tdeprint_nup2"; break; + case NUP_4: pixstr = "tdeprint_nup4"; break; + case NUP_OTHER: pixstr = "tdeprint_nupother"; break; + } + m_nuppix->setPixmap(UserIcon(pixstr)); +} + +void KPQtPage::setOptions(const TQMap<TQString,TQString>& opts) +{ + int ID = (opts["kde-orientation"] == "Landscape" ? ORIENT_LANDSCAPE_ID : ORIENT_PORTRAIT_ID); + m_orientbox->setButton(ID); + slotOrientationChanged(ID); + ID = (opts["kde-colormode"] == "GrayScale" ? COLORMODE_GRAYSCALE_ID : COLORMODE_COLOR_ID); + m_colorbox->setButton(ID); + slotColorModeChanged(ID); + if (driver()) + { + QString val = opts["PageSize"]; + if (!val.isEmpty()) + { + DrListOption *opt = static_cast<DrListOption*>(driver()->findOption("PageSize")); + DrBase *ch = opt->findChoice(val); + if (ch) + m_pagesize->setCurrentItem(opt->choices()->findRef(ch)); + } + } + else if (!opts["kde-pagesize"].isEmpty()) + m_pagesize->setCurrentItem(findIndex(opts["kde-pagesize"].toInt())); + ID = NUP_1; + if (opts["_kde-filters"].find("psnup") != -1) + { + if (opts.contains("_kde-psnup-nup")) { + ID = opts["_kde-psnup-nup"].toInt(); + if (ID == 1 || ID == 2 || ID == 4) + { + if (ID == 4) ID = 3; + ID--; + } + else + { + ID = NUP_OTHER; + } + } + else + { + ID = NUP_1; + } + } + m_nupbox->setButton(ID); + slotNupChanged(ID); + + if ( m_orientbox->isEnabled() ) + m_orientbox->setDisabled( opts[ "kde-orientation-fixed" ] == "1" ); + if ( m_pagesize->isEnabled() ) + m_pagesize->setDisabled( opts[ "kde-pagesize-fixed" ] == "1" ); +} + +void KPQtPage::getOptions(TQMap<TQString,TQString>& opts, bool incldef) +{ + opts["kde-orientation"] = (m_orientbox->id(m_orientbox->selected()) == ORIENT_LANDSCAPE_ID ? "Landscape" : "Portrait"); + opts["kde-colormode"] = (m_colorbox->id(m_colorbox->selected()) == COLORMODE_GRAYSCALE_ID ? "GrayScale" : "Color"); + if (driver()) + { + DrListOption *opt = static_cast<DrListOption*>(driver()->findOption("PageSize")); + if (opt) + { + DrBase *ch = opt->choices()->tqat(m_pagesize->currentItem()); + if (ch && (incldef || ch->name() != opt->get("default"))) + { + opts["PageSize"] = ch->name(); + } + } + } + else + opts["kde-pagesize"] = TQString::number(page_sizes[m_pagesize->currentItem()].ID); + int ID = m_nupbox->id(m_nupbox->selected()); + TQString s = opts["_kde-filters"]; + if (ID == NUP_1) + { + opts.remove("_kde-psnup-nup"); + } + else if (ID != NUP_OTHER) + { + int nup(ID == NUP_2 ? 2 : 4); + if (s.find("psnup") == -1) + { + TQStringList fl = TQStringList::split(',', s, false); + KXmlCommandManager::self()->insertCommand(fl, "psnup"); + s = fl.join(","); + } + opts["_kde-psnup-nup"] = TQString::number(nup); + } + opts["_kde-filters"] = s; +} +#include "kpqtpage.moc" |