summaryrefslogtreecommitdiff
path: root/noncore/settings/networksettings/mainwindowimp.cpp
Unidiff
Diffstat (limited to 'noncore/settings/networksettings/mainwindowimp.cpp') (more/less context) (show whitespace changes)
-rw-r--r--noncore/settings/networksettings/mainwindowimp.cpp91
1 files changed, 80 insertions, 11 deletions
diff --git a/noncore/settings/networksettings/mainwindowimp.cpp b/noncore/settings/networksettings/mainwindowimp.cpp
index 0ddc489..d6b708b 100644
--- a/noncore/settings/networksettings/mainwindowimp.cpp
+++ b/noncore/settings/networksettings/mainwindowimp.cpp
@@ -3,55 +3,77 @@
3#include "interfaceinformationimp.h" 3#include "interfaceinformationimp.h"
4#include "interfacesetupimp.h" 4#include "interfacesetupimp.h"
5#include "interfaces.h" 5#include "interfaces.h"
6#include "module.h" 6#include "module.h"
7 7
8#include <qpushbutton.h> 8#include <qpushbutton.h>
9#include <qlistbox.h> 9#include <qlistbox.h>
10#include <qlineedit.h> 10#include <qlineedit.h>
11#include <qlistview.h> 11#include <qlistview.h>
12#include <qheader.h> 12#include <qheader.h>
13#include <qlabel.h> 13#include <qlabel.h>
14 14
15#include <qmainwindow.h>
16#include <qmessagebox.h> 15#include <qmessagebox.h>
17 16
17#ifdef QTE_VERSION
18#include <qpe/config.h> 18#include <qpe/config.h>
19#include <qpe/qlibrary.h> 19#include <qpe/qlibrary.h>
20#include <qpe/resource.h> 20#include <qpe/resource.h>
21#include <qpe/qpeapplication.h> 21#include <qpe/qpeapplication.h>
22 #define QLibrary
23#else
24 #include <klibloader.h>
25 #define QLibrary KLibrary
26 #include <kconfig.h>
27 #define Config KConfig
28 #include <kapplication.h>
29 #include <kstandarddirs.h>
30 #include <kiconloader.h>
31 #define showMaximized show
32#endif
22 33
34#if QT_VERSION < 300
23#include <qlist.h> 35#include <qlist.h>
36#else
37#include <qptrlist.h>
38#endif
24#include <qdir.h> 39#include <qdir.h>
25#include <qfile.h> 40#include <qfile.h>
26#include <qtextstream.h> 41#include <qtextstream.h>
42#include <qregexp.h>
27 43
28#include <net/if.h> 44#include <net/if.h>
29#include <sys/ioctl.h> 45#include <sys/ioctl.h>
30 46
31#define DEFAULT_SCHEME "/var/lib/pcmcia/scheme" 47#define DEFAULT_SCHEME "/var/lib/pcmcia/scheme"
32 48
33MainWindowImp::MainWindowImp(QWidget *parent, const char *name) : MainWindow(parent, name, true), advancedUserMode(false), scheme(DEFAULT_SCHEME){ 49MainWindowImp::MainWindowImp(QWidget *parent, const char *name) : MainWindow(parent, name), advancedUserMode(true), scheme(DEFAULT_SCHEME){
34 connect(addConnectionButton, SIGNAL(clicked()), this, SLOT(addClicked())); 50 connect(addConnectionButton, SIGNAL(clicked()), this, SLOT(addClicked()));
35 connect(removeConnectionButton, SIGNAL(clicked()), this, SLOT(removeClicked())); 51 connect(removeConnectionButton, SIGNAL(clicked()), this, SLOT(removeClicked()));
36 connect(informationConnectionButton, SIGNAL(clicked()), this, SLOT(informationClicked())); 52 connect(informationConnectionButton, SIGNAL(clicked()), this, SLOT(informationClicked()));
37 connect(configureConnectionButton, SIGNAL(clicked()), this, SLOT(configureClicked())); 53 connect(configureConnectionButton, SIGNAL(clicked()), this, SLOT(configureClicked()));
38 54
39 connect(newProfileButton, SIGNAL(clicked()), this, SLOT(addProfile())); 55 connect(newProfileButton, SIGNAL(clicked()), this, SLOT(addProfile()));
40 connect(removeProfileButton, SIGNAL(clicked()), this, SLOT(removeProfile())); 56 connect(removeProfileButton, SIGNAL(clicked()), this, SLOT(removeProfile()));
41 connect(setCurrentProfileButton, SIGNAL(clicked()), this, SLOT(changeProfile())); 57 connect(setCurrentProfileButton, SIGNAL(clicked()), this, SLOT(changeProfile()));
42 58
43 connect(newProfile, SIGNAL(textChanged(const QString&)), this, SLOT(newProfileChanged(const QString&))); 59 connect(newProfile, SIGNAL(textChanged(const QString&)), this, SLOT(newProfileChanged(const QString&)));
44 // Load connections. 60 // Load connections.
45 loadModules(QPEApplication::qpeDir() + "/plugins/networksettings"); 61 // /usr/local/kde/lib/libinterfaces.la
62#ifdef QTE_VERSION
63 loadModules(QPEApplication::kdeDir() + "/plugins/networksettings");
64#else
65 loader = KLibLoader::self();
66 loadModules(QString("/usr/")+KStandardDirs::kde_default("lib"));
67#endif
46 getAllInterfaces(); 68 getAllInterfaces();
47 69
48 Interfaces i; 70 Interfaces i;
49 QStringList list = i.getInterfaceList(); 71 QStringList list = i.getInterfaceList();
50 QMap<QString, Interface*>::Iterator it; 72 QMap<QString, Interface*>::Iterator it;
51 for ( QStringList::Iterator ni = list.begin(); ni != list.end(); ++ni ) { 73 for ( QStringList::Iterator ni = list.begin(); ni != list.end(); ++ni ) {
52 bool found = false; 74 bool found = false;
53 for( it = interfaceNames.begin(); it != interfaceNames.end(); ++it ){ 75 for( it = interfaceNames.begin(); it != interfaceNames.end(); ++it ){
54 if(it.key() == (*ni)) 76 if(it.key() == (*ni))
55 found = true; 77 found = true;
56 } 78 }
57 if(!found){ 79 if(!found){
@@ -99,32 +121,36 @@ MainWindowImp::~MainWindowImp(){
99 // Save profiles. 121 // Save profiles.
100 Config cfg("NetworkSetup"); 122 Config cfg("NetworkSetup");
101 cfg.setGroup("General"); 123 cfg.setGroup("General");
102 cfg.writeEntry("Profiles", profiles.join(" ")); 124 cfg.writeEntry("Profiles", profiles.join(" "));
103 125
104 // Delete all interfaces that don't have owners. 126 // Delete all interfaces that don't have owners.
105 QMap<Interface*, QListViewItem*>::Iterator iIt; 127 QMap<Interface*, QListViewItem*>::Iterator iIt;
106 for( iIt = items.begin(); iIt != items.end(); ++iIt ){ 128 for( iIt = items.begin(); iIt != items.end(); ++iIt ){
107 if(iIt.key()->getModuleOwner() == NULL) 129 if(iIt.key()->getModuleOwner() == NULL)
108 delete iIt.key(); 130 delete iIt.key();
109 } 131 }
110 132
133#ifdef QTE_VERSION
111 // Delete Modules and Libraries 134 // Delete Modules and Libraries
112 QMap<Module*, QLibrary*>::Iterator it; 135 QMap<Module*, QLibrary*>::Iterator it;
113 for( it = libraries.begin(); it != libraries.end(); ++it ){ 136 for( it = libraries.begin(); it != libraries.end(); ++it ){
114 delete it.key(); 137 delete it.key();
115 // I wonder why I can't delete the libraries 138 // I wonder why I can't delete the libraries
116 // What fucking shit this is. 139 // What fucking shit this is.
117 //delete it.data(); 140 //delete it.data();
118 } 141 }
142#else
143 // klibloader automaticly deletes the libraries for us...
144#endif
119} 145}
120 146
121/** 147/**
122 * Query the kernel for all of the interfaces. 148 * Query the kernel for all of the interfaces.
123 */ 149 */
124void MainWindowImp::getAllInterfaces(){ 150void MainWindowImp::getAllInterfaces(){
125 int sockfd = socket(AF_INET, SOCK_DGRAM, 0); 151 int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
126 if(sockfd == -1) 152 if(sockfd == -1)
127 return; 153 return;
128 154
129 char buf[8*1024]; 155 char buf[8*1024];
130 struct ifconf ifc; 156 struct ifconf ifc;
@@ -181,69 +207,101 @@ void MainWindowImp::getAllInterfaces(){
181 qDebug(QString("%1").arg(ifr->ifr_addr.sa_family).latin1()); 207 qDebug(QString("%1").arg(ifr->ifr_addr.sa_family).latin1());
182 break; 208 break;
183 } 209 }
184 } 210 }
185} 211}
186 212
187/** 213/**
188 * Load all modules that are found in the path 214 * Load all modules that are found in the path
189 * @param path a directory that is scaned for any plugins that can be loaded 215 * @param path a directory that is scaned for any plugins that can be loaded
190 * and attempts to load them 216 * and attempts to load them
191 */ 217 */
192void MainWindowImp::loadModules(const QString &path){ 218void MainWindowImp::loadModules(const QString &path){
193 //qDebug(path.latin1()); 219#ifdef DEBUG
220 qDebug("MainWindowImp::loadModules: %s", path.latin1());
221#endif
194 QDir d(path); 222 QDir d(path);
195 if(!d.exists()) 223 if(!d.exists())
196 return; 224 return;
197 225
198 // Don't want sym links 226 // Don't want sym links
199 d.setFilter( QDir::Files | QDir::NoSymLinks ); 227 d.setFilter( QDir::Files | QDir::NoSymLinks );
200 const QFileInfoList *list = d.entryInfoList(); 228 const QFileInfoList *list = d.entryInfoList();
201 QFileInfoListIterator it( *list ); 229 QFileInfoListIterator it( *list );
202 QFileInfo *fi; 230 QFileInfo *fi;
203 while ( (fi=it.current()) ) { 231 while ( (fi=it.current()) ) {
204 if(fi->fileName().contains(".so")){ 232 if(fi->fileName().contains(".so") && fi->fileName().contains("networksettings_")){
205 loadPlugin(path + "/" + fi->fileName()); 233 loadPlugin(path + "/" + fi->fileName());
206 } 234 }
207 ++it; 235 ++it;
208 } 236 }
209} 237}
210 238
211/** 239/**
212 * Attempt to load a function and resolve a function. 240 * Attempt to load a function and resolve a function.
213 * @param pluginFileName - the name of the file in which to attempt to load 241 * @param pluginFileName - the name of the file in which to attempt to load
214 * @param resolveString - function pointer to resolve 242 * @param resolveString - function pointer to resolve
215 * @return pointer to the function with name resolveString or NULL 243 * @return pointer to the function with name resolveString or NULL
216 */ 244 */
217Module* MainWindowImp::loadPlugin(const QString &pluginFileName, const QString &resolveString){ 245Module* MainWindowImp::loadPlugin(const QString &pluginFileName, const QString &resolveString){
218 //qDebug(QString("MainWindowImp::loadPlugin: %1").arg(pluginFileName).latin1()); 246#ifdef DEBUG
247 qDebug("MainWindowImp::loadPlugin: %s", pluginFileName.latin1());
248#endif
249#ifdef QTE_VERSION
219 QLibrary *lib = new QLibrary(pluginFileName); 250 QLibrary *lib = new QLibrary(pluginFileName);
220 void *functionPointer = lib->resolve(resolveString); 251 void *functionPointer = lib->resolve(resolveString);
221 if( !functionPointer ){ 252 if( !functionPointer ){
222 qDebug(QString("MainWindowImp: File: %1 is not a plugin, but though was.").arg(pluginFileName).latin1()); 253#ifdef DEBUG
254 qDebug("MainWindowImp::loadPlugin: File: %s is not a plugin, but though was.", pluginFileName.latin1());
255#endif
223 delete lib; 256 delete lib;
224 return NULL; 257 return NULL;
225 } 258 }
226
227 // Try to get an object. 259 // Try to get an object.
228 Module *object = ((Module* (*)()) functionPointer)(); 260 Module *object = ((Module* (*)()) functionPointer)();
229 if(object == NULL){ 261 if(object == NULL){
262#ifdef DEBUG
230 qDebug("MainWindowImp: Couldn't create object, but did load library!"); 263 qDebug("MainWindowImp: Couldn't create object, but did load library!");
264#endif
231 delete lib; 265 delete lib;
232 return NULL; 266 return NULL;
233 } 267 }
234 268
235 // Store for deletion later 269 // Store for deletion later
236 libraries.insert(object, lib); 270 libraries.insert(object, lib);
237 return object; 271 return object;
272
273#else
274 QLibrary *lib = loader->library(pluginFileName);
275 if( !lib || !lib->hasSymbol(resolveString) ){
276#ifdef DEBUG
277 qDebug(QString("MainWindowImp::loadPlugin: File: %1 is not a plugin, but though was.").arg(pluginFileName).latin1());
278#endif
279 return NULL;
280 }
281 // Try to get an object.
282 Module *object = ((Module* (*)()) lib->symbol(resolveString))();
283 if(object == NULL){
284#ifdef DEBUG
285 qDebug("MainWindowImp: Couldn't create object, but did load library!");
286#endif
287 return NULL;
288 }
289#ifdef DEBUG
290 qDebug("MainWindowImp::loadPlugin:: Found object, storing.");
291#endif
292 // Store for deletion later
293 libraries.insert(object, lib);
294 return object;
295#endif
238} 296}
239 297
240/** 298/**
241 * The Add button was clicked. Bring up the add dialog and if OK is hit 299 * The Add button was clicked. Bring up the add dialog and if OK is hit
242 * load the plugin and append it to the list 300 * load the plugin and append it to the list
243 */ 301 */
244void MainWindowImp::addClicked(){ 302void MainWindowImp::addClicked(){
245 QMap<Module*, QLibrary*>::Iterator it; 303 QMap<Module*, QLibrary*>::Iterator it;
246 QMap<QString, QString> list; 304 QMap<QString, QString> list;
247 QMap<QString, Module*> newInterfaceOwners; 305 QMap<QString, Module*> newInterfaceOwners;
248 //list.insert("USB (PPP) / (ADD_TEST)", "A dialup connection over the USB port"); 306 //list.insert("USB (PPP) / (ADD_TEST)", "A dialup connection over the USB port");
249 //list.insert("IrDa (PPP) / (ADD_TEST)", "A dialup connection over the IdDa port"); 307 //list.insert("IrDa (PPP) / (ADD_TEST)", "A dialup connection over the IdDa port");
@@ -315,25 +373,25 @@ void MainWindowImp::configureClicked(){
315 return; 373 return;
316 } 374 }
317 375
318 Interface *i = interfaceItems[item]; 376 Interface *i = interfaceItems[item];
319 if(i->getModuleOwner()){ 377 if(i->getModuleOwner()){
320 QWidget *moduleConfigure = i->getModuleOwner()->configure(i); 378 QWidget *moduleConfigure = i->getModuleOwner()->configure(i);
321 if(moduleConfigure != NULL){ 379 if(moduleConfigure != NULL){
322 moduleConfigure->showMaximized(); 380 moduleConfigure->showMaximized();
323 return; 381 return;
324 } 382 }
325 } 383 }
326 384
327 InterfaceSetupImpDialog *configure = new InterfaceSetupImpDialog(0, "InterfaceSetupImp", i, true, Qt::WDestructiveClose); 385 InterfaceSetupImpDialog *configure = new InterfaceSetupImpDialog(this, "InterfaceSetupImp", i, true, Qt::WShowModal | Qt::WDestructiveClose | Qt::WType_Dialog);
328 QString currentProfileText = currentProfileLabel->text(); 386 QString currentProfileText = currentProfileLabel->text();
329 if(currentProfileText.upper() == "ALL"); 387 if(currentProfileText.upper() == "ALL");
330 currentProfileText = ""; 388 currentProfileText = "";
331 configure->setProfile(currentProfileText); 389 configure->setProfile(currentProfileText);
332 configure->showMaximized(); 390 configure->showMaximized();
333} 391}
334 392
335/** 393/**
336 * Pull up the information about the currently selected interface. 394 * Pull up the information about the currently selected interface.
337 * Report an error if no interface is selected. 395 * Report an error if no interface is selected.
338 * If the interface has a module owner then request its configure. 396 * If the interface has a module owner then request its configure.
339 */ 397 */
@@ -345,29 +403,32 @@ void MainWindowImp::informationClicked(){
345 } 403 }
346 404
347 Interface *i = interfaceItems[item]; 405 Interface *i = interfaceItems[item];
348 if(!i->isAttached()){ 406 if(!i->isAttached()){
349 QMessageBox::information(this, "Sorry","No information about\na disconnected interface.", QMessageBox::Ok); 407 QMessageBox::information(this, "Sorry","No information about\na disconnected interface.", QMessageBox::Ok);
350 return; 408 return;
351 } 409 }
352 410
353 if(i->getModuleOwner()){ 411 if(i->getModuleOwner()){
354 QWidget *moduleInformation = i->getModuleOwner()->information(i); 412 QWidget *moduleInformation = i->getModuleOwner()->information(i);
355 if(moduleInformation != NULL){ 413 if(moduleInformation != NULL){
356 moduleInformation->showMaximized(); 414 moduleInformation->showMaximized();
415#ifdef DEBUG
416 qDebug("MainWindowImp::informationClicked:: Module owner has created, we showed.");
417#endif
357 return; 418 return;
358 } 419 }
359 } 420 }
360 InterfaceInformationImp information(0, "InterfaceSetupImp", i); 421 InterfaceInformationImp *information = new InterfaceInformationImp(this, "InterfaceSetupImp", i, Qt::WShowModal | Qt::WDestructiveClose | Qt::WType_Dialog);
361 information.showMaximized(); 422 information->showMaximized();
362} 423}
363 424
364/** 425/**
365 * Update this interface. If no QListViewItem exists create one. 426 * Update this interface. If no QListViewItem exists create one.
366 * @param Interface* pointer to the interface that needs to be updated. 427 * @param Interface* pointer to the interface that needs to be updated.
367 */ 428 */
368void MainWindowImp::updateInterface(Interface *i){ 429void MainWindowImp::updateInterface(Interface *i){
369 if(!advancedUserMode){ 430 if(!advancedUserMode){
370 if(i->getInterfaceName() == "lo") 431 if(i->getInterfaceName() == "lo")
371 return; 432 return;
372 } 433 }
373 434
@@ -380,43 +441,51 @@ void MainWindowImp::updateInterface(Interface *i){
380 QMap<Module*, QLibrary*>::Iterator it; 441 QMap<Module*, QLibrary*>::Iterator it;
381 for( it = libraries.begin(); it != libraries.end(); ++it ){ 442 for( it = libraries.begin(); it != libraries.end(); ++it ){
382 if(it.key()->isOwner(i)) 443 if(it.key()->isOwner(i))
383 i->setModuleOwner(it.key()); 444 i->setModuleOwner(it.key());
384 } 445 }
385 items.insert(i, item); 446 items.insert(i, item);
386 interfaceItems.insert(item, i); 447 interfaceItems.insert(item, i);
387 } 448 }
388 else 449 else
389 item = items[i]; 450 item = items[i];
390 451
391 // Update the icons and information 452 // Update the icons and information
453#ifdef QTE_VERSION
392 item->setPixmap(0, (Resource::loadPixmap(i->getStatus() ? "up": "down"))); 454 item->setPixmap(0, (Resource::loadPixmap(i->getStatus() ? "up": "down")));
455#else
456 item->setPixmap(0, (SmallIcon(i->getStatus() ? "up": "down")));
457#endif
393 458
394 QString typeName = "lan"; 459 QString typeName = "lan";
395 if(i->getHardwareName().contains("Local Loopback")) 460 if(i->getHardwareName().contains("Local Loopback"))
396 typeName = "lo"; 461 typeName = "lo";
397 if(i->getInterfaceName().contains("irda")) 462 if(i->getInterfaceName().contains("irda"))
398 typeName = "irda"; 463 typeName = "irda";
399 if(i->getInterfaceName().contains("wlan")) 464 if(i->getInterfaceName().contains("wlan"))
400 typeName = "wlan"; 465 typeName = "wlan";
401 if(i->getInterfaceName().contains("usb")) 466 if(i->getInterfaceName().contains("usb"))
402 typeName = "usb"; 467 typeName = "usb";
403 468
404 if(!i->isAttached()) 469 if(!i->isAttached())
405 typeName = "connect_no"; 470 typeName = "connect_no";
406 // Actually try to use the Module 471 // Actually try to use the Module
407 if(i->getModuleOwner() != NULL) 472 if(i->getModuleOwner() != NULL)
408 typeName = i->getModuleOwner()->getPixmapName(i); 473 typeName = i->getModuleOwner()->getPixmapName(i);
409 474
475#ifdef QTE_VERSION
410 item->setPixmap(1, (Resource::loadPixmap(QString("networksettings/") + typeName))); 476 item->setPixmap(1, (Resource::loadPixmap(QString("networksettings/") + typeName)));
477#else
478 item->setPixmap(1, (SmallIcon(typeName)));
479#endif
411 item->setText(2, i->getHardwareName()); 480 item->setText(2, i->getHardwareName());
412 item->setText(3, QString("(%1)").arg(i->getInterfaceName())); 481 item->setText(3, QString("(%1)").arg(i->getInterfaceName()));
413 item->setText(4, (i->getStatus()) ? i->getIp() : QString("")); 482 item->setText(4, (i->getStatus()) ? i->getIp() : QString(""));
414} 483}
415 484
416void MainWindowImp::newProfileChanged(const QString& newText){ 485void MainWindowImp::newProfileChanged(const QString& newText){
417 if(newText.length() > 0) 486 if(newText.length() > 0)
418 newProfileButton->setEnabled(true); 487 newProfileButton->setEnabled(true);
419 else 488 else
420 newProfileButton->setEnabled(false); 489 newProfileButton->setEnabled(false);
421} 490}
422 491