[telepathy-qt4/master] Account: Make constructor protected and added public create method that returns a SharedPtr.
Andre Moreira Magalhaes (andrunko)
andre.magalhaes at collabora.co.uk
Tue Mar 31 08:57:47 PDT 2009
---
TelepathyQt4/Client/account-manager.cpp | 3 +--
TelepathyQt4/Client/account.cpp | 20 ++++++++++++--------
TelepathyQt4/Client/account.h | 8 +++++---
TelepathyQt4/Client/pending-account.cpp | 15 +++++++--------
TelepathyQt4/Client/pending-account.h | 4 ++--
examples/accounts/account-item.cpp | 31 ++++++++++++++++---------------
examples/accounts/account-item.h | 2 +-
7 files changed, 44 insertions(+), 39 deletions(-)
diff --git a/TelepathyQt4/Client/account-manager.cpp b/TelepathyQt4/Client/account-manager.cpp
index da7a2bd..e9ff6d8 100644
--- a/TelepathyQt4/Client/account-manager.cpp
+++ b/TelepathyQt4/Client/account-manager.cpp
@@ -318,8 +318,7 @@ AccountPtr AccountManager::accountForPath(const QString &path)
return AccountPtr();
}
- AccountPtr account = AccountPtr(
- new Account(this, path));
+ AccountPtr account = Account::create(this, path);
mPriv->accounts[path] = account;
return account;
}
diff --git a/TelepathyQt4/Client/account.cpp b/TelepathyQt4/Client/account.cpp
index e287ad2..eb0f0ee 100644
--- a/TelepathyQt4/Client/account.cpp
+++ b/TelepathyQt4/Client/account.cpp
@@ -57,7 +57,7 @@ namespace Client
struct Account::Private
{
- Private(Account *parent, AccountManager *am);
+ Private(Account *parent, const AccountManagerPtr &am);
~Private();
void init();
@@ -71,7 +71,7 @@ struct Account::Private
// Public object
Account *parent;
- AccountManager *am;
+ WeakPtr<AccountManager> am;
// Instance of generated interface class
AccountInterface *baseInterface;
@@ -102,7 +102,7 @@ struct Account::Private
ConnectionPtr connection;
};
-Account::Private::Private(Account *parent, AccountManager *am)
+Account::Private::Private(Account *parent, const AccountManagerPtr &am)
: parent(parent),
am(am),
baseInterface(new AccountInterface(parent->dbusConnection(),
@@ -198,17 +198,21 @@ const Feature Account::FeatureCore = Feature(Account::staticMetaObject.className
const Feature Account::FeatureAvatar = Feature(Account::staticMetaObject.className(), 1);
const Feature Account::FeatureProtocolInfo = Feature(Account::staticMetaObject.className(), 2);
+AccountPtr Account::create(const AccountManagerPtr &am,
+ const QString &objectPath)
+{
+ return AccountPtr(new Account(am, objectPath));
+}
+
/**
* Construct a new Account object.
*
* \param am Account manager.
* \param objectPath Account object path.
- * \param parent Object parent.
*/
-Account::Account(AccountManager *am, const QString &objectPath,
- QObject *parent)
+Account::Account(const AccountManagerPtr &am, const QString &objectPath)
: StatelessDBusProxy(am->dbusConnection(),
- am->busName(), objectPath, parent),
+ am->busName(), objectPath),
OptionalInterfaceFactory<Account>(this),
ReadyObject(this, FeatureCore),
mPriv(new Private(this, am))
@@ -228,7 +232,7 @@ Account::~Account()
*
* \return A pointer to the AccountManager object that owns this Account.
*/
-AccountManager *Account::manager() const
+AccountManagerPtr Account::manager() const
{
return mPriv->am;
}
diff --git a/TelepathyQt4/Client/account.h b/TelepathyQt4/Client/account.h
index dcf8e58..806d1ca 100644
--- a/TelepathyQt4/Client/account.h
+++ b/TelepathyQt4/Client/account.h
@@ -70,12 +70,12 @@ public:
static const Feature FeatureAvatar;
static const Feature FeatureProtocolInfo;
- Account(AccountManager *am, const QString &objectPath,
- QObject *parent = 0);
+ static AccountPtr create(const AccountManagerPtr &am,
+ const QString &objectPath);
virtual ~Account();
- AccountManager *manager() const;
+ AccountManagerPtr manager() const;
bool isValidAccount() const;
@@ -178,6 +178,8 @@ Q_SIGNALS:
void haveConnectionChanged(bool haveConnection);
protected:
+ Account(const AccountManagerPtr &am, const QString &objectPath);
+
AccountInterface *baseInterface() const;
private Q_SLOTS:
diff --git a/TelepathyQt4/Client/pending-account.cpp b/TelepathyQt4/Client/pending-account.cpp
index f4fc49d..52b192b 100644
--- a/TelepathyQt4/Client/pending-account.cpp
+++ b/TelepathyQt4/Client/pending-account.cpp
@@ -49,12 +49,12 @@ namespace Client
struct PendingAccount::Private
{
- Private(AccountManager *manager) :
+ Private(const AccountManagerPtr &manager) :
manager(manager)
{
}
- AccountManager *manager;
+ AccountManagerPtr manager;
AccountPtr account;
QDBusObjectPath objectPath;
};
@@ -78,10 +78,10 @@ struct PendingAccount::Private
* \param displayName Account display name.
* \param parameters Account parameters.
*/
-PendingAccount::PendingAccount(AccountManager *manager,
+PendingAccount::PendingAccount(const AccountManagerPtr &manager,
const QString &connectionManager, const QString &protocol,
const QString &displayName, const QVariantMap ¶meters)
- : PendingOperation(manager),
+ : PendingOperation(manager.data()),
mPriv(new Private(manager))
{
QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(
@@ -105,9 +105,9 @@ PendingAccount::~PendingAccount()
*
* \return Account Manager object.
*/
-AccountManager *PendingAccount::manager() const
+AccountManagerPtr PendingAccount::manager() const
{
- return qobject_cast<AccountManager *>(parent());
+ return mPriv->manager;
}
/**
@@ -126,8 +126,7 @@ AccountPtr PendingAccount::account() const
}
if (!mPriv->account) {
- mPriv->account = AccountPtr(
- new Account(mPriv->manager, mPriv->objectPath.path()));
+ mPriv->account = Account::create(mPriv->manager, mPriv->objectPath.path());
}
return mPriv->account;
diff --git a/TelepathyQt4/Client/pending-account.h b/TelepathyQt4/Client/pending-account.h
index af29210..0ce1a82 100644
--- a/TelepathyQt4/Client/pending-account.h
+++ b/TelepathyQt4/Client/pending-account.h
@@ -48,7 +48,7 @@ class PendingAccount : public PendingOperation
public:
~PendingAccount();
- AccountManager *manager() const;
+ AccountManagerPtr manager() const;
AccountPtr account() const;
@@ -59,7 +59,7 @@ private Q_SLOTS:
private:
Q_DISABLE_COPY(PendingAccount);
- PendingAccount(AccountManager *manager,
+ PendingAccount(const AccountManagerPtr &manager,
const QString &connectionManager, const QString &protocol,
const QString &displayName, const QVariantMap ¶meters);
diff --git a/examples/accounts/account-item.cpp b/examples/accounts/account-item.cpp
index d896014..1655552 100644
--- a/examples/accounts/account-item.cpp
+++ b/examples/accounts/account-item.cpp
@@ -31,11 +31,11 @@
AccountItem::AccountItem(Telepathy::Client::AccountManagerPtr am,
const QString &objectPath, QTableWidget *table, int row, QObject *parent)
: QObject(parent),
- acc(new Telepathy::Client::Account(am.data(), objectPath, this)),
+ mAcc(Telepathy::Client::Account::create(am, objectPath)),
mTable(table),
mRow(row)
{
- connect(acc->becomeReady(),
+ connect(mAcc->becomeReady(),
SIGNAL(finished(Telepathy::Client::PendingOperation *)),
SLOT(onReady(Telepathy::Client::PendingOperation *)));
}
@@ -46,24 +46,25 @@ AccountItem::~AccountItem()
void AccountItem::setupGui()
{
- mTable->setItem(mRow, ColumnValid, new QTableWidgetItem(acc->isValid() ? "true" : "false"));
- mTable->setItem(mRow, ColumnEnabled, new QTableWidgetItem(acc->isEnabled() ? "true" : "false"));
- mTable->setItem(mRow, ColumnConnectionManager, new QTableWidgetItem(acc->cmName()));
- mTable->setItem(mRow, ColumnProtocol, new QTableWidgetItem(acc->protocol()));
- mTable->setItem(mRow, ColumnDisplayName, new QTableWidgetItem(acc->displayName()));
- mTable->setItem(mRow, ColumnNickname, new QTableWidgetItem(acc->nickname()));
- mTable->setItem(mRow, ColumnConnectsAutomatically, new QTableWidgetItem(acc->connectsAutomatically() ? "true" : "false"));
- mTable->setItem(mRow, ColumnAutomaticPresence, new QTableWidgetItem(acc->automaticPresence().status));
- mTable->setItem(mRow, ColumnCurrentPresence, new QTableWidgetItem(acc->currentPresence().status));
- mTable->setItem(mRow, ColumnRequestedPresence, new QTableWidgetItem(acc->requestedPresence().status));
- mTable->setItem(mRow, ColumnConnectionStatus, new QTableWidgetItem(QString::number(acc->connectionStatus())));
- mTable->setItem(mRow, ColumnConnection, new QTableWidgetItem(acc->connectionObjectPath()));
+ mTable->setItem(mRow, ColumnValid, new QTableWidgetItem(mAcc->isValid() ? "true" : "false"));
+ mTable->setItem(mRow, ColumnEnabled, new QTableWidgetItem(mAcc->isEnabled() ? "true" : "false"));
+ mTable->setItem(mRow, ColumnConnectionManager, new QTableWidgetItem(mAcc->cmName()));
+ mTable->setItem(mRow, ColumnProtocol, new QTableWidgetItem(mAcc->protocol()));
+ mTable->setItem(mRow, ColumnDisplayName, new QTableWidgetItem(mAcc->displayName()));
+ mTable->setItem(mRow, ColumnNickname, new QTableWidgetItem(mAcc->nickname()));
+ mTable->setItem(mRow, ColumnConnectsAutomatically, new QTableWidgetItem(mAcc->connectsAutomatically() ? "true" : "false"));
+ mTable->setItem(mRow, ColumnAutomaticPresence, new QTableWidgetItem(mAcc->automaticPresence().status));
+ mTable->setItem(mRow, ColumnCurrentPresence, new QTableWidgetItem(mAcc->currentPresence().status));
+ mTable->setItem(mRow, ColumnRequestedPresence, new QTableWidgetItem(mAcc->requestedPresence().status));
+ mTable->setItem(mRow, ColumnConnectionStatus, new QTableWidgetItem(QString::number(mAcc->connectionStatus())));
+ mTable->setItem(mRow, ColumnConnection, new QTableWidgetItem(mAcc->connectionObjectPath()));
}
void AccountItem::onReady(Telepathy::Client::PendingOperation *op)
{
setupGui();
+ Telepathy::Client::Account *acc = mAcc.data();
connect(acc,
SIGNAL(validityChanged(bool)),
SLOT(onValidityChanged(bool)));
@@ -154,5 +155,5 @@ void AccountItem::onConnectionStatusChanged(Telepathy::ConnectionStatus status,
void AccountItem::onHaveConnectionChanged(bool haveConnection)
{
QTableWidgetItem *item = mTable->item(mRow, ColumnConnection);
- item->setText(acc->connectionObjectPath());
+ item->setText(mAcc->connectionObjectPath());
}
diff --git a/examples/accounts/account-item.h b/examples/accounts/account-item.h
index 66e2fa0..be55d26 100644
--- a/examples/accounts/account-item.h
+++ b/examples/accounts/account-item.h
@@ -81,7 +81,7 @@ private Q_SLOTS:
private:
void setupGui();
- Telepathy::Client::Account *acc;
+ Telepathy::Client::AccountPtr mAcc;
QTableWidget *mTable;
int mRow;
};
--
1.5.6.5
More information about the telepathy-commits
mailing list