diff --git a/Telegram/CMakeLists.txt b/Telegram/CMakeLists.txt index 9879bf7837183..9ede610576277 100644 --- a/Telegram/CMakeLists.txt +++ b/Telegram/CMakeLists.txt @@ -1295,6 +1295,12 @@ PRIVATE rabbit/lang/rabbit_lang.h rabbit/settings/rabbit_settings.cpp rabbit/settings/rabbit_settings.h + rabbit/settings_menu/sections/rabbit_appearance.cpp + rabbit/settings_menu/sections/rabbit_appearance.h + rabbit/settings_menu/sections/rabbit_chats.cpp + rabbit/settings_menu/sections/rabbit_chats.h + rabbit/settings_menu/sections/rabbit_general.cpp + rabbit/settings_menu/sections/rabbit_general.h rabbit/settings_menu/rabbit_settings_menu.cpp rabbit/settings_menu/rabbit_settings_menu.h rabbit/ui/settings/icon_picker.cpp diff --git a/Telegram/Resources/langs/rabbit/es.json b/Telegram/Resources/langs/rabbit/es.json index 1c8f6307b9910..83719714cdace 100644 --- a/Telegram/Resources/langs/rabbit/es.json +++ b/Telegram/Resources/langs/rabbit/es.json @@ -1,5 +1,5 @@ { - "rtg_intro_about": "Bienvenido a la aplicación de mensajería no oficial basada en Telegram Desktop.", + "rtg_intro_about": "Bienvenido a la app de mensajería no oficial basada en Telegram Desktop.", "rtg_about_text1": "Fork experimental no oficial de {tdesktop_link}.", "rtg_about_text1_tdesktop": "Telegram Desktop", "rtg_about_text3": "Visita {channel_link} o {faq_link} para más información.", @@ -7,23 +7,22 @@ "rtg_new_version": "rabbitGram Desktop ha sido actualizado a {version} (TD {td_version})\n\nHistorial completo de versiones aquí:\n{link}", "rtg_open_from_tray": "Abrir rabbitGram", "rtg_quit_from_tray": "Salir de rabbitGram", - "rtg_tray_icon_text": "rabbitGram se sigue ejecutando.\nPuedes cambiar esto desde la página de configuración.\nSi este icono desaparece de la bandeja del sistema\npuedes arrastrarlo aquí desde los iconos ocultos.", + "rtg_tray_icon_text": "rabbitGram se sigue ejecutando.\nPuedes cambiar esto desde la página de ajustes.\nSi este icono desaparece de la bandeja del sistema\npuedes arrastrarlo aquí desde los iconos ocultos.", "rtg_error_start_minimized_passcoded": "Has establecido un código de acceso local, por lo que rabbitGram Desktop no puede iniciarse minimizado; te pedirá que introduzcas tu código de acceso antes de empezar a funcionar.", "rtg_proxy_unsupported": "Su versión de rabbitGram Desktop no soporta este tipo de proxy o el enlace del proxy no es válido. Por favor, actualice rabbitGram Desktop a la última versión.", - "rtg_update_telegram": "Actualiza rabbitGram", + "rtg_update_telegram": "Actualizar rabbitGram", "rtg_settings_auto_start": "Iniciar rabbitGram cuando se inicie el sistema", "rtg_settings_add_sendto": "Coloca rabbitGram en el menú \"Enviar a\"", "rtg_theme_no_desktop": "Lo sentimos, este tema no incluye una versión para rabbitGram Desktop.", - "rtg_download_path_default_radio": "Carpeta rabbitGram en las \"Descargas\" del sistema", - "rtg_passcode_about": "Cuando se establece un código de acceso local, aparece un icono de bloqueo en la parte superior de la lista de chats. Haz clic en él para bloquear la aplicación.\n\nNota: si olvida su código de acceso local, tendrá que volver a iniciar sesión en rabbitGram Desktop.", + "rtg_download_path_default_radio": "Carpeta rabbitGram en las «Descargas» del sistema", + "rtg_passcode_about": "Cuando se establece un código de acceso local, aparece un icono de bloqueo en la parte superior de la lista de chats. Haz clic en él para bloquear la app.\n\nNota: si olvida su código de acceso local, tendrá que volver a iniciar sesión en rabbitGram Desktop.", "rtg_message_unsupported": "Este mensaje no es compatible con su versión de rabbitGram Desktop. Por favor, actualice a la última versión en Ajustes, o instálela desde {link}", "rtg_bot_share_location_unavailable": "Lo sentimos, el uso compartido de la ubicación no está disponible actualmente en rabbitGram Desktop.", "rtg_theme_editor_need_unlock": "Necesitas desbloquear rabbitGram para guardar tu tema.", - "rtg_payments_not_supported": "Lo sentimos, rabbitGram Desktop aún no admite pagos. Por favor, utilice una de nuestras aplicaciones móviles para hacerlo.", "rtg_no_mic_permission": "rabbitGram necesita acceder a su micrófono para poder realizar llamadas y grabar mensajes de voz.", - "rtg_passport_app_out_of_date": "Lo sentimos, tu aplicación de Telegram está desactualizada y no puede atender esta solicitud. Por favor, actualiza rabbitGram.", + "rtg_passport_app_out_of_date": "Lo sentimos, tu app de Telegram está desactualizada y no puede atender esta solicitud. Por favor, actualiza rabbitGram.", "rtg_export_progress": "Puedes cerrar esta ventana ahora. Por favor, no salgas de rabbitGram hasta que la exportación de datos esté completa.", - "rtg_language_not_ready_about": "Por desgracia, este paquete de idiomas personalizado ({lang_name}) no contiene datos para rabbitGram Desktop. Puede contribuir a este paquete de idiomas utilizando el {link}.", + "rtg_language_not_ready_about": "Desafortunadamente, este paquete de idiomas personalizado ({lang_name}) no contiene datos para rabbitGram Desktop. Puede contribuir a este paquete de idiomas utilizando el {link}.", "rtg_outdated_soon": "De lo contrario, rabbitGram Desktop dejará de actualizarse el {date}.", "rtg_outdated_now": "Para que rabbitGram Desktop pueda actualizarse a las nuevas versiones.", "rtg_mac_menu_show": "Mostrar rabbitGram", @@ -31,9 +30,9 @@ "rtg_user_status_unaccessible": "cuenta no accesible", "rtg_settings_show_json_settings": "Mostrar archivo de configuración", "rtg_settings_restart": "Reiniciar rabbitGram", - "rtg_copy_btn_callback": "Copiar datos de callback", - "rtg_pinned_message_show": "Mostrar mensaje anclado", - "rtg_pinned_message_hide": "Ocultar el mensaje anclado", + "rtg_copy_btn_callback": "Copiar datos de llamada", + "rtg_pinned_message_show": "Mostrar mensaje fijado", + "rtg_pinned_message_hide": "Ocultar mensaje fijado", "rtg_settings_general": "General", "rtg_settings_appearance": "Apariencia", "rtg_settings_chats": "Chats", @@ -41,18 +40,19 @@ "rtg_settings_sticker_scale_both": "Aplicar a la anchura del sticker", "rtg_settings_sticker_scale_both_about": "Cuando se activa, la anchura máxima del sticker cambiará junto con la altura de la misma.", "rtg_settings_emoji_outline": "Contorno del emoji grande", - "rtg_settings_disable_up_edit": "Desactivar la edición con la tecla Arriba", + "rtg_settings_disable_up_edit": "Deshabilitar editar con la tecla Arriba", "rtg_settings_auto_scroll_unfocused": "Desplazamiento automático sin enfoque", "rtg_settings_always_show_scheduled": "Mostrar siempre programado", "rtg_settings_chat_list_compact": "Lista de chats compacta", "rtg_fonts_title": "Fuentes", "rtg_settings_fonts": "Cambiar las fuentes de la aplicación", - "rtg_fonts_reset": "Resetear", + "rtg_fonts_reset": "Restablecer", "rtg_fonts_about": "Deberá reiniciar la aplicación para aplicar y ver los cambios.", "rtg_fonts_main": "Fuente principal", "rtg_fonts_semibold": "Fuente seminegrita", "rtg_fonts_semibold_is_bold": "Fuente en negrita", "rtg_fonts_monospaced": "Fuente monoespaciada", + "rtg_fonts_size": "Tamaño de fuente: {pixels}px", "rtg_fonts_use_system_font": "Utilizar la fuente del sistema", "rtg_fonts_use_original_metrics": "Utilice la altura de Open Sans", "rtg_settings_network": "Red", @@ -65,7 +65,6 @@ "rtg_net_speed_boost_big": "Grande", "rtg_settings_system": "Sistema", "rtg_settings_qt_scale": "Motor de escalado Qt", - "rtg_settings_gtk_integration": "Integración GTK", "rtg_settings_file_dialog_type": "Diálogo del selector de archivos", "rtg_file_dialog_type_default": "Por defecto", "rtg_file_dialog_disabled_on_build": "Desactivado en el momento de construcción", @@ -134,7 +133,6 @@ "rtg_settings_chat_id_telegram": "API de Telegram", "rtg_settings_chat_id_bot": "API de bots", "rtg_message_id": "ID del mensaje: {id}", - "rtg_emoji_panel_hover": "Panel emoji al pasar cursor por encima", "rtg_local_storage_limit_days": { "zero": "{count} días", "one": "{count} día", @@ -161,24 +159,6 @@ "rtg_group_status_admin": "es administrador", "rtg_too_many_accounts_warning": "Advertencia. No se recomienda utilizar demasiadas cuentas al mismo tiempo debido al mayor consumo de memoria y a los posibles bloqueos que ello conlleva.\n\n¿Seguro que quieres añadir una nueva cuenta?", "rtg_account_add_anyway": "Añadir de todas formas", - "rtg_media_selected_gif": { - "zero": "{count} GIFs", - "one": "{count} GIF", - "two": "{count} GIFs", - "few": "{count} GIFs", - "many": "{count} GIFs", - "other": "{count} GIFs" - }, - "rtg_media_type_gif": "GIFs", - "rtg_profile_gif": { - "zero": "{count} GIFs", - "one": "{count} GIF", - "two": "{count} GIFs", - "few": "{count} GIFs", - "many": "{count} GIFs", - "other": "{count} GIFs" - }, - "rtg_media_gif_empty": "Todavía no hay GIFs aquí", "rtg_rights_chat_send_stickers": "Enviar stickers", "rtg_rights_chat_send_gif": "Enviar GIFs", "rtg_rights_chat_send_games": "Enviar juegos", @@ -262,6 +242,39 @@ "many": "días", "other": "días" }, + "rtg_forward_sender_names_and_captions_removed": "Nombres de remitente y descripciones eliminados", + "rtg_forward_remember_mode": "Recordar modo de reenvío", + "rtg_forward_mode": "Modo de reenvío", + "rtg_forward_mode_quoted": "Citar", + "rtg_forward_mode_unquoted": "Sin citar", + "rtg_forward_mode_uncaptioned": "Sin descripción", + "rtg_forward_grouping_mode": "Modo de agrupación", + "rtg_forward_grouping_mode_preserve_albums": "Igual que original", + "rtg_forward_grouping_mode_regroup": "Reagrupar multimedia", + "rtg_forward_grouping_mode_regroup_desc": "Solo sin citar y sin descripción", + "rtg_forward_grouping_mode_separate": "Separar", + "rtg_forward_force_old_unquoted": "Antiguo método de reenviar sin citar", + "rtg_forward_force_old_unquoted_desc": "El método antiguo copia el contenido de los mensajes en el cliente en lugar de en el servidor. Actualmente sólo se utiliza para el modo de agrupación de \"Reagrupar multimedia\", ya que uno nuevo no lo soporta. Si por alguna razón el reenvío sin citas no funciona correctamente, intente cambiar esta opción.", + "rtg_disable_chat_themes": "Desactivar temas de chat", + "rtg_settings_remember_compress_images": "Recordar comprimir imágenes", + "rtg_settings_compress_images_default": "Comprimir imágenes por defecto", + "rtg_pip_not_supported": "Lo sentimos, el modo imagen en imagen no es compatible aquí.", + "rtg_forward_quiz_unquoted": "Lo sentimos, los cuestionarios que actualmente están abiertos y sin votación no pueden ser enviados sin citar.", + "rtg_jump_to_date_title": "Saltar a...", + "rtg_jump_to_date_button": "Saltar", + "rtg_jump_to_beginning": "Saltar al inicio", + "rtg_show_calendar": "Mostrar calendario", + "rtg_in_app_update_disabled": "El actualizador dentro de la app está desactivado.", + "rtg_experimental_tabbed_panel_by_click": "Mostrar panel de pestañas con clic", + "rtg_experimental_tabbed_panel_by_click_description": "Mostrar el panel de Emojis / Stickers / GIFs sólo después de un clic.", + "rtg_experimental_view_profile_context_menu": "Añadir \"Ver perfil\"", + "rtg_experimental_view_profile_context_menu_description": "Añadir \"Ver perfil\" al menú contextual en la lista de chats", + "rtg_experimental_linux_nvidia_opengl": "Permitir OpenGL en los controladores NVIDIA (Linux)", + "rtg_experimental_linux_nvidia_opengl_description": "Qt+OpenGL tiene problemas en Linux con controladores NVIDIA.", + "rtg_settings_view_profile_on_top": "Mostrar primero \"Ver perfil\"", + "rtg_settings_view_profile_on_top_about": "Esta opción también habilita «Añadir \"Ver perfil\"» desde la configuración experimental de TDesktop.", + "rtg_settings_emoji_sidebar": "Activar la barra lateral de emojis", + "rtg_settings_emoji_sidebar_right_click": "Barra lateral de emojis con clic derecho", "rtg_phone_hidden": "Oculto", "rtg_side_menu_elements": "Elementos del menú lateral", "rtg_settings_comma_after_mention": "Agregar coma después de la mención", diff --git a/Telegram/Resources/langs/rabbit/pt-br.json b/Telegram/Resources/langs/rabbit/pt-br.json index 6639f6498ff80..51c77030f47c6 100644 --- a/Telegram/Resources/langs/rabbit/pt-br.json +++ b/Telegram/Resources/langs/rabbit/pt-br.json @@ -19,7 +19,6 @@ "rtg_message_unsupported": "Esta mensagem não é suportada pela sua versão do rabbitGram Desktop. Atualize para a versão mais recente em Configurações ou instale-a em {link}", "rtg_bot_share_location_unavailable": "No momento, o compartilhamento de local não está disponível no rabbitGram Desktop.", "rtg_theme_editor_need_unlock": "Você precisa desbloquear o rabbitGram para salvar seu tema.", - "rtg_payments_not_supported": "Desculpe, o rabbitGram Desktop ainda não suporta pagamentos. Use um de nossos aplicativos móveis para fazer isso.", "rtg_no_mic_permission": "O rabbitGram precisa de acesso ao seu microfone para que você possa fazer chamadas e gravar mensagens de voz.", "rtg_passport_app_out_of_date": "Seu aplicativo Telegram está desatualizado e não pode atender a essa solicitação. Atualize o rabbitGram.", "rtg_export_progress": "Você pode fechar esta janela agora. Por favor, não saia do rabbitGram até que a exportação dos dados esteja concluída.", @@ -36,7 +35,7 @@ "rtg_pinned_message_hide": "Ocultar mensagem fixada", "rtg_settings_general": "Geral", "rtg_settings_appearance": "Aparência", - "rtg_settings_chats": "Chats", + "rtg_settings_chats": "Conversas", "rtg_settings_sticker_height": "Altura do sticker: {pixels}px", "rtg_settings_sticker_scale_both": "Aplicar à largura do adesivo", "rtg_settings_sticker_scale_both_about": "Quando ativada, a largura máxima do adesivo será alterada junto com a altura do adesivo.", @@ -53,7 +52,7 @@ "rtg_fonts_semibold": "Negrito", "rtg_fonts_semibold_is_bold": "Esboço em negrito", "rtg_fonts_monospaced": "Monoespaçado", - "rtg_fonts_size": "Font size: {pixels}px", + "rtg_fonts_size": "Tamanho da fonte: {pixels}px", "rtg_fonts_use_system_font": "Usar fonte do sistema", "rtg_fonts_use_original_metrics": "Usar a altura da Open Sans", "rtg_settings_network": "Rede", @@ -66,10 +65,10 @@ "rtg_net_speed_boost_big": "Grande", "rtg_settings_system": "Sistema", "rtg_settings_qt_scale": "Motor de escala Qt", - "rtg_settings_file_dialog_type": "File chooser dialog", + "rtg_settings_file_dialog_type": "Menu do seletor de arquivo", "rtg_file_dialog_type_default": "Padrão", - "rtg_file_dialog_disabled_on_build": "Disabled on build time", - "rtg_file_dialog_disabled_by_option": "Disabled by option", + "rtg_file_dialog_disabled_on_build": "Desativado no tempo da build", + "rtg_file_dialog_disabled_by_option": "Desativado pela opção", "rtg_settings_other": "Outros", "rtg_profile_copy_id": "Copiar ID", "rtg_profile_bot_id": " ID do bot", @@ -127,14 +126,13 @@ "rtg_settings_tray_icon_legacy": "Legado", "rtg_settings_tray_icon_desc": "Se você não gostar de nenhum desses ícones, pode colocar um icon.png na pasta do seu perfil, mas precisará reiniciar o aplicativo para vê-lo.\n\nIcons below don't require restart.", "rtg_settings_disable_tray_counter": "Desativar contador de ícones da bandeja", - "rtg_settings_use_telegram_panel_icon": "Ask the system for telegram icon", + "rtg_settings_use_telegram_panel_icon": "Perguntar ao sistema pelo ícone do telegram", "rtg_settings_chat_id": "ID no perfil do chat", "rtg_settings_chat_id_desc": "Você pode escolher o formato desejado aqui.\n\nA API do Telegram usa IDs como está, mas a API de bot adiciona menos no início para grupos, e -100 para canais e supergrupos para ajustá-lo em um campo.\n\nSe você tiver o painel de perfil aberto, abra-o novamente para ver as alterações.", "rtg_settings_chat_id_disable": "Ocultar", "rtg_settings_chat_id_telegram": " API do Telegram", "rtg_settings_chat_id_bot": "API de bot", "rtg_message_id": "ID da mensagem: {id}", - "rtg_emoji_panel_hover": "Pairar painel de emoji", "rtg_local_storage_limit_days": { "zero": "{count} dias", "one": "{count} dia", @@ -208,10 +206,10 @@ "rtg_settings_telegram_sites_autologin": "Login automático em sites do Telegram", "rtg_mute_for_selected_time": "Definir tempo", "rtg_send_preview": "Enviar pré-visualização", - "rtg_send_silent_preview": "Send preview silent", - "rtg_reminder_preview": "Remind with preview", - "rtg_schedule_preview": "Send preview scheduled", - "rtg_language_reloaded": "rabbitGram-specific language strings were reloaded.", + "rtg_send_silent_preview": "Enviar visualização silenciosa", + "rtg_reminder_preview": "Lembrar com visualização", + "rtg_schedule_preview": "Enviar visualização agendada", + "rtg_language_reloaded": "as strings de idioma específicas do RabbitGram foram recarregadas.", "rtg_notifications_mute_seconds": { "zero": "segundos", "one": "segundo", @@ -261,6 +259,22 @@ "rtg_settings_remember_compress_images": "Lembrar imagens comprimidas", "rtg_settings_compress_images_default": "Comprimir imagens por padrão", "rtg_pip_not_supported": "Desculpe, o modo Picture-in-Picture não é suportado aqui.", + "rtg_forward_quiz_unquoted": "Desculpe, os questionários que estão abertos e sem votação não podem ser encaminhados sem citações.", + "rtg_jump_to_date_title": "Pular para...", + "rtg_jump_to_date_button": "Pular", + "rtg_jump_to_beginning": "Pular para o início", + "rtg_show_calendar": "Mostrar calendário", + "rtg_in_app_update_disabled": "Atualizador no aplicativo está desativado.", + "rtg_experimental_tabbed_panel_by_click": "Mostrar painel com guias por clique", + "rtg_experimental_tabbed_panel_by_click_description": "Mostrar painel Emoji / Stickers / GIFs somente após um clique.", + "rtg_experimental_view_profile_context_menu": "Adicionar \"Ver perfil\"", + "rtg_experimental_view_profile_context_menu_description": "Adicionar \"Ver Perfil\" ao menu de contexto na lista de conversas", + "rtg_experimental_linux_nvidia_opengl": "Permitir OpenGL nos drivers de NVIDIA (Linux)", + "rtg_experimental_linux_nvidia_opengl_description": "Qt+OpenGL tem problemas no Linux com drivers de NVIDIA.", + "rtg_settings_view_profile_on_top": "Mostrar \"Ver Perfil\" primeiro", + "rtg_settings_view_profile_on_top_about": "Esta opção também habilita \"Adicionar \"Ver Perfil\"\" nas configurações experimentais do TDesktop\".", + "rtg_settings_emoji_sidebar": "Ativar barra lateral de emojis", + "rtg_settings_emoji_sidebar_right_click": "Barra lateral de emojis ao clicar com o botão direito", "rtg_phone_hidden": "Oculto", "rtg_side_menu_elements": "Elementos do menu lateral", "rtg_settings_comma_after_mention": "Adicionar vírgula após a menção", diff --git a/Telegram/SourceFiles/rabbit/settings_menu/rabbit_settings_menu.cpp b/Telegram/SourceFiles/rabbit/settings_menu/rabbit_settings_menu.cpp index 0eb4b2ff4344f..53184256b7585 100644 --- a/Telegram/SourceFiles/rabbit/settings_menu/rabbit_settings_menu.cpp +++ b/Telegram/SourceFiles/rabbit/settings_menu/rabbit_settings_menu.cpp @@ -12,6 +12,10 @@ For license and copyright information please follow this link: #include "rabbit/settings_menu/rabbit_settings_menu.h" #include "rabbit/ui/settings/icon_picker.h" +#include "rabbit/settings_menu/sections/rabbit_appearance.h" +#include "rabbit/settings_menu/sections/rabbit_chats.h" +#include "rabbit/settings_menu/sections/rabbit_general.h" + #include "lang_auto.h" #include "mainwindow.h" #include "settings/settings_common.h" @@ -63,244 +67,36 @@ namespace Settings { setupContent(controller); } - void Rabbit::SetupGeneral(not_null container) - { - Ui::AddSubsectionTitle(container, rktr("rtg_settings_general")); - - SettingsMenuJsonSwitch(rtg_settings_show_phone_number, show_phone_in_settings); - SettingsMenuJsonSwitch(rtg_settings_auto_hide_notifications, auto_hide_notifications); - } - - void Rabbit::SetupAppIcon(not_null container) - { - Ui::AddSubsectionTitle(container, rktr("rtg_settings_appicon")); - - container->add( - object_ptr(container), - st::defaultSubsectionTitlePadding); - } - - void Rabbit::SetupAppearance(not_null container) { - Ui::AddSubsectionTitle(container, rktr("rtg_settings_appearance")); - - const auto userpicRoundnessLabel = container->add( - object_ptr( - container, - st::settingsAudioVolumeLabel), - st::settingsAudioVolumeLabelPadding); - const auto userpicRoundnessSlider = container->add( - object_ptr( - container, - st::settingsAudioVolumeSlider), - st::settingsAudioVolumeSliderPadding); - const auto updateUserpicRoundnessLabel = [=](int value) { - const auto radius = QString::number(value); - userpicRoundnessLabel->setText(ktr("rtg_settings_userpic_rounding", { "radius", radius })); - }; - const auto updateUserpicRoundness = [=](int value) { - updateUserpicRoundnessLabel(value); - ::RabbitSettings::JsonSettings::Set("userpic_roundness", value); - ::RabbitSettings::JsonSettings::Write(); - }; - userpicRoundnessSlider->resize(st::settingsAudioVolumeSlider.seekSize); - userpicRoundnessSlider->setPseudoDiscrete( - 51, - [](int val) { return val; }, - ::RabbitSettings::JsonSettings::GetInt("userpic_roundness"), - updateUserpicRoundness); - updateUserpicRoundnessLabel(::RabbitSettings::JsonSettings::GetInt("userpic_roundness")); - - SettingsMenuJsonSwitch(rtg_general_roundness, general_roundness); - - AddSubsectionTitle(container, rktr("rtg_side_menu_elements")); - - AddButtonWithIcon( - container, - tr::lng_create_group_title(), - st::settingsButton, - IconDescriptor{ &st::menuIconGroups } - )->toggleOn( - rpl::single(::RabbitSettings::JsonSettings::GetBool("side_menu_create_group")) - )->toggledValue( - ) | rpl::filter([](bool enabled) { - return (enabled != ::RabbitSettings::JsonSettings::GetBool("side_menu_create_group")); - }) | rpl::start_with_next([](bool enabled) { - ::RabbitSettings::JsonSettings::Set("side_menu_create_group", enabled); - ::RabbitSettings::JsonSettings::Write(); - }, container->lifetime()); - - AddButtonWithIcon( - container, - tr::lng_create_channel_title(), - st::settingsButton, - IconDescriptor{ &st::menuIconChannel } - )->toggleOn( - rpl::single(::RabbitSettings::JsonSettings::GetBool("side_menu_create_channel")) - )->toggledValue( - ) | rpl::filter([](bool enabled) { - return (enabled != ::RabbitSettings::JsonSettings::GetBool("side_menu_create_channel")); - }) | rpl::start_with_next([](bool enabled) { - ::RabbitSettings::JsonSettings::Set("side_menu_create_channel", enabled); - ::RabbitSettings::JsonSettings::Write(); - }, container->lifetime()); - - AddButtonWithIcon( - container, - tr::lng_menu_my_stories(), - st::settingsButton, - IconDescriptor{ &st::menuIconStoriesSavedSection } - )->toggleOn( - rpl::single(::RabbitSettings::JsonSettings::GetBool("side_menu_my_stories")) - )->toggledValue( - ) | rpl::filter([](bool enabled) { - return (enabled != ::RabbitSettings::JsonSettings::GetBool("side_menu_my_stories")); - }) | rpl::start_with_next([](bool enabled) { - ::RabbitSettings::JsonSettings::Set("side_menu_my_stories", enabled); - ::RabbitSettings::JsonSettings::Write(); - }, container->lifetime()); - - AddButtonWithIcon( - container, - tr::lng_menu_contacts(), - st::settingsButton, - IconDescriptor{ &st::menuIconProfile } - )->toggleOn( - rpl::single(::RabbitSettings::JsonSettings::GetBool("side_menu_contacts")) - )->toggledValue( - ) | rpl::filter([](bool enabled) { - return (enabled != ::RabbitSettings::JsonSettings::GetBool("side_menu_contacts")); - }) | rpl::start_with_next([](bool enabled) { - ::RabbitSettings::JsonSettings::Set("side_menu_contacts", enabled); - ::RabbitSettings::JsonSettings::Write(); - }, container->lifetime()); - - AddButtonWithIcon( - container, - tr::lng_menu_calls(), - st::settingsButton, - IconDescriptor{ &st::menuIconPhone } - )->toggleOn( - rpl::single(::RabbitSettings::JsonSettings::GetBool("side_menu_calls")) - )->toggledValue( - ) | rpl::filter([](bool enabled) { - return (enabled != ::RabbitSettings::JsonSettings::GetBool("side_menu_calls")); - }) | rpl::start_with_next([](bool enabled) { - ::RabbitSettings::JsonSettings::Set("side_menu_calls", enabled); - ::RabbitSettings::JsonSettings::Write(); - }, container->lifetime()); - - AddButtonWithIcon( - container, - tr::lng_saved_messages(), - st::settingsButton, - IconDescriptor{ &st::menuIconSavedMessages } - )->toggleOn( - rpl::single(::RabbitSettings::JsonSettings::GetBool("side_menu_saved_messages")) - )->toggledValue( - ) | rpl::filter([](bool enabled) { - return (enabled != ::RabbitSettings::JsonSettings::GetBool("side_menu_saved_messages")); - }) | rpl::start_with_next([](bool enabled) { - ::RabbitSettings::JsonSettings::Set("side_menu_saved_messages", enabled); - ::RabbitSettings::JsonSettings::Write(); - }, container->lifetime()); - - AddButtonWithIcon( - container, - tr::lng_menu_night_mode(), - st::settingsButton, - IconDescriptor{ &st::menuIconNightMode } - )->toggleOn( - rpl::single(::RabbitSettings::JsonSettings::GetBool("side_menu_night_mode")) - )->toggledValue( - ) | rpl::filter([](bool enabled) { - return (enabled != ::RabbitSettings::JsonSettings::GetBool("side_menu_night_mode")); - }) | rpl::start_with_next([](bool enabled) { - ::RabbitSettings::JsonSettings::Set("side_menu_night_mode", enabled); - ::RabbitSettings::JsonSettings::Write(); - }, container->lifetime()); - } - - void Rabbit::SetupChats(not_null container) { - Ui::AddSubsectionTitle(container, rktr("rtg_settings_chats")); - - const auto stickerHeightLabel = container->add( - object_ptr( - container, - st::settingsAudioVolumeLabel), - st::settingsAudioVolumeLabelPadding); - const auto stickerHeightSlider = container->add( - object_ptr( - container, - st::settingsAudioVolumeSlider), - st::settingsAudioVolumeSliderPadding); - const auto updateStickerHeightLabel = [=](int value) { - const auto pixels = QString::number(value); - stickerHeightLabel->setText(ktr("rtg_settings_sticker_height", { "pixels", pixels })); - }; - const auto updateStickerHeight = [=](int value) { - updateStickerHeightLabel(value); - ::RabbitSettings::JsonSettings::Set("sticker_height", value); - ::RabbitSettings::JsonSettings::Write(); - }; - stickerHeightSlider->resize(st::settingsAudioVolumeSlider.seekSize); - stickerHeightSlider->setPseudoDiscrete( - 193, - [](int val) { return val + 64; }, - ::RabbitSettings::JsonSettings::GetInt("sticker_height"), - updateStickerHeight); - updateStickerHeightLabel(::RabbitSettings::JsonSettings::GetInt("sticker_height")); - - AddButtonWithIcon( - container, - rktr("rtg_settings_show_seconds"), - st::settingsButton, - IconDescriptor{ &st::menuIconReschedule } - )->toggleOn( - rpl::single(::RabbitSettings::JsonSettings::GetBool("show_seconds")) - )->toggledValue( - ) | rpl::filter([](bool enabled) { - return (enabled != ::RabbitSettings::JsonSettings::GetBool("show_seconds")); - }) | rpl::start_with_next([](bool enabled) { - ::RabbitSettings::JsonSettings::Set("show_seconds", enabled); - ::RabbitSettings::JsonSettings::Write(); - }, container->lifetime()); - - AddButtonWithIcon( - container, - rktr("rtg_settings_show_sender_avatar"), - st::settingsButton, - IconDescriptor{ &st::menuIconDockBounce } - )->toggleOn( - rpl::single(::RabbitSettings::JsonSettings::GetBool("show_sender_userpic")) - )->toggledValue( - ) | rpl::filter([](bool enabled) { - return (enabled != ::RabbitSettings::JsonSettings::GetBool("show_sender_userpic")); - }) | rpl::start_with_next([](bool enabled) { - ::RabbitSettings::JsonSettings::Set("show_sender_userpic", enabled); - ::RabbitSettings::JsonSettings::Write(); - }, container->lifetime()); - - SettingsMenuJsonSwitch(rtg_settings_comma_after_mention, comma_after_mention); - } - void Rabbit::SetupRabbitSettings(not_null container, not_null controller) { - Ui::AddSkip(container); - SetupGeneral(container); - - Ui::AddSkip(container); - Ui::AddDivider(container); - Ui::AddSkip(container); - SetupAppIcon(container); + const auto addSection = [&]( + rpl::producer label, + Type type, + IconDescriptor &&descriptor) { + AddButtonWithIcon( + container, + std::move(label), + st::settingsButton, + std::move(descriptor) + )->addClickHandler([=] { + showOther(type); + }); + }; - Ui::AddSkip(container); - Ui::AddDivider(container); Ui::AddSkip(container); - SetupAppearance(container); - - Ui::AddSkip(container); - Ui::AddDivider(container); - Ui::AddSkip(container); - SetupChats(container); + addSection( + rktr("rtg_settings_general"), + RabbitGeneral::Id(), + { &st::menuIconShowAll }); + + addSection( + rktr("rtg_settings_appearance"), + RabbitAppearance::Id(), + { &st::menuIconPalette }); + + addSection( + rktr("rtg_settings_chats"), + RabbitChats::Id(), + { &st::menuIconChatBubble }); } void Rabbit::setupContent(not_null controller) { diff --git a/Telegram/SourceFiles/rabbit/settings_menu/rabbit_settings_menu.h b/Telegram/SourceFiles/rabbit/settings_menu/rabbit_settings_menu.h index 73469d263336e..87b305cd9544a 100644 --- a/Telegram/SourceFiles/rabbit/settings_menu/rabbit_settings_menu.h +++ b/Telegram/SourceFiles/rabbit/settings_menu/rabbit_settings_menu.h @@ -26,11 +26,6 @@ namespace Settings { [[nodiscard]] rpl::producer title() override; private: - void SetupGeneral(not_null container); - void SetupAppIcon(not_null container); - void SetupAppearance(not_null container); - void SetupChats(not_null container); - void SetupRabbitSettings(not_null container, not_null null); void setupContent(not_null controller); }; diff --git a/Telegram/SourceFiles/rabbit/settings_menu/sections/rabbit_appearance.cpp b/Telegram/SourceFiles/rabbit/settings_menu/sections/rabbit_appearance.cpp new file mode 100644 index 0000000000000..7be4baa152130 --- /dev/null +++ b/Telegram/SourceFiles/rabbit/settings_menu/sections/rabbit_appearance.cpp @@ -0,0 +1,238 @@ +/* +This file is part of rabbitGram Desktop, +the unofficial app based on Telegram Desktop. + +For license and copyright information please follow this link: +https://github.com/rabbitgramdesktop/rabbitgramdesktop/blob/dev/LEGAL +*/ +#include + +#include "rabbit/settings/rabbit_settings.h" +#include "rabbit/lang/rabbit_lang.h" +#include "rabbit/settings_menu/sections/rabbit_appearance.h" +#include "rabbit/ui/settings/icon_picker.h" + +#include "lang_auto.h" +#include "mainwindow.h" +#include "settings/settings_common.h" +#include "ui/wrap/vertical_layout.h" +#include "ui/wrap/slide_wrap.h" +#include "ui/widgets/buttons.h" +#include "ui/widgets/labels.h" +#include "ui/widgets/checkbox.h" +#include "ui/vertical_list.h" +#include "boxes/connection_box.h" +#include "platform/platform_specific.h" +#include "window/window_session_controller.h" +#include "lang/lang_instance.h" +#include "core/application.h" +#include "storage/localstorage.h" +#include "data/data_session.h" +#include "main/main_session.h" +#include "styles/style_settings.h" +#include "styles/style_layers.h" +#include "styles/style_menu_icons.h" +#include "apiwrap.h" +#include "api/api_blocked_peers.h" +#include "ui/widgets/continuous_sliders.h" + +#define SettingsMenuJsonSwitch(LangKey, Option) container->add(object_ptr