Diffstat (limited to 'noncore/net/networksetup/mainwindowimp.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/net/networksetup/mainwindowimp.cpp | 521 |
1 files changed, 0 insertions, 521 deletions
diff --git a/noncore/net/networksetup/mainwindowimp.cpp b/noncore/net/networksetup/mainwindowimp.cpp deleted file mode 100644 index 9a17743..0000000 --- a/noncore/net/networksetup/mainwindowimp.cpp +++ b/dev/null | |||
@@ -1,521 +0,0 @@ | |||
1 | #include "mainwindowimp.h" | ||
2 | #include "addconnectionimp.h" | ||
3 | #include "interfaceinformationimp.h" | ||
4 | #include "interfacesetupimp.h" | ||
5 | #include "interfaces.h" | ||
6 | #include "module.h" | ||
7 | |||
8 | #include <qpushbutton.h> | ||
9 | #include <qlistbox.h> | ||
10 | #include <qlineedit.h> | ||
11 | #include <qlistview.h> | ||
12 | #include <qheader.h> | ||
13 | #include <qlabel.h> | ||
14 | |||
15 | #include <qmainwindow.h> | ||
16 | #include <qmessagebox.h> | ||
17 | |||
18 | #include <qpe/config.h> | ||
19 | #include <qpe/qlibrary.h> | ||
20 | #include <qpe/resource.h> | ||
21 | #include <qpe/qpeapplication.h> | ||
22 | |||
23 | #include <qlist.h> | ||
24 | #include <qdir.h> | ||
25 | #include <qfile.h> | ||
26 | #include <qtextstream.h> | ||
27 | |||
28 | #include <net/if.h> | ||
29 | #include <sys/ioctl.h> | ||
30 | |||
31 | #define DEFAULT_SCHEME "/var/lib/pcmcia/scheme" | ||
32 | |||
33 | MainWindowImp::MainWindowImp(QWidget *parent, const char *name) : MainWindow(parent, name, true), advancedUserMode(false), scheme(DEFAULT_SCHEME){ | ||
34 | connect(addConnectionButton, SIGNAL(clicked()), this, SLOT(addClicked())); | ||
35 | connect(removeConnectionButton, SIGNAL(clicked()), this, SLOT(removeClicked())); | ||
36 | connect(informationConnectionButton, SIGNAL(clicked()), this, SLOT(informationClicked())); | ||
37 | connect(configureConnectionButton, SIGNAL(clicked()), this, SLOT(configureClicked())); | ||
38 | |||
39 | connect(newProfileButton, SIGNAL(clicked()), this, SLOT(addProfile())); | ||
40 | connect(removeProfileButton, SIGNAL(clicked()), this, SLOT(removeProfile())); | ||
41 | connect(setCurrentProfileButton, SIGNAL(clicked()), this, SLOT(changeProfile())); | ||
42 | |||
43 | connect(newProfile, SIGNAL(textChanged(const QString&)), this, SLOT(newProfileChanged(const QString&))); | ||
44 | // Load connections. | ||
45 | loadModules(QPEApplication::qpeDir() + "/plugins/networksetup"); | ||
46 | getAllInterfaces(); | ||
47 | |||
48 | Interfaces i; | ||
49 | QStringList list = i.getInterfaceList(); | ||
50 | QMap<QString, Interface*>::Iterator it; | ||
51 | for ( QStringList::Iterator ni = list.begin(); ni != list.end(); ++ni ) { | ||
52 | bool found = false; | ||
53 | for( it = interfaceNames.begin(); it != interfaceNames.end(); ++it ){ | ||
54 | if(it.key() == (*ni)) | ||
55 | found = true; | ||
56 | } | ||
57 | if(!found){ | ||
58 | if(!(*ni).contains("_")){ | ||
59 | Interface *i = new Interface(this, *ni, false); | ||
60 | i->setAttached(false); | ||
61 | i->setHardwareName("Disconnected"); | ||
62 | interfaceNames.insert(i->getInterfaceName(), i); | ||
63 | updateInterface(i); | ||
64 | connect(i, SIGNAL(updateInterface(Interface *)), this, SLOT(updateInterface(Interface *))); | ||
65 | } | ||
66 | } | ||
67 | } | ||
68 | |||
69 | //getInterfaceList(); | ||
70 | connectionList->header()->hide(); | ||
71 | |||
72 | Config cfg("NetworkSetup"); | ||
73 | profiles = QStringList::split(" ", cfg.readEntry("Profiles", "All")); | ||
74 | for ( QStringList::Iterator it = profiles.begin(); it != profiles.end(); ++it) | ||
75 | profilesList->insertItem((*it)); | ||
76 | currentProfileLabel->setText(cfg.readEntry("CurrentProfile", "All")); | ||
77 | advancedUserMode = cfg.readBoolEntry("AdvancedUserMode", false); | ||
78 | scheme = cfg.readEntry("SchemeFile", DEFAULT_SCHEME); | ||
79 | |||
80 | QFile file(scheme); | ||
81 | if ( file.open(IO_ReadOnly) ) { // file opened successfully | ||
82 | QTextStream stream( &file ); // use a text stream | ||
83 | while ( !stream.eof() ) { // until end of file... | ||
84 | QString line = stream.readLine(); // line of text excluding '\n' | ||
85 | if(line.contains("SCHEME")){ | ||
86 | line = line.mid(7, line.length()); | ||
87 | currentProfileLabel->setText(line); | ||
88 | break; | ||
89 | } | ||
90 | } | ||
91 | file.close(); | ||
92 | } | ||
93 | } | ||
94 | |||
95 | /** | ||
96 | * Deconstructor. Save profiles. Delete loaded libraries. | ||
97 | */ | ||
98 | MainWindowImp::~MainWindowImp(){ | ||
99 | // Save profiles. | ||
100 | Config cfg("NetworkSetup"); | ||
101 | cfg.setGroup("General"); | ||
102 | cfg.writeEntry("Profiles", profiles.join(" ")); | ||
103 | |||
104 | // Delete all interfaces that don't have owners. | ||
105 | QMap<Interface*, QListViewItem*>::Iterator iIt; | ||
106 | for( iIt = items.begin(); iIt != items.end(); ++iIt ){ | ||
107 | if(iIt.key()->getModuleOwner() == NULL) | ||
108 | delete iIt.key(); | ||
109 | } | ||
110 | |||
111 | // Delete Modules and Libraries | ||
112 | QMap<Module*, QLibrary*>::Iterator it; | ||
113 | for( it = libraries.begin(); it != libraries.end(); ++it ){ | ||
114 | delete it.key(); | ||
115 | // I wonder why I can't delete the libraries | ||
116 | // What fucking shit this is. | ||
117 | //delete it.data(); | ||
118 | } | ||
119 | } | ||
120 | |||
121 | /** | ||
122 | * Query the kernel for all of the interfaces. | ||
123 | */ | ||
124 | void MainWindowImp::getAllInterfaces(){ | ||
125 | int sockfd = socket(AF_INET, SOCK_DGRAM, 0); | ||
126 | if(sockfd == -1) | ||
127 | return; | ||
128 | |||
129 | char buf[8*1024]; | ||
130 | struct ifconf ifc; | ||
131 | ifc.ifc_len = sizeof(buf); | ||
132 | ifc.ifc_req = (struct ifreq *) buf; | ||
133 | int result=ioctl(sockfd, SIOCGIFCONF, &ifc); | ||
134 | |||
135 | for (char* ptr = buf; ptr < buf + ifc.ifc_len; ){ | ||
136 | struct ifreq *ifr =(struct ifreq *) ptr; | ||
137 | int len = sizeof(struct sockaddr); | ||
138 | #ifdef HAVE_SOCKADDR_SA_LEN | ||
139 | if (ifr->ifr_addr.sa_len > len) | ||
140 | len = ifr->ifr_addr.sa_len; /* length > 16 */ | ||
141 | #endif | ||
142 | ptr += sizeof(ifr->ifr_name) + len; /* for next one in buffer */ | ||
143 | |||
144 | int flags; | ||
145 | struct sockaddr_in *sinptr; | ||
146 | Interface *i = NULL; | ||
147 | switch (ifr->ifr_addr.sa_family){ | ||
148 | case AF_INET: | ||
149 | sinptr = (struct sockaddr_in *) &ifr->ifr_addr; | ||
150 | flags=0; | ||
151 | |||
152 | struct ifreq ifcopy; | ||
153 | ifcopy=*ifr; | ||
154 | result=ioctl(sockfd,SIOCGIFFLAGS,&ifcopy); | ||
155 | flags=ifcopy.ifr_flags; | ||
156 | i = new Interface(this, ifr->ifr_name, false); | ||
157 | i->setAttached(true); | ||
158 | if ((flags & IFF_UP) == IFF_UP) | ||
159 | i->setStatus(true); | ||
160 | else | ||
161 | i->setStatus(false); | ||
162 | |||
163 | if ((flags & IFF_BROADCAST) == IFF_BROADCAST) | ||
164 | i->setHardwareName("Ethernet"); | ||
165 | else if ((flags & IFF_POINTOPOINT) == IFF_POINTOPOINT) | ||
166 | i->setHardwareName("Point to Point"); | ||
167 | else if ((flags & IFF_MULTICAST) == IFF_MULTICAST) | ||
168 | i->setHardwareName("Multicast"); | ||
169 | else if ((flags & IFF_LOOPBACK) == IFF_LOOPBACK) | ||
170 | i->setHardwareName("Loopback"); | ||
171 | else | ||
172 | i->setHardwareName("Unknown"); | ||
173 | |||
174 | interfaceNames.insert(i->getInterfaceName(), i); | ||
175 | updateInterface(i); | ||
176 | connect(i, SIGNAL(updateInterface(Interface *)), this, SLOT(updateInterface(Interface *))); | ||
177 | break; | ||
178 | |||
179 | default: | ||
180 | qDebug(ifr->ifr_name); | ||
181 | qDebug(QString("%1").arg(ifr->ifr_addr.sa_family).latin1()); | ||
182 | break; | ||
183 | } | ||
184 | } | ||
185 | } | ||
186 | |||
187 | /** | ||
188 | * Load all modules that are found in the path | ||
189 | * @param path a directory that is scaned for any plugins that can be loaded | ||
190 | * and attempts to load them | ||
191 | */ | ||
192 | void MainWindowImp::loadModules(const QString &path){ | ||
193 | //qDebug(path.latin1()); | ||
194 | QDir d(path); | ||
195 | if(!d.exists()) | ||
196 | return; | ||
197 | |||
198 | // Don't want sym links | ||
199 | d.setFilter( QDir::Files | QDir::NoSymLinks ); | ||
200 | const QFileInfoList *list = d.entryInfoList(); | ||
201 | QFileInfoListIterator it( *list ); | ||
202 | QFileInfo *fi; | ||
203 | while ( (fi=it.current()) ) { | ||
204 | if(fi->fileName().contains(".so")){ | ||
205 | loadPlugin(path + "/" + fi->fileName()); | ||
206 | } | ||
207 | ++it; | ||
208 | } | ||
209 | } | ||
210 | |||
211 | /** | ||
212 | * Attempt to load a function and resolve a function. | ||
213 | * @param pluginFileName - the name of the file in which to attempt to load | ||
214 | * @param resolveString - function pointer to resolve | ||
215 | * @return pointer to the function with name resolveString or NULL | ||
216 | */ | ||
217 | Module* MainWindowImp::loadPlugin(const QString &pluginFileName, const QString &resolveString){ | ||
218 | //qDebug(QString("MainWindowImp::loadPlugin: %1").arg(pluginFileName).latin1()); | ||
219 | QLibrary *lib = new QLibrary(pluginFileName); | ||
220 | void *functionPointer = lib->resolve(resolveString); | ||
221 | if( !functionPointer ){ | ||
222 | qDebug(QString("MainWindowImp: File: %1 is not a plugin, but though was.").arg(pluginFileName).latin1()); | ||
223 | delete lib; | ||
224 | return NULL; | ||
225 | } | ||
226 | |||
227 | // Try to get an object. | ||
228 | Module *object = ((Module* (*)()) functionPointer)(); | ||
229 | if(object == NULL){ | ||
230 | qDebug("MainWindowImp: Couldn't create object, but did load library!"); | ||
231 | delete lib; | ||
232 | return NULL; | ||
233 | } | ||
234 | |||
235 | // Store for deletion later | ||
236 | libraries.insert(object, lib); | ||
237 | return object; | ||
238 | } | ||
239 | |||
240 | /** | ||
241 | * 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 | ||
243 | */ | ||
244 | void MainWindowImp::addClicked(){ | ||
245 | QMap<Module*, QLibrary*>::Iterator it; | ||
246 | QMap<QString, QString> list; | ||
247 | QMap<QString, Module*> newInterfaceOwners; | ||
248 | //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"); | ||
250 | for( it = libraries.begin(); it != libraries.end(); ++it ){ | ||
251 | if(it.key()){ | ||
252 | (it.key())->possibleNewInterfaces(list); | ||
253 | } | ||
254 | } | ||
255 | // See if the list has anything that we can add. | ||
256 | if(list.count() == 0){ | ||
257 | QMessageBox::information(this, "Sorry", "Nothing to add.", QMessageBox::Ok); | ||
258 | return; | ||
259 | } | ||
260 | AddConnectionImp addNewConnection(this, "AddConnectionImp", true); | ||
261 | addNewConnection.addConnections(list); | ||
262 | addNewConnection.showMaximized(); | ||
263 | if(QDialog::Accepted == addNewConnection.exec()){ | ||
264 | QListViewItem *item = addNewConnection.registeredServicesList->currentItem(); | ||
265 | if(!item) | ||
266 | return; | ||
267 | |||
268 | for( it = libraries.begin(); it != libraries.end(); ++it ){ | ||
269 | if(it.key()){ | ||
270 | Interface *i = (it.key())->addNewInterface(item->text(0)); | ||
271 | if(i){ | ||
272 | interfaceNames.insert(i->getInterfaceName(), i); | ||
273 | updateInterface(i); | ||
274 | } | ||
275 | } | ||
276 | } | ||
277 | } | ||
278 | } | ||
279 | |||
280 | /** | ||
281 | * Prompt the user to see if they really want to do this. | ||
282 | * If they do then remove from the list and unload. | ||
283 | */ | ||
284 | void MainWindowImp::removeClicked(){ | ||
285 | QListViewItem *item = connectionList->currentItem(); | ||
286 | if(!item) { | ||
287 | QMessageBox::information(this, "Sorry","Please select an interface First.", QMessageBox::Ok); | ||
288 | return; | ||
289 | } | ||
290 | |||
291 | Interface *i = interfaceItems[item]; | ||
292 | if(i->getModuleOwner() == NULL){ | ||
293 | QMessageBox::information(this, "Can't remove interface.", "Interface is built in.", QMessageBox::Ok); | ||
294 | } | ||
295 | else{ | ||
296 | if(!i->getModuleOwner()->remove(i)) | ||
297 | QMessageBox::information(this, "Error", "Unable to remove.", QMessageBox::Ok); | ||
298 | else{ | ||
299 | QMessageBox::information(this, "Success", "Interface was removed.", QMessageBox::Ok); | ||
300 | // TODO memory managment.... | ||
301 | // who deletes the interface? | ||
302 | } | ||
303 | } | ||
304 | } | ||
305 | |||
306 | /** | ||
307 | * Pull up the configure about the currently selected interface. | ||
308 | * Report an error if no interface is selected. | ||
309 | * If the interface has a module owner then request its configure. | ||
310 | */ | ||
311 | void MainWindowImp::configureClicked(){ | ||
312 | QListViewItem *item = connectionList->currentItem(); | ||
313 | if(!item){ | ||
314 | QMessageBox::information(this, "Sorry","Please select an interface first.", QMessageBox::Ok); | ||
315 | return; | ||
316 | } | ||
317 | |||
318 | Interface *i = interfaceItems[item]; | ||
319 | if(i->getModuleOwner()){ | ||
320 | QWidget *moduleConfigure = i->getModuleOwner()->configure(i); | ||
321 | if(moduleConfigure != NULL){ | ||
322 | moduleConfigure->showMaximized(); | ||
323 | return; | ||
324 | } | ||
325 | } | ||
326 | |||
327 | InterfaceSetupImpDialog *configure = new InterfaceSetupImpDialog(0, "InterfaceSetupImp", i, true, Qt::WDestructiveClose); | ||
328 | QString currentProfileText = currentProfileLabel->text(); | ||
329 | if(currentProfileText.upper() == "ALL"); | ||
330 | currentProfileText = ""; | ||
331 | configure->setProfile(currentProfileText); | ||
332 | configure->showMaximized(); | ||
333 | } | ||
334 | |||
335 | /** | ||
336 | * Pull up the information about the currently selected interface. | ||
337 | * Report an error if no interface is selected. | ||
338 | * If the interface has a module owner then request its configure. | ||
339 | */ | ||
340 | void MainWindowImp::informationClicked(){ | ||
341 | QListViewItem *item = connectionList->currentItem(); | ||
342 | if(!item){ | ||
343 | QMessageBox::information(this, "Sorry","Please select an interface First.", QMessageBox::Ok); | ||
344 | return; | ||
345 | } | ||
346 | |||
347 | Interface *i = interfaceItems[item]; | ||
348 | if(!i->isAttached()){ | ||
349 | QMessageBox::information(this, "Sorry","No information about\na disconnected interface.", QMessageBox::Ok); | ||
350 | return; | ||
351 | } | ||
352 | |||
353 | if(i->getModuleOwner()){ | ||
354 | QWidget *moduleInformation = i->getModuleOwner()->information(i); | ||
355 | if(moduleInformation != NULL){ | ||
356 | moduleInformation->showMaximized(); | ||
357 | return; | ||
358 | } | ||
359 | } | ||
360 | InterfaceInformationImp information(0, "InterfaceSetupImp", i); | ||
361 | information.showMaximized(); | ||
362 | } | ||
363 | |||
364 | /** | ||
365 | * Update this interface. If no QListViewItem exists create one. | ||
366 | * @param Interface* pointer to the interface that needs to be updated. | ||
367 | */ | ||
368 | void MainWindowImp::updateInterface(Interface *i){ | ||
369 | if(!advancedUserMode){ | ||
370 | if(i->getInterfaceName() == "lo") | ||
371 | return; | ||
372 | } | ||
373 | |||
374 | QListViewItem *item = NULL; | ||
375 | |||
376 | // Find the interface, making it if needed. | ||
377 | if(items.find(i) == items.end()){ | ||
378 | item = new QListViewItem(connectionList, "", "", ""); | ||
379 | // See if you can't find a module owner for this interface | ||
380 | QMap<Module*, QLibrary*>::Iterator it; | ||
381 | for( it = libraries.begin(); it != libraries.end(); ++it ){ | ||
382 | if(it.key()->isOwner(i)) | ||
383 | i->setModuleOwner(it.key()); | ||
384 | } | ||
385 | items.insert(i, item); | ||
386 | interfaceItems.insert(item, i); | ||
387 | } | ||
388 | else | ||
389 | item = items[i]; | ||
390 | |||
391 | // Update the icons and information | ||
392 | item->setPixmap(0, (Resource::loadPixmap(i->getStatus() ? "up": "down"))); | ||
393 | |||
394 | QString typeName = "lan"; | ||
395 | if(i->getHardwareName().contains("Local Loopback")) | ||
396 | typeName = "lo"; | ||
397 | if(i->getInterfaceName().contains("irda")) | ||
398 | typeName = "irda"; | ||
399 | if(i->getInterfaceName().contains("wlan")) | ||
400 | typeName = "wlan"; | ||
401 | if(i->getInterfaceName().contains("usb")) | ||
402 | typeName = "usb"; | ||
403 | |||
404 | if(!i->isAttached()) | ||
405 | typeName = "connect_no"; | ||
406 | // Actually try to use the Module | ||
407 | if(i->getModuleOwner() != NULL) | ||
408 | typeName = i->getModuleOwner()->getPixmapName(i); | ||
409 | |||
410 | item->setPixmap(1, (Resource::loadPixmap(QString("networksetup/") + typeName))); | ||
411 | item->setText(2, i->getHardwareName()); | ||
412 | item->setText(3, QString("(%1)").arg(i->getInterfaceName())); | ||
413 | item->setText(4, (i->getStatus()) ? i->getIp() : QString("")); | ||
414 | } | ||
415 | |||
416 | void MainWindowImp::newProfileChanged(const QString& newText){ | ||
417 | if(newText.length() > 0) | ||
418 | newProfileButton->setEnabled(true); | ||
419 | else | ||
420 | newProfileButton->setEnabled(false); | ||
421 | } | ||
422 | |||
423 | /** | ||
424 | * Adds a new profile to the list of profiles. | ||
425 | * Don't add profiles that already exists. | ||
426 | * Appends to the list and QStringList | ||
427 | */ | ||
428 | void MainWindowImp::addProfile(){ | ||
429 | QString newProfileName = newProfile->text(); | ||
430 | if(profiles.grep(newProfileName).count() > 0){ | ||
431 | QMessageBox::information(this, "Can't Add","Profile already exists.", QMessageBox::Ok); | ||
432 | return; | ||
433 | } | ||
434 | profiles.append(newProfileName); | ||
435 | profilesList->insertItem(newProfileName); | ||
436 | } | ||
437 | |||
438 | /** | ||
439 | * Removes the currently selected profile in the combo. | ||
440 | * Doesn't delete if there are less then 2 profiles. | ||
441 | */ | ||
442 | void MainWindowImp::removeProfile(){ | ||
443 | if(profilesList->count() <= 1){ | ||
444 | QMessageBox::information(this, "Can't remove.","At least one profile\nis needed.", QMessageBox::Ok); | ||
445 | return; | ||
446 | } | ||
447 | QString profileToRemove = profilesList->currentText(); | ||
448 | if(profileToRemove == "All"){ | ||
449 | QMessageBox::information(this, "Can't remove.","Can't remove default.", QMessageBox::Ok); | ||
450 | return; | ||
451 | } | ||
452 | // Can't remove the curent profile | ||
453 | if(profileToRemove == currentProfileLabel->text()){ | ||
454 | QMessageBox::information(this, "Can't remove.",QString("%1 is the current profile.").arg(profileToRemove), QMessageBox::Ok); | ||
455 | return; | ||
456 | |||
457 | } | ||
458 | |||
459 | if(QMessageBox::information(this, "Question",QString("Remove profile: %1").arg(profileToRemove), QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Ok){ | ||
460 | profiles = QStringList::split(" ", profiles.join(" ").replace(QRegExp(profileToRemove), "")); | ||
461 | profilesList->clear(); | ||
462 | for ( QStringList::Iterator it = profiles.begin(); it != profiles.end(); ++it) | ||
463 | profilesList->insertItem((*it)); | ||
464 | |||
465 | // Remove any interface settings and mappings. | ||
466 | Interfaces interfaces; | ||
467 | // Go through them one by one | ||
468 | QMap<Interface*, QListViewItem*>::Iterator it; | ||
469 | for( it = items.begin(); it != items.end(); ++it ){ | ||
470 | QString interfaceName = it.key()->getInterfaceName(); | ||
471 | qDebug(interfaceName.latin1()); | ||
472 | if(interfaces.setInterface(interfaceName + "_" + profileToRemove)){ | ||
473 | interfaces.removeInterface(); | ||
474 | if(interfaces.setMapping(interfaceName)){ | ||
475 | if(profilesList->count() == 1) | ||
476 | interfaces.removeMapping(); | ||
477 | else{ | ||
478 | interfaces.removeMap("map", interfaceName + "_" + profileToRemove); | ||
479 | } | ||
480 | } | ||
481 | interfaces.write(); | ||
482 | break; | ||
483 | } | ||
484 | } | ||
485 | } | ||
486 | } | ||
487 | |||
488 | /** | ||
489 | * A new profile has been selected, change. | ||
490 | * @param newProfile the new profile. | ||
491 | */ | ||
492 | void MainWindowImp::changeProfile(){ | ||
493 | if(profilesList->currentItem() == -1){ | ||
494 | QMessageBox::information(this, "Can't Change.","Please select a profile.", QMessageBox::Ok); | ||
495 | return; | ||
496 | } | ||
497 | QString newProfile = profilesList->text(profilesList->currentItem()); | ||
498 | if(newProfile != currentProfileLabel->text()){ | ||
499 | currentProfileLabel->setText(newProfile); | ||
500 | QFile::remove(scheme); | ||
501 | QFile file(scheme); | ||
502 | if ( file.open(IO_ReadWrite) ) { | ||
503 | QTextStream stream( &file ); | ||
504 | stream << QString("SCHEME=%1").arg(newProfile); | ||
505 | file.close(); | ||
506 | } | ||
507 | // restart all up devices? | ||
508 | if(QMessageBox::information(this, "Question","Restart all running interfaces?", QMessageBox::Ok, QMessageBox::No) == QMessageBox::Ok){ | ||
509 | // Go through them one by one | ||
510 | QMap<Interface*, QListViewItem*>::Iterator it; | ||
511 | for( it = items.begin(); it != items.end(); ++it ){ | ||
512 | if(it.key()->getStatus() == true) | ||
513 | it.key()->restart(); | ||
514 | } | ||
515 | } | ||
516 | } | ||
517 | // TODO change the profile in the modules | ||
518 | } | ||
519 | |||
520 | // mainwindowimp.cpp | ||
521 | |||