diff --git a/sflphone-client-kde/po/ru/sflphone-client-kde.po b/sflphone-client-kde/po/ru/sflphone-client-kde.po index 7e1c705bbf1c9701845cbd4753bc54915c11c0e8..6cae504c5a3953557cc8b1e6bb42a1e8906aaf28 100644 --- a/sflphone-client-kde/po/ru/sflphone-client-kde.po +++ b/sflphone-client-kde/po/ru/sflphone-client-kde.po @@ -3,774 +3,1531 @@ # This file is distributed under the same license as the sflphone package. # Hussein Abdallah <hussein.abdallah@savoirfairelinux.com>, 2009 # -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: SFLphone 0.9.6\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-07-08 15:18-0400\n" -"PO-Revision-Date: 2009-06-08 10:19 GMT-5\n" -"Last-Translator: HUSSEIN ABDALLAH <hussein.abdallah@savoirfairelinux.com>\n" -"Language-Team: Savoir-Faire Linux Inc <sflphoneteam@savoirfairelinux.com>\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../src/Account.cpp:34 -msgctxt "account state" -msgid "Registered" -msgstr "" - -#: ../src/Account.cpp:36 -msgctxt "account state" -msgid "Not Registered" -msgstr "" - -#: ../src/Account.cpp:38 -msgctxt "account state" -msgid "Trying..." -msgstr "" - -#: ../src/Account.cpp:40 -msgctxt "account state" -msgid "Error" -msgstr "" - -#: ../src/Account.cpp:42 -#, fuzzy -msgctxt "account state" -msgid "Bad authentification" -msgstr "Включить предупреждения" - -#: ../src/Account.cpp:44 -msgctxt "account state" -msgid "Network unreachable" -msgstr "" - -#: ../src/Account.cpp:46 -msgctxt "account state" -msgid "Host unreachable" -msgstr "" - -#: ../src/Account.cpp:48 -#, fuzzy -msgctxt "account state" -msgid "Stun configuration error" -msgstr "Окно настроек" - -#: ../src/Account.cpp:50 -#, fuzzy -msgctxt "account state" -msgid "Stun server invalid" -msgstr "STUN-сервер" - -#: ../src/Account.cpp:51 -msgctxt "account state" -msgid "Invalid" -msgstr "" - -#: ../src/AccountWizard.cpp:163 ../src/AccountWizard.cpp:278 -msgid "Account Creation Wizard" -msgstr "Мастер настройки SFLphone" - -#: ../src/AccountWizard.cpp:199 -msgid "Creation of account succeed with these parameters" -msgstr "Успешное создание аккаунта с этими настройками" - -#: ../src/AccountWizard.cpp:211 -msgid "Creation of account has failed for the reason" -msgstr "Создание аккаунта не получилось по этим причинам" - -#: ../src/AccountWizard.cpp:217 -msgid "Register of account succeed with these parameters" -msgstr "Успешное регистрация аккаунта с этими настройками" - -#: ../src/AccountWizard.cpp:255 ../src/AccountWizard.cpp:440 -#: ../build/src/ui_dlgaccountsbase.h:359 -msgid "Alias" -msgstr "Псевдоним" - -#: ../src/AccountWizard.cpp:256 ../src/AccountWizard.cpp:441 -#: ../build/src/ui_dlgaccountsbase.h:366 -msgid "Server" -msgstr "Сервер" - -#: ../src/AccountWizard.cpp:257 ../src/AccountWizard.cpp:442 -#: ../build/src/ui_dlgaccountsbase.h:367 -msgid "User" -msgstr "Пользователь" - -#: ../src/AccountWizard.cpp:258 ../src/AccountWizard.cpp:443 -#: ../build/src/ui_dlgaccountsbase.h:368 -msgid "Password" -msgstr "Пароль" - -#: ../src/AccountWizard.cpp:259 ../build/src/ui_dlgaccountsbase.h:360 -msgid "Protocol" -msgstr "Протокол" - -#: ../src/AccountWizard.cpp:260 ../build/src/ui_dlgaccountsbase.h:369 -#: ../build/src/ui_sflphone_kdeview_base.h:396 -msgid "Mailbox" -msgstr "Звуковые сообщения" - -#: ../src/AccountWizard.cpp:279 -#, fuzzy -msgid "Welcome to the Account creation wizard of SFLphone" -msgstr "Добро пожаловать в мастер настройки SFLphone" - -#: ../src/AccountWizard.cpp:281 -msgid "This wizard will help you setting up an account." -msgstr "Этот мастер установки поможет вам настроить ваш аккаунт." - -#: ../src/AccountWizard.cpp:309 ../src/conf/ConfigurationDialog.cpp:50 -msgid "Accounts" -msgstr "Аккаунты" - -#: ../src/AccountWizard.cpp:310 -msgid "Please choose between those options :" -msgstr "Выберите пожалуйста тип аккаунта :" - -#: ../src/AccountWizard.cpp:312 -msgid "Create a free SIP/IAX2 account on sflphone.org" -msgstr "Создать бесплатный SIP/IAX2-аккаунт на sflphone.org" - -#: ../src/AccountWizard.cpp:313 -msgid "Register an existing SIP/IAX2 account" -msgstr "Зарегистрировать существующий SIP или IAX2 аккаунт" - -#: ../src/AccountWizard.cpp:352 -msgid "VoIP Protocols" -msgstr "VoIP-протоколы" - -#: ../src/AccountWizard.cpp:353 -msgid "Choose the account type" -msgstr "Выберите тип аккаунта:" - -#: ../src/AccountWizard.cpp:355 -msgid "Register a SIP (Session Initiation Protocol) account" -msgstr "Зарегистрировать существующий SIP или IAX2 аккаунт" - -#: ../src/AccountWizard.cpp:356 -msgid "Register a IAX2 (InterAsterisk eXchange) account" -msgstr "Зарегистрируете IAX2-аккаунт" - -#: ../src/AccountWizard.cpp:395 -msgid "Optionnal Email Address" -msgstr "Электронный адрес (необязательный) " - -#: ../src/AccountWizard.cpp:396 -msgid "This email address will be used to send your voicemail messages." -msgstr "Этот электронный адрес будет использоваться для речевых сообщений" - -#: ../src/AccountWizard.cpp:398 -msgid "Email address" -msgstr "Адрес эл. почты" - -#: ../src/AccountWizard.cpp:432 -msgid "SIP Account Settings" -msgstr "Настройки SIP-аккаунта" - -#: ../src/AccountWizard.cpp:436 -msgid "IAX2 Account Settings" -msgstr "Настройки IAX2-аккаунта" - -#: ../src/AccountWizard.cpp:438 -msgid "Please full these settings fields." -msgstr "Заполните пожалуйста эти поля." - -#: ../src/AccountWizard.cpp:444 -msgid "Voicemail number" -msgstr "" - -#: ../src/AccountWizard.cpp:523 -msgid "Network Address Translation (NAT)" -msgstr "Network Address Translation (NAT)" - -#: ../src/AccountWizard.cpp:524 -msgid "" -"You should probably enable this option if you're placed under a firewall" -msgstr "Вы наверное должны это включить если вы находитесь за сетевым экраном." - -#: ../src/AccountWizard.cpp:526 -msgid "Enable STUN" -msgstr "Включить STUN" - -#: ../src/AccountWizard.cpp:527 -msgid "Stun Server" -msgstr "STUN-сервер" - -#: ../src/AccountWizard.cpp:561 -msgid "Account Definition Finished" -msgstr "Настройка аккаунта закончена." - -#: ../src/AccountWizard.cpp:562 -msgid "" -"After checking the settings you chose, click \"Finish\" to create the " -"account." -msgstr "" -"После просмотра выбранных настроек, нажмите на \"Закончить\" чтобы создать " -"аккаунт. " - -#: ../src/ActionSetAccountFirst.cpp:26 -msgid "Default account" -msgstr "" - -#: ../src/Call.cpp:116 -msgid "Transfer to : " -msgstr "Переслать звонок на другой номер :" - -#: ../src/main.cpp:34 -msgid "SFLphone KDE Client" -msgstr "" - -#: ../src/main.cpp:38 -msgid "(C) 2009 Savoir-faire Linux" -msgstr "" - -#: ../src/main.cpp:42 -msgid "Jérémy Quentin" -msgstr "" - -#: ../src/main.cpp:43 -msgctxt "NAME OF TRANSLATORS" -msgid "Your names" -msgstr "" - -#: ../src/main.cpp:43 -msgctxt "EMAIL OF TRANSLATORS" -msgid "Your emails" -msgstr "" - -#: ../src/SFLPhone.cpp:62 ../src/sflphone_kdeview.cpp:1066 -#: ../src/sflphone_kdeview.cpp:1071 ../src/sflphone_kdeview.cpp:1076 -#, fuzzy -msgid "SFLphone" -msgstr "SFLPhone" - -#: ../src/SFLPhone.cpp:181 -msgid "You still have some calls open. Please close all calls before quitting." -msgstr "" -"У вас ещё есть неоконченные звонки. Пожалуйста проверьте что все звонки " -"окончены перед тем как выйти." - -#: ../src/SFLPhone.cpp:209 -msgid "Incoming call" -msgstr "Входящий звонок" - -#: ../src/SFLPhone.cpp:210 -msgid "You have an incoming call from" -msgstr "Входящей звонок от " - -#: ../src/SFLPhone.cpp:210 -msgid "Click to accept or refuse it." -msgstr "Нажмите чтобы принять или отклонить." - -#: ../src/sflphone_kdeview.cpp:883 -msgid "No account registered" -msgstr "" - -#: ../src/sflphone_kdeview.cpp:887 -#, fuzzy -msgid "Using account" -msgstr "Настроить &аккаунты" - -#: ../src/sflphone_kdeview.cpp:1066 -msgid "Main screen" -msgstr "Главный экран" - -#: ../src/sflphone_kdeview.cpp:1071 ../build/src/ui_dlggeneralbase.h:165 -msgid "Call history" -msgstr "Журнал звонков" - -#: ../src/sflphone_kdeview.cpp:1076 -#: ../build/src/ui_sflphone_kdeview_base.h:407 -msgid "Address book" -msgstr "Адресная книга" - -#: ../src/sflphone_kdeview.cpp:1090 ../src/sflphone_kdeview.cpp:1151 -msgid "Edit before call" -msgstr "Изменить перед звонком" - -#: ../src/sflphone_const.h:56 -msgid "Call" -msgstr "Звонок" - -#: ../src/sflphone_const.h:57 ../build/src/ui_sflphone_kdeview_base.h:392 -msgid "Hang up" -msgstr "Положить трубку" - -#: ../src/sflphone_const.h:58 ../build/src/ui_sflphone_kdeview_base.h:393 -msgid "Hold" -msgstr "Удержать звонок" - -#: ../src/sflphone_const.h:59 ../build/src/ui_sflphone_kdeview_base.h:394 -msgid "Transfer" -msgstr "Переслать звонок на другой номер" - -#: ../src/sflphone_const.h:60 -msgid "Record" -msgstr "Записать" - -#: ../src/sflphone_const.h:61 -msgid "Accept" -msgstr "Принять" - -#: ../src/sflphone_const.h:62 -msgid "Refuse" -msgstr "Отклонить" - -#: ../src/sflphone_const.h:63 -msgid "Unhold" -msgstr "Снова взять" - -#: ../src/sflphone_const.h:64 -msgid "Give up transfer" -msgstr "Отменить пересылку звонка" - -#: ../src/sflphone_const.h:65 -msgid "Call back" -msgstr "Перезвонить" - -#: ../src/sflphone_const.h:66 -msgid "Give up search" -msgstr "Отменить поиск" - -#: ../src/conf/ConfigurationDialog.cpp:48 ../build/src/ui_dlgrecordbase.h:91 -msgid "General" -msgstr "Общие настройки" - -#: ../src/conf/ConfigurationDialog.cpp:49 -msgid "Display" -msgstr "Экран" - -#: ../src/conf/ConfigurationDialog.cpp:51 -msgid "Audio" -msgstr "Звук" - -#: ../src/conf/ConfigurationDialog.cpp:52 -msgid "Address Book" -msgstr "Адресная книга" - -#: ../src/conf/ConfigurationDialog.cpp:53 -#, fuzzy -msgctxt "Config section" -msgid "Record" -msgstr "Записать" - -#: ../src/conf/ConfigurationDialog.cpp:54 -msgid "Hooks" -msgstr "перехватчики (hooks)" - -#: ../build/src/ui_dlgaccountsbase.h:321 -#: ../build/src/ui_dlgaddressbookbase.h:142 ../build/src/ui_dlgaudiobase.h:263 -#: ../build/src/ui_dlgdisplaybase.h:120 ../build/src/ui_dlggeneralbase.h:164 -#: ../build/src/ui_dlghooksbase.h:173 ../build/src/ui_dlgrecordbase.h:90 -#: ../build/src/ui_sflphone_kdeview_base.h:390 -msgid "Form" -msgstr "" - -#: ../build/src/ui_dlgaccountsbase.h:323 -msgid "" -"By default, when you place a call, sflphone will use the first account in " -"this list which is \"registered\". Change the order of the accounts using " -"the \"Up\" and \"Down\" arrows. Enable/disable them by checking/unchecking " -"them on the left of the item. Add or remove some with \"Plus\" and \"Sub\" " -"buttons. Edit the selected account with the form on the right." -msgstr "" - -#: ../build/src/ui_dlgaccountsbase.h:327 -#, fuzzy -msgid "Remove the selected account" -msgstr "Убрать этот аккаунт" - -#: ../build/src/ui_dlgaccountsbase.h:330 -msgid "" -"This button will remove the selected account in the list below. Be sure you " -"really don't need it anymore. If you think you might use it again later, " -"just uncheck it." -msgstr "" - -#: ../build/src/ui_dlgaccountsbase.h:335 -msgid "Remove" -msgstr "" - -#: ../build/src/ui_dlgaccountsbase.h:336 -msgid "Backspace, Return" -msgstr "" - -#: ../build/src/ui_dlgaccountsbase.h:338 -msgid "Add a new account" -msgstr "Добавить новый аккаунт" - -#: ../build/src/ui_dlgaccountsbase.h:341 -msgid "" -"This button enables you to initialize a new account. You will then be able " -"to edit it using the form on the right." -msgstr "" - -#: ../build/src/ui_dlgaccountsbase.h:343 -msgid "Add" -msgstr "" - -#: ../build/src/ui_dlgaccountsbase.h:345 -#, fuzzy -msgid "Get this account down" -msgstr "Убрать этот аккаунт" - -#: ../build/src/ui_dlgaccountsbase.h:348 ../build/src/ui_dlgaccountsbase.h:355 -msgid "" -"By default, when you place a call, sflphone will use the first account in " -"this list which is \"registered\". Change the order of the accounts using " -"the \"Up\" and \"Down\" arrows." -msgstr "" - -#: ../build/src/ui_dlgaccountsbase.h:350 -msgid "Down" -msgstr "Вниз" - -#: ../build/src/ui_dlgaccountsbase.h:352 -#, fuzzy -msgid "Get this account up" -msgstr "Убрать этот аккаунт" - -#: ../build/src/ui_dlgaccountsbase.h:357 -msgid "Up" -msgstr "Вверх" - -#: ../build/src/ui_dlgaccountsbase.h:358 -msgid "Apply" -msgstr "Применить" - -#: ../build/src/ui_dlgaccountsbase.h:363 -msgid "SIP" -msgstr "SIP" - -#: ../build/src/ui_dlgaccountsbase.h:364 -msgid "IAX" -msgstr "IAX" - -#: ../build/src/ui_dlgaccountsbase.h:370 -msgid "State" -msgstr "Статус" - -#: ../build/src/ui_dlgaccountsbase.h:373 -msgid "Stun settings will be applied on each account" -msgstr "Stun-настройки будут использоваться для всех аккаунтов" - -#: ../build/src/ui_dlgaccountsbase.h:374 -#, fuzzy -msgid "Enable Stun" -msgstr "&Включить STUN" - -#: ../build/src/ui_dlgaccountsbase.h:375 -msgid "choose Stun server (example : stunserver.org)" -msgstr "" - -#: ../build/src/ui_dlgaddressbookbase.h:143 -msgid "Maximum &results" -msgstr "Максимальное &количество результатов" - -#: ../build/src/ui_dlgaddressbookbase.h:144 -msgid "Display &photo if available" -msgstr "Показать &фотографию контакта (если имеется)" - -#: ../build/src/ui_dlgaddressbookbase.h:145 -msgid "Display phone numbers of these &types :" -msgstr "Если контакт имеет несколько номеров, показать &только :" - -#: ../build/src/ui_dlgaddressbookbase.h:146 -msgid "&Work" -msgstr "&Рабочий номер" - -#: ../build/src/ui_dlgaddressbookbase.h:147 -msgid "&Mobile" -msgstr "Номер &мобильника" - -#: ../build/src/ui_dlgaddressbookbase.h:148 -msgid "&Home" -msgstr "&Домашний номер" - -#: ../build/src/ui_dlgaudiobase.h:265 -#, fuzzy -msgid "Audio device" -msgstr "Звуковое устройство" - -#: ../build/src/ui_dlgaudiobase.h:268 -msgid "ALSA" -msgstr "ALSA" - -#: ../build/src/ui_dlgaudiobase.h:269 -msgid "PulseAudio" -msgstr "PulseAudio" - -#: ../build/src/ui_dlgaudiobase.h:271 -#, fuzzy -msgid "Enable ringtones" -msgstr "Включить звонок" - -#: ../build/src/ui_dlgaudiobase.h:272 -msgid "*.ul *.au *.wav" -msgstr "" - -#: ../build/src/ui_dlgaudiobase.h:273 -msgid "&Codecs" -msgstr "&Кодеки" - -#: ../build/src/ui_dlgaudiobase.h:275 -msgid "Active" -msgstr "" - -#: ../build/src/ui_dlgaudiobase.h:277 -msgid "Name" -msgstr "Имя" - -#: ../build/src/ui_dlgaudiobase.h:279 -msgid "Frequency" -msgstr "Частота" - -#: ../build/src/ui_dlgaudiobase.h:281 -msgid "Bitrate" -msgstr "Битрейт" - -#: ../build/src/ui_dlgaudiobase.h:283 -msgid "Bandwidth" -msgstr "Пропускная способность" - -#: ../build/src/ui_dlgaudiobase.h:286 -msgid "ALSA settings" -msgstr "Настройка ALSA" - -#: ../build/src/ui_dlgaudiobase.h:287 -#, fuzzy -msgid "ALSA plugin" -msgstr "ALSA-плагин" - -#: ../build/src/ui_dlgaudiobase.h:288 -msgid "In" -msgstr "" - -#: ../build/src/ui_dlgaudiobase.h:289 -msgid "Out" -msgstr "" - -#: ../build/src/ui_dlgaudiobase.h:290 -msgid "PulseAudio settings" -msgstr "Настройка PulseAudio" - -#: ../build/src/ui_dlgaudiobase.h:291 -msgid "Mute other applications during a call" -msgstr "Приглушить звук других програм во время звонка" - -#: ../build/src/ui_dlgdisplaybase.h:121 -msgid "Enable notifications" -msgstr "Включить предупреждения" - -#: ../build/src/ui_dlgdisplaybase.h:122 -msgid "On incoming &calls" -msgstr "При входящих звонках" - -#: ../build/src/ui_dlgdisplaybase.h:123 -msgid "On &messages" -msgstr "При звуковых &сообщениях" - -#: ../build/src/ui_dlgdisplaybase.h:124 -msgid "Show main window" -msgstr "Показать главное окно" - -#: ../build/src/ui_dlgdisplaybase.h:125 -msgid "On &start" -msgstr "При &запуске" - -#: ../build/src/ui_dlgdisplaybase.h:126 -msgid "On &incoming calls" -msgstr "При входящих звонках" - -#: ../build/src/ui_dlggeneralbase.h:166 -msgid "Keep my history for at least" -msgstr "" - -#: ../build/src/ui_dlggeneralbase.h:167 -msgid "days" -msgstr "" - -#: ../build/src/ui_dlggeneralbase.h:168 -#, fuzzy -msgid "Clear history" -msgstr "Стереть журнал" - -#: ../build/src/ui_dlggeneralbase.h:169 -msgid "Connection" -msgstr "Подключение" - -#: ../build/src/ui_dlggeneralbase.h:170 -#, fuzzy -msgid "SIP Port" -msgstr "SIP-порт" - -#: ../build/src/ui_dlggeneralbase.h:171 -msgid "Attention " -msgstr "Внимание" - -#: ../build/src/ui_dlghooksbase.h:174 -msgid "URL Argument" -msgstr "" - -#: ../build/src/ui_dlghooksbase.h:175 -#, c-format -msgid "Custom commands with URL %s will be replaced with the passed URL." -msgstr "" - -#: ../build/src/ui_dlghooksbase.h:176 -msgid "Trigger on specific SIP header" -msgstr "" - -#: ../build/src/ui_dlghooksbase.h:177 -msgid "Trigger on IAX2 URL" -msgstr "" - -#: ../build/src/ui_dlghooksbase.h:178 -#, fuzzy -msgid "Command to run" -msgstr "Команда" - -#: ../build/src/ui_dlghooksbase.h:179 -msgid "Phone number formatting" -msgstr "Формат номера телефона" - -#: ../build/src/ui_dlghooksbase.h:180 -msgid "Add phone number prefix" -msgstr "Добавить перед на набранными номерами" - -#: ../build/src/ui_dlgrecordbase.h:92 -msgid "Destination folder" -msgstr "Папка для записи" - -#: ../build/src/ui_sflphone_kdeview_base.h:391 -#, fuzzy -msgid "Pick up" -msgstr "&Взять трубку" - -#: ../build/src/ui_sflphone_kdeview_base.h:395 -#, fuzzy -msgid "History" -msgstr "Журнал" - -#: ../build/src/ui_sflphone_kdeview_base.h:397 -#, fuzzy -msgid "Configure accounts" -msgstr "Настроить &аккаунты" - -#: ../build/src/ui_sflphone_kdeview_base.h:398 -#, fuzzy -msgid "Configure audio" -msgstr "Настроить &звук" - -#: ../build/src/ui_sflphone_kdeview_base.h:399 -#: ../build/src/ui_sflphone_kdeview_base.h:401 -#, fuzzy -msgid "Configure SFLphone" -msgstr "&Настроить SFLPhone" - -#: ../build/src/ui_sflphone_kdeview_base.h:403 -#, fuzzy -msgid "Display volume bars" -msgstr "Показать уровень &громкости" - -#: ../build/src/ui_sflphone_kdeview_base.h:404 -#, fuzzy -msgid "Display dialpad" -msgstr "Показать &клавиатуру" - -#: ../build/src/ui_sflphone_kdeview_base.h:405 -#, fuzzy -msgctxt "Action record a call" -msgid "Record" -msgstr "Записать" - -#: ../build/src/ui_sflphone_kdeview_base.h:406 -#, fuzzy -msgid "Account creation wizard" -msgstr "&Мастер настройки SFLphone" - -#: ../build/src/ui_sflphone_kdeview_base.h:408 -msgid "Attention:number of results exceeds max displayed." -msgstr "" - -#~ msgid "Attention : SIP port must be over 1024 !" -#~ msgstr "Внимание : SIP-порт должен быть больше чем 1024 !" - -#~ msgid "Attention : SIP port must be under 65536 !" -#~ msgstr "Внимание : SIP-порт должен быть меньше чем 65536 !" - -#~ msgid "about" -#~ msgstr "О" - -#~ msgid "Configure general settings" -#~ msgstr "Общие настройки" - -#~ msgid "&Capacity" -#~ msgstr "Вместимость" - -#~ msgid "Configure display" -#~ msgstr "Настроить экран" - -#~ msgid "Configure user accounts" -#~ msgstr "Настройка аккаунтов пользователей" - -#~ msgid "&Alias" -#~ msgstr "Псевдоним" - -#~ msgid "&Protocol" -#~ msgstr "Протокол" - -#~ msgid "&Server" -#~ msgstr "&Сервер" - -#~ msgid "&User" -#~ msgstr "&Пользователь" - -#~ msgid "Pass&word" -#~ msgstr "Па&роль" - -#~ msgid "&Mailbox" -#~ msgstr "&Звуковые сообщения" - -#~ msgid "Configure audio settings" -#~ msgstr "Настройки звука" - -#~ msgid "Configure record settings" -#~ msgstr "Настроить запись звонков" - -#~ msgid "Configure address book settings" -#~ msgstr "Настроить адресную книгу" - -#~ msgid "Configure hooks settings" -#~ msgstr "Настроить перехватчики" - -#~ msgid "SIP Protocol" -#~ msgstr "SIP-Протокол" - -#~ msgid "IAX2 Protocol" -#~ msgstr "IAX2-Протокол" - -#~ msgid "SIP Header" -#~ msgstr "SIP Заголовок" - -#~ msgid "Prepend" -#~ msgstr "Добавить в начало" - -#~ msgid "&Hang up" -#~ msgstr "&Положить трубку" - -#~ msgid "H&old" -#~ msgstr "&Удержать звонок" - -#~ msgid "&Transfer" -#~ msgstr "Пе&реслать звонок на другой номер" - -#~ msgid "&About" -#~ msgstr "&О SFLphone" - -#~ msgid "&Record" -#~ msgstr "Записать" +msgid "" +msgstr "" +"Project-Id-Version: SFLphone 0.9.6\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-07-08 15:18-0400\n" +"PO-Revision-Date: 2009-06-08 10:19 GMT-5\n" +"Last-Translator: HUSSEIN ABDALLAH <hussein.abdallah@savoirfairelinux.com>\n" +"Language-Team: Savoir-Faire Linux Inc <sflphoneteam@savoirfairelinux.com>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../src/Account.cpp:34 +msgctxt "account state" +msgid "Registered" +msgstr "" + +#: ../src/Account.cpp:36 +msgctxt "account state" +msgid "Not Registered" +msgstr "" + +#: ../src/Account.cpp:38 +msgctxt "account state" +msgid "Trying..." +msgstr "" + +#: ../src/Account.cpp:40 +msgctxt "account state" +msgid "Error" +msgstr "" + +#: ../src/Account.cpp:42 +#, fuzzy +msgctxt "account state" +msgid "Bad authentification" +msgstr "Включить предупреждения" + +#: ../src/Account.cpp:44 +msgctxt "account state" +msgid "Network unreachable" +msgstr "" + +#: ../src/Account.cpp:46 +msgctxt "account state" +msgid "Host unreachable" +msgstr "" + +#: ../src/Account.cpp:48 +#, fuzzy +msgctxt "account state" +msgid "Stun configuration error" +msgstr "Окно настроек" + +#: ../src/Account.cpp:50 +#, fuzzy +msgctxt "account state" +msgid "Stun server invalid" +msgstr "STUN-сервер" + +#: ../src/Account.cpp:51 +msgctxt "account state" +msgid "Invalid" +msgstr "" + +#: ../src/AccountWizard.cpp:163 ../src/AccountWizard.cpp:278 +msgid "Account Creation Wizard" +msgstr "Мастер настройки SFLphone" + +#: ../src/AccountWizard.cpp:199 +msgid "Creation of account succeed with these parameters" +msgstr "Успешное создание аккаунта с этими настройками" + +#: ../src/AccountWizard.cpp:211 +msgid "Creation of account has failed for the reason" +msgstr "Создание аккаунта не получилось по этим причинам" + +#: ../src/AccountWizard.cpp:217 +msgid "Register of account succeed with these parameters" +msgstr "Успешное регистрация аккаунта с этими настройками" + +#: ../src/AccountWizard.cpp:255 ../src/AccountWizard.cpp:440 +#: ../build/src/ui_dlgaccountsbase.h:359 +msgid "Alias" +msgstr "Псевдоним" + +#: ../src/AccountWizard.cpp:256 ../src/AccountWizard.cpp:441 +#: ../build/src/ui_dlgaccountsbase.h:366 +msgid "Server" +msgstr "Сервер" + +#: ../src/AccountWizard.cpp:257 ../src/AccountWizard.cpp:442 +#: ../build/src/ui_dlgaccountsbase.h:367 +msgid "User" +msgstr "Пользователь" + +#: ../src/AccountWizard.cpp:258 ../src/AccountWizard.cpp:443 +#: ../build/src/ui_dlgaccountsbase.h:368 +msgid "Password" +msgstr "Пароль" + +#: ../src/AccountWizard.cpp:259 ../build/src/ui_dlgaccountsbase.h:360 +msgid "Protocol" +msgstr "Протокол" + +#: ../src/AccountWizard.cpp:260 ../build/src/ui_dlgaccountsbase.h:369 +#: ../build/src/ui_sflphone_kdeview_base.h:396 +msgid "Mailbox" +msgstr "Звуковые сообщения" + +#: ../src/AccountWizard.cpp:279 +#, fuzzy +msgid "Welcome to the Account creation wizard of SFLphone" +msgstr "Добро пожаловать в мастер настройки SFLphone" + +#: ../src/AccountWizard.cpp:281 +msgid "This wizard will help you setting up an account." +msgstr "Этот мастер установки поможет вам настроить ваш аккаунт." + +#: ../src/AccountWizard.cpp:309 ../src/conf/ConfigurationDialog.cpp:50 +msgid "Accounts" +msgstr "Аккаунты" + +#: ../src/AccountWizard.cpp:310 +msgid "Please choose between those options :" +msgstr "Выберите пожалуйста тип аккаунта :" + +#: ../src/AccountWizard.cpp:312 +msgid "Create a free SIP/IAX2 account on sflphone.org" +msgstr "Создать бесплатный SIP/IAX2-аккаунт на sflphone.org" + +#: ../src/AccountWizard.cpp:313 +msgid "Register an existing SIP/IAX2 account" +msgstr "Зарегистрировать существующий SIP или IAX2 аккаунт" + +#: ../src/AccountWizard.cpp:352 +msgid "VoIP Protocols" +msgstr "VoIP-протоколы" + +#: ../src/AccountWizard.cpp:353 +msgid "Choose the account type" +msgstr "Выберите тип аккаунта:" + +#: ../src/AccountWizard.cpp:355 +msgid "Register a SIP (Session Initiation Protocol) account" +msgstr "Зарегистрировать существующий SIP или IAX2 аккаунт" + +#: ../src/AccountWizard.cpp:356 +msgid "Register a IAX2 (InterAsterisk eXchange) account" +msgstr "Зарегистрируете IAX2-аккаунт" + +#: ../src/AccountWizard.cpp:395 +msgid "Optionnal Email Address" +msgstr "Электронный адрес (необязательный) " + +#: ../src/AccountWizard.cpp:396 +msgid "This email address will be used to send your voicemail messages." +msgstr "Этот электронный адрес будет использоваться для речевых сообщений" + +#: ../src/AccountWizard.cpp:398 +msgid "Email address" +msgstr "Адрес эл. почты" + +#: ../src/AccountWizard.cpp:432 +msgid "SIP Account Settings" +msgstr "Настройки SIP-аккаунта" + +#: ../src/AccountWizard.cpp:436 +msgid "IAX2 Account Settings" +msgstr "Настройки IAX2-аккаунта" + +#: ../src/AccountWizard.cpp:438 +msgid "Please full these settings fields." +msgstr "Заполните пожалуйста эти поля." + +#: ../src/AccountWizard.cpp:444 +msgid "Voicemail number" +msgstr "" + +#: ../src/AccountWizard.cpp:523 +msgid "Network Address Translation (NAT)" +msgstr "Network Address Translation (NAT)" + +#: ../src/AccountWizard.cpp:524 +msgid "" +"You should probably enable this option if you're placed under a firewall" +msgstr "Вы наверное должны это включить если вы находитесь за сетевым экраном." + +#: ../src/AccountWizard.cpp:526 +msgid "Enable STUN" +msgstr "Включить STUN" + +#: ../src/AccountWizard.cpp:527 +msgid "Stun Server" +msgstr "STUN-сервер" + +#: ../src/AccountWizard.cpp:561 +msgid "Account Definition Finished" +msgstr "Настройка аккаунта закончена." + +#: ../src/AccountWizard.cpp:562 +msgid "" +"After checking the settings you chose, click \"Finish\" to create the " +"account." +msgstr "" +"После просмотра выбранных настроек, нажмите на \"Закончить\" чтобы создать " +"аккаунт. " + +#: ../src/ActionSetAccountFirst.cpp:26 +msgid "Default account" +msgstr "" + +#: ../src/Call.cpp:116 +msgid "Transfer to : " +msgstr "Переслать звонок на другой номер :" + +#: ../src/main.cpp:34 +msgid "SFLphone KDE Client" +msgstr "" + +#: ../src/main.cpp:38 +msgid "(C) 2009 Savoir-faire Linux" +msgstr "" + +#: ../src/main.cpp:42 +msgid "Jérémy Quentin" +msgstr "" + +#: ../src/main.cpp:43 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "" + +#: ../src/main.cpp:43 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "" + +#: ../src/SFLPhone.cpp:62 ../src/sflphone_kdeview.cpp:1066 +#: ../src/sflphone_kdeview.cpp:1071 ../src/sflphone_kdeview.cpp:1076 +#, fuzzy +msgid "SFLphone" +msgstr "SFLPhone" + +#: ../src/SFLPhone.cpp:181 +msgid "You still have some calls open. Please close all calls before quitting." +msgstr "" +"У вас ещё есть неоконченные звонки. Пожалуйста проверьте что все звонки " +"окончены перед тем как выйти." + +#: ../src/SFLPhone.cpp:209 +msgid "Incoming call" +msgstr "Входящий звонок" + +#: ../src/SFLPhone.cpp:210 +msgid "You have an incoming call from" +msgstr "Входящей звонок от " + +#: ../src/SFLPhone.cpp:210 +msgid "Click to accept or refuse it." +msgstr "Нажмите чтобы принять или отклонить." + +#: ../src/sflphone_kdeview.cpp:883 +msgid "No account registered" +msgstr "" + +#: ../src/sflphone_kdeview.cpp:887 +#, fuzzy +msgid "Using account" +msgstr "Настроить &аккаунты" + +#: ../src/sflphone_kdeview.cpp:1066 +msgid "Main screen" +msgstr "Главный экран" + +#: ../src/sflphone_kdeview.cpp:1071 ../build/src/ui_dlggeneralbase.h:165 +msgid "Call history" +msgstr "Журнал звонков" + +#: ../src/sflphone_kdeview.cpp:1076 +#: ../build/src/ui_sflphone_kdeview_base.h:407 +msgid "Address book" +msgstr "Адресная книга" + +#: ../src/sflphone_kdeview.cpp:1090 ../src/sflphone_kdeview.cpp:1151 +msgid "Edit before call" +msgstr "Изменить перед звонком" + +#: ../src/sflphone_const.h:56 +msgid "Call" +msgstr "Звонок" + +#: ../src/sflphone_const.h:57 ../build/src/ui_sflphone_kdeview_base.h:392 +msgid "Hang up" +msgstr "Положить трубку" + +#: ../src/sflphone_const.h:58 ../build/src/ui_sflphone_kdeview_base.h:393 +msgid "Hold" +msgstr "Удержать звонок" + +#: ../src/sflphone_const.h:59 ../build/src/ui_sflphone_kdeview_base.h:394 +msgid "Transfer" +msgstr "Переслать звонок на другой номер" + +#: ../src/sflphone_const.h:60 +msgid "Record" +msgstr "Записать" + +#: ../src/sflphone_const.h:61 +msgid "Accept" +msgstr "Принять" + +#: ../src/sflphone_const.h:62 +msgid "Refuse" +msgstr "Отклонить" + +#: ../src/sflphone_const.h:63 +msgid "Unhold" +msgstr "Снова взять" + +#: ../src/sflphone_const.h:64 +msgid "Give up transfer" +msgstr "Отменить пересылку звонка" + +#: ../src/sflphone_const.h:65 +msgid "Call back" +msgstr "Перезвонить" + +#: ../src/sflphone_const.h:66 +msgid "Give up search" +msgstr "Отменить поиск" + +#: ../src/conf/ConfigurationDialog.cpp:48 ../build/src/ui_dlgrecordbase.h:91 +msgid "General" +msgstr "Общие настройки" + +#: ../src/conf/ConfigurationDialog.cpp:49 +msgid "Display" +msgstr "Экран" + +#: ../src/conf/ConfigurationDialog.cpp:51 +msgid "Audio" +msgstr "Звук" + +#: ../src/conf/ConfigurationDialog.cpp:52 +msgid "Address Book" +msgstr "Адресная книга" + +#: ../src/conf/ConfigurationDialog.cpp:53 +#, fuzzy +msgctxt "Config section" +msgid "Record" +msgstr "Записать" + +#: ../src/conf/ConfigurationDialog.cpp:54 +msgid "Hooks" +msgstr "перехватчики (hooks)" + +#: ../build/src/ui_dlgaccountsbase.h:321 +#: ../build/src/ui_dlgaddressbookbase.h:142 ../build/src/ui_dlgaudiobase.h:263 +#: ../build/src/ui_dlgdisplaybase.h:120 ../build/src/ui_dlggeneralbase.h:164 +#: ../build/src/ui_dlghooksbase.h:173 ../build/src/ui_dlgrecordbase.h:90 +#: ../build/src/ui_sflphone_kdeview_base.h:390 +msgid "Form" +msgstr "" + +#: ../build/src/ui_dlgaccountsbase.h:323 +msgid "" +"By default, when you place a call, sflphone will use the first account in " +"this list which is \"registered\". Change the order of the accounts using " +"the \"Up\" and \"Down\" arrows. Enable/disable them by checking/unchecking " +"them on the left of the item. Add or remove some with \"Plus\" and \"Sub\" " +"buttons. Edit the selected account with the form on the right." +msgstr "" + +#: ../build/src/ui_dlgaccountsbase.h:327 +#, fuzzy +msgid "Remove the selected account" +msgstr "Убрать этот аккаунт" + +#: ../build/src/ui_dlgaccountsbase.h:330 +msgid "" +"This button will remove the selected account in the list below. Be sure you " +"really don't need it anymore. If you think you might use it again later, " +"just uncheck it." +msgstr "" + +#: ../build/src/ui_dlgaccountsbase.h:335 +msgid "Remove" +msgstr "" + +#: ../build/src/ui_dlgaccountsbase.h:336 +msgid "Backspace, Return" +msgstr "" + +#: ../build/src/ui_dlgaccountsbase.h:338 +msgid "Add a new account" +msgstr "Добавить новый аккаунт" + +#: ../build/src/ui_dlgaccountsbase.h:341 +msgid "" +"This button enables you to initialize a new account. You will then be able " +"to edit it using the form on the right." +msgstr "" + +#: ../build/src/ui_dlgaccountsbase.h:343 +msgid "Add" +msgstr "" + +#: ../build/src/ui_dlgaccountsbase.h:345 +#, fuzzy +msgid "Get this account down" +msgstr "Убрать этот аккаунт" + +#: ../build/src/ui_dlgaccountsbase.h:348 ../build/src/ui_dlgaccountsbase.h:355 +msgid "" +"By default, when you place a call, sflphone will use the first account in " +"this list which is \"registered\". Change the order of the accounts using " +"the \"Up\" and \"Down\" arrows." +msgstr "" + +#: ../build/src/ui_dlgaccountsbase.h:350 +msgid "Down" +msgstr "Вниз" + +#: ../build/src/ui_dlgaccountsbase.h:352 +#, fuzzy +msgid "Get this account up" +msgstr "Убрать этот аккаунт" + +#: ../build/src/ui_dlgaccountsbase.h:357 +msgid "Up" +msgstr "Вверх" + +#: ../build/src/ui_dlgaccountsbase.h:358 +msgid "Apply" +msgstr "Применить" + +#: ../build/src/ui_dlgaccountsbase.h:363 +msgid "SIP" +msgstr "SIP" + +#: ../build/src/ui_dlgaccountsbase.h:364 +msgid "IAX" +msgstr "IAX" + +#: ../build/src/ui_dlgaccountsbase.h:370 +msgid "State" +msgstr "Статус" + +#: ../build/src/ui_dlgaccountsbase.h:373 +msgid "Stun settings will be applied on each account" +msgstr "Stun-настройки будут использоваться для всех аккаунтов" + +#: ../build/src/ui_dlgaccountsbase.h:374 +#, fuzzy +msgid "Enable Stun" +msgstr "&Включить STUN" + +#: ../build/src/ui_dlgaccountsbase.h:375 +msgid "choose Stun server (example : stunserver.org)" +msgstr "" + +#: ../build/src/ui_dlgaddressbookbase.h:143 +msgid "Maximum &results" +msgstr "Максимальное &количество результатов" + +#: ../build/src/ui_dlgaddressbookbase.h:144 +msgid "Display &photo if available" +msgstr "Показать &фотографию контакта (если имеется)" + +#: ../build/src/ui_dlgaddressbookbase.h:145 +msgid "Display phone numbers of these &types :" +msgstr "Если контакт имеет несколько номеров, показать &только :" + +#: ../build/src/ui_dlgaddressbookbase.h:146 +msgid "&Work" +msgstr "&Рабочий номер" + +#: ../build/src/ui_dlgaddressbookbase.h:147 +msgid "&Mobile" +msgstr "Номер &мобильника" + +#: ../build/src/ui_dlgaddressbookbase.h:148 +msgid "&Home" +msgstr "&Домашний номер" + +#: ../build/src/ui_dlgaudiobase.h:265 +#, fuzzy +msgid "Audio device" +msgstr "Звуковое устройство" + +#: ../build/src/ui_dlgaudiobase.h:268 +msgid "ALSA" +msgstr "ALSA" + +#: ../build/src/ui_dlgaudiobase.h:269 +msgid "PulseAudio" +msgstr "PulseAudio" + +#: ../build/src/ui_dlgaudiobase.h:271 +#, fuzzy +msgid "Enable ringtones" +msgstr "Включить звонок" + +#: ../build/src/ui_dlgaudiobase.h:272 +msgid "*.ul *.au *.wav" +msgstr "" + +#: ../build/src/ui_dlgaudiobase.h:273 +msgid "&Codecs" +msgstr "&Кодеки" + +#: ../build/src/ui_dlgaudiobase.h:275 +msgid "Active" +msgstr "" + +#: ../build/src/ui_dlgaudiobase.h:277 +msgid "Name" +msgstr "Имя" + +#: ../build/src/ui_dlgaudiobase.h:279 +msgid "Frequency" +msgstr "Частота" + +#: ../build/src/ui_dlgaudiobase.h:281 +msgid "Bitrate" +msgstr "Битрейт" + +#: ../build/src/ui_dlgaudiobase.h:283 +msgid "Bandwidth" +msgstr "Пропускная способность" + +#: ../build/src/ui_dlgaudiobase.h:286 +msgid "ALSA settings" +msgstr "Настройка ALSA" + +#: ../build/src/ui_dlgaudiobase.h:287 +#, fuzzy +msgid "ALSA plugin" +msgstr "ALSA-плагин" + +#: ../build/src/ui_dlgaudiobase.h:288 +msgid "In" +msgstr "" + +#: ../build/src/ui_dlgaudiobase.h:289 +msgid "Out" +msgstr "" + +#: ../build/src/ui_dlgaudiobase.h:290 +msgid "PulseAudio settings" +msgstr "Настройка PulseAudio" + +#: ../build/src/ui_dlgaudiobase.h:291 +msgid "Mute other applications during a call" +msgstr "Приглушить звук других програм во время звонка" + +#: ../build/src/ui_dlgdisplaybase.h:121 +msgid "Enable notifications" +msgstr "Включить предупреждения" + +#: ../build/src/ui_dlgdisplaybase.h:122 +msgid "On incoming &calls" +msgstr "При входящих звонках" + +#: ../build/src/ui_dlgdisplaybase.h:123 +msgid "On &messages" +msgstr "При звуковых &сообщениях" + +#: ../build/src/ui_dlgdisplaybase.h:124 +msgid "Show main window" +msgstr "Показать главное окно" + +#: ../build/src/ui_dlgdisplaybase.h:125 +msgid "On &start" +msgstr "При &запуске" + +#: ../build/src/ui_dlgdisplaybase.h:126 +msgid "On &incoming calls" +msgstr "При входящих звонках" + +#: ../build/src/ui_dlggeneralbase.h:166 +msgid "Keep my history for at least" +msgstr "" + +#: ../build/src/ui_dlggeneralbase.h:167 +msgid "days" +msgstr "" + +#: ../build/src/ui_dlggeneralbase.h:168 +#, fuzzy +msgid "Clear history" +msgstr "Стереть журнал" + +#: ../build/src/ui_dlggeneralbase.h:169 +msgid "Connection" +msgstr "Подключение" + +#: ../build/src/ui_dlggeneralbase.h:170 +#, fuzzy +msgid "SIP Port" +msgstr "SIP-порт" + +#: ../build/src/ui_dlggeneralbase.h:171 +msgid "Attention " +msgstr "Внимание" + +#: ../build/src/ui_dlghooksbase.h:174 +msgid "URL Argument" +msgstr "" + +#: ../build/src/ui_dlghooksbase.h:175 +#, c-format +msgid "Custom commands with URL %s will be replaced with the passed URL." +msgstr "" + +#: ../build/src/ui_dlghooksbase.h:176 +msgid "Trigger on specific SIP header" +msgstr "" + +#: ../build/src/ui_dlghooksbase.h:177 +msgid "Trigger on IAX2 URL" +msgstr "" + +#: ../build/src/ui_dlghooksbase.h:178 +#, fuzzy +msgid "Command to run" +msgstr "Команда" + +#: ../build/src/ui_dlghooksbase.h:179 +msgid "Phone number formatting" +msgstr "Формат номера телефона" + +#: ../build/src/ui_dlghooksbase.h:180 +msgid "Add phone number prefix" +msgstr "Добавить перед на набранными номерами" + +#: ../build/src/ui_dlgrecordbase.h:92 +msgid "Destination folder" +msgstr "Папка для записи" + +#: ../build/src/ui_sflphone_kdeview_base.h:391 +#, fuzzy +msgid "Pick up" +msgstr "&Взять трубку" + +#: ../build/src/ui_sflphone_kdeview_base.h:395 +#, fuzzy +msgid "History" +msgstr "Журнал" + +#: ../build/src/ui_sflphone_kdeview_base.h:397 +#, fuzzy +msgid "Configure accounts" +msgstr "Настроить &аккаунты" + +#: ../build/src/ui_sflphone_kdeview_base.h:398 +#, fuzzy +msgid "Configure audio" +msgstr "Настроить &звук" + +#: ../build/src/ui_sflphone_kdeview_base.h:399 +#: ../build/src/ui_sflphone_kdeview_base.h:401 +#, fuzzy +msgid "Configure SFLphone" +msgstr "&Настроить SFLPhone" + +#: ../build/src/ui_sflphone_kdeview_base.h:403 +#, fuzzy +msgid "Display volume bars" +msgstr "Показать уровень &громкости" + +#: ../build/src/ui_sflphone_kdeview_base.h:404 +#, fuzzy +msgid "Display dialpad" +msgstr "Показать &клавиатуру" + +#: ../build/src/ui_sflphone_kdeview_base.h:405 +#, fuzzy +msgctxt "Action record a call" +msgid "Record" +msgstr "Записать" + +#: ../build/src/ui_sflphone_kdeview_base.h:406 +#, fuzzy +msgid "Account creation wizard" +msgstr "&Мастер настройки SFLphone" + +#: ../build/src/ui_sflphone_kdeview_base.h:408 +msgid "Attention:number of results exceeds max displayed." +msgstr "" + +#~ msgid "Attention : SIP port must be over 1024 !" +#~ msgstr "Внимание : SIP-порт должен быть больше чем 1024 !" + +#~ msgid "Attention : SIP port must be under 65536 !" +#~ msgstr "Внимание : SIP-порт должен быть меньше чем 65536 !" + +#~ msgid "about" +#~ msgstr "О" + +#~ msgid "Configure general settings" +#~ msgstr "Общие настройки" + +#~ msgid "&Capacity" +#~ msgstr "Вместимость" + +#~ msgid "Configure display" +#~ msgstr "Настроить экран" + +#~ msgid "Configure user accounts" +#~ msgstr "Настройка аккаунтов пользователей" + +#~ msgid "&Alias" +#~ msgstr "Псевдоним" + +#~ msgid "&Protocol" +#~ msgstr "Протокол" + +#~ msgid "&Server" +#~ msgstr "&Сервер" + +#~ msgid "&User" +#~ msgstr "&Пользователь" + +#~ msgid "Pass&word" +#~ msgstr "Па&роль" + +#~ msgid "&Mailbox" +#~ msgstr "&Звуковые сообщения" + +#~ msgid "Configure audio settings" +#~ msgstr "Настройки звука" + +#~ msgid "Configure record settings" +#~ msgstr "Настроить запись звонков" + +#~ msgid "Configure address book settings" +#~ msgstr "Настроить адресную книгу" + +#~ msgid "Configure hooks settings" +#~ msgstr "Настроить перехватчики" + +#~ msgid "SIP Protocol" +#~ msgstr "SIP-Протокол" + +#~ msgid "IAX2 Protocol" +#~ msgstr "IAX2-Протокол" + +#~ msgid "SIP Header" +#~ msgstr "SIP Заголовок" + +#~ msgid "Prepend" +#~ msgstr "Добавить в начало" + +#~ msgid "&Hang up" +#~ msgstr "&Положить трубку" + +#~ msgid "H&old" +#~ msgstr "&Удержать звонок" + +#~ msgid "&Transfer" +#~ msgstr "Пе&реслать звонок на другой номер" + +#~ msgid "&About" +#~ msgstr "&О SFLphone" + +#~ msgid "&Record" +#~ msgstr "Записать" +======= +msgid "" +msgstr "" +"Project-Id-Version: SFLphone 0.9.6\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-07-08 15:18-0400\n" +"PO-Revision-Date: 2009-06-08 10:19 GMT-5\n" +"Last-Translator: HUSSEIN ABDALLAH <hussein.abdallah@savoirfairelinux.com>\n" +"Language-Team: Savoir-Faire Linux Inc <sflphoneteam@savoirfairelinux.com>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../src/Account.cpp:34 +msgctxt "account state" +msgid "Registered" +msgstr "Зарегестрирован" + +#: ../src/Account.cpp:36 +msgctxt "account state" +msgid "Not Registered" +msgstr "Не зарегестрирован" + +#: ../src/Account.cpp:38 +msgctxt "account state" +msgid "Trying..." +msgstr "попытка подключения..." + +#: ../src/Account.cpp:40 +msgctxt "account state" +msgid "Error" +msgstr "Ошибка" + +#: ../src/Account.cpp:42 +msgctxt "account state" +msgid "Bad authentification" +msgstr "Включить предупреждения" + +#: ../src/Account.cpp:44 +msgctxt "account state" +msgid "Network unreachable" +msgstr "Сеть недоступна" + +#: ../src/Account.cpp:46 +msgctxt "account state" +msgid "Host unreachable" +msgstr "Сервер недоступен" + +#: ../src/Account.cpp:48 +msgctxt "account state" +msgid "Stun configuration error" +msgstr "Окно настроек" + +#: ../src/Account.cpp:50 +msgctxt "account state" +msgid "Stun server invalid" +msgstr "STUN-сервер недействителен" + +#: ../src/Account.cpp:51 +msgctxt "account state" +msgid "Invalid" +msgstr "Недействителен" + +#: ../src/AccountWizard.cpp:163 ../src/AccountWizard.cpp:278 +msgid "Account Creation Wizard" +msgstr "Мастер настройки SFLphone" + +#: ../src/AccountWizard.cpp:199 +msgid "Creation of account succeed with these parameters" +msgstr "Успешное создание аккаунта с этими настройками" + +#: ../src/AccountWizard.cpp:211 +msgid "Creation of account has failed for the reason" +msgstr "Создание аккаунта не получилось по этим причинам" + +#: ../src/AccountWizard.cpp:217 +msgid "Register of account succeed with these parameters" +msgstr "Успешное регистрация аккаунта с этими настройками" + +#: ../src/AccountWizard.cpp:255 ../src/AccountWizard.cpp:440 +#: ../build/src/ui_dlgaccountsbase.h:359 +msgid "Alias" +msgstr "Псевдоним" + +#: ../src/AccountWizard.cpp:256 ../src/AccountWizard.cpp:441 +#: ../build/src/ui_dlgaccountsbase.h:366 +msgid "Server" +msgstr "Сервер" + +#: ../src/AccountWizard.cpp:257 ../src/AccountWizard.cpp:442 +#: ../build/src/ui_dlgaccountsbase.h:367 +msgid "User" +msgstr "Пользователь" + +#: ../src/AccountWizard.cpp:258 ../src/AccountWizard.cpp:443 +#: ../build/src/ui_dlgaccountsbase.h:368 +msgid "Password" +msgstr "Пароль" + +#: ../src/AccountWizard.cpp:259 ../build/src/ui_dlgaccountsbase.h:360 +msgid "Protocol" +msgstr "Протокол" + +#: ../src/AccountWizard.cpp:260 ../build/src/ui_dlgaccountsbase.h:369 +#: ../build/src/ui_sflphone_kdeview_base.h:396 +msgid "Mailbox" +msgstr "Автоответчик" + +#: ../src/AccountWizard.cpp:279 +msgid "Welcome to the Account creation wizard of SFLphone" +msgstr "Добро пожаловать в мастер настройки SFLphone" + +#: ../src/AccountWizard.cpp:281 +msgid "This wizard will help you setting up an account." +msgstr "Этот мастер установки поможет вам настроить ваш аккаунт." + +#: ../src/AccountWizard.cpp:309 ../src/conf/ConfigurationDialog.cpp:50 +msgid "Accounts" +msgstr "Аккаунты" + +#: ../src/AccountWizard.cpp:310 +msgid "Please choose between those options :" +msgstr "Выберите пожалуйста тип аккаунта :" + +#: ../src/AccountWizard.cpp:312 +msgid "Create a free SIP/IAX2 account on sflphone.org" +msgstr "Создать бесплатный SIP/IAX2-аккаунт на sflphone.org" + +#: ../src/AccountWizard.cpp:313 +msgid "Register an existing SIP/IAX2 account" +msgstr "Зарегистрировать существующий SIP или IAX2 аккаунт" + +#: ../src/AccountWizard.cpp:352 +msgid "VoIP Protocols" +msgstr "VoIP-протоколы" + +#: ../src/AccountWizard.cpp:353 +msgid "Choose the account type" +msgstr "Выберите тип аккаунта:" + +#: ../src/AccountWizard.cpp:355 +msgid "Register a SIP (Session Initiation Protocol) account" +msgstr "Зарегистрировать существующий SIP-аккаунт" + +#: ../src/AccountWizard.cpp:356 +msgid "Register a IAX2 (InterAsterisk eXchange) account" +msgstr "Зарегистрировать существующий IAX2-аккаунт" + +#: ../src/AccountWizard.cpp:395 +msgid "Optionnal Email Address" +msgstr "Электронный адрес (необязательный) " + +#: ../src/AccountWizard.cpp:396 +msgid "This email address will be used to send your voicemail messages." +msgstr "Этот электронный адрес будет использоваться для речевых сообщений" + +#: ../src/AccountWizard.cpp:398 +msgid "Email address" +msgstr "Адрес эл. почты" + +#: ../src/AccountWizard.cpp:432 +msgid "SIP Account Settings" +msgstr "Настройки SIP-аккаунта" + +#: ../src/AccountWizard.cpp:436 +msgid "IAX2 Account Settings" +msgstr "Настройки IAX2-аккаунта" + +#: ../src/AccountWizard.cpp:438 +msgid "Please full these settings fields." +msgstr "Заполните пожалуйста эти поля." + +#: ../src/AccountWizard.cpp:444 +msgid "Voicemail number" +msgstr "Номер автоответчика" + +#: ../src/AccountWizard.cpp:523 +msgid "Network Address Translation (NAT)" +msgstr "Network Address Translation (NAT)" + +#: ../src/AccountWizard.cpp:524 +msgid "" +"You should probably enable this option if you're placed under a firewall" +msgstr "" +"Вы наверное должны это включить если вы находитесь за сетевым экраном." + +#: ../src/AccountWizard.cpp:526 +msgid "Enable STUN" +msgstr "Включить STUN" + +#: ../src/AccountWizard.cpp:527 +msgid "Stun Server" +msgstr "STUN-сервер" + +#: ../src/AccountWizard.cpp:561 +msgid "Account Definition Finished" +msgstr "Настройка аккаунта закончена." + +#: ../src/AccountWizard.cpp:562 +msgid "" +"After checking the settings you chose, click \"Finish\" to create the " +"account." +msgstr "" +"После просмотра выбранных настроек, нажмите на \"Закончить\" чтобы создать " +"аккаунт. " + +#: ../src/ActionSetAccountFirst.cpp:26 +msgid "Default account" +msgstr "Аккаунт по умолчанию" + +#: ../src/Call.cpp:116 +msgid "Transfer to : " +msgstr "Переслать звонок на другой номер :" + +#: ../src/main.cpp:34 +msgid "SFLphone KDE Client" +msgstr "SFLphone - версия для KDE " + +#: ../src/main.cpp:38 +msgid "(C) 2009 Savoir-faire Linux" +msgstr "(C) 2009 Savoir-faire Linux" + +#: ../src/main.cpp:42 +msgid "Jérémy Quentin" +msgstr "Jérémy Quentin" + +#: ../src/main.cpp:43 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Hussein Abdallah" + +#: ../src/main.cpp:43 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "hussein.abdallah@savoirfairelinux.com" + +#: ../src/SFLPhone.cpp:62 ../src/sflphone_kdeview.cpp:1066 +#: ../src/sflphone_kdeview.cpp:1071 ../src/sflphone_kdeview.cpp:1076 +msgid "SFLphone" +msgstr "SFLphone" + +#: ../src/SFLPhone.cpp:181 +msgid "You still have some calls open. Please close all calls before quitting." +msgstr "" +"У вас ещё есть неоконченные звонки. Пожалуйста проверьте что все звонки " +"окончены перед тем как выйти." + +#: ../src/SFLPhone.cpp:209 +msgid "Incoming call" +msgstr "Входящий звонок" + +#: ../src/SFLPhone.cpp:210 +msgid "You have an incoming call from" +msgstr "Входящей звонок от " + +#: ../src/SFLPhone.cpp:210 +msgid "Click to accept or refuse it." +msgstr "Нажмите чтобы принять или отклонить." + +#: ../src/sflphone_kdeview.cpp:883 +msgid "No account registered" +msgstr "Нет зарегистрированных аккаунтов" + +#: ../src/sflphone_kdeview.cpp:887 +msgid "Using account" +msgstr "Используется аккаунт" + +#: ../src/sflphone_kdeview.cpp:1066 +msgid "Main screen" +msgstr "Главный экран" + +#: ../src/sflphone_kdeview.cpp:1071 ../build/src/ui_dlggeneralbase.h:165 +msgid "Call history" +msgstr "Журнал звонков" + +#: ../src/sflphone_kdeview.cpp:1076 +#: ../build/src/ui_sflphone_kdeview_base.h:407 +msgid "Address book" +msgstr "Адресная книга" + +#: ../src/sflphone_kdeview.cpp:1090 ../src/sflphone_kdeview.cpp:1151 +msgid "Edit before call" +msgstr "Изменить перед звонком" + +#: ../src/sflphone_const.h:56 +msgid "Call" +msgstr "Звонок" + +#: ../src/sflphone_const.h:57 ../build/src/ui_sflphone_kdeview_base.h:392 +msgid "Hang up" +msgstr "Положить трубку" + +#: ../src/sflphone_const.h:58 ../build/src/ui_sflphone_kdeview_base.h:393 +msgid "Hold" +msgstr "Удержать звонок" + +#: ../src/sflphone_const.h:59 ../build/src/ui_sflphone_kdeview_base.h:394 +msgid "Transfer" +msgstr "Переслать звонок на другой номер" + +#: ../src/sflphone_const.h:60 +msgid "Record" +msgstr "Записать" + +#: ../src/sflphone_const.h:61 +msgid "Accept" +msgstr "Принять" + +#: ../src/sflphone_const.h:62 +msgid "Refuse" +msgstr "Отклонить" + +#: ../src/sflphone_const.h:63 +msgid "Unhold" +msgstr "Снова взять" + +#: ../src/sflphone_const.h:64 +msgid "Give up transfer" +msgstr "Отменить пересылку звонка" + +#: ../src/sflphone_const.h:65 +msgid "Call back" +msgstr "Перезвонить" + +#: ../src/sflphone_const.h:66 +msgid "Give up search" +msgstr "Отменить поиск" + +#: ../src/conf/ConfigurationDialog.cpp:48 ../build/src/ui_dlgrecordbase.h:91 +msgid "General" +msgstr "Общие настройки" + +#: ../src/conf/ConfigurationDialog.cpp:49 +msgid "Display" +msgstr "Экран" + +#: ../src/conf/ConfigurationDialog.cpp:51 +msgid "Audio" +msgstr "Звук" + +#: ../src/conf/ConfigurationDialog.cpp:52 +msgid "Address Book" +msgstr "Адресная книга" + +#: ../src/conf/ConfigurationDialog.cpp:53 +msgctxt "Config section" +msgid "Record" +msgstr "Запись переговоров" + +#: ../src/conf/ConfigurationDialog.cpp:54 +msgid "Hooks" +msgstr "перехватчики (hooks)" + +#: ../build/src/ui_dlgaccountsbase.h:321 +#: ../build/src/ui_dlgaddressbookbase.h:142 ../build/src/ui_dlgaudiobase.h:263 +#: ../build/src/ui_dlgdisplaybase.h:120 ../build/src/ui_dlggeneralbase.h:164 +#: ../build/src/ui_dlghooksbase.h:173 ../build/src/ui_dlgrecordbase.h:90 +#: ../build/src/ui_sflphone_kdeview_base.h:390 +msgid "Form" +msgstr "" + +#: ../build/src/ui_dlgaccountsbase.h:323 +msgid "" +"By default, when you place a call, sflphone will use the first account in " +"this list which is \"registered\". Change the order of the accounts using " +"the \"Up\" and \"Down\" arrows. Enable/disable them by checking/unchecking " +"them on the left of the item. Add or remove some with \"Plus\" and \"Sub\" " +"buttons. Edit the selected account with the form on the right." +msgstr "" +"По умолчанию, SFLPhone будет использовать первый аккаунт в списке " +"зарегистрированных аккаунтов. Последовательность использования " +"аккаунтов можно изменить при помощи стрелок \"Вверх\" и \"Вниз\"." + + +#: ../build/src/ui_dlgaccountsbase.h:327 +msgid "Remove the selected account" +msgstr "Убрать этот аккаунт" + +#: ../build/src/ui_dlgaccountsbase.h:330 +msgid "" +"This button will remove the selected account in the list below. Be sure you " +"really don't need it anymore. If you think you might use it again later, " +"just uncheck it." +msgstr "" +"Это кнопка уберëт аккаунт. Если вы думаете его использовать позже, " +"то достаточно его отменить " + +#: ../build/src/ui_dlgaccountsbase.h:335 +msgid "Remove" +msgstr "Убрать" + +#: ../build/src/ui_dlgaccountsbase.h:336 +msgid "Backspace, Return" +msgstr "Backspace, Return" + +#: ../build/src/ui_dlgaccountsbase.h:338 +msgid "Add a new account" +msgstr "Добавить новый аккаунт" + +#: ../build/src/ui_dlgaccountsbase.h:341 +msgid "" +"This button enables you to initialize a new account. You will then be able " +"to edit it using the form on the right." +msgstr "" +"Это кнопка позволит вам добавить новый аккаунт. После этого вы сможете " +"его изменить при помощи экрана справа." + +#: ../build/src/ui_dlgaccountsbase.h:343 +msgid "Add" +msgstr "Добавить" + +#: ../build/src/ui_dlgaccountsbase.h:345 +msgid "Get this account down" +msgstr "Убрать этот аккаунт" + +#: ../build/src/ui_dlgaccountsbase.h:348 ../build/src/ui_dlgaccountsbase.h:355 +msgid "" +"By default, when you place a call, sflphone will use the first account in " +"this list which is \"registered\". Change the order of the accounts using " +"the \"Up\" and \"Down\" arrows." +msgstr "" +"По умолчанию, SFLPhone будет использовать первый аккаунт в списке " +"зарегистрированных аккаунтов. Последовательность использования " +"аккаунтов можно изменить при помощи стрелок \"Вверх\" и \"Вниз\"." + + +#: ../build/src/ui_dlgaccountsbase.h:350 +msgid "Down" +msgstr "Вниз" + +#: ../build/src/ui_dlgaccountsbase.h:352 +msgid "Get this account up" +msgstr "Убрать этот аккаунт" + +#: ../build/src/ui_dlgaccountsbase.h:357 +msgid "Up" +msgstr "Вверх" + +#: ../build/src/ui_dlgaccountsbase.h:358 +msgid "Apply" +msgstr "Применить" + +#: ../build/src/ui_dlgaccountsbase.h:363 +msgid "SIP" +msgstr "SIP" + +#: ../build/src/ui_dlgaccountsbase.h:364 +msgid "IAX" +msgstr "IAX" + +#: ../build/src/ui_dlgaccountsbase.h:370 +msgid "State" +msgstr "Статус" + +#: ../build/src/ui_dlgaccountsbase.h:373 +msgid "Stun settings will be applied on each account" +msgstr "Stun-настройки будут использоваться для всех аккаунтов" + +#: ../build/src/ui_dlgaccountsbase.h:374 +msgid "Enable Stun" +msgstr "&Включить STUN" + +#: ../build/src/ui_dlgaccountsbase.h:375 +msgid "choose Stun server (example : stunserver.org)" +msgstr "Выберите STUN-сервер (например : stunserver.org )" + +#: ../build/src/ui_dlgaddressbookbase.h:143 +msgid "Maximum &results" +msgstr "Максимальное &количество результатов" + +#: ../build/src/ui_dlgaddressbookbase.h:144 +msgid "Display &photo if available" +msgstr "Показать &фотографию контакта (если имеется)" + +#: ../build/src/ui_dlgaddressbookbase.h:145 +msgid "Display phone numbers of these &types :" +msgstr "Если контакт имеет несколько номеров, показать &только :" + +#: ../build/src/ui_dlgaddressbookbase.h:146 +msgid "&Work" +msgstr "&Рабочий номер" + +#: ../build/src/ui_dlgaddressbookbase.h:147 +msgid "&Mobile" +msgstr "Номер &мобильника" + +#: ../build/src/ui_dlgaddressbookbase.h:148 +msgid "&Home" +msgstr "&Домашний номер" + +#: ../build/src/ui_dlgaudiobase.h:265 +msgid "Audio device" +msgstr "Звуковое устройство" + +#: ../build/src/ui_dlgaudiobase.h:268 +msgid "ALSA" +msgstr "ALSA" + +#: ../build/src/ui_dlgaudiobase.h:269 +msgid "PulseAudio" +msgstr "PulseAudio" + +#: ../build/src/ui_dlgaudiobase.h:271 +msgid "Enable ringtones" +msgstr "Включить звонок" + +#: ../build/src/ui_dlgaudiobase.h:272 +msgid "*.ul *.au *.wav" +msgstr "*.ul *.au *.wav" + +#: ../build/src/ui_dlgaudiobase.h:273 +msgid "&Codecs" +msgstr "&Кодеки" + +#: ../build/src/ui_dlgaudiobase.h:275 +msgid "Active" +msgstr "Вкл." + +#: ../build/src/ui_dlgaudiobase.h:277 +msgid "Name" +msgstr "Имя" + +#: ../build/src/ui_dlgaudiobase.h:279 +msgid "Frequency" +msgstr "Частота" + +#: ../build/src/ui_dlgaudiobase.h:281 +msgid "Bitrate" +msgstr "Битрейт" + +#: ../build/src/ui_dlgaudiobase.h:283 +msgid "Bandwidth" +msgstr "Пропускная способность" + +#: ../build/src/ui_dlgaudiobase.h:286 +msgid "ALSA settings" +msgstr "Настройка ALSA" + +#: ../build/src/ui_dlgaudiobase.h:287 +msgid "ALSA plugin" +msgstr "ALSA-плагин" + +#: ../build/src/ui_dlgaudiobase.h:288 +msgid "In" +msgstr "Вход" + +#: ../build/src/ui_dlgaudiobase.h:289 +msgid "Out" +msgstr "Выход" + +#: ../build/src/ui_dlgaudiobase.h:290 +msgid "PulseAudio settings" +msgstr "Настройка PulseAudio" + +#: ../build/src/ui_dlgaudiobase.h:291 +msgid "Mute other applications during a call" +msgstr "Приглушить звук других програм во время звонка" + +#: ../build/src/ui_dlgdisplaybase.h:121 +msgid "Enable notifications" +msgstr "Включить предупреждения" + +#: ../build/src/ui_dlgdisplaybase.h:122 +msgid "On incoming &calls" +msgstr "При входящих звонках" + +#: ../build/src/ui_dlgdisplaybase.h:123 +msgid "On &messages" +msgstr "При звуковых &сообщениях" + +#: ../build/src/ui_dlgdisplaybase.h:124 +msgid "Show main window" +msgstr "Показать главное окно" + +#: ../build/src/ui_dlgdisplaybase.h:125 +msgid "On &start" +msgstr "При &запуске" + +#: ../build/src/ui_dlgdisplaybase.h:126 +msgid "On &incoming calls" +msgstr "При входящих звонках" + +#: ../build/src/ui_dlggeneralbase.h:166 +msgid "Keep my history for at least" +msgstr "Сохранить журнал звонков как минимум " + +#: ../build/src/ui_dlggeneralbase.h:167 +msgid "days" +msgstr "дней" + +#: ../build/src/ui_dlggeneralbase.h:168 +msgid "Clear history" +msgstr "Стереть журнал" + +#: ../build/src/ui_dlggeneralbase.h:169 +msgid "Connection" +msgstr "Подключение" + +#: ../build/src/ui_dlggeneralbase.h:170 +msgid "SIP Port" +msgstr "SIP-порт" + +#: ../build/src/ui_dlggeneralbase.h:171 +msgid "Attention " +msgstr "Внимание" + +#: ../build/src/ui_dlghooksbase.h:174 +msgid "URL Argument" +msgstr "Аргумент переданный в URL" + +#: ../build/src/ui_dlghooksbase.h:175 +#, c-format +msgid "Custom commands with URL %s will be replaced with the passed URL." +msgstr "Команды с URL %s будут заменены на переданный URL" + +#: ../build/src/ui_dlghooksbase.h:176 +msgid "Trigger on specific SIP header" +msgstr "Запустить при определëнном SIP-заголовке" + +#: ../build/src/ui_dlghooksbase.h:177 +msgid "Trigger on IAX2 URL" +msgstr "Запустить при URL IAX2 " + +#: ../build/src/ui_dlghooksbase.h:178 +msgid "Command to run" +msgstr "Команда" + +#: ../build/src/ui_dlghooksbase.h:179 +msgid "Phone number formatting" +msgstr "Формат номера телефона" + +#: ../build/src/ui_dlghooksbase.h:180 +msgid "Add phone number prefix" +msgstr "Добавить перед на набранными номерами" + +#: ../build/src/ui_dlgrecordbase.h:92 +msgid "Destination folder" +msgstr "Папка для записи" + +#: ../build/src/ui_sflphone_kdeview_base.h:391 +msgid "Pick up" +msgstr "&Взять трубку" + +#: ../build/src/ui_sflphone_kdeview_base.h:395 +msgid "History" +msgstr "Журнал" + +#: ../build/src/ui_sflphone_kdeview_base.h:397 +msgid "Configure accounts" +msgstr "Настроить &аккаунты" + +#: ../build/src/ui_sflphone_kdeview_base.h:398 +msgid "Configure audio" +msgstr "Настроить &звук" + +#: ../build/src/ui_sflphone_kdeview_base.h:399 +#: ../build/src/ui_sflphone_kdeview_base.h:401 +msgid "Configure SFLphone" +msgstr "&Настроить SFLPhone" + +#: ../build/src/ui_sflphone_kdeview_base.h:403 +msgid "Display volume bars" +msgstr "Показать уровень &громкости" + +#: ../build/src/ui_sflphone_kdeview_base.h:404 +msgid "Display dialpad" +msgstr "Показать &клавиатуру" + +#: ../build/src/ui_sflphone_kdeview_base.h:405 +msgctxt "Action record a call" +msgid "Record" +msgstr "Записать" + +#: ../build/src/ui_sflphone_kdeview_base.h:406 +msgid "Account creation wizard" +msgstr "&Мастер настройки SFLphone" + +#: ../build/src/ui_sflphone_kdeview_base.h:408 +msgid "Attention:number of results exceeds max displayed." +msgstr "Внимание: Количество результатов превышает настроенный максимум результатов" + +#~ msgid "Attention : SIP port must be over 1024 !" +#~ msgstr "Внимание : SIP-порт должен быть больше чем 1024 !" + +#~ msgid "Attention : SIP port must be under 65536 !" +#~ msgstr "Внимание : SIP-порт должен быть меньше чем 65536 !" + +#~ msgid "about" +#~ msgstr "О" + +#~ msgid "Configure general settings" +#~ msgstr "Общие настройки" + +#~ msgid "&Capacity" +#~ msgstr "Вместимость" + +#~ msgid "Configure display" +#~ msgstr "Настроить экран" + +#~ msgid "Configure user accounts" +#~ msgstr "Настройка аккаунтов пользователей" + +#~ msgid "&Alias" +#~ msgstr "Псевдоним" + +#~ msgid "&Protocol" +#~ msgstr "Протокол" + +#~ msgid "&Server" +#~ msgstr "&Сервер" + +#~ msgid "&User" +#~ msgstr "&Пользователь" + +#~ msgid "Pass&word" +#~ msgstr "Па&роль" + +#~ msgid "&Mailbox" +#~ msgstr "&Звуковые сообщения" + +#~ msgid "Configure audio settings" +#~ msgstr "Настройки звука" + +#~ msgid "Configure record settings" +#~ msgstr "Настроить запись звонков" + +#~ msgid "Configure address book settings" +#~ msgstr "Настроить адресную книгу" + +#~ msgid "Configure hooks settings" +#~ msgstr "Настроить перехватчики" + +#~ msgid "SIP Protocol" +#~ msgstr "SIP-Протокол" + +#~ msgid "IAX2 Protocol" +#~ msgstr "IAX2-Протокол" + +#~ msgid "SIP Header" +#~ msgstr "SIP Заголовок" + +#~ msgid "Prepend" +#~ msgstr "Добавить в начало" + +#~ msgid "&Hang up" +#~ msgstr "&Положить трубку" + +#~ msgid "H&old" +#~ msgstr "&Удержать звонок" + +#~ msgid "&Transfer" +#~ msgstr "Пе&реслать звонок на другой номер" + +#~ msgid "&About" +#~ msgstr "&О SFLphone" + +#~ msgid "&Record" +#~ msgstr "Записать" diff --git a/sflphone-client-kde/src/CMakeLists.txt b/sflphone-client-kde/src/CMakeLists.txt index 0d71a14d5c3e6b32874df54db4d44e29ea5d71e6..1513094c6247e19af0d06a12d5c57d0874592765 100644 --- a/sflphone-client-kde/src/CMakeLists.txt +++ b/sflphone-client-kde/src/CMakeLists.txt @@ -54,9 +54,9 @@ SET( sflphone_client_kde_SRCS conf/dlghooks.cpp conf/ConfigurationSkeleton.cpp Dialpad.cpp -# Codec.cpp -# CodecListModel.cpp -# SortableCodecListWidget.cpp + Codec.cpp + CodecListModel.cpp + SortableCodecListWidget.cpp Item.cpp ) diff --git a/sflphone-client-kde/src/Call.cpp b/sflphone-client-kde/src/Call.cpp index 8b235c5cf5d7e9b03eda78b54f067622c89d5fc2..efb34db0da9ab6b59166ceb24edb7f62736ac8c4 100644 --- a/sflphone-client-kde/src/Call.cpp +++ b/sflphone-client-kde/src/Call.cpp @@ -358,7 +358,7 @@ Contact * Call::findContactForNumberInKAddressBook(QString number) ConfigurationManagerInterface & configurationManager = ConfigurationManagerInterfaceSingleton::getInstance(); MapStringInt addressBookSettings = configurationManager.getAddressbookSettings().value(); bool displayPhoto = addressBookSettings[ADDRESSBOOK_DISPLAY_CONTACT_PHOTO]; - AddressBook * ab = KABC::StdAddressBook::self(); + AddressBook * ab = KABC::StdAddressBook::self(true); QVector<Contact *> results = QVector<Contact *>(); AddressBook::Iterator it; for ( it = ab->begin(); it != ab->end(); ++it ) { @@ -593,8 +593,8 @@ void Call::call() callManager.placeCall(account, callId, number); this->account = account; this->peerPhoneNumber = number; - Contact * contact = findContactForNumberInKAddressBook(peerPhoneNumber); - if(contact) this->peerName = contact->getNickName(); +// Contact * contact = findContactForNumberInKAddressBook(peerPhoneNumber); +// if(contact) this->peerName = contact->getNickName(); this->startTime = new QDateTime(QDateTime::currentDateTime()); this->historyState = OUTGOING; } diff --git a/sflphone-client-kde/src/Codec.cpp b/sflphone-client-kde/src/Codec.cpp new file mode 100644 index 0000000000000000000000000000000000000000..3e94070c0de39b524cf2153406c0ac2d1a2cefa9 --- /dev/null +++ b/sflphone-client-kde/src/Codec.cpp @@ -0,0 +1,64 @@ +/*************************************************************************** + * Copyright (C) 2009 by Savoir-Faire Linux * + * Author : Jérémy Quentin * + * jeremy.quentin@savoirfairelinux.com * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 3 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "Codec.h" + +#include "configurationmanager_interface_singleton.h" +#include "sflphone_const.h" + +Codec::Codec(int payload, bool enabled) +{ + ConfigurationManagerInterface & configurationManager = ConfigurationManagerInterfaceSingleton::getInstance(); + QStringList details = configurationManager.getCodecDetails(payload); + this->payload = QString::number(payload); + this->enabled = enabled; + this->name = details[CODEC_NAME]; + this->frequency = details[CODEC_SAMPLE_RATE]; + this->bitrate = details[CODEC_BIT_RATE]; + this->bandwidth = details[CODEC_BANDWIDTH]; +} + +QString Codec::getPayload() const +{ return payload; } +QString Codec::getName() const +{ return name; } +QString Codec::getFrequency() const +{ return frequency; } +QString Codec::getBitrate() const +{ return bitrate; } +QString Codec::getBandwidth() const +{ return bandwidth; } +bool Codec::isEnabled() const +{ return enabled; } + +void Codec::setPayload(QString payload) +{ this->payload = payload; } +void Codec::setName(QString name) +{ this->name = name; } +void Codec::setFrequency(QString frequency) +{ this->frequency = frequency; } +void Codec::setBitrate(QString bitrate) +{ this->bitrate = bitrate; } +void Codec::setBandwidth(QString bandwidth) +{ this->bandwidth = bandwidth; } +void Codec::setEnabled(bool enabled) +{ this->enabled = enabled; } + + diff --git a/sflphone-client-kde/src/Codec.h b/sflphone-client-kde/src/Codec.h new file mode 100644 index 0000000000000000000000000000000000000000..9a86d604d5a9a293cf7a1e9b2a9b59cd463d86e8 --- /dev/null +++ b/sflphone-client-kde/src/Codec.h @@ -0,0 +1,66 @@ +/*************************************************************************** + * Copyright (C) 2009 by Savoir-Faire Linux * + * Author : Jérémy Quentin * + * jeremy.quentin@savoirfairelinux.com * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 3 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef CODEC_H +#define CODEC_H + +#include <QObject> +#include <QtCore/QString> + +/** + @author Jérémy Quentin <jeremy.quentin@gmail.com> +*/ +class Codec : public QObject +{ +Q_OBJECT +private: + QString payload; + QString name; + QString frequency; + QString bitrate; + QString bandwidth; + bool enabled; + +public: + Codec(int payload, bool enabled); +// Codec(const Codec & codec); + +// ~Codec(); + + QString getPayload() const; + QString getName() const; + QString getFrequency() const; + QString getBitrate() const; + QString getBandwidth() const; + bool isEnabled() const; + + void setPayload(QString payload); + void setName(QString name); + void setFrequency(QString frequency); + void setBitrate(QString bitrate); + void setBandwidth(QString bandwidth); + void setEnabled(bool enabled); + + Codec & operator=(const Codec&); + + +}; + +#endif diff --git a/sflphone-client-kde/src/CodecListModel.cpp b/sflphone-client-kde/src/CodecListModel.cpp new file mode 100644 index 0000000000000000000000000000000000000000..60b7866dd52c34899ef51f2290811393bd249a90 --- /dev/null +++ b/sflphone-client-kde/src/CodecListModel.cpp @@ -0,0 +1,203 @@ +/*************************************************************************** + * Copyright (C) 2009 by Savoir-Faire Linux * + * Author : Jérémy Quentin * + * jeremy.quentin@savoirfairelinux.com * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 3 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "CodecListModel.h" + +#include <QtCore/QSize> +#include <QtCore/QDebug> +#include "configurationmanager_interface_singleton.h" + +CodecListModel::CodecListModel(QObject *parent) + : QAbstractTableModel(parent) +{ + this->codecs = QList<Codec *>(); + ConfigurationManagerInterface & configurationManager = ConfigurationManagerInterfaceSingleton::getInstance(); + QStringList activeCodecList = configurationManager.getActiveCodecList(); + setActiveCodecList(activeCodecList); +} + + +CodecListModel::~CodecListModel() +{ +} + + +QVariant CodecListModel::data ( const QModelIndex & index, int role) const +{ + if (!index.isValid()) + return QVariant(); + + const Codec * codec = codecs[index.row()]; + if(index.column() == 0 && role == Qt::DisplayRole) + { + return QVariant(codec->getName()); + } + else if(index.column() == 0 && role == Qt::CheckStateRole) + { + return QVariant(codec->isEnabled() ? Qt::Checked : Qt::Unchecked); + } + else if(index.column() == 1 && role == Qt::DisplayRole) + { + return QVariant(codec->getFrequency()); + } + else if(index.column() == 2 && role == Qt::DisplayRole) + { + return QVariant(codec->getBitrate()); + } + else if(index.column() == 3 && role == Qt::DisplayRole) + { + return QVariant(codec->getBandwidth()); + } + + return QVariant(); +} + + +int CodecListModel::rowCount(const QModelIndex & parent) const +{ + return codecs.count(); +} + +int CodecListModel::columnCount(const QModelIndex & parent) const +{ + return 4; +} + + +QVariant CodecListModel::headerData(int section , Qt::Orientation orientation, int role) const +{ + if (section == 0 && orientation == Qt::Horizontal && role == Qt::DisplayRole) + { + return QVariant("Codec"); + } + else if (section == 1 && orientation == Qt::Horizontal && role == Qt::DisplayRole) + { + return QVariant("Frequency"); + } + else if (section == 2 && orientation == Qt::Horizontal && role == Qt::DisplayRole) + { + return QVariant("Bitrate"); + } + else if (section == 3 && orientation == Qt::Horizontal && role == Qt::DisplayRole) + { + return QVariant("Bandwidth"); + } + return QVariant(); +} + +Qt::ItemFlags CodecListModel::flags(const QModelIndex & index) const +{ + if (index.column() == 0) + { + return QAbstractItemModel::flags(index) | Qt::ItemIsUserCheckable; + } + return QAbstractItemModel::flags(index); +} + +bool CodecListModel::setData ( const QModelIndex & index, const QVariant &value, int role) +{ + qDebug() << "setData"; + if (index.isValid() && index.column() == 0 && role == Qt::CheckStateRole) { + codecs[index.row()]->setEnabled(value.toBool()); + emit dataChanged(index, index); + return true; + } + return false; +} + +bool CodecListModel::codecUp( int index ) +{ + qDebug() << getActiveCodecList(); + if(index > 0 && index <= rowCount()) + { + codecs.swap(index - 1, index); + qDebug() << getActiveCodecList(); + emit dataChanged(this->index(index - 1, 0, QModelIndex()), this->index(index, columnCount(), QModelIndex())); + qDebug() << getActiveCodecList(); + return true; + } + return false; +} + +bool CodecListModel::codecDown( int index ) +{ + if(index >= 0 && index < rowCount()) + { + codecs.swap(index + 1, index); + emit dataChanged(this->index(index, 0, QModelIndex()), this->index(index + 1, columnCount(), QModelIndex())); + return true; + } + return false; +} + +QStringList CodecListModel::getActiveCodecList() const +{ + QStringList codecList; + for(int i = 0 ; i < rowCount() ; i++) + { + if(codecs[i]->isEnabled()) + codecList.append(codecs[i]->getPayload()); + } + return codecList; +} + +void CodecListModel::setActiveCodecList(const QStringList & activeCodecListToSet) +{ + this->codecs = QList<Codec *>(); + ConfigurationManagerInterface & configurationManager = ConfigurationManagerInterfaceSingleton::getInstance(); + QStringList codecList = configurationManager.getCodecList(); + QStringList activeCodecList = activeCodecListToSet; + #if QT_VERSION >= 0x040500 + activeCodecList.removeDuplicates(); + #else + for (int i = 0 ; i < activeCodecList.size() ; i++) + { + if(activeCodecList.lastIndexOf(activeCodecList[i]) != i || ! codecList.contains(activeCodecList[i])) + { + activeCodecList.removeAt(i); + i--; + } + } + #endif + + QStringList codecListToDisplay = activeCodecList; + for (int i=0 ; i<codecList.size() ; i++) + { + if(! activeCodecList.contains(codecList[i])) + { + codecListToDisplay << codecList[i]; + } + } + for(int i=0 ; i<codecListToDisplay.size() ; i++) + { + bool ok; + qDebug() << codecListToDisplay[i]; + QString payloadStr = QString(codecListToDisplay[i]); + int payload = payloadStr.toInt(&ok); + if(!ok) + qDebug() << "The codec's payload sent by the configurationManager is not a number : " << codecListToDisplay[i]; + else + { + codecs << new Codec(payload, activeCodecList.contains(codecListToDisplay[i])); + } + } + + emit dataChanged(this->index(0, 0, QModelIndex()), this->index(rowCount(), columnCount(), QModelIndex())); +} diff --git a/sflphone-client-kde/src/CodecListModel.h b/sflphone-client-kde/src/CodecListModel.h new file mode 100644 index 0000000000000000000000000000000000000000..26b63b642c12baa619abed2dedaf1054f0bf1673 --- /dev/null +++ b/sflphone-client-kde/src/CodecListModel.h @@ -0,0 +1,59 @@ +/*************************************************************************** + * Copyright (C) 2009 by Savoir-Faire Linux * + * Author : Jérémy Quentin * + * jeremy.quentin@savoirfairelinux.com * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 3 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef CODECLISTMODEL_H +#define CODECLISTMODEL_H + +#include <QAbstractItemModel> +#include "Codec.h" + +/** + @author Jérémy Quentin <jeremy.quentin@gmail.com> +*/ +class CodecListModel : public QAbstractTableModel +{ +Q_OBJECT +private: + QList<Codec *> codecs; + +public: + CodecListModel(QObject *parent = 0); + + ~CodecListModel(); + void setCodecs(QList<Codec *> codecs); + + QVariant data ( const QModelIndex & index, int role = Qt::DisplayRole ) const; + int rowCount(const QModelIndex & parent = QModelIndex()) const; + int columnCount(const QModelIndex & parent = QModelIndex()) const; +// bool insertRows(int position, int rows, const QModelIndex &parent); + QVariant headerData(int section , Qt::Orientation orientation, int role) const; + Qt::ItemFlags flags(const QModelIndex & index) const; + virtual bool setData ( const QModelIndex & index, const QVariant &value, int role); + + bool codecUp( int index ); + bool codecDown( int index ); + QStringList getActiveCodecList() const ; + void setActiveCodecList(const QStringList & activeCodecListToSet); + +signals: + void dataChanged(const QModelIndex &, const QModelIndex &); +}; + +#endif diff --git a/sflphone-client-kde/src/SortableCodecListWidget.cpp b/sflphone-client-kde/src/SortableCodecListWidget.cpp new file mode 100644 index 0000000000000000000000000000000000000000..27587446b7b735b6c972b8e07a930009d13fe343 --- /dev/null +++ b/sflphone-client-kde/src/SortableCodecListWidget.cpp @@ -0,0 +1,145 @@ +/*************************************************************************** + * Copyright (C) 2009 by Savoir-Faire Linux * + * Author : Jérémy Quentin * + * jeremy.quentin@savoirfairelinux.com * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 3 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "SortableCodecListWidget.h" + +#include <QHBoxLayout> +#include <QVBoxLayout> +#include <QDebug> + +SortableCodecListWidget::SortableCodecListWidget(QWidget *parent) + : QWidget(parent) +{ + codecTable = new QTableView(this); + codecTable->setObjectName("codecTable"); +// CodecListModel * model = new CodecListModel(); +// codecTable->setModel(model); +// codecTable->resizeColumnsToContents(); +// codecTable->resizeRowsToContents(); + codecTable->setSelectionBehavior(QAbstractItemView::SelectRows); + + codecUpButton = new KPushButton(this); + codecUpButton->setObjectName("codecUpButton"); + codecUpButton->setIcon(KIcon("go-up")); + + codecDownButton = new KPushButton(this); + codecDownButton->setObjectName("codecDownButton"); + codecDownButton->setIcon(KIcon("go-down")); + + QHBoxLayout * mainLayout = new QHBoxLayout(this); + QVBoxLayout * buttonsLayout = new QVBoxLayout(); + + buttonsLayout->addWidget(codecUpButton); + buttonsLayout->addWidget(codecDownButton); + + mainLayout->addWidget(codecTable); + mainLayout->addLayout(buttonsLayout); + + QMetaObject::connectSlotsByName(this); +} + +void SortableCodecListWidget::setModel(CodecListModel * model) +{ + codecTable->setModel(model); + codecTable->resizeColumnsToContents(); + codecTable->resizeRowsToContents(); + connect(codecTable->selectionModel(), SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)), + this, SLOT(updateCommands())); + connect(codecTable->model(), SIGNAL(dataChanged(const QModelIndex &, const QModelIndex &)), + this, SIGNAL(dataChanged())); +} + +CodecListModel * SortableCodecListWidget::model() +{ + return (CodecListModel *) codecTable->model(); +} + +void SortableCodecListWidget::on_codecUpButton_clicked() +{ + qDebug() << "on_toolButton_codecUpButton_clicked"; + CodecListModel * model = (CodecListModel *) codecTable->model(); + int currentRow = selectedRow(); + model->codecUp(currentRow); + setSelectedRow(currentRow - 1); +} + +void SortableCodecListWidget::on_codecDownButton_clicked() +{ + qDebug() << "on_codecDownButton_clicked"; + CodecListModel * model = (CodecListModel *) codecTable->model(); + int currentRow = selectedRow(); + model->codecDown(currentRow); + setSelectedRow(currentRow + 1); +} + +void SortableCodecListWidget::updateCommands() +{ + qDebug() << "SortableCodecListWidget::updateCommands"; + bool buttonsEnabled[2] = {true,true}; + if(selectedRow() == -1) + { + buttonsEnabled[0] = false; + buttonsEnabled[1] = false; + } + else + { + if(selectedRow() == 0) + { + buttonsEnabled[0] = false; + } + if(selectedRow() == codecTable->model()->rowCount() - 1) + { + buttonsEnabled[1] = false; + } + } + codecUpButton->setEnabled(buttonsEnabled[0]); + codecDownButton->setEnabled(buttonsEnabled[1]); +} + +QModelIndex SortableCodecListWidget::selectedIndex() +{ + QItemSelectionModel *selection = codecTable->selectionModel(); + const QModelIndexList selectedIndexes = selection->selectedIndexes(); + if ( !selectedIndexes.isEmpty() && selectedIndexes[0].isValid() ) + return selectedIndexes[0]; + else + return QModelIndex(); + } + +int SortableCodecListWidget::selectedRow() +{ + QModelIndex index = selectedIndex(); + if(index.isValid()) + return index.row(); + else + return -1; +} + +void SortableCodecListWidget::setSelectedRow(int row) +{ + QItemSelectionModel * selection = codecTable->selectionModel(); + QAbstractItemModel * model = codecTable->model(); + QItemSelection newSelection = QItemSelection(model->index(row, 0, QModelIndex()), model->index(row +1 , model->columnCount(), QModelIndex())); + selection->clear(); + for(int i = 0 ; i < model->columnCount() ; i++) + { + selection->select(model->index(row, i, QModelIndex()) , QItemSelectionModel::Select); + } +} \ No newline at end of file diff --git a/sflphone-client-kde/src/SortableCodecListWidget.h b/sflphone-client-kde/src/SortableCodecListWidget.h new file mode 100644 index 0000000000000000000000000000000000000000..0ea9eae8fecad5859968f56d28585be317e81f66 --- /dev/null +++ b/sflphone-client-kde/src/SortableCodecListWidget.h @@ -0,0 +1,64 @@ +/*************************************************************************** + * Copyright (C) 2009 by Savoir-Faire Linux * + * Author : Jérémy Quentin * + * jeremy.quentin@savoirfairelinux.com * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 3 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef SORTABLECODECLISTWIDGET_H +#define SORTABLECODECLISTWIDGET_H + +#include <QWidget> +#include <KPushButton> +#include <QTableView> +#include "CodecListModel.h" + +/** + @author Jérémy Quentin <jeremy.quentin@gmail.com> +*/ +class SortableCodecListWidget : public QWidget +{ +Q_OBJECT +private: + KPushButton * codecUpButton; + KPushButton * codecDownButton; + QTableView * codecTable; + +public: + SortableCodecListWidget(QWidget *parent = 0); + + virtual void setModel(CodecListModel * model); + virtual CodecListModel * model(); + +private slots: + void on_codecUpButton_clicked(); + void on_codecDownButton_clicked(); + +public slots: + void updateCommands(); + +private: + QModelIndex selectedIndex(); + int selectedRow(); + + void setSelectedRow(int row); + +signals: + void dataChanged(); + +}; + +#endif diff --git a/sflphone-client-kde/src/conf/ConfigurationDialog.cpp b/sflphone-client-kde/src/conf/ConfigurationDialog.cpp index 9ed7f643854e187cf2bdcec6ebaf2725c404f57e..a6477354e10b424fe3ce3e807bf2d196239d344b 100644 --- a/sflphone-client-kde/src/conf/ConfigurationDialog.cpp +++ b/sflphone-client-kde/src/conf/ConfigurationDialog.cpp @@ -102,12 +102,14 @@ void ConfigurationDialogKDE::updateButtons() void ConfigurationDialogKDE::applyCustomSettings() { qDebug() << "applyCustomSettings"; - dlgAccounts->applyCustomSettings(); // if(hasChanged()) // { ConfigurationSkeleton::self()->writeConfig(); // } + dlgAccounts->applyCustomSettings(); + dlgAudio->applyCustomSettings(); updateButtons(); + emit changesApplied(); } void ConfigurationDialogKDE::reload() @@ -115,5 +117,6 @@ void ConfigurationDialogKDE::reload() qDebug() << "reload"; ConfigurationSkeleton::self()->readConfig(); updateWidgets(); + applyCustomSettings(); updateButtons(); } diff --git a/sflphone-client-kde/src/conf/ConfigurationDialog.h b/sflphone-client-kde/src/conf/ConfigurationDialog.h index 02ac0fe0dc4b1477a9675a0651c708e21b883f6c..7fc0009b9caeb04a68cf32a5099a349c86a83ba1 100644 --- a/sflphone-client-kde/src/conf/ConfigurationDialog.h +++ b/sflphone-client-kde/src/conf/ConfigurationDialog.h @@ -103,6 +103,7 @@ private slots: signals: void clearCallHistoryAsked(); + void changesApplied(); }; diff --git a/sflphone-client-kde/src/conf/ConfigurationSkeleton.cpp b/sflphone-client-kde/src/conf/ConfigurationSkeleton.cpp index e6f89cdd33ebc64d95def2231e93725d69c011fe..f73b8de984f9cff49cd3004f30c4fab72c76e368 100644 --- a/sflphone-client-kde/src/conf/ConfigurationSkeleton.cpp +++ b/sflphone-client-kde/src/conf/ConfigurationSkeleton.cpp @@ -26,9 +26,10 @@ ConfigurationSkeleton::ConfigurationSkeleton() : ConfigurationSkeletonBase() { - qDebug() << "Yoooooooouuuuupppppppiiiiii"; + qDebug() << "Building ConfigurationSkeleton"; + codecListModel = new CodecListModel(); readConfig(); - isImmutable( QString::fromLatin1 ( "alsaPlugin" ) ); + } ConfigurationSkeleton * ConfigurationSkeleton::instance = NULL; @@ -45,6 +46,11 @@ ConfigurationSkeleton::~ConfigurationSkeleton() { } +CodecListModel * ConfigurationSkeleton::getCodecListModel() +{ + return codecListModel; +} + void ConfigurationSkeleton::readConfig() { qDebug() << "\nReading config"; @@ -151,6 +157,7 @@ void ConfigurationSkeleton::readConfig() MapStringInt addressBookSettings = configurationManager.getAddressbookSettings().value(); qDebug() << "getAddressbookSettings() : " << addressBookSettings; + setEnableAddressBook(addressBookSettings[ADDRESSBOOK_ENABLE]); setMaxResults(addressBookSettings[ADDRESSBOOK_MAX_RESULTS]); setDisplayPhoto(addressBookSettings[ADDRESSBOOK_DISPLAY_CONTACT_PHOTO]); setBusiness(addressBookSettings[ADDRESSBOOK_DISPLAY_BUSINESS]); @@ -181,6 +188,8 @@ void ConfigurationSkeleton::writeConfig() ////General settings//// //////////////////////// + qDebug() << "Writing General settings"; + //Call history settings if(enableHistory() != configurationManager.getHistoryEnabled()) configurationManager.setHistoryEnabled(); configurationManager.setHistoryLimit(historyMax()); @@ -192,6 +201,8 @@ void ConfigurationSkeleton::writeConfig() ////Display settings//// //////////////////////// + qDebug() << "Writing Display settings"; + //Notification settings if(notifOnCalls() != configurationManager.getNotify()) configurationManager.setNotify(); if(notifOnMessages() != configurationManager.getMailNotify()) configurationManager.setMailNotify(); @@ -205,6 +216,8 @@ void ConfigurationSkeleton::writeConfig() ////Accounts settings//// ///////////////////////// + qDebug() << "Writing Accounts settings"; + // saveAccountList(); @@ -216,6 +229,8 @@ void ConfigurationSkeleton::writeConfig() ////Audio settings//// ////////////////////// + qDebug() << "Writing Audio settings"; + //Audio Interface settings int prevManager = configurationManager.getAudioManager(); int newManager = interface(); @@ -229,6 +244,7 @@ void ConfigurationSkeleton::writeConfig() configurationManager.setRingtoneChoice(ringtone()); //codecs settings + qDebug() << "activeCodecList = " << activeCodecList(); configurationManager.setActiveCodecList(activeCodecList()); @@ -252,6 +268,8 @@ void ConfigurationSkeleton::writeConfig() ////Record settings//// /////////////////////// + qDebug() << "Writing Record settings"; + QString destination = destinationFolder(); qDebug() << destination ; configurationManager.setRecordPath(destination); @@ -261,7 +279,10 @@ void ConfigurationSkeleton::writeConfig() ////Address Book settings//// ///////////////////////////// + qDebug() << "Writing Address Book settings"; + MapStringInt addressBookSettings = MapStringInt(); + addressBookSettings[ADDRESSBOOK_ENABLE] = enableAddressBook(); addressBookSettings[ADDRESSBOOK_MAX_RESULTS] = maxResults(); addressBookSettings[ADDRESSBOOK_DISPLAY_CONTACT_PHOTO] = displayPhoto(); addressBookSettings[ADDRESSBOOK_DISPLAY_BUSINESS] = business(); @@ -273,6 +294,8 @@ void ConfigurationSkeleton::writeConfig() ///////Hooks settings//////// ///////////////////////////// + qDebug() << "Writing Hooks settings"; + MapStringString hooksSettings = MapStringString(); hooksSettings[HOOKS_ENABLED] = addPrefix() ? "1" : "0"; hooksSettings[HOOKS_ADD_PREFIX] = prepend(); @@ -285,4 +308,12 @@ void ConfigurationSkeleton::writeConfig() readConfig(); } +QStringList ConfigurationSkeleton::activeCodecList() const +{ + return codecListModel->getActiveCodecList(); +} +void ConfigurationSkeleton::setActiveCodecList(const QStringList & v) +{ + codecListModel->setActiveCodecList(v); +} diff --git a/sflphone-client-kde/src/conf/ConfigurationSkeleton.h b/sflphone-client-kde/src/conf/ConfigurationSkeleton.h index a7f31d68b405aac9198aba9312aa939291bebc32..71386a50701c0e72979caeadd154a15cd5973b5b 100644 --- a/sflphone-client-kde/src/conf/ConfigurationSkeleton.h +++ b/sflphone-client-kde/src/conf/ConfigurationSkeleton.h @@ -24,6 +24,7 @@ #include <QWidget> #include "kcfg_settings.h" +#include "CodecListModel.h" /** @author Jérémy Quentin <jeremy.quentin@gmail.com> @@ -34,6 +35,8 @@ Q_OBJECT private: static ConfigurationSkeleton * instance; + + CodecListModel * codecListModel; public: ConfigurationSkeleton(); @@ -47,6 +50,10 @@ public: static ConfigurationSkeleton * self(); + QStringList activeCodecList() const; + void setActiveCodecList(const QStringList & v); + + CodecListModel * getCodecListModel(); // protected: diff --git a/sflphone-client-kde/src/conf/dlgaccounts.cpp b/sflphone-client-kde/src/conf/dlgaccounts.cpp index a2efb52bbb623d837d97b7d6b67e21422a8420a6..9179626e67969216fa06de7aea74777ac15c4c81 100644 --- a/sflphone-client-kde/src/conf/dlgaccounts.cpp +++ b/sflphone-client-kde/src/conf/dlgaccounts.cpp @@ -296,7 +296,7 @@ void DlgAccounts::on_toolButton_accountsApply_clicked() void DlgAccounts::applyCustomSettings() { - qDebug() << "applyCustomSettings"; + qDebug() << "DlgAccounts::applyCustomSettings"; if(hasChanged()) { toolButton_accountsApply->setEnabled(false); diff --git a/sflphone-client-kde/src/conf/dlgaddressbookbase.ui b/sflphone-client-kde/src/conf/dlgaddressbookbase.ui index 0048b161954c45f5831794baff6ecf528c610c0f..779a3dc5705b55829beaed96a867605e98ffdfe1 100644 --- a/sflphone-client-kde/src/conf/dlgaddressbookbase.ui +++ b/sflphone-client-kde/src/conf/dlgaddressbookbase.ui @@ -14,16 +14,38 @@ <string>Form</string> </property> <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QCheckBox" name="kcfg_enableAddressBook"> + <property name="text"> + <string>Enable address book</string> + </property> + </widget> + </item> <item> <widget class="QWidget" name="widget_configAddressBookGeneral" native="true"> + <property name="enabled"> + <bool>false</bool> + </property> <layout class="QVBoxLayout" name="verticalLayout_2"> + <property name="leftMargin"> + <number>0</number> + </property> <item> <widget class="QWidget" name="widget_maxResults" native="true"> <layout class="QHBoxLayout" name="horizontalLayout_4"> <property name="spacing"> <number>-1</number> </property> - <property name="margin"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>5</number> + </property> + <property name="rightMargin"> + <number>5</number> + </property> + <property name="bottomMargin"> <number>5</number> </property> <item> @@ -68,34 +90,34 @@ </property> </widget> </item> - </layout> - </widget> - </item> - <item> - <widget class="QGroupBox" name="groupBox_displayTypes"> - <property name="title"> - <string>Display phone numbers of these &types :</string> - </property> - <layout class="QHBoxLayout" name="horizontalLayout_7"> - <item> - <widget class="QCheckBox" name="kcfg_business"> - <property name="text"> - <string>&Work</string> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="kcfg_mobile"> - <property name="text"> - <string>&Mobile</string> - </property> - </widget> - </item> <item> - <widget class="QCheckBox" name="kcfg_home"> - <property name="text"> - <string>&Home</string> + <widget class="QGroupBox" name="groupBox_displayTypes"> + <property name="title"> + <string>Display phone numbers of these &types :</string> </property> + <layout class="QHBoxLayout" name="horizontalLayout_7"> + <item> + <widget class="QCheckBox" name="kcfg_business"> + <property name="text"> + <string>&Work</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="kcfg_mobile"> + <property name="text"> + <string>&Mobile</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="kcfg_home"> + <property name="text"> + <string>&Home</string> + </property> + </widget> + </item> + </layout> </widget> </item> </layout> @@ -132,12 +154,12 @@ <slot>setValue(int)</slot> <hints> <hint type="sourcelabel"> - <x>223</x> - <y>35</y> + <x>265</x> + <y>67</y> </hint> <hint type="destinationlabel"> - <x>301</x> - <y>33</y> + <x>326</x> + <y>70</y> </hint> </hints> </connection> @@ -148,12 +170,28 @@ <slot>setValue(int)</slot> <hints> <hint type="sourcelabel"> - <x>294</x> - <y>36</y> + <x>326</x> + <y>70</y> + </hint> + <hint type="destinationlabel"> + <x>265</x> + <y>67</y> + </hint> + </hints> + </connection> + <connection> + <sender>kcfg_enableAddressBook</sender> + <signal>toggled(bool)</signal> + <receiver>widget_configAddressBookGeneral</receiver> + <slot>setEnabled(bool)</slot> + <hints> + <hint type="sourcelabel"> + <x>92</x> + <y>25</y> </hint> <hint type="destinationlabel"> - <x>215</x> - <y>33</y> + <x>91</x> + <y>39</y> </hint> </hints> </connection> diff --git a/sflphone-client-kde/src/conf/dlgaudio.cpp b/sflphone-client-kde/src/conf/dlgaudio.cpp index 0700c61bfb418e8ea04748dbbd78a302157c8f5d..8a29233bca28d592ca06d1e65b27886a9e6aa10d 100644 --- a/sflphone-client-kde/src/conf/dlgaudio.cpp +++ b/sflphone-client-kde/src/conf/dlgaudio.cpp @@ -38,25 +38,33 @@ DlgAudio::DlgAudio(KConfigDialog *parent) KUrlRequester_ringtone->lineEdit()->setReadOnly(true); codecTableHasChanged = false; - toolButton_codecUp->setIcon(KIcon("go-up")); - toolButton_codecDown->setIcon(KIcon("go-down")); - tableWidget_codecs->verticalHeader()->hide(); - tableWidget_codecs->setSelectionBehavior(QAbstractItemView::SelectRows); +// toolButton_codecUp->setIcon(KIcon("go-up")); +// toolButton_codecDown->setIcon(KIcon("go-down")); +// tableWidget_codecs->verticalHeader()->hide(); +// tableWidget_codecs->setSelectionBehavior(QAbstractItemView::SelectRows); + + ConfigurationSkeleton * skeleton = ConfigurationSkeleton::self(); + CodecListModel * model = skeleton->getCodecListModel(); + sortableCodecList->setModel(model); updateAlsaSettings(); connect(box_alsaPlugin, SIGNAL(currentIndexChanged(int)), parent, SLOT(updateButtons())); - connect(tableWidget_codecs, SIGNAL(itemChanged(QTableWidgetItem *)), - this, SLOT(codecTableChanged())); - connect(tableWidget_codecs, SIGNAL(currentCellChanged(int, int, int, int)), - this, SLOT(updateCodecListCommands())); - connect(toolButton_codecUp, SIGNAL(clicked()), - this, SLOT(codecTableChanged())); - connect(toolButton_codecDown, SIGNAL(clicked()), - this, SLOT(codecTableChanged())); +// connect(tableWidget_codecs, SIGNAL(itemChanged(QTableWidgetItem *)), +// this, SLOT(codecTableChanged())); +// connect(tableWidget_codecs, SIGNAL(currentCellChanged(int, int, int, int)), +// this, SLOT(updateCodecListCommands())); +// connect(toolButton_codecUp, SIGNAL(clicked()), +// this, SLOT(codecTableChanged())); +// connect(toolButton_codecDown, SIGNAL(clicked()), +// this, SLOT(codecTableChanged())); connect(this, SIGNAL(updateButtons()), parent, SLOT(updateButtons())); + + connect(sortableCodecList, SIGNAL(dataChanged()), + this, SLOT(codecTableChanged())); + } @@ -72,88 +80,108 @@ void DlgAudio::updateWidgets() box_alsaPlugin->setCurrentIndex(box_alsaPlugin->findText(skeleton->alsaPlugin())); //codecList - qDebug() << "loadCodecs"; - ConfigurationManagerInterface & configurationManager = ConfigurationManagerInterfaceSingleton::getInstance(); - QStringList codecList = configurationManager.getCodecList(); - QStringList activeCodecList = skeleton->activeCodecList(); - #if QT_VERSION >= 0x040500 - activeCodecList.removeDuplicates(); - #else - for (int i = 0 ; i < activeCodecList.size() ; i++) - { - if(activeCodecList.lastIndexOf(activeCodecList[i]) != i || ! codecList.contains(activeCodecList[i])) - { - activeCodecList.removeAt(i); - i--; - } - } - #endif - - QStringList codecListToDisplay = activeCodecList; - for (int i=0 ; i<codecList.size() ; i++) - { - if(! activeCodecList.contains(codecList[i])) - { - codecListToDisplay << codecList[i]; - } - } - qDebug() << "codecList = " << codecList; - qDebug() << "activeCodecList" << activeCodecList; - qDebug() << "codecListToDisplay" << codecListToDisplay; - tableWidget_codecs->setRowCount(0); - for(int i=0 ; i<codecListToDisplay.size() ; i++) - { - bool ok; - qDebug() << codecListToDisplay[i]; - QString payloadStr = QString(codecListToDisplay[i]); - int payload = payloadStr.toInt(&ok); - if(!ok) - qDebug() << "The codec's payload sent by the configurationManager is not a number : " << codecListToDisplay[i]; - else - { - QStringList details = configurationManager.getCodecDetails(payload); - tableWidget_codecs->insertRow(i); - tableWidget_codecs->setVerticalHeaderItem (i, new QTableWidgetItem()); - tableWidget_codecs->verticalHeaderItem (i)->setText(payloadStr); - tableWidget_codecs->setItem(i,0,new QTableWidgetItem("")); - tableWidget_codecs->setItem(i,1,new QTableWidgetItem(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(codecListToDisplay[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); - - qDebug() << "Added to codecs : " << payloadStr << " , " << details[CODEC_NAME]; - } - } - tableWidget_codecs->resizeColumnsToContents(); - tableWidget_codecs->resizeRowsToContents(); +// qDebug() << "loadCodecs"; +// ConfigurationManagerInterface & configurationManager = ConfigurationManagerInterfaceSingleton::getInstance(); +// QStringList codecList = configurationManager.getCodecList(); +// QStringList activeCodecList = skeleton->activeCodecList(); +// +// qDebug() << "loadCodecs1"; +// #if QT_VERSION >= 0x040500 +// qDebug() << "loadCodecs1b"; +// activeCodecList.removeDuplicates(); +// +// qDebug() << "loadCodecs1c"; +// #else +// +// qDebug() << "loadCodecs1d"; +// for (int i = 0 ; i < activeCodecList.size() ; i++) +// { +// if(activeCodecList.lastIndexOf(activeCodecList[i]) != i || ! codecList.contains(activeCodecList[i])) +// { +// activeCodecList.removeAt(i); +// i--; +// } +// } +// +// qDebug() << "loadCodecs1e"; +// #endif +// +// qDebug() << "loadCodecs2"; +// QStringList codecListToDisplay = activeCodecList; +// qDebug() << "loadCodecs2b"; +// codecList.size(); +// +// qDebug() << "loadCodecs2c"; +// for (int i=0 ; i<codecList.size() ; i++) +// { +// +// qDebug() << "loadCodecs3"; +// if(! activeCodecList.contains(codecList[i])) +// { +// +// qDebug() << "loadCodecs4"; +// codecListToDisplay << codecList[i]; +// } +// } +// +// qDebug() << "loadCodecs5"; +// qDebug() << "codecList = " << codecList; +// qDebug() << "activeCodecList" << activeCodecList; +// qDebug() << "codecListToDisplay" << codecListToDisplay; +// tableWidget_codecs->setRowCount(0); +// for(int i=0 ; i<codecListToDisplay.size() ; i++) +// { +// bool ok; +// qDebug() << codecListToDisplay[i]; +// QString payloadStr = QString(codecListToDisplay[i]); +// int payload = payloadStr.toInt(&ok); +// if(!ok) +// qDebug() << "The codec's payload sent by the configurationManager is not a number : " << codecListToDisplay[i]; +// else +// { +// QStringList details = configurationManager.getCodecDetails(payload); +// tableWidget_codecs->insertRow(i); +// tableWidget_codecs->setVerticalHeaderItem (i, new QTableWidgetItem()); +// tableWidget_codecs->verticalHeaderItem (i)->setText(payloadStr); +// tableWidget_codecs->setItem(i,0,new QTableWidgetItem("")); +// tableWidget_codecs->setItem(i,1,new QTableWidgetItem(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(codecListToDisplay[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); +// +// qDebug() << "Added to codecs : " << payloadStr << " , " << details[CODEC_NAME]; +// } +// } +// tableWidget_codecs->resizeColumnsToContents(); +// tableWidget_codecs->resizeRowsToContents(); codecTableHasChanged = false; } void DlgAudio::updateSettings() { -// qDebug() << "DlgAudio::updateSettings"; + qDebug() << "DlgAudio::updateSettings"; //alsaPlugin ConfigurationSkeleton * skeleton = ConfigurationSkeleton::self(); skeleton->setAlsaPlugin(box_alsaPlugin->currentText()); //codecList - QStringList activeCodecs; - for(int i = 0 ; i < tableWidget_codecs->rowCount() ; i++) - { - if(tableWidget_codecs->item(i,0)->checkState() == Qt::Checked) - { - activeCodecs << tableWidget_codecs->verticalHeaderItem(i)->text(); - } - } - qDebug() << "Calling setActiveCodecList with list : " << activeCodecs ; - skeleton->setActiveCodecList(activeCodecs); +// QStringList activeCodecs; +// for(int i = 0 ; i < tableWidget_codecs->rowCount() ; i++) +// { +// if(tableWidget_codecs->item(i,0)->checkState() == Qt::Checked) +// { +// activeCodecs << tableWidget_codecs->verticalHeaderItem(i)->text(); +// } +// } +// qDebug() << "Calling setActiveCodecList with list : " << activeCodecs ; +// skeleton->setActiveCodecList(activeCodecs); codecTableHasChanged = false; } @@ -205,69 +233,75 @@ void DlgAudio::updateAlsaSettings() } } -void DlgAudio::updateCodecListCommands() -{ - qDebug() << "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; - } - if(tableWidget_codecs->currentRow() == tableWidget_codecs->rowCount() - 1) - { - buttonsEnabled[1] = false; - } - } - toolButton_codecUp->setEnabled(buttonsEnabled[0]); - toolButton_codecDown->setEnabled(buttonsEnabled[1]); -} +// void DlgAudio::updateCodecListCommands() +// { +// qDebug() << "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; +// } +// if(tableWidget_codecs->currentRow() == tableWidget_codecs->rowCount() - 1) +// { +// buttonsEnabled[1] = false; +// } +// } +// toolButton_codecUp->setEnabled(buttonsEnabled[0]); +// toolButton_codecDown->setEnabled(buttonsEnabled[1]); +// } -void DlgAudio::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); - } - QTableWidgetItem * item1 = tableWidget_codecs->takeVerticalHeaderItem(currentRow); - QTableWidgetItem * item2 = tableWidget_codecs->takeVerticalHeaderItem(currentRow - 1); - tableWidget_codecs->setVerticalHeaderItem(currentRow - 1, item1); - tableWidget_codecs->setVerticalHeaderItem(currentRow, item2); - tableWidget_codecs->setCurrentCell(currentRow - 1, currentCol); -} +// void DlgAudio::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); +// } +// QTableWidgetItem * item1 = tableWidget_codecs->takeVerticalHeaderItem(currentRow); +// QTableWidgetItem * item2 = tableWidget_codecs->takeVerticalHeaderItem(currentRow - 1); +// tableWidget_codecs->setVerticalHeaderItem(currentRow - 1, item1); +// tableWidget_codecs->setVerticalHeaderItem(currentRow, item2); +// tableWidget_codecs->setCurrentCell(currentRow - 1, currentCol); +// } +// +// void DlgAudio::on_toolButton_codecDown_clicked() +// { +// qDebug() << "on_toolButton_codecDown_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); +// } +// QTableWidgetItem * item1 = tableWidget_codecs->takeVerticalHeaderItem(currentRow); +// QTableWidgetItem * item2 = tableWidget_codecs->takeVerticalHeaderItem(currentRow + 1); +// tableWidget_codecs->setVerticalHeaderItem(currentRow + 1, item1); +// tableWidget_codecs->setVerticalHeaderItem(currentRow, item2); +// tableWidget_codecs->setCurrentCell(currentRow + 1, currentCol); +// } + -void DlgAudio::on_toolButton_codecDown_clicked() +void DlgAudio::applyCustomSettings() { - qDebug() << "on_toolButton_codecDown_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); - } - QTableWidgetItem * item1 = tableWidget_codecs->takeVerticalHeaderItem(currentRow); - QTableWidgetItem * item2 = tableWidget_codecs->takeVerticalHeaderItem(currentRow + 1); - tableWidget_codecs->setVerticalHeaderItem(currentRow + 1, item1); - tableWidget_codecs->setVerticalHeaderItem(currentRow, item2); - tableWidget_codecs->setCurrentCell(currentRow + 1, currentCol); + codecTableHasChanged = false; } diff --git a/sflphone-client-kde/src/conf/dlgaudio.h b/sflphone-client-kde/src/conf/dlgaudio.h index cad1b9ee65a39f0e20183a3616e353115d6c04a1..74fe3db72b88cd2f02fb7eaf9c7a51167b539d09 100644 --- a/sflphone-client-kde/src/conf/dlgaudio.h +++ b/sflphone-client-kde/src/conf/dlgaudio.h @@ -46,11 +46,12 @@ public slots: void updateSettings(); bool hasChanged(); void updateAlsaSettings(); + void applyCustomSettings(); private slots: - void updateCodecListCommands(); - void on_toolButton_codecUp_clicked(); - void on_toolButton_codecDown_clicked(); +// void updateCodecListCommands(); +// void on_toolButton_codecUp_clicked(); +// void on_toolButton_codecDown_clicked(); void codecTableChanged(); signals: diff --git a/sflphone-client-kde/src/conf/dlgaudiobase.ui b/sflphone-client-kde/src/conf/dlgaudiobase.ui index 3679d8c79da33d1f7d00ba9924d287776ea97c8d..a73315057e53ed48b8623718b5cc564acdd67920 100644 --- a/sflphone-client-kde/src/conf/dlgaudiobase.ui +++ b/sflphone-client-kde/src/conf/dlgaudiobase.ui @@ -95,87 +95,7 @@ <number>2</number> </property> <item> - <widget class="QTableWidget" name="tableWidget_codecs"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize"> - <size> - <width>0</width> - <height>100</height> - </size> - </property> - <property name="frameShape"> - <enum>QFrame::StyledPanel</enum> - </property> - <property name="frameShadow"> - <enum>QFrame::Sunken</enum> - </property> - <property name="verticalScrollBarPolicy"> - <enum>Qt::ScrollBarAsNeeded</enum> - </property> - <property name="textElideMode"> - <enum>Qt::ElideRight</enum> - </property> - <property name="verticalScrollMode"> - <enum>QAbstractItemView::ScrollPerPixel</enum> - </property> - <property name="horizontalScrollMode"> - <enum>QAbstractItemView::ScrollPerPixel</enum> - </property> - <column> - <property name="text"> - <string>Active</string> - </property> - </column> - <column> - <property name="text"> - <string>Name</string> - </property> - </column> - <column> - <property name="text"> - <string>Frequency</string> - </property> - </column> - <column> - <property name="text"> - <string>Bitrate</string> - </property> - </column> - <column> - <property name="text"> - <string>Bandwidth</string> - </property> - </column> - </widget> - </item> - <item> - <layout class="QVBoxLayout" name="verticalLayout_codecsOrder"> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <item> - <widget class="QToolButton" name="toolButton_codecUp"> - <property name="text"> - <string/> - </property> - </widget> - </item> - <item> - <widget class="QToolButton" name="toolButton_codecDown"> - <property name="text"> - <string/> - </property> - </widget> - </item> - </layout> + <widget class="SortableCodecListWidget" name="sortableCodecList" native="true"/> </item> </layout> </widget> @@ -311,6 +231,12 @@ <extends>QFrame</extends> <header>kurlrequester.h</header> </customwidget> + <customwidget> + <class>SortableCodecListWidget</class> + <extends>QWidget</extends> + <header>SortableCodecListWidget.h</header> + <container>1</container> + </customwidget> </customwidgets> <resources/> <connections> diff --git a/sflphone-client-kde/src/conf/dlgrecord.cpp b/sflphone-client-kde/src/conf/dlgrecord.cpp index 3c97898f5cd30bd11aca1a278a9a2bd93482cfff..49181a1b632ff31dbce54d14ac9a6a4802810001 100644 --- a/sflphone-client-kde/src/conf/dlgrecord.cpp +++ b/sflphone-client-kde/src/conf/dlgrecord.cpp @@ -29,6 +29,7 @@ DlgRecord::DlgRecord(QWidget *parent) KUrlRequester_destinationFolder->setMode(KFile::Directory|KFile::ExistingOnly|KFile::LocalOnly); KUrlRequester_destinationFolder->setUrl(KUrl(QDir::home().path())); KUrlRequester_destinationFolder->lineEdit()->setObjectName("kcfg_destinationFolder"); + KUrlRequester_destinationFolder->lineEdit()->setReadOnly(true); } diff --git a/sflphone-client-kde/src/conf/sflphone-client-kde.kcfg b/sflphone-client-kde/src/conf/sflphone-client-kde.kcfg index c90d937a82b9467862627d82d0798fc2287ed8e0..11d1fc817d6c834d4286b09c288411a43e6fcd07 100644 --- a/sflphone-client-kde/src/conf/sflphone-client-kde.kcfg +++ b/sflphone-client-kde/src/conf/sflphone-client-kde.kcfg @@ -2,7 +2,10 @@ <!DOCTYPE kcfg SYSTEM "http://www.kde.org/standards/kcfg/1.0/kcfg.dtd"> <kcfg> <kcfgfile name="ConfigDialogKDE" /> - <group name="main"> + <group name="main"> + + <!-- General Settings --> + <entry name="SIPPort" type="Int"> <label>Defines the port that will be used for SIP communication.</label> <min> 1025 </min> @@ -18,6 +21,9 @@ <max> 99 </max> <default> 30 </default> </entry> + + <!-- Display Settings --> + <entry name="notifOnCalls" type="Bool"> <label>Defines whether user should be notified when receiving a call.</label> </entry> @@ -30,6 +36,9 @@ <entry name="displayOnCalls" type="Bool"> <label>Defines whether the main window should be displayed when receiving a message.</label> </entry> + + <!-- Accounts Settings --> + <!-- <entry name="accountList" type="StringList"> <label>Defines the list of accounts to register, in order of preference (first registered used by default).</label> @@ -41,6 +50,9 @@ <entry name="stunServer" type="String"> <label>Defines the Stun server to use.</label> </entry> + + <!-- Audio Settings --> + <entry name="interface" type="Enum"> <label>Defines the Stun server to use.</label> <choices> @@ -54,9 +66,11 @@ <entry name="ringtone" type="Path"> <label>Defines which ringtone is used.</label> </entry> + <!-- <entry name="activeCodecList" type="StringList"> <label>Defines which ALSA plugin to use.</label> </entry> + --> <entry name="alsaPlugin" type="String"> <label>Defines which ALSA plugin to use.</label> </entry> @@ -69,6 +83,12 @@ <entry name="pulseAudioVolumeAlter" type="Bool"> <label>Defines whether pulse audio can mute other applications during a call.</label> </entry> + + <!-- Address Book Settings --> + + <entry name="enableAddressBook" type="Bool"> + <label>Defines whether the search in KDE Address Book is enabled</label> + </entry> <entry name="maxResults" type="Int"> <label>Defines the max number of contacts to display during a search in address book.</label> </entry> @@ -84,9 +104,15 @@ <entry name="home" type="Bool"> <label>Defines whether to display personnal phone numbers.</label> </entry> + + <!-- Record Settings --> + <entry name="destinationFolder" type="Path"> <label>Defines the destination directory for call recordings.</label> </entry> + + <!-- Hooks Settings --> + <entry name="enableHooksSIP" type="Bool"> <label>Defines whether to enable hooks for SIP accounts.</label> </entry> diff --git a/sflphone-client-kde/src/main.cpp b/sflphone-client-kde/src/main.cpp index 23853b339751d74b5fcc37be72497c252f6a15aa..c6de33b710fe18315102c533ab8832d3b38d7251 100644 --- a/sflphone-client-kde/src/main.cpp +++ b/sflphone-client-kde/src/main.cpp @@ -16,6 +16,11 @@ #include "conf/ConfigurationDialog.h" +#include <QTableView> +#include <QListView> +#include "CodecListModel.h" +#include "SortableCodecListWidget.h" + static const char description[] = "A KDE 4 Client for SFLphone"; @@ -50,11 +55,13 @@ int main(int argc, char **argv) //configuration dbus registerCommTypes(); - SFLPhone * fenetre = new SFLPhone(); InstanceInterface & instance = InstanceInterfaceSingleton::getInstance(); instance.Register(getpid(), APP_NAME); + +// SortableCodecListWidget * cl = new SortableCodecListWidget(); +// cl->show(); return app.exec(); } diff --git a/sflphone-client-kde/src/sflphone_const.h b/sflphone-client-kde/src/sflphone_const.h index aa08c6e4e096ca92afacc8df1b30fdad59b25621..d7810672e513f15b1127539913b788f20a93fe81 100644 --- a/sflphone-client-kde/src/sflphone_const.h +++ b/sflphone-client-kde/src/sflphone_const.h @@ -184,6 +184,7 @@ #define ADDRESSBOOK_DISPLAY_BUSINESS "ADDRESSBOOK_DISPLAY_PHONE_BUSINESS" #define ADDRESSBOOK_DISPLAY_HOME "ADDRESSBOOK_DISPLAY_PHONE_HOME" #define ADDRESSBOOK_DISPLAY_MOBILE "ADDRESSBOOK_DISPLAY_PHONE_MOBILE" +#define ADDRESSBOOK_ENABLE "ADDRESSBOOK_ENABLE" /** Hooks settings */ #define HOOKS_ADD_PREFIX "PHONE_NUMBER_HOOK_ADD_PREFIX" @@ -208,38 +209,4 @@ -/** Error while opening capture device */ -#define ALSA_CAPTURE_DEVICE 0x0001 -/** Error while opening playback device */ -#define ALSA_PLAYBACK_DEVICE 0x0010 -/** Error pulseaudio */ -#define PULSEAUDIO_NOT_RUNNING 0x0100 - -/** Tone to play when no voice mails */ -#define TONE_WITHOUT_MESSAGE 0 -/** Tone to play when voice mails */ -#define TONE_WITH_MESSAGE 1 - - -/** Notification levels */ -#define __NOTIF_LEVEL_MIN 0 -#define __NOTIF_LEVEL_MED 1 -#define __NOTIF_LEVEL_HIGH 2 - -/** Messages ID for the status bar - Incoming calls */ -#define __MSG_INCOMING_CALL 0 -/** Messages ID for the status bar - Calling */ -#define __MSG_CALLING 1 -/** Messages ID for the status bar - Voice mails notification */ -#define __MSG_VOICE_MAILS 2 -/** Messages ID for the status bar - Current account */ -#define __MSG_ACCOUNT_DEFAULT 3 - -/** Desktop notifications - Time before to close the notification*/ -#define __TIMEOUT_MODE "default" -/** Desktop notifications - Time before to close the notification*/ -#define __TIMEOUT_TIME 18000 // 30 secondes - - - #endif diff --git a/sflphone-client-kde/src/sflphone_kdeview.cpp b/sflphone-client-kde/src/sflphone_kdeview.cpp index b40fde0d20be6596ed34ec38ea203530a8666dee..d15099c48fed422fae78a41faa4eb43532f37178 100644 --- a/sflphone-client-kde/src/sflphone_kdeview.cpp +++ b/sflphone-client-kde/src/sflphone_kdeview.cpp @@ -105,13 +105,16 @@ sflphone_kdeView::sflphone_kdeView(QWidget *parent) connect(configDialog, SIGNAL(clearCallHistoryAsked()), callList, SLOT(clearHistory())); + connect(configDialog, SIGNAL(changesApplied()), + this, SLOT(loadWindow())); + connect(accountList, SIGNAL(accountListUpdated()), - this, SLOT(updateStatusMessage())); + this, SLOT(updateStatusMessage())); connect(accountList, SIGNAL(accountListUpdated()), - this, SLOT(updateWindowCallState())); + this, SLOT(updateWindowCallState())); accountList->updateAccounts(); - + QPalette pal = QPalette(palette()); pal.setColor(QPalette::AlternateBase, Qt::lightGray); setPalette(pal); @@ -148,6 +151,9 @@ void sflphone_kdeView::loadWindow() updateVolumeControls(); updateDialpad(); updateSearchHistory(); + updateAddressBookButton(); + updateAddressBook(); + if(! isAddressBookEnabled() && stackedWidget_screen->currentWidget() == page_addressBook) stackedWidget_screen->setCurrentWidget(page_callList); } @@ -498,7 +504,7 @@ void sflphone_kdeView::updateWindowCallState() buttonIconFiles[0] = ICON_ACCEPT; buttonIconFiles[1] = ICON_REFUSE; actionTexts[0] = ACTION_LABEL_ACCEPT; - actionTexts[0] = ACTION_LABEL_REFUSE; + actionTexts[1] = ACTION_LABEL_REFUSE; break; case CALL_STATE_RINGING: qDebug() << "Reached CALL_STATE_RINGING with call " << (*callList)[item]->getCallId(); @@ -684,22 +690,41 @@ void sflphone_kdeView::updateAddressBook() QListWidgetItem * item = listWidget_addressBook->takeItem(0); qDebug() << "take item " << item->text(); } - QString textSearched = lineEdit_addressBook->text(); - if(textSearched.isEmpty()) + if(!isAddressBookEnabled()) { + lineEdit_addressBook->setText(i18n("Address book has been disabled")); + lineEdit_addressBook->setEnabled(false); label_addressBookFull->setVisible(false); - return; } - bool full = false; - QVector<Contact *> contactsFound = findContactsInKAddressBook(textSearched, full); - qDebug() << "Full : " << full; - label_addressBookFull->setVisible(full); - for(int i = 0 ; i < contactsFound.size() ; i++) + else { - Contact * contact = contactsFound[i]; - addContactToContactList(contact); + if(loadAddressBook()) + { + QString textSearched = lineEdit_addressBook->text(); + if(textSearched.isEmpty()) + { + label_addressBookFull->setVisible(false); + return; + } + bool full = false; + QVector<Contact *> contactsFound = findContactsInKAddressBook(textSearched, full); + qDebug() << "Full : " << full; + label_addressBookFull->setVisible(full); + for(int i = 0 ; i < contactsFound.size() ; i++) + { + Contact * contact = contactsFound[i]; + addContactToContactList(contact); + } + alternateColors(listWidget_addressBook); + } + else + { + lineEdit_addressBook->setText(i18n("Address book loading...")); + lineEdit_addressBook->setEnabled(false); + label_addressBookFull->setVisible(false); + } } - alternateColors(listWidget_addressBook); + } void sflphone_kdeView::alternateColors(QListWidget * listWidget) @@ -722,8 +747,7 @@ QVector<Contact *> sflphone_kdeView::findContactsInKAddressBook(QString textSear int maxResults = addressBookSettings[ADDRESSBOOK_MAX_RESULTS]; int typesDisplayed = phoneNumberTypesDisplayed(); bool displayPhoto = addressBookSettings[ADDRESSBOOK_DISPLAY_CONTACT_PHOTO]; - - AddressBook * ab = KABC::StdAddressBook::self(); + AddressBook * ab = KABC::StdAddressBook::self(true); QVector<Contact *> results = QVector<Contact *>(); AddressBook::Iterator it; full = false; @@ -1433,6 +1457,42 @@ void sflphone_kdeView::on1_volumeChanged(const QString &device, double value) updateVolumeBar(); } +void sflphone_kdeView::enableAddressBook() +{ + qDebug() << "\nenableAddressBook\n"; + lineEdit_addressBook->clear(); + lineEdit_addressBook->setEnabled(true); +} + +bool sflphone_kdeView::loadAddressBook() +{ + qDebug() << "loadAddressBook"; + AddressBook * ab = StdAddressBook::self(true); + if(ab->loadingHasFinished()) + { + return true; + } + else + { + connect(ab, SIGNAL(addressBookChanged(AddressBook *)), + this, SLOT(enableAddressBook())); + return false; + } +} + +void sflphone_kdeView::updateAddressBookButton() +{ + action_addressBook->setVisible(isAddressBookEnabled()); +} + + + +bool sflphone_kdeView::isAddressBookEnabled() +{ + ConfigurationManagerInterface & configurationManager = ConfigurationManagerInterfaceSingleton::getInstance(); + MapStringInt addressBookSettings = configurationManager.getAddressbookSettings().value(); + return addressBookSettings[ADDRESSBOOK_ENABLE]; +} #include "sflphone_kdeview.moc" diff --git a/sflphone-client-kde/src/sflphone_kdeview.h b/sflphone-client-kde/src/sflphone_kdeview.h index ddcc22354e92b93caa56d47de0e49692d7575240..ea33ea4f8e4ff6c3f16eab4caa51f354eab20fa0 100644 --- a/sflphone-client-kde/src/sflphone_kdeview.h +++ b/sflphone-client-kde/src/sflphone_kdeview.h @@ -81,11 +81,6 @@ public: //Constructors & Destructors sflphone_kdeView(QWidget *parent); virtual ~sflphone_kdeView(); - /** - * Called at construction. Updates all the display - * according to the settings. - */ - void loadWindow(); //Getters /** @@ -118,6 +113,12 @@ public: */ int phoneNumberTypesDisplayed(); + /** + * + * @return true if the address book is enabled in config + */ + bool isAddressBookEnabled(); + //Updates QVector<Contact *> findContactsInKAddressBook(QString textSearched, bool & full); @@ -227,7 +228,32 @@ private slots: void updateDialpad(); public slots: + /** + * Updates all the display + * according to the settings. + */ + void loadWindow(); + + void updateStatusMessage(); + /** + * Enable the address book search line edit. + * To be called once the address book loading has finished. + */ + void enableAddressBook(); + /** + * Loads the address book asynchronously. + * Calls enableAddressBook() once the address book + * loading has finished if it is not allready loaded. + * @return true if address book has finished loading + */ + bool loadAddressBook(); + + /** + * choose to enable/disable the address book button + * according to the configuration's setting. + */ + void updateAddressBookButton(); virtual void keyPressEvent(QKeyEvent *event) diff --git a/sflphone-client-kde/src/ui/sflphone_kdeview_base.ui b/sflphone-client-kde/src/ui/sflphone_kdeview_base.ui index b739d849aefbcbff6c35a58c62e5818efc44ac6b..831907f40781fcc0f789bdd4304d5a5cfe5cee87 100644 --- a/sflphone-client-kde/src/ui/sflphone_kdeview_base.ui +++ b/sflphone-client-kde/src/ui/sflphone_kdeview_base.ui @@ -66,6 +66,12 @@ </item> <item> <widget class="KLineEdit" name="lineEdit_addressBook"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="text"> + <string>Address book loading...</string> + </property> <property name="showClearButton" stdset="0"> <bool>true</bool> </property>