diff -r 000000000000 -r 4a5361db8937 logsui/logsengine/src/logsabstractmodel.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/logsui/logsengine/src/logsabstractmodel.cpp Tue May 04 12:39:37 2010 +0300 @@ -0,0 +1,255 @@ +/* +* 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: +* +*/ + +#include "logsabstractmodel.h" +#include "logsdbconnector.h" +#include "logsevent.h" +#include "logslogger.h" +#include "logscall.h" +#include "logscontact.h" +#include "logsengdefs.h" +#include "logsmessage.h" +#include + +Q_DECLARE_METATYPE(LogsEvent *) +Q_DECLARE_METATYPE(LogsCall *) +Q_DECLARE_METATYPE(LogsMessage *) +Q_DECLARE_METATYPE(LogsContact *) + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +LogsAbstractModel::LogsAbstractModel() : QAbstractListModel(), mDbConnector(0) +{ + LOGS_QDEBUG( "logs [ENG] -> LogsAbstractModel::LogsAbstractModel()" ) + + LOGS_QDEBUG( "logs [ENG] <- LogsAbstractModel::LogsAbstractModel()" ) +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +LogsAbstractModel::~LogsAbstractModel() +{ + LOGS_QDEBUG( "logs [ENG] -> LogsAbstractModel::~LogsAbstractModel()" ) + + qDeleteAll( mIcons ); + + LOGS_QDEBUG( "logs [ENG] <- LogsAbstractModel::~LogsAbstractModel()" ) +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +QVariant LogsAbstractModel::doGetData(int role, const LogsModelItemContainer& item) const +{ + if ( role == RoleFullEvent ) { + QVariant var = qVariantFromValue(item.event()); + return var; + } else if ( role == RoleCall ) { + return createCall(item); + } else if ( role == RoleMessage ) { + return createMessage(item); + } else if ( role == RoleContact ) { + return createContact(item); + } + return QVariant(); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +QVariant LogsAbstractModel::createCall(const LogsModelItemContainer& item) const +{ + LOGS_QDEBUG( "logs [ENG] -> LogsAbstractModel::createCall()" ) + LogsEvent* event = item.event(); + if ( !event ){ + return QVariant(); + } + LogsCall* logscall = new LogsCall(*event); + if (!logscall->isAllowedCallType()) { + delete logscall; + logscall = 0; + } + QVariant var = qVariantFromValue(logscall); + return var; +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +QVariant LogsAbstractModel::createMessage(const LogsModelItemContainer& item) const +{ + LOGS_QDEBUG( "logs [ENG] -> LogsAbstractModel::createMessage()" ) + LogsEvent* event = item.event(); + if ( !event ){ + return QVariant(); + } + LogsMessage* logsMessage = new LogsMessage(*event); + if (!logsMessage->isMessagingAllowed()) { + delete logsMessage; + logsMessage = 0; + } + QVariant var = qVariantFromValue(logsMessage); + return var; +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +QVariant LogsAbstractModel::createContact(const LogsModelItemContainer& item) const +{ + LOGS_QDEBUG( "logs [ENG] -> LogsAbstractModel::createContact()" ) + LogsEvent* event = item.event(); + if ( !event ){ + return QVariant(); + } + Q_ASSERT(mDbConnector); + LogsContact* logsContact = new LogsContact(*event, *mDbConnector); + if ( !logsContact->isContactRequestAllowed() ) { + delete logsContact; + logsContact = 0; + } + QVariant var = qVariantFromValue(logsContact); + return var; +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +QString LogsAbstractModel::directionIconName(const LogsEvent& event) +{ + QString direction; + + if ( event.direction() == LogsEvent::DirIn ) { + if ( event.eventType() == LogsEvent::TypeVoiceCall ) { + direction = logsReceivedVoiceCallIconId; + } else if ( event.eventType() == LogsEvent::TypeVideoCall ) { + direction = logsReceivedVideoCallIconId; + } else if ( event.eventType() == LogsEvent::TypeVoIPCall ) { + direction = logsReceivedVoipCallIconId; + } + } else if ( event.direction() == LogsEvent::DirOut ) { + if ( event.eventType() == LogsEvent::TypeVoiceCall ) { + direction = logsDialledVoiceCallIconId; + } else if ( event.eventType() == LogsEvent::TypeVideoCall ) { + direction = logsDialledVideoCallIconId; + } else if ( event.eventType() == LogsEvent::TypeVoIPCall ) { + direction = logsDialledVoipCallIconId; + } + } else if ( event.direction() == LogsEvent::DirMissed ) { + if ( event.eventType() == LogsEvent::TypeVoiceCall ) { + if (!event.isSeenLocally() ){ + direction = logsMissedVoiceCallUnseenIconId; + } + else { + direction = logsMissedVoiceCallIconId; + } + + } else if ( event.eventType() == LogsEvent::TypeVideoCall ) { + if (!event.isSeenLocally() ){ + direction = logsMissedVideoCallUnseenIconId; + } + else { + direction = logsMissedVideoCallIconId; + } + } else if ( event.eventType() == LogsEvent::TypeVoIPCall ) { + if (!event.isSeenLocally() ){ + direction = logsMissedVoipCallUnseenIconId; + } + else { + direction = logsMissedVoipCallIconId; + } + } + } + + return direction; +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +QString LogsAbstractModel::typeIconName(const LogsEvent& event) +{ + QString brand; + if ( event.eventType() == LogsEvent::TypeVoiceCall ) { + brand = QString(logsVoiceCallIconId); + } else if ( event.eventType() == LogsEvent::TypeVideoCall ) { + brand = QString(logsVideoCallIconId); + } else if ( event.eventType() == LogsEvent::TypeVoIPCall ) { + brand = QString(logsVoipCallIconId); + } + return brand; +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void LogsAbstractModel::getDecorationData(const LogsEvent& event, + QList& iconList) const +{ + HbIcon emptyIcon; + iconList.append( *mIcons.value(directionIconName(event), &emptyIcon) ); + + // TODO: alternative service icon +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +LogsDbConnector* LogsAbstractModel::dbConnector() +{ + return mDbConnector; +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +LogsModelItemContainer::LogsModelItemContainer(LogsEvent* event) : mEvent(event) +{ + +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +LogsModelItemContainer::~LogsModelItemContainer() +{ + +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +LogsEvent* LogsModelItemContainer::event() const +{ + return mEvent; +} +