From f2eeca329831653cf08ada3e40e609847387c17d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Quentin?= <jquentin@jquentin-laptop-kub2.(none)> Date: Mon, 23 Mar 2009 17:56:02 -0400 Subject: [PATCH] Commit functional. --- sflphone_kde/Account.cpp | 2 + sflphone_kde/Call.cpp | 15 +- sflphone_kde/Call.h | 2 +- sflphone_kde/ConfigDialog.cpp | 304 +++++++++++++++++-------- sflphone_kde/ConfigDialog.h | 25 +- sflphone_kde/ConfigDialog.ui | 236 +++++++++---------- sflphone_kde/SFLPhone.cpp | 23 +- sflphone_kde/SFLPhone.h | 12 +- sflphone_kde/main.cpp | 17 +- sflphone_kde/resources.qrc | 2 + sflphone_kde/sflphone-qt.ui | 20 +- sflphone_kde/sflphone_kde.kdevelop.pcs | Bin 194763 -> 0 bytes sflphone_kde/sflphone_kde.kdevses | 56 ----- 13 files changed, 397 insertions(+), 317 deletions(-) delete mode 100644 sflphone_kde/sflphone_kde.kdevelop.pcs delete mode 100644 sflphone_kde/sflphone_kde.kdevses diff --git a/sflphone_kde/Account.cpp b/sflphone_kde/Account.cpp index ed4e9de074..03e778a235 100644 --- a/sflphone_kde/Account.cpp +++ b/sflphone_kde/Account.cpp @@ -65,10 +65,12 @@ Account * Account::buildExistingAccountFromId(QString _accountId) a->accountDetails = new MapStringString( ConfigurationManagerInterfaceSingleton::getInstance().getAccountDetails(_accountId).value() ); a->initAccountItem(); if(a->item->checkState() == Qt::Checked) + { if(a->getAccountDetail(* new QString(ACCOUNT_STATUS)) == ACCOUNT_STATE_REGISTERED) a->item->setTextColor(Qt::darkGreen); else a->item->setTextColor(Qt::red); + } return a; } diff --git a/sflphone_kde/Call.cpp b/sflphone_kde/Call.cpp index 242a99b1b5..48bc86997f 100644 --- a/sflphone_kde/Call.cpp +++ b/sflphone_kde/Call.cpp @@ -53,7 +53,8 @@ const function Call::actionPerformedFunctionMap[11][5] = /*ERROR */ {&Call::nothing , &Call::nothing , &Call::nothing , &Call::nothing , &Call::nothing } }; -const QIcon Call::historyIcons[3] = {QIcon(ICON_HISTORY_INCOMING), QIcon(ICON_HISTORY_OUTGOING), QIcon(ICON_HISTORY_MISSED)}; +const char * Call::historyIcons[3] = {ICON_HISTORY_INCOMING, ICON_HISTORY_OUTGOING, ICON_HISTORY_MISSED}; + Call::Call(call_state startState, QString callId, QString from, QString account) { @@ -64,6 +65,7 @@ Call::Call(call_state startState, QString callId, QString from, QString account) this->recording = false; this->currentState = startState; this->historyItem = NULL; + } Call::~Call() @@ -112,6 +114,7 @@ daemon_call_state Call::toDaemonCallState(const QString & stateName) return DAEMON_CALL_STATE_FAILURE; } qDebug() << "stateChanged signal received with unknown state."; + return DAEMON_CALL_STATE_FAILURE; } QListWidgetItem * Call::getItem() @@ -123,8 +126,8 @@ QListWidgetItem * Call::getHistoryItem() { if(historyItem == NULL) { - historyItem = new QListWidgetItem("<H1>"+peer+"</H1>"); - historyItem->setIcon(historyIcons[historyState]); + historyItem = new QListWidgetItem(peer); + historyItem->setIcon(QIcon(historyIcons[historyState])); } return historyItem; } @@ -197,7 +200,7 @@ void Call::accept(QString number) CallManagerInterface & callManager = CallManagerInterfaceSingleton::getInstance(); qDebug() << "Accepting call. callId : " << callId; callManager.accept(callId); - this->startTime = & QDateTime::currentDateTime(); + this->startTime = new QDateTime(QDateTime::currentDateTime()); this->historyState = INCOMING; } @@ -206,7 +209,7 @@ void Call::refuse(QString number) CallManagerInterface & callManager = CallManagerInterfaceSingleton::getInstance(); qDebug() << "Refusing call. callId : " << callId; callManager.refuse(callId); - this->startTime = & QDateTime::currentDateTime(); + this->startTime = new QDateTime(QDateTime::currentDateTime()); this->historyState = MISSED; } @@ -267,7 +270,7 @@ void Call::transfer(QString number) CallManagerInterface & callManager = CallManagerInterfaceSingleton::getInstance(); qDebug() << "Transfering call to number : " << number << ". callId : " << callId; callManager.transfert(callId, number); - this->stopTime = & QDateTime::currentDateTime(); + this->stopTime = new QDateTime(QDateTime::currentDateTime()); } void Call::unhold(QString number) diff --git a/sflphone_kde/Call.h b/sflphone_kde/Call.h index 2c55164b42..37d0beb648 100644 --- a/sflphone_kde/Call.h +++ b/sflphone_kde/Call.h @@ -103,7 +103,7 @@ private: static const call_state actionPerformedStateMap [11][5]; static const function actionPerformedFunctionMap [11][5]; static const call_state stateChangedStateMap [11][6]; - static const QIcon historyIcons[3]; + static const char * historyIcons[3]; call_state currentState; bool recording; diff --git a/sflphone_kde/ConfigDialog.cpp b/sflphone_kde/ConfigDialog.cpp index 9fd144e91d..06287ec80f 100644 --- a/sflphone_kde/ConfigDialog.cpp +++ b/sflphone_kde/ConfigDialog.cpp @@ -9,20 +9,26 @@ 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_Capacity->setMaximum(MAX_HISTORY_CAPACITY); + horizontalSlider_historyCapacity->setMaximum(MAX_HISTORY_CAPACITY); label_WarningSIP->setVisible(false); - for(int i = 0 ; i < listOptions->count() ; i++) + for(int i = 0 ; i < list_options->count() ; i++) { - listOptions->item(i)->setTextAlignment(Qt::AlignHCenter); + 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)); //TODO ajouter les items de l'interface audio ici avec les constantes @@ -52,33 +58,33 @@ void ConfigurationDialog::loadOptions() //////////////////////// //Call history settings - spinBox_CapaciteHist->setValue(daemon.getMaxCalls()); + spinBox_historyCapacity->setValue(daemon.getMaxCalls()); //SIP port settings int sipPort = daemon.getSipPort(); if(sipPort<1025){ - spinBox_PortSIP->setMinimum(sipPort); + spinBox_SIPPort->setMinimum(sipPort); label_WarningSIP->setText("Attention : le port SIP doit être supérieur à 1024 !"); label_WarningSIP->setVisible(true); } if(sipPort>65535){ - spinBox_PortSIP->setMaximum(sipPort); + spinBox_SIPPort->setMaximum(sipPort); label_WarningSIP->setText("Attention : le port SIP doit être inférieur à 65536 !"); label_WarningSIP->setVisible(true); } - spinBox_PortSIP->setValue(daemon.getSipPort()); + spinBox_SIPPort->setValue(daemon.getSipPort()); //////////////////////// ////Display settings//// //////////////////////// //Notification settings - checkBox1_NotifAppels->setCheckState(daemon.getNotify() ? Qt::Checked : Qt::Unchecked); - checkBox2_NotifMessages->setCheckState(daemon.getMailNotify() ? Qt::Checked : Qt::Unchecked); + checkBox1_notifOnCalls->setCheckState(daemon.getNotify() ? Qt::Checked : Qt::Unchecked); + checkBox2_notifOnMessages->setCheckState(daemon.getMailNotify() ? Qt::Checked : Qt::Unchecked); //Window display settings - checkBox1_FenDemarrage->setCheckState(daemon.isStartHidden() ? Qt::Unchecked : Qt::Checked); - checkBox2_FenAppel->setCheckState(daemon.popupMode() ? Qt::Checked : Qt::Unchecked); + checkBox1_displayOnStart->setCheckState(daemon.isStartHidden() ? Qt::Unchecked : Qt::Checked); + checkBox2_displayOnCalls->setCheckState(daemon.popupMode() ? Qt::Checked : Qt::Unchecked); ///////////////////////// ////Accounts settings//// @@ -87,19 +93,19 @@ void ConfigurationDialog::loadOptions() loadAccountList(); //Stun settings - checkBoxStun->setCheckState(daemon.isStunEnabled() ? Qt::Checked : Qt::Unchecked); - lineEdit_Stun->setText(QString(daemon.getStunServer())); + 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_ParametresSpecif->setCurrentIndex(daemon.getAudioManager()); + comboBox_interface->setCurrentIndex(daemon.getAudioManager()); + stackedWidget_interfaceSpecificSettings->setCurrentIndex(daemon.getAudioManager()); //ringtones settings - checkBox_Sonneries->setCheckState(daemon.isRingtoneEnabled() ? Qt::Checked : Qt::Unchecked); + checkBox_ringtones->setCheckState(daemon.isRingtoneEnabled() ? Qt::Checked : Qt::Unchecked); //TODO widget choix de sonnerie //widget_nomSonnerie->setText(daemon.getRingtoneChoice()); @@ -108,29 +114,29 @@ void ConfigurationDialog::loadOptions() // //alsa settings - comboBox1_GreffonAlsa->clear(); + comboBox1_alsaPlugin->clear(); QStringList pluginList = daemon.getOutputAudioPluginList(); - comboBox1_GreffonAlsa->addItems(pluginList); - comboBox1_GreffonAlsa->setCurrentIndex(comboBox1_GreffonAlsa->findText(daemon.getCurrentAudioOutputPlugin())); + 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_Entree->clear(); + comboBox2_in->clear(); QStringList inputDeviceList = daemon.getAudioInputDeviceList(); - comboBox2_Entree->addItems(inputDeviceList); - comboBox2_Entree->setCurrentIndex(inputDevice); + comboBox2_in->addItems(inputDeviceList); + comboBox2_in->setCurrentIndex(inputDevice); int outputDevice = devices[0].toInt(); - comboBox3_Sortie->clear(); + comboBox3_out->clear(); QStringList outputDeviceList = daemon.getAudioOutputDeviceList(); - comboBox3_Sortie->addItems(inputDeviceList); - comboBox3_Sortie->setCurrentIndex(outputDevice); + comboBox3_out->addItems(inputDeviceList); + comboBox3_out->setCurrentIndex(outputDevice); //pulseaudio settings - checkBox_ModifVolumeApps->setCheckState(daemon.getPulseAppVolumeControl() ? Qt::Checked : Qt::Unchecked); + checkBox_pulseAudioVolumeAlter->setCheckState(daemon.getPulseAppVolumeControl() ? Qt::Checked : Qt::Unchecked); } @@ -145,10 +151,10 @@ void ConfigurationDialog::saveOptions() //////////////////////// //Call history settings - daemon.setMaxCalls(spinBox_CapaciteHist->value()); + daemon.setMaxCalls(spinBox_historyCapacity->value()); //SIP port settings - int sipPort = spinBox_PortSIP->value(); + int sipPort = spinBox_SIPPort->value(); if(sipPort<1025){ errorWindow->showMessage("Attention : le port SIP doit être supérieur à 1024 !"); @@ -163,13 +169,13 @@ void ConfigurationDialog::saveOptions() //////////////////////// //Notification settings - if(checkBox1_NotifAppels->checkState() != (daemon.getNotify() ? Qt::Checked : Qt::Unchecked)) daemon.setNotify(); - if(checkBox2_NotifMessages->checkState() != (daemon.getMailNotify() ? Qt::Checked : Qt::Unchecked)) daemon.setMailNotify(); + 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_FenDemarrage->checkState() != (daemon.isStartHidden() ? Qt::Unchecked : Qt::Checked)) daemon.startHidden(); - if(checkBox2_FenAppel->checkState() != (daemon.popupMode() ? Qt::Checked : Qt::Unchecked)) daemon.switchPopupMode(); + 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//// @@ -178,8 +184,8 @@ void ConfigurationDialog::saveOptions() saveAccountList(); //Stun settings - if(checkBoxStun->checkState() != (daemon.isStunEnabled() ? Qt::Checked : Qt::Unchecked)) daemon.enableStun(); - daemon.setStunServer(lineEdit_Stun->text()); + if(checkBox_stun->checkState() != (daemon.isStunEnabled() ? Qt::Checked : Qt::Unchecked)) daemon.enableStun(); + daemon.setStunServer(lineEdit_stun->text()); ////////////////////// ////Audio settings//// @@ -187,12 +193,12 @@ void ConfigurationDialog::saveOptions() //Audio Interface settings qDebug() << "setting audio manager"; - int manager = comboBox_Interface->currentIndex(); + int manager = comboBox_interface->currentIndex(); daemon.setAudioManager(manager); //ringtones settings qDebug() << "setting ringtone options"; - if(checkBox_Sonneries->checkState() != (daemon.isRingtoneEnabled() ? Qt::Checked : Qt::Unchecked)) daemon.ringtoneEnabled(); + if(checkBox_ringtones->checkState() != (daemon.isRingtoneEnabled() ? Qt::Checked : Qt::Unchecked)) daemon.ringtoneEnabled(); //TODO widget choix de sonnerie //daemon.getRingtoneChoice(widget_nomSonnerie->text()); @@ -204,15 +210,15 @@ void ConfigurationDialog::saveOptions() if(manager == ALSA) { qDebug() << "setting alsa settings"; - daemon.setOutputAudioPlugin(comboBox1_GreffonAlsa->currentText()); - daemon.setAudioInputDevice(comboBox2_Entree->currentIndex()); - daemon.setAudioOutputDevice(comboBox3_Sortie->currentIndex()); + 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_ModifVolumeApps->checkState() != (daemon.getPulseAppVolumeControl() ? Qt::Checked : Qt::Unchecked)) daemon.setPulseAppVolumeControl(); + if(checkBox_pulseAudioVolumeAlter->checkState() != (daemon.getPulseAppVolumeControl() ? Qt::Checked : Qt::Unchecked)) daemon.setPulseAppVolumeControl(); } } @@ -224,21 +230,21 @@ void ConfigurationDialog::loadAccountList() //create the AccountList object with the ids accountList = new AccountList(accountIds); //initialize the QListWidget object with the AccountList - listWidgetComptes->clear(); + listWidget_accountList->clear(); for (int i = 0; i < accountList->size(); ++i){ - listWidgetComptes->addItem((*accountList)[i].getItem()); + listWidget_accountList->addItem((*accountList)[i].getItem()); } - if (listWidgetComptes->count() > 0) - listWidgetComptes->setCurrentRow(0); + if (listWidget_accountList->count() > 0) + listWidget_accountList->setCurrentRow(0); else - frame2_EditComptes->setEnabled(false); + frame2_editAccounts->setEnabled(false); } void ConfigurationDialog::saveAccountList() { //save the account being edited - if(listWidgetComptes->currentItem()) - saveAccount(listWidgetComptes->currentItem()); + 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 @@ -282,15 +288,15 @@ void ConfigurationDialog::loadAccount(QListWidgetItem * item) 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)))); + edit1_alias->setText( account->getAccountDetail(*(new QString(ACCOUNT_ALIAS)))); int protocoleIndex = getProtocoleIndex(account->getAccountDetail(*(new QString(ACCOUNT_TYPE)))); - edit2_Protocole->setCurrentIndex( (protocoleIndex < 0) ? 0 : protocoleIndex ); - edit3_Serveur->setText( account->getAccountDetail(*(new QString(ACCOUNT_HOSTNAME)))); - edit4_Usager->setText( account->getAccountDetail(*(new QString(ACCOUNT_USERNAME)))); - edit5_Mdp->setText( account->getAccountDetail(*(new QString(ACCOUNT_PASSWORD)))); - edit6_BoiteVocale->setText( account->getAccountDetail(*(new QString(ACCOUNT_MAILBOX)))); + 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_Etat->setText( "<FONT COLOR=\"" + account->getStateColorName() + "\">" + status + "</FONT>" ); + edit7_state->setText( "<FONT COLOR=\"" + account->getStateColorName() + "\">" + status + "</FONT>" ); //edit7_Etat->setTextColor( account->getStateColor ); } @@ -302,12 +308,12 @@ void ConfigurationDialog::saveAccount(QListWidgetItem * item) 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_Protocole->currentIndex())); - account->setAccountDetail(ACCOUNT_HOSTNAME, edit3_Serveur->text()); - account->setAccountDetail(ACCOUNT_USERNAME, edit4_Usager->text()); - account->setAccountDetail(ACCOUNT_PASSWORD, edit5_Mdp->text()); - account->setAccountDetail(ACCOUNT_MAILBOX, edit6_BoiteVocale->text()); + 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()); } @@ -319,7 +325,7 @@ void ConfigurationDialog::loadCodecs() QStringList activeCodecList = daemon.getActiveCodecList(); qDebug() << codecList; qDebug() << activeCodecList; - tableWidget_Codecs->setRowCount(0); + tableWidget_codecs->setRowCount(0); codecPayloads->clear(); for(int i=0 ; i<codecList.size() ; i++) { @@ -332,29 +338,29 @@ void ConfigurationDialog::loadCodecs() else { QStringList details = daemon.getCodecDetails(payload); - tableWidget_Codecs->insertRow(i); + tableWidget_codecs->insertRow(i); QTableWidgetItem * headerItem = new QTableWidgetItem(""); - tableWidget_Codecs->setVerticalHeaderItem (i, headerItem); + 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])); + 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); + 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(); + tableWidget_codecs->resizeColumnsToContents(); + tableWidget_codecs->resizeRowsToContents(); } @@ -362,13 +368,13 @@ void ConfigurationDialog::saveCodecs() { ConfigurationManagerInterface & daemon = ConfigurationManagerInterfaceSingleton::getInstance(); QStringList activeCodecs; - for(int i = 0 ; i < tableWidget_Codecs->rowCount() ; i++) + 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) + 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()]; + activeCodecs << (*codecPayloads)[tableWidget_codecs->item(i,1)->text()]; } } qDebug() << "Calling setActiveCodecList with list : " << activeCodecs ; @@ -377,25 +383,59 @@ void ConfigurationDialog::saveCodecs() void ConfigurationDialog::setPage(int page) { - stackedWidgetOptions->setCurrentIndex(page); - listOptions->setCurrentRow(page); + stackedWidget_options->setCurrentIndex(page); + list_options->setCurrentRow(page); } -void ConfigurationDialog::on_edit1_Alias_textChanged(const QString & text) +void ConfigurationDialog::updateAccountListCommands() { - listWidgetComptes->currentItem()->setText(text); + 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(! listWidget_accountList->currentItem()) + { + buttonsEnabled[0] = false; + buttonsEnabled[1] = false; + } + else if(listWidget_accountList->currentRow() == 0) + { + buttonsEnabled[0] = false; + } + else if(listWidget_accountList->currentRow() == listWidget_accountList->count() - 1) + { + buttonsEnabled[1] = false; + } + toolButton_codecUp->setEnabled(buttonsEnabled[0]); + toolButton_codecDown->setEnabled(buttonsEnabled[1]); +} -void ConfigurationDialog::on_listWidgetComptes_currentItemChanged ( QListWidgetItem * current, QListWidgetItem * previous ) +void ConfigurationDialog::on_edit1_alias_textChanged(const QString & text) { - if(previous) - saveAccount(previous); - if(current) - loadAccount(current); + listWidget_accountList->currentItem()->setText(text); } -void ConfigurationDialog::on_spinBox_PortSIP_valueChanged ( int value ) +void ConfigurationDialog::on_spinBox_SIPPort_valueChanged ( int value ) { if(value>1024 && value<65536) label_WarningSIP->setVisible(false); @@ -403,28 +443,73 @@ void ConfigurationDialog::on_spinBox_PortSIP_valueChanged ( int value ) 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() +{ +} + +void ConfigurationDialog::on_toolButton_codecDown_clicked() +{/* + int currentRow = listWidget_codecs->currentRow(); + int nbCol = tableWidget_codecs->columnCount(); + QTableWidgetSelectionRange row(currentRow, 0, currentRow, nbCol - 1); + QListWidgetItem * item = listWidget_accountList->takeItem(currentRow); + listWidget_accountList->insertItem(currentRow + 1 , item); + listWidget_accountList->setCurrentItem(item); +*/} + +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_newAccount_clicked() +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 - listWidgetComptes->addItem(item); - int r = listWidgetComptes->count() - 1; - listWidgetComptes->setCurrentRow(r); - frame2_EditComptes->setEnabled(true); + listWidget_accountList->addItem(item); + int r = listWidget_accountList->count() - 1; + listWidget_accountList->setCurrentRow(r); + frame2_editAccounts->setEnabled(true); } } -void ConfigurationDialog::on_button_delAccount_clicked() +void ConfigurationDialog::on_button_accountRemove_clicked() { - int r = listWidgetComptes->currentRow(); - QListWidgetItem * item = listWidgetComptes->takeItem(r); + int r = listWidget_accountList->currentRow(); + QListWidgetItem * item = listWidget_accountList->takeItem(r); accountList->removeAccount(item); - listWidgetComptes->setCurrentRow( (r >= listWidgetComptes->count()) ? r-1 : r ); + listWidget_accountList->setCurrentRow( (r >= listWidget_accountList->count()) ? r-1 : r ); } @@ -450,6 +535,29 @@ void ConfigurationDialog::on_buttonBoxDialog_clicked(QAbstractButton * button) } } +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) { diff --git a/sflphone_kde/ConfigDialog.h b/sflphone_kde/ConfigDialog.h index e5a8ddca36..72e9445819 100644 --- a/sflphone_kde/ConfigDialog.h +++ b/sflphone_kde/ConfigDialog.h @@ -8,14 +8,12 @@ #include "SFLPhone.h" #include <QErrorMessage> - class SFLPhone; class ConfigurationDialog : public QDialog, private Ui::ConfigurationDialog { Q_OBJECT - private: AccountList * accountList; QErrorMessage * errorWindow; @@ -38,16 +36,25 @@ public: void saveOptions(); void setPage(int page); + + void updateCodecListCommands(); + void updateAccountListCommands(); private slots: - void on_button_delAccount_clicked(); - void on_button_newAccount_clicked(); - void on_edit1_Alias_textChanged(const QString & text); - void on_listWidgetComptes_currentItemChanged ( QListWidgetItem * current, QListWidgetItem * previous ); - void on_spinBox_PortSIP_valueChanged ( int value ); + void on_toolButton_codecUp_clicked(); + void on_toolButton_codecDown_clicked(); + void on_button_accountUp_clicked(); + void on_button_accountDown_clicked(); + void on_button_accountAdd_clicked(); + void on_button_accountRemove_clicked(); + void on_edit1_alias_textChanged(const QString & text); + void on_listWidget_accountList_currentItemChanged ( QListWidgetItem * current, QListWidgetItem * previous ); + void on_listWidget_codecs_currentItemChanged ( QListWidgetItem * current, QListWidgetItem * previous ); + void on_spinBox_SIPPort_valueChanged ( int value ); void on_buttonBoxDialog_clicked(QAbstractButton * button); -}; - + void on_tableWidget_codecs_currentItemChanged(QTableWidgetItem * current, QTableWidgetItem * previous); + void on_tableWidget_codecs_currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn); +}; #endif diff --git a/sflphone_kde/ConfigDialog.ui b/sflphone_kde/ConfigDialog.ui index e92d6f8f42..342ec5d390 100644 --- a/sflphone_kde/ConfigDialog.ui +++ b/sflphone_kde/ConfigDialog.ui @@ -7,7 +7,7 @@ <x>0</x> <y>0</y> <width>504</width> - <height>432</height> + <height>435</height> </rect> </property> <property name="minimumSize" > @@ -29,7 +29,7 @@ <enum>QLayout::SetDefaultConstraint</enum> </property> <item> - <widget class="QListWidget" name="listOptions" > + <widget class="QListWidget" name="list_options" > <property name="sizePolicy" > <sizepolicy vsizetype="Expanding" hsizetype="Preferred" > <horstretch>0</horstretch> @@ -143,38 +143,38 @@ </widget> </item> <item> - <widget class="Line" name="lineOptions" > + <widget class="Line" name="line_options" > <property name="orientation" > <enum>Qt::Vertical</enum> </property> </widget> </item> <item> - <widget class="QStackedWidget" name="stackedWidgetOptions" > + <widget class="QStackedWidget" name="stackedWidget_options" > <property name="currentIndex" > <number>2</number> </property> - <widget class="QWidget" name="page_General" > + <widget class="QWidget" name="page_general" > <layout class="QVBoxLayout" name="verticalLayout_18" > <property name="leftMargin" > <number>4</number> </property> <item> - <widget class="QLabel" name="label_ConfGeneral" > + <widget class="QLabel" name="label_configGeneral" > <property name="text" > <string>Configuration des paramètres généraux</string> </property> </widget> </item> <item> - <widget class="Line" name="line_ConfGeneral" > + <widget class="Line" name="line_ConfigGeneral" > <property name="orientation" > <enum>Qt::Horizontal</enum> </property> </widget> </item> <item> - <widget class="QGroupBox" name="groupBox1_Historique" > + <widget class="QGroupBox" name="groupBox1_history" > <property name="sizePolicy" > <sizepolicy vsizetype="Fixed" hsizetype="Preferred" > <horstretch>0</horstretch> @@ -186,20 +186,20 @@ </property> <layout class="QVBoxLayout" name="verticalLayout_19" > <item> - <widget class="QWidget" native="1" name="widget_CapaciteHist" > + <widget class="QWidget" native="1" name="widget_historyCapacity" > <layout class="QHBoxLayout" name="horizontalLayout_10" > <item> - <widget class="QLabel" name="label_Capacite" > + <widget class="QLabel" name="label_historyCapacity" > <property name="text" > <string>&Capacité</string> </property> <property name="buddy" > - <cstring>horizontalSlider_Capacity</cstring> + <cstring>horizontalSlider_historyCapacity</cstring> </property> </widget> </item> <item> - <widget class="QSlider" name="horizontalSlider_Capacity" > + <widget class="QSlider" name="horizontalSlider_historyCapacity" > <property name="maximum" > <number>100</number> </property> @@ -209,13 +209,13 @@ </widget> </item> <item> - <widget class="QSpinBox" name="spinBox_CapaciteHist" /> + <widget class="QSpinBox" name="spinBox_historyCapacity" /> </item> </layout> </widget> </item> <item> - <widget class="QToolButton" name="toolButtonEffacerHist" > + <widget class="QToolButton" name="toolButton_historyClear" > <property name="text" > <string>&Effacer l'Historique</string> </property> @@ -225,7 +225,7 @@ </widget> </item> <item> - <widget class="QGroupBox" name="groupBox2_Connexion" > + <widget class="QGroupBox" name="groupBox2_connection" > <property name="sizePolicy" > <sizepolicy vsizetype="Fixed" hsizetype="Preferred" > <horstretch>0</horstretch> @@ -240,14 +240,14 @@ <enum>QFormLayout::ExpandingFieldsGrow</enum> </property> <item row="0" column="0" > - <widget class="QLabel" name="label_PortSIP" > + <widget class="QLabel" name="label_SIPPort" > <property name="text" > <string>Port SIP</string> </property> </widget> </item> <item row="0" column="1" > - <widget class="QWidget" native="1" name="widget" > + <widget class="QWidget" native="1" name="widget_SIPPort" > <property name="minimumSize" > <size> <width>50</width> @@ -259,7 +259,7 @@ <number>0</number> </property> <item> - <widget class="QSpinBox" name="spinBox_PortSIP" > + <widget class="QSpinBox" name="spinBox_SIPPort" > <property name="sizePolicy" > <sizepolicy vsizetype="Preferred" hsizetype="Preferred" > <horstretch>0</horstretch> @@ -291,7 +291,7 @@ </widget> </item> <item> - <widget class="QWidget" native="1" name="widget_RemplissageConfGeneral" > + <widget class="QWidget" native="1" name="widget_fullConfigGeneral" > <property name="sizePolicy" > <sizepolicy vsizetype="Expanding" hsizetype="Preferred" > <horstretch>0</horstretch> @@ -302,10 +302,10 @@ </item> </layout> </widget> - <widget class="QWidget" name="page_Affichage" > + <widget class="QWidget" name="page_display" > <layout class="QVBoxLayout" name="verticalLayout_9" > <item> - <widget class="QLabel" name="label_ConfAffichage" > + <widget class="QLabel" name="label_configDisplay" > <property name="sizePolicy" > <sizepolicy vsizetype="Fixed" hsizetype="Preferred" > <horstretch>0</horstretch> @@ -318,14 +318,14 @@ </widget> </item> <item> - <widget class="Line" name="line_ConfAffichage" > + <widget class="Line" name="line_configDisplay" > <property name="orientation" > <enum>Qt::Horizontal</enum> </property> </widget> </item> <item> - <widget class="QFrame" name="frameAffichage" > + <widget class="QFrame" name="frame_display" > <property name="sizePolicy" > <sizepolicy vsizetype="Preferred" hsizetype="Preferred" > <horstretch>0</horstretch> @@ -340,7 +340,7 @@ </property> <layout class="QVBoxLayout" name="verticalLayout_8" > <item> - <widget class="QLabel" name="label1_Notifications" > + <widget class="QLabel" name="label1_notifications" > <property name="sizePolicy" > <sizepolicy vsizetype="Fixed" hsizetype="Preferred" > <horstretch>0</horstretch> @@ -353,7 +353,7 @@ </widget> </item> <item> - <widget class="QWidget" native="1" name="widget1_Notifications" > + <widget class="QWidget" native="1" name="widget1_notifications" > <property name="sizePolicy" > <sizepolicy vsizetype="Fixed" hsizetype="Preferred" > <horstretch>0</horstretch> @@ -362,14 +362,14 @@ </property> <layout class="QHBoxLayout" name="horizontalLayout_5" > <item> - <widget class="QCheckBox" name="checkBox1_NotifAppels" > + <widget class="QCheckBox" name="checkBox1_notifOnCalls" > <property name="text" > <string>&Appels entrants</string> </property> </widget> </item> <item> - <widget class="QCheckBox" name="checkBox2_NotifMessages" > + <widget class="QCheckBox" name="checkBox2_notifOnMessages" > <property name="text" > <string>&Messages vocaux</string> </property> @@ -379,7 +379,7 @@ </widget> </item> <item> - <widget class="QLabel" name="label2_FenetrePrincipale" > + <widget class="QLabel" name="label2_displayMainWindow" > <property name="sizePolicy" > <sizepolicy vsizetype="Fixed" hsizetype="Preferred" > <horstretch>0</horstretch> @@ -392,7 +392,7 @@ </widget> </item> <item> - <widget class="QWidget" native="1" name="widget_FenetrePrincipale" > + <widget class="QWidget" native="1" name="widget_displayMainWindow" > <property name="sizePolicy" > <sizepolicy vsizetype="Fixed" hsizetype="Preferred" > <horstretch>0</horstretch> @@ -401,14 +401,14 @@ </property> <layout class="QHBoxLayout" name="horizontalLayout_6" > <item> - <widget class="QCheckBox" name="checkBox1_FenDemarrage" > + <widget class="QCheckBox" name="checkBox1_displayOnStart" > <property name="text" > <string>Au &démarrage</string> </property> </widget> </item> <item> - <widget class="QCheckBox" name="checkBox2_FenAppel" > + <widget class="QCheckBox" name="checkBox2_displayOnCalls" > <property name="text" > <string>Lors d'un appel &entrant</string> </property> @@ -418,17 +418,17 @@ </widget> </item> <item> - <widget class="QWidget" native="1" name="widget_5" /> + <widget class="QWidget" native="1" name="widget_fullConfigDisplay" /> </item> </layout> </widget> </item> </layout> </widget> - <widget class="QWidget" name="page_Comptes" > + <widget class="QWidget" name="page_accounts" > <layout class="QVBoxLayout" name="verticalLayout_2" > <item> - <widget class="QLabel" name="label_ConfComptes" > + <widget class="QLabel" name="label_configAccounts" > <property name="sizePolicy" > <sizepolicy vsizetype="Preferred" hsizetype="Preferred" > <horstretch>0</horstretch> @@ -441,17 +441,17 @@ </widget> </item> <item> - <widget class="Line" name="line_ConfComptes" > + <widget class="Line" name="line_configAccounts" > <property name="orientation" > <enum>Qt::Horizontal</enum> </property> </widget> </item> <item> - <widget class="QWidget" native="1" name="widget1_ConfComptes" > + <widget class="QWidget" native="1" name="widget1_configAccounts" > <layout class="QHBoxLayout" name="horizontalLayout_3" > <item> - <widget class="QFrame" name="frame1_ListeComptes" > + <widget class="QFrame" name="frame1_accountList" > <property name="minimumSize" > <size> <width>0</width> @@ -472,7 +472,7 @@ </property> <layout class="QVBoxLayout" name="verticalLayout_6" > <item> - <widget class="QListWidget" name="listWidgetComptes" > + <widget class="QListWidget" name="listWidget_accountList" > <property name="sizePolicy" > <sizepolicy vsizetype="Expanding" hsizetype="Fixed" > <horstretch>0</horstretch> @@ -497,7 +497,7 @@ </widget> </item> <item> - <widget class="QGroupBox" name="groupBoxGestionComptes" > + <widget class="QGroupBox" name="groupBox_accountListHandle" > <property name="sizePolicy" > <sizepolicy vsizetype="Preferred" hsizetype="Preferred" > <horstretch>0</horstretch> @@ -527,7 +527,7 @@ <number>0</number> </property> <item> - <widget class="QToolButton" name="button_delAccount" > + <widget class="QToolButton" name="button_accountRemove" > <property name="sizePolicy" > <sizepolicy vsizetype="Fixed" hsizetype="Fixed" > <horstretch>0</horstretch> @@ -539,7 +539,7 @@ </property> <property name="icon" > <iconset resource="resources.qrc" > - <normaloff>:/images/icons/fail.svg</normaloff>:/images/icons/fail.svg</iconset> + <normaloff>:/images/icons/remove.png</normaloff>:/images/icons/remove.png</iconset> </property> <property name="shortcut" > <string>+</string> @@ -547,7 +547,7 @@ </widget> </item> <item> - <widget class="QToolButton" name="button_newAccount" > + <widget class="QToolButton" name="button_accountAdd" > <property name="sizePolicy" > <sizepolicy vsizetype="Fixed" hsizetype="Fixed" > <horstretch>0</horstretch> @@ -565,7 +565,7 @@ </property> <property name="icon" > <iconset resource="resources.qrc" > - <normaloff>:/images/icons/accept.svg</normaloff>:/images/icons/accept.svg</iconset> + <normaloff>:/images/icons/add.png</normaloff>:/images/icons/add.png</iconset> </property> </widget> </item> @@ -574,10 +574,6 @@ <property name="text" > <string>Down</string> </property> - <property name="icon" > - <iconset resource="resources.qrc" > - <normaloff>:/images/icons/incoming.svg</normaloff>:/images/icons/incoming.svg</iconset> - </property> </widget> </item> <item> @@ -585,10 +581,6 @@ <property name="text" > <string>Up</string> </property> - <property name="icon" > - <iconset resource="resources.qrc" > - <normaloff>:/images/icons/accept.svg</normaloff>:/images/icons/accept.svg</iconset> - </property> </widget> </item> </layout> @@ -598,7 +590,7 @@ </widget> </item> <item> - <widget class="QFrame" name="frame2_EditComptes" > + <widget class="QFrame" name="frame2_editAccounts" > <property name="sizePolicy" > <sizepolicy vsizetype="Expanding" hsizetype="Expanding" > <horstretch>0</horstretch> @@ -616,17 +608,17 @@ <enum>QFormLayout::ExpandingFieldsGrow</enum> </property> <item row="0" column="0" > - <widget class="QLabel" name="label1_Alias" > + <widget class="QLabel" name="label1_alias" > <property name="text" > <string>&Alias</string> </property> <property name="buddy" > - <cstring>edit1_Alias</cstring> + <cstring>edit1_alias</cstring> </property> </widget> </item> <item row="0" column="1" > - <widget class="QLineEdit" name="edit1_Alias" > + <widget class="QLineEdit" name="edit1_alias" > <property name="minimumSize" > <size> <width>0</width> @@ -636,57 +628,57 @@ </widget> </item> <item row="1" column="0" > - <widget class="QLabel" name="label2_Protocole" > + <widget class="QLabel" name="label2_protocol" > <property name="text" > <string>&Protocole</string> </property> <property name="buddy" > - <cstring>edit2_Protocole</cstring> + <cstring>edit2_protocol</cstring> </property> </widget> </item> <item row="2" column="0" > - <widget class="QLabel" name="label3_Serveur" > + <widget class="QLabel" name="label3_server" > <property name="text" > <string>&Serveur</string> </property> <property name="buddy" > - <cstring>edit3_Serveur</cstring> + <cstring>edit3_server</cstring> </property> </widget> </item> <item row="3" column="0" > - <widget class="QLabel" name="label4_Usager" > + <widget class="QLabel" name="label4_user" > <property name="text" > <string>&Usager</string> </property> <property name="buddy" > - <cstring>edit4_Usager</cstring> + <cstring>edit4_user</cstring> </property> </widget> </item> <item row="4" column="0" > - <widget class="QLabel" name="label5_Mdp" > + <widget class="QLabel" name="label5_password" > <property name="text" > <string>&Mot de Passe</string> </property> <property name="buddy" > - <cstring>edit5_Mdp</cstring> + <cstring>edit5_password</cstring> </property> </widget> </item> <item row="5" column="0" > - <widget class="QLabel" name="label6_BoiteVocale" > + <widget class="QLabel" name="label6_mailbox" > <property name="text" > <string>&Boîte Vocale</string> </property> <property name="buddy" > - <cstring>edit6_BoiteVocale</cstring> + <cstring>edit6_mailbox</cstring> </property> </widget> </item> <item row="2" column="1" > - <widget class="QLineEdit" name="edit3_Serveur" > + <widget class="QLineEdit" name="edit3_server" > <property name="minimumSize" > <size> <width>0</width> @@ -696,20 +688,20 @@ </widget> </item> <item row="3" column="1" > - <widget class="QLineEdit" name="edit4_Usager" /> + <widget class="QLineEdit" name="edit4_user" /> </item> <item row="4" column="1" > - <widget class="QLineEdit" name="edit5_Mdp" > + <widget class="QLineEdit" name="edit5_password" > <property name="echoMode" > <enum>QLineEdit::Password</enum> </property> </widget> </item> <item row="5" column="1" > - <widget class="QLineEdit" name="edit6_BoiteVocale" /> + <widget class="QLineEdit" name="edit6_mailbox" /> </item> <item row="1" column="1" > - <widget class="QComboBox" name="edit2_Protocole" > + <widget class="QComboBox" name="edit2_protocol" > <item> <property name="text" > <string>SIP</string> @@ -723,14 +715,14 @@ </widget> </item> <item row="6" column="1" > - <widget class="QLabel" name="edit7_Etat" > + <widget class="QLabel" name="edit7_state" > <property name="text" > <string/> </property> </widget> </item> <item row="6" column="0" > - <widget class="QLabel" name="label7_Etat" > + <widget class="QLabel" name="label7_state" > <property name="text" > <string>État </string> </property> @@ -743,32 +735,32 @@ </widget> </item> <item> - <widget class="QGroupBox" name="groupBox_ConfComptesCommuns" > + <widget class="QGroupBox" name="groupBox_commonSettings" > <property name="title" > <string/> </property> <layout class="QVBoxLayout" name="verticalLayout_10" > <item> - <widget class="QLabel" name="label_ConfComptesCommus" > + <widget class="QLabel" name="label_commonSettings" > <property name="text" > <string>Les paramètres STUN seront appliqués à tous les comptes</string> </property> </widget> </item> <item> - <layout class="QFormLayout" name="formLayoutConfComptesCommus" > + <layout class="QFormLayout" name="formLayout_commonSettings" > <property name="fieldGrowthPolicy" > <enum>QFormLayout::ExpandingFieldsGrow</enum> </property> <item row="0" column="0" > - <widget class="QCheckBox" name="checkBoxStun" > + <widget class="QCheckBox" name="checkBox_stun" > <property name="text" > <string>Activer Stun</string> </property> </widget> </item> <item row="0" column="1" > - <widget class="QLineEdit" name="lineEdit_Stun" > + <widget class="QLineEdit" name="lineEdit_stun" > <property name="enabled" > <bool>false</bool> </property> @@ -781,10 +773,10 @@ </item> </layout> </widget> - <widget class="QWidget" name="page_Audio" > + <widget class="QWidget" name="page_audio" > <layout class="QVBoxLayout" name="verticalLayout_5" > <item> - <widget class="QLabel" name="label_ConfAudio" > + <widget class="QLabel" name="label_configAudio" > <property name="sizePolicy" > <sizepolicy vsizetype="Fixed" hsizetype="Preferred" > <horstretch>0</horstretch> @@ -797,30 +789,30 @@ </widget> </item> <item> - <widget class="Line" name="line_ConfAudio" > + <widget class="Line" name="line_configAudio" > <property name="orientation" > <enum>Qt::Horizontal</enum> </property> </widget> </item> <item> - <widget class="QGroupBox" name="groupBox1_Audio" > + <widget class="QGroupBox" name="groupBox1_audio" > <property name="title" > <string/> </property> <layout class="QFormLayout" name="formLayout_3" > <item row="0" column="0" > - <widget class="QLabel" name="label_Interface" > + <widget class="QLabel" name="label_interface" > <property name="text" > <string>&Interface audio</string> </property> <property name="buddy" > - <cstring>comboBox_Interface</cstring> + <cstring>comboBox_interface</cstring> </property> </widget> </item> <item row="0" column="1" > - <widget class="QComboBox" name="comboBox_Interface" > + <widget class="QComboBox" name="comboBox_interface" > <property name="minimumSize" > <size> <width>100</width> @@ -840,17 +832,20 @@ </widget> </item> <item row="1" column="0" > - <widget class="QCheckBox" name="checkBox_Sonneries" > + <widget class="QCheckBox" name="checkBox_ringtones" > <property name="text" > <string>&Activer les sonneries</string> </property> </widget> </item> + <item row="1" column="1" > + <widget class="KUrlComboRequester" name="kurlcomborequester" /> + </item> </layout> </widget> </item> <item> - <widget class="QGroupBox" name="groupBox2_Codecs" > + <widget class="QGroupBox" name="groupBox2_codecs" > <property name="sizePolicy" > <sizepolicy vsizetype="Preferred" hsizetype="Preferred" > <horstretch>0</horstretch> @@ -862,7 +857,7 @@ </property> <layout class="QGridLayout" name="gridLayout" > <item row="0" column="2" > - <layout class="QVBoxLayout" name="verticalLayout_OrdreCodecs" > + <layout class="QVBoxLayout" name="verticalLayout_codecsOrder" > <property name="leftMargin" > <number>0</number> </property> @@ -870,23 +865,23 @@ <number>0</number> </property> <item> - <widget class="QToolButton" name="toolButton_MonterCodec" > + <widget class="QToolButton" name="toolButton_codecUp" > <property name="text" > - <string>...</string> + <string/> </property> </widget> </item> <item> - <widget class="QToolButton" name="toolButton_DescendreCodec" > + <widget class="QToolButton" name="toolButton_codecDown" > <property name="text" > - <string>...</string> + <string/> </property> </widget> </item> </layout> </item> <item row="0" column="0" > - <widget class="QTableWidget" name="tableWidget_Codecs" > + <widget class="QTableWidget" name="tableWidget_codecs" > <property name="sizePolicy" > <sizepolicy vsizetype="Preferred" hsizetype="Expanding" > <horstretch>0</horstretch> @@ -948,7 +943,7 @@ </widget> </item> <item> - <widget class="QStackedWidget" name="stackedWidget_ParametresSpecif" > + <widget class="QStackedWidget" name="stackedWidget_interfaceSpecificSettings" > <property name="sizePolicy" > <sizepolicy vsizetype="Fixed" hsizetype="Preferred" > <horstretch>0</horstretch> @@ -958,19 +953,19 @@ <property name="currentIndex" > <number>0</number> </property> - <widget class="QWidget" name="page1_Alsa" > + <widget class="QWidget" name="page1_alsa" > <layout class="QVBoxLayout" name="verticalLayout_20" > <property name="margin" > <number>0</number> </property> <item> - <widget class="QGroupBox" name="groupBox_Alsa" > + <widget class="QGroupBox" name="groupBox_alsa" > <property name="title" > <string>Paramètres ALSA</string> </property> <layout class="QFormLayout" name="formLayout_4" > <item row="2" column="1" > - <widget class="QComboBox" name="comboBox2_Entree" > + <widget class="QComboBox" name="comboBox2_in" > <property name="minimumSize" > <size> <width>100</width> @@ -980,27 +975,27 @@ </widget> </item> <item row="2" column="0" > - <widget class="QLabel" name="label2_Entree" > + <widget class="QLabel" name="label2_in" > <property name="text" > <string>&Entrée</string> </property> <property name="buddy" > - <cstring>comboBox2_Entree</cstring> + <cstring>comboBox2_in</cstring> </property> </widget> </item> <item row="3" column="0" > - <widget class="QLabel" name="label3_Sortie" > + <widget class="QLabel" name="label3_out" > <property name="text" > <string>&Sortie</string> </property> <property name="buddy" > - <cstring>comboBox3_Sortie</cstring> + <cstring>comboBox3_out</cstring> </property> </widget> </item> <item row="3" column="1" > - <widget class="QComboBox" name="comboBox3_Sortie" > + <widget class="QComboBox" name="comboBox3_out" > <property name="minimumSize" > <size> <width>100</width> @@ -1010,17 +1005,17 @@ </widget> </item> <item row="0" column="0" > - <widget class="QLabel" name="label1_GreffonAlsa" > + <widget class="QLabel" name="label1_alsaPugin" > <property name="text" > <string>&Greffon ALSA</string> </property> <property name="buddy" > - <cstring>comboBox1_GreffonAlsa</cstring> + <cstring>comboBox1_alsaPlugin</cstring> </property> </widget> </item> <item row="0" column="1" > - <widget class="QComboBox" name="comboBox1_GreffonAlsa" > + <widget class="QComboBox" name="comboBox1_alsaPlugin" > <property name="minimumSize" > <size> <width>100</width> @@ -1034,10 +1029,10 @@ </item> </layout> </widget> - <widget class="QWidget" name="page2_PulseAudio" > + <widget class="QWidget" name="page2_pulseAudio" > <layout class="QVBoxLayout" name="verticalLayout_7" > <item> - <widget class="QGroupBox" name="groupBox_PulseAudio" > + <widget class="QGroupBox" name="groupBox_pulseAudio" > <property name="sizePolicy" > <sizepolicy vsizetype="Expanding" hsizetype="Expanding" > <horstretch>0</horstretch> @@ -1052,7 +1047,7 @@ <enum>QFormLayout::ExpandingFieldsGrow</enum> </property> <item row="0" column="0" > - <widget class="QCheckBox" name="checkBox_ModifVolumeApps" > + <widget class="QCheckBox" name="checkBox_pulseAudioVolumeAlter" > <property name="text" > <string>Autoriser à &modifier le volume des autres applications</string> </property> @@ -1102,6 +1097,13 @@ </action> </widget> <layoutdefault spacing="4" margin="4" /> + <customwidgets> + <customwidget> + <class>KUrlComboRequester</class> + <extends>KUrlRequester</extends> + <header>kurlrequester.h</header> + </customwidget> + </customwidgets> <resources> <include location="resources.qrc" /> </resources> @@ -1123,9 +1125,9 @@ </hints> </connection> <connection> - <sender>listOptions</sender> + <sender>list_options</sender> <signal>currentRowChanged(int)</signal> - <receiver>stackedWidgetOptions</receiver> + <receiver>stackedWidget_options</receiver> <slot>setCurrentIndex(int)</slot> <hints> <hint type="sourcelabel" > @@ -1139,9 +1141,9 @@ </hints> </connection> <connection> - <sender>checkBoxStun</sender> + <sender>checkBox_stun</sender> <signal>toggled(bool)</signal> - <receiver>lineEdit_Stun</receiver> + <receiver>lineEdit_stun</receiver> <slot>setEnabled(bool)</slot> <hints> <hint type="sourcelabel" > @@ -1155,9 +1157,9 @@ </hints> </connection> <connection> - <sender>comboBox_Interface</sender> + <sender>comboBox_interface</sender> <signal>currentIndexChanged(int)</signal> - <receiver>stackedWidget_ParametresSpecif</receiver> + <receiver>stackedWidget_interfaceSpecificSettings</receiver> <slot>setCurrentIndex(int)</slot> <hints> <hint type="sourcelabel" > @@ -1171,9 +1173,9 @@ </hints> </connection> <connection> - <sender>horizontalSlider_Capacity</sender> + <sender>horizontalSlider_historyCapacity</sender> <signal>valueChanged(int)</signal> - <receiver>spinBox_CapaciteHist</receiver> + <receiver>spinBox_historyCapacity</receiver> <slot>setValue(int)</slot> <hints> <hint type="sourcelabel" > @@ -1187,9 +1189,9 @@ </hints> </connection> <connection> - <sender>spinBox_CapaciteHist</sender> + <sender>spinBox_historyCapacity</sender> <signal>valueChanged(int)</signal> - <receiver>horizontalSlider_Capacity</receiver> + <receiver>horizontalSlider_historyCapacity</receiver> <slot>setValue(int)</slot> <hints> <hint type="sourcelabel" > diff --git a/sflphone_kde/SFLPhone.cpp b/sflphone_kde/SFLPhone.cpp index 2c0d274b21..17468b13d6 100644 --- a/sflphone_kde/SFLPhone.cpp +++ b/sflphone_kde/SFLPhone.cpp @@ -43,8 +43,8 @@ SFLPhone::~SFLPhone() void SFLPhone::loadWindow() { ConfigurationManagerInterface & daemon = ConfigurationManagerInterfaceSingleton::getInstance(); - actionAfficher_les_barres_de_volume->setChecked(daemon.getVolumeControls()); - actionAfficher_le_clavier->setChecked(daemon.getDialpad()); + action_displayVolumeControls->setChecked(daemon.getVolumeControls()); + action_displayDialpad->setChecked(daemon.getDialpad()); updateWindowCallState(); updateRecordButton(); updateVolumeButton(); @@ -154,7 +154,6 @@ void SFLPhone::updateWindowCallState() } else { - CallManagerInterface & callManager = CallManagerInterfaceSingleton::getInstance(); Call * call = (*callList)[item]; call_state state = call->getState(); //qDebug() << "calling getIsRecording on " << call->getCallId(); @@ -239,7 +238,7 @@ void SFLPhone::updateWindowCallState() } } //qDebug() << "mi"; - if (item) + if (item && iconFile) { qDebug() << "rentre " << item; item->setIcon(QIcon(iconFile)); @@ -400,14 +399,14 @@ void SFLPhone::updateDialpad() ************ Autoconnect ************* ************************************************************/ -void SFLPhone::on_actionAfficher_les_barres_de_volume_toggled() +void SFLPhone::on_action_displayVolumeControls_toggled() { ConfigurationManagerInterface & daemon = ConfigurationManagerInterfaceSingleton::getInstance(); daemon.setVolumeControls(); updateVolumeControls(); } -void SFLPhone::on_actionAfficher_le_clavier_toggled() +void SFLPhone::on_action_displayDialpad_toggled() { ConfigurationManagerInterface & daemon = ConfigurationManagerInterfaceSingleton::getInstance(); daemon.setDialpad(); @@ -427,7 +426,7 @@ void SFLPhone::on_pushButton_0_clicked() { typeString("0"); } void SFLPhone::on_pushButton_diese_clicked() { typeString("#"); } void SFLPhone::on_pushButton_etoile_clicked() { typeString("*"); } -void SFLPhone::on_label_searchHistory_textChanged(const QString & text) +void SFLPhone::on_label_searchHistory_textChanged() { qDebug() << "on_label_searchHistory_textEdited"; updateSearchHistory(); @@ -530,21 +529,21 @@ void SFLPhone::on_listWidget_callHistory_currentItemChanged() updateWindowCallState(); } -void SFLPhone::on_actionConfigurer_les_comptes_triggered() +void SFLPhone::on_action_configureAccounts_triggered() { configDialog->loadOptions(); configDialog->setPage(PAGE_ACCOUNTS); configDialog->show(); } -void SFLPhone::on_actionConfigurer_le_son_triggered() +void SFLPhone::on_action_configureAudio_triggered() { configDialog->loadOptions(); configDialog->setPage(PAGE_AUDIO); configDialog->show(); } -void SFLPhone::on_actionConfigurer_SFLPhone_triggered() +void SFLPhone::on_action_configureSflPhone_triggered() { configDialog->loadOptions(); configDialog->setPage(PAGE_GENERAL); @@ -693,12 +692,12 @@ void SFLPhone::on1_incomingCall(const QString &accountID, const QString & callID void SFLPhone::on1_incomingMessage(const QString &accountID, const QString &message) { - qDebug() << "on_incomingMessage !"; + qDebug() << "on_incomingMessage ! "; } void SFLPhone::on1_voiceMailNotify(const QString &accountID, int count) { - qDebug() << "on_voiceMailNotify !"; + qDebug() << "on_voiceMailNotify ! " << count << " new voice mails for account " << accountID; } void SFLPhone::on1_volumeChanged(const QString &device, double value) diff --git a/sflphone_kde/SFLPhone.h b/sflphone_kde/SFLPhone.h index fabd977e28..5f725590ee 100644 --- a/sflphone_kde/SFLPhone.h +++ b/sflphone_kde/SFLPhone.h @@ -48,11 +48,11 @@ private slots: } } - void on_actionAfficher_les_barres_de_volume_toggled(); - void on_actionAfficher_le_clavier_toggled(); - void on_actionConfigurer_les_comptes_triggered(); - void on_actionConfigurer_le_son_triggered(); - void on_actionConfigurer_SFLPhone_triggered(); + void on_action_displayVolumeControls_toggled(); + void on_action_displayDialpad_toggled(); + void on_action_configureAccounts_triggered(); + void on_action_configureAudio_triggered(); + void on_action_configureSflPhone_triggered(); void on_action_accept_triggered(); void on_action_refuse_triggered(); void on_action_hold_triggered(); @@ -75,7 +75,7 @@ private slots: void on_pushButton_diese_clicked(); void on_pushButton_etoile_clicked(); - void on_label_searchHistory_textChanged(const QString & text); + void on_label_searchHistory_textChanged(); void on_slider_recVol_valueChanged(int value); void on_slider_sndVol_valueChanged(int value); diff --git a/sflphone_kde/main.cpp b/sflphone_kde/main.cpp index da4fa231ff..db21401070 100644 --- a/sflphone_kde/main.cpp +++ b/sflphone_kde/main.cpp @@ -1,13 +1,26 @@ #include <QApplication> +#include "kapplication.h" +#include "kcmdlineargs.h" +#include "kaboutdata.h" #include <QtGui> #include "ConfigDialog.h" #include "SFLPhone.h" -int main(int argc, char *argv[]) +static const char description[] = I18N_NOOP("A KDE 4 Client for SflPhone"); + +static const char version[] = "0.1"; + +int main(int argc, char **argv) { try { - QApplication app(argc, argv); + KAboutData about("sflphone_kde", 0, ki18n("sflphone_kde"), version, ki18n(description), + KAboutData::License_GPL, ki18n("(C) 2009 Jérémy Quentin"), KLocalizedString(), 0, "jeremy.quentin@gsavoirfairelinux.com"); + about.addAuthor( ki18n("Jérémy Quentin"), KLocalizedString(), "jeremy.quentin@gmail.com" ); + KCmdLineArgs::init(argc, argv, &about); + KCmdLineOptions options; + //options.add("+[URL]", ki18n( "Document to open" )); + KApplication app; QString locale = QLocale::system().name(); diff --git a/sflphone_kde/resources.qrc b/sflphone_kde/resources.qrc index ab01ffff90..f4b96db5f2 100644 --- a/sflphone_kde/resources.qrc +++ b/sflphone_kde/resources.qrc @@ -1,5 +1,7 @@ <RCC> <qresource prefix="images" > + <file>icons/add.png</file> + <file>icons/remove.png</file> <file>icons/del_off.png</file> <file>icons/del_on.png</file> <file>icons/accept.svg</file> diff --git a/sflphone_kde/sflphone-qt.ui b/sflphone_kde/sflphone-qt.ui index bfba474751..b92044de3f 100644 --- a/sflphone_kde/sflphone-qt.ui +++ b/sflphone_kde/sflphone-qt.ui @@ -368,12 +368,12 @@ <property name="title" > <string>&Configuration</string> </property> - <addaction name="actionAfficher_les_barres_de_volume" /> - <addaction name="actionAfficher_le_clavier" /> + <addaction name="action_displayVolumeControls" /> + <addaction name="action_displayDialpad" /> <addaction name="separator" /> - <addaction name="actionConfigurer_les_comptes" /> - <addaction name="actionConfigurer_le_son" /> - <addaction name="actionConfigurer_SFLPhone" /> + <addaction name="action_configureAccounts" /> + <addaction name="action_configureAudio" /> + <addaction name="action_configureSflPhone" /> </widget> <widget class="QMenu" name="menuAide" > <property name="title" > @@ -465,7 +465,7 @@ <string>&Boîte Vocale</string> </property> </action> - <action name="actionConfigurer_les_comptes" > + <action name="action_configureAccounts" > <property name="icon" > <iconset> <normaloff>:/Images/stock_person.svg</normaloff>:/Images/stock_person.svg</iconset> @@ -474,7 +474,7 @@ <string>Configurer les &comptes</string> </property> </action> - <action name="actionConfigurer_le_son" > + <action name="action_configureAudio" > <property name="icon" > <iconset> <normaloff>:/Images/icon_volume.svg</normaloff>:/Images/icon_volume.svg</iconset> @@ -483,7 +483,7 @@ <string>Configurer le &son</string> </property> </action> - <action name="actionConfigurer_SFLPhone" > + <action name="action_configureSflPhone" > <property name="icon" > <iconset> <normaloff>:/Images/sflphone.png</normaloff>:/Images/sflphone.png</iconset> @@ -492,7 +492,7 @@ <string>&Configurer SFLPhone</string> </property> </action> - <action name="actionAfficher_les_barres_de_volume" > + <action name="action_displayVolumeControls" > <property name="checkable" > <bool>true</bool> </property> @@ -512,7 +512,7 @@ <string>&About</string> </property> </action> - <action name="actionAfficher_le_clavier" > + <action name="action_displayDialpad" > <property name="checkable" > <bool>true</bool> </property> diff --git a/sflphone_kde/sflphone_kde.kdevelop.pcs b/sflphone_kde/sflphone_kde.kdevelop.pcs deleted file mode 100644 index 19c8c9a9535818c626f537ad1a52607169ede3de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 194763 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 XnUn<OBBV)3q^$?!w>?0iLl6T1L>k07 diff --git a/sflphone_kde/sflphone_kde.kdevses b/sflphone_kde/sflphone_kde.kdevses deleted file mode 100644 index bd9758e369..0000000000 --- a/sflphone_kde/sflphone_kde.kdevses +++ /dev/null @@ -1,56 +0,0 @@ -<?xml version = '1.0' encoding = 'UTF-8'?> -<!DOCTYPE KDevPrjSession> -<KDevPrjSession> - <DocsAndViews NumberOfDocuments="9" > - <Doc0 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/ConfigDialog.cpp" > - <View0 Encoding="" Type="Source" /> - </Doc0> - <Doc1 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/SFLPhone.cpp" > - <View0 Encoding="" line="229" Type="Source" /> - </Doc1> - <Doc2 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/Call.cpp" > - <View0 Encoding="" Type="Source" /> - </Doc2> - <Doc3 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/Call.h" > - <View0 Encoding="" Type="Source" /> - </Doc3> - <Doc4 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/sflphone_const.h" > - <View0 Encoding="" Type="Source" /> - </Doc4> - <Doc5 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/SFLPhone.h" > - <View0 Encoding="" Type="Source" /> - </Doc5> - <Doc6 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/configurationmanager_interface_singleton.cpp" > - <View0 Encoding="" Type="Source" /> - </Doc6> - <Doc7 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/Account.cpp" > - <View0 Encoding="" line="90" Type="Source" /> - </Doc7> - <Doc8 NumberOfViews="1" URL="file:///home/jquentin/sflphone/sflphone_kde/sflphone_kdeui.rc" > - <View0 Encoding="" line="8" Type="Source" /> - </Doc8> - </DocsAndViews> - <pluginList> - <kdevdebugger> - <breakpointList/> - <showInternalCommands value="0" /> - </kdevdebugger> - <kdevastyle> - <Extensions ext="*.cpp *.h *.hpp,*.c *.h,*.cxx *.hxx,*.c++ *.h++,*.cc *.hh,*.C *.H,*.diff ,*.inl,*.java,*.moc,*.patch,*.tlh,*.xpm" /> - <AStyle IndentPreprocessors="0" FillCount="4" PadParenthesesOut="1" IndentNamespaces="1" IndentLabels="1" Fill="Tabs" MaxStatement="40" Brackets="Break" MinConditional="-1" IndentBrackets="0" PadParenthesesUn="1" BlockBreak="0" KeepStatements="1" KeepBlocks="1" BlockIfElse="0" IndentSwitches="1" PadOperators="0" FStyle="UserDefined" IndentCases="0" FillEmptyLines="0" BracketsCloseHeaders="0" BlockBreakAll="0" PadParenthesesIn="1" IndentClasses="1" IndentBlocks="0" FillForce="0" /> - </kdevastyle> - <kdevbookmarks> - <bookmarks> - <bookmark url="/home/jquentin/sflphone_kde/build/ui_sflphone-qt.h" > - <mark line="36" /> - </bookmark> - </bookmarks> - </kdevbookmarks> - <kdevvalgrind> - <executable path="" params="" /> - <valgrind path="" params="" /> - <calltree path="" params="" /> - <kcachegrind path="" /> - </kdevvalgrind> - </pluginList> -</KDevPrjSession> -- GitLab