logsui/logsengine/src/logsabstractmodel.cpp
changeset 0 4a5361db8937
child 2 7119b73b84d6
--- /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 <hbicon.h>
+
+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<QVariant>& 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;
+}
+