summaryrefslogtreecommitdiffstats
path: root/tdeprint/cups/kptextpage.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tdeprint/cups/kptextpage.cpp')
-rw-r--r--tdeprint/cups/kptextpage.cpp375
1 files changed, 375 insertions, 0 deletions
diff --git a/tdeprint/cups/kptextpage.cpp b/tdeprint/cups/kptextpage.cpp
new file mode 100644
index 000000000..0bee387c6
--- /dev/null
+++ b/tdeprint/cups/kptextpage.cpp
@@ -0,0 +1,375 @@
+/*
+ * 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 "kptextpage.h"
+#include "marginwidget.h"
+#include "driver.h"
+#include "kprinter.h"
+
+#include <tqbuttongroup.h>
+#include <tqgroupbox.h>
+#include <tqlayout.h>
+#include <tqlabel.h>
+#include <tqradiobutton.h>
+#include <tqwhatsthis.h>
+#include <knuminput.h>
+#include <klocale.h>
+#include <kiconloader.h>
+#include <kseparator.h>
+#include <kdebug.h>
+
+KPTextPage::KPTextPage(DrMain *driver, TQWidget *parent, const char *name)
+: KPrintDialogPage(0, driver, parent, name)
+{
+ //WhatsThis strings.... (added by pfeifle@kde.org)
+ TQString whatsThisCPITextPage = i18n( " <qt> "
+ " <p><b>Characters Per Inch</b></p> "
+ " <p>This setting controls the horizontal size of characters when printing a text file. </p>"
+ " <p>The default value is 10, meaning that the font is scaled in a way that 10 characters "
+ " per inch will be printed. </p> "
+ " <hr> "
+ " <p><em><b>Additional hint for power users:</b> This KDEPrint GUI element matches "
+ " with the CUPS commandline job option parameter:</em> "
+ " <pre>"
+ " -o cpi=... # example: \"8\" or \"12\" "
+ " </pre>"
+ " </p> "
+ " </qt>" );
+
+ TQString whatsThisLPITextPage = i18n( " <qt> "
+ " <p><b>Lines Per Inch</b></p> "
+ " <p>This setting controls the vertical size of characters when printing a text file. </p>"
+ " <p>The default value is 6, meaning that the font is scaled in a way that 6 lines "
+ " per inch will be printed. </p> "
+ " <hr> "
+ " <p><em><b>Additional hint for power users:</b> This KDEPrint GUI element matches "
+ " with the CUPS commandline job option parameter:</em> "
+ " <pre>"
+ " -o lpi=... # example \"5\" or \"7\" "
+ " </pre>"
+ " </p> "
+ " </qt>" );
+
+ TQString whatsThisColumnsTextPage = i18n( " <qt> "
+ " <p><b>Columns</b></p> "
+ " <p>This setting controls how many columns of text will be printed on each page when."
+ " printing text files. </p> "
+ " <p>The default value is 1, meaning that only one column of text per page "
+ " will be printed. </p> "
+ " <hr> "
+ " <p><em><b>Additional hint for power users:</b> This KDEPrint GUI element matches "
+ " with the CUPS commandline job option parameter:</em> "
+ " <pre>"
+ " -o columns=... # example: \"2\" or \"4\" "
+ " </pre>"
+ " </p> "
+ " </qt>" );
+
+ TQString whatsThisPrettyprintPreviewIconTextPage = i18n( " <qt> "
+ " Preview icon changes when you turn on or off prettyprint. "
+ " </qt>" );
+ TQString whatsThisFormatTextPage = i18n( " <qt> "
+ " <p><b>Text Formats</b></p> "
+ " <p>These settings control the appearance of text on printouts. They are only valid for "
+ " printing text files or input directly through kprinter. </p> "
+ " <p><b>Note:</b> These settings have no effect whatsoever for other input formats than "
+ " text, or for printing from applications such as the KDE Advanced Text Editor. (Applications "
+ " in general send PostScript to the print system, and 'kate' in particular has its own "
+ " knobs to control the print output. </p>."
+ " <hr> "
+ " <p><em><b>Additional hint for power users:</b> This KDEPrint GUI element matches "
+ " with the CUPS commandline job option parameter:</em> "
+ " <pre>"
+ " -o cpi=... # example: \"8\" or \"12\" "
+ " <br> "
+ " -o lpi=... # example: \"5\" or \"7\" "
+ " <br> "
+ " -o columns=... # example: \"2\" or \"4\" "
+ " </pre>"
+ " </p> "
+ " </qt>" );
+
+ TQString whatsThisMarginsTextPage = i18n( " <qt> "
+ " <p><b>Margins</b></p> "
+ " <p>These settings control the margins of printouts on the paper. They are not valid for "
+ " jobs originating from applications which define their own page layout internally and "
+ " send PostScript to KDEPrint (such as KOffice or OpenOffice.org). </p> "
+ " <p>When printing from KDE applications, such as KMail and Konqueror, or printing an ASCII text "
+ " file through kprinter, you can choose your preferred margin settings here. </p> "
+ " <p>Margins may be set individually for each edge of the paper. The combo box at the bottom lets you change "
+ " the units of measurement between Pixels, Millimeters, Centimeters, and Inches. </p> "
+ " <p>You can even use the mouse to grab one margin and drag it to the intended position (see the "
+ " preview picture on the right side). </p> "
+ " <hr> "
+ " <p><em><b>Additional hint for power users:</b> This KDEPrint GUI element matches "
+ " with the CUPS commandline job option parameter:</em> "
+ " <pre>"
+ " -o page-top=... # example: \"72\" "
+ " <br> "
+ " -o page-bottom=... # example: \"24\" "
+ " <br> "
+ " -o page-left=... # example: \"36\" "
+ " <br> "
+ " -o page-right=... # example: \"12\" "
+ " </pre>"
+ " </p> "
+ " </qt>" );
+
+ TQString whatsThisPrettyprintButtonOnTextPage = i18n( " <qt> "
+ " <p><b>Turn Text Printing with Syntax Highlighting (Prettyprint) On!</b></p> "
+ " <p>ASCII text file printouts can be 'prettyfied' by enabling this option. If you do so, "
+ " a header is printed at the top of each page. The header contains "
+ " the page number, job title (usually the filename), and the date. In addition, C and "
+ " C++ keywords are highlighted, and comment lines are italicized.</p>"
+ " <p>This prettyprint option is handled by CUPS.</p> "
+ " <p>If you prefer another 'plaintext-to-prettyprint' converter, look for the <em>enscript</em> "
+ " pre-filter on the <em>Filters</em> tab. </p>"
+ " <br> "
+ " <hr> "
+ " <p><em><b>Additional hint for power users:</b> This KDEPrint GUI element matches "
+ " with the CUPS commandline job option parameter:</em> "
+ " <pre>"
+ " -o prettyprint=true. "
+ " </pre>"
+ " </p> "
+ " </qt>" );
+
+ TQString whatsThisPrettyprintButtonOffTextPage = i18n( " <qt> "
+ " <p><b>Turn Text Printing with Syntax Highlighting (Prettyprint) Off! </b></p> "
+ " <p>ASCII text file printing with this option turned off are appearing without a page "
+ " header and without syntax highlighting. (You can still set the page margins, though.) </p> "
+ " <br> "
+ " <hr> "
+ " <p><em><b>Additional hint for power users:</b> This KDEPrint GUI element matches "
+ " with the CUPS commandline job option parameter:</em> "
+ " <pre>"
+ " -o prettyprint=false "
+ " </pre>"
+ " </p> "
+ " </qt>" );
+
+ TQString whatsThisPrettyprintFrameTextPage = i18n( " <qt> "
+ " <p><b>Print Text with Syntax Highlighting (Prettyprint)</b></p> "
+ " <p>ASCII file printouts can be 'prettyfied' by enabling this option. If you do so, "
+ " a header is printed at the top of each page. The header contains "
+ " the page number, job title (usually the filename), and the date. In addition, C and "
+ " C++ keywords are highlighted, and comment lines are italicized.</p>"
+ " <p>This prettyprint option is handled by CUPS.</p> "
+ " <p>If you prefer another 'plaintext-to-prettyprint' converter, look for the <em>enscript</em> "
+ " pre-filter on the <em>Filters</em> tab. </p> "
+ " <br> "
+ " <hr> "
+ " <p><em><b>Additional hint for power users:</b> This KDEPrint GUI element matches "
+ " with the CUPS commandline job option parameter:</em> "
+ " <pre>"
+ " -o prettyprint=true. "
+ " <br> "
+ " -o prettyprint=false "
+ " </pre>"
+ " </p> "
+ " </qt>" );
+
+ setTitle(i18n("Text"));
+ m_block = false;
+
+ TQGroupBox *formatbox = new TQGroupBox(0, Qt::Vertical, i18n("Text Format"), this);
+ TQWhatsThis::add(formatbox, whatsThisFormatTextPage);
+ TQGroupBox *prettybox = new TQGroupBox(0, Qt::Vertical, i18n("Syntax Highlighting"), this);
+ TQWhatsThis::add(prettybox, whatsThisPrettyprintFrameTextPage);
+ TQGroupBox *marginbox = new TQGroupBox(0, Qt::Vertical, i18n("Margins"), this);
+ TQWhatsThis::add(marginbox, whatsThisMarginsTextPage);
+
+ m_cpi = new KIntNumInput(10, formatbox);
+ TQWhatsThis::add(m_cpi, whatsThisCPITextPage);
+ m_cpi->setLabel(i18n("&Chars per inch:"), Qt::AlignLeft|Qt::AlignVCenter);
+ m_cpi->setRange(1, 999, 1, false);
+ m_lpi = new KIntNumInput(m_cpi, 6, formatbox);
+ TQWhatsThis::add(m_lpi, whatsThisLPITextPage);
+ m_lpi->setLabel(i18n("&Lines per inch:"), Qt::AlignLeft|Qt::AlignVCenter);
+ m_lpi->setRange(1, 999, 1, false);
+ m_columns = new KIntNumInput(m_lpi, 1, formatbox);
+ TQWhatsThis::add(m_columns, whatsThisColumnsTextPage);
+ m_columns->setLabel(i18n("C&olumns:"), Qt::AlignLeft|Qt::AlignVCenter);
+ m_columns->setRange(1, 10, 1, false);
+ KSeparator *sep = new KSeparator(Qt::Horizontal, formatbox);
+ connect(m_columns, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(slotColumnsChanged(int)));
+
+ m_prettypix = new TQLabel(prettybox);
+ TQWhatsThis::add(m_prettypix, whatsThisPrettyprintPreviewIconTextPage);
+ m_prettypix->tqsetAlignment(Qt::AlignCenter);
+ TQRadioButton *off = new TQRadioButton(i18n("&Disabled"), prettybox);
+ TQWhatsThis::add(off, whatsThisPrettyprintButtonOffTextPage);
+ TQRadioButton *on = new TQRadioButton(i18n("&Enabled"), prettybox);
+ TQWhatsThis::add(on, whatsThisPrettyprintButtonOnTextPage);
+ m_prettyprint = new TQButtonGroup(prettybox);
+ m_prettyprint->hide();
+ m_prettyprint->insert(off, 0);
+ m_prettyprint->insert(on, 1);
+ m_prettyprint->setButton(0);
+ connect(m_prettyprint, TQT_SIGNAL(clicked(int)), TQT_SLOT(slotPrettyChanged(int)));
+ slotPrettyChanged(0);
+
+ m_margin = new MarginWidget(marginbox);
+ TQWhatsThis::add(m_margin, whatsThisMarginsTextPage);
+ m_margin->setPageSize(595, 842);
+
+ TQGridLayout *l0 = new TQGridLayout(this, 2, 2, 0, 10);
+ l0->addWidget(formatbox, 0, 0);
+ l0->addWidget(prettybox, 0, 1);
+ l0->addMultiCellWidget(marginbox, 1, 1, 0, 1);
+ TQVBoxLayout *l1 = new TQVBoxLayout(TQT_TQLAYOUT(formatbox->layout()), 5);
+ l1->addWidget(m_cpi);
+ l1->addWidget(m_lpi);
+ l1->addWidget(sep);
+ l1->addWidget(m_columns);
+ TQGridLayout *l2 = new TQGridLayout(TQT_TQLAYOUT(prettybox->layout()), 2, 2, 10);
+ l2->addWidget(off, 0, 0);
+ l2->addWidget(on, 1, 0);
+ l2->addMultiCellWidget(m_prettypix, 0, 1, 1, 1);
+ TQVBoxLayout *l3 = new TQVBoxLayout(TQT_TQLAYOUT(marginbox->layout()), 10);
+ l3->addWidget(m_margin);
+}
+
+KPTextPage::~KPTextPage()
+{
+}
+
+void KPTextPage::setOptions(const TQMap<TQString,TQString>& opts)
+{
+ TQString value;
+
+ if (!(value=opts["cpi"]).isEmpty())
+ m_cpi->setValue(value.toInt());
+ if (!(value=opts["lpi"]).isEmpty())
+ m_lpi->setValue(value.toInt());
+ if (!(value=opts["columns"]).isEmpty())
+ m_columns->setValue(value.toInt());
+ int ID(0);
+ if (opts.contains("prettyprint") && (opts["prettyprint"].isEmpty() || opts["prettyprint"] == "true"))
+ ID = 1;
+ m_prettyprint->setButton(ID);
+ slotPrettyChanged(ID);
+
+ // get default margins
+ m_currentps = opts["PageSize"];
+ TQString orient = opts["orientation-requested"];
+ bool landscape = (orient == "4" || orient == "5");
+ initPageSize(landscape);
+
+ bool marginset(false);
+ if (!(value=opts["page-top"]).isEmpty() && value.toFloat() != m_margin->top())
+ {
+ marginset = true;
+ m_margin->setTop(value.toFloat());
+ }
+ if (!(value=opts["page-bottom"]).isEmpty() && value.toFloat() != m_margin->bottom())
+ {
+ marginset = true;
+ m_margin->setBottom(value.toFloat());
+ }
+ if (!(value=opts["page-left"]).isEmpty() && value.toFloat() != m_margin->left())
+ {
+ marginset = true;
+ m_margin->setLeft(value.toFloat());
+ }
+ if (!(value=opts["page-right"]).isEmpty() && value.toFloat() != m_margin->right())
+ {
+ marginset = true;
+ m_margin->setRight(value.toFloat());
+ }
+ m_margin->setCustomEnabled(marginset);
+}
+
+void KPTextPage::getOptions(TQMap<TQString,TQString>& opts, bool incldef)
+{
+ if (incldef || m_cpi->value() != 10)
+ opts["cpi"] = TQString::number(m_cpi->value());
+ if (incldef || m_lpi->value() != 6)
+ opts["lpi"] = TQString::number(m_lpi->value());
+ if (incldef || m_columns->value() != 1)
+ opts["columns"] = TQString::number(m_columns->value());
+
+ //if (m_margin->isCustomEnabled() || incldef)
+ if (m_margin->isCustomEnabled())
+ {
+ opts["page-top"] = TQString::number(( int )( m_margin->top()+0.5 ));
+ opts["page-bottom"] = TQString::number(( int )( m_margin->bottom()+0.5 ));
+ opts["page-left"] = TQString::number(( int )( m_margin->left()+0.5 ));
+ opts["page-right"] = TQString::number(( int )( m_margin->right()+0.5 ));
+ }
+ else
+ {
+ opts.remove("page-top");
+ opts.remove("page-bottom");
+ opts.remove("page-left");
+ opts.remove("page-right");
+ }
+
+ if (m_prettyprint->id(m_prettyprint->selected()) == 1)
+ opts["prettyprint"] = "true";
+ else if (incldef)
+ opts["prettyprint"] = "false";
+ else
+ opts.remove("prettyprint");
+}
+
+void KPTextPage::slotPrettyChanged(int ID)
+{
+ TQString iconstr = (ID == 0 ? "tdeprint_nup1" : "tdeprint_prettyprint");
+ m_prettypix->setPixmap(UserIcon(iconstr));
+}
+
+void KPTextPage::slotColumnsChanged(int)
+{
+ // TO BE IMPLEMENTED
+}
+
+void KPTextPage::initPageSize(bool landscape)
+{
+ float w( -1 ), h( -1 );
+ float mt( 36 ), mb( mt ), ml( 18 ), mr( ml );
+ if (driver())
+ {
+ if (m_currentps.isEmpty())
+ {
+ DrListOption *o = (DrListOption*)driver()->findOption("PageSize");
+ if (o)
+ m_currentps = o->get("default");
+ }
+ if (!m_currentps.isEmpty())
+ {
+ DrPageSize *ps = driver()->findPageSize(m_currentps);
+ if (ps)
+ {
+ w = ps->pageWidth();
+ h = ps->pageHeight();
+ mt = ps->topMargin();
+ ml = ps->leftMargin();
+ mr = ps->rightMargin();
+ mb = ps->bottomMargin();
+ }
+ }
+ }
+ m_margin->setPageSize(w, h);
+ m_margin->setOrientation(landscape ? KPrinter::Landscape : KPrinter::Portrait);
+ m_margin->setDefaultMargins( mt, mb, ml, mr );
+ m_margin->setCustomEnabled(false);
+}
+
+#include "kptextpage.moc"