00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "cupsdserversecuritypage.h"
00021
00022 #include <qlineedit.h>
00023 #include <klocale.h>
00024 #include <qlayout.h>
00025 #include <qlabel.h>
00026 #include <qlistview.h>
00027 #include <qframe.h>
00028 #include <qpushbutton.h>
00029 #include <kmessagebox.h>
00030 #include <kiconloader.h>
00031 #include <kseparator.h>
00032 #include <qwhatsthis.h>
00033
00034 #include "cupsdconf.h"
00035 #include "cupsdoption.h"
00036 #include "cupslocationdialog.h"
00037
00038 CupsdServerSecurityPage::CupsdServerSecurityPage(QWidget *parent, const char *name)
00039 : CupsdPage(parent, name)
00040 {
00041 path_.append(i18n("Security"));
00042 header_ = i18n("Security Configuration");
00043
00044 for (int i=0;i<1;i++)
00045 opt_[i] = new CupsdOption(this);
00046
00047 QVBoxLayout *main_ = new QVBoxLayout(this, 10, 10);
00048 main_->addWidget(deflabel_, 0, Qt::AlignRight|Qt::AlignVCenter);
00049
00050 QHBoxLayout *sub1_ = new QHBoxLayout(0, 0, 10);
00051 QLabel *l1 = new QLabel(i18n("System group:"), this);
00052 systemgroup_ = new QLineEdit(opt_[0]);
00053 main_->addLayout(sub1_);
00054 sub1_->addWidget(l1);
00055 sub1_->addWidget(opt_[0]);
00056
00057 KSeparator* sep = new KSeparator( KSeparator::HLine, this);
00058 sep->setFixedHeight(20);
00059 main_->addWidget(sep);
00060
00061 locations_ = new QListView(this);
00062 locations_->setFrameStyle(QFrame::WinPanel|QFrame::Sunken);
00063 locations_->setLineWidth(1);
00064 locations_->addColumn(i18n("Resource"));
00065 locations_->addColumn(i18n("Path"));
00066 locations_->setSorting(1);
00067
00068 QLabel *l2 = new QLabel(i18n("Resources:"), this);
00069
00070 QPushButton *add_ = new QPushButton(i18n("Add..."), this);
00071 connect(add_, SIGNAL(clicked()), SLOT(addClicked()));
00072 QPushButton *modify_ = new QPushButton(i18n("Modify"), this);
00073 connect(modify_, SIGNAL(clicked()), SLOT(modifyClicked()));
00074 QPushButton *remove_ = new QPushButton(i18n("Remove"), this);
00075 connect(remove_, SIGNAL(clicked()), SLOT(removeClicked()));
00076
00077 QGridLayout *sub2_ = new QGridLayout(0, 3, 3, 0, 10);
00078 main_->addLayout(sub2_);
00079 sub2_->addWidget(l2, 0, 0, Qt::AlignLeft|Qt::AlignTop);
00080 sub2_->addMultiCellWidget(locations_, 0, 2, 1, 1);
00081 sub2_->addWidget(add_, 0, 2);
00082 sub2_->addWidget(modify_, 1, 2);
00083 sub2_->addWidget(remove_, 2, 2);
00084
00085 main_->addStretch(1);
00086
00087 loclist_.setAutoDelete(true);
00088 }
00089
00090 CupsdServerSecurityPage::~CupsdServerSecurityPage()
00091 {
00092 }
00093
00094 void CupsdServerSecurityPage::updateLocations()
00095 {
00096 locations_->clear();
00097 for (loclist_.first();loclist_.current();loclist_.next())
00098 {
00099 QListViewItem *item = new QListViewItem(locations_, (loclist_.current()->resource_ ? loclist_.current()->resource_->text_ : i18n("<Unmatched resource>")), loclist_.current()->resourcename_);
00100 if (loclist_.current()->resource_) item->setPixmap(0, SmallIcon(CupsResource::typeToIconName(loclist_.current()->resource_->type_)));
00101 else item->setPixmap(0, SmallIcon(""));
00102 }
00103 }
00104
00105 bool CupsdServerSecurityPage::loadConfig(CupsdConf *conf, QString&)
00106 {
00107 conf_ = conf;
00108 if (!conf->systemgroup_.isNull())
00109 {
00110 opt_[0]->setDefault(0);
00111 systemgroup_->setText(conf->systemgroup_);
00112 }
00113 loclist_.clear();
00114 for (conf->locations_.first();conf->locations_.current();conf->locations_.next())
00115 loclist_.append(new CupsLocation(*(conf->locations_.current())));
00116 updateLocations();
00117 return true;
00118 }
00119
00120 bool CupsdServerSecurityPage::saveConfig(CupsdConf *conf, QString&)
00121 {
00122 if (!opt_[0]->isDefault() && !systemgroup_->text().isNull()) conf->systemgroup_ = systemgroup_->text();
00123 conf->locations_.clear();
00124 for (loclist_.first();loclist_.current();loclist_.next())
00125 conf->locations_.append(new CupsLocation(*(loclist_.current())));
00126 return true;
00127 }
00128
00129 void CupsdServerSecurityPage::setDefaults()
00130 {
00131 systemgroup_->setText("sys");
00132 loclist_.clear();
00133 updateLocations();
00134 }
00135
00136 void CupsdServerSecurityPage::addClicked()
00137 {
00138 CupsLocationDialog dlg(conf_, this);
00139 if (dlg.exec())
00140 {
00141 CupsLocation *loc = new CupsLocation;
00142 loclist_.append(loc);
00143 dlg.saveLocation(loc);
00144 updateLocations();
00145 }
00146 }
00147
00148 void CupsdServerSecurityPage::modifyClicked()
00149 {
00150 if (locations_->currentItem() != NULL)
00151 {
00152 for (loclist_.first();loclist_.current();loclist_.next())
00153 if (loclist_.current()->resourcename_ == locations_->currentItem()->text(1)) break;
00154 if (!loclist_.current()) return;
00155 CupsLocation *loc = loclist_.current();
00156 CupsLocationDialog dlg(conf_, this);
00157 dlg.loadLocation(loc);
00158 if (dlg.exec())
00159 {
00160 dlg.saveLocation(loc);
00161
00162
00163 }
00164 }
00165 }
00166
00167 void CupsdServerSecurityPage::removeClicked()
00168 {
00169 if (!locations_->currentItem()) return;
00170 for (loclist_.first();loclist_.current();loclist_.next())
00171 if (loclist_.current()->resourcename_ == locations_->currentItem()->text(1)) break;
00172 if (!loclist_.current()) return;
00173 if (KMessageBox::warningYesNo(this, i18n("Really remove resource \"%1\"?").arg(loclist_.current()->resourcename_)) == KMessageBox::Yes)
00174 {
00175 loclist_.remove();
00176 delete locations_->currentItem();
00177
00178
00179 }
00180 }
00181
00182 void CupsdServerSecurityPage::setInfos(CupsdConf *conf)
00183 {
00184 QWhatsThis::add(systemgroup_, conf->comments_.toolTip(SYSTEMGROUP_COMM));
00185 QWhatsThis::add(locations_, conf->comments_.toolTip(LOCATIONS_COMM));
00186 }
00187 #include "cupsdserversecuritypage.moc"