summaryrefslogtreecommitdiffstats
path: root/kdeprint/cups/kpschedulepage.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kdeprint/cups/kpschedulepage.cpp')
-rw-r--r--kdeprint/cups/kpschedulepage.cpp282
1 files changed, 282 insertions, 0 deletions
diff --git a/kdeprint/cups/kpschedulepage.cpp b/kdeprint/cups/kpschedulepage.cpp
new file mode 100644
index 000000000..a698b1d51
--- /dev/null
+++ b/kdeprint/cups/kpschedulepage.cpp
@@ -0,0 +1,282 @@
+/*
+ * This file is part of the KDE libraries
+ * Copyright (c) 2001 Michael Goffioul <kdeprint@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 "kpschedulepage.h"
+
+#include <qlabel.h>
+#include <qlayout.h>
+#include <qcombobox.h>
+#include <qregexp.h>
+#include <qdatetimeedit.h>
+#include <qdatetime.h>
+#include <qlineedit.h>
+#include <qwhatsthis.h>
+#include <klocale.h>
+#include <kseparator.h>
+#include <knuminput.h>
+
+#include <time.h>
+
+KPSchedulePage::KPSchedulePage(QWidget *parent, const char *name)
+: KPrintDialogPage(parent, name)
+{
+ //WhatsThis strings.... (added by pfeifle@kde.org)
+ QString whatsThisBillingInfo = i18n( " <qt> <p><b>Print Job Billing and Accounting</b></p> "
+ " <p>Insert a meaningful string here to associate"
+ " the current print job with a certain account. This"
+ " string will appear in the CUPS \"page_log\" to help"
+ " with the print accounting in your organization. (Leave"
+ " it empty if you do not need it.)"
+ " <p> It is useful for people"
+ " who print on behalf of different \"customers\", like"
+ " print service bureaux, letter shops, press and prepress"
+ " companies, or secretaries who serve different bosses, etc.</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 job-billing=... # example: \"Marketing_Department\" or \"Joe_Doe\" "
+ " </pre>"
+ " </p> "
+ " </qt>" );
+
+ QString whatsThisScheduledPrinting = i18n(" <qt> <p><b>Scheduled Printing</b></p> "
+ " <p>Scheduled printing lets you control the time"
+ " of the actual printout, while you can still send away your"
+ " job <b>now</b> and have it out of your way."
+ " <p> Especially useful"
+ " is the \"Never (hold indefinitely)\" option. It allows you"
+ " to park your job until a time when you (or a printer administrator)"
+ " decides to manually release it."
+ " <p> This is often required in"
+ " enterprise environments, where you normally are not"
+ " allowed to directly and immediately access the huge production"
+ " printers in your <em>Central Repro Department</em>. However it"
+ " is okay to send jobs to the queue which is under the control of the"
+ " operators (who, after all, need to make sure that the 10,000"
+ " sheets of pink paper which is required by the Marketing"
+ " Department for a particular job are available and loaded"
+ " into the paper trays).</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 job-hold-until=... # example: \"indefinite\" or \"no-hold\" "
+ " </pre>"
+ " </p> "
+ " </qt>" );
+
+ QString whatsThisPageLabel = i18n( " <qt> <p><b>Page Labels</b></p> "
+ " <p>Page Labels are printed by CUPS at the top and bottom"
+ " of each page. They appear on the pages surrounded by a little"
+ " frame box."
+ " <p>They contain any string you type into the line edit field.</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 page-label=\"...\" # example: \"Company Confidential\" "
+ " </pre>"
+ " </p> "
+ " </qt>" );
+
+ QString whatsThisJobPriority = i18n( " <qt> <p><b>Job Priority</b></p> "
+ " <p>Usually CUPS prints all jobs per queue according to"
+ " the \"FIFO\" principle: <em>First In, First Out</em>."
+ " <p> The"
+ " job priority option allows you to re-order the queue according"
+ " to your needs."
+ " <p> It works in both directions: you can increase"
+ " as well as decrease priorities. (Usually you can only control"
+ " your <b>own</b> jobs)."
+ " <p> Since the default job priority is \"50\", any job sent"
+ " with, for example, \"49\" will be printed only after all those"
+ " others have finished. Conversely, a"
+ " \"51\" or higher priority job will go right to the top of"
+ " a populated queue (if no other, higher prioritized one is present).</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 job-priority=... # example: \"10\" or \"66\" or \"99\" "
+ " </pre>"
+ " </p> "
+ " </qt>" );
+
+ setTitle(i18n("Advanced Options"));
+ setOnlyRealPrinters(true);
+
+ // compute difference in hours between GMT and local time
+ time_t ct = time(0);
+ struct tm *ts = gmtime(&ct);
+ m_gmtdiff = ts->tm_hour;
+ ts = localtime(&ct);
+ m_gmtdiff -= ts->tm_hour;
+
+ m_time = new QComboBox(this);
+ m_time->insertItem(i18n("Immediately"));
+ m_time->insertItem(i18n("Never (hold indefinitely)"));
+ m_time->insertItem(i18n("Daytime (6 am - 6 pm)"));
+ m_time->insertItem(i18n("Evening (6 pm - 6 am)"));
+ m_time->insertItem(i18n("Night (6 pm - 6 am)"));
+ m_time->insertItem(i18n("Weekend"));
+ m_time->insertItem(i18n("Second Shift (4 pm - 12 am)"));
+ m_time->insertItem(i18n("Third Shift (12 am - 8 am)"));
+ m_time->insertItem(i18n("Specified Time"));
+ QWhatsThis::add(m_time, whatsThisScheduledPrinting);
+ m_tedit = new QTimeEdit(this);
+ m_tedit->setAutoAdvance(true);
+ m_tedit->setTime(QTime::currentTime());
+ m_tedit->setEnabled(false);
+ QWhatsThis::add(m_tedit, whatsThisScheduledPrinting);
+ m_billing = new QLineEdit(this);
+ QWhatsThis::add(m_billing, whatsThisBillingInfo);
+ m_pagelabel = new QLineEdit(this);
+ QWhatsThis::add(m_pagelabel, whatsThisPageLabel);
+ m_priority = new KIntNumInput(50, this);
+ QWhatsThis::add(m_priority, whatsThisJobPriority);
+ m_priority->setRange(1, 100, 10, true);
+
+ QLabel *lab = new QLabel(i18n("&Scheduled printing:"), this);
+ lab->setBuddy(m_time);
+ QWhatsThis::add(lab, whatsThisScheduledPrinting);
+ QLabel *lab1 = new QLabel(i18n("&Billing information:"), this);
+ QWhatsThis::add(lab1, whatsThisBillingInfo);
+ lab1->setBuddy(m_billing);
+ QLabel *lab2 = new QLabel(i18n("T&op/Bottom page label:"), this);
+ QWhatsThis::add(lab2, whatsThisPageLabel);
+ lab2->setBuddy(m_pagelabel);
+ m_priority->setLabel(i18n("&Job priority:"), Qt::AlignVCenter|Qt::AlignLeft);
+ QWhatsThis::add(m_priority, whatsThisJobPriority);
+
+ KSeparator *sep0 = new KSeparator(this);
+ sep0->setFixedHeight(10);
+
+ QGridLayout *l0 = new QGridLayout(this, 6, 2, 0, 7);
+ l0->addWidget(lab, 0, 0);
+ QHBoxLayout *l1 = new QHBoxLayout(0, 0, 5);
+ l0->addLayout(l1, 0, 1);
+ l1->addWidget(m_time);
+ l1->addWidget(m_tedit);
+ l0->addWidget(lab1, 1, 0);
+ l0->addWidget(lab2, 2, 0);
+ l0->addWidget(m_billing, 1, 1);
+ l0->addWidget(m_pagelabel, 2, 1);
+ l0->addMultiCellWidget(sep0, 3, 3, 0, 1);
+ l0->addMultiCellWidget(m_priority, 4, 4, 0, 1);
+ l0->setRowStretch(5, 1);
+
+ connect(m_time, SIGNAL(activated(int)), SLOT(slotTimeChanged()));
+}
+
+KPSchedulePage::~KPSchedulePage()
+{
+}
+
+bool KPSchedulePage::isValid(QString& msg)
+{
+ if (m_time->currentItem() == 8 && !m_tedit->time().isValid())
+ {
+ msg = i18n("The time specified is not valid.");
+ return false;
+ }
+ return true;
+}
+
+void KPSchedulePage::setOptions(const QMap<QString,QString>& opts)
+{
+ QString t = opts["job-hold-until"];
+ if (!t.isEmpty())
+ {
+ int item(-1);
+
+ if (t == "no-hold") item = 0;
+ else if (t == "indefinite") item = 1;
+ else if (t == "day-time") item = 2;
+ else if (t == "evening") item = 3;
+ else if (t == "night") item = 4;
+ else if (t == "weekend") item = 5;
+ else if (t == "second-shift") item = 6;
+ else if (t == "third-shift") item = 7;
+ else
+ {
+ QTime qt = QTime::fromString(t);
+ m_tedit->setTime(qt.addSecs(-3600 * m_gmtdiff));
+ item = 8;
+ }
+
+ if (item != -1)
+ {
+ m_time->setCurrentItem(item);
+ slotTimeChanged();
+ }
+ }
+ QRegExp re("^\"|\"$");
+ t = opts["job-billing"].stripWhiteSpace();
+ t.replace(re, "");
+ m_billing->setText(t);
+ t = opts["page-label"].stripWhiteSpace();
+ t.replace(re, "");
+ m_pagelabel->setText(t);
+ int val = opts["job-priority"].toInt();
+ if (val != 0)
+ m_priority->setValue(val);
+}
+
+void KPSchedulePage::getOptions(QMap<QString,QString>& opts, bool incldef)
+{
+ if (incldef || m_time->currentItem() != 0)
+ {
+ QString t;
+ switch (m_time->currentItem())
+ {
+ case 0: t = "no-hold"; break;
+ case 1: t = "indefinite"; break;
+ case 2: t = "day-time"; break;
+ case 3: t = "evening"; break;
+ case 4: t = "night"; break;
+ case 5: t = "weekend"; break;
+ case 6: t = "second-shift"; break;
+ case 7: t = "third-shift"; break;
+ case 8:
+ t = m_tedit->time().addSecs(3600 * m_gmtdiff).toString();
+ break;
+ }
+ opts["job-hold-until"] = t;
+ }
+ if (incldef || !m_billing->text().isEmpty())
+ opts["job-billing"] = "\"" + m_billing->text() + "\"";
+ if (incldef || !m_pagelabel->text().isEmpty())
+ opts["page-label"] = "\"" + m_pagelabel->text() + "\"";
+ if (incldef || m_priority->value() != 50)
+ opts["job-priority"] = QString::number(m_priority->value());
+}
+
+void KPSchedulePage::slotTimeChanged()
+{
+ m_tedit->setEnabled(m_time->currentItem() == 8);
+ if (m_time->currentItem() == 8)
+ m_tedit->setFocus();
+}
+
+#include "kpschedulepage.moc"