diff --git a/fscomm/call.cpp b/fscomm/call.cpp index 8bcd47deea..f177bc3278 100644 --- a/fscomm/call.cpp +++ b/fscomm/call.cpp @@ -28,6 +28,7 @@ */ #include "call.h" +#include #include Call::Call() @@ -67,3 +68,13 @@ switch_status_t Call::toggleRecord(bool startRecord) return status; } + +void Call::sendDTMF(QString digit) +{ + QString result; + QString dtmf_string = QString("dtmf %1").arg(digit); + if (g_FSHost.sendCmd("pa", dtmf_string.toAscii(), &result) == SWITCH_STATUS_FALSE) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not send DTMF digit %s on call[%s]", digit.toAscii().data(), _uuid.toAscii().data()); + QMessageBox::critical(0, QWidget::tr("DTMF Error"), QWidget::tr("There was an error sending DTMF, please report this bug."), QMessageBox::Ok); + } +} diff --git a/fscomm/call.h b/fscomm/call.h index 4e6aeb682d..544882e799 100644 --- a/fscomm/call.h +++ b/fscomm/call.h @@ -63,6 +63,7 @@ public: void setActive(bool isActive) { _isActive = isActive; } bool isActive() { return _isActive == true; } switch_status_t toggleRecord(bool); + void sendDTMF(QString digit); private: int _call_id; diff --git a/fscomm/mainwindow.cpp b/fscomm/mainwindow.cpp index c58fbd5819..d51327e919 100644 --- a/fscomm/mainwindow.cpp +++ b/fscomm/mainwindow.cpp @@ -40,6 +40,11 @@ MainWindow::MainWindow(QWidget *parent) : { ui->setupUi(this); + /* Setup the taskbar icon */ + sysTray = new QSystemTrayIcon(QIcon(":/images/taskbar_icon"), this); + sysTray->setToolTip(tr("FSComm")); + + /* Connect DTMF buttons */ dialpadMapper = new QSignalMapper(this); connect(ui->dtmf0Btn, SIGNAL(clicked()), dialpadMapper, SLOT(map())); connect(ui->dtmf1Btn, SIGNAL(clicked()), dialpadMapper, SLOT(map())); @@ -73,8 +78,9 @@ MainWindow::MainWindow(QWidget *parent) : dialpadMapper->setMapping(ui->dtmfDBtn, QString("D")); dialpadMapper->setMapping(ui->dtmfAstBtn, QString("*")); dialpadMapper->setMapping(ui->dtmfPoundBtn, QString("#")); - connect(dialpadMapper, SIGNAL(mapped(QString)), this, SLOT(dialDTMF(QString))); + connect(dialpadMapper, SIGNAL(mapped(QString)), this, SLOT(sendDTMF(QString))); + /* Connect events related to FreeSWITCH */ connect(&g_FSHost, SIGNAL(ready()),this, SLOT(fshostReady())); connect(&g_FSHost, SIGNAL(ringing(QSharedPointer)), this, SLOT(ringing(QSharedPointer))); connect(&g_FSHost, SIGNAL(answered(QSharedPointer)), this, SLOT(answered(QSharedPointer))); @@ -86,6 +92,7 @@ MainWindow::MainWindow(QWidget *parent) : connect(&g_FSHost, SIGNAL(delAccount(QSharedPointer)), this, SLOT(accountDel(QSharedPointer))); /*connect(&g_FSHost, SIGNAL(coreLoadingError(QString)), this, SLOT(coreLoadingError(QString)));*/ + /* Connect call commands */ connect(ui->newCallBtn, SIGNAL(clicked()), this, SLOT(makeCall())); connect(ui->answerBtn, SIGNAL(clicked()), this, SLOT(paAnswer())); connect(ui->hangupBtn, SIGNAL(clicked()), this, SLOT(paHangup())); @@ -95,6 +102,7 @@ MainWindow::MainWindow(QWidget *parent) : connect(ui->action_Exit, SIGNAL(triggered()), this, SLOT(close())); connect(ui->actionAbout, SIGNAL(triggered()), this, SLOT(showAbout())); connect(ui->actionSetDefaultAccount, SIGNAL(triggered(bool)), this, SLOT(setDefaultAccount())); + connect(sysTray, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(sysTrayActivated(QSystemTrayIcon::ActivationReason))); /* Set the context menus */ ui->tableAccounts->addAction(ui->actionSetDefaultAccount); @@ -186,13 +194,9 @@ void MainWindow::accountStateChanged(QSharedPointer acc) } } -void MainWindow::dialDTMF(QString dtmf) +void MainWindow::sendDTMF(QString dtmf) { - QString result; - QString dtmf_string = QString("dtmf %1").arg(dtmf); - if (g_FSHost.sendCmd("pa", dtmf_string.toAscii(), &result) == SWITCH_STATUS_FALSE) { - ui->textEdit->setText("Error sending that command"); - } + g_FSHost.getCurrentActiveCall().data()->sendDTMF(dtmf); } void MainWindow::callListDoubleClick(QListWidgetItem *item) @@ -228,6 +232,8 @@ void MainWindow::fshostReady() ui->newCallBtn->setEnabled(true); ui->textEdit->setEnabled(true); ui->textEdit->setText("Ready to dial and receive calls!"); + sysTray->show(); + sysTray->showMessage(tr("Status"), tr("FSComm has initialized!"), QSystemTrayIcon::Information, 5000); } void MainWindow::paAnswer() @@ -464,3 +470,23 @@ void MainWindow::showAbout() "

