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