diff options
Diffstat (limited to 'kdeprint/cups/cupsdconf2/cupsdsecuritypage.cpp')
-rw-r--r-- | kdeprint/cups/cupsdconf2/cupsdsecuritypage.cpp | 168 |
1 files changed, 168 insertions, 0 deletions
diff --git a/kdeprint/cups/cupsdconf2/cupsdsecuritypage.cpp b/kdeprint/cups/cupsdconf2/cupsdsecuritypage.cpp new file mode 100644 index 000000000..a77f21708 --- /dev/null +++ b/kdeprint/cups/cupsdconf2/cupsdsecuritypage.cpp @@ -0,0 +1,168 @@ +/* + * 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 "cupsdsecuritypage.h" +#include "cupsdconf.h" +#include "qdirlineedit.h" +#include "editlist.h" +#include "locationdialog.h" + +#include <qlabel.h> +#include <qlineedit.h> +#include <qlayout.h> +#include <qwhatsthis.h> + +#include <klocale.h> +#include <kiconloader.h> +#include <kmessagebox.h> + +CupsdSecurityPage::CupsdSecurityPage(QWidget *parent, const char *name) + : CupsdPage(parent, name) +{ + setPageLabel(i18n("Security")); + setHeader(i18n("Security Settings")); + setPixmap("password"); + locs_.setAutoDelete(true); + + remoteroot_ = new QLineEdit(this); + systemgroup_ = new QLineEdit(this); + encryptcert_ = new QDirLineEdit(true, this); + encryptkey_ = new QDirLineEdit(true, this); + locations_ = new EditList(this); + + QLabel *l1 = new QLabel(i18n("Remote root user:"), this); + QLabel *l2 = new QLabel(i18n("System group:"), this); + QLabel *l3 = new QLabel(i18n("Encryption certificate:"), this); + QLabel *l4 = new QLabel(i18n("Encryption key:"), this); + QLabel *l5 = new QLabel(i18n("Locations:"), this); + + QGridLayout *m1 = new QGridLayout(this, 6, 2, 10, 7); + m1->setRowStretch(5, 1); + m1->setColStretch(1, 1); + m1->addWidget(l1, 0, 0, Qt::AlignRight); + m1->addWidget(l2, 1, 0, Qt::AlignRight); + m1->addWidget(l3, 2, 0, Qt::AlignRight); + m1->addWidget(l4, 3, 0, Qt::AlignRight); + m1->addWidget(l5, 4, 0, Qt::AlignRight|Qt::AlignTop); + m1->addWidget(remoteroot_, 0, 1); + m1->addWidget(systemgroup_, 1, 1); + m1->addWidget(encryptcert_, 2, 1); + m1->addWidget(encryptkey_, 3, 1); + m1->addWidget(locations_, 4, 1); + + connect(locations_, SIGNAL(add()), SLOT(slotAdd())); + connect(locations_, SIGNAL(edit(int)), SLOT(slotEdit(int))); + connect(locations_, SIGNAL(defaultList()), SLOT(slotDefaultList())); + connect(locations_, SIGNAL(deleted(int)), SLOT(slotDeleted(int))); +} + +bool CupsdSecurityPage::loadConfig(CupsdConf *conf, QString&) +{ + conf_ = conf; + remoteroot_->setText(conf_->remoteroot_); + systemgroup_->setText(conf_->systemgroup_); + encryptcert_->setURL(conf_->encryptcert_); + encryptkey_->setURL(conf_->encryptkey_); + locs_.clear(); + QPtrListIterator<CupsLocation> it(conf_->locations_); + for (;it.current();++it) + { + locs_.append(new CupsLocation(*(it.current()))); + if (it.current()->resource_) + locations_->insertItem(SmallIcon(CupsResource::typeToIconName(it.current()->resource_->type_)), it.current()->resource_->text_); + else + locations_->insertItem(it.current()->resourcename_); + } + + return true; +} + +bool CupsdSecurityPage::saveConfig(CupsdConf *conf, QString&) +{ + conf->remoteroot_ = remoteroot_->text(); + conf->systemgroup_ = systemgroup_->text(); + conf->encryptcert_ = encryptcert_->url(); + conf->encryptkey_ = encryptkey_->url(); + conf->locations_.clear(); + QPtrListIterator<CupsLocation> it(locs_); + for (;it.current();++it) + conf->locations_.append(new CupsLocation(*(it.current()))); + + return true; +} + +void CupsdSecurityPage::setInfos(CupsdConf *conf) +{ + QWhatsThis::add(remoteroot_, conf->comments_.toolTip("remoteroot")); + QWhatsThis::add(systemgroup_, conf->comments_.toolTip("systemgroup")); + QWhatsThis::add(encryptcert_, conf->comments_.toolTip("servercertificate")); + QWhatsThis::add(encryptkey_, conf->comments_.toolTip("serverkey")); + QWhatsThis::add(locations_, conf->comments_.toolTip("locationsshort")); +} + +void CupsdSecurityPage::slotAdd() +{ + CupsLocation *loc = new CupsLocation; + if (LocationDialog::newLocation(loc, this, conf_)) + { + int index(-1); + for (locs_.first(); locs_.current(); locs_.next()) + if (locs_.current()->resource_ == loc->resource_) + { + if (KMessageBox::warningContinueCancel(this, i18n("This location is already defined. Do you want to replace the existing one?"),QString::null,i18n("Replace")) == KMessageBox::Continue) + { + index = locs_.at(); + locs_.remove(); + break; + } + else + { + delete loc; + return; + } + } + + if (index == -1) + index = locs_.count(); + locs_.insert(index, loc); + locations_->insertItem(SmallIcon(loc->resource_->typeToIconName(loc->resource_->type_)), loc->resource_->text_); + } + else + delete loc; +} + +void CupsdSecurityPage::slotEdit(int index) +{ + CupsLocation *loc = locs_.at(index); + LocationDialog::editLocation(loc, this, conf_); +} + +void CupsdSecurityPage::slotDefaultList() +{ + locs_.clear(); + locations_->clear(); +} + +void CupsdSecurityPage::slotDeleted(int index) +{ + if (index >= 0 && index < (int)(locs_.count())) + locs_.remove(index); +} + +#include "cupsdsecuritypage.moc" |