32 files changed, 514 insertions, 384 deletions
diff --git a/noncore/net/networksetup/TODO b/noncore/net/networksetup/TODO index 9a1657a..e69de29 100644 --- a/noncore/net/networksetup/TODO +++ b/noncore/net/networksetup/TODO @@ -1 +0,0 @@ -Fix DHCP obtained and expoired info diff --git a/noncore/net/networksetup/addservice.ui b/noncore/net/networksetup/addconnection.ui index 929f4fb..a349804 100644 --- a/noncore/net/networksetup/addservice.ui +++ b/noncore/net/networksetup/addconnection.ui @@ -1,154 +1,153 @@ <!DOCTYPE UI><UI> -<class>AddService</class> +<class>AddConnection</class> <widget> <class>QDialog</class> <property stdset="1"> <name>name</name> - <cstring>AddService</cstring> + <cstring>AddConnection</cstring> </property> <property stdset="1"> <name>geometry</name> <rect> <x>0</x> <y>0</y> - <width>245</width> + <width>233</width> <height>268</height> </rect> </property> <property stdset="1"> <name>caption</name> - <string>Add Network Service</string> + <string>Add Network Connection</string> </property> <grid> <property stdset="1"> <name>margin</name> <number>11</number> </property> <property stdset="1"> <name>spacing</name> <number>6</number> </property> <widget row="3" column="1" > <class>QPushButton</class> <property stdset="1"> <name>name</name> <cstring>cancelButton</cstring> </property> <property stdset="1"> <name>text</name> - <string>Cancel</string> + <string>&Cancel</string> </property> </widget> <widget row="3" column="0" > <class>QPushButton</class> <property stdset="1"> <name>name</name> <cstring>addButton</cstring> </property> <property stdset="1"> <name>text</name> - <string>Add</string> + <string>&Add</string> </property> </widget> <widget row="0" column="0" rowspan="1" colspan="2" > <class>QListView</class> <column> <property> <name>text</name> <string>Services</string> </property> <property> <name>clickable</name> <bool>true</bool> </property> <property> <name>resizeable</name> <bool>true</bool> </property> </column> <property stdset="1"> <name>name</name> <cstring>registeredServicesList</cstring> </property> <property stdset="1"> <name>sizePolicy</name> <sizepolicy> <hsizetype>7</hsizetype> <vsizetype>3</vsizetype> </sizepolicy> </property> <property stdset="1"> <name>minimumSize</name> <size> <width>0</width> <height>75</height> </size> </property> </widget> <spacer row="2" column="1" > <property> <name>name</name> <cstring>Spacer12</cstring> </property> <property stdset="1"> <name>orientation</name> <enum>Vertical</enum> </property> <property stdset="1"> <name>sizeType</name> <enum>Expanding</enum> </property> <property> <name>sizeHint</name> <size> <width>20</width> <height>20</height> </size> </property> </spacer> <widget row="1" column="0" rowspan="1" colspan="2" > <class>QLabel</class> <property stdset="1"> <name>name</name> <cstring>help</cstring> </property> <property stdset="1"> <name>sizePolicy</name> <sizepolicy> <hsizetype>5</hsizetype> <vsizetype>4</vsizetype> </sizepolicy> </property> <property stdset="1"> <name>text</name> - <string>LAN - TCP/IP -For Local-area network connections through PC_CARD network interfdace cards.</string> + <string></string> </property> <property stdset="1"> <name>alignment</name> <set>WordBreak|AlignTop|AlignLeft</set> </property> <property> <name>vAlign</name> </property> <property> <name>wordwrap</name> </property> </widget> </grid> </widget> <connections> <connection> <sender>cancelButton</sender> <signal>clicked()</signal> - <receiver>AddService</receiver> + <receiver>AddConnection</receiver> <slot>reject()</slot> </connection> <connection> <sender>addButton</sender> <signal>clicked()</signal> - <receiver>AddService</receiver> + <receiver>AddConnection</receiver> <slot>accept()</slot> </connection> </connections> </UI> diff --git a/noncore/net/networksetup/addconnectionimp.cpp b/noncore/net/networksetup/addconnectionimp.cpp new file mode 100644 index 0000000..ee7bd97 --- a/dev/null +++ b/noncore/net/networksetup/addconnectionimp.cpp @@ -0,0 +1,38 @@ +#include "addconnectionimp.h" +#include <qlistview.h> +#include <qlist.h> +#include <qlabel.h> +#include <qheader.h> + +/** + * Constructor + */ +AddConnectionImp::AddConnectionImp(QWidget *parent=0, const char *name=0, WFlags f=0):AddConnection(parent, name, f){ + connect(registeredServicesList, SIGNAL(selectionChanged()), this, SLOT(changed())); + registeredServicesList->header()->hide(); +}; + +/** + * The current item changed, update the discription. + */ +void AddConnectionImp::changed(){ + QListViewItem *item = registeredServicesList->currentItem(); + if(item){ + help->setText(list[item->text(0)]); + } +} + +/** + * Save a copy of newList for the discriptions and append them all to the view + * @param newList the new list of possible interfaces + */ +void AddConnectionImp::addConnections(QMap<QString, QString> newList){ + list = newList; + QMap<QString, QString>::Iterator it; + for( it = list.begin(); it != list.end(); ++it ) + QListViewItem *item = new QListViewItem(registeredServicesList, it.key()); + registeredServicesList->setCurrentItem(registeredServicesList->firstChild()); +} + +// addserviceimp.cpp + diff --git a/noncore/net/networksetup/addconnectionimp.h b/noncore/net/networksetup/addconnectionimp.h new file mode 100644 index 0000000..643cd9a --- a/dev/null +++ b/noncore/net/networksetup/addconnectionimp.h @@ -0,0 +1,29 @@ +#ifndef ADDCONNECTIONIMP_H +#define ADDCONNECTIONIMP_H + +#include "addconnection.h" +#include <qmap.h> +#include <qlist.h> + +class QListViewItem; + +class AddConnectionImp : public AddConnection { + +Q_OBJECT + +public: + AddConnectionImp(QWidget *parent=0, const char *name=0, WFlags f=0); + void addConnections(QMap<QString, QString> newList); + +private slots: + void changed(); + +private: + QMap<QString, QString> list; + +}; + +#endif + +// addconectionimp.h + diff --git a/noncore/net/networksetup/addserviceimp.cpp b/noncore/net/networksetup/addserviceimp.cpp deleted file mode 100644 index ac79d06..0000000 --- a/noncore/net/networksetup/addserviceimp.cpp +++ b/dev/null @@ -1,26 +0,0 @@ -#include "addserviceimp.h" -#include <qpe/qlibrary.h> -#include <qlistview.h> -#include <qlist.h> - -void AddServiceImp::addServices(QList<QString> list){ - list.setAutoDelete(true); - - for(uint i = 0; i < list.count(); i++){ - QString pluginFileName = ""; - QLibrary *lib = new QLibrary(pluginFileName); - void *functionPointer = lib->resolve("info"); - if( !functionPointer ){ - qDebug(QString("AddServiceImp: File: %1 is not a plugin, but though was.").arg(pluginFileName).latin1()); - delete lib; - break; - } - - // Try to get an info. - QString info = ((QString (*)()) functionPointer)(); - QListViewItem *newItem = new QListViewItem(registeredServicesList, info); - } -} - - -// addserviceimp.cpp diff --git a/noncore/net/networksetup/addserviceimp.h b/noncore/net/networksetup/addserviceimp.h deleted file mode 100644 index 7cacb97..0000000 --- a/noncore/net/networksetup/addserviceimp.h +++ b/dev/null @@ -1,26 +0,0 @@ -#ifndef ADDSERVICEIMP_H -#define ADDSERVICEIMP_H - -#include "addservice.h" -#include <qmap.h> -#include <qlist.h> - -class QListViewItem; - -class AddServiceImp : public AddService { - -Q_OBJECT - -public: - AddServiceImp(QWidget *parent=0, const char *name=0, WFlags f=0):AddService(parent, name, f){}; - void addServices(QList<QString> list); - -private: - QMap<QListViewItem*, QString> pluginInfo; - -}; - -#endif - -// addserviceimp.h - diff --git a/noncore/net/networksetup/interface.h b/noncore/net/networksetup/interface.h index 5dc95a4..1406e99 100644 --- a/noncore/net/networksetup/interface.h +++ b/noncore/net/networksetup/interface.h @@ -1,54 +1,55 @@ #ifndef INTERFACE_H #define INTERFACE_H #include <qstring.h> class Module; + class Interface { public: Interface(QString name = "unknown", bool status = false); virtual ~Interface(){}; virtual bool getStatus(){ return status; }; virtual void setStatus(bool newSatus){ status = newSatus; refresh(); }; virtual bool isAttached(){ return attached; }; virtual void setAttached(bool isAttached=false){ attached = isAttached; }; virtual QString getInterfaceName(){ return interfaceName; }; virtual void setInterfaceName(QString name="unknown"){ interfaceName = name; }; virtual QString getHardwareName(){ return hardareName; }; virtual void setHardwareName(QString name="Unknown"){ hardareName = name; }; virtual Module* getModuleOwner(){ return moduleOwner; }; virtual void setModuleOwner(Module *owner=NULL){ moduleOwner = owner; }; // inet information. QString getMacAddress(){ return macAddress; }; QString getIp(){ return ip; }; QString getSubnetMask(){ return subnetMask; }; QString getBroadcast(){ return broadcast; }; bool isDhcp(){ return dhcp; }; QString getDhcpServerIp(){ return dhcpServerIp; }; QString getLeaseObtained(){ return leaseObtained; }; QString getLeaseExpires(){ return leaseExpires; }; bool refresh(); bool start(); bool stop(); bool restart(); private: // Interface information bool status; bool attached; QString interfaceName; QString hardareName; Module *moduleOwner; // Network information QString macAddress; QString ip; QString broadcast; diff --git a/noncore/net/networksetup/interfacesetupimp.cpp b/noncore/net/networksetup/interfacesetupimp.cpp index 6a8449d..951aeee 100644 --- a/noncore/net/networksetup/interfacesetupimp.cpp +++ b/noncore/net/networksetup/interfacesetupimp.cpp @@ -1,73 +1,72 @@ #include "interfacesetupimp.h" #include "interface.h" #include "interfaces.h" #include <qcombobox.h> #include <qcheckbox.h> #include <qlineedit.h> #include <qspinbox.h> #include <qgroupbox.h> #include <qlabel.h> #include <qmessagebox.h> #include <assert.h> -#define INTERFACE_FILE "/home/ben/interfaces" #define DNSSCRIPT "interfacednsscript" /** * Constuctor. Set up the connection and load the first profile. */ InterfaceSetupImp::InterfaceSetupImp(QWidget* parent, const char* name, Interface *i, bool modal, WFlags fl) : InterfaceSetup(parent, name, modal, fl){ assert(i); interface = i; - interfaces = new Interfaces(INTERFACE_FILE); + interfaces = new Interfaces(); changeProfile(profileCombo->currentText()); bool error = false; if(interfaces->getInterfaceMethod(error) == INTERFACES_LOOPBACK){ staticGroupBox->hide(); dhcpCheckBox->hide(); leaseTime->hide(); leaseHoursLabel->hide(); } connect(profileCombo, SIGNAL(highlighted(const QString &)), this, SLOT(changeProfile(const QString &))); } /** * Save the current settings, then write out the interfaces file and close. */ void InterfaceSetupImp::accept(){ if(!saveSettings()) return; interfaces->write(); close(true); } /** * Save the settings for the current Interface. * @return bool true if successfull, false otherwise */ bool InterfaceSetupImp::saveSettings(){ // eh can't really do anything about it other then return. :-D if(!interfaces->isInterfaceSet()) return true; bool error = false; // Loopback case if(interfaces->getInterfaceMethod(error) == INTERFACES_LOOPBACK){ interfaces->setAuto(interface->getInterfaceName(), autoStart->isChecked()); return true; } if(!dhcpCheckBox->isChecked() && (ipAddressEdit->text().isEmpty() || subnetMaskEdit->text().isEmpty() || firstDNSLineEdit->text().isEmpty())){ QMessageBox::information(this, "Empy Fields.", "Please fill in address, subnet,\n gateway and the first dns entries.", "Ok"); return false; } interfaces->removeAllInterfaceOptions(); // DHCP if(dhcpCheckBox->isChecked()){ interfaces->setInterfaceMethod(INTERFACES_METHOD_DHCP); interfaces->setInterfaceOption("leasehours", QString("%1").arg(leaseTime->value())); interfaces->setInterfaceOption("leasetime", QString("%1").arg(leaseTime->value()*60*60)); diff --git a/noncore/net/networksetup/mainwindow.ui b/noncore/net/networksetup/mainwindow.ui index a3f7bb1..f5b104a 100644 --- a/noncore/net/networksetup/mainwindow.ui +++ b/noncore/net/networksetup/mainwindow.ui @@ -57,159 +57,159 @@ <number>6</number> </property> <widget> <class>QListView</class> <column> <property> <name>text</name> <string>i</string> </property> <property> <name>clickable</name> <bool>true</bool> </property> <property> <name>resizeable</name> <bool>true</bool> </property> </column> <column> <property> <name>text</name> <string>t</string> </property> <property> <name>clickable</name> <bool>true</bool> </property> <property> <name>resizeable</name> <bool>true</bool> </property> </column> <column> <property> <name>text</name> <string>Name</string> </property> <property> <name>clickable</name> <bool>true</bool> </property> <property> <name>resizeable</name> <bool>true</bool> </property> </column> <property stdset="1"> <name>name</name> - <cstring>serviceList</cstring> + <cstring>connectionList</cstring> </property> <property stdset="1"> <name>allColumnsShowFocus</name> <bool>true</bool> </property> </widget> <widget> <class>QLayoutWidget</class> <property stdset="1"> <name>name</name> <cstring>Layout2</cstring> </property> <property> <name>layoutMargin</name> </property> <grid> <property stdset="1"> <name>margin</name> <number>5</number> </property> <property stdset="1"> <name>spacing</name> <number>6</number> </property> <widget row="1" column="0" > <class>QPushButton</class> <property stdset="1"> <name>name</name> - <cstring>addServiceButton</cstring> + <cstring>addConnectionButton</cstring> </property> <property stdset="1"> <name>text</name> <string>&Add</string> </property> </widget> <widget row="0" column="0" > <class>QPushButton</class> <property stdset="1"> <name>name</name> - <cstring>informationServiceButton</cstring> + <cstring>informationConnectionButton</cstring> </property> <property stdset="1"> <name>text</name> <string>&Information</string> </property> </widget> <widget row="0" column="1" > <class>QPushButton</class> <property stdset="1"> <name>name</name> - <cstring>configureServiceButton</cstring> + <cstring>configureConnectionButton</cstring> </property> <property stdset="1"> <name>text</name> <string>&Configure</string> </property> </widget> <widget row="1" column="1" > <class>QPushButton</class> <property stdset="1"> <name>name</name> - <cstring>removeServiceButton</cstring> + <cstring>removeConnectionButton</cstring> </property> <property stdset="1"> <name>text</name> <string>&Remove</string> </property> </widget> </grid> </widget> </vbox> </widget> <widget> <class>QWidget</class> <property stdset="1"> <name>name</name> <cstring>tab</cstring> </property> <attribute> <name>title</name> <string>Profiles</string> </attribute> <grid> <property stdset="1"> <name>margin</name> <number>11</number> </property> <property stdset="1"> <name>spacing</name> <number>6</number> </property> <widget row="1" column="0" rowspan="1" colspan="3" > <class>Line</class> <property stdset="1"> <name>name</name> <cstring>Line1</cstring> </property> <property stdset="1"> <name>orientation</name> <enum>Horizontal</enum> </property> </widget> <widget row="0" column="0" > <class>QLabel</class> <property stdset="1"> <name>name</name> <cstring>TextLabel1</cstring> </property> <property stdset="1"> <name>text</name> diff --git a/noncore/net/networksetup/mainwindowimp.cpp b/noncore/net/networksetup/mainwindowimp.cpp index 89dac6f..66ec8b5 100644 --- a/noncore/net/networksetup/mainwindowimp.cpp +++ b/noncore/net/networksetup/mainwindowimp.cpp @@ -1,362 +1,369 @@ #include "mainwindowimp.h"
-#include "addserviceimp.h"
+#include "addconnectionimp.h"
#include "interfaceinformationimp.h"
#include "interfacesetupimp.h"
-#include "kprocess.h"
#include "module.h"
+#include "kprocess.h"
#include <qpushbutton.h>
#include <qtabwidget.h>
#include <qlistbox.h>
#include <qlistview.h>
#include <qheader.h>
#include <qlabel.h>
#include <qmainwindow.h>
#include <qmessagebox.h>
#include <qpe/config.h>
#include <qpe/qlibrary.h>
#include <qpe/resource.h>
#include <qlist.h>
#include <qdir.h>
#include <qfile.h>
#include <qtextstream.h>
-// For library loading.
-#include <dlfcn.h>
-
#define TEMP_ALL "/tmp/ifconfig-a"
#define TEMP_UP "/tmp/ifconfig"
-MainWindowImp::MainWindowImp(QWidget *parent, const char *name) : MainWindow(parent, name, true) {
- connect(addServiceButton, SIGNAL(clicked()), this, SLOT(addClicked()));
- connect(removeServiceButton, SIGNAL(clicked()), this, SLOT(removeClicked()));
- connect(informationServiceButton, SIGNAL(clicked()), this, SLOT(informationClicked()));
- connect(configureServiceButton, SIGNAL(clicked()), this, SLOT(configureClicked()));
+MainWindowImp::MainWindowImp(QWidget *parent, const char *name) : MainWindow(parent, name, true), advancedUserMode(false){
+ 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(profilesList, SIGNAL(highlighted(const QString&)), this, SLOT(changeProfile(const QString&)));
- // Make sure we have a plugin directory to scan.
- QString DirStr = QDir::homeDirPath() + "/.networksetup/" ;
- QDir pluginDir( DirStr );
- pluginDir.mkdir( DirStr );
- pluginDir.mkdir( ( DirStr + "plugins/" ) );
- QString path = DirStr + "plugins";
- pluginDir.setPath(path);
- if(!pluginDir.exists()){
- qDebug(QString("MainWindowImp: ERROR: %1 %2").arg(__FILE__).arg(__LINE__).latin1());
- return;
- }
-
- // Load any saved services.
- loadModules(path);
+ // Load connections.
+ loadModules(QDir::homeDirPath() + "/.networksetup/plugins");
getInterfaceList();
- serviceList->header()->hide();
+ 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));
+ advancedUserMode = cfg.readBoolEntry("AdvancedUserMode", false);
}
/**
- * Deconstructor. Unload libraries and save profile list.
+ * Deconstructor. Save profiles. Delete loaded libraries.
*/
MainWindowImp::~MainWindowImp(){
+ // Save profiles.
if(profiles.count() > 1){
Config cfg("NetworkSetup");
cfg.writeEntry("Profiles", profiles.join(" "));
}
+ // Delete Modules and Libraries
+ QMap<Module*, QLibrary*>::Iterator it;
+ for( it = libraries.begin(); it != libraries.end(); ++it ){
+ delete it.key();
+ delete it.data();
+ }
}
+/**
+ * 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(QString path){
qDebug(path.latin1());
- QDir d;
- d.setPath(path);
- if(!d.exists()){
- qDebug("MainWindowImp:: Path doesn't exists");
+ 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()) ) {
if(fi->fileName().contains(".so")){
- qDebug("Found");
- Module *foo = loadPlugin(path + "/" + fi->fileName());
+ loadPlugin(path + "/" + fi->fileName());
}
++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(QString pluginFileName, QString resolveString){
- qDebug(pluginFileName.latin1());
+ qDebug(QString("MainWindowImp::loadPlugin: %1").arg(pluginFileName).latin1());
QLibrary *lib = new QLibrary(pluginFileName);
void *functionPointer = lib->resolve(resolveString);
if( !functionPointer ){
qDebug(QString("MainWindowImp: File: %1 is not a plugin, but though was.").arg(pluginFileName).latin1());
delete lib;
return NULL;
}
// Try to get an object.
Module *object = ((Module* (*)()) functionPointer)();
if(object == NULL){
qDebug("MainWindowImp: Couldn't create object, but did load library!");
delete lib;
return NULL;
}
- // Store for reference
+ // Store for deletion later
libraries.insert(object, lib);
return object;
}
/**
* 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(){
- // Now that we have a list of all of the protocals, list them.
- {
- QMessageBox::information(this, "No Modules", "Nothing to add.", "Ok");
+ QMap<Module*, QLibrary*>::Iterator it;
+ QMap<QString, QString> list;
+ list.insert("USB (PPP) / (ADD_TEST)", "A dialup connection over the USB port");
+ list.insert("IrDa (PPP) / (ADD_TEST)", "A dialup connection over the IdDa port");
+ 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.", "Ok");
return;
}
- AddServiceImp service(this, "AddService", true);
- service.showMaximized();
- service.exec();
+ AddConnectionImp addNewConnection(this, "AddConnectionImp", true);
+ addNewConnection.addConnections(list);
+ addNewConnection.showMaximized();
+ if(QDialog::Accepted == addNewConnection.exec()){
+
+ }
}
/**
* 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 = serviceList->currentItem();
+ QListViewItem *item = connectionList->currentItem();
if(item == NULL) {
QMessageBox::information(this, "Error","Please select an interface.", "Ok");
return;
}
if((interfaceItems[item])->getModuleOwner() == NULL){
QMessageBox::information(this, "Can't remove interface.", "Interface is built in.", "Ok");
}
else{
// Try to remove.
}
}
/**
- * See if there is a configuration for the selected protocal.
- * Prompt with errors.
+ * 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 with a empty
+ * tab. If tab is !NULL then append the interfaces setup widget to it.
*/
void MainWindowImp::configureClicked(){
- QListViewItem *item = serviceList->currentItem();
- if(item == NULL){
- QMessageBox::information(this, "Error","Please select an interface.", "Ok");
- return;
+ QListViewItem *item = connectionList->currentItem();
+ if(!item){
+ QMessageBox::information(this, "Error","Please select an interface.", QMessageBox::Ok);
+ return;
}
-
- if((interfaceItems[item])->getModuleOwner() == NULL){
- InterfaceSetupImp *conf = new InterfaceSetupImp(0, "InterfaceConfiguration", interfaceItems[item]);
- conf->showMaximized();
- conf->show();
- }
- else{
- QTabWidget *t = NULL;
- QWidget *conf = (interfaceItems[item])->getModuleOwner()->configure(&t);
- if(conf != NULL){
- qDebug("Conf found");
- if(t != NULL){
- qDebug("Adding Interface");
- InterfaceSetupImp *i = new InterfaceSetupImp(t, "TCPIPInformation", interfaceItems[item], true);
- t->insertTab(i, "TCP/IP");
+
+ Interface *i = interfaceItems[item];
+ if(i->getModuleOwner()){
+ QTabWidget *tabWidget = NULL;
+ QWidget *moduleConfigure = i->getModuleOwner()->configure(&tabWidget);
+ if(moduleConfigure != NULL){
+ if(tabWidget != NULL){
+ InterfaceSetupImp *configure = new InterfaceSetupImp(tabWidget, "InterfaceSetupImp", i, true);
+ tabWidget->insertTab(configure, "TCP/IP");
}
- conf->showMaximized();
- conf->show();
- }
- else{
- InterfaceSetupImp *i = new InterfaceSetupImp(0, "TCPIPInformation", interfaceItems[item], true);
- i->showMaximized();
- i->show();
+ moduleConfigure->showMaximized();
+ moduleConfigure->show();
+ return;
}
}
+
+ InterfaceSetupImp *configure = new InterfaceSetupImp(0, "InterfaceSetupImp", i, true);
+ configure->showMaximized();
+ configure->show();
}
/**
- * Pull up the information about the selected interface
- * Report an error
+ * 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 with a empty
+ * tab. If tab is !NULL then append the interfaces setup widget to it.
*/
void MainWindowImp::informationClicked(){
- QListViewItem *item = serviceList->currentItem();
- if(item == NULL){
- QMessageBox::information(this, "Error","Please select an interface.", "Ok");
+ QListViewItem *item = connectionList->currentItem();
+ if(!item){
+ QMessageBox::information(this, "Error","Please select an interface.", QMessageBox::Ok);
return;
- }
-
- if( (interfaceItems[item])->getModuleOwner() == NULL){
- InterfaceInformationImp *i = new InterfaceInformationImp(0, "InterfaceInformationImp", interfaceItems[item]);
- i->showMaximized();
- i->show();
- }
- else{
- QTabWidget *t = NULL;
- QWidget *conf = (interfaceItems[item])->getModuleOwner()->information(&t);
- if(conf != NULL){
- if(t){
- qDebug("Adding Interface");
- InterfaceInformationImp *i = new InterfaceInformationImp(t, "TCPIPInformation", interfaceItems[item], true);
- t->insertTab(i, "TCP/IP");
+ }
+
+ Interface *i = interfaceItems[item];
+ if(i->getModuleOwner()){
+ QTabWidget *tabWidget = NULL;
+ QWidget *moduleInformation = i->getModuleOwner()->information(&tabWidget);
+ if(moduleInformation != NULL){
+ if(tabWidget != NULL){
+ InterfaceInformationImp *information = new InterfaceInformationImp(tabWidget, "InterfaceSetupImp", i, true);
+ tabWidget->insertTab(information, "TCP/IP");
}
- conf->showMaximized();
- conf->show();
+ moduleInformation->showMaximized();
+ moduleInformation->show();
+ return;
}
- else{
- InterfaceInformationImp *i = new InterfaceInformationImp(0, "TCPIPInformation", interfaceItems[item], true);
- i->showMaximized();
- i->show();
- }
- }
+ }
+
+ InterfaceInformationImp *information = new InterfaceInformationImp(0, "InterfaceSetupImp", i, true);
+ information->showMaximized();
+ information->show();
}
/**
* Aquire the list of active interfaces from ifconfig
* Call ifconfig and ifconfig -a
*/
void MainWindowImp::getInterfaceList(){
KShellProcess *processAll = new KShellProcess();
*processAll << "/sbin/ifconfig" << "-a" << " > " TEMP_ALL;
connect(processAll, SIGNAL(processExited(KProcess *)),
this, SLOT(jobDone(KProcess *)));
threads.insert(processAll, TEMP_ALL);
processAll->start(KShellProcess::NotifyOnExit);
KShellProcess *process = new KShellProcess();
*process << "/sbin/ifconfig" << " > " TEMP_UP;
connect(process, SIGNAL(processExited(KProcess *)),
this, SLOT(jobDone(KProcess *)));
threads.insert(process, TEMP_UP);
process->start(KShellProcess::NotifyOnExit);
}
void MainWindowImp::jobDone(KProcess *process){
QString fileName = threads[process];
threads.remove(process);
delete process;
QFile file(fileName);
if (!file.open(IO_ReadOnly)){
qDebug(QString("MainWindowImp: Can't open file: %1").arg(fileName).latin1());
return;
}
QTextStream stream( &file );
QString line;
while ( !stream.eof() ) {
line = stream.readLine();
int space = line.find(" ");
if(space > 1){
// We have found an interface
QString interfaceName = line.mid(0, space);
+ if(!advancedUserMode){
+ if(interfaceName == "lo")
+ break;
+ }
Interface *i;
// See if we already have it
if(interfaceNames.find(interfaceName) == interfaceNames.end()){
if(fileName == TEMP_ALL)
i = new Interface(interfaceName, false);
else
i = new Interface(interfaceName, true);
}
else{
i = interfaceNames[interfaceName];
if(fileName != TEMP_ALL)
i->setStatus(true);
}
i->setAttached(true);
i->setInterfaceName(interfaceName);
QString hardName = "Ethernet";
int hardwareName = line.find("Link encap:");
int macAddress = line.find("HWaddr");
if(macAddress == -1)
macAddress = line.length();
if(hardwareName != -1)
i->setHardwareName(line.mid(hardwareName+11, macAddress-(hardwareName+11)) + QString(" (%1)").arg(i->getInterfaceName()));
// We have found an interface
//qDebug(QString("MainWindowImp: Found Interface: %1").arg(line).latin1());
interfaceNames.insert(i->getInterfaceName(), i);
updateInterface(i);
}
}
file.close();
QFile::remove(fileName);
}
+/**
+ *
+ */
void MainWindowImp::updateInterface(Interface *i){
QListViewItem *item = NULL;
// See if we already have it
if(items.find(i) == items.end()){
- item = new QListViewItem(serviceList, "", "", "");
+ 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];
QString statusImage = "down";
if(i->getStatus())
statusImage = "up";
QPixmap status = (Resource::loadPixmap(statusImage));
item->setPixmap(0, status);
QString typeName = "lan";
if(i->getHardwareName().contains("Local Loopback"))
typeName = "lo";
if(i->getInterfaceName().contains("irda"))
typeName = "irda";
if(i->getInterfaceName().contains("wlan"))
typeName = "wlan";
// Actually try to use the Module
if(i->getModuleOwner() != NULL){
typeName = i->getModuleOwner()->getPixmapName(i);
}
QPixmap type = (Resource::loadPixmap(typeName));
item->setPixmap(1, type);
item->setText(2, i->getHardwareName());
}
/**
* Adds a new profile to the list of profiles.
* Don't add profiles that already exists.
* Appends to the combo and QStringList
*/
void MainWindowImp::addProfile(){
QString newProfileName = "New";
if(profiles.grep(newProfileName).count() > 0){
QMessageBox::information(this, "Can't Add.","Profile already exists.", "Ok");
return;
}
diff --git a/noncore/net/networksetup/mainwindowimp.h b/noncore/net/networksetup/mainwindowimp.h index 19ebaf2..629b758 100644 --- a/noncore/net/networksetup/mainwindowimp.h +++ b/noncore/net/networksetup/mainwindowimp.h @@ -3,54 +3,55 @@ #include "mainwindow.h"
#include <qmap.h>
#include <qstringlist.h>
class Module;
class Interface;
class QLibrary;
class KProcess;
class MainWindowImp : public MainWindow {
Q_OBJECT
public:
MainWindowImp(QWidget *parent=0, const char *name=0);
~MainWindowImp();
private slots:
void addClicked();
void removeClicked();
void configureClicked();
void informationClicked();
void jobDone(KProcess *process);
void getInterfaceList();
void addProfile();
void removeProfile();
void changeProfile(const QString&);
void updateInterface(Interface *i);
private:
void loadModules(QString path);
Module* loadPlugin(QString pluginFileName,
QString resolveString = "create_plugin");
// For our local list of names
QMap<QString, Interface*> interfaceNames;
QMap<Module*, QLibrary*> libraries;
QMap<Interface*, QListViewItem*> items;
QMap<QListViewItem*, Interface*> interfaceItems;
QMap<KProcess*, QString> threads;
QStringList profiles;
+ bool advancedUserMode;
};
#endif
// mainwindowimp.h
diff --git a/noncore/net/networksetup/module.h b/noncore/net/networksetup/module.h index c1e9488..0c81928 100644 --- a/noncore/net/networksetup/module.h +++ b/noncore/net/networksetup/module.h @@ -1,34 +1,79 @@ #ifndef NETCONF_MODULE_H #define NETCONF_MODULE_H #include <qobject.h> #include <qlist.h> #include <qmap.h> #include "interface.h" class QWidget; class QTabWidget; class Module : QObject{ signals: void updateInterface(Interface *i); public: Module(){}; - + + /** + * get the icon name for this device. + * @param Interface* can be used in determining the icon. + * @return QString the icon name (minus .png, .gif etc) + */ + virtual QString getPixmapName(Interface* i) = 0; + + /** + * Check to see if the interface i is owned by this module. + * @param Interface* interface to check against + * @return bool true if i is owned by this module, false otherwise. + */ virtual bool isOwner(Interface *){ return false; }; - virtual QWidget *configure(QTabWidget **tabWidget){ return NULL; } ; - virtual QWidget *information(QTabWidget **tabWidget){ return NULL; }; + + /** + * Create, set tabWiget and return the WLANConfigure Module + * @param tabWidget a pointer to the tab widget that this configure has. + * @return QWidget* pointer to the tab widget in this modules configure. + */ + virtual QWidget *configure(QTabWidget **){ return NULL; } ; + + /** + * Create, set tabWiget and return the Information Module + * @param tabWidget a pointer to the tab widget that this information has. + * @return QWidget* pointer to the tab widget in this modules info. + */ + virtual QWidget *information(QTabWidget **){ return NULL; }; + + /** + * Get all active (up or down) interfaces + * @return QList<Interface> A list of interfaces that exsist that havn't + * been called by isOwner() + */ virtual QList<Interface> getInterfaces() = 0; - virtual QMap<QString, QString> possibleNewInterfaces() = 0; + + /** + * Adds possible new interfaces to the list (Example: usb(ppp), ir(ppp), + * modem ppp) + */ + virtual void possibleNewInterfaces(QMap<QString, QString> &list) = 0; + + /** + * Attempts to create a new interface from name + * @return Interface* NULL if it was unable to be created. + * @param name the type of interface to create + */ virtual Interface *addNewInterface(QString name) = 0; + + /** + * Attempts to remove the interface, doesn't delete i + * @return bool true if successfull, false otherwise. + */ virtual bool remove(Interface* i) = 0; - virtual QString getPixmapName(Interface* i) = 0; }; #endif // module.h diff --git a/noncore/net/networksetup/networksetup.pro b/noncore/net/networksetup/networksetup.pro index 0d48790..ba70180 100644 --- a/noncore/net/networksetup/networksetup.pro +++ b/noncore/net/networksetup/networksetup.pro @@ -1,10 +1,10 @@ TEMPLATE = app #CONFIG = qt warn_on debug CONFIG = qt warn_on release -HEADERS = mainwindowimp.h addserviceimp.h interface.h interfaceinformationimp.h interfacesetupimp.h interfaces.h defaultmodule.h kprocctrl.h module.h kprocess.h -SOURCES = main.cpp mainwindowimp.cpp addserviceimp.cpp interface.cpp interfaceinformationimp.cpp interfacesetupimp.cpp kprocctrl.cpp kprocess.cpp interfaces.cpp +HEADERS = mainwindowimp.h addconnectionimp.h interface.h interfaceinformationimp.h interfacesetupimp.h interfaces.h defaultmodule.h kprocctrl.h module.h kprocess.h +SOURCES = main.cpp mainwindowimp.cpp addconnectionimp.cpp interface.cpp interfaceinformationimp.cpp interfacesetupimp.cpp kprocctrl.cpp kprocess.cpp interfaces.cpp #INCLUDEPATH += $(QPEDIR)/include #DEPENDPATH += $(QPEDIR)/include LIBS += -lqpe -INTERFACES = mainwindow.ui addservice.ui interfaceinformation.ui interfaceadvanced.ui interfacesetup.ui +INTERFACES = mainwindow.ui addconnection.ui interfaceinformation.ui interfaceadvanced.ui interfacesetup.ui TARGET = networksetup diff --git a/noncore/net/networksetup/wlan/wlan.ui b/noncore/net/networksetup/wlan/wlan.ui index dcacbe8..9f33559 100644 --- a/noncore/net/networksetup/wlan/wlan.ui +++ b/noncore/net/networksetup/wlan/wlan.ui @@ -1,104 +1,104 @@ <!DOCTYPE UI><UI> <class>WLAN</class> <widget> <class>QDialog</class> <property stdset="1"> <name>name</name> <cstring>WLAN</cstring> </property> <property stdset="1"> <name>geometry</name> <rect> <x>0</x> <y>0</y> - <width>254</width> + <width>250</width> <height>286</height> </rect> </property> <property stdset="1"> <name>caption</name> <string>Wireless LAN Setting</string> </property> <property stdset="1"> <name>sizeGripEnabled</name> <bool>true</bool> </property> <property> <name>layoutMargin</name> </property> <vbox> <property stdset="1"> <name>margin</name> <number>0</number> </property> <property stdset="1"> <name>spacing</name> <number>6</number> </property> <widget> <class>QTabWidget</class> <property stdset="1"> <name>name</name> <cstring>tabWidget</cstring> </property> <property stdset="1"> <name>enabled</name> <bool>true</bool> </property> <widget> <class>QWidget</class> <property stdset="1"> <name>name</name> <cstring>ConfigPage</cstring> </property> <attribute> <name>title</name> - <string>Config</string> + <string>WLAN General</string> </attribute> <vbox> <property stdset="1"> <name>margin</name> <number>11</number> </property> <property stdset="1"> <name>spacing</name> <number>6</number> </property> <widget> <class>QButtonGroup</class> <property stdset="1"> <name>name</name> <cstring>ButtonGroup45</cstring> </property> <property stdset="1"> <name>title</name> <string>ESS ID</string> </property> <vbox> <property stdset="1"> <name>margin</name> <number>11</number> </property> <property stdset="1"> <name>spacing</name> <number>6</number> </property> <widget> <class>QRadioButton</class> <property stdset="1"> <name>name</name> <cstring>essNon</cstring> </property> <property stdset="1"> <name>text</name> <string>Non-Spec ESSID: "ANY"</string> </property> <property stdset="1"> <name>checked</name> <bool>true</bool> </property> </widget> <widget> <class>QRadioButton</class> <property stdset="1"> <name>name</name> diff --git a/noncore/net/networksetup/wlan/wlanmodule.cpp b/noncore/net/networksetup/wlan/wlanmodule.cpp index 632f7e4..70b1f7a 100644 --- a/noncore/net/networksetup/wlan/wlanmodule.cpp +++ b/noncore/net/networksetup/wlan/wlanmodule.cpp @@ -1,85 +1,84 @@ #include "wlanmodule.h" #include <qpe/config.h> #include "wlanimp.h" /** * Constructor, find all of the possible interfaces */ WLANModule::WLANModule() : Module() { // get output from iwconfig } /** * get the icon name for this device. * @param Interface* can be used in determining the icon. * @return QString the icon name (minus .png, .gif etc) */ QString WLANModule::getPixmapName(Interface* ){ return "wlan"; } /** * Check to see if the interface i is owned by this module. + * @param Interface* interface to check against * @return bool true if i is owned by this module, false otherwise. */ bool WLANModule::isOwner(Interface *i){ if(i->getInterfaceName() == "eth0") return true; return false; } /** * Create, set tabWiget and return the WLANConfigure Module * @param tabWidget a pointer to the tab widget that this configure has. * @return QWidget* pointer to the tab widget in this modules configure. */ QWidget *WLANModule::configure(QTabWidget **tabWidget){ Config cfg("wireless"); WLANImp *wlanconfig = new WLANImp(cfg); (*tabWidget) = wlanconfig->tabWidget; return wlanconfig; } /** * Create, set tabWiget and return the Information Module * @param tabWidget a pointer to the tab widget that this information has. * @return QWidget* pointer to the tab widget in this modules info. */ QWidget *WLANModule::information(QTabWidget **tabWidget){ return NULL; } /** - * - */ + * Get all active (up or down) interfaces + * @return QList<Interface> A list of interfaces that exsist that havn't + * been called by isOwner() + */ QList<Interface> WLANModule::getInterfaces(){ - return list -} - -/** - * Return a list of possible new interfaces - */ -QMap<QString, QString> WLANModule::possibleNewInterfaces(){ - //return list; + return list; } /** * Attempt to add a new interface as defined by name * @param name the name of the type of interface that should be created given * by possibleNewInterfaces(); * @return Interface* NULL if it was unable to be created. */ -Interface *WLANModule::addNewInterface(QString name){ +Interface *WLANModule::addNewInterface(QString ){ + // We can't add a 802.11 interface, either the hardware will be there + // or it wont. return NULL; } /** * Attempts to remove the interface, doesn't delete i * @return bool true if successfull, false otherwise. */ -bool WLANModule::remove(Interface* i){ +bool WLANModule::remove(Interface*){ + // Can't remove a hardware device, you can stop it though. return false; } // wlanmodule.cpp diff --git a/noncore/net/networksetup/wlan/wlanmodule.h b/noncore/net/networksetup/wlan/wlanmodule.h index 1fbf6a9..7ebe129 100644 --- a/noncore/net/networksetup/wlan/wlanmodule.h +++ b/noncore/net/networksetup/wlan/wlanmodule.h @@ -1,38 +1,38 @@ #ifndef WLAN_MODULE_H #define WLAN_MODULE_H #include "module.h" class WLANModule : Module{ signals: void updateInterface(Interface *i); public: WLANModule(); virtual bool isOwner(Interface *); virtual QWidget *configure(QTabWidget **tabWidget); virtual QWidget *information(QTabWidget **tabWidget); virtual QList<Interface> getInterfaces(); - virtual QMap<QString, QString> possibleNewInterfaces(); + virtual void possibleNewInterfaces(QMap<QString, QString> &list){}; virtual Interface *addNewInterface(QString name); virtual bool remove(Interface* i); virtual QString getPixmapName(Interface* i); private: QList<Interface> list; }; extern "C" { void* create_plugin() { return new WLANModule(); } }; #endif // wlanmodule.h diff --git a/noncore/settings/networksettings/TODO b/noncore/settings/networksettings/TODO index 9a1657a..e69de29 100644 --- a/noncore/settings/networksettings/TODO +++ b/noncore/settings/networksettings/TODO @@ -1 +0,0 @@ -Fix DHCP obtained and expoired info diff --git a/noncore/settings/networksettings/addservice.ui b/noncore/settings/networksettings/addconnection.ui index 929f4fb..a349804 100644 --- a/noncore/settings/networksettings/addservice.ui +++ b/noncore/settings/networksettings/addconnection.ui @@ -1,154 +1,153 @@ <!DOCTYPE UI><UI> -<class>AddService</class> +<class>AddConnection</class> <widget> <class>QDialog</class> <property stdset="1"> <name>name</name> - <cstring>AddService</cstring> + <cstring>AddConnection</cstring> </property> <property stdset="1"> <name>geometry</name> <rect> <x>0</x> <y>0</y> - <width>245</width> + <width>233</width> <height>268</height> </rect> </property> <property stdset="1"> <name>caption</name> - <string>Add Network Service</string> + <string>Add Network Connection</string> </property> <grid> <property stdset="1"> <name>margin</name> <number>11</number> </property> <property stdset="1"> <name>spacing</name> <number>6</number> </property> <widget row="3" column="1" > <class>QPushButton</class> <property stdset="1"> <name>name</name> <cstring>cancelButton</cstring> </property> <property stdset="1"> <name>text</name> - <string>Cancel</string> + <string>&Cancel</string> </property> </widget> <widget row="3" column="0" > <class>QPushButton</class> <property stdset="1"> <name>name</name> <cstring>addButton</cstring> </property> <property stdset="1"> <name>text</name> - <string>Add</string> + <string>&Add</string> </property> </widget> <widget row="0" column="0" rowspan="1" colspan="2" > <class>QListView</class> <column> <property> <name>text</name> <string>Services</string> </property> <property> <name>clickable</name> <bool>true</bool> </property> <property> <name>resizeable</name> <bool>true</bool> </property> </column> <property stdset="1"> <name>name</name> <cstring>registeredServicesList</cstring> </property> <property stdset="1"> <name>sizePolicy</name> <sizepolicy> <hsizetype>7</hsizetype> <vsizetype>3</vsizetype> </sizepolicy> </property> <property stdset="1"> <name>minimumSize</name> <size> <width>0</width> <height>75</height> </size> </property> </widget> <spacer row="2" column="1" > <property> <name>name</name> <cstring>Spacer12</cstring> </property> <property stdset="1"> <name>orientation</name> <enum>Vertical</enum> </property> <property stdset="1"> <name>sizeType</name> <enum>Expanding</enum> </property> <property> <name>sizeHint</name> <size> <width>20</width> <height>20</height> </size> </property> </spacer> <widget row="1" column="0" rowspan="1" colspan="2" > <class>QLabel</class> <property stdset="1"> <name>name</name> <cstring>help</cstring> </property> <property stdset="1"> <name>sizePolicy</name> <sizepolicy> <hsizetype>5</hsizetype> <vsizetype>4</vsizetype> </sizepolicy> </property> <property stdset="1"> <name>text</name> - <string>LAN - TCP/IP -For Local-area network connections through PC_CARD network interfdace cards.</string> + <string></string> </property> <property stdset="1"> <name>alignment</name> <set>WordBreak|AlignTop|AlignLeft</set> </property> <property> <name>vAlign</name> </property> <property> <name>wordwrap</name> </property> </widget> </grid> </widget> <connections> <connection> <sender>cancelButton</sender> <signal>clicked()</signal> - <receiver>AddService</receiver> + <receiver>AddConnection</receiver> <slot>reject()</slot> </connection> <connection> <sender>addButton</sender> <signal>clicked()</signal> - <receiver>AddService</receiver> + <receiver>AddConnection</receiver> <slot>accept()</slot> </connection> </connections> </UI> diff --git a/noncore/settings/networksettings/addconnectionimp.cpp b/noncore/settings/networksettings/addconnectionimp.cpp new file mode 100644 index 0000000..ee7bd97 --- a/dev/null +++ b/noncore/settings/networksettings/addconnectionimp.cpp @@ -0,0 +1,38 @@ +#include "addconnectionimp.h" +#include <qlistview.h> +#include <qlist.h> +#include <qlabel.h> +#include <qheader.h> + +/** + * Constructor + */ +AddConnectionImp::AddConnectionImp(QWidget *parent=0, const char *name=0, WFlags f=0):AddConnection(parent, name, f){ + connect(registeredServicesList, SIGNAL(selectionChanged()), this, SLOT(changed())); + registeredServicesList->header()->hide(); +}; + +/** + * The current item changed, update the discription. + */ +void AddConnectionImp::changed(){ + QListViewItem *item = registeredServicesList->currentItem(); + if(item){ + help->setText(list[item->text(0)]); + } +} + +/** + * Save a copy of newList for the discriptions and append them all to the view + * @param newList the new list of possible interfaces + */ +void AddConnectionImp::addConnections(QMap<QString, QString> newList){ + list = newList; + QMap<QString, QString>::Iterator it; + for( it = list.begin(); it != list.end(); ++it ) + QListViewItem *item = new QListViewItem(registeredServicesList, it.key()); + registeredServicesList->setCurrentItem(registeredServicesList->firstChild()); +} + +// addserviceimp.cpp + diff --git a/noncore/settings/networksettings/addconnectionimp.h b/noncore/settings/networksettings/addconnectionimp.h new file mode 100644 index 0000000..643cd9a --- a/dev/null +++ b/noncore/settings/networksettings/addconnectionimp.h @@ -0,0 +1,29 @@ +#ifndef ADDCONNECTIONIMP_H +#define ADDCONNECTIONIMP_H + +#include "addconnection.h" +#include <qmap.h> +#include <qlist.h> + +class QListViewItem; + +class AddConnectionImp : public AddConnection { + +Q_OBJECT + +public: + AddConnectionImp(QWidget *parent=0, const char *name=0, WFlags f=0); + void addConnections(QMap<QString, QString> newList); + +private slots: + void changed(); + +private: + QMap<QString, QString> list; + +}; + +#endif + +// addconectionimp.h + diff --git a/noncore/settings/networksettings/addserviceimp.cpp b/noncore/settings/networksettings/addserviceimp.cpp deleted file mode 100644 index ac79d06..0000000 --- a/noncore/settings/networksettings/addserviceimp.cpp +++ b/dev/null @@ -1,26 +0,0 @@ -#include "addserviceimp.h" -#include <qpe/qlibrary.h> -#include <qlistview.h> -#include <qlist.h> - -void AddServiceImp::addServices(QList<QString> list){ - list.setAutoDelete(true); - - for(uint i = 0; i < list.count(); i++){ - QString pluginFileName = ""; - QLibrary *lib = new QLibrary(pluginFileName); - void *functionPointer = lib->resolve("info"); - if( !functionPointer ){ - qDebug(QString("AddServiceImp: File: %1 is not a plugin, but though was.").arg(pluginFileName).latin1()); - delete lib; - break; - } - - // Try to get an info. - QString info = ((QString (*)()) functionPointer)(); - QListViewItem *newItem = new QListViewItem(registeredServicesList, info); - } -} - - -// addserviceimp.cpp diff --git a/noncore/settings/networksettings/addserviceimp.h b/noncore/settings/networksettings/addserviceimp.h deleted file mode 100644 index 7cacb97..0000000 --- a/noncore/settings/networksettings/addserviceimp.h +++ b/dev/null @@ -1,26 +0,0 @@ -#ifndef ADDSERVICEIMP_H -#define ADDSERVICEIMP_H - -#include "addservice.h" -#include <qmap.h> -#include <qlist.h> - -class QListViewItem; - -class AddServiceImp : public AddService { - -Q_OBJECT - -public: - AddServiceImp(QWidget *parent=0, const char *name=0, WFlags f=0):AddService(parent, name, f){}; - void addServices(QList<QString> list); - -private: - QMap<QListViewItem*, QString> pluginInfo; - -}; - -#endif - -// addserviceimp.h - diff --git a/noncore/settings/networksettings/interface.h b/noncore/settings/networksettings/interface.h index 5dc95a4..1406e99 100644 --- a/noncore/settings/networksettings/interface.h +++ b/noncore/settings/networksettings/interface.h @@ -1,54 +1,55 @@ #ifndef INTERFACE_H #define INTERFACE_H #include <qstring.h> class Module; + class Interface { public: Interface(QString name = "unknown", bool status = false); virtual ~Interface(){}; virtual bool getStatus(){ return status; }; virtual void setStatus(bool newSatus){ status = newSatus; refresh(); }; virtual bool isAttached(){ return attached; }; virtual void setAttached(bool isAttached=false){ attached = isAttached; }; virtual QString getInterfaceName(){ return interfaceName; }; virtual void setInterfaceName(QString name="unknown"){ interfaceName = name; }; virtual QString getHardwareName(){ return hardareName; }; virtual void setHardwareName(QString name="Unknown"){ hardareName = name; }; virtual Module* getModuleOwner(){ return moduleOwner; }; virtual void setModuleOwner(Module *owner=NULL){ moduleOwner = owner; }; // inet information. QString getMacAddress(){ return macAddress; }; QString getIp(){ return ip; }; QString getSubnetMask(){ return subnetMask; }; QString getBroadcast(){ return broadcast; }; bool isDhcp(){ return dhcp; }; QString getDhcpServerIp(){ return dhcpServerIp; }; QString getLeaseObtained(){ return leaseObtained; }; QString getLeaseExpires(){ return leaseExpires; }; bool refresh(); bool start(); bool stop(); bool restart(); private: // Interface information bool status; bool attached; QString interfaceName; QString hardareName; Module *moduleOwner; // Network information QString macAddress; QString ip; QString broadcast; diff --git a/noncore/settings/networksettings/interfacesetupimp.cpp b/noncore/settings/networksettings/interfacesetupimp.cpp index 6a8449d..951aeee 100644 --- a/noncore/settings/networksettings/interfacesetupimp.cpp +++ b/noncore/settings/networksettings/interfacesetupimp.cpp @@ -1,73 +1,72 @@ #include "interfacesetupimp.h" #include "interface.h" #include "interfaces.h" #include <qcombobox.h> #include <qcheckbox.h> #include <qlineedit.h> #include <qspinbox.h> #include <qgroupbox.h> #include <qlabel.h> #include <qmessagebox.h> #include <assert.h> -#define INTERFACE_FILE "/home/ben/interfaces" #define DNSSCRIPT "interfacednsscript" /** * Constuctor. Set up the connection and load the first profile. */ InterfaceSetupImp::InterfaceSetupImp(QWidget* parent, const char* name, Interface *i, bool modal, WFlags fl) : InterfaceSetup(parent, name, modal, fl){ assert(i); interface = i; - interfaces = new Interfaces(INTERFACE_FILE); + interfaces = new Interfaces(); changeProfile(profileCombo->currentText()); bool error = false; if(interfaces->getInterfaceMethod(error) == INTERFACES_LOOPBACK){ staticGroupBox->hide(); dhcpCheckBox->hide(); leaseTime->hide(); leaseHoursLabel->hide(); } connect(profileCombo, SIGNAL(highlighted(const QString &)), this, SLOT(changeProfile(const QString &))); } /** * Save the current settings, then write out the interfaces file and close. */ void InterfaceSetupImp::accept(){ if(!saveSettings()) return; interfaces->write(); close(true); } /** * Save the settings for the current Interface. * @return bool true if successfull, false otherwise */ bool InterfaceSetupImp::saveSettings(){ // eh can't really do anything about it other then return. :-D if(!interfaces->isInterfaceSet()) return true; bool error = false; // Loopback case if(interfaces->getInterfaceMethod(error) == INTERFACES_LOOPBACK){ interfaces->setAuto(interface->getInterfaceName(), autoStart->isChecked()); return true; } if(!dhcpCheckBox->isChecked() && (ipAddressEdit->text().isEmpty() || subnetMaskEdit->text().isEmpty() || firstDNSLineEdit->text().isEmpty())){ QMessageBox::information(this, "Empy Fields.", "Please fill in address, subnet,\n gateway and the first dns entries.", "Ok"); return false; } interfaces->removeAllInterfaceOptions(); // DHCP if(dhcpCheckBox->isChecked()){ interfaces->setInterfaceMethod(INTERFACES_METHOD_DHCP); interfaces->setInterfaceOption("leasehours", QString("%1").arg(leaseTime->value())); interfaces->setInterfaceOption("leasetime", QString("%1").arg(leaseTime->value()*60*60)); diff --git a/noncore/settings/networksettings/mainwindow.ui b/noncore/settings/networksettings/mainwindow.ui index a3f7bb1..f5b104a 100644 --- a/noncore/settings/networksettings/mainwindow.ui +++ b/noncore/settings/networksettings/mainwindow.ui @@ -57,159 +57,159 @@ <number>6</number> </property> <widget> <class>QListView</class> <column> <property> <name>text</name> <string>i</string> </property> <property> <name>clickable</name> <bool>true</bool> </property> <property> <name>resizeable</name> <bool>true</bool> </property> </column> <column> <property> <name>text</name> <string>t</string> </property> <property> <name>clickable</name> <bool>true</bool> </property> <property> <name>resizeable</name> <bool>true</bool> </property> </column> <column> <property> <name>text</name> <string>Name</string> </property> <property> <name>clickable</name> <bool>true</bool> </property> <property> <name>resizeable</name> <bool>true</bool> </property> </column> <property stdset="1"> <name>name</name> - <cstring>serviceList</cstring> + <cstring>connectionList</cstring> </property> <property stdset="1"> <name>allColumnsShowFocus</name> <bool>true</bool> </property> </widget> <widget> <class>QLayoutWidget</class> <property stdset="1"> <name>name</name> <cstring>Layout2</cstring> </property> <property> <name>layoutMargin</name> </property> <grid> <property stdset="1"> <name>margin</name> <number>5</number> </property> <property stdset="1"> <name>spacing</name> <number>6</number> </property> <widget row="1" column="0" > <class>QPushButton</class> <property stdset="1"> <name>name</name> - <cstring>addServiceButton</cstring> + <cstring>addConnectionButton</cstring> </property> <property stdset="1"> <name>text</name> <string>&Add</string> </property> </widget> <widget row="0" column="0" > <class>QPushButton</class> <property stdset="1"> <name>name</name> - <cstring>informationServiceButton</cstring> + <cstring>informationConnectionButton</cstring> </property> <property stdset="1"> <name>text</name> <string>&Information</string> </property> </widget> <widget row="0" column="1" > <class>QPushButton</class> <property stdset="1"> <name>name</name> - <cstring>configureServiceButton</cstring> + <cstring>configureConnectionButton</cstring> </property> <property stdset="1"> <name>text</name> <string>&Configure</string> </property> </widget> <widget row="1" column="1" > <class>QPushButton</class> <property stdset="1"> <name>name</name> - <cstring>removeServiceButton</cstring> + <cstring>removeConnectionButton</cstring> </property> <property stdset="1"> <name>text</name> <string>&Remove</string> </property> </widget> </grid> </widget> </vbox> </widget> <widget> <class>QWidget</class> <property stdset="1"> <name>name</name> <cstring>tab</cstring> </property> <attribute> <name>title</name> <string>Profiles</string> </attribute> <grid> <property stdset="1"> <name>margin</name> <number>11</number> </property> <property stdset="1"> <name>spacing</name> <number>6</number> </property> <widget row="1" column="0" rowspan="1" colspan="3" > <class>Line</class> <property stdset="1"> <name>name</name> <cstring>Line1</cstring> </property> <property stdset="1"> <name>orientation</name> <enum>Horizontal</enum> </property> </widget> <widget row="0" column="0" > <class>QLabel</class> <property stdset="1"> <name>name</name> <cstring>TextLabel1</cstring> </property> <property stdset="1"> <name>text</name> diff --git a/noncore/settings/networksettings/mainwindowimp.cpp b/noncore/settings/networksettings/mainwindowimp.cpp index 89dac6f..66ec8b5 100644 --- a/noncore/settings/networksettings/mainwindowimp.cpp +++ b/noncore/settings/networksettings/mainwindowimp.cpp @@ -1,362 +1,369 @@ #include "mainwindowimp.h"
-#include "addserviceimp.h"
+#include "addconnectionimp.h"
#include "interfaceinformationimp.h"
#include "interfacesetupimp.h"
-#include "kprocess.h"
#include "module.h"
+#include "kprocess.h"
#include <qpushbutton.h>
#include <qtabwidget.h>
#include <qlistbox.h>
#include <qlistview.h>
#include <qheader.h>
#include <qlabel.h>
#include <qmainwindow.h>
#include <qmessagebox.h>
#include <qpe/config.h>
#include <qpe/qlibrary.h>
#include <qpe/resource.h>
#include <qlist.h>
#include <qdir.h>
#include <qfile.h>
#include <qtextstream.h>
-// For library loading.
-#include <dlfcn.h>
-
#define TEMP_ALL "/tmp/ifconfig-a"
#define TEMP_UP "/tmp/ifconfig"
-MainWindowImp::MainWindowImp(QWidget *parent, const char *name) : MainWindow(parent, name, true) {
- connect(addServiceButton, SIGNAL(clicked()), this, SLOT(addClicked()));
- connect(removeServiceButton, SIGNAL(clicked()), this, SLOT(removeClicked()));
- connect(informationServiceButton, SIGNAL(clicked()), this, SLOT(informationClicked()));
- connect(configureServiceButton, SIGNAL(clicked()), this, SLOT(configureClicked()));
+MainWindowImp::MainWindowImp(QWidget *parent, const char *name) : MainWindow(parent, name, true), advancedUserMode(false){
+ 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(profilesList, SIGNAL(highlighted(const QString&)), this, SLOT(changeProfile(const QString&)));
- // Make sure we have a plugin directory to scan.
- QString DirStr = QDir::homeDirPath() + "/.networksetup/" ;
- QDir pluginDir( DirStr );
- pluginDir.mkdir( DirStr );
- pluginDir.mkdir( ( DirStr + "plugins/" ) );
- QString path = DirStr + "plugins";
- pluginDir.setPath(path);
- if(!pluginDir.exists()){
- qDebug(QString("MainWindowImp: ERROR: %1 %2").arg(__FILE__).arg(__LINE__).latin1());
- return;
- }
-
- // Load any saved services.
- loadModules(path);
+ // Load connections.
+ loadModules(QDir::homeDirPath() + "/.networksetup/plugins");
getInterfaceList();
- serviceList->header()->hide();
+ 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));
+ advancedUserMode = cfg.readBoolEntry("AdvancedUserMode", false);
}
/**
- * Deconstructor. Unload libraries and save profile list.
+ * Deconstructor. Save profiles. Delete loaded libraries.
*/
MainWindowImp::~MainWindowImp(){
+ // Save profiles.
if(profiles.count() > 1){
Config cfg("NetworkSetup");
cfg.writeEntry("Profiles", profiles.join(" "));
}
+ // Delete Modules and Libraries
+ QMap<Module*, QLibrary*>::Iterator it;
+ for( it = libraries.begin(); it != libraries.end(); ++it ){
+ delete it.key();
+ delete it.data();
+ }
}
+/**
+ * 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(QString path){
qDebug(path.latin1());
- QDir d;
- d.setPath(path);
- if(!d.exists()){
- qDebug("MainWindowImp:: Path doesn't exists");
+ 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()) ) {
if(fi->fileName().contains(".so")){
- qDebug("Found");
- Module *foo = loadPlugin(path + "/" + fi->fileName());
+ loadPlugin(path + "/" + fi->fileName());
}
++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(QString pluginFileName, QString resolveString){
- qDebug(pluginFileName.latin1());
+ qDebug(QString("MainWindowImp::loadPlugin: %1").arg(pluginFileName).latin1());
QLibrary *lib = new QLibrary(pluginFileName);
void *functionPointer = lib->resolve(resolveString);
if( !functionPointer ){
qDebug(QString("MainWindowImp: File: %1 is not a plugin, but though was.").arg(pluginFileName).latin1());
delete lib;
return NULL;
}
// Try to get an object.
Module *object = ((Module* (*)()) functionPointer)();
if(object == NULL){
qDebug("MainWindowImp: Couldn't create object, but did load library!");
delete lib;
return NULL;
}
- // Store for reference
+ // Store for deletion later
libraries.insert(object, lib);
return object;
}
/**
* 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(){
- // Now that we have a list of all of the protocals, list them.
- {
- QMessageBox::information(this, "No Modules", "Nothing to add.", "Ok");
+ QMap<Module*, QLibrary*>::Iterator it;
+ QMap<QString, QString> list;
+ list.insert("USB (PPP) / (ADD_TEST)", "A dialup connection over the USB port");
+ list.insert("IrDa (PPP) / (ADD_TEST)", "A dialup connection over the IdDa port");
+ 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.", "Ok");
return;
}
- AddServiceImp service(this, "AddService", true);
- service.showMaximized();
- service.exec();
+ AddConnectionImp addNewConnection(this, "AddConnectionImp", true);
+ addNewConnection.addConnections(list);
+ addNewConnection.showMaximized();
+ if(QDialog::Accepted == addNewConnection.exec()){
+
+ }
}
/**
* 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 = serviceList->currentItem();
+ QListViewItem *item = connectionList->currentItem();
if(item == NULL) {
QMessageBox::information(this, "Error","Please select an interface.", "Ok");
return;
}
if((interfaceItems[item])->getModuleOwner() == NULL){
QMessageBox::information(this, "Can't remove interface.", "Interface is built in.", "Ok");
}
else{
// Try to remove.
}
}
/**
- * See if there is a configuration for the selected protocal.
- * Prompt with errors.
+ * 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 with a empty
+ * tab. If tab is !NULL then append the interfaces setup widget to it.
*/
void MainWindowImp::configureClicked(){
- QListViewItem *item = serviceList->currentItem();
- if(item == NULL){
- QMessageBox::information(this, "Error","Please select an interface.", "Ok");
- return;
+ QListViewItem *item = connectionList->currentItem();
+ if(!item){
+ QMessageBox::information(this, "Error","Please select an interface.", QMessageBox::Ok);
+ return;
}
-
- if((interfaceItems[item])->getModuleOwner() == NULL){
- InterfaceSetupImp *conf = new InterfaceSetupImp(0, "InterfaceConfiguration", interfaceItems[item]);
- conf->showMaximized();
- conf->show();
- }
- else{
- QTabWidget *t = NULL;
- QWidget *conf = (interfaceItems[item])->getModuleOwner()->configure(&t);
- if(conf != NULL){
- qDebug("Conf found");
- if(t != NULL){
- qDebug("Adding Interface");
- InterfaceSetupImp *i = new InterfaceSetupImp(t, "TCPIPInformation", interfaceItems[item], true);
- t->insertTab(i, "TCP/IP");
+
+ Interface *i = interfaceItems[item];
+ if(i->getModuleOwner()){
+ QTabWidget *tabWidget = NULL;
+ QWidget *moduleConfigure = i->getModuleOwner()->configure(&tabWidget);
+ if(moduleConfigure != NULL){
+ if(tabWidget != NULL){
+ InterfaceSetupImp *configure = new InterfaceSetupImp(tabWidget, "InterfaceSetupImp", i, true);
+ tabWidget->insertTab(configure, "TCP/IP");
}
- conf->showMaximized();
- conf->show();
- }
- else{
- InterfaceSetupImp *i = new InterfaceSetupImp(0, "TCPIPInformation", interfaceItems[item], true);
- i->showMaximized();
- i->show();
+ moduleConfigure->showMaximized();
+ moduleConfigure->show();
+ return;
}
}
+
+ InterfaceSetupImp *configure = new InterfaceSetupImp(0, "InterfaceSetupImp", i, true);
+ configure->showMaximized();
+ configure->show();
}
/**
- * Pull up the information about the selected interface
- * Report an error
+ * 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 with a empty
+ * tab. If tab is !NULL then append the interfaces setup widget to it.
*/
void MainWindowImp::informationClicked(){
- QListViewItem *item = serviceList->currentItem();
- if(item == NULL){
- QMessageBox::information(this, "Error","Please select an interface.", "Ok");
+ QListViewItem *item = connectionList->currentItem();
+ if(!item){
+ QMessageBox::information(this, "Error","Please select an interface.", QMessageBox::Ok);
return;
- }
-
- if( (interfaceItems[item])->getModuleOwner() == NULL){
- InterfaceInformationImp *i = new InterfaceInformationImp(0, "InterfaceInformationImp", interfaceItems[item]);
- i->showMaximized();
- i->show();
- }
- else{
- QTabWidget *t = NULL;
- QWidget *conf = (interfaceItems[item])->getModuleOwner()->information(&t);
- if(conf != NULL){
- if(t){
- qDebug("Adding Interface");
- InterfaceInformationImp *i = new InterfaceInformationImp(t, "TCPIPInformation", interfaceItems[item], true);
- t->insertTab(i, "TCP/IP");
+ }
+
+ Interface *i = interfaceItems[item];
+ if(i->getModuleOwner()){
+ QTabWidget *tabWidget = NULL;
+ QWidget *moduleInformation = i->getModuleOwner()->information(&tabWidget);
+ if(moduleInformation != NULL){
+ if(tabWidget != NULL){
+ InterfaceInformationImp *information = new InterfaceInformationImp(tabWidget, "InterfaceSetupImp", i, true);
+ tabWidget->insertTab(information, "TCP/IP");
}
- conf->showMaximized();
- conf->show();
+ moduleInformation->showMaximized();
+ moduleInformation->show();
+ return;
}
- else{
- InterfaceInformationImp *i = new InterfaceInformationImp(0, "TCPIPInformation", interfaceItems[item], true);
- i->showMaximized();
- i->show();
- }
- }
+ }
+
+ InterfaceInformationImp *information = new InterfaceInformationImp(0, "InterfaceSetupImp", i, true);
+ information->showMaximized();
+ information->show();
}
/**
* Aquire the list of active interfaces from ifconfig
* Call ifconfig and ifconfig -a
*/
void MainWindowImp::getInterfaceList(){
KShellProcess *processAll = new KShellProcess();
*processAll << "/sbin/ifconfig" << "-a" << " > " TEMP_ALL;
connect(processAll, SIGNAL(processExited(KProcess *)),
this, SLOT(jobDone(KProcess *)));
threads.insert(processAll, TEMP_ALL);
processAll->start(KShellProcess::NotifyOnExit);
KShellProcess *process = new KShellProcess();
*process << "/sbin/ifconfig" << " > " TEMP_UP;
connect(process, SIGNAL(processExited(KProcess *)),
this, SLOT(jobDone(KProcess *)));
threads.insert(process, TEMP_UP);
process->start(KShellProcess::NotifyOnExit);
}
void MainWindowImp::jobDone(KProcess *process){
QString fileName = threads[process];
threads.remove(process);
delete process;
QFile file(fileName);
if (!file.open(IO_ReadOnly)){
qDebug(QString("MainWindowImp: Can't open file: %1").arg(fileName).latin1());
return;
}
QTextStream stream( &file );
QString line;
while ( !stream.eof() ) {
line = stream.readLine();
int space = line.find(" ");
if(space > 1){
// We have found an interface
QString interfaceName = line.mid(0, space);
+ if(!advancedUserMode){
+ if(interfaceName == "lo")
+ break;
+ }
Interface *i;
// See if we already have it
if(interfaceNames.find(interfaceName) == interfaceNames.end()){
if(fileName == TEMP_ALL)
i = new Interface(interfaceName, false);
else
i = new Interface(interfaceName, true);
}
else{
i = interfaceNames[interfaceName];
if(fileName != TEMP_ALL)
i->setStatus(true);
}
i->setAttached(true);
i->setInterfaceName(interfaceName);
QString hardName = "Ethernet";
int hardwareName = line.find("Link encap:");
int macAddress = line.find("HWaddr");
if(macAddress == -1)
macAddress = line.length();
if(hardwareName != -1)
i->setHardwareName(line.mid(hardwareName+11, macAddress-(hardwareName+11)) + QString(" (%1)").arg(i->getInterfaceName()));
// We have found an interface
//qDebug(QString("MainWindowImp: Found Interface: %1").arg(line).latin1());
interfaceNames.insert(i->getInterfaceName(), i);
updateInterface(i);
}
}
file.close();
QFile::remove(fileName);
}
+/**
+ *
+ */
void MainWindowImp::updateInterface(Interface *i){
QListViewItem *item = NULL;
// See if we already have it
if(items.find(i) == items.end()){
- item = new QListViewItem(serviceList, "", "", "");
+ 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];
QString statusImage = "down";
if(i->getStatus())
statusImage = "up";
QPixmap status = (Resource::loadPixmap(statusImage));
item->setPixmap(0, status);
QString typeName = "lan";
if(i->getHardwareName().contains("Local Loopback"))
typeName = "lo";
if(i->getInterfaceName().contains("irda"))
typeName = "irda";
if(i->getInterfaceName().contains("wlan"))
typeName = "wlan";
// Actually try to use the Module
if(i->getModuleOwner() != NULL){
typeName = i->getModuleOwner()->getPixmapName(i);
}
QPixmap type = (Resource::loadPixmap(typeName));
item->setPixmap(1, type);
item->setText(2, i->getHardwareName());
}
/**
* Adds a new profile to the list of profiles.
* Don't add profiles that already exists.
* Appends to the combo and QStringList
*/
void MainWindowImp::addProfile(){
QString newProfileName = "New";
if(profiles.grep(newProfileName).count() > 0){
QMessageBox::information(this, "Can't Add.","Profile already exists.", "Ok");
return;
}
diff --git a/noncore/settings/networksettings/mainwindowimp.h b/noncore/settings/networksettings/mainwindowimp.h index 19ebaf2..629b758 100644 --- a/noncore/settings/networksettings/mainwindowimp.h +++ b/noncore/settings/networksettings/mainwindowimp.h @@ -3,54 +3,55 @@ #include "mainwindow.h"
#include <qmap.h>
#include <qstringlist.h>
class Module;
class Interface;
class QLibrary;
class KProcess;
class MainWindowImp : public MainWindow {
Q_OBJECT
public:
MainWindowImp(QWidget *parent=0, const char *name=0);
~MainWindowImp();
private slots:
void addClicked();
void removeClicked();
void configureClicked();
void informationClicked();
void jobDone(KProcess *process);
void getInterfaceList();
void addProfile();
void removeProfile();
void changeProfile(const QString&);
void updateInterface(Interface *i);
private:
void loadModules(QString path);
Module* loadPlugin(QString pluginFileName,
QString resolveString = "create_plugin");
// For our local list of names
QMap<QString, Interface*> interfaceNames;
QMap<Module*, QLibrary*> libraries;
QMap<Interface*, QListViewItem*> items;
QMap<QListViewItem*, Interface*> interfaceItems;
QMap<KProcess*, QString> threads;
QStringList profiles;
+ bool advancedUserMode;
};
#endif
// mainwindowimp.h
diff --git a/noncore/settings/networksettings/module.h b/noncore/settings/networksettings/module.h index c1e9488..0c81928 100644 --- a/noncore/settings/networksettings/module.h +++ b/noncore/settings/networksettings/module.h @@ -1,34 +1,79 @@ #ifndef NETCONF_MODULE_H #define NETCONF_MODULE_H #include <qobject.h> #include <qlist.h> #include <qmap.h> #include "interface.h" class QWidget; class QTabWidget; class Module : QObject{ signals: void updateInterface(Interface *i); public: Module(){}; - + + /** + * get the icon name for this device. + * @param Interface* can be used in determining the icon. + * @return QString the icon name (minus .png, .gif etc) + */ + virtual QString getPixmapName(Interface* i) = 0; + + /** + * Check to see if the interface i is owned by this module. + * @param Interface* interface to check against + * @return bool true if i is owned by this module, false otherwise. + */ virtual bool isOwner(Interface *){ return false; }; - virtual QWidget *configure(QTabWidget **tabWidget){ return NULL; } ; - virtual QWidget *information(QTabWidget **tabWidget){ return NULL; }; + + /** + * Create, set tabWiget and return the WLANConfigure Module + * @param tabWidget a pointer to the tab widget that this configure has. + * @return QWidget* pointer to the tab widget in this modules configure. + */ + virtual QWidget *configure(QTabWidget **){ return NULL; } ; + + /** + * Create, set tabWiget and return the Information Module + * @param tabWidget a pointer to the tab widget that this information has. + * @return QWidget* pointer to the tab widget in this modules info. + */ + virtual QWidget *information(QTabWidget **){ return NULL; }; + + /** + * Get all active (up or down) interfaces + * @return QList<Interface> A list of interfaces that exsist that havn't + * been called by isOwner() + */ virtual QList<Interface> getInterfaces() = 0; - virtual QMap<QString, QString> possibleNewInterfaces() = 0; + + /** + * Adds possible new interfaces to the list (Example: usb(ppp), ir(ppp), + * modem ppp) + */ + virtual void possibleNewInterfaces(QMap<QString, QString> &list) = 0; + + /** + * Attempts to create a new interface from name + * @return Interface* NULL if it was unable to be created. + * @param name the type of interface to create + */ virtual Interface *addNewInterface(QString name) = 0; + + /** + * Attempts to remove the interface, doesn't delete i + * @return bool true if successfull, false otherwise. + */ virtual bool remove(Interface* i) = 0; - virtual QString getPixmapName(Interface* i) = 0; }; #endif // module.h diff --git a/noncore/settings/networksettings/networksetup.pro b/noncore/settings/networksettings/networksetup.pro index 0d48790..ba70180 100644 --- a/noncore/settings/networksettings/networksetup.pro +++ b/noncore/settings/networksettings/networksetup.pro @@ -1,10 +1,10 @@ TEMPLATE = app #CONFIG = qt warn_on debug CONFIG = qt warn_on release -HEADERS = mainwindowimp.h addserviceimp.h interface.h interfaceinformationimp.h interfacesetupimp.h interfaces.h defaultmodule.h kprocctrl.h module.h kprocess.h -SOURCES = main.cpp mainwindowimp.cpp addserviceimp.cpp interface.cpp interfaceinformationimp.cpp interfacesetupimp.cpp kprocctrl.cpp kprocess.cpp interfaces.cpp +HEADERS = mainwindowimp.h addconnectionimp.h interface.h interfaceinformationimp.h interfacesetupimp.h interfaces.h defaultmodule.h kprocctrl.h module.h kprocess.h +SOURCES = main.cpp mainwindowimp.cpp addconnectionimp.cpp interface.cpp interfaceinformationimp.cpp interfacesetupimp.cpp kprocctrl.cpp kprocess.cpp interfaces.cpp #INCLUDEPATH += $(QPEDIR)/include #DEPENDPATH += $(QPEDIR)/include LIBS += -lqpe -INTERFACES = mainwindow.ui addservice.ui interfaceinformation.ui interfaceadvanced.ui interfacesetup.ui +INTERFACES = mainwindow.ui addconnection.ui interfaceinformation.ui interfaceadvanced.ui interfacesetup.ui TARGET = networksetup diff --git a/noncore/settings/networksettings/wlan/wlan.ui b/noncore/settings/networksettings/wlan/wlan.ui index dcacbe8..9f33559 100644 --- a/noncore/settings/networksettings/wlan/wlan.ui +++ b/noncore/settings/networksettings/wlan/wlan.ui @@ -1,104 +1,104 @@ <!DOCTYPE UI><UI> <class>WLAN</class> <widget> <class>QDialog</class> <property stdset="1"> <name>name</name> <cstring>WLAN</cstring> </property> <property stdset="1"> <name>geometry</name> <rect> <x>0</x> <y>0</y> - <width>254</width> + <width>250</width> <height>286</height> </rect> </property> <property stdset="1"> <name>caption</name> <string>Wireless LAN Setting</string> </property> <property stdset="1"> <name>sizeGripEnabled</name> <bool>true</bool> </property> <property> <name>layoutMargin</name> </property> <vbox> <property stdset="1"> <name>margin</name> <number>0</number> </property> <property stdset="1"> <name>spacing</name> <number>6</number> </property> <widget> <class>QTabWidget</class> <property stdset="1"> <name>name</name> <cstring>tabWidget</cstring> </property> <property stdset="1"> <name>enabled</name> <bool>true</bool> </property> <widget> <class>QWidget</class> <property stdset="1"> <name>name</name> <cstring>ConfigPage</cstring> </property> <attribute> <name>title</name> - <string>Config</string> + <string>WLAN General</string> </attribute> <vbox> <property stdset="1"> <name>margin</name> <number>11</number> </property> <property stdset="1"> <name>spacing</name> <number>6</number> </property> <widget> <class>QButtonGroup</class> <property stdset="1"> <name>name</name> <cstring>ButtonGroup45</cstring> </property> <property stdset="1"> <name>title</name> <string>ESS ID</string> </property> <vbox> <property stdset="1"> <name>margin</name> <number>11</number> </property> <property stdset="1"> <name>spacing</name> <number>6</number> </property> <widget> <class>QRadioButton</class> <property stdset="1"> <name>name</name> <cstring>essNon</cstring> </property> <property stdset="1"> <name>text</name> <string>Non-Spec ESSID: "ANY"</string> </property> <property stdset="1"> <name>checked</name> <bool>true</bool> </property> </widget> <widget> <class>QRadioButton</class> <property stdset="1"> <name>name</name> diff --git a/noncore/settings/networksettings/wlan/wlanmodule.cpp b/noncore/settings/networksettings/wlan/wlanmodule.cpp index 632f7e4..70b1f7a 100644 --- a/noncore/settings/networksettings/wlan/wlanmodule.cpp +++ b/noncore/settings/networksettings/wlan/wlanmodule.cpp @@ -1,85 +1,84 @@ #include "wlanmodule.h" #include <qpe/config.h> #include "wlanimp.h" /** * Constructor, find all of the possible interfaces */ WLANModule::WLANModule() : Module() { // get output from iwconfig } /** * get the icon name for this device. * @param Interface* can be used in determining the icon. * @return QString the icon name (minus .png, .gif etc) */ QString WLANModule::getPixmapName(Interface* ){ return "wlan"; } /** * Check to see if the interface i is owned by this module. + * @param Interface* interface to check against * @return bool true if i is owned by this module, false otherwise. */ bool WLANModule::isOwner(Interface *i){ if(i->getInterfaceName() == "eth0") return true; return false; } /** * Create, set tabWiget and return the WLANConfigure Module * @param tabWidget a pointer to the tab widget that this configure has. * @return QWidget* pointer to the tab widget in this modules configure. */ QWidget *WLANModule::configure(QTabWidget **tabWidget){ Config cfg("wireless"); WLANImp *wlanconfig = new WLANImp(cfg); (*tabWidget) = wlanconfig->tabWidget; return wlanconfig; } /** * Create, set tabWiget and return the Information Module * @param tabWidget a pointer to the tab widget that this information has. * @return QWidget* pointer to the tab widget in this modules info. */ QWidget *WLANModule::information(QTabWidget **tabWidget){ return NULL; } /** - * - */ + * Get all active (up or down) interfaces + * @return QList<Interface> A list of interfaces that exsist that havn't + * been called by isOwner() + */ QList<Interface> WLANModule::getInterfaces(){ - return list -} - -/** - * Return a list of possible new interfaces - */ -QMap<QString, QString> WLANModule::possibleNewInterfaces(){ - //return list; + return list; } /** * Attempt to add a new interface as defined by name * @param name the name of the type of interface that should be created given * by possibleNewInterfaces(); * @return Interface* NULL if it was unable to be created. */ -Interface *WLANModule::addNewInterface(QString name){ +Interface *WLANModule::addNewInterface(QString ){ + // We can't add a 802.11 interface, either the hardware will be there + // or it wont. return NULL; } /** * Attempts to remove the interface, doesn't delete i * @return bool true if successfull, false otherwise. */ -bool WLANModule::remove(Interface* i){ +bool WLANModule::remove(Interface*){ + // Can't remove a hardware device, you can stop it though. return false; } // wlanmodule.cpp diff --git a/noncore/settings/networksettings/wlan/wlanmodule.h b/noncore/settings/networksettings/wlan/wlanmodule.h index 1fbf6a9..7ebe129 100644 --- a/noncore/settings/networksettings/wlan/wlanmodule.h +++ b/noncore/settings/networksettings/wlan/wlanmodule.h @@ -1,38 +1,38 @@ #ifndef WLAN_MODULE_H #define WLAN_MODULE_H #include "module.h" class WLANModule : Module{ signals: void updateInterface(Interface *i); public: WLANModule(); virtual bool isOwner(Interface *); virtual QWidget *configure(QTabWidget **tabWidget); virtual QWidget *information(QTabWidget **tabWidget); virtual QList<Interface> getInterfaces(); - virtual QMap<QString, QString> possibleNewInterfaces(); + virtual void possibleNewInterfaces(QMap<QString, QString> &list){}; virtual Interface *addNewInterface(QString name); virtual bool remove(Interface* i); virtual QString getPixmapName(Interface* i); private: QList<Interface> list; }; extern "C" { void* create_plugin() { return new WLANModule(); } }; #endif // wlanmodule.h |