~ubuntu-branches/ubuntu/trusty/knetworkmanager/trusty

« back to all changes in this revision

Viewing changes to knetworkmanager/src/knetworkmanager-connection_setting_ipv4_widget.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Jonathan Riddell
  • Date: 2008-09-26 12:40:26 UTC
  • mfrom: (1.2.7 upstream)
  • Revision ID: james.westby@ubuntu.com-20080926124026-t5fr920l4lf2l6hz
Tags: 1:0.7svn864988-0ubuntu1
New upstream snapshot, now works with current NM API, 
closes LP: #259278

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/***************************************************************************
2
 
 *
3
 
 * knetworkmanager-devicestore_dbus.cpp - A NetworkManager frontend for KDE
4
 
 *
5
 
 * Copyright (C) 2005, 2006 Novell, Inc.
6
 
 *
7
 
 * Author: Timo Hoenig        <thoenig@suse.de>, <thoenig@nouse.net>
8
 
 *         Valentine Sinitsyn <e_val@inbox.ru>
9
 
 *
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.
14
 
 *
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.
19
 
 * 
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
23
 
 *
24
 
 **************************************************************************/
25
 
 
26
 
#include <qwidget.h>
27
 
#include <qlineedit.h>
28
 
#include <qgroupbox.h>
29
 
#include <qlayout.h>
30
 
#include <qhostaddress.h>
31
 
 
32
 
#include "knetworkmanager-connection_setting_ipv4_widget.h"
33
 
#include "knetworkmanager-connection_setting_ipv4.h"
34
 
 
35
 
using namespace ConnectionSettings;
36
 
 
37
 
#define IP_INPUT_MASK "900.900.900.900"
38
 
 
39
 
IPv4WidgetImpl::IPv4WidgetImpl(Connection* conn, QWidget* parent, const char* name, WFlags fl)
40
 
        : WidgetInterface(parent, name, fl)
41
 
{
42
 
        _ipv4_setting = dynamic_cast<ConnectionSettings::IPv4*> (conn->getSetting(NM_SETTING_IP4_CONFIG_SETTING_NAME));
43
 
 
44
 
        QVBoxLayout* layout = new QVBoxLayout(this, 1, 1);
45
 
        _mainWid = new ConnectionSettingIPv4Widget(this);
46
 
        layout->addWidget(_mainWid);
47
 
 
48
 
        Init();
49
 
}
50
 
 
51
 
void
52
 
IPv4WidgetImpl::Init()
53
 
{
54
 
        _mainWid->groupIPConfig->setChecked(_ipv4_setting->getMethod() == IPv4::METHOD_MANUAL);
55
 
 
56
 
        connect(_mainWid->groupIPConfig, SIGNAL(toggled(bool)), this, SLOT(slotIPConfigEnabled(bool)));
57
 
 
58
 
        _mainWid->txtIP->setInputMask(IP_INPUT_MASK);
59
 
        _mainWid->txtNetmask->setInputMask(IP_INPUT_MASK);
60
 
        _mainWid->txtGateway->setInputMask(IP_INPUT_MASK);
61
 
 
62
 
        if (!_ipv4_setting->getAddresses().isEmpty())
63
 
        {
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());
67
 
        }
68
 
 
69
 
        if (!_ipv4_setting->getDNS().isEmpty())
70
 
        {
71
 
                QValueList<QHostAddress> hosts = _ipv4_setting->getDNS();
72
 
                QStringList list;
73
 
                for (QValueList<QHostAddress>::Iterator it = hosts.begin(); it != hosts.end(); ++it)
74
 
                {
75
 
                        list.append((*it).toString());
76
 
                }
77
 
                _mainWid->txtDNSAddresses->setText(list.join(" "));
78
 
        }
79
 
 
80
 
        if (!_ipv4_setting->getDNSSearch().isEmpty())
81
 
                _mainWid->txtDNSSearch->setText(_ipv4_setting->getDNSSearch().join(" "));
82
 
 
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&)));
89
 
}
90
 
 
91
 
void
92
 
IPv4WidgetImpl::Activate()
93
 
{
94
 
 
95
 
}
96
 
 
97
 
void
98
 
IPv4WidgetImpl::slotDNSAddressesChanged(const QString& adr)
99
 
{
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)
104
 
        {
105
 
                QHostAddress host(*it);
106
 
                if (!host.isNull())
107
 
                        hosts.append(host);
108
 
        }
109
 
        _ipv4_setting->setDNS(hosts);
110
 
}
111
 
 
112
 
 
113
 
void
114
 
IPv4WidgetImpl::slotDNSSearchChanged(const QString& search)
115
 
{
116
 
        // TODO: use , and ; for splitting too
117
 
        _ipv4_setting->setDNSSearch(QStringList::split(" ", search));
118
 
}
119
 
 
120
 
void
121
 
IPv4WidgetImpl::slotIPConfigEnabled(bool enabled)
122
 
{
123
 
        _ipv4_setting->setMethod(enabled ? IPv4::METHOD_MANUAL : IPv4::METHOD_DHCP );
124
 
}
125
 
 
126
 
void
127
 
IPv4WidgetImpl::slotIPAddressChanged(const QString& ip)
128
 
{
129
 
        QHostAddress ipadr(ip);
130
 
        if (!ipadr.isNull())
131
 
        {
132
 
                QValueList<IPv4Address> addrs = _ipv4_setting->getAddresses();
133
 
                if (addrs.size() > 0)
134
 
                        addrs[0].address = ipadr;
135
 
                else
136
 
                {
137
 
                        IPv4Address adr;
138
 
                        adr.address = ipadr;
139
 
                        addrs.append(adr);
140
 
                }
141
 
                _ipv4_setting->setAddresses(addrs);
142
 
 
143
 
                // if netmask is not set yet we preset it to a default value depending on the network class
144
 
                if (_mainWid->txtNetmask->text() == "...")
145
 
                {
146
 
                        if ( (ipadr.toIPv4Address() & 0xFF000000) < 0xDF000000)
147
 
                        {
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
152
 
                                else
153
 
                                        _mainWid->txtNetmask->setText("255.0.0.0"); // class A
154
 
                        }
155
 
                }
156
 
        }
157
 
}
158
 
 
159
 
void
160
 
IPv4WidgetImpl::slotNetmaskChanged(const QString& ip)
161
 
{
162
 
        QValueList<IPv4Address> addrs = _ipv4_setting->getAddresses();
163
 
        addrs[0].netmask = QHostAddress(ip);
164
 
        _ipv4_setting->setAddresses(addrs);
165
 
}
166
 
 
167
 
void
168
 
IPv4WidgetImpl::slotGatewayChanged(const QString& ip)
169
 
{
170
 
        QValueList<IPv4Address> addrs = _ipv4_setting->getAddresses();
171
 
        addrs[0].gateway = QHostAddress(ip);
172
 
        _ipv4_setting->setAddresses(addrs);
173
 
}
174
 
 
175
 
#include "knetworkmanager-connection_setting_ipv4_widget.moc"