diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings index f860ef842..2354b75ac 100644 --- a/Telegram/Resources/langs/lang.strings +++ b/Telegram/Resources/langs/lang.strings @@ -2754,6 +2754,9 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "ktg_settings_system" = "System"; "ktg_settings_gtk_integration" = "GTK integration"; +"ktg_settings_file_dialog_type" = "File dialog"; +"ktg_file_dialog_type_default" = "Default"; + "ktg_settings_other" = "Other"; "ktg_profile_copy_id" = "Copy ID"; "ktg_profile_bot_id" = "Bot ID"; diff --git a/Telegram/Resources/langs/rewrites/en.json b/Telegram/Resources/langs/rewrites/en.json index ffe2cace7..31949541b 100644 --- a/Telegram/Resources/langs/rewrites/en.json +++ b/Telegram/Resources/langs/rewrites/en.json @@ -68,6 +68,8 @@ "ktg_net_speed_boost_big": "Big", "ktg_settings_system": "System", "ktg_settings_gtk_integration": "GTK integration", + "ktg_settings_file_dialog_type": "File dialog", + "ktg_file_dialog_type_default": "Default", "ktg_settings_other": "Other", "ktg_profile_copy_id": "Copy ID", "ktg_profile_bot_id": "Bot ID", diff --git a/Telegram/Resources/langs/rewrites/ru.json b/Telegram/Resources/langs/rewrites/ru.json index 1316a57a3..84b41ef97 100644 --- a/Telegram/Resources/langs/rewrites/ru.json +++ b/Telegram/Resources/langs/rewrites/ru.json @@ -67,6 +67,8 @@ "ktg_net_speed_boost_big": "Высокое", "ktg_settings_system": "Система", "ktg_settings_gtk_integration": "GTK-интеграция", + "ktg_settings_file_dialog_type": "Файловый диалог", + "ktg_file_dialog_type_default": "По умолчанию", "ktg_settings_other": "Прочие", "ktg_profile_copy_id": "Копировать ID", "ktg_profile_bot_id": "ID бота", diff --git a/Telegram/SourceFiles/kotato/customboxes/radio_box.cpp b/Telegram/SourceFiles/kotato/customboxes/radio_box.cpp index c16b535a9..6d1502c55 100644 --- a/Telegram/SourceFiles/kotato/customboxes/radio_box.cpp +++ b/Telegram/SourceFiles/kotato/customboxes/radio_box.cpp @@ -23,12 +23,14 @@ RadioBox::RadioBox( QWidget*, const QString &title, int currentValue, - const QMap &options, + int valueCount, + Fn labelGetter, Fn saveCallback, bool warnRestart) : _title(title) , _startValue(currentValue) -, _options(options) +, _valueCount(valueCount) +, _labelGetter(labelGetter) , _saveCallback(std::move(saveCallback)) , _warnRestart(warnRestart) { } @@ -38,13 +40,15 @@ RadioBox::RadioBox( const QString &title, const QString &description, int currentValue, - const QMap &options, + int valueCount, + Fn labelGetter, Fn saveCallback, bool warnRestart) : _title(title) , _description(description) , _startValue(currentValue) -, _options(options) +, _valueCount(valueCount) +, _labelGetter(labelGetter) , _saveCallback(std::move(saveCallback)) , _warnRestart(warnRestart) { } @@ -69,13 +73,13 @@ void RadioBox::prepare() { _group = std::make_shared(_startValue); - for (auto i = _options.constBegin(); i != _options.constEnd(); ++i) { + for (auto i = 0; i != _valueCount; ++i) { content->add( object_ptr( this, _group, - i.key(), - i.value(), + i, + _labelGetter(i), st::autolockButton), style::margins( st::boxPadding.left(), diff --git a/Telegram/SourceFiles/kotato/customboxes/radio_box.h b/Telegram/SourceFiles/kotato/customboxes/radio_box.h index 50f7bdf57..680c2ca92 100644 --- a/Telegram/SourceFiles/kotato/customboxes/radio_box.h +++ b/Telegram/SourceFiles/kotato/customboxes/radio_box.h @@ -19,8 +19,8 @@ namespace Kotato { class RadioBox : public Ui::BoxContent { public: - RadioBox(QWidget* parent, const QString &title, int currentValue, const QMap &options, Fn saveCallback, bool warnRestart = false); - RadioBox(QWidget* parent, const QString &title, const QString &description, int currentValue, const QMap &options, Fn saveCallback, bool warnRestart = false); + RadioBox(QWidget* parent, const QString &title, int currentValue, int valueCount, Fn labelGetter, Fn saveCallback, bool warnRestart = false); + RadioBox(QWidget* parent, const QString &title, const QString &description, int currentValue, int valueCount, Fn labelGetter, Fn saveCallback, bool warnRestart = false); protected: void prepare() override; @@ -31,7 +31,8 @@ private: QString _title; QString _description; int _startValue; - QMap _options; + int _valueCount; + Fn _labelGetter; Fn _saveCallback; bool _warnRestart = false; std::shared_ptr _group; diff --git a/Telegram/SourceFiles/kotato/json_settings.cpp b/Telegram/SourceFiles/kotato/json_settings.cpp index 82e784f58..403b46be9 100644 --- a/Telegram/SourceFiles/kotato/json_settings.cpp +++ b/Telegram/SourceFiles/kotato/json_settings.cpp @@ -370,6 +370,7 @@ QByteArray GenerateSettingsJson(bool areDefault = false) { settings.insert(qsl("userpic_corner_type"), cUserpicCornersType()); settings.insert(qsl("always_show_top_userpic"), cShowTopBarUserpic()); settings.insert(qsl("gtk_integration"), cGtkIntegration()); + settings.insert(qsl("file_dialog_type"), int(cFileDialogType())); settings.insert(qsl("disable_tray_counter"), cDisableTrayCounter()); settings.insert(qsl("use_telegram_panel_icon"), cUseTelegramPanelIcon()); settings.insert(qsl("custom_app_icon"), cCustomAppIcon()); @@ -616,6 +617,14 @@ bool Manager::readCustomFile() { cSetGtkIntegration(v); }); + ReadIntOption(settings, "file_dialog_type", [&](auto v) { + const auto typedValue = Platform::FileDialog::ImplementationType(v); + if (typedValue >= Platform::FileDialog::ImplementationType::Default + && typedValue < Platform::FileDialog::ImplementationType::Count) { + cSetFileDialogType(typedValue); + } + }); + ReadBoolOption(settings, "disable_tray_counter", [&](auto v) { cSetDisableTrayCounter(v); }); diff --git a/Telegram/SourceFiles/kotato/settings.cpp b/Telegram/SourceFiles/kotato/settings.cpp index e624add1c..a730f71cd 100644 --- a/Telegram/SourceFiles/kotato/settings.cpp +++ b/Telegram/SourceFiles/kotato/settings.cpp @@ -148,6 +148,7 @@ rpl::producer RecentStickersLimitChanges() { int gUserpicCornersType = 3; bool gShowTopBarUserpic = false; bool gGtkIntegration = false; +Platform::FileDialog::ImplementationType gFileDialogType = Platform::FileDialog::ImplementationType::Default; bool gDisableTrayCounter = Platform::IsLinux(); bool gUseTelegramPanelIcon = false; int gCustomAppIcon = 0; diff --git a/Telegram/SourceFiles/kotato/settings.h b/Telegram/SourceFiles/kotato/settings.h index 3fe662ab7..fe4e9a3da 100644 --- a/Telegram/SourceFiles/kotato/settings.h +++ b/Telegram/SourceFiles/kotato/settings.h @@ -7,6 +7,8 @@ https://github.com/kotatogram/kotatogram-desktop/blob/dev/LEGAL */ #pragma once +#include "platform/platform_file_utilities.h" + #define DeclareReadSetting(Type, Name) extern Type g##Name; \ inline const Type &c##Name() { \ return g##Name; \ @@ -102,6 +104,7 @@ void SetRecentStickersLimit(int limit); DeclareSetting(int, UserpicCornersType); DeclareSetting(bool, ShowTopBarUserpic); DeclareSetting(bool, GtkIntegration); +DeclareSetting(Platform::FileDialog::ImplementationType, FileDialogType); DeclareSetting(bool, DisableTrayCounter); DeclareSetting(bool, UseTelegramPanelIcon); DeclareSetting(int, CustomAppIcon); diff --git a/Telegram/SourceFiles/kotato/settings_menu.cpp b/Telegram/SourceFiles/kotato/settings_menu.cpp index e5ec3a887..ed09bf8a8 100644 --- a/Telegram/SourceFiles/kotato/settings_menu.cpp +++ b/Telegram/SourceFiles/kotato/settings_menu.cpp @@ -41,6 +41,15 @@ namespace Settings { namespace { +QString FileDialogTypeLabel(int value) { + const auto typedValue = Platform::FileDialog::ImplementationType(value); + switch (typedValue) { + case Platform::FileDialog::ImplementationType::Default: + return tr::ktg_file_dialog_type_default(tr::now); + } + return Platform::FileDialog::ImplementationTypeLabel(typedValue); +} + QString NetBoostLabel(int boost) { switch (boost) { case 0: @@ -250,13 +259,6 @@ void SetupKotatoChats( Ui::show(Box()); }); - const QMap userpicRoundOptions = { - { 0, UserpicRoundingLabel(0) }, - { 1, UserpicRoundingLabel(1) }, - { 2, UserpicRoundingLabel(2) }, - { 3, UserpicRoundingLabel(3) } - }; - AddButtonWithLabel( container, tr::ktg_settings_userpic_rounding(), @@ -267,7 +269,8 @@ void SetupKotatoChats( tr::ktg_settings_userpic_rounding(tr::now), tr::ktg_settings_userpic_rounding_desc(tr::now), cUserpicCornersType(), - userpicRoundOptions, + 4, + UserpicRoundingLabel, [=] (int value) { cSetUserpicCornersType(value); ::Kotato::JsonSettings::Write(); @@ -389,13 +392,6 @@ void SetupKotatoNetwork(not_null container) { AddSkip(container); AddSubsectionTitle(container, tr::ktg_settings_network()); - const QMap netBoostOptions = { - { 0, NetBoostLabel(0) }, - { 1, NetBoostLabel(1) }, - { 2, NetBoostLabel(2) }, - { 3, NetBoostLabel(3) } - }; - AddButtonWithLabel( container, tr::ktg_settings_net_speed_boost(), @@ -406,7 +402,8 @@ void SetupKotatoNetwork(not_null container) { tr::ktg_net_speed_boost_title(tr::now), tr::ktg_net_speed_boost_desc(tr::now), cNetSpeedBoost(), - netBoostOptions, + 4, + NetBoostLabel, [=] (int value) { SetNetworkBoost(value); ::Kotato::JsonSettings::Write(); @@ -438,7 +435,7 @@ void SetupKotatoSystem( AddSkip(container); AddSubsectionTitle(container, tr::ktg_settings_system()); -#ifndef TDESKTOP_DISABLE_GTK_INTEGRATION +#ifndef DESKTOP_APP_DISABLE_GTK_INTEGRATION if (Platform::IsLinux()) { const auto gtkIntegrationToggled = Ui::CreateChild>( container.get()); @@ -467,7 +464,24 @@ void SetupKotatoSystem( cancelled)); }, container->lifetime()); } -#endif // !TDESKTOP_DISABLE_GTK_INTEGRATION +#endif // !DESKTOP_APP_DISABLE_GTK_INTEGRATION + + AddButtonWithLabel( + container, + tr::ktg_settings_file_dialog_type(), + rpl::single(FileDialogTypeLabel(int(cFileDialogType()))), + st::settingsButton + )->addClickHandler([=] { + Ui::show(Box<::Kotato::RadioBox>( + tr::ktg_settings_file_dialog_type(tr::now), + int(cFileDialogType()), + int(Platform::FileDialog::ImplementationType::Count), + FileDialogTypeLabel, + [=](int value) { + cSetFileDialogType(Platform::FileDialog::ImplementationType(value)); + ::Kotato::JsonSettings::Write(); + }, false)); + }); if (Platform::IsMac()) { const auto useNativeDecorationsToggled = Ui::CreateChild>( @@ -530,15 +544,6 @@ void SetupKotatoSystem( }, container->lifetime()); } - const QMap trayIconOptions = { - { 0, TrayIconLabel(0) }, - { 1, TrayIconLabel(1) }, - { 2, TrayIconLabel(2) }, - { 3, TrayIconLabel(3) }, - { 4, TrayIconLabel(4) }, - { 5, TrayIconLabel(5) }, - }; - auto trayIconText = rpl::single( rpl::empty_value() ) | rpl::then( @@ -557,7 +562,8 @@ void SetupKotatoSystem( tr::ktg_settings_tray_icon(tr::now), tr::ktg_settings_tray_icon_desc(tr::now), cCustomAppIcon(), - trayIconOptions, + 6, + TrayIconLabel, [=] (int value) { cSetCustomAppIcon(value); controller->session().data().notifyUnreadBadgeChanged(); @@ -575,12 +581,6 @@ void SetupKotatoOther(not_null container) { SettingsMenuCSwitch(ktg_settings_show_phone_number, ShowPhoneInDrawer); - const QMap chatIdOptions = { - { 0, ChatIdLabel(0) }, - { 1, ChatIdLabel(1) }, - { 2, ChatIdLabel(2) }, - }; - const auto chatIdButton = container->add( object_ptr