[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 &parameters)
-    : 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 &parameters);
 
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