00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
#include <config.h>
00021
00022
#include "kmwquota.h"
00023
#include "kmwizard.h"
00024
#include "kmprinter.h"
00025
00026
#include <qspinbox.h>
00027
#include <qlabel.h>
00028
#include <qcombobox.h>
00029
#include <qlayout.h>
00030
#include <klocale.h>
00031
00032
#ifdef HAVE_LIMITS_H
00033
#include <limits.h>
00034
#endif
00035
00036
#define N_TIME_LIMITS 6
00037
static int time_periods[] = {
00038 1,
00039 60,
00040 3600,
00041 86400,
00042 604800,
00043 2592000
00044 };
00045
static const char* time_keywords[] = {
00046 I18N_NOOP(
"second(s)"),
00047 I18N_NOOP(
"minute(s)"),
00048 I18N_NOOP(
"hour(s)"),
00049 I18N_NOOP(
"day(s)"),
00050 I18N_NOOP(
"week(s)"),
00051 I18N_NOOP(
"month(s)")
00052 };
00053
00054
int findUnit(
int& period)
00055 {
00056
int unit(0);
00057
for (
int i=N_TIME_LIMITS-1;i>=0;i--)
00058 {
00059
if (period < time_periods[i])
00060
continue;
00061
int d = period / time_periods[i];
00062
if ((d*time_periods[i]) == period)
00063 {
00064 unit = i;
00065
break;
00066 }
00067 }
00068 period /= time_periods[unit];
00069
return unit;
00070 }
00071
00072
const char* unitKeyword(
int i)
00073 {
return time_keywords[i]; }
00074
00075 KMWQuota::KMWQuota(
QWidget *parent,
const char *name)
00076 : KMWizardPage(parent, name)
00077 {
00078 m_ID = KMWizard::Custom+3;
00079 m_title = i18n(
"Printer Quota Settings");
00080 m_nextpage = KMWizard::Custom+4;
00081
00082 m_period =
new QSpinBox(
this);
00083 m_period->setRange(-1, INT_MAX);
00084 m_period->setSpecialValueText(i18n(
"No quota"));
00085 m_sizelimit =
new QSpinBox(
this);
00086 m_sizelimit->setRange(0, INT_MAX);
00087 m_sizelimit->setSpecialValueText(i18n(
"None"));
00088 m_pagelimit =
new QSpinBox(
this);
00089 m_pagelimit->setRange(0, INT_MAX);
00090 m_pagelimit->setSpecialValueText(i18n(
"None"));
00091 m_timeunit =
new QComboBox(
this);
00092
for (
int i=0;i<N_TIME_LIMITS;i++)
00093 m_timeunit->insertItem(i18n(time_keywords[i]));
00094 m_timeunit->setCurrentItem(3);
00095
00096
QLabel *lab1 =
new QLabel(i18n(
"&Period:"),
this);
00097 QLabel *lab2 =
new QLabel(i18n(
"&Size limit (KB):"),
this);
00098 QLabel *lab3 =
new QLabel(i18n(
"&Page limit:"),
this);
00099
00100 lab1->setBuddy(m_period);
00101 lab2->setBuddy(m_sizelimit);
00102 lab3->setBuddy(m_pagelimit);
00103
00104 QLabel *lab4 =
new QLabel(i18n(
"<p>Set here the quota for this printer. Using limits of <b>0</b> means "
00105
"that no quota will be used. This is equivalent to set quota period to "
00106
"<b><nobr>No quota</nobr></b> (-1). Quota limits are defined on a per-user base and "
00107
"applied to all users.</p>"),
this);
00108
00109
QGridLayout *l0 =
new QGridLayout(
this, 5, 3, 0, 10);
00110 l0->setRowStretch(4, 1);
00111 l0->setColStretch(1, 1);
00112 l0->addMultiCellWidget(lab4, 0, 0, 0, 2);
00113 l0->addWidget(lab1, 1, 0);
00114 l0->addWidget(lab2, 2, 0);
00115 l0->addWidget(lab3, 3, 0);
00116 l0->addWidget(m_period, 1, 1);
00117 l0->addWidget(m_timeunit, 1, 2);
00118 l0->addMultiCellWidget(m_sizelimit, 2, 2, 1, 2);
00119 l0->addMultiCellWidget(m_pagelimit, 3, 3, 1, 2);
00120 }
00121
00122 KMWQuota::~KMWQuota()
00123 {
00124 }
00125
00126
bool KMWQuota::isValid(
QString& msg)
00127 {
00128
if (m_period->value() >= 0 && m_sizelimit->value() == 0 && m_pagelimit->value() == 0)
00129 {
00130 msg = i18n(
"You must specify at least one quota limit.");
00131
return false;
00132 }
00133
return true;
00134 }
00135
00136
void KMWQuota::initPrinter(KMPrinter *p)
00137 {
00138
int qu(-1), si(0), pa(0), un(3);
00139 qu = p->option(
"job-quota-period").toInt();
00140 si = p->option(
"job-k-limit").toInt();
00141 pa = p->option(
"job-page-limit").toInt();
00142
if (si == 0 && pa == 0)
00143
00144 qu = -1;
00145 m_sizelimit->setValue(si);
00146 m_pagelimit->setValue(pa);
00147
if (qu > 0)
00148 {
00149 un = findUnit(qu);
00150 }
00151 m_timeunit->setCurrentItem(un);
00152 m_period->setValue(qu);
00153 }
00154
00155
void KMWQuota::updatePrinter(KMPrinter *p)
00156 {
00157
int qu(m_period->value()), si(m_sizelimit->value()), pa(m_pagelimit->value());
00158
if (qu == -1)
00159 {
00160
00161 si = 0;
00162 pa = 0;
00163 qu = 0;
00164 }
00165 qu *= time_periods[m_timeunit->currentItem()];
00166
00167 p->setOption(
"job-quota-period", QString::number(qu));
00168 p->setOption(
"job-k-limit", QString::number(si));
00169 p->setOption(
"job-page-limit", QString::number(pa));
00170 }
00171
#include "kmwquota.moc"