Great news Karl,

I'd suggest howevere that you subscribe to the lmist othrewise your  
post ar refuse i need manually authorize them.

Maybe laurent will be able to answer your GUI question


Thanks
Vadim
Le 24 oct. 08 à 09:49, karl hoffmann a écrit :

> hi list,
>
> the mechanic is working! i inserted in
>
> QtPhoneCall.cpp
>
> a new function ("QtPhoneCall::blindTransfer2()"), a new menu  
> (transfer call) and it worked for the string "1015", but i am not  
> able to access PhoneComboBoxCurrenttext in QtCallbar.cpp.
>
> the problem is, i don't know too much about c++ and qt. Please could  
> someone give me a hint?
>
> Thanks !
> karl
>
>
>
> Line 559 in qtphonecall.cpp
>
>
>
> void QtPhoneCall::holdOrResume() {
>        if (_hold) {
>                _cPhoneCall.resume();
>        } else {
>                _cPhoneCall.hold();
>        }
>        updateHoldAction();
> }
>
>
> //--start my dirty hack
> void QtPhoneCall::blindTransfer2() {
>        //currentText().toStdString();QtCallBar::
>  //    std::string phoneNumber2 =  currentText()
>  //std::string phoneNumber2 =callBar->getPhoneComboBoxCurrentText();
> _cPhoneCall.blindTransfer("1015");
> }
> //-- end my dirty hack
>
> void QtPhoneCall::updateCallDuration() {
>        _duration++;
>        updateStatusLabel();
> }
>
>
>
>
> Chris Maciejewski schrieb:
>> Could please someone let me know, if it is currently possible to
>> transfer call with Qutecom?
>> Thanks
>> Chris
>> 2008/8/13 Chris Maciejewski <[EMAIL PROTECTED]>:
>>> Hello,
>>>
>>> Just wanted to discuss with the list the idea of adding (or  
>>> replacing
>>> "Audio Smileys" button) on a "Call" tab with "Call transfer" button.
>>> It seems to me there is already method for this
>>> http://doxygen.qutecom.org/_phone_line_8cpp-source.html#l00273 but I
>>> can't find any GUI element to do this. Or I am missing something
>>> obvious?
>>>
>>> Regards,
>>> Chris
>>>
>> _______________________________________________
>> QuteCom-dev mailing list
>> [email protected]
>> http://lists.qutecom.org/mailman/listinfo/qutecom-dev
>
>
> -- 
> ******************************************************************
> OGVIT GmbH & Co KG, Tel: +49(0)5251.687060, Fax: +49(0)5251.687069
> Adresse: D-33098 Paderborn, Jesuitenmauer 24
> http://ogvit.de, [EMAIL PROTECTED]
>
> HRA 2342 Amtsgericht Paderborn
>
> Komplementärin:
> OGVIT Verwaltungs GmbH
> Jesuitenmauer 24
> 33098 Paderborn
> HRB 3568 Amtsgericht Paderborn
>
> Geschäftsführer: Karl Bernhard Julius Hoffmann
> Ust-ID Nr: 812947166
> ******************************************************************
> Kontakt Hamburg:
> c/o Postalo GmbH
> Kattrepel 2 - 20095 Hamburg
> Tel 040/51318373  - fax 040/51318374
> ******************************************************************
> /*
> * WengoPhone, a voice over Internet phone
> * Copyright (C) 2004-2007  Wengo
> *
> * 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
> * (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 "QtPhoneCall.h"
>
> #include "ui_PhoneCallWidget.h"
>
> #ifdef XV_HWACCEL
>        #include "QtVideoXV.h"
> #endif
>
> #include "QtVideoQt.h"
> #include "QtPhoneCallEventFilter.h"
> #include "../toaster/QtCallToaster.h"
> #include "../QtDialpad.h"
>
> #include <presentation/qt/callbar/QtCallBar.h>
> #include <presentation/qt/callbar/QtPhoneComboBox.h>
>
> #include "QtAudioSmileysWindow.h"
>
> #include <presentation/qt/QtWengoPhone.h>
> #include <presentation/qt/QtToolBar.h>
> #include <presentation/qt/statusbar/QtStatusBar.h>
> #include <presentation/qt/contactlist/QtContactList.h>
> #include <presentation/qt/profile/QtProfileDetails.h>
>
> #include <control/CWengoPhone.h>
> #include <control/profile/CUserProfile.h>
> #include <control/profile/CUserProfileHandler.h>
> #include <control/phonecall/CPhoneCall.h>
>
> #include <model/config/Config.h>
> #include <model/config/ConfigManager.h>
> #include <model/contactlist/ContactProfile.h>
> #include <model/phonecall/ConferenceCall.h>
> #include <model/phonecall/PhoneCall.h>
> #include <model/phoneline/PhoneLine.h>
> #include <model/profile/AvatarList.h>
>
> #include <sipwrapper/CodecList.h>
> #include <sipwrapper/SipWrapper.h>
>
> #include <cutil/global.h>
>
> #include <util/Logger.h>
> #include <util/SafeDelete.h>
>
> #include <qtutil/SafeConnect.h>
> #include <qtutil/WidgetRatioEnforcer.h>
> #include <qtutil/WidgetUtils.h>
>
> #include <QtCore/QMutex>
> #include <QtCore/QTime>
> #include <QtCore/QTimer>
>
> #include <QtGui/QMenu>
> #include <QtGui/QPainter>
>
> // If a PSTN number is shorter than this length, we assume it's a  
> special sip
> // account, like 333 for Wengo
> static const int PSTN_NUMBER_MIN_LENGTH = 4;
>
> static const int LOCAL_FRAME_WIDTH = 64;
> static const int LOCAL_FRAME_HEIGHT = 64;
> static const int LOCAL_FRAME_MARGIN = 7;
>
> // See wifo/phapi/phmedia-video.c
> static const int NOWEBCAM_FILL_VALUE = 128;
>
> static const int NOWEBCAM_SAMPLE_COUNT = 200;
>
> // Minimum width of buttons shown when we are in "talking" state.  
> Defined to avoid square buttons
> // under MacOS X
> static const int TALKING_BUTTON_MIN_WIDTH = 50;
>
> /**
> * Helper function to determine if image is a real webcam or not:
> * If the remote user has no webcam, then wifo will send us a yuv  
> image filled
> * with NOWEBCAM_FILL_VALUE bytes.
> */
> static bool isRealWebcamVideoFrame(piximage* image) {
>        if (image->palette != PIX_OSI_YUV420P) {
>                return true;
>        }
>
>        int step = (image->width * image->height * 3 / 2) /  
> NOWEBCAM_SAMPLE_COUNT;
>
>        for (int sample=0; sample < NOWEBCAM_SAMPLE_COUNT; ++sample) {
>                if (image->data[sample * step] !=  
> NOWEBCAM_FILL_VALUE) {
>                        return true;
>                }
>        }
>
>        return false;
> }
>
> static void setButtonAction(QPushButton* button, QAction* action) {
>        button->disconnect();
>        SAFE_CONNECT_RECEIVER(button, SIGNAL(clicked()), action,  
> SLOT(trigger()));
>        button->setIcon(action->icon());
>        button->setEnabled(action->isEnabled());
>        button->setToolTip(action->toolTip());
> }
>
> static void flashMainWindow(QWidget* window) {
>        if (window->isActiveWindow()) {
>                return;
>        }
>
>        if (!window->isVisible()) {
>                // Make sure the window appears on the taskbar,
>                // otherwise it won't flash...
>                window->showMinimized();
>        }
>
>        WidgetUtils::flashWindow(window);
> }
>
> QtPhoneCall::QtPhoneCall(CPhoneCall & cPhoneCall)
>        : QObject(NULL),
>        _cPhoneCall(cPhoneCall) {
>
>        _qtWengoPhone = (QtWengoPhone *)  
> _cPhoneCall.getCWengoPhone().getPresentation();
>        _videoWindow = NULL;
>        _closed = false;
>        _duration = 0;
>
>        _callToaster = NULL;
>        _remoteVideoFrame = NULL;
>        _localVideoFrame = NULL;
>        _hold = false;
>        _videoMode = VM_None;
>
>        _mutex = new QMutex(QMutex::Recursive);
>
>        _phoneCallWidget = new QWidget(NULL);
>
>        _ui = new Ui::PhoneCallWidget();
>        _ui->setupUi(_phoneCallWidget);
>
>        _ui->encryptionFrame->hide();
>        //_ui->videoContainer->hide();
>        _ui->labelStack->setCurrentWidget(_ui->avatarPage);
>        _ui->buttonStack->setCurrentWidget(_ui->ringingPage);
>
>        _phoneCallWidget->setAutoFillBackground(true);
>
>        std::string tmpDisplayName =  
> _cPhoneCall.getPhoneCall().getPeerSipAddress().getDisplayName();
>        QString userName = QString::fromUtf8(tmpDisplayName.c_str());
>
>        if (userName.isEmpty()) {
>                userName =  
> QString 
> ::fromStdString 
> (_cPhoneCall.getPhoneCall().getPeerSipAddress().getUserName());
>        }
>        QPixmap avatarPixmap = loadContactAvatar(userName);
>        initAvatarLabel(avatarPixmap);
>
>
>        Config & config =  
> ConfigManager::getInstance().getCurrentConfig();
>
>        // On MacOSX getVideoEnable causes quite a lot of work, like  
> listing the
>        // available devices. Therefore we keep the result instead of  
> asking it
>        // everytime it's needed.
>        _videoEnabledInConfig = config.getVideoEnable();
>
>        //init flip
>        PhoneLine & phoneLine = dynamic_cast < PhoneLine & >  
> (_cPhoneCall.getPhoneCall().getPhoneLine());
>        phoneLine.flipVideoImage(config.getVideoFlipEnable());
>        ////
>
>        userName = getDisplayName(userName);
>
> #ifndef OS_MACOSX
>        //With Qt4.2, the button background is set to  
> _phoneCallWidget background
>        //color on Windows and Linux, setting autoFillBackground to  
> true prevents
>        //this.
>        //We don't want to do this on OSX, because on this platform  
> setting
>        //autoFillBackground to true paints horizontal stripes behind  
> the buttons.
>        Q_FOREACH(QPushButton* button, _phoneCallWidget- 
> >findChildren<QPushButton*>()) {
>                button->setAutoFillBackground(true);
>        }
>        ////
> #endif
>
>        Q_FOREACH(QPushButton* button, _ui->talkingPage- 
> >findChildren<QPushButton*>()) {
>                button->setMinimumWidth(TALKING_BUTTON_MIN_WIDTH);
>        }
>
>        // Set bold ourself: if we do it from Designer it alters the  
> font name (at
>        // least with Qt 4.1)
>        QFont font(_ui->nickNameLabel->font());
>        font.setBold(true);
>        _ui->nickNameLabel->setFont(font);
>
>        _ui->nickNameLabel->setText(userName);
>        updateNickNameToolTip();
>
>        _ui->statusLabel->setToolTip(tr("Status"));
>
>        // Accept call
>        SAFE_CONNECT(_ui->acceptButton, SIGNAL(clicked()),  
> SLOT(acceptCall()));
>
>        // Reject call
>        SAFE_CONNECT(_ui->rejectButton, SIGNAL(clicked()),  
> SLOT(rejectCall()));
>
>        // Tweak ui when we are the caller
>        if (!isIncoming()) {
>                _ui->acceptButton->hide();
>                _ui->rejectButton->setText(tr("Ca&ncel"));
>        }
>
>        // Hang up
>        _actionHangupCall = new QAction(QIcon(":/pics/actions/hangup- 
> phone.png"), tr("Hang-up"), _phoneCallWidget);
>        SAFE_CONNECT(_actionHangupCall, SIGNAL(triggered()),  
> SLOT(rejectCall()));
>        setButtonAction(_ui->hangupButton, _actionHangupCall);
>
>        //Hold
>        _actionHold = new QAction(_phoneCallWidget);
>        SAFE_CONNECT(_actionHold, SIGNAL(triggered()),  
> SLOT(holdOrResume()));
>
>        //Add contact
>        _actionAddContact = new QAction(QIcon(":/pics/actions/add- 
> contact.png"), tr("Add contact"), _phoneCallWidget);
>        SAFE_CONNECT(_actionAddContact, SIGNAL(triggered()),  
> SLOT(addContact()));
>        setButtonAction(_ui->addContactButton, _actionAddContact);
>        ////
>
>        SAFE_CONNECT(_ui->dialpadButton, SIGNAL(toggled(bool)),  
> SLOT(toggleDialpad(bool)) );
>        SAFE_CONNECT(_ui->smileysButton, SIGNAL(toggled(bool)),  
> SLOT(toggleSmileys(bool)) );
>
>
>        //Computes the call duration
>        _callTimer = new QTimer(_phoneCallWidget);
>        SAFE_CONNECT(_callTimer, SIGNAL(timeout()),  
> SLOT(updateCallDuration()));
>
>        QtPhoneCallEventFilter * filter = new  
> QtPhoneCallEventFilter(_phoneCallWidget);
>        _phoneCallWidget->installEventFilter(filter);
>
>        flashMainWindow(_qtWengoPhone->getWidget());
>        showToaster(userName, avatarPixmap);
>
>        if (!_cPhoneCall.getPhoneCall().getConferenceCall()) {
>                _qtWengoPhone->addPhoneCall(this);
>        } else {
>                _qtWengoPhone->addToConference(this);
>        }
>
>        updateStatusLabel();
>        updateHoldAction();
>
>        //update toolbar (menus)
>        if (_qtWengoPhone) {
>                _qtWengoPhone->getQtToolBar().updateMenuActions();
>        }
>        ////
>
>        _ui->acceptButton->setFocus();
> }
>
> QtPhoneCall::~QtPhoneCall() {
>        if (_remoteVideoFrame) {
>                pix_free(_remoteVideoFrame);
>        }
>        if (_localVideoFrame) {
>                pix_free(_localVideoFrame);
>        }
>
>        OWSAFE_DELETE(_ui);
>        OWSAFE_DELETE(_mutex);
> }
>
> void QtPhoneCall::initAvatarLabel(const QPixmap& pixmap) {
>        if (pixmap.hasAlpha()) {
>                // Paint avatar over a background if it's transparent  
> (doing so for
>                // full opaque images looks ugly)
>                QPixmap bg(":/pics/phonecall/avatar_background.png");
>                QPainter painter(&bg);
>                painter.drawPixmap(
>                        (bg.width() - pixmap.width()) / 2,
>                        (bg.height() - pixmap.height()) / 2,
>                        pixmap);
>                painter.end();
>                _ui->avatarLabel->setPixmap(bg);
>        } else {
>                _ui->avatarLabel->setPixmap(pixmap);
>        }
>
>        _ui->labelStack->setCurrentWidget(_ui->avatarPage);
> }
>
> QPixmap QtPhoneCall::loadContactAvatar(const QString& userName) {
>
>        QPixmap pixmap;
>
>        QtContactList * qtContactList = _qtWengoPhone- 
> >getQtContactList();
>        if (qtContactList) {
>                CContactList & cContactList = qtContactList- 
> >getCContactList();
>
>                IMContact imContact(EnumIMProtocol::IMProtocolWengo,  
> userName.toStdString());
>                std::string contactId =  
> cContactList.findContactThatOwns(imContact);
>                ContactProfile contactProfile =  
> cContactList.getContactProfile(contactId);
>
>                std::string data = contactProfile.getIcon().getData();
>                if (!data.empty()) {
>                        pixmap.loadFromData((uchar *) data.c_str(),  
> data.size());
>                }
>        }
>
>        if (pixmap.isNull()) {
>                // User is not in contact list, or has no avatar  
> defined, use default
>                // avatar instead
>                std::string data =  
> AvatarList::getInstance().getDefaultAvatarPicture().getData();
>                pixmap.loadFromData((uchar*) data.c_str(),  
> data.size());
>        }
>
>        return pixmap;
> }
>
>
> void QtPhoneCall::updateHoldAction() {
>        if (_hold) {
>                _actionHold->setToolTip(tr("Resume"));
>                _actionHold->setIcon(QIcon(":/pics/actions/resume- 
> phone.png"));
>        } else {
>                _actionHold->setToolTip(tr("Hold"));
>                _actionHold->setIcon(QIcon(":/pics/actions/hold- 
> phone.png"));
>        }
>        setButtonAction(_ui->holdButton, _actionHold);
> }
>
>
> void QtPhoneCall::updateNickNameToolTip() {
>        QString toolTip =  
> QString::fromStdString(_cPhoneCall.getPeerSipAddress());
>        if (!_codecs.isEmpty()) {
>                toolTip += QString(" (%1)").arg(_codecs);
>        }
>        _ui->nickNameLabel->setToolTip(toolTip);
> }
>
>
> QString QtPhoneCall::getDisplayName(QString str) {
>        QString tmp;
>
>        int begin = str.indexOf("sip:", 0, Qt::CaseInsensitive);
>        if (begin == -1) {
>                // Not found, return ...
>                return str;
>        }
>        begin += 4;
>        int end = str.indexOf("@", begin, Qt::CaseInsensitive);
>        if (end == -1) {
>                //Not found, return ...
>                return str;
>        }
>        tmp = str.mid(begin, end - begin);
>        return tmp;
> }
>
> void  
> QtPhoneCall::stateChangedEvent(EnumPhoneCallState::PhoneCallState  
> state) {
>        std::string codecs;
>        if (_cPhoneCall.getAudioCodecUsed() !=  
> CodecList::AudioCodecError) {
>                codecs +=  
> CodecList::toString(_cPhoneCall.getAudioCodecUsed());
>        }
>        if (_cPhoneCall.getVideoCodecUsed() !=  
> CodecList::VideoCodecError) {
>                codecs += "/" +  
> CodecList::toString(_cPhoneCall.getVideoCodecUsed());
>        }
>        _codecs = QString::fromStdString(codecs);
>        updateNickNameToolTip();
>
>        updateStatusLabel();
>
>        //update toolbar (menus)
>        if (_qtWengoPhone) {
>                _qtWengoPhone->getQtToolBar().updateMenuActions();
>        }
>
>        switch (state) {
>        case EnumPhoneCallState::PhoneCallStateTalking:
>                _ui->buttonStack->setCurrentWidget(_ui->talkingPage);
>                _duration = 0;
>                _callTimer->start(1000);
>                _actionHangupCall->setEnabled(true);
>
>                _ui->encryptionFrame->setVisible(isCallEncrypted());
>
>                startedTalking(this);
>                break;
>
>        case EnumPhoneCallState::PhoneCallStateDialing:
>        case EnumPhoneCallState::PhoneCallStateRinging:
>        case EnumPhoneCallState::PhoneCallStateRingingStart:
>        case EnumPhoneCallState::PhoneCallStateRingingStop:
>        case EnumPhoneCallState::PhoneCallStateIncoming:
>                _actionHangupCall->setEnabled(true);
>                break;
>
>        case EnumPhoneCallState::PhoneCallStateHold:
>                _hold = true;
>                updateHoldAction();
>                break;
>
>        case EnumPhoneCallState::PhoneCallStateResumed:
>                _hold = false;
>                updateHoldAction();
>                break;
>
>        case EnumPhoneCallState::PhoneCallStateUnknown:
>        case EnumPhoneCallState::PhoneCallStateError:
>        case EnumPhoneCallState::PhoneCallStateMissed:
>        case EnumPhoneCallState::PhoneCallStateRedirected:
>                break;
>
>        case EnumPhoneCallState::PhoneCallStateClosed:
>                LOG_FATAL("should never reach this case since  
> PPhoneCall::close() is done for this purpose");
>                break;
>
>        default:
>                LOG_FATAL("unknown PhoneCallState=" +  
> EnumPhoneCallState::toString(state));
>        }
> }
>
> void QtPhoneCall::initVideo(piximage* remoteVideoFrame, piximage*  
> localVideoFrame) {
>        _remoteVideoFrame = remoteVideoFrame;
>        _localVideoFrame = localVideoFrame;
>
>        if (!isRealWebcamVideoFrame(remoteVideoFrame)) {
>                if (_videoEnabledInConfig) {
>                        _videoMode = VM_LocalOnly;
>                } else {
>                        _videoMode = VM_None;
>                }
>                return;
>        }
>
>        // We only get there if we receive a real video from the  
> remote user
>
>        if (_videoEnabledInConfig) {
>                _videoMode = VM_Both;
>        } else {
>                _videoMode = VM_RemoteOnly;
>        }
>        // Hide avatar label to save space for the video
>        //_ui->avatarLabel->hide();
>
> #ifdef XV_HWACCEL
>        if (config.getXVideoEnable()) {
>                _videoWindow = new QtVideoXV(_phoneCallWidget,  
> remoteVideoFrame->width, remoteVideoFrame->height,
>                        localVideoFrame->width, localVideoFrame- 
> >height);
>                if (!_videoWindow->isInitialized()) {
>                        OWSAFE_DELETE(_videoWindow);
>                }
>        }
> #endif
>
>        // We can fallback from a failure in QtVideoXV
>        if (!_videoWindow) {
>                _videoWindow = new QtVideoQt(_ui->videoContainer);
>                SAFE_CONNECT(_videoWindow,  
> SIGNAL(toggleFlipVideoImageSignal()), SLOT(toggleFlipVideoImage()));
>        }
>
>        // Init videoContainer
>        double ratio = remoteVideoFrame->width /  
> double(remoteVideoFrame->height);
>        _ui->videoContainer->setRatio(ratio);
>        _ui->videoContainer->setChild(_videoWindow->getWidget());
>        QTimer::singleShot(0, _videoWindow->getWidget(), SLOT(show()));
>        //_ui->videoContainer->show();
>        _ui->labelStack->setCurrentWidget(_ui->videoPage);
> }
>
> void QtPhoneCall::videoFrameReceivedEvent(piximage *  
> remoteVideoFrame, piximage * localVideoFrame) {
>
>        QMutexLocker locker(_mutex);
>
>        //FIXME hack to prevent a crash
>        if (_closed) {
>                return;
>        }
>
>        if (_videoMode == VM_None) {
>                initVideo(remoteVideoFrame, localVideoFrame);
>        }
>
>        if (_videoMode == VM_RemoteOnly || _videoMode == VM_Both) {
>                _videoWindow->showImage(remoteVideoFrame,  
> localVideoFrame);
>        }
>
>        if (_videoMode == VM_LocalOnly) {
>                QImage image;
>                QSize size(_localVideoFrame->width, _localVideoFrame- 
> >height);
>                size.scale(LOCAL_FRAME_WIDTH, LOCAL_FRAME_HEIGHT,  
> Qt::KeepAspectRatio);
>                if (size.width() & 1) {
>                        size.setWidth(size.width() + 1);
>                }
>                if (size.height() & 1) {
>                        size.setHeight(size.height() + 1);
>                }
>                QtVideoQt::convertPixImageToQImage(_localVideoFrame,  
> size, &image);
>                QPixmap avatarPix = *_ui->avatarLabel->pixmap();
>                QPainter painter(&avatarPix);
>                painter.drawImage(
>                        avatarPix.width() - size.width() -  
> LOCAL_FRAME_MARGIN,
>                        avatarPix.height() - size.height() -  
> LOCAL_FRAME_MARGIN,
>                        image);
>                painter.end();
>                _ui->avatarLabel->setPixmap(avatarPix);
>        }
> }
>
> void QtPhoneCall::acceptCall() {
>        _ui->statusLabel->setText(tr("Initialization..."));
>        _cPhoneCall.accept();
>        if (_callToaster) {
>                _callToaster->close();
>        }
> }
>
> void QtPhoneCall::rejectCall() {
>        LOG_DEBUG("phone call hangup");
>        switch (_cPhoneCall.getState()) {
>        case EnumPhoneCallState::PhoneCallStateError:
>        case EnumPhoneCallState::PhoneCallStateResumed:
>        case EnumPhoneCallState::PhoneCallStateTalking:
>        case EnumPhoneCallState::PhoneCallStateDialing:
>        case EnumPhoneCallState::PhoneCallStateRinging:
>        case EnumPhoneCallState::PhoneCallStateRingingStart:
>        case EnumPhoneCallState::PhoneCallStateRingingStop:
>        case EnumPhoneCallState::PhoneCallStateIncoming:
>        case EnumPhoneCallState::PhoneCallStateHold:
>        case EnumPhoneCallState::PhoneCallStateRedirected:
>                _cPhoneCall.hangUp();
>                break;
>        default:
>                LOG_DEBUG("call rejected");
>        }
> }
>
> void QtPhoneCall::holdOrResume() {
>        if (_hold) {
>                _cPhoneCall.resume();
>        } else {
>                _cPhoneCall.hold();
>        }
>        updateHoldAction();
> }
>
> void QtPhoneCall::blindTransfer2() {
>        //currentText().toStdString();QtCallBar::
>  //    std::string phoneNumber2 =  currentText()
>  //                   std::string phoneNumber2 = callBar- 
> >getPhoneComboBoxCurrentText();  // currentText()
>                _cPhoneCall.blindTransfer("1015");
>                //QtPhoneComboBox.currentText().toStdString()
> }
>
> void QtPhoneCall::updateCallDuration() {
>        _duration++;
>        updateStatusLabel();
> }
>
> void QtPhoneCall::updateStatusLabel() {
>        QString text;
>        switch (_cPhoneCall.getState()) {
>        case EnumPhoneCallState::PhoneCallStateError:
>                text = tr("Error");
>                break;
>
>        case EnumPhoneCallState::PhoneCallStateResumed:
>        case EnumPhoneCallState::PhoneCallStateTalking:
>                if (_cPhoneCall.getPhoneCall().getConferenceCall()) {
>                        text = tr("Talking - Conference");
>                } else {
>                        text = tr("Talking");
>                }
>                break;
>
>        case EnumPhoneCallState::PhoneCallStateDialing:
>                text = tr("Dialing");
>                break;
>
>        case EnumPhoneCallState::PhoneCallStateRinging:
>                text = tr("Ringing");
>                break;
>
>        case EnumPhoneCallState::PhoneCallStateRingingStart:
>                text = tr("Ringing");
>                break;
>
>        case EnumPhoneCallState::PhoneCallStateIncoming:
>                text = tr("Incoming Call");
>                break;
>
>        case EnumPhoneCallState::PhoneCallStateHold:
>                text = tr("Hold");
>                break;
>
>        case EnumPhoneCallState::PhoneCallStateRedirected:
>                text = tr("Redirected");
>                break;
>
>        default:
>                break;
>        }
>        _ui->statusLabel->setText(text);
>
>        QTime time;
>        time = time.addSecs(_duration);
>        _ui->durationLabel->setText(time.toString(Qt::TextDate));
> }
>
> bool QtPhoneCall::isIncoming() const {
>        return (_cPhoneCall.getState() ==  
> EnumPhoneCallState::PhoneCallStateIncoming);
> }
>
> void QtPhoneCall::showToaster(const QString & userName, const  
> QPixmap& pixmap) {
>        Config & config =  
> ConfigManager::getInstance().getCurrentConfig();
>
>        if (!isIncoming()) {
>                return;
>        }
>
>        //Shows toaster for incoming chats?
>        if (!config.getNotificationShowToasterOnIncomingCall()) {
>                return;
>        }
>
>        OWSAFE_DELETE(_callToaster);
>        _callToaster = new QtCallToaster();
>        _callToaster->setMessage(userName);
>        _callToaster->setPixmap(pixmap);
>
>        SAFE_CONNECT(_callToaster, SIGNAL(pickUpButtonClicked()),  
> SLOT(acceptCall()));
>        SAFE_CONNECT(_callToaster, SIGNAL(hangUpButtonClicked()),  
> SLOT(rejectCall()));
>        _callToaster->show();
> }
>
> void QtPhoneCall::close() {
>        //FIXME hack to prevent a crash
>        _closed = true;
>
>        if (_callToaster) {
>                _callToaster->close();
>        }
>
>        _callTimer->disconnect();
>        _callTimer->stop();
>        OWSAFE_DELETE(_callTimer);
>
>        _actionHangupCall->setEnabled(false);
>        _ui->statusLabel->setText(tr("Closed"));
>        if (_videoWindow) {
>                if (_videoWindow->isFullScreen()) {
>                        _videoWindow->unFullScreen();
>                }
>        }
>
>        //update toolbar (menus)
>        if (_qtWengoPhone) {
>                _qtWengoPhone->getQtToolBar().updateMenuActions();
>        }
>        ////
>
>        //TODO: disconnect from flipWebcamButtonClicked
>        OWSAFE_DELETE(_videoWindow);
>        OWSAFE_DELETE(_phoneCallWidget);
>        deleteLater();
> }
>
> void QtPhoneCall::toggleFlipVideoImage() {
>        Config & config =  
> ConfigManager::getInstance().getCurrentConfig();
>        PhoneLine & phoneLine = dynamic_cast < PhoneLine & >  
> (_cPhoneCall.getPhoneCall().getPhoneLine());
>        bool flip = !config.getVideoFlipEnable();
>        phoneLine.flipVideoImage(flip);
>        config.set(Config::VIDEO_ENABLE_FLIP_KEY, flip);
> }
>
> /**
> * Helper function trying to determine if a username is a PSTN number.
> */
> static bool isPSTNUserName(const QString& userName) {
>        for (int pos=0; pos < userName.size(); ++pos) {
>                if (!userName[0].isDigit()) {
>                        return false;
>                }
>        }
>
>        return userName.size() >= PSTN_NUMBER_MIN_LENGTH;
> }
>
> void QtPhoneCall::addContact() {
>        CWengoPhone & cWengoPhone = _cPhoneCall.getCWengoPhone();
>        CUserProfile* cUserProfile =   
> cWengoPhone.getCUserProfileHandler().getCUserProfile();
>        if (!cUserProfile) {
>                LOG_WARN("No user profile defined. This should not  
> happen");
>                return;
>        }
>
>        ContactProfile contactProfile;
>        QtProfileDetails qtProfileDetails(*cUserProfile,  
> contactProfile, _phoneCallWidget->window(), tr("Add a Contact"));
>
>        // Fill some QtProfileDetails fields
>        PhoneCall& call = _cPhoneCall.getPhoneCall();
>        SipAddress sipAddress = call.getPeerSipAddress();
>
>        QString rawSipAddress =  
> QString::fromStdString(sipAddress.getRawSipAddress());
>        Config & config =  
> ConfigManager::getInstance().getCurrentConfig();
>        QString wengoRealm =  
> QString::fromStdString( config.getWengoRealm() );
>        if (rawSipAddress.contains(wengoRealm)) {
>                // Wengo server
>                QString userName;
>                userName =  
> QString::fromUtf8(sipAddress.getDisplayName().c_str());
>                if (userName.isEmpty()) {
>                        userName =  
> QString::fromUtf8(sipAddress.getUserName().c_str());
>                }
>                if (isPSTNUserName(userName)) {
>                        // User name is the phone number
>                        qtProfileDetails.setHomePhone(userName);
>                } else {
>                        // User name is the name of the Wengo account
>                        qtProfileDetails.setWengoName(userName);
>                }
>        } else {
>                // External SIP server
>                QString address =  
> QString::fromStdString(sipAddress.getSipAddress());
>                if (address.startsWith("sip:")) {
>                        address = address.mid(4);
>                }
>                qtProfileDetails.setSipAddress(address);
>        }
>        ////
>
>        if (qtProfileDetails.show()) {
>                // WARNING: if the user hang up while the dialog is  
> shown, 'this' won't
>                // be valid anymore. Therefore we must not use any  
> field of 'this'
>                // here.
>                cUserProfile- 
> >getCContactList().addContact(contactProfile);
>        }
> }
>
> bool QtPhoneCall::isCallEncrypted() {
>        return _cPhoneCall.isCallEncrypted();
> }
>
>
> /**
> * Hide the other audio smileys window if it's open and uncheck its  
> button
> */
> static void hideOtherPopupWindow(QPushButton* button,  
> QtAudioSmileysWindow* window) {
>        button->blockSignals(true);
>        button->setChecked(false);
>        button->blockSignals(false);
>        if (window) {
>                window->hide();
>        }
> }
>
> /**
> * Show an audio smileys window
> */
> static void togglePopupWindow(QtAudioSmileysWindow* window, bool on) {
>        if (on) {
>                window->show();
>        } else {
>                if (window) {
>                        window->hide();
>                }
>        }
> }
>
> void QtPhoneCall::toggleDialpad(bool on) {
>        if (_ui->smileysButton->isChecked()) {
>                hideOtherPopupWindow(_ui->smileysButton,  
> _smileysWindow.get());
>        }
>        if (on) {
>                if (!_dialpadWindow.get()) {
>                        CDtmfThemeManager& manager = _qtWengoPhone- 
> >getCWengoPhone().getCDtmfThemeManager();
>                        _dialpadWindow.reset( new  
> QtAudioSmileysWindow(manager, _qtWengoPhone) );
>                        _dialpadWindow->dialpad()- 
> >setThemeMode(QtDialpad::ThemeModeDefaultOnly);
>                        _dialpadWindow->setButton(_ui->dialpadButton);
>                }
>        }
>
>        togglePopupWindow(_dialpadWindow.get(), on);
> }
>
> void QtPhoneCall::toggleSmileys(bool on) {
>        if (_ui->dialpadButton->isChecked()) {
>                hideOtherPopupWindow(_ui->dialpadButton,  
> _dialpadWindow.get());
>        }
>        if (on) {
>                if (!_smileysWindow.get()) {
>                        CDtmfThemeManager& manager = _qtWengoPhone- 
> >getCWengoPhone().getCDtmfThemeManager();
>                        _smileysWindow.reset( new  
> QtAudioSmileysWindow(manager, _qtWengoPhone) );
>                        _smileysWindow->dialpad()- 
> >setThemeMode(QtDialpad::ThemeModeAudioSmileysOnly);
>                        _smileysWindow->setButton(_ui->smileysButton);
>                }
>        }
>
>        togglePopupWindow(_smileysWindow.get(), on);
> }_______________________________________________
> QuteCom-dev mailing list
> [email protected]
> http://lists.qutecom.org/mailman/listinfo/qutecom-dev

_______________________________________________
QuteCom-dev mailing list
[email protected]
http://lists.qutecom.org/mailman/listinfo/qutecom-dev

Reply via email to