summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/networksetup/interfaces.cpp64
-rw-r--r--noncore/net/networksetup/interfaces.h4
-rw-r--r--noncore/net/networksetup/interfacesetupimp.cpp1
-rw-r--r--noncore/net/networksetup/mainwindowimp.cpp38
-rw-r--r--noncore/net/networksetup/mainwindowimp.h1
-rw-r--r--noncore/settings/networksettings/interfaces.cpp64
-rw-r--r--noncore/settings/networksettings/interfaces.h4
-rw-r--r--noncore/settings/networksettings/interfacesetupimp.cpp1
-rw-r--r--noncore/settings/networksettings/mainwindowimp.cpp38
-rw-r--r--noncore/settings/networksettings/mainwindowimp.h1
10 files changed, 186 insertions, 30 deletions
diff --git a/noncore/net/networksetup/interfaces.cpp b/noncore/net/networksetup/interfaces.cpp
index 0927258..9155890 100644
--- a/noncore/net/networksetup/interfaces.cpp
+++ b/noncore/net/networksetup/interfaces.cpp
@@ -314,100 +314,131 @@ bool Interfaces::setInterfaceFamily(QString newName){
314bool Interfaces::setInterfaceMethod(QString newName){ 314bool Interfaces::setInterfaceMethod(QString newName){
315 if(currentIface == interfaces.end()) 315 if(currentIface == interfaces.end())
316 return false; 316 return false;
317 bool returnValue = false; 317 bool returnValue = false;
318 (*currentIface) = QString("iface %1 %2 %3").arg(getInterfaceName(returnValue)).arg(getInterfaceFamily(returnValue)).arg(newName); 318 (*currentIface) = QString("iface %1 %2 %3").arg(getInterfaceName(returnValue)).arg(getInterfaceFamily(returnValue)).arg(newName);
319 return !returnValue; 319 return !returnValue;
320} 320}
321 321
322/** 322/**
323 * Get a value for an option in the currently selected interface. For example 323 * Get a value for an option in the currently selected interface. For example
324 * calling getInterfaceOption("address") on the following stanza would 324 * calling getInterfaceOption("address") on the following stanza would
325 * return 192.168.1.1. 325 * return 192.168.1.1.
326 * iface eth0 static 326 * iface eth0 static
327 * address 192.168.1.1 327 * address 192.168.1.1
328 * @param option the options to get the value. 328 * @param option the options to get the value.
329 * @param error set to true if any error occurs, false otherwise. 329 * @param error set to true if any error occurs, false otherwise.
330 * @return QString the options value. QString::null if error == true 330 * @return QString the options value. QString::null if error == true
331 */ 331 */
332QString Interfaces::getInterfaceOption(QString option, bool &error){ 332QString Interfaces::getInterfaceOption(QString option, bool &error){
333 return getOption(currentIface, option, error); 333 return getOption(currentIface, option, error);
334} 334}
335 335
336/** 336/**
337 * Set a value for an option in the currently selected interface. If option 337 * Set a value for an option in the currently selected interface. If option
338 * doesn't exist then it is added along with the value. If value is set to an 338 * doesn't exist then it is added along with the value.
339 * empty string then option is removed.
340 * @param option the options to set the value. 339 * @param option the options to set the value.
341 * @param value the value that option should be set to. 340 * @param value the value that option should be set to.
342 * @param error set to true if any error occurs, false otherwise. 341 * @param error set to true if any error occurs, false otherwise.
343 * @return QString the options value. QString::null if error == true 342 * @return QString the options value. QString::null if error == true
344 */ 343 */
345bool Interfaces::setInterfaceOption(QString option, QString value){ 344bool Interfaces::setInterfaceOption(QString option, QString value){
346 return setOption(currentIface, option, value); 345 return setOption(currentIface, option, value);
347} 346}
348 347
349/** 348/**
349 * Removes a value for an option in the currently selected interface.
350 * @param option the options to set the value.
351 * @param value the value that option should be set to.
352 * @param error set to true if any error occurs, false otherwise.
353 * @return QString the options value. QString::null if error == true
354 */
355bool Interfaces::removeInterfaceOption(QString option, QString value){
356 return removeOption(currentIface, option, value);
357}
358
359/**
350 * Removes all of the options from the currently selected interface. 360 * Removes all of the options from the currently selected interface.
351 * @return bool error if if successfull 361 * @return bool error if if successfull
352 */ 362 */
353bool Interfaces::removeAllInterfaceOptions(){ 363bool Interfaces::removeAllInterfaceOptions(){
354 return removeAllOptions(currentIface); 364 return removeAllOptions(currentIface);
355} 365}
356 366
357/** 367/**
358 * Set the current map to interface's map. This needs to be done before you 368 * Set the current map to interface's map. This needs to be done before you
359 * can call addMapping(), set/getMap(), and get/setScript(). 369 * can call addMapping(), set/getMap(), and get/setScript().
360 * @param interface the name of the interface to set. All whitespace is 370 * @param interface the name of the interface to set. All whitespace is
361 * removed from the interface name. 371 * removed from the interface name.
362 * @return bool true if it is successfull. 372 * @return bool true if it is successfull.
363 */ 373 */
364bool Interfaces::setMapping(QString interface){ 374bool Interfaces::setMapping(QString interface){
365 interface = interface.simplifyWhiteSpace(); 375 interface = interface.simplifyWhiteSpace();
366 interface = interface.replace(QRegExp(" "), ""); 376 interface = interface.replace(QRegExp(" "), "");
367 return setStanza(MAPPING, interface, currentMapping); 377 return setStanza(MAPPING, interface, currentMapping);
368} 378}
369 379
370/** 380/**
371 * Adds a new Mapping to the interfaces file with interfaces. 381 * Adds a new Mapping to the interfaces file with interfaces.
372 * @param interface the name(s) of the interfaces to set to this mapping 382 * @param interface the name(s) of the interfaces to set to this mapping
373 */ 383 */
374void Interfaces::addMapping(QString option){ 384void Interfaces::addMapping(QString option){
375 interfaces.append(""); 385 interfaces.append("");
376 interfaces.append(QString(MAPPING " %1").arg(option)); 386 interfaces.append(QString(MAPPING " %1").arg(option));
377} 387}
378 388
379/** 389/**
390 * Remove the currently selected map and all of its options.
391 * @return bool if successfull or not.
392 */
393bool Interfaces::removeMapping(){
394 if(currentMapping == interfaces.end())
395 return false;
396 (*currentMapping) = "";
397 return removeAllOptions(currentMapping);
398}
399
400/**
380 * Set a map option within a mapping. 401 * Set a map option within a mapping.
381 * @param map map to use 402 * @param map map to use
382 * @param value value to go with map 403 * @param value value to go with map
383 * @return bool true if it is successfull. 404 * @return bool true if it is successfull.
384 */ 405 */
385bool Interfaces::setMap(QString map, QString value){ 406bool Interfaces::setMap(QString map, QString value){
386 return setOption(currentMapping, map, value); 407 return setOption(currentMapping, map, value);
387} 408}
388 409
389/** 410/**
411 * Removes a map option within a mapping.
412 * @param map map to use
413 * @param value value to go with map
414 * @return bool true if it is successfull.
415 */
416bool Interfaces::removeMap(QString map, QString value){
417 return removeOption(currentMapping, map, value);
418}
419
420/**
390 * Get a map value within a mapping. 421 * Get a map value within a mapping.
391 * @param map map to get value of 422 * @param map map to get value of
392 * @param bool true if it is successfull. 423 * @param bool true if it is successfull.
393 * @return value that goes to the map 424 * @return value that goes to the map
394 */ 425 */
395QString Interfaces::getMap(QString map, bool &error){ 426QString Interfaces::getMap(QString map, bool &error){
396 return getOption(currentMapping, map, error); 427 return getOption(currentMapping, map, error);
397} 428}
398 429
399/** 430/**
400 * Sets a script value of the current mapping to argument. 431 * Sets a script value of the current mapping to argument.
401 * @param argument the script name. 432 * @param argument the script name.
402 * @return true if successfull. 433 * @return true if successfull.
403 */ 434 */
404bool Interfaces::setScript(QString argument){ 435bool Interfaces::setScript(QString argument){
405 return setOption(currentMapping, "script", argument); 436 return setOption(currentMapping, "script", argument);
406} 437}
407 438
408/** 439/**
409 * @param error true if could not retrieve the current script argument. 440 * @param error true if could not retrieve the current script argument.
410 * @return QString the argument of the script for the current mapping. 441 * @return QString the argument of the script for the current mapping.
411 */ 442 */
412QString Interfaces::getScript(bool &error){ 443QString Interfaces::getScript(bool &error){
413 return getOption(currentMapping, "script", error); 444 return getOption(currentMapping, "script", error);
@@ -456,61 +487,84 @@ bool Interfaces::setStanza(QString stanza, QString option, QStringList::Iterator
456 * Sets a value of an option in a stanza 487 * Sets a value of an option in a stanza
457 * @param start the start of the stanza 488 * @param start the start of the stanza
458 * @param option the option to use when setting value. 489 * @param option the option to use when setting value.
459 * @return bool true if successfull, false otherwise. 490 * @return bool true if successfull, false otherwise.
460 */ 491 */
461bool Interfaces::setOption(QStringList::Iterator start, QString option, QString value){ 492bool Interfaces::setOption(QStringList::Iterator start, QString option, QString value){
462 if(start == interfaces.end()) 493 if(start == interfaces.end())
463 return false; 494 return false;
464 495
465 bool found = false; 496 bool found = false;
466 for ( QStringList::Iterator it = start; it != interfaces.end(); ++it ) { 497 for ( QStringList::Iterator it = start; it != interfaces.end(); ++it ) {
467 if(((*it).contains(IFACE) || (*it).contains(MAPPING) || (*it).contains(AUTO)) && it != start){ 498 if(((*it).contains(IFACE) || (*it).contains(MAPPING) || (*it).contains(AUTO)) && it != start){
468 if(!found && value != ""){ 499 if(!found && value != ""){
469 // Got to the end of the stanza without finding it, so append it. 500 // Got to the end of the stanza without finding it, so append it.
470 interfaces.insert(--it, QString("\t%1 %2").arg(option).arg(value)); 501 interfaces.insert(--it, QString("\t%1 %2").arg(option).arg(value));
471 } 502 }
472 found = true; 503 found = true;
473 break; 504 break;
474 } 505 }
475 if((*it).contains(option) && it != start){ 506 if((*it).contains(option) && it != start){
476 // Found it in stanza so replace it. 507 // Found it in stanza so replace it.
477 if(found) 508 if(found)
478 qDebug(QString("Interfaces: Set Options found more then one value for option: %1 in stanza: %1").arg(option).arg((*start)).latin1()); 509 qDebug(QString("Interfaces: Set Options found more then one value for option: %1 in stanza: %1").arg(option).arg((*start)).latin1());
479 found = true; 510 found = true;
480 if(value == "")
481 (*it) = "";
482 else
483 (*it) = QString("\t%1 %2").arg(option).arg(value); 511 (*it) = QString("\t%1 %2").arg(option).arg(value);
484 } 512 }
485 } 513 }
486 if(!found){ 514 if(!found){
487 QStringList::Iterator p = start; 515 QStringList::Iterator p = start;
488 interfaces.insert(++p, QString("\t%1 %2").arg(option).arg(value)); 516 interfaces.insert(++p, QString("\t%1 %2").arg(option).arg(value));
489 found = true; 517 found = true;
490 } 518 }
491 return found; 519 return found;
492} 520}
521/**
522 * Removes a option in a stanza
523 * @param start the start of the stanza
524 * @param option the option to use when setting value.
525 * @return bool true if successfull, false otherwise.
526 */
527bool Interfaces::removeOption(QStringList::Iterator start, QString option, QString value){
528 if(start == interfaces.end())
529 return false;
530
531 bool found = false;
532 for ( QStringList::Iterator it = start; it != interfaces.end(); ++it ) {
533 if(((*it).contains(IFACE) || (*it).contains(MAPPING) || (*it).contains(AUTO)) && it != start){
534 // got to the end without finding it
535 break;
536 }
537 if((*it).contains(option) && (*it).contains(value) &&it != start){
538 // Found it in stanza so replace it.
539 if(found)
540 qDebug(QString("Interfaces: Set Options found more then one value for option: %1 in stanza: %1").arg(option).arg((*start)).latin1());
541 found = true;
542 (*it) = "";
543 }
544 }
545 return found;
546}
493 547
494/** 548/**
495 * Removes all options in a stanza 549 * Removes all options in a stanza
496 * @param start the start of the stanza 550 * @param start the start of the stanza
497 * @return bool true if successfull, false otherwise. 551 * @return bool true if successfull, false otherwise.
498 */ 552 */
499bool Interfaces::removeAllOptions(QStringList::Iterator start){ 553bool Interfaces::removeAllOptions(QStringList::Iterator start){
500 if(start == interfaces.end()) 554 if(start == interfaces.end())
501 return false; 555 return false;
502 556
503 QStringList::Iterator it = start; 557 QStringList::Iterator it = start;
504 it = ++it; 558 it = ++it;
505 for (it; it != interfaces.end(); ++it ) { 559 for (it; it != interfaces.end(); ++it ) {
506 if(((*it).contains(IFACE) || (*it).contains(MAPPING) || (*it).contains(AUTO)) && it != start){ 560 if(((*it).contains(IFACE) || (*it).contains(MAPPING) || (*it).contains(AUTO)) && it != start){
507 break; 561 break;
508 } 562 }
509 it = interfaces.remove(it); 563 it = interfaces.remove(it);
510 it = --it; 564 it = --it;
511 } 565 }
512 // Leave a space between this interface and the next. 566 // Leave a space between this interface and the next.
513 interfaces.insert(it, QString("")); 567 interfaces.insert(it, QString(""));
514 return true; 568 return true;
515} 569}
516 570
diff --git a/noncore/net/networksetup/interfaces.h b/noncore/net/networksetup/interfaces.h
index 7cf04f0..e09ea71 100644
--- a/noncore/net/networksetup/interfaces.h
+++ b/noncore/net/networksetup/interfaces.h
@@ -20,53 +20,57 @@
20 * See the interfaces man page for the syntax rules. 20 * See the interfaces man page for the syntax rules.
21 */ 21 */
22class Interfaces { 22class Interfaces {
23 23
24public: 24public:
25 Interfaces(QString useInterfacesFile = "/etc/network/interfaces"); 25 Interfaces(QString useInterfacesFile = "/etc/network/interfaces");
26 QStringList getInterfaceList(); 26 QStringList getInterfaceList();
27 27
28 bool isAuto(QString interface); 28 bool isAuto(QString interface);
29 bool setAuto(QString interface, bool setAuto); 29 bool setAuto(QString interface, bool setAuto);
30 30
31 bool removeInterface(); 31 bool removeInterface();
32 bool addInterface(QString interface, QString family, QString method); 32 bool addInterface(QString interface, QString family, QString method);
33 bool copyInterface(QString oldInterface, QString newInterface); 33 bool copyInterface(QString oldInterface, QString newInterface);
34 bool setInterface(QString interface); 34 bool setInterface(QString interface);
35 bool isInterfaceSet(); 35 bool isInterfaceSet();
36 QString getInterfaceName(bool &error); 36 QString getInterfaceName(bool &error);
37 bool setInterfaceName(QString newName); 37 bool setInterfaceName(QString newName);
38 QString getInterfaceFamily(bool &error); 38 QString getInterfaceFamily(bool &error);
39 bool setInterfaceFamily(QString newName); 39 bool setInterfaceFamily(QString newName);
40 QString getInterfaceMethod(bool &error); 40 QString getInterfaceMethod(bool &error);
41 bool setInterfaceMethod(QString newName); 41 bool setInterfaceMethod(QString newName);
42 QString getInterfaceOption(QString option, bool &error); 42 QString getInterfaceOption(QString option, bool &error);
43 bool setInterfaceOption(QString option, QString value); 43 bool setInterfaceOption(QString option, QString value);
44 bool removeInterfaceOption(QString option, QString value);
44 bool removeAllInterfaceOptions(); 45 bool removeAllInterfaceOptions();
45 46
46 bool setMapping(QString interface); 47 bool setMapping(QString interface);
48 bool removeMapping();
47 void addMapping(QString options); 49 void addMapping(QString options);
48 bool setMap(QString map, QString value); 50 bool setMap(QString map, QString value);
51 bool removeMap(QString map, QString value);
49 QString getMap(QString map, bool &error); 52 QString getMap(QString map, bool &error);
50 bool setScript(QString); 53 bool setScript(QString);
51 QString getScript(bool &error); 54 QString getScript(bool &error);
52 55
53 bool write(); 56 bool write();
54 57
55private: 58private:
56 bool setStanza(QString stanza, QString option,QStringList::Iterator &iterator); 59 bool setStanza(QString stanza, QString option,QStringList::Iterator &iterator);
57 bool setOption(QStringList::Iterator start, QString option, QString value); 60 bool setOption(QStringList::Iterator start, QString option, QString value);
61 bool removeOption(QStringList::Iterator start, QString option, QString value);
58 QString getOption(QStringList::Iterator start, QString option, bool &error); 62 QString getOption(QStringList::Iterator start, QString option, bool &error);
59 bool removeAllOptions(QStringList::Iterator start); 63 bool removeAllOptions(QStringList::Iterator start);
60 64
61 QString interfacesFile; 65 QString interfacesFile;
62 QStringList interfaces; 66 QStringList interfaces;
63 QStringList::Iterator currentIface; 67 QStringList::Iterator currentIface;
64 QStringList::Iterator currentMapping; 68 QStringList::Iterator currentMapping;
65 69
66 QStringList acceptedFamily; 70 QStringList acceptedFamily;
67}; 71};
68 72
69#endif 73#endif
70 74
71// interfaces 75// interfaces
72 76
diff --git a/noncore/net/networksetup/interfacesetupimp.cpp b/noncore/net/networksetup/interfacesetupimp.cpp
index bdbdfde..1327726 100644
--- a/noncore/net/networksetup/interfacesetupimp.cpp
+++ b/noncore/net/networksetup/interfacesetupimp.cpp
@@ -71,49 +71,48 @@ bool InterfaceSetupImp::saveSettings(){
71 } 71 }
72 else{ 72 else{
73 interfaces->setInterfaceMethod("static"); 73 interfaces->setInterfaceMethod("static");
74 interfaces->setInterfaceOption("address", ipAddressEdit->text()); 74 interfaces->setInterfaceOption("address", ipAddressEdit->text());
75 interfaces->setInterfaceOption("netmask", subnetMaskEdit->text()); 75 interfaces->setInterfaceOption("netmask", subnetMaskEdit->text());
76 interfaces->setInterfaceOption("gateway", gatewayEdit->text()); 76 interfaces->setInterfaceOption("gateway", gatewayEdit->text());
77 QString dns = firstDNSLineEdit->text() + " " + secondDNSLineEdit->text(); 77 QString dns = firstDNSLineEdit->text() + " " + secondDNSLineEdit->text();
78 interfaces->setInterfaceOption("up "DNSSCRIPT" add ", dns); 78 interfaces->setInterfaceOption("up "DNSSCRIPT" add ", dns);
79 interfaces->setInterfaceOption("down "DNSSCRIPT" remove ", dns); 79 interfaces->setInterfaceOption("down "DNSSCRIPT" remove ", dns);
80 } 80 }
81 81
82 // IP Information 82 // IP Information
83 interfaces->setAuto(interface->getInterfaceName(), autoStart->isChecked()); 83 interfaces->setAuto(interface->getInterfaceName(), autoStart->isChecked());
84 return true; 84 return true;
85} 85}
86 86
87/** 87/**
88 * The Profile has changed. 88 * The Profile has changed.
89 * @profile the new profile. 89 * @profile the new profile.
90 */ 90 */
91void InterfaceSetupImp::setProfile(const QString &profile){ 91void InterfaceSetupImp::setProfile(const QString &profile){
92 QString newInterfaceName = interface->getInterfaceName(); 92 QString newInterfaceName = interface->getInterfaceName();
93 if(profile.length() > 0) 93 if(profile.length() > 0)
94 newInterfaceName += "_" + profile; 94 newInterfaceName += "_" + profile;
95 qDebug( newInterfaceName.latin1());
96 // See if we have to make a interface. 95 // See if we have to make a interface.
97 if(!interfaces->setInterface(newInterfaceName)){ 96 if(!interfaces->setInterface(newInterfaceName)){
98 // Add making for this new interface if need too 97 // Add making for this new interface if need too
99 if(profile != ""){ 98 if(profile != ""){
100 interfaces->copyInterface(interface->getInterfaceName(), newInterfaceName); 99 interfaces->copyInterface(interface->getInterfaceName(), newInterfaceName);
101 if(!interfaces->setMapping(interface->getInterfaceName())){ 100 if(!interfaces->setMapping(interface->getInterfaceName())){
102 interfaces->addMapping(interface->getInterfaceName()); 101 interfaces->addMapping(interface->getInterfaceName());
103 if(!interfaces->setMapping(interface->getInterfaceName())){ 102 if(!interfaces->setMapping(interface->getInterfaceName())){
104 qDebug("InterfaceSetupImp: Added Mapping, but still can't set."); 103 qDebug("InterfaceSetupImp: Added Mapping, but still can't set.");
105 return; 104 return;
106 } 105 }
107 } 106 }
108 interfaces->setMap("map", newInterfaceName); 107 interfaces->setMap("map", newInterfaceName);
109 interfaces->setScript("getprofile.sh"); 108 interfaces->setScript("getprofile.sh");
110 } 109 }
111 else{ 110 else{
112 interfaces->addInterface(newInterfaceName, INTERFACES_FAMILY_INET, INTERFACES_METHOD_DHCP); 111 interfaces->addInterface(newInterfaceName, INTERFACES_FAMILY_INET, INTERFACES_METHOD_DHCP);
113 if(!interfaces->setInterface(newInterfaceName)){ 112 if(!interfaces->setInterface(newInterfaceName)){
114 qDebug("InterfaceSetupImp: Added interface, but still can't set."); 113 qDebug("InterfaceSetupImp: Added interface, but still can't set.");
115 return; 114 return;
116 } 115 }
117 } 116 }
118 } 117 }
119 118
diff --git a/noncore/net/networksetup/mainwindowimp.cpp b/noncore/net/networksetup/mainwindowimp.cpp
index 9f07f0d..01063c2 100644
--- a/noncore/net/networksetup/mainwindowimp.cpp
+++ b/noncore/net/networksetup/mainwindowimp.cpp
@@ -11,137 +11,139 @@
11#include <qpushbutton.h> 11#include <qpushbutton.h>
12#include <qtabwidget.h> 12#include <qtabwidget.h>
13#include <qlistbox.h> 13#include <qlistbox.h>
14#include <qlineedit.h> 14#include <qlineedit.h>
15#include <qlistview.h> 15#include <qlistview.h>
16#include <qheader.h> 16#include <qheader.h>
17#include <qlabel.h> 17#include <qlabel.h>
18 18
19#include <qmainwindow.h> 19#include <qmainwindow.h>
20#include <qmessagebox.h> 20#include <qmessagebox.h>
21 21
22#include <qpe/config.h> 22#include <qpe/config.h>
23#include <qpe/qlibrary.h> 23#include <qpe/qlibrary.h>
24#include <qpe/resource.h> 24#include <qpe/resource.h>
25#include <qpe/qpeapplication.h> 25#include <qpe/qpeapplication.h>
26 26
27#include <qlist.h> 27#include <qlist.h>
28#include <qdir.h> 28#include <qdir.h>
29#include <qfile.h> 29#include <qfile.h>
30#include <qtextstream.h> 30#include <qtextstream.h>
31 31
32#define TEMP_ALL "/tmp/ifconfig-a" 32#define TEMP_ALL "/tmp/ifconfig-a"
33#define TEMP_UP "/tmp/ifconfig" 33#define TEMP_UP "/tmp/ifconfig"
34 34
35#define SCHEME "/var/lib/pcmcia/scheme" 35#define DEFAULT_SCHEME "/var/lib/pcmcia/scheme"
36
36MainWindowImp::MainWindowImp(QWidget *parent, const char *name) : MainWindow(parent, name, true), advancedUserMode(false){ 37MainWindowImp::MainWindowImp(QWidget *parent, const char *name) : MainWindow(parent, name, true), advancedUserMode(false){
37 connect(addConnectionButton, SIGNAL(clicked()), this, SLOT(addClicked())); 38 connect(addConnectionButton, SIGNAL(clicked()), this, SLOT(addClicked()));
38 connect(removeConnectionButton, SIGNAL(clicked()), this, SLOT(removeClicked())); 39 connect(removeConnectionButton, SIGNAL(clicked()), this, SLOT(removeClicked()));
39 connect(informationConnectionButton, SIGNAL(clicked()), this, SLOT(informationClicked())); 40 connect(informationConnectionButton, SIGNAL(clicked()), this, SLOT(informationClicked()));
40 connect(configureConnectionButton, SIGNAL(clicked()), this, SLOT(configureClicked())); 41 connect(configureConnectionButton, SIGNAL(clicked()), this, SLOT(configureClicked()));
41 42
42 connect(newProfileButton, SIGNAL(clicked()), this, SLOT(addProfile())); 43 connect(newProfileButton, SIGNAL(clicked()), this, SLOT(addProfile()));
43 connect(removeProfileButton, SIGNAL(clicked()), this, SLOT(removeProfile())); 44 connect(removeProfileButton, SIGNAL(clicked()), this, SLOT(removeProfile()));
44 connect(setCurrentProfileButton, SIGNAL(clicked()), this, SLOT(changeProfile())); 45 connect(setCurrentProfileButton, SIGNAL(clicked()), this, SLOT(changeProfile()));
45 46
46 connect(newProfile, SIGNAL(textChanged(const QString&)), this, SLOT(newProfileChanged(const QString&))); 47 connect(newProfile, SIGNAL(textChanged(const QString&)), this, SLOT(newProfileChanged(const QString&)));
47 // Load connections. 48 // Load connections.
48 loadModules(QPEApplication::qpeDir() + "/plugins/networksetup"); 49 loadModules(QPEApplication::qpeDir() + "/plugins/networksetup");
49 getInterfaceList(); 50 getInterfaceList();
50 connectionList->header()->hide(); 51 connectionList->header()->hide();
51 52
52 53
53 Config cfg("NetworkSetup"); 54 Config cfg("NetworkSetup");
54 profiles = QStringList::split(" ", cfg.readEntry("Profiles", "All")); 55 profiles = QStringList::split(" ", cfg.readEntry("Profiles", "All"));
55 for ( QStringList::Iterator it = profiles.begin(); it != profiles.end(); ++it) 56 for ( QStringList::Iterator it = profiles.begin(); it != profiles.end(); ++it)
56 profilesList->insertItem((*it)); 57 profilesList->insertItem((*it));
57 currentProfileLabel->setText(cfg.readEntry("CurrentProfile", "All")); 58 currentProfileLabel->setText(cfg.readEntry("CurrentProfile", "All"));
58 advancedUserMode = cfg.readBoolEntry("AdvancedUserMode", false); 59 advancedUserMode = cfg.readBoolEntry("AdvancedUserMode", false);
60 scheme = cfg.readEntry("SchemeFile", DEFAULT_SCHEME);
59 61
60 QFile file(SCHEME); 62 QFile file(scheme);
61 if ( file.open(IO_ReadOnly) ) { // file opened successfully 63 if ( file.open(IO_ReadOnly) ) { // file opened successfully
62 QTextStream stream( &file ); // use a text stream 64 QTextStream stream( &file ); // use a text stream
63 while ( !stream.eof() ) { // until end of file... 65 while ( !stream.eof() ) { // until end of file...
64 QString line = stream.readLine(); // line of text excluding '\n' 66 QString line = stream.readLine(); // line of text excluding '\n'
65 if(line.contains("SCHEME")){ 67 if(line.contains("SCHEME")){
66 line = line.mid(7, line.length()); 68 line = line.mid(7, line.length());
67 currentProfileLabel->setText(line); 69 currentProfileLabel->setText(line);
68 break; 70 break;
69 } 71 }
70 } 72 }
71 file.close(); 73 file.close();
72 } 74 }
73} 75}
74 76
75/** 77/**
76 * Deconstructor. Save profiles. Delete loaded libraries. 78 * Deconstructor. Save profiles. Delete loaded libraries.
77 */ 79 */
78MainWindowImp::~MainWindowImp(){ 80MainWindowImp::~MainWindowImp(){
79 // Save profiles. 81 // Save profiles.
80 Config cfg("NetworkSetup"); 82 Config cfg("NetworkSetup");
81 cfg.setGroup("General"); 83 cfg.setGroup("General");
82 cfg.writeEntry("Profiles", profiles.join(" ")); 84 cfg.writeEntry("Profiles", profiles.join(" "));
83 85
84 // Delete Modules and Libraries 86 // Delete Modules and Libraries
85 QMap<Module*, QLibrary*>::Iterator it; 87 QMap<Module*, QLibrary*>::Iterator it;
86 for( it = libraries.begin(); it != libraries.end(); ++it ){ 88 for( it = libraries.begin(); it != libraries.end(); ++it ){
87 delete it.key(); 89 delete it.key();
88 delete it.data(); 90 delete it.data();
89 } 91 }
90} 92}
91 93
92/** 94/**
93 * Load all modules that are found in the path 95 * Load all modules that are found in the path
94 * @param path a directory that is scaned for any plugins that can be loaded 96 * @param path a directory that is scaned for any plugins that can be loaded
95 * and attempts to load them 97 * and attempts to load them
96 */ 98 */
97void MainWindowImp::loadModules(QString path){ 99void MainWindowImp::loadModules(QString path){
98 qDebug(path.latin1()); 100 //qDebug(path.latin1());
99 QDir d(path); 101 QDir d(path);
100 if(!d.exists()) 102 if(!d.exists())
101 return; 103 return;
102 104
103 // Don't want sym links 105 // Don't want sym links
104 d.setFilter( QDir::Files | QDir::NoSymLinks ); 106 d.setFilter( QDir::Files | QDir::NoSymLinks );
105 const QFileInfoList *list = d.entryInfoList(); 107 const QFileInfoList *list = d.entryInfoList();
106 QFileInfoListIterator it( *list ); 108 QFileInfoListIterator it( *list );
107 QFileInfo *fi; 109 QFileInfo *fi;
108 while ( (fi=it.current()) ) { 110 while ( (fi=it.current()) ) {
109 if(fi->fileName().contains(".so")){ 111 if(fi->fileName().contains(".so")){
110 loadPlugin(path + "/" + fi->fileName()); 112 loadPlugin(path + "/" + fi->fileName());
111 } 113 }
112 ++it; 114 ++it;
113 } 115 }
114} 116}
115 117
116/** 118/**
117 * Attempt to load a function and resolve a function. 119 * Attempt to load a function and resolve a function.
118 * @param pluginFileName - the name of the file in which to attempt to load 120 * @param pluginFileName - the name of the file in which to attempt to load
119 * @param resolveString - function pointer to resolve 121 * @param resolveString - function pointer to resolve
120 * @return pointer to the function with name resolveString or NULL 122 * @return pointer to the function with name resolveString or NULL
121 */ 123 */
122Module* MainWindowImp::loadPlugin(QString pluginFileName, QString resolveString){ 124Module* MainWindowImp::loadPlugin(QString pluginFileName, QString resolveString){
123 qDebug(QString("MainWindowImp::loadPlugin: %1").arg(pluginFileName).latin1()); 125 //qDebug(QString("MainWindowImp::loadPlugin: %1").arg(pluginFileName).latin1());
124 QLibrary *lib = new QLibrary(pluginFileName); 126 QLibrary *lib = new QLibrary(pluginFileName);
125 void *functionPointer = lib->resolve(resolveString); 127 void *functionPointer = lib->resolve(resolveString);
126 if( !functionPointer ){ 128 if( !functionPointer ){
127 qDebug(QString("MainWindowImp: File: %1 is not a plugin, but though was.").arg(pluginFileName).latin1()); 129 qDebug(QString("MainWindowImp: File: %1 is not a plugin, but though was.").arg(pluginFileName).latin1());
128 delete lib; 130 delete lib;
129 return NULL; 131 return NULL;
130 } 132 }
131 133
132 // Try to get an object. 134 // Try to get an object.
133 Module *object = ((Module* (*)()) functionPointer)(); 135 Module *object = ((Module* (*)()) functionPointer)();
134 if(object == NULL){ 136 if(object == NULL){
135 qDebug("MainWindowImp: Couldn't create object, but did load library!"); 137 qDebug("MainWindowImp: Couldn't create object, but did load library!");
136 delete lib; 138 delete lib;
137 return NULL; 139 return NULL;
138 } 140 }
139 141
140 // Store for deletion later 142 // Store for deletion later
141 libraries.insert(object, lib); 143 libraries.insert(object, lib);
142 return object; 144 return object;
143} 145}
144 146
145/** 147/**
146 * The Add button was clicked. Bring up the add dialog and if OK is hit 148 * The Add button was clicked. Bring up the add dialog and if OK is hit
147 * load the plugin and append it to the list 149 * load the plugin and append it to the list
@@ -469,63 +471,81 @@ void MainWindowImp::addProfile(){
469 * Doesn't delete if there are less then 2 profiles. 471 * Doesn't delete if there are less then 2 profiles.
470 */ 472 */
471void MainWindowImp::removeProfile(){ 473void MainWindowImp::removeProfile(){
472 if(profilesList->count() <= 1){ 474 if(profilesList->count() <= 1){
473 QMessageBox::information(this, "Can't remove.","At least one profile\nis needed.", "Ok"); 475 QMessageBox::information(this, "Can't remove.","At least one profile\nis needed.", "Ok");
474 return; 476 return;
475 } 477 }
476 QString profileToRemove = profilesList->currentText(); 478 QString profileToRemove = profilesList->currentText();
477 if(profileToRemove == "All"){ 479 if(profileToRemove == "All"){
478 QMessageBox::information(this, "Can't remove.","Can't remove default.", "Ok"); 480 QMessageBox::information(this, "Can't remove.","Can't remove default.", "Ok");
479 return; 481 return;
480 } 482 }
481 // Can't remove the curent profile 483 // Can't remove the curent profile
482 if(profileToRemove == currentProfileLabel->text()){ 484 if(profileToRemove == currentProfileLabel->text()){
483 QMessageBox::information(this, "Can't remove.",QString("%1 is the current profile.").arg(profileToRemove), "Ok"); 485 QMessageBox::information(this, "Can't remove.",QString("%1 is the current profile.").arg(profileToRemove), "Ok");
484 return; 486 return;
485 487
486 } 488 }
487 489
488 if(QMessageBox::information(this, "Question",QString("Remove profile: %1").arg(profileToRemove), QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Ok){ 490 if(QMessageBox::information(this, "Question",QString("Remove profile: %1").arg(profileToRemove), QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Ok){
489 profiles = QStringList::split(" ", profiles.join(" ").replace(QRegExp(profileToRemove), "")); 491 profiles = QStringList::split(" ", profiles.join(" ").replace(QRegExp(profileToRemove), ""));
490 profilesList->clear(); 492 profilesList->clear();
491 for ( QStringList::Iterator it = profiles.begin(); it != profiles.end(); ++it) 493 for ( QStringList::Iterator it = profiles.begin(); it != profiles.end(); ++it)
492 profilesList->insertItem((*it)); 494 profilesList->insertItem((*it));
493 }
494 495
495 // Remove any interface settings and mappings. 496 // Remove any interface settings and mappings.
496 //TODO 497 Interfaces interfaces;
498 // Go through them one by one
499 QMap<Interface*, QListViewItem*>::Iterator it;
500 for( it = items.begin(); it != items.end(); ++it ){
501 QString interfaceName = it.key()->getInterfaceName();
502 qDebug(interfaceName.latin1());
503 if(interfaces.setInterface(interfaceName + "_" + profileToRemove)){
504 interfaces.removeInterface();
505 if(interfaces.setMapping(interfaceName)){
506 if(profilesList->count() == 1)
507 interfaces.removeMapping();
508 else{
509 interfaces.removeMap("map", interfaceName + "_" + profileToRemove);
510 }
511 }
512 interfaces.write();
513 break;
514 }
515 }
516 }
497} 517}
498 518
499/** 519/**
500 * A new profile has been selected, change. 520 * A new profile has been selected, change.
501 * @param newProfile the new profile. 521 * @param newProfile the new profile.
502 */ 522 */
503void MainWindowImp::changeProfile(){ 523void MainWindowImp::changeProfile(){
504 if(profilesList->currentItem() == -1){ 524 if(profilesList->currentItem() == -1){
505 QMessageBox::information(this, "Can't Change.","Please select a profile.", "Ok"); 525 QMessageBox::information(this, "Can't Change.","Please select a profile.", "Ok");
506 return; 526 return;
507 } 527 }
508 QString newProfile = profilesList->text(profilesList->currentItem()); 528 QString newProfile = profilesList->text(profilesList->currentItem());
509 if(newProfile != currentProfileLabel->text()){ 529 if(newProfile != currentProfileLabel->text()){
510 currentProfileLabel->setText(newProfile); 530 currentProfileLabel->setText(newProfile);
511 QFile::remove(SCHEME); 531 QFile::remove(scheme);
512 QFile file(SCHEME); 532 QFile file(scheme);
513 if ( file.open(IO_ReadWrite) ) { 533 if ( file.open(IO_ReadWrite) ) {
514 QTextStream stream( &file ); 534 QTextStream stream( &file );
515 stream << QString("SCHEME=%1").arg(newProfile); 535 stream << QString("SCHEME=%1").arg(newProfile);
516 file.close(); 536 file.close();
517 } 537 }
518 // restart all up devices? 538 // restart all up devices?
519 if(QMessageBox::information(this, "Question","Restart all running interfaces?", QMessageBox::Ok, QMessageBox::No) == QMessageBox::Ok){ 539 if(QMessageBox::information(this, "Question","Restart all running interfaces?", QMessageBox::Ok, QMessageBox::No) == QMessageBox::Ok){
520 // Go through them one by one 540 // Go through them one by one
521 QMap<Interface*, QListViewItem*>::Iterator it; 541 QMap<Interface*, QListViewItem*>::Iterator it;
522 for( it = items.begin(); it != items.end(); ++it ){ 542 for( it = items.begin(); it != items.end(); ++it ){
523 if(it.key()->getStatus() == true) 543 if(it.key()->getStatus() == true)
524 it.key()->restart(); 544 it.key()->restart();
525 } 545 }
526 } 546 }
527 } 547 }
528} 548}
529 549
530// mainwindowimp.cpp 550// mainwindowimp.cpp
531 551
diff --git a/noncore/net/networksetup/mainwindowimp.h b/noncore/net/networksetup/mainwindowimp.h
index c67c161..e5284b4 100644
--- a/noncore/net/networksetup/mainwindowimp.h
+++ b/noncore/net/networksetup/mainwindowimp.h
@@ -29,30 +29,31 @@ private slots:
29 void addProfile(); 29 void addProfile();
30 void removeProfile(); 30 void removeProfile();
31 void changeProfile(); 31 void changeProfile();
32 32
33 void updateInterface(Interface *i); 33 void updateInterface(Interface *i);
34 void newProfileChanged(const QString& newText); 34 void newProfileChanged(const QString& newText);
35 35
36private: 36private:
37 void loadModules(QString path); 37 void loadModules(QString path);
38 38
39 Module* loadPlugin(QString pluginFileName, 39 Module* loadPlugin(QString pluginFileName,
40 QString resolveString = "create_plugin"); 40 QString resolveString = "create_plugin");
41 41
42 // For our local list of names 42 // For our local list of names
43 QMap<QString, Interface*> interfaceNames; 43 QMap<QString, Interface*> interfaceNames;
44 44
45 QMap<Module*, QLibrary*> libraries; 45 QMap<Module*, QLibrary*> libraries;
46 QMap<Interface*, QListViewItem*> items; 46 QMap<Interface*, QListViewItem*> items;
47 QMap<QListViewItem*, Interface*> interfaceItems; 47 QMap<QListViewItem*, Interface*> interfaceItems;
48 48
49 QMap<KProcess*, QString> threads; 49 QMap<KProcess*, QString> threads;
50 QStringList profiles; 50 QStringList profiles;
51 51
52 bool advancedUserMode; 52 bool advancedUserMode;
53 QString scheme;
53}; 54};
54 55
55#endif 56#endif
56 57
57// mainwindowimp.h 58// mainwindowimp.h
58 59
diff --git a/noncore/settings/networksettings/interfaces.cpp b/noncore/settings/networksettings/interfaces.cpp
index 0927258..9155890 100644
--- a/noncore/settings/networksettings/interfaces.cpp
+++ b/noncore/settings/networksettings/interfaces.cpp
@@ -314,100 +314,131 @@ bool Interfaces::setInterfaceFamily(QString newName){
314bool Interfaces::setInterfaceMethod(QString newName){ 314bool Interfaces::setInterfaceMethod(QString newName){
315 if(currentIface == interfaces.end()) 315 if(currentIface == interfaces.end())
316 return false; 316 return false;
317 bool returnValue = false; 317 bool returnValue = false;
318 (*currentIface) = QString("iface %1 %2 %3").arg(getInterfaceName(returnValue)).arg(getInterfaceFamily(returnValue)).arg(newName); 318 (*currentIface) = QString("iface %1 %2 %3").arg(getInterfaceName(returnValue)).arg(getInterfaceFamily(returnValue)).arg(newName);
319 return !returnValue; 319 return !returnValue;
320} 320}
321 321
322/** 322/**
323 * Get a value for an option in the currently selected interface. For example 323 * Get a value for an option in the currently selected interface. For example
324 * calling getInterfaceOption("address") on the following stanza would 324 * calling getInterfaceOption("address") on the following stanza would
325 * return 192.168.1.1. 325 * return 192.168.1.1.
326 * iface eth0 static 326 * iface eth0 static
327 * address 192.168.1.1 327 * address 192.168.1.1
328 * @param option the options to get the value. 328 * @param option the options to get the value.
329 * @param error set to true if any error occurs, false otherwise. 329 * @param error set to true if any error occurs, false otherwise.
330 * @return QString the options value. QString::null if error == true 330 * @return QString the options value. QString::null if error == true
331 */ 331 */
332QString Interfaces::getInterfaceOption(QString option, bool &error){ 332QString Interfaces::getInterfaceOption(QString option, bool &error){
333 return getOption(currentIface, option, error); 333 return getOption(currentIface, option, error);
334} 334}
335 335
336/** 336/**
337 * Set a value for an option in the currently selected interface. If option 337 * Set a value for an option in the currently selected interface. If option
338 * doesn't exist then it is added along with the value. If value is set to an 338 * doesn't exist then it is added along with the value.
339 * empty string then option is removed.
340 * @param option the options to set the value. 339 * @param option the options to set the value.
341 * @param value the value that option should be set to. 340 * @param value the value that option should be set to.
342 * @param error set to true if any error occurs, false otherwise. 341 * @param error set to true if any error occurs, false otherwise.
343 * @return QString the options value. QString::null if error == true 342 * @return QString the options value. QString::null if error == true
344 */ 343 */
345bool Interfaces::setInterfaceOption(QString option, QString value){ 344bool Interfaces::setInterfaceOption(QString option, QString value){
346 return setOption(currentIface, option, value); 345 return setOption(currentIface, option, value);
347} 346}
348 347
349/** 348/**
349 * Removes a value for an option in the currently selected interface.
350 * @param option the options to set the value.
351 * @param value the value that option should be set to.
352 * @param error set to true if any error occurs, false otherwise.
353 * @return QString the options value. QString::null if error == true
354 */
355bool Interfaces::removeInterfaceOption(QString option, QString value){
356 return removeOption(currentIface, option, value);
357}
358
359/**
350 * Removes all of the options from the currently selected interface. 360 * Removes all of the options from the currently selected interface.
351 * @return bool error if if successfull 361 * @return bool error if if successfull
352 */ 362 */
353bool Interfaces::removeAllInterfaceOptions(){ 363bool Interfaces::removeAllInterfaceOptions(){
354 return removeAllOptions(currentIface); 364 return removeAllOptions(currentIface);
355} 365}
356 366
357/** 367/**
358 * Set the current map to interface's map. This needs to be done before you 368 * Set the current map to interface's map. This needs to be done before you
359 * can call addMapping(), set/getMap(), and get/setScript(). 369 * can call addMapping(), set/getMap(), and get/setScript().
360 * @param interface the name of the interface to set. All whitespace is 370 * @param interface the name of the interface to set. All whitespace is
361 * removed from the interface name. 371 * removed from the interface name.
362 * @return bool true if it is successfull. 372 * @return bool true if it is successfull.
363 */ 373 */
364bool Interfaces::setMapping(QString interface){ 374bool Interfaces::setMapping(QString interface){
365 interface = interface.simplifyWhiteSpace(); 375 interface = interface.simplifyWhiteSpace();
366 interface = interface.replace(QRegExp(" "), ""); 376 interface = interface.replace(QRegExp(" "), "");
367 return setStanza(MAPPING, interface, currentMapping); 377 return setStanza(MAPPING, interface, currentMapping);
368} 378}
369 379
370/** 380/**
371 * Adds a new Mapping to the interfaces file with interfaces. 381 * Adds a new Mapping to the interfaces file with interfaces.
372 * @param interface the name(s) of the interfaces to set to this mapping 382 * @param interface the name(s) of the interfaces to set to this mapping
373 */ 383 */
374void Interfaces::addMapping(QString option){ 384void Interfaces::addMapping(QString option){
375 interfaces.append(""); 385 interfaces.append("");
376 interfaces.append(QString(MAPPING " %1").arg(option)); 386 interfaces.append(QString(MAPPING " %1").arg(option));
377} 387}
378 388
379/** 389/**
390 * Remove the currently selected map and all of its options.
391 * @return bool if successfull or not.
392 */
393bool Interfaces::removeMapping(){
394 if(currentMapping == interfaces.end())
395 return false;
396 (*currentMapping) = "";
397 return removeAllOptions(currentMapping);
398}
399
400/**
380 * Set a map option within a mapping. 401 * Set a map option within a mapping.
381 * @param map map to use 402 * @param map map to use
382 * @param value value to go with map 403 * @param value value to go with map
383 * @return bool true if it is successfull. 404 * @return bool true if it is successfull.
384 */ 405 */
385bool Interfaces::setMap(QString map, QString value){ 406bool Interfaces::setMap(QString map, QString value){
386 return setOption(currentMapping, map, value); 407 return setOption(currentMapping, map, value);
387} 408}
388 409
389/** 410/**
411 * Removes a map option within a mapping.
412 * @param map map to use
413 * @param value value to go with map
414 * @return bool true if it is successfull.
415 */
416bool Interfaces::removeMap(QString map, QString value){
417 return removeOption(currentMapping, map, value);
418}
419
420/**
390 * Get a map value within a mapping. 421 * Get a map value within a mapping.
391 * @param map map to get value of 422 * @param map map to get value of
392 * @param bool true if it is successfull. 423 * @param bool true if it is successfull.
393 * @return value that goes to the map 424 * @return value that goes to the map
394 */ 425 */
395QString Interfaces::getMap(QString map, bool &error){ 426QString Interfaces::getMap(QString map, bool &error){
396 return getOption(currentMapping, map, error); 427 return getOption(currentMapping, map, error);
397} 428}
398 429
399/** 430/**
400 * Sets a script value of the current mapping to argument. 431 * Sets a script value of the current mapping to argument.
401 * @param argument the script name. 432 * @param argument the script name.
402 * @return true if successfull. 433 * @return true if successfull.
403 */ 434 */
404bool Interfaces::setScript(QString argument){ 435bool Interfaces::setScript(QString argument){
405 return setOption(currentMapping, "script", argument); 436 return setOption(currentMapping, "script", argument);
406} 437}
407 438
408/** 439/**
409 * @param error true if could not retrieve the current script argument. 440 * @param error true if could not retrieve the current script argument.
410 * @return QString the argument of the script for the current mapping. 441 * @return QString the argument of the script for the current mapping.
411 */ 442 */
412QString Interfaces::getScript(bool &error){ 443QString Interfaces::getScript(bool &error){
413 return getOption(currentMapping, "script", error); 444 return getOption(currentMapping, "script", error);
@@ -456,61 +487,84 @@ bool Interfaces::setStanza(QString stanza, QString option, QStringList::Iterator
456 * Sets a value of an option in a stanza 487 * Sets a value of an option in a stanza
457 * @param start the start of the stanza 488 * @param start the start of the stanza
458 * @param option the option to use when setting value. 489 * @param option the option to use when setting value.
459 * @return bool true if successfull, false otherwise. 490 * @return bool true if successfull, false otherwise.
460 */ 491 */
461bool Interfaces::setOption(QStringList::Iterator start, QString option, QString value){ 492bool Interfaces::setOption(QStringList::Iterator start, QString option, QString value){
462 if(start == interfaces.end()) 493 if(start == interfaces.end())
463 return false; 494 return false;
464 495
465 bool found = false; 496 bool found = false;
466 for ( QStringList::Iterator it = start; it != interfaces.end(); ++it ) { 497 for ( QStringList::Iterator it = start; it != interfaces.end(); ++it ) {
467 if(((*it).contains(IFACE) || (*it).contains(MAPPING) || (*it).contains(AUTO)) && it != start){ 498 if(((*it).contains(IFACE) || (*it).contains(MAPPING) || (*it).contains(AUTO)) && it != start){
468 if(!found && value != ""){ 499 if(!found && value != ""){
469 // Got to the end of the stanza without finding it, so append it. 500 // Got to the end of the stanza without finding it, so append it.
470 interfaces.insert(--it, QString("\t%1 %2").arg(option).arg(value)); 501 interfaces.insert(--it, QString("\t%1 %2").arg(option).arg(value));
471 } 502 }
472 found = true; 503 found = true;
473 break; 504 break;
474 } 505 }
475 if((*it).contains(option) && it != start){ 506 if((*it).contains(option) && it != start){
476 // Found it in stanza so replace it. 507 // Found it in stanza so replace it.
477 if(found) 508 if(found)
478 qDebug(QString("Interfaces: Set Options found more then one value for option: %1 in stanza: %1").arg(option).arg((*start)).latin1()); 509 qDebug(QString("Interfaces: Set Options found more then one value for option: %1 in stanza: %1").arg(option).arg((*start)).latin1());
479 found = true; 510 found = true;
480 if(value == "")
481 (*it) = "";
482 else
483 (*it) = QString("\t%1 %2").arg(option).arg(value); 511 (*it) = QString("\t%1 %2").arg(option).arg(value);
484 } 512 }
485 } 513 }
486 if(!found){ 514 if(!found){
487 QStringList::Iterator p = start; 515 QStringList::Iterator p = start;
488 interfaces.insert(++p, QString("\t%1 %2").arg(option).arg(value)); 516 interfaces.insert(++p, QString("\t%1 %2").arg(option).arg(value));
489 found = true; 517 found = true;
490 } 518 }
491 return found; 519 return found;
492} 520}
521/**
522 * Removes a option in a stanza
523 * @param start the start of the stanza
524 * @param option the option to use when setting value.
525 * @return bool true if successfull, false otherwise.
526 */
527bool Interfaces::removeOption(QStringList::Iterator start, QString option, QString value){
528 if(start == interfaces.end())
529 return false;
530
531 bool found = false;
532 for ( QStringList::Iterator it = start; it != interfaces.end(); ++it ) {
533 if(((*it).contains(IFACE) || (*it).contains(MAPPING) || (*it).contains(AUTO)) && it != start){
534 // got to the end without finding it
535 break;
536 }
537 if((*it).contains(option) && (*it).contains(value) &&it != start){
538 // Found it in stanza so replace it.
539 if(found)
540 qDebug(QString("Interfaces: Set Options found more then one value for option: %1 in stanza: %1").arg(option).arg((*start)).latin1());
541 found = true;
542 (*it) = "";
543 }
544 }
545 return found;
546}
493 547
494/** 548/**
495 * Removes all options in a stanza 549 * Removes all options in a stanza
496 * @param start the start of the stanza 550 * @param start the start of the stanza
497 * @return bool true if successfull, false otherwise. 551 * @return bool true if successfull, false otherwise.
498 */ 552 */
499bool Interfaces::removeAllOptions(QStringList::Iterator start){ 553bool Interfaces::removeAllOptions(QStringList::Iterator start){
500 if(start == interfaces.end()) 554 if(start == interfaces.end())
501 return false; 555 return false;
502 556
503 QStringList::Iterator it = start; 557 QStringList::Iterator it = start;
504 it = ++it; 558 it = ++it;
505 for (it; it != interfaces.end(); ++it ) { 559 for (it; it != interfaces.end(); ++it ) {
506 if(((*it).contains(IFACE) || (*it).contains(MAPPING) || (*it).contains(AUTO)) && it != start){ 560 if(((*it).contains(IFACE) || (*it).contains(MAPPING) || (*it).contains(AUTO)) && it != start){
507 break; 561 break;
508 } 562 }
509 it = interfaces.remove(it); 563 it = interfaces.remove(it);
510 it = --it; 564 it = --it;
511 } 565 }
512 // Leave a space between this interface and the next. 566 // Leave a space between this interface and the next.
513 interfaces.insert(it, QString("")); 567 interfaces.insert(it, QString(""));
514 return true; 568 return true;
515} 569}
516 570
diff --git a/noncore/settings/networksettings/interfaces.h b/noncore/settings/networksettings/interfaces.h
index 7cf04f0..e09ea71 100644
--- a/noncore/settings/networksettings/interfaces.h
+++ b/noncore/settings/networksettings/interfaces.h
@@ -20,53 +20,57 @@
20 * See the interfaces man page for the syntax rules. 20 * See the interfaces man page for the syntax rules.
21 */ 21 */
22class Interfaces { 22class Interfaces {
23 23
24public: 24public:
25 Interfaces(QString useInterfacesFile = "/etc/network/interfaces"); 25 Interfaces(QString useInterfacesFile = "/etc/network/interfaces");
26 QStringList getInterfaceList(); 26 QStringList getInterfaceList();
27 27
28 bool isAuto(QString interface); 28 bool isAuto(QString interface);
29 bool setAuto(QString interface, bool setAuto); 29 bool setAuto(QString interface, bool setAuto);
30 30
31 bool removeInterface(); 31 bool removeInterface();
32 bool addInterface(QString interface, QString family, QString method); 32 bool addInterface(QString interface, QString family, QString method);
33 bool copyInterface(QString oldInterface, QString newInterface); 33 bool copyInterface(QString oldInterface, QString newInterface);
34 bool setInterface(QString interface); 34 bool setInterface(QString interface);
35 bool isInterfaceSet(); 35 bool isInterfaceSet();
36 QString getInterfaceName(bool &error); 36 QString getInterfaceName(bool &error);
37 bool setInterfaceName(QString newName); 37 bool setInterfaceName(QString newName);
38 QString getInterfaceFamily(bool &error); 38 QString getInterfaceFamily(bool &error);
39 bool setInterfaceFamily(QString newName); 39 bool setInterfaceFamily(QString newName);
40 QString getInterfaceMethod(bool &error); 40 QString getInterfaceMethod(bool &error);
41 bool setInterfaceMethod(QString newName); 41 bool setInterfaceMethod(QString newName);
42 QString getInterfaceOption(QString option, bool &error); 42 QString getInterfaceOption(QString option, bool &error);
43 bool setInterfaceOption(QString option, QString value); 43 bool setInterfaceOption(QString option, QString value);
44 bool removeInterfaceOption(QString option, QString value);
44 bool removeAllInterfaceOptions(); 45 bool removeAllInterfaceOptions();
45 46
46 bool setMapping(QString interface); 47 bool setMapping(QString interface);
48 bool removeMapping();
47 void addMapping(QString options); 49 void addMapping(QString options);
48 bool setMap(QString map, QString value); 50 bool setMap(QString map, QString value);
51 bool removeMap(QString map, QString value);
49 QString getMap(QString map, bool &error); 52 QString getMap(QString map, bool &error);
50 bool setScript(QString); 53 bool setScript(QString);
51 QString getScript(bool &error); 54 QString getScript(bool &error);
52 55
53 bool write(); 56 bool write();
54 57
55private: 58private:
56 bool setStanza(QString stanza, QString option,QStringList::Iterator &iterator); 59 bool setStanza(QString stanza, QString option,QStringList::Iterator &iterator);
57 bool setOption(QStringList::Iterator start, QString option, QString value); 60 bool setOption(QStringList::Iterator start, QString option, QString value);
61 bool removeOption(QStringList::Iterator start, QString option, QString value);
58 QString getOption(QStringList::Iterator start, QString option, bool &error); 62 QString getOption(QStringList::Iterator start, QString option, bool &error);
59 bool removeAllOptions(QStringList::Iterator start); 63 bool removeAllOptions(QStringList::Iterator start);
60 64
61 QString interfacesFile; 65 QString interfacesFile;
62 QStringList interfaces; 66 QStringList interfaces;
63 QStringList::Iterator currentIface; 67 QStringList::Iterator currentIface;
64 QStringList::Iterator currentMapping; 68 QStringList::Iterator currentMapping;
65 69
66 QStringList acceptedFamily; 70 QStringList acceptedFamily;
67}; 71};
68 72
69#endif 73#endif
70 74
71// interfaces 75// interfaces
72 76
diff --git a/noncore/settings/networksettings/interfacesetupimp.cpp b/noncore/settings/networksettings/interfacesetupimp.cpp
index bdbdfde..1327726 100644
--- a/noncore/settings/networksettings/interfacesetupimp.cpp
+++ b/noncore/settings/networksettings/interfacesetupimp.cpp
@@ -71,49 +71,48 @@ bool InterfaceSetupImp::saveSettings(){
71 } 71 }
72 else{ 72 else{
73 interfaces->setInterfaceMethod("static"); 73 interfaces->setInterfaceMethod("static");
74 interfaces->setInterfaceOption("address", ipAddressEdit->text()); 74 interfaces->setInterfaceOption("address", ipAddressEdit->text());
75 interfaces->setInterfaceOption("netmask", subnetMaskEdit->text()); 75 interfaces->setInterfaceOption("netmask", subnetMaskEdit->text());
76 interfaces->setInterfaceOption("gateway", gatewayEdit->text()); 76 interfaces->setInterfaceOption("gateway", gatewayEdit->text());
77 QString dns = firstDNSLineEdit->text() + " " + secondDNSLineEdit->text(); 77 QString dns = firstDNSLineEdit->text() + " " + secondDNSLineEdit->text();
78 interfaces->setInterfaceOption("up "DNSSCRIPT" add ", dns); 78 interfaces->setInterfaceOption("up "DNSSCRIPT" add ", dns);
79 interfaces->setInterfaceOption("down "DNSSCRIPT" remove ", dns); 79 interfaces->setInterfaceOption("down "DNSSCRIPT" remove ", dns);
80 } 80 }
81 81
82 // IP Information 82 // IP Information
83 interfaces->setAuto(interface->getInterfaceName(), autoStart->isChecked()); 83 interfaces->setAuto(interface->getInterfaceName(), autoStart->isChecked());
84 return true; 84 return true;
85} 85}
86 86
87/** 87/**
88 * The Profile has changed. 88 * The Profile has changed.
89 * @profile the new profile. 89 * @profile the new profile.
90 */ 90 */
91void InterfaceSetupImp::setProfile(const QString &profile){ 91void InterfaceSetupImp::setProfile(const QString &profile){
92 QString newInterfaceName = interface->getInterfaceName(); 92 QString newInterfaceName = interface->getInterfaceName();
93 if(profile.length() > 0) 93 if(profile.length() > 0)
94 newInterfaceName += "_" + profile; 94 newInterfaceName += "_" + profile;
95 qDebug( newInterfaceName.latin1());
96 // See if we have to make a interface. 95 // See if we have to make a interface.
97 if(!interfaces->setInterface(newInterfaceName)){ 96 if(!interfaces->setInterface(newInterfaceName)){
98 // Add making for this new interface if need too 97 // Add making for this new interface if need too
99 if(profile != ""){ 98 if(profile != ""){
100 interfaces->copyInterface(interface->getInterfaceName(), newInterfaceName); 99 interfaces->copyInterface(interface->getInterfaceName(), newInterfaceName);
101 if(!interfaces->setMapping(interface->getInterfaceName())){ 100 if(!interfaces->setMapping(interface->getInterfaceName())){
102 interfaces->addMapping(interface->getInterfaceName()); 101 interfaces->addMapping(interface->getInterfaceName());
103 if(!interfaces->setMapping(interface->getInterfaceName())){ 102 if(!interfaces->setMapping(interface->getInterfaceName())){
104 qDebug("InterfaceSetupImp: Added Mapping, but still can't set."); 103 qDebug("InterfaceSetupImp: Added Mapping, but still can't set.");
105 return; 104 return;
106 } 105 }
107 } 106 }
108 interfaces->setMap("map", newInterfaceName); 107 interfaces->setMap("map", newInterfaceName);
109 interfaces->setScript("getprofile.sh"); 108 interfaces->setScript("getprofile.sh");
110 } 109 }
111 else{ 110 else{
112 interfaces->addInterface(newInterfaceName, INTERFACES_FAMILY_INET, INTERFACES_METHOD_DHCP); 111 interfaces->addInterface(newInterfaceName, INTERFACES_FAMILY_INET, INTERFACES_METHOD_DHCP);
113 if(!interfaces->setInterface(newInterfaceName)){ 112 if(!interfaces->setInterface(newInterfaceName)){
114 qDebug("InterfaceSetupImp: Added interface, but still can't set."); 113 qDebug("InterfaceSetupImp: Added interface, but still can't set.");
115 return; 114 return;
116 } 115 }
117 } 116 }
118 } 117 }
119 118
diff --git a/noncore/settings/networksettings/mainwindowimp.cpp b/noncore/settings/networksettings/mainwindowimp.cpp
index 9f07f0d..01063c2 100644
--- a/noncore/settings/networksettings/mainwindowimp.cpp
+++ b/noncore/settings/networksettings/mainwindowimp.cpp
@@ -11,137 +11,139 @@
11#include <qpushbutton.h> 11#include <qpushbutton.h>
12#include <qtabwidget.h> 12#include <qtabwidget.h>
13#include <qlistbox.h> 13#include <qlistbox.h>
14#include <qlineedit.h> 14#include <qlineedit.h>
15#include <qlistview.h> 15#include <qlistview.h>
16#include <qheader.h> 16#include <qheader.h>
17#include <qlabel.h> 17#include <qlabel.h>
18 18
19#include <qmainwindow.h> 19#include <qmainwindow.h>
20#include <qmessagebox.h> 20#include <qmessagebox.h>
21 21
22#include <qpe/config.h> 22#include <qpe/config.h>
23#include <qpe/qlibrary.h> 23#include <qpe/qlibrary.h>
24#include <qpe/resource.h> 24#include <qpe/resource.h>
25#include <qpe/qpeapplication.h> 25#include <qpe/qpeapplication.h>
26 26
27#include <qlist.h> 27#include <qlist.h>
28#include <qdir.h> 28#include <qdir.h>
29#include <qfile.h> 29#include <qfile.h>
30#include <qtextstream.h> 30#include <qtextstream.h>
31 31
32#define TEMP_ALL "/tmp/ifconfig-a" 32#define TEMP_ALL "/tmp/ifconfig-a"
33#define TEMP_UP "/tmp/ifconfig" 33#define TEMP_UP "/tmp/ifconfig"
34 34
35#define SCHEME "/var/lib/pcmcia/scheme" 35#define DEFAULT_SCHEME "/var/lib/pcmcia/scheme"
36
36MainWindowImp::MainWindowImp(QWidget *parent, const char *name) : MainWindow(parent, name, true), advancedUserMode(false){ 37MainWindowImp::MainWindowImp(QWidget *parent, const char *name) : MainWindow(parent, name, true), advancedUserMode(false){
37 connect(addConnectionButton, SIGNAL(clicked()), this, SLOT(addClicked())); 38 connect(addConnectionButton, SIGNAL(clicked()), this, SLOT(addClicked()));
38 connect(removeConnectionButton, SIGNAL(clicked()), this, SLOT(removeClicked())); 39 connect(removeConnectionButton, SIGNAL(clicked()), this, SLOT(removeClicked()));
39 connect(informationConnectionButton, SIGNAL(clicked()), this, SLOT(informationClicked())); 40 connect(informationConnectionButton, SIGNAL(clicked()), this, SLOT(informationClicked()));
40 connect(configureConnectionButton, SIGNAL(clicked()), this, SLOT(configureClicked())); 41 connect(configureConnectionButton, SIGNAL(clicked()), this, SLOT(configureClicked()));
41 42
42 connect(newProfileButton, SIGNAL(clicked()), this, SLOT(addProfile())); 43 connect(newProfileButton, SIGNAL(clicked()), this, SLOT(addProfile()));
43 connect(removeProfileButton, SIGNAL(clicked()), this, SLOT(removeProfile())); 44 connect(removeProfileButton, SIGNAL(clicked()), this, SLOT(removeProfile()));
44 connect(setCurrentProfileButton, SIGNAL(clicked()), this, SLOT(changeProfile())); 45 connect(setCurrentProfileButton, SIGNAL(clicked()), this, SLOT(changeProfile()));
45 46
46 connect(newProfile, SIGNAL(textChanged(const QString&)), this, SLOT(newProfileChanged(const QString&))); 47 connect(newProfile, SIGNAL(textChanged(const QString&)), this, SLOT(newProfileChanged(const QString&)));
47 // Load connections. 48 // Load connections.
48 loadModules(QPEApplication::qpeDir() + "/plugins/networksetup"); 49 loadModules(QPEApplication::qpeDir() + "/plugins/networksetup");
49 getInterfaceList(); 50 getInterfaceList();
50 connectionList->header()->hide(); 51 connectionList->header()->hide();
51 52
52 53
53 Config cfg("NetworkSetup"); 54 Config cfg("NetworkSetup");
54 profiles = QStringList::split(" ", cfg.readEntry("Profiles", "All")); 55 profiles = QStringList::split(" ", cfg.readEntry("Profiles", "All"));
55 for ( QStringList::Iterator it = profiles.begin(); it != profiles.end(); ++it) 56 for ( QStringList::Iterator it = profiles.begin(); it != profiles.end(); ++it)
56 profilesList->insertItem((*it)); 57 profilesList->insertItem((*it));
57 currentProfileLabel->setText(cfg.readEntry("CurrentProfile", "All")); 58 currentProfileLabel->setText(cfg.readEntry("CurrentProfile", "All"));
58 advancedUserMode = cfg.readBoolEntry("AdvancedUserMode", false); 59 advancedUserMode = cfg.readBoolEntry("AdvancedUserMode", false);
60 scheme = cfg.readEntry("SchemeFile", DEFAULT_SCHEME);
59 61
60 QFile file(SCHEME); 62 QFile file(scheme);
61 if ( file.open(IO_ReadOnly) ) { // file opened successfully 63 if ( file.open(IO_ReadOnly) ) { // file opened successfully
62 QTextStream stream( &file ); // use a text stream 64 QTextStream stream( &file ); // use a text stream
63 while ( !stream.eof() ) { // until end of file... 65 while ( !stream.eof() ) { // until end of file...
64 QString line = stream.readLine(); // line of text excluding '\n' 66 QString line = stream.readLine(); // line of text excluding '\n'
65 if(line.contains("SCHEME")){ 67 if(line.contains("SCHEME")){
66 line = line.mid(7, line.length()); 68 line = line.mid(7, line.length());
67 currentProfileLabel->setText(line); 69 currentProfileLabel->setText(line);
68 break; 70 break;
69 } 71 }
70 } 72 }
71 file.close(); 73 file.close();
72 } 74 }
73} 75}
74 76
75/** 77/**
76 * Deconstructor. Save profiles. Delete loaded libraries. 78 * Deconstructor. Save profiles. Delete loaded libraries.
77 */ 79 */
78MainWindowImp::~MainWindowImp(){ 80MainWindowImp::~MainWindowImp(){
79 // Save profiles. 81 // Save profiles.
80 Config cfg("NetworkSetup"); 82 Config cfg("NetworkSetup");
81 cfg.setGroup("General"); 83 cfg.setGroup("General");
82 cfg.writeEntry("Profiles", profiles.join(" ")); 84 cfg.writeEntry("Profiles", profiles.join(" "));
83 85
84 // Delete Modules and Libraries 86 // Delete Modules and Libraries
85 QMap<Module*, QLibrary*>::Iterator it; 87 QMap<Module*, QLibrary*>::Iterator it;
86 for( it = libraries.begin(); it != libraries.end(); ++it ){ 88 for( it = libraries.begin(); it != libraries.end(); ++it ){
87 delete it.key(); 89 delete it.key();
88 delete it.data(); 90 delete it.data();
89 } 91 }
90} 92}
91 93
92/** 94/**
93 * Load all modules that are found in the path 95 * Load all modules that are found in the path
94 * @param path a directory that is scaned for any plugins that can be loaded 96 * @param path a directory that is scaned for any plugins that can be loaded
95 * and attempts to load them 97 * and attempts to load them
96 */ 98 */
97void MainWindowImp::loadModules(QString path){ 99void MainWindowImp::loadModules(QString path){
98 qDebug(path.latin1()); 100 //qDebug(path.latin1());
99 QDir d(path); 101 QDir d(path);
100 if(!d.exists()) 102 if(!d.exists())
101 return; 103 return;
102 104
103 // Don't want sym links 105 // Don't want sym links
104 d.setFilter( QDir::Files | QDir::NoSymLinks ); 106 d.setFilter( QDir::Files | QDir::NoSymLinks );
105 const QFileInfoList *list = d.entryInfoList(); 107 const QFileInfoList *list = d.entryInfoList();
106 QFileInfoListIterator it( *list ); 108 QFileInfoListIterator it( *list );
107 QFileInfo *fi; 109 QFileInfo *fi;
108 while ( (fi=it.current()) ) { 110 while ( (fi=it.current()) ) {
109 if(fi->fileName().contains(".so")){ 111 if(fi->fileName().contains(".so")){
110 loadPlugin(path + "/" + fi->fileName()); 112 loadPlugin(path + "/" + fi->fileName());
111 } 113 }
112 ++it; 114 ++it;
113 } 115 }
114} 116}
115 117
116/** 118/**
117 * Attempt to load a function and resolve a function. 119 * Attempt to load a function and resolve a function.
118 * @param pluginFileName - the name of the file in which to attempt to load 120 * @param pluginFileName - the name of the file in which to attempt to load
119 * @param resolveString - function pointer to resolve 121 * @param resolveString - function pointer to resolve
120 * @return pointer to the function with name resolveString or NULL 122 * @return pointer to the function with name resolveString or NULL
121 */ 123 */
122Module* MainWindowImp::loadPlugin(QString pluginFileName, QString resolveString){ 124Module* MainWindowImp::loadPlugin(QString pluginFileName, QString resolveString){
123 qDebug(QString("MainWindowImp::loadPlugin: %1").arg(pluginFileName).latin1()); 125 //qDebug(QString("MainWindowImp::loadPlugin: %1").arg(pluginFileName).latin1());
124 QLibrary *lib = new QLibrary(pluginFileName); 126 QLibrary *lib = new QLibrary(pluginFileName);
125 void *functionPointer = lib->resolve(resolveString); 127 void *functionPointer = lib->resolve(resolveString);
126 if( !functionPointer ){ 128 if( !functionPointer ){
127 qDebug(QString("MainWindowImp: File: %1 is not a plugin, but though was.").arg(pluginFileName).latin1()); 129 qDebug(QString("MainWindowImp: File: %1 is not a plugin, but though was.").arg(pluginFileName).latin1());
128 delete lib; 130 delete lib;
129 return NULL; 131 return NULL;
130 } 132 }
131 133
132 // Try to get an object. 134 // Try to get an object.
133 Module *object = ((Module* (*)()) functionPointer)(); 135 Module *object = ((Module* (*)()) functionPointer)();
134 if(object == NULL){ 136 if(object == NULL){
135 qDebug("MainWindowImp: Couldn't create object, but did load library!"); 137 qDebug("MainWindowImp: Couldn't create object, but did load library!");
136 delete lib; 138 delete lib;
137 return NULL; 139 return NULL;
138 } 140 }
139 141
140 // Store for deletion later 142 // Store for deletion later
141 libraries.insert(object, lib); 143 libraries.insert(object, lib);
142 return object; 144 return object;
143} 145}
144 146
145/** 147/**
146 * The Add button was clicked. Bring up the add dialog and if OK is hit 148 * The Add button was clicked. Bring up the add dialog and if OK is hit
147 * load the plugin and append it to the list 149 * load the plugin and append it to the list
@@ -469,63 +471,81 @@ void MainWindowImp::addProfile(){
469 * Doesn't delete if there are less then 2 profiles. 471 * Doesn't delete if there are less then 2 profiles.
470 */ 472 */
471void MainWindowImp::removeProfile(){ 473void MainWindowImp::removeProfile(){
472 if(profilesList->count() <= 1){ 474 if(profilesList->count() <= 1){
473 QMessageBox::information(this, "Can't remove.","At least one profile\nis needed.", "Ok"); 475 QMessageBox::information(this, "Can't remove.","At least one profile\nis needed.", "Ok");
474 return; 476 return;
475 } 477 }
476 QString profileToRemove = profilesList->currentText(); 478 QString profileToRemove = profilesList->currentText();
477 if(profileToRemove == "All"){ 479 if(profileToRemove == "All"){
478 QMessageBox::information(this, "Can't remove.","Can't remove default.", "Ok"); 480 QMessageBox::information(this, "Can't remove.","Can't remove default.", "Ok");
479 return; 481 return;
480 } 482 }
481 // Can't remove the curent profile 483 // Can't remove the curent profile
482 if(profileToRemove == currentProfileLabel->text()){ 484 if(profileToRemove == currentProfileLabel->text()){
483 QMessageBox::information(this, "Can't remove.",QString("%1 is the current profile.").arg(profileToRemove), "Ok"); 485 QMessageBox::information(this, "Can't remove.",QString("%1 is the current profile.").arg(profileToRemove), "Ok");
484 return; 486 return;
485 487
486 } 488 }
487 489
488 if(QMessageBox::information(this, "Question",QString("Remove profile: %1").arg(profileToRemove), QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Ok){ 490 if(QMessageBox::information(this, "Question",QString("Remove profile: %1").arg(profileToRemove), QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Ok){
489 profiles = QStringList::split(" ", profiles.join(" ").replace(QRegExp(profileToRemove), "")); 491 profiles = QStringList::split(" ", profiles.join(" ").replace(QRegExp(profileToRemove), ""));
490 profilesList->clear(); 492 profilesList->clear();
491 for ( QStringList::Iterator it = profiles.begin(); it != profiles.end(); ++it) 493 for ( QStringList::Iterator it = profiles.begin(); it != profiles.end(); ++it)
492 profilesList->insertItem((*it)); 494 profilesList->insertItem((*it));
493 }
494 495
495 // Remove any interface settings and mappings. 496 // Remove any interface settings and mappings.
496 //TODO 497 Interfaces interfaces;
498 // Go through them one by one
499 QMap<Interface*, QListViewItem*>::Iterator it;
500 for( it = items.begin(); it != items.end(); ++it ){
501 QString interfaceName = it.key()->getInterfaceName();
502 qDebug(interfaceName.latin1());
503 if(interfaces.setInterface(interfaceName + "_" + profileToRemove)){
504 interfaces.removeInterface();
505 if(interfaces.setMapping(interfaceName)){
506 if(profilesList->count() == 1)
507 interfaces.removeMapping();
508 else{
509 interfaces.removeMap("map", interfaceName + "_" + profileToRemove);
510 }
511 }
512 interfaces.write();
513 break;
514 }
515 }
516 }
497} 517}
498 518
499/** 519/**
500 * A new profile has been selected, change. 520 * A new profile has been selected, change.
501 * @param newProfile the new profile. 521 * @param newProfile the new profile.
502 */ 522 */
503void MainWindowImp::changeProfile(){ 523void MainWindowImp::changeProfile(){
504 if(profilesList->currentItem() == -1){ 524 if(profilesList->currentItem() == -1){
505 QMessageBox::information(this, "Can't Change.","Please select a profile.", "Ok"); 525 QMessageBox::information(this, "Can't Change.","Please select a profile.", "Ok");
506 return; 526 return;
507 } 527 }
508 QString newProfile = profilesList->text(profilesList->currentItem()); 528 QString newProfile = profilesList->text(profilesList->currentItem());
509 if(newProfile != currentProfileLabel->text()){ 529 if(newProfile != currentProfileLabel->text()){
510 currentProfileLabel->setText(newProfile); 530 currentProfileLabel->setText(newProfile);
511 QFile::remove(SCHEME); 531 QFile::remove(scheme);
512 QFile file(SCHEME); 532 QFile file(scheme);
513 if ( file.open(IO_ReadWrite) ) { 533 if ( file.open(IO_ReadWrite) ) {
514 QTextStream stream( &file ); 534 QTextStream stream( &file );
515 stream << QString("SCHEME=%1").arg(newProfile); 535 stream << QString("SCHEME=%1").arg(newProfile);
516 file.close(); 536 file.close();
517 } 537 }
518 // restart all up devices? 538 // restart all up devices?
519 if(QMessageBox::information(this, "Question","Restart all running interfaces?", QMessageBox::Ok, QMessageBox::No) == QMessageBox::Ok){ 539 if(QMessageBox::information(this, "Question","Restart all running interfaces?", QMessageBox::Ok, QMessageBox::No) == QMessageBox::Ok){
520 // Go through them one by one 540 // Go through them one by one
521 QMap<Interface*, QListViewItem*>::Iterator it; 541 QMap<Interface*, QListViewItem*>::Iterator it;
522 for( it = items.begin(); it != items.end(); ++it ){ 542 for( it = items.begin(); it != items.end(); ++it ){
523 if(it.key()->getStatus() == true) 543 if(it.key()->getStatus() == true)
524 it.key()->restart(); 544 it.key()->restart();
525 } 545 }
526 } 546 }
527 } 547 }
528} 548}
529 549
530// mainwindowimp.cpp 550// mainwindowimp.cpp
531 551
diff --git a/noncore/settings/networksettings/mainwindowimp.h b/noncore/settings/networksettings/mainwindowimp.h
index c67c161..e5284b4 100644
--- a/noncore/settings/networksettings/mainwindowimp.h
+++ b/noncore/settings/networksettings/mainwindowimp.h
@@ -29,30 +29,31 @@ private slots:
29 void addProfile(); 29 void addProfile();
30 void removeProfile(); 30 void removeProfile();
31 void changeProfile(); 31 void changeProfile();
32 32
33 void updateInterface(Interface *i); 33 void updateInterface(Interface *i);
34 void newProfileChanged(const QString& newText); 34 void newProfileChanged(const QString& newText);
35 35
36private: 36private:
37 void loadModules(QString path); 37 void loadModules(QString path);
38 38
39 Module* loadPlugin(QString pluginFileName, 39 Module* loadPlugin(QString pluginFileName,
40 QString resolveString = "create_plugin"); 40 QString resolveString = "create_plugin");
41 41
42 // For our local list of names 42 // For our local list of names
43 QMap<QString, Interface*> interfaceNames; 43 QMap<QString, Interface*> interfaceNames;
44 44
45 QMap<Module*, QLibrary*> libraries; 45 QMap<Module*, QLibrary*> libraries;
46 QMap<Interface*, QListViewItem*> items; 46 QMap<Interface*, QListViewItem*> items;
47 QMap<QListViewItem*, Interface*> interfaceItems; 47 QMap<QListViewItem*, Interface*> interfaceItems;
48 48
49 QMap<KProcess*, QString> threads; 49 QMap<KProcess*, QString> threads;
50 QStringList profiles; 50 QStringList profiles;
51 51
52 bool advancedUserMode; 52 bool advancedUserMode;
53 QString scheme;
53}; 54};
54 55
55#endif 56#endif
56 57
57// mainwindowimp.h 58// mainwindowimp.h
58 59