00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
#include "kmdriverdbwidget.h"
00021
#include "kmdriverdb.h"
00022
#include "kmfactory.h"
00023
#include "kmmanager.h"
00024
#include "driver.h"
00025
00026
#include <klistbox.h>
00027
#include <kpushbutton.h>
00028
#include <qcheckbox.h>
00029
#include <kcursor.h>
00030
#include <qapplication.h>
00031
#include <kmessagebox.h>
00032
#include <qlayout.h>
00033
#include <qlabel.h>
00034
#include <qstrlist.h>
00035
00036
#include <klocale.h>
00037
#include <kcursor.h>
00038
#include <kfiledialog.h>
00039
#include <kguiitem.h>
00040
#include <kio/netaccess.h>
00041
00042 KMDriverDbWidget::KMDriverDbWidget(
QWidget *parent,
const char *name)
00043 :
QWidget(parent,name)
00044 {
00045 m_external = QString::null;
00046 m_valid =
false;
00047
00048
00049 m_manu =
new KListBox(
this);
00050 m_model =
new KListBox(
this);
00051 m_postscript =
new QCheckBox(i18n(
"&PostScript printer"),
this);
00052 m_raw =
new QCheckBox(i18n(
"&Raw printer (no driver needed)"),
this);
00053 m_postscript->setCursor(KCursor::handCursor());
00054 m_raw->setCursor(KCursor::handCursor());
00055 m_other =
new KPushButton(KGuiItem(i18n(
"&Other..."),
"fileopen"),
this);
00056
QLabel *l1 =
new QLabel(i18n(
"&Manufacturer:"),
this);
00057 QLabel *l2 =
new QLabel(i18n(
"Mo&del:"),
this);
00058 l1->
setBuddy(m_manu);
00059 l2->
setBuddy(m_model);
00060
00061
00062
QVBoxLayout *main_ =
new QVBoxLayout(
this, 0, 10);
00063
QGridLayout *sub1_ =
new QGridLayout(0, 2, 3, 0, 0);
00064
QHBoxLayout *sub2_ =
new QHBoxLayout(0, 0, 10);
00065 main_->addLayout(sub1_);
00066 main_->addLayout(sub2_);
00067 main_->addWidget(m_raw);
00068 sub1_->
addWidget(l1,0,0);
00069 sub1_->
addWidget(l2,0,2);
00070 sub1_->
addWidget(m_manu,1,0);
00071 sub1_->
addWidget(m_model,1,2);
00072 sub1_->addColSpacing(1,20);
00073 sub2_->addWidget(m_postscript,1);
00074 sub2_->addWidget(m_other,0);
00075
00076
00077 connect(KMDriverDB::self(),SIGNAL(dbLoaded(
bool)),SLOT(slotDbLoaded(
bool)));
00078 connect(KMDriverDB::self(), SIGNAL(error(
const QString&)), SLOT(slotError(
const QString&)));
00079 connect(m_manu,SIGNAL(highlighted(
const QString&)),SLOT(slotManufacturerSelected(
const QString&)));
00080 connect(m_raw,SIGNAL(toggled(
bool)),m_manu,SLOT(setDisabled(
bool)));
00081 connect(m_raw,SIGNAL(toggled(
bool)),m_model,SLOT(setDisabled(
bool)));
00082 connect(m_raw,SIGNAL(toggled(
bool)),m_other,SLOT(setDisabled(
bool)));
00083 connect(m_raw,SIGNAL(toggled(
bool)),m_postscript,SLOT(setDisabled(
bool)));
00084 connect(m_postscript,SIGNAL(toggled(
bool)),m_manu,SLOT(setDisabled(
bool)));
00085 connect(m_postscript,SIGNAL(toggled(
bool)),m_model,SLOT(setDisabled(
bool)));
00086 connect(m_postscript,SIGNAL(toggled(
bool)),m_other,SLOT(setDisabled(
bool)));
00087 connect(m_postscript,SIGNAL(toggled(
bool)),m_raw,SLOT(setDisabled(
bool)));
00088 connect(m_postscript,SIGNAL(toggled(
bool)),SLOT(slotPostscriptToggled(
bool)));
00089 connect(m_other,SIGNAL(clicked()),SLOT(slotOtherClicked()));
00090 }
00091
00092 KMDriverDbWidget::~KMDriverDbWidget()
00093 {
00094 }
00095
00096
void KMDriverDbWidget::setDriver(
const QString& manu,
const QString& model)
00097 {
00098
QListBoxItem *item = m_manu->findItem(manu);
00099
QString model_(model);
00100
if (item)
00101 {
00102 m_manu->setCurrentItem(item);
00103 item = m_model->findItem(model_);
00104
if (!item)
00105
00106
00107
00108 item = m_model->findItem(model_.
replace(0,manu.
length()+1,
QString::fromLatin1(
"")));
00109
if (item)
00110 m_model->setCurrentItem(item);
00111 }
00112 }
00113
00114
void KMDriverDbWidget::setHaveRaw(
bool on)
00115 {
00116
if (on)
00117 m_raw->show();
00118
else
00119 m_raw->hide();
00120 }
00121
00122
void KMDriverDbWidget::setHaveOther(
bool on)
00123 {
00124
if (on)
00125 m_other->show();
00126
else
00127 m_other->hide();
00128 }
00129
00130
QString KMDriverDbWidget::manufacturer()
00131 {
00132
return m_manu->currentText();
00133 }
00134
00135
QString KMDriverDbWidget::model()
00136 {
00137
return m_model->currentText();
00138 }
00139
00140
KMDBEntryList* KMDriverDbWidget::drivers()
00141 {
00142
return KMDriverDB::self()->findEntry(manufacturer(),model());
00143 }
00144
00145
bool KMDriverDbWidget::isRaw()
00146 {
00147
return m_raw->isChecked();
00148 }
00149
00150
void KMDriverDbWidget::init()
00151 {
00152
if (!m_valid)
00153 {
00154
QApplication::setOverrideCursor(KCursor::waitCursor());
00155 m_manu->clear();
00156 m_model->clear();
00157 m_manu->insertItem(i18n(
"Loading..."));
00158 KMDriverDB::self()->init(
this);
00159 }
00160 }
00161
00162
void KMDriverDbWidget::slotDbLoaded(
bool reloaded)
00163 {
00164
QApplication::restoreOverrideCursor();
00165 m_valid =
true;
00166
if (reloaded || m_manu->count() == 0 || (m_manu->count() == 1 && m_manu->text(0) == i18n(
"Loading...")))
00167 {
00168 m_manu->clear();
00169 m_model->clear();
00170
QDictIterator< QDict<KMDBEntryList> > it(KMDriverDB::self()->manufacturers());
00171
for (;it.
current();++it)
00172 m_manu->insertItem(it.
currentKey());
00173 m_manu->sort();
00174 m_manu->setCurrentItem(0);
00175 }
00176 }
00177
00178
void KMDriverDbWidget::slotError(
const QString& msg)
00179 {
00180
QApplication::restoreOverrideCursor();
00181 m_valid =
false;
00182 m_manu->clear();
00183 KMessageBox::error(
this,
"<qt>"+msg+
"</qt>");
00184 }
00185
00186
void KMDriverDbWidget::slotManufacturerSelected(
const QString& name)
00187 {
00188 m_model->clear();
00189
QDict<KMDBEntryList> *models = KMDriverDB::self()->findModels(name);
00190
if (models)
00191 {
00192
QStrIList ilist(
true);
00193
QDictIterator<KMDBEntryList> it(*models);
00194
for (;it.
current();++it)
00195 ilist.append(it.
currentKey().latin1());
00196 ilist.sort();
00197 m_model->insertStrList(&ilist);
00198 m_model->setCurrentItem(0);
00199 }
00200 }
00201
00202
void KMDriverDbWidget::slotPostscriptToggled(
bool on)
00203 {
00204
if (on)
00205 {
00206
QListBoxItem *item = m_manu->findItem(
"GENERIC");
00207
if (item)
00208 {
00209 m_manu->setCurrentItem(item);
00210 item = m_model->findItem(
"POSTSCRIPT PRINTER" );
00211
if ( item )
00212 {
00213 m_model->setCurrentItem( item );
00214
return;
00215 }
00216 }
00217 KMessageBox::error(
this,i18n(
"Unable to find the PostScript driver."));
00218 m_postscript->setChecked(
false);
00219 }
00220 }
00221
00222
void KMDriverDbWidget::slotOtherClicked()
00223 {
00224
if (m_external.isEmpty())
00225 {
00226 KFileDialog dlg( QString::null, QString::null,
this, 0,
true );
00227 KURL url;
00228
00229 dlg.setMode( KFile::File );
00230 dlg.setCaption( i18n(
"Select Driver" ) );
00231
if ( dlg.exec() )
00232 url = dlg.selectedURL();
00233
00234
if ( !url.isEmpty() )
00235 {
00236
QString filename;
00237
if ( KIO::NetAccess::download( url, filename,
this ) )
00238 {
00239 DrMain *driver = KMFactory::self()->manager()->loadFileDriver(filename);
00240
if (driver)
00241 {
00242 m_external = filename;
00243 disconnect(m_manu,SIGNAL(highlighted(
const QString&)),
this,SLOT(slotManufacturerSelected(
const QString&)));
00244 m_manu->clear();
00245 m_model->clear();
00246
QString s = driver->get(
"manufacturer");
00247 m_manu->insertItem((s.
isEmpty() ? i18n(
"<Unknown>") : s));
00248 s = driver->get(
"model");
00249 m_model->insertItem((s.
isEmpty() ? i18n(
"<Unknown>") : s));
00250 m_manu->setCurrentItem(0);
00251 m_model->setCurrentItem(0);
00252 m_other->setText(i18n(
"Database"));
00253 m_desc = driver->get(
"description");
00254
delete driver;
00255 }
00256
else
00257 {
00258 KIO::NetAccess::removeTempFile( filename );
00259 KMessageBox::error(
this,
"<qt>"+i18n(
"Wrong driver format.")+
"<p>"+KMManager::self()->errorMsg()+
"</p></qt>");
00260 }
00261 }
00262 }
00263 }
00264
else
00265 {
00266 m_external = QString::null;
00267 connect(m_manu,SIGNAL(highlighted(
const QString&)),
this,SLOT(slotManufacturerSelected(
const QString&)));
00268 m_other->setText(i18n(
"Other"));
00269 m_desc = QString::null;
00270 slotDbLoaded(
true);
00271 }
00272 }
00273
#include "kmdriverdbwidget.moc"