From 069a006cdfa1b7a80399896017aaf229d19c9442 Mon Sep 17 00:00:00 2001 From: Aggelos Tselios Date: Thu, 21 Dec 2023 23:01:22 +0200 Subject: [PATCH] Initial Commit --- .github/workflows/flutter.yml | 23 + .gitignore | 51 ++ .metadata | 45 ++ .vscode/settings.json | 7 + LICENSE | 674 +++++++++++++++++ README.md | 30 + analysis_options.yaml | 28 + android/.gitignore | 13 + android/app/build.gradle | 67 ++ android/app/src/debug/AndroidManifest.xml | 7 + android/app/src/main/AndroidManifest.xml | 33 + .../kotlin/com/example/fltext/MainActivity.kt | 6 + .../res/drawable-v21/launch_background.xml | 12 + .../main/res/drawable/launch_background.xml | 12 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2560 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1546 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3808 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6993 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 10398 bytes .../app/src/main/res/values-night/styles.xml | 18 + android/app/src/main/res/values/styles.xml | 18 + android/app/src/profile/AndroidManifest.xml | 7 + android/build.gradle | 31 + android/gradle.properties | 3 + .../gradle/wrapper/gradle-wrapper.properties | 5 + android/settings.gradle | 25 + assets/logo.png | Bin 0 -> 32886 bytes assets/screenshots/1.png | Bin 0 -> 36628 bytes assets/screenshots/2.png | Bin 0 -> 53688 bytes data/README.txt | 1 + data/flathub.json | 6 + data/io.tseli0s.FlText.desktop | 8 + data/io.tseli0s.FlText.json | 64 ++ data/io.tseli0s.FlText.metainfo.xml | 41 ++ data/logo.png | Bin 0 -> 32886 bytes ios/.gitignore | 34 + ios/Flutter/AppFrameworkInfo.plist | 26 + ios/Flutter/Debug.xcconfig | 1 + ios/Flutter/Release.xcconfig | 1 + ios/Runner.xcodeproj/project.pbxproj | 614 ++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 98 +++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + ios/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 122 +++ .../Icon-App-1024x1024@1x.png | Bin 0 -> 67636 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 606 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 0 -> 1278 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 0 -> 1961 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 0 -> 863 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 0 -> 1760 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 0 -> 3172 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 0 -> 1278 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 0 -> 2913 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 0 -> 5006 bytes .../AppIcon.appiconset/Icon-App-50x50@1x.png | Bin 0 -> 1516 bytes .../AppIcon.appiconset/Icon-App-50x50@2x.png | Bin 0 -> 3832 bytes .../AppIcon.appiconset/Icon-App-57x57@1x.png | Bin 0 -> 1686 bytes .../AppIcon.appiconset/Icon-App-57x57@2x.png | Bin 0 -> 4931 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 0 -> 5006 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 0 -> 9250 bytes .../AppIcon.appiconset/Icon-App-72x72@1x.png | Bin 0 -> 2560 bytes .../AppIcon.appiconset/Icon-App-72x72@2x.png | Bin 0 -> 6993 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 0 -> 2723 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 0 -> 7376 bytes .../Icon-App-83.5x83.5@2x.png | Bin 0 -> 8037 bytes .../LaunchImage.imageset/Contents.json | 23 + .../LaunchImage.imageset/LaunchImage.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/README.md | 5 + ios/Runner/Base.lproj/LaunchScreen.storyboard | 37 + ios/Runner/Base.lproj/Main.storyboard | 26 + ios/Runner/Info.plist | 49 ++ ios/Runner/Runner-Bridging-Header.h | 1 + ios/RunnerTests/RunnerTests.swift | 12 + l10n.yaml | 3 + lib/config.dart | 69 ++ lib/custom_text_styles.dart | 38 + lib/l10n/app_el.arb | 42 ++ lib/l10n/app_en.arb | 42 ++ lib/l10n/app_es.arb | 42 ++ lib/l10n/app_ru.arb | 42 ++ lib/main.dart | 314 ++++++++ lib/multiline_text_input.dart | 43 ++ lib/settings_screen.dart | 67 ++ lib/single_line_input.dart | 49 ++ lib/text_edit.dart | 167 +++++ lib/utils.dart | 97 +++ linux/.gitignore | 1 + linux/CMakeLists.txt | 145 ++++ linux/flutter/CMakeLists.txt | 88 +++ linux/flutter/generated_plugin_registrant.cc | 19 + linux/flutter/generated_plugin_registrant.h | 15 + linux/flutter/generated_plugins.cmake | 25 + linux/main.cc | 6 + linux/my_application.cc | 124 ++++ linux/my_application.h | 18 + macos/.gitignore | 7 + macos/Flutter/Flutter-Debug.xcconfig | 1 + macos/Flutter/Flutter-Release.xcconfig | 1 + macos/Flutter/GeneratedPluginRegistrant.swift | 18 + macos/Runner.xcodeproj/project.pbxproj | 695 ++++++++++++++++++ .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 98 +++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + macos/Runner/AppDelegate.swift | 9 + .../AppIcon.appiconset/Contents.json | 68 ++ .../AppIcon.appiconset/app_icon_1024.png | Bin 0 -> 67636 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 0 -> 5119 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 0 -> 510 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 0 -> 11252 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 0 -> 1091 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 0 -> 29421 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 0 -> 2057 bytes macos/Runner/Base.lproj/MainMenu.xib | 343 +++++++++ macos/Runner/Configs/AppInfo.xcconfig | 14 + macos/Runner/Configs/Debug.xcconfig | 2 + macos/Runner/Configs/Release.xcconfig | 2 + macos/Runner/Configs/Warnings.xcconfig | 13 + macos/Runner/DebugProfile.entitlements | 12 + macos/Runner/Info.plist | 32 + macos/Runner/MainFlutterWindow.swift | 15 + macos/Runner/Release.entitlements | 8 + macos/RunnerTests/RunnerTests.swift | 12 + pubspec.lock | 615 ++++++++++++++++ pubspec.yaml | 45 ++ scripts/build-flatpak.sh | 36 + scripts/clean-all.sh | 4 + web/favicon.png | Bin 0 -> 510 bytes web/icons/Icon-192.png | Bin 0 -> 10398 bytes web/icons/Icon-512.png | Bin 0 -> 29421 bytes web/icons/Icon-maskable-192.png | Bin 0 -> 10398 bytes web/icons/Icon-maskable-512.png | Bin 0 -> 29421 bytes web/index.html | 59 ++ web/manifest.json | 35 + windows/.gitignore | 17 + windows/CMakeLists.txt | 108 +++ windows/flutter/CMakeLists.txt | 109 +++ .../flutter/generated_plugin_registrant.cc | 17 + windows/flutter/generated_plugin_registrant.h | 15 + windows/flutter/generated_plugins.cmake | 25 + windows/runner/CMakeLists.txt | 40 + windows/runner/Runner.rc | 121 +++ windows/runner/flutter_window.cpp | 71 ++ windows/runner/flutter_window.h | 33 + windows/runner/main.cpp | 43 ++ windows/runner/resource.h | 16 + windows/runner/resources/app_icon.ico | Bin 0 -> 1568 bytes windows/runner/runner.exe.manifest | 20 + windows/runner/utils.cpp | 65 ++ windows/runner/utils.h | 19 + windows/runner/win32_window.cpp | 288 ++++++++ windows/runner/win32_window.h | 102 +++ 159 files changed, 7075 insertions(+) create mode 100644 .github/workflows/flutter.yml create mode 100644 .gitignore create mode 100644 .metadata create mode 100644 .vscode/settings.json create mode 100644 LICENSE create mode 100644 README.md create mode 100644 analysis_options.yaml create mode 100644 android/.gitignore create mode 100644 android/app/build.gradle create mode 100644 android/app/src/debug/AndroidManifest.xml create mode 100644 android/app/src/main/AndroidManifest.xml create mode 100644 android/app/src/main/kotlin/com/example/fltext/MainActivity.kt create mode 100644 android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 android/app/src/main/res/drawable/launch_background.xml create mode 100644 android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 android/app/src/main/res/values-night/styles.xml create mode 100644 android/app/src/main/res/values/styles.xml create mode 100644 android/app/src/profile/AndroidManifest.xml create mode 100644 android/build.gradle create mode 100644 android/gradle.properties create mode 100644 android/gradle/wrapper/gradle-wrapper.properties create mode 100644 android/settings.gradle create mode 100644 assets/logo.png create mode 100644 assets/screenshots/1.png create mode 100644 assets/screenshots/2.png create mode 100644 data/README.txt create mode 100644 data/flathub.json create mode 100644 data/io.tseli0s.FlText.desktop create mode 100644 data/io.tseli0s.FlText.json create mode 100644 data/io.tseli0s.FlText.metainfo.xml create mode 100644 data/logo.png create mode 100644 ios/.gitignore create mode 100644 ios/Flutter/AppFrameworkInfo.plist create mode 100644 ios/Flutter/Debug.xcconfig create mode 100644 ios/Flutter/Release.xcconfig create mode 100644 ios/Runner.xcodeproj/project.pbxproj create mode 100644 ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 ios/Runner/AppDelegate.swift create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 ios/Runner/Base.lproj/Main.storyboard create mode 100644 ios/Runner/Info.plist create mode 100644 ios/Runner/Runner-Bridging-Header.h create mode 100644 ios/RunnerTests/RunnerTests.swift create mode 100644 l10n.yaml create mode 100644 lib/config.dart create mode 100644 lib/custom_text_styles.dart create mode 100644 lib/l10n/app_el.arb create mode 100644 lib/l10n/app_en.arb create mode 100644 lib/l10n/app_es.arb create mode 100644 lib/l10n/app_ru.arb create mode 100644 lib/main.dart create mode 100644 lib/multiline_text_input.dart create mode 100644 lib/settings_screen.dart create mode 100644 lib/single_line_input.dart create mode 100644 lib/text_edit.dart create mode 100644 lib/utils.dart create mode 100644 linux/.gitignore create mode 100644 linux/CMakeLists.txt create mode 100644 linux/flutter/CMakeLists.txt create mode 100644 linux/flutter/generated_plugin_registrant.cc create mode 100644 linux/flutter/generated_plugin_registrant.h create mode 100644 linux/flutter/generated_plugins.cmake create mode 100644 linux/main.cc create mode 100644 linux/my_application.cc create mode 100644 linux/my_application.h create mode 100644 macos/.gitignore create mode 100644 macos/Flutter/Flutter-Debug.xcconfig create mode 100644 macos/Flutter/Flutter-Release.xcconfig create mode 100644 macos/Flutter/GeneratedPluginRegistrant.swift create mode 100644 macos/Runner.xcodeproj/project.pbxproj create mode 100644 macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 macos/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 macos/Runner/AppDelegate.swift create mode 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png create mode 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png create mode 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png create mode 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png create mode 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png create mode 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png create mode 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png create mode 100644 macos/Runner/Base.lproj/MainMenu.xib create mode 100644 macos/Runner/Configs/AppInfo.xcconfig create mode 100644 macos/Runner/Configs/Debug.xcconfig create mode 100644 macos/Runner/Configs/Release.xcconfig create mode 100644 macos/Runner/Configs/Warnings.xcconfig create mode 100644 macos/Runner/DebugProfile.entitlements create mode 100644 macos/Runner/Info.plist create mode 100644 macos/Runner/MainFlutterWindow.swift create mode 100644 macos/Runner/Release.entitlements create mode 100644 macos/RunnerTests/RunnerTests.swift create mode 100644 pubspec.lock create mode 100644 pubspec.yaml create mode 100755 scripts/build-flatpak.sh create mode 100755 scripts/clean-all.sh create mode 100644 web/favicon.png create mode 100644 web/icons/Icon-192.png create mode 100644 web/icons/Icon-512.png create mode 100644 web/icons/Icon-maskable-192.png create mode 100644 web/icons/Icon-maskable-512.png create mode 100644 web/index.html create mode 100644 web/manifest.json create mode 100644 windows/.gitignore create mode 100644 windows/CMakeLists.txt create mode 100644 windows/flutter/CMakeLists.txt create mode 100644 windows/flutter/generated_plugin_registrant.cc create mode 100644 windows/flutter/generated_plugin_registrant.h create mode 100644 windows/flutter/generated_plugins.cmake create mode 100644 windows/runner/CMakeLists.txt create mode 100644 windows/runner/Runner.rc create mode 100644 windows/runner/flutter_window.cpp create mode 100644 windows/runner/flutter_window.h create mode 100644 windows/runner/main.cpp create mode 100644 windows/runner/resource.h create mode 100644 windows/runner/resources/app_icon.ico create mode 100644 windows/runner/runner.exe.manifest create mode 100644 windows/runner/utils.cpp create mode 100644 windows/runner/utils.h create mode 100644 windows/runner/win32_window.cpp create mode 100644 windows/runner/win32_window.h diff --git a/.github/workflows/flutter.yml b/.github/workflows/flutter.yml new file mode 100644 index 0000000..e901627 --- /dev/null +++ b/.github/workflows/flutter.yml @@ -0,0 +1,23 @@ +name: Build / Testing + +on: + push: + branches: [ "master" ] + pull_request: + branches: [ "master" ] + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - uses: subosito/flutter-action@v2.12.0 + with: + channel: beta # Puts some pressure on us to support future versions easily + cache: true + - run: sudo apt-get update -y && sudo apt-get install -y ninja-build libgtk-3-dev + - run: flutter config --enable-linux-desktop + - run: flutter build linux + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9a9665b --- /dev/null +++ b/.gitignore @@ -0,0 +1,51 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.pub-cache/ +.pub/ +/build/ + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release + +# Flatpak stuff +/.flatpak +/.flatpak-builder +repo +data/data +data/lib +data/fltext \ No newline at end of file diff --git a/.metadata b/.metadata new file mode 100644 index 0000000..18f662f --- /dev/null +++ b/.metadata @@ -0,0 +1,45 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled and should not be manually edited. + +version: + revision: "e33d4b86270e3c012ba13d68d6e90f2eabc4912b" + channel: "master" + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: e33d4b86270e3c012ba13d68d6e90f2eabc4912b + base_revision: e33d4b86270e3c012ba13d68d6e90f2eabc4912b + - platform: android + create_revision: e33d4b86270e3c012ba13d68d6e90f2eabc4912b + base_revision: e33d4b86270e3c012ba13d68d6e90f2eabc4912b + - platform: ios + create_revision: e33d4b86270e3c012ba13d68d6e90f2eabc4912b + base_revision: e33d4b86270e3c012ba13d68d6e90f2eabc4912b + - platform: linux + create_revision: e33d4b86270e3c012ba13d68d6e90f2eabc4912b + base_revision: e33d4b86270e3c012ba13d68d6e90f2eabc4912b + - platform: macos + create_revision: e33d4b86270e3c012ba13d68d6e90f2eabc4912b + base_revision: e33d4b86270e3c012ba13d68d6e90f2eabc4912b + - platform: web + create_revision: e33d4b86270e3c012ba13d68d6e90f2eabc4912b + base_revision: e33d4b86270e3c012ba13d68d6e90f2eabc4912b + - platform: windows + create_revision: e33d4b86270e3c012ba13d68d6e90f2eabc4912b + base_revision: e33d4b86270e3c012ba13d68d6e90f2eabc4912b + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..20137b7 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,7 @@ +{ + "files.watcherExclude": { + "**/.dart_tool": true, + ".flatpak/**": true, + "_build/**": true + } +} \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..f288702 --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/README.md b/README.md new file mode 100644 index 0000000..bb3ab61 --- /dev/null +++ b/README.md @@ -0,0 +1,30 @@ +
+

FlText

+ +
+ + + +
+ + +A text edittor written using [Dart/Flutter](https://flutter.dev). I wrote it so I can exercise my Flutter skills with something I could actually use in my everyday life. It supports almost all languages and scripts in its encoding, has only a handful of dependencies, looks beautiful and runs on just about anything: **Windows, macOS, Linux, Android, iOS and the [Web\*](https://tseli0s.github.io/fltext.web).** + +
+ + Actually, it doesn't run very well on the web (You can't open or save a file, just use it as a temporary notepad). But there will be patches in the future to make it work as much as possible. Thanks for your understanding :) + +
+ +The text editor is localized in the following languages: 🏴󠁧󠁢󠁥󠁮󠁧󠁿🇬🇷🇷🇺🇪🇸. You can also help translate this application, so if you speak another language, feel free to drop a PR! + +# Installation +To build from source (The only reliable way so far), you must install **Flutter** and build from the command line for the platform you are targeting accordingly. Prebuilt packages aren't yet available, but they will be once the application is ready to be used. + +Android and Linux packages will be provided at the [Releases page](https://github.com/tseli0s/FlText/releases). For other platforms, no direct package will be provided; You are free to build one and distribute it freely, assuming you comply with the [license](./LICENSE). + +You can also (sort-of) try it online without installing anything. Head to the [web version](https://tseli0s.github.io/fltext.web) to run a sample version. + +# Screenshots +![Startup Window](./assets/screenshots/1.png) +![Text Editor Interface](./assets/screenshots/2.png) \ No newline at end of file diff --git a/analysis_options.yaml b/analysis_options.yaml new file mode 100644 index 0000000..0d29021 --- /dev/null +++ b/analysis_options.yaml @@ -0,0 +1,28 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at https://dart.dev/lints. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/android/.gitignore b/android/.gitignore new file mode 100644 index 0000000..6f56801 --- /dev/null +++ b/android/.gitignore @@ -0,0 +1,13 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java + +# Remember to never publicly share your keystore. +# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app +key.properties +**/*.keystore +**/*.jks diff --git a/android/app/build.gradle b/android/app/build.gradle new file mode 100644 index 0000000..51fbbab --- /dev/null +++ b/android/app/build.gradle @@ -0,0 +1,67 @@ +plugins { + id "com.android.application" + id "kotlin-android" + id "dev.flutter.flutter-gradle-plugin" +} + +def localProperties = new Properties() +def localPropertiesFile = rootProject.file('local.properties') +if (localPropertiesFile.exists()) { + localPropertiesFile.withReader('UTF-8') { reader -> + localProperties.load(reader) + } +} + +def flutterVersionCode = localProperties.getProperty('flutter.versionCode') +if (flutterVersionCode == null) { + flutterVersionCode = '1' +} + +def flutterVersionName = localProperties.getProperty('flutter.versionName') +if (flutterVersionName == null) { + flutterVersionName = '1.0' +} + +android { + namespace "com.example.fltext" + compileSdk flutter.compileSdkVersion + ndkVersion flutter.ndkVersion + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = '1.8' + } + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId "com.example.fltext" + // You can update the following values to match your application needs. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. + minSdkVersion flutter.minSdkVersion + targetSdkVersion flutter.targetSdkVersion + versionCode flutterVersionCode.toInteger() + versionName flutterVersionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig signingConfigs.debug + } + } +} + +flutter { + source '../..' +} + +dependencies {} diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000..399f698 --- /dev/null +++ b/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..6c784de --- /dev/null +++ b/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + diff --git a/android/app/src/main/kotlin/com/example/fltext/MainActivity.kt b/android/app/src/main/kotlin/com/example/fltext/MainActivity.kt new file mode 100644 index 0000000..f4ad78b --- /dev/null +++ b/android/app/src/main/kotlin/com/example/fltext/MainActivity.kt @@ -0,0 +1,6 @@ +package com.example.fltext + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() { +} diff --git a/android/app/src/main/res/drawable-v21/launch_background.xml b/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 0000000..f74085f --- /dev/null +++ b/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/android/app/src/main/res/drawable/launch_background.xml b/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 0000000..304732f --- /dev/null +++ b/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..297ee005bf4713ed232af4cb2cc632303050e754 GIT binary patch literal 2560 zcmaLZ`6Ck!9|!Qw9kFkYjoiLDB9jui#tPZw%GF#shh$=IxvI@Z&T{0I=7>p2QplYv z=FWW#+w&M@`$mL4J^#S>htK=<%loJIPamR<)eS-Zv-|)6KoDVWa_f)g|35ySKk2aD zc;gQeVWzjk?1Ir@k)ENxfXK*5XaFV<>+N~p7aAPuSGZ$v763T)0$~ETj{XEOiPOe-(UtXa5N^josg>M#ErCDdH|oE~!w^6W>sID^LW%MO z`8ee7B1!X9uetE)67&isc7hlY8MT*_b||uZGB^vVnzBqwl`wl^I7`3I3eIn`cg^Pp zT#W%&cI}DFFnW;l{%hTx>`cXIpC;~gZ*F>&F%g5rbd}63I%QibxO%obj4#l}b%%m% zVDpoKbO~vewc9c`Plug`D|^cNv-I3V#{qm!ro_couV&R% zQ?L-JIN~3HuWml9?AoeD#nzAMF`GI(BExf?W4gcBj2AW?*A_OhU5|UlyQaVJX9mFU zU)Wr2iZ);$k9N$HeRlRfB`kDX-&rtGF#Ay`%QE~-!W#WP4%)YL^FTOq>Yz;~G6#n% zrk1)@vRz9a+&|txgxjIvm11y%)&N_cFt;y`Ef(rN9vE-HB3WiGmTWkEVw3k2E&|O% z`tG(gRqc+Om5%JJtTDCket6WjDP0!XZ}r{qWI%vjY=6Z!IGbQ=Rja5_sv$!)f+wu}t z<9^rm=Iulho`K46b2dRk(KJ(b%IY~FR{I@z zX*%}gLDvqoKAwLoH_%HEf5f>@)+og)J{djo;@sbIPh0@gqePpOBOmtYSa>`Khvix4 zg=!_*CKd!}R_2E90$cUc&?y)CEyv$7U$?n^(WXjgZ7-3-E*OQCHZP1TtiL%AT-MDS z^f1r%4?l<#Hy(~TZHu!>j49R2NU*Lbyd)5s4R6U+_|+Y#|7%|IQ$&Dg4o?zPTdD37 zez+|Z%)ajl2tpq;nW1Q_;+Wy8v0}5!zMe}th);aC({0jG{jvVrk69$q*S&PvV(9kd z$F3BgwOqG!;5&jkkn$j9Tx+VbfJ)`KGO4CE(E<^{5nqUAt1JJtK>d)h4iz@O!|qaT z-|fA;_hCZk$9f}X(G{xPPPiF=Du@5hoe@sG5P&lVnBm^HT;*UX&5QWy*fv{*anNp> z4U+1ToXw|C-mGs!g@j}%wj~w*bG($UOdFTm)jBH;b1w%>1&B)a^?bl}=3I{QbzYnd z$ut>ne!sulUHW+kW6@E(B8bmosN$@e?A!Ui`$@sq{6?Xb*#kv=cu^`=D8>cQBi!SY1NIAy zr>fulySce3iASiXw@|FVj=i$T8 z3Mt7qR3|T)#^w77_iJ|I{C=QlaS+ZT(}p0Rjpo*7scD~4TERrTtz4De*P&G974eoC zDpL({o5yW&W9CBZel-tSSF^H1nlbY$kHjO}1YR%XJn-p+>cXF;_CBR}>xSWYH4|T< zt{!1M%HTjI8KW$U(-7))0Pw9sAyON4jV(Cg|4OIh&5UwYu1Y#SG}l>I4PxwpqLb?Q z&V_r%pL;6Qk5}xI`5r11;-YrYD}47wo97j}`pLjpPqYnruD*T{KZ%b{)iV>#b;G#c z&f}A)Fut6KA##n~qf8u_nLV*Qsrl1FT9FE9YuDewa5R467cZby=TS#dUjAH#T4(wzVCF+3aQ2tbcQnF-tYzbVk@=~cb9i#1n$8bddn6K zZ=K{*=``%qLOdJNfX<&<^TI0=!R(j6I~o}8g1`C|kPHY$BPw4$sCODQO9*Z;V>NkO z54!l@_e$EM4X-OKl|5ux*V?}Md`@^$`ML44&`gF%g>P~~XjIWN;|ZQq#)4T^iT z9|bw`=6L6nv;c9!Wga?>*1Llqe1gDzzx2DHcL(MqlOKIhgD+&C^}(6R=78C0nZD#k zvCX)I_BBZPk@)O$X0yS=wg~Q-f&>o76muD|5Q4Dktm(&B@|tC_JGNV6IG2>z;oMZ9 z3=8Z9tD}9fE)UPgP8U#Oc(kS!4X^~*`;fG(pOR$Nw1_&;Oa>Inb< literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..7399cc569b76b3b79b583825f8f9a0bd84877c95 GIT binary patch literal 1546 zcmV+l2KD)gP)zTQC?#%hl{q8yEUV9};!s9I7K`ZcYaMtz#|MlOy4quS{}(x&ojrh+$C@Rg39GV(80) z*^AL6t(!$e%(Z@nkMSeQa`=7@Zv?_)`4b~Y);uhGumBVtwA3RO@**1YS**8SZXxJr zk%;(Ft_$GXq5=?%UiuZ{rJ7MHVi6Z-S1w(g#ig&`otd6_`NR(g3P4s~0YKk(rblt^ z^r+FslC|Ev@C!~(rEuZQGx*@kC0zX@-(ztCWEwq*N-!KpkUvgf?@?Xdc-2dz!+-BZ zCx;_I07Ox-rVi%AFBWh&S64=$Tx}Wkk|@EPDB7}zDl@64aqGcJj3gwao-HEle}Ji6 z;r2u(wSM3L6ys}3>586uE{*5MIW$@#vMWpKO)6A6wOZUfZxlMwq3z|+6bML^LFtJU zkWOJ{7(eY*C+8zzD5WaOMSSphSk(BA3d)4GFICrvK^Y1W9kTb zfuCIgAeoes4>D~&zOsn9m94H@>=~hc#k(T&f4#;)cKe|?Pz?abioo$PmjLLBsb;oO z6kUp)e`^eHPajiU?&WXq;J1YmdM9uwnn0cu9*P3RxZ3n&1DoR+WL*KEPEK_a|Crq% z+6c%M8WsSzR?GPGyE`zVFa6{Sd_SG!mj^jicwjUMY(~_&*Fw1N^I*@*#C^ws8}oVG zSlF~gV!15b+rr}gicM6u#sIm#&Tz_kCI(~)K!EuFY7*C+=(CSGAWveO2)PZ?ESvEjzu`0MsXFG$N(ELwP)y23DShKU6OrI zVx!p6Nx8WPhe_maO>YVUJt|GszfAyGIuGOu)S7S)fDXbcJ6XIRoZLGai7WhMZ(fg|hBQHeGwE6s2Ar6qe2$8$g=FT^lb3#p`B`UGR5Ejd70$0%Z&*keV zG-{S?))fHVRKmtZ+6J|L@q{yI&`NVMrX_IHFR-?5dag6sXDT5}H@E2qHM_#p?W?9K5wHlVflZfHDHQr7U8f zo!ZeUe6NY-kXN}5Q8;E-3W^sq-r**NY!~X5cGw!RTTKi3iUeP&gJ52u?6a*^7I7Q$HfY-zF)&;y>u(Cxo!qMMd1CU9EtC!!K we&0zSx8?u!56yp34gm~W4gm~W9(w@)0RClt&SQvcQUCw|07*qoM6N<$f-?ox9{>OV literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..02d0356295e9eeb97880489c264610d37dd8ccd2 GIT binary patch literal 3808 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..b2d122cc9783a4f5e48e7055659cb195d50d4538 GIT binary patch literal 6993 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..5eb95237fe1404d9c8240ad3750a368664072c10 GIT binary patch literal 10398 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 z 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/values-night/styles.xml b/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 0000000..06952be --- /dev/null +++ b/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..cb1ef88 --- /dev/null +++ b/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/android/app/src/profile/AndroidManifest.xml b/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 0000000..399f698 --- /dev/null +++ b/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/android/build.gradle b/android/build.gradle new file mode 100644 index 0000000..b3a090a --- /dev/null +++ b/android/build.gradle @@ -0,0 +1,31 @@ +buildscript { + ext.kotlin_version = '1.7.10' + repositories { + google() + mavenCentral() + } + + dependencies { + // AGP version is set in settings.gradle. + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +allprojects { + repositories { + google() + mavenCentral() + } +} + +rootProject.buildDir = '../build' +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(':app') +} + +tasks.register("clean", Delete) { + delete rootProject.buildDir +} diff --git a/android/gradle.properties b/android/gradle.properties new file mode 100644 index 0000000..598d13f --- /dev/null +++ b/android/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx4G +android.useAndroidX=true +android.enableJetifier=true diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..3c472b9 --- /dev/null +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip diff --git a/android/settings.gradle b/android/settings.gradle new file mode 100644 index 0000000..0d47ff5 --- /dev/null +++ b/android/settings.gradle @@ -0,0 +1,25 @@ +pluginManagement { + def flutterSdkPath = { + def properties = new Properties() + file("local.properties").withInputStream { properties.load(it) } + def flutterSdkPath = properties.getProperty("flutter.sdk") + assert flutterSdkPath != null, "flutter.sdk not set in local.properties" + return flutterSdkPath + } + settings.ext.flutterSdkPath = flutterSdkPath() + + includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id "dev.flutter.flutter-plugin-loader" version "1.0.0" + id "com.android.application" version "7.3.0" apply false +} + +include ":app" diff --git a/assets/logo.png b/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..6c8449147c58edb0ee827389f09108f018e34489 GIT binary patch literal 32886 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 literal 0 HcmV?d00001 diff --git a/assets/screenshots/1.png b/assets/screenshots/1.png new file mode 100644 index 0000000000000000000000000000000000000000..4986bf2e37e19c4b461b8aa31d3b7f139ee52632 GIT binary patch literal 36628 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 literal 0 HcmV?d00001 diff --git a/assets/screenshots/2.png b/assets/screenshots/2.png new file mode 100644 index 0000000000000000000000000000000000000000..ac85eb91886fd077aea1381be0b575719ba530b0 GIT binary patch literal 53688 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%0A` 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 + + io.tseli0s.FlText + FlText + Text editor using Flutter + CC0-1.0 + GPL-3.0-or-later + + pointing + keyboard + touch + + Aggelos Tselios + +

