--- /dev/null
+/*
+@version: 0.2
+@author: Sudheer K. <scifi.guy@hotmail.com>
+@license: GNU General Public License
+*/
+
+#include "configwindow.h"
+#include "ui_configwindow.h"
+#include "gconfutility.h"
+#include "dbusutility.h"
+#include <QDebug>
+#include <QMessageBox>
+
+ConfigWindow::ConfigWindow(QWidget *parent) :
+ QMainWindow(parent),
+ ui(new Ui::ConfigWindow)
+{
+ ui->setupUi(this);
+ gconfUtility = new GConfUtility();
+ loadValues();
+}
+
+ConfigWindow::~ConfigWindow()
+{
+ delete ui;
+ delete gconfUtility;
+ gconfUtility = 0;
+}
+
+void ConfigWindow::changeEvent(QEvent *e)
+{
+ QMainWindow::changeEvent(e);
+ switch (e->type()) {
+ case QEvent::LanguageChange:
+ ui->retranslateUi(this);
+ break;
+ default:
+ break;
+ }
+}
+
+void ConfigWindow::closeEvent(QCloseEvent *e)
+{
+ if (verifyConfigData()){
+ qDebug() << "Verification successful. Saving data to gconf";
+ saveConfigData();
+ e->accept();
+ }
+ else{
+ e->ignore();
+ }
+}
+
+void ConfigWindow::on_actionSave_triggered()
+{
+ if (verifyConfigData()){
+ qDebug() << "Verification successful. Saving data to gconf";
+ saveConfigData();
+ }
+
+}
+
+void ConfigWindow::on_actionReset_triggered()
+{
+ ui->checkBoxIntlCallRedirEnabled->setChecked(false);
+ ui->lineEditCallingCardNumber->clear();
+ ui->lineEditCountryCodesToExclude->clear();
+ ui->comboBoxDTMFFormat->clear();
+ ui->comboBoxDTMFSuffix->clear();
+ ui->spinBoxDTMFDelay->setValue(1);
+}
+
+void ConfigWindow::loadValues(){
+
+ bool isRoutingEnabled = gconfUtility->getGconfValueBoolean("routing_enabled");
+ QString strCallingCardNumber = gconfUtility->getGconfValueString("calling_card_number");
+ QString strNumbersToExclude = gconfUtility->getGconfValueString("numbers_to_exclude");
+ QString strDTMFFormat = gconfUtility->getGconfValueString("dtmf_format");
+ QString strDTMFSuffix = gconfUtility->getGconfValueString("dtmf_suffix");
+ int intDTMFDelay = gconfUtility->getGconfValueInteger("dtmf_delay");
+
+ ui->checkBoxIntlCallRedirEnabled->setChecked(isRoutingEnabled);
+ ui->lineEditCallingCardNumber->setText(strCallingCardNumber);
+ ui->lineEditCountryCodesToExclude->setText(strNumbersToExclude);
+ int intIndex = ui->comboBoxDTMFFormat->findText(strDTMFFormat);
+ ui->comboBoxDTMFFormat->setCurrentIndex(intIndex);
+ intIndex = ui->comboBoxDTMFSuffix->findText(strDTMFSuffix);
+ ui->comboBoxDTMFSuffix->setCurrentIndex(intIndex);
+ ui->spinBoxDTMFDelay->setValue(intDTMFDelay);
+
+ //Accept numbers only for Calling Card Number field
+ ui->lineEditCallingCardNumber->setValidator(new QRegExpValidator( QRegExp( "^-?\\d\\d*$"), this));
+
+ qDebug() << "Values loaded from GConf";
+
+}
+
+bool ConfigWindow::verifyConfigData(){
+ //Verify whether user-input matches application requirements
+ bool isRoutingEnabled = ui->checkBoxIntlCallRedirEnabled->isChecked();
+ QString strCallingCardNumber = ui->lineEditCallingCardNumber->text();
+ QString strNumbersToExclude = ui->lineEditCountryCodesToExclude->text();
+
+
+ QString strMessage = QString("");
+
+ if (isRoutingEnabled){
+ //Call Routing is checked. Now validate other values
+ if (strCallingCardNumber.isEmpty()){
+ strMessage.append("Enter a calling card number\n");
+ ui->lineEditCallingCardNumber->setFocus();
+ }
+
+ if (strCallingCardNumber.startsWith("+")||strCallingCardNumber.startsWith("00")){
+ strMessage.append("Calling card number must be a local number. \nPlease remove the international dialing code.\n");
+ ui->lineEditCallingCardNumber->setFocus();
+ }
+
+ }
+
+ if (!strMessage.isEmpty()){
+ QMessageBox::warning(this,"Invalid Data",strMessage);
+ return false;
+ }
+ else{
+ return true;
+ }
+}
+
+void ConfigWindow::saveConfigData(){
+
+ bool isRoutingEnabled = ui->checkBoxIntlCallRedirEnabled->isChecked();
+ QString strCallingCardNumber = ui->lineEditCallingCardNumber->text();
+ QString strNumbersToExclude = ui->lineEditCountryCodesToExclude->text();
+
+ QString strDTMFFormat = ui->comboBoxDTMFFormat->currentText();
+ QString strDTMFSuffix = ui->comboBoxDTMFSuffix->currentText();
+ int intDTMFDelay = ui->spinBoxDTMFDelay->value();
+
+
+ gconfUtility->setGconfValueBoolean("routing_enabled",isRoutingEnabled);
+
+ if (!strCallingCardNumber.isEmpty()){
+ gconfUtility->setGconfValueString("calling_card_number",strCallingCardNumber);
+ }
+
+ if (!strNumbersToExclude.isEmpty()){
+ strNumbersToExclude = strNumbersToExclude.remove(" ");
+ strNumbersToExclude = strNumbersToExclude.remove("\t");
+ strNumbersToExclude = strNumbersToExclude.replace("\n",",");
+ }
+
+ gconfUtility->setGconfValueString("numbers_to_exclude",strNumbersToExclude);
+ gconfUtility->setGconfValueInteger("dtmf_delay",intDTMFDelay);
+ gconfUtility->setGconfValueString("dtmf_format",strDTMFFormat);
+ gconfUtility->setGconfValueString("dtmf_suffix",strDTMFSuffix);
+
+ DbusUtility dbusUtility = DbusUtility();
+
+ qDebug() << "Settings updated";
+ dbusUtility.displayNotification("VICaR: Settings Updated.");
+
+ if (isRoutingEnabled){
+ qDebug() << "Enable call routing immediately";
+ dbusUtility.sendSignal(APPLICATION_DBUS_PATH,APPLICATION_DBUS_INTERFACE,"startOutgoingCallMonitor");
+ }
+ else{
+ qDebug() << "Disable call routing immediately";
+ dbusUtility.sendSignal(APPLICATION_DBUS_PATH,APPLICATION_DBUS_INTERFACE,"stopOutgoingCallMonitor");
+ }
+}
+