summaryrefslogtreecommitdiff
path: root/noncore/settings/networksettings/mainwindow
Side-by-side diff
Diffstat (limited to 'noncore/settings/networksettings/mainwindow') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/networksettings/mainwindow/.cvsignore29
-rw-r--r--noncore/settings/networksettings/mainwindow/addconnection.ui158
-rw-r--r--noncore/settings/networksettings/mainwindow/addconnectionimp.cpp41
-rw-r--r--noncore/settings/networksettings/mainwindow/addconnectionimp.h28
-rw-r--r--noncore/settings/networksettings/mainwindow/defaultmodule.h26
-rw-r--r--noncore/settings/networksettings/mainwindow/main.cpp7
-rw-r--r--noncore/settings/networksettings/mainwindow/mainwindow.pro11
-rw-r--r--noncore/settings/networksettings/mainwindow/mainwindow.ui451
-rw-r--r--noncore/settings/networksettings/mainwindow/mainwindowimp.cpp749
-rw-r--r--noncore/settings/networksettings/mainwindow/mainwindowimp.h75
-rw-r--r--noncore/settings/networksettings/mainwindow/module.h188
11 files changed, 1763 insertions, 0 deletions
diff --git a/noncore/settings/networksettings/mainwindow/.cvsignore b/noncore/settings/networksettings/mainwindow/.cvsignore
new file mode 100644
index 0000000..e000724
--- a/dev/null
+++ b/noncore/settings/networksettings/mainwindow/.cvsignore
@@ -0,0 +1,29 @@
+*.moc
+*.moc.o
+*.o
+.deps
+.libs
+.moc.cpp
+.moc.o
+.o
+Makefile*
+addconnection.cpp
+addconnection.h
+interfaceadvanced.cpp
+interfaceadvanced.h
+interfaceinformation.cpp
+interfaceinformation.h
+interfacesetup.cpp
+interfacesetup.h
+mainwindow.cpp
+mainwindow.h
+moc_*.cpp
+networksetup
+systemadvanced.cpp
+systemadvanced.h
+hosts.h
+hosts.cpp
+vpn.h
+vpn.cpp
+dns.h
+dns.cpp
diff --git a/noncore/settings/networksettings/mainwindow/addconnection.ui b/noncore/settings/networksettings/mainwindow/addconnection.ui
new file mode 100644
index 0000000..da6cf06
--- a/dev/null
+++ b/noncore/settings/networksettings/mainwindow/addconnection.ui
@@ -0,0 +1,158 @@
+<!DOCTYPE UI><UI>
+<class>AddConnection</class>
+<widget>
+ <class>QDialog</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>AddConnection</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>229</width>
+ <height>268</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <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>&amp;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>&amp;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></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>AddConnection</receiver>
+ <slot>reject()</slot>
+ </connection>
+ <connection>
+ <sender>addButton</sender>
+ <signal>clicked()</signal>
+ <receiver>AddConnection</receiver>
+ <slot>accept()</slot>
+ </connection>
+</connections>
+<tabstops>
+ <tabstop>registeredServicesList</tabstop>
+ <tabstop>addButton</tabstop>
+ <tabstop>cancelButton</tabstop>
+</tabstops>
+</UI>
diff --git a/noncore/settings/networksettings/mainwindow/addconnectionimp.cpp b/noncore/settings/networksettings/mainwindow/addconnectionimp.cpp
new file mode 100644
index 0000000..f18d8d1
--- a/dev/null
+++ b/noncore/settings/networksettings/mainwindow/addconnectionimp.cpp
@@ -0,0 +1,41 @@
+#include "addconnectionimp.h"
+#include <qlistview.h>
+#if QT_VERSION < 300
+#include <qlist.h>
+#else
+#include <qptrlist.h>
+#endif
+#include <qlabel.h>
+#include <qheader.h>
+
+/**
+ * Constructor
+ */
+AddConnectionImp::AddConnectionImp(QWidget *parent, const char *name, WFlags f):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(const 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/mainwindow/addconnectionimp.h b/noncore/settings/networksettings/mainwindow/addconnectionimp.h
new file mode 100644
index 0000000..57e6b20
--- a/dev/null
+++ b/noncore/settings/networksettings/mainwindow/addconnectionimp.h
@@ -0,0 +1,28 @@
+#ifndef ADDCONNECTIONIMP_H
+#define ADDCONNECTIONIMP_H
+
+#include "addconnection.h"
+#include <qmap.h>
+
+class QListViewItem;
+
+class AddConnectionImp : public AddConnection {
+
+Q_OBJECT
+
+public:
+ AddConnectionImp(QWidget *parent=0, const char *name=0, WFlags f=0);
+ void addConnections(const QMap<QString, QString> &newList);
+
+private slots:
+ void changed();
+
+private:
+ QMap<QString, QString> list;
+
+};
+
+#endif
+
+// addconectionimp.h
+
diff --git a/noncore/settings/networksettings/mainwindow/defaultmodule.h b/noncore/settings/networksettings/mainwindow/defaultmodule.h
new file mode 100644
index 0000000..c7791d5
--- a/dev/null
+++ b/noncore/settings/networksettings/mainwindow/defaultmodule.h
@@ -0,0 +1,26 @@
+#ifndef MODULE_H
+#define MODULE_H
+
+#include "module.h"
+
+class QWidget;
+
+class DefaultModule : Module{
+
+public:
+ DefaultModule(){};
+
+ virtual bool isOwner(Interface *i);
+ virtual QWidget *configure();
+ virtual QWidget *information()};
+ virtual QList<Interface> getInterfaces();
+ virtual QMap<QString, QString> possibleNewInterfaces();
+ virtual Interface *addNewInterface(QString name);
+ virtual bool remove(Interface* i);
+
+};
+
+#endif
+
+// module.h
+
diff --git a/noncore/settings/networksettings/mainwindow/main.cpp b/noncore/settings/networksettings/mainwindow/main.cpp
new file mode 100644
index 0000000..e4153c3
--- a/dev/null
+++ b/noncore/settings/networksettings/mainwindow/main.cpp
@@ -0,0 +1,7 @@
+#include "mainwindowimp.h"
+#include <opie2/oapplicationfactory.h>
+
+using namespace Opie::Core;
+OPIE_EXPORT_APP( OApplicationFactory<MainWindowImp> )
+
+
diff --git a/noncore/settings/networksettings/mainwindow/mainwindow.pro b/noncore/settings/networksettings/mainwindow/mainwindow.pro
new file mode 100644
index 0000000..460d4d7
--- a/dev/null
+++ b/noncore/settings/networksettings/mainwindow/mainwindow.pro
@@ -0,0 +1,11 @@
+CONFIG = qt warn_on quick-app
+HEADERS = mainwindowimp.h addconnectionimp.h defaultmodule.h module.h
+SOURCES = main.cpp mainwindowimp.cpp addconnectionimp.cpp
+INCLUDEPATH += $(OPIEDIR)/include ../interfaces/ .
+DEPENDPATH += $(OPIEDIR)/include ../interfaces/ ../wlan/ ../ppp/
+LIBS += -lqpe -L$(OPIEDIR)/plugins/networksettings -L../interfaces -linterfaces -lopiecore2 -lopieui2
+INTERFACES = mainwindow.ui addconnection.ui
+TARGET = networksettings
+
+
+include ( $(OPIEDIR)/include.pro )
diff --git a/noncore/settings/networksettings/mainwindow/mainwindow.ui b/noncore/settings/networksettings/mainwindow/mainwindow.ui
new file mode 100644
index 0000000..a730dd5
--- a/dev/null
+++ b/noncore/settings/networksettings/mainwindow/mainwindow.ui
@@ -0,0 +1,451 @@
+<!DOCTYPE UI><UI>
+<class>MainWindow</class>
+<widget>
+ <class>QWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>MainWindow</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>240</width>
+ <height>289</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>Network Settings</string>
+ </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>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <widget>
+ <class>QWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Widget3</cstring>
+ </property>
+ <attribute>
+ <name>title</name>
+ <string>Connections</string>
+ </attribute>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QListView</class>
+ <column>
+ <property>
+ <name>text</name>
+ <string>s</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>
+ <column>
+ <property>
+ <name>text</name>
+ <string>in</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>IP</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>connectionList</cstring>
+ </property>
+ <property stdset="1">
+ <name>allColumnsShowFocus</name>
+ <bool>true</bool>
+ </property>
+ <property>
+ <name>whatsThis</name>
+ <string>A list of network settings to be choosen from</string>
+ </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>addConnectionButton</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&amp;Add</string>
+ </property>
+ <property>
+ <name>whatsThis</name>
+ <string>Add a new interface to the list.</string>
+ </property>
+ </widget>
+ <widget row="0" column="0" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>informationConnectionButton</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&amp;Start/Stop</string>
+ </property>
+ <property>
+ <name>whatsThis</name>
+ <string>Start and Stop the current interface, gives additional information about the interface.</string>
+ </property>
+ </widget>
+ <widget row="0" column="1" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>configureConnectionButton</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&amp;Configure</string>
+ </property>
+ <property>
+ <name>whatsThis</name>
+ <string>Configure the current interface</string>
+ </property>
+ </widget>
+ <widget row="1" column="1" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>removeConnectionButton</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&amp;Remove</string>
+ </property>
+ <property>
+ <name>whatsThis</name>
+ <string>Remove the current interface from the list.</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>
+ <spacer row="7" column="2" >
+ <property>
+ <name>name</name>
+ <cstring>Spacer16</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="0" column="1" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>currentProfileLabel</cstring>
+ </property>
+ <property stdset="1">
+ <name>frameShape</name>
+ <enum>Panel</enum>
+ </property>
+ <property stdset="1">
+ <name>frameShadow</name>
+ <enum>Sunken</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>All</string>
+ </property>
+ </widget>
+ <widget row="3" column="2" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>setCurrentProfileButton</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&amp;Set Current</string>
+ </property>
+ </widget>
+ <widget row="5" column="0" rowspan="1" colspan="3" >
+ <class>Line</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Line6</cstring>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ <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>
+ <string>Current Profile</string>
+ </property>
+ </widget>
+ <widget row="4" column="2" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>removeProfileButton</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&amp;Remove</string>
+ </property>
+ </widget>
+ <widget row="3" column="0" rowspan="2" colspan="2" >
+ <class>QListBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>profilesList</cstring>
+ </property>
+ </widget>
+ <spacer row="0" column="2" >
+ <property>
+ <name>name</name>
+ <cstring>Spacer2</cstring>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Horizontal</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="2" column="0" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel1_2</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Profiles</string>
+ </property>
+ </widget>
+ <widget row="6" column="0" rowspan="1" colspan="3" >
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout6</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel1_3</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>New Profile</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QLineEdit</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>newProfile</cstring>
+ </property>
+ </widget>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>newProfileButton</cstring>
+ </property>
+ <property stdset="1">
+ <name>enabled</name>
+ <bool>false</bool>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&amp;Add</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </grid>
+ </widget>
+ </widget>
+ </vbox>
+</widget>
+<tabstops>
+ <tabstop>tabWidget</tabstop>
+ <tabstop>connectionList</tabstop>
+ <tabstop>informationConnectionButton</tabstop>
+ <tabstop>configureConnectionButton</tabstop>
+ <tabstop>addConnectionButton</tabstop>
+ <tabstop>removeConnectionButton</tabstop>
+ <tabstop>profilesList</tabstop>
+ <tabstop>setCurrentProfileButton</tabstop>
+ <tabstop>removeProfileButton</tabstop>
+ <tabstop>newProfile</tabstop>
+ <tabstop>newProfileButton</tabstop>
+</tabstops>
+</UI>
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;
+}
diff --git a/noncore/settings/networksettings/mainwindow/mainwindowimp.h b/noncore/settings/networksettings/mainwindow/mainwindowimp.h
new file mode 100644
index 0000000..f211d6e
--- a/dev/null
+++ b/noncore/settings/networksettings/mainwindow/mainwindowimp.h
@@ -0,0 +1,75 @@
+#ifndef MAINWINOWIMP_H
+#define MAINWINOWIMP_H
+
+#include "mainwindow.h"
+#include <qmap.h>
+#include <qstringlist.h>
+
+class Module;
+class Interface;
+class QLibrary;
+class KProcess;
+class QCopChannel;
+#ifdef QWS
+class QLibrary;
+#else
+class KLibrary;
+class KLibLoader;
+#define QLibrary KLibrary
+#endif
+
+
+class MainWindowImp : public MainWindow {
+ Q_OBJECT
+
+public:
+ static QString appName() { return QString::fromLatin1("networksettings"); }
+ MainWindowImp(QWidget *parent=0, const char *name=0, WFlags fl = 0);
+ ~MainWindowImp();
+
+ QCopChannel *channel;
+
+private slots:
+ void getAllInterfaces();
+
+ void addClicked();
+ void removeClicked();
+ void configureClicked();
+ void informationClicked();
+
+ void addProfile();
+ void removeProfile();
+ void changeProfile();
+
+ void updateInterface(Interface *i);
+ void newProfileChanged(const QString& newText);
+
+ void receive (const QCString &, const QByteArray &);
+
+private:
+ void makeChannel();
+ void loadModules(const QString &path);
+
+ Module* loadPlugin(const QString &pluginFileName,
+ const 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;
+ QStringList m_handledIfaces;
+
+ QMap<KProcess*, QString> threads;
+ QStringList profiles;
+
+ bool advancedUserMode;
+ QString scheme;
+#ifndef QWS
+ KLibLoader *loader;
+#endif
+};
+
+#endif // MAINWINOWIMP_H
+
diff --git a/noncore/settings/networksettings/mainwindow/module.h b/noncore/settings/networksettings/mainwindow/module.h
new file mode 100644
index 0000000..9dc913e
--- a/dev/null
+++ b/noncore/settings/networksettings/mainwindow/module.h
@@ -0,0 +1,188 @@
+#ifndef NETCONF_MODULE_H
+#define NETCONF_MODULE_H
+
+#include <qobject.h>
+#if QT_VERSION < 300
+#include <qlist.h>
+#else
+#include <qptrlist.h>
+#endif
+#include <qmap.h>
+#include "interface.h"
+
+class QWidget;
+class QTabWidget;
+
+
+/**
+ * \brief The basis of all plugins
+ *
+ * This is the way to extend networksettings with
+ * extra functionality.
+ *
+ *
+ * Networksettings in the 1.0 release does not use QCOM
+ * for activation. You need to provide the following function yourself.
+ *
+ * A module needs to provide Name, Images, and methods for
+ * claiming interfaces. For example you can claim physicla
+ * interfaces like wlan0, ppp0 or virtual like a VPN
+ * connection and hide the real ppp device or ethernet device
+ * behind your VPN plugin.
+ *
+ * During start up. The main application searches for network devices
+ * and then looks for an owner under the plugins for them.
+ * For example the WLAN Plugin looks if there is a WLAN Extension
+ * on that interface and then claims it by returning true from isOwner()
+ *
+ * \code
+ * extern "C"
+ * {
+ * void* create_plugin() {
+ * return new WLANModule();
+ * }
+ * };
+ * \endcode
+ * @see isOwner(Interface*)
+ */
+class Module : private QObject{
+
+signals:
+/**
+ * Emit this Signal once you change the Interface
+ * you're operating on
+ *
+ * @param i The Interface
+ */
+ void updateInterface(Interface *i);
+
+
+public:
+ Module(){};
+
+ /**
+ * The type of the plugin
+ * and the name of the qcop call
+ */
+ virtual const QString type() = 0;
+
+ /**
+ * The current profile has been changed and the module should do any
+ * neccesary changes also.
+ * As of Opie1.0 profiles are disabled.
+ *
+ * @param newProfile what the profile should be changed to.
+ */
+ virtual void setProfile(const QString &newProfile) = 0;
+
+ /**
+ * 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 *) = 0;
+
+ /**
+ * Check to see if the interface i is owned by this module.
+ * See if you can handle it. And if you can claim ownership
+ * by returning true.
+ * For physical devices you will be asked if you want to own the
+ * device. But you can also create new \sa Interface Implementations.
+ *
+ * If you want to own the Interface add it to your internal interface
+ * list
+ *
+ * @param Interface* interface to check against
+ * @return bool true if i is owned by this module, false otherwise.
+ *
+ * @see getInterfaces
+ */
+ virtual bool isOwner(Interface *){ return false; };
+
+ /**
+ * Create and return the Configure Module
+ * @param Interface *i the interface to configure.
+ * @return QWidget* pointer to this modules configure.
+ *
+ * @see InterfaceSetupImp
+ */
+ virtual QWidget *configure(Interface *){ return NULL; } ;
+
+ /**
+ * Create, and return the Information Module.
+ *
+ * An default Implementation is InterfaceInformationImp
+ *
+ * @param Interface *i the interface to get info on.
+ * @return QWidget* pointer to this modules info.
+ *
+ * @see InterfaceInformationImp
+ *
+ */
+ virtual QWidget *information(Interface *){ return NULL; };
+
+ /**
+ * Get all active (up or down) interfaces managed by this
+ * module.
+ * At the end of initialisation you will be asked to return your interfaces
+ * Return all of your interfaces even the ones you claimed by isOnwer.
+ * Here you can also return your 'virtual' Interface Objects
+ *
+ * @return QList<Interface> A list of interfaces that exsist that havn't
+ * been called by isOwner()
+ */
+ virtual QList<Interface> getInterfaces() = 0;
+
+ /**
+ * Adds possible new interfaces to the list (Example: usb(ppp), ir(ppp),
+ * modem ppp)
+ * Both strings need to be translated. The first string is a Shortcut
+ * like PPP and the second argument is a description.
+ *
+ * <code>
+ * list.insert(
+ *
+ * </code>
+ *
+ * @param list A reference to the list of supported additionns.
+ */
+ virtual void possibleNewInterfaces(QMap<QString, QString> &list) = 0;
+
+ /**
+ * Attempts to create a new interface from name you gave
+ * possibleNewInterfaces()
+ * @return Interface* NULL if it was unable to be created.
+ * @param name the type of interface to create
+ *
+ * @see possibleNewInterfaces
+ */
+ virtual Interface *addNewInterface(const QString &name) = 0;
+
+ /**
+ * Attempts to remove the interface, doesn't delete i
+ * @return bool true if successful, false otherwise.
+ */
+ virtual bool remove(Interface* i) = 0;
+
+ /**
+ * get dcop calls
+ */
+ virtual void receive(const QCString &msg, const QByteArray &arg) = 0;
+
+ QStringList handledInterfaceNames()const { return m_inter; }
+protected:
+ /**
+ * set which interfaceNames should not be shown cause they're handled
+ * internally of this module.. An already running ppp link or
+ * a tunnel... VPN an such
+ */
+ void setHandledInterfaceNames( const QStringList& in) { m_inter = in; }
+
+private:
+ QStringList m_inter;
+};
+
+#endif
+
+// module.h
+