From 329879d09e290ee25f3d61378c02632ef44b0c46 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Quentin?=
 <jquentin@jquentin-laptop-kub2.(none)>
Date: Tue, 17 Mar 2009 10:34:51 -0400
Subject: [PATCH] commit before merge asavard for isRecording.

---
 sflphone_kde/Call.cpp                  |  97 ++++++++++++++++++++-----
 sflphone_kde/Call.h                    |  32 +++++---
 sflphone_kde/CallList.cpp              |  18 ++++-
 sflphone_kde/CallList.h                |   6 +-
 sflphone_kde/ConfigDialog.ui           |  16 ----
 sflphone_kde/SFLPhone.cpp              |  16 +++-
 sflphone_kde/SFLPhone.h                |   2 -
 sflphone_kde/callmanager-introspec.xml |   4 +
 sflphone_kde/callmanager_interface.cpp |   2 +-
 sflphone_kde/callmanager_interface_p.h |  13 +++-
 sflphone_kde/sflphone_const.h          |   9 ++-
 sflphone_kde/sflphone_kde.kdevelop.pcs | Bin 180763 -> 187789 bytes
 sflphone_kde/sflphone_kde.kdevses      |  52 ++++++++-----
 sflphone_kde/templates/cpp             |   7 +-
 sflphone_kde/templates/h               |   7 +-
 15 files changed, 198 insertions(+), 83 deletions(-)

diff --git a/sflphone_kde/Call.cpp b/sflphone_kde/Call.cpp
index 5ef9f7fe04..a726e00654 100644
--- a/sflphone_kde/Call.cpp
+++ b/sflphone_kde/Call.cpp
@@ -3,22 +3,38 @@
 #include "callmanager_interface_p.h"
 #include "callmanager_interface_singleton.h"
 #include "SFLPhone.h"
+#include "sflphone_const.h"
 
-
-const call_state Call::stateMap [11][5] = 
+const call_state Call::stateActionMap [11][5] = 
 {
 //                      ACCEPT                  REFUSE             TRANSFER                   HOLD                           RECORD
-/*INCOMING       */  {CALL_STATE_CURRENT  , CALL_STATE_OVER  , CALL_STATE_OVER           , CALL_STATE_HOLD           ,  CALL_STATE_INCOMING       },
-/*RINGING        */  {CALL_STATE_ERROR    , CALL_STATE_OVER  , CALL_STATE_ERROR          , CALL_STATE_ERROR          ,  CALL_STATE_RINGING        },
-/*CURRENT        */  {CALL_STATE_ERROR    , CALL_STATE_OVER  , CALL_STATE_TRANSFER       , CALL_STATE_HOLD           ,  CALL_STATE_CURRENT        },
-/*DIALING        */  {CALL_STATE_RINGING  , CALL_STATE_OVER  , CALL_STATE_ERROR          , CALL_STATE_ERROR          ,  CALL_STATE_DIALING        },
-/*HOLD           */  {CALL_STATE_ERROR    , CALL_STATE_OVER  , CALL_STATE_TRANSFER_HOLD  , CALL_STATE_CURRENT        ,  CALL_STATE_HOLD           },
-/*FAILURE        */  {CALL_STATE_ERROR    , CALL_STATE_OVER  , CALL_STATE_ERROR          , CALL_STATE_ERROR          ,  CALL_STATE_ERROR          },
-/*BUSY           */  {CALL_STATE_ERROR    , CALL_STATE_OVER  , CALL_STATE_ERROR          , CALL_STATE_ERROR          ,  CALL_STATE_ERROR          },
-/*TRANSFER       */  {CALL_STATE_OVER     , CALL_STATE_OVER  , CALL_STATE_CURRENT        , CALL_STATE_TRANSFER_HOLD  ,  CALL_STATE_TRANSFER       },
-/*TRANSFER_HOLD  */  {CALL_STATE_OVER     , CALL_STATE_OVER  , CALL_STATE_HOLD           , CALL_STATE_TRANSFER       ,  CALL_STATE_TRANSFER_HOLD  },
-/*OVER           */  {CALL_STATE_ERROR    , CALL_STATE_ERROR , CALL_STATE_ERROR          , CALL_STATE_ERROR          ,  CALL_STATE_ERROR          },
-/*ERROR          */  {CALL_STATE_ERROR    , CALL_STATE_ERROR , CALL_STATE_ERROR          , CALL_STATE_ERROR          ,  CALL_STATE_ERROR          }
+/*INCOMING     */  {CALL_STATE_CURRENT  , CALL_STATE_OVER  , CALL_STATE_OVER         , CALL_STATE_HOLD         ,  CALL_STATE_INCOMING     },
+/*RINGING      */  {CALL_STATE_ERROR    , CALL_STATE_OVER  , CALL_STATE_ERROR        , CALL_STATE_ERROR        ,  CALL_STATE_RINGING      },
+/*CURRENT      */  {CALL_STATE_ERROR    , CALL_STATE_OVER  , CALL_STATE_TRANSFER     , CALL_STATE_HOLD         ,  CALL_STATE_CURRENT      },
+/*DIALING      */  {CALL_STATE_RINGING  , CALL_STATE_OVER  , CALL_STATE_ERROR        , CALL_STATE_ERROR        ,  CALL_STATE_DIALING      },
+/*HOLD         */  {CALL_STATE_ERROR    , CALL_STATE_OVER  , CALL_STATE_TRANSF_HOLD  , CALL_STATE_CURRENT      ,  CALL_STATE_HOLD         },
+/*FAILURE      */  {CALL_STATE_ERROR    , CALL_STATE_OVER  , CALL_STATE_ERROR        , CALL_STATE_ERROR        ,  CALL_STATE_ERROR        },
+/*BUSY         */  {CALL_STATE_ERROR    , CALL_STATE_OVER  , CALL_STATE_ERROR        , CALL_STATE_ERROR        ,  CALL_STATE_ERROR        },
+/*TRANSFER     */  {CALL_STATE_OVER     , CALL_STATE_OVER  , CALL_STATE_CURRENT      , CALL_STATE_TRANSF_HOLD  ,  CALL_STATE_TRANSFER     },
+/*TRANSF_HOLD  */  {CALL_STATE_OVER     , CALL_STATE_OVER  , CALL_STATE_HOLD         , CALL_STATE_TRANSFER     ,  CALL_STATE_TRANSF_HOLD  },
+/*OVER         */  {CALL_STATE_ERROR    , CALL_STATE_ERROR , CALL_STATE_ERROR        , CALL_STATE_ERROR        ,  CALL_STATE_ERROR        },
+/*ERROR        */  {CALL_STATE_ERROR    , CALL_STATE_ERROR , CALL_STATE_ERROR        , CALL_STATE_ERROR        ,  CALL_STATE_ERROR        }
+};
+
+const call_state Call::stateChangedMap [11][6] = 
+{
+//                      RINGING                  CURRENT             BUSY                   HOLD                           HUNGUP           FAILURE
+/*INCOMING     */  {CALL_STATE_CURRENT  , CALL_STATE_OVER  , CALL_STATE_OVER         , CALL_STATE_HOLD         ,  CALL_STATE_INCOMING     },
+/*RINGING      */  {CALL_STATE_ERROR    , CALL_STATE_OVER  , CALL_STATE_ERROR        , CALL_STATE_ERROR        ,  CALL_STATE_RINGING      },
+/*CURRENT      */  {CALL_STATE_ERROR    , CALL_STATE_OVER  , CALL_STATE_TRANSFER     , CALL_STATE_HOLD         ,  CALL_STATE_CURRENT      },
+/*DIALING      */  {CALL_STATE_RINGING  , CALL_STATE_OVER  , CALL_STATE_ERROR        , CALL_STATE_ERROR        ,  CALL_STATE_DIALING      },
+/*HOLD         */  {CALL_STATE_ERROR    , CALL_STATE_OVER  , CALL_STATE_TRANSF_HOLD  , CALL_STATE_CURRENT      ,  CALL_STATE_HOLD         },
+/*FAILURE      */  {CALL_STATE_ERROR    , CALL_STATE_OVER  , CALL_STATE_ERROR        , CALL_STATE_ERROR        ,  CALL_STATE_ERROR        },
+/*BUSY         */  {CALL_STATE_ERROR    , CALL_STATE_OVER  , CALL_STATE_ERROR        , CALL_STATE_ERROR        ,  CALL_STATE_ERROR        },
+/*TRANSFER     */  {CALL_STATE_OVER     , CALL_STATE_OVER  , CALL_STATE_CURRENT      , CALL_STATE_TRANSF_HOLD  ,  CALL_STATE_TRANSFER     },
+/*TRANSF_HOLD  */  {CALL_STATE_OVER     , CALL_STATE_OVER  , CALL_STATE_HOLD         , CALL_STATE_TRANSFER     ,  CALL_STATE_TRANSF_HOLD  },
+/*OVER         */  {CALL_STATE_ERROR    , CALL_STATE_ERROR , CALL_STATE_ERROR        , CALL_STATE_ERROR        ,  CALL_STATE_ERROR        },
+/*ERROR        */  {CALL_STATE_ERROR    , CALL_STATE_ERROR , CALL_STATE_ERROR        , CALL_STATE_ERROR        ,  CALL_STATE_ERROR        }
 };
 
 const function Call::functionMap[11][5] = 
