You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
245 lines
6.1 KiB
245 lines
6.1 KiB
//---------------------------------------------------------------------------
|
|
//
|
|
// kPPP: A pppd front end for the KDE project
|
|
//
|
|
//---------------------------------------------------------------------------
|
|
//
|
|
// (c) 1997-1998 Bernd Johannes Wuebben <wuebben@kde.org>
|
|
// (c) 1997-1999 Mario Weilguni <mweilguni@kde.org>
|
|
// (c) 1998-1999 Harri Porten <porten@kde.org>
|
|
//
|
|
// derived from Jay Painters "ezppp"
|
|
//
|
|
//---------------------------------------------------------------------------
|
|
//
|
|
// $Id$
|
|
//
|
|
//---------------------------------------------------------------------------
|
|
//
|
|
// This program is free software; you can redistribute it and-or
|
|
// modify it under the terms of the GNU Library General Public
|
|
// License as published by the Free Software Foundation; either
|
|
// version 2 of the License, or (at your option) any later version.
|
|
//
|
|
// This program 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
|
|
// Library General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU Library General Public
|
|
// License along with this program; if not, write to the Free
|
|
// Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
//
|
|
//---------------------------------------------------------------------------
|
|
|
|
#include <qlabel.h>
|
|
#include <kbuttonbox.h>
|
|
#include <qlayout.h>
|
|
#include "modemdb.h"
|
|
#include <klocale.h>
|
|
#include <qpushbutton.h>
|
|
#include <qlistbox.h>
|
|
#include <kconfig.h>
|
|
#include <kstdguiitem.h>
|
|
|
|
ModemSelector::ModemSelector(QWidget *parent) : QDialog(parent, 0, true) {
|
|
// set up widgets and such
|
|
setCaption(i18n("Select Modem Type"));
|
|
QVBoxLayout *tl = new QVBoxLayout(this, 10, 10);
|
|
QLabel *l1 = new QLabel(i18n("To set up your modem, first choose its vendor in the "
|
|
"list to the left, and then select the model from the "
|
|
"right list. If you don't know which modem you have, "
|
|
"you can try out one of the \"Generic\" modems."),
|
|
this);
|
|
l1->setAlignment(AlignLeft | WordBreak);
|
|
l1->setFixedWidth(400);
|
|
l1->setMinimumHeight(50);
|
|
tl->addWidget(l1, 0);
|
|
|
|
tl->addSpacing(10);
|
|
|
|
QHBoxLayout *tl1 = new QHBoxLayout(10);
|
|
tl->addLayout(tl1, 1);
|
|
vendor = new QListBox(this);
|
|
model = new QListBox(this);
|
|
vendor->setMinimumSize(200, 130);
|
|
model->setMinimumSize(200, 130);
|
|
tl1->addWidget(vendor, 2);
|
|
tl1->addWidget(model, 3);
|
|
|
|
KButtonBox *bbox = new KButtonBox(this);
|
|
bbox->addStretch(1);
|
|
ok = bbox->addButton(KStdGuiItem::ok());
|
|
ok->setDefault(true);
|
|
ok->setEnabled(false);
|
|
cancel = bbox->addButton(KStdGuiItem::cancel());
|
|
bbox->layout();
|
|
tl->addWidget(bbox);
|
|
setFixedSize(sizeHint());
|
|
|
|
// set up modem database
|
|
db = new ModemDatabase();
|
|
|
|
// set up signal/slots
|
|
connect(ok, SIGNAL(clicked()),
|
|
this, SLOT(reject()));
|
|
connect(cancel, SIGNAL(clicked()),
|
|
this, SLOT(reject()));
|
|
connect(vendor, SIGNAL(highlighted(int)),
|
|
this, SLOT(vendorSelected(int)));
|
|
connect(model, SIGNAL(highlighted(int)),
|
|
this, SLOT(modelSelected(int)));
|
|
connect(model, SIGNAL(selected(int)),
|
|
this, SLOT(selected(int)));
|
|
|
|
// fill vendor list with life
|
|
vendor->insertStringList(*db->vendors());
|
|
|
|
vendor->setCurrentItem(0);
|
|
}
|
|
|
|
|
|
ModemSelector::~ModemSelector() {
|
|
delete db;
|
|
}
|
|
|
|
|
|
void ModemSelector::vendorSelected(int idx) {
|
|
ok->setEnabled(false);
|
|
|
|
QString name = vendor->text(idx);
|
|
QStringList *models = db->models(name);
|
|
model->clear();
|
|
model->insertStringList(*models);
|
|
|
|
// FIXME: work around Qt bug
|
|
if(models->count() == 0)
|
|
model->update();
|
|
delete models;
|
|
}
|
|
|
|
|
|
void ModemSelector::modelSelected(int) {
|
|
ok->setEnabled(true);
|
|
}
|
|
|
|
void ModemSelector::selected(int) {
|
|
accept();
|
|
}
|
|
|
|
|
|
ModemDatabase::ModemDatabase() {
|
|
load();
|
|
}
|
|
|
|
|
|
ModemDatabase::~ModemDatabase() {
|
|
delete lvendors;
|
|
delete modemDB;
|
|
}
|
|
|
|
|
|
const QStringList *ModemDatabase::vendors() {
|
|
return lvendors;
|
|
}
|
|
|
|
|
|
QStringList *ModemDatabase::models(QString vendor) {
|
|
QStringList *sl = new QStringList;
|
|
QString s = i18n("<Generic>");
|
|
if(vendor == s)
|
|
vendor = i18n("<Generic>");
|
|
|
|
for(uint i = 0; i < modems.count(); i++) {
|
|
CharDict *dict = modems.at(i);
|
|
if(dict->find("Vendor") != 0) {
|
|
if(vendor == *(*dict)["Vendor"] && (*(*dict)["Name"]).at(0) != '!')
|
|
sl->append(*(*dict)["Name"]);
|
|
}
|
|
}
|
|
sl->sort();
|
|
|
|
return sl;
|
|
}
|
|
|
|
|
|
void ModemDatabase::loadModem(const QString &key, CharDict &dict) {
|
|
// KEntryIterator *it = modemDB->entryIterator(key);
|
|
// KEntryDictEntry *e;
|
|
QMap <QString, QString> map;
|
|
QMap <QString, QString>::Iterator it;
|
|
// KEntryMapConstIterator e;
|
|
KEntry e;
|
|
map = modemDB->entryMap(key);
|
|
it = map.begin();
|
|
|
|
// remove parent attribute
|
|
dict.setAutoDelete(true);
|
|
dict.remove("Parent");
|
|
|
|
// e = it->current();
|
|
while(!it.key().isNull()) {
|
|
if(dict.find(it.key()) == 0) {
|
|
dict.insert(it.key(), new QString(it.data()));
|
|
}
|
|
it++;
|
|
}
|
|
|
|
// check name attribute
|
|
if(dict["Name"] == 0 || key[0]=='!') {
|
|
dict.replace("Name", new QString(key));
|
|
}
|
|
|
|
// check parent attribute
|
|
if(dict["Parent"] != 0)
|
|
loadModem(*dict["Parent"], dict);
|
|
else
|
|
// inherit common at last
|
|
if (key != "Common")
|
|
loadModem("Common", dict);
|
|
|
|
}
|
|
|
|
|
|
void ModemDatabase::load() {
|
|
modemDB = new KConfig("DB/modemDB.rc", 0);
|
|
lvendors = new QStringList;
|
|
modems.setAutoDelete(true);
|
|
|
|
QStringList list = modemDB->groupList();
|
|
QStringList::Iterator it = list.begin();
|
|
while(it != list.end()) {
|
|
modemDB->setGroup(*it);
|
|
CharDict *c = new CharDict;
|
|
c->setAutoDelete(true);
|
|
loadModem(*it, *c);
|
|
|
|
// if(strcmp(it->latin1(), "Common") == 0) {
|
|
if(*it == "Common") {
|
|
QString s = i18n("Hayes(tm) compatible modem");
|
|
c->replace("Name", new QString (s));
|
|
|
|
s = i18n("<Generic>");
|
|
c->replace("Vendor", new QString(s));
|
|
}
|
|
modems.append(c);
|
|
|
|
if(modemDB->hasKey("Vendor")) {
|
|
QString vendor = modemDB->readEntry("Vendor");
|
|
if(lvendors->findIndex(vendor) == -1)
|
|
lvendors->append(vendor);
|
|
}
|
|
++it;
|
|
}
|
|
|
|
lvendors->sort();
|
|
|
|
lvendors->insert(0, i18n("<Generic>"));
|
|
}
|
|
|
|
|
|
void ModemDatabase::save(KConfig *) {
|
|
}
|
|
|
|
#include "modemdb.moc"
|