Commit 53e8b7e

derdilla <82763757+NobodyForNothing@users.noreply.github.com>
2023-10-03 14:07:47
add storage for export settings
Signed-off-by: derdilla <82763757+NobodyForNothing@users.noreply.github.com>
1 parent 998ee3c
lib/model/storage/convert_util.dart
@@ -28,6 +28,7 @@ class ConvertUtil {
   static String? parseString(dynamic value) {
     if (value is String) return value;
     if (value is int || value is double || value is bool) return value.toString();
+    // No check for Object. While this would be convertible to string,
     return null;
   }
 
lib/model/storage/export_csv_settings_store.dart
@@ -0,0 +1,55 @@
+import 'dart:convert';
+
+import 'package:blood_pressure_app/model/storage/convert_util.dart';
+import 'package:flutter/material.dart';
+
+class CsvExportSettings extends ChangeNotifier {
+  CsvExportSettings({
+    String? fieldDelimiter,
+    String? textDelimiter,
+    bool? exportHeadline
+  }) {
+    if (fieldDelimiter != null) _fieldDelimiter = fieldDelimiter;
+    if (textDelimiter != null) _textDelimiter = textDelimiter;
+    if (exportHeadline != null) _exportHeadline = exportHeadline;
+  }
+
+  factory CsvExportSettings.fromMap(Map<String, dynamic> map) => CsvExportSettings(
+      fieldDelimiter: ConvertUtil.parseString(map['fieldDelimiter']),
+      textDelimiter: ConvertUtil.parseString(map['textDelimiter']),
+      exportHeadline: ConvertUtil.parseBool(map['exportHeadline'])
+  );
+
+  factory CsvExportSettings.fromJson(String json) => CsvExportSettings.fromMap(jsonDecode(json));
+
+  Map<String, dynamic> toMap() => <String, dynamic>{
+    'fieldDelimiter': fieldDelimiter,
+    'textDelimiter': textDelimiter,
+    'exportHeadline': exportHeadline
+  };
+
+  String toJson() => jsonEncode(toMap());
+
+  String _fieldDelimiter = ',';
+  String get fieldDelimiter => _fieldDelimiter;
+  set fieldDelimiter(String value) {
+    _fieldDelimiter = value;
+    notifyListeners();
+  }
+
+  String _textDelimiter = '"';
+  String get textDelimiter => _textDelimiter;
+  set textDelimiter(String value) {
+    _textDelimiter = value;
+    notifyListeners();
+  }
+
+  bool _exportHeadline = true;
+  bool get exportHeadline => _exportHeadline;
+  set exportHeadline(bool value) {
+    _exportHeadline = value;
+    notifyListeners();
+  }
+
+  // Procedure for adding more entries described in the settings_store.dart doc comment
+}
\ No newline at end of file
lib/model/storage/export_pdf_settings_store.dart
@@ -0,0 +1,100 @@
+import 'dart:convert';
+
+import 'package:blood_pressure_app/model/storage/convert_util.dart';
+import 'package:flutter/material.dart';
+
+class PdfExportSettings extends ChangeNotifier {
+  PdfExportSettings({
+    bool? exportTitle,
+    bool? exportStatistics,
+    bool? exportData,
+    double? headerHeight,
+    double? cellHeight,
+    double? headerFontSize,
+    double? cellFontSize,
+  }) {
+    if (exportTitle != null) _exportTitle = exportTitle;
+    if (exportStatistics != null) _exportStatistics = exportStatistics;
+    if (exportData != null) _exportData = exportData;
+    if (headerHeight != null) _headerHeight = headerHeight;
+    if (cellHeight != null) _cellHeight = cellHeight;
+    if (headerFontSize != null) _headerFontSize = headerFontSize;
+    if (cellFontSize != null) _cellFontSize = cellFontSize;
+
+  }
+
+  factory PdfExportSettings.fromMap(Map<String, dynamic> map) => PdfExportSettings(
+    exportTitle: ConvertUtil.parseBool(map['exportTitle']),
+    exportStatistics: ConvertUtil.parseBool(map['exportStatistics']),
+    exportData: ConvertUtil.parseBool(map['exportData']),
+    headerHeight: ConvertUtil.parseDouble(map['headerHeight']),
+    cellHeight: ConvertUtil.parseDouble(map['cellHeight']),
+    headerFontSize: ConvertUtil.parseDouble(map['headerFontSize']),
+    cellFontSize: ConvertUtil.parseDouble(map['cellFontSize']),
+  );
+
+  factory PdfExportSettings.fromJson(String json) => PdfExportSettings.fromMap(jsonDecode(json));
+
+  Map<String, dynamic> toMap() => <String, dynamic>{
+    'exportTitle': exportTitle,
+    'exportStatistics': exportStatistics,
+    'exportData': exportData,
+    'headerHeight': headerHeight,
+    'cellHeight': cellHeight,
+    'headerFontSize': headerFontSize,
+    'cellFontSize': cellFontSize,
+  };
+
+  String toJson() => jsonEncode(toMap());
+
+  bool _exportTitle = true;
+  bool get exportTitle => _exportTitle;
+  set exportTitle(bool value) {
+    _exportTitle = value;
+    notifyListeners();
+  }
+
+  bool _exportStatistics = false;
+  bool get exportStatistics => _exportStatistics;
+  set exportStatistics(bool value) {
+    _exportStatistics = value;
+    notifyListeners();
+  }
+
+  bool _exportData = true;
+  bool get exportData => _exportData;
+  set exportData(bool value) {
+    _exportData = value;
+    notifyListeners();
+  }
+
+  double _headerHeight = 20;
+  double get headerHeight => _headerHeight;
+  set headerHeight(double value) {
+    _headerHeight = value;
+    notifyListeners();
+  }
+
+  double _cellHeight = 15;
+  double get cellHeight => _cellHeight;
+  set cellHeight(double value) {
+    _cellHeight = value;
+    notifyListeners();
+  }
+
+  double _headerFontSize = 10;
+  double get headerFontSize => _headerFontSize;
+  set headerFontSize(double value) {
+    _headerFontSize = value;
+    notifyListeners();
+  }
+
+  double _cellFontSize = 8;
+  double get cellFontSize => _cellFontSize;
+  set cellFontSize(double value) {
+    _cellFontSize = value;
+    notifyListeners();
+  }
+
+// Procedure for adding more entries described in the settings_store.dart doc comment
+}
\ No newline at end of file
lib/model/storage/export_settings_store.dart
@@ -0,0 +1,88 @@
+import 'dart:convert';
+
+import 'package:blood_pressure_app/model/storage/convert_util.dart';
+import 'package:flutter/material.dart';
+
+class ExportSettings extends ChangeNotifier {
+  ExportSettings({
+    ExportFormat? exportFormat,
+    String? defaultExportDir,
+    bool? exportAfterEveryEntry
+  }) {
+    if (exportFormat != null) _exportFormat = exportFormat;
+    if (defaultExportDir != null) _defaultExportDir = defaultExportDir;
+    if (exportAfterEveryEntry != null) _exportAfterEveryEntry = exportAfterEveryEntry;
+  }
+
+  factory ExportSettings.fromMap(Map<String, dynamic> map) => ExportSettings(
+    exportFormat: ExportFormat.deserialize(map['exportFormat']),
+    defaultExportDir: ConvertUtil.parseString(map['defaultExportDir']),
+    exportAfterEveryEntry: ConvertUtil.parseBool(map['exportAfterEveryEntry'])
+  );
+
+  factory ExportSettings.fromJson(String json) => ExportSettings.fromMap(jsonDecode(json));
+
+  Map<String, dynamic> toMap() => <String, dynamic>{
+    'exportFormat': exportFormat.serialize(),
+    'defaultExportDir': defaultExportDir,
+    'exportAfterEveryEntry': exportAfterEveryEntry
+  };
+
+  String toJson() => jsonEncode(toMap());
+
+  ExportFormat _exportFormat = ExportFormat.csv;
+  ExportFormat get exportFormat => _exportFormat;
+  set exportFormat(ExportFormat value) {
+    _exportFormat = value;
+    notifyListeners();
+  }
+
+  String _defaultExportDir = '';
+  String get defaultExportDir => _defaultExportDir;
+  set defaultExportDir(String value) {
+    _defaultExportDir = value;
+    notifyListeners();
+  }
+
+  bool _exportAfterEveryEntry = false;
+  bool get exportAfterEveryEntry => _exportAfterEveryEntry;
+  set exportAfterEveryEntry(bool value) {
+    _exportAfterEveryEntry = value;
+    notifyListeners();
+  }
+
+}
+
+enum ExportFormat {
+  csv,
+  pdf,
+  db;
+
+  int serialize() {
+    switch(this) {
+      case ExportFormat.csv:
+        return 0;
+      case ExportFormat.pdf:
+        return 1;
+      case ExportFormat.db:
+        return 2;
+    }
+  }
+
+  factory ExportFormat.deserialize(dynamic value) {
+    int? intValue = ConvertUtil.parseInt(value);
+    if (value == null || intValue == null) return ExportFormat.csv;
+
+    switch(intValue) {
+      case 0:
+        return ExportFormat.csv;
+      case 1:
+        return ExportFormat.pdf;
+      case 2:
+        return ExportFormat.db;
+      default:
+        assert(false);
+        return ExportFormat.csv;
+    }
+  }
+}
\ No newline at end of file