summaryrefslogtreecommitdiff
path: root/noncore/settings/networksettings/mainwindow/mainwindowimp.cpp
authormickeyl <mickeyl>2004-07-06 18:34:54 (UTC)
committer mickeyl <mickeyl>2004-07-06 18:34:54 (UTC)
commitda843f0c0571fd3d67d797c8fa80e2672056af4b (patch) (side-by-side diff)
tree441b591b9e59ece79275bf83157cd023c24c6005 /noncore/settings/networksettings/mainwindow/mainwindowimp.cpp
parent7cb107b4be2d07ac8849d2ea1e41ea0318017048 (diff)
downloadopie-da843f0c0571fd3d67d797c8fa80e2672056af4b.zip
opie-da843f0c0571fd3d67d797c8fa80e2672056af4b.tar.gz
opie-da843f0c0571fd3d67d797c8fa80e2672056af4b.tar.bz2
CLEANUP: make networksettings directory structure packaging-friendly
Diffstat (limited to 'noncore/settings/networksettings/mainwindow/mainwindowimp.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/networksettings/mainwindow/mainwindowimp.cpp749
1 files changed, 749 insertions, 0 deletions
diff --git a/noncore/settings/networksettings/mainwindow/mainwindowimp.cpp b/noncore/settings/networksettings/mainwindow/mainwindowimp.cpp
new file mode 100644
index 0000000..5184630
--- a/dev/null
+++ b/noncore/settings/networksettings/mainwindow/mainwindowimp.cpp
@@ -0,0 +1,749 @@
+
+#include "mainwindowimp.h"
+#include "addconnectionimp.h"
+#include "interfaceinformationimp.h"
+#include "interfacesetupimp.h"
+#include "interfaces.h"
+#include "module.h"
+
+/* OPIE */
+#include <opie2/odebug.h>
+#include <qpe/qcopenvelope_qws.h>
+#include <qpe/qpeapplication.h>
+#include <qpe/config.h>
+#include <qpe/qlibrary.h>
+#include <qpe/resource.h>
+
+/* QT */
+#include <qpushbutton.h>
+#include <qlistbox.h>
+#include <qlineedit.h>
+#include <qlistview.h>
+#include <qheader.h>
+#include <qlabel.h>
+#include <qtabwidget.h> // in order to disable the profiles tab
+#include <qmessagebox.h>
+
+
+#if QT_VERSION < 300
+#include <qlist.h>
+#else
+#include <qptrlist.h>
+#endif
+#include <qdir.h>
+#include <qfile.h>
+#include <qtextstream.h>
+#include <qregexp.h>
+
+/* STD */
+#include <net/if.h>
+#include <sys/ioctl.h>
+#include <sys/socket.h>
+
+#define DEFAULT_SCHEME "/var/lib/pcmcia/scheme"
+#define _PROCNETDEV "/proc/net/dev"
+
+MainWindowImp::MainWindowImp(QWidget *parent, const char *name, WFlags) : MainWindow(parent, name, Qt::WStyle_ContextHelp), advancedUserMode(true), scheme(DEFAULT_SCHEME)
+{
+ connect(addConnectionButton, SIGNAL(clicked()), this, SLOT(addClicked()));
+ connect(removeConnectionButton, SIGNAL(clicked()), this, SLOT(removeClicked()));
+ connect(informationConnectionButton, SIGNAL(clicked()), this, SLOT(informationClicked()));
+ connect(configureConnectionButton, SIGNAL(clicked()), this, SLOT(configureClicked()));
+
+ connect(newProfileButton, SIGNAL(clicked()), this, SLOT(addProfile()));
+ connect(removeProfileButton, SIGNAL(clicked()), this, SLOT(removeProfile()));
+ connect(setCurrentProfileButton, SIGNAL(clicked()), this, SLOT(changeProfile()));
+
+ connect(newProfile, SIGNAL(textChanged(const QString&)), this, SLOT(newProfileChanged(const QString&)));
+
+ //FIXME: disable profiles for the moment:
+ tabWidget->setTabEnabled( tab, false );
+
+ // Load connections.
+ // /usr/local/kde/lib/libinterfaces.la
+#ifdef QWS
+ loadModules(QPEApplication::qpeDir() + "plugins/networksettings");
+#else
+ loader = KLibLoader::self();
+ loadModules(QString("/usr/")+KStandardDirs::kde_default("lib"));
+#endif
+ getAllInterfaces();
+
+ Interfaces i;
+ QStringList list = i.getInterfaceList();
+ QMap<QString, Interface*>::Iterator it;
+ for ( QStringList::Iterator ni = list.begin(); ni != list.end(); ++ni )
+ {
+ /*
+ * we skipped it in getAllInterfaces now
+ * we need to ignore it as well
+ */
+ if (m_handledIfaces.contains( *ni) )
+ {
+ odebug << "Not up iface handled by module" << oendl;
+ continue;
+ }
+ bool found = false;
+ for( it = interfaceNames.begin(); it != interfaceNames.end(); ++it )
+ {
+ if(it.key() == (*ni))
+ found = true;
+ }
+ if(!found)
+ {
+ if(!(*ni).contains("_"))
+ {
+ Interface *i = new Interface(this, *ni, false);
+ i->setAttached(false);
+ i->setHardwareName(tr("Disconnected"));
+ interfaceNames.insert(i->getInterfaceName(), i);
+ updateInterface(i);
+ connect(i, SIGNAL(updateInterface(Interface*)), this, SLOT(updateInterface(Interface*)));
+ }
+ }
+ }
+
+ //getInterfaceList();
+ connectionList->header()->hide();
+
+ Config cfg("NetworkSetup");
+ profiles = QStringList::split(" ", cfg.readEntry("Profiles", "All"));
+ for ( QStringList::Iterator it = profiles.begin();
+ it != profiles.end(); ++it)
+ profilesList->insertItem((*it));
+ currentProfileLabel->setText(cfg.readEntry("CurrentProfile", "All"));
+ advancedUserMode = cfg.readBoolEntry("AdvancedUserMode", false);
+ scheme = cfg.readEntry("SchemeFile", DEFAULT_SCHEME);
+
+ QFile file(scheme);
+ if ( file.open(IO_ReadOnly) )
+ { // file opened successfully
+ QTextStream stream( &file ); // use a text stream
+ while ( !stream.eof() )
+ { // until end of file...
+ QString line = stream.readLine(); // line of text excluding '\n'
+ if(line.contains("SCHEME"))
+ {
+ line = line.mid(7, line.length());
+ currentProfileLabel->setText(line);
+ break;
+ }
+ }
+ file.close();
+ }
+ makeChannel();
+}
+
+/**
+ * Deconstructor. Save profiles. Delete loaded libraries.
+ */
+MainWindowImp::~MainWindowImp()
+{
+ // Save profiles.
+ Config cfg("NetworkSetup");
+ cfg.setGroup("General");
+ cfg.writeEntry("Profiles", profiles.join(" "));
+
+ // Delete all interfaces that don't have owners.
+ QMap<Interface*, QListViewItem*>::Iterator iIt;
+ for( iIt = items.begin(); iIt != items.end(); ++iIt )
+ {
+ if(iIt.key()->getModuleOwner() == NULL)
+ delete iIt.key();
+ }
+
+#ifdef QWS
+ // Delete Modules and Libraries
+ QMap<Module*, QLibrary*>::Iterator it;
+ for( it = libraries.begin(); it != libraries.end(); ++it )
+ {
+ delete it.key();
+ // I wonder why I can't delete the libraries
+ // What fucking shit this is.
+ //delete it.data();
+ }
+#else
+ // klibloader automaticly deletes the libraries for us...
+#endif
+}
+
+/**
+ * Query the kernel for all of the interfaces.
+ */
+void MainWindowImp::getAllInterfaces()
+{
+ int sockfd = socket(PF_INET, SOCK_DGRAM, 0);
+ if(sockfd == -1)
+ return;
+
+ struct ifreq ifr;
+ QStringList ifaces;
+ QFile procFile(QString(_PROCNETDEV));
+ int result;
+ Interface *i;
+
+ if (! procFile.exists())
+ {
+ struct ifreq ifrs[100];
+ struct ifconf ifc;
+ ifc.ifc_len = sizeof(ifrs);
+ ifc.ifc_req = ifrs;
+ result = ioctl(sockfd, SIOCGIFCONF, &ifc);
+
+ for (unsigned int i = 0; i < ifc.ifc_len / sizeof(struct ifreq); i++)
+ {
+ struct ifreq *pifr = &ifrs[i];
+
+ ifaces += pifr->ifr_name;
+ }
+ }
+ else
+ {
+ procFile.open(IO_ReadOnly);
+ QString line;
+ QTextStream procTs(&procFile);
+ int loc = -1;
+
+ procTs.readLine(); // eat a line
+ procTs.readLine(); // eat a line
+ while((line = procTs.readLine().simplifyWhiteSpace()) != QString::null)
+ {
+ if((loc = line.find(":")) != -1)
+ {
+ ifaces += line.left(loc);
+ }
+ }
+ }
+
+ for (QStringList::Iterator it = ifaces.begin(); it != ifaces.end(); ++it)
+ {
+ int flags = 0;
+ if ( m_handledIfaces.contains( (*it) ) )
+ {
+ odebug << " " << (*it).latin1() << " is handled by a module" << oendl;
+ continue;
+ }
+ // int family;
+ i = NULL;
+
+ strcpy(ifr.ifr_name, (*it).latin1());
+
+ struct ifreq ifcopy;
+ ifcopy = ifr;
+ result = ioctl(sockfd, SIOCGIFFLAGS, &ifcopy);
+ flags = ifcopy.ifr_flags;
+ i = new Interface(this, ifr.ifr_name, false);
+ i->setAttached(true);
+ if ((flags & IFF_UP) == IFF_UP)
+ i->setStatus(true);
+ else
+ i->setStatus(false);
+
+ if ((flags & IFF_BROADCAST) == IFF_BROADCAST)
+ i->setHardwareName("Ethernet");
+ else if ((flags & IFF_POINTOPOINT) == IFF_POINTOPOINT)
+ i->setHardwareName("Point to Point");
+ else if ((flags & IFF_MULTICAST) == IFF_MULTICAST)
+ i->setHardwareName("Multicast");
+ else if ((flags & IFF_LOOPBACK) == IFF_LOOPBACK)
+ i->setHardwareName("Loopback");
+ else
+ i->setHardwareName("Unknown");
+
+ owarn << "Adding interface " << ifr.ifr_name << " to interfaceNames\n" << oendl;
+ interfaceNames.insert(i->getInterfaceName(), i);
+ updateInterface(i);
+ connect(i, SIGNAL(updateInterface(Interface*)),
+ this, SLOT(updateInterface(Interface*)));
+ }
+ // now lets ask the plugins too ;)
+ QMap<Module*, QLibrary*>::Iterator it;
+ QList<Interface> ilist;
+ for( it = libraries.begin(); it != libraries.end(); ++it )
+ {
+ if(it.key())
+ {
+ ilist = it.key()->getInterfaces();
+ for( i = ilist.first(); i != 0; i = ilist.next() )
+ {
+ owarn << "Adding interface " << i->getInterfaceName().latin1() << " to interfaceNames\n" << oendl;
+ interfaceNames.insert(i->getInterfaceName(), i);
+ updateInterface(i);
+ connect(i, SIGNAL(updateInterface(Interface*)),
+ this, SLOT(updateInterface(Interface*)));
+ }
+ }
+ }
+}
+
+/**
+ * Load all modules that are found in the path
+ * @param path a directory that is scaned for any plugins that can be loaded
+ * and attempts to load them
+ */
+void MainWindowImp::loadModules(const QString &path)
+{
+#ifdef DEBUG
+ odebug << "MainWindowImp::loadModules: " << path.latin1() << "" << oendl;
+#endif
+ QDir d(path);
+ if(!d.exists())
+ return;
+
+ // Don't want sym links
+ d.setFilter( QDir::Files | QDir::NoSymLinks );
+ const QFileInfoList *list = d.entryInfoList();
+ QFileInfoListIterator it( *list );
+ QFileInfo *fi;
+ while ( (fi=it.current()) )
+ {
+#ifdef QWS
+ if(fi->fileName().contains(".so"))
+ {
+#else
+ if(fi->fileName().contains(".so") && fi->fileName().contains("networksettings_"))
+ {
+#endif
+ loadPlugin(path + "/" + fi->fileName());
+ odebug << "loaded plugin: >" << QString(path + "/" + fi->fileName()).latin1() << "< " << oendl;
+ }
+ ++it;
+ }
+}
+
+/**
+ * Attempt to load a function and resolve a function.
+ * @param pluginFileName - the name of the file in which to attempt to load
+ * @param resolveString - function pointer to resolve
+ * @return pointer to the function with name resolveString or NULL
+ */
+Module* MainWindowImp::loadPlugin(const QString &pluginFileName, const QString &resolveString)
+{
+#ifdef DEBUG
+ odebug << "MainWindowImp::loadPlugin: " << pluginFileName.latin1() << ": resolving " << resolveString.latin1() << "" << oendl;
+#endif
+#ifdef QWS
+ QLibrary *lib = new QLibrary(pluginFileName);
+ void *functionPointer = lib->resolve(resolveString);
+ if( !functionPointer )
+ {
+#ifdef DEBUG
+ odebug << "MainWindowImp::loadPlugin: Warning: " << pluginFileName.latin1() << " is not a plugin" << oendl;
+#endif
+ delete lib;
+ return NULL;
+ }
+ // Try to get an object.
+ Module *object = ((Module* (*)()) functionPointer)();
+ if(object == NULL)
+ {
+#ifdef DEBUG
+ odebug << "MainWindowImp: Couldn't create object, but did load library!" << oendl;
+#endif
+ delete lib;
+ return NULL;
+ }
+
+ m_handledIfaces += object->handledInterfaceNames();
+ // Store for deletion later
+ libraries.insert(object, lib);
+ return object;
+
+#else
+ QLibrary *lib = loader->library(pluginFileName);
+ if( !lib || !lib->hasSymbol(resolveString) )
+ {
+ odebug << QString("MainWindowImp::loadPlugin: File: %1 is not a plugin, but though was.").arg(pluginFileName).latin1() << oendl;
+ return NULL;
+ }
+ // Try to get an object.
+ Module *object = ((Module* (*)()) lib->symbol(resolveString))();
+ if(object == NULL)
+ {
+#ifdef DEBUG
+ odebug << "MainWindowImp: Couldn't create object, but did load library!" << oendl;
+#endif
+ return NULL;
+ }
+#ifdef DEBUG
+ odebug << "MainWindowImp::loadPlugin:: Found object, storing." << oendl;
+#endif
+ // Store for deletion later
+ libraries.insert(object, lib);
+ return object;
+#endif
+}
+
+/**
+ * The Add button was clicked. Bring up the add dialog and if OK is hit
+ * load the plugin and append it to the list
+ */
+void MainWindowImp::addClicked()
+{
+ QMap<Module*, QLibrary*>::Iterator it;
+ QMap<QString, QString> list;
+ QMap<QString, Module*> newInterfaceOwners;
+
+ for( it = libraries.begin(); it != libraries.end(); ++it )
+ {
+ if(it.key())
+ {
+ (it.key())->possibleNewInterfaces(list);
+ }
+ }
+ // See if the list has anything that we can add.
+ if(list.count() == 0)
+ {
+ QMessageBox::information(this, "Sorry", "Nothing to add.", QMessageBox::Ok);
+ return;
+ }
+ AddConnectionImp addNewConnection(this, "AddConnectionImp", true);
+ addNewConnection.addConnections(list);
+ if( QDialog::Accepted == QPEApplication::execDialog( &addNewConnection ) )
+ {
+ QListViewItem *item = addNewConnection.registeredServicesList->currentItem();
+ if(!item)
+ return;
+
+ for( it = libraries.begin(); it != libraries.end(); ++it )
+ {
+ if(it.key())
+ {
+ Interface *i = (it.key())->addNewInterface(item->text(0));
+ if(i)
+ {
+ odebug << "iface name " << i->getInterfaceName().latin1() << "" << oendl;
+ interfaceNames.insert(i->getInterfaceName(), i);
+ updateInterface(i);
+ }
+ }
+ }
+ }
+}
+
+/**
+ * Prompt the user to see if they really want to do this.
+ * If they do then remove from the list and unload.
+ */
+void MainWindowImp::removeClicked()
+{
+ QListViewItem *item = connectionList->currentItem();
+ if(!item)
+ {
+ QMessageBox::information(this, "Sorry","Please select an interface First.", QMessageBox::Ok);
+ return;
+ }
+
+ Interface *i = interfaceItems[item];
+ if(i->getModuleOwner() == NULL)
+ {
+ QMessageBox::information(this, "Can't remove interface.", "Interface is built in.", QMessageBox::Ok);
+ }
+ else
+ {
+ if(!i->getModuleOwner()->remove(i))
+ QMessageBox::information(this, tr("Error"), tr("Unable to remove."), QMessageBox::Ok);
+ else
+ {
+ delete item;
+ // QMessageBox::information(this, "Success", "Interface was removed.", QMessageBox::Ok);
+ }
+ }
+}
+
+/**
+ * Pull up the configure about the currently selected interface.
+ * Report an error if no interface is selected.
+ * If the interface has a module owner then request its configure.
+ */
+void MainWindowImp::configureClicked()
+{
+ QListViewItem *item = connectionList->currentItem();
+ if(!item)
+ {
+ QMessageBox::information(this, tr("Sorry"),tr("Please select an interface first."), QMessageBox::Ok);
+ return;
+ }
+
+ QString currentProfileText = currentProfileLabel->text();
+ if(currentProfileText.upper() == "ALL");
+ currentProfileText = "";
+
+ Interface *i = interfaceItems[item];
+
+ if(i->getModuleOwner())
+ {
+ QWidget *moduleConfigure = i->getModuleOwner()->configure(i);
+ if(moduleConfigure != NULL)
+ {
+ i->getModuleOwner()->setProfile(currentProfileText);
+ QPEApplication::showWidget( moduleConfigure );
+ return;
+ }
+ }
+
+ InterfaceSetupImpDialog *configure = new InterfaceSetupImpDialog(this, "InterfaceSetupImp", i, true, Qt::WDestructiveClose | Qt::WStyle_ContextHelp );
+ configure->setProfile(currentProfileText);
+ QPEApplication::showDialog( configure );
+}
+
+/**
+ * Pull up the information about the currently selected interface.
+ * Report an error if no interface is selected.
+ * If the interface has a module owner then request its configure.
+ */
+void MainWindowImp::informationClicked()
+{
+ QListViewItem *item = connectionList->currentItem();
+ if(!item)
+ {
+ QMessageBox::information(this, "Sorry","Please select an interface First.", QMessageBox::Ok);
+ return;
+ }
+
+ Interface *i = interfaceItems[item];
+ // if(!i->isAttached()){
+ // QMessageBox::information(this, "Sorry","No information about\na disconnected interface.", QMessageBox::Ok);
+ // return;
+ // }
+
+ if(i->getModuleOwner())
+ {
+ QWidget *moduleInformation = i->getModuleOwner()->information(i);
+ if(moduleInformation != NULL)
+ {
+ QPEApplication::showWidget( moduleInformation );
+#ifdef DEBUG
+ odebug << "MainWindowImp::informationClicked:: Module owner has created, we showed." << oendl;
+#endif
+ return;
+ }
+ }
+ InterfaceInformationImp *information = new InterfaceInformationImp(this, "InterfaceSetupImp", i, Qt::WType_Modal | Qt::WDestructiveClose | Qt::WStyle_Dialog | Qt::WStyle_ContextHelp);
+ QPEApplication::showWidget( information );
+}
+
+/**
+ * Update this interface. If no QListViewItem exists create one.
+ * @param Interface* pointer to the interface that needs to be updated.
+ */
+void MainWindowImp::updateInterface(Interface *i)
+{
+ if(!advancedUserMode)
+ {
+ if(i->getInterfaceName() == "lo")
+ return;
+ }
+
+ QListViewItem *item = NULL;
+
+ // Find the interface, making it if needed.
+ if(items.find(i) == items.end())
+ {
+ item = new QListViewItem(connectionList, "", "", "");
+ // See if you can't find a module owner for this interface
+ QMap<Module*, QLibrary*>::Iterator it;
+ for( it = libraries.begin(); it != libraries.end(); ++it )
+ {
+ if(it.key()->isOwner(i))
+ i->setModuleOwner(it.key());
+ }
+ items.insert(i, item);
+ interfaceItems.insert(item, i);
+ }
+ else
+ item = items[i];
+
+ // Update the icons and information
+#ifdef QWS
+ item->setPixmap(0, (Resource::loadPixmap(i->getStatus() ? "up": "down")));
+#else
+ item->setPixmap(0, (SmallIcon(i->getStatus() ? "up": "down")));
+#endif
+
+ QString typeName = "lan";
+ if(i->getInterfaceName() == "lo")
+ typeName = "lo";
+ if(i->getInterfaceName().contains("irda"))
+ typeName = "irda";
+ if(i->getInterfaceName().contains("wlan"))
+ typeName = "wlan";
+ if(i->getInterfaceName().contains("usb"))
+ typeName = "usb";
+
+ if(!i->isAttached())
+ typeName = "connect_no";
+ // Actually try to use the Module
+ if(i->getModuleOwner() != NULL)
+ typeName = i->getModuleOwner()->getPixmapName(i);
+
+#ifdef QWS
+ item->setPixmap(1, (Resource::loadPixmap(QString("networksettings/") + typeName)));
+#else
+ item->setPixmap(1, (SmallIcon(typeName)));
+#endif
+ item->setText(2, i->getHardwareName());
+ item->setText(3, QString("(%1)").arg(i->getInterfaceName()));
+ item->setText(4, (i->getStatus()) ? i->getIp() : QString(""));
+}
+
+void MainWindowImp::newProfileChanged(const QString& newText)
+{
+ if(newText.length() > 0)
+ newProfileButton->setEnabled(true);
+ else
+ newProfileButton->setEnabled(false);
+}
+
+/**
+ * Adds a new profile to the list of profiles.
+ * Don't add profiles that already exists.
+ * Appends to the list and QStringList
+ */
+void MainWindowImp::addProfile()
+{
+ QString newProfileName = newProfile->text();
+ if(profiles.grep(newProfileName).count() > 0)
+ {
+ QMessageBox::information(this, "Can't Add","Profile already exists.", QMessageBox::Ok);
+ return;
+ }
+ profiles.append(newProfileName);
+ profilesList->insertItem(newProfileName);
+}
+
+/**
+ * Removes the currently selected profile in the combo.
+ * Doesn't delete if there are less then 2 profiles.
+ */
+void MainWindowImp::removeProfile()
+{
+ if(profilesList->count() <= 1)
+ {
+ QMessageBox::information(this, "Can't remove.","At least one profile\nis needed.", QMessageBox::Ok);
+ return;
+ }
+ QString profileToRemove = profilesList->currentText();
+ if(profileToRemove == "All")
+ {
+ QMessageBox::information(this, "Can't remove.","Can't remove default.", QMessageBox::Ok);
+ return;
+ }
+ // Can't remove the curent profile
+ if(profileToRemove == currentProfileLabel->text())
+ {
+ QMessageBox::information(this, "Can't remove.",QString("%1 is the current profile.").arg(profileToRemove), QMessageBox::Ok);
+ return;
+
+ }
+
+ if(QMessageBox::information(this, "Question",QString("Remove profile: %1").arg(profileToRemove), QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Ok)
+ {
+ profiles = QStringList::split(" ", profiles.join(" ").replace(QRegExp(profileToRemove), ""));
+ profilesList->clear();
+ for ( QStringList::Iterator it = profiles.begin(); it != profiles.end(); ++it)
+ profilesList->insertItem((*it));
+
+ // Remove any interface settings and mappings.
+ Interfaces interfaces;
+ // Go through them one by one
+ QMap<Interface*, QListViewItem*>::Iterator it;
+ for( it = items.begin(); it != items.end(); ++it )
+ {
+ QString interfaceName = it.key()->getInterfaceName();
+ odebug << interfaceName.latin1() << oendl;
+ if(interfaces.setInterface(interfaceName + "_" + profileToRemove))
+ {
+ interfaces.removeInterface();
+ if(interfaces.setMapping(interfaceName))
+ {
+ if(profilesList->count() == 1)
+ interfaces.removeMapping();
+ else
+ {
+ interfaces.removeMap("map", interfaceName + "_" + profileToRemove);
+ }
+ }
+ interfaces.write();
+ break;
+ }
+ }
+ }
+}
+
+/**
+ * A new profile has been selected, change.
+ * @param newProfile the new profile.
+ */
+void MainWindowImp::changeProfile()
+{
+ if(profilesList->currentItem() == -1)
+ {
+ QMessageBox::information(this, "Can't Change.","Please select a profile.", QMessageBox::Ok);
+ return;
+ }
+ QString newProfile = profilesList->text(profilesList->currentItem());
+ if(newProfile != currentProfileLabel->text())
+ {
+ currentProfileLabel->setText(newProfile);
+ QFile::remove(scheme);
+ QFile file(scheme);
+ if ( file.open(IO_ReadWrite) )
+ {
+ QTextStream stream( &file );
+ stream << QString("SCHEME=%1").arg(newProfile);
+ file.close();
+ }
+ // restart all up devices?
+ if(QMessageBox::information(this, "Question","Restart all running interfaces?", QMessageBox::Ok, QMessageBox::No) == QMessageBox::Ok)
+ {
+ // Go through them one by one
+ QMap<Interface*, QListViewItem*>::Iterator it;
+ for( it = items.begin(); it != items.end(); ++it )
+ {
+ if(it.key()->getStatus() == true)
+ it.key()->restart();
+ }
+ }
+ }
+ // TODO change the profile in the modules
+}
+
+
+void MainWindowImp::makeChannel()
+{
+ channel = new QCopChannel( "QPE/Application/networksettings", this );
+ connect( channel, SIGNAL(received(const QCString&,const QByteArray&)),
+ this, SLOT(receive(const QCString&,const QByteArray&)) );
+}
+
+void MainWindowImp::receive(const QCString &msg, const QByteArray &arg)
+{
+ bool found = false;
+ odebug << "MainWindowImp::receive QCop msg >"+msg+"<" << oendl;
+ if (msg == "raise")
+ {
+ raise();
+ return;
+ }
+
+ QString dest = msg.left(msg.find("("));
+ QCString param = msg.right(msg.length() - msg.find("(") - 1);
+ param = param.left( param.length() - 1 );
+ odebug << "dest >" << dest.latin1() << "< param >"+param+"<" << oendl;
+
+ QMap<Module*, QLibrary*>::Iterator it;
+ for( it = libraries.begin(); it != libraries.end(); ++it )
+ {
+ odebug << "plugin >" << it.key()->type().latin1() << "<" << oendl;
+ if(it.key()->type() == dest)
+ {
+ it.key()->receive( param, arg );
+ found = true;
+ }
+ }
+
+
+ if (found) QPEApplication::setKeepRunning();
+ else odebug << "Huh what do ya want" << oendl;
+}