From 1e15a91a488776ba52569bdf0a0fc9d8d109ab95 Mon Sep 17 00:00:00 2001 From: Mohammad Zolfaghari Date: Fri, 17 Nov 2023 21:21:10 +0330 Subject: [PATCH] feat: rtl toolbar item setting --- .../document/presentation/editor_page.dart | 8 +++--- .../settings/appearance/appearance_cubit.dart | 10 ++++++++ .../direction_setting.dart | 25 +++++++++++++++++++ .../widgets/settings_appearance_view.dart | 1 + frontend/resources/translations/en.json | 3 ++- .../flowy-user/src/entities/user_setting.rs | 6 +++++ 6 files changed, 49 insertions(+), 4 deletions(-) diff --git a/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_page.dart b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_page.dart index 39950200072b1..5bd8befaa6212 100644 --- a/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_page.dart +++ b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_page.dart @@ -223,7 +223,9 @@ class _AppFlowyEditorPageState extends State { LayoutDirection.rtlLayout; final textDirection = isRTL ? TextDirection.rtl : TextDirection.ltr; - _setRTLToolbarItems(isRTL); + _setRTLToolbarItems( + context.read().state.enableRtlToolbarItems, + ); final editorScrollController = EditorScrollController( editorState: widget.editorState, @@ -406,14 +408,14 @@ class _AppFlowyEditorPageState extends State { ); } - void _setRTLToolbarItems(bool isRTL) { + void _setRTLToolbarItems(bool enableRtlToolbarItems) { final textDirectionItemIds = textDirectionItems.map((e) => e.id); // clear all the text direction items toolbarItems.removeWhere( (item) => textDirectionItemIds.contains(item.id), ); // only show the rtl item when the layout direction is ltr. - if (isRTL) { + if (enableRtlToolbarItems) { toolbarItems.addAll(textDirectionItems); } } diff --git a/frontend/appflowy_flutter/lib/workspace/application/settings/appearance/appearance_cubit.dart b/frontend/appflowy_flutter/lib/workspace/application/settings/appearance/appearance_cubit.dart index fdf452cfc8a53..1c409e03417b6 100644 --- a/frontend/appflowy_flutter/lib/workspace/application/settings/appearance/appearance_cubit.dart +++ b/frontend/appflowy_flutter/lib/workspace/application/settings/appearance/appearance_cubit.dart @@ -47,6 +47,7 @@ class AppearanceSettingsCubit extends Cubit { appearanceSettings.monospaceFont, appearanceSettings.layoutDirection, appearanceSettings.textDirection, + appearanceSettings.enableRtlToolbarItems, appearanceSettings.locale, appearanceSettings.isMenuCollapsed, appearanceSettings.menuOffset, @@ -100,6 +101,12 @@ class AppearanceSettingsCubit extends Cubit { emit(state.copyWith(textDirection: textDirection)); } + void setEnableRTLToolbarItems(bool value) { + _appearanceSettings.enableRtlToolbarItems = value; + _saveAppearanceSettings(); + emit(state.copyWith(enableRtlToolbarItems: value)); + } + /// Update selected font in the user's settings and emit an updated state /// with the font name. void setFontFamily(String fontFamilyName) { @@ -307,6 +314,7 @@ class AppearanceSettingsState with _$AppearanceSettingsState { required String monospaceFont, required LayoutDirection layoutDirection, required AppFlowyTextDirection? textDirection, + required bool enableRtlToolbarItems, required Locale locale, required bool isMenuCollapsed, required double menuOffset, @@ -322,6 +330,7 @@ class AppearanceSettingsState with _$AppearanceSettingsState { String monospaceFont, LayoutDirectionPB layoutDirectionPB, TextDirectionPB? textDirectionPB, + bool enableRtlToolbarItems, LocaleSettingsPB localePB, bool isMenuCollapsed, double menuOffset, @@ -335,6 +344,7 @@ class AppearanceSettingsState with _$AppearanceSettingsState { monospaceFont: monospaceFont, layoutDirection: LayoutDirection.fromLayoutDirectionPB(layoutDirectionPB), textDirection: AppFlowyTextDirection.fromTextDirectionPB(textDirectionPB), + enableRtlToolbarItems: enableRtlToolbarItems, themeMode: _themeModeFromPB(themeModePB), locale: Locale(localePB.languageCode, localePB.countryCode), isMenuCollapsed: isMenuCollapsed, diff --git a/frontend/appflowy_flutter/lib/workspace/presentation/settings/widgets/settings_appearance/direction_setting.dart b/frontend/appflowy_flutter/lib/workspace/presentation/settings/widgets/settings_appearance/direction_setting.dart index 561b6dc5553e9..50a250b0080e5 100644 --- a/frontend/appflowy_flutter/lib/workspace/presentation/settings/widgets/settings_appearance/direction_setting.dart +++ b/frontend/appflowy_flutter/lib/workspace/presentation/settings/widgets/settings_appearance/direction_setting.dart @@ -141,3 +141,28 @@ class TextDirectionSetting extends StatelessWidget { } } } + +class EnableRTLToolbarItemsSetting extends StatelessWidget { + const EnableRTLToolbarItemsSetting({ + super.key, + }); + + @override + Widget build(BuildContext context) { + return ThemeSettingEntryTemplateWidget( + label: LocaleKeys.settings_appearance_enableRTLToolbarItems.tr(), + trailing: [ + Switch( + value: context.read().state.enableRtlToolbarItems, + splashRadius: 0, + activeColor: Theme.of(context).colorScheme.primary, + onChanged: (value) { + context + .read() + .setEnableRTLToolbarItems(value); + }, + ), + ], + ); + } +} diff --git a/frontend/appflowy_flutter/lib/workspace/presentation/settings/widgets/settings_appearance_view.dart b/frontend/appflowy_flutter/lib/workspace/presentation/settings/widgets/settings_appearance_view.dart index bcc840a09b781..d0e54798471a9 100644 --- a/frontend/appflowy_flutter/lib/workspace/presentation/settings/widgets/settings_appearance_view.dart +++ b/frontend/appflowy_flutter/lib/workspace/presentation/settings/widgets/settings_appearance_view.dart @@ -39,6 +39,7 @@ class SettingsAppearanceView extends StatelessWidget { TextDirectionSetting( currentTextDirection: state.textDirection, ), + EnableRTLToolbarItemsSetting(), const Divider(), DateFormatSetting( currentFormat: state.dateFormat, diff --git a/frontend/resources/translations/en.json b/frontend/resources/translations/en.json index c2907a82de30f..faaa2fc8a48c2 100644 --- a/frontend/resources/translations/en.json +++ b/frontend/resources/translations/en.json @@ -333,7 +333,8 @@ "twelveHour": "Twelve hour", "twentyFourHour": "Twenty four hour" }, - "showNamingDialogWhenCreatingPage": "Show naming dialog when creating a page" + "showNamingDialogWhenCreatingPage": "Show naming dialog when creating a page", + "enableRTLToolbarItems": "Enable RTL toolbar items" }, "files": { "copy": "Copy", diff --git a/frontend/rust-lib/flowy-user/src/entities/user_setting.rs b/frontend/rust-lib/flowy-user/src/entities/user_setting.rs index 810bcba00bff5..1909c0561b87f 100644 --- a/frontend/rust-lib/flowy-user/src/entities/user_setting.rs +++ b/frontend/rust-lib/flowy-user/src/entities/user_setting.rs @@ -64,6 +64,10 @@ pub struct AppearanceSettingsPB { #[pb(index = 11)] #[serde(default)] pub text_direction: TextDirectionPB, + + #[pb(index = 12)] + #[serde(default)] + pub enable_rtl_toolbar_items: bool, } const DEFAULT_RESET_VALUE: fn() -> bool = || APPEARANCE_RESET_AS_DEFAULT; @@ -116,6 +120,7 @@ pub const APPEARANCE_DEFAULT_MONOSPACE_FONT: &str = "SF Mono"; const APPEARANCE_RESET_AS_DEFAULT: bool = true; const APPEARANCE_DEFAULT_IS_MENU_COLLAPSED: bool = false; const APPEARANCE_DEFAULT_MENU_OFFSET: f64 = 0.0; +const APPEARANCE_DEFAULT_ENABLE_RTL_TOOLBAR_ITEMS: bool = false; impl std::default::Default for AppearanceSettingsPB { fn default() -> Self { @@ -131,6 +136,7 @@ impl std::default::Default for AppearanceSettingsPB { menu_offset: APPEARANCE_DEFAULT_MENU_OFFSET, layout_direction: LayoutDirectionPB::default(), text_direction: TextDirectionPB::default(), + enable_rtl_toolbar_items: APPEARANCE_DEFAULT_ENABLE_RTL_TOOLBAR_ITEMS, } } }