phoneuis/bubblemanager2/bubblecore/src/bubbleparticipantlistitem.cpp
changeset 37 ba76fc04e6c2
child 46 bc5a64e5bc3c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/bubblemanager2/bubblecore/src/bubbleparticipantlistitem.cpp	Fri Jun 04 10:19:18 2010 +0100
@@ -0,0 +1,206 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: List item for conference participant list.
+*
+*/
+
+#include <QGraphicsLinearLayout>
+#include <hbiconitem.h>
+#include <hbtextitem.h>
+#include <hbaction.h>
+#include <hbpushbutton.h>
+#include <hbstyleloader.h>
+#include <hbabstractitemview.h>
+#include <hblistviewitem.h>
+
+#include "bubbleparticipantlistitem.h"
+#include "bubblemanagerif.h"
+#include "bubbleutils.h"
+
+BubbleParticipantListItem::BubbleParticipantListItem(
+    QGraphicsItem *parent) :
+    HbAbstractViewItem(parent),
+    mText(0),
+    mStatusIcon(0),
+    mCipheringIcon(0),
+    mExpandIcon(0),
+    mButton1(0),
+    mButton2(0),
+    mExpanded(false)
+{
+    HbStyleLoader::registerFilePath(":/bubbleparticipantlistitem.css");
+    HbStyleLoader::registerFilePath(":/bubbleparticipantlistitem.widgetml");
+}
+
+BubbleParticipantListItem::~BubbleParticipantListItem()
+{
+}
+
+HbAbstractViewItem* BubbleParticipantListItem::createItem()
+{
+    return new BubbleParticipantListItem(*this);
+}
+
+void BubbleParticipantListItem::updateChildItems()
+{
+    HbAbstractViewItem::updateChildItems();
+
+    setFocusPolicy(Qt::ClickFocus); // to enable expanding
+
+    // create primitives
+    if (!mText) {
+        mText = new HbTextItem(this);
+        style()->setItemName( mText, "text" );
+    }
+
+    if (!mCipheringIcon) {
+        mCipheringIcon = new HbIconItem(this);
+        style()->setItemName( mCipheringIcon, "ciphering" );
+    }
+
+    if (!mStatusIcon) {
+        mStatusIcon = new HbIconItem(this);
+        style()->setItemName( mStatusIcon, "icon" );
+    }
+
+    if (!mExpandIcon) {
+        mExpandIcon = new HbIconItem(this);
+        style()->setItemName( mExpandIcon, "expand-indi" );
+
+        // for expand/collapse controls
+        if (itemView()) {
+            connect( itemView()->selectionModel(),
+                     SIGNAL(currentChanged(QModelIndex,QModelIndex)),
+                     this,
+                     SLOT(currentIndexChanged(QModelIndex,QModelIndex)) );
+        }
+    }
+
+    BubbleParticipantListItem* p =
+            static_cast<BubbleParticipantListItem*>(prototype());
+
+    if (mExpanded && !mButton1) {
+        Q_ASSERT(p->mActions.count()==2);
+        HbAction* action = p->mActions.at(0);
+        mButton1 = new HbPushButton(this);
+        mButton1->setIcon(action->icon());
+        style()->setItemName( mButton1, "button-1" );
+
+        // connect first action
+        connect(mButton1,
+                SIGNAL(clicked()),
+                action,
+                SLOT(trigger()),
+                Qt::QueuedConnection);
+    } else {
+        delete mButton1;
+        mButton1 = 0;
+    }
+
+    if (mExpanded && !mButton2) {
+        Q_ASSERT(p->mActions.count()==2);
+        HbAction* action = p->mActions.at(1);
+        mButton2 = new HbPushButton(this);
+        mButton2->setIcon(action->icon());
+        style()->setItemName( mButton2, "button-2" );
+
+        // connect second action
+        connect(mButton2,
+                SIGNAL(clicked()),
+                action,
+                SLOT(trigger()),
+                Qt::QueuedConnection );
+
+    } else {
+        delete mButton2;
+        mButton2 = 0;
+    }
+
+    if (mText) {
+        mText->setText(modelIndex().data(Qt::DisplayRole).toString());
+    }
+
+    int state = (BubbleManagerIF::PhoneCallState)
+        modelIndex().data(Qt::DecorationRole).toInt();
+
+    if (mStatusIcon) {
+        BubbleUtils::setCallStatusIcon(state,0,*mStatusIcon);
+    }
+
+    if (mCipheringIcon) {
+        int flags = !modelIndex().data(Qt::StatusTipRole).toBool() ?
+                    BubbleManagerIF::NoCiphering : 0;
+
+        BubbleUtils::setCipheringIcon(state,flags,*mCipheringIcon);
+    }
+
+    if (mExpandIcon) {
+        if (mExpanded) {
+            mExpandIcon->setIcon(HbIcon("qtg_small_collapse"));
+        } else {
+            mExpandIcon->setIcon(HbIcon("qtg_small_expand"));
+        }
+    }
+
+    repolish();
+}
+
+void BubbleParticipantListItem::polish(HbStyleParameters& params)
+{
+    if (mExpanded) {
+        setProperty("layoutOption","expanded");
+    } else {
+        setProperty("layoutOption","collapsed");
+    }
+
+    HbAbstractViewItem::polish(params);
+}
+
+void BubbleParticipantListItem::setExpanded(bool expanded)
+{
+    mExpanded = expanded;
+    updateChildItems();
+}
+
+void BubbleParticipantListItem::addAction(HbAction* action)
+{
+    mActions.append(action);
+}
+
+void BubbleParticipantListItem::clearActions()
+{
+    mActions.clear();
+    mExpanded = false;
+}
+
+void BubbleParticipantListItem::currentIndexChanged(
+    const QModelIndex &current,
+    const QModelIndex &previous)
+{
+    Q_UNUSED(previous);
+
+    if (modelIndex() == current) {
+        if ( !mExpanded ) {
+            setExpanded(true);
+        }
+    } else if (mExpanded) {
+        setExpanded(false);
+    }
+}
+
+int BubbleParticipantListItem::type() const
+{
+    return HbListViewItem::Type;
+}
+