/************************************************************************ Copyright (c) 2005-2012 by Juphoon System Software Co., Ltd. All rights reserved. This software is confidential and proprietary to Juphoon System Software Co., Ltd.. No part of this software may be reproduced, stored, transmitted, disclosed or used in any form or by any means other than as expressly provided by the written license agreement between JusTel and its licensee. THIS SOFTWARE IS PROVIDED BY JusTel "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JusTel BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Juphoon System Software Co., Ltd. ************************************************************************/ /************************************************* File name : rsesswidgets.cpp Module : UI Widget Author : vic.ren Created on : 2012-08-10 Description : button box for session dialog Modify History: 1. Date: Author: Modification: *************************************************/ #include "JusCallPch.h" /*According to the Qt docs, if you want to use GDI or Direct3D on Windows with Qt, you need to: 1) Override QWidget::paintEngine to return NULL 2) Call QWidget::setAttribute(Qt::WA_PaintOnScreen, true) */ RVideoWidget::RVideoWidget(QWidget *parent) : RWidget(parent) { setMouseTracking(true); setAttribute(Qt::WA_PaintOnScreen, true); } QPaintEngine *RVideoWidget::paintEngine()const { //return QWidget::paintEngine(); return ZNULL; } void RVideoWidget::mouseMoveEvent(QMouseEvent * event) { event->ignore(); } void RVideoWidget::mouseDoubleClickEvent(QMouseEvent *event) { if(!event) return; QWidget::mouseDoubleClickEvent(event); emit signalDoubleClicked(); } RControlPad::RControlPad(RSession *pSession, bool bIsVideo, QWidget *parent) : RWidget(parent), m_pSession(pSession), m_pVolumeWidget(ZNULL), m_bIsVideo(bIsVideo) { setWindowFlags(Qt::FramelessWindowHint /*| Qt::Tool*/ | Qt::WindowStaysOnTopHint); // setAttribute(Qt::WA_TranslucentBackground); setFocusPolicy(Qt::NoFocus); initDlg(); } RControlPad::~RControlPad() { if (m_pVolumeWidget) { m_pVolumeWidget->hide(); delete m_pVolumeWidget; } } void RControlPad::mouseMoveEvent(QMouseEvent * event) { if (!event) return; QWidget::mouseMoveEvent(event); QPoint ptNewPoint = event->globalPos(); if (event->buttons() == Qt::LeftButton) { QPoint ptLeftUpPoint = ptNewPoint - m_ptLastPoint; m_pSession->moveVideo(ptLeftUpPoint); m_ptLastPoint = ptNewPoint; } } void RControlPad::mousePressEvent(QMouseEvent * event) { if (!event) return; QWidget::mousePressEvent(event); hideVolumeControl(); m_ptLastPoint = event->globalPos(); } void RControlPad::mouseReleaseEvent(QMouseEvent * event) { if (!event) return; QWidget::mouseReleaseEvent(event); m_ptLastPoint = QPoint(0, 0); } void RControlPad::enterEvent(QEvent * event) { if (!event) return; QWidget::enterEvent(event); emit signalMouseInControl(true); } void RControlPad::leaveEvent(QEvent * event) { if (!event) return; QWidget::leaveEvent(event); emit signalMouseInControl(false); } void RControlPad::showEvent(QShowEvent * event) { if (!event) return; QWidget::showEvent(event); } void RControlPad::hideEvent(QHideEvent * event) { if (!event) return; QWidget::hideEvent(event); if (!m_pVolumeWidget->isHidden()) m_pVolumeWidget->hide(); } void RControlPad::resizeEvent(QResizeEvent * event) { if (!event) return; QWidget::resizeEvent(event); m_pBtnAnswer->move(width()/2 - 110, 10); m_pBtnDecline->move(width()/2 + 50, 10); m_pBtnEnd->move(width()/2 - 30, 10); m_pBtnMic->move(width()/2 - 165, 25); m_pBtnSpk->move(width()/2 + 135, 25); } void RControlPad::initDlg() { resize(380, 80); m_pBtnAnswer = new RImageBtn(this); m_pBtnAnswer->resize(60, 60); m_pBtnAnswer->setBackgroud(":/images/ic_btn_answer.png"); connect(m_pBtnAnswer, SIGNAL(clicked()), SIGNAL(signalClickedBtnAnswer())); m_pBtnAnswer->hide(); m_pBtnDecline = new RImageBtn(this); m_pBtnDecline->resize(60, 60); m_pBtnDecline->setBackgroud(":/images/ic_btn_decline.png"); connect(m_pBtnDecline, SIGNAL(clicked()), SIGNAL(signalClickedBtnDecline())); m_pBtnDecline->hide(); m_pBtnEnd = new RImageBtn(this); m_pBtnEnd->resize(60, 60); m_pBtnEnd->setBackgroud(":/images/ic_btn_decline.png"); connect(m_pBtnEnd, SIGNAL(clicked()), SIGNAL(signalClickedBtnEnd())); m_pBtnEnd->hide(); m_pBtnSpk = new RImageCheckBox(this, ":/images/ic_btn_spk_mute.png", ":/images/ic_btn_spk.png", m_bIsVideo); m_pBtnSpk->resize(30, 30); connect(m_pBtnSpk, SIGNAL(clicked()), SLOT(slotClickedBtnSpkMute())); connect(m_pBtnSpk, SIGNAL(signalHovered()), SLOT(slotShowVolumeControl())); m_pBtnSpk->hide(); m_pBtnMic = new RImageCheckBox(this, ":/images/ic_btn_mic_mute.png", ":/images/ic_btn_mic.png", m_bIsVideo); m_pBtnMic->resize(30, 30); connect(m_pBtnMic, SIGNAL(clicked()), SLOT(slotClickedBtnMicMute())); m_pBtnMic->hide(); m_pVolumeWidget = new RVolumeWidget(m_pSession); m_pVolumeWidget->hide(); connect(m_pVolumeWidget, SIGNAL(signalMuteCanceled(bool)), SLOT(slotMuteCanceled(bool))); if (m_bIsVideo) { m_pBtnEnd->setColor(RStyle::mainColor(), Qt::white); m_pBtnDecline->setColor(Qt::white, Qt::white); m_pBtnAnswer->setColor(RStyle::mainColor(), Qt::white); drawRect(rect(), QColor(1, 1, 1, 178)); } else { m_pBtnEnd->setColor(RStyle::mainColor(), Qt::white); m_pBtnDecline->setColor(RStyle::fontColor(), Qt::white); m_pBtnAnswer->setColor(RStyle::mainColor(), Qt::white); drawRect(rect(), QColor(245, 245, 245, 178)); } } void RControlPad::showSessOut() { m_pBtnEnd->show(); } void RControlPad::showSessIncoming() { m_pBtnAnswer->show(); m_pBtnDecline->show(); } void RControlPad::showSessTalking() { m_pBtnAnswer->hide(); m_pBtnDecline->hide(); m_pBtnEnd->show(); m_pBtnMic->show(); m_pBtnSpk->show(); m_pBtnSpk->setChecked(Mtc_CallGetSpkMute(m_pSession->sessId())); m_pBtnMic->setChecked(Mtc_CallGetMicMute(m_pSession->sessId())); } void RControlPad::showSessTermed() { m_pBtnEnd->hide(); m_pBtnAnswer->hide(); m_pBtnDecline->hide(); m_pBtnSpk->hide(); m_pBtnMic->hide(); m_pVolumeWidget->hide(); } void RControlPad::hideVolumeControl() { if (!m_pVolumeWidget->isHidden()) m_pVolumeWidget->hide(); } void RControlPad::slotClickedBtnSpkMute() { Mtc_CallSetSpkMute(m_pSession->sessId(), m_pBtnSpk->isChecked()); m_pVolumeWidget->setVolumeMute(m_pBtnSpk->isChecked()); } void RControlPad::slotClickedBtnMicMute() { Mtc_CallSetMicMute(m_pSession->sessId(), m_pBtnMic->isChecked()); } void RControlPad::slotShowVolumeControl() { int nX = mapToGlobal(m_pBtnSpk->pos()).x() + 7; int nY = mapToGlobal(m_pBtnSpk->pos()).y() - m_pVolumeWidget->height() - 3; m_pVolumeWidget->move(nX, nY); m_pVolumeWidget->show(); } void RControlPad::slotMuteCanceled(bool bMute) { m_pBtnSpk->setChecked(bMute); Mtc_CallSetSpkMute(m_pSession->sessId(), m_pBtnSpk->isChecked()); } RTitlePad::RTitlePad(RSession *pSession, QWidget *parent) : RWidget(parent), m_pSession(pSession) { setWindowFlags(Qt::FramelessWindowHint | Qt::Tool | Qt::WindowStaysOnTopHint); setAttribute(Qt::WA_TranslucentBackground); setFocusPolicy(Qt::NoFocus); initDlg(); } void RTitlePad::mouseMoveEvent(QMouseEvent * event) { if (!event) return; QWidget::mouseMoveEvent(event); QPoint ptNewPoint = event->globalPos(); if (event->buttons() == Qt::LeftButton) { QPoint ptLeftUpPoint = ptNewPoint - m_ptLastPoint; m_pSession->moveVideo(ptLeftUpPoint); m_ptLastPoint = ptNewPoint; } } void RTitlePad::mousePressEvent(QMouseEvent * event) { if (!event) return; QWidget::mousePressEvent(event); m_ptLastPoint = event->globalPos(); } void RTitlePad::mouseReleaseEvent(QMouseEvent * event) { if (!event) return; QWidget::mouseReleaseEvent(event); m_ptLastPoint = QPoint(0, 0); } void RTitlePad::enterEvent(QEvent * event) { if (!event) return; QWidget::enterEvent(event); emit signalMouseInControl(true); } void RTitlePad::leaveEvent(QEvent * event) { if (!event) return; QWidget::leaveEvent(event); emit signalMouseInControl(false); } void RTitlePad::resizeEvent(QResizeEvent *event) { if (!event) return; QWidget::resizeEvent(event); m_pLabelTime->move((width() - 95)/2, 8); m_pBtnClose->move(width() - 20, 0); } void RTitlePad::initDlg() { m_pLabelName = new QLabel(this); m_pLabelName->setStyleSheet("QLabel {color: white}"); m_pLabelName->setFixedHeight(24); m_pLabelName->setFont(RStyle::fontSize(18)); m_pLabelName->setAlignment(Qt::AlignBottom); m_pLabelName->move(10, 9); m_pLabelCurPhone = new QLabel(this); m_pLabelCurPhone->setStyleSheet("QLabel {color: white}"); m_pLabelCurPhone->setFixedHeight(24); m_pLabelCurPhone->setAlignment(Qt::AlignBottom); m_pLabelTime = new QLabel(this); m_pLabelTime->setStyleSheet("QLabel {color: white}"); m_pLabelTime->setFixedSize(95, 24); m_pLabelTime->setAlignment(Qt::AlignBottom | Qt::AlignHCenter); m_pBtnClose = new RRightTopBtn(this, ":/images/ic_btn_close.png"); m_pBtnClose->setBtnWhite(true); m_pBtnClose->resize(20, 20); connect(m_pBtnClose, SIGNAL(clicked()), SIGNAL(signalClickedBtnClose())); m_pBtnMin = new RRightTopBtn(this, ":/images/ic_btn_min.png"); m_pBtnMin->setBtnWhite(true); m_pBtnMin->resize(20, 20); connect(m_pBtnMin, SIGNAL(clicked()), SIGNAL(signalClickedBtnMin())); m_pBtnInfo = new RRightTopBtn(this, ":/images/ic_btn_information.png"); m_pBtnInfo->setBtnWhite(true); m_pBtnInfo->resize(20, 20); connect(m_pBtnInfo, SIGNAL(clicked()), SIGNAL(signalClickedBtnInfo())); m_pBtnMin->move(width() - 40, 0); m_pBtnInfo->move(width() - 60, 0); drawRect(rect(), QColor(1, 1, 1, 178)); } void RTitlePad::updateContact() { m_pLabelCurPhone->setText(""); m_pLabelName->setText(""); if (!m_pSession) return; QString qsName = m_pSession->name(); if (qsName.isEmpty()) qsName = m_pSession->currentPhone(); m_pLabelName->setText(qsName); m_pLabelName->adjustSize(); if (m_pSession->name().isEmpty()) return; int nX = m_pLabelName->width() + 20; m_pLabelCurPhone->setFixedWidth(192 - m_pLabelName->width()); m_pLabelCurPhone->move(nX, 8); QFontMetrics fmPhone(m_pLabelCurPhone->font()); QString qsPhone = fmPhone.elidedText(m_pSession->currentPhone(), Qt::ElideRight, m_pLabelCurPhone->width()); m_pLabelCurPhone->setText(qsPhone); } void RTitlePad::setTime(const QString & qsTime) { m_pLabelTime->setText(qsTime); } void RTitlePad::setFixedWidth(int nWidth) { QWidget::setFixedWidth(nWidth); drawRect(rect(), QColor(1, 1, 1, 178)); if (nWidth == RClient::screenWidth()) { m_pBtnMin->hide(); m_pBtnInfo->move(width() - 40, 0); } else { m_pBtnMin->show(); m_pBtnMin->move(width() - 40, 0); m_pBtnInfo->move(width() - 60, 0); } if (m_pSession->name().isEmpty()) return; int nX = m_pLabelName->width() + 20; int nPhoneWidth = (nWidth - 95)/2 - m_pLabelName->width(); m_pLabelCurPhone->setFixedWidth(nPhoneWidth); m_pLabelCurPhone->move(nX, 8); QFontMetrics fmPhone(m_pLabelCurPhone->font()); QString qsPhone = fmPhone.elidedText(m_pSession->currentPhone(), Qt::ElideRight, m_pLabelCurPhone->width()); m_pLabelCurPhone->setText(qsPhone); } RVolumeWidget::RVolumeWidget(RSession *pSession, QWidget *parent) : QWidget(parent), m_pSession(pSession), m_nVol(20), m_bIsMute(false) { setWindowFlags(Qt::FramelessWindowHint | Qt::Tool | Qt::WindowStaysOnTopHint); setFocusPolicy(Qt::NoFocus); initDlg(); } void RVolumeWidget::showEvent(QShowEvent * event) { if (!event) return; QWidget::showEvent(event); if (!m_bIsMute) m_pSilder->setValue(Mtc_CallGetSpkVol(m_pSession->sessId())); } void RVolumeWidget::hideEvent(QHideEvent *event) { if (!event) return; QWidget::hideEvent(event); } void RVolumeWidget::initDlg() { resize(15, 55); m_pSilder = new QSlider(this); m_pSilder->setCursor(Qt::PointingHandCursor); m_pSilder->setOrientation(Qt::Vertical); m_pSilder->setFocusPolicy(Qt::NoFocus); m_pSilder->setRange(0, 20); m_pSilder->setPageStep(5); m_pSilder->setStyleSheet(RStyle::sliderVerticalStyle()); m_pSilder->resize(15, 55); connect(m_pSilder, SIGNAL(valueChanged(int)), SLOT(slotSessVolumeChanged(int))); } void RVolumeWidget::setVolumeMute(bool bMute) { m_bIsMute = bMute; if (bMute) m_pSilder->setValue(0); else m_pSilder->setValue(m_nVol); } void RVolumeWidget::slotSessVolumeChanged(int vol) { if (vol == 0) { emit signalMuteCanceled(true); return; } emit signalMuteCanceled(false); Mtc_CallSetSpkVol(m_pSession->sessId(), vol); m_nVol = vol; }