From 65b29ec4b83ef76628da37dc446b9711503bf150 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20M=C3=BCller?= Date: Fri, 24 Jan 2025 11:50:14 +0100 Subject: [PATCH] added option for timetable naming modes --- lib/storage/timetable/timetableSettings.dart | 8 +++++- .../timetable/timetableSettings.g.dart | 10 ++++++++ lib/theming/appTheme.dart | 17 +++++-------- lib/view/pages/timetable/timetable.dart | 13 ++++++++-- .../pages/timetable/timetableNameMode.dart | 25 +++++++++++++++++++ lib/view/settings/defaultSettings.dart | 2 ++ lib/view/settings/settings.dart | 24 ++++++++++++++++++ lib/widget/dropdownDisplay.dart | 8 ++++++ 8 files changed, 93 insertions(+), 14 deletions(-) create mode 100644 lib/view/pages/timetable/timetableNameMode.dart create mode 100644 lib/widget/dropdownDisplay.dart diff --git a/lib/storage/timetable/timetableSettings.dart b/lib/storage/timetable/timetableSettings.dart index 5242556..26c9d73 100644 --- a/lib/storage/timetable/timetableSettings.dart +++ b/lib/storage/timetable/timetableSettings.dart @@ -1,12 +1,18 @@ import 'package:json_annotation/json_annotation.dart'; +import '../../view/pages/timetable/timetableNameMode.dart'; + part 'timetableSettings.g.dart'; @JsonSerializable() class TimetableSettings { bool connectDoubleLessons; + TimetableNameMode timetableNameMode; - TimetableSettings({required this.connectDoubleLessons}); + TimetableSettings({ + required this.connectDoubleLessons, + required this.timetableNameMode + }); factory TimetableSettings.fromJson(Map json) => _$TimetableSettingsFromJson(json); Map toJson() => _$TimetableSettingsToJson(this); diff --git a/lib/storage/timetable/timetableSettings.g.dart b/lib/storage/timetable/timetableSettings.g.dart index 29c7e48..823d293 100644 --- a/lib/storage/timetable/timetableSettings.g.dart +++ b/lib/storage/timetable/timetableSettings.g.dart @@ -9,9 +9,19 @@ part of 'timetableSettings.dart'; TimetableSettings _$TimetableSettingsFromJson(Map json) => TimetableSettings( connectDoubleLessons: json['connectDoubleLessons'] as bool, + timetableNameMode: + $enumDecode(_$TimetableNameModeEnumMap, json['timetableNameMode']), ); Map _$TimetableSettingsToJson(TimetableSettings instance) => { 'connectDoubleLessons': instance.connectDoubleLessons, + 'timetableNameMode': + _$TimetableNameModeEnumMap[instance.timetableNameMode]!, }; + +const _$TimetableNameModeEnumMap = { + TimetableNameMode.name: 'name', + TimetableNameMode.longName: 'longName', + TimetableNameMode.alternateName: 'alternateName', +}; diff --git a/lib/theming/appTheme.dart b/lib/theming/appTheme.dart index bcf44f7..c122cc2 100644 --- a/lib/theming/appTheme.dart +++ b/lib/theming/appTheme.dart @@ -1,26 +1,21 @@ import 'package:flutter/material.dart'; +import '../widget/dropdownDisplay.dart'; + class AppTheme { - static ThemeModeDisplay getDisplayOptions(ThemeMode theme) { + static DropdownDisplay getDisplayOptions(ThemeMode theme) { switch(theme) { case ThemeMode.system: - return ThemeModeDisplay(icon: Icons.auto_fix_high_outlined, displayName: 'Systemvorgabe'); + return DropdownDisplay(icon: Icons.auto_fix_high_outlined, displayName: 'Systemvorgabe'); case ThemeMode.light: - return ThemeModeDisplay(icon: Icons.wb_sunny_outlined, displayName: 'Hell'); + return DropdownDisplay(icon: Icons.wb_sunny_outlined, displayName: 'Hell'); case ThemeMode.dark: - return ThemeModeDisplay(icon: Icons.dark_mode_outlined, displayName: 'Dunkel'); + return DropdownDisplay(icon: Icons.dark_mode_outlined, displayName: 'Dunkel'); } } static bool isDarkMode(BuildContext context) => Theme.of(context).brightness == Brightness.dark; } - -class ThemeModeDisplay { - final IconData icon; - final String displayName; - - ThemeModeDisplay({required this.icon, required this.displayName}); -} diff --git a/lib/view/pages/timetable/timetable.dart b/lib/view/pages/timetable/timetable.dart index dc5ffe1..327ca97 100644 --- a/lib/view/pages/timetable/timetable.dart +++ b/lib/view/pages/timetable/timetable.dart @@ -19,6 +19,7 @@ import 'customTimetableColors.dart'; import 'customTimetableEventEditDialog.dart'; import 'timeRegionComponent.dart'; import 'timetableEvents.dart'; +import 'timetableNameMode.dart'; import 'viewCustomTimetableEvents.dart'; class Timetable extends StatefulWidget { @@ -72,7 +73,6 @@ class _TimetableState extends State { title = 'Kalendereintrag hinzufügen'; icon = const Icon(Icons.add); case CalendarActions.viewEvents: - default: title = 'Kalendereinträge anzeigen'; icon = const Icon(Icons.perm_contact_calendar_outlined); } @@ -300,11 +300,20 @@ class _TimetableState extends State { try { var startTime = _parseWebuntisTimestamp(element.date, element.startTime); var endTime = _parseWebuntisTimestamp(element.date, element.endTime); + + var subject = subjects.result.firstWhere((subject) => subject.id == element.su[0].id); + var subjectName = { + TimetableNameMode.name: subject.name, + TimetableNameMode.longName: subject.longName, + TimetableNameMode.alternateName: subject.alternateName, + }[settings.val().timetableSettings.timetableNameMode]; + + return Appointment( id: ArbitraryAppointment(webuntis: element), startTime: startTime, endTime: endTime, - subject: subjects.result.firstWhere((subject) => subject.id == element.su[0].id).name, + subject: subjectName!, location: '' '${rooms.result.firstWhere((room) => room.id == element.ro[0].id).name}' '\n' diff --git a/lib/view/pages/timetable/timetableNameMode.dart b/lib/view/pages/timetable/timetableNameMode.dart new file mode 100644 index 0000000..6e4f0dd --- /dev/null +++ b/lib/view/pages/timetable/timetableNameMode.dart @@ -0,0 +1,25 @@ +import 'package:flutter/material.dart'; + +import '../../../widget/dropdownDisplay.dart'; + +enum TimetableNameMode { + name, + longName, + alternateName +} + +class TimetableNameModes { + static DropdownDisplay getDisplayOptions(TimetableNameMode theme) { + switch(theme) { + case TimetableNameMode.name: + return DropdownDisplay(icon: Icons.device_unknown_outlined, displayName: 'Name'); + + case TimetableNameMode.longName: + return DropdownDisplay(icon: Icons.perm_device_info_outlined, displayName: 'Langname'); + + case TimetableNameMode.alternateName: + return DropdownDisplay(icon: Icons.on_device_training_outlined, displayName: 'Kurzform'); + } + } +} + diff --git a/lib/view/settings/defaultSettings.dart b/lib/view/settings/defaultSettings.dart index 63a43e6..d4c43df 100644 --- a/lib/view/settings/defaultSettings.dart +++ b/lib/view/settings/defaultSettings.dart @@ -11,6 +11,7 @@ import '../../storage/notification/notificationSettings.dart'; import '../../storage/talk/talkSettings.dart'; import '../../storage/timetable/timetableSettings.dart'; import '../pages/files/files.dart'; +import '../pages/timetable/timetableNameMode.dart'; class DefaultSettings { static Settings get() => Settings( @@ -18,6 +19,7 @@ class DefaultSettings { devToolsEnabled: false, timetableSettings: TimetableSettings( connectDoubleLessons: false, + timetableNameMode: TimetableNameMode.name ), talkSettings: TalkSettings( sortFavoritesToTop: true, diff --git a/lib/view/settings/settings.dart b/lib/view/settings/settings.dart index abda9e5..09cde2e 100644 --- a/lib/view/settings/settings.dart +++ b/lib/view/settings/settings.dart @@ -14,6 +14,7 @@ import '../../theming/appTheme.dart'; import '../../widget/centeredLeading.dart'; import '../../widget/confirmDialog.dart'; import '../../widget/debug/cacheView.dart'; +import '../pages/timetable/timetableNameMode.dart'; import 'defaultSettings.dart'; import 'devToolsSettingsDialog.dart'; import 'privacyInfo.dart'; @@ -95,6 +96,29 @@ class _SettingsState extends State { const Divider(), + ListTile( + leading: const Icon(Icons.abc_outlined), + title: const Text('Fachbezeichnung'), + trailing: DropdownButton( + value: settings.val().timetableSettings.timetableNameMode, + icon: Icon(Icons.arrow_drop_down), + items: TimetableNameMode.values.map((e) => DropdownMenuItem( + value: e, + enabled: e != settings.val().timetableSettings.timetableNameMode, + child: Row( + children: [ + Icon(TimetableNameModes.getDisplayOptions(e).icon), + const SizedBox(width: 10), + Text(TimetableNameModes.getDisplayOptions(e).displayName), + ], + ), + )).toList(), + onChanged: (value) { + settings.val(write: true).timetableSettings.timetableNameMode = value!; + Provider.of(context, listen: false).run(renew: false); + }, + ) + ), ListTile( leading: const Icon(Icons.calendar_view_day_outlined), title: const Text('Doppelstunden zusammenhängend anzeigen'), diff --git a/lib/widget/dropdownDisplay.dart b/lib/widget/dropdownDisplay.dart new file mode 100644 index 0000000..1b80691 --- /dev/null +++ b/lib/widget/dropdownDisplay.dart @@ -0,0 +1,8 @@ +import 'package:flutter/material.dart'; + +class DropdownDisplay { + final IconData icon; + final String displayName; + + DropdownDisplay({required this.icon, required this.displayName}); +}