diff --git a/.gitignore b/.gitignore index aa1d5b416f..0cc6a68448 100644 --- a/.gitignore +++ b/.gitignore @@ -123,6 +123,7 @@ examples/C/glib/get-active-connections-dbus-glib examples/C/glib/get-ap-info-libnm-glib examples/C/glib/list-connections-dbus-glib examples/C/glib/list-connections-libnm-glib +examples/C/glib/add-connection-wired callouts/nm-dhcp-client.action callouts/nm-avahi-autoipd.action diff --git a/configure.ac b/configure.ac index edeaa79497..55c8dfa464 100644 --- a/configure.ac +++ b/configure.ac @@ -264,6 +264,21 @@ AC_SUBST(GIO_LIBS) GOBJECT_INTROSPECTION_CHECK([0.9.6]) +# Qt4 +PKG_CHECK_MODULES(QT, [Qt >= 4 QtCore QtDBus], [have_qt=yes],[have_qt=no]) +AC_ARG_ENABLE(qt, AS_HELP_STRING([--enable-qt], [enable Qt examples]), + [enable_qt=${enableval}], [enable_qt=${have_qt}]) +if (test "${enable_qt}" = "yes"); then + if test x"$have_qt" = x"no"; then + AC_MSG_ERROR(Qt development headers are required) + fi + AC_PROG_CXX + AC_SUBST(QT_CFLAGS) + AC_SUBST(QT_LIBS) +fi +AM_CONDITIONAL(WITH_QT, test "${enable_qt}" = "yes") + + AC_ARG_WITH(udev-dir, AS_HELP_STRING([--with-udev-dir=DIR], [where the udev base directory is])) if test -n "$with_udev_dir" ; then UDEV_BASE_DIR="$with_udev_dir" @@ -658,6 +673,7 @@ examples/Makefile examples/python/Makefile examples/C/Makefile examples/C/glib/Makefile +examples/C/qt/Makefile ]) AC_OUTPUT diff --git a/examples/C/Makefile.am b/examples/C/Makefile.am index 305121195a..4502e9bb78 100644 --- a/examples/C/Makefile.am +++ b/examples/C/Makefile.am @@ -1,2 +1,5 @@ SUBDIRS= glib +if WITH_QT +SUBDIRS += qt +endif diff --git a/examples/C/qt/Makefile.am b/examples/C/qt/Makefile.am new file mode 100644 index 0000000000..4590dbb2cc --- /dev/null +++ b/examples/C/qt/Makefile.am @@ -0,0 +1,17 @@ +INCLUDES = -I${top_srcdir}/include + +AM_CPPFLAGS = \ + $(DBUS_CFLAGS) \ + $(QT_CFLAGS) + +noinst_PROGRAMS = \ + add-connection-wired + +add_connection_wired_SOURCES = add-connection-wired.cpp +add_connection_wired_LDADD = \ + $(DBUS_LIBS) \ + $(QT_LIBS) + +EXTRA_DIST = \ + add-connection-wired.cpp + diff --git a/examples/C/qt/add-connection-wired.cpp b/examples/C/qt/add-connection-wired.cpp new file mode 100644 index 0000000000..f9e3f6c193 --- /dev/null +++ b/examples/C/qt/add-connection-wired.cpp @@ -0,0 +1,75 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ +/* + * 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * (C) Copyright 2011 Eckhart Wörner + */ + +/* + * The example shows how to call AddConnection() D-Bus method to add + * a connection to settings service using Qt and D-Bus. + */ + +#include +#include +#include +#include +#include +#include + +#include + +#include "NetworkManager.h" + +typedef QMap > Connection; +Q_DECLARE_METATYPE(Connection) + + +void addConnection(QDBusInterface& interface, const QString& connectionName) { + qDBusRegisterMetaType(); + + // Create a new connection object + Connection connection; + + // Build up the 'connection' Setting + connection["connection"]["uuid"] = QUuid::createUuid().toString().remove('{').remove('}'); + connection["connection"]["id"] = connectionName; + connection["connection"]["type"] = "802-3-ethernet"; + + // Build up the '802-3-ethernet' Setting + connection["802-3-ethernet"]; + + // Build up the 'ipv4' Setting + connection["ipv4"]["method"] = "auto"; + + // Call AddConnection + QDBusReply result = interface.call("AddConnection", QVariant::fromValue(connection)); + if (!result.isValid()) { + qDebug() << QString("Error adding connection: %1 %2").arg(result.error().name()).arg(result.error().message()); + } else { + qDebug() << QString("Added: %1").arg(result.value().path()); + } +} + +int main() { + // Create a D-Bus proxy; NM_DBUS_* defined in NetworkManager.h + QDBusInterface interface( + NM_DBUS_SERVICE, + NM_DBUS_PATH_SETTINGS, + NM_DBUS_IFACE_SETTINGS, + QDBusConnection::systemBus()); + + addConnection(interface, "__Test connection__"); +}