kdeprint Library API Documentation

kminstancepage.cpp

00001 /* 00002 * This file is part of the KDE libraries 00003 * Copyright (c) 2001 Michael Goffioul <kdeprint@swing.be> 00004 * 00005 * This library is free software; you can redistribute it and/or 00006 * modify it under the terms of the GNU Library General Public 00007 * License version 2 as published by the Free Software Foundation. 00008 * 00009 * This library is distributed in the hope that it will be useful, 00010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00012 * Library General Public License for more details. 00013 * 00014 * You should have received a copy of the GNU Library General Public License 00015 * along with this library; see the file COPYING.LIB. If not, write to 00016 * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 00017 * Boston, MA 02111-1307, USA. 00018 **/ 00019 00020 #include "kminstancepage.h" 00021 #include "kmprinter.h" 00022 #include "kmfactory.h" 00023 #include "kmvirtualmanager.h" 00024 #include "kmmanager.h" 00025 #include "kprinterpropertydialog.h" 00026 #include "kprinter.h" 00027 #include "kmtimer.h" 00028 00029 #include <qlayout.h> 00030 #include <qregexp.h> 00031 #include <qwhatsthis.h> 00032 #include <qpushbutton.h> 00033 #include <kmessagebox.h> 00034 #include <kinputdialog.h> 00035 #include <klistbox.h> 00036 #include <klocale.h> 00037 #include <kiconloader.h> 00038 #include <kstandarddirs.h> 00039 #include <kdebug.h> 00040 00041 KMInstancePage::KMInstancePage(QWidget *parent, const char *name) 00042 : QWidget(parent,name) 00043 { 00044 m_view = new KListBox(this); 00045 m_printer = 0; 00046 00047 initActions(); 00048 00049 QHBoxLayout *main_ = new QHBoxLayout(this, 0, 0); 00050 main_->addWidget(m_view); 00051 QVBoxLayout *sub_ = new QVBoxLayout(0, 0, 0); 00052 main_->addLayout(sub_); 00053 for (QValueList<QButton*>::Iterator it=m_buttons.begin(); it!=m_buttons.end(); ++it) 00054 if (*it) 00055 sub_->addWidget(*it); 00056 else 00057 sub_->addSpacing(10); 00058 sub_->addStretch(1); 00059 00060 QWhatsThis::add(this, 00061 i18n("Define/Edit here instances for the current selected " 00062 "printer. An instance is a combination of a real " 00063 "(physical) printer and a set of predefined options. " 00064 "For a single InkJet printer, you could define different " 00065 "print formats like <i>DraftQuality</i>, <i>PhotoQuality</i> " 00066 "or <i>TwoSided</i>. Those instances appear as normal " 00067 "printers in the print dialog and allow you to quickly " 00068 "select the print format you want.")); 00069 } 00070 00071 KMInstancePage::~KMInstancePage() 00072 { 00073 } 00074 00075 void KMInstancePage::addButton(const QString& txt, const QString& pixmap, const char *receiver) 00076 { 00077 QPushButton *btn = new QPushButton(this, 0L); 00078 btn->setText(txt); 00079 btn->setIconSet(BarIconSet(pixmap)); 00080 btn->setFlat(true); 00081 connect(btn, SIGNAL(clicked()), receiver); 00082 m_buttons.append(btn); 00083 } 00084 00085 void KMInstancePage::initActions() 00086 { 00087 addButton(i18n("New..."), "filenew", SLOT(slotNew())); 00088 addButton(i18n("Copy..."), "editcopy", SLOT(slotCopy())); 00089 addButton(i18n("Remove"), "edittrash", SLOT(slotRemove())); 00090 m_buttons.append(0); 00091 addButton(i18n("Set as Default"), "exec", SLOT(slotDefault())); 00092 addButton(i18n("Settings..."), "configure", SLOT(slotSettings())); 00093 m_buttons.append(0); 00094 addButton(i18n("Test..."), "fileprint", SLOT(slotTest())); 00095 } 00096 00097 void KMInstancePage::setPrinter(KMPrinter *p) 00098 { 00099 QString oldText = m_view->currentText(); 00100 00101 m_view->clear(); 00102 m_printer = p; 00103 //bool ok = (p && !p->isSpecial()); 00104 bool ok = (p != 0); 00105 if (ok) 00106 { 00107 QPtrList<KMPrinter> list; 00108 KMFactory::self()->virtualManager()->virtualList(list,p->name()); 00109 QPtrListIterator<KMPrinter> it(list); 00110 for (;it.current();++it) 00111 { 00112 QStringList pair = QStringList::split('/',it.current()->name(),false); 00113 m_view->insertItem(SmallIcon((it.current()->isSoftDefault() ? "exec" : "fileprint")),(pair.count() > 1 ? pair[1] : i18n("(Default)"))); 00114 } 00115 m_view->sort(); 00116 } 00117 00118 for (QValueList<QButton*>::ConstIterator it=m_buttons.begin(); it!=m_buttons.end(); ++it) 00119 if (*it) 00120 (*it)->setEnabled(ok); 00121 00122 //iif (!oldText.isEmpty()) 00123 //{ 00124 QListBoxItem *item = m_view->findItem(oldText); 00125 if (!item) 00126 item = m_view->findItem(i18n("(Default)")); 00127 if (item) 00128 m_view->setSelected(item,true); 00129 //} 00130 } 00131 00132 void KMInstancePage::slotNew() 00133 { 00134 KMTimer::self()->hold(); 00135 00136 bool ok(false); 00137 QString name = KInputDialog::getText(i18n("Instance Name"),i18n("Enter name for new instance (leave untouched for default):"), 00138 i18n("(Default)"),&ok,this); 00139 if (ok) 00140 { 00141 if (name.find(QRegExp("\\s")) != -1) 00142 KMessageBox::error(this, i18n("Instance name may not contain any space!")); 00143 else 00144 { 00145 if (name == i18n("(Default)")) 00146 name = QString::null; 00147 KMFactory::self()->virtualManager()->create(m_printer,name); 00148 setPrinter(m_printer); 00149 } 00150 } 00151 00152 KMTimer::self()->release(); 00153 } 00154 00155 void KMInstancePage::slotRemove() 00156 { 00157 KMTimer::self()->hold(); 00158 bool reload(false); 00159 00160 QString src = m_view->currentText(); 00161 QString msg = (src != i18n("(Default)") ? i18n("Do you really want to remove instance %1?") : i18n("You can't remove the default instance. However all settings of %1 will be discarded. Continue?")); 00162 if (!src.isEmpty() && KMessageBox::warningYesNo(this,msg.arg(src)) == KMessageBox::Yes) 00163 { 00164 if (src == i18n("(Default)")) 00165 src = QString::null; 00166 reload = KMFactory::self()->virtualManager()->isDefault(m_printer,src); 00167 KMFactory::self()->virtualManager()->remove(m_printer,src); 00168 setPrinter(m_printer); 00169 } 00170 00171 KMTimer::self()->release(reload); 00172 } 00173 00174 void KMInstancePage::slotCopy() 00175 { 00176 KMTimer::self()->hold(); 00177 00178 QString src = m_view->currentText(); 00179 if (!src.isEmpty()) 00180 { 00181 bool ok(false); 00182 QString name = KInputDialog::getText(i18n("Instance Name"),i18n("Enter name for new instance (leave untouched for default):"), 00183 i18n("(Default)"),&ok,this); 00184 if (ok) 00185 { 00186 if (name.find(QRegExp("\\s")) != -1) 00187 KMessageBox::error(this, i18n("Instance name may not contain any space!")); 00188 else 00189 { 00190 if (src == i18n("(Default)")) 00191 src = QString::null; 00192 if (name == i18n("(Default)")) 00193 name = QString::null; 00194 KMFactory::self()->virtualManager()->copy(m_printer,src,name); 00195 setPrinter(m_printer); 00196 } 00197 } 00198 } 00199 00200 KMTimer::self()->release(); 00201 } 00202 00203 void KMInstancePage::slotSettings() 00204 { 00205 KMTimer::self()->hold(); 00206 00207 QString src = m_view->currentText(); 00208 if (!src.isEmpty()) 00209 { 00210 if (src == i18n("(Default)")) src = QString::null; 00211 KMPrinter *pr = KMFactory::self()->virtualManager()->findInstance(m_printer,src); 00212 if ( !pr ) 00213 KMessageBox::error( this, i18n( "Unable to find instance %1." ).arg( m_view->currentText() ) ); 00214 else if ( !pr->isSpecial() && !KMFactory::self()->manager()->completePrinterShort( pr ) ) 00215 KMessageBox::error( this, i18n( "Unable to retrieve printer information. Message from printing system: %1." ).arg( KMFactory::self()->manager()->errorMsg() ) ); 00216 else 00217 { 00218 int oldAppType = KMFactory::self()->settings()->application; 00219 KMFactory::self()->settings()->application = -1; 00220 KPrinterPropertyDialog::setupPrinter(pr, this); 00221 KMFactory::self()->settings()->application = oldAppType; 00222 if (pr->isEdited()) 00223 { // printer edited, need to save changes 00224 pr->setDefaultOptions(pr->editedOptions()); 00225 pr->setEditedOptions(QMap<QString,QString>()); 00226 pr->setEdited(false); 00227 KMFactory::self()->virtualManager()->triggerSave(); 00228 } 00229 } 00230 } 00231 else 00232 KMessageBox::error( this, i18n( "The instance name is empty. Please select an instance." ) ); 00233 00234 KMTimer::self()->release(); 00235 } 00236 00237 void KMInstancePage::slotDefault() 00238 { 00239 KMTimer::self()->hold(); 00240 00241 QString src = m_view->currentText(); 00242 if (!src.isEmpty()) 00243 { 00244 if (src == i18n("(Default)")) 00245 src = QString::null; 00246 KMFactory::self()->virtualManager()->setAsDefault(m_printer,src); 00247 setPrinter(m_printer); 00248 } 00249 00250 KMTimer::self()->release(true); 00251 } 00252 00253 void KMInstancePage::slotTest() 00254 { 00255 KMTimer::self()->hold(); 00256 00257 QString src = m_view->currentText(); 00258 if (!src.isEmpty()) 00259 { 00260 if (src == i18n("(Default)")) 00261 src = QString::null; 00262 KMPrinter *mpr = KMFactory::self()->virtualManager()->findInstance(m_printer,src); 00263 if (!mpr) 00264 KMessageBox::error(this,i18n("Internal error: printer not found.")); 00265 else if (KMessageBox::warningContinueCancel(this, i18n("You are about to print a test page on %1. Do you want to continue?").arg(mpr->printerName()), QString::null, i18n("Print Test Page"), "printTestPage") == KMessageBox::Continue) 00266 { 00267 if (!KMFactory::self()->virtualManager()->testInstance(mpr)) 00268 KMessageBox::error(this, i18n("Unable to send test page to %1.").arg(mpr->printerName())); 00269 else 00270 KMessageBox::information(this,i18n("Test page successfully sent to printer %1.").arg(mpr->printerName())); 00271 } 00272 } 00273 00274 KMTimer::self()->release(false); 00275 } 00276 #include "kminstancepage.moc"
KDE Logo
This file is part of the documentation for kdeprint Library Version 3.2.3.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Sun Oct 10 18:55:54 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003