diff -r 7d48bed6ce0c -r 987c9837762f cbs/cbsui/src/cbsuitopiclistview.cpp --- a/cbs/cbsui/src/cbsuitopiclistview.cpp Tue Aug 31 15:45:17 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,896 +0,0 @@ -/* -* Copyright (c) 2010 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: -* -*/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "cbsuitopiclistview.h" -#include "cbsuiviewmanager.h" -#include "rcbsui.h" -#include "cbslog.h" -#include "cbsuiconstants.h" -#include "ccbsuitopiclistmonitor.h" - -// DocML usage -const char *T_TOPIC_LIST = "t:ListWidget"; -const char *T_TOPICINDEX = "t:topicIndex"; -// other items (for decoration) -const char *T_LABEL = "t:label"; - -const char *T_TOGGLE_RECEPTION = "t:toggle_reception"; -const char *T_ADD_TOPIC = "t:add_topic"; - -// Options menu -const char *T_EXIT = "t:exit"; - -const char *T_OPEN = "t:open"; -const char *T_SUBSCRIBE = "t:subscribe"; -const char *T_UNSUBSCRIBE = "t:unsubscribe"; -const char *T_HOTMARK = "t:hotmark"; -const char *T_UNHOTMARK = "t:unhotmark"; -const char *T_DELETE = "t:delete"; -const char *T_EDIT = "t:edit"; - -// ======== MEMBER FUNCTIONS ================================================== - -// ---------------------------------------------------------------------------- -// CbsUiTopicListView::CbsUiTopicListView -// ---------------------------------------------------------------------------- -CbsUiTopicListView::CbsUiTopicListView() - : HbView(), - mServer(NULL), - mViewManager(NULL), - mTopicRow(-1), - mTopicIndexWidget(NULL), - mTopicsWidget(NULL), - mReceptionButton(NULL), - mOpenAction(NULL), - mSubscibeAction(NULL), - mUnSubscibeAction(NULL), - mHotmarkAction(NULL), - mUnHotmarkAction(NULL), - mEditAction(NULL), - mDeleteAction(NULL), - mMonitor(NULL), - mTopicQuery(NULL), - mTopicNumberList(NULL) -{ - LOG(NORMAL,"CBSUI: CbsUiTopicListView::CbsUiTopicListView IN"); - mTopicNumberList = new TCbsUiTopicNumberList(KNumberOfStandardTopics); - QT_TRAP_THROWING(mTopicNumberList->AppendL(0)); - LOG(NORMAL,"CBSUI: CbsUiTopicListView::CbsUiTopicListView OUT"); -} - -// ---------------------------------------------------------------------------- -// CbsUiTopicListView::~CbsUiTopicListView -// ---------------------------------------------------------------------------- -CbsUiTopicListView::~CbsUiTopicListView() -{ - LOG(NORMAL,"CBSUI: CbsUiTopicListView::~CbsUiTopicListView IN"); - delete mTopicNumberList; - LOG(NORMAL,"CBSUI: CbsUiTopicListView::~CbsUiTopicListView OUT"); -} - -// ---------------------------------------------------------------------------- -// CbsUiTopicListView::init -// ---------------------------------------------------------------------------- -void CbsUiTopicListView::init(MCbs &server, - CbsUiViewManager &viewManager) -{ - LOG(NORMAL,"CBSUI: CbsUiTopicListView::init IN"); - mViewManager = &viewManager; - LOG(NORMAL,"CBSUI: CbsUiTopicListView::init 1"); - mServer = &server; - LOG(NORMAL,"CBSUI: CbsUiTopicListView::init 2"); - // First get pointers to UI components - createComponents(); - - // Update reception status to UI - TBool status; //Symbian variable.. - mServer->GetReceptionStatus(status); - if (status) { - LOG(NORMAL,"CBSUI: CbsUiTopicListView::init reception ON"); - mReceptionButton->setText(hbTrId("txt_cbs_deactivate")); - } else { - LOG(NORMAL,"CBSUI: CbsUiTopicListView::init reception OFF"); - mReceptionButton->setText(hbTrId("txt_cbs_activate")); - } - - // Update Topic index and Topics - reloadTopicIndex(); - reloadTopics(); - - // Symbian code, leave etc to be handled. - // QT_TRAP_THROWING( mMonitor = CCbsUiTopicListMonitor::NewL( *mServer ) ); - // mMonitor->AddObserverL( this ); - // Longpress in topic list, this is needed always - bool ret(false); - - // conntect topic index list widget operation - ret = connect(mTopicIndexWidget, - SIGNAL(longPressed(HbListWidgetItem *, QPointF)), - this, SLOT(showTopicIndexMenu(HbListWidgetItem *, QPointF))); - LOG2(NORMAL,"CBSUI: CbsUiTopicListView::init connect \ - TopicIndex long press %d", ret); - - ret = connect(mTopicIndexWidget, SIGNAL(activated(HbListWidgetItem *)), - this, SLOT(showTopicSelectionView(HbListWidgetItem *))); - LOG2(NORMAL,"CBSUI: CbsUiTopicListView::init connect \ - TopicIndex short press %d", ret); - - // conntect topics list widget operation - ret = connect(mTopicsWidget, - SIGNAL(longPressed(HbListWidgetItem*, QPointF)), - this, SLOT(showTopicsMenu(HbListWidgetItem *, QPointF))); - LOG2(NORMAL,"CBSUI: CbsUiTopicListView::init connect\ - Topics long press %d", ret); - - ret = connect(mTopicsWidget, SIGNAL(activated(HbListWidgetItem *)), - this, SLOT(showTopicView(HbListWidgetItem *))); - LOG2(NORMAL,"CBSUI: CbsUiTopicListView::init connect \ - topics short press %d", ret); - - // connect reception action - ret = connect(mReceptionButton, SIGNAL(triggered(bool)), - this, SLOT(toggleReception())); - LOG2(NORMAL,"CBSUI: CbsUiTopicListView::init connect reception %d", ret); - - // Open - mOpenAction = qobject_cast( - mViewManager->xmlLoader()->findObject(T_OPEN)); - ret = connect(mOpenAction, SIGNAL(triggered()), - this, SLOT(showTopicView())); - LOG2(NORMAL,"CBSUI: CbsUiTopicListView::init open %d", ret) - - // Subscribe - mSubscibeAction = qobject_cast( - mViewManager->xmlLoader()->findObject(T_SUBSCRIBE)); - ret = connect(mSubscibeAction, SIGNAL(triggered()), - this, SLOT(toggleSubscription())); - LOG2(NORMAL,"CBSUI: CbsUiTopicListView::init subscribe %d", ret) - - // UnSubscribe - mUnSubscibeAction = qobject_cast( - mViewManager->xmlLoader()->findObject(T_UNSUBSCRIBE)); - ret = connect(mUnSubscibeAction, SIGNAL(triggered()), - this, SLOT(toggleSubscription())); - LOG2(NORMAL,"CBSUI: CbsUiTopicListView::init subscribe %d", ret) - - // Hotmark - mHotmarkAction = qobject_cast( - mViewManager->xmlLoader()->findObject(T_HOTMARK)); - ret = connect(mHotmarkAction, SIGNAL(triggered()), - this, SLOT(toggleHotmark())); - LOG2(NORMAL,"CBSUI: CbsUiTopicListView::init hotmark %d", ret) - - // UnHotmark - mUnHotmarkAction = qobject_cast( - mViewManager->xmlLoader()->findObject(T_UNHOTMARK)); - ret = connect(mUnHotmarkAction, SIGNAL(triggered()), - this, SLOT(toggleHotmark())); - LOG2(NORMAL,"CBSUI: CbsUiTopicListView::init hotmark %d", ret) - - // Edit - mEditAction = qobject_cast( - mViewManager->xmlLoader()->findObject(T_EDIT)); - ret = connect(mEditAction, SIGNAL(triggered()) , - this, SLOT(editTopic())); - LOG2(NORMAL,"CBSUI: CbsUiTopicListView::init edit %d", ret) - - // Delete - mDeleteAction = qobject_cast( - mViewManager->xmlLoader()->findObject(T_DELETE)); - ret = connect(mDeleteAction, SIGNAL(triggered()), - this, SLOT(deleteTopic())); - LOG2(NORMAL,"CBSUI: CbsUiTopicListView::init delete %d", ret) - - LOG(NORMAL,"CBSUI: CbsUiTopicListView::init OUT"); -} - -// ---------------------------------------------------------------------------- -// CbsUiTopicListView::TopicListChangedL -// ---------------------------------------------------------------------------- -void CbsUiTopicListView::TopicListChangedL(TCbsTopicListEvent /*aEvent*/, - TCbsTopicNumber /*aTopicNumber*/ ) -{ - LOG(NORMAL,"CBSUI: CbsUiTopicListView::TopicListChangedL IN"); - reloadTopicIndex(); - reloadTopics(); - LOG(NORMAL,"CBSUI: CbsUiTopicListView::TopicListChangedL OUT"); -} - -// ---------------------------------------------------------------------------- -// CbsUiTopicListView::createComponents -// ---------------------------------------------------------------------------- -void CbsUiTopicListView::createComponents() -{ - LOG(NORMAL,"CBSUI: CbsUiTopicListView::createComponents IN"); - // The topic index widget - mTopicIndexWidget = qobject_cast( - mViewManager->xmlLoader()->findWidget(T_TOPICINDEX)); - LOG2(NORMAL,"CBSUI: CbsUiTopicListView::createComponents\ - mTopicIndexWidget=%d", mTopicIndexWidget) - - // The topic list widget - mTopicsWidget = qobject_cast( - mViewManager->xmlLoader()->findWidget(T_TOPIC_LIST)); - LOG2(NORMAL,"CBSUI: CbsUiTopicListView::createComponents\ - mTopicsWidget=%d", mTopicsWidget) - - // Button for changing reception status - mReceptionButton = qobject_cast( - mViewManager->xmlLoader()->findObject(T_TOGGLE_RECEPTION)); - LOG2(NORMAL,"CBSUI: CbsUiTopicListView::createComponents\ - mReceptionButton=%d", mReceptionButton) - - // Connect signals of DocML objects - HbAction *addTopic = qobject_cast( - mViewManager->xmlLoader()->findObject(T_ADD_TOPIC)); - LOG2(NORMAL,"CBSUI: CbsUiTopicListView::createComponents\ - addTopic=%d", addTopic) - connect(addTopic, SIGNAL(triggered(bool)), this, SLOT(addTopic())); - - HbAction *exit = qobject_cast( - mViewManager->xmlLoader()->findObject(T_EXIT)); - LOG2(NORMAL,"CBSUI: CbsUiTopicListView::createComponents\ - exit=%d", exit) - connect(exit, SIGNAL(triggered(bool)), mViewManager, SLOT(close())); - - LOG(NORMAL,"CBSUI: CbsUiTopicListView::createComponents OUT") -} - -// ---------------------------------------------------------------------------- -// CbsUiTopicListView::reloadTopicIndex -// ---------------------------------------------------------------------------- -void CbsUiTopicListView::reloadTopicIndex() -{ - LOG(NORMAL,"CBSUI: CbsUiTopicListView::reloadTopicIndex IN") - if (mTopicIndexWidget && mTopicNumberList) { - LOG(NORMAL,"CBSUI: CbsUiTopicListView::reloadTopicIndex reload") - HbListWidgetItem *item = new HbListWidgetItem(); - - TCbsTopic topic; - mServer->GetTopic(0, topic); - mTopicNumberList->At(0) = 0; - - updateItem(*item, topic); - mTopicIndexWidget->clear(); - mTopicIndexWidget->addItem(item); - - // Connect signal to indicate topic selection - connect(mTopicIndexWidget, SIGNAL(activated(HbListWidgetItem *)), - this, SLOT(showTopicSelectionView(HbListWidgetItem *))); - } - LOG(NORMAL,"CBSUI: CbsUiTopicListView::reloadTopicIndex OUT") -} - -// ---------------------------------------------------------------------------- -// CbsUiTopicListView::reloadTopics -// ---------------------------------------------------------------------------- -void CbsUiTopicListView::reloadTopics() -{ - LOG(NORMAL,"CBSUI: CbsUiTopicListView::reloadTopics IN"); - if (mTopicNumberList && mTopicsWidget) { - int count(0); - mServer->GetTopicCount(count); - LOG2(NORMAL,"CBSUI: CbsUiTopicListView::reloadTopics total count %d", - count); - // Reset first - mTopicNumberList->Reset(); - QT_TRAP_THROWING(mTopicNumberList->AppendL(0)); - mTopicsWidget->clear(); - - // Add updated topics one by one - for (int i = 1; i < count; i++) { - TCbsTopic topic; - mServer->GetTopic(i, topic); - QT_TRAP_THROWING(mTopicNumberList->AppendL(topic.iNumber)); - HbListWidgetItem *item = new HbListWidgetItem(); - updateItem(*item, topic); - mTopicsWidget->addItem(item); - - // Connect signal to indicate topic selection - connect(mTopicsWidget, SIGNAL(activated(HbListWidgetItem *)), - this, SLOT(showTopicView(HbListWidgetItem *))); - } - } - LOG(NORMAL,"CBSUI: CbsUiTopicListView::reloadTopics OUT"); -} - -// ---------------------------------------------------------------------------- -// CbsUiTopicListView::showTopicSelectionView -// ---------------------------------------------------------------------------- -void CbsUiTopicListView::showTopicSelectionView(HbListWidgetItem */*item*/) -{ - LOG(NORMAL,"CBSUI: CbsUiTopicListView::showTopicSelectionView IN"); - mTopicRow = 0; - if (mTopicNumberList) { - TInt messages(0); - mServer->GetMessageCount(0, messages); - if (messages) { - // TODO: show topic selection view - } - } - LOG(NORMAL,"CBSUI: CbsUiTopicListView::showTopicSelectionView OUT"); -} - -// ---------------------------------------------------------------------------- -// CbsUiTopicListView::showTopicView -// ---------------------------------------------------------------------------- -void CbsUiTopicListView::showTopicView(HbListWidgetItem *item) -{ - LOG(NORMAL,"CBSUI: CbsUiTopicListView::topicSelection IN"); - mTopicRow = mTopicsWidget->row(item)+1; - LOG2(NORMAL,"CBSUI: CbsUiTopicListView::topicSelection index=%d", - mTopicRow); - if (mTopicNumberList) { - TCbsTopicNumber selectTopic(mTopicNumberList->At(mTopicRow)); - TInt messages(0); - mServer->GetMessageCount(selectTopic, messages); - if (messages) { - // it will be reopened - // mViewManager->activateTopicView(selectTopic); - } - } - LOG(NORMAL,"CBSUI: CbsUiTopicListView::topicSelection OUT"); -} - -// ---------------------------------------------------------------------------- -// CbsUiTopicListView::addTopic -// ---------------------------------------------------------------------------- -void CbsUiTopicListView::addTopic() -{ - LOG(NORMAL,"CBSUI: CbsUiTopicListView::addTopic IN"); - // Handle not OK cases, KErrAlreadyExists, KErrArgument, KErrDiskFull - // Todo: Add from index if it is available - TCbsTopic topic; - if (showTopicQuery(topic, true) && - KErrNone == mServer->AddTopic(topic)) { - reloadTopics(); - } - LOG(NORMAL,"CBSUI: CbsUiTopicListView::addTopic OUT"); -} - - -// ---------------------------------------------------------------------------- -// CbsUiTopicListView::editTopic -// ---------------------------------------------------------------------------- -void CbsUiTopicListView::editTopic() -{ - LOG(NORMAL,"CBSUI: CbsUiTopicListView::editTopic IN"); - LOG2(NORMAL,"CBSUI: CbsUiTopicListView::editTopic mTopicRow=%d", mTopicRow) - TInt count(0); - mServer->GetTopicCount(count); - if (mTopicRow > 0 && mTopicRow < count) { - // Get topic we need to edit - TCbsTopic topic; - mServer->GetTopic(mTopicRow, topic); - TCbsTopicNumber oldTopicNumber = topic.iNumber; - TCbsTopicNumber newTopicNumber(EMaxTopicNumber); - TCbsTopicName newTopicName; - if (showTopicQuery(topic, false)) { - newTopicNumber = topic.iNumber; - newTopicName = topic.iName; - } - TInt err = mServer->ChangeTopicNameAndNumber(oldTopicNumber, - newTopicNumber, newTopicName); - if (KErrNone == err) { - reloadTopics(); - } - } - LOG(NORMAL,"CBSUI: CbsUiTopicListView::editTopic OUT"); -} - -// ---------------------------------------------------------------------------- -// CbsUiTopicListView::deleteTopic -// ---------------------------------------------------------------------------- -void CbsUiTopicListView::deleteTopic() - { - LOG2(NORMAL,"CBSUI: CbsUiTopicListView::deleteTopic IN row %d", mTopicRow); - TInt count(0); - mServer->GetTopicCount(count); - if (mTopicRow > 0 && mTopicRow < count) { - // user confirmation - HbMessageBox *box = new HbMessageBox(hbTrId("txt_cbs_delete_topic"), - HbMessageBox::MessageTypeQuestion); - HbAction *action = box->exec(); - if (action == box->primaryAction()) { - TCbsTopicNumber selectTopic(mTopicNumberList->At(mTopicRow)); - LOG2(NORMAL,"CBSUI: CbsUiTopicListView::deleteTopic topic number %d", - selectTopic); - if (KErrNone == mServer->DeleteTopic(selectTopic)) { - reloadTopics(); - } - } - delete box; - box = NULL; - } - LOG(NORMAL,"CBSUI: CbsUiTopicListView::deleteTopic OUT"); -} - -// ---------------------------------------------------------------------------- -// CbsUiTopicListView::toggleReception -// ---------------------------------------------------------------------------- -void CbsUiTopicListView::toggleReception() -{ - LOG(NORMAL,"CBSUI: CbsUiTopicListView::ToggleReception IN"); - TBool status; //Symbian variable.. - mServer->GetReceptionStatus(status); - - if (status) { - // Deactivate reception and switch the text on UI - LOG(NORMAL,"CBSUI: CbsUiTopicListView::ToggleReception 1->0"); - mServer->SetReceptionStatus(EFalse); - - mReceptionButton->setText( hbTrId("txt_cbs_activate") ); - } else { - LOG(NORMAL,"CBSUI: CbsUiTopicListView::ToggleReception 0->1"); - // Activate reception and switch the text on UI - mServer->SetReceptionStatus(ETrue); - mReceptionButton->setText(hbTrId("txt_cbs_deactivate")); - } - LOG(NORMAL,"CBSUI: CbsUiTopicListView::ToggleReception OUT"); -} - -// ---------------------------------------------------------------------------- -// CbsUiTopicListView::toggleHotmark -// ---------------------------------------------------------------------------- -void CbsUiTopicListView::toggleHotmark() -{ - LOG(NORMAL,"CBSUI: CbsUiTopicListView::toggleHotmark IN") - LOG2(NORMAL,"CBSUI: CbsUiTopicListView::toggleHotmark\ - mTopicRow %d", mTopicRow); - TInt count(0); - mServer->GetTopicCount(count); - if (mTopicRow >= 0 && mTopicRow < count) { - // Update data - TCbsTopic topic; - mServer->GetTopic(mTopicRow, topic); - LOG3(NORMAL,"CBSUI: CbsUiTopicListView::toggleHotmark\ - before toggle hormark (S,H)=(%d,%d)", - topic.iSubscribed, topic.iHotmarked); - - if (topic.iHotmarked) { - mServer->ChangeTopicHotmarkStatus(topic.iNumber, EFalse); - mServer->ChangeTopicSubscriptionStatus(topic.iNumber, ETrue); - topic.iHotmarked = EFalse; - topic.iSubscribed = ETrue; - } else { - if (topic.iSubscribed){ - mServer->ChangeTopicHotmarkStatus(topic.iNumber, ETrue); - topic.iHotmarked = ETrue; - } else { - mServer->ChangeTopicHotmarkStatus(topic.iNumber, ETrue); - mServer->ChangeTopicSubscriptionStatus(topic.iNumber, ETrue); - topic.iHotmarked = ETrue; - topic.iSubscribed = ETrue; - } - } - LOG3(NORMAL,"CBSUI: CbsUiTopicListView::toggleHotmark\ - after toggle hotmark (S,H)=(%d,%d)", - topic.iSubscribed, topic.iHotmarked); - // Update icon - updateCurrentItemIcon(topic); - } - LOG(NORMAL,"CBSUI: CbsUiTopicListView::toggleHotmark OUT") -} - -// ---------------------------------------------------------------------------- -// CbsUiTopicListView::toggleSubscription -// ---------------------------------------------------------------------------- -void CbsUiTopicListView::toggleSubscription() -{ - LOG(NORMAL,"CBSUI: CbsUiTopicListView::toggleSubsciption IN") - LOG2(NORMAL,"CBSUI: CbsUiTopicListView::toggleSubsciption mTopicRow=%d", - mTopicRow) - TInt count(0); - mServer->GetTopicCount(count); - if (mTopicRow >= 0 && mTopicRow < count) { - TCbsTopic topic; - mServer->GetTopic(mTopicRow, topic); - LOG2(NORMAL,"CBSUI: CbsUiTopicListView::toggleSubsciption\ - topic number %d", topic.iNumber); - LOG3(NORMAL,"CBSUI: CbsUiTopicListView::toggleSubscription\ - before toggle subscibe (S,H)=(%d,%d)", - topic.iSubscribed, topic.iHotmarked); - - if (topic.iSubscribed) { - if (topic.iHotmarked) { - mServer->ChangeTopicHotmarkStatus(topic.iNumber, EFalse); - topic.iHotmarked = EFalse; - } - mServer->ChangeTopicSubscriptionStatus(topic.iNumber, EFalse); - topic.iSubscribed = EFalse; - } else { - mServer->ChangeTopicSubscriptionStatus(topic.iNumber, ETrue); - topic.iSubscribed = ETrue; - } - LOG3(NORMAL,"CBSUI: CbsUiTopicListView::toggleSubscription\ - after toggle subscibe (S,H)=(%d,%d)", - topic.iSubscribed, topic.iHotmarked); - // Update icon - updateCurrentItemIcon(topic); - } - LOG(NORMAL,"CBSUI: CbsUiTopicListView::toggleSubsciption OUT"); -} - -// ---------------------------------------------------------------------------- -// CbsUiTopicListView::showTopicIndexMenu -// ---------------------------------------------------------------------------- -void CbsUiTopicListView::showTopicIndexMenu(HbListWidgetItem *item, QPointF coords) -{ - LOG(NORMAL,"CBSUI: CbsUiTopicListView::showTopicIndexMenu IN"); - Q_UNUSED(item); - mTopicRow = 0; - TCbsTopic topic; - mServer->GetTopic(0, topic); - LOG3(NORMAL,"CBSUI: CbsUiTopicListView::showTopicIndexMenu (row %d: %d)", - mTopicRow, topic.iNumber); - showPopupMenu(topic, coords); - LOG(NORMAL,"CBSUI: CbsUiTopicListView::showTopicIndexMenu OUT"); -} - -// ---------------------------------------------------------------------------- -// CbsUiTopicListView::showTopicsMenu -// ---------------------------------------------------------------------------- -void CbsUiTopicListView::showTopicsMenu(HbListWidgetItem *item, QPointF coords) -{ - LOG(NORMAL,"CBSUI: CbsUiTopicListView::showTopicsMenu IN"); - mTopicRow = mTopicsWidget->row(item)+1; - TCbsTopic topic; - mServer->GetTopic(mTopicRow, topic); - LOG3(NORMAL,"CBSUI: CbsUiTopicListView::showTopicsMenu (row %d: %d)", - mTopicRow, topic.iNumber); - showPopupMenu(topic, coords); - LOG(NORMAL,"CBSUI: CbsUiTopicListView::showTopicsMenu OUT"); -} - -// ---------------------------------------------------------------------------- -// CbsUiTopicListView::showPopupMenu -// ---------------------------------------------------------------------------- -void CbsUiTopicListView::showPopupMenu(const TCbsTopic &topic, QPointF coords) -{ - LOG(NORMAL,"CBSUI: CbsUiTopicListView::showPopupMenu IN"); - HbMenu *contextMenu = new HbMenu(); - contextMenu->setTimeout(HbPopup::NoTimeout); - contextMenu->setDismissPolicy(HbPopup::TapOutside); - - TInt messageCount(0); - mServer->GetMessageCount(topic.iNumber, messageCount); - LOG2(NORMAL,"CBSUI: CbsUiTopicListView::showPopupMenu\ - messageCount=%d", messageCount) - - // Open - if (topic.iNumber && messageCount) { - contextMenu->addAction(mOpenAction); - } - // Subscribe / UnSubscribe - if (topic.iSubscribed) { - contextMenu->addAction(mUnSubscibeAction); - } else { - contextMenu->addAction(mSubscibeAction); - } - // Hotmark / UnHotmark - if (topic.iHotmarked) { - contextMenu->addAction(mUnHotmarkAction); - } else { - contextMenu->addAction(mHotmarkAction); - } - // Edit & Delete - if (topic.iNumber) { - contextMenu->addAction(mEditAction); - contextMenu->addAction(mDeleteAction); - } - - // Show context sensitive menu. - contextMenu->exec(coords); - contextMenu->clearActions(); - delete contextMenu; - contextMenu = NULL; - LOG(NORMAL,"CBSUI: CbsUiTopicListView::showPopupMenu OUT") -} - -// ---------------------------------------------------------------------------- -// CbsUiTopicListView::updateQueryAction -// ---------------------------------------------------------------------------- -// -void CbsUiTopicListView::updateQueryAction( QString text ) -{ - LOG(NORMAL, "SATAPP: CbsUiTopicListView::updateQueryAction IN" ) - LOG2(NORMAL, "SATAPP: CbsUiTopicListView::updateQueryAction text=%s", - text.utf16()) - if (mTopicQuery && text.length() > 0) { - mTopicQuery->primaryAction()->setEnabled(true); - LOG(NORMAL, "SATAPP: CbsUiTopicListView::updateQueryAction enable OK") - } - LOG(NORMAL, "SATAPP: CbsUiTopicListView::updateQueryAction OUT" ) -} - -// ---------------------------------------------------------------------------- -// CbsUiTopicListView::updateItem -// ---------------------------------------------------------------------------- -void CbsUiTopicListView::updateItem(HbListWidgetItem &item, - const TCbsTopic &topic) -{ - LOG(NORMAL, "SATAPP: CbsUiTopicListView::updateItem IN" ) - updateItemText(item, topic); - updateItemIcon(item, topic); - LOG(NORMAL, "SATAPP: CbsUiTopicListView::updateItem OUT" ) -} - -// ---------------------------------------------------------------------------- -// CbsUiTopicListView::updateItemIcon -// ---------------------------------------------------------------------------- -void CbsUiTopicListView::updateItemIcon(HbListWidgetItem &item, - const TCbsTopic &topic) -{ - LOG(NORMAL,"CBSUI: CbsUiTopicListView::updateItemIcon IN"); - // TODO: what is the correct way to handle graphics (SVG?) - - if (topic.iSubscribed) { - if (topic.iHotmarked) { - item.setDecorationIcon(HbIcon(":/icons/icons/hotmark2.png")); - LOG(NORMAL,"CBSUI: CbsUiTopicListView::updateItemIcon Hotmarked"); - } else { - item.setDecorationIcon(HbIcon(":/icons/icons/sub2.png")); - LOG(NORMAL,"CBSUI: CbsUiTopicListView::updateItemIcon Subscribed"); - } - } else { - // No icon if not subscribted: - // List item without an icon is alligned on left (looks bad) - // temporary solution is to use empty icon - item.setDecorationIcon(HbIcon(":/icons/icons/empty.png")); - LOG(NORMAL,"CBSUI: CbsUiTopicListView::updateItemIcon Empty"); - } - LOG(NORMAL,"CBSUI: CbsUiTopicListView::updateItemIcon OUT"); -} - -// ---------------------------------------------------------------------------- -// CbsUiTopicListView::updateItemText -// ---------------------------------------------------------------------------- -void CbsUiTopicListView::updateItemText(HbListWidgetItem &item, - const TCbsTopic &topic) -{ - LOG(NORMAL,"CBSUI: CbsUiTopicListView::updateItemText IN"); - QString txtL1; - QString txtL2; - if (0 == topic.iNumber) { - LOG(NORMAL,"CBSUI: CbsUiTopicListView::updateItemText topic index"); - txtL1 = hbTrId("txt_cbs_000_topic_index"); - txtL2 = hbTrId("txt_cbs_not_available"); - } else { - LOG(NORMAL,"CBSUI: CbsUiTopicListView::updateItemText topics"); - txtL1 = QVariant(topic.iNumber).toString(); - txtL2 = hbTrId("txt_cbs_no_messages"); - // instert zeros to topic number in case 2 or 1 digit topic number. - switch (txtL1.length()) { - case 1: - { - txtL1.insert(0, "0"); - txtL1.insert(0, "0"); - break; - } - case 2: - { - txtL1.insert(0, "0"); - break; - } - default: - { - break; - } - // do nothing - } - - txtL1.append(' '); // a space - QString name = QString::fromUtf16(topic.iName.Ptr(), topic.iName.Length()); - txtL1.append(name); - if (topic.iUnreadMessages) { - txtL1.append(" ("); // space + ( - txtL1.append(QVariant(topic.iUnreadMessages).toString()); - txtL1.append(')'); // closing ) - } - // Update the status of topic - TInt numberOfMessages(0); - mServer->GetMessageCount(topic.iNumber, numberOfMessages); - if (numberOfMessages) { - TCbsMessage message; - TBuf buffer; // symbian code - // take the last message, not sure is this correct - TInt err = mServer->GetMessage(topic.iNumber, - numberOfMessages - 1, message); - if (KErrNone == err) { - err = mServer->GetMessageContents(message.iHandle, buffer); - txtL2 = QString::fromUtf16(buffer.Ptr(), buffer.Length()); - // TODO: timestamp and second text line - } - } - } - item.setText(txtL1); - item.setSecondaryText(txtL2); - LOG(NORMAL,"CBSUI: CbsUiTopicListView::updateItemText OUT"); -} - -// ---------------------------------------------------------------------------- -// CbsUiTopicListView::updateCurrentItem -// ---------------------------------------------------------------------------- -void CbsUiTopicListView::updateCurrentItem(const TCbsTopic &topic) -{ - LOG(NORMAL, "SATAPP: CbsUiTopicListView::updateCurrentItem IN" ) - LOG2(NORMAL, "SATAPP: CbsUiTopicListView::updateCurrentItem row=%d", - mTopicRow) - updateCurrentItemIcon(topic); - updateCurrentItemText(topic); - LOG(NORMAL, "SATAPP: CbsUiTopicListView::updateCurrentItem OUT" ) -} - -// ---------------------------------------------------------------------------- -// CbsUiTopicListView::updateCurrentItemIcon -// ---------------------------------------------------------------------------- -void CbsUiTopicListView::updateCurrentItemIcon(const TCbsTopic &topic) -{ - LOG(NORMAL, "SATAPP: CbsUiTopicListView::updateCurrentItemIcon IN" ) - LOG2(NORMAL, "SATAPP: CbsUiTopicListView::updateCurrentItemIcon row=%d", - mTopicRow) - HbListWidgetItem *list = NULL; - if (0 == mTopicRow) { - list = mTopicIndexWidget->item(0); - } else { - list = mTopicsWidget->item(mTopicRow - 1); - } - updateItemIcon(*list, topic); - LOG(NORMAL, "SATAPP: CbsUiTopicListView::updateCurrentItemIcon OUT" ) -} - -// ---------------------------------------------------------------------------- -// CbsUiTopicListView::updateCurrentItemText -// ---------------------------------------------------------------------------- -void CbsUiTopicListView::updateCurrentItemText(const TCbsTopic &topic) -{ - LOG(NORMAL, "SATAPP: CbsUiTopicListView::updateCurrentItemText IN" ) - LOG2(NORMAL, "SATAPP: CbsUiTopicListView::updateCurrentItemText row=%d", - mTopicRow) - HbListWidgetItem *list = NULL; - if (0 == mTopicRow) { - list = mTopicIndexWidget->item(0); - } else { - list = mTopicsWidget->item(mTopicRow - 1); - } - updateItemText(*list, topic); - LOG(NORMAL, "SATAPP: CbsUiTopicListView::updateCurrentItemText OUT" ) -} - -// ---------------------------------------------------------------------------- -// CbsUiTopicListView::showTopicQuery -// ---------------------------------------------------------------------------- -bool CbsUiTopicListView::showTopicQuery(TCbsTopic &topic, const bool isAddTopic) -{ - LOG(NORMAL,"CBSUI: CbsUiTopicListView::showTopicQuery IN"); - bool ret = false; // user didn't click OK - // Compose dialog - mTopicQuery = new HbInputDialog(); - mTopicQuery->setSecondRowVisible(true); - // Name - mTopicQuery->setInputMode(HbInputDialog::TextInput, 0); - mTopicQuery->lineEdit(0)->setMaxLength(KMaxTopicNameLength); - QString name = QString::fromUtf16(topic.iName.Ptr(), topic.iName.Length()); - if (name.length()) { - mTopicQuery->setTextValue(QVariant(name), 0); - LOG2(NORMAL,"CBSUI: CbsUiTopicListView::showTopicQuery old name %s", - name.utf16()); - } - - // Number - mTopicQuery->setInputMode(HbInputDialog::IntInput, 1); - mTopicQuery->lineEdit(1)->setMaxLength(3); - int number = topic.iNumber; - if (number){ - mTopicQuery->setTextValue(QVariant(number), 1); - LOG2(NORMAL,"CBSUI: CbsUiTopicListView::showTopicQuery old number%d", number); - } - - mTopicQuery->setPromptText(hbTrId("txt_cbs_topic_name"), 0); - mTopicQuery->setPromptText(hbTrId("txt_cbs_topic_number"), 1); - - // Disable OK button if invalid topic number input - HbAction *perimaryAction = mTopicQuery->primaryAction(); - perimaryAction->setEnabled(false); - connect(mTopicQuery->lineEdit(1), SIGNAL(textChanged(QString)), - this, SLOT( updateQueryAction(QString))); - - // Add validation for topic number (1-999) - HbValidator *val =new HbValidator; - QRegExp r("\\d{1,3}"); // from 1 to 3 digits - val->setMasterValidator(new QRegExpValidator(r,0)); - val->addField(new QIntValidator(1,999,0),""); - mTopicQuery->setValidator(val, 1); - - // Show the dialog - HbAction *action = mTopicQuery->exec(); - - // Fatch name and number from dialog - name = mTopicQuery->value(0).toString(); - LOG2(NORMAL,"CBSUI: CbsUiTopicListView::showTopicQuery name=%s ", name.utf16()); - number = mTopicQuery->value(1).toString().toInt(); - LOG2(NORMAL,"CBSUI: CbsUiTopicListView::showTopicQuery number=%d ", number); - bool isNumberExist(false); - if (isAddTopic) { - int count(0); - mServer->GetTopicCount(count); - LOG2(NORMAL,"CBSUI: CbsUiTopicListView::showTopicQuery topic total count %d", - count); - // Check if there is a toipc number same as number which user add - for (int i = 1; i < count; i++) { - TCbsTopic currentTopic; - mServer->GetTopic(i, currentTopic); - if (currentTopic.iNumber == number) { - isNumberExist = true; - break; - } - } - } - - // check that a topic number was entered and ok pressed - // name is optional - if (action == mTopicQuery->primaryAction()) { - if ( isNumberExist || !number){ - // 000 topic and exist number topic can't be edited - showNumberInUsePopup(); - showTopicQuery( topic, isAddTopic); - } else { - ret = true; - LOG(NORMAL,"CBSUI: CbsUiTopicListView::showTopicQuery OK") - topic.iNumber = number; - topic.iSubscribed = ETrue; - topic.iHotmarked = EFalse; - if (name.length()) { - topic.iName = name.utf16(); - } - } - } - delete mTopicQuery; - mTopicQuery = NULL; - - LOG(NORMAL,"CBSUI: CbsUiTopicListView::showTopicQuery OUT"); - return ret; -} - -// ---------------------------------------------------------------------------- -// CbsUiTopicListView::showNumberInUsePopup -// ---------------------------------------------------------------------------- -void CbsUiTopicListView::showNumberInUsePopup() -{ - LOG(NORMAL,"CBSUI: CbsUiTopicListView::showNumberInUsePopup IN"); - HbMessageBox *inUsedPopup = new HbMessageBox(HbMessageBox::MessageTypeWarning); - inUsedPopup->setText(tr("topic number already in use ")); - inUsedPopup->exec(); - delete inUsedPopup; - inUsedPopup = NULL; - LOG(NORMAL,"CBSUI: CbsUiTopicListView::showNumberInUsePopup OUT"); -} - -// End of file