diff --git a/Linphone/core/App.cpp b/Linphone/core/App.cpp index d3df558a3..f24f06c37 100644 --- a/Linphone/core/App.cpp +++ b/Linphone/core/App.cpp @@ -972,6 +972,7 @@ void App::restart() { mIsRestarting = true; if (mAccountList) mAccountList->resetData(); if (mCallList) mCallList->resetData(); + if (mCallHistoryList) mCallHistoryList->resetData(); if (mChatList) mChatList->resetData(); if (mConferenceInfoList) mConferenceInfoList->resetData(); closeCallsWindow(); @@ -1234,6 +1235,16 @@ void App::setConferenceInfoList(QSharedPointer data) { } } +QSharedPointer App::getCallHistoryList() const { + return mCallHistoryList; +} +void App::setCallHistoryList(QSharedPointer data) { + if (mCallHistoryList != data) { + mCallHistoryList = data; + emit callHistoryChanged(); + } +} + QSharedPointer App::getChatList() const { return mChatList; } diff --git a/Linphone/core/App.hpp b/Linphone/core/App.hpp index 8de4ce16f..1c6fc2ec9 100644 --- a/Linphone/core/App.hpp +++ b/Linphone/core/App.hpp @@ -24,6 +24,7 @@ #include #include "core/account/AccountProxy.hpp" +#include "core/call-history/CallHistoryList.hpp" #include "core/call/CallProxy.hpp" #include "core/chat/ChatGui.hpp" #include "core/chat/ChatList.hpp" @@ -163,6 +164,9 @@ public: QSharedPointer getConferenceInfoList() const; void setConferenceInfoList(QSharedPointer data); + QSharedPointer getCallHistoryList() const; + void setCallHistoryList(QSharedPointer data); + QSharedPointer getChatList() const; ChatList *getChats() const; void setChatList(QSharedPointer data); @@ -213,6 +217,7 @@ signals: void currentChatChanged(); void conferenceInfosChanged(); void chatsChanged(); + void callHistoryChanged(); void localeChanged(); // void executeCommand(QString command); @@ -239,6 +244,7 @@ private: QSharedPointer mConferenceInfoList; QSharedPointer mChatList; QSharedPointer mCallList; + QSharedPointer mCallHistoryList; QSharedPointer> mCoreModelConnection; QSharedPointer> mCliModelConnection; bool mAutoStart = false; diff --git a/Linphone/core/call-history/CallHistoryProxy.cpp b/Linphone/core/call-history/CallHistoryProxy.cpp index 57552f85b..999f4544d 100644 --- a/Linphone/core/call-history/CallHistoryProxy.cpp +++ b/Linphone/core/call-history/CallHistoryProxy.cpp @@ -27,6 +27,11 @@ DEFINE_ABSTRACT_OBJECT(CallHistoryProxy) CallHistoryProxy::CallHistoryProxy(QObject *parent) : LimitProxy(parent) { mHistoryList = CallHistoryList::create(); + if (!App::getInstance()->getCallHistoryList()) { + mHistoryList = CallHistoryList::create(); + App::getInstance()->setCallHistoryList(mHistoryList); + } + mHistoryList = App::getInstance()->getCallHistoryList(); connect(mHistoryList.get(), &CallHistoryList::listAboutToBeReset, this, &CallHistoryProxy::listAboutToBeReset); setSourceModels(new SortFilterList(mHistoryList.get(), Qt::DescendingOrder)); connect(App::getInstance(), &App::currentDateChanged, this, [this] { emit mHistoryList->lUpdate(); }); diff --git a/Linphone/data/languages/de.ts b/Linphone/data/languages/de.ts index bbb1fca21..467a7379f 100644 --- a/Linphone/data/languages/de.ts +++ b/Linphone/data/languages/de.ts @@ -735,80 +735,80 @@ nicht erreichbar - + application_description "A free and open source SIP video-phone." Ein kostenloses Open-Source SIP Video-Telefon. - + command_line_arg_order "Send an order to the application towards a command line" Kommandozeilen-Befehl an die Anwendung schicken - + command_line_option_show_help Zeige Hilfe - + command_line_option_show_app_version App-Version anzeigen - + command_line_option_config_to_fetch "Specify the linphone configuration file to be fetched. It will be merged with the current configuration." Abzurufende Linphone-Konfigurationsdatei angeben. Sie wird mit der aktuellen Konfiguration zusammengeführt. - + command_line_option_config_to_fetch_arg "URL, path or file" URL, Pfad oder Datei - + command_line_option_minimized Minimieren - + command_line_option_log_to_stdout Debug-Informationen auf der Standardausgabe ausgeben - + command_line_option_print_app_logs_only "Print only logs from the application" Nur Anwendungs-Logs ausgeben - + hide_action "Cacher" "Afficher" Ausblenden - + show_action Zeigen - + quit_action "Quitter" Beenden - + check_for_update Check for update Auf Updates prüfen - + mark_all_read_action Alle als gelesen markieren @@ -854,76 +854,76 @@ CallCore - + call_record_end_message "Enregistrement terminé" Aufnahme beendet - + call_record_saved_in_file_message "L'appel a été enregistré dans le fichier : %1" Die Aufnahme wurde in der folgenden Datei gespeichert: %1 - - + + call_stats_codec_label "Codec: %1 / %2 kHz" Codec: %1 / %2 kHz - - + + call_stats_bandwidth_label "Bande passante : %1 %2 kbits/s %3 %4 kbits/s" Bandbreite: %1 %2 kbits/s %3 %4 kbits/s - - + + call_stats_loss_rate_label "Taux de perte: %1% %2%" Verlustquote: %1% %2% - + call_stats_jitter_buffer_label "Tampon de gigue: %1 ms" Jitter-Puffer: %1 ms - + call_stats_resolution_label "Définition vidéo : %1 %2 %3 %4" Videoauflösung: %1 %2 %3 %4 - + call_stats_fps_label "FPS : %1 %2 %3 %4" FPS : %1 %2 %3 %4 - + media_encryption_dtls DTLS DTLS - + media_encryption_none None Nichts - + media_encryption_srtp SRTP SRTP - + media_encryption_post_quantum "ZRTP - Post quantique" Post-quantum ZRTP @@ -1026,7 +1026,7 @@ CallHistoryListView - + call_name_accessible_button Call %1 Anruf %1 @@ -1547,7 +1547,7 @@ - + information_popup_error_title Fehler @@ -1558,218 +1558,218 @@ Weiterleitung fehlgeschlagen - + conference_error_empty_uri "La conférence n'a pas pu démarrer en raison d'une erreur d'uri." Die Besprechung konnte aufgrund eines URI-Fehlers nicht gestartet werden. - + call_close_window_dialog_title "Terminer tous les appels en cours ?" Alle laufenden Anrufe beenden? - + call_close_window_dialog_message "La fenêtre est sur le point d'être fermée. Cela terminera tous les appels en cours." Das Fenster wird gleich geschlossen. Dies beendet alle laufenden Anrufe. - + call_can_be_trusted_toast "Appareil authentifié" Gerät vertrauenswürdig - + call_dir %1 Anruf - + call_ended Appel terminé Anruf beendet - + conference_paused Meeting paused Besprechung pausiert - + call_paused Call paused Anruf pausiert - - + + call_srtp_point_to_point_encrypted Appel chiffré de point à point Punkt-zu-Punkt verschlüsselter Anruf - + call_zrtp_sas_validation_required Vérification nécessaire Validierung erforderlich - + call_zrtp_end_to_end_encrypted Appel chiffré de bout en bout Ende-zu-Ende verschlüsselter Anruf - + call_not_encrypted "Appel non chiffré" Unverschlüsselter Anruf - - + + call_waiting_for_encryption_info Waiting for encryption Warten auf Verschlüsselung - + call_paused_by_remote Call paused by remote Anruf vom Gegenüber pausiert - + conference_user_is_recording "You are recording the meeting" Sie nehmen die Besprechung auf - + call_user_is_recording "You are recording the call" Sie nehmen den Anruf auf - + conference_remote_is_recording "Someone is recording the meeting" Jemand nimmt die Besprechung auf - + call_remote_recording "%1 is recording the call" %1 nimmt den Anruf auf - + call_stop_recording "Stop recording" Aufnahme stoppen - + add Hinzufügen - + call_transfer_current_call_title "Transférer %1 à…" %1 weiterleiten an… - - + + call_transfer_confirm_dialog_tittle "Confirmer le transfert" Weiterleitung bestätigen - - + + call_transfer_confirm_dialog_message "Vous allez transférer %1 à %2." Sie werden %1 an %2 weiterleiten. - + call_action_start_new_call "Nouvel appel" Neuen Anruf starten - - + + call_action_show_dialer "Pavé numérique" Wähltastatur - + call_action_change_layout "Modifier la disposition" Layout ändern - + call_action_go_to_calls_list "Liste d'appel" Anrufliste - + Merger tous les appels call_action_merge_calls Alle Anrufe zusammenführen - - + + call_action_go_to_settings "Paramètres" Einstellungen - + conference_action_screen_sharing "Partage de votre écran" Bildschirm teilen - + conference_share_link_title Partager le lien de la réunion Besprechungs-Link teilen - + copied Copié Kopiert - + information_popup_meeting_address_copied_to_clipboard Le lien de la réunion a été copié dans le presse-papier Der Besprechungs-Link wurde in die Zwischenablage kopiert - - - + + + conference_participants_list_title "Participants (%1)" Teilnehmer (%1) - - + + group_call_participant_selected %1 ausgewählte Teilnehmer @@ -1777,194 +1777,194 @@ - + meeting_schedule_add_participants_title Teilnehmer hinzufügen - + call_encryption_title Chiffrement Verschlüsselung - + open_statistic_panel_accessible_name Statistiken öffnen - + conference_user_is_sharing_screen "You are sharing your screen" Sie teilen Ihren Bildschirm - + call_stop_screen_sharing "Stop sharing" Stopp - + stop_recording_accessible_name Stop recording Aufnahme stoppen - + stop_screen_sharing_accessible_name "Stop screen sharing" Bildschirmübertragung beenden - + call_stats_title Statistiques Statistiken - - + + call_action_end_call "Terminer l'appel" Anruf beenden - - + + call_action_resume_call "Reprendre l'appel" Anruf fortsetzen - - + + call_action_pause_call "Mettre l'appel en pause" Anruf pausieren - - + + call_action_transfer_call "Transférer l'appel" Anruf weiterleiten - - + + call_action_start_new_call_hint "Initier un nouvel appel" Neuen Anruf starten - - + + call_display_call_list_hint "Afficher la liste d'appels" Anrufliste anzeigen - - + + call_deactivate_video_hint "Désactiver la vidéo" "Activer la vidéo" Video deaktivieren - - + + call_activate_video_hint Video aktivieren - - + + call_activate_microphone "Activer le micro" Mikrofon aktivieren - - + + call_deactivate_microphone "Désactiver le micro" Mikrofon stummschalten - - + + call_share_screen_hint Partager l'écran… Bildschirm teilen… - - + + call_open_chat_hint Open chat… Chat öffnen… - - + + call_rise_hand_hint "Lever la main" Hand heben - - + + call_send_reaction_hint "Envoyer une réaction" Reaktion senden - - + + call_manage_participants_hint "Gérer les participants" Teilnehmer verwalten - - + + call_more_options_hint "Plus d'options…" Weitere Optionen… - + call_action_change_conference_layout "Modifier la disposition" Layout ändern - + call_action_full_screen "Mode Plein écran" Vollbildmodus - + call_action_stop_recording "Terminer l'enregistrement" Aufnahme beenden - + call_action_record "Enregistrer l'appel" Anruf aufnehmen - + call_activate_speaker_hint "Activer le son" Lautsprecher aktivieren - + call_deactivate_speaker_hint "Désactiver le son" Lautsprecher stummschalten @@ -2136,54 +2136,54 @@ Entwurf: %1 - + chat_room_delete "Delete" Löschen - + chat_room_mute Stummschalten - + chat_room_unmute "Mute" Stummschaltung aufheben - + chat_room_mark_as_read "Mark as read" Als gelesen markieren - + chat_room_leave "leave" Verlassen - + chat_list_leave_chat_popup_title leave the conversation ? Chat verlassen? - + chat_list_leave_chat_popup_message You will not be able to send or receive messages in this conversation anymore. Do You want to continue ? „Sie können in diesem Chat keine Nachrichten mehr senden oder empfangen. Möchten Sie fortfahren? - + chat_list_delete_chat_popup_title Delete the conversation ? Chat löschen? - + chat_list_delete_chat_popup_message This conversation and all its messages will be deleted. Do You want to continue ? Dieser Chat und alle seine Nachrichten werden gelöscht. Möchten Sie fortfahren? @@ -3573,12 +3573,12 @@ Stellen Sie sicher, dass Sie keine sensiblen Informationen teilen! CoreModel - + info_popup_error_title Fehler - + fetching_config_failed_error_message "Remote provisioning cannot be retrieved" Die externe Bereitstellung kann nicht abgerufen werden @@ -4569,27 +4569,26 @@ Ablauf: %1 Fehler bei der Erstellung - + assistant_register_success_title "Compte créé" Konto erstellt - + assistant_register_success_message "Le compte a été créé. Vous pouvez maintenant vous connecter" Das Konto wurde erstellt. Sie können sich jetzt anmelden. - + assistant_register_error_code "Erreur dans le code de validation" Fehler im Bestätigungscode - information_popup_error_title - Fehler + Fehler @@ -4642,19 +4641,19 @@ Ablauf: %1 MeetingListView - + meeting_info_cancelled "Réunion annulée" Besprechung abgesagt - + meetings_list_no_meeting_for_today "Aucune réunion aujourd'hui" Heute keine Besprechungen - + meeting_info_delete "Supprimer la réunion" Besprechung löschen @@ -5219,13 +5218,13 @@ Ablauf: %1 PhoneNumberInput - + prefix_phone_number_accessible_name %1 prefix %1-Präfix - + number_phone_number_accessible_name %1 number %1-Nummer @@ -5430,37 +5429,37 @@ Ablauf: %1 RegisterCheckingPage - + email "email" Email - + phone_number "numéro de téléphone" Telefonnummer - + confirm_register_title "Inscription | Confirmer votre %1" Registrieren | %1 bestätigen - + assistant_account_creation_confirmation_explanation Nous vous avons envoyé un code de vérification sur votre %1 %2<br> Merci de le saisir ci-dessous Wir haben Ihnen einen Bestätigungscode an Ihr %1 %2<br> geschickt. Bitte geben Sie diesen unten ein. - + assistant_account_creation_confirmation_did_not_receive_code "Vous n'avez pas reçu le code ?" Code nicht erhalten? - + assistant_account_creation_confirmation_resend_code "Renvoyer un code" Code erneut senden @@ -5501,49 +5500,49 @@ Ablauf: %1 Mit E-Mail registrieren - - + + username Benutzername - - - - - + + + + + mandatory_field_accessible_name "%1 mandatory" %1 ist verpflichtend - + domain Domäne - - - + + + phone_number "Numéro de téléphone" Telefonnummer - - + + email Email - - + + password Passwort - - + + assistant_account_register_password_confirmation "Confirmation mot de passe" Passwort bestätigen @@ -5567,37 +5566,37 @@ Ablauf: %1 Datenschutzrichtlinie - + assistant_account_create "Créer" Erstellen - + assistant_account_create_missing_username_error "Veuillez entrer un nom d'utilisateur" Bitte Benutzernamen eingeben - + assistant_account_create_missing_password_error "Veuillez entrer un mot de passe" Bitte Passwort eingeben - + assistant_account_create_confirm_password_error "Les mots de passe sont différents" Die Passwörter stimmen nicht überein - + assistant_account_create_missing_number_error "Veuillez entrer un numéro de téléphone" Bitte Telefonnummer eingeben - + assistant_account_create_missing_email_error "Veuillez entrer un email" Bitte E-Mail eingeben @@ -5793,13 +5792,13 @@ Um sie in einem kommerziellen Projekt zu aktivieren, kontaktieren Sie uns bitte. SearchBar - + open_dialer_acccessibility_label "Open dialer" Wähltastatur öffnen - + clear_text_input_acccessibility_label "Clear text input" Texteingabe löschen @@ -6088,7 +6087,7 @@ Um sie in einem kommerziellen Projekt zu aktivieren, kontaktieren Sie uns bitte. Utils - + nMinute %1 Minute @@ -6096,7 +6095,7 @@ Um sie in einem kommerziellen Projekt zu aktivieren, kontaktieren Sie uns bitte. - + nHour %1 Stunde @@ -6104,8 +6103,8 @@ Um sie in einem kommerziellen Projekt zu aktivieren, kontaktieren Sie uns bitte. - - + + nDay %1 Tag @@ -6113,7 +6112,7 @@ Um sie in einem kommerziellen Projekt zu aktivieren, kontaktieren Sie uns bitte. - + nWeek %1 Woche @@ -6121,7 +6120,7 @@ Um sie in einem kommerziellen Projekt zu aktivieren, kontaktieren Sie uns bitte. - + nSeconds %1 Sekunde @@ -6137,7 +6136,7 @@ Um sie in einem kommerziellen Projekt zu aktivieren, kontaktieren Sie uns bitte. - + information_popup_error_title Failed to create 1-1 conversation with %1 ! Fehler @@ -6217,103 +6216,103 @@ Um sie in einem kommerziellen Projekt zu aktivieren, kontaktieren Sie uns bitte. ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 - + information_popup_chatroom_creation_error_message 1-zu-1-Konversation mit %1 konnte nicht erstellt werden! - + contact_presence_status_available Verfügbar - + contact_presence_status_away Abwesend - + contact_presence_status_busy Beschäftigt - + contact_presence_status_do_not_disturb Nicht stören - + contact_presence_status_offline Offline - + recorder_error Error with the recorder Fehler mit der Aufzeichnung - - - + + + chat_error Fehler im Chat - + chat_message_forward_error Cannot forward an invalid message Eine ungültige Nachricht kann nicht weitergeleitet werden - - - - - - + + + + + + info_popup_error_title Error Fehler - + info_popup_forward_message_error Could not forward message : %1 Nachricht konnte nicht weitergeleitet werden: %1 - + info_popup_send_forward_message_error_message Failed to create forward message Weiterleitungsnachricht konnte nicht erstellt werden - + chat_message_reply_error Cannot reply to invalid message Auf eine ungültige Nachricht kann nicht geantwortet werden - + info_popup_reply_message_error Could not send reply message : %1 Antwort konnte nicht gesendet werden: %1 - + info_popup_send_reply_message_error_message Failed to create reply message Antwort konnte nicht erstellt werden - + info_popup_send_voice_message_error_message Could not send voice message : %1 Sprachnachricht konnte nicht gesendet werden: %1 - + info_popup_send_voice_message_sending_error_message Failed to create message from record Nachricht aus der Aufnahme konnte nicht erstellt werden diff --git a/Linphone/data/languages/en.ts b/Linphone/data/languages/en.ts index a42dbb93c..6a4a9e28e 100644 --- a/Linphone/data/languages/en.ts +++ b/Linphone/data/languages/en.ts @@ -716,80 +716,80 @@ not reachable - + application_description "A free and open source SIP video-phone." A free and open source SIP video-phone. - + command_line_arg_order "Send an order to the application towards a command line" Send an order to the application towards a command line - + command_line_option_show_help Show this help - + command_line_option_show_app_version Show app version - + command_line_option_config_to_fetch "Specify the linphone configuration file to be fetched. It will be merged with the current configuration." Specify the linphone configuration file to be fetched. It will be merged with the current configuration. - + command_line_option_config_to_fetch_arg "URL, path or file" URL, path or file - + command_line_option_minimized Minimize - + command_line_option_log_to_stdout Log to stdout some debug information while running - + command_line_option_print_app_logs_only "Print only logs from the application" Print only logs from the application - + hide_action "Cacher" "Afficher" Hide - + show_action Show - + quit_action "Quitter" Quit - + check_for_update Check for update Check for update - + mark_all_read_action Marquer tout comme lu @@ -835,76 +835,76 @@ CallCore - + call_record_end_message "Enregistrement terminé" Recording ended - + call_record_saved_in_file_message "L'appel a été enregistré dans le fichier : %1" Recording has been saved in file : %1 - - + + call_stats_codec_label "Codec: %1 / %2 kHz" Codec: %1 / %2 kHz - - + + call_stats_bandwidth_label "Bande passante : %1 %2 kbits/s %3 %4 kbits/s" Bandwidth : %1 %2 kbits/s %3 %4 kbits/s - - + + call_stats_loss_rate_label "Taux de perte: %1% %2%" Loss rate: %1% %2% - + call_stats_jitter_buffer_label "Tampon de gigue: %1 ms" Jitter buffer : %1 ms - + call_stats_resolution_label "Définition vidéo : %1 %2 %3 %4" Video resolution: %1 %2 %3 %4 - + call_stats_fps_label "FPS : %1 %2 %3 %4" FPS : %1 %2 %3 %4 - + media_encryption_dtls DTLS DTLS - + media_encryption_none None None - + media_encryption_srtp SRTP SRTP - + media_encryption_post_quantum "ZRTP - Post quantique" Post quantum ZRTP @@ -1007,7 +1007,7 @@ CallHistoryListView - + call_name_accessible_button Call %1 Call %1 @@ -1510,7 +1510,7 @@ - + information_popup_error_title Error @@ -1521,218 +1521,218 @@ Transfer failed - + conference_error_empty_uri "La conférence n'a pas pu démarrer en raison d'une erreur d'uri." Meeting could start due to URI error. - + call_close_window_dialog_title "Terminer tous les appels en cours ?" End all current calls ? - + call_close_window_dialog_message "La fenêtre est sur le point d'être fermée. Cela terminera tous les appels en cours." The window is about to be closed. This will end all current calls. - + call_can_be_trusted_toast "Appareil authentifié" Device trusted - + call_dir %1 call - + call_ended Appel terminé Call ended - + conference_paused Meeting paused Meeting paused - + call_paused Call paused Call paused - - + + call_srtp_point_to_point_encrypted Appel chiffré de point à point Point-to-point encrypted call - + call_zrtp_sas_validation_required Vérification nécessaire Validation required - + call_zrtp_end_to_end_encrypted Appel chiffré de bout en bout End-to-end encrypted call - + call_not_encrypted "Appel non chiffré" Unencrypted call - - + + call_waiting_for_encryption_info Waiting for encryption Waiting for encryption - + call_paused_by_remote Call paused by remote Call paused by remote - + conference_user_is_recording "You are recording the meeting" You are recording the meeting - + call_user_is_recording "You are recording the call" You are recording the call - + conference_remote_is_recording "Someone is recording the meeting" Someone is recording the meeting - + call_remote_recording "%1 is recording the call" %1 records the call - + call_stop_recording "Stop recording" Stop recording - + add Add - + call_transfer_current_call_title "Transférer %1 à…" Transfer %1 to… - - + + call_transfer_confirm_dialog_tittle "Confirmer le transfert" Confirm transfer - - + + call_transfer_confirm_dialog_message "Vous allez transférer %1 à %2." You are going to transfer %1 to %2. - + call_action_start_new_call "Nouvel appel" New call - - + + call_action_show_dialer "Pavé numérique" Dialer - + call_action_change_layout "Modifier la disposition" Change layout - + call_action_go_to_calls_list "Liste d'appel" Call list - + Merger tous les appels call_action_merge_calls Merge all calls - - + + call_action_go_to_settings "Paramètres" Settings - + conference_action_screen_sharing "Partage de votre écran" Share your screen - + conference_share_link_title Partager le lien de la réunion Share meeting link - + copied Copié Copied - + information_popup_meeting_address_copied_to_clipboard Le lien de la réunion a été copié dans le presse-papier Meeting link has been copied to the clipboard - - - + + + conference_participants_list_title "Participants (%1)" Participants (%1) - - + + group_call_participant_selected %1 selected participant @@ -1740,194 +1740,194 @@ - + meeting_schedule_add_participants_title Add participants - + call_encryption_title Chiffrement Encryption - + open_statistic_panel_accessible_name Open statistic panel - + conference_user_is_sharing_screen "You are sharing your screen" You are sharing your screen - + call_stop_screen_sharing "Stop sharing" Stop - + stop_recording_accessible_name Stop recording Stop recording - + stop_screen_sharing_accessible_name "Stop screen sharing" Stop screen sharing - + call_stats_title Statistiques Statistics - - + + call_action_end_call "Terminer l'appel" End call - - + + call_action_resume_call "Reprendre l'appel" Resume call - - + + call_action_pause_call "Mettre l'appel en pause" Pause call - - + + call_action_transfer_call "Transférer l'appel" Transfer call - - + + call_action_start_new_call_hint "Initier un nouvel appel" Start new call - - + + call_display_call_list_hint "Afficher la liste d'appels" View call list - - + + call_deactivate_video_hint "Désactiver la vidéo" "Activer la vidéo" Turn off video - - + + call_activate_video_hint Enable video - - + + call_activate_microphone "Activer le micro" Activate microphone - - + + call_deactivate_microphone "Désactiver le micro" Mute microphone - - + + call_share_screen_hint Partager l'écran… Share screen… - - + + call_open_chat_hint Open chat… Open conversation… - - + + call_rise_hand_hint "Lever la main" Rise hand - - + + call_send_reaction_hint "Envoyer une réaction" Send reaction - - + + call_manage_participants_hint "Gérer les participants" Manage participants - - + + call_more_options_hint "Plus d'options…" More options… - + call_action_change_conference_layout "Modifier la disposition" Change layout - + call_action_full_screen "Mode Plein écran" Full screen mode - + call_action_stop_recording "Terminer l'enregistrement" End recording - + call_action_record "Enregistrer l'appel" Record call - + call_activate_speaker_hint "Activer le son" Activate speaker - + call_deactivate_speaker_hint "Désactiver le son" Mute speaker @@ -2099,54 +2099,54 @@ Draft : %1 - + chat_room_delete "Delete" Delete - + chat_room_mute Mute - + chat_room_unmute "Mute" Unmute - + chat_room_mark_as_read "Mark as read" Mark as read - + chat_room_leave "leave" Leave - + chat_list_leave_chat_popup_title leave the conversation ? Leave the conversation ? - + chat_list_leave_chat_popup_message You will not be able to send or receive messages in this conversation anymore. Do You want to continue ? You will not be able to send or receive messages in this conversation anymore. Do You want to continue ? - + chat_list_delete_chat_popup_title Delete the conversation ? Delete the conversation ? - + chat_list_delete_chat_popup_message This conversation and all its messages will be deleted. Do You want to continue ? This conversation and all its messages will be deleted. Do You want to continue ? @@ -3476,12 +3476,12 @@ Only your correspondent can decrypt them. CoreModel - + info_popup_error_title Error - + fetching_config_failed_error_message "Remote provisioning cannot be retrieved" Remote provisioning cannot be retrieved @@ -4467,27 +4467,26 @@ Expiration : %1 Error while creating - + assistant_register_success_title "Compte créé" Account created - + assistant_register_success_message "Le compte a été créé. Vous pouvez maintenant vous connecter" The account has been created. You can now log in. - + assistant_register_error_code "Erreur dans le code de validation" Error in validation code - information_popup_error_title - Error + Error @@ -4540,19 +4539,19 @@ Expiration : %1 MeetingListView - + meeting_info_cancelled "Réunion annulée" Meeting canceled - + meetings_list_no_meeting_for_today "Aucune réunion aujourd'hui" No meeting for today - + meeting_info_delete "Supprimer la réunion" Delete meeting @@ -5108,13 +5107,13 @@ Expiration : %1 PhoneNumberInput - + prefix_phone_number_accessible_name %1 prefix %1 prefix - + number_phone_number_accessible_name %1 number %1 number @@ -5307,37 +5306,37 @@ Expiration : %1 RegisterCheckingPage - + email "email" email - + phone_number "numéro de téléphone" phone number - + confirm_register_title "Inscription | Confirmer votre %1" Register | Confirm your %1 - + assistant_account_creation_confirmation_explanation Nous vous avons envoyé un code de vérification sur votre %1 %2<br> Merci de le saisir ci-dessous We have sent you a verification code to your %1 %2<br> Please enter it below - + assistant_account_creation_confirmation_did_not_receive_code "Vous n'avez pas reçu le code ?" Didn't receive the code? - + assistant_account_creation_confirmation_resend_code "Renvoyer un code" Resend code @@ -5378,49 +5377,49 @@ Expiration : %1 Register with email - - + + username Username - - - - - + + + + + mandatory_field_accessible_name "%1 mandatory" %1 mandatory - + domain Domain - - - + + + phone_number "Numéro de téléphone" Phone number - - + + email Email - - + + password Password - - + + assistant_account_register_password_confirmation "Confirmation mot de passe" Password confirmation @@ -5444,37 +5443,37 @@ Expiration : %1 privacy policy - + assistant_account_create "Créer" Create - + assistant_account_create_missing_username_error "Veuillez entrer un nom d'utilisateur" Please enter a username - + assistant_account_create_missing_password_error "Veuillez entrer un mot de passe" Please enter a password - + assistant_account_create_confirm_password_error "Les mots de passe sont différents" Passwords do not match - + assistant_account_create_missing_number_error "Veuillez entrer un numéro de téléphone" Please enter a phone number - + assistant_account_create_missing_email_error "Veuillez entrer un email" Please enter an email @@ -5670,13 +5669,13 @@ To enable them in a commercial project, please contact us. SearchBar - + open_dialer_acccessibility_label "Open dialer" Open dialer - + clear_text_input_acccessibility_label "Clear text input" Clear text input @@ -5953,7 +5952,7 @@ To enable them in a commercial project, please contact us. Utils - + nSeconds %1 second @@ -5961,7 +5960,7 @@ To enable them in a commercial project, please contact us. - + nMinute %1 minute @@ -5969,43 +5968,43 @@ To enable them in a commercial project, please contact us. - + chat_message_forward_error Cannot forward an invalid message Cannot forward an invalid message - + info_popup_forward_message_error Could not forward message : %1 Could not forward message : %1 - + info_popup_send_forward_message_error_message Failed to create forward message Failed to create forward message - + chat_message_reply_error Cannot reply to invalid message Cannot reply to invalid message - + info_popup_reply_message_error Could not send reply message : %1 Could not send reply message : %1 - + info_popup_send_reply_message_error_message Failed to create reply message Failed to create reply message - + nHour %1 hour @@ -6013,8 +6012,8 @@ To enable them in a commercial project, please contact us. - - + + nDay %1 day @@ -6022,7 +6021,7 @@ To enable them in a commercial project, please contact us. - + nWeek %1 week @@ -6030,27 +6029,27 @@ To enable them in a commercial project, please contact us. - + contact_presence_status_available Available - + contact_presence_status_busy Busy - + contact_presence_status_do_not_disturb Do not disturb - + contact_presence_status_offline Offline - + contact_presence_status_away Idle/Away @@ -6063,7 +6062,7 @@ To enable them in a commercial project, please contact us. - + information_popup_error_title Failed to create 1-1 conversation with %1 ! Error @@ -6143,42 +6142,42 @@ To enable them in a commercial project, please contact us. ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 - + information_popup_chatroom_creation_error_message Failed to create 1-1 conversation with %1 ! - + recorder_error Error with the recorder Error with the recorder - - - + + + chat_error Error in the chat - - - - - - + + + + + + info_popup_error_title Error Error - + info_popup_send_voice_message_error_message Could not send voice message : %1 Could not send voice message : %1 - + info_popup_send_voice_message_sending_error_message Failed to create message from record Failed to create message from record diff --git a/Linphone/data/languages/fr.ts b/Linphone/data/languages/fr.ts index 3571ba068..b3e0ddab9 100644 --- a/Linphone/data/languages/fr.ts +++ b/Linphone/data/languages/fr.ts @@ -711,80 +711,80 @@ indisponible - + application_description "A free and open source SIP video-phone." A free and open source SIP video-phone. - + command_line_arg_order "Send an order to the application towards a command line" Send an order to the application towards a command line - + command_line_option_show_help Show this help - + command_line_option_show_app_version Afficher la version de l'application - + command_line_option_config_to_fetch "Specify the linphone configuration file to be fetched. It will be merged with the current configuration." Specify the linphone configuration file to be fetched. It will be merged with the current configuration. - + command_line_option_config_to_fetch_arg "URL, path or file" URL, path or file - + command_line_option_minimized Minimiser - + command_line_option_log_to_stdout Log to stdout some debug information while running - + command_line_option_print_app_logs_only "Print only logs from the application" Print only logs from the application - + hide_action "Cacher" "Afficher" Cacher - + show_action Afficher - + quit_action "Quitter" Quitter - + check_for_update Check for update Rechercher une mise à jour - + mark_all_read_action Marquer tout comme lu @@ -830,76 +830,76 @@ CallCore - + call_record_end_message "Enregistrement terminé" Enregistrement terminé - + call_record_saved_in_file_message "L'appel a été enregistré dans le fichier : %1" L'appel a été enregistré dans le fichier : %1 - - + + call_stats_codec_label "Codec: %1 / %2 kHz" Codec: %1 / %2 kHz - - + + call_stats_bandwidth_label "Bande passante : %1 %2 kbits/s %3 %4 kbits/s" Bande passante : %1 %2 kbits/s %3 %4 kbits/s - - + + call_stats_loss_rate_label "Taux de perte: %1% %2%" Taux de perte: %1% %2% - + call_stats_jitter_buffer_label "Tampon de gigue: %1 ms" Tampon de gigue: %1 ms - + call_stats_resolution_label "Définition vidéo : %1 %2 %3 %4" Définition vidéo : %1 %2 %3 %4 - + call_stats_fps_label "FPS : %1 %2 %3 %4" FPS : %1 %2 %3 %4 - + media_encryption_dtls DTLS DTLS - + media_encryption_none None None - + media_encryption_srtp SRTP SRTP - + media_encryption_post_quantum "ZRTP - Post quantique" ZRTP - Post quantique @@ -907,36 +907,16 @@ CallForwardSettingsLayout - - settings_call_forward_activation_success - Transfert d'appel activé vers : %1 - settings_call_forward_to_voicemail Boîte vocale - - settings_call_forward_deactivation_success - Transfert d'appel désactivé - - - settings_call_forward_address_timeout - Impossible d'établir le transfert d'appel, la requête a expiré - settings_call_forward_address_cannot_be_empty Une adresse ou un numéro de téléphone est nécessaire - - settings_call_forward_address_progress_disabling - Désactiver le transfert d'appel - - - settings_call_forward_address_progress_enabling - Activer le transfert d'appel pour : - settings_call_forward_activate_title @@ -1002,7 +982,7 @@ CallHistoryListView - + call_name_accessible_button Call %1 Appeler %1 @@ -1505,7 +1485,7 @@ - + information_popup_error_title Erreur @@ -1516,218 +1496,218 @@ Le transfert d'appel a échoué - + conference_error_empty_uri "La conférence n'a pas pu démarrer en raison d'une erreur d'uri." La conférence n'a pas pu démarrer en raison d'une erreur d'uri. - + call_close_window_dialog_title "Terminer tous les appels en cours ?" Terminer tous les appels en cours ? - + call_close_window_dialog_message "La fenêtre est sur le point d'être fermée. Cela terminera tous les appels en cours." La fenêtre est sur le point d'être fermée. Cela terminera tous les appels en cours. - + call_can_be_trusted_toast "Appareil authentifié" Appareil authentifié - + call_dir Appel %1 - + call_ended Appel terminé Appel terminé - + conference_paused Meeting paused Réunion mise en pause - + call_paused Call paused Appel mis en pause - - + + call_srtp_point_to_point_encrypted Appel chiffré de point à point Appel chiffré de point à point - + call_zrtp_sas_validation_required Vérification nécessaire Vérification nécessaire - + call_zrtp_end_to_end_encrypted Appel chiffré de bout en bout Appel chiffré de bout en bout - + call_not_encrypted "Appel non chiffré" Appel non chiffré - - + + call_waiting_for_encryption_info Waiting for encryption En attente de chiffrement - + call_paused_by_remote Call paused by remote Appel mis en pause par votre correspondant - + conference_user_is_recording "You are recording the meeting" Vous enregistrez la réunion - + call_user_is_recording "You are recording the call" Vous enregistrez l'appel - + conference_remote_is_recording "Someone is recording the meeting" Un participant enregistre la réunion - + call_remote_recording "%1 is recording the call" %1 enregistre l'appel - + call_stop_recording "Stop recording" Arrêter l'enregistrement - + add Ajouter - + call_transfer_current_call_title "Transférer %1 à…" Transférer %1 à… - - + + call_transfer_confirm_dialog_tittle "Confirmer le transfert" Confirmer le transfert - - + + call_transfer_confirm_dialog_message "Vous allez transférer %1 à %2." Vous allez transférer %1 à %2. - + call_action_start_new_call "Nouvel appel" Nouvel appel - - + + call_action_show_dialer "Pavé numérique" Pavé numérique - + call_action_change_layout "Modifier la disposition" Modifier la disposition - + call_action_go_to_calls_list "Liste d'appel" Liste d'appel - + Merger tous les appels call_action_merge_calls Merger tous les appels - - + + call_action_go_to_settings "Paramètres" Paramètres - + conference_action_screen_sharing "Partage de votre écran" Partage de votre écran - + conference_share_link_title Partager le lien de la réunion Partager le lien de la réunion - + copied Copié Copié - + information_popup_meeting_address_copied_to_clipboard Le lien de la réunion a été copié dans le presse-papier Le lien de la réunion a été copié dans le presse-papier - - - + + + conference_participants_list_title "Participants (%1)" Participants (%1) - - + + group_call_participant_selected %1 participant sélectionné @@ -1735,194 +1715,194 @@ - + meeting_schedule_add_participants_title Ajouter des participants - + call_encryption_title Chiffrement Chiffrement - + open_statistic_panel_accessible_name Ouvrir le panneau de statistiques - + conference_user_is_sharing_screen "You are sharing your screen" Vous partagez votre écran - + call_stop_screen_sharing "Stop sharing" Arrêter le partage - + stop_recording_accessible_name Stop recording Arrêter l'enregistrement - + stop_screen_sharing_accessible_name "Stop screen sharing" Arrêter le partage d'écran - + call_stats_title Statistiques Statistiques - - + + call_action_end_call "Terminer l'appel" Terminer l'appel - - + + call_action_resume_call "Reprendre l'appel" Reprendre l'appel - - + + call_action_pause_call "Mettre l'appel en pause" Mettre l'appel en pause - - + + call_action_transfer_call "Transférer l'appel" Transférer l'appel - - + + call_action_start_new_call_hint "Initier un nouvel appel" Initier un nouvel appel - - + + call_display_call_list_hint "Afficher la liste d'appels" Afficher la liste d'appels - - + + call_deactivate_video_hint "Désactiver la vidéo" "Activer la vidéo" Désactiver la vidéo - - + + call_activate_video_hint Activer la vidéo - - + + call_activate_microphone "Activer le micro" Activer le micro - - + + call_deactivate_microphone "Désactiver le micro" Désactiver le micro - - + + call_share_screen_hint Partager l'écran… Partager l'écran… - - + + call_open_chat_hint Open chat… Ouvrir le chat… - - + + call_rise_hand_hint "Lever la main" Lever la main - - + + call_send_reaction_hint "Envoyer une réaction" Envoyer une réaction - - + + call_manage_participants_hint "Gérer les participants" Gérer les participants - - + + call_more_options_hint "Plus d'options…" Plus d'options… - + call_action_change_conference_layout "Modifier la disposition" Modifier la disposition - + call_action_full_screen "Mode Plein écran" Mode Plein écran - + call_action_stop_recording "Terminer l'enregistrement" Terminer l'enregistrement - + call_action_record "Enregistrer l'appel" Enregistrer l'appel - + call_activate_speaker_hint "Activer le son" Activer le son - + call_deactivate_speaker_hint "Désactiver le son" Désactiver le son @@ -2094,54 +2074,54 @@ Brouillon : %1 - + chat_room_delete "Delete" Supprimer - + chat_room_mute Mettre en sourdine - + chat_room_unmute "Mute" Enlever la sourdine - + chat_room_mark_as_read "Mark as read" Marquer comme lu - + chat_room_leave "leave" Quitter la conversation - + chat_list_leave_chat_popup_title leave the conversation ? Quitter la conversation ? - + chat_list_leave_chat_popup_message You will not be able to send or receive messages in this conversation anymore. Do You want to continue ? Vous ne pourrez plus envoyer ou recevoir de messages dans cette conversation. Souhaitez-vous continuer ? - + chat_list_delete_chat_popup_title Delete the conversation ? Supprimer la conversation ? - + chat_list_delete_chat_popup_message This conversation and all its messages will be deleted. Do You want to continue ? La conversation et tous ses messages seront supprimés. Souhaitez-vous continuer ? @@ -3471,12 +3451,12 @@ en bout. Seul votre correspondant peut les déchiffrer. CoreModel - + info_popup_error_title Erreur - + fetching_config_failed_error_message "Remote provisioning cannot be retrieved" La configuration distante n'a pas pu être récupérée @@ -4462,28 +4442,23 @@ Expiration : %1 Erreur lors de la création - + assistant_register_success_title "Compte créé" Compte créé - + assistant_register_success_message "Le compte a été créé. Vous pouvez maintenant vous connecter" Le compte a été créé. Vous pouvez maintenant vous connecter - + assistant_register_error_code "Erreur dans le code de validation" Erreur dans le code de validation - - - information_popup_error_title - Erreur - ManageParticipants @@ -4535,19 +4510,19 @@ Expiration : %1 MeetingListView - + meeting_info_cancelled "Réunion annulée" Réunion annulée - + meetings_list_no_meeting_for_today "Aucune réunion aujourd'hui" Aucune réunion aujourd'hui - + meeting_info_delete "Supprimer la réunion" Supprimer la réunion @@ -5103,13 +5078,13 @@ Expiration : %1 PhoneNumberInput - + prefix_phone_number_accessible_name %1 prefix %1 préfix - + number_phone_number_accessible_name %1 number %1 indicatif téléphonique @@ -5302,37 +5277,37 @@ Expiration : %1 RegisterCheckingPage - + email "email" email - + phone_number "numéro de téléphone" numéro de téléphone - + confirm_register_title "Inscription | Confirmer votre %1" Inscription | Confirmer votre %1 - + assistant_account_creation_confirmation_explanation Nous vous avons envoyé un code de vérification sur votre %1 %2<br> Merci de le saisir ci-dessous Nous vous avons envoyé un code de vérification sur votre %1 %2<br> Merci de le saisir ci-dessous - + assistant_account_creation_confirmation_did_not_receive_code "Vous n'avez pas reçu le code ?" Vous n'avez pas reçu le code ? - + assistant_account_creation_confirmation_resend_code "Renvoyer un code" Renvoyer un code @@ -5373,49 +5348,49 @@ Expiration : %1 S'inscrire avec un email - - + + username Nom d'utilisateur - - - - - + + + + + mandatory_field_accessible_name "%1 mandatory" %1 requit - + domain Domaine - - - + + + phone_number "Numéro de téléphone" Numéro de téléphone - - + + email Email - - + + password Mot de passe - - + + assistant_account_register_password_confirmation "Confirmation mot de passe" Confirmation mot de passe @@ -5439,37 +5414,37 @@ Expiration : %1 politique de confidentialité - + assistant_account_create "Créer" Créer - + assistant_account_create_missing_username_error "Veuillez entrer un nom d'utilisateur" Veuillez entrer un nom d'utilisateur - + assistant_account_create_missing_password_error "Veuillez entrer un mot de passe" Veuillez entrer un mot de passe - + assistant_account_create_confirm_password_error "Les mots de passe sont différents" Les mots de passe sont différents - + assistant_account_create_missing_number_error "Veuillez entrer un numéro de téléphone" Veuillez entrer un numéro de téléphone - + assistant_account_create_missing_email_error "Veuillez entrer un email" Veuillez entrer un email @@ -5665,13 +5640,13 @@ Pour les activer dans un projet commercial, merci de nous contacter. SearchBar - + open_dialer_acccessibility_label "Open dialer" Ouvrir le numéroteur - + clear_text_input_acccessibility_label "Clear text input" Supprimer le texte saisi @@ -5948,7 +5923,7 @@ Pour les activer dans un projet commercial, merci de nous contacter. Utils - + nMinute %1 minute @@ -5956,7 +5931,7 @@ Pour les activer dans un projet commercial, merci de nous contacter. - + nHour %1 heure @@ -5964,8 +5939,8 @@ Pour les activer dans un projet commercial, merci de nous contacter. - - + + nDay %1 jour @@ -5973,7 +5948,7 @@ Pour les activer dans un projet commercial, merci de nous contacter. - + nWeek %1 semaine @@ -5981,7 +5956,7 @@ Pour les activer dans un projet commercial, merci de nous contacter. - + nSeconds %1 seconde @@ -5989,27 +5964,27 @@ Pour les activer dans un projet commercial, merci de nous contacter. - + contact_presence_status_available Disponible - + contact_presence_status_busy Occupé - + contact_presence_status_do_not_disturb Ne pas déranger - + contact_presence_status_offline Hors ligne - + contact_presence_status_away Inactif/Absent @@ -6022,7 +5997,7 @@ Pour les activer dans un projet commercial, merci de nous contacter. - + information_popup_error_title Failed to create 1-1 conversation with %1 ! Erreur @@ -6102,78 +6077,78 @@ Pour les activer dans un projet commercial, merci de nous contacter.ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 - + information_popup_chatroom_creation_error_message Erreur lors de la création de la conversation avec %1 - + recorder_error Error with the recorder Erreur avec l'enregistreur - - - + + + chat_error Erreur dans le chat - + chat_message_forward_error Cannot forward an invalid message Impossible de transférer : message invalide - - - - - - + + + + + + info_popup_error_title Error Erreur - + info_popup_forward_message_error Could not forward message : %1 Impossible de transférer le message : %1 - + info_popup_send_forward_message_error_message Failed to create forward message Impossible de créer le message - + chat_message_reply_error Cannot reply to invalid message Impossible de répondre : message invalide - + info_popup_reply_message_error Could not send reply message : %1 Impossible d'envoyer la réponse : %1 - + info_popup_send_reply_message_error_message Failed to create reply message Impossible de créer le message - + info_popup_send_voice_message_error_message Could not send voice message : %1 Impossible d'envoyer le message vocal : %1 - + info_popup_send_voice_message_sending_error_message Failed to create message from record Impossible de créer le message vocal diff --git a/Linphone/model/account/AccountManager.cpp b/Linphone/model/account/AccountManager.cpp index da769e0d0..f745a04c8 100644 --- a/Linphone/model/account/AccountManager.cpp +++ b/Linphone/model/account/AccountManager.cpp @@ -357,10 +357,11 @@ void AccountManager::linkNewAccountUsingCode(const QString &code, const std::string &errorMessage, const std::shared_ptr ¶meterErrors) { if (request->getType() == linphone::AccountManagerServicesRequest::Type::LinkEmailUsingCode) { lInfo() << "[AccountManager] error linking email to account" << errorMessage; + emit linkingNewAccountWithCodeFailed(Utils::coreStringToAppString(errorMessage)); } else if (request->getType() == linphone::AccountManagerServicesRequest::Type::LinkPhoneNumberUsingCode) { lInfo() << "[AccountManager] error linking phone number to account" << errorMessage; + emit linkingNewAccountWithCodeFailed(Utils::coreStringToAppString(errorMessage)); } - emit linkingNewAccountWithCodeFailed(Utils::coreStringToAppString(errorMessage)); }); if (registerType == RegisterType::Email) mAccountManagerServicesModel->linkEmailToAccountUsingCode(sipIdentityAddress, diff --git a/Linphone/view/Control/Button/CountryIndicatorCombobox.qml b/Linphone/view/Control/Button/CountryIndicatorCombobox.qml index 5fe2c5dae..df9b03bd1 100644 --- a/Linphone/view/Control/Button/CountryIndicatorCombobox.qml +++ b/Linphone/view/Control/Button/CountryIndicatorCombobox.qml @@ -3,12 +3,18 @@ import QtQuick.Controls.Basic as Control import QtQuick.Layouts import QtQuick.Effects import Linphone +import CustomControls 1.0 import "qrc:/qt/qml/Linphone/view/Control/Tool/Helper/utils.js" as Utils Control.ComboBox { id: mainItem property string defaultCallingCode: "" property bool enableBackgroundColors: false + onKeyboardFocusChanged: console.log("keyboard focus combobox", keyboardFocus) + property bool keyboardFocus: FocusHelper.keyboardFocus + property color keyboardFocusedBorderColor: DefaultStyle.main2_900 + property real borderWidth: Utils.getSizeWithScreenRatio(1) + property real keyboardFocusedBorderWidth: Utils.getSizeWithScreenRatio(3) property string text: combobox.model.getAt(combobox.currentIndex) ? combobox.model.getAt(combobox.currentIndex).countryCallingCode : "" currentIndex: phoneNumberModel.count > 0 ? Math.max(0, phoneNumberModel.findIndexByCountryCallingCode(defaultCallingCode)) : -1 Accessible.name: mainItem.Accessible.name @@ -19,13 +25,16 @@ Control.ComboBox { anchors.fill: parent radius: Utils.getSizeWithScreenRatio(63) color: mainItem.enableBackgroundColor ? DefaultStyle.grey_100 : "transparent" - border.color: mainItem.enableBackgroundColors - ? (mainItem.errorMessage.length > 0 - ? DefaultStyle.danger_500_main - : textField.activeFocus - ? DefaultStyle.main1_500_main - : DefaultStyle.grey_200) - : "transparent" + border.color: mainItem.keyboardFocus + ? mainItem.keyboardFocusedBorderColor + : mainItem.enableBackgroundColors + ? (mainItem.errorMessage.length > 0 + ? DefaultStyle.danger_500_main + : mainItem.activeFocus || textField.activeFocus + ? DefaultStyle.main1_500_main + : DefaultStyle.grey_200) + : "transparent" + border.width: mainItem.keyboardFocus ? mainItem.keyboardFocusedBorderWidth : mainItem.borderWidth } contentItem: RowLayout { readonly property var currentItem: combobox.model.getAt(combobox.currentIndex) @@ -95,8 +104,6 @@ Control.ComboBox { maximumFlickVelocity: 1500 spacing: Utils.getSizeWithScreenRatio(10) highlight: Rectangle { - anchors.left: parent.left - anchors.right: parent.right width: listView.width height: listView.height color: DefaultStyle.main2_300 diff --git a/Linphone/view/Control/Container/FormItemLayout.qml b/Linphone/view/Control/Container/FormItemLayout.qml index fceaf1296..6997d3c53 100644 --- a/Linphone/view/Control/Container/FormItemLayout.qml +++ b/Linphone/view/Control/Container/FormItemLayout.qml @@ -12,6 +12,7 @@ FocusScope{ property string labelIndication property string tooltip: "" property bool mandatory: false + property int errorTextTopMargin: 0// property alias errorTextItem: errorText property alias errorMessage: errorText.text @@ -85,7 +86,7 @@ FocusScope{ Item { Layout.preferredHeight: childrenRect.height Layout.fillWidth: true - StackLayout { + FocusScope { id: contentItem height: childrenRect.height anchors.left: parent.left @@ -94,6 +95,7 @@ FocusScope{ TemporaryText { id: errorText anchors.top: contentItem.bottom + anchors.topMargin: mainItem.errorTextTopMargin color: DefaultStyle.danger_500_main } } diff --git a/Linphone/view/Control/Display/Call/CallHistoryListView.qml b/Linphone/view/Control/Display/Call/CallHistoryListView.qml index 4b2c1ab3b..9592d1f39 100644 --- a/Linphone/view/Control/Display/Call/CallHistoryListView.qml +++ b/Linphone/view/Control/Display/Call/CallHistoryListView.qml @@ -26,14 +26,12 @@ ListView { model: CallHistoryProxy { id: callHistoryProxy - Component.onCompleted: { - loading = true - } onListAboutToBeReset: loading = true filterText: mainItem.searchText onFilterTextChanged: maxDisplayItems = initialDisplayItems initialDisplayItems: Math.max(20, Math.round(2 * mainItem.height / Utils.getSizeWithScreenRatio(56))) displayItemsStep: 3 * initialDisplayItems / 2 + onModelAboutToBeReset: loading = true onModelReset: { mainItem.resultsReceived() } diff --git a/Linphone/view/Control/Display/Meeting/MeetingListView.qml b/Linphone/view/Control/Display/Meeting/MeetingListView.qml index 9a87bc5ec..a1b728884 100644 --- a/Linphone/view/Control/Display/Meeting/MeetingListView.qml +++ b/Linphone/view/Control/Display/Meeting/MeetingListView.qml @@ -27,6 +27,10 @@ ListView { spacing: Utils.getSizeWithScreenRatio(8) highlightFollowsCurrentItem: false + onCurrentIndexChanged: if(currentIndex === -1) { + resetSelections() + } + signal meetingDeletionRequested(ConferenceInfoGui confInfo, bool canCancel) function selectIndex(index){ @@ -53,7 +57,6 @@ ListView { moveToCurrentItem() if(currentItem) { mainItem.selectedConference = currentItem.itemGui - currentItem.forceActiveFocus() } } // Update position only if we are moving to current item and its position is changing. @@ -243,7 +246,7 @@ ListView { anchors.fill: parent anchors.rightMargin: 5 // margin to avoid clipping shadows at right radius: Utils.getSizeWithScreenRatio(10) - visible: itemDelegate.haveModel || itemDelegate.activeFocus + visible: itemDelegate.haveModel || mainItem.currentIndex === itemDelegate.index color: itemDelegate.isSelected ? DefaultStyle.main2_200 : DefaultStyle.grey_0 // mainItem.currentIndex === index ColumnLayout { anchors.fill: parent diff --git a/Linphone/view/Control/Input/DigitInput.qml b/Linphone/view/Control/Input/DigitInput.qml index 43a7ee957..93e583c5b 100644 --- a/Linphone/view/Control/Input/DigitInput.qml +++ b/Linphone/view/Control/Input/DigitInput.qml @@ -6,6 +6,7 @@ import "qrc:/qt/qml/Linphone/view/Control/Tool/Helper/utils.js" as Utils Control.TextField { id: mainItem property real inputSize: Utils.getSizeWithScreenRatio(100) + property bool isError: false color: activeFocus ? DefaultStyle.main1_500_main : DefaultStyle.main2_500_main validator: IntValidator{bottom: 0; top: 9} @@ -34,7 +35,11 @@ Control.TextField { Rectangle { id: background border.width: Utils.getSizeWithScreenRatio(1) - border.color: mainItem.activeFocus ? DefaultStyle.main1_500_main : DefaultStyle.main2_500_main + border.color: mainItem.isError + ? DefaultStyle.danger_500_main + : mainItem.activeFocus + ? DefaultStyle.main1_500_main + : DefaultStyle.main2_500_main radius: mainItem.inputSize * 0.15 width: mainItem.inputSize * 0.9 height: mainItem.inputSize diff --git a/Linphone/view/Control/Input/NumericPad.qml b/Linphone/view/Control/Input/NumericPad.qml index bbf53dc37..074c7c3cb 100644 --- a/Linphone/view/Control/Input/NumericPad.qml +++ b/Linphone/view/Control/Input/NumericPad.qml @@ -41,61 +41,65 @@ FocusScope { } } + function handleKeyPadEvent(event) { + if (event.key === Qt.Key_0) { + keypadKeyPressedAtIndex(10) + event.accepted = true + } + if (event.key === Qt.Key_1) { + keypadKeyPressedAtIndex(0) + event.accepted = true + } + if (event.key === Qt.Key_2) { + keypadKeyPressedAtIndex(1) + event.accepted = true + } + if (event.key === Qt.Key_3) { + keypadKeyPressedAtIndex(2) + event.accepted = true + } + if (event.key === Qt.Key_4) { + keypadKeyPressedAtIndex(3) + event.accepted = true + } + if (event.key === Qt.Key_5) { + keypadKeyPressedAtIndex(4) + event.accepted = true + } + if (event.key === Qt.Key_6) { + keypadKeyPressedAtIndex(5) + event.accepted = true + } + if (event.key === Qt.Key_7) { + keypadKeyPressedAtIndex(6) + event.accepted = true + } + if (event.key === Qt.Key_8) { + keypadKeyPressedAtIndex(7) + event.accepted = true + } + if (event.key === Qt.Key_9) { + keypadKeyPressedAtIndex(8) + event.accepted = true + } + if (event.key === Qt.Key_Asterisk) { + keypadKeyPressedAtIndex(9) + event.accepted = true + } + if (event.key === Qt.Key_Plus) { + mainItem.buttonPressed("+") + event.accepted = true + } + if (event.key === Qt.Key_Enter) { + mainItem.launchCall() + event.accepted = true + } + } + Keys.onPressed: (event) => { event.accepted = false if (event.modifiers & Qt.KeypadModifier) { - if (event.key === Qt.Key_0) { - keypadKeyPressedAtIndex(10) - event.accepted = true - } - if (event.key === Qt.Key_1) { - keypadKeyPressedAtIndex(0) - event.accepted = true - } - if (event.key === Qt.Key_2) { - keypadKeyPressedAtIndex(1) - event.accepted = true - } - if (event.key === Qt.Key_3) { - keypadKeyPressedAtIndex(2) - event.accepted = true - } - if (event.key === Qt.Key_4) { - keypadKeyPressedAtIndex(3) - event.accepted = true - } - if (event.key === Qt.Key_5) { - keypadKeyPressedAtIndex(4) - event.accepted = true - } - if (event.key === Qt.Key_6) { - keypadKeyPressedAtIndex(5) - event.accepted = true - } - if (event.key === Qt.Key_7) { - keypadKeyPressedAtIndex(6) - event.accepted = true - } - if (event.key === Qt.Key_8) { - keypadKeyPressedAtIndex(7) - event.accepted = true - } - if (event.key === Qt.Key_9) { - keypadKeyPressedAtIndex(8) - event.accepted = true - } - if (event.key === Qt.Key_Asterisk) { - keypadKeyPressedAtIndex(9) - event.accepted = true - } - if (event.key === Qt.Key_Plus) { - mainItem.buttonPressed("+") - event.accepted = true - } - if (event.key === Qt.Key_Enter) { - mainItem.launchCall() - event.accepted = true - } + handleKeyPadEvent(event) } if (event.key === Qt.Key_Backspace) { mainItem.wipe() diff --git a/Linphone/view/Control/Input/PhoneNumberInput.qml b/Linphone/view/Control/Input/PhoneNumberInput.qml index 25a883e5f..72be8086e 100644 --- a/Linphone/view/Control/Input/PhoneNumberInput.qml +++ b/Linphone/view/Control/Input/PhoneNumberInput.qml @@ -18,7 +18,10 @@ ColumnLayout { readonly property string phoneNumber: textField.text readonly property string countryCode: combobox.text property string defaultCallingCode - property bool keyboardFocus: FocusHelper.keyboardFocus + property bool keyboardFocus: combobox.keyboardFocus || textField.keyboardFocus + property color keyboardFocusedBorderColor: DefaultStyle.main2_900 + property real borderWidth: Utils.getSizeWithScreenRatio(1) + property real keyboardFocusedBorderWidth: Utils.getSizeWithScreenRatio(3) spacing: Utils.getSizeWithScreenRatio(5) @@ -26,7 +29,7 @@ ColumnLayout { visible: label.length > 0 verticalAlignment: Text.AlignVCenter text: mainItem.label + (mainItem.mandatory ? "*" : "") - color: (combobox.hasActiveFocus || textField.hasActiveFocus) ? DefaultStyle.main1_500_main : DefaultStyle.main2_600 + color: (combobox.activeFocus || textField.activeFocus) ? DefaultStyle.main1_500_main : DefaultStyle.main2_600 font { pixelSize: Typography.p2.pixelSize weight: Typography.p2.weight @@ -36,25 +39,25 @@ ColumnLayout { Control.Control { Layout.preferredWidth: mainItem.width Layout.preferredHeight: Utils.getSizeWithScreenRatio(49) - leftPadding: Utils.getSizeWithScreenRatio(16) background: Rectangle { id: contentBackground anchors.fill: parent radius: Utils.getSizeWithScreenRatio(63) color: DefaultStyle.grey_100 border.color: mainItem.errorMessage.length > 0 - ? DefaultStyle.danger_500_main - : (textField.hasActiveFocus || combobox.hasActiveFocus) - ? DefaultStyle.main1_500_main - : DefaultStyle.grey_200 + ? DefaultStyle.danger_500_main + : (textField.activeFocus || combobox.activeFocus) + ? DefaultStyle.main1_500_main + : DefaultStyle.grey_200 + border.width: mainItem.borderWidth } contentItem: RowLayout { CountryIndicatorCombobox { id: combobox implicitWidth: Utils.getSizeWithScreenRatio(110) + leftPadding: Utils.getSizeWithScreenRatio(16) Layout.fillHeight: true defaultCallingCode: mainItem.defaultCallingCode - property bool keyboardFocus: FocusHelper.keyboardFocus //: %1 prefix Accessible.name: qsTr("prefix_phone_number_accessible_name").arg(mainItem.Accessible.name) } @@ -69,10 +72,15 @@ ColumnLayout { id: textField Layout.fillWidth: true placeholderText: mainItem.placeholderText - background: Item{} + background: Rectangle { + visible: textField.keyboardFocus + radius: Utils.getSizeWithScreenRatio(63) + color: "transparent" + border.color: mainItem.keyboardFocusedBorderColor + border.width: mainItem.keyboardFocusedBorderWidth + } initialText: initialPhoneNumber validator: RegularExpressionValidator{ regularExpression: /[0-9]+/} - property bool keyboardFocus: FocusHelper.keyboardFocus //: %1 number Accessible.name: qsTr("number_phone_number_accessible_name").arg(mainItem.Accessible.name) } diff --git a/Linphone/view/Control/Input/SearchBar.qml b/Linphone/view/Control/Input/SearchBar.qml index 0d2378f19..f335db3d0 100644 --- a/Linphone/view/Control/Input/SearchBar.qml +++ b/Linphone/view/Control/Input/SearchBar.qml @@ -104,6 +104,13 @@ FocusScope { repeat: false onTriggered: textField.searchText = textField.text } + Keys.onPressed: (event) => { + event.accepted = false + if (mainItem.numericPadPopup && mainItem.numericPadPopup.opened && (event.modifiers & Qt.KeypadModifier)) { + mainItem.numericPadPopup.keyPadKeyPressed(event) + event.accepted = true + } + } } Button { id: dialerButton diff --git a/Linphone/view/Control/Popup/NumericPadPopup.qml b/Linphone/view/Control/Popup/NumericPadPopup.qml index 65fce495e..56c763ee3 100644 --- a/Linphone/view/Control/Popup/NumericPadPopup.qml +++ b/Linphone/view/Control/Popup/NumericPadPopup.qml @@ -20,6 +20,10 @@ Control.Popup { property var currentCall onOpened: numPad.forceActiveFocus() signal buttonPressed(string text) + signal keyPadKeyPressed(KeyEvent event) + onKeyPadKeyPressed: (event) => { + numPad.handleKeyPadEvent(event) + } signal launchCall() signal wipe() @@ -72,7 +76,6 @@ Control.Popup { lastRowVisible: mainItem.lastRowVisible currentCall: mainItem.currentCall onButtonPressed: (text) => { - console.log("BUTTON PRESSED NUMPAD") mainItem.buttonPressed(text) } onLaunchCall: mainItem.launchCall() diff --git a/Linphone/view/Page/Form/Register/RegisterCheckingPage.qml b/Linphone/view/Page/Form/Register/RegisterCheckingPage.qml index 437a0a0f2..2f88adff8 100644 --- a/Linphone/view/Page/Form/Register/RegisterCheckingPage.qml +++ b/Linphone/view/Page/Form/Register/RegisterCheckingPage.qml @@ -14,6 +14,7 @@ LoginLayout { property string address property string sipIdentityAddress property string code + property alias errorMessage: codeItemLayout.errorMessage property bool ctrlIsPressed onCtrlIsPressedChanged: console.log("ctrl is pressed", ctrlIsPressed) titleContent: [ @@ -78,66 +79,71 @@ LoginLayout { text = qsTr("assistant_account_creation_confirmation_explanation").arg(completeString).arg(address) } } - RowLayout { - spacing: Utils.getSizeWithScreenRatio(45) - Repeater { - model: 4 - id: repeater - signal pasteRequested(string text) - DigitInput { - id: digitInput - required property int index - Layout.preferredWidth: width - Layout.preferredHeight: height - Connections { - target: repeater - function onPasteRequested(text) { - console.log("paste requested", text[digitInput.index]) - var test= text; - if (UtilsCpp.isInteger(text)) - { - digitInput.text = text[digitInput.index] + FormItemLayout { + id: codeItemLayout + errorTextTopMargin: Utils.getSizeWithScreenRatio(5) + contentItem: RowLayout { + spacing: Utils.getSizeWithScreenRatio(45) + Repeater { + model: 4 + id: repeater + signal pasteRequested(string text) + DigitInput { + id: digitInput + required property int index + Layout.preferredWidth: width + Layout.preferredHeight: height + isError: codeItemLayout.errorMessage !== "" + Connections { + target: repeater + function onPasteRequested(text) { + console.log("paste requested", text[digitInput.index]) + var test= text; + if (UtilsCpp.isInteger(text)) + { + digitInput.text = text[digitInput.index] + } } } - } - onTextChanged: { - console.log("text edited", text) - if (text.length > 0 ) { - mainItem.code = mainItem.code.slice(0, index) + text + mainItem.code.slice(index) - if (index < 3) - nextItemInFocusChain(true).forceActiveFocus() - else { - mainItem.sendCode(mainItem.code) - mainItem.code = "" - } - } else { - if (index > 0) - nextItemInFocusChain(false).forceActiveFocus() - } - } - Keys.onPressed: (event) => { - if (event.key == Qt.Key_Backspace) { - if (text.length === 0) { - nextItemInFocusChain(false).forceActiveFocus() - event.accepted = true + onTextChanged: { + console.log("text edited", text) + if (text.length > 0 ) { + mainItem.code = mainItem.code.slice(0, index) + text + mainItem.code.slice(index) + if (index < 3) + nextItemInFocusChain(true).forceActiveFocus() + else { + mainItem.sendCode(mainItem.code) + mainItem.code = "" + } } else { - event.accepted = false + if (index > 0) + nextItemInFocusChain(false).forceActiveFocus() } - } else if (event.key == Qt.Key_Control) { - mainItem.ctrlIsPressed = true - event.accepted = false - } else if (mainItem.ctrlIsPressed && event.key == Qt.Key_V) { - var clipboard = UtilsCpp.getClipboardText() - console.log("paste", clipboard) - repeater.pasteRequested(clipboard) - } else { - event.accepted = false } - } - Keys.onReleased: (event) => { - if (event.key == Qt.Key_Control) { - mainItem.ctrlIsPressed = false - event.accepted = true + Keys.onPressed: (event) => { + if (event.key == Qt.Key_Backspace) { + if (text.length === 0) { + nextItemInFocusChain(false).forceActiveFocus() + event.accepted = true + } else { + event.accepted = false + } + } else if (event.key == Qt.Key_Control) { + mainItem.ctrlIsPressed = true + event.accepted = false + } else if (mainItem.ctrlIsPressed && event.key == Qt.Key_V) { + var clipboard = UtilsCpp.getClipboardText() + console.log("paste", clipboard) + repeater.pasteRequested(clipboard) + } else { + event.accepted = false + } + } + Keys.onReleased: (event) => { + if (event.key == Qt.Key_Control) { + mainItem.ctrlIsPressed = false + event.accepted = true + } } } } diff --git a/Linphone/view/Page/Form/Register/RegisterPage.qml b/Linphone/view/Page/Form/Register/RegisterPage.qml index 1dc83c687..2a1fd3749 100644 --- a/Linphone/view/Page/Form/Register/RegisterPage.qml +++ b/Linphone/view/Page/Form/Register/RegisterPage.qml @@ -128,15 +128,11 @@ LoginLayout { ColumnLayout { id: contentLayout - anchors.left: parent.left - anchors.right: parent.right spacing: Utils.getSizeWithScreenRatio(8) ColumnLayout { id: formLayout spacing: Utils.getSizeWithScreenRatio(24) RowLayout { - Layout.preferredHeight: usernameItem.height - spacing: Utils.getSizeWithScreenRatio(16) FormItemLayout { id: usernameItem label: qsTr("username") @@ -152,6 +148,7 @@ LoginLayout { } RowLayout { spacing: Utils.getSizeWithScreenRatio(10) + Layout.leftMargin: Utils.getSizeWithScreenRatio(16) ComboBox { Layout.preferredWidth: Utils.getSizeWithScreenRatio(210) Layout.preferredHeight: Utils.getSizeWithScreenRatio(49) @@ -171,7 +168,8 @@ LoginLayout { currentIndex: bar.currentIndex PhoneNumberInput { id: phoneNumberInput - Layout.preferredWidth: Utils.getSizeWithScreenRatio(346) + Layout.fillWidth: false + Layout.preferredWidth: Utils.getSizeWithScreenRatio(390) property string completePhoneNumber: countryCode + phoneNumber //: "Numéro de téléphone" label: qsTr("phone_number") @@ -221,6 +219,7 @@ LoginLayout { } FormItemLayout { Layout.preferredWidth: Utils.getSizeWithScreenRatio(346) + Layout.leftMargin: Utils.getSizeWithScreenRatio(16) //: "Confirmation mot de passe" label: qsTr("assistant_account_register_password_confirmation") mandatory: true @@ -235,13 +234,14 @@ LoginLayout { } } } - TemporaryText { - id: otherErrorText - Layout.fillWidth: true - Layout.topMargin: Utils.getSizeWithScreenRatio(5) - } } } + TemporaryText { + id: otherErrorText + Layout.fillWidth: true + Layout.preferredHeight: implicitHeight + // Layout.topMargin: Utils.getSizeWithScreenRatio(5) + } // ColumnLayout { // spacing: Utils.getSizeWithScreenRatio(18) // RowLayout { @@ -276,6 +276,7 @@ LoginLayout { Accessible.name: acceptCguAndPrivacyPolicyItem.associatedText } Text { + id: privacyLinkText text: acceptCguAndPrivacyPolicyItem.associatedText onLinkActivated: (link) => Qt.openUrlExternally(link) font { @@ -284,9 +285,17 @@ LoginLayout { } MouseArea { anchors.fill: parent - acceptedButtons: Qt.NoButton + acceptedButtons: Qt.LeftButton cursorShape: parent.hoveredLink ? Qt.PointingHandCursor : Qt.ArrowCursor - onClicked: termsCheckBox.toggle() + onClicked: (mouse) => { + mouse.accepted = false + if (parent.hoveredLink) { + privacyLinkText.linkActivated(privacyLinkText.linkAt(mouse.x, mouse.y)) + } + else { + termsCheckBox.toggle() + } + } } } } diff --git a/Linphone/view/Page/Window/Main/MainWindow.qml b/Linphone/view/Page/Window/Main/MainWindow.qml index 30a0206e7..e35ded455 100644 --- a/Linphone/view/Page/Window/Main/MainWindow.qml +++ b/Linphone/view/Page/Window/Main/MainWindow.qml @@ -230,6 +230,7 @@ AbstractWindow { Component { id: checkingPage RegisterCheckingPage { + id: registerCheckingPage onReturnToRegister: mainWindowStackView.pop() onSendCode: (code) => { RegisterPageCpp.linkNewAccountUsingCode(code, registerWithEmail, sipIdentityAddress) @@ -238,15 +239,16 @@ AbstractWindow { target: RegisterPageCpp function onLinkingNewAccountWithCodeSucceed() { goToLogin() - //: "Compte créé" - mainWindow.showInformationPopup(qsTr("assistant_register_success_title"), - //: "Le compte a été créé. Vous pouvez maintenant vous connecter" - qsTr("assistant_register_success_message"), true) + //: "Compte créé" + mainWindow.showInformationPopup(qsTr("assistant_register_success_title"), + //: "Le compte a été créé. Vous pouvez maintenant vous connecter" + qsTr("assistant_register_success_message"), true) } function onLinkingNewAccountWithCodeFailed(errorMessage) { - //: "Erreur dans le code de validation" - if (errorMessage.length === 0) errorMessage = qsTr("assistant_register_error_code") - mainWindow.showInformationPopup(qsTr("information_popup_error_title"), errorMessage, false) + registerCheckingPage.errorMessage = "" + //: "Erreur dans le code de validation" + if (errorMessage.length === 0) errorMessage = qsTr("assistant_register_error_code") + registerCheckingPage.errorMessage = errorMessage } } }