diff options
Diffstat (limited to 'filesharing/advanced/kcm_sambaconf/printerdlgimpl.cpp')
-rw-r--r-- | filesharing/advanced/kcm_sambaconf/printerdlgimpl.cpp | 241 |
1 files changed, 241 insertions, 0 deletions
diff --git a/filesharing/advanced/kcm_sambaconf/printerdlgimpl.cpp b/filesharing/advanced/kcm_sambaconf/printerdlgimpl.cpp new file mode 100644 index 00000000..2910a1a7 --- /dev/null +++ b/filesharing/advanced/kcm_sambaconf/printerdlgimpl.cpp @@ -0,0 +1,241 @@ +/*************************************************************************** + printerdlgimpl.cpp - description + ------------------- + begin : Tue June 6 2002 + copyright : (C) 2002 by Jan Schäfer + email : janschaefer@users.sourceforge.net + ***************************************************************************/ + +/****************************************************************************** + * * + * This file is part of KSambaPlugin. * + * * + * KSambaPlugin is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * KSambaPlugin 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 General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with KSambaPlugin; if not, write to the Free Software * + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * + * * + ******************************************************************************/ + + +/** + * @author Jan Schäfer + **/ +#include <qcheckbox.h> +#include <qlineedit.h> +#include <qcombobox.h> +#include <qlabel.h> +#include <qlistbox.h> +#include <qpainter.h> +#include <qgroupbox.h> +#include <qpixmap.h> +#include <qbitmap.h> +#include <qlayout.h> +#include <qtabwidget.h> + +#include <klineedit.h> +#include <kurlrequester.h> +#include <knuminput.h> +#include <kdebug.h> +#include <kdeprint/kmmanager.h> +#include <kdeprint/kmprinter.h> +#include <kcombobox.h> +#include <kiconloader.h> +#include <klocale.h> + +#include <assert.h> + +#include "sambafile.h" +#include "printerdlgimpl.h" +#include "usertabimpl.h" +#include "passwd.h" +#include "dictmanager.h" + + +PrinterDlgImpl::PrinterDlgImpl(QWidget* parent, SambaShare* share) + : KcmPrinterDlg(parent,"sharedlgimpl") +{ + if (!share) { + kdWarning() << "PrinterDlgImpl::Constructor : share parameter is null!" << endl; + return; + } + + _share = share; + _dictMngr = new DictManager(share); + + initDialog(); +} + +void PrinterDlgImpl::initDialog() +{ + // Base settings + if (!_share) + return; + + QPtrList<KMPrinter> *printerList = KMManager::self()->printerListComplete(); + + for (QPtrListIterator<KMPrinter> it(*printerList); it.current(); ++it) + { + if (!it.current()->isSpecial()){ + queueCombo->insertItem(it.current()->printerName()); + } + } + + setComboToString(queueCombo,_share->getValue("printer name")); + + + _dictMngr->add("path",pathUrlRq); + printersChk->setChecked( _share->getName() == "printers" ); + + shareNameEdit->setText( _share->getName() ); + _dictMngr->add("comment",commentEdit); + + _dictMngr->add("available",availableBaseChk); + _dictMngr->add("browseable",browseableBaseChk); + _dictMngr->add("public",publicBaseChk); + + // Users + + _userTab = new UserTabImpl(this,_share); + _tabs->insertTab(_userTab,i18n("&Users"),1); + _userTab->load(); + connect(_userTab, SIGNAL(changed()), this, SLOT(changedSlot())); + + + // Printing + + _dictMngr->add("postscript",postscriptChk); + _dictMngr->add("use client driver",useClientDriverChk); + _dictMngr->add("default devmode",defaultDevmodeChk); + + _dictMngr->add("max print jobs",maxPrintJobsSpin); + _dictMngr->add("max reported print jobs",maxReportedPrintJobsSpin); + _dictMngr->add("printing",printingCombo, + new QStringList(QStringList() + << "sysv" << "aix" << "hpux" << "bsd" << "qnx" + << "plp" << "lprng" << "softq" << "cups" << "nt" << "os2")); + + _dictMngr->add("printer driver",printerDriverEdit); + _dictMngr->add("printer driver location",printerDriverLocationEdit); + + // Commands + + _dictMngr->add("print command",printCommandEdit); + _dictMngr->add("lpq command",lpqCommandEdit); + _dictMngr->add("lprm command",lprmCommandEdit); + _dictMngr->add("lppause",lppauseEdit); + _dictMngr->add("lpresume",lpresumeEdit); + _dictMngr->add("queuepause",queuepauseEdit); + _dictMngr->add("queueresume",queueresumeEdit); + + // Security + + _dictMngr->add("printer admin",printerAdminEdit); + _dictMngr->add("hosts allow",hostsAllowEdit); + _dictMngr->add("hosts deny",hostsDenyEdit); + + guestAccountCombo->insertStringList( getUnixUsers() ); + setComboToString(guestAccountCombo,_share->getValue("guest account")); + + // Advanced + + _dictMngr->add("min print space",minPrintSpaceSpin); + _dictMngr->add("status",statusChk); + _dictMngr->add("preexec",preExecEdit); + _dictMngr->add("postexec",postExecEdit); + _dictMngr->add("root preexec",rootPreExecEdit); + _dictMngr->add("root postexec",rootPostExecEdit); + + _dictMngr->load( _share ); + connect(_dictMngr, SIGNAL(changed()), this, SLOT(changedSlot())); + +} + +void PrinterDlgImpl::accept() +{ + if (!_share) + return; + + // Security + + _share->setValue("guest account",guestAccountCombo->currentText( ) ); + _share->setValue("printer name",queueCombo->currentText()); + + if (printersChk->isChecked()) + { + _share->setName("printers"); + } + else + _share->setName(shareNameEdit->text()); + + + _userTab->save(); + _dictMngr->save( _share ); + + + KcmPrinterDlg::accept(); +} + +PrinterDlgImpl::~PrinterDlgImpl() +{ +} + +void PrinterDlgImpl::printersChkToggled(bool b) +{ + if (b) + { + shareNameEdit->setText("printers"); + shareNameEdit->setEnabled(false); + + int dist = 10; + int w = 64 + dist; + int h = 64 + 2*dist; + + QPixmap pix(w,h); + pix.fill(); // fill with white + + QPixmap pix2 = DesktopIcon("printer1"); + + // Draw the printericon three times + QPainter p(&pix); + p.drawPixmap(dist+dist/2,0,pix2); + p.drawPixmap(dist/2,dist,pix2); + p.drawPixmap(dist+dist/2,2*dist,pix2); + p.end(); + + QBitmap mask(w,h); + + mask.fill(Qt::black); // everything is transparent + + p.begin(&mask); + + p.setRasterOp(Qt::OrROP); + p.drawPixmap(dist+dist/2,0,*pix2.mask()); + p.drawPixmap(dist/2,dist,*pix2.mask()); + p.drawPixmap(dist+dist/2,2*dist,*pix2.mask()); + p.end(); + + pix.setMask(mask); + + printerPixLbl->setPixmap(pix); + pixFrame->layout()->setMargin( 2 ); + } + else + { + shareNameEdit->setEnabled(true); + shareNameEdit->setText( _share->getName() ); + printerPixLbl->setPixmap(DesktopIcon("printer1")); + pixFrame->layout()->setMargin( 11 ); + } +} + +#include "printerdlgimpl.moc" |