summaryrefslogtreecommitdiffstats
path: root/knetworkmanager-0.8/src/knetworkmanager-connection_setting_vpn_widget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'knetworkmanager-0.8/src/knetworkmanager-connection_setting_vpn_widget.cpp')
-rw-r--r--knetworkmanager-0.8/src/knetworkmanager-connection_setting_vpn_widget.cpp206
1 files changed, 206 insertions, 0 deletions
diff --git a/knetworkmanager-0.8/src/knetworkmanager-connection_setting_vpn_widget.cpp b/knetworkmanager-0.8/src/knetworkmanager-connection_setting_vpn_widget.cpp
new file mode 100644
index 0000000..913996a
--- /dev/null
+++ b/knetworkmanager-0.8/src/knetworkmanager-connection_setting_vpn_widget.cpp
@@ -0,0 +1,206 @@
+/***************************************************************************
+ *
+ * knetworkmanager-connection_setting_vpn_widget.cpp - A NetworkManager frontend for KDE
+ *
+ * Copyright (C) 2005, 2006 Novell, Inc.
+ *
+ * Author: Helmut Schaa <[email protected]>, <[email protected]>
+ * Author: Timothy Pearson <[email protected]>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ **************************************************************************/
+
+// qt headers
+#include <tqwidget.h>
+#include <tqlineedit.h>
+#include <tqcheckbox.h>
+#include <tqlayout.h>
+#include <tqcombobox.h>
+#include <tqiconset.h>
+#include <kiconloader.h>
+#include <tqwidgetstack.h>
+#include <kuser.h>
+
+// knm headers
+#include "knetworkmanager-connection.h"
+#include "knetworkmanager-connection_setting_vpn.h"
+#include "knetworkmanager-connection_setting_vpn_widget.h"
+#include "knetworkmanager-device.h"
+#include "knetworkmanager-vpnmanager.h"
+#include "knetworkmanager-vpnservice.h"
+
+using namespace ConnectionSettings;
+
+VPNWidgetImpl::VPNWidgetImpl(Connection* conn, bool new_conn, TQWidget* parent, const char* name, WFlags fl)
+ : WidgetInterface(parent, name, fl)
+ , _new_conn(new_conn)
+{
+ _vpnsetting = dynamic_cast<ConnectionSettings::VPN*> (conn->getSetting(NM_SETTING_VPN_SETTING_NAME));
+
+ TQVBoxLayout* tqlayout = new TQVBoxLayout(this, 1, 1);
+ _mainWid = new ConnectionSettingVPNWidget(this);
+ tqlayout->addWidget(_mainWid);
+
+ Init();
+}
+
+void
+VPNWidgetImpl::Init()
+{
+ // fill in all possible VPN services
+ VPNServiceList list = VPNManager::getVPNServices();
+
+ if (list.isEmpty())
+ {
+ // FIXME Do something useful here
+ }
+ else
+ {
+ int index = 0;
+ for (VPNServiceList::Iterator it = list.begin(); it != list.end(); ++it)
+ {
+ TQString icon;
+ TQString disp_name;
+
+ // get service icon and display name
+ VPNService* service = *it;
+ if (service)
+ {
+ icon = service->getIcon();
+ disp_name = service->getDisplayName();
+ }
+
+ if (strcmp(disp_name, "vpnc") == 0) {
+ disp_name = "Cisco VPN";
+ }
+ else if (strcmp(disp_name, "pptp") == 0) {
+ disp_name = "Microsoft PPTP VPN";
+ }
+ else if (strcmp(disp_name, "openvpn") == 0) {
+ disp_name = "Open VPN";
+ }
+ else if (strcmp(disp_name, "strongswan") == 0) {
+ disp_name = "StrongSwan VPN";
+ }
+
+ // the service should not get changed when editing a connection
+ if (service->getService() != _vpnsetting->getServiceType() && !_new_conn)
+ continue;
+
+ // no special icon for this service, use default
+ if (icon.isEmpty())
+ icon = "encrypted";
+
+ _mainWid->cboServices->insertItem(SmallIcon(icon, TQIconSet::Automatic), disp_name, index);
+ _mapServiceCombo.insert(index++, *it);
+
+ if (service->getService() == _vpnsetting->getServiceType())
+ {
+ // preselect the correct service
+ _mainWid->cboServices->setCurrentItem(index - 1);
+ slotServiceComboActivated(index - 1);
+ }
+ }
+ }
+
+ // lock the combo when editing an already existing connection
+ if (!_new_conn)
+ _mainWid->cboServices->setEnabled(false);
+ else
+ {
+ // preselect the correct service
+ _mainWid->cboServices->setCurrentItem(0);
+ slotServiceComboActivated(0);
+ }
+
+ // update the username to the current one
+ KUser user;
+ _vpnsetting->setUserName(user.loginName());
+
+ // notification if VPN service is selected
+ connect(_mainWid->cboServices, TQT_SIGNAL(activated(int)), this, TQT_SLOT(slotServiceComboActivated(int)));
+}
+
+VPNConfigWidget*
+VPNWidgetImpl::getVPNConfigWidget(VPNService* service)
+{
+ if (_mapServiceWidget.find(service) != _mapServiceWidget.end())
+ {
+ // return the already available config widget
+ return *_mapServiceWidget.find(service);
+ }
+ else
+ {
+ // we have to create a new one
+ VPNPlugin* plugin = service->getVPNPlugin();
+ if (plugin)
+ {
+ VPNConfigWidget* config = plugin->CreateConfigWidget(_mainWid->widgetStack);
+ _mapServiceWidget.insert(service, config);
+ return config;
+ }
+ }
+ return NULL;
+}
+
+
+void
+VPNWidgetImpl::slotServiceComboActivated(int index)
+{
+ VPNService* service;
+ if (_mapServiceCombo.find(index) != _mapServiceCombo.end())
+ {
+ service = *_mapServiceCombo.find(index);
+ if (service)
+ {
+ VPNConfigWidget* config = getVPNConfigWidget(service);
+ _mainWid->widgetStack->raiseWidget(config);
+
+ config->setVPNData(_vpnsetting->getRoutes(), _vpnsetting->getData());
+ }
+ }
+ else
+ {
+ //FIXME - do something useful here
+ }
+}
+
+void
+VPNWidgetImpl::Deactivate()
+{
+ // update the setting from the currently selected vpn service
+ VPNService* service = *_mapServiceCombo.find(_mainWid->cboServices->currentItem());
+ if (service)
+ {
+ // set the correct service type
+ _vpnsetting->setServiceType(service->getService());
+
+ VPNConfigWidget* config = *_mapServiceWidget.find(service);
+ if (config)
+ {
+ // update the vpn properties
+ _vpnsetting->setData(config->getVPNProperties());
+ }
+ }
+}
+
+void
+VPNWidgetImpl::Activate()
+{
+
+}
+
+#include "knetworkmanager-connection_setting_vpn_widget.moc"