# kdeprint Library API Documentation

Overview | Class Hierarchy | Classes | Classes (annotated) | Members | Namespaces | Source Files

# kptextpage.cpp

    00001 /*
    00002  *  This file is part of the KDE libraries
    00003  *  Copyright (c) 2001 Michael Goffioul <kdeprint@swing.be>
    00004  *
    00005  *  This library is free software; you can redistribute it and/or
    00006  *  modify it under the terms of the GNU Library General Public
    00007  *  License version 2 as published by the Free Software Foundation.
    00008  *
    00009  *  This library is distributed in the hope that it will be useful,
    00010  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
    00011  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    00012  *  Library General Public License for more details.
    00013  *
    00014  *  You should have received a copy of the GNU Library General Public License
    00015  *  along with this library; see the file COPYING.LIB.  If not, write to
    00016  *  the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
    00017  *  Boston, MA 02111-1307, USA.
    00018  **/
    00019
    00020 #include "kptextpage.h"
    00021 #include "marginwidget.h"
    00022 #include "driver.h"
    00023 #include "kprinter.h"
    00024
    00025 #include <qbuttongroup.h>
    00026 #include <qgroupbox.h>
    00027 #include <qlayout.h>
    00028 #include <qlabel.h>
    00029 #include <qradiobutton.h>
    00030 #include <qwhatsthis.h>
    00031 #include <knuminput.h>
    00032 #include <klocale.h>
    00033 #include <kiconloader.h>
    00034 #include <kseparator.h>
    00035 #include <kdebug.h>
    00036
    00037 KPTextPage::KPTextPage(DrMain *driver, QWidget *parent, const char *name)
    00038 : KPrintDialogPage(0, driver, parent, name)
    00039 {
    00040     //WhatsThis strings.... (added by pfeifle@kde.org)
    00041     QString whatsThisCPITextPage = i18n( " <qt> "
    00042             " <p><b>Characters Per Inch</b></p> "
    00043             " <p>This setting controls the horizontal size of characters when printing a text file. </p>"
    00044             " <p>The default value is 10, meaning that the font is scaled in a way that 10 characters "
    00045             " per inch will be printed. </p> "
    00046             " <hr> "
    00047             " <p><em><b>Additional hint for power users:</b> This KDEPrint GUI element matches "
    00048             " with the CUPS commandline job option parameter:</em> "
    00049             " <pre>"
    00050             "    -o cpi=...          # example: \"8\" or \"12\" "
    00051             " </pre>"
    00052             " </p> "
    00053             " </qt>" );
    00054
    00055     QString whatsThisLPITextPage = i18n( " <qt> "
    00056             " <p><b>Lines Per Inch</b></p> "
    00057             " <p>This setting controls the vertical size of characters when printing a text file. </p>"
    00058             " <p>The default value is 6, meaning that the font is scaled in a way that 6 lines "
    00059             " per inch will be printed. </p> "
    00060             " <hr> "
    00061             " <p><em><b>Additional hint for power users:</b> This KDEPrint GUI element matches "
    00062             " with the CUPS commandline job option parameter:</em> "
    00063             " <pre>"
    00064             "    -o lpi=...         # example \"5\" or \"7\" "
    00065             " </pre>"
    00066             " </p> "
    00067             " </qt>" );
    00068
    00069     QString whatsThisColumnsTextPage = i18n( " <qt> "
    00070             " <p><b>Columns</b></p> "
    00071             " <p>This setting controls how many columns of text will be printed on each page when."
    00072             " printing text files. </p> "
    00073             " <p>The default value is 1, meaning that only one column of text per page "
    00074             " will be printed. </p> "
    00075             " <hr> "
    00076             " <p><em><b>Additional hint for power users:</b> This KDEPrint GUI element matches "
    00077             " with the CUPS commandline job option parameter:</em> "
    00078             " <pre>"
    00079             "    -o columns=...     # example: \"2\" or \"4\" "
    00080             " </pre>"
    00081             " </p> "
    00082             " </qt>" );
    00083
    00084     QString whatsThisPrettyprintPreviewIconTextPage = i18n( " <qt> "
    00085             " Preview icon changes when you turn on or off prettyprint. "
    00086             " </qt>" );
    00087     QString whatsThisFormatTextPage = i18n( " <qt> "
    00088             " <p><b>Text Formats</b></p> "
    00089             " <p>These settings control the appearance of text on printouts. They are only valid for "
    00090             " printing text files or input directly through kprinter. </p> "
    00091             " <p><b>Note:</b> These settings have no effect whatsoever for other input formats than "
    00092             " text, or for printing from applications such as the KDE Advanced Text Editor. (Applications "
    00093             " in general send PostScript to the print system, and 'kate' in particular has its own "
    00094             " knobs to control the print output. </p>."
    00095             " <hr> "
    00096             " <p><em><b>Additional hint for power users:</b> This KDEPrint GUI element matches "
    00097             " with the CUPS commandline job option parameter:</em> "
    00098             " <pre>"
    00099             "     -o cpi=...         # example: \"8\" or \"12\" "
    00100             " <br> "
    00101             "    -o lpi=...         # example: \"5\" or \"7\" "
    00102             " <br> "
    00103             "    -o columns=...     # example: \"2\" or \"4\" "
    00104             " </pre>"
    00105             " </p> "
    00106             " </qt>" );
    00107
    00108     QString whatsThisMarginsTextPage = i18n( " <qt> "
    00109             " <p><b>Margins</b></p> "
    00110             " <p>These settings control the margins of printouts on the paper. They are not valid for "
    00111             " jobs originating from applications which define their own page layout internally and "
    00112             " send PostScript to KDEPrint (such as KOffice or OpenOffice.org). </p> "
    00113             " <p>When printing from KDE applications, such as KMail and Konqueror, or printing an ASCII text "
    00114             " file through kprinter, you can choose your preferred margin settings here. </p> "
    00115             " <p>Margins may be set individually for each edge of the paper. The combo box at the bottom lets you change "
    00116             " the units of measurement between Pixels, Millimeters, Centimeters, and Inches. </p> "
    00117             " <p>You can even use the mouse to grab one margin and drag it to the intended position (see the "
    00118             " preview picture on the right side). </p> "
    00119             " <hr> "
    00120             " <p><em><b>Additional hint for power users:</b> This KDEPrint GUI element matches "
    00121             " with the CUPS commandline job option parameter:</em> "
    00122             " <pre>"
    00123             "     -o page-top=...      # example: \"72\" "
    00124             " <br> "
    00125             "    -o page-bottom=...   # example: \"24\" "
    00126             " <br> "
    00127             "    -o page-left=...     # example: \"36\" "
    00128             " <br> "
    00129             "    -o page-right=...    # example: \"12\" "
    00130             " </pre>"
    00131             " </p> "
    00132             " </qt>" );
    00133
    00134     QString whatsThisPrettyprintButtonOnTextPage = i18n( " <qt> "
    00135             " <p><b>Turn Text Printing with Syntax Highlighting (Prettyprint) On!</b></p> "
    00136             " <p>ASCII text file printouts can be 'prettyfied' by enabling this option. If you do so, "
    00137             " a header is printed at the top of each page. The header contains "
    00138             " the page number, job title (usually the filename), and the date. In addition, C and "
    00139             " C++ keywords are highlighted, and comment lines are italicized.</p>"
    00140             " <p>This prettyprint option is handled by CUPS.</p> "
    00141             " <p>If you prefer another 'plaintext-to-prettyprint' converter, look for the <em>enscript</em> "
    00142             " pre-filter on the <em>Filters</em> tab. </p>"
    00143             " <br> "
    00144             " <hr> "
    00145             " <p><em><b>Additional hint for power users:</b> This KDEPrint GUI element matches "
    00146             " with the CUPS commandline job option parameter:</em> "
    00147             " <pre>"
    00148             "     -o prettyprint=true. "
    00149             " </pre>"
    00150             " </p> "
    00151             " </qt>" );
    00152
    00153     QString whatsThisPrettyprintButtonOffTextPage = i18n( " <qt> "
    00154             " <p><b>Turn Text Printing with Syntax Highlighting (Prettyprint) Off! </b></p> "
    00155             " <p>ASCII text file printing with this option turned off are appearing without a page "
    00156             " header and without syntax highlighting. (You can still set the page margins, though.) </p> "
    00157             " <br> "
    00158             " <hr> "
    00159             " <p><em><b>Additional hint for power users:</b> This KDEPrint GUI element matches "
    00160             " with the CUPS commandline job option parameter:</em> "
    00161             " <pre>"
    00162             "    -o prettyprint=false "
    00163             " </pre>"
    00164             " </p> "
    00165             " </qt>" );
    00166
    00167     QString whatsThisPrettyprintFrameTextPage = i18n( " <qt> "
    00168             " <p><b>Print Text with Syntax Highlighting (Prettyprint)</b></p> "
    00169             " <p>ASCII file printouts can be 'prettyfied' by enabling this option. If you do so, "
    00170             " a header is printed at the top of each page. The header contains "
    00171             " the page number, job title (usually the filename), and the date. In addition, C and "
    00172             " C++ keywords are highlighted, and comment lines are italicized.</p>"
    00173             " <p>This prettyprint option is handled by CUPS.</p> "
    00174             " <p>If you prefer another 'plaintext-to-prettyprint' converter, look for the <em>enscript</em> "
    00175             " pre-filter on the <em>Filters</em> tab. </p> "
    00176             " <br> "
    00177             " <hr> "
    00178             " <p><em><b>Additional hint for power users:</b> This KDEPrint GUI element matches "
    00179             " with the CUPS commandline job option parameter:</em> "
    00180             " <pre>"
    00181             "     -o prettyprint=true. "
    00182             " <br> "
    00183             "    -o prettyprint=false "
    00184             " </pre>"
    00185             " </p> "
    00186             " </qt>" );
    00187
    00188     setTitle(i18n("Text"));
    00189     m_block = false;
    00190
    00191     QGroupBox   *formatbox = new QGroupBox(0, Qt::Vertical, i18n("Text Format"), this);
    00192       QWhatsThis::add(formatbox, whatsThisFormatTextPage);
    00193     QGroupBox   *prettybox = new QGroupBox(0, Qt::Vertical, i18n("Syntax Highlighting"), this);
    00194       QWhatsThis::add(prettybox, whatsThisPrettyprintFrameTextPage);
    00195     QGroupBox   *marginbox = new QGroupBox(0, Qt::Vertical, i18n("Margins"), this);
    00196       QWhatsThis::add(marginbox, whatsThisMarginsTextPage);
    00197
    00198     m_cpi = new KIntNumInput(10, formatbox);
    00199       QWhatsThis::add(m_cpi, whatsThisCPITextPage);
    00200     m_cpi->setLabel(i18n("&Chars per inch:"), Qt::AlignLeft|Qt::AlignVCenter);
    00201     m_cpi->setRange(1, 999, 1, false);
    00202     m_lpi = new KIntNumInput(m_cpi, 6, formatbox);
    00203       QWhatsThis::add(m_lpi, whatsThisLPITextPage);
    00204     m_lpi->setLabel(i18n("&Lines per inch:"), Qt::AlignLeft|Qt::AlignVCenter);
    00205     m_lpi->setRange(1, 999, 1, false);
    00206     m_columns = new KIntNumInput(m_lpi, 1, formatbox);
    00207       QWhatsThis::add(m_columns, whatsThisColumnsTextPage);
    00208     m_columns->setLabel(i18n("C&olumns:"), Qt::AlignLeft|Qt::AlignVCenter);
    00209     m_columns->setRange(1, 10, 1, false);
    00210     KSeparator  *sep = new KSeparator(Qt::Horizontal, formatbox);
    00211     connect(m_columns, SIGNAL(valueChanged(int)), SLOT(slotColumnsChanged(int)));
    00212
    00213     m_prettypix = new QLabel(prettybox);
    00214       QWhatsThis::add(m_prettypix, whatsThisPrettyprintPreviewIconTextPage);
    00215     m_prettypix->setAlignment(Qt::AlignCenter);
    00216     QRadioButton    *off = new QRadioButton(i18n("&Disabled"), prettybox);
    00217       QWhatsThis::add(off, whatsThisPrettyprintButtonOffTextPage);
    00218     QRadioButton    *on = new QRadioButton(i18n("&Enabled"), prettybox);
    00219       QWhatsThis::add(on, whatsThisPrettyprintButtonOnTextPage);
    00220     m_prettyprint = new QButtonGroup(prettybox);
    00221     m_prettyprint->hide();
    00222     m_prettyprint->insert(off, 0);
    00223     m_prettyprint->insert(on, 1);
    00224     m_prettyprint->setButton(0);
    00225     connect(m_prettyprint, SIGNAL(clicked(int)), SLOT(slotPrettyChanged(int)));
    00226     slotPrettyChanged(0);
    00227
    00228     m_margin = new MarginWidget(marginbox);
    00229       QWhatsThis::add(m_margin, whatsThisMarginsTextPage);
    00230     m_margin->setPageSize(595, 842);
    00231
    00232     QGridLayout *l0 = new QGridLayout(this, 2, 2, 0, 10);
    00233     l0->addWidget(formatbox, 0, 0);
    00234     l0->addWidget(prettybox, 0, 1);
    00235     l0->addMultiCellWidget(marginbox, 1, 1, 0, 1);
    00236     QVBoxLayout *l1 = new QVBoxLayout(formatbox->layout(), 5);
    00237     l1->addWidget(m_cpi);
    00238     l1->addWidget(m_lpi);
    00239     l1->addWidget(sep);
    00240     l1->addWidget(m_columns);
    00241     QGridLayout *l2 = new QGridLayout(prettybox->layout(), 2, 2, 10);
    00242     l2->addWidget(off, 0, 0);
    00243     l2->addWidget(on, 1, 0);
    00244     l2->addMultiCellWidget(m_prettypix, 0, 1, 1, 1);
    00245     QVBoxLayout *l3 = new QVBoxLayout(marginbox->layout(), 10);
    00246     l3->addWidget(m_margin);
    00247 }
    00248
    00249 KPTextPage::~KPTextPage()
    00250 {
    00251 }
    00252
    00253 void KPTextPage::setOptions(const QMap<QString,QString>& opts)
    00254 {
    00255     QString value;
    00256
    00257     if (!(value=opts["cpi"]).isEmpty())
    00258         m_cpi->setValue(value.toInt());
    00259     if (!(value=opts["lpi"]).isEmpty())
    00260         m_lpi->setValue(value.toInt());
    00261     if (!(value=opts["columns"]).isEmpty())
    00262         m_columns->setValue(value.toInt());
    00263     int ID(0);
    00264     if (opts.contains("prettyprint") && (opts["prettyprint"].isEmpty() || opts["prettyprint"] == "true"))
    00265         ID = 1;
    00266     m_prettyprint->setButton(ID);
    00267     slotPrettyChanged(ID);
    00268
    00269     // get default margins
    00270     m_currentps = opts["PageSize"];
    00271     QString orient = opts["orientation-requested"];
    00272     bool    landscape = (orient == "4" || orient == "5");
    00273     initPageSize(landscape);
    00274
    00275     bool    marginset(false);
    00276     if (!(value=opts["page-top"]).isEmpty() && value.toFloat() != m_margin->top())
    00277     {
    00278         marginset = true;
    00279         m_margin->setTop(value.toFloat());
    00280     }
    00281     if (!(value=opts["page-bottom"]).isEmpty() && value.toFloat() != m_margin->bottom())
    00282     {
    00283         marginset = true;
    00284         m_margin->setBottom(value.toFloat());
    00285     }
    00286     if (!(value=opts["page-left"]).isEmpty() && value.toFloat() != m_margin->left())
    00287     {
    00288         marginset = true;
    00289         m_margin->setLeft(value.toFloat());
    00290     }
    00291     if (!(value=opts["page-right"]).isEmpty() && value.toFloat() != m_margin->right())
    00292     {
    00293         marginset = true;
    00294         m_margin->setRight(value.toFloat());
    00295     }
    00296     m_margin->setCustomEnabled(marginset);
    00297 }
    00298
    00299 void KPTextPage::getOptions(QMap<QString,QString>& opts, bool incldef)
    00300 {
    00301     if (incldef || m_cpi->value() != 10)
    00302         opts["cpi"] = QString::number(m_cpi->value());
    00303     if (incldef || m_lpi->value() != 6)
    00304         opts["lpi"] = QString::number(m_lpi->value());
    00305     if (incldef || m_columns->value() != 1)
    00306         opts["columns"] = QString::number(m_columns->value());
    00307
    00308     //if (m_margin->isCustomEnabled() || incldef)
    00309     if (m_margin->isCustomEnabled())
    00310     {
    00311         opts["page-top"] = QString::number(( int )( m_margin->top()+0.5 ));
    00312         opts["page-bottom"] = QString::number(( int )( m_margin->bottom()+0.5 ));
    00313         opts["page-left"] = QString::number(( int )( m_margin->left()+0.5 ));
    00314         opts["page-right"] = QString::number(( int )( m_margin->right()+0.5 ));
    00315     }
    00316     else
    00317     {
    00318         opts.remove("page-top");
    00319         opts.remove("page-bottom");
    00320         opts.remove("page-left");
    00321         opts.remove("page-right");
    00322     }
    00323
    00324     if (m_prettyprint->id(m_prettyprint->selected()) == 1)
    00325         opts["prettyprint"] = "true";
    00326     else if (incldef)
    00327         opts["prettyprint"] = "false";
    00328     else
    00329         opts.remove("prettyprint");
    00330 }
    00331
    00332 void KPTextPage::slotPrettyChanged(int ID)
    00333 {
    00334     QString iconstr = (ID == 0 ? "kdeprint_nup1" : "kdeprint_prettyprint");
    00335     m_prettypix->setPixmap(UserIcon(iconstr));
    00336 }
    00337
    00338 void KPTextPage::slotColumnsChanged(int)
    00339 {
    00340     // TO BE IMPLEMENTED
    00341 }
    00342
    00343 void KPTextPage::initPageSize(bool landscape)
    00344 {
    00345     float w( -1 ), h( -1 );
    00346     float mt( 36 ), mb( mt ), ml( 18 ), mr( ml );
    00347     if (driver())
    00348     {
    00349         if (m_currentps.isEmpty())
    00350         {
    00351             DrListOption    *o = (DrListOption*)driver()->findOption("PageSize");
    00352             if (o)
    00353                 m_currentps = o->get("default");
    00354         }
    00355         if (!m_currentps.isEmpty())
    00356         {
    00357             DrPageSize  *ps = driver()->findPageSize(m_currentps);
    00358             if (ps)
    00359             {
    00360                 w = ps->pageWidth();
    00361                 h = ps->pageHeight();
    00362                 mt = ps->topMargin();
    00363                 ml = ps->leftMargin();
    00364                 mr = ps->rightMargin();
    00365                 mb = ps->bottomMargin();
    00366             }
    00367         }
    00368     }
    00369     m_margin->setPageSize(w, h);
    00370     m_margin->setOrientation(landscape ? KPrinter::Landscape : KPrinter::Portrait);
    00371     m_margin->setDefaultMargins( mt, mb, ml, mr );
    00372     m_margin->setCustomEnabled(false);
    00373 }
    00374
    00375 #include "kptextpage.moc"

This file is part of the documentation for kdeprint Library Version 3.4.1.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Sat Jun 11 20:31:04 2005 by doxygen 1.4.1 written by Dimitri van Heesch, © 1997-2003