@@ -46,11 +62,11 @@ Call::Call(call_state startState, QString callId)
 	this->currentState = startState;
 }
 
-Call::Call(call_state startState, QString callId, QString from, Account & account)
+Call::Call(call_state startState, QString callId, QString from, QString account)
 {
 	this->callId = callId;
 	this->item = new QListWidgetItem(from);
-	this->account = & account;
+	this->account = account;
 	this->recording = false;
 	this->currentState = startState;
 }
@@ -66,7 +82,7 @@ Call * Call::buildDialingCall(QString callId)
 	return call;
 }
 
-Call * Call::buildIncomingCall(QString callId, QString from, Account & account)
+Call * Call::buildIncomingCall(const QString & callId, const QString & from, const QString & account)
 {
 	Call * call = new Call(CALL_STATE_INCOMING, callId, from, account);
 	return call;
@@ -82,8 +98,42 @@ call_state Call::getState() const
 	return currentState;
 }
 
+call_state Call::stateChanged(const QString & newState)
+{
+	if(newState == QString(CALL_STATE_CHANGE_HUNG_UP))
+	{
+		this->currentState = CALL_STATE_OVER;
+	}
+	else if(newState == QString(CALL_STATE_CHANGE_HOLD))
+	{
+		this->currentState = CALL_STATE_HOLD;
+	}
+	else if(newState == QString(CALL_STATE_CHANGE_UNHOLD_CURRENT))
+	{
+		this->currentState = CALL_STATE_CURRENT;
+	}
+	else if(newState == QString(CALL_STATE_CHANGE_CURRENT))
+	{
+		this->currentState = CALL_STATE_CURRENT;
+	}
+	else if(newState == QString(CALL_STATE_CHANGE_RINGING))
+	{
+		this->currentState = CALL_STATE_RINGING;
+	}
+	else if(newState == QString(CALL_STATE_CHANGE_UNHOLD_RECORD))
+	{
+		this->currentState = CALL_STATE_CURRENT;
+		this->recording = true;
+	}
+	return this->currentState;
+}
+
 call_state Call::action(call_action action, QString number)
 {
+	if(action == CALL_ACTION_STATE_CHANGED)
+	{
+		return stateChanged(number);
+	}
 	call_state previousState = currentState;
 	//execute the action associated with this transition
 	(this->*(functionMap[currentState][action]))(number);
@@ -125,6 +175,8 @@ void Call::accept(QString number)
 	CallManagerInterface & callManager = CallManagerInterfaceSingleton::getInstance();
 	qDebug() << "Accepting call. callId : " << callId;
 	callManager.accept(callId);
+	this->startTime = & QDateTime::currentDateTime();
+	this->historyState = INCOMING;
 }
 
 void Call::refuse(QString number)
@@ -132,6 +184,8 @@ void Call::refuse(QString number)
 	CallManagerInterface & callManager = CallManagerInterfaceSingleton::getInstance();
 	qDebug() << "Refusing call. callId : " << callId;
 	callManager.refuse(callId);
+	this->startTime = & QDateTime::currentDateTime();
+	this->historyState = MISSED;
 }
 
 void Call::acceptTransf(QString number)
@@ -140,6 +194,7 @@ void Call::acceptTransf(QString number)
 	qDebug() << "Accepting call and transfering it to number : " << number << ". callId : " << callId;
 	callManager.accept(callId);
 	callManager.transfert(callId, number);
+	//this->historyState = TRANSFERED;
 }
 
 void Call::acceptHold(QString number)
@@ -148,6 +203,7 @@ void Call::acceptHold(QString number)
 	qDebug() << "Accepting call and holding it. callId : " << callId;
 	callManager.accept(callId);
 	callManager.hold(callId);
