/*
 * This file was generated by qdbusxml2cpp version 0.8
 * Command line was: qdbusxml2cpp -v org.neard.Adapter.xml -p adapter_p -v
 *
 * qdbusxml2cpp is Copyright (C) 2015 The Qt Company Ltd.
 *
 * This is an auto-generated file.
 * Do not edit! All changes made to it will be lost.
 */

#ifndef ADAPTER_P_H_1410940487
#define ADAPTER_P_H_1410940487

#include <QtCore/QObject>
#include <QtCore/QByteArray>
#include <QtCore/QList>
#include <QtCore/QMap>
#include <QtCore/QString>
#include <QtCore/QStringList>
#include <QtCore/QVariant>
#include <QtDBus/QtDBus>

/*
 * Proxy class for interface org.neard.Adapter
 */
class OrgNeardAdapterInterface: public QDBusAbstractInterface
{
    Q_OBJECT
public:
    static inline const char *staticInterfaceName()
    { return "org.neard.Adapter"; }

public:
    OrgNeardAdapterInterface(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = 0);

    ~OrgNeardAdapterInterface();

public Q_SLOTS: // METHODS
    inline QDBusPendingReply<> StartPollLoop(const QString &name)
    {
        QList<QVariant> argumentList;
        argumentList << QVariant::fromValue(name);
        return asyncCallWithArgumentList(QStringLiteral("StartPollLoop"), argumentList);
    }

    inline QDBusPendingReply<> StopPollLoop()
    {
        QList<QVariant> argumentList;
        return asyncCallWithArgumentList(QStringLiteral("StopPollLoop"), argumentList);
    }

Q_SIGNALS: // SIGNALS
};

namespace org {
  namespace neard {
    typedef ::OrgNeardAdapterInterface Adapter;
  }
}
#endif
