00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "kmwizard.h"
00021 #include "kmwizardpage.h"
00022 #include "kmprinter.h"
00023 #include "kmfactory.h"
00024 #include "kmuimanager.h"
00025
00026 #include <kpushbutton.h>
00027 #include <qlabel.h>
00028 #include <qwidgetstack.h>
00029 #include <kmessagebox.h>
00030 #include <qlayout.h>
00031 #include <klocale.h>
00032 #include <kdebug.h>
00033 #include <kseparator.h>
00034 #include <kapplication.h>
00035 #include <kstdguiitem.h>
00036
00037 #include "kmwinfopage.h"
00038 #include "kmwpassword.h"
00039 #include "kmwbackend.h"
00040 #include "kmwsocket.h"
00041 #include "kmwdriver.h"
00042 #include "kmwdriverselect.h"
00043 #include "kmwdrivertest.h"
00044 #include "kmwname.h"
00045 #include "kmwend.h"
00046 #include "kmwclass.h"
00047 #include "kmwlpd.h"
00048 #include "kmwfile.h"
00049 #include "kmwsmb.h"
00050 #include "kmwlocal.h"
00051 #include "sidepixmap.h"
00052
00053 KMWizard::KMWizard(QWidget *parent, const char *name)
00054 : QDialog(parent,name,true)
00055 {
00056 m_start = KMWizard::Start;
00057 m_end = KMWizard::End;
00058 m_inclusive = true;
00059 m_printer = new KMPrinter();
00060
00061 m_pagepool.setAutoDelete(false);
00062
00063 m_stack = new QWidgetStack(this);
00064 m_next = new KPushButton(i18n("&Next >"), this);
00065 m_next->setDefault(true);
00066 m_prev = new KPushButton(i18n("< &Back"), this);
00067 QPushButton *m_cancel = new KPushButton(KStdGuiItem::cancel(), this);
00068 m_title = new QLabel(this);
00069 QFont f(m_title->font());
00070 f.setBold(true);
00071 m_title->setFont(f);
00072 KSeparator* sep = new KSeparator( KSeparator::HLine, this);
00073 sep->setFixedHeight(5);
00074 KSeparator* sep2 = new KSeparator( KSeparator::HLine, this);
00075 QPushButton *m_help = new KPushButton(KStdGuiItem::help(), this);
00076
00077 connect(m_cancel,SIGNAL(clicked()),SLOT(reject()));
00078 connect(m_next,SIGNAL(clicked()),SLOT(slotNext()));
00079 connect(m_prev,SIGNAL(clicked()),SLOT(slotPrev()));
00080 connect(m_help, SIGNAL(clicked()), SLOT(slotHelp()));
00081
00082 m_side = new SidePixmap(this);
00083 if (!m_side->isValid())
00084 {
00085 delete m_side;
00086 m_side = 0;
00087 }
00088
00089
00090 QVBoxLayout *main0_ = new QVBoxLayout(this, 10, 10);
00091 QVBoxLayout *main_ = new QVBoxLayout(0, 0, 0);
00092 QHBoxLayout *main1_ = new QHBoxLayout(0, 0, 10);
00093 QHBoxLayout *btn_ = new QHBoxLayout(0, 0, 10);
00094 main0_->addLayout(main1_);
00095 if (m_side)
00096 main1_->addWidget(m_side);
00097 main1_->addLayout(main_);
00098 main_->addWidget(m_title);
00099 main_->addWidget(sep);
00100 main_->addSpacing(10);
00101 main_->addWidget(m_stack,1);
00102 main0_->addWidget(sep2);
00103 main0_->addLayout(btn_);
00104 btn_->addWidget(m_help);
00105 btn_->addStretch(1);
00106 btn_->addWidget(m_prev);
00107 btn_->addWidget(m_next);
00108 btn_->addWidget(m_cancel);
00109
00110
00111 addPage(new KMWInfoPage(this));
00112 m_backend = new KMWBackend(this);
00113 addPage(m_backend);
00114 addPage(new KMWPassword(this));
00115 addPage(new KMWSocket(this));
00116 addPage(new KMWDriver(this));
00117 addPage(new KMWDriverSelect(this));
00118 addPage(new KMWDriverTest(this));
00119 addPage(new KMWName(this));
00120 addPage(new KMWEnd(this));
00121 addPage(new KMWClass(this));
00122 addPage(new KMWLpd(this));
00123 addPage(new KMWFile(this));
00124 addPage(new KMWSmb(this));
00125 addPage(new KMWLocal(this));
00126
00127
00128 KMFactory::self()->uiManager()->setupWizard(this);
00129
00130 setCurrentPage(m_start,false);
00131 setCaption(i18n("Add Printer Wizard"));
00132 resize(400,350);
00133 }
00134
00135 KMWizard::~KMWizard()
00136 {
00137 delete m_printer;
00138 }
00139
00140 void KMWizard::addPage(KMWizardPage *page)
00141 {
00142 m_stack->addWidget(page,page->id());
00143 m_pagepool.insert(page->id(),page);
00144 }
00145
00146 void KMWizard::setPrinter(KMPrinter *p)
00147 {
00148 if (p)
00149 {
00150 m_printer->copy(*p);
00151 KMWizardPage *page = (KMWizardPage*)m_stack->visibleWidget();
00152 if (page)
00153 page->initPrinter(m_printer);
00154 }
00155 }
00156
00157 void KMWizard::configure(int start, int end, bool inclusive)
00158 {
00159 m_start = start;
00160 m_end = end;
00161 m_inclusive = inclusive;
00162 m_pagestack.clear();
00163
00164
00165 m_backend->enableBackend(KMWizard::Class,(m_start == KMWizard::Start));
00166 setCaption((m_start == KMWizard::Start ? i18n("Add Printer Wizard") : i18n("Modify Printer")));
00167
00168 if (m_side)
00169 {
00170 if (start == KMWizard::Start && end == KMWizard::End)
00171 m_side->show();
00172 else
00173 m_side->hide();
00174 }
00175
00176 setCurrentPage(m_start,false);
00177 }
00178
00179 void KMWizard::setNextPage(int page, int next)
00180 {
00181 KMWizardPage *p = m_pagepool.find(page);
00182 if (p)
00183 p->setNextPage(next);
00184 }
00185
00186 void KMWizard::setCurrentPage(int ID, bool back)
00187 {
00188 KMWizardPage *page = m_pagepool.find(ID);
00189 if (!page)
00190 {
00191 KMessageBox::error(this,i18n("Unable to find the requested page."),i18n("Add Printer Wizard"));
00192 return;
00193 }
00194
00195
00196 if (!back) m_pagestack.push(ID);
00197
00198
00199 m_stack->raiseWidget(page);
00200 m_title->setText(page->title());
00201 if (!back || page->needsInitOnBack()) page->initPrinter(m_printer);
00202
00203
00204 if (ID == m_start) m_prev->setEnabled(false);
00205 else m_prev->setEnabled(true);
00206 if ((m_inclusive && ID == m_end) || (!m_inclusive && page->nextPage() == m_end))
00207 m_next->setText(i18n("&Finish"));
00208 else
00209 m_next->setText(i18n("&Next >"));
00210 }
00211
00212 void KMWizard::slotPrev()
00213 {
00214
00215 m_pagestack.pop();
00216 int ID = m_pagestack.top();
00217 setCurrentPage(ID,true);
00218 }
00219
00220 void KMWizard::slotNext()
00221 {
00222 KMWizardPage *page = (KMWizardPage*)m_stack->visibleWidget();
00223 if (page)
00224 {
00225 QString msg;
00226 if (!page->isValid(msg))
00227 {
00228 if (!msg.isEmpty())
00229 KMessageBox::error(this,msg.prepend("<qt>").append("</qt>"),page->title());
00230 }
00231 else
00232 {
00233 page->updatePrinter(m_printer);
00234 if (m_next->text() == i18n("&Finish"))
00235 accept();
00236 else
00237 {
00238 int ID = page->nextPage();
00239 setCurrentPage(ID,false);
00240 }
00241 }
00242 }
00243 }
00244
00245 void KMWizard::slotHelp()
00246 {
00247 kapp->invokeHelp(QString::null, "kdeprint");
00248 }
00249
00250 void KMWizard::enableWizard()
00251 {
00252 m_next->setEnabled( true );
00253 m_prev->setEnabled( m_pagestack.top() != m_start );
00254 }
00255
00256 void KMWizard::disableWizard()
00257 {
00258 m_next->setEnabled( false );
00259 m_prev->setEnabled( false );
00260 }
00261
00262 #include "kmwizard.moc"