[telepathy-qt4/master] Improved call/roster examples.
Andre Moreira Magalhaes (andrunko)
andre.magalhaes at collabora.co.uk
Tue Mar 31 16:29:16 PDT 2009
---
examples/call/call-handler.cpp | 4 ++--
examples/call/call-window.cpp | 4 ++--
examples/roster/roster-widget.cpp | 22 +++++++++++++++++-----
examples/roster/roster-widget.h | 8 ++++----
examples/roster/roster-window.cpp | 4 ++--
5 files changed, 27 insertions(+), 15 deletions(-)
diff --git a/examples/call/call-handler.cpp b/examples/call/call-handler.cpp
index c05e9a7..73f5c8d 100644
--- a/examples/call/call-handler.cpp
+++ b/examples/call/call-handler.cpp
@@ -99,7 +99,7 @@ void CallHandler::onOutgoingChannelCreated(PendingOperation *op)
void CallHandler::onOutgoingChannelReady(PendingOperation *op)
{
PendingReady *pr = qobject_cast<PendingReady *>(op);
- StreamedMediaChannel *chan = qobject_cast<StreamedMediaChannel *>(pr->object());
+ StreamedMediaChannelPtr chan = StreamedMediaChannelPtr(qobject_cast<StreamedMediaChannel *>(pr->object()));
if (op->isError()) {
qWarning() << "CallHandler::onOutgoingChannelReady: channel cannot become ready:" <<
@@ -128,7 +128,7 @@ void CallHandler::onOutgoingChannelReady(PendingOperation *op)
void CallHandler::onIncomingChannelReady(PendingOperation *op)
{
PendingReady *pr = qobject_cast<PendingReady *>(op);
- StreamedMediaChannel *chan = qobject_cast<StreamedMediaChannel *>(pr->object());
+ StreamedMediaChannelPtr chan = StreamedMediaChannelPtr(qobject_cast<StreamedMediaChannel *>(pr->object()));
if (op->isError()) {
// ignore - channel cannot be ready
diff --git a/examples/call/call-window.cpp b/examples/call/call-window.cpp
index c881f3c..972b28c 100644
--- a/examples/call/call-window.cpp
+++ b/examples/call/call-window.cpp
@@ -115,7 +115,7 @@ void CallWindow::onConnectionConnected(Telepathy::Client::PendingOperation *op)
}
PendingReady *pr = qobject_cast<PendingReady *>(op);
- Connection *conn = qobject_cast<Connection *>(pr->object());
+ ConnectionPtr conn = ConnectionPtr(qobject_cast<Connection *>(pr->object()));
if (conn->interfaces().contains(TELEPATHY_INTERFACE_CONNECTION_INTERFACE_CAPABILITIES)) {
Telepathy::CapabilityPair capability = {
@@ -146,7 +146,7 @@ void CallWindow::onConnectionInvalidated(DBusProxy *proxy,
{
qDebug() << "CallWindow::onConnectionInvalidated: connection became invalid:" <<
errorName << "-" << errorMessage;
- mRoster->removeConnection(mConn.data());
+ mRoster->removeConnection(mConn);
mConn.reset();
}
diff --git a/examples/roster/roster-widget.cpp b/examples/roster/roster-widget.cpp
index 60c4c6d..0fde9f2 100644
--- a/examples/roster/roster-widget.cpp
+++ b/examples/roster/roster-widget.cpp
@@ -59,7 +59,7 @@ RosterWidget::~RosterWidget()
{
}
-void RosterWidget::addConnection(Connection *conn)
+void RosterWidget::addConnection(const ConnectionPtr &conn)
{
mConns.append(conn);
connect(conn->becomeReady(Connection::FeatureRoster),
@@ -67,11 +67,23 @@ void RosterWidget::addConnection(Connection *conn)
SLOT(onConnectionReady(Telepathy::Client::PendingOperation *)));
}
-void RosterWidget::removeConnection(Connection *conn)
+void RosterWidget::removeConnection(const ConnectionPtr &conn)
{
- // TODO remove all contacts from this connection
- // if there is only one connection left, disable all actions/buttons
+ int i = 0;
+ while (i < mList->count()) {
+ RosterItem *item = (RosterItem *) mList->item(i);
+ if (item->contact()->manager()->connection() == conn) {
+ mList->takeItem(i);
+ delete item;
+ continue;
+ }
+ ++i;
+ }
mConns.removeOne(conn);
+ if (mConns.count() == 0) {
+ updateActions();
+ mAddBtn->setEnabled(false);
+ }
}
void RosterWidget::createActions()
@@ -173,7 +185,7 @@ void RosterWidget::onConnectionReady(Telepathy::Client::PendingOperation *op)
}
PendingReady *pr = qobject_cast<PendingReady *>(op);
- Connection *conn = qobject_cast<Connection *>(pr->object());
+ ConnectionPtr conn = ConnectionPtr(qobject_cast<Connection *>(pr->object()));
connect(conn->contactManager(),
SIGNAL(presencePublicationRequested(const Telepathy::Client::Contacts &)),
SLOT(onPresencePublicationRequested(const Telepathy::Client::Contacts &)));
diff --git a/examples/roster/roster-widget.h b/examples/roster/roster-widget.h
index d9c9c20..00bc437 100644
--- a/examples/roster/roster-widget.h
+++ b/examples/roster/roster-widget.h
@@ -50,9 +50,9 @@ public:
RosterWidget(QWidget *parent = 0);
virtual ~RosterWidget();
- QList<Telepathy::Client::Connection *> connections() const { return mConns; }
- void addConnection(Telepathy::Client::Connection *conn);
- void removeConnection(Telepathy::Client::Connection *conn);
+ QList<Telepathy::Client::ConnectionPtr> connections() const { return mConns; }
+ void addConnection(const Telepathy::Client::ConnectionPtr &conn);
+ void removeConnection(const Telepathy::Client::ConnectionPtr &conn);
QListWidget *listWidget() const { return mList; }
@@ -78,7 +78,7 @@ private:
void createActions();
void setupGui();
- QList<Telepathy::Client::Connection *> mConns;
+ QList<Telepathy::Client::ConnectionPtr> mConns;
QAction *mAuthAction;
QAction *mRemoveAction;
QAction *mDenyAction;
diff --git a/examples/roster/roster-window.cpp b/examples/roster/roster-window.cpp
index d1d2ade..1909ea4 100644
--- a/examples/roster/roster-window.cpp
+++ b/examples/roster/roster-window.cpp
@@ -109,7 +109,7 @@ void RosterWindow::onConnectionConnected(Telepathy::Client::PendingOperation *op
}
PendingReady *pr = qobject_cast<PendingReady *>(op);
- Connection *conn = qobject_cast<Connection *>(pr->object());
+ ConnectionPtr conn = ConnectionPtr(qobject_cast<Connection *>(pr->object()));
mRoster->addConnection(conn);
}
@@ -120,7 +120,7 @@ void RosterWindow::onConnectionInvalidated(DBusProxy *proxy,
errorName << "-" << errorMessage;
foreach (const ConnectionPtr &conn, mConns) {
if (conn.data() == proxy) {
- mRoster->removeConnection(conn.data());
+ mRoster->removeConnection(conn);
mConns.removeOne(conn);
}
}
--
1.5.6.5
More information about the telepathy-commits
mailing list