FlText is a text editor written with Flutter. It focuses on performance, usability and aesthetics.

+

Features

+
    +
  • Fast, lightweight text editor with low resource consumption.
  • +
  • Customizable and polish OOTB experience.
  • +
  • Works on Windows, macOS, Linux, Android and iOS.
  • +
  • Supports English, Greek, Russian and Spanish languages.
  • +
  • 100% free and open source.
  • +
  • And many more...
  • +
+ Source Code: http://github.com/tseli0s/FlText +
+ + + + https://raw.githubusercontent.com/tseli0s/FlText/main/assets/screenshots/1.png + https://raw.githubusercontent.com/tseli0s/FlText/main/assets/screenshots/2.png + + + io.tseli0s.FlText.desktop + + + + + + aggelostselios777@gmail.com +
diff --git a/data/logo.png b/data/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..6c8449147c58edb0ee827389f09108f018e34489 GIT binary patch literal 32886 zcmeFY^IeYE3*EiNWae6xH2vTNJ000mg7?nE!00n=A0whG> zkNtqbQ}74e2V-_004Uln|3SWbmpXv|$>gVM>Sy5Xj?P!`-`}Gx!=EQ=i?~i z?d$w}OP(13H~n*Hs$ucFC^bhFIgA_4)j(CKQ-!>O=2t}h_9~fp`24tJGig)i z_r%d*0dvBjwALKa&wM({7Y3o+=w-;|^O-!DY}F9={x{J$Xl3xcVI9|3uH)b>eV^F`y+ z^ZCE=cDvsSr9(JxuOHtnV9=)8AS~G&6DlguyL~-1KJFm42$gOxK0lA_8!#E(;pN%K zYBnEkQTtZ1SL-QqI`gd)05bB2L2XZ`s*dSdn|797o=<)W{I%z(e zG?8kJ9*U;MYVE4yS7*$F@dMs?cR&H&-dVDR!5R8RPh;s(`FD!S$~0Pi)3D}b&c6{^ zvhbY;zeZT{?<_k??h^GX+$3D;!xMP}XZ1E0**)iuPpa%5*oi`%;=Mypf7$?(x;noI zm{&(>M27;olF|{iZ{k)kA|hL7%3nW3V=8%Mb&`zc7Rw*Dgj*^v+Q0B$l(eES@hp1# ze&AYNipRZ`HD9HuC7#cwqQ;BoSE!=kkkjl~LBGkGwjpiDuQahUMz8E>;;Ow1t0#bq zeuX3F<}+^n*U{`~BJj@ipSH2YZ5uC||0)uCc!S>~^X_CRague@*d}LL& zU!HfoJZX8?0Yj9-{{RlrJr`Xzfo3viCt~VZM*@wIi@0AjvzB6x&tAnbIlYofa$)EB zO6$0MFEL&}u6PyCe3g-!UH^Xc@9y=HZ z_Zd$2?CCoHj`uV8;wbKiDKs!jR-35;tA;|0Gn6q5^k#BsINFmSImQX1QSVV4^N5{a zhE}p(ldY9;{7t|y;cubbdqKs6CC$SvGxA? z)#8`ea{8;Y(---RNM6OM^ORvjE$2~aayaer-LQ?4i+9@kasS!L{#qFn zu&RCm0TH+&miPEg zyA%qmQAy_*?W5M=m&e~dupE<-seyGSqI)>(ei^k125~>b>OFzRjn^b_5>hiHE)|t3 z+KD_fr)^f$HQ0Qca z7Aa=iftZqfAFA^0&$1+I5$$8TWHqSa{41WPA8sTcQK}})^2F|!{4mr_1C`ja#)9P&hB>$tto82H{vR2o<( z(#0Or#oaij9Redb3N2;*WW`qC9s+KA$6Ym>Ggn{y1>g6*+7nL4mp&NV;+Ld40;RN1 z4xcTT=smK9ZI#&4hS#25E2Qg<)K-L&n}LfOlOWi5-j60@6RRKHCxyrQYNeu|Fw!NE z!+kW*khj^8{1&AFyl#m2Lqk$H6|GyS2?Yg1+qGOu-5qSb9@|(ZH4-N;M??Tr2-iWP z1KSELxkDs)scuKhefH6Qcqg>1XV=Wb(YlO4kK{>N`9qyAnYdEUd%NRwGPsmrIF)Aw z54^Fpl<^?I)Wqu6p!)D^?&m8FGq(~&B>U67EZu_M1$=XJ3bbfb+uQuJWwe-G>X6nW zd{vpTWF!vx9^^(yeK=%jeEFv*8?hU z^}9)2)r3Y=i0jY2HcM?EABivEt||9?HKwCi79voHIH)B@Ay4SU-H=dsS(|%$f4$)s)^v}&FNpJ zl)6>QNSw_ZPEqiZ(QiEaz`N9Wr!S@Fc49CA*YdMZjEYRSC#vbwfb^Bn57WTCR8~F+ zpaCAz65Una(K)T>6`b>@BwOaS6M{|H(wlEim`%UJwy*AP8-XXray{dS<<%aMiv~8o zDkxKdIfP&!i8hBc#@#=By@gOLfF0=l%KR{xcyygDNuvcaobc0J_WR*;X&i{9aw^1v zFzA918GI+rq40@NGg3HWL_r@3B%|V%ohp`i#)*?Q2fsg)M9(2ge=cytQawT!#}tJp zp0Hd`OGfXP=xI>XQi!(??Nm4;pe19BJ~GrG=RARRg- zxKG3g?_vVaM`bWvD1abO1%uXxR_$|!ugYg|YE(QToKa|^&)9^$HkLwhqyd90ZO_W( z#Yobv5i|C&b`75J0G}fnmWEa)>nG(xRYn{3C7+(2Ur-+=6zQ+#^XL1_F&Z<1t4FV* z={11XA6#;+8(cTj_4NuOn~c;X@U3Z1ecA6zJkF6 z$ASjc@Wa&_n#C?knsUu0M5z(g=G7rx&W4lbzdPjtav_!OJsZ26q#<!h3POm*pBSvBS@LK*OK&7hOVxQ5;i3o?kSZ(7K?zC2OF#HzOk=at02^nM zX)KF>+)T)E{98o#nb(@FyKVheCeNQALA2$*t^E8aSYV5muYK_(o z&G`|+LzNg(6CjFpp*8Z#uz~MbkybBsnTT+069$;Yzk|h_v;59Tymn`r3^;bo=w z=bTv4RyrG{xu*Ewv+BPI+tVU-1<^7dS7$5c8We^M)xU|C3^;Ic8!q#ZnpxVZp|-x| zG;ox*eSRcT{AF0J?siLYwCY&Do$>c*rFk|sz8mkupop@!x!ci7@#W;z&$oCu1bDCH z26c;0rJ(@YTZFSQ`k!AC?hty+)*i>bys$|K+wKXo??YVc0#EK{K*CTiOeH-qPDnl0 zkUoADg9Xtc$4@rztK)fFF$!Ct2GS__3s0k*uh|~_hQFW5+|AB=zqdgkLyY8*|KxkO zf!?Zac?K^k`w?;m-@kIT?X~Q5S4jvrr!hPXQLE5Ig_=F?T=MFFaSKQE=G3(F1 zUE}J-MFbR_mSlZq+8V$ki^AfcBl)Y}d09x)o!_9a92)iyyp#+K86tuxV_PF}jrDDf z7J;HC?5&S>y+!M&iLQXR>am+?rYDUs+U@Qbc$hdb)ZLzAG>u~DH}tA9_~ zWJKLbwfJc`NoAanGz*f7xeilK5Qx`vFt?8Iil{6^nN}vFa~X9mH_WdLB{%{v1l!0L zQlAb6hA9{UB{%S;)ip+G*nSs}Ekq>pUow84rtnn3uPCXWUo>m5-zp z4n)F9>Wn|r7uNXEcr%j<{oAtB9nlo+Gxp=c;G-$8 zPd6m}NG;%E!HL8xs{+nxb`>O%0NoMXJHd%Q-S5@q>Sa&rB3{8(R+4;kuQ=?2TXAnlH9Y1f+B_sOb|;e)e``Qq#M> z5GCtLjUIFSA`agfN_}ma4y)P=e`xpBGy2XR0=?aRA7e#L(_)kctFy?XFummGxZis`b)QRikw^Opw zt*MrRk#dt1&2_74j1HF!y-(bq%jn+Fbp$+;!lCwhXboT#Hng;rLYH5Ih>}!^b-#Vp zqNY=q4<+V`FI0kR{bi1XO@6i;Pe$LW2|FwFB&j_E3lW`Ljew%gku{nplLJzU8hY}g z^H>=Aph!Vh^oeLE3cI&UyrT>)y4%RWF--rCSr|@IUEK7Tj|NG_vgYc&Z;caDhKf8L zQvkC5;^DX^Xct^L(X+mP*0>4jgVig$&W*T_Sum20OgJ;~Oq(H8iG?oQ(mK=3_oBVJ zpnITko<(jUgYO+mLY;i4i_1jQF1lk*HL(WsnZ2I;v~Dj~OrYXp3qN(c>x_xjfIJ`( zSR`3NlrYb&F^Nj2@bH#0bDQ+=IoDrb>Asl>v9`N#U{X!3PL2nB*I6u%ALHBETaH5ZDE|Z*6DaRr$8UjmE4EDu z_+r1o&K4-P!hqaCrP~3&ZcafKfpe+D9Z~|Q`;#8o`*s$M^5%<$h#0xp$jb0pV zZ+&=B96%6JO)fq^EKBnDMODOySEbS%dhfe*3H3kKX=Q)E&vHOCs3o(Gu*Cqqvx4E` z_muU6fHMBxwwA-&la$u2U$$9FrU{Noa4`V*Yy@C3870il>H*2;gK`7W)Zde_888lE zl%B35d9(b0wyv(K)zh#mFET!IK`L~TNRlhf4wG@FUUr-iVR*ivCo^*O;P2?@xMPR4 zjd9O)AjIix`~E^LnHIbycwyl+f^C!xs|!;D$PE(Di;Ch*K5>SNkk@+Tp41i}7~<&( zQ3-R3EJzo^K7%|YvNr|WhcBl>lJIw0DnY?>YhV5g!?s==&-g#>i2-zg5Hg&!KJ7MS zOKQ;O_y@&yJ$`QLh<=LXF@+jXtvreS2|}Ia*>UIuie8cQ?NZ?fv z!RI>Wu-~)lX3WvBNcZ>2z&n&Us;ZHu4qslUlX~;)CLsD1-$eQH7OV-+-rP2^?!9m@ zB)xmOcQeVZZ_jSJ?K$5u?Yv{ZeGSJKN&@)Y4-1!;W}jc2zuC|f zLdo}uy%piac%$kVpB4cM+u1SK4xx`47*N@8jhp$ry(r}0X+C>$v~x6bbpHC+m%g`; z5N>3eT22G1`tP*~uMpEn2Xq_~XmCQ#b0Fq^>QL+w0uIv&J_v?%QzQA~uYCM?G?vjh zg}>J@S~T!U`tW_@`={Fh*GbvVTKy5b5FPB(X_oWgb55T_w{e80{{99TmJbFRD6Q=7 zauo2vVwJ1Yz|~@flfUK7!Pmz#GW9h-CO;EC-iWvfL65dZCZmr?gk{;092m5!9vzbZ zEV6_OiJ8(Xm3L=DGQRNG+$dVzb${FFbrOLOq73->I_**82*I!oR9!TD`{Y7@ep6~^ zjbL`+Tk}zPy;}Ei7 z*=r!K-{OYFiluo_RHa!h(MsqN&hW7Y2H;LgPnf!I>R)!3ZHUY?L!d!ig7B=@i>}de zNa&2SIv(4nn)_1c8}2JRz{d_z-o2T}iN%jL{`I>4oUH;19y57Zg;6Rtnlt>mtw}2l zs9v;M`qgEi7G`P5xQ!~%)~U)|VL|e{9cjL{`uw^s8M_ai{Yl{Si0^}3(%p-7CCYc% zVv5*8Adl_o#iPTQ%&!qw!bjNCBW+jCkM2G4Cjv&NuTl6me#vlx<6oxo%FA3KTVgBonYd&PbwarpIp5y*F?C%db+qI^|%VK9- z^%LxVRsFBPL;3dc!JVlq`%|V!NmEZ6KYHtF~CSU|4PCd~V5Y z?}Brp{4)3wA!wfsi4)NcU;g69MKMkemShtegiNQx%tK4-<9&j zo;TeSuqfe#XbF6K7s>p%sc%Dw@le9s#t}J7O_zP`nJ=}@SJ$Uqr=!z1X)SikmdLO% za%daz_?fqm%;%eHIkSXA%TSw>Gs=ag=gj1Pz)K}Woo)16O-v_Hqg zuMpu*v@4!S3~q&82)6Ivh^tby>&D;G0Jp}>jO6GxQgzxS+qq61A?8o(X*k(CbkL!J zE*-e7y<3K|^GG#9;kMaT%h!hnDO8J>cvg8w{oGsINdhZhzPU1G770@urEdZP9=-nJ zFEI#1Gx5gSty7P3H&OX1TL7z9K?BJvxib6Z!cVaWsQlZ^=uKuuk2iw3JSo7PP&W^f z`ix~nRuoNsVZbyeS`ao1th z=?ZcuK`Dfnr1RBt+XVmGRO&#lb#(zGRoFxR&1ZM*opqD&pUyAB!e~YfL%tr268w5N zJ|xv5u5BK=`9~q?)6}4C79V)iNb+D^)7YG77oHjt_%jEN8)JNxbetWGH(L6?YG6lm znC$0y`o0jvCV|qVv?MS;LgD+dGk@~EVY6?*lz2#@EYfdC+MdRWKk!E+Be3 zl!<5C{I#+}F!M;#jjradEe)og5{k1qUT;pQNgy5u0}QMoH}iRoilW<19Nt=mKduVm zfR4GP_6jD(JCzexOUZl{9#gNSWSw}Ee$^GdsQ=PwYvUG;T;nDY+F~7-XHURklBfh& zVFMvM>=)Z%q}%>rCQXB37j8A9Ym5+9n2%z4>F2zNLW-TpDV{eV)*b{bqB%4ot?nXk zL^xg!Z@#7lQK!njcANuUeDCk)39pW~f^ z_mQ>?wj|g`czh%%z1;n%kc=^gX@^Lc*t*@9j4Q>R3dVW+0#)?t3y4(;ZWih5&&|1d zQK;Ss7(nCpiW^dde;x&MnXf8M#fEUCvmuH!x!oBi(CGA8#`)pWY5X2zzt7?pPjX*61LW)Uy?^$6jh|bF?__=ety} zuyrfN{I+i{Yq|ZH2_@@?WLF{}fAyfMvCU$2#IqUy^=ttjGg6cZtouX-0(qd4T8#AN z#NKF~8|eF%8=;?6PFcFyk^=l1HF(8w_|Ceqzrystvj8Sm(z0<5f1TX+=J%%Zufk)W zcj8j7ImQlF@mt*Zp?PAM9NQZG#q6zOb+^kj@6Jdg~)ZZ$cDE@_(TJx?6ZQVB~EwtIK%!F4tY7n;Q=x@ zW*7fFcy>+XtwC!;CZ5oR5?jLnyu5TNqB%mpF^k$8tA6iB*=BUU`&km^x&Ny23ge5T zhe^dK4lm~VKSY?_im|ok*T6=>BEMSjLaykiuvx#J>|7Q(U1zCKnP33OfS#2G zC|8m)Np=y7WqZHi8ru2$2^v4 z^&B4%rn{Yf+w>a8y}5ii+?IiYORn>t<}AM}#!Tg9Eg%WM{LxH@cDHTnQbav6e&`D9}id6BqS!C(|o& zn9Am6)!+tOf2CamWP2DR)=?%yxhbt*^;l)pqkKi6xFq9RsGqL&@Fr$L)e0fw{E$b75!pV z!&QGVN1k>jWbdv!U`->0Lc3Oe{9_)F>#{JcmTYtOiky|$#JC@uz@ zmA-|)E3xm zrC(#<^^XvMW68|BiuO|K<*8SqvdUjcxZk<9N>VI>M{W7?Ph?g*VKp0urIXy@DVh%} zeS{VF=IJR?=keZev5MVNf0j2dwkg$vfx$V_%LiO$c)C=(gV;f*R?stYi8>U-!^Kt$ z>Nh0QS|#R7u0h%z8J#pdDg~-IvaR$m4!7sO*TNSJRLj53Cu!0ey#lp4*i1|u=nVBn zJfCP-^89Tli^q|mow6t#1>8+DT-FeJS}JDXE(slME#rQ5oer4% zbL!fSs!IkI%>tlYf7W3BS{hKppR5Wr`uD~SQWp^<6j97^F_K_2V7kw>5Eu0E@MWB+ zM(rbr&waMhnZ#~cprmFBSUvB-%S^9>2T=$fgaPcWQAgt2tMII--$er1t{CjEU6xB$ z!hnW;r(uJef&$itcHW9iB;*z+;?k$ywrQXbJ{a8??v@W)3;`Wd>P1;2JT{Eg59X`2BC zcWl@P_NUemB!>JLKshx4IlHp4!S;SlbPHRr{ssc-tC4RHmM%oaNFjrEyZ9lHc>YkN zD30&zKPl1Q)J{3G!Uu5J944b#o=q^&L?=CacLfzd(2v3G#lUFKu6uBsbQWy9Eab0h z6!ZWjzaHZ?)M2w@QdPG&YJ@JDmB1mZe5>+!rWdV;F0@i;6=zvjli|kvWVADe6Qr_9 zFqwmBr3IwGZm&WAGZ?I=vb0dmS~c*}d}RIjkWz0ypgDMg4fuO=R`1JOd?EvI<1e2= z`v^$OtH{A?Pq%p0T&(<#R<=BK3e3-wknS{hnn7=yB^xHQm#RYS+a}^8<$gn!(vUhj z3AwwS{#O6@G*$&EcFU+XM=L&v07~~01DHJCKVk2kCh%z>-lye0SmO05GUdlSW{`9} z>95}|T>6?A?FfctBN+pAi}8bdg7<2TWv_IyIS)e$?{zC_gv>4Zk1)O7&BUPNrSqS? zWP`^Z*&XLf9sDcp&vXfw)`(2_qB#hBd!Bg|hfk$|lOO5C0771_ z(w3D1JMb6kL<829IzH@YWvvIK_jAxtu)Fo91SN~YedN`FGP<>wmZq5K=Y1(6tg7ju z!G7EdvpplkLajRR{@d71Vy+@km6x@Upg;QbT}CH-_}qpT_eXXc=xWDr9}e%_ z2I;RU{iT8EwD!H%u9I@HB~;moOQjLP!0cE18XdI^TFono~tf!Z5tsJ;$UqR z|04<3{`bqN z&miBhWoF`gY?f}XCViI}{h@3u24*;Z(&Re8pt$i;vZ1xXV>Y!+uRjM}EISK)PC(i%y02uhc!oL3VY-`VO43q{ z8E~-CqHcf$v<}_a*`%cWesZP(w)P2yPiVW)3K$5y8B=)cGKY2K=z z%{Hd?y#&*KA0SlP=1qqu>}{_9^L*b{DxlSj*|VKjWLw1>;GX!!ul?XSh->*%xHOIq zoa{Q^L%cw%i~VLvcb_S5eSdEJ;*H6{a8Er>r9{o&Rbs)o@lGLnGLXvLSNay>rIXuN z%-~k~&IU}tg)(LF!XMB98De_P=>VJUDD?^N0{-x1<~t}Ul6<`6ajG#oesoBTl%{LV zxFaRJYb4LUc3mWBs{z4pbrl7;TtUXB0UTS1*(w5M0 z%Y5u*fvQV8)CmK%mvT(7Gy1I{=*mUGa()@c3}x=R)kr?VpcSD`^vGD{1>u5eY8L_> zlY?975?*^RCx7vBLZm}~(dIO^1;)Tm8*hDl7}zb>gTU4WL3WPaRG@3CvVVXIfek@y z?wr_%qyq;5qos>VR-^Ve0lw#^3Du7j@2_TLe$nAGF&c3=Kv%n7LubAXUCBKXHFpjq znD2=+ke9QDrw3Hlyx5uSe^RDFGNL5!JP{m|?DAdX_7Q%W*(d+_?F`-2BWRZpu-}3| z++JXR0E(P3kjDUSVfT}-l90366x;KEX9~C(t)N}<>+T|!7veF`|Fye64S4-{x*Tnw z7F?O2luix{rivtP$V-8GR`$lFW#k5?GI3F{lA`icrPc|tN&W>v_x3mGck;oKNe~av z;uz}syiC;0_nI`U!FdhEE{d8MmEg0qDGFp`~pt^Z0V|U}BDI zG9)w!-_Ut`=~&yy;s;R#W&3xs9T@puwisC$d=&jGv+E{U5PVAdH~}(CI<+1?^bS^L zqW);Y=H|O@A?Uad*b}2zl;e4zMefmW0@c1n2g@2Uj=esds#el^Z7%*E3AWR60ngS5 z9B&YrvQse~65=$$&Ym$N*WUL5lB+gw73;m6XK(83$~$dH$##hNS@T_4P%KB;p#n13 ztq(GP@s_6L4`!Y^Y14iVp8aq?^_J|_#f!HY&wrXgn|M|f=u|i?wD-Q1+XMw~1C3X< z{k>W6+YC7B=B8vD6O$SIz^f(JnB#*>-pCCyq!?ccB5<&5^;9r?oMoxse~Tu2%?2xx zSRjr4sMv7Ndp{jLmtO=aC_$-3*q=+>t_@^w^Dka)fJ}w)pe=k4zj*GvnXO;|f||(o zX!^o!4r6Hm$=LfvPb*#zooBQh6UaldBDTJ=Dnaef@T9HR${q(1gnpr45WzPFq;pPbBa8POjUt&ZA=zxTMCc@4GG z_ZxAs-*c|X)A7l&;bD_^>#NU78EYwfEo@xXw9Aq_AgA{8gDXQPt|j3WCLr}=cj%7X zafCg}sW>XE&4ofJ>&PXT8js!pqT{;+s#Ql8J&no%T|081vA^YuGp6 zs2Up?Owp9Kqg7U0u~_DHO(%&+mFo4y)=(PDUB4Tw|?tS!-R zw=@jaxSkti^A5Tt--P6BX&f)w6{HHfHZbT0%C;4u{xzgruslTO3oKe#8VD-z!~4_W zX98dpB>nTbjX)Lwn59v%W|SrF_jw?1AJTrJ{@DNlS7*tp&BPMSB26eOEI)1_@(FX& zu#(>BT!pJYT%mBEi~c9#zi*Tv9nRZK%SS-F?@Ncp^oVdXo)~-A(XzQ5lC zNTaz;uJl`(gGLa0+&i&L*6vR*YWB1n5sZ62CIajq^x!obE)50=@PbEU_#k8yaDIVL z$=H|UlPqXM&SX@!g2r-fsDvDnYFimxFCH&PoLd{>sPp$^<~M~{mfhLR*kSV+$kM%b zJlxu=iMS6!G_d7t9iA$Gk^x~+X`f|INIIA)|K0lQ00M`^x;{P)>i^k#P|6fR9*}EA z@D%jy20HQezWAeP95vfVFd5;X=MrmMaeJ4DAA_SIhwsqz#hwfqEytC*qAR_@dfHVS z@2^;OK##dR}3MbPIr5OZcgPq_5Ktd z+@YjccH{Rke&)AY{oGX?36}FG3tDTW5QSy*9Q!i+Jrc&{P{uX9XrNf_dcax;|6vqQ zTC$k@Hu|=QD)f6=fI`ORb2|)r99Z3>_*^jDuZwF?z!PBaMgaSye=ijHz}KT_<=ST21-~=FVtnJajbWIuI1Gi+7gB5$*Qd+lc~Bgxr9cQtp}&iYp^s%unAN z9fRURKQB5wo%bJHV<_yO;!oDuD z7@15dV$kNm>K66q&j!XVXz;b&{@Q>`)8l)|yy4`rfYr9W62)YLU4c_6ij z_*&7eha>{ozoV53U%Z3I%Ihmb&)Ppra}-L1!z2-K53fzzM|Ts_Jy`If0PFUuLp>KD zs&UlJGJmCc^fKUJ|M*MmJvAj>$bfRxZvSoN<{*y3Yd2D1DyAeY7K}d=r8&4(mev?! z_$0uY2olcSY^p%6%S2)4gHV^P1<2lcV2`ntL*l*vf)$sdss$v&^97W-f;O~?bD$gh zIOeZ+$OT_t%Mp2W3D}r4EBI&@DBD)S4f?o3yM9TG2SlY7G<*=qL2NzOnsx^B+Dp~T zuxVo+pwPMmXJcZiM*m+7=6c*ZrwH$dd1+ z%>|#OGm=U9NrG)`DKIdshE47L#cv{P)pxD%Rm2Uyy9jn7T>hL- z(Rsb?=>fgYooAq79Nb$|+a;f%br|DQP)F;HmVn3px<@T(-p;BFwf;j_Gn!iUI|M?H zoE;~YKyf^}Sn0hW!)AUT!-IvrcZ2p7K!yw*;*(Fjb8`ONN zwu+9IvcCq7(2|<|w2l{>;Q6pB@JA)j4}->dXhP4v-c~Hu?0b_-iw_G%$WyuhEE`B{hddko?z!$9X)bran`?$|T{y8i1+}$-#IUavflz>zH;IQ&UUiu8| z&}D(K0auA`icytpgVrY+e~E&f4K7aug{0xAZ)b5OZ={mGNt5EX zuH^xiQxNGv^HX@1{~3F}3DD3a3Gy~DixPg@*7aN&C8H37Vs9SIpUt0kNJo_C4cYX zJ6J(8@FC#Osw}?-LI}mtbz|OIT$3+MMb75GyEDL`1LvjP+*g3}iyLP2F58!dzAyJC zFt`%d)&fYI2s2z0lXnHL&6V^(Z@)VlX~5>0TpTQ5OkhTFWg6JV=m+8~Oczvtq;W@! zbh)CTj5N2&%9Wt$?wlC(eQ&@9@fy9Xdq!ivkhK*4AHQlRgm_g@ZTdN4R`Zg`50YVv zKo9r3b8A&RXuC1qbxW-$gNt?Cd`|toBC_B)ADm>Iv9duG!*L0OJvxFKIL#Vx{b2)3z zP}niOSS_pUWOSsKQF~5^0OopSp0Wb-hnmky5t{HlYH#$b>blrkg4y-%!{t3wrV+4L z)qDVKOh^5u$6wZX1nGhivsrpY*mveJ%)KZx%3^o@`(N87!6r*XQNR+Xx7`zl1q78j z_2Md6h*J;WV z$<1UeZJLbktF^gZHXD->FZhThEp8?s5d8}YQwoVPgSWN+C4|@R@le81z1WX0NuxCi z%kxuz$kRl;e(KL=HCC~JC$_+;DTo~P5>E>-kjBqtx%}B2l8t`+-5DaBDRo_58{7!_ zYYp%t6l^rCcN$x2St$@kGGbT)e(=K?9(!Y(e?0RxI86$-fWk?(=t{Ea?cb(;uh0P9 z;FnpNP!v?m5BFTQ1Fw5n_dLts3Rdtwo&_vg7SB*L3Vs_7|KXxs z@Y$2%nhO%go8;@4*hceB0EMHSz9~~I*y(cA40)dsO1gXwojnBtoLB%RM(_<8!8hC? z`T+`)k*;ncw`KerTeRW)+t|)&Y*qo8Z$t2FZpc+h+xMK1CT4~3!1&n64<8acu4_Q!LV-P>h;?K@C7fYiXr#9go7OH7iiE@Y0{#)UTkc`%nB zED95^FQHm8Ebc#0ZMG4ubWh31B372`-5;WjEAr}!Io;IbAm41H*br!1XQ#)xs$T&F zz~+1Klb9GewwCJ^lHkxLV2HuC1{gI$n7_CotyJTsIqtl+W`wu1B6ip#V|62F?Mo?wZ)hhe$Q>|8)aA0` z6`F~*;y&yfh;1XVK}plV>e|_p3u>v$H+G0RX3_eW4`?npBVV7BNnYQH@@G9O@YShr^#STDs zvP@&Y3LGZ@@izS-*zo%wz-4%Sd%sAr>$JngQzHD;zAR8rtj;GQ!I_hal~B#vOf~mQ59CT9gAc+~@)-FbgrpmryDUIs&fT+S z!6W>IaMcM_@n1n;jTaI<6h)0Cr#{<|ql6nSH7A3^fUIqyV=lKfX71AxcoR#EdWa5!c7d`1wvB6nl#tvvATZYNt$!NieN7pBg@qHq_CW*D5)^STt^>w`Y&3J{!EEGQ{Sv0|8WDU1_pN#F552Dcg z_zpBU+6%AK-jVVOdG|~*e^^=qp3e^56^WG>|1mnT0>`y+`%FJ1$d?VnQ~JPWpA5c^ zCcnh;s{6*REct!((tZcbV9PQ6jitk@J*a^hzSE+B*G*`! zzul>kBOzL9Tk>DZ$CM5{2q}Ed{Y>q83k#LMWH0wk&xd1gte1pdb<+HI7C_8b_#X;^ z9K`=a!t-NxdI@iQ?ogA~rnUk^DQcP=EGJ46J1ev^s7^R!XD-$=k{)Xs< zU3?;w`KNK={k{(_iZcpN3z&^rFEw{03?{n<&Y_Bcu~}i<$GlX5%0H+6Lf_ik@qC2s zzo?AeAkBuMy!mU}Im2&qUW5f9$mb`VV`cLGkYU~1`mO*ECN1-#P`$6o(h!4|P4f$~!GTk%z^VKC z==jo1Z*V*dz-9v>?6WH%&L`!Dd;u%E6Gzxu3X_#BnKK(Q_WNl`MamOeldOZ&C_xdP z0;xZvda;dj|Cd@EUkg{H>;-$X_HV1@C*@?+Ak*8SN)1|>5tUN5y1Q1*f>?v4ga~m~ z8qcQY`p)wy&sPq&O=9LWz(+-MY${zwr3U=Cl&|Z5Ba)F*U~nlWUz-T1!@O5ZFDExr zVz>uqrv(3xm@IYX4@nq6q15}&~z%3Hn zKZh{$f{dK)tWW>SN+5Ff=}{fE02U+zXzgEyZn92OAQcQSm83WuSB2$qq^9rs1YnRsOrJ^Hwd|8T{pG;!Vk0|Cd< z1-tyM*{$L{@lf7c1?9HO&WD$+P`LcBKfEF+$S&t=NewtE-|$^>Id7j+W(I<9Sm1U= z%9ZYtWZ+5Qf^)rL9Qc{gvS`ZTRq#_5o@)sBpx8PBn{>p{U@gS-SSFq*5M%<=C4g?$$7ov|Yh@ZW%XNNezK^?A?)z{aF`GL>|XGFR7Kx^aw z24kkHqG{OIWN=#C7Ni-rvz`HVJ1<0mttqGlrCr@82o>3V$Ra6dICIyIhh${_w0M#X zYbVa^NAVpi=Xqs zu6JLPVv=4Y<_3r&U?epH;4K~E2_P6m*{&gayNuFY{zvkri~NliuMQ6>lt$0R>rLw1 zq1J^uc%!u+lb0M34vxK0fxcP_3qRb&7hUG4_#`;zX>sY#_~LDBa$68F3&D;k92IzU z#*BMyZ^Vj;u2PXzA4@ySy6$79vGBKgCNs8su{K9yhJ^YdV>zSal zu)!z#A3eH2dqILwE;ri1UlgoACvR*`o#eB=PDq1dSoQqys#E;|s&1)fhscF@!Ong3 zPznx@by0(Ur@ffV|0j#bqhZ6+pWc7z01>kTivD_=3h(dpxhcOH5c9^`fu4++GNTUn zG+>>_2Pu%|pm>DIm)L%yBcO~#zuMC@Pr(v`LkH=>x`cwdG<4?HypR;W1ic}7kjPww zAHrPSXU_Mwx3YSQ8- z=?>{;N7d=mSc=Pd{QS;>Q-JysIA1|BDhEM)RF=w^RRLdtd$z_1pgao-vlm z+JrFK$DT-qNG9u`Y-K4+6p=m2zRU=v!XQi8r3hKFXB#PNLfNxs&A#uNtw`b-cuf3mb;oV4`m7Ug`5KU*hsR+pO=@g?KWhe7L3T~InM)&Y%zI)2r@)m1dJy3 z2HX0cJunhmtfl;>!ZsRVBg(hu$}&4gELcjJERH;}EHuiEo)qW5&P@fivr_pkVXPaX z0KR`n_sQ9|NXz|J+dH+qU`e+%44~=HYdK>l#%M0cb}7L--(5L@>XW~urnd}&ju_zObsI{ILI!gtb+4o6o`8*;57@n+EDxP8VXvz$ZbO|V_+Gj4> z^;G{ic!&>Y3twcBDD&Vs4Nc%re2z(mFU*r2Y>rHksWha??Y)3q4{H^YB&fqqr}4w! z^gL>Dq(n(DJ7A;HX9(MU5Tc}l?iZEgfti=KctGE;|L8)Ga()#P0%+>h3Kh)`7$U+X$My%+HzbjO#^iYYJblHjqK7w!HNp}u)i@GLFR|NOSLR_l;L+P5Y8l1 zL&kN%o=AIMIo*!f|sBH%3bTI3G~ftk2Fz44%E}EweWPm9XBO-<(@j|J;|NXXa!!} zT@o+Q_@3MZ!o&79{+Io(HPz7$@YsNQj`{exwimRlsQAQ>YSQ|qmOYRE+^X_Iet6Xw zq9pfD*hQWmNu12)V_>KZ{M#wuSwpeTJhE}y30^jLWFrUgbYn+jGF+v}@|n@sf+%np zPT1X5vVDhihTf|ImK5PCt51hL^vq8v%)NudS^_;N)?7840dNDp70U3v&v0y61ZmRD zG%V=t0EBzMuk=~%3yMw*bRb?-Dqbs2qc!+KpQKcIZx)yJlZbyNgB4J?tjP--&j1|T zjWP7iv`>J4|24*p;_+bkL;v)pttNct7svgS-~BL%dG#ce|NX1ojd&SYUo}N(XdJ7A zkOcIO2$ALk-hpQo)5k#xnDWfWFkwldtI~?bJLA z?#&o}K8rIB$gc|+mK6+kld9`HqHp*jX@H7M@c*?PK-dX@Ek_MNP4o{Q-t32P+w?8( zLrej-mhZ}C^wC7iX^vDGGSaz%kee=JafTOGt7hI4&D|_AFDX*zLt$kA+t4Lqh7d`- zFyt^EnB{i&8IPQfgCNbb)emvF6n5w3A!oM9Xu6R4r$aIio#R0`kL5Y7Sblw=Bbb9y zxseXLD%<`~N-FuUl$4QdV-TgmFP5zbD*q&7Vl#My%>9JapU4Wm zezZ^ixVn=v_z1*xesDH8=ry2(^CLvOM9L_=ZZ!V=k*;+u{hI$jsQ5KTD9ISQ79bty*V#_xq zg*;*!VGehA3`#^0r=KoErsg+l$R~07d;wCqvLM+8uh^bU%Dt$ETc?uLj0@Nxt&o#^ zC_ZBb=6`%VbbM<1{C_~bZFQ2)%vNtfkw;U{Wnc=?mg9rk^9fv?I!4a+Xb4F+;81gv z3j28zpGj{}J>_6Sr6$bmAop`s-$~X~g(Hk{sZm#vG9b6cgG#ot-8@wonB+|01r=2D zYjd<-;&Oj%sj)2wWS4-)l_sCXd5DnoFCq(g)aOn(ylkQ*MMriBg8ApdsM}?XMIA3p zbrN(j;6}*xu>3#Q*19|kBRZw<$E${5T+FnT?`JUszGssUqHD$8Ilt72wEPMZl>PQ~ zJ+I4cv==qCaU23N{4n3rXP<3PKYDxhwM=T_)wx^x=1c(i*O^-PR6D$tNmV|Q3ptd! zyU^I?CGOQZ^6fzikBGv}Ccxa*x{%JYkONH2Ae^Uryb3>T2V9~}nh(0bo0di3g?$Q5 zP9f>oS{)nzuMBhZLQrNDo`nXbGH5QUysF2$lCtr6pevF0F zc>$)!@&#D8#k+o(?Z1-h*d-}=K)<3=ZEZtO2f*+W_6y!I)@}(f^)DHio`e-9(5v0tr=JcQ$D0ia%h=}ME@(fM&a-t`Fy=f zS3gW^zyqbfcc6iuKwZ2AG$@$D*BP%8g!)&_Z=#+Yl!$ z@=*rgW)-ck1P{#CPj>dp(pHDFoSp+cn8?IW!VLKYi#gr!L`v!*V2O3y&{$xy2VO7r_gV}b(P=hV09AoM|=`3hda`je3 z;4Hfo@LZZk0^a`dMMYnxSnfd)#~G!t2g;cp=8{oPZ6c@J$otXmQAf+_^ zC-!|2jX$XGcY@X(XpN10djm$O&vOkkM`lKg9VrQ7D>`qpwB&Ry zy9p0c_1k$Z_-PEZZ181I&9Z0iWM28ppq?Yv^;WbN4l()wsPtN&#&MzKN_Hp6&Fk__ zkXsx>FLmOuiy(!`H-wxC{Xc9?&C%8*d*ev?k#Y20-^kbNjw%hrA9_Gn3K@|K-VR+q zfe*h-{sjybPW9`pWn)|9!B>$G1<;*Cjz=lM54pek%C(_M!VBjyJO(P+|6BI`8*j#{ z^>5w@bJO5?Z>8_q0D}02xWmG7tjE7OT#gU$nL1e9bmp@W7BV_fP@b;C)kLK}ItX;~ zGS3pRvMdHZ6rfb4P=@z?g6D9?pAa;;V#%hg9`~@b*}XbMs5*`5KdHAxN~G$K%kOc$t>qz&ojf zazSqR#qpT$&Ko2iq2MEQ94mv7jQUFeY*963!)McYG@|xK(iC92&g4pYKA0K)1v#af zi@Q_t^6T)G%#ceU63Gh(>>RNO3%+jW(L%H#XO^jGvJ>OcrNWjQM-Ap080=yqK1*d+ zABbb~-k|10SLrrvRPG+u${@nC=n0e0H=hgk4**UEvutKjRWQ4M z6R*Y1I{zqsaen--Q#92EK?QpD+3vxG`FZX_?!2vwwxvLAYt8t2FQa7ox1nq&Q2Rx&ck=3xP@Hd(*0*SOD|E6N;$iSRkgVkFe z87diqZ12+dfpfd`Ophj&R(FxSS7|ahAi!7?MTO4D_dl8h|2q_}qCc*cI7^S?gGo8kJ=Ijb^a;|XUI}Qk zIRGvV>c0%u`)%^C-s7uZ&$+C4ST_N|UrOy9YFR}YKGrp)#iN1$j2>;Z_qoT4;hDcQ zfXe_tmMWuUo+pl0dw#4Kph*yby?kpvJ|@NH zFMC^rws`E)cDu%JL4jt~ES(#EZjTE1Nnjhz_MjTg86uy!@b-6ZaI;kvOh5YNz#Aag z-F!#HTJz!V(KL$|En16J!#Jbx8e#H#PiFEz6n%6=Vr!{Swe?eAE6CK3sRvD~Ig`3@ z*!4eMt2WBgM{sJQyXKx2e7~*=lw4gTBIJH=X&VuRDAx`DFl=LRT9f}5prqv^oOVtF zOCu_k0VxY61n#LXJ#Dksf|8fu3SViVUi6y)GyLHpnK{pU&EAinoHz4?gu~W=pU=t1 zpd6f*bJ7JUMz&g3D4zKHYJb28kAElW8eZ6aSZbyE=x=j7+^IG5!;_=8A-XZRGsHNI zwrFAmdZo&srR;TQ?AzU$7jNC!N}nCA-oe0oK@Y_=@l6tQM9TUpCzyrkdX@3Iil4dk ziW(`)bkwtX++O9>nm^2C57x(vqrC<-%+FcYqfCFN+Ob^b*BwJ9a8>DHilL(7{Ro+!hXbsO2Hl5 zSuj9 z!=|4F2c8E}#c0}DlFim|{sBP-A9HRl3&NRlh{0P!FUyBPs@I52>vIW+s6cauP~H2SWo` z`8~xU7*!F7`DateF^Vw=6w`qjyDPA$I@Ep3<_kF^Twg?8ihVt&|1&BCgTMBXNSb(= z$2Tl3eBXfGAhIkx{g7D(Ey-zK{^z9m4X%z$k7_UrSq{NKTiesA`yRk;z$RN!WxXevvq=Z#D05(9yu!tQUB z*87(EvkLa&2e66j$DDXr&nl41C7VFR#;Zg_x1_6#j-zya+|%10GVDE(&|Tl=%>@wY z4dW@{+BwBnV^mnit+MjUnxJPEaY5I}=<_H4Mi6x0*`QbB$dK@^&tOyVPTx`5s@=no z+>;&qt@1UI-`zG9_uHX4~H~wCoqjul66_?DxFE zg1JaC5-^$2nNpp2OI5H{MqnFw#6WZ2B#_l|?tb@tyJn&w+0-nB(cP6c{&S%0Pfg14 z8GQ%ZY#)LMMU;V7mts~uVz3l+JK${Gd-`j|rD^ggdytG&SOI(;NSX1Kvzu0p)zx67 z}WCf9Af6unlcyXHd-9v$^57ALj()+dlz#_Rt=3Nd?FM1@t1+6%-aC|Du(icC;8YvI=jJ+cqe<7M&wEE2W(AyZ~!T zsaSIv=~!v0IItw(eu+^cbvg1i2te&sp}#r;bZUQ_=Amy1*MTm&z@C|i(GCVq_!&Mq zl*@7=dA~jFfB`Q7T5n|JNvUr-qYn>j<@Pd>rJFLwQ*21dE|4^@-w1J0)H~f7h#&@A zuO$?xF#&5?R+d3DwD~f5;RnZGpy8D@SJ3?m3#B?A0U+A`=;^^ky9TNq9DUR$DSb4KOTyhsm6Z{*oLb{aDUXkRDwS|4aW9#s^3q-V?F=#`Rge$9-)wg) zr6z!4*Uu~0_96aJm`v()^J#zGpfIV&;55!qP-f|{f3oJH$c^i^#TR^B6Tu>P#%7Bs%8Bp4) z(G@XKc=vk_HC&7h6+Z&xX6<80z_Pg=|4Z2f_&x6KkUkulgSE%Z?Ru2Ln8psd8K}xX z`Civ}f81f^fejAtML|agej2@(n$fF9z0j*jabO(Dap^(HENYdcF?G@b&0p9N@F|U6 z6&pWKaJ~{fGBpWzivg=mbl2nY{swY{JHF=5`6@H&JV1us$AW#|yl|=_wlEk$Hw4@X zYN=1QX3ob+%|*g+MczCgf|5%>pRGbmA*CBH!9_HCld9ulF%?jW8n!!nnVQsa`dPpR zkSYlK+j;qV0y=eS6*1}$C63q))G5y$26T5$2SC@L@BQs$K#5qpwzL!uKuttFZkLB80{%~$rm80UoW_aWz!X1lNF8ppsEg!_xkufMl$B9PDJ3* zJ=z0EN>5(mW00ondI(~7;(@u-!Mck2JI&~q|M+`8EGPh$IJOL+Jz@O##U%*Wc9`_A z+*jTlCOHsi_5?xqPigy~P0G57BcXFa`4NT#4kph>KP9m~Cv1RhpFo=OHeF0( ztTLz(W}{Gr@+5{WmbW3w)-Nhx{($iH7YM5(8G_I+l*Gj~Q8#EX>8WatOyaZ=(U3!? z_EYp$fwmII^mZ|N#(G0lGfL|_K;I07=s1_BZgrn$9oQx}J9$V)KPN|fi0@YZ2ts^* z@iOI!!lexUE%E>)TZQ~7G(z61%@IC&*if0&+&V+}_oIG)N@ck5&zx1Nps%*~ zui@~?g&jq#KpEsU5>FL^)uh?a(lcF<#9(DQY5nNIoC-@{FHYpl?`nL>20b7bJ_<~K zg6V>u>g{8~PyH)A=K^3%gC*>dM}kQnNM+~Z300g(-J8l+sdAjEVM>mm#Z_XI6$}e{ zZg|2-2m|c2hNAMGhe+nplQYg*P-zdr%-=5!Ri9oDT9M;eo%1Cg1fV}r;*P3o(6Pm~ z3begJ084J%s|;*If;zEIlC#c|POt zS3-^`D^?T}Ee3>TanQ~S2;Q2TIGlx)nGufwMt9x2Pf_-sKr(19o4E&QA5Oq5a^a~k zJm7mjbIR(7bd^%}t#Zkg!FOSV*UjQ`(^F%CJmKJPGfSU!gZsX!%l|;pZl_RvmpwzY z8clXeX`v5WcpDR7_cDYs2FZ+D9_1C6^E19^V6g@AYgBBmp9jDjN8*J9N3>X6@XK~A zYLC6fv^uOC-UlifiC@=Ml}X<&-qBSfAVxzc*lP z9}=Kh9C?*Pfa(!t*i+jrxfmxum;BFYY%J{5vj-!(<^Dd;YIkPIA-`rU_bfTpzw%zL zIN;pw8eXb5bj~TE9`#i8{Gws%0P{G)&ZED{-@7XL&}rXjMu8*suXVXOReqi4YK+2ze8%Y{PH z?i&BRf-fq}r8yWgTGkE=mi$Fe3k({fA==mAq$HH1)ytkK zzrZSIZ7?C{)@^HpjNFmS#P;t!jf~~{-{eB({EJr~w2eJjVD7t2xtt(u4%suJ`#dkH zEsb3-ul5doQc2NCYLh>#4Uic?WQET%;IC;wx_cMY1B^zKk14BxXA%R?)U@w;IvuyW^cE2M3X%zn241Mvl$UUaX5M!W7Dw)TXIcYsNiVJxtnlI)2{u?~U5jx` z#yLibF|OgdjY)a7%i-(m&nEjITi_X7-S5)6TkY`0xxhTn07oKng0F@Sv{r>F*Aq#e zrIoq7gl2mS9dS&-+8BS{`=gD1n`tp|*PdFM+S`JM1+n3kj*I#xVX!}fjmiogBQ}zdIl4m`IqPhC*Is@_r ztuYR-*Ds0Dr90(**_+huAsRdX+@gbf)O!!nD_eKciSV1FujY1r(QimXMlp10aL=#L zL{WJ1wpcH+13wJe?(cAqi@dsxBRzO^t2eyGOh<<*L|N}-yfKCPM3k)xyzQTJP^479QGa~gvK`a ziMwl->kL@V?rp_sk+A?HrfSinRXBlFu<-Gd^g;E0t`F4nPK|L27$$GcDKyGrAP$A1 z**_S1g7EfWFv;g~SqlxXX*?l0PjT|V#B@}7bexe80fc?-1oRVQpF@VhRu7kz(35PN z8xBFQ59G^Tsj-Uu>n{t|v)71t-lJwS8fD>c-j1(NaZ1QBBAbeayh9C_C=oaHY8zLB z5q-@y(wNkP8yz~t%8LS+R16GqAE`~Dg{3ZoeYA9eSINQ54_Ke&!xH+wOns+a4=A0o zXZWt8E&<~o z-AN|2Gj(}DZ0YPs`f`WQm->3KefK36|Gg>h^l~cqMVaM~vQ)$VXoJ;bDpfGf5X5M$|#;{cUrxfy9@j!Zf8vGc8Zp{B|Q4*JqJeg{6bwdO~DN;Sp` z{Rvcb;6A1VnhiC-(g(+X7cjVZR>mO`jPglx9)7;lN@oOlEHd=g?$8h39zifB?N_D? zY>%+yw~@_6QcUVw08IbB?2vtjN0^!iyyl_+gXjE=2(}92L-M#Q-VKF#1=-~EwfIq~ zyzudmu5CsME!t4PRiOri+|Fpg`3_EGkLSCN&mXss`;z=g2THJ^sM_9;&mCgO4E;M) zdw+aECHUU%QD@AcUc#kp9M)P8^_Kn{b~qf7mCK8}^#-_NG)4bY{J7-Hz8$md6XirQ z-G>y1BHYfAuLcc69P&$w3KFD6b&68~2QYWL-aI?s{Nj@R>P`sGpjQJD(=k16pL8k- zrLD8mVA+EqQO135{h>5wu&SD=aTVQMbG(Unhvib2eMd2Y#(4vFKtTMUi2D;qa+ zI*V^_XlV!l!#64ZDf;-|3RWxYU7v34N!?eWDq6s!ae7o=8QvM&1g3rbbQn3Ug|nC& zr(R!->!mI5zwl)xf5h^@6*m|H5H~o;yxd0@d0;H<_1nZ>)D*fefw+!uygE$lQU~@> zFnWUOUmEYQLm8Xgys!PmYUo!!_k(@3$IM7?veuHc$~Ub8NDc=Jh8n5n}=>1sj`r+x~XN=0MDQ|gf!qYt|AybaA>3C$U-B z1))tw+U+aUcW8UD3i?VKo0;?I3#c7PW&mWCf-h|M5^GmA86KqJ~9H%9>tR|GD(BHf&Mc2>{ZEM3CR$+P8sC62h)s~bD#s0 zC*!v(>!%V3fLtETX_5%`#DSOVG(fJvOq~eu{*gahS|wZV&J5yyo!mt^RY^Ciups52=d-yFyWSPGQ)=z!NLO;sO+QLQT-z^SEFv!GV6pz zftE7IkU_vGh%x=lSecNQ!tC9g#J^=z)29;Su`B?dqpGx=UR0rh1D|6)GY0?a?E}gw zP86u7{obrmZ6^tMJWTvN@4M#D%j!7&E5h^8q->^pMA;>B+7M@WpkGzf30nMb-E9IB ze?L;l`;AYPR&jvWy?{==>5u%)dXyarLu@i+Tq2bBd8tJr@Il48k^4*gxpP?*=SkYSefj*tuyLU@WWaMha33AseVN`31aSi<#)|Jl32WX7>s5F3kwkx~(Y5WjnfNFZ0~O8emm)S5FUE>-Cp(H( zy3HAL?d{pP?mX`CazoP4x^GCYUos;2@GXCMUa-dl{W%-w+%wR#s3sTKjp@9geB1tlQIJjgoO4tJ2z)1$HfSo^&8v@KeNiFU6Bjk$9=4V~|vDH9wQyH(lwQ5{a_=!!}jxX#~spZ+sScmMA9 zG=7Z@gMn+kU)y9dW_1?qiX+T-Mvcz|6i<%8U+^&wRq;n0&RMLEU5-BMv``^+y39MD zqut`c()lOTx1o7S8m!d*$Ub{r_A%o^gQkNbfz&W{MXi|3ee2n(FB)!k5~T|9^mk0) z8~R;NMQMn5)$iMh%?1J_Vurm;+173Nldr$txovk>zCQ@Mj%cR3C<2s`L1P%EV#Jzs z5Q`Nq7N1jBwt4s}C#8^Aqwtb>yWxXZAEH5GxIjnr)Eb?wRR8F~mY5l6?>rJYN8Y}% zxtKV7+%80#s>x@7))Fi(u-~|j{#2ve z#5gs}j;^~D+nCfb%n##pKyI6bK5Z&6UMGu_WLxUvFB8)^O6_V4)iZ|*1)!50 z;6O*SJol_?p7 z#;mzqv+Sp1fcI!gnbVV6QO_mYmva*Sf{ZnmTJ^JLi$o|=8!4${srY!~SBEFnb02DC z6D=Ilr_51H7ke%piI3){uqWOr`9){gUy6WlyraL9Q{ydSS5_!ifwExT@J%D~KY7#S za=xXcY@n91+|8a>Cb?3;=(6oW;mCy9@Fzr9^z?9<_JbLXKh+)zq#_cjiQHDfLhC7*o6%%+7*d8P^6{pbC$(o#g;(51xvk%QM_ zWcjE$iNUCY$3LA{pMQVh{WIr+k%!)1gTZY+n2R9~Bx%WYwf&(MPi)of*?~vu8}M}$ zI5Qu3HG?*&K3OA|e=dP5U~%e(b7mXH!rODng_p7Fjju+B@aib~$?DAWlopp8hf{)r z*K<5Bo{u~cGam!3RY(QdZAzcd6PO7rNZ^4&jh`a8w(qn}^^D{p9LPT@zP^MWzGzEh zMRgD}+_~~;jRd-R$#(5?w88u5`eJ5tiWBmlFZyeZ4$PI=Y}FMoc}=`+pGYHrQOj6EcApaipslJExk&LW&2;f1D}qeVz(W-!0^dd7xXJBpr>{Q{nPm zz@7p!uG5e?V$;Ju5T5q!TKhwTY9r1q#QZ55=xLMHHI`e!=M4>tK0WGuhblM_ zC+Jl}KH@VTS(`z8w@uRP?n0}fRIRbZhKkWvA2?*2=2x?Q zsIQuL9kMeC8gnM z)pYyYn&;g%armT}mZI~nF*mcObMOd6bnpGgL;Wb>iS7^Fy779qUU^G@Zu%e}-5YMR zy#Cf_gz7mjBSmA~T`gd0?3x`m=l+3J1V#O82k3h(Ze>?1+1F~3cJb$L^+^2`2Dfo5L-?Zf2fK3-e z2MJiLHVnjlu<|c7pAF4hJo|cPa2SkLQdbN(9*Li1lgD5&tESy+Z$_G}e2gE12wRbB z++A5<0*^i}O>KnvwE0#=*~Z7I$ENs%nOCe@o)qmPOIjRO(kn^Y#ed8^LfExGK@)$o z_^mjhe+>Wm1!m|iM9BBe!7LlMX~ES$1aG0Q z)}`9+u3e?nMOPfOQq7+YI7+{SikjF{&Q)Y1&STy$p2@~3pbDyRjg$uZ%- z+!$MYQHJ=08Fj-MRBt{z^Rnl;O7Gts%lw~!8G(3eS|v_cb!!l-{8_oD#CuR64qN-P z7>VaPP84@SV%37hx7$t>f>a*0u0Xj6KUi;xK#PA0jXXJ|46)az50TiGz8b861L; zE5o8ElGIpomCn|x!v#g!V<11(>5L222?ow}6WzzQa~^vaU-*e_GE)1{!C|Wlw{!e~ z-rG|7Bo2FnT@aO&DM1w5*le8fz>%`|`fw^LR=hsWYTuzsN;okzxT<)!LLD9mn=vgz z@NK+Q{zYELo)sXSy8AFIl4XAPG$;`=8-Gig2+3dceut7|U5YU>%AWvdw`(m}Dg4wx zbavSaefiAhX^e%zm}dadh_AZd2}IA|E=%8+R3~f=n27kB<&`)Sc+ z+W4@g{1~4EhvB|#Pp9mAFz?h?>Au!WKV}#iUz>(VoQ}mVD`kU}_(T3yJJ> zhIJ702uire!RcT@ljK(>(2$6iJgt6NH$*5T4cFEU~+3V()R$9(F(T~d~z&FxaET9pCZx}3I^E5Lq z*H%!QdtoC2ivMax-C6f9G02WpYh3qG@*JG?p=nUip(57+#h4)6SweSSGx>} zir0_pTz1#U+gDTD$$r|DYA6-)EhpD}`%$kW)!V|6N=4>zk}lW%L>K8?;~@*jhfcFU zHV5fibPl1HX9t|i&3`yuQsgN2mScYiyjU^%S4>35H1`{yZ+1L>5UaZ9#< z-OY0&UQ+Ys1w~-H*{Rq!YggBt>Bg7Ou{TKU?raP`j_L7vFTN+I;{Lk^ zmzvOLr0OXA6jEr(Ko{YSNj+@LJL&zW*X-n$7Cu0B*L3I6v}4!a{LP!ElRfwPmumXv z5&C!tD1l#wS|iB6TgUJ0e|qYBpJ^wMZZ%8)=i(b*mS+>n7zRU@!0=AC@FEK7*7tfy zV{*r^$#ZkkNArhSg%ghk^lZ3Nj4CBj1@jM`H(T;fE=crs`D#&B_6XL}_o=|G*cvSd zeQXA!Wu83P9(zECT-*&Vel{ literal 0 HcmV?d00001 diff --git a/ios/.gitignore b/ios/.gitignore new file mode 100644 index 0000000..7a7f987 --- /dev/null +++ b/ios/.gitignore @@ -0,0 +1,34 @@ +**/dgph +*.mode1v3 +*.mode2v3 +*.moved-aside +*.pbxuser +*.perspectivev3 +**/*sync/ +.sconsign.dblite +.tags* +**/.vagrant/ +**/DerivedData/ +Icon? +**/Pods/ +**/.symlinks/ +profile +xcuserdata +**/.generated/ +Flutter/App.framework +Flutter/Flutter.framework +Flutter/Flutter.podspec +Flutter/Generated.xcconfig +Flutter/ephemeral/ +Flutter/app.flx +Flutter/app.zip +Flutter/flutter_assets/ +Flutter/flutter_export_environment.sh +ServiceDefinitions.json +Runner/GeneratedPluginRegistrant.* + +# Exceptions to above rules. +!default.mode1v3 +!default.mode2v3 +!default.pbxuser +!default.perspectivev3 diff --git a/ios/Flutter/AppFrameworkInfo.plist b/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 0000000..9625e10 --- /dev/null +++ b/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 11.0 + + diff --git a/ios/Flutter/Debug.xcconfig b/ios/Flutter/Debug.xcconfig new file mode 100644 index 0000000..592ceee --- /dev/null +++ b/ios/Flutter/Debug.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/ios/Flutter/Release.xcconfig b/ios/Flutter/Release.xcconfig new file mode 100644 index 0000000..592ceee --- /dev/null +++ b/ios/Flutter/Release.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..4d1aef7 --- /dev/null +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,614 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + 331C8082294A63A400263BE5 /* RunnerTests */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C807D294A63A400263BE5 /* Sources */, + 331C807E294A63A400263BE5 /* Frameworks */, + 331C807F294A63A400263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1430; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 1100; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.fltext; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AE0B7B92F70575B8D7E0D07E /* Pods-RunnerTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.fltext.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 89B67EB44CE7B6631473024E /* Pods-RunnerTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.fltext.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 640959BDD8F10B91D80A66BE /* Pods-RunnerTests.profile.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.fltext.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.fltext; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.fltext; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000..87131a0 --- /dev/null +++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Runner.xcworkspace/contents.xcworkspacedata b/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..1d526a1 --- /dev/null +++ b/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift new file mode 100644 index 0000000..70693e4 --- /dev/null +++ b/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import UIKit +import Flutter + +@UIApplicationMain +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..d36b1fa --- /dev/null +++ b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@1x.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@1x.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "Icon-App-83.5x83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..5f009692a3c3f961600820da7ead606b9d114b16 GIT binary patch literal 67636 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�IU{LgjsxuW}U6PLAFZ;(yPNQIv$@pbFgl6gX|*f&$~Z!v zxxW{-B6TQOYXEEpUWZe=3#1kI;%)8DAkzh!{{2$n`Ui%~>p)3W=Rht0$ z(ToP^&}mh6yCeeQRZv~T;*pjOf4*icH@iV;o(@&?fIt)xd3O@ts?s?nbVp7JXXzO& zIZ+EZX3A9vK0!9(u*>$R+0MLf2rKoIktA>4Y?&liCA148lWlYShb9)M0%#EXz>gmq90+i~&(12?p0qBvKvWNN-7lP@!ka?n? zsD>qJ&5fc{QuDRbFJvk+SdXWe9lOtVcIvcA#(Ll5pcO2mYl=95d6@SlTq$gxC7u~g zph}PRDmH>JuhJ_zC3-rv#>Un|8$9@cSy{i-OoRRV1tG!EkVW}^vx^@IUE+ei6zbKP zG#n}b!7{CDr%f(BunTbjkcD3?TWfEVO_%pkD4T`j|F*V~-F$aX&knicI;N_HUDThL%L&vaXtig9d5MYeQ!O^nM- zP)+{@t4H?irDQOnUU2n2W^oL-xhzp+YdL88v`rY4_vUyqn08aJ=)mMF zJ?%eFH~>oJ@fwRS#LMDgkE&BCG*mTLURt^wsga#E%$@~dYM!4Z={$E`YaD$hzyk0% zrXb=e@*sN1)QyjAt%JNt^vY)5YvOz6rwh*@F2A|mYRhK%1r7rH+QTUwsUq6%1AzOJG8=ZwkX&$G~8`a_r-;{5)Iy`PUyys z@Y4~n?uU^#w2D~hZ;A>qNjSZJ?m_`ZZOMFjXNj%3*GUb5Sf)T-KU>g!ENy}to0GhR zRwdQMff>#D_sjy3)Z7R4F#e8^r&gqJZ?XB_7f+6v7`|a%MY9m{K=UgWbnE`=RS}BK zmnqMS!9&;Id6&-l;D!DuzeV-ZXs|4`wy!_IkNDby`{6X~_*|Or<|JyYSMd|q=^IUrL}y2aFm!^v`t~PYIwP@ zxCg{z>;Ap8Wwi@k%T{H;oA;)1HHJbU?Y*xsUN1RY<9BduE@D`q$D{L_TeBo`a~#rW zUwi(moxrG9StaxZ{ZyA3H&bI51S7?C%j9Yy#$FHRNsh)B#{|-2Ppw9Z{siUWuEWT5 z1Cxb9!XiXw95^>?@yr#q@Sl}J+=jqerM~iuYAkFk`?0bqg&m|rra);gU2LIhJm<^Q zo{Ht6P&;;XOY_nZrI^`-$#(=@`d*U|at$Bk=H#|-1?00ym>8qM!n}d^JF8gz!anCU zvOww*aIFK?=)_Pb1>7^5g$%kCfcDwZ^|=}$JSI2NI?;6zfZaO;S(~7>$9q#BXX@jx z;k{cQqlI{~`!X?11poPX?^19|tP`sHk#JXlDb@hXqw$GZ%x<}U;bfE_``Q=|X~Gh> z49-S9!u#2{Fz#`Ib=#9a7+NIL-bPL#P7UNX05?U(-_2Df_ulft0@-s@Cc^qjgH0?K z?LtMp`cw!qsO&Z*=0#v>Ew4@(}hZKbN(#OAW^bBp?GvTQk2ytVx zRB%^{{3)H-NlZcX^Bt1M%g(&{`c9_hUci^PkQ#UU+GY|E3>4jj-Q7Cz+j>mI^X!$< zUaP8Q`dvx50sy&U#%mk3@UCyefY^kH5W-oW();q1G56g+B2@*s;oIg8&bfOXA|b_6 zH^$9#(^qgG!Q>X%)W%kTT}k06TP$RBS9N<&_jf!boLzR{ra>ZdufojDbLp+JxaeB0 ze+5@3B&xn?BW{7Fgk1(`cdOPqga@;olgfc~xb!NE2zY`G)|R9kbMpNTYIjHZx?G>P zFa1#QaGLoP9_-caAVn1eS!ciWZcGqi-#*-bu%lj>cIM+x(gE)R62IO4k~dwg0dt0R z*qUX@ZHE7;lIU=~olW8UADaQ62_CJ@D&g0EZvir(5|%~d1>=l4)Me37Gf-o5qv!X9 zBHmwtd*@R!kMjXgg9X^YNAY$7AG@J6{^1K>R;G7WL^JL;{V_;$=c%wI-r%OEVa%)~ zx8C|NNT;9LlK4?q4`GXPlTSeLP(1X94)Z4VxPy5c#W1eQ?5dP z&)k7z%}`4M@Spqzm;+7`Ncn~tod%$&t_-=TQCRVd{D|!3zr-q$HLDn2J=5SpXG5G7 zM`31+iN+p%!+oy+sewW-vIs#`b^q>JQVahhh=*Ze3_n|iQNg%Jmh;G+It!;NB*FsaB90)kZtvJ`6JRAoh{`9g!a4>p@z>mLbxrH99 z+ld_N6hvC9fE?^uMZO0-@k9*d5tBdX2UnonusWn*eM>-%O3YnKKr-4DV26BWu!|VkxX3o(U`JVbe;;@dd#td}thC zQl7PNc7BQSfT#(=Z?9f?ySk2(-?R78+b}reCAPpE{b*H77BgV+ZjGhbD zhC4w)9~O>#aTJ03nY7z*Ei8+Zz-a!L=2=0Glkr0QGs)>;&e~H(Gs5IWCw*vx|WK#A3}&)+(N_`2HgsR2Dly)cGd_fXwx^m8mO$ zI|OoyXFce%EC?hbW}9QdiG|3PhQ5|clR{JoOOMtOh<%M!H#SnXCY7zv7|)83!c++Wp;qeWqiejufOnf1ITNwf}t zmmGY7$o+=m5Ik`_b2qLEi=6vsbKqvL7$y+i&Xzeip&IJ*!xM~-P5o@=*YR7X4Aa!R zW8(?w;lfB07OAlR_9uSC^5&PF$gj%>721`^eW&Vg4ibpwwbRA1+302%U81dr9$?!8 z_P&JVw_bW{z-S(E%sy?27sfWY7$9nwiv(I`8%=TCS&|Hben{3g)%h-I+05$T1}`|X z>96uN+6*ecJG|O}+2>Z#-a}13>>+65fbKA`hZ;i9l+FBo5?3dIu&)W=!het`Y1Dk- zL0_{Hm@ZBuu|apVpW7j{E6dpBg!q971o&~GH&c|i*dlQlmL4pLgZHZS3Svntf%s+} zlD~&DkG~zYyOre3k0fL8b#S_zU8|4^)KDt_a7LI_Ut>Q0wb&*Z+0E{zvjcHekK%Py z{VIl+b>;q$R{)|`NC8ygFBDVpJ2^g$@#B^KeiiF8>m(m56B`$#eL@g#Nm?4a&t3?# zVxq5pwu}yc@8~CmXJd)9r1IKtq(?o5SWu+iclwcy#kel0*W==FT=|xd>lR2Sd)N!a znCPL%|B<}-cgUk{=i+_kOREP0;tC2)BuF*)6Dq9!j7Of-V8zw zFL2j`AOhNH9Kwv6Lv{)Ym@0ua-vF<6N={Bt*PqPyWoUrqcv zx7Z$X9-EPe+DJ@<$Rqbmt{>ut6Gs740 z^cxHWzRI{1*=-+NxZox3K+ZjfAN*4+|0y@}(L6D3-#I@BSA=sx4VRFstTL zV#^-5BXuFl&-wuqooD&W3^9`T)Qm5_pW`G#1KkUo0d_^+njgXS+`#XIHwQr=O8>T0 zD$7^IFcK16RN5twJ#V*_=5JU*`wfsN|FUU>2#|_egf9-9i*UyXjkif!LhkR?^p691 z?XQ-J)qi(e#{?Z1I3e4uilXYjK7q&|?wqonu+5I10w=gi*TssjKIV8G$Qq=<+wdS7#*+w7mD zvHadmac{y;)508&`^&xK@mhbhb2e!LK1 zFt8&=9{1!Z^LQc&Wh>8yXxtQhv`t*gK)+Vd==thvX!~)l>;U@gXe{5P|HEHYvwbi! zKxPrs|2bQmW`S8b{p5wtnz>y^-GO?rLA^h|5M5SmWGiD7U?`Sglzev&Cqledp=M+i zm`wFSsYCQ}6x_EbPO2xy^<+J6JkIJK7(2p}UQnHl&nkhy&Ch4P$q7D_z#=%FFh~Ml zY|h+9F`?bVdnu?8sG-2aQ5K^S4p+hwV}La{Hov}$1%#AC)DpnaoO2^;q()B{>W@lz zwU438lj9AhUh08xWucIE9G5B{45Ir2QUIOP!|&pPMUB0+-^9-QInv7qZ zjL{E6lQ>Wd84cg0jK{TqwYqSVF^oA2FaBN&VSWL;LJ3svA~mUlb^ zNy)y(QDq=~@V>>mJv=CDWqBO#GeDr07mq$qmnD&y{JioS3OeGaABzL}{MsNBW~fJKPQ4yiQ`9*v~pAwdJn5 zb!^v~W@VIO43-~L1m z{m)r7642U9I)C%FOMEa9h%Hg&Xd}zXToP>j%kP3;Q?5d`EL*=8b%#fgsKzkhO5!s3 zdxUnbr1&1hZt^kd&yk(gy;h?zz$*Vk#@KR~Ub=}2c8j?Gsx!l1XddJntEIfQ+3So3 z)-v5Vct1YfVfuJx34j>2%m*0c4uUhZ75wZbi##WR`)31)JszuE69j;==%lO7%&)yjt~!k>#J2CE)u5gX~6 z^+_v|WS*ZK>kkPDj8;dU2T36#AW3dblQ%=6L5fAa(a9FsH(Cn;`o8(y-W;(6qy^L6 zV9)8=?RQ#5h)fXMNF?jHs)5hbD7~8o&%a3PCraE_pYsp0yRPD)Ig zf2;2s6Ey_6m2YpnK$IJ_)e1CZ5&Xi=5`bk+h8P%}TL>W#4O~lo5b`W$(0YWul0ZSR zCEryQ3oIrs!eyzhT8nx->7$J_cyc`c--LI`G39?(Y#xj(Y=KuB5y*>_vwdO$E=J8K zytgGe_rH4JY@j*2Lq~tS@Zf$K+!@?@?=##Znp%#A+!8V}Z&zGQx|D5X6`7zhr9awR zeDHhjTwk7;L%xke7>J%>CD8`mV(n#CpAwJ+GHg$`8)`_>S&HDq%%x3RS~mS=jW^O9 zj+th5$l?%7)j!i4u?mSR(vPQ7!hMX_oz>Z-8&yn5lfhlLpdTk0H#mu(b((x7kZ(W@ zHx2Sh>i!(xHp+f8=QIQn9k4l`FiZ5MyPY#THI-$nx2OgtpyA zhS8MKoI@!~3Ew&1ij<3P5w%|5JZXXJ0VaNI&#*BvG&VBH}_48$Xg%-4o$up)Kl?Bb2s*RT7n{ z3g9*P&k)5gZ;r%ky(P&;Trrs3O+S;Ed6wvc50kmXeX~7{V+uvrc=|Mc$v?Ta@x#qG zLyi`{BYZ=$>=%nc%#*B6_IP8O-!8^r>`yKW!H8_sf6?z^_qI_%WQQvV01OaXm{#Cw zq=l1*F~~_a*)1nUx0oF5e>!4jQm?Y%ASGe}Lr>GO7w_c?Ut8m*)_Um;yr2f`ms~#} z^cwW?)XsnK0+;t@_{B#HI;L%-W$$5g6k|0&rgx4oQN(!6T_*YGn!<=J2bkNQpCVsd zaatxBMb`-qISiSy^5>HeMzX2LHq|8{N2MpwTz6&lv84Wik?5W0b|WzPfq;d7KH_Seq4878z7`7$I zBH*x_&z6k17kV!(O23{A4Y3#&T$MC8m#%f#jD@DC&yp7QMnvi2LS4h~b?@IDbzxVe zT1X<;pMxMAR|cd940hAv1{yz4NxW?S;%?z~$RO6-IW~N!V@XNZ$n^x&vjq7dQM;jm z@Qz-3#xtU5F1~nkt}ZYwvE#KRm2J7kf5tl3n0C8Ativ<^U3=1LUM?C5- zt|GcllIDi2qCk7HD+rI{1E69{`je!_%TJ1w9+PMI)jk;8QyCB`Kq~vZ%t`YxOWWo z!uPcvPS-OpozZs+kGdNN6&k6wvca3bGMVvtbY#~5qEc8esrYoMkJo#PW)N@BcNb|- zYLGeL8s^SdGuofRlFfKE-I*JpxLVXQU5hr?*;{#Pyd(Ynrz4jc95x)btMkTW*I71x zpfwdXzRVkIL+Znj`UtbmbnC;F!8<-S@g59WzkJ*@iY9Mx=zm56#HtVPKCo(<>$(ot z#@B4_@3VxfvrMLKaEJzF>XJHX^T*^D&oor|76NoDnzPS4S)Qe+=rsz2sz=>FUi+@k zd`Dji{o~{>iO83^1^L<x4BM`U3ibDWMwup_lO)&7li5FMHydxoHGi~q6A-P{ zJ?zKK*NZG#E4oE}b=iyFC%@%fIcYqb5Mmnv>Cv;3wJ+L@9C93qb6RbPU%ieZllpIlz$HQX5c7*>N#k z0l%Vb097Zkojhizu8XX^R#9|*$V|8=7%C%_8<98;f2!rt7dPY=i;M|~`7ZgqemoMF zXt*VTT{-+47e9NOLpM1j*DKNb5v8%ScOk1peI@0df9st!=KANjqZ>aXxU=y4OJ9$~ zZ!}>QX0vW>_YodVd(vtGz|~cewsv3f$uOj_-9|m>39i|5an$!gV8vJnvrfCT)cx|L1}Di+&nj?wkpJUX4i{nNtHQ-t29W#VWk54O4DzhSt1U zQG@W(-qGFbEc1_a1nx&m3OooW?!ccx6a5~C1`PClCT*zsnB~j$#mR4%=?X+9b0Gf5 z$P2YoS2cY(;Fd$)Bsj$u7<+qI+9AmVm!UN8%1UqE?X8nm@7(QMjDNm*&$^Y3OWU>1 za)DO&m~6jaGObXF=psd&xoV_55>}Vd_jkJMof^p%N^avu!m$ezKW#X!WNPw~W!72V z4EMhj-l#k$t4giY@H>C^g|(-OUrt_3pQ${X9>tyR)t&Oxp5AZ95cUm1#09Z?-CHj} zsdj@aA{DP$u6rAy?N2bL$AxI-(XWY`GYX4}Cb|V^gcEQTy-Beeaw!&n<}j1eX~&kd*eM>TNExxG+R$ytJ=BFdJ8(J2viYd}l8%INXNA1wGl6jfmEk zwhp{=T|;Ii+?Iol^X4DjS5JK$@jA2;A63L@pY8H$X^ z^9Um&Z(iYJaqW~Nn#p{}&(&iHo3Q*oK61dmV|9D*-$+CsI}hs#862;3q0y+jT1qw} zHJLCYcDAjv>WMY}?mOOtvzZ5Gy)3eE$7%@IHZBH`49=f*J-@llCwrT_ZR^OTX)E5q z;je^i>M6IvkW_EY6amEpvLEZG)gp^!4jZxyLtpZTuTtz-sO=g2ysZzN_bEZ^D=SOc z>i(ZX<_w^qt?ru(O#Q%dXqXX)l1lZ=j*Ar=Kb{vez>x=}7#t(p z5QJ-ZO6;#vsTCV+bX`P$*w~R6dX+tsorMKj#Btp8sIviszudhYyS#esw>NU;Ifo&Y zh3&`tp&DrY4ZTgA56mTFrx{lnoKfqz4GZav*z6qzS&{A!A0;B0{x1|&H{b?$DGZ5S z-v860dYVEF&XuXl*ms`OR9ot6&na>vE_#U)akE)tdk8)ZHH(ed}_qaq|>--_fk8 z9!NW+Xj8Z9jkt|V{3`p8)vU~ugti`$jr;PIkmn&LuS|_@Lna*t@{CH{il0CR!`uUpNsCFY^q(uSf zHL^{5!is0jVaTlJu*=@nCo+eAQaAtB@Qn0tJ`~nWxfsNa5Zz%4vwT>0Swi*Qq;}yG zrHqVvHf?Rm6SrperyMO}?HoObdri2~;P=}8@58ERg=2sCHfXGief28aKVq({iZGaW zx$>$|gu-6`v>oeWXVW>a;aI~vlJOt zb1TwrxM;&tSzTp0?6FP6uPvAx8S#gQ3nz<`AN(1K`SmLF>P2?XyMUp&WCeE2z>hBL zX-BloleO8tiiwL|heK43+Gvs~vg^b@J)OwTq5AH$o|sQFz~_vMs=E|;mwpl8e^U5F zAIz*)_>?hok+9(yvE3cC#h< z=0YKC^uA)%cp>)``Ag~b_Dfl($mw1ZQ)IU}%OG+zberU*Zu6h2aJBSU2w-nu# zH4a_Pf?#=|fHYII^0-3qG)u??F;zN*dXG%2W<09@_PC;ZDj-L5RxhmZX zYYpYm2Ij?bAwgDhJv;8kchskZq-09j_+F>>6#4C!ZX+9Em&VDX2bo#wSEYzfzd5%Y z#A;VqPcT2?rBJ>#v61>*Jyx|?SPIq&Ax35oBw_EZY!?!MH?uEjkS_AQ(!PcT0LixDP z!EE=HNo(0dhta{`3qI(Sjq7AgUx<0{V7F0nQ=!Pw-tpwVQV!h~VgJ21rD#_lp6mF5 zd|e9Nj*FG zZd%Z&B;`Kg_3`-v(JwddzRmMdF6sPIy7@X3OGnFgSw;on+Tei#)}>K%?ZzRjYpc9& z_u4lc_E}`$+ZQ*-$^5o+cH|Fl#TOf24njZ5Z@pRisM^1YvxW6#2z7hv-Ipt(8H97Z zU``k~ZW5}l#ypQS?s@PC|6tmYDZzidcKUMyiS={Duh&%}@mr=6vA67EkLT-2-^`-s zn(+*OEsV0h}eApfh^NR?)1WQA<09r!Ua`&&n>B0B+2Zr{?$9WQe}SBFar zg!<1K{F?hnAvFvUX}4)Bem^ut3k+(!Xje;EX(amOI%#yClizVHy1jEDU1{;R^6U0& z|E61wu=1UE7oL038F{!c-Xwzy?*Hiq5sR`xT$@#YT^&sJ!bd|2HX5IM-IgrMir%#c z_pWwetA>2-!yR1uJUz^}2fWVskrafSS;+`-cD(u#ninn**PL;^>Vj#P2%T=(u&z|M zy|Xs={wncZ*a=ZiOu8MT5WFHq{<(FlM3t`nV(b?Kvnz((rqC%AX6aQ|NaP4{1UdP4 zL>wH5`}d7_AMY>Q<8^bm$xq&G7`}Jck+M_drny49mgg<+F9*Q5!ufPC#}&?Wp1rd2 zco=tG3wx}0n3-dm-93KCaCCp_JG>f_=%dtfg+&Koblw*u!8PuSHB>1bx zO}eQB@2`U(&)0`>rx$gf7q*OCy9Ul{bX9Rqd-~eW{@@V$`6R>fWF;DHZD&)Q3ES9c zbbM(EIFULox=N&2iPo~T1o&>>@=*rYTGTPOkMam_C{)>)gnXXt)W#*01Pr;k9BQVD z&MHu2Y?XcqWVQ>B*TL1shVh-&>1~1Q#rl5Uij0MyKl3XH3CAlcZL$_bc#%^z4;`mG zM8`;K79BAPF-7%9I8H=^K6sbc)aXxb8!2MhT)3MdL2&2wrxv$_o>T}`&u<&WxMi7 zD|<+-KG?G{pB1<_f~e7oLaIId%ja**FPB;V+6$k zFJg6@gKh;f)m`sd=Ag5Dl5Q_}B~*HU1u-L@0hU}U*cGl%<;q_?G}-f}p4tal9t=He zz5$nv=h#SR;9MVLy{K-*8^=zLe@PZ_Z?*o9>0~6$zd%&vjYwAg^+=Nwr)_5y-b(7C zpB;ZTKS$K9D+PrsEbl3rS(+%DDZe!tJ;!oAy!k|Vm&sIgHL@eZY%>jj1nu7*!ph=h zfF>~MeV&N*Qim!+l%>J&A)P;`TfDD*@5ftGq;ddlP|9%=6P(&u4N1vFewO{hRyFYE zZ1VOH0;dbpQ2KIYgnT_|ax{|-WClz7(8>x70PLyjE&mc~2B$k%TvHde!h-}xsvyrr z-Ym*OtxmJ!E-S!)LGdZYJ~v5{#UA)l8d*COY7$PJxtwnS0#u@e$~7hm5fgU zI>P(q1iF^BojlENKSNR z*8^v{zCKoZWM^@h4s5wFTQ9qlD>e+|DK8$6T#Sgl33b*@W*k&Q47$^~Rz>Xu^VvZ#^h2%^{`l9N@wi^Nl|BVXeAH;D;L1Pz; zT!lHRyDsZn*S6wBx$XCII+iJ0TXuE>&zAN?Jxwk5oGmHpIe40eY$j_RtDRg}(uF#6 z6nd-NPA=fgjZl%6mRnNe*0MgU5{3r)ptI6ykMT#1#L`GM51D$$Sns1E)Fo3V`p=u2T$KCj1hpWVJNkKrE{_yX;g3v+f_Ipc>g&85V|RzExWlO z&`dN(5+-z(zo5S3j%@exW#IUex zj(fcCiQ2{RAbn~l|A|SlBNQ~cob7KazM~ot><1@Ggkzu2aS%%Y2Z=L85eVk_uxvve z7}o^gcgLoue5P(iu&$1aiW>?Zcp+C@IcD;lPR>Y~DikzftnM*fh~^b0*1pJVgLW$6 z{E*`zXPXI!98H+%%c_FsWD+fkrEIw!-X{2iz*3pEIs}064 zD$O_GoX030p9p%Nf|67UqkSiD<8vQFxrlcKs%v7F`d#&{d#Zgxh4fztQKhRlK{8n6 znOE)b({~yp&MPGTdiWj6g+?6@Bh4cB5GGciG=)|J48855;3+?TZIcg&hzv}|&xa3P zFRc))vn&q_fNN9|SNYhLvLXxo=UT_O@;7M;Jq*Oeab$D>pl9C0NATA(r3X(VntyKL#&enRw(V*Ka5*5VZB_2Pl`T z#Wbgh9U{AAgQ4 zEGx85dfq~An+>f}?ZsCe>r{w7^*3o(<nv3{V~|06Cqx3A@Vt&zlZHz6=apW4nfWo8zrLob&5{_5AU zC+v*BefHXZqIR3?qeLhtUh04C%8)&vCqu&g7uCt4dEp;rH2H)PqV*l`?Vnm_D^m7*xJE|5350 zv&r8Wk8vktPEB44&h&C!gljJn3?;>)_S`<4Lrm_BtICCjs`0e)Qf44&{ew{+lEwub z`|L8_w0V_1vO*NCbslwOV&(X}+mTd2SC5b3z$0)7hN9wyC>+!ej$cr}tF(W0V2=7L zWxS!A>_{C*N>1Pl6Q_|VG$(9Rm7{fSKi65fSuKEro!9}Bw;#T))&S6f&K_jz9~sTG zPAu5v6drEtD*)(-LEMb3)pl17C`S4GS_ zLwiwqjhkNot^`J}C0n{!75LNoN+vTl?jvclV~=15OpNnFq6jl%Ba9XbA;tXs>pW!j zanH;EjJ%qX*{0>(aoFtnRKv&P=!%Gx?)_;Zgb?d|PCB%MBdsqEn(e(bRj)$j=z{U} z+D(jVZs<%>1FW<;DH%Y?6pw>N`$#P0gD}kj55?(&`+!~;>O~usu$ouK)xgRc){Rh-oziOzgl{@ax&6r z93!Jy-q37E_`RL}3MVxrP8u2_;PmX;%fY_vPA`-tq8+a32%e~=1O&XkbRau@Tpj}Z zokt`)lz(mJ5DqT-spJ1*e&NUG zNxG?~Cp7^eOWRK3`o9F2lDf8hP<|G)eC4B>q2qqMkT83&7geYwKe;`7O87w?%v8V< zz6ei5Fo(dMCChkaTV8a~##>pJe*WaeNdGXw&hfUkjSG&u2zaTJ(Nwr3hWPPkn{!Cs z8DuP=?bNr+#Za3w0wwaESAg$HiVvM0lrro6=C9#Q;H-vuZD>E3S-<6}e(wtaj1j3U z7X}~AF0z+Agv)uSvNyltrMLh`UPc?JB zi?4Cj0Rk)`8gsqbY^pwi$GHMv2{WM&qGDxQcE3-P2Xx<_ch@oSHQ@ff+L6nwkZtG`+X zAcyz3indawkqxoZnqsyG;@WHyTQentU`9{&Pi=!8ufI8r%r&I9Cme&y+Qdvo1 zb+?c>`$|e!m#Y()WR_C?BF8eqAtpbA_#t=LMPu3HQzBL~*V(%QP{ z7Lh;&ae+#IFceES`peIyZ`}weQx|ql*^BOzN5owKd7+K&1B2Oy*2Y2IiQ!y`!F?fi zTFvj+{!UUXnCWQ>fXZ3+}*>L;ZH z`2l&avXuA3@`>iB=sRGwh?dXk7)liomEQsFmVxYX3g?9wFQm1%wx#>a15|>HOW}LA zklJJ-s4<0%$;KPc6{kcJ3C?m|2YZ1SZMVNp(N6Fw-o1;C@O8qMwkLi1!yvAbtxCVP}0PsF&Qt4jMIdHYb$#PdTT zL;@%RC0$}Q=7-QZfL{INY*FF!2|+`-3VXO(f<}_bx{5S(MUf-^2;}`&&MCc)83=L$ zLQ0E*o3K93Q}3A%sX1v9w3%E!$xkjXOuG$x>gY}W)OkTawO0 z@LZPZ1N&2m@$9Bg|8#})!Thuq(aV=po=jl5f=+xwbD)Kw4s9|3@C||-@SxzHh55b& zPBjLu3WQ%>S9>6|cJr0)OdA{b14mhaeZHL($YGx$0qu%o39N)dp|ywlzVOMP3zr#s z>FRf00Pp~?pNMfgdQ*ne)+I-sm)ldyx)<3Q?v^0a=EKcytx;Sb+uKVUkH$=Z$`A@V z@7;zR5@f4bu6gx#^WDbn$_{6j#iLQnUF-K26)orbu+MFZqqR-vxKBP>t8d(jTY|AA z@qF^bCoFyG?X$CpT8HpCYfoP!K3%usG=uCcS8?=~)}JZ?BWPiapvTMM6mCQ(Vn*m{ zC|QR9X`3(03kH-Vg+~L|^Yx(FwtQhL&a>d3U6*ueyw$6pAwT!azl4bY}I*Sn9 zfwU#f7rKa7rP3K)Hg8IYrhzL({PwzrUQaKr4nNTla--Y4tTNS(lSK$|zrTlgW?5wz24m>1WcFCIV>SJq{ z?lchZ9N_>32}F|a!R*3=Se8=uWj&WBzNELh2xh1Z-HJ4|0HSAoQg`~}ZQVpi>$5lG z-tm>X6w68hu#~s?MHYP-$R*R(rGax1U+MNeIn7Ezu4-#^gp3{nrJ=pE59$U-1A-TU zH$+`-c{MqByfX9x)WqteYtLu?fVh6Q*?bkuWKUa(Ykxnt0My;3JArHv5U>yFJS86d8 zn$gc<7b^P685nmj?{R*8Qh@v^fGOP{C3}($P{ln6d?oNYS3AwG6ge-_V+uZi!@h^Z z2EA55zk`s;R!O@UiBZqdv2FqfJ@TC&+HZsb;8WNK)%C3-0a3ppGoLG-)N13D30^Wh z4ueF_f*Gt*Scq61j~H&yZISt;DotZnwObS3s}~@ zbu3lt+jS7$=Ki&gS+%R#BibvoO=Et5sQH2%<=*=|Yba+?Wi> z74p9!E_vZo4I88fO;H(c&Y@YgQIBB zp4alwNX9p`?d}V~z+|!h1}u-dev33Ty;*9p^1f5?-4UO)pHUlr{~k!<5Axx~{^7$p zO<7=rCeGai{g;W_^uzdGjmqHh;NZnT0pEkpvdSi-jW7UufMWWaQIP`L=CYeL5A4tT zDnT<=rvkB-MA#=*OE3UEH8nEdQ@ryRSXb00k#O7}Q+s&hM^y_$v}lrnW-iUSR?l_u z(9*?JznDbzvVF334!h5wc?P(je=Kr(HNu$9JhWja`#Z>NO=2Tmt!bsyNy?x|?6RbH zmBHNFHHBM@_Z#fCS?E%NixyI~MWaTIaoD1&C8^NUl=*07c@_L}=g3=KohEF7={gL9--!i;>JgpnPZ{#bXP{2&JritVr1X7bn*P-VV~-aAT#sem z#5r#~5oT`u7ugA5(@o@oPOTQ;t#3VnK!+ydx9F)hp0+ZiM4K8^%iRPcPM#-mtv1UI zl)hQ$+RhRU*u$0MSK&Eeqja3L;|!unRbY<}fO`*e&XQ6#e>YSNceT75ruEIHNZ)hA zYwrTS*JG&|25`vw04Ffi!{Sn0Ja)tS)Lv(P)!{lAnkFd`7y6Me`XIF7I`2rdP>Ej= zAipOaWuK#ZcX9{J5~pTjOfqLNe|MH^Jc>y6LY&(o-Ctg-l-VGS8f}BnKt@IH`HEw z{JhGU7M5XdVX)5o;@N`noZh5dL$4DuCm&$KUC%M6fi)G^QCfH5PZ|uGqvh%D9WYaH zlHy<3%9>@XLeq<~<^BYkPXakP5j;JWo6F%ep8ARA%rc^g1~FbyLK+LhZZ1Z%A~8%7 zdVniCGBs~hJ)4+*k~Ez`nJ1&L?5wHp;=QEskdFElQ2*64Q@G@Ca zyD9t7L%-gPmf}gAuiZ?J=$f=+#6~TCHas$wU!GE%qf2r!8NPV}?6X%!v*xN!9Z! z3^@&Y6ob5Uh4VMk)5F>Ut7OG7z(F&_B7aqCFf&n;O&9yhooo`tT#mXY<@S<4k(vlN zlajCjt~!XdK=P2Xix4Qih!71<#R#(!8{u7d8YxED%;@p$wUJ;>nz?28ZV|ojJv4)H z^2(6XI_@86gF8F|)8LaUW%ioJAPZ|OYC&VCD@QozzAN%-sTqFQlr2HHDaaRCeoenh zcg+F5OjB)$$`{)JoF|MJ0CxGtD6Y8Lomp8iMEq)=fzgEl5+sq5-3P@U-rvs!6ZX1B zs#?Bk>%GWt(Qaf=M_P4#!%LtLH#{hJdCIafphQP3jd`-Hgu@&ZMHsNCO%VjtiNqN= zjF>K`z7>LQE_8ZHYMRDPghs_IA=oD-x@ea;cyZe40dA}4eh@e%4sok^ko8Qg!Ah2e za4w$!7Z-aiy~B8|tV2n1Q?2$aYuaa+(pe2!4Iyqif#77d@VOftWK2kuT;#vAhkHr> zm=1AQmX`Go?@zj>)LF`4UtXPirymiv7^Gl2@mySa5wyJZds`#lcmjmW*D~*t&F5!fBp-M$5O@aAjyCo(iV4K@U}HUxUkFda zFO8Mnbe6l`rRdgFHSVGb-c{|gp7j$2DD69y6hoopJS(SfI37JxE6Z z()oD`Hxgew&QFD}qDbeZ8?727Z%NoKn4v73i`BeQ6U6|$5S91&t*W*@v?lu-=;R6s z_NVoA(x|C4l7!E~ahhzN|`i|&hbH;mVKI|84az$PtFJE zQ!9dZ!wyU;dj$yTUiDkU;>k8a2tOatTJy8i~3n_^mzw%5AL>YGUZ9Cc?joQne7 z17wQul%7sNbg2za_uR=nRvq_LTFdFV`)mWN&&F|_Lb3GxCu0Kh(q;NtWftElHE+H( znHN1#l_NRLwED>tcalGIC{jx@4CbIH7sT$fS4t|D(l0@=gza>iV%X|U+khBw@>|GF z0VZkN-nmnHeBnN85w#`tNDb{6_EQ|(6R}NtVA0-|=s`_olW5?Z8wb8sXs8iu?h8^J z#r+tg+25y2AsS8OTl~Jg4Q&5W-dmg1?||f9IR8|OFN)>#MwgCw4c)ke8s-u> zXG4!_56pNr2QHSs8hUFNtu}*085?6O9u`ymsJ3#*6 z#UBO1ir#y`k9q|Vc7KiUVO|kMW!ESbZSp`IJP2$naLJH8(99M7B-G%yFU|~fSEifw2=(2Z{vB)OM)=G0`l1gch8Vq>1D6 z@!r`<`3Q-J3gOfF?(Fm9-#zcER~ch)n3p(PLK>^jhz zv;zNm-q|v$PK_)MHf?^POT82=18?&iREK{`G8^HsMSr_`<9wAXfc&`_4CWXV2Swp* sWomb#V8ttbuijj~Gm1RR_5T;xAJD}Clobl+cK`qY07*qoM6N<$g5kCm2mk;8 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..e821673afe850b3582b3fe46a2bc01107fc671e3 GIT binary patch literal 1278 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 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..1b89ca5b1b6209aa508d4ddb123d49ed5d920ff2 GIT binary patch literal 1760 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 AMgRZ+ literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..e821673afe850b3582b3fe46a2bc01107fc671e3 GIT binary patch literal 1278 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 LNkvXXu0mjff?$l& literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..d9f52748f7b87af61e1b250b9fa1d48853be8a17 GIT binary patch literal 5006 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 MGz`?M9y^5p4^igPQvd(} literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..9e655380b1e89b784b57263439495d87175c876a GIT binary patch literal 1516 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 gf+5L4!T*BfzvV0EOTdJWRvaOnP+5`jBKgP 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 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d9f52748f7b87af61e1b250b9fa1d48853be8a17 GIT binary patch literal 5006 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 MGz`?M9y^5p4^igPQvd(} literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..ff709a73378a2f3578081f53f76b5b78d600e581 GIT binary patch literal 9250 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 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b2d122cc9783a4f5e48e7055659cb195d50d4538 GIT binary patch literal 6993 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 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..bf0782a76b07f0a746fb8035f6b009a4b8b359d3 GIT binary patch literal 2723 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 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0a48960f563f230a07ea013fefbf848289aa0982 GIT binary patch literal 7376 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 sO<0OwOnixfyZci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 0000000..89c2725 --- /dev/null +++ b/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -0,0 +1,5 @@ +# Launch Screen Assets + +You can customize the launch screen with your own desired assets by replacing the image files in this directory. + +You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. \ No newline at end of file diff --git a/ios/Runner/Base.lproj/LaunchScreen.storyboard b/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..f2e259c --- /dev/null +++ b/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Runner/Base.lproj/Main.storyboard b/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 0000000..f3c2851 --- /dev/null +++ b/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist new file mode 100644 index 0000000..64039a2 --- /dev/null +++ b/ios/Runner/Info.plist @@ -0,0 +1,49 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Fltext + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + fltext + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + + + diff --git a/ios/Runner/Runner-Bridging-Header.h b/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 0000000..308a2a5 --- /dev/null +++ b/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/ios/RunnerTests/RunnerTests.swift b/ios/RunnerTests/RunnerTests.swift new file mode 100644 index 0000000..86a7c3b --- /dev/null +++ b/ios/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Flutter +import UIKit +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/l10n.yaml b/l10n.yaml new file mode 100644 index 0000000..4e6692e --- /dev/null +++ b/l10n.yaml @@ -0,0 +1,3 @@ +arb-dir: lib/l10n +template-arb-file: app_en.arb +output-localization-file: app_localizations.dart \ No newline at end of file diff --git a/lib/config.dart b/lib/config.dart new file mode 100644 index 0000000..05bd6e3 --- /dev/null +++ b/lib/config.dart @@ -0,0 +1,69 @@ +/* + * FlText: A simple and nice-looking text editor. + * Copyright (C) 2023 Aggelos Tselios + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + */ +import 'package:shared_preferences/shared_preferences.dart'; + +String recent_0 = ""; +String recent_1 = ""; +String recent_2 = ""; +bool firstLaunch = true; +int accentColor = 0xFF0B95FF; + +void loadConfig() async { + final config = await SharedPreferences.getInstance(); + + recent_0 = config.getString('recent_0') ?? ""; + recent_1 = config.getString('recent_1') ?? ""; + recent_2 = config.getString('recent_2') ?? ""; + firstLaunch = config.getBool( + 'firstLaunch', + ) ?? + true; // If the value doesn't exist, it's probably the first launch + accentColor = config.getInt('accentColor') ?? accentColor; +} + +void addRecent(String filename) { + /* + * If a slot is available, find it and set the filename there... + */ + if (recent_0 == "") { + recent_0 = filename; + } else if (recent_1 == "") { + recent_1 = filename; + } else if (recent_2 == "") { + recent_2 = filename; + /* + * Otherwise, just push everything down one row, and use the uppermost one + * as the filename... + */ + } else { + recent_2 = recent_1; + recent_1 = recent_0; + recent_0 = filename; + } + // Finally save the changes to persist between app restarts. + saveConfigChanges(); +} + +void clearRecents() async { + recent_2 = ""; + recent_1 = ""; + recent_0 = ""; + saveConfigChanges(); +} + +void saveConfigChanges() async { + final config = await SharedPreferences.getInstance(); + + config.setInt('accentColor', accentColor); + config.setBool('firstLaunch', false); + config.setString('recent_0', recent_0); + config.setString('recent_1', recent_1); + config.setString('recent_2', recent_2); +} diff --git a/lib/custom_text_styles.dart b/lib/custom_text_styles.dart new file mode 100644 index 0000000..cd640a8 --- /dev/null +++ b/lib/custom_text_styles.dart @@ -0,0 +1,38 @@ +/* + * FlText: A simple and nice-looking text editor. + * Copyright (C) 2023 Aggelos Tselios + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + */ +import 'package:flutter/material.dart'; + +// ignore: must_be_immutable +class TitleText extends StatefulWidget { + String _text = ""; + + TitleText({super.key, required String text}) { + _text = text; + } + + @override + // ignore: no_logic_in_create_state + State createState() => TitleTextState(); +} + +class TitleTextState extends State { + final textStyle = const TextStyle( + fontSize: 22, + fontWeight: FontWeight.bold, + ); + + @override + Widget build(BuildContext context) { + return Text( + widget._text, + style: textStyle, + ); + } +} diff --git a/lib/l10n/app_el.arb b/lib/l10n/app_el.arb new file mode 100644 index 0000000..fbe7ee6 --- /dev/null +++ b/lib/l10n/app_el.arb @@ -0,0 +1,42 @@ +{ + "@@locale": "el", + "settings": "Ρυθμίσεις", + "aboutFltext": "Σχετικά με το Fltext", + "fltextDesc": "Το FlText είναι ένα γρήγορο, χαλαρό στην CPU πρόγραμμα επεξεργασίας κειμένου, γραμμένο με Dart και Flutter, σχεδιασμένο να παρέχει ταυτόχρονα ευχρηστία και ομορφιά στα μάτια.", + "githubRepo": "Αποθετήριο GitHub", + "welcomeToFltext": "Καλωσήρθατε στο Fltext", + "startByEither": "Ξεκινήστε είτε...", + "creatingAFile": "Δημιουργώντας ένα αρχείο...", + "or": "ή", + "selectAFile": "Επιλέξτε ένα αρχείο...", + "tooManyFilesSelected": "Πολλαπλά αρχεία επιλέχθηκαν!", + "tooManyFilesSelected_t": "Πολλαπλά αρχεία επιλέχθηκαν. Το FlText υποστηρίζει μόνο ένα αρχείο την φορά για τώρα. Παρακαλώ επιλέξτε μόνο ένα αρχείο για επεξεργασία.", + "openAnExistingFile": "Ανοίξτε ένα υπάρχων αρχείο...", + "newFile": "Νέο αρχείο...", + "close": "Κλείσιμο", + "beginTypingYourTextHere": "Ξεκινήστε να πληκτρολογείτε το κείμενο σας εδώ...", + "loading": "Φόρτωση...", + "errorWhileLoadingFile": "Σφάλμα ενώ φορτωνόταν το αρχείο", + "thereWasAnErrorLoadingFile": "Εμφανίστηκε σφάλμα ενώ φορτωνόταν το επιλεγμένο αρχείο: ", + "editFile": "Επεξεργασία αρχείου", + "saveFileAt": "Αποθήκευση αρχείου ως...", + "operationCancelled": "Η διεργασία ακυρώθηκε", + "noFileWasSelected": "Δεν επιλέχθηκε όνομα αρχείου, πιθανώς επειδή ακυρώσατε την διεργασία (Κλείσατε το παράθυρο ή πατήσατε 'πίσω'). Προσπαθήστε ξανά.", + "editorFont": "Γραμματοσειρά επεξεργαστή", + "editorFont_t": "Επιλέξτε την γραμματοσειρά που χρησιμοποιεί ο επεξεργαστής. Προεπιλεγμένη είναι αυτή του συστήματος.", + "saveSuccess": "Επιτυχής αποθήκευση.", + "warning": "Προειδοποίηση", + "androidWarning": "Σε συσκευές Android, δεν θα εμφανιστεί ένα παράθυρο για να αποθηκεύσετε ένα νέο αρχείο επειδή δεν υποστηρίζεται από τις βιβλιοθήκες λογισμικού που χρησιμοποιούνται. Όταν δημιουργήσετε ένα νέο αρχείο, θα πρέπει να σας ζητηθεί ένα όνομα αρχείου (Μόνο στο Android). Γνωρίζουμε ότι αυτό είναι ενοχλητικό, και ζητάμε συγγνώμη για τον περαιτέρω χρόνο που απαιτείται.", + "selectColor": "Επιλέξτε ένα χρώμα", + "selectColorShade": "Επιλέξτε μία απόχρωση", + "selectedColorAndShades": "Επιλεγμένο χρώμα και αποχρώσεις αυτού", + "colorScheme": "Color scheme", + "selectColorSchemeUsed": "Επιλέξτε το color scheme που θα χρησιμοποιεί η εφαρμογή (Απαιτεί επανεκκίνηση)", + "recents": "Πρόσφατα", + "unableToOpenURL": "Αδυναμία ανοίγματος URL", + "anUnknownErrorOccured_URL": "Ένα άγνωστο πρόβλημα προέκυψε κατά την προσπάθεια ανοίγματος του URL.", + "filenameTitle": "Πληκτρολογήστε ένα όνομα αρχείου...", + "pleaseEnterFilename": "Παρακαλώ πληκτρολογήστε το όνομα του νέου αρχείου. Θα αποθηκευτεί στον φάκελο εγγράφων σας στο Android/Fuschia. (Δεν θα προστεθεί καμία κατάληξη αρχείου αυτόματα!)", + "errorCreatingNewFile": "Προέκυψε σφάλμα κατά την προσπάθεια δημιουργίας του νέου αρχείου", + "cancel": "Ακύρωση" +} \ No newline at end of file diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb new file mode 100644 index 0000000..359c628 --- /dev/null +++ b/lib/l10n/app_en.arb @@ -0,0 +1,42 @@ +{ + "@@locale": "en", + "settings": "Settings", + "aboutFltext": "About Fltext", + "fltextDesc": "FlText is a blazingly fast, lightweight text editor written in Dart using Flutter, designed to maintain usability without giving away on looks.", + "githubRepo": "GitHub Repository", + "welcomeToFltext": "Welcome to Fltext", + "startByEither": "Start by either...", + "creatingAFile": "Creating a file...", + "or": "or", + "selectAFile": "Select a file...", + "tooManyFilesSelected": "Too many files selected", + "tooManyFilesSelected_t": "Too many files were selected. FlText can only support one file at a time for now. Please choose only one file to edit.", + "openAnExistingFile": "Open an existing file...", + "newFile": "New file...", + "close": "Close", + "beginTypingYourTextHere": "Begin typing your text here...", + "loading": "Loading...", + "errorWhileLoadingFile": "Error while loading file", + "thereWasAnErrorLoadingFile": "There was an error while loading the file: ", + "editFile": "Edit file", + "saveFileAt": "Save file at...", + "operationCancelled": "Operation Cancelled", + "noFileWasSelected": "No filename was selected, possibly because you cancelled the operation (Went back or closed the window). Try again.", + "editorFont": "Editor font", + "editorFont_t": "Set the font used by the text editor. By default, the system font is used.", + "saveSuccess": "Saved succesfully.", + "warning": "Warning", + "androidWarning": "On Android, you won't get a dialog to save the file because it's unsupported by the libraries we use. When you create a new file, you should get a dialog to enter the filename on Android. We know this is frustrating, and we apologize for any extra effort.", + "selectColor": "Select color", + "selectColorShade": "Select color shade", + "selectedColorAndShades": "Selected color and its shades", + "colorScheme": "Color scheme", + "selectColorSchemeUsed": "Select the color scheme used by the application", + "recents": "Recents", + "unableToOpenURL": "Unable to open URL", + "anUnknownErrorOccured_URL": "An unknown error occured while attempting to open the URL requested.", + "pleaseEnterFilename": "Please enter the filename for your new text file here. It will be saved in your documents directory on Android/Fuschia. (No extension is added automatically!)", + "filenameTitle": "Enter filename...", + "errorCreatingNewFile": "Error while creating new file", + "cancel": "Cancel" +} \ No newline at end of file diff --git a/lib/l10n/app_es.arb b/lib/l10n/app_es.arb new file mode 100644 index 0000000..16cd5c6 --- /dev/null +++ b/lib/l10n/app_es.arb @@ -0,0 +1,42 @@ +{ + "@@locale": "es", + "settings": "Configuración", + "aboutFltext": "Acerca de Fltext", + "fltextDesc": "FlText es un editor de texto rápido y eficiente en la CPU, escrito en Dart y Flutter, diseñado para proporcionar simultáneamente utilidad y belleza a la vista.", + "githubRepo": "Repositorio en GitHub", + "welcomeToFltext": "Bienvenido a Fltext", + "startByEither": "Comience por...", + "creatingAFile": "Creando un archivo...", + "or": "o", + "selectAFile": "Seleccionar un archivo...", + "tooManyFilesSelected": "¡Se han seleccionado demasiados archivos!", + "tooManyFilesSelected_t": "Se han seleccionado demasiados archivos. FlText solo admite un archivo a la vez por ahora. Por favor, seleccione solo un archivo para editar.", + "openAnExistingFile": "Abrir un archivo existente...", + "newFile": "Nuevo archivo...", + "close": "Cerrar", + "beginTypingYourTextHere": "Comience a escribir su texto aquí...", + "loading": "Cargando...", + "errorWhileLoadingFile": "Error al cargar el archivo", + "thereWasAnErrorLoadingFile": "Se produjo un error al cargar el archivo seleccionado: ", + "editFile": "Editar archivo", + "saveFileAt": "Guardar archivo como...", + "operationCancelled": "Operación cancelada", + "noFileWasSelected": "No se seleccionó ningún archivo, posiblemente porque canceló la operación (cerró la ventana o presionó 'atrás'). Intente nuevamente.", + "editorFont": "Fuente del editor", + "editorFont_t": "Seleccione la fuente utilizada por el editor. La predeterminada es la fuente del sistema.", + "saveSuccess": "Guardado exitoso.", + "warning": "Advertencia", + "androidWarning": "En dispositivos Android, no aparecerá una ventana para guardar un nuevo archivo porque no es compatible con las bibliotecas de software utilizadas. Al crear un nuevo archivo, se le pedirá un nombre de archivo (solo en Android). Sabemos que esto es molesto y pedimos disculpas por el tiempo adicional que esto requiere.", + "selectColor": "Seleccionar un color", + "selectColorShade": "Seleccionar una tonalidad de color", + "selectedColorAndShades": "Color y tonalidades seleccionados", + "colorScheme": "Esquema de color", + "selectColorSchemeUsed": "Seleccione el esquema de color que usará la aplicación (requiere reinicio)", + "recents": "Recientes", + "unableToOpenURL": "No se puede abrir la URL", + "anUnknownErrorOccured_URL": "Se produjo un error desconocido al intentar abrir la URL.", + "filenameTitle": "Escriba un nombre de archivo...", + "pleaseEnterFilename": "Por favor, introduzca el nombre del nuevo archivo. Se guardará en su carpeta de documentos en Android/Fuschia. (¡No se añadirá ninguna extensión de archivo automáticamente!)", + "errorCreatingNewFile": "Se produjo un error al intentar crear el nuevo archivo", + "cancel": "Cancelar" +} diff --git a/lib/l10n/app_ru.arb b/lib/l10n/app_ru.arb new file mode 100644 index 0000000..601834c --- /dev/null +++ b/lib/l10n/app_ru.arb @@ -0,0 +1,42 @@ +{ + "@@locale": "ru", + "settings": "Настройки", + "aboutFltext": "О Fltext", + "fltextDesc": "FlText - это быстрый текстовый редактор, эффективный по использованию CPU, написанный на Dart и Flutter. Разработан для обеспечения одновременно удобства и красоты в глазах пользователя.", + "githubRepo": "Репозиторий GitHub", + "welcomeToFltext": "Добро пожаловать в Fltext", + "startByEither": "Начните с того, чтобы...", + "creatingAFile": "Создание файла...", + "or": "или", + "selectAFile": "Выберите файл...", + "tooManyFilesSelected": "Выбрано слишком много файлов!", + "tooManyFilesSelected_t": "Выбрано слишком много файлов. FlText поддерживает только один файл одновременно на данный момент. Пожалуйста, выберите только один файл для редактирования.", + "openAnExistingFile": "Открыть существующий файл...", + "newFile": "Новый файл...", + "close": "Закрыть", + "beginTypingYourTextHere": "Начните вводить текст здесь...", + "loading": "Загрузка...", + "errorWhileLoadingFile": "Ошибка при загрузке файла", + "thereWasAnErrorLoadingFile": "Произошла ошибка при загрузке выбранного файла: ", + "editFile": "Редактировать файл", + "saveFileAt": "Сохранить файл как...", + "operationCancelled": "Операция отменена", + "noFileWasSelected": "Файл не был выбран, возможно, потому что вы отменили операцию (закрыли окно или нажали 'назад'). Попробуйте снова.", + "editorFont": "Шрифт редактора", + "editorFont_t": "Выберите шрифт, используемый редактором. По умолчанию установлен шрифт системы.", + "saveSuccess": "Успешное сохранение.", + "warning": "Предупреждение", + "androidWarning": "На устройствах Android не будет отображено окно для сохранения нового файла, поскольку это не поддерживается используемыми программными библиотеками. При создании нового файла вам будет предложено ввести имя файла (только на Android). Мы знаем, что это неудобно, и приносим извинения за дополнительное время, необходимое для этого.", + "selectColor": "Выберите цвет", + "selectColorShade": "Выберите оттенок цвета", + "selectedColorAndShades": "Выбранный цвет и оттенки", + "colorScheme": "Цветовая схема", + "selectColorSchemeUsed": "Выберите цветовую схему, используемую приложением (требуется перезапуск)", + "recents": "Последние", + "unableToOpenURL": "Невозможно открыть URL", + "anUnknownErrorOccured_URL": "Произошла неизвестная ошибка при попытке открыть URL.", + "filenameTitle": "Введите название файла...", + "pleaseEnterFilename": "Пожалуйста, введите название нового файла. Он будет сохранён в вашей папке документов на Android/Fuschia. (Расширение файла добавлено не будет автоматически!)", + "errorCreatingNewFile": "Произошла ошибка при попытке создать новый файл", + "cancel": "Отмена" +} diff --git a/lib/main.dart b/lib/main.dart new file mode 100644 index 0000000..7f4d285 --- /dev/null +++ b/lib/main.dart @@ -0,0 +1,314 @@ +/* + * FlText: A simple and nice-looking text editor. + * Copyright (C) 2023 Aggelos Tselios + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + */ +// ignore_for_file: use_build_context_synchronously + +import 'dart:io'; + +import 'package:file_picker/file_picker.dart'; +import 'package:fltext/custom_text_styles.dart'; +import 'package:fltext/settings_screen.dart'; +import 'package:fltext/single_line_input.dart'; +import 'package:fltext/text_edit.dart'; +import 'package:fltext/utils.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:url_launcher/url_launcher.dart'; +import 'package:fltext/config.dart'; +import 'package:path_provider/path_provider.dart'; + +void main() { + WidgetsFlutterBinding.ensureInitialized(); + loadConfig(); + runApp(const FlText()); +} + +final githubURL = Uri.parse("https://github.com/tseli0s/FlText"); +final ThemeData darkTheme = ThemeData( + colorScheme: ColorScheme.fromSeed( + seedColor: Color(accentColor), + brightness: Brightness.dark, + ), + useMaterial3: true, +); + +// ignore: must_be_immutable +class FlText extends StatelessWidget { + const FlText({super.key}); + + @override + Widget build(BuildContext context) { + return MaterialApp( + localizationsDelegates: AppLocalizations.localizationsDelegates, + supportedLocales: AppLocalizations.supportedLocales, + themeMode: ThemeMode.dark, + debugShowCheckedModeBanner: false, + title: 'FlText', + theme: ThemeData( + colorScheme: ColorScheme.fromSeed(seedColor: Color(accentColor)), + useMaterial3: true, + ), + darkTheme: darkTheme, + home: const Homepage(title: 'FlText'), + ); + } +} + +class Homepage extends StatefulWidget { + const Homepage({super.key, required this.title}); + + final String title; + + @override + State createState() => _HomepageState(); +} + +class _HomepageState extends State { + @override + void initState() { + super.initState(); + if (!kIsWeb) { + if (firstLaunch && Platform.isAndroid) { + showErrorDialog( + context, + AppLocalizations.of(context)!.warning, + AppLocalizations.of(context)!.androidWarning, + ); + saveConfigChanges(); + } + } + } + + bool darkTheme = false; + + void setDarkTheme(bool v) { + setState(() { + darkTheme = v; + }); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text(widget.title), + backgroundColor: Color(accentColor), + centerTitle: true, + titleTextStyle: const TextStyle( + fontWeight: FontWeight.bold, + ), + ), + drawer: Drawer( + child: ListView( + padding: const EdgeInsets.all(16), + children: [ + ListTile( + leading: const Icon(Icons.settings), + title: Text(AppLocalizations.of(context)!.settings), + onTap: () { + Navigator.push( + context, + CupertinoPageRoute( + builder: (ctx) => const SettingsScreen(), + ), + ); + }, + ), + ListTile( + leading: const Icon(Icons.info), + title: Text(AppLocalizations.of(context)!.aboutFltext), + onTap: () { + showAboutDialog( + applicationName: "FlText", + applicationVersion: "0.1.0", + applicationIcon: const FlutterLogo( + size: 32, + ), + children: [ + Text(AppLocalizations.of(context)!.fltextDesc), + TextButton( + onPressed: () async { + await openURL(githubURL); + }, + child: Text(AppLocalizations.of(context)!.githubRepo), + ) + ], + context: context, + ); + }, + ), + ], + ), + ), + body: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const FlutterLogo(), + TitleText(text: AppLocalizations.of(context)!.welcomeToFltext), + Text( + AppLocalizations.of(context)!.startByEither, + textAlign: TextAlign.start, + ), + TextButton( + onPressed: () { + openTextEditor(null); + }, + child: Text( + AppLocalizations.of(context)!.creatingAFile, + textAlign: TextAlign.start, + ), + ), + Text(AppLocalizations.of(context)!.or), + TextButton( + onPressed: () async { + FilePickerResult? result = await FilePicker.platform.pickFiles( + dialogTitle: AppLocalizations.of(context)!.selectAFile, + ); + if (result != null) { + if (result.count >= 2) { + final title = + AppLocalizations.of(context)!.tooManyFilesSelected; + final message = + AppLocalizations.of(context)!.tooManyFilesSelected_t; + showErrorDialog(context, title, message); + } + String filename = result.files.first.path.toString(); + openTextEditor(filename); + } + }, + child: Text( + AppLocalizations.of(context)!.openAnExistingFile, + textAlign: TextAlign.start, + ), + ), + Flex( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + direction: Axis.horizontal, + children: [ + if (recent_0 != "") + FilledButton( + onPressed: () { + clearRecents(); + setState(() {}); + }, + child: const Icon(Icons.clear_all), + ), + if (recent_0 != "") + const SizedBox( + width: 12, + height: 2, + ), + TitleText(text: AppLocalizations.of(context)!.recents), + ], + ), + if (recent_0 != "") + TextButton( + onPressed: () { + openTextEditor(recent_0); + }, + child: Text(recent_0), + ), + if (recent_1 != "") + TextButton( + onPressed: () { + openTextEditor(recent_1); + }, + child: Text(recent_1), + ), + if (recent_2 != "") + TextButton( + onPressed: () { + openTextEditor(recent_2); + }, + child: Text(recent_2), + ), + ], + ), + ), + floatingActionButton: FloatingActionButton( + onPressed: () { + Navigator.push( + context, + CupertinoPageRoute( + builder: (context) { + return TextEditor(filename: null); + }, + ), + ); + }, + tooltip: AppLocalizations.of(context)!.newFile, + child: const Icon(Icons.file_open), + ), + ); + } + + void openTextEditor(String? filename) async { + /* + * We only need to do this on the following platforms as they don't provide a regular dialog. + * When the library we use supports them or if we write our own dialog just for this app + * then this will become useless. + * Basically this creates a file before editing so that no "save file" + * dialog is ever needed. + */ + if (Platform.isAndroid || Platform.isFuchsia || kIsWeb) { + final result = await TextInputDialog.showTextInputDialog( + context, + informatoryText: AppLocalizations.of(context)!.pleaseEnterFilename, + title: AppLocalizations.of(context)!.filenameTitle, + ); + if (result != null) { + final path = await getApplicationDocumentsDirectory(); + filename = '${path.absolute.path}/$result'; + try { + File(filename).createSync(recursive: false, exclusive: true); + } catch (e) { + final title = AppLocalizations.of(context)!.errorCreatingNewFile; + showErrorDialog(context, title, e.toString()); + } + } else { + return; // We'll assume the user didn't want this to open + } + } + if (filename != null) { + addRecent(filename); + setState(() {}); + } + Navigator.push( + context, + CupertinoPageRoute( + builder: (context) { + return TextEditor(filename: filename); + }, + ), + ); + } + + Future openURL(Uri url) async { + /* + * Like the documentation says, launchUrl may either throw an exception or return false on failure, + * depending on the error. Here we handle both so we never have to manually debug what went wrong. + */ + try { + if (await launchUrl(url) != true) { + final title = AppLocalizations.of(context)!.unableToOpenURL; + final msg = AppLocalizations.of(context)!.anUnknownErrorOccured_URL; + showErrorDialog(context, title, msg); + } + } catch (e) { + final title = AppLocalizations.of(context)!.unableToOpenURL; + final msg = "Failed to load ${url.toString()}: ${e.toString()}"; + showErrorDialog(context, title, msg); + } + } +} diff --git a/lib/multiline_text_input.dart b/lib/multiline_text_input.dart new file mode 100644 index 0000000..1d380d3 --- /dev/null +++ b/lib/multiline_text_input.dart @@ -0,0 +1,43 @@ +/* + * FlText: A simple and nice-looking text editor. + * Copyright (C) 2023 Aggelos Tselios + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + */ +import 'package:flutter/material.dart'; + +class MultilineTextInputWidget extends StatefulWidget { + final TextEditingController controller; + final String hintText; + + const MultilineTextInputWidget({ + super.key, + required this.controller, + this.hintText = "", + }); + + @override + // ignore: library_private_types_in_public_api + _MultilineTextInputWidgetState createState() => + _MultilineTextInputWidgetState(); +} + +class _MultilineTextInputWidgetState extends State { + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.all(4), + child: TextField( + controller: widget.controller, + maxLines: null, + style: const TextStyle(fontFamily: "monospace"), + decoration: InputDecoration.collapsed( + hintText: widget.hintText, + ), + ), + ); + } +} diff --git a/lib/settings_screen.dart b/lib/settings_screen.dart new file mode 100644 index 0000000..7cf7908 --- /dev/null +++ b/lib/settings_screen.dart @@ -0,0 +1,67 @@ +/* + * FlText: A simple and nice-looking text editor. + * Copyright (C) 2023 Aggelos Tselios + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + */ +import 'package:fltext/config.dart'; +import 'package:fltext/utils.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + +class SettingsScreen extends StatefulWidget { + const SettingsScreen({super.key}); + + @override + State createState() => _SettingsScreenState(); +} + +class _SettingsScreenState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text(AppLocalizations.of(context)!.settings), + backgroundColor: Color(accentColor), + centerTitle: true, + titleTextStyle: const TextStyle( + fontWeight: FontWeight.bold, + ), + ), + body: ListView( + padding: const EdgeInsets.all(8.0), + children: [ + ListTile( + leading: const Icon(Icons.font_download), + title: Text(AppLocalizations.of(context)!.editorFont), + subtitle: Text(AppLocalizations.of(context)!.editorFont_t), + ), + ListTile( + leading: const Icon(Icons.colorize), + title: const Text("Color scheme"), + subtitle: const Text( + "Select the color scheme used by the application", + ), + onTap: () async { + final result = await colorPickerDialog(context); + if (result) { + saveConfigChanges(); + } + }, + ), + const ListTile( + enabled: false, + leading: Icon(Icons.dark_mode), + title: Text("Light/dark theme"), + subtitle: Text( + "Coming soon!", + ), + ), + ], + ), + ); + } +} diff --git a/lib/single_line_input.dart b/lib/single_line_input.dart new file mode 100644 index 0000000..810b0a2 --- /dev/null +++ b/lib/single_line_input.dart @@ -0,0 +1,49 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + +class TextInputDialog { + static Future showTextInputDialog( + BuildContext context, { + String? initialValue, + String informatoryText = '', + String title = 'Enter text', + }) async { + String? inputText = initialValue; + + return showDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog( + title: Text(title), + content: SingleChildScrollView( + child: ListBody( + children: [ + Text(informatoryText), + TextField( + autofocus: true, + onChanged: (value) { + inputText = value; + }, + ), + ], + ), + ), + actions: [ + TextButton( + child: Text(AppLocalizations.of(context)!.cancel), + onPressed: () { + Navigator.of(context).pop(); + }, + ), + TextButton( + child: const Text('OK'), + onPressed: () { + Navigator.of(context).pop(inputText); + }, + ), + ], + ); + }, + ); + } +} diff --git a/lib/text_edit.dart b/lib/text_edit.dart new file mode 100644 index 0000000..29b05f2 --- /dev/null +++ b/lib/text_edit.dart @@ -0,0 +1,167 @@ +/* + * FlText: A simple and nice-looking text editor. + * Copyright (C) 2023 Aggelos Tselios + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + */ +// ignore_for_file: use_build_context_synchronously + +import 'dart:io'; +import 'package:file_picker/file_picker.dart'; +import 'package:fltext/config.dart'; +import 'package:fltext/multiline_text_input.dart'; +import 'package:fltext/utils.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_spinkit/flutter_spinkit.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + +// ignore: must_be_immutable +class TextEditor extends StatefulWidget { + final TextEditingController textController = TextEditingController(); + final String? filename; + + TextEditor({super.key, textController, required this.filename}); + + @override + State createState() => TextEditorState(); +} + +class TextEditorState extends State { + Future readFileContents(String filename) async { + String text; + try { + final File file = File(filename); + text = await file.readAsString(); + } catch (e) { + final title = AppLocalizations.of(context)!.errorWhileLoadingFile; + String message = + "FlText was unable to read the contents of the file you've opened ($e). Please try again with another file, that uses a supported encoding."; + showErrorDialog(context, title, message); + return ""; + } + return text; + } + + @override + Widget build(BuildContext context) { + final Widget b; + + if (widget.filename == null) { + b = MultilineTextInputWidget( + controller: widget.textController, + hintText: AppLocalizations.of(context)!.beginTypingYourTextHere, + ); + } else { + b = FutureBuilder( + future: readFileContents(widget.filename!), + builder: (ctx, ss) { + switch (ss.connectionState) { + case (ConnectionState.none): + // I don't think this should ever appear, + // so I won't translate it. + return const Text("Waiting for data..."); + case (ConnectionState.waiting): + var loadingCircle = SpinKitFadingCircle( + color: Color(accentColor), + ); + + return CupertinoAlertDialog( + title: Text(AppLocalizations.of(context)!.loading), + content: loadingCircle, + ); + + default: + if (ss.hasError) { + final title = + AppLocalizations.of(context)!.errorWhileLoadingFile; + final message = + "${AppLocalizations.of(context)!.thereWasAnErrorLoadingFile}${ss.error}"; + + showErrorDialog(ctx, title, message); + Navigator.pop(context); + return const Text(""); + } else { + widget.textController.text = ss.data!; + return MultilineTextInputWidget( + controller: widget.textController, + hintText: + AppLocalizations.of(context)!.beginTypingYourTextHere, + ); + } + } + }, + ); + } + + return Scaffold( + body: b, + appBar: AppBar( + backgroundColor: Color(accentColor), + title: Text(AppLocalizations.of(context)!.editFile), + titleTextStyle: const TextStyle( + fontWeight: FontWeight.bold, + ), + centerTitle: true, + actions: [ + IconButton( + onPressed: () async { + final contents = widget.textController.text; + String? filename = widget.filename; + if (filename != null) { + final f = File(filename); + f.writeAsString(contents); + final snackBar = SnackBar( + content: Text(AppLocalizations.of(context)!.saveSuccess), + padding: const EdgeInsets.all(16.0), + behavior: SnackBarBehavior.floating, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10.0), + ), + action: SnackBarAction( + label: AppLocalizations.of(context)!.close, + onPressed: () {}, + ), + ); + ScaffoldMessenger.of(context).showSnackBar(snackBar); + } else { + String? result = await FilePicker.platform.saveFile( + dialogTitle: AppLocalizations.of(context)!.saveFileAt, + lockParentWindow: true, + ); + + if (result != null) { + final f = File(result); + f.writeAsString(contents); + final snackBar = SnackBar( + content: Text(AppLocalizations.of(context)!.saveSuccess), + padding: const EdgeInsets.all(16.0), + behavior: SnackBarBehavior.floating, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10.0), + ), + action: SnackBarAction( + label: AppLocalizations.of(context)!.close, + onPressed: () {}, + ), + ); + ScaffoldMessenger.of(context).showSnackBar(snackBar); + } else { + final title = + AppLocalizations.of(context)!.operationCancelled; + final message = + AppLocalizations.of(context)!.noFileWasSelected; + showErrorDialog(context, title, message); + } + } + }, + icon: const Icon(Icons.save), + ) + ], + ), + ); + } +} diff --git a/lib/utils.dart b/lib/utils.dart new file mode 100644 index 0000000..756d45f --- /dev/null +++ b/lib/utils.dart @@ -0,0 +1,97 @@ +/* + * FlText: A simple and nice-looking text editor. + * Copyright (C) 2023 Aggelos Tselios + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + */ +import 'package:fltext/config.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flex_color_picker/flex_color_picker.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + +void showErrorDialog(BuildContext context, String title, String message) { + showCupertinoModalPopup( + context: context, + builder: (context) { + return CupertinoAlertDialog( + title: Text(title), + content: Text(message), + actions: [ + CupertinoDialogAction( + isDestructiveAction: true, + isDefaultAction: true, + onPressed: () { + Navigator.pop(context); + }, + child: Text(AppLocalizations.of(context)!.close), + ) + ], + ); + }, + ); +} + +Future colorPickerDialog(BuildContext context) async { + return ColorPicker( + color: Color(accentColor), + // Update the dialogPickerColor using the callback. + onColorChanged: (Color color) { + accentColor = int.parse(color.toString().substring(8, 16), radix: 16); + }, + width: 40, + height: 40, + borderRadius: 4, + spacing: 5, + runSpacing: 5, + wheelDiameter: 155, + heading: Text( + AppLocalizations.of(context)!.selectColor, + style: Theme.of(context).textTheme.titleSmall, + ), + subheading: Text( + AppLocalizations.of(context)!.selectColorShade, + style: Theme.of(context).textTheme.titleSmall, + ), + wheelSubheading: Text( + AppLocalizations.of(context)!.selectedColorAndShades, + style: Theme.of(context).textTheme.titleSmall, + ), + showMaterialName: true, + showColorName: true, + showColorCode: true, + copyPasteBehavior: const ColorPickerCopyPasteBehavior( + longPressMenu: true, + ), + materialNameTextStyle: Theme.of(context).textTheme.bodySmall, + colorNameTextStyle: Theme.of(context).textTheme.bodySmall, + colorCodeTextStyle: Theme.of(context).textTheme.bodySmall, + pickersEnabled: const { + ColorPickerType.both: false, + ColorPickerType.primary: true, + ColorPickerType.accent: true, + ColorPickerType.bw: false, + ColorPickerType.custom: true, + ColorPickerType.wheel: true, + }, + ).showPickerDialog( + context, + transitionBuilder: (BuildContext context, Animation a1, + Animation a2, Widget widget) { + final double curvedValue = Curves.easeInOutBack.transform(a1.value) - 1.0; + return Transform( + transform: Matrix4.translationValues(0.0, curvedValue * 200, 0.0), + child: Opacity( + opacity: a1.value, + child: widget, + ), + ); + }, + transitionDuration: const Duration(milliseconds: 400), + constraints: + const BoxConstraints(minHeight: 460, minWidth: 300, maxWidth: 320), + ); +} diff --git a/linux/.gitignore b/linux/.gitignore new file mode 100644 index 0000000..d3896c9 --- /dev/null +++ b/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/linux/CMakeLists.txt b/linux/CMakeLists.txt new file mode 100644 index 0000000..04d9a9c --- /dev/null +++ b/linux/CMakeLists.txt @@ -0,0 +1,145 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.10) +project(runner LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "fltext") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID +set(APPLICATION_ID "io.tseli0s.fltext") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Load bundled libraries from the lib/ directory relative to the binary. +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") + +# Root filesystem for cross-building. +if(FLUTTER_TARGET_PLATFORM_SYSROOT) + set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() + +# Define build configuration options. +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") +endif() + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_14) + target_compile_options(${TARGET} PRIVATE -Wall -Werror) + target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") + target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) + +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) + +# Only the install-generated bundle's copy of the executable will launch +# correctly, since the resources must in the right relative locations. To avoid +# people trying to run the unbundled copy, put it in a subdirectory instead of +# the default top-level location. +set_target_properties(${BINARY_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" +) + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# By default, "installing" just makes a relocatable bundle in the build +# directory. +set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +# Start with a clean build bundle directory every time. +install(CODE " + file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") + " COMPONENT Runtime) + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) + install(FILES "${bundled_library}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endforeach(bundled_library) + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/linux/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") + install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() diff --git a/linux/flutter/CMakeLists.txt b/linux/flutter/CMakeLists.txt new file mode 100644 index 0000000..d5bd016 --- /dev/null +++ b/linux/flutter/CMakeLists.txt @@ -0,0 +1,88 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.10) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. + +# Serves the same purpose as list(TRANSFORM ... PREPEND ...), +# which isn't available in 3.10. +function(list_prepend LIST_NAME PREFIX) + set(NEW_LIST "") + foreach(element ${${LIST_NAME}}) + list(APPEND NEW_LIST "${PREFIX}${element}") + endforeach(element) + set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) +endfunction() + +# === Flutter Library === +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) +pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) +pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) + +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "fl_basic_message_channel.h" + "fl_binary_codec.h" + "fl_binary_messenger.h" + "fl_dart_project.h" + "fl_engine.h" + "fl_json_message_codec.h" + "fl_json_method_codec.h" + "fl_message_codec.h" + "fl_method_call.h" + "fl_method_channel.h" + "fl_method_codec.h" + "fl_method_response.h" + "fl_plugin_registrar.h" + "fl_plugin_registry.h" + "fl_standard_message_codec.h" + "fl_standard_method_codec.h" + "fl_string_codec.h" + "fl_value.h" + "fl_view.h" + "flutter_linux.h" +) +list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") +target_link_libraries(flutter INTERFACE + PkgConfig::GTK + PkgConfig::GLIB + PkgConfig::GIO +) +add_dependencies(flutter flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CMAKE_CURRENT_BINARY_DIR}/_phony_ + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" + ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} +) diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc new file mode 100644 index 0000000..82043c1 --- /dev/null +++ b/linux/flutter/generated_plugin_registrant.cc @@ -0,0 +1,19 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + +#include +#include + +void fl_register_plugins(FlPluginRegistry* registry) { + g_autoptr(FlPluginRegistrar) system_theme_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "SystemThemePlugin"); + system_theme_plugin_register_with_registrar(system_theme_registrar); + g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin"); + url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar); +} diff --git a/linux/flutter/generated_plugin_registrant.h b/linux/flutter/generated_plugin_registrant.h new file mode 100644 index 0000000..e0f0a47 --- /dev/null +++ b/linux/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void fl_register_plugins(FlPluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake new file mode 100644 index 0000000..da18c44 --- /dev/null +++ b/linux/flutter/generated_plugins.cmake @@ -0,0 +1,25 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST + system_theme + url_launcher_linux +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/linux/main.cc b/linux/main.cc new file mode 100644 index 0000000..e7c5c54 --- /dev/null +++ b/linux/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/linux/my_application.cc b/linux/my_application.cc new file mode 100644 index 0000000..dc10b4f --- /dev/null +++ b/linux/my_application.cc @@ -0,0 +1,124 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "FlText"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "FlText"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/linux/my_application.h b/linux/my_application.h new file mode 100644 index 0000000..72271d5 --- /dev/null +++ b/linux/my_application.h @@ -0,0 +1,18 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/macos/.gitignore b/macos/.gitignore new file mode 100644 index 0000000..746adbb --- /dev/null +++ b/macos/.gitignore @@ -0,0 +1,7 @@ +# Flutter-related +**/Flutter/ephemeral/ +**/Pods/ + +# Xcode-related +**/dgph +**/xcuserdata/ diff --git a/macos/Flutter/Flutter-Debug.xcconfig b/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 0000000..c2efd0b --- /dev/null +++ b/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/macos/Flutter/Flutter-Release.xcconfig b/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 0000000..c2efd0b --- /dev/null +++ b/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100644 index 0000000..e8ae262 --- /dev/null +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,18 @@ +// +// Generated file. Do not edit. +// + +import FlutterMacOS +import Foundation + +import path_provider_foundation +import shared_preferences_foundation +import system_theme +import url_launcher_macos + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) + SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) + SystemThemePlugin.register(with: registry.registrar(forPlugin: "SystemThemePlugin")) + UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) +} diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..63d1bc5 --- /dev/null +++ b/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,695 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 33CC110E2044A8840003C045 /* Bundle Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* fltext.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "fltext.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* fltext.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + D73912EC22F37F3D000D13A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* fltext.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1430; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.fltext.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/fltext.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/fltext"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.fltext.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/fltext.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/fltext"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.fltext.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/fltext.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/fltext"; + }; + name = Profile; + }; + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Profile; + }; + 338D0CEA231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Profile; + }; + 338D0CEB231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Profile; + }; + 33CC10F92044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33CC10FA2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000..f82e739 --- /dev/null +++ b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/macos/Runner.xcworkspace/contents.xcworkspacedata b/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..1d526a1 --- /dev/null +++ b/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/macos/Runner/AppDelegate.swift b/macos/Runner/AppDelegate.swift new file mode 100644 index 0000000..d53ef64 --- /dev/null +++ b/macos/Runner/AppDelegate.swift @@ -0,0 +1,9 @@ +import Cocoa +import FlutterMacOS + +@NSApplicationMain +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } +} diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..96d3fee --- /dev/null +++ b/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "info": { + "version": 1, + "author": "xcode" + }, + "images": [ + { + "size": "16x16", + "idiom": "mac", + "filename": "app_icon_16.png", + "scale": "1x" + }, + { + "size": "16x16", + "idiom": "mac", + "filename": "app_icon_32.png", + "scale": "2x" + }, + { + "size": "32x32", + "idiom": "mac", + "filename": "app_icon_32.png", + "scale": "1x" + }, + { + "size": "32x32", + "idiom": "mac", + "filename": "app_icon_64.png", + "scale": "2x" + }, + { + "size": "128x128", + "idiom": "mac", + "filename": "app_icon_128.png", + "scale": "1x" + }, + { + "size": "128x128", + "idiom": "mac", + "filename": "app_icon_256.png", + "scale": "2x" + }, + { + "size": "256x256", + "idiom": "mac", + "filename": "app_icon_256.png", + "scale": "1x" + }, + { + "size": "256x256", + "idiom": "mac", + "filename": "app_icon_512.png", + "scale": "2x" + }, + { + "size": "512x512", + "idiom": "mac", + "filename": "app_icon_512.png", + "scale": "1x" + }, + { + "size": "512x512", + "idiom": "mac", + "filename": "app_icon_1024.png", + "scale": "2x" + } + ] +} \ No newline at end of file diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100644 index 0000000000000000000000000000000000000000..5f009692a3c3f961600820da7ead606b9d114b16 GIT binary patch literal 67636 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�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 JPDHLkV1lBh@TdR) literal 0 HcmV?d00001 diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png new file mode 100644 index 0000000000000000000000000000000000000000..3aaf1b598554f81c26e17e24b39e0f5f16be8508 GIT binary patch literal 29421 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 literal 0 HcmV?d00001 diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png new file mode 100644 index 0000000000000000000000000000000000000000..648a860daaaaabe87e3054bc25d6c77efc2a9dc1 GIT binary patch literal 2057 zcmV+k2=@1hP)B1Uv{4vyj9!`(h?DX7--$ z>2;>}F5l}{%d4*LneMKF3fTWlQ?K4q{r~^_{_RyeL{Y^5nH*L#U^NXDU^N3)(@+6c zGhj6h6<{?3R?|=cRx@BV4HaNy@nX6Z`{4MM4>QHus36cD0Rn4~CTS~I0qmc@s^jd! zUj?YoV^{6-T37L*t^Nx~4{iU*VHXCL!H@zzJ8|=^pDxb7t`UkCSP&EiFu4THJXv5> zXjMV#TC_b^Rmz`t@-IFy5j=hHk=R*F6i}%)BT6wvc_U3xYD4Wtd$}d|@nftlwuJ09 zpVEAN5;nmGzb%Y_J&Z!B5iufzAq7x|sRGs$(nw$HD&5da19dDkrZjV3`{uV#_nqJL z@_~u%=iYh#sjoavM_=WwF()W81<15H=7HDa(Aj<}Uqi7}M>OCR@EZr8{F*4B(vJuR5x`I&@6fwPc4PmZsAdke-S>~*#>tCI zIDBw3UVUyW{CTTaD zP29Lw#9xy+1qG7}s|s4!r@67|@F)=2SMAvRIOb=c#Y(-5hqufj6_~?fc@{{{;hA0I zzYHRR!90KoBkv?*RvZcJSQXN>Ph(-rkjGNp4YouEP^VrbO>Nm>8KrX4eEj z0JkG8;>d$IKZpdzOh9CU$U7wO@}UExczSQVCAf`zj(&a_ik(lu;3S-<0&FZ%6qr$%MDU`UgkdMU-`T+R(J)p9k-@YmpoA{60~#`y=eqre-8 zAhpceQ~~ntyK2C`2+j;Dg7I2F-pOt@E|DP3rQ~u57>&9WCs`q3k)+egyiO+J^+%AN zX7^M9*JSt;|GIk=)?|XB*x3Z+F-p8ZGUy*258=dn``I{A!kKFsy#3`BRq!^)=yLl| zth-Ss{?_MWAJzVWy^mRh09gUDkiT9|Vs?2Am+of3>|QI-)u}wbJu?p_{!2OiL2TPZW?^WbHT+ep-Tm zjN1Q*cvk0t`XJ+}Fy{kwRbGc|j-RL|Khi3`9*`Myx=^$EN&P@#KZ&eikJkP}k>WHE z99RZZ!r*#gOkeW$R~7n#F=GF0hvR-y5fUY2eQZ3MtDzjriU^XP;Ye<+UB4C|u`NJ{XJkeZ;H zSs`=$Mno{N8tm~DsGmNY%?`UKi~=bmXht0)vR;=I5GSZu&C~4HXGjDSszJRIQ4H~Wn^@p4Nz+XM~=H~^;?(_Cv zAzT)u1CUU5~1h_ruhO$IsmaXNi>*W*1n4{s0C9JA*H~< zU?p#RUnu$jQd6u=74R>208(5@uA6)GO9m0pr5cn-s|+>c>pH)M0s*&bcTsXB;IzdM z_WF_Xvvt(|^O>Z!05eF25uoz{8$g^l3AwGN&rC@R_pXyV-wk?D{$tjK+U+=ma18bw zsSNWOE$po{0rZ^+ZQMt%-uWul##|8X0xGDI5^w?bg*hzUs>0c1bIgE0B~#7>^~?+& z0$T{GHQ`yPqBO=_zcbfBdtIvW>TaFV|1zCZvlfY%pW_O4qiE%VM*P}<^xCs{*i zvLY!|?`VyZX=j3_ro)76Q2_ME4jq!2z6I}qAV;p&5`I0W zYH2a#cG>g2B|@Sk6*fEt;;ENDzsHd`B7-3Xym@5b$J2AgZIyauw4Wb8vZ+#^G+(*4 ztzG8_m*V(n>P_FPab>e6(i5Enufm>wweK}X{Z3J8L*m$3b2|1 nt7)hJs~NDGh6=En0judhx;NX8GC8m+00000NkvXXu0mjfBU8=m literal 0 HcmV?d00001 diff --git a/macos/Runner/Base.lproj/MainMenu.xib b/macos/Runner/Base.lproj/MainMenu.xib new file mode 100644 index 0000000..80e867a --- /dev/null +++ b/macos/Runner/Base.lproj/MainMenu.xib @@ -0,0 +1,343 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/macos/Runner/Configs/AppInfo.xcconfig b/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 0000000..5290265 --- /dev/null +++ b/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// Application-level settings for the Runner target. +// +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the +// future. If not, the values below would default to using the project name when this becomes a +// 'flutter create' template. + +// The application's name. By default this is also the title of the Flutter window. +PRODUCT_NAME = fltext + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = com.example.fltext + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2023 com.example. All rights reserved. diff --git a/macos/Runner/Configs/Debug.xcconfig b/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 0000000..36b0fd9 --- /dev/null +++ b/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/macos/Runner/Configs/Release.xcconfig b/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 0000000..dff4f49 --- /dev/null +++ b/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/macos/Runner/Configs/Warnings.xcconfig b/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 0000000..42bcbf4 --- /dev/null +++ b/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/macos/Runner/DebugProfile.entitlements b/macos/Runner/DebugProfile.entitlements new file mode 100644 index 0000000..dddb8a3 --- /dev/null +++ b/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.server + + + diff --git a/macos/Runner/Info.plist b/macos/Runner/Info.plist new file mode 100644 index 0000000..4789daa --- /dev/null +++ b/macos/Runner/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/macos/Runner/MainFlutterWindow.swift b/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 0000000..3cc05eb --- /dev/null +++ b/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/macos/Runner/Release.entitlements b/macos/Runner/Release.entitlements new file mode 100644 index 0000000..852fa1a --- /dev/null +++ b/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + diff --git a/macos/RunnerTests/RunnerTests.swift b/macos/RunnerTests/RunnerTests.swift new file mode 100644 index 0000000..5418c9f --- /dev/null +++ b/macos/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import FlutterMacOS +import Cocoa +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/pubspec.lock b/pubspec.lock new file mode 100644 index 0000000..4e1b0c7 --- /dev/null +++ b/pubspec.lock @@ -0,0 +1,615 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + archive: + dependency: transitive + description: + name: archive + sha256: "7b875fd4a20b165a3084bd2d210439b22ebc653f21cea4842729c0c30c82596b" + url: "https://pub.dev" + source: hosted + version: "3.4.9" + args: + dependency: transitive + description: + name: args + sha256: eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596 + url: "https://pub.dev" + source: hosted + version: "2.4.2" + async: + dependency: transitive + description: + name: async + sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + url: "https://pub.dev" + source: hosted + version: "2.11.0" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + characters: + dependency: transitive + description: + name: characters + sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" + url: "https://pub.dev" + source: hosted + version: "1.3.0" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff + url: "https://pub.dev" + source: hosted + version: "2.0.3" + cli_util: + dependency: transitive + description: + name: cli_util + sha256: b8db3080e59b2503ca9e7922c3df2072cf13992354d5e944074ffa836fba43b7 + url: "https://pub.dev" + source: hosted + version: "0.4.0" + clock: + dependency: transitive + description: + name: clock + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" + source: hosted + version: "1.1.1" + collection: + dependency: transitive + description: + name: collection + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a + url: "https://pub.dev" + source: hosted + version: "1.18.0" + convert: + dependency: transitive + description: + name: convert + sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" + url: "https://pub.dev" + source: hosted + version: "3.1.1" + crypto: + dependency: transitive + description: + name: crypto + sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab + url: "https://pub.dev" + source: hosted + version: "3.0.3" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" + source: hosted + version: "1.3.1" + ffi: + dependency: transitive + description: + name: ffi + sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + file: + dependency: transitive + description: + name: file + sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" + url: "https://pub.dev" + source: hosted + version: "7.0.0" + file_picker: + dependency: "direct main" + description: + name: file_picker + sha256: "4e42aacde3b993c5947467ab640882c56947d9d27342a5b6f2895b23956954a6" + url: "https://pub.dev" + source: hosted + version: "6.1.1" + flex_color_picker: + dependency: "direct main" + description: + name: flex_color_picker + sha256: f37476ab3e80dcaca94e428e159944d465dd16312fda9ff41e07e86f04bfa51c + url: "https://pub.dev" + source: hosted + version: "3.3.0" + flex_seed_scheme: + dependency: transitive + description: + name: flex_seed_scheme + sha256: "29c12aba221eb8a368a119685371381f8035011d18de5ba277ad11d7dfb8657f" + url: "https://pub.dev" + source: hosted + version: "1.4.0" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_launcher_icons: + dependency: "direct dev" + description: + name: flutter_launcher_icons + sha256: "526faf84284b86a4cb36d20a5e45147747b7563d921373d4ee0559c54fcdbcea" + url: "https://pub.dev" + source: hosted + version: "0.13.1" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + sha256: e2a421b7e59244faef694ba7b30562e489c2b489866e505074eb005cd7060db7 + url: "https://pub.dev" + source: hosted + version: "3.0.1" + flutter_localizations: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_plugin_android_lifecycle: + dependency: transitive + description: + name: flutter_plugin_android_lifecycle + sha256: b068ffc46f82a55844acfa4fdbb61fad72fa2aef0905548419d97f0f95c456da + url: "https://pub.dev" + source: hosted + version: "2.0.17" + flutter_spinkit: + dependency: "direct main" + description: + name: flutter_spinkit + sha256: b39c753e909d4796906c5696a14daf33639a76e017136c8d82bf3e620ce5bb8e + url: "https://pub.dev" + source: hosted + version: "5.2.0" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + image: + dependency: transitive + description: + name: image + sha256: "028f61960d56f26414eb616b48b04eb37d700cbe477b7fb09bf1d7ce57fd9271" + url: "https://pub.dev" + source: hosted + version: "4.1.3" + intl: + dependency: "direct main" + description: + name: intl + sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + url: "https://pub.dev" + source: hosted + version: "0.18.1" + js: + dependency: transitive + description: + name: js + sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 + url: "https://pub.dev" + source: hosted + version: "0.6.7" + json_annotation: + dependency: transitive + description: + name: json_annotation + sha256: b10a7b2ff83d83c777edba3c6a0f97045ddadd56c944e1a23a3fdf43a1bf4467 + url: "https://pub.dev" + source: hosted + version: "4.8.1" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "2c30f27ada446b4d36307aade893faaaeb6d8f55b2362b7f424a9668fcc43f4d" + url: "https://pub.dev" + source: hosted + version: "9.0.14" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: b06739349ec2477e943055aea30172c5c7000225f79dad4702e2ec0eda79a6ff + url: "https://pub.dev" + source: hosted + version: "1.0.5" + lints: + dependency: transitive + description: + name: lints + sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290 + url: "https://pub.dev" + source: hosted + version: "3.0.0" + matcher: + dependency: transitive + description: + name: matcher + sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + url: "https://pub.dev" + source: hosted + version: "0.12.16" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" + url: "https://pub.dev" + source: hosted + version: "0.8.0" + meta: + dependency: transitive + description: + name: meta + sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04 + url: "https://pub.dev" + source: hosted + version: "1.11.0" + path: + dependency: transitive + description: + name: path + sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + url: "https://pub.dev" + source: hosted + version: "1.8.3" + path_provider: + dependency: "direct main" + description: + name: path_provider + sha256: a1aa8aaa2542a6bc57e381f132af822420216c80d4781f7aa085ca3229208aaa + url: "https://pub.dev" + source: hosted + version: "2.1.1" + path_provider_android: + dependency: transitive + description: + name: path_provider_android + sha256: e595b98692943b4881b219f0a9e3945118d3c16bd7e2813f98ec6e532d905f72 + url: "https://pub.dev" + source: hosted + version: "2.2.1" + path_provider_foundation: + dependency: transitive + description: + name: path_provider_foundation + sha256: "19314d595120f82aca0ba62787d58dde2cc6b5df7d2f0daf72489e38d1b57f2d" + url: "https://pub.dev" + source: hosted + version: "2.3.1" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 + url: "https://pub.dev" + source: hosted + version: "2.2.1" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + sha256: "94b1e0dd80970c1ce43d5d4e050a9918fce4f4a775e6142424c30a29a363265c" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170" + url: "https://pub.dev" + source: hosted + version: "2.2.1" + petitparser: + dependency: transitive + description: + name: petitparser + sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27 + url: "https://pub.dev" + source: hosted + version: "6.0.2" + platform: + dependency: transitive + description: + name: platform + sha256: "0a279f0707af40c890e80b1e9df8bb761694c074ba7e1d4ab1bc4b728e200b59" + url: "https://pub.dev" + source: hosted + version: "3.1.3" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + sha256: f4f88d4a900933e7267e2b353594774fc0d07fb072b47eedcd5b54e1ea3269f8 + url: "https://pub.dev" + source: hosted + version: "2.1.7" + pointycastle: + dependency: transitive + description: + name: pointycastle + sha256: "7c1e5f0d23c9016c5bbd8b1473d0d3fb3fc851b876046039509e18e0c7485f2c" + url: "https://pub.dev" + source: hosted + version: "3.7.3" + shared_preferences: + dependency: "direct main" + description: + name: shared_preferences + sha256: "81429e4481e1ccfb51ede496e916348668fd0921627779233bd24cc3ff6abd02" + url: "https://pub.dev" + source: hosted + version: "2.2.2" + shared_preferences_android: + dependency: transitive + description: + name: shared_preferences_android + sha256: "8568a389334b6e83415b6aae55378e158fbc2314e074983362d20c562780fb06" + url: "https://pub.dev" + source: hosted + version: "2.2.1" + shared_preferences_foundation: + dependency: transitive + description: + name: shared_preferences_foundation + sha256: "7bf53a9f2d007329ee6f3df7268fd498f8373602f943c975598bbb34649b62a7" + url: "https://pub.dev" + source: hosted + version: "2.3.4" + shared_preferences_linux: + dependency: transitive + description: + name: shared_preferences_linux + sha256: "9f2cbcf46d4270ea8be39fa156d86379077c8a5228d9dfdb1164ae0bb93f1faa" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + shared_preferences_platform_interface: + dependency: transitive + description: + name: shared_preferences_platform_interface + sha256: d4ec5fc9ebb2f2e056c617112aa75dcf92fc2e4faaf2ae999caa297473f75d8a + url: "https://pub.dev" + source: hosted + version: "2.3.1" + shared_preferences_web: + dependency: transitive + description: + name: shared_preferences_web + sha256: "7b15ffb9387ea3e237bb7a66b8a23d2147663d391cafc5c8f37b2e7b4bde5d21" + url: "https://pub.dev" + source: hosted + version: "2.2.2" + shared_preferences_windows: + dependency: transitive + description: + name: shared_preferences_windows + sha256: "841ad54f3c8381c480d0c9b508b89a34036f512482c407e6df7a9c4aa2ef8f59" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_span: + dependency: transitive + description: + name: source_span + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + url: "https://pub.dev" + source: hosted + version: "1.10.0" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" + url: "https://pub.dev" + source: hosted + version: "1.11.1" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 + url: "https://pub.dev" + source: hosted + version: "2.1.2" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + system_theme: + dependency: "direct main" + description: + name: system_theme + sha256: "1f208db140a3d1e1eac2034b54920d95699c1534df576ced44b3312c5de3975f" + url: "https://pub.dev" + source: hosted + version: "2.3.1" + system_theme_web: + dependency: transitive + description: + name: system_theme_web + sha256: "7566f5a928f6d28d7a60c97bea8a851d1c6bc9b86a4df2366230a97458489219" + url: "https://pub.dev" + source: hosted + version: "0.0.2" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" + source: hosted + version: "1.2.1" + test_api: + dependency: transitive + description: + name: test_api + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + url: "https://pub.dev" + source: hosted + version: "0.6.1" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c + url: "https://pub.dev" + source: hosted + version: "1.3.2" + url_launcher: + dependency: "direct main" + description: + name: url_launcher + sha256: b1c9e98774adf8820c96fbc7ae3601231d324a7d5ebd8babe27b6dfac91357ba + url: "https://pub.dev" + source: hosted + version: "6.2.1" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + sha256: "31222ffb0063171b526d3e569079cf1f8b294075ba323443fdc690842bfd4def" + url: "https://pub.dev" + source: hosted + version: "6.2.0" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + sha256: bba3373219b7abb6b5e0d071b0fe66dfbe005d07517a68e38d4fc3638f35c6d3 + url: "https://pub.dev" + source: hosted + version: "6.2.1" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: "9f2d390e096fdbe1e6e6256f97851e51afc2d9c423d3432f1d6a02a8a9a8b9fd" + url: "https://pub.dev" + source: hosted + version: "3.1.0" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: b7244901ea3cf489c5335bdacda07264a6e960b1c1b1a9f91e4bc371d9e68234 + url: "https://pub.dev" + source: hosted + version: "3.1.0" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + sha256: "980e8d9af422f477be6948bdfb68df8433be71f5743a188968b0c1b887807e50" + url: "https://pub.dev" + source: hosted + version: "2.2.0" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: "138bd45b3a456dcfafc46d1a146787424f8d2edfbf2809c9324361e58f851cf7" + url: "https://pub.dev" + source: hosted + version: "2.2.1" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: "7754a1ad30ee896b265f8d14078b0513a4dba28d358eabb9d5f339886f4a1adc" + url: "https://pub.dev" + source: hosted + version: "3.1.0" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + url: "https://pub.dev" + source: hosted + version: "13.0.0" + web: + dependency: transitive + description: + name: web + sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + url: "https://pub.dev" + source: hosted + version: "0.3.0" + win32: + dependency: transitive + description: + name: win32 + sha256: b0f37db61ba2f2e9b7a78a1caece0052564d1bc70668156cf3a29d676fe4e574 + url: "https://pub.dev" + source: hosted + version: "5.1.1" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + sha256: "589ada45ba9e39405c198fe34eb0f607cddb2108527e658136120892beac46d2" + url: "https://pub.dev" + source: hosted + version: "1.0.3" + xml: + dependency: transitive + description: + name: xml + sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 + url: "https://pub.dev" + source: hosted + version: "6.5.0" + yaml: + dependency: transitive + description: + name: yaml + sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" + url: "https://pub.dev" + source: hosted + version: "3.1.2" +sdks: + dart: ">=3.3.0-120.0.dev <4.0.0" + flutter: ">=3.16.0" diff --git a/pubspec.yaml b/pubspec.yaml new file mode 100644 index 0000000..e731d1b --- /dev/null +++ b/pubspec.yaml @@ -0,0 +1,45 @@ +name: fltext +description: "Text editor built using Flutter." +publish_to: 'none' +version: 0.1.0+1 + +environment: + sdk: '>=3.3.0-120.0.dev <4.0.0' + +dependencies: + flutter: + sdk: flutter + + file_picker: ^6.1.1 + flutter_spinkit: ^5.1.0 + flutter_localizations: + sdk: flutter + intl: any + path_provider: ^2.1.1 + system_theme: ^2.3.1 + url_launcher: ^6.2.1 + shared_preferences: ^2.2.2 + flex_color_picker: ^3.3.0 + +dev_dependencies: + flutter_test: + sdk: flutter + + flutter_lints: ^3.0.0 + flutter_launcher_icons: ^0.13.1 + +flutter_launcher_icons: + android: true + ios: true + image_path: "assets/logo.png" + min_sdk_android: 21 + web: + generate: true + windows: + generate: true + macos: + generate: true + +flutter: + uses-material-design: true + generate: true \ No newline at end of file diff --git a/scripts/build-flatpak.sh b/scripts/build-flatpak.sh new file mode 100755 index 0000000..16984d9 --- /dev/null +++ b/scripts/build-flatpak.sh @@ -0,0 +1,36 @@ +#!/usr/bin/env bash + +# This file sets up the necessary build files for Flatpak packages. +# In essence this means building the executable and placing it +# in the expected path. +# +# This script must be run from the ROOT FOLDER (aka. Where the "pubspec.yaml" file) + +export FLT_BUILD_DIR='build/linux/x64/release/bundle' + +flt_build_executable() { + if [[ $FLT_CLEAN_FIRST == '1' ]]; then + /usr/bin/bash scripts/clean-all.sh + fi + flutter build linux --release +} + +flt_create_dirs() { + [[ ! -d data/lib ]] && mkdir data/lib + + cp -r ${FLT_BUILD_DIR}/lib/* data/lib/ + cp -r ${FLT_BUILD_DIR}/fltext data/ + cp -r ${FLT_BUILD_DIR}/data data/data +} + +flt_install_flatpak() { + flatpak run org.flatpak.Builder \ + --force-clean \ + --sandbox \ + --user \ + --install \ + --ccache \ + --repo=repo builddir data/io.tseli0s.FlText.json +} + +flt_build_executable && flt_create_dirs && flt_install_flatpak \ No newline at end of file diff --git a/scripts/clean-all.sh b/scripts/clean-all.sh new file mode 100755 index 0000000..050c793 --- /dev/null +++ b/scripts/clean-all.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +flutter clean +rm -rfv .flatpak builddir data/lib/ data/fltext data/data \ No newline at end of file diff --git a/web/favicon.png b/web/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..08870023bb6ba659d182b3b90c72b179c8ef0e87 GIT binary patch literal 510 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 z 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 literal 0 HcmV?d00001 diff --git a/web/icons/Icon-512.png b/web/icons/Icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..3aaf1b598554f81c26e17e24b39e0f5f16be8508 GIT binary patch literal 29421 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 literal 0 HcmV?d00001 diff --git a/web/icons/Icon-maskable-192.png b/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000000000000000000000000000000000000..5eb95237fe1404d9c8240ad3750a368664072c10 GIT binary patch literal 10398 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 z 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 literal 0 HcmV?d00001 diff --git a/web/icons/Icon-maskable-512.png b/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000000000000000000000000000000000000..3aaf1b598554f81c26e17e24b39e0f5f16be8508 GIT binary patch literal 29421 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 literal 0 HcmV?d00001 diff --git a/web/index.html b/web/index.html new file mode 100644 index 0000000..ebd80d2 --- /dev/null +++ b/web/index.html @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + FlText - Web Version + + + + + + + + + + diff --git a/web/manifest.json b/web/manifest.json new file mode 100644 index 0000000..a6754a5 --- /dev/null +++ b/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "fltext", + "short_name": "fltext", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} \ No newline at end of file diff --git a/windows/.gitignore b/windows/.gitignore new file mode 100644 index 0000000..d492d0d --- /dev/null +++ b/windows/.gitignore @@ -0,0 +1,17 @@ +flutter/ephemeral/ + +# Visual Studio user-specific files. +*.suo +*.user +*.userosscache +*.sln.docstates + +# Visual Studio build-related files. +x64/ +x86/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ diff --git a/windows/CMakeLists.txt b/windows/CMakeLists.txt new file mode 100644 index 0000000..6771b8f --- /dev/null +++ b/windows/CMakeLists.txt @@ -0,0 +1,108 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.14) +project(fltext LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "fltext") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(VERSION 3.14...3.25) + +# Define build configuration option. +get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(IS_MULTICONFIG) + set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" + CACHE STRING "" FORCE) +else() + if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") + endif() +endif() +# Define settings for the Profile build mode. +set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") +set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") +set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") +set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") + +# Use Unicode for all projects. +add_definitions(-DUNICODE -D_UNICODE) + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_17) + target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") + target_compile_options(${TARGET} PRIVATE /EHsc) + target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0") + target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# Support files are copied into place next to the executable, so that it can +# run in place. This is done instead of making a separate bundle (as on Linux) +# so that building and running from within Visual Studio will work. +set(BUILD_BUNDLE_DIR "$") +# Make the "install" step default, as it's required to run. +set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1) +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +if(PLUGIN_BUNDLED_LIBRARIES) + install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/windows/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + CONFIGURATIONS Profile;Release + COMPONENT Runtime) diff --git a/windows/flutter/CMakeLists.txt b/windows/flutter/CMakeLists.txt new file mode 100644 index 0000000..903f489 --- /dev/null +++ b/windows/flutter/CMakeLists.txt @@ -0,0 +1,109 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.14) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. +set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") + +# Set fallback configurations for older versions of the flutter tool. +if (NOT DEFINED FLUTTER_TARGET_PLATFORM) + set(FLUTTER_TARGET_PLATFORM "windows-x64") +endif() + +# === Flutter Library === +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "flutter_export.h" + "flutter_windows.h" + "flutter_messenger.h" + "flutter_plugin_registrar.h" + "flutter_texture_registrar.h" +) +list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") +add_dependencies(flutter flutter_assemble) + +# === Wrapper === +list(APPEND CPP_WRAPPER_SOURCES_CORE + "core_implementations.cc" + "standard_codec.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_PLUGIN + "plugin_registrar.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_APP + "flutter_engine.cc" + "flutter_view_controller.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") + +# Wrapper sources needed for a plugin. +add_library(flutter_wrapper_plugin STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} +) +apply_standard_settings(flutter_wrapper_plugin) +set_target_properties(flutter_wrapper_plugin PROPERTIES + POSITION_INDEPENDENT_CODE ON) +set_target_properties(flutter_wrapper_plugin PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) +target_include_directories(flutter_wrapper_plugin PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_plugin flutter_assemble) + +# Wrapper sources needed for the runner. +add_library(flutter_wrapper_app STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_APP} +) +apply_standard_settings(flutter_wrapper_app) +target_link_libraries(flutter_wrapper_app PUBLIC flutter) +target_include_directories(flutter_wrapper_app PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_app flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_") +set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE) +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} + ${PHONY_OUTPUT} + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" + ${FLUTTER_TARGET_PLATFORM} $ + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} +) diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc new file mode 100644 index 0000000..5bc7329 --- /dev/null +++ b/windows/flutter/generated_plugin_registrant.cc @@ -0,0 +1,17 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + +#include +#include + +void RegisterPlugins(flutter::PluginRegistry* registry) { + SystemThemePluginRegisterWithRegistrar( + registry->GetRegistrarForPlugin("SystemThemePlugin")); + UrlLauncherWindowsRegisterWithRegistrar( + registry->GetRegistrarForPlugin("UrlLauncherWindows")); +} diff --git a/windows/flutter/generated_plugin_registrant.h b/windows/flutter/generated_plugin_registrant.h new file mode 100644 index 0000000..dc139d8 --- /dev/null +++ b/windows/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void RegisterPlugins(flutter::PluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake new file mode 100644 index 0000000..0928351 --- /dev/null +++ b/windows/flutter/generated_plugins.cmake @@ -0,0 +1,25 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST + system_theme + url_launcher_windows +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/windows/runner/CMakeLists.txt b/windows/runner/CMakeLists.txt new file mode 100644 index 0000000..394917c --- /dev/null +++ b/windows/runner/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.14) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} WIN32 + "flutter_window.cpp" + "main.cpp" + "utils.cpp" + "win32_window.cpp" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" + "Runner.rc" + "runner.exe.manifest" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + +# Disable Windows macros that collide with C++ standard library functions. +target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") + +# Add dependency libraries and include directories. Add any application-specific +# dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/windows/runner/Runner.rc b/windows/runner/Runner.rc new file mode 100644 index 0000000..bf101da --- /dev/null +++ b/windows/runner/Runner.rc @@ -0,0 +1,121 @@ +// Microsoft Visual C++ generated resource script. +// +#pragma code_page(65001) +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_APP_ICON ICON "resources\\app_icon.ico" + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD +#else +#define VERSION_AS_NUMBER 1,0,0,0 +#endif + +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION +#else +#define VERSION_AS_STRING "1.0.0" +#endif + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VERSION_AS_NUMBER + PRODUCTVERSION VERSION_AS_NUMBER + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "com.example" "\0" + VALUE "FileDescription", "fltext" "\0" + VALUE "FileVersion", VERSION_AS_STRING "\0" + VALUE "InternalName", "fltext" "\0" + VALUE "LegalCopyright", "Copyright (C) 2023 com.example. All rights reserved." "\0" + VALUE "OriginalFilename", "fltext.exe" "\0" + VALUE "ProductName", "fltext" "\0" + VALUE "ProductVersion", VERSION_AS_STRING "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED diff --git a/windows/runner/flutter_window.cpp b/windows/runner/flutter_window.cpp new file mode 100644 index 0000000..955ee30 --- /dev/null +++ b/windows/runner/flutter_window.cpp @@ -0,0 +1,71 @@ +#include "flutter_window.h" + +#include + +#include "flutter/generated_plugin_registrant.h" + +FlutterWindow::FlutterWindow(const flutter::DartProject& project) + : project_(project) {} + +FlutterWindow::~FlutterWindow() {} + +bool FlutterWindow::OnCreate() { + if (!Win32Window::OnCreate()) { + return false; + } + + RECT frame = GetClientArea(); + + // The size here must match the window dimensions to avoid unnecessary surface + // creation / destruction in the startup path. + flutter_controller_ = std::make_unique( + frame.right - frame.left, frame.bottom - frame.top, project_); + // Ensure that basic setup of the controller was successful. + if (!flutter_controller_->engine() || !flutter_controller_->view()) { + return false; + } + RegisterPlugins(flutter_controller_->engine()); + SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + + // Flutter can complete the first frame before the "show window" callback is + // registered. The following call ensures a frame is pending to ensure the + // window is shown. It is a no-op if the first frame hasn't completed yet. + flutter_controller_->ForceRedraw(); + + return true; +} + +void FlutterWindow::OnDestroy() { + if (flutter_controller_) { + flutter_controller_ = nullptr; + } + + Win32Window::OnDestroy(); +} + +LRESULT +FlutterWindow::MessageHandler(HWND hwnd, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + // Give Flutter, including plugins, an opportunity to handle window messages. + if (flutter_controller_) { + std::optional result = + flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, + lparam); + if (result) { + return *result; + } + } + + switch (message) { + case WM_FONTCHANGE: + flutter_controller_->engine()->ReloadSystemFonts(); + break; + } + + return Win32Window::MessageHandler(hwnd, message, wparam, lparam); +} diff --git a/windows/runner/flutter_window.h b/windows/runner/flutter_window.h new file mode 100644 index 0000000..6da0652 --- /dev/null +++ b/windows/runner/flutter_window.h @@ -0,0 +1,33 @@ +#ifndef RUNNER_FLUTTER_WINDOW_H_ +#define RUNNER_FLUTTER_WINDOW_H_ + +#include +#include + +#include + +#include "win32_window.h" + +// A window that does nothing but host a Flutter view. +class FlutterWindow : public Win32Window { + public: + // Creates a new FlutterWindow hosting a Flutter view running |project|. + explicit FlutterWindow(const flutter::DartProject& project); + virtual ~FlutterWindow(); + + protected: + // Win32Window: + bool OnCreate() override; + void OnDestroy() override; + LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, + LPARAM const lparam) noexcept override; + + private: + // The project to run. + flutter::DartProject project_; + + // The Flutter instance hosted by this window. + std::unique_ptr flutter_controller_; +}; + +#endif // RUNNER_FLUTTER_WINDOW_H_ diff --git a/windows/runner/main.cpp b/windows/runner/main.cpp new file mode 100644 index 0000000..9bda0c9 --- /dev/null +++ b/windows/runner/main.cpp @@ -0,0 +1,43 @@ +#include +#include +#include + +#include "flutter_window.h" +#include "utils.h" + +int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, + _In_ wchar_t *command_line, _In_ int show_command) { + // Attach to console when present (e.g., 'flutter run') or create a + // new console when running with a debugger. + if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { + CreateAndAttachConsole(); + } + + // Initialize COM, so that it is available for use in the library and/or + // plugins. + ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); + + flutter::DartProject project(L"data"); + + std::vector command_line_arguments = + GetCommandLineArguments(); + + project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); + + FlutterWindow window(project); + Win32Window::Point origin(10, 10); + Win32Window::Size size(1280, 720); + if (!window.Create(L"fltext", origin, size)) { + return EXIT_FAILURE; + } + window.SetQuitOnClose(true); + + ::MSG msg; + while (::GetMessage(&msg, nullptr, 0, 0)) { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + + ::CoUninitialize(); + return EXIT_SUCCESS; +} diff --git a/windows/runner/resource.h b/windows/runner/resource.h new file mode 100644 index 0000000..66a65d1 --- /dev/null +++ b/windows/runner/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Runner.rc +// +#define IDI_APP_ICON 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/windows/runner/resources/app_icon.ico b/windows/runner/resources/app_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..f8746c1ecdcd276459788e58ff3e2f4328da8d86 GIT binary patch literal 1568 zcmV+*2H*Jr0096205C8B0000W015^G02TlM0EtjeM-2)Z3IG5A4M|8uQUCw|FaQ7m zFbDeSaefwW^{L9a%BK_cXuvnZfkR6VQ^(GZ*pgw?mQX*00pc` zL_t(|0qt2!ZyQw<{$~7sjvsMJBN{@2QmNq~9uh)DU4@DT+eqyK)D=>H02{g~V$%&Q zirB&mgpi5^5>ix&O)H+|Q3?2o}w#fT-)8FDQm4`E!UGH z;hV2aa(}u4pe=}DQ4&>)=|y7b%Yxa9(Il;#MMTWCeua72>6uQ7U2)7iU*4U7W?G zuiu@So_YDi4+jcBR$c)>-*=`*aqje}(Z-Us-n{S&PEMt8;mkAm;L9ak{UhIFaROu- zJ&8&%97m8pPGIj*UEO%qOQXYo??oqvBR~K|QL&~D=EE-*a5q<1Mxb168TFDV!JH`C zvWF@&si$%4!AXoHB&41#BI|#Esa)aqL?*R<-~bfkYf9;go_a2g=f^oTS|YM5OX^K3 zR64a<+&pg-I?4dVP+UV?Nuk|BVZ_{D#}HC@OW6%_>Kz7gtjkL z*M~tF3K1T!9~B|2G^HcJGL>K(crk&WT>&7Ol#&lJZ9cxTh`E)mu3PLGp?<}?BJ+Q} z#z1!ap*T!x6^kf5@;~8XK0iaG!brS!W-5}Zs$Q2qE0Jm1l`1HFwFrqL0RH8W`Qny68jaH)~xCg)-2V`Bg$!+ZYzPXM? zIG#pv6`05X8!@$K=urvMgtJ|eeNSSe*wIP3xd(?y8a>(5b%HYqF3 zZ}z1ndlAQTKqN23Fjfnz{@-kI*6KM;Sfbnz@>Rg^p(#%M=Y7C9rAd|2hDJ|kasXb) z+^8wcY(pg~vBVG-%W48w(D={g>nJp8mTcA)0Nqr=#zoo&wSMu0GicCCb26qSaMUlb zwr+Z^GudY|2s!s=b&@%g~BN#*hg0a(%a-^%4o5#H4iFi}V{>E8#_R3~X` zXeul#VWE8!o>&G*S|7c<`BCWUMl>Xvrc z8nIhV3;Bu!U#Wv&UZCu=tx!t`E6F42CWW@$DzR97hjcr@mTRD~}7Jpe$zft@7^9Ghp5>SC2N^ z@HTbwC(VWKzW&0|-(3TcNrtPJ-+0000 + + + + PerMonitorV2 + + + + + + + + + + + + + + + diff --git a/windows/runner/utils.cpp b/windows/runner/utils.cpp new file mode 100644 index 0000000..b2b0873 --- /dev/null +++ b/windows/runner/utils.cpp @@ -0,0 +1,65 @@ +#include "utils.h" + +#include +#include +#include +#include + +#include + +void CreateAndAttachConsole() { + if (::AllocConsole()) { + FILE *unused; + if (freopen_s(&unused, "CONOUT$", "w", stdout)) { + _dup2(_fileno(stdout), 1); + } + if (freopen_s(&unused, "CONOUT$", "w", stderr)) { + _dup2(_fileno(stdout), 2); + } + std::ios::sync_with_stdio(); + FlutterDesktopResyncOutputStreams(); + } +} + +std::vector GetCommandLineArguments() { + // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. + int argc; + wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); + if (argv == nullptr) { + return std::vector(); + } + + std::vector command_line_arguments; + + // Skip the first argument as it's the binary name. + for (int i = 1; i < argc; i++) { + command_line_arguments.push_back(Utf8FromUtf16(argv[i])); + } + + ::LocalFree(argv); + + return command_line_arguments; +} + +std::string Utf8FromUtf16(const wchar_t* utf16_string) { + if (utf16_string == nullptr) { + return std::string(); + } + int target_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); + std::string utf8_string; + if (target_length <= 0 || target_length > utf8_string.max_size()) { + return utf8_string; + } + utf8_string.resize(target_length); + int converted_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + input_length, utf8_string.data(), target_length, nullptr, nullptr); + if (converted_length == 0) { + return std::string(); + } + return utf8_string; +} diff --git a/windows/runner/utils.h b/windows/runner/utils.h new file mode 100644 index 0000000..3879d54 --- /dev/null +++ b/windows/runner/utils.h @@ -0,0 +1,19 @@ +#ifndef RUNNER_UTILS_H_ +#define RUNNER_UTILS_H_ + +#include +#include + +// Creates a console for the process, and redirects stdout and stderr to +// it for both the runner and the Flutter library. +void CreateAndAttachConsole(); + +// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string +// encoded in UTF-8. Returns an empty std::string on failure. +std::string Utf8FromUtf16(const wchar_t* utf16_string); + +// Gets the command line arguments passed in as a std::vector, +// encoded in UTF-8. Returns an empty std::vector on failure. +std::vector GetCommandLineArguments(); + +#endif // RUNNER_UTILS_H_ diff --git a/windows/runner/win32_window.cpp b/windows/runner/win32_window.cpp new file mode 100644 index 0000000..60608d0 --- /dev/null +++ b/windows/runner/win32_window.cpp @@ -0,0 +1,288 @@ +#include "win32_window.h" + +#include +#include + +#include "resource.h" + +namespace { + +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + +constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; + +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + +// The number of Win32Window objects that currently exist. +static int g_active_window_count = 0; + +using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd); + +// Scale helper to convert logical scaler values to physical using passed in +// scale factor +int Scale(int source, double scale_factor) { + return static_cast(source * scale_factor); +} + +// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module. +// This API is only needed for PerMonitor V1 awareness mode. +void EnableFullDpiSupportIfAvailable(HWND hwnd) { + HMODULE user32_module = LoadLibraryA("User32.dll"); + if (!user32_module) { + return; + } + auto enable_non_client_dpi_scaling = + reinterpret_cast( + GetProcAddress(user32_module, "EnableNonClientDpiScaling")); + if (enable_non_client_dpi_scaling != nullptr) { + enable_non_client_dpi_scaling(hwnd); + } + FreeLibrary(user32_module); +} + +} // namespace + +// Manages the Win32Window's window class registration. +class WindowClassRegistrar { + public: + ~WindowClassRegistrar() = default; + + // Returns the singleton registrar instance. + static WindowClassRegistrar* GetInstance() { + if (!instance_) { + instance_ = new WindowClassRegistrar(); + } + return instance_; + } + + // Returns the name of the window class, registering the class if it hasn't + // previously been registered. + const wchar_t* GetWindowClass(); + + // Unregisters the window class. Should only be called if there are no + // instances of the window. + void UnregisterWindowClass(); + + private: + WindowClassRegistrar() = default; + + static WindowClassRegistrar* instance_; + + bool class_registered_ = false; +}; + +WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr; + +const wchar_t* WindowClassRegistrar::GetWindowClass() { + if (!class_registered_) { + WNDCLASS window_class{}; + window_class.hCursor = LoadCursor(nullptr, IDC_ARROW); + window_class.lpszClassName = kWindowClassName; + window_class.style = CS_HREDRAW | CS_VREDRAW; + window_class.cbClsExtra = 0; + window_class.cbWndExtra = 0; + window_class.hInstance = GetModuleHandle(nullptr); + window_class.hIcon = + LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON)); + window_class.hbrBackground = 0; + window_class.lpszMenuName = nullptr; + window_class.lpfnWndProc = Win32Window::WndProc; + RegisterClass(&window_class); + class_registered_ = true; + } + return kWindowClassName; +} + +void WindowClassRegistrar::UnregisterWindowClass() { + UnregisterClass(kWindowClassName, nullptr); + class_registered_ = false; +} + +Win32Window::Win32Window() { + ++g_active_window_count; +} + +Win32Window::~Win32Window() { + --g_active_window_count; + Destroy(); +} + +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { + Destroy(); + + const wchar_t* window_class = + WindowClassRegistrar::GetInstance()->GetWindowClass(); + + const POINT target_point = {static_cast(origin.x), + static_cast(origin.y)}; + HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST); + UINT dpi = FlutterDesktopGetDpiForMonitor(monitor); + double scale_factor = dpi / 96.0; + + HWND window = CreateWindow( + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, + Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), + Scale(size.width, scale_factor), Scale(size.height, scale_factor), + nullptr, nullptr, GetModuleHandle(nullptr), this); + + if (!window) { + return false; + } + + UpdateTheme(window); + + return OnCreate(); +} + +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + +// static +LRESULT CALLBACK Win32Window::WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + if (message == WM_NCCREATE) { + auto window_struct = reinterpret_cast(lparam); + SetWindowLongPtr(window, GWLP_USERDATA, + reinterpret_cast(window_struct->lpCreateParams)); + + auto that = static_cast(window_struct->lpCreateParams); + EnableFullDpiSupportIfAvailable(window); + that->window_handle_ = window; + } else if (Win32Window* that = GetThisFromHandle(window)) { + return that->MessageHandler(window, message, wparam, lparam); + } + + return DefWindowProc(window, message, wparam, lparam); +} + +LRESULT +Win32Window::MessageHandler(HWND hwnd, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + switch (message) { + case WM_DESTROY: + window_handle_ = nullptr; + Destroy(); + if (quit_on_close_) { + PostQuitMessage(0); + } + return 0; + + case WM_DPICHANGED: { + auto newRectSize = reinterpret_cast(lparam); + LONG newWidth = newRectSize->right - newRectSize->left; + LONG newHeight = newRectSize->bottom - newRectSize->top; + + SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth, + newHeight, SWP_NOZORDER | SWP_NOACTIVATE); + + return 0; + } + case WM_SIZE: { + RECT rect = GetClientArea(); + if (child_content_ != nullptr) { + // Size and position the child window. + MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left, + rect.bottom - rect.top, TRUE); + } + return 0; + } + + case WM_ACTIVATE: + if (child_content_ != nullptr) { + SetFocus(child_content_); + } + return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; + } + + return DefWindowProc(window_handle_, message, wparam, lparam); +} + +void Win32Window::Destroy() { + OnDestroy(); + + if (window_handle_) { + DestroyWindow(window_handle_); + window_handle_ = nullptr; + } + if (g_active_window_count == 0) { + WindowClassRegistrar::GetInstance()->UnregisterWindowClass(); + } +} + +Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept { + return reinterpret_cast( + GetWindowLongPtr(window, GWLP_USERDATA)); +} + +void Win32Window::SetChildContent(HWND content) { + child_content_ = content; + SetParent(content, window_handle_); + RECT frame = GetClientArea(); + + MoveWindow(content, frame.left, frame.top, frame.right - frame.left, + frame.bottom - frame.top, true); + + SetFocus(child_content_); +} + +RECT Win32Window::GetClientArea() { + RECT frame; + GetClientRect(window_handle_, &frame); + return frame; +} + +HWND Win32Window::GetHandle() { + return window_handle_; +} + +void Win32Window::SetQuitOnClose(bool quit_on_close) { + quit_on_close_ = quit_on_close; +} + +bool Win32Window::OnCreate() { + // No-op; provided for subclasses. + return true; +} + +void Win32Window::OnDestroy() { + // No-op; provided for subclasses. +} + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/windows/runner/win32_window.h b/windows/runner/win32_window.h new file mode 100644 index 0000000..e901dde --- /dev/null +++ b/windows/runner/win32_window.h @@ -0,0 +1,102 @@ +#ifndef RUNNER_WIN32_WINDOW_H_ +#define RUNNER_WIN32_WINDOW_H_ + +#include + +#include +#include +#include + +// A class abstraction for a high DPI-aware Win32 Window. Intended to be +// inherited from by classes that wish to specialize with custom +// rendering and input handling +class Win32Window { + public: + struct Point { + unsigned int x; + unsigned int y; + Point(unsigned int x, unsigned int y) : x(x), y(y) {} + }; + + struct Size { + unsigned int width; + unsigned int height; + Size(unsigned int width, unsigned int height) + : width(width), height(height) {} + }; + + Win32Window(); + virtual ~Win32Window(); + + // Creates a win32 window with |title| that is positioned and sized using + // |origin| and |size|. New windows are created on the default monitor. Window + // sizes are specified to the OS in physical pixels, hence to ensure a + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); + + // Release OS resources associated with window. + void Destroy(); + + // Inserts |content| into the window tree. + void SetChildContent(HWND content); + + // Returns the backing Window handle to enable clients to set icon and other + // window properties. Returns nullptr if the window has been destroyed. + HWND GetHandle(); + + // If true, closing this window will quit the application. + void SetQuitOnClose(bool quit_on_close); + + // Return a RECT representing the bounds of the current client area. + RECT GetClientArea(); + + protected: + // Processes and route salient window messages for mouse handling, + // size change and DPI. Delegates handling of these to member overloads that + // inheriting classes can handle. + virtual LRESULT MessageHandler(HWND window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Called when CreateAndShow is called, allowing subclass window-related + // setup. Subclasses should return false if setup fails. + virtual bool OnCreate(); + + // Called when Destroy is called. + virtual void OnDestroy(); + + private: + friend class WindowClassRegistrar; + + // OS callback called by message pump. Handles the WM_NCCREATE message which + // is passed when the non-client area is being created and enables automatic + // non-client DPI scaling so that the non-client area automatically + // responds to changes in DPI. All other messages are handled by + // MessageHandler. + static LRESULT CALLBACK WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Retrieves a class instance pointer for |window| + static Win32Window* GetThisFromHandle(HWND const window) noexcept; + + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + + bool quit_on_close_ = false; + + // window handle for top level window. + HWND window_handle_ = nullptr; + + // window handle for hosted content. + HWND child_content_ = nullptr; +}; + +#endif // RUNNER_WIN32_WINDOW_H_