Skip to content
Snippets Groups Projects
Select Git revision
  • 9c44de5dece2113883f761c2dfbc1f6e3c238357
  • master default protected
  • release/202005
  • release/202001
  • release/201912
  • release/201911
  • release/releaseWindowsTestOne
  • release/windowsReleaseTest
  • release/releaseTest
  • release/releaseWindowsTest
  • release/201910
  • release/qt/201910
  • release/windows-test/201910
  • release/201908
  • release/201906
  • release/201905
  • release/201904
  • release/201903
  • release/201902
  • release/201901
  • release/201812
  • 4.0.0
  • 2.2.0
  • 2.1.0
  • 2.0.1
  • 2.0.0
  • 1.4.1
  • 1.4.0
  • 1.3.0
  • 1.2.0
  • 1.1.0
31 results

ConfigDialog.cpp

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    ConfigDialog.cpp 20.86 KiB
    #include <QtGui>
    #include <QtCore>
    #include <iostream>
    #include <stdarg.h>
    #include "sflphone_const.h"
    #include "metatypes.h"
    #include "ConfigDialog.h"
    #include "configurationmanager_interface_singleton.h"
    
    using namespace std;
    
    
    ConfigurationDialog::ConfigurationDialog(SFLPhone *parent) : QDialog(parent)
    {
    	//configuration qt designer
    	setupUi(this);
    	
    	//configuration complémentaire
    	QStyle * style = QApplication::style();
    	errorWindow = new QErrorMessage(this);
    	codecPayloads = new MapStringString();
    	horizontalSlider_historyCapacity->setMaximum(MAX_HISTORY_CAPACITY);
    	label_WarningSIP->setVisible(false);
    	for(int i = 0 ; i < list_options->count() ; i++)
    	{
    		list_options->item(i)->setTextAlignment(Qt::AlignHCenter);
    	}
    	button_accountUp->setIcon(style->standardIcon(QStyle::SP_ArrowUp));
    	button_accountDown->setIcon(style->standardIcon(QStyle::SP_ArrowDown));
    	toolButton_codecUp->setIcon(style->standardIcon(QStyle::SP_ArrowUp));
    	toolButton_codecDown->setIcon(style->standardIcon(QStyle::SP_ArrowDown));
    	tableWidget_codecs->verticalHeader()->hide();
    	tableWidget_codecs->setSelectionBehavior(QAbstractItemView::SelectRows);
    
    
    	//TODO ajouter les items de l'interface audio ici avec les constantes
    	
    	//configuration dbus
    	registerCommTypes();
    
    	
    	
    	
    	
    	loadOptions();
    }
    
    ConfigurationDialog::~ConfigurationDialog()
    {
    	delete accountList;
    	delete errorWindow;
    	delete codecPayloads;
    }
    
    void ConfigurationDialog::loadOptions()
    {
    	ConfigurationManagerInterface & daemon = ConfigurationManagerInterfaceSingleton::getInstance();
    	
    	////////////////////////
    	////General settings////
    	////////////////////////
    	
    	//Call history settings
    	spinBox_historyCapacity->setValue(daemon.getMaxCalls());
    	
    	//SIP port settings
    	int sipPort = daemon.getSipPort();
    	if(sipPort<1025){
    		spinBox_SIPPort->setMinimum(sipPort);
    		label_WarningSIP->setText("Attention : le port SIP doit être supérieur à 1024 !");
    		label_WarningSIP->setVisible(true);
    	}
    	if(sipPort>65535){
    		spinBox_SIPPort->setMaximum(sipPort);
    		label_WarningSIP->setText("Attention : le port SIP doit être inférieur à 65536 !");
    		label_WarningSIP->setVisible(true);
    	}
    	spinBox_SIPPort->setValue(daemon.getSipPort());
    	
    	////////////////////////
    	////Display settings////
    	////////////////////////
    
    	//Notification settings
    	checkBox1_notifOnCalls->setCheckState(daemon.getNotify() ? Qt::Checked : Qt::Unchecked);
    	checkBox2_notifOnMessages->setCheckState(daemon.getMailNotify() ? Qt::Checked : Qt::Unchecked);
    	
    	//Window display settings
    	checkBox1_displayOnStart->setCheckState(daemon.isStartHidden() ? Qt::Unchecked : Qt::Checked);
    	checkBox2_displayOnCalls->setCheckState(daemon.popupMode() ? Qt::Checked : Qt::Unchecked);
    	
    	/////////////////////////
    	////Accounts settings////
    	/////////////////////////
    	
    	loadAccountList();
    
    	//Stun settings
    	checkBox_stun->setCheckState(daemon.isStunEnabled() ? Qt::Checked : Qt::Unchecked);
    	lineEdit_stun->setText(QString(daemon.getStunServer()));
    	
    	//////////////////////
    	////Audio settings////
    	//////////////////////
    	
    	//Audio Interface settings
    	comboBox_interface->setCurrentIndex(daemon.getAudioManager());
    	stackedWidget_interfaceSpecificSettings->setCurrentIndex(daemon.getAudioManager());
    	
    	//ringtones settings
    	checkBox_ringtones->setCheckState(daemon.isRingtoneEnabled() ? Qt::Checked : Qt::Unchecked);
    	//TODO widget choix de sonnerie
    	//widget_nomSonnerie->setText(daemon.getRingtoneChoice());
    	
    	//codecs settings
    	loadCodecs();
    
    	//
    	//alsa settings
    	comboBox1_alsaPlugin->clear();
    	QStringList pluginList = daemon.getOutputAudioPluginList();
    	comboBox1_alsaPlugin->addItems(pluginList);
    	comboBox1_alsaPlugin->setCurrentIndex(comboBox1_alsaPlugin->findText(daemon.getCurrentAudioOutputPlugin()));
    	
    	qDebug() << "avant daemon.getCurrentAudioDevicesIndex();";
    	QStringList devices = daemon.getCurrentAudioDevicesIndex();
    	qDebug() << "apres daemon.getCurrentAudioDevicesIndex();";
    
    	int inputDevice = devices[1].toInt();
    	comboBox2_in->clear();
    	QStringList inputDeviceList = daemon.getAudioInputDeviceList();
    	comboBox2_in->addItems(inputDeviceList);
    	comboBox2_in->setCurrentIndex(inputDevice);
    	
    	int outputDevice = devices[0].toInt();
    	comboBox3_out->clear();
    	QStringList outputDeviceList = daemon.getAudioOutputDeviceList();
    	comboBox3_out->addItems(inputDeviceList);
    	comboBox3_out->setCurrentIndex(outputDevice);
    	
    	//pulseaudio settings
    	checkBox_pulseAudioVolumeAlter->setCheckState(daemon.getPulseAppVolumeControl() ? Qt::Checked : Qt::Unchecked);
    	
    	
    }
    
    
    void ConfigurationDialog::saveOptions()
    {
    	ConfigurationManagerInterface & daemon = ConfigurationManagerInterfaceSingleton::getInstance();
    	
    	////////////////////////
    	////General settings////
    	////////////////////////
    	
    	//Call history settings
    	daemon.setMaxCalls(spinBox_historyCapacity->value());
    	
    	//SIP port settings
    	int sipPort = spinBox_SIPPort->value();
    	
    	if(sipPort<1025){
    		errorWindow->showMessage("Attention : le port SIP doit être supérieur à 1024 !");
    	}
    	if(sipPort>65535){
    		errorWindow->showMessage("Attention : le port SIP doit être inférieur à 65536 !");
    	}
    	daemon.setSipPort(sipPort);
    	
    	////////////////////////
    	////Display settings////
    	////////////////////////
    
    	//Notification settings
    	if(checkBox1_notifOnCalls->checkState() != (daemon.getNotify() ? Qt::Checked : Qt::Unchecked)) daemon.setNotify();
    	if(checkBox2_notifOnMessages->checkState() != (daemon.getMailNotify() ? Qt::Checked : Qt::Unchecked)) daemon.setMailNotify();
    	
    	//Window display settings
    	//WARNING états inversés
    	if(checkBox1_displayOnStart->checkState() != (daemon.isStartHidden() ? Qt::Unchecked : Qt::Checked)) daemon.startHidden();
    	if(checkBox2_displayOnCalls->checkState() != (daemon.popupMode() ? Qt::Checked : Qt::Unchecked)) daemon.switchPopupMode();
    	
    	/////////////////////////
    	////Accounts settings////
    	/////////////////////////
    	
    	saveAccountList();
    
    	//Stun settings
    	if(checkBox_stun->checkState() != (daemon.isStunEnabled() ? Qt::Checked : Qt::Unchecked)) daemon.enableStun();
    	daemon.setStunServer(lineEdit_stun->text());
    
    	//////////////////////
    	////Audio settings////
    	//////////////////////
    	
    	//Audio Interface settings
    	qDebug() << "setting audio manager";
    	int manager = comboBox_interface->currentIndex();
    	daemon.setAudioManager(manager);
    	
    	//ringtones settings
    	qDebug() << "setting ringtone options";
    	if(checkBox_ringtones->checkState() != (daemon.isRingtoneEnabled() ? Qt::Checked : Qt::Unchecked)) daemon.ringtoneEnabled();
    	//TODO widget choix de sonnerie
    	//daemon.getRingtoneChoice(widget_nomSonnerie->text());
    	
    	//codecs settings
    	qDebug() << "saving codecs";
    	saveCodecs();
    
    	//alsa settings
    	if(manager == ALSA)
    	{
    		qDebug() << "setting alsa settings";
    		daemon.setOutputAudioPlugin(comboBox1_alsaPlugin->currentText());
    		daemon.setAudioInputDevice(comboBox2_in->currentIndex());
    		daemon.setAudioOutputDevice(comboBox3_out->currentIndex());
    	}
    	//pulseaudio settings
    	if(manager == PULSEAUDIO)
    	{
    		qDebug() << "setting pulseaudio settings";
    		if(checkBox_pulseAudioVolumeAlter->checkState() != (daemon.getPulseAppVolumeControl() ? Qt::Checked : Qt::Unchecked)) daemon.setPulseAppVolumeControl();
    	}
    }
    
    
    void ConfigurationDialog::loadAccountList()
    {
    	//ask for the list of accounts ids to the daemon
    	QStringList accountIds = ConfigurationManagerInterfaceSingleton::getInstance().getAccountList().value();
    	//create the AccountList object with the ids
    	accountList = new AccountList(accountIds);
    	//initialize the QListWidget object with the AccountList
    	listWidget_accountList->clear();
    	for (int i = 0; i < accountList->size(); ++i){
    		listWidget_accountList->addItem((*accountList)[i].getItem());
    	}
    	if (listWidget_accountList->count() > 0) 
    		listWidget_accountList->setCurrentRow(0);
    	else 
    		frame2_editAccounts->setEnabled(false);
    }
    
    void ConfigurationDialog::saveAccountList()
    {
    	//save the account being edited
    	if(listWidget_accountList->currentItem())
    		saveAccount(listWidget_accountList->currentItem());
    	//get the daemon instance
    	ConfigurationManagerInterface & daemon = ConfigurationManagerInterfaceSingleton::getInstance();
    	//ask for the list of accounts ids to the daemon
    	QStringList accountIds= QStringList(daemon.getAccountList().value());
    	//create or update each account from accountList
    	for (int i = 0; i < accountList->size(); i++){
    		Account & current = (*accountList)[i];
    		QString currentId;
    		//if the account has no instanciated id, it has just been created in the client
    		if(current.isNew())
    		{
    			currentId = QString(daemon.addAccount(current.getAccountDetails()));
    		}
    		//if the account has an instanciated id but it's not in daemon
    		else{
    			if(! accountIds.contains(current.getAccountId()))
    			{
    				qDebug() << "The account with id " << current.getAccountId() << " doesn't exist. It might have been removed by another SFLPhone client.";
    				currentId = QString("");
    			}
    			else
    			{
    				daemon.setAccountDetails(current.getAccountId(), current.getAccountDetails());
    				currentId = QString(current.getAccountId());
    			}
    		}
    		daemon.sendRegister(currentId, (current.getItem()->checkState() == Qt::Checked) ? 1 : 0 );
    	}
    	//remove accounts that are in the daemon but not in the client
    	for (int i = 0; i < accountIds.size(); i++)
    		if(! accountList->getAccountById(accountIds[i])){
    			qDebug() << "remove account " << accountIds[i];
    			daemon.removeAccount(accountIds[i]);
    		}
    }
    
    void ConfigurationDialog::loadAccount(QListWidgetItem * item)
    {
    	if(! item )  {  qDebug() << "Attempting to load details of an account from a NULL item";  return;  }
    
    	Account * account = accountList->getAccountByItem(item);
    	if(! account )  {  qDebug() << "Attempting to load details of an unexisting account";  return;  }
    
    	edit1_alias->setText( account->getAccountDetail(*(new QString(ACCOUNT_ALIAS))));
    	int protocoleIndex = getProtocoleIndex(account->getAccountDetail(*(new QString(ACCOUNT_TYPE))));
    	edit2_protocol->setCurrentIndex( (protocoleIndex < 0) ? 0 : protocoleIndex );
    	edit3_server->setText( account->getAccountDetail(*(new QString(ACCOUNT_HOSTNAME))));
    	edit4_user->setText( account->getAccountDetail(*(new QString(ACCOUNT_USERNAME))));
    	edit5_password->setText( account->getAccountDetail(*(new QString(ACCOUNT_PASSWORD))));
    	edit6_mailbox->setText( account->getAccountDetail(*(new QString(ACCOUNT_MAILBOX))));
    	QString status = account->getAccountDetail(*(new QString(ACCOUNT_STATUS)));
    	edit7_state->setText( "<FONT COLOR=\"" + account->getStateColorName() + "\">" + status + "</FONT>" );
    	//edit7_Etat->setTextColor( account->getStateColor );
    }
    
    
    void ConfigurationDialog::saveAccount(QListWidgetItem * item)
    {
    	if(! item)  { qDebug() << "Attempting to save details of an account from a NULL item"; return; }
    	
    	Account * account = accountList->getAccountByItem(item);
    	if(! account)  {  qDebug() << "Attempting to save details of an unexisting account : " << item->text(); return;  }
    
    	account->setAccountDetail(ACCOUNT_ALIAS, edit1_alias->text());
    	account->setAccountDetail(ACCOUNT_TYPE, getIndexProtocole(edit2_protocol->currentIndex()));
    	account->setAccountDetail(ACCOUNT_HOSTNAME, edit3_server->text());
    	account->setAccountDetail(ACCOUNT_USERNAME, edit4_user->text());
    	account->setAccountDetail(ACCOUNT_PASSWORD, edit5_password->text());
    	account->setAccountDetail(ACCOUNT_MAILBOX, edit6_mailbox->text());
    	
    }
    
    
    void ConfigurationDialog::loadCodecs()
    {
    	ConfigurationManagerInterface & daemon = ConfigurationManagerInterfaceSingleton::getInstance();
    	QStringList codecList = daemon.getCodecList();
    	QStringList activeCodecList = daemon.getActiveCodecList();
    	qDebug() << codecList;
    	qDebug() << activeCodecList;
    	tableWidget_codecs->setRowCount(0);
    	codecPayloads->clear();
    	for(int i=0 ; i<codecList.size() ; i++)
    	{
    		bool ok;
    		qDebug() << codecList[i];
    		QString payloadStr = QString(codecList[i]);
    		int payload = payloadStr.toInt(&ok);
    		if(!ok)	
    			qDebug() << "The codec's payload sent by the daemon is not a number : " << codecList[i];
    		else
    		{
    			QStringList details = daemon.getCodecDetails(payload);
    			tableWidget_codecs->insertRow(i);
    			QTableWidgetItem * headerItem = new QTableWidgetItem("");
    			tableWidget_codecs->setVerticalHeaderItem (i, headerItem);
    			//headerItem->setVisible(false);
    			tableWidget_codecs->setItem(i,0,new QTableWidgetItem(""));
    			tableWidget_codecs->setItem(i,1,new QTableWidgetItem(details[CODEC_NAME]));
    			//qDebug() << "tableWidget_Codecs->itemAt(" << i << "," << 2 << ")->setText(" << details[CODEC_NAME] << ");";
    			//tableWidget_Codecs->item(i,2)->setText(details[CODEC_NAME]);
    			tableWidget_codecs->setItem(i,2,new QTableWidgetItem(details[CODEC_SAMPLE_RATE]));
    			tableWidget_codecs->setItem(i,3,new QTableWidgetItem(details[CODEC_BIT_RATE]));
    			tableWidget_codecs->setItem(i,4,new QTableWidgetItem(details[CODEC_BANDWIDTH]));
    			tableWidget_codecs->item(i,0)->setFlags(Qt::ItemIsSelectable|Qt::ItemIsUserCheckable|Qt::ItemIsEnabled);
    			tableWidget_codecs->item(i,0)->setCheckState(activeCodecList.contains(codecList[i]) ? Qt::Checked : Qt::Unchecked);
    			tableWidget_codecs->item(i,1)->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
    			tableWidget_codecs->item(i,2)->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
    			tableWidget_codecs->item(i,3)->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
    			tableWidget_codecs->item(i,4)->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
    			(*codecPayloads)[details[CODEC_NAME]] = payloadStr;
    			qDebug() << "Added to codecs : " << payloadStr << " , " << details[CODEC_NAME];
    		}
    	}
    	tableWidget_codecs->resizeColumnsToContents();
    	tableWidget_codecs->resizeRowsToContents();
    }
    
    
    void ConfigurationDialog::saveCodecs()
    {
    	ConfigurationManagerInterface & daemon = ConfigurationManagerInterfaceSingleton::getInstance();
    	QStringList activeCodecs;
    	for(int i = 0 ; i < tableWidget_codecs->rowCount() ; i++)
    	{
    		//qDebug() << "Checked if active : " << tableWidget_Codecs->item(i,1)->text();
    		if(tableWidget_codecs->item(i,0)->checkState() == Qt::Checked)
    		{
    			//qDebug() << "Added to activeCodecs : " << tableWidget_Codecs->item(i,1)->text();
    			activeCodecs << (*codecPayloads)[tableWidget_codecs->item(i,1)->text()];
    		}
    	}
    	qDebug() << "Calling setActiveCodecList with list : " << activeCodecs ;
    	daemon.setActiveCodecList(activeCodecs);
    }
    
    void ConfigurationDialog::setPage(int page)
    {
    	stackedWidget_options->setCurrentIndex(page);
    	list_options->setCurrentRow(page);
    }
    
    void ConfigurationDialog::updateAccountListCommands()
    {
    	bool buttonsEnabled[4] = {true,true,true,true};
    	if(! listWidget_accountList->currentItem())
    	{
    		buttonsEnabled[0] = false;
    		buttonsEnabled[1] = false;
    		buttonsEnabled[3] = false;
    	}
    	else if(listWidget_accountList->currentRow() == 0)
    	{
    		buttonsEnabled[0] = false;
    	}
    	else if(listWidget_accountList->currentRow() == listWidget_accountList->count() - 1)
    	{
    		buttonsEnabled[1] = false;
    	}
    	button_accountUp->setEnabled(buttonsEnabled[0]);
    	button_accountDown->setEnabled(buttonsEnabled[1]);
    	button_accountAdd->setEnabled(buttonsEnabled[2]);
    	button_accountRemove->setEnabled(buttonsEnabled[3]);
    }
    
    void ConfigurationDialog::updateCodecListCommands()
    {
    	bool buttonsEnabled[2] = {true,true};
    	if(! tableWidget_codecs->currentItem())
    	{
    		buttonsEnabled[0] = false;
    		buttonsEnabled[1] = false;
    	}
    	else if(tableWidget_codecs->currentRow() == 0)
    	{
    		buttonsEnabled[0] = false;
    	}
    	else if(tableWidget_codecs->currentRow() == tableWidget_codecs->rowCount() - 1)
    	{
    		buttonsEnabled[1] = false;
    	}
    	toolButton_codecUp->setEnabled(buttonsEnabled[0]);
    	toolButton_codecDown->setEnabled(buttonsEnabled[1]);
    }
    
    void ConfigurationDialog::on_edit1_alias_textChanged(const QString & text)
    {
    	listWidget_accountList->currentItem()->setText(text);
    }
    
    void ConfigurationDialog::on_spinBox_SIPPort_valueChanged ( int value )
    {
    	if(value>1024 && value<65536)
    		label_WarningSIP->setVisible(false);
    	else
    		label_WarningSIP->setVisible(true);
    }
    
    void ConfigurationDialog::on_listWidget_codecs_currentItemChanged ( QListWidgetItem * current, QListWidgetItem * previous )
    {
    	qDebug() << "on_listWidget_codecs_currentItemChanged";
    	updateCodecListCommands();
    }
    
    void ConfigurationDialog::on_toolButton_codecUp_clicked()
    {
    	qDebug() << "on_toolButton_codecUp_clicked";
    	int currentCol = tableWidget_codecs->currentColumn();
    	int currentRow = tableWidget_codecs->currentRow();
    	int nbCol = tableWidget_codecs->columnCount();
    	for(int i = 0 ; i < nbCol ; i++)
    	{
    		QTableWidgetItem * item1 = tableWidget_codecs->takeItem(currentRow, i);
    		QTableWidgetItem * item2 = tableWidget_codecs->takeItem(currentRow - 1, i);
    		tableWidget_codecs->setItem(currentRow - 1, i , item1);
    		tableWidget_codecs->setItem(currentRow, i , item2);
    	}
    	tableWidget_codecs->setCurrentCell(currentRow - 1, currentCol);
    }
    
    void ConfigurationDialog::on_toolButton_codecDown_clicked()
    {
    	qDebug() << "on_toolButton_codecUp_clicked";
    	int currentCol = tableWidget_codecs->currentColumn();
    	int currentRow = tableWidget_codecs->currentRow();
    	int nbCol = tableWidget_codecs->columnCount();
    	for(int i = 0 ; i < nbCol ; i++)
    	{
    		QTableWidgetItem * item1 = tableWidget_codecs->takeItem(currentRow, i);
    		QTableWidgetItem * item2 = tableWidget_codecs->takeItem(currentRow + 1, i);
    		tableWidget_codecs->setItem(currentRow + 1, i , item1);
    		tableWidget_codecs->setItem(currentRow, i , item2);
    	}
    	tableWidget_codecs->setCurrentCell(currentRow + 1, currentCol);
    }
    
    void ConfigurationDialog::on_listWidget_accountList_currentItemChanged ( QListWidgetItem * current, QListWidgetItem * previous )
    {
    	qDebug() << "on_listWidget_accountList_currentItemChanged";
    	if(previous)
    		saveAccount(previous);
    	if(current)
    		loadAccount(current);
    	updateAccountListCommands();
    }
    
    void ConfigurationDialog::on_button_accountUp_clicked()
    {
    	int currentRow = listWidget_accountList->currentRow();
    	QListWidgetItem * item = listWidget_accountList->takeItem(currentRow);
    	listWidget_accountList->insertItem(currentRow - 1 , item);
    	listWidget_accountList->setCurrentItem(item);
    }
    
    void ConfigurationDialog::on_button_accountDown_clicked()
    {
    	int currentRow = listWidget_accountList->currentRow();
    	QListWidgetItem * item = listWidget_accountList->takeItem(currentRow);
    	listWidget_accountList->insertItem(currentRow + 1 , item);
    	listWidget_accountList->setCurrentItem(item);
    }
    
    void ConfigurationDialog::on_button_accountAdd_clicked()
    {
    	QString itemName = QInputDialog::getText(this, "New account", "Enter new account's alias");
    	itemName = itemName.simplified();
    	if (!itemName.isEmpty()) {
    		QListWidgetItem * item = accountList->addAccount(itemName);
         
    		//TODO verifier que addItem set bien le parent
    		listWidget_accountList->addItem(item);
    		int r = listWidget_accountList->count() - 1;
    		listWidget_accountList->setCurrentRow(r);
    		frame2_editAccounts->setEnabled(true);
    	}
    }
    
    void ConfigurationDialog::on_button_accountRemove_clicked()
    {
    	int r = listWidget_accountList->currentRow();
    	QListWidgetItem * item = listWidget_accountList->takeItem(r);
    	accountList->removeAccount(item);
    	listWidget_accountList->setCurrentRow( (r >= listWidget_accountList->count()) ? r-1 : r );
    }
    
    
    void ConfigurationDialog::on_buttonBoxDialog_clicked(QAbstractButton * button)
    {
    	if(buttonBoxDialog->standardButton(button) == QDialogButtonBox::Apply)
    	{
    		this->saveOptions();
    		this->loadOptions();
    	}
    	if(buttonBoxDialog->standardButton(button) == QDialogButtonBox::RestoreDefaults)
    	{
    		this->loadOptions();
    	}
    	if(buttonBoxDialog->standardButton(button) == QDialogButtonBox::Ok)
    	{
    		this->saveOptions();
    		this->setVisible(false);
    	}
    	if(buttonBoxDialog->standardButton(button) == QDialogButtonBox::Cancel)
    	{
    		this->setVisible(false);
    	}
    }
    
    void ConfigurationDialog::on_tableWidget_codecs_currentItemChanged(QTableWidgetItem * current, QTableWidgetItem * previous)
    {
    	qDebug() << "on_tableWidget_codecs_currentItemChanged";
    	int row = current->row();
    	int nbCol = tableWidget_codecs->columnCount();
    	for(int i = 0 ; i < nbCol ; i++)
    	{
    		tableWidget_codecs->setRangeSelected(QTableWidgetSelectionRange(row, 0, row, nbCol - 1), true);
    	}
    	updateCodecListCommands();
    }
    
    void ConfigurationDialog::on_tableWidget_codecs_currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn)
    {
    	qDebug() << "on_tableWidget_codecs_currentCellChanged";
    	int nbCol = tableWidget_codecs->columnCount();
    	for(int i = 0 ; i < nbCol ; i++)
    	{
    		tableWidget_codecs->setRangeSelected(QTableWidgetSelectionRange(currentRow, 0, currentRow, nbCol - 1), true);
    	}
    	updateCodecListCommands();
    }
    
    /*
    void ConfigurationDialog::on_listWidgetComptes_itemChanged(QListWidgetItem * item)
    {
    	if(! item)  { qDebug() << "Attempting to save details of an account from a NULL item\n"; return; }
    	
    	Account * account = accountList->getAccountByItem(item);
    	if(! account)  {  qDebug() << "Attempting to save details of an unexisting account\n"; return;  }
    
    	if(item->checkState() != account->getAccountState)
    	
    	if(buttonBoxDialog->standardButton(button) == QDialogButtonBox::Apply)
    	{
    		this->saveOptions();
    		this->loadOptions();
    	}
    	if(buttonBoxDialog->standardButton(button) == QDialogButtonBox::RestoreDefaults)
    	{
    		this->loadOptions();
    	}
    	if(buttonBoxDialog->standardButton(button) == QDialogButtonBox::Ok)
    	{
    		this->saveOptions();
    		this->setVisible(false);
    	}
    	if(buttonBoxDialog->standardButton(button) == QDialogButtonBox::Cancel)
    	{
    		this->setVisible(false);
    	}
    }
    */