1
/***************************************************************************
3
* knetworkmanager-devicestore_dbus.cpp - A NetworkManager frontend for KDE
5
* Copyright (C) 2005, 2006 Novell, Inc.
7
* Author: Timo Hoenig <thoenig@suse.de>, <thoenig@nouse.net>
8
* Valentine Sinitsyn <e_val@inbox.ru>
10
* This program is free software; you can redistribute it and/or modify
11
* it under the terms of the GNU General Public License as published by
12
* the Free Software Foundation; either version 2 of the License, or
13
* (at your option) any later version.
15
* This program is distributed in the hope that it will be useful,
16
* but WITHOUT ANY WARRANTY; without even the implied warranty of
17
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
* GNU General Public License for more details.
20
* You should have received a copy of the GNU General Public License
21
* along with this program; if not, write to the Free Software
22
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24
**************************************************************************/
27
#include <qlineedit.h>
28
#include <qgroupbox.h>
30
#include <qhostaddress.h>
32
#include "knetworkmanager-connection_setting_ipv4_widget.h"
33
#include "knetworkmanager-connection_setting_ipv4.h"
35
using namespace ConnectionSettings;
37
#define IP_INPUT_MASK "900.900.900.900"
39
IPv4WidgetImpl::IPv4WidgetImpl(Connection* conn, QWidget* parent, const char* name, WFlags fl)
40
: WidgetInterface(parent, name, fl)
42
_ipv4_setting = dynamic_cast<ConnectionSettings::IPv4*> (conn->getSetting(NM_SETTING_IP4_CONFIG_SETTING_NAME));
44
QVBoxLayout* layout = new QVBoxLayout(this, 1, 1);
45
_mainWid = new ConnectionSettingIPv4Widget(this);
46
layout->addWidget(_mainWid);
52
IPv4WidgetImpl::Init()
54
_mainWid->groupIPConfig->setChecked(_ipv4_setting->getMethod() == IPv4::METHOD_MANUAL);
56
connect(_mainWid->groupIPConfig, SIGNAL(toggled(bool)), this, SLOT(slotIPConfigEnabled(bool)));
58
_mainWid->txtIP->setInputMask(IP_INPUT_MASK);
59
_mainWid->txtNetmask->setInputMask(IP_INPUT_MASK);
60
_mainWid->txtGateway->setInputMask(IP_INPUT_MASK);
62
if (!_ipv4_setting->getAddresses().isEmpty())
64
_mainWid->txtIP->setText(_ipv4_setting->getAddresses()[0].address.toString());
65
_mainWid->txtNetmask->setText(_ipv4_setting->getAddresses()[0].netmask.toString());
66
_mainWid->txtGateway->setText(_ipv4_setting->getAddresses()[0].gateway.toString());
69
if (!_ipv4_setting->getDNS().isEmpty())
71
QValueList<QHostAddress> hosts = _ipv4_setting->getDNS();
73
for (QValueList<QHostAddress>::Iterator it = hosts.begin(); it != hosts.end(); ++it)
75
list.append((*it).toString());
77
_mainWid->txtDNSAddresses->setText(list.join(" "));
80
if (!_ipv4_setting->getDNSSearch().isEmpty())
81
_mainWid->txtDNSSearch->setText(_ipv4_setting->getDNSSearch().join(" "));
83
// connect the signals after setting up the values
84
connect(_mainWid->txtIP, SIGNAL(textChanged(const QString&)), this, SLOT(slotIPAddressChanged(const QString&)));
85
connect(_mainWid->txtNetmask, SIGNAL(textChanged(const QString&)), this, SLOT(slotNetmaskChanged(const QString&)));
86
connect(_mainWid->txtGateway, SIGNAL(textChanged(const QString&)), this, SLOT(slotGatewayChanged(const QString&)));
87
connect(_mainWid->txtDNSAddresses, SIGNAL(textChanged(const QString&)), this, SLOT(slotDNSAddressesChanged(const QString&)));
88
connect(_mainWid->txtDNSSearch, SIGNAL(textChanged(const QString&)), this, SLOT(slotDNSSearchChanged(const QString&)));
92
IPv4WidgetImpl::Activate()
98
IPv4WidgetImpl::slotDNSAddressesChanged(const QString& adr)
100
// TODO: use , and ; for splitting too
101
QStringList list = QStringList::split(" ", adr);
102
QValueList<QHostAddress> hosts;
103
for (QStringList::Iterator it = list.begin(); it != list.end(); ++it)
105
QHostAddress host(*it);
109
_ipv4_setting->setDNS(hosts);
114
IPv4WidgetImpl::slotDNSSearchChanged(const QString& search)
116
// TODO: use , and ; for splitting too
117
_ipv4_setting->setDNSSearch(QStringList::split(" ", search));
121
IPv4WidgetImpl::slotIPConfigEnabled(bool enabled)
123
_ipv4_setting->setMethod(enabled ? IPv4::METHOD_MANUAL : IPv4::METHOD_DHCP );
127
IPv4WidgetImpl::slotIPAddressChanged(const QString& ip)
129
QHostAddress ipadr(ip);
132
QValueList<IPv4Address> addrs = _ipv4_setting->getAddresses();
133
if (addrs.size() > 0)
134
addrs[0].address = ipadr;
141
_ipv4_setting->setAddresses(addrs);
143
// if netmask is not set yet we preset it to a default value depending on the network class
144
if (_mainWid->txtNetmask->text() == "...")
146
if ( (ipadr.toIPv4Address() & 0xFF000000) < 0xDF000000)
148
if ( (ipadr.toIPv4Address() & 0xFF000000) >= 0xC0000000)
149
_mainWid->txtNetmask->setText("255.255.255.0"); // class C
150
else if ( (ipadr.toIPv4Address() & 0xFF000000) >= 0x80000000)
151
_mainWid->txtNetmask->setText("255.255.0.0"); // class B
153
_mainWid->txtNetmask->setText("255.0.0.0"); // class A
160
IPv4WidgetImpl::slotNetmaskChanged(const QString& ip)
162
QValueList<IPv4Address> addrs = _ipv4_setting->getAddresses();
163
addrs[0].netmask = QHostAddress(ip);
164
_ipv4_setting->setAddresses(addrs);
168
IPv4WidgetImpl::slotGatewayChanged(const QString& ip)
170
QValueList<IPv4Address> addrs = _ipv4_setting->getAddresses();
171
addrs[0].gateway = QHostAddress(ip);
172
_ipv4_setting->setAddresses(addrs);
175
#include "knetworkmanager-connection_setting_ipv4_widget.moc"