Compiled FSComm version: %1" "

%2").arg(SWITCH_VERSION_FULL, result)); } + +void MainWindow::sysTrayActivated(QSystemTrayIcon::ActivationReason reason) +{ + switch(reason) + { + case QSystemTrayIcon::Trigger: + { + if (this->isVisible()) + this->hide(); + else { + this->show(); + this->activateWindow(); + this->raise(); + } + break; + } + default: + break; + } +} diff --git a/fscomm/mainwindow.h b/fscomm/mainwindow.h index a895c0876f..ea9c212454 100644 --- a/fscomm/mainwindow.h +++ b/fscomm/mainwindow.h @@ -34,6 +34,7 @@ #include #include #include +#include #include #include #include @@ -44,7 +45,6 @@ namespace Ui { class MainWindow; } - class MainWindow : public QMainWindow { Q_OBJECT public: @@ -61,7 +61,7 @@ private slots: void showAbout(); void prefTriggered(); void coreLoadingError(QString); - void dialDTMF(QString); + void sendDTMF(QString); void callListDoubleClick(QListWidgetItem *); void makeCall(); void fshostReady(); @@ -78,11 +78,13 @@ private slots: void accountAdd(QSharedPointer); void accountDel(QSharedPointer); void accountStateChanged(QSharedPointer); + void sysTrayActivated(QSystemTrayIcon::ActivationReason reason); private: Ui::MainWindow *ui; QSignalMapper *dialpadMapper; PrefDialog *preferences; + QSystemTrayIcon *sysTray; }; #endif // MAINWINDOW_H diff --git a/fscomm/resources.qrc b/fscomm/resources.qrc index 483fa2528d..5ba703c47f 100644 --- a/fscomm/resources.qrc +++ b/fscomm/resources.qrc @@ -5,6 +5,7 @@ resources/pref_audio.gif resources/pref_general.jpg resources/pref_accounts.jpg + resources/taskbar_icon.png conf/freeswitch.xml diff --git a/fscomm/resources/taskbar_icon.png b/fscomm/resources/taskbar_icon.png new file mode 100644 index 0000000000..1705e6be88 Binary files /dev/null and b/fscomm/resources/taskbar_icon.png differ