+	this->historyState = INCOMING;
 }
 
 void Call::hangUp(QString number)
@@ -167,9 +223,10 @@ void Call::hold(QString number)
 void Call::call(QString number)
 {
 	CallManagerInterface & callManager = CallManagerInterfaceSingleton::getInstance();
-	QString account = SFLPhone::firstAccount();
-	qDebug() << "Calling " << number << " with account " << account << ". callId : " << callId;
+	this->account = SFLPhone::firstAccount();
+	qDebug() << "Calling " << number << " with account " << this->account << ". callId : " << callId;
 	callManager.placeCall(account, callId, number);
+	this->historyState = OUTGOING;
 }
 
 void Call::transfer(QString number)
@@ -178,6 +235,7 @@ void Call::transfer(QString number)
 	QString account = SFLPhone::firstAccount();
 	qDebug() << "Transfering call to number : " << number << ". callId : " << callId;
 	callManager.transfert(callId, number);
+	this->stopTime = & QDateTime::currentDateTime();
 }
 
 void Call::unhold(QString number)
@@ -197,6 +255,7 @@ void Call::setRecord(QString number)
 {
 	CallManagerInterface & callManager = CallManagerInterfaceSingleton::getInstance();
 	qDebug() << "Setting record for call. callId : " << callId;
-	callManager.unhold(callId);
+	callManager.setRecording(callId);
+	recording = !recording;
 }
 
diff --git a/sflphone_kde/Call.h b/sflphone_kde/Call.h
index cdbb3d0667..0525371b5b 100644
--- a/sflphone_kde/Call.h
+++ b/sflphone_kde/Call.h
@@ -25,7 +25,7 @@ typedef enum
    /** Call is being transfered.  During this state, the user can enter the new number. */
    CALL_STATE_TRANSFER,
    /** Call is on hold for transfer */
-   CALL_STATE_TRANSFER_HOLD,
+   CALL_STATE_TRANSF_HOLD,
    /** Call is over and should not be used */
    CALL_STATE_OVER,
    /** This state should never be reached */
@@ -46,9 +46,23 @@ typedef enum
    /** Blue-green button, hold or unhold the call */
    CALL_ACTION_HOLD,
    /** Record button, enable or disable recording */
-   CALL_ACTION_RECORD
+   CALL_ACTION_RECORD,
+   /** Other user state changes */
+   CALL_ACTION_STATE_CHANGED
 } call_action;
 
+/**
+ * @enum history_state
+ * This enum have all the state a call can take in the history
+ */
+typedef enum
+{
+  NONE,
+  INCOMING,
+  OUTGOING,
+  MISSED
+} history_state;
+
 
 class Call;
 
@@ -59,15 +73,14 @@ class Call
 private:
 
 	//Call attributes
-	Account * account;
+	QString account;
 	QString callId;
 	QString from;
 	QString to;
-//	HistoryState * historyState;
-	QTime start;
-	QTime stop;
+	history_state historyState;
+	QDateTime * startTime;
+	QDateTime * stopTime;
 	QListWidgetItem * item;
-	//Automate * automate;
 	
 	//Automate attributes
 	static const call_state stateMap [11][5];
@@ -76,7 +89,7 @@ private:
 	bool recording;
 
 	Call(call_state startState, QString callId);
-	Call(call_state startState, QString callId, QString from, Account & account);
+	Call(call_state startState, QString callId, QString from, QString account);
 	
 	//Automate functions
 	void nothing(QString number);
@@ -96,10 +109,11 @@ public:
 	
 	~Call();
 	static Call * buildDialingCall(QString callId);
-	static Call * buildIncomingCall(QString callId, QString from, Account & account);
+	static Call * buildIncomingCall(const QString & callId, const QString & from, const QString & account);
 	QListWidgetItem * getItem();
 	call_state getState() const;
 	QString getCallId();
+	call_state stateChanged(const QString & newState);
 	call_state action(call_action action, QString number = NULL);
 	call_state getCurrentState() const;
 
diff --git a/sflphone_kde/CallList.cpp b/sflphone_kde/CallList.cpp
index d4461fdb4c..ac1023e509 100644
--- a/sflphone_kde/CallList.cpp
+++ b/sflphone_kde/CallList.cpp
@@ -7,7 +7,7 @@ CallList::CallList()
 }
 
 
-Call * CallList::operator[](QListWidgetItem * item)
+Call * CallList::operator[](const QListWidgetItem * item)
 {
 	for(int i = 0 ; i < size() ; i++)
 	{
@@ -19,9 +19,21 @@ Call * CallList::operator[](QListWidgetItem * item)
 	return NULL;
 }
 
+Call * CallList::operator[](const QString & callId)
+{
+	for(int i = 0 ; i < size() ; i++)
+	{
+		if ((*calls)[i]->getCallId() == callId)
+		{
+			return (*calls)[i];
+		}
+	}
+	return NULL;
+}
+
 QString CallList::getAndIncCallId()
 {
-	QString res = QString::number(callIdCpt);
+	QString res = QString::number(callIdCpt++);
 	
 	return res;
 }
@@ -38,7 +50,7 @@ QListWidgetItem * CallList::addDialingCall()
 	return call->getItem();
 }
 
-QListWidgetItem * CallList::addIncomingCall(QString callId, QString from, Account & account)
+QListWidgetItem * CallList::addIncomingCall(const QString & callId, const QString & from, const QString & account)
 {
 	Call * call = Call::buildIncomingCall(callId, from, account);
 	calls->append(call);
diff --git a/sflphone_kde/CallList.h b/sflphone_kde/CallList.h
index 7f43e6dc6d..07b646ae1b 100644
--- a/sflphone_kde/CallList.h
+++ b/sflphone_kde/CallList.h
@@ -14,10 +14,12 @@ public:
 	CallList();
 	~CallList();
 
-	Call * operator[](QListWidgetItem * item);
+	Call * operator[](const QListWidgetItem * item);
+	Call * operator[](const QString & callId);
+	void remove(Call * call);
 
 	QListWidgetItem * addDialingCall();
-	QListWidgetItem * addIncomingCall(QString callId, QString from, Account & account);
+	QListWidgetItem * addIncomingCall(const QString & callId, const QString & from, const QString & account);
 
 	QString getAndIncCallId();
 	int size();
diff --git a/sflphone_kde/ConfigDialog.ui b/sflphone_kde/ConfigDialog.ui
index 1cb26c092d..520fe9a465 100644
--- a/sflphone_kde/ConfigDialog.ui
+++ b/sflphone_kde/ConfigDialog.ui
@@ -124,37 +124,21 @@
         <property name="text" >
          <string>Général</string>
         </property>
-        <property name="icon" >
-         <iconset>
-          <normaloff>:/Images/sflphone.png</normaloff>:/Images/sflphone.png</iconset>
-        </property>
        </item>
        <item>
         <property name="text" >
          <string>Affichage</string>
         </property>
-        <property name="icon" >
-         <iconset>
-          <normaloff>:/Images/sflphone.png</normaloff>:/Images/sflphone.png</iconset>
-        </property>
        </item>
        <item>
         <property name="text" >
          <string>Comptes</string>
         </property>
-        <property name="icon" >
-         <iconset>
-          <normaloff>:/Images/stock_person.svg</normaloff>:/Images/stock_person.svg</iconset>
-        </property>
        </item>
        <item>
         <property name="text" >
          <string>Audio</string>
         </property>
-        <property name="icon" >
-         <iconset>
-          <normaloff>:/Images/icon_volume_off.svg</normaloff>:/Images/icon_volume_off.svg</iconset>
-        </property>
        </item>
       </widget>
      </item>
diff --git a/sflphone_kde/SFLPhone.cpp b/sflphone_kde/SFLPhone.cpp
index 95cab2bbc4..8d8d23d320 100644
--- a/sflphone_kde/SFLPhone.cpp
+++ b/sflphone_kde/SFLPhone.cpp
@@ -87,6 +87,7 @@ void SFLPhone::action(QListWidgetItem * item, call_action action)
 	updateWindowCallState();
 }
 
+
 /*******************************************
 ******** Update Display Functions **********
 *******************************************/
@@ -100,6 +101,7 @@ void SFLPhone::updateWindowCallState()
 	char * iconFile;
 	char * buttonIconFiles[3] = {ICON_CALL, ICON_HANGUP, ICON_HOLD};
 	bool transfer = false;
+	bool record = false;
 	
 	if (!item)
 	{
@@ -173,7 +175,8 @@ void SFLPhone::updateWindowCallState()
 				break;
 			case CALL_STATE_OVER:
 				qDebug() << "Reached CALL_STATE_OVER. Deleting call " << (*callList)[item]->getCallId();
-				delete (*callList)[item];
+				//delete (*callList)[item];
+				callList->remove((*callList)[item]);
 				return;
 				break;
 			case CALL_STATE_ERROR:
@@ -500,17 +503,22 @@ void SFLPhone::on_actionBoite_vocale_triggered()
 
 void SFLPhone::on_callStateChanged(const QString &callID, const QString &state)
 {
-	qDebug() << "on_callStateChanged !";
+	qDebug() << "on_callStateChanged " << callID << " . New state : " << state;
+	(*callList)[callID]->action(CALL_ACTION_STATE_CHANGED, state);
+	updateWindowCallState();
 }
 
 void SFLPhone::on_error(MapStringString details)
 {
-	qDebug() << "on_error !";
+	qDebug() << "Daemon error : " << details;
 }
 
-void SFLPhone::on_incomingCall(const QString &accountID, const QString &callID, const QString &from)
+void SFLPhone::on_incomingCall(const QString &accountID, const QString & callID, const QString &from)
 {
 	qDebug() << "Incoming Call !";
+	QListWidgetItem * item = callList->addIncomingCall(callID, from, accountID);
+	listWidget_callList->addItem(item);
+	listWidget_callList->setCurrentRow(listWidget_callList->count() - 1);
 }
 
 void SFLPhone::on_incomingMessage(const QString &accountID, const QString &message)
diff --git a/sflphone_kde/SFLPhone.h b/sflphone_kde/SFLPhone.h
index 2502d7bb91..7691fd3e10 100644
--- a/sflphone_kde/SFLPhone.h
+++ b/sflphone_kde/SFLPhone.h
@@ -49,8 +49,6 @@ private slots:
 	void on_actionBoite_vocale_triggered();
 	//void on_actionAbout();
 	
-
-
 	void on_pushButton_1_clicked();
 	void on_pushButton_2_clicked();
 	void on_pushButton_3_clicked();
diff --git a/sflphone_kde/callmanager-introspec.xml b/sflphone_kde/callmanager-introspec.xml
index 82e1a36b4e..99069d5a28 100644
--- a/sflphone_kde/callmanager-introspec.xml
+++ b/sflphone_kde/callmanager-introspec.xml
@@ -56,6 +56,10 @@
       <arg type="d" name="value" direction="out"/>
     </method>
     
+	 <method name="setRecording">
+		 <arg type="s" name="callID" direction="in"/>
+    </method>
+	 
     <method name="getCallDetails">
       <arg type="s" name="callID" direction="in"/>
       <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
diff --git a/sflphone_kde/callmanager_interface.cpp b/sflphone_kde/callmanager_interface.cpp
index 22eb57bcbd..6b0c117886 100644
--- a/sflphone_kde/callmanager_interface.cpp
+++ b/sflphone_kde/callmanager_interface.cpp
@@ -1,6 +1,6 @@
 /*
  * This file was generated by dbusxml2cpp version 0.6
- * Command line was: dbusxml2cpp -c CallManagerInterface -p call_manager_interface_p.h:call_manager_interface.cpp -i metatypes.h callmanager-introspec.xml
+ * Command line was: dbusxml2cpp -c CallManagerInterface -p callmanager_interface_p.h:callmanager_interface.cpp -i metatypes.h callmanager-introspec.xml
  *
  * dbusxml2cpp is Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
  *
diff --git a/sflphone_kde/callmanager_interface_p.h b/sflphone_kde/callmanager_interface_p.h
index 890b62968b..9b46b659ac 100644
--- a/sflphone_kde/callmanager_interface_p.h
+++ b/sflphone_kde/callmanager_interface_p.h
@@ -1,6 +1,6 @@
 /*
  * This file was generated by dbusxml2cpp version 0.6
- * Command line was: dbusxml2cpp -c CallManagerInterface -p call_manager_interface_p.h:call_manager_interface.cpp -i metatypes.h callmanager-introspec.xml
+ * Command line was: dbusxml2cpp -c CallManagerInterface -p callmanager_interface_p.h:callmanager_interface.cpp -i metatypes.h callmanager-introspec.xml
  *
  * dbusxml2cpp is Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
  *
@@ -8,8 +8,8 @@
  * Do not edit! All changes made to it will be lost.
  */
 
-#ifndef CALL_MANAGER_INTERFACE_P_H_1236370787
-#define CALL_MANAGER_INTERFACE_P_H_1236370787
+#ifndef CALLMANAGER_INTERFACE_P_H_1237229754
+#define CALLMANAGER_INTERFACE_P_H_1237229754
 
 #include <QtCore/QObject>
 #include <QtCore/QByteArray>
@@ -99,6 +99,13 @@ public Q_SLOTS: // METHODS
         return callWithArgumentList(QDBus::Block, QLatin1String("refuse"), argumentList);
     }
 
+    inline QDBusReply<void> setRecording(const QString &callID)
+    {
+        QList<QVariant> argumentList;
+        argumentList << qVariantFromValue(callID);
+        return callWithArgumentList(QDBus::Block, QLatin1String("setRecording"), argumentList);
+    }
+
     inline QDBusReply<void> setVolume(const QString &device, double value)
     {
         QList<QVariant> argumentList;
diff --git a/sflphone_kde/sflphone_const.h b/sflphone_kde/sflphone_const.h
index 6712987d46..8dd14f4f96 100644
--- a/sflphone_kde/sflphone_const.h
+++ b/sflphone_kde/sflphone_const.h
@@ -48,7 +48,7 @@
 #define ICON_FAILURE ":/images/icons/fail.svg"
 #define ICON_BUSY ":/images/icons/busy.svg"
 #define ICON_TRANSFER ":/images/icons/transfert.svg"
-#define ICON_TRANSFER_HOLD ":/images/icons/transfert.svg"
+#define ICON_TRANSF_HOLD ":/images/icons/transfert.svg"
 
 #define ICON_CALL ":/images/icons/call.svg"
 #define ICON_HANGUP ":/images/icons/hang_up.svg"
@@ -94,6 +94,13 @@
 #define ACCOUNT_STATE_ERROR_CONF_STUN    "ERROR_CONF_STUN"
 #define ACCOUNT_STATE_ERROR_EXIST_STUN   "ERROR_EXIST_STUN"
 
+#define CALL_STATE_CHANGE_HUNG_UP         "HUNGUP"
+#define CALL_STATE_CHANGE_RINGING         "RINGING"
+#define CALL_STATE_CHANGE_CURRENT         "CURRENT"
+#define CALL_STATE_CHANGE_HOLD            "HOLD"
+#define CALL_STATE_CHANGE_BUSY            "BUSY"
+#define CALL_STATE_CHANGE_FAILURE         "FAILURE"
+
 #define MAX_HISTORY_CAPACITY      60
 
 #define CODEC_NAME              0
diff --git a/sflphone_kde/sflphone_kde.kdevelop.pcs b/sflphone_kde/sflphone_kde.kdevelop.pcs
index 138d43272375023ed724ff6185edf28f20cf4bae..5cf3843acd6e956ea3ec16566a78099c89fdfe76 100644
GIT binary patch
delta 8222
zcmbQ;!ri-@TZn;yfsG-6!I>eLfq?<Ulb@bg$>cxzzmzD4=eFG^85sB;P0~o1c#n-q
zEpC!S4ph+Q(&P>P862M5kKATp@KKm-keD{vfQg+^YjR?35{KtbpMMMtMLyFV^O^i7
z8*Jp5yrGw!!*kz-0}Kp3>67)RM}at@3=AtmCSO>Z#^JedPb~w(nFW&{Zb;(r+;>o$
zf#K@I$p?4lP2Rx5#`NgO<iImo9G)9{B^Vffl}x|D%LvkP;1>g<NZRDYTL0<$r5S}e
zJojzLXJGWIoZcA5*uderZ^14G#=6JT3)2`IIR5|t|DS=eWy|!&IgC>{JU1@<#=v-d
z^<)E%X-uaNOkcQxv3q)dI3qiU=f;i@2F6R=AfZW6-i<}m^Ankt@px{W@P~n^r=5X;
zVcztKI~hBtH!NZl<?!4%;V=W!L>-V{<2XEboo`}bn&ChFLNQa?WCb2Jra8Ys0h+?$
zImaZ1fobuY>48g`5+@(n#51jqiIu~1Nt_%5(~A3(5AO7zzF;Yn(BuP~ctL?<$H27K
z2_`BrJ)wh%ox^k8dpQQCjW;F-o&hVC;MQZvfC%nRnVvh3sSK**L;}c`A}H_t;?0}*
zb6BP~v@r2*))t9mn*2eAe{#1@*=A00an?yj)|;bcezQ*QGUeKwpmc$SiDl+yBXtet
z$qF)TlM}SwFxGGO)z)QX&PglYT&p9@$efetJbAu&+vIGkgvph92F%F}43i&NsZYMF
zx0yLJF?aG@Nu$ZT_4}Fg@|`EIn`1D!)?h7ja<b!OUBioDn$hSa*o==dO_TkN=R(*Y
zBqpC$;F~OJGJmpy4CmyEE}qFJP4;t?q~<CxFfcGqU$~FSaB{zr*JN(9ON{ZG@0s~9
zPF9d%-K=lH4sp@@Af3q*s>LP;)C)}Rwp<Ew?&P?K5}UoPV%a9oapv8;)!{kQ<aa@h
zn`K@4nJ1s~VVis-EO0Wj$I{8KB4Q`&M#xNNcF5V>>*>ol`CSn2<OvsICg(@-Z1(rA
zV`MCtexRR8b@OMRcxIOR|Nk2%uX3oJoEn)i**dU(a$hJYG*zY_NMU4|EFUZ~dA*az
zWZ$3#jCz~j1wDdlSmz!(Su=bib4jV==DXoMjLaDf3X|`Jn@{IRVdR_q-a~A%d*ohl
zP}m*Gn4BNA8qAiBz6`c+`rZvp;*+^!J~6J}{4eG#%jAZNd7Cqnn3zC}$vIU5n<Y~X
znI;!x&Yk=`efQ*_wWgb|XJkN>-OZf<V$7PX*UK~cK@2w&<L}K1#r(`1`l)#gps<}>
zI3r-PM56Tcr#_56lQ-0gO=c-Ko_xM}?&QoQiOFxur!XdOZmjTOWY$m3n_QSVXL3%}
z(#hwWStoB#{k2)3#)OqIadKnD+{x2(1SY3-Bux%!g6O`RD>m7xc`C?Nn{!&eGlGoV
z)NaWp!J*CwvY3H^ffdByVQ^+hWXNI2nJg1Kd$Qyc)#?4UOze|mdgFwuncrVv0B2s1
zLqTQL<i9JWC$l^eoqj%-iF>mAGo8sQvBs07;v=WK<TLre%9_beeRCPbCqL*b<g|cV
zWj9%Hhxp`#8QhHZlWY4IO@7{&#pwW*bBD>X)q_M>CKt|_G`XOVefpk4MwQ7Es-?L3
z7!nzh8Il?D8A_)wOktFt{9%R)don{RLjgkxDCfgUISy_HhBY8F7#J8fqngS%xu7s~
za%PeQvP(hgk3-d;!=_%YQU+c9KB)SmQ1x8wpe(|`0J0!_a$XhRWc>+ooJ~+w6QHWN
z8S6LioM6Pr=?9evf=MvdGfZc!U=*JmP;NBYYqk)t5<?P0DMKbh4nqoq=j4Fjl9PKU
z#&L!~^+mw+K>~|;a$>dq^aEQNHKw08VDy-tP|V22i5ghb(il}Hx2_OjPlm)ZdVt-7
zn*0=MGAD;GgEL4B<fG8Z#gj@nCxN&O3=C7DO1LKrO_rbhJY5MTaQGP*rb87jWnf@1
znk-l@42tr}i!xLvi_H;2QOwQ25Cv5n3p16me)76GF6heQp~{kA$|f($Fhy5%0jlUK
zOc5k_AYMqQ=RsG09jg8gHue75sBRTzU|0cFzY3BQ7?mbByp5mkE5Rr*x&JMfz5)XX
zIx>_plrZEo<T4~OlrW?+C@`cklrrQoBr}vSWHRJ4<S`V3)hSGFcq<Ll>_7R&JAP0w
zAzU0jd1ekDx{J3$U9bn6i|^)&p{xH3QP0Q>RWHB@4h&8ShGK>ikOL<N9uh{^lmgMj
z&;ZrMEe6h#pmKthfq_AQA&()Ip`0OjlB_Z~S-q&1nVi#tkw?Bmjrk2V25R@@>H-mT
z8=pg!zC%%(imvPfRM}S)W#N+#PRZf)gv$9q<+vH^ryuNRQfA^PoczVdZ1VD{Q9{+s
z@AM$;5J&_vFoW7blXItWPd>~qJb8m4_heH)smVsu!zVvoWjtAJdK#nK<O4F&lMS}<
zaEdc9FfcPPFmOy>I5(9Olx#r(5;a{wi4mzxV+2d{Mnf$C(caK3Aizjup~ea>)Fv}7
zjOPU<do~6J1`sU+HwPStpki$DwE0oINuV;Bfq?-;E1;>7tCX2+G(Czp5vm46E1{@?
zlvZ*xqc}?#7#MgM7#K<>H_lX?Y%q^)a={Fa$ww!gn7n3g6fdZr;$>i90MYtT6L=>7
zo5eGor-G3OPq_usoX^0(0MZPi(_xxfIY1#we9^_2JUM?>GG{8(E2-1@S22M?9+s|(
zCy9Z>qlkflfs=uO0Yr;HEfbjhXSNimtOA7wXDQUDrIXLsf=u9<TrpQ=ve=v)-U0>&
z20;b}1`rJo@5!6y%;GJC>H*O(8IV4;$qIFRAX9mhp$-GlFcsX0{2V$tp`HiiKu%Ep
z0!3;Hx)1!bg+L~m#z9R2(XtE-3@Qvn6e^PgXUKzdH@M&cnZug^H3vjvbrGm}Fl~Mm
zXC_o(=JZBTBPU@77rPKRKY>#kYH0!T0&g)iG(a@0i02ZA>H#$>@RSo^12UjCf@stP
z844;OK+fk(gQ`iJEMN(WCS*sYf=x+>ssPb24?>bd_~dzWGdOdh*)Vr9|2$(+P~v7`
zU|>LMNHFAqvYEa&G|7Ny0R{#JIaqUuK><`qGL$eBF=T>kWKfA-JUMf|DmM=Uv?^ur
zoIG)UJg*Pb3=qvfId#4!vjju(<PYhRAis!)Ljw#%OF&ywOq1tKk)Ql(ULL0}RIl&k
z#QD0D6*@s>P!wkv0|Nu7)Crrsw9}qZV)Dd=l9LUl$C&#wFfi~lFff2<X_#5y=we`y
zV#r{~1Q+i43`Go;4Dnz#xF(uxzo3va2%5lyChuHeKlw?g7|3;;5zugqn4H?BE-VDq
zQ^Zih5W<kjkjs!dS$}%0VE_XI12+Q$1BezwvsZ*6kii8UR;e&O3|f;LyW~OUn};$m
zFi0{mFo0-H1_lN-ED0LqM)YtN?lu<%#h3utMfnT`Ftfq#352=_M2iyTp2$VH;I<d2
zc<`Hievu<9$aK!h7hXzDmYx|q`B}FK$i1AP#vBs^1B1fk)*kiAax<fNUBKyvfdNG8
zPY%2xEDtgRUuf%3kL9&zU|;~51ETpSD{d2GVqZU5adAIuHS>a19-Fr=wqTrmzmH?`
z*ClHi>nCTdF_@hB8`OXnnk>7VgHsn8r$*o^t$(R7WBp{kwMOiT3@Ol7Vd`XqjS#ga
zP_>pYwUB~`*p}gXCymK*Yn3MNUzRp~&tfKy$&SmkLCw3(<;xWqCzmg8VicXswbE#^
z&WgL78c?gWVOBBLPqtmD$;2r+*}7M8a_7n<)@tTWAAfBAuyPqAqxAHNTbbk;IVZnc
zB0X7QL(*iEHODwbps7$~^7&fH$q&{`P0p3l;FM!P_)K#0j5SHTqEK}pI&-q)8f`|>
zJk$cNwLvi@4k>H<mr72KTW&fzU|k-g0m#6~x~@9Y6H*ujCb#WSnQXUSX!3J+naKg`
zk~l%t0H~A}oGgD{d~*L%iOFjnIAE2X47lObx<ZJXhoOiel_8fQpP_7WVn^U)gN<UG
zpmGqTRcLa8K18doD;F!cxR`8UF3ZUUD_$lq+#w0-;ZBZOpTsEvEjJ}5+paN~{L5Q#
zGsgxGj>!iuvQ5_8&M|qyg}TXic5It`;G)sw4M+1P8}0I#eBh$g<b9W<Ca>GIeX{?3
z$;oxQ-$B)LO`dmU-ekRfd6PT#Le#z5`wOi8-#(Zcj_GsOF-1(yxDhmY+wQ!{LI*(#
z*)|v5WMKpgTsj060NFm>mYdOKa>FsM$-D0GO`fs6VDgv4aLLINF2qe<apc<M0~ci`
zFSsi<dBahVGo>as9J@H#|GxI*n&Tio#2Z!*3MOwj0dg+e^ke-@(vt;Nvuy4;nJLA@
zUcLGI<4i_S;xU@AIrZryCMJgZ$qDC8CfB}L#ux)?XlXJr)Nl5Gna&7Go0G4;+BiAz
zxa8#duQze(LlPyU2{=)%|0WEUnfvA#EV(l3Zq9kz#|Rb{e!qhA6I27FEeX@W{$U&A
zqRDgj$xnugO!rr1^qCy{DQ)uJ4@Q$G?Ub6_|Bqub|EDdJcYlQN`9Ck>TnRO7JJfca
z$$vjD;d~1f{Qwn(xM}`tk?H1|j20k6Igde=Tm&oG|5a#uEia?gbXhG%JFxstsQeL_
zJY&h^i+d#}-~Kj-^8r-uHCPVj-nZINt(T$F_rTKozX~yGfV57(sl%u>eLpv28Yi@Y
z&iDtcV*NKz`BIoEF?~TVqs#O)>5Ng+{q-0{rl$%rrgAa<gBZue2vsaG`Tno>oJ^n=
zF{qH6ZrI2qGFhRVZMs7cBR|Xk|Nk4d%NZ~lGEO%Ao65xmsy0B%_`tgNe-#9)*nHt{
zH6v#~#AL=vU^$pS;u#s`rXM$E6q&k~F^v;cfP(6B`)N#!TA(<b4w9cbld)>LKRcr_
zOk~D%V-5sQZu(?1i2kYi$fB;yj8)U+Igy1lSs1IP^Kvm7O%6CNHT^vc;|xw~sI#n5
zteh@v1u=5^UoJ)tMjKSgt89!_oVHMnwy1JD*%_-i?VxgYaJhO8#s#oJ5Jm@>@MQka
z9MjVo8O5g0wq=w92Z1A0t0P>^-_IP=^X(YTK(RTKv3|NCH{%yhFQ~ErSZG2d0;aEb
zV6*`n1Zo0+!ZHu60+cXP!3kr%1EbvZ?T%3EKrLX9svfwie2}Wiyni{S_wq5eae&%M
zpeUWpxIzjP>4J>)lh6N6n!b{s@f;_pzy?VwO>Yoj)SMm=#K<<e`X|?PsZK_(=?{__
zS*CAjV)UBs?g~j?Gng6b8Kwy_p68T;I$v#a<4kdQCS32q$T$73FeBe|b798p=>ejQ
z#*l~-X6)m<1ku9q66{h~`dRP6s5Jex2xA&2sQ3r@gdat|-jh*dx;RMw6+}NHEM<eU
z>GX0j#!28h0Hjp{MXSCyquylA1fS{W#TlgpL5*~f3829TP>=B6<c7Dwpnm;XaH{0?
zVU(D>{(0K;jgpK;ObpOYDSP&GE-A(btkukglV@yyFU2Uq#OM#IDaEJD%QC)$1lavw
z9Fud-YfP?vVKKR;%4hn2B}TF7cjXw3rq6d_<l8PQ&ltwY%*MbmId{I~WP^1qldry#
zn7&$paSAAGCeMHEGyS+JV-lwtv~i~fD?z6lsxeATp8F;NBCiUSSDh}W%%}xQE+A>)
z_fFI2t1%{V8bGBDrt_&Vex3eWosnm{usx$1GrLaH<i?}opb~N&xReD|c^Y6#roY!>
zgq4(jU}L8LRb}L1G@LA0E(%I4Leu3n7$qk2f3|_h?$u)CneObw=rH;3XFISEE2u<g
zoBnqdlQbw9z?=mwJ!eht)d9IfiBSy{rXUZ23e5$a+ECYOPiI`s1WG_65Swm)GXopT
zs|Qs8q7_k`qci#XcdhC6+KhSASynTNKy5v!!?=Xg1FFemd!8<1I3swl0pwdxP?%^j
z)iX_hn8BDm+5NZD<QZ#xrmxpyRAP*V8@^rEfN=`r^q2aKJkt*qF~UrCbY@K2?ry{=
z#>ndiH6KL7!$^>^e)>dX#x>JDZ5WNF_Zu@>Or6OnGX1;_V-lw^RD<z!HB-hgh(fdJ
zwTw{t>9VGbywh7ZFbPjy{|yoX-~tm=AeK$nG=rqXiN=g((_NWidN|FY)=bxAfr-5|
zM^ehm3KKqQ0aGe$#aK3dr6r>=%neuBV2V1eV2XCK!^ASJ!79P=RnNg_1@_H!TN6f}
z$(L%yKq&*{>qbXL1$gP#04_8^p=~$a!HLm%GPKy60WLK`;ttaV>={8#gX!@Oi~%rt
zzUkAs88xQ=HeyVg&Th|W1WJ=^)Box*a!k*5V0^?08r=lxb_SUWO7@M8jN7LBIx-qf
z-|x;SGnxM{8>paDn7-PHF^Ln@s{^U_ftE`m(`V{3@=SNIX9@$Aco`6Tc%2z}ri(Pe
zqImm47e+ruPy+qv%6NuX85(IIS`?N#K>q#c#yDrXu_ria4!Scgn$GD33HFa}jB3;O
zdN7u8Dnj)tPHw!2NY>NqJsG>E_qsFkOcz=OPqN_9Ef-_dnVeD!Ej9MKG4e2iddNt*
zZ@RuW;{;yN_yWjdAX*mYC`k64&h5jvma%^OP9MgdjMJ^d7*DcRGn-gU*v=Ww$jr*b
z@o76>4C8iCgAF8jDwgpJGh_es{fUgnSwY=a=IM&*jQZ1MqZ!Ml8zeJ^GS+Xm+sYWl
zIQ>Bi<4Y#{57Qm<7+a?Yq%khx?1c7zJGcK$W1P;&*#+fyP2LwIK7BzdqZXsk_WK!(
ziL8t++a2>5Yngbvp-Mn>^z?-pjCM>+ji4q6C*yRHBF06WJx~Qb)AtuKIx#UaPQLJW
z|MWw}jQ3goA3N4GUCw}U<MyypMn6Wz<n2q#81FMqFL=YqCS1Z0#E=S}W+-AvVaR02
zV@L;0U^Y*es$}$H6oR;VgD(@u^qvaFzUlj_z@iIW7^hGFQ^|N}dR#4|7o+%g&T7U`
zrs-_;j9$!s3{2Al(;1_ev(+&&ayBwBFo1fUZPP#YG5T+ht7nvA<m`nyws(4C1ET}W
zk8j^V&P@a*Etlz8jg0d+`=BcNwhJ~feq?0ipMEoi@dGRvw^y|?eqn(G&O^rO0X>7u
zm(%_77)z!n%wXKaIT2J>GB7Yq2i11+lOM#0OurDzBs1M-7Gnc=iUHJLo(5_*h)<sv
z$K(W-V4OUCuL_g&^uBl|r|DX=8E0`$VPIeYRa{f1pPkJZH~CKt*LKr6jQ=>;>OrH5
z4Ab?OG3stlTgu3y1<HO8E;1TzpLd>7gm3zRY(|^y@9r{gbHO3;ietNw6_dUpQ$5FY
zzf>mg?S0uyj*LtU4%;v0FnttZV!Jv0NF&n{)@tUrR}8l2HZgr+<XsFJ7iM5!0MWXW
zc|_!=_qH&7;9Lle>V?zWTA4y7%Zcz#f8NSe#2CCis*PzKJGgxyKb=WtyKNuS0nzF2
S7cg;v`b6^ERhBS4=LG<qvf+{d

delta 10612
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

diff --git a/sflphone_kde/sflphone_kde.kdevses b/sflphone_kde/sflphone_kde.kdevses
index 4e3fa3cbed..113d271ce9 100644
--- a/sflphone_kde/sflphone_kde.kdevses
+++ b/sflphone_kde/sflphone_kde.kdevses
@@ -1,31 +1,49 @@
 <?xml version = '1.0' encoding = 'UTF-8'?>
 <!DOCTYPE KDevPrjSession>
 <KDevPrjSession>
- <DocsAndViews NumberOfDocuments="8" >
-  <Doc0 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/SFLPhone.cpp" >
-   <View0 Encoding="" line="526" Type="Source" />
-  </Doc0>
-  <Doc1 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/callmanager_interface_singleton.cpp" >
+ <DocsAndViews NumberOfDocuments="14" >
+  <Doc0 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/callmanager_interface_singleton.cpp" >
    <View0 Encoding="" line="0" Type="Source" />
+  </Doc0>
+  <Doc1 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/callmanager_interface_p.h" >
+   <View0 Encoding="" line="140" Type="Source" />
   </Doc1>
-  <Doc2 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/callmanager_interface_p.h" >
-   <View0 Encoding="" line="135" Type="Source" />
+  <Doc2 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/Call.h" >
+   <View0 Encoding="" line="27" Type="Source" />
   </Doc2>
-  <Doc3 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/callmanager_interface.cpp" >
-   <View0 Encoding="" line="17" Type="Source" />
+  <Doc3 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/SFLPhone.cpp" >
+   <View0 Encoding="" line="503" Type="Source" />
   </Doc3>
-  <Doc4 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/main.cpp" >
-   <View0 Encoding="" line="19" Type="Source" />
+  <Doc4 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/sflphone_const.h" >
+   <View0 Encoding="" line="50" Type="Source" />
   </Doc4>
-  <Doc5 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/SFLPhone.h" >
-   <View0 Encoding="" line="74" Type="Source" />
+  <Doc5 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/callmanager-introspec.xml" >
+   <View0 Encoding="" line="80" Type="Source" />
   </Doc5>
-  <Doc6 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/callmanager-introspec.xml" >
-   <View0 Encoding="" line="78" Type="Source" />
+  <Doc6 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/SFLPhone.h" >
+   <View0 Encoding="" line="23" Type="Source" />
   </Doc6>
-  <Doc7 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/build/moc_SFLPhone.cpp" >
-   <View0 Encoding="" line="191" Type="Source" />
+  <Doc7 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/CallList.h" >
+   <View0 Encoding="" line="18" Type="Source" />
   </Doc7>
+  <Doc8 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/CallList.cpp" >
+   <View0 Encoding="" line="42" Type="Source" />
+  </Doc8>
+  <Doc9 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/Call.cpp" >
+   <View0 Encoding="" line="26" Type="Source" />
+  </Doc9>
+  <Doc10 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/Automate.h" >
+   <View0 Encoding="" line="0" Type="Source" />
+  </Doc10>
+  <Doc11 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/Automate.cpp" >
+   <View0 Encoding="" line="0" Type="Source" />
+  </Doc11>
+  <Doc12 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/templates/cpp" >
+   <View0 Encoding="" line="17" Type="Source" />
+  </Doc12>
+  <Doc13 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/templates/h" >
+   <View0 Encoding="" line="7" Type="Source" />
+  </Doc13>
  </DocsAndViews>
  <pluginList>
   <kdevdebugger>
diff --git a/sflphone_kde/templates/cpp b/sflphone_kde/templates/cpp
index 43862e93cc..7f440b5afe 100644
--- a/sflphone_kde/templates/cpp
+++ b/sflphone_kde/templates/cpp
@@ -1,10 +1,11 @@
 /***************************************************************************
- *   Copyright (C) 2009 by Jérémy Quentin   *
- *   jeremy.quentin@gmail.com   *
+ *   Copyright (C) 2009 by Savoir-Faire Linux                              *
+ *   Author : Jérémy Quentin                                               *
+ *   jeremy.quentin@savoirfairelinux.com                                   *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
  *   it under the terms of the GNU General Public License as published by  *
- *   the Free Software Foundation; either version 2 of the License, or     *
+ *   the Free Software Foundation; either version 3 of the License, or     *
  *   (at your option) any later version.                                   *
  *                                                                         *
  *   This program is distributed in the hope that it will be useful,       *
diff --git a/sflphone_kde/templates/h b/sflphone_kde/templates/h
index 43862e93cc..7f440b5afe 100644
--- a/sflphone_kde/templates/h
+++ b/sflphone_kde/templates/h
@@ -1,10 +1,11 @@
 /***************************************************************************
- *   Copyright (C) 2009 by Jérémy Quentin   *
- *   jeremy.quentin@gmail.com   *
+ *   Copyright (C) 2009 by Savoir-Faire Linux                              *
+ *   Author : Jérémy Quentin                                               *
+ *   jeremy.quentin@savoirfairelinux.com                                   *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
  *   it under the terms of the GNU General Public License as published by  *
- *   the Free Software Foundation; either version 2 of the License, or     *
+ *   the Free Software Foundation; either version 3 of the License, or     *
  *   (at your option) any later version.                                   *
  *                                                                         *
  *   This program is distributed in the hope that it will be useful,       *
-- 
GitLab