diff --git a/ChangeLog b/ChangeLog index ad4a29fa120687c586aa4617694d9bfbd0ed2d65..56eeb070313e213e6b4a2597c5d9da848e67bff7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,43 +1,48 @@ -Laurielle LEA (18 July 2005) version 0.4 +Laurielle LEA (20 July 2005) version 0.4 +- Fix mute feature. +- Fix many bugs about line management. +- Add "Compose" item in trayicon menu. + +Jean-Philippe Barette-LaPierre (18 July 2005) version 0.4 - Bug fix if error was raised before setGUI. Laurielle LEA (18 July 2005) version 0.4 -- Fix incoming call sound notification -- Fix transfer if no busy line +- Fix incoming call sound notification. +- Fix transfer if no busy line. Laurielle LEA (15 July 2005) version 0.4 -- Fix configuration init +- Fix configuration init. Jerome OUFELLA (13 July 2005) version 0.4 - Fix tone. Jean-Philippe Barette-LaPierre (13 July 2005) version 0.4 -- Change "Manager" to a singleton +- Change "Manager" to a singleton. Laurielle LEA (13 July 2005) version 0.4 - Fix bug if network is not available. -- Fix apply skin feature +- Fix apply skin feature. Laurielle LEA (11 July 2005) version 0.4 - Check functions return. -- Remove unused mute functions +- Remove unused mute functions. Laurielle LEA (8 July 2005) version 0.4 -- Stop program when error opening skin file -- Divide toggle() of qtguimainwindow.cpp in small functions -- Add return test +- Stop program when error opening skin file. +- Divide toggle() of qtguimainwindow.cpp in small functions. +- Add return test. Laurielle LEA (7 July 2005) version 0.4 -- Cleanup audiortp.cpp -- Replace #define by global variable in codecDescriptor.cpp -- Set mutex of ringbuffer in the functions of RingBuffer object -- Divide run() of audiortp.cpp in 3 small functions -- Changed device static function in Manager for configurationpanel.ui.h -- Updated README +- Cleanup audiortp.cpp. +- Replace #define by global variable in codecDescriptor.cpp. +- Set mutex of ringbuffer in the functions of RingBuffer object. +- Divide run() of audiortp.cpp in 3 small functions. +- Changed device static function in Manager for configurationpanel.ui.h. +- Updated README. Jean-Philippe Barrette-LaPierre (6 July 2005) version 0.4 - Fixed all autotools problems. -- Updated all autotools scripts to use PortAudioCpp +- Updated all autotools scripts to use PortAudioCpp. Jean-Philippe Barrette-LaPierre (9 June 2005) version 0.4 - Added the autotools support. diff --git a/src/gui/qt/mydisplay.cpp b/src/gui/qt/mydisplay.cpp index 238da2463dfb95d4ce25b89126d61a8ab5c20672..9d3891125d86e9ca7e38078f522cdd578a7fcb46 100644 --- a/src/gui/qt/mydisplay.cpp +++ b/src/gui/qt/mydisplay.cpp @@ -216,7 +216,6 @@ MyDisplay::renderText (QPainter &painter, QFontMetrics &fm, QString &str) { if (fm.width(str) > (_centerImage.width() - 5)) { extra_chars = str.length() - cpl; x_offset = fm.width(str[0]) * extra_chars; - x_offset = fm.width(str[0]) * extra_chars; // Hack the scrolled string to inform the user backup_string[0] = str[extra_chars]; diff --git a/src/gui/qt/qtGUImainwindow.cpp b/src/gui/qt/qtGUImainwindow.cpp index 9ddfd5ee55bb49b46c1720f04abdc568114100d0..504834dba592208645326ea958aebc584d37ef0c 100644 --- a/src/gui/qt/qtGUImainwindow.cpp +++ b/src/gui/qt/qtGUImainwindow.cpp @@ -156,6 +156,7 @@ QtGUIMainWindow::QtGUIMainWindow (QWidget *parent, // Handle the tray icon system _mypop = new QPopupMenu(this); _mypop->insertItem ("Quit", qApp, SLOT(quit())); + _mypop->insertItem ("Compose", _urlinput, SLOT(show())); _trayicon = new MyTrayIcon(QPixmap( Skin::getPathPixmap(QString(PIXDIR), QString(TRAY_ICON))), @@ -368,13 +369,13 @@ QtGUIMainWindow::initButtons (void) { QToolTip::add(reduce_button, tr("Minimize window")); QToolTip::add(quit_button, tr("Close window (Ctrl+Q)")); QToolTip::add(phoneKey_msg, tr("Get your message")); - QToolTip::add(phoneKey_transf, tr("Call transfer")); + QToolTip::add(phoneKey_transf, tr("Call transfer (Ctrl+T)")); QToolTip::add(phoneKey_conf, tr("Conference")); QToolTip::add(addr_book_button, tr("Address book")); QToolTip::add(configuration_button, tr("Configuration tools (Ctrl+C)")); - QToolTip::add(hangup_button, tr("Hangup")); - QToolTip::add(dial_button, tr("Dial")); - QToolTip::add(mute_button, tr("Mute")); + QToolTip::add(hangup_button, tr("Hangup (Esc)")); + QToolTip::add(dial_button, tr("Dial (Enter)")); + QToolTip::add(mute_button, tr("Mute (Ctrl+M)")); QToolTip::add(dtmf_button, tr("Show DTMF _keypad (Ctrl+D)")); // Buttons position @@ -605,7 +606,9 @@ QtGUIMainWindow::putOnHoldBusyLine (int line) if (!getCall(line2id(line))->isRinging() and !getCall(line2id(line))->isProgressing()) { // Occurs when newly off-hook line replaces another one. _debug("On hold line %d [id=%d]\n", line, line2id(line)); - qt_onHoldCall(line2id(line)); + if (qt_onHoldCall(line2id(line)) != 1) { + return -1; + } } changeLineStatePixmap(line, ONHOLD); return 1; @@ -679,12 +682,17 @@ int QtGUIMainWindow::callIsOnHold(int id, int line, int busyLine) { changeLineStatePixmap(line, BUSY); - putOnHoldBusyLine(busyLine); + if (putOnHoldBusyLine(busyLine) == -1) { + Manager::instance().displayErrorText("Off-hold call failed !\n"); + return -1; + } if (getChooseLine()) { // If a free line is off-hook, set this line to free state setChooseLine(false); - changeLineStatePixmap(getChosenLine(), FREE); dialtone(false); + if (busyLine == -1) { + changeLineStatePixmap(getChosenLine(), FREE); + } } _lcd->setInFunction(true); if (qt_offHoldCall(id) != 1) { @@ -715,7 +723,16 @@ QtGUIMainWindow::clickOnFreeLine(int line, int busyLine) setChooseLine(true); setChosenLine(line); - putOnHoldBusyLine(busyLine); + if (!Manager::instance().getbCongestion()) { + putOnHoldBusyLine(busyLine); + } else { + // When a new line is off-hook -> hangup the previous line + // which runs congestion tone + changeLineStatePixmap(busyLine, FREE); + _lcd->clear(QString(ENTER_NUMBER_STATUS)); + Manager::instance().congestion(false); + phLines[busyLine]->setCallId(0); + } if (getPrevLine() != -1 and getPrevLine() != line and phLines[getPrevLine()]->isFree()) { changeLineStatePixmap(getPrevLine(), FREE); @@ -1029,7 +1046,7 @@ QtGUIMainWindow::qt_transferCall (short id) int i; if (id != -1) { const string to(_lcd->getTextBuffer().ascii());; - _debug("qt_transferCall: Transfer call %d to %s\n", id, to.data()); + _debug("qt_transferCall: Transfer call %d to %s number\n", id, to.data()); i = transferCall(id, to); getPhoneLine(id)->setStatus(QString(getCall(id)->getStatus())); return i; @@ -1181,24 +1198,27 @@ QtGUIMainWindow::hangupLine (void) int i; int line = getCurrentLine(); int id = phLines[line]->getCallId(); + setTransfer(false); - _debug("id = %d et line = %d\n", id, line); - if (Manager::instance().getbCongestion()) { + if (Manager::instance().getbCongestion() and line != -1) { // If congestion tone - if (qt_hangupCall(id)) { + if (id > 0 and qt_hangupCall(id)) { changeLineStatePixmap(line, FREE); _lcd->clear(QString(ENTER_NUMBER_STATUS)); Manager::instance().congestion(false); phLines[line]->setCallId(0); + } else if (id == 0) { + changeLineStatePixmap(line, FREE); } else { Manager::instance().displayErrorText("Hangup call failed !\n"); - } + } } else if ((i = isThereIncomingCall()) > 0){ // To refuse new incoming call _debug("Refuse call %d\n", id); if (qt_refuseCall(i)) { changeLineStatePixmap(id2line(i), FREE); + phLines[id2line(i)]->setCallId(0); } else { Manager::instance().displayErrorText("Refused call failed !\n"); } @@ -1227,7 +1247,7 @@ QtGUIMainWindow::hangupLine (void) dialtone(false); setChooseLine(false); setCurrentLine(-1); - } + } } /** @@ -1326,7 +1346,8 @@ QtGUIMainWindow::button_msg (void) { void QtGUIMainWindow::button_transfer (void) { int line_num = getCurrentLine(); - if (line_num != -1 and phLines[line_num]->isBusy()) { + if (line_num != -1 and phLines[line_num]->isBusy() + and !Manager::instance().getbCongestion()) { setTransfer(true); onHoldCall(line2id(getCurrentLine())); displayStatus(TRANSFER_STATUS); @@ -1379,7 +1400,7 @@ QtGUIMainWindow::button_mute(void) int id = line2id(getCurrentLine()); - if (Manager::instance().getNumberOfCalls() > 0) { + if (id != -1 and Manager::instance().getNumberOfCalls() > 0) { // If there is at least a pending call if(!isOn) { qt_muteOff(id); @@ -1553,6 +1574,7 @@ QtGUIMainWindow::stripSlot (void) { QRegExp rx(REG_EXPR); _lcd->appendText(_urlinput->url->text().remove(rx)); _urlinput->close(); + dial(); } /** @@ -1591,8 +1613,10 @@ QtGUIMainWindow::pressedKeySlot (int id) { callid = line2id(getCurrentLine()); if (callid != -1 and getCall(callid)->isBusy()) { - sendDtmf(callid, code); // pour envoyer DTMF + // To send DTMF during call, no display of them + sendDtmf(callid, code); } else if (Manager::instance().isDriverLoaded()) { + // To compose, phone number appears in the screen _lcd->appendText (code); } @@ -1618,10 +1642,15 @@ QtGUIMainWindow::pressedKeySlot (int id) { Manager::instance().getAudioDriver()->urgentRingBuffer().Put(buf_ctrl_vol, size * CHANNELS); - Manager::instance().getAudioDriver()->startStream(); - Manager::instance().getAudioDriver()->sleep(pulselen); - Manager::instance().getAudioDriver()->stopStream(); - Manager::instance().getAudioDriver()->urgentRingBuffer().flush(); + // We activate the stream if it's not active yet. + if (!Manager::instance().getAudioDriver()->isStreamActive()) { + Manager::instance().getAudioDriver()->startStream(); + Manager::instance().getAudioDriver()->sleep(pulselen); + Manager::instance().getAudioDriver()->stopStream(); + Manager::instance().getAudioDriver()->urgentRingBuffer().flush(); + } else { + Manager::instance().getAudioDriver()->sleep(pulselen); + } delete[] buf_ctrl_vol; } @@ -1767,36 +1796,46 @@ QtGUIMainWindow::keyPressEvent(QKeyEvent *e) { return; break; + // To clear the screen case Qt::Key_L: if (e->state() == Qt::ControlButton ) { _lcd->clear(); return; } break; + // To quit the application case Qt::Key_Q : if (e->state() == Qt::ControlButton ) { emit keyPressed(e->key()); return; } break; + + // To open input line case Qt::Key_O : if (e->state() == Qt::ControlButton ) { _urlinput->show(); return; } break; + + // To show window setup case Qt::Key_C : if (e->state() == Qt::ControlButton ) { configuration(); return; } break; + + // To show/hide dtmf-keypad case Qt::Key_D : if (e->state() == Qt::ControlButton ) { dtmfKeypad(); return; } break; + + // To set mode (text/num) case Qt::Key_Space: if (this->isInNumMode()) { this->setMode(TEXT_MODE); @@ -1806,6 +1845,22 @@ QtGUIMainWindow::keyPressEvent(QKeyEvent *e) { return; break; + // To put mute on/off the mike sound + case Qt::Key_M : + if (e->state() == Qt::ControlButton ) { + button_mute(); + return; + } + break; + + // To transfer call + case Qt::Key_T : + if (e->state() == Qt::ControlButton ) { + button_transfer(); + return; + } + break; + case Qt::Key_Alt: case Qt::Key_CapsLock: case Qt::Key_Shift: diff --git a/src/managerimpl.cpp b/src/managerimpl.cpp index 99a2bbcc734379c468d6dc98bdc25520e1be8a3e..8a0e9615a48c306fe0962ba072ca17471977f108 100644 --- a/src/managerimpl.cpp +++ b/src/managerimpl.cpp @@ -288,8 +288,9 @@ ManagerImpl::hangupCall (short id) Call* call; call = getCall(id); - if (call == NULL) + if (call == NULL) { return -1; + } call->setStatus(string(HUNGUP_STATUS)); call->setState(Hungup); _mutex.enterMutex(); diff --git a/src/sipvoiplink.cpp b/src/sipvoiplink.cpp index 2ca9965b9a610018b011d6fdc0dd7cd73cb0c0e2..300affeae41570f29b52e41a471fab828f1283ff 100644 --- a/src/sipvoiplink.cpp +++ b/src/sipvoiplink.cpp @@ -596,7 +596,8 @@ SipVoIPLink::getEvent (void) if (countReg <= 3) { setRegister(); countReg++; - } + } + break; case EXOSIP_OPTIONS_NEW: