Skip to content
Snippets Groups Projects
Select Git revision
  • 68140e7dde41fd0bb69719dac89d00023629bd83
  • master default protected
  • release/202005
  • release/202001
  • release/201912
  • release/201911
  • release/releaseWindowsTestOne
  • release/releaseTest
  • release/releaseWindowsTest
  • release/windowsReleaseTest
  • release/201910
  • release/qt/201910
  • release/windows-test/201910
  • release/201908
  • release/201906
  • release/201905
  • release/201904
  • release/201903
  • release/201902
  • release/201901
  • release/201812
  • 1.0.0
  • 0.3.0
  • 0.2.1
  • 0.2.0
  • 0.1.0
26 results

securityvalidationmodel.cpp

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    HistoryTreeItem.cpp 9.17 KiB
    /***************************************************************************
     *   Author : Mathieu Leduc-Hamel mathieu.leduc-hamel@savoirfairelinux.com *
     *            Emmanuel Lepage Vallee <emmanuel.lepage@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 3 of the License, or     *
     *   (at your option) any later version.                                   *
     *                                                                         *
     *   This program is distributed in the hope that it will be useful,       *
     *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
     *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
     *   GNU General Public License for more details.                          *
     *                                                                         *
     *   You should have received a copy of the GNU General Public License     *
     *   along with this program; if not, write to the                         *
     *   Free Software Foundation, Inc.,                                       *
     *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
     **************************************************************************/
    
    #include <QtCore/QStringList>
    #include <QtGui/QGridLayout>
    #include <QtGui/QMenu>
    
    #include <klocale.h>
    #include <kdebug.h>
    #include <unistd.h>
    #include <kaction.h>
    #include <kicon.h>
    
    #include "lib/sflphone_const.h"
    #include "HistoryTreeItem.h"
    #include "AkonadiBackend.h"
    #include "lib/Contact.h"
    #include "SFLPhone.h"
    #include "conf/ConfigurationSkeleton.h"
    
    const char * HistoryTreeItem::callStateIcons[12] = {ICON_INCOMING, ICON_RINGING, ICON_CURRENT, ICON_DIALING, ICON_HOLD, ICON_FAILURE, ICON_BUSY, ICON_TRANSFER, ICON_TRANSF_HOLD, "", "", ICON_CONFERENCE};
    
    HistoryTreeItem::HistoryTreeItem(QWidget *parent ,QString phone)
       : QWidget(parent), itemCall(0),m_pMenu(0), init(false)
    {
       setContextMenuPolicy(Qt::CustomContextMenu);
    
       m_pCallAgain    = new KAction(this);
       m_pAddContact   = new KAction(this);
       m_pCopy         = new KAction(this);
       m_pEmail        = new KAction(this);
       m_pAddToContact = new KAction(this);
       m_pBookmark     = new KAction(this);
       
       m_pCallAgain->setShortcut    ( Qt::CTRL + Qt::Key_Enter     );
       m_pCallAgain->setText        ( "Call Again"                 );
       m_pCallAgain->setIcon        ( KIcon(ICON_DIALING)          );
    
       m_pAddToContact->setShortcut ( Qt::CTRL + Qt::Key_E         );
       m_pAddToContact->setText     ( "Add Number to Contact"      );
       m_pAddToContact->setIcon     ( KIcon("list-resource-add")   );
       
       m_pAddContact->setShortcut   ( Qt::CTRL + Qt::Key_E         );
       m_pAddContact->setText       ( "Add Contact"                );
       m_pAddContact->setIcon       ( KIcon("contact-new")         );
       
       m_pCopy->setShortcut         ( Qt::CTRL + Qt::Key_C         );
       m_pCopy->setText             ( "Copy"                       );
       m_pCopy->setIcon             ( KIcon("edit-copy")           );
       
       m_pEmail->setShortcut        ( Qt::CTRL + Qt::Key_M         );
       m_pEmail->setText            ( "Send Email"                 );
       m_pEmail->setIcon            ( KIcon("mail-message-new")    );
    
       m_pBookmark->setShortcut     ( Qt::CTRL + Qt::Key_D         );
       m_pBookmark->setText         ( "Bookmark"                   );
       m_pBookmark->setIcon         ( KIcon("bookmarks")           );
    
       connect(m_pCallAgain    , SIGNAL(triggered())                        , this , SLOT(callAgain()         ));
       connect(m_pAddContact   , SIGNAL(triggered())                        , this , SLOT(addContact()        ));
       connect(m_pCopy         , SIGNAL(triggered())                        , this , SLOT(copy()              ));
       connect(m_pEmail        , SIGNAL(triggered())                        , this , SLOT(sendEmail()         ));
       connect(m_pAddToContact , SIGNAL(triggered())                        , this , SLOT(addToContact()      ));
       connect(m_pBookmark     , SIGNAL(triggered())                        , this , SLOT(bookmark()          ));
       connect(this            , SIGNAL(customContextMenuRequested(QPoint)) , this , SLOT(showContext(QPoint) ));
    
       labelIcon        = new QLabel( this );
       labelPeerName    = new QLabel( this );
       labelCallNumber2 = new QLabel( this );
       m_pDurationL     = new QLabel( this );
       m_pTimeL         = new QLabel( this );
       
       labelIcon->setMinimumSize(70,48);
       labelIcon->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
       QSpacerItem* verticalSpacer = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Expanding);
    
       QGridLayout* mainLayout = new QGridLayout(this);
       mainLayout->addWidget ( labelIcon,0,0,4,1    );
       mainLayout->addWidget ( labelPeerName,0,1    );
       mainLayout->addWidget ( labelCallNumber2,1,1 );
       mainLayout->addWidget ( m_pTimeL,2,1         );
       mainLayout->addItem   ( verticalSpacer,3,1   );
       mainLayout->addWidget ( m_pDurationL,0,2,4,1 );
       setLayout(mainLayout);
       setMinimumSize(QSize(50, 30));
    
       if (!phone.isEmpty()) {
          getContactInfo(phone);
          labelCallNumber2->setText(phone);
          m_pPhoneNumber = phone;
       }
    }
    
    HistoryTreeItem::~HistoryTreeItem()
    {
       
    }
    
    Call* HistoryTreeItem::call() const
    {
       return itemCall;
    }
    
    void HistoryTreeItem::setCall(Call *call)
    {
       itemCall = call;
       
       if (itemCall->isConference()) {
          labelIcon->setVisible(true);
          return;
       }
       
       labelCallNumber2->setText(itemCall->getPeerPhoneNumber()); 
    
       m_pTimeL->setText(QDateTime::fromTime_t(itemCall->getStartTimeStamp().toUInt()).toString());
    
       int dur = itemCall->getStopTimeStamp().toInt() - itemCall->getStartTimeStamp().toInt();
       m_pDurationL->setText(QString("%1").arg(dur/3600,2)+":"+QString("%1").arg((dur%3600)/60,2)+":"+QString("%1").arg((dur%3600)%60,2)+" ");
    
       connect(itemCall , SIGNAL(changed())                          , this , SLOT(updated()           ));
       updated();
    
       m_pTimeStamp = itemCall->getStartTimeStamp().toUInt();
       m_pDuration = dur;
       m_pName = itemCall->getPeerName();
       m_pPhoneNumber = itemCall->getPeerPhoneNumber();
    }
    
    bool HistoryTreeItem::getContactInfo(QString phoneNumber)
    {
       Contact* contact = AkonadiBackend::getInstance()->getContactByPhone(phoneNumber);
       if (contact) {
          if (contact->getPhoto() != NULL)
             labelIcon->setPixmap(*contact->getPhoto());
          labelPeerName->setText("<b>"+contact->getFormattedName()+"</b>");
       }
       else {
          labelIcon->setPixmap(QPixmap(KIcon("user-identity").pixmap(QSize(48,48))));
          labelPeerName->setText("<b>Unknow</b>");
          return false;
       }
       return true;
    }
    
    void HistoryTreeItem::updated()
    {
       if (!getContactInfo(itemCall->getPeerPhoneNumber())) {
          if(! itemCall->getPeerName().trimmed().isEmpty()) {
             labelPeerName->setText("<b>"+itemCall->getPeerName()+"</b>");
          }
       }
       call_state state = itemCall->getState();
       bool recording = itemCall->getRecording();
       if(state != CALL_STATE_OVER) {
          if(state == CALL_STATE_CURRENT && recording) {
             labelIcon->setPixmap(QPixmap(ICON_CURRENT_REC));
          }
          else {
             QString str = QString(callStateIcons[state]);
             labelIcon->setPixmap(QPixmap(str));
          }
          labelCallNumber2->setText(itemCall->getPeerPhoneNumber());
                    
          if(state == CALL_STATE_DIALING) {
             labelCallNumber2->setText(itemCall->getCallNumber());
          }
       }
       
    }
    
    uint HistoryTreeItem::getTimeStamp()
    {
       return m_pTimeStamp;
    }
    
    uint HistoryTreeItem::getDuration()
    {
       return m_pDuration;
    }
    
    QString HistoryTreeItem::getName()
    {
       return m_pName;
    }
    
    QString HistoryTreeItem::getPhoneNumber()
    {
       return m_pPhoneNumber;
    }
    
    
    QTreeWidgetItem* HistoryTreeItem::getItem()
    {
       return m_pItem;
    }
    
    void HistoryTreeItem::setItem(QTreeWidgetItem* item)
    {
       m_pItem = item;
    }
    
    void HistoryTreeItem::showContext(const QPoint& pos)
    {
       if (!m_pMenu) {
          m_pMenu = new QMenu(this);
          m_pMenu->addAction( m_pCallAgain    );
          m_pMenu->addAction( m_pAddContact   );
          m_pMenu->addAction( m_pAddToContact );
          m_pMenu->addAction( m_pCopy         );
          m_pMenu->addAction( m_pEmail        );
          m_pMenu->addAction( m_pBookmark     );
       }
       m_pMenu->exec(mapToGlobal(pos));
    }
    
    
    void HistoryTreeItem::sendEmail()
    {
       qDebug() << "Sending email";
    }
    
    void HistoryTreeItem::callAgain()
    {
       qDebug() << "Calling "<< itemCall->getPeerPhoneNumber();
       SFLPhone::app()->model()->addDialingCall(m_pName, SFLPhone::app()->model()->getCurrentAccountId())->setCallNumber(m_pPhoneNumber);
       
    }
    
    void HistoryTreeItem::copy()
    {
       qDebug() << "Copying contact";
    }
    
    void HistoryTreeItem::addContact()
    {
       qDebug() << "Adding contact";
       Contact* aContact = new Contact();
       aContact->setPhoneNumbers(PhoneNumbers() << new Contact::PhoneNumber(m_pPhoneNumber, "Home"));
       aContact->setFormattedName(m_pName);
       AkonadiBackend::getInstance()->addNewContact(aContact);
    }
    
    void HistoryTreeItem::addToContact()
    {
       qDebug() << "Adding to contact";
    }
    void HistoryTreeItem::bookmark()
    {
       qDebug() << "bookmark";
       SFLPhone::app()->bookmarkDock()->addBookmark(m_pPhoneNumber);
    }