//--------------------------------------------------------------------------- // // kPPP: A pppd front end for the KDE project // //--------------------------------------------------------------------------- // // (c) 1997-1998 Bernd Johannes Wuebben // (c) 1997-1999 Mario Weilguni // (c) 1998-1999 Harri Porten // // 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // //--------------------------------------------------------------------------- #include #include #include #include "modemdb.h" #include #include #include #include #include ModemSelector::ModemSelector(TQWidget *parent) : TQDialog(parent, 0, true) { // set up widgets and such setCaption(i18n("Select Modem Type")); TQVBoxLayout *tl = new TQVBoxLayout(this, 10, 10); TQLabel *l1 = new TQLabel(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); TQHBoxLayout *tl1 = new TQHBoxLayout(10); tl->addLayout(tl1, 1); vendor = new TQListBox(this); model = new TQListBox(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, TQT_SIGNAL(clicked()), this, TQT_SLOT(reject())); connect(cancel, TQT_SIGNAL(clicked()), this, TQT_SLOT(reject())); connect(vendor, TQT_SIGNAL(highlighted(int)), this, TQT_SLOT(vendorSelected(int))); connect(model, TQT_SIGNAL(highlighted(int)), this, TQT_SLOT(modelSelected(int))); connect(model, TQT_SIGNAL(selected(int)), this, TQT_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); TQString name = vendor->text(idx); TQStringList *models = db->models(name); model->clear(); model->insertStringList(*models); // FIXME: work around TQt 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 TQStringList *ModemDatabase::vendors() { return lvendors; } TQStringList *ModemDatabase::models(TQString vendor) { TQStringList *sl = new TQStringList; TQString s = i18n(""); if(vendor == s) vendor = i18n(""); 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 TQString &key, CharDict &dict) { // KEntryIterator *it = modemDB->entryIterator(key); // KEntryDictEntry *e; TQMap map; TQMap ::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 TQString(it.data())); } it++; } // check name attribute if(dict["Name"] == 0 || key[0]=='!') { dict.replace("Name", new TQString(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 TDEConfig("DB/modemDB.rc", 0); lvendors = new TQStringList; modems.setAutoDelete(true); TQStringList list = modemDB->groupList(); TQStringList::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") { TQString s = i18n("Hayes(tm) compatible modem"); c->replace("Name", new TQString (s)); s = i18n(""); c->replace("Vendor", new TQString(s)); } modems.append(c); if(modemDB->hasKey("Vendor")) { TQString vendor = modemDB->readEntry("Vendor"); if(lvendors->findIndex(vendor) == -1) lvendors->append(vendor); } ++it; } lvendors->sort(); lvendors->insert(0, i18n("")); } void ModemDatabase::save(TDEConfig *) { } #include "modemdb.moc"