diff options
Diffstat (limited to 'knetworkmanager-0.8/src/vpn_tray_component.cpp')
-rw-r--r-- | knetworkmanager-0.8/src/vpn_tray_component.cpp | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/knetworkmanager-0.8/src/vpn_tray_component.cpp b/knetworkmanager-0.8/src/vpn_tray_component.cpp new file mode 100644 index 0000000..68ad8a1 --- /dev/null +++ b/knetworkmanager-0.8/src/vpn_tray_component.cpp @@ -0,0 +1,150 @@ +/*************************************************************************** + * + * vpn_tray_componenet.cpp - A NetworkManager frontend for KDE + * + * Copyright (C) 2005, 2006 Novell, Inc. + * + * Author: Helmut Schaa <[email protected]>, <[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 + * + **************************************************************************/ + +// KDE includes +#include <kdebug.h> +#include <klocale.h> +#include <kiconloader.h> + +// TQt DBus +#include <tqdbusobjectpath.h> + + +// KNM includes +#include "vpn_tray_component.h" +#include "knetworkmanager-menuitem.h" +#include "knetworkmanager-menu_subhead.h" +#include "knetworkmanager-connection_store.h" +#include "knetworkmanager-vpn_connection.h" +#include "knetworkmanager-nm_proxy.h" + +#include "knetworkmanager-connection_setting_info.h" +#include "knetworkmanager-connection_setting_vpn.h" +#include "knetworkmanager-connection_settings_dialog.h" +#include <stdio.h> + +using namespace ConnectionSettings; + +void VPNTrayComponent::slotShowNewConnectionDialog() +{ + // create a new VPN connection + Connection* conn = new VPNConnection(); + + // edit the new connection + ConnectionSettingsDialogImpl* dlg = new ConnectionSettingsDialogImpl(conn, true, NULL, tray(), "connect_something", false, TQt::WDestructiveClose); + dlg->show(); +} + + +void VPNTrayComponent::addMenuItems(KPopupMenu* menu) +{ + int inactive_vpn_connections = 0; + char vpn_found; + char any_vpn_found = 0; + ConnectionStore* connectionStore = ConnectionStore::getInstance(); + + // Get all active connections + NMProxy* nm = NMProxy::getInstance(); + TQValueList<TQPair<ConnectionSettings::Connection*, Device*> > map = nm->getActiveConnectionsMap(); + + // get all available VPN Connections + TQValueList<Connection*> connections = connectionStore->getConnections(NM_SETTING_VPN_SETTING_NAME); + if (!connections.empty()) + { + TQPopupMenu* popup = new TQPopupMenu(menu); + for (TQValueList<Connection*>::iterator it = connections.begin(); it != connections.end(); ++it) + { + VPNConnection* vpnconn = dynamic_cast<VPNConnection*>(*it); + if (vpnconn) + { + // VPN connection found :) + Info* info = vpnconn->getInfoSetting(); + + // lets create a nice name for this connection + if (info) + { + TQString title = info->getName(); + + NetworkMenuItem* item = new NetworkMenuItem(NULL, vpnconn, TQT_TQOBJECT(menu)); + + vpn_found = 0; + for (TQValueList<TQPair<ConnectionSettings::Connection*, Device*> >::Iterator it = map.begin(); it != map.end(); ++it) + { + ConnectionSettings::GenericConnection* conn = dynamic_cast<ConnectionSettings::GenericConnection*>((*it).first); + + if (conn) { + if (strcmp(info->getName(), conn->getInfoSetting()->getName()) == 0) { + vpn_found = 1; + any_vpn_found = 1; + } + } + } + + if (vpn_found == 1) { + printf("Active VPN connection found\n\r"); + } + else { + int id = popup->insertItem(SmallIcon ("encrypted", TQIconSet::Automatic), title, item, TQT_SLOT(slotActivate())); + inactive_vpn_connections++; + } + + //menu->setItemChecked(id, ((*it) == active_conn)); + } + } + } + + TQT_DBusObjectPath act_conn = nm->getDefaultActiveConnection(); + TQT_DBusObjectPath device = nm->getDeviceForActiveConnection(act_conn); + + if (any_vpn_found == 1) { + inactive_vpn_connections = 0; + } + + if (device.isNull()) { + inactive_vpn_connections = 0; + } + + if (inactive_vpn_connections > 0) { + menu->insertItem(SmallIcon ("encrypted", TQIconSet::Automatic), i18n("Start VPN connection"), popup); + menu->insertSeparator(); + } + } +} + +VPNTrayComponent::VPNTrayComponent (KSystemTray * parent, const char * name ) + : TrayComponent (parent, name) +{ + //Actions used for plugging into the menu + new KAction (i18n ("New connection ..."), + SmallIcon ("encrypted", TQIconSet::Automatic), 0, + this, TQT_SLOT (slotShowNewConnectionDialog()), parent->actionCollection (), "create_new_vpn_connection"); +} + +VPNTrayComponent::~VPNTrayComponent () +{ + +} + + +#include "vpn_tray_component.moc" |