From 4e09baff76e686e07c3d774344acfc0fd47190fe Mon Sep 17 00:00:00 2001 From: simda545 <simda545@su10-209.ad.liu.se> Date: Wed, 4 Dec 2024 17:18:06 +0100 Subject: [PATCH] =?UTF-8?q?labb2=20f=C3=A4rdig?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TDDE43/labb2/.gitignore | 43 ++ TDDE43/labb2/.metadata | 45 ++ TDDE43/labb2/README.md | 16 + TDDE43/labb2/analysis_options.yaml | 28 + TDDE43/labb2/android/.gitignore | 13 + TDDE43/labb2/android/app/build.gradle | 44 ++ .../android/app/src/debug/AndroidManifest.xml | 7 + .../android/app/src/main/AndroidManifest.xml | 45 ++ .../kotlin/com/example/labb2/MainActivity.kt | 5 + .../res/drawable-v21/launch_background.xml | 12 + .../main/res/drawable/launch_background.xml | 12 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 544 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 442 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 721 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 1031 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 1443 bytes .../app/src/main/res/values-night/styles.xml | 18 + .../app/src/main/res/values/styles.xml | 18 + .../app/src/profile/AndroidManifest.xml | 7 + TDDE43/labb2/android/build.gradle | 18 + TDDE43/labb2/android/gradle.properties | 3 + .../gradle/wrapper/gradle-wrapper.properties | 5 + TDDE43/labb2/android/settings.gradle | 25 + TDDE43/labb2/ios/.gitignore | 34 + .../labb2/ios/Flutter/AppFrameworkInfo.plist | 26 + TDDE43/labb2/ios/Flutter/Debug.xcconfig | 1 + TDDE43/labb2/ios/Flutter/Release.xcconfig | 1 + .../ios/Runner.xcodeproj/project.pbxproj | 616 +++++++++++++++ .../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 + TDDE43/labb2/ios/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 122 +++ .../Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 295 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 0 -> 406 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 0 -> 450 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 0 -> 282 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 0 -> 462 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 0 -> 704 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 0 -> 406 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 0 -> 586 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 0 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 0 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 0 -> 1674 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 0 -> 762 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 0 -> 1226 bytes .../Icon-App-83.5x83.5@2x.png | Bin 0 -> 1418 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 + .../Runner/Base.lproj/LaunchScreen.storyboard | 37 + .../ios/Runner/Base.lproj/Main.storyboard | 26 + TDDE43/labb2/ios/Runner/Info.plist | 49 ++ .../labb2/ios/Runner/Runner-Bridging-Header.h | 1 + .../labb2/ios/RunnerTests/RunnerTests.swift | 12 + TDDE43/labb2/lib/githubservice.dart | 17 + TDDE43/labb2/lib/main.dart | 191 +++++ TDDE43/labb2/linux/.gitignore | 1 + TDDE43/labb2/linux/CMakeLists.txt | 145 ++++ TDDE43/labb2/linux/flutter/CMakeLists.txt | 88 +++ .../flutter/generated_plugin_registrant.cc | 15 + .../flutter/generated_plugin_registrant.h | 15 + .../linux/flutter/generated_plugins.cmake | 24 + TDDE43/labb2/linux/main.cc | 6 + TDDE43/labb2/linux/my_application.cc | 124 +++ TDDE43/labb2/linux/my_application.h | 18 + TDDE43/labb2/macos/.gitignore | 7 + .../macos/Flutter/Flutter-Debug.xcconfig | 1 + .../macos/Flutter/Flutter-Release.xcconfig | 1 + .../Flutter/GeneratedPluginRegistrant.swift | 12 + .../macos/Runner.xcodeproj/project.pbxproj | 705 ++++++++++++++++++ .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 98 +++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + TDDE43/labb2/macos/Runner/AppDelegate.swift | 9 + .../AppIcon.appiconset/Contents.json | 68 ++ .../AppIcon.appiconset/app_icon_1024.png | Bin 0 -> 102994 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 0 -> 5680 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 0 -> 520 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 0 -> 14142 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 0 -> 1066 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 0 -> 36406 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 0 -> 2218 bytes .../macos/Runner/Base.lproj/MainMenu.xib | 343 +++++++++ .../macos/Runner/Configs/AppInfo.xcconfig | 14 + .../labb2/macos/Runner/Configs/Debug.xcconfig | 2 + .../macos/Runner/Configs/Release.xcconfig | 2 + .../macos/Runner/Configs/Warnings.xcconfig | 13 + .../macos/Runner/DebugProfile.entitlements | 12 + TDDE43/labb2/macos/Runner/Info.plist | 32 + .../macos/Runner/MainFlutterWindow.swift | 15 + .../labb2/macos/Runner/Release.entitlements | 8 + .../labb2/macos/RunnerTests/RunnerTests.swift | 12 + TDDE43/labb2/pubspec.lock | 322 ++++++++ TDDE43/labb2/pubspec.yaml | 94 +++ TDDE43/labb2/test/widget_test.dart | 30 + TDDE43/labb2/web/favicon.png | Bin 0 -> 917 bytes TDDE43/labb2/web/icons/Icon-192.png | Bin 0 -> 5292 bytes TDDE43/labb2/web/icons/Icon-512.png | Bin 0 -> 8252 bytes TDDE43/labb2/web/icons/Icon-maskable-192.png | Bin 0 -> 5594 bytes TDDE43/labb2/web/icons/Icon-maskable-512.png | Bin 0 -> 20998 bytes TDDE43/labb2/web/index.html | 38 + TDDE43/labb2/web/manifest.json | 35 + TDDE43/labb2/windows/.gitignore | 17 + TDDE43/labb2/windows/CMakeLists.txt | 108 +++ TDDE43/labb2/windows/flutter/CMakeLists.txt | 109 +++ .../flutter/generated_plugin_registrant.cc | 14 + .../flutter/generated_plugin_registrant.h | 15 + .../windows/flutter/generated_plugins.cmake | 24 + TDDE43/labb2/windows/runner/CMakeLists.txt | 40 + TDDE43/labb2/windows/runner/Runner.rc | 121 +++ .../labb2/windows/runner/flutter_window.cpp | 71 ++ TDDE43/labb2/windows/runner/flutter_window.h | 33 + TDDE43/labb2/windows/runner/main.cpp | 43 ++ TDDE43/labb2/windows/runner/resource.h | 16 + .../windows/runner/resources/app_icon.ico | Bin 0 -> 33772 bytes .../labb2/windows/runner/runner.exe.manifest | 14 + TDDE43/labb2/windows/runner/utils.cpp | 65 ++ TDDE43/labb2/windows/runner/utils.h | 19 + TDDE43/labb2/windows/runner/win32_window.cpp | 288 +++++++ TDDE43/labb2/windows/runner/win32_window.h | 102 +++ 129 files changed, 5113 insertions(+) create mode 100644 TDDE43/labb2/.gitignore create mode 100644 TDDE43/labb2/.metadata create mode 100644 TDDE43/labb2/README.md create mode 100644 TDDE43/labb2/analysis_options.yaml create mode 100644 TDDE43/labb2/android/.gitignore create mode 100644 TDDE43/labb2/android/app/build.gradle create mode 100644 TDDE43/labb2/android/app/src/debug/AndroidManifest.xml create mode 100644 TDDE43/labb2/android/app/src/main/AndroidManifest.xml create mode 100644 TDDE43/labb2/android/app/src/main/kotlin/com/example/labb2/MainActivity.kt create mode 100644 TDDE43/labb2/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 TDDE43/labb2/android/app/src/main/res/drawable/launch_background.xml create mode 100644 TDDE43/labb2/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 TDDE43/labb2/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 TDDE43/labb2/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 TDDE43/labb2/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 TDDE43/labb2/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 TDDE43/labb2/android/app/src/main/res/values-night/styles.xml create mode 100644 TDDE43/labb2/android/app/src/main/res/values/styles.xml create mode 100644 TDDE43/labb2/android/app/src/profile/AndroidManifest.xml create mode 100644 TDDE43/labb2/android/build.gradle create mode 100644 TDDE43/labb2/android/gradle.properties create mode 100644 TDDE43/labb2/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 TDDE43/labb2/android/settings.gradle create mode 100644 TDDE43/labb2/ios/.gitignore create mode 100644 TDDE43/labb2/ios/Flutter/AppFrameworkInfo.plist create mode 100644 TDDE43/labb2/ios/Flutter/Debug.xcconfig create mode 100644 TDDE43/labb2/ios/Flutter/Release.xcconfig create mode 100644 TDDE43/labb2/ios/Runner.xcodeproj/project.pbxproj create mode 100644 TDDE43/labb2/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 TDDE43/labb2/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 TDDE43/labb2/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 TDDE43/labb2/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 TDDE43/labb2/ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 TDDE43/labb2/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 TDDE43/labb2/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 TDDE43/labb2/ios/Runner/AppDelegate.swift create mode 100644 TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 TDDE43/labb2/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json create mode 100644 TDDE43/labb2/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png create mode 100644 TDDE43/labb2/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png create mode 100644 TDDE43/labb2/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png create mode 100644 TDDE43/labb2/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 TDDE43/labb2/ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 TDDE43/labb2/ios/Runner/Base.lproj/Main.storyboard create mode 100644 TDDE43/labb2/ios/Runner/Info.plist create mode 100644 TDDE43/labb2/ios/Runner/Runner-Bridging-Header.h create mode 100644 TDDE43/labb2/ios/RunnerTests/RunnerTests.swift create mode 100644 TDDE43/labb2/lib/githubservice.dart create mode 100644 TDDE43/labb2/lib/main.dart create mode 100644 TDDE43/labb2/linux/.gitignore create mode 100644 TDDE43/labb2/linux/CMakeLists.txt create mode 100644 TDDE43/labb2/linux/flutter/CMakeLists.txt create mode 100644 TDDE43/labb2/linux/flutter/generated_plugin_registrant.cc create mode 100644 TDDE43/labb2/linux/flutter/generated_plugin_registrant.h create mode 100644 TDDE43/labb2/linux/flutter/generated_plugins.cmake create mode 100644 TDDE43/labb2/linux/main.cc create mode 100644 TDDE43/labb2/linux/my_application.cc create mode 100644 TDDE43/labb2/linux/my_application.h create mode 100644 TDDE43/labb2/macos/.gitignore create mode 100644 TDDE43/labb2/macos/Flutter/Flutter-Debug.xcconfig create mode 100644 TDDE43/labb2/macos/Flutter/Flutter-Release.xcconfig create mode 100644 TDDE43/labb2/macos/Flutter/GeneratedPluginRegistrant.swift create mode 100644 TDDE43/labb2/macos/Runner.xcodeproj/project.pbxproj create mode 100644 TDDE43/labb2/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 TDDE43/labb2/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 TDDE43/labb2/macos/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 TDDE43/labb2/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 TDDE43/labb2/macos/Runner/AppDelegate.swift create mode 100644 TDDE43/labb2/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 TDDE43/labb2/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png create mode 100644 TDDE43/labb2/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png create mode 100644 TDDE43/labb2/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png create mode 100644 TDDE43/labb2/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png create mode 100644 TDDE43/labb2/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png create mode 100644 TDDE43/labb2/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png create mode 100644 TDDE43/labb2/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png create mode 100644 TDDE43/labb2/macos/Runner/Base.lproj/MainMenu.xib create mode 100644 TDDE43/labb2/macos/Runner/Configs/AppInfo.xcconfig create mode 100644 TDDE43/labb2/macos/Runner/Configs/Debug.xcconfig create mode 100644 TDDE43/labb2/macos/Runner/Configs/Release.xcconfig create mode 100644 TDDE43/labb2/macos/Runner/Configs/Warnings.xcconfig create mode 100644 TDDE43/labb2/macos/Runner/DebugProfile.entitlements create mode 100644 TDDE43/labb2/macos/Runner/Info.plist create mode 100644 TDDE43/labb2/macos/Runner/MainFlutterWindow.swift create mode 100644 TDDE43/labb2/macos/Runner/Release.entitlements create mode 100644 TDDE43/labb2/macos/RunnerTests/RunnerTests.swift create mode 100644 TDDE43/labb2/pubspec.lock create mode 100644 TDDE43/labb2/pubspec.yaml create mode 100644 TDDE43/labb2/test/widget_test.dart create mode 100644 TDDE43/labb2/web/favicon.png create mode 100644 TDDE43/labb2/web/icons/Icon-192.png create mode 100644 TDDE43/labb2/web/icons/Icon-512.png create mode 100644 TDDE43/labb2/web/icons/Icon-maskable-192.png create mode 100644 TDDE43/labb2/web/icons/Icon-maskable-512.png create mode 100644 TDDE43/labb2/web/index.html create mode 100644 TDDE43/labb2/web/manifest.json create mode 100644 TDDE43/labb2/windows/.gitignore create mode 100644 TDDE43/labb2/windows/CMakeLists.txt create mode 100644 TDDE43/labb2/windows/flutter/CMakeLists.txt create mode 100644 TDDE43/labb2/windows/flutter/generated_plugin_registrant.cc create mode 100644 TDDE43/labb2/windows/flutter/generated_plugin_registrant.h create mode 100644 TDDE43/labb2/windows/flutter/generated_plugins.cmake create mode 100644 TDDE43/labb2/windows/runner/CMakeLists.txt create mode 100644 TDDE43/labb2/windows/runner/Runner.rc create mode 100644 TDDE43/labb2/windows/runner/flutter_window.cpp create mode 100644 TDDE43/labb2/windows/runner/flutter_window.h create mode 100644 TDDE43/labb2/windows/runner/main.cpp create mode 100644 TDDE43/labb2/windows/runner/resource.h create mode 100644 TDDE43/labb2/windows/runner/resources/app_icon.ico create mode 100644 TDDE43/labb2/windows/runner/runner.exe.manifest create mode 100644 TDDE43/labb2/windows/runner/utils.cpp create mode 100644 TDDE43/labb2/windows/runner/utils.h create mode 100644 TDDE43/labb2/windows/runner/win32_window.cpp create mode 100644 TDDE43/labb2/windows/runner/win32_window.h diff --git a/TDDE43/labb2/.gitignore b/TDDE43/labb2/.gitignore new file mode 100644 index 0000000..29a3a50 --- /dev/null +++ b/TDDE43/labb2/.gitignore @@ -0,0 +1,43 @@ +# 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 diff --git a/TDDE43/labb2/.metadata b/TDDE43/labb2/.metadata new file mode 100644 index 0000000..2d1be89 --- /dev/null +++ b/TDDE43/labb2/.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: "2663184aa79047d0a33a14a3b607954f8fdd8730" + channel: "stable" + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730 + base_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730 + - platform: android + create_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730 + base_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730 + - platform: ios + create_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730 + base_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730 + - platform: linux + create_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730 + base_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730 + - platform: macos + create_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730 + base_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730 + - platform: web + create_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730 + base_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730 + - platform: windows + create_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730 + base_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730 + + # 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/TDDE43/labb2/README.md b/TDDE43/labb2/README.md new file mode 100644 index 0000000..b341d02 --- /dev/null +++ b/TDDE43/labb2/README.md @@ -0,0 +1,16 @@ +# labb2 + +A new Flutter project. + +## Getting Started + +This project is a starting point for a Flutter application. + +A few resources to get you started if this is your first Flutter project: + +- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) +- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) + +For help getting started with Flutter development, view the +[online documentation](https://docs.flutter.dev/), which offers tutorials, +samples, guidance on mobile development, and a full API reference. diff --git a/TDDE43/labb2/analysis_options.yaml b/TDDE43/labb2/analysis_options.yaml new file mode 100644 index 0000000..0d29021 --- /dev/null +++ b/TDDE43/labb2/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/TDDE43/labb2/android/.gitignore b/TDDE43/labb2/android/.gitignore new file mode 100644 index 0000000..55afd91 --- /dev/null +++ b/TDDE43/labb2/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/to/reference-keystore +key.properties +**/*.keystore +**/*.jks diff --git a/TDDE43/labb2/android/app/build.gradle b/TDDE43/labb2/android/app/build.gradle new file mode 100644 index 0000000..83b112c --- /dev/null +++ b/TDDE43/labb2/android/app/build.gradle @@ -0,0 +1,44 @@ +plugins { + id "com.android.application" + id "kotlin-android" + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id "dev.flutter.flutter-gradle-plugin" +} + +android { + namespace = "com.example.labb2" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8 + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.labb2" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + 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 = "../.." +} diff --git a/TDDE43/labb2/android/app/src/debug/AndroidManifest.xml b/TDDE43/labb2/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000..399f698 --- /dev/null +++ b/TDDE43/labb2/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ +<manifest xmlns:android="http://schemas.android.com/apk/res/android"> + <!-- The INTERNET permission is required for development. Specifically, + the Flutter tool needs it to communicate with the running application + to allow setting breakpoints, to provide hot reload, etc. + --> + <uses-permission android:name="android.permission.INTERNET"/> +</manifest> diff --git a/TDDE43/labb2/android/app/src/main/AndroidManifest.xml b/TDDE43/labb2/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..d64fdf5 --- /dev/null +++ b/TDDE43/labb2/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,45 @@ +<manifest xmlns:android="http://schemas.android.com/apk/res/android"> + <application + android:label="labb2" + android:name="${applicationName}" + android:icon="@mipmap/ic_launcher"> + <activity + android:name=".MainActivity" + android:exported="true" + android:launchMode="singleTop" + android:taskAffinity="" + android:theme="@style/LaunchTheme" + android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" + android:hardwareAccelerated="true" + android:windowSoftInputMode="adjustResize"> + <!-- Specifies an Android theme to apply to this Activity as soon as + the Android process has started. This theme is visible to the user + while the Flutter UI initializes. After that, this theme continues + to determine the Window background behind the Flutter UI. --> + <meta-data + android:name="io.flutter.embedding.android.NormalTheme" + android:resource="@style/NormalTheme" + /> + <intent-filter> + <action android:name="android.intent.action.MAIN"/> + <category android:name="android.intent.category.LAUNCHER"/> + </intent-filter> + </activity> + <!-- Don't delete the meta-data below. + This is used by the Flutter tool to generate GeneratedPluginRegistrant.java --> + <meta-data + android:name="flutterEmbedding" + android:value="2" /> + </application> + <!-- Required to query activities that can process text, see: + https://developer.android.com/training/package-visibility and + https://developer.android.com/reference/android/content/Intent#ACTION_PROCESS_TEXT. + + In particular, this is used by the Flutter engine in io.flutter.plugin.text.ProcessTextPlugin. --> + <queries> + <intent> + <action android:name="android.intent.action.PROCESS_TEXT"/> + <data android:mimeType="text/plain"/> + </intent> + </queries> +</manifest> diff --git a/TDDE43/labb2/android/app/src/main/kotlin/com/example/labb2/MainActivity.kt b/TDDE43/labb2/android/app/src/main/kotlin/com/example/labb2/MainActivity.kt new file mode 100644 index 0000000..f09178a --- /dev/null +++ b/TDDE43/labb2/android/app/src/main/kotlin/com/example/labb2/MainActivity.kt @@ -0,0 +1,5 @@ +package com.example.labb2 + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() diff --git a/TDDE43/labb2/android/app/src/main/res/drawable-v21/launch_background.xml b/TDDE43/labb2/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 0000000..f74085f --- /dev/null +++ b/TDDE43/labb2/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Modify this file to customize your launch splash screen --> +<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:drawable="?android:colorBackground" /> + + <!-- You can insert your own image assets here --> + <!-- <item> + <bitmap + android:gravity="center" + android:src="@mipmap/launch_image" /> + </item> --> +</layer-list> diff --git a/TDDE43/labb2/android/app/src/main/res/drawable/launch_background.xml b/TDDE43/labb2/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 0000000..304732f --- /dev/null +++ b/TDDE43/labb2/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Modify this file to customize your launch splash screen --> +<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:drawable="@android:color/white" /> + + <!-- You can insert your own image assets here --> + <!-- <item> + <bitmap + android:gravity="center" + android:src="@mipmap/launch_image" /> + </item> --> +</layer-list> diff --git a/TDDE43/labb2/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/TDDE43/labb2/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..db77bb4b7b0906d62b1847e87f15cdcacf6a4f29 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0y~yVDJE84rT@hh9qO>QU(SF$r9IylHmNblJdl&R0hYC z{G?O`&)mfH)S%SFl*+=BsWuD@4C?}XLR=Xb7#RJ!7{h04Zu=H;^aq4w44VZJaXaum z<miu(qdyqKW-^A)mMB{aQDD37F@sSggGCCXwl||eFr!@_qg_6udp)CP6QfT%$Uwht zM!z1$z=@1OlNf_0GX_s#44uvxI)gE62H0?r`ApX7Ob!K1&SgxV4a~l6%>G@>0o`I5 z6U6gpN>(hBs@ovlyiK}omrVN}&28UY_JdsVcA=Cl0|SF_NswPKgMfg5KtMnO2sE4r zf%}pIPku2lFue41aSVw#{PxUsz9t6&hrp0GdlTMw^~h@f`fs1s!olsWbZ#C0v7PJ9 zExVjNeb(Ol`RU07XFf|X@qSK7qke0_C&kUH>MnD(8u-m<DX!pr&7!*J@$?w=?>i5B zt(&|xZ@%@sBNk%nt_5+E&U1QAlyT>>sMB2Zd5T5*R3&Sld5=98o%0qdm+@@-JjKB8 z(xcUiGOB?O=e)LCdt!o~wXBiQlFwyn4J<FWNWSJ4nBMpL;FUI(rH3~e&pDIh;bAoU ztzZ2bW)81qVfkN|u{A76$?AP4bE6=r(zGc-Lo<wJg7Q&smA|XLthZ(8RZ(WK&f9r_ Qfq{X+)78&qol`;+05GG~Q2+n{ literal 0 HcmV?d00001 diff --git a/TDDE43/labb2/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/TDDE43/labb2/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..17987b79bb8a35cc66c3c1fd44f5a5526c1b78be GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4rT@hhJ-tuTNxM_BuiW)N`mv#O3D+9QW+dm z@{>{(JaZG%Q-e|yQz{EjrrIztFmwg@gt#&=FffMC4mtWmbKAF&qdyqKXG0ipk&vT5 zAmZ%d{SXF=bCKq@Z-GZZ;tV#~j83JDzFmxd-Hahq8AGNqhE8V;o5>h9i!po_WB6=l zU2kT?Kvt(bR^JA;;7+;DUGlvL6sMk6nsrHO&Q;BA-wby`jSBSdXJueu5G@Jv3uX`y zP*5;1FzBB@fBpXR=g+?ff&5MV!VC-yOFdm2Lp+YZy>e2h$w0vMVh8iNMNLhM)++IJ z{QqCg*LgRGXKpKZaOLSMJFo8MNc{figWv3mbJp+w<kyyaNLPH_7hlO)dzZ0qy_k(Z z>-BoBm(|-hT|4dcbJ2lEyX!??Y`jpZ81*D{;rF6b`?;0>>pbJRKPRw2)?8wK8GH9> zL)n=k&vkA#ITl(SS<U;QyJmmHI>sBW`??>AG{pM|AK2Jc#t<e_zlr_!#IRdOVook+ QU|?YIboFyt=akR{0OC)($p8QV literal 0 HcmV?d00001 diff --git a/TDDE43/labb2/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/TDDE43/labb2/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..09d4391482be68e9e4a07fab769b5de337d16eb1 GIT binary patch literal 721 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4rT@hhO2JvAPLD5*NBqf{Irtt#G+IN$CUh} zR0Yr6#Prml)Wnp^!jq{s3=9n40(?ST85kHsj{eZx_Kne_fiZlx=C*GkM}LGI{lOSM zJLKpO-pGCkS99Ap_k-UdY{uXzjN!Aza;8BPGwAv==mjz8hcFm~FxcfWYPvCMc`=&B zF`6eaTBI;qXENFsFgg@5I+ifHRx`TQGP>6>y4N#$)H8ZEGkUc!`m{6pbTImMF#2{f z`gJk-_b~?aGX_m$44TXsJQ-wH$W+GA>5O4B7{g{VhRtFOpT!tHo5?tW$tsn}K99+{ zjLE&4*|Uz>tC88eNi3sZJbQ{n(LBkD<x;ilq#8F%H*b?}-67q!OSbEP=C*Gx`$4`a z+^}{50|SFtNswPKgMfm8fq_9lLP9}7!~FU4&%XzO-7Kks3=E9^o-U3d8Ta1ayzY0{ zL7?@agT}(|SylOrK1ofFmnI8kJ@^~XcG_jy^?RKu*=(E^&#S)H&w8yZvf=)&eKY-w zm|raJxBG=m{J;Op`S6opmcNp}?EbiJ|LylI8@^a`_|yg^ycT9kzOS+28!uC_y=una zz_vQ43%``t^0)0%Q~9Oqb>d1t=Sn-plsE283-d*czTa-zm@iQD#kujt@|Kvt4hp|H z71QJA-@DE-vCc=}m3vdfeqD}l&W>B;IduNM%M_}RPx;yPVrk2E_T?&?d+vqXsA}xF zGk52_Ny78;-$vOoENNLjTll#WOG?YLuZ?eO;uVxk)@?h*_~6>qo(~l}_f@BaD>p=c zm>y<U&gZXf>aWRpaQm|`^KGX?!;c=*_;Kycp<DlUdiD5zSo`y6a;n5+gROg>Yksb1 rdBk${xlomwC<})`ozH<A-&hmd*~)g$ZRcZPU|{fc^>bP0l+XkKcl<5t literal 0 HcmV?d00001 diff --git a/TDDE43/labb2/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/TDDE43/labb2/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..d5f1c8d34e7a88e3f88bea192c3a370d44689c3c GIT binary patch literal 1031 zcmeAS@N?(olHy`uVBq!ia0y~yV3+{H9Lx+13>Rhybuln7NS3%plmzFem6RtIr7}3C z<R_&nc;+Uirv{}arc@T5OtoQPU<?lM32|j$V9?z5E#&AA2-4j4jWK94WB6=Nj{=Ce zWWgfMZQrc+d=EMLgF(ZcLED!>$Dctjh(SM?K|h4SAdJB{hQT_6!9JhSFr3jep3y9U z(L9OKDxJ|flhG!d(I$t{HiywRm(ebd(Y}z;v6#`Zgwd&#(Yb=rrHawDn$fL>(XE!z zt&Y*Xj?trm(W8;kvysuWiP5u}(X)lotC`WOh0&*-(Wisaw}a8QlhLo6(XWTmzlYJk zmocD^F|eO8Z~|lCM8?2Lj6o9_gC>F8A3T{ccnV|4RK}2LjG@yRLuW9C&0q|h$rv_^ zF?<$d_-uBwU=HgjPRC?Uw`?x2A}+rQ?!a2^kVfvX7VhwN?#NE=s4niP9-inPl?69d z7T#1{bVqf`J=LWT)RsR~Tk%+J<rB4)Pt{gEQ(OH^ZS`|?5PG4x?VBYylx82DV9LP2 zz+V#N7tA0a;E>QT9|ZQFKYxDR#LKT37?|`uT^vIyZoR#b9vmDf()v(?iz7_L)oF78 zkJJ<)r<N9%0|$JqH#XSb$PoJRf4+y|q?Y3Mca3Ad+3~&pyDx2Cq@BDI+qFWEwajuA z4;tBtBK{elKPpyaGw=12pQ;rPEUWotk33QAzG34cxVT*<>8pUt8M$!5-N#*39u$gn zR>-(G$wg0`aolam=a?PG9$oC(GH>-!X0d*^l*gJvuFJp95x7~EvFLL3EEhhxt`pq; z%_lBC*86lUSiR`uj?O)w{s`}^n&Wz}@?RH+ochG+^SU~oY!t72t=ZWjXFc({Ty9i< zoXX3Kohi2Ju9xPeP296QFr{gETuR&Xh?K77YDUL{MQ1+I?2fS6ciP3jaR24wmqlki zKfgU-wdbO}>o1>vX;$n~9ltDoY4ItEi|?MFbkSNqMRU<y|MTK&bIwUz{B}H{#59<7 zroydX0u?)xQa9b?@`(FVovb6{AN5koBkD_bt%XSJD)y6Ib^Gc?=5*_tH>kMU-}~Bs z)+NdN<kpgB5-RGy{$2ZDVI$J1wo0M!;<MSmnHT$~D_#8YI&}3vMa4kH`pxATB{f-P z3t7BUL!FrxIsH2}cOScQ<H?&pk3<Q(JB56@^Xi?n44==@ATROFE8e_(_07IUFuZJI zm)5-7wuw(g7O!}-(>zgg`VE)XKX=tVT|2z5{L4{YJjHWS*rIm-E6Ws`IFvdRnm87H fR&jd1QhDAN-h`R^uRUjAU|{fc^>bP0l+XkKAv&s= literal 0 HcmV?d00001 diff --git a/TDDE43/labb2/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/TDDE43/labb2/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4d6372eebdb28e45604e46eeda8dd24651419bc0 GIT binary patch literal 1443 zcmeAS@N?(olHy`uVBq!ia0y~yU^oE69Lx+145>_WOc@v$BuiW)N`mv#O3D+9QW+dm z@{>{(JaZG%Q-e|yQz{EjrrIztFy0FA32|j$U<f(-Bjo50M(1+Iz=@1uvlzo?Yi|1% za`cB-@^pxl=C*H)-ffKD?Tn$*8N+9b<xJDu_DyFyNDYIg2ZN3ugN{FgZUBQ`AcI~I zgMKiBeh7m>7=vLLgJC#>aTJ4T9D`W`gLwjjbtZ#N4x^eAqnb0LmM5cOIHO54qe%>- zNi3sjJfm3xqeU{KMGB*38lzP@qg4i@bta=t7NczrqirsuT`r?t9;018qkTT3eF39G z5u;-<qhkr9Qz@fU8KX-jqe~T|YZaqwHKSV%qkA2rdp)B^1EWVHqh}MNXEUQ$Gox1v zqgN}VcMGF;E7Uta?TkJhj6R)=z8#Fdos7O+jDB5=e%*|IJ&gW6jQ+ih0ey@C{fq$< z7z6tm11EsOCukyL&?Ls-NsPgh8H1-V22W)SnZg({l`&)*W9T$c_=L`244ugsHiI#2 zCO9xb;mM@u&tw?JWD?C}p1@?4!eo=dWS7n4kjLa$$mCSa<Xp<+QpV(3!Q@uS<W|Mx zUL}^%FP1q$Ja?LS!EA}*`I2ReB`cRpR<Dw(T`N_;L8@Vsbki2;=55j~+ofA~NVo2k zZrdf(wp+gY03=>~4uK+6lW`UY0|SF-NswPKgMfko7&thbzyBTz-gcI+Wnf^o^K@|x zskrs_3VX0{ph#Pyi^G})N%|2R%{L?-ZV(U%Y+lqcfu(WAio}U)uIrV(+3WUaecD+A zmQ6SJem|G<Y|hO0zZt9Nm6w%qa~bfQe(k0G@73BxB6U9=w#!qC$o$Qnp1E#9Tm0{Z zo0lKtxBv5@_+$3{MUSrUbvwSkynj;sb0yvVzkIXmuCD&_C#ziZSE%0QFQ@M>do_Kp z-*x@+`J3Y19B#kQTkx(t_`-K<>p6dn#rh_GuokuWC9d+nXX1zFdIcZVw{qEhc&=6O z^|eUFqwV?=KCBk6c(Pr4!l%_@70=G=P581}wBp75D22D-njfy%?{qk*AOB#Z{bq-g z`q2+|)-Q6ns2@Io{eMN{rubzF`u|EA+wSjG@UL6#aQc1N1oQe;4(H#;OmN?SS>~@F ztIeOC+&g|0i+=ccTfE@YZP5>((!~ot`|Cb<K0oHb#rcs3F53qlxN0AF;QD;M2XD4> zb^PFdrt<Y$wHojKchWz;7Uc;(Z<?=v>-VXypJEaJ95?T2$v)Ws{O#V4Ednvz`|Pb} zf4VOe!@bWom-}e`tT2YtP3!%mny<H?DPcI=q~9OCYq6V>=z+}-K6mV2ZEt5Icwo(g z%Zr!wX>UAuh9QhqUj7<;)5IBxDQpH>KRz6|eoM6P*rQ_`EdPlXYgN?$U-3W2|NYf9 z3~H?J-^u1!lq%j3KgpL6_~F~TxcJXA&m~w0?N0Rh)m167XXobE9?sqiHmlnth&$|i z@b&H6->;<n*{pUSW)9rV@Q8K2S^mw~*V#FiwHvLk$nTx@ub=DSvV@Y$lX9=NuW9Hz zz0mHpeOA|-i@FkPqqY>epMCgPeb()B(Tr|RH~O+1PwlVxdT!ROU2OGQ3PvhLeQAwP z<HL5Y`*mPrRekss5x>O|AMWqpQ}lM;-?Ix_3Z(ZoZK*%HiZ|EUDeVf^rGH<21r@EM zSf|zZ`p5aNP1ut4@|gFs0GYW>Kcl68^QPJ_Y<l^5%bymmu2W$0H0$RkA&~_PtQroC lTmcPCQ07b~p2b`1KQB5V5V4<OEdv7sgQu&X%Q~loCIB3;a@_y` literal 0 HcmV?d00001 diff --git a/TDDE43/labb2/android/app/src/main/res/values-night/styles.xml b/TDDE43/labb2/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 0000000..06952be --- /dev/null +++ b/TDDE43/labb2/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on --> + <style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar"> + <!-- Show a splash screen on the activity. Automatically removed when + the Flutter engine draws its first frame --> + <item name="android:windowBackground">@drawable/launch_background</item> + </style> + <!-- Theme applied to the Android Window as soon as the process has started. + This theme determines the color of the Android Window while your + Flutter UI initializes, as well as behind your Flutter UI while its + running. + + This Theme is only used starting with V2 of Flutter's Android embedding. --> + <style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar"> + <item name="android:windowBackground">?android:colorBackground</item> + </style> +</resources> diff --git a/TDDE43/labb2/android/app/src/main/res/values/styles.xml b/TDDE43/labb2/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..cb1ef88 --- /dev/null +++ b/TDDE43/labb2/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off --> + <style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar"> + <!-- Show a splash screen on the activity. Automatically removed when + the Flutter engine draws its first frame --> + <item name="android:windowBackground">@drawable/launch_background</item> + </style> + <!-- Theme applied to the Android Window as soon as the process has started. + This theme determines the color of the Android Window while your + Flutter UI initializes, as well as behind your Flutter UI while its + running. + + This Theme is only used starting with V2 of Flutter's Android embedding. --> + <style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar"> + <item name="android:windowBackground">?android:colorBackground</item> + </style> +</resources> diff --git a/TDDE43/labb2/android/app/src/profile/AndroidManifest.xml b/TDDE43/labb2/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 0000000..399f698 --- /dev/null +++ b/TDDE43/labb2/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ +<manifest xmlns:android="http://schemas.android.com/apk/res/android"> + <!-- The INTERNET permission is required for development. Specifically, + the Flutter tool needs it to communicate with the running application + to allow setting breakpoints, to provide hot reload, etc. + --> + <uses-permission android:name="android.permission.INTERNET"/> +</manifest> diff --git a/TDDE43/labb2/android/build.gradle b/TDDE43/labb2/android/build.gradle new file mode 100644 index 0000000..d2ffbff --- /dev/null +++ b/TDDE43/labb2/android/build.gradle @@ -0,0 +1,18 @@ +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/TDDE43/labb2/android/gradle.properties b/TDDE43/labb2/android/gradle.properties new file mode 100644 index 0000000..2597170 --- /dev/null +++ b/TDDE43/labb2/android/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +android.useAndroidX=true +android.enableJetifier=true diff --git a/TDDE43/labb2/android/gradle/wrapper/gradle-wrapper.properties b/TDDE43/labb2/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..7bb2df6 --- /dev/null +++ b/TDDE43/labb2/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-8.3-all.zip diff --git a/TDDE43/labb2/android/settings.gradle b/TDDE43/labb2/android/settings.gradle new file mode 100644 index 0000000..b9e43bd --- /dev/null +++ b/TDDE43/labb2/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 + }() + + includeBuild("$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 "8.1.0" apply false + id "org.jetbrains.kotlin.android" version "1.8.22" apply false +} + +include ":app" diff --git a/TDDE43/labb2/ios/.gitignore b/TDDE43/labb2/ios/.gitignore new file mode 100644 index 0000000..7a7f987 --- /dev/null +++ b/TDDE43/labb2/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/TDDE43/labb2/ios/Flutter/AppFrameworkInfo.plist b/TDDE43/labb2/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 0000000..7c56964 --- /dev/null +++ b/TDDE43/labb2/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>CFBundleDevelopmentRegion</key> + <string>en</string> + <key>CFBundleExecutable</key> + <string>App</string> + <key>CFBundleIdentifier</key> + <string>io.flutter.flutter.app</string> + <key>CFBundleInfoDictionaryVersion</key> + <string>6.0</string> + <key>CFBundleName</key> + <string>App</string> + <key>CFBundlePackageType</key> + <string>FMWK</string> + <key>CFBundleShortVersionString</key> + <string>1.0</string> + <key>CFBundleSignature</key> + <string>????</string> + <key>CFBundleVersion</key> + <string>1.0</string> + <key>MinimumOSVersion</key> + <string>12.0</string> +</dict> +</plist> diff --git a/TDDE43/labb2/ios/Flutter/Debug.xcconfig b/TDDE43/labb2/ios/Flutter/Debug.xcconfig new file mode 100644 index 0000000..592ceee --- /dev/null +++ b/TDDE43/labb2/ios/Flutter/Debug.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/TDDE43/labb2/ios/Flutter/Release.xcconfig b/TDDE43/labb2/ios/Flutter/Release.xcconfig new file mode 100644 index 0000000..592ceee --- /dev/null +++ b/TDDE43/labb2/ios/Flutter/Release.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/TDDE43/labb2/ios/Runner.xcodeproj/project.pbxproj b/TDDE43/labb2/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..804b58d --- /dev/null +++ b/TDDE43/labb2/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,616 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; + 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 */; }; +/* 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 = "<group>"; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = "<group>"; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; }; + 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 = "<group>"; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = "<group>"; + }; + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = "<group>"; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + 331C8082294A63A400263BE5 /* RunnerTests */, + ); + sourceTree = "<group>"; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = "<group>"; + }; + 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 = "<group>"; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C807D294A63A400263BE5 /* Sources */, + 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 = 1510; + 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 = "<group>"; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = "<group>"; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + 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; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + 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 = 12.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.labb2; + 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; + 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.labb2.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; + 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.labb2.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; + 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.labb2.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; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + 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; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + 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 = 12.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; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + 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; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + 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 = 12.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.labb2; + 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.labb2; + 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/TDDE43/labb2/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/TDDE43/labb2/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/TDDE43/labb2/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Workspace + version = "1.0"> + <FileRef + location = "self:"> + </FileRef> +</Workspace> diff --git a/TDDE43/labb2/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/TDDE43/labb2/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/TDDE43/labb2/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>IDEDidComputeMac32BitWarning</key> + <true/> +</dict> +</plist> diff --git a/TDDE43/labb2/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/TDDE43/labb2/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/TDDE43/labb2/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>PreviewsEnabled</key> + <false/> +</dict> +</plist> diff --git a/TDDE43/labb2/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/TDDE43/labb2/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000..8e3ca5d --- /dev/null +++ b/TDDE43/labb2/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,98 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Scheme + LastUpgradeVersion = "1510" + version = "1.3"> + <BuildAction + parallelizeBuildables = "YES" + buildImplicitDependencies = "YES"> + <BuildActionEntries> + <BuildActionEntry + buildForTesting = "YES" + buildForRunning = "YES" + buildForProfiling = "YES" + buildForArchiving = "YES" + buildForAnalyzing = "YES"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "97C146ED1CF9000F007C117D" + BuildableName = "Runner.app" + BlueprintName = "Runner" + ReferencedContainer = "container:Runner.xcodeproj"> + </BuildableReference> + </BuildActionEntry> + </BuildActionEntries> + </BuildAction> + <TestAction + buildConfiguration = "Debug" + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + shouldUseLaunchSchemeArgsEnv = "YES"> + <MacroExpansion> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "97C146ED1CF9000F007C117D" + BuildableName = "Runner.app" + BlueprintName = "Runner" + ReferencedContainer = "container:Runner.xcodeproj"> + </BuildableReference> + </MacroExpansion> + <Testables> + <TestableReference + skipped = "NO" + parallelizable = "YES"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "331C8080294A63A400263BE5" + BuildableName = "RunnerTests.xctest" + BlueprintName = "RunnerTests" + ReferencedContainer = "container:Runner.xcodeproj"> + </BuildableReference> + </TestableReference> + </Testables> + </TestAction> + <LaunchAction + buildConfiguration = "Debug" + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + launchStyle = "0" + useCustomWorkingDirectory = "NO" + ignoresPersistentStateOnLaunch = "NO" + debugDocumentVersioning = "YES" + debugServiceExtension = "internal" + allowLocationSimulation = "YES"> + <BuildableProductRunnable + runnableDebuggingMode = "0"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "97C146ED1CF9000F007C117D" + BuildableName = "Runner.app" + BlueprintName = "Runner" + ReferencedContainer = "container:Runner.xcodeproj"> + </BuildableReference> + </BuildableProductRunnable> + </LaunchAction> + <ProfileAction + buildConfiguration = "Profile" + shouldUseLaunchSchemeArgsEnv = "YES" + savedToolIdentifier = "" + useCustomWorkingDirectory = "NO" + debugDocumentVersioning = "YES"> + <BuildableProductRunnable + runnableDebuggingMode = "0"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "97C146ED1CF9000F007C117D" + BuildableName = "Runner.app" + BlueprintName = "Runner" + ReferencedContainer = "container:Runner.xcodeproj"> + </BuildableReference> + </BuildableProductRunnable> + </ProfileAction> + <AnalyzeAction + buildConfiguration = "Debug"> + </AnalyzeAction> + <ArchiveAction + buildConfiguration = "Release" + revealArchiveInOrganizer = "YES"> + </ArchiveAction> +</Scheme> diff --git a/TDDE43/labb2/ios/Runner.xcworkspace/contents.xcworkspacedata b/TDDE43/labb2/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..1d526a1 --- /dev/null +++ b/TDDE43/labb2/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Workspace + version = "1.0"> + <FileRef + location = "group:Runner.xcodeproj"> + </FileRef> +</Workspace> diff --git a/TDDE43/labb2/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/TDDE43/labb2/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/TDDE43/labb2/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>IDEDidComputeMac32BitWarning</key> + <true/> +</dict> +</plist> diff --git a/TDDE43/labb2/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/TDDE43/labb2/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/TDDE43/labb2/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>PreviewsEnabled</key> + <false/> +</dict> +</plist> diff --git a/TDDE43/labb2/ios/Runner/AppDelegate.swift b/TDDE43/labb2/ios/Runner/AppDelegate.swift new file mode 100644 index 0000000..6266644 --- /dev/null +++ b/TDDE43/labb2/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import Flutter +import UIKit + +@main +@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/TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..d36b1fa --- /dev/null +++ b/TDDE43/labb2/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/TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..dc9ada4725e9b0ddb1deab583e5b5102493aa332 GIT binary patch literal 10932 zcmeAS@N?(olHy`uVBq!ia0y~yU||4Z4kiW$h7a|7u7G&yj=qiz3>*8o|0J?9Ffb@2 zdj$D1FjT2AFf_C<F#KX*U}$*3z))(y!0;-8fx&791A}<MoLzx73=9lxN#5=*4F5rJ z!QSPQ85lHAd%8G=RNQ)dH##TfyW{bX|NqaKx$%1T`@Fo}Tey{M6tuKdRF>EYZQ<YZ z;f!?94flJeT}8E6TbMegZ7Y#hFo}GAOGP>`<X6Ljw{6x7r(C#Ww*9P_^-`6PC_%Hh z>Nj$7&&r-9tv@bzJN?=JpBk$!-MM9JoV9=dW8?pwu7NBJ3<|t6y+Q6`U|>jKAb}wP z@+Bh!0|T)Pl1v9FZXm^Uuwph+JwYdHhz%mJCqRlp?qVRtH*lRKG3a0ov7XqFZ91Ky zp=-yFYtOcR=f2*kwYysJ-=qE$>O2e#H@0)<=fu^epDtZ+>1(~szd!s}W7(I@b#Gt@ z_`hNGum4BdrH|jWKFYwr@U{OJJ2L~r75i86JPZs0|5wx-fT#uk4l*z}{A~tHe&q*C zUa?1)JdVo%hrf%7G5};X+;p%dP!~WAfH@DY2HgcH20$fO)E@x39qa;_0Z{*8dI6gO zP|q*^$H)u`ARb5nfkOsr2~-V%00Nud|BD^f0I2gAnF)t5*Z^4YzmkW#0NH@m^;hf@ z7#LR62mEhfWLWUe@ozIDL&Gojul#Hb46o#`*h@ep6BrPZ?thuVl3)43l28LcNr8uf z0Tk8-AP<AXG2lO5pMuqZA`2;~zOMfl2y+WF8^kRV5Vt@bn!vDw1;cG%Jq^E5+y-(# zR1eg1*bM|r2L1=9AW&3e38!XoEMR&L77NHee-#f3AT+nEzzAqOZgGSeuo{#YL5Z3H z6x%3Cia57`Ll|TLII>>Jf8_@U$Q662pTQK=I(DcUXoSL31d2n^4PXF8k^5g}2}n#O zpu`j&)8Q^a7{CB^9w^!x7{O_hfeoDOP+WlOyukmM27tmE%>aVV1A77H0;mBC{((&g z<q9<ap_vW}16b%07eHtRU~wLn0BZOZ{(nV112Y3CTQTxL^1lHj&mDl|IV_U>zu3W& zujCJa%4VnmxWgLNEyxZH{LcWAbpOi?j%Kh=U&a4j{Euk2@Pi!z%41-MuBc}K`C{=u zMgt-}12-TZlH?F>0Xy`HJp&sg;YdId4#>Ui5QoZxLljif!BQ1S(*5shNQff41zheQ zfCMZ9GXtpHXW)T^I&O!qsE69~l^@|2a1w&LB>|E}8W_Qa7aoUxT@MLSaJazS0u3}Q zZo%$Qc)+3=04fa7JcHc;s82zXh$MtP+CXafU&&(+DrCu5@?fh;3u|Npz&gQR06A~* zKSq#b|1Wm1)x@{}YQO?WlEX9r6wNE@84OTj8)OMy{~@^m$pBCuV_<{CwggJD#GMoZ z|1*Fj-TyL!)5%wUkOAO4b^ww^7?{CzECUa=WSOw-N4@S9`xXCJ?f7%<+SBs=@2vt- zxhsE61-0NHE>jEmFMjVviR_9^kGFp4<TsB2x9mVA%2oR}+y1?`lZ)kos05`r?5r#M ze}VE%!2bkrE?ZqsJPVQ+K+O&iEAT(4sKw4&QUA67S2(x<0cuK;!veLoK+Ow~HIVdz z&I<Uyj`>wQq^0_mAIfToEc~bow_HKezS!z|C@6b_S_oG}E9zH4JiPIMbudKhQr3Hu zLDiN7!wcOHc_9!-mo|Q12x&>(;@-o2)gIIU3rMJVzYyHOY2Z7&n-A1zVrIA^aW5Yl z4kthO1%q`nq_%yZ0nz=!c+YN7wl`o1$Xv&AFC1b~hUtgCAh1%0jg8+YL6q*|eXsOh z31lh{!xia!_8?Oe7#2MIaLy4_Ofxg6wtwdVB}+Dj7nXaXA*MQ9eOS8)((=2-_g(<h zu;5_`sHn&Xm6Zt$4d)K;c7k~GirhVZsO@%pg!c%8QiuUVKwSktsGMtHZ1{J0bw8vH zrX{d`H@Lbwz~I3BNE8x#46Ys5qaa3=D8{8iZECNmy$bFeI4D1w8VdFj!_toHArOUM z7KLA4y%HQ`4681_?tmDd;l5r0<PQl34Uau#kV=S|LAEp87o>}a;fhL}KE(J7Q!181 z{Tcbl6cS<#wVmPaAcf2fA!>2rP=&MN1jC&m!6dT$Iuj%mFU*Z&g?Q7UcGo|cMJ6k> z*Z%`In=}Hi$AC=YVfdo4ZW|~TBp6l%#iT>cT(;v7B)}E~6y`#GxqR0upA*yX-TO6n z`s{Vgpj6?ocGo=5EB}x0+xqcaRAKGn0#k6~Yu44NbN>Fy|GSU30o42qShp@w>uWyq z0#MK5%j(tB!~Wi805|YNU+-EP`rnKJY}V;rNtsvoL$z#K7a9fAQnGgS6u6es*T0s) zwLIQsgwV2UohMw&mvyTr!nIs|ZH3VCdlwTz%YnMLaL$E;bywk>fWvir;hYOc>XyPe z0mtfk;hYP{>q_CAfRnH6*Z$hh2o8d%$iK_s&NN*8f6J@;Y!0B-@r$&t^WiT0y5`^I zRrS&gpa$%Mg;(q0?w_*dm;dU2xeTB-qr)ZJwf}_IK$T6%2wnX@<@J5Gfd8OSQ`osJ z?0@I={k#i6Rj<d24OjR7+Rg}WF{~`v_AC6qS;H@O0|teux5ECv0%>AkV_0(O&a3#p zw;4cfnud^5(SKLhOFMv?B@?{rSJ!{dX9hR5f>suMUH>na0n|8f(2{mQs5%9*8)nuf z#w!RLa~OuM7IsCk*8hU-Sv$)X@2JTAJiUI+x_?*er_Qw%^EWM71xm*Z-~`#o^_fFp z!M~fz=b2VQdO48v%Wwsnc0tNOg)XS`2MwhLSez_?1}MWTc}S2q{5sACPB07pZDa(+ zHp7bg9B_JoDgiao;YxBFO3cAo3StMia|MY<h5%?xGkoobqy>k+$&iQ)_<sW&)eKkc zL5Ts>;{z)J^~^v@z^&^g`(U;Q-2`VxhAZ|fVGfxe0@LUZN(kUyjrvrOH6Sx4gVF=I z$K;vH49?a8|CekU;>Lk`ClJqq8ru-hf?B3v&w|_GV9zozGtB7uKI>@hdXrf8Rc~Hh zU2XsI9QP~v1*@M4F;s60=|3%>dFS_?W7TI5U0u+0?f>hwQ`6=CzPR;kZg0i=^Z%xB zGYR}*VYsoJf9{EC_Lm}7?cVF<`g;G)ZE~A`{q(QP{JDO9xi13`!vVI0Z?Em2e4TLh zT>UTY)A6+jr!pEaFi1B<uKDj>`&E8Z)QL}@=l@;(bp75Zzd-#;-UDy0*Pr+#u=(@+ z-?N{t-~UL9k&U5&_dw3odb>scoTs(Un7jYO)u*S!W3&%2Fl=C)vGCXVw%7LjhTMj2 zAgQlUPp{vV)WFD)z-(~)>-^Rktpd(H&+Y3gf8M+vV-C^s@K^uZU+;4o(sLOg0^5H5 zKWFw;zWw$7dghjbe|6Ff1`G^249iykn}74!y?V2l{|jUOudTPN|9@Z4{`W3zP6-AE zGlt7C{|&SMvm_k<rT<sv02>1j$X~0j|5x5!{ceBE|HK9VqH`b?tf>2&-xK-2Fy-%U z2C<p8ndu>(iOTbF2Sv?Yy#|7c|6d#xQm5|95-;dtQU_K?O8KCUn(*@8oOs61)FF zoxH;D@A~6$zx@B*gDDPO^?#4tr$*!YPZLsw*VjY6(6{2>{e8QNR@OZ8zgPdhp8sq7 z4X6vw{;Ds2dg<_OoA31v-(kjDO!`&7WaqYv)$i=rw^pq9n$HZ0lZ997U!R;G^?T?4 zxWDP`k^jv=Bk4C7WSsu$m(TmXp8wwO{>O8E2K&6(KNad1_VE96pa1(D^?c_1!*!pI zLqmso-T$lR;q&71*5w{q6Y@WD?f!p{1OB!<uYkE%E&6}{nwY4(dv`h_ZJ%ttw{ZU2 z=zn{w|KGf@_rFEj-}kQ%DnNav7W)77(qHShzP6XHcxTUd_qYDBmH#<6FfuTM65af- z^&9^_@sG25zd!c>+T(S7&vwGCi2d&$pR+Fa$R4wZ|9hqXUj@};;Q0O)_J95M*YzK| z>vn(t_dWLiQO1AYw?hq_^Q-<<(*5nVy(|7l9IS=~Ku_d<?e*(zz6Lzs^S|nU;rzp2 z<$u4jm-)854jNB4cF)#czt-k&!28?#++@DR+kM<zdb)no_kZet5+*={>h`t&S@D0j z_x(Qe+x}DZzSr_jJ%7#rJ`Ok~?*8xfCaC=(f49&7qgnf8``_rFxA#42y!#vKvIhmP z{@cgL*1qCCJNs$%|DR^x|DFCSzibgKN+nkOXP=#Y_MotR^!I<!(h5AbKQDLvtG)LB zp`CmRBzhP81L;5b?CiVB|8u{{|5&yD;II6@x3lK{Ook{paPDh;>erL@*`R2%`w_c8 za@%oX`|d@L_Gdw2qe12M|J&hV^Zz(~PTTxGc>l)gd-Zm!{vBRe^XmHn^%jUn9jd<G z|92&S?fX6d_c7O>n*W!#de#3`b6Bz<mP{!6yMNQKC(LKJe!W!uf9pBj|BcoE?>5_& z+kD*ossArD-7bmxe?2bp?<3}=!uFr<iT_Po+Wv3%{;9?FUVeYJK*DN4=zsn7c0V0H zr~N!~K5F+rce&rfUf=)mp9uW_0h&z{(q7j;J;~1I|EDMNcl>X@-{-CP|MT4Wy*_R~ zG=~~2`ggx7^J#beF3XyG^=4mU_wP;qcUaf%>+ZXY{|En=$N=?t<l6sx{s-^>`*Q#9 zU-l9128z%upSJj4d`#sdf3NTVvX>_R`+Ui9{?hfoW~KZM|E>}M)jM<b|JC~IY(5^J z{aU*A{<o{v@9p{S{nnTN9lY*;G+RyJnPZ}xAzqqs?^k`|)6U=K)#?A9)Uy9;$r1m0 z|N4*47;~smFW3A({{DVU{<imjkMAjeQvdT<{m+y09Y0P`bND)~6%zgjLazRweLt%5 z&*#~%&qma}S^oP-{k8u$?|<6+Kk3EJ|Bt2}w3}@&3C%$>__Ejj+JAH9{~PiD-zxua zpa19O>3{z=>2EvxSJH~}3M4-#aJ~ND`#+-gjnng!^KFh?D*sz%|3liUpP_ZJ)ze~g zEkjsntcv-6e!X4Y!tYP~Wq!?DZ}25I{_d~*|GS$jESJ56hll3M|JUco*S;y9Z9aSB z?<4hLR?qg|`Fnfr&)_3(Ki8ViwcmW4<tC)~3R(N_f9=<e_P1j4uhy^qzViN>FB9(v z++%qBKV3v|?qmmO_S1^_zrMEk>&5fm=Kd7k?f&n3{VVe+@BWHERj)rbi;+D+3KljF zrLXFZ-#t6_KX2ZjOxu&eb@QHID}85u2wbQ?5P0?fYJGI=7vtH|v-kS{{U-a}^2?F> zpReA%`ZNEnACoQ{`{9oLSHClZ3+n?aum4N0?yp()`A+@!?dSIX{}wqva^*ko{@+KE zLjLxjsfDJHzCHie*Cc<P=%1fgGXJ-{#cSiff1D2Uuc<S3IiLCasNsJVG;Slm{F_=I zTls|F+}teL`fvOEKPSDG|2-1u|NBVcr0W0bjprWpi$D$KTlz1)GVkj{|J+=YWSP=i z{yMc+ub&XMufG2+v}f+i%=xg~R`BENfBn_`^;y}q#>e)QJbJ$3UH;KJnP2Pff0}7u z&HbyzpJ^*3?O7c8RsVB-_;mZ7TQB}ycfT?E-`&S{&j0uRf5+NmZTHi-WJ5nZy!*EN z`=7A-`<?o0mLJr=$^Mc|x_|k<tzpZeD_?fMFI8{61&KYGqQCpU_^%ePug^~2{CUU! z0~7yme1BkmK-HV&;s33t{M9Y~zryEocOEmi_AyxatNx?B_1E}+SMuN7{Vo4z-Tfe| z?|%Pvrq|Zr3IC{a!6Ft`Q5mfK^}qdU_x|fE|DT&|-#q^p@80(MU0>th%(#1WM`xXd zdgC!oUuZ?pz`5h&q5JFYe(a7u3sM~aL$rE7Z~gh}9r^!e9m)OIY{9vuyyBt`G(+4- z{=5J0h1%$|XTNR!cXP#KyVLD;?;d6EYin~b6#25d`*){L!_8OFrbENu>;J=+|Ni_g z{Et}TkI(xOudvr2U-Qk`iqqs=!FOm8^Je|O-P`|czNTL5{rvCr{ZF*NU9Z2-UT-b` zLD#B2C0@Oe@6W;5IV`tc|9cm?bS2ao5}W^Rp2%L?b}8|H;fr*J!a4iozpGp@l>ggl z*mAC4->IwJ0-8nMto?WT{NMDw&;La~y#Jl2{-WKr;s^YE(`pSvz6t-$$Uoy0#%<{T zY8tcwap2$U`WFZ0`+fWF_owG}{pIkVpZ6WEFZ*r3^Q?W|^B4V!r=8=tBXwQ=yQe{- zWyADe{k8IQWD76VZ+v|7=g|tm{j>M4lDPS|cf!@lwO623euC52_<vpZ4L-!~H*8t- zx5xLsv)$3P+I9QY8^sh$cG>5*ta%nF4^8QRuh(Cb|2y}WUewF@p4#2D{OXN-|KCRH zUU}x6YnM`b7up;#xcE!o{+n^c?Tz}EyWcL_C$Z;Xe9z~~`|slCTz9UuGZAxI`%n-T z%gn3)hrK@DxJLfp_M;c(YaZgO56+kC`SW<;mA}Ui-AP(;wpHi58MK(SxbRE<S3^F} z(qxC-+y8gRUGRURa$%306nA2s=9T`|HP6<jLi}D}@%8@O|2r<<{rk43S|}rozxVOO z8!InZ$bD*4hUIU*o&UV|cfGs$|L*OdNAr#y(DP$Do0XVnsB=f|nSaZzIsM;YxuNv$ zce#)96`S@;{Fxi~^!_W5ozJEn`e=RV(A$M|XWXlyrCHyef4l$xeH`$u{}0D|JvrV} zpDsl3beFe2E^j+lDF1dVV}n-5(TMadj2n8j|Ns75J^yya`pPf=7w`K1t6#C@+I=DC zGuHLqa+@Wb%zm8L{GXliw=Uy<-93)pR)g&lpW4jbuG)O@{(h(WeE%-K1O^5JW$A?a zuky|(oUX0<xo7f^NEx61@9fup7T^AF<J#xHpZm4^+GE}fsaqVrzP8`;{%QKt-+%8i z3jF@xxK^I~$hXgbi@g)`E=t2{-L6;rO&FZ=*^Yb@cAU#7kaS{`K=KTGQL#MkV(+*T zXd-aF%OJe!|AopK>hF0Q1d@N3Zz}sPzgt(vTJ)L!uYmPn`(zHX&4~HC{h!avpYwIN z6|?ypeojvOxUS%h86=G`xNl=ri}|lOMgAXWq}a1*k1p}IwBB~kJ(mq`Y%sX*WaL}$ z&zd>mpNq}MgBvQ+S6E(xBv`EtjC@P}y*_^E(#(oaYoKxD&}w#|<#qh`WY7??L#p|K zBd_e&w;#Ry@yX2%1-q|vNQ0`0RXZ5f0{*Xk7jGpj=3gDV0W?s)V3%~l{;&H>tmgf3 zyxY$UTJR9Of$>}1fA921mtJltQA;V+XEbAwU|?f7Ad=It_sai6vLHiC)Shg;C&2(R zH=J?7Bk6=azvkOteE08{ljiTM_TbjH&tbM3xqr`>?*1R~(w*@YBnvG|XTG!RpEP&k z#}b=Tvomuu%J=^Q`>P@I4ukd8`dUSuxqa&A+kOh~ozD#FuODDwm~n~MVAsFTZV^_p z{xt?N`;$LtDtzq+2XpW)Mz+`X`7K9xKYH|XL&>r&>{p<c|7Ux#`v1}0k2?8Vjv6bT zzI}K7zm1^kA|cJ}K>7Zk<@xp{_ru=0#OyKFna8*F=Y*?Jjb|22zrXk6<^3O4-;Z8@ z{8r70*NUrG)`Kgr8L8*@f1Fz^U;E(Kt!YqKo0uJ#ec$$bHh+A5eehp!Yt%tX`oXLE z`M+-nU%ze!4T~ik8Shm+zq3Am*S>2Z|G_QA2`AVpzTY|i|Ie>mZ3x4*{<r)tU0?Y3 zFE7-GCvzI^|M~P)S{fRFLN^)iTYry^-&ePICB#Pxb9p~ZzkdHdXfUFIkzv9awjXcT z$L!zuFerhUp?ca*7KY1@)Zg!WoGt%<XYg@pJ=V~&fB({_&#%2(%D~Lf;F;4Pzl{-E zctabF3<xd{sGkW=DhJrW(an&<fSn7;LpcoKusXno!rj0K72m*kfQ^BffkB!f2h@cn zkqdSfgEYjI8z7E`adW^7;+>1;nFDN4U!k}g><wm65I~&^@`eGZTThlZK;;bB^Pqgg z0P?^A22fZaa|s1An!6EP0|o|=b2os7FF*`XFhiY-#w9+~c^IaH+?N9?K0vw>*p4pJ zh+$<|_2Aa-|KH!1-!GP3v7@@~53?Q<XqAzHtPK+j1E>%Ib-#&cfYw_zkh0Wl5UrX* zaSBPE04oLs8;TKxLXRF{^+1RL)D9+oVc{V03j5Rlj7bMlOs-!q3uItmP%UwdC`m~y zNwrEYN=+<DWiT=@wA3{)(={>*F|@EUF|#r?)iyA&GBBue+`JS;LvDUbW?Cg~4cs!^ QlAxuUp00i_>zopr0K8b=b^rhX literal 0 HcmV?d00001 diff --git a/TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..7353c41ecf9ca08017312dc233d9830079b50717 GIT binary patch literal 295 zcmeAS@N?(olHy`uVBq!ia0y~yU=RUe4rT@hhF#%r?HL#tasqrpT>t<7A9D1^uYdo) z|M|}tKKsk>|9v-q-Td@-#@*lDH-5EW`xVx|ck=Dun%lnZzw+$;uYV7|{`>yx&%T#` zTCV<j|Mh3-g`eTaf7tB(uCe*^i|_v~zW;md&EJpTer25b>3itMfospaXP=IqbwD6@ zDPzzip<9;X3=9lqo-U3d5|`&rILX&+z{6^2n0tA`hWFNg{@V-13-F02^evt^FXuh) zqioI{pPd<gSif`bYiBII^f+KT=e>!OAH8$?v)QG6$`(O>hSVxQ<BL7lO5aHAUt7Yu zEm<V$dhw$ZD^`SuOfT1wUUW)!w#Jd{+y2KSyyQ19e?7p`ntQ?R90LObgQu&X%Q~lo FCIG0Nnu!1a literal 0 HcmV?d00001 diff --git a/TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..797d452e458972bab9d994556c8305db4c827017 GIT binary patch literal 406 zcmeAS@N?(olHy`uVBq!ia0y~yV9)?z4rT@hhTRGt@eB+MT>(BJuK)l44>|gSF?_b> zwr?MP{mVP|^ZECG7vKLax$yJ*-~WlHet!D>|IN>T*=K)lIQ^jZ@~?Ye{(b)a|LvEb z0Y`rP`S(BO#1F%r-yXdFthWBGQTaOk(zO$A{%XGZ>(QGprd1nM@>Vc<G(P?I@65Zu z*Wdr1d+)dN{_mc9J{oNKc<b4RYfs+u=C0<9nZg~}$sOJnwqnOc1_p-Xo-U3d7N_4% z@Dyq?5MecD<do{<;4-o}U-kcW=CUG3)k5E!uh)HFZ7*T3V)%wBj>S~)W7Xv|RU5C* z4t{O;f8N&}_5C+?Px*80;D6b3eMw0P|M;#gk<w#JlBu=6A((aP$izj~UB@bx-jdD> zx@(v(e(d({O*>zm_z*O6Wr4j%SwPR!NVNm(*@j`u-h7ytc=jp7AC47!Ud63vN~@W4 zk9lFKoRQ+XxagJud84C0HTRxRdr`H|an>x>GuioP5(3lB4!hnxQ^36V3Geh@-1Dxk T&il&1z`)??>gTe~DWM4f7<1Pq literal 0 HcmV?d00001 diff --git a/TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..6ed2d933e1120817fe9182483a228007b18ab6ae GIT binary patch literal 450 zcmeAS@N?(olHy`uVBq!ia0y~yV6XvU4rY*ulBNR#14B!IPl)UP|Nldd{?Od^jWK+7 z_^}_6$A7&2`ESXC-;cljn{xa2-OvA`C+~mt<KM%t|6)%3c>4X{jZc3$W9B8C{Hed= z8<T(My)XYRKYGU#H~;tF|9*#my#Dn4&Wn$XAyb)c)4u%vfARg_Gw=Qe9{KU;%@@^G z&tJU%roR52+UghSvk%8i-p>_2k<Gi7(Wy*AuwI6Nf#Ij8i(`n#@wb<6@--O<I9!Yp z+Zbf#Sm4N7{`dd?&1_EXGp6v=D!9B;KIwT|Q#CmF{u@i3!;$%F#xvWVT4X!EUcBb^ zroOhXrr*w(>PWxn6Pj~%=4X!F-+NASyf5FAZxGq=O!5^k+lS~S7VV#{pC1U0k_eAF zuX?KD_kORa=N1$CWGvF-&NxWE?3vyBRr9XNl}WExZ3&HbTX|*TT9=^kZ#xzRx$7M) z5!!ZfV*j>M*0R`*=`%BhLwcI#MPG_O?pERWYQeo9ruU@XcD-JjuiyAPBk}yt=m&PQ zIA<Ss3yn&;F1FgN^~TKgtWrMh0n??V>_2}^*4&+*^6LLD2H{SDEiagFJZ4~EVDNPH Kb6Mw<&;$TA1m_0; literal 0 HcmV?d00001 diff --git a/TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..4cd7b0099ca80c806f8fe495613e8d6c69460d76 GIT binary patch literal 282 zcmeAS@N?(olHy`uVBq!ia0y~yV2}l24rT@hhD6`#whRmmu>n3IuK)l44>|fnbK5t@ z@Y%or{ZBpp^T*%+w?6;d`1H@($A4l@{7}eQzVzYmx%YnOo%^}{`JXAbe=~;7y!P?$ z*Pp+g_J4QW_uXvQ_qN?PtCpXxTz*QX?T~2g4zbb|j3Lt)JsX>Dzf@&lV5snPaSYKo zfA-u>z7_)xhrng260+ZGzyG(t93(6({9^Sz^-01^A0|DrpT4+9{++jyo1%{2kqc=b zo*DCBJYRnJ*P%Q9ns>Y;JzezDj)XbsIUTqs(Jtu`m>$FBl(s|Cab3xdkj`_j<07ZF ppWQXd?cvEPwbtX41?Ao{q_1Z2;nvxn!@$76;OXk;vd$@?2>{PTh06c{ literal 0 HcmV?d00001 diff --git a/TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..fe730945a01f64a61e2235dbe3f45b08f7729182 GIT binary patch literal 462 zcmeAS@N?(olHy`uVBq!ia0y~yV6XyV4rT@hhHI(2q!<_&rUm$fxc>kDKji2S#_-vi z+rG`a_xsT6zZqwKvP8~3`S$PDXMff|`7`tGZ_h(Nu6_J_{{7#nw|_GRPd@hM@9r0W z9)10H`NQAdo4<5+d^>yZ&F)K2Zhii@<N2R;kN+%x_<PZV-yPR~MI8IF_sY|)=N{Fp zI90UhghbUEM!#+b$C6h+{_T44=klX>#fM*(E;%XDen_%)pG4yh@ro6UE>#SM;nKc$ z`xqD)K6|=2hIkx*d+9k}lYvOv!>U&fOCKHB>mc}j*Z<kUZC_lJo-qh6-ed1MZ_8h% z)4xxfrB3mixRq(u7s<$@n;a*;y-_sfp!M;HZAK9uigRZkblO@Xc4>d@!a^%<&5i#n zCKfF86I9jU=KQnrT$~y2$zwKNkJS9Pi$-J#3Pj$mPJcM}i0H+7>k#Mdz1t32i=GQ@ zD%tiab@lP3Q;jzDZGRif7M9%7cE^9I*TJ1zO1omd@5njsQM%OTKttNrb{n&Wm-<WJ zWnN`z&^>!jCiA8qYje)|>)qN5lZ4*q+~oVBQ@EP-#ER&*jILX}Yu+g|nhNi^o=~~} bK5y&<-lE%Whh{M_Ffe$!`njxgN@xNAiC*)Y literal 0 HcmV?d00001 diff --git a/TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..321773cd857a8a0f0c9c7d3dc3f5ff4fb298dc10 GIT binary patch literal 704 zcmeAS@N?(olHy`uVBq!ia0y~yU<e0c4rT@h1~)OyI0goW?EyX^uK)l44>|fnbK5t@ z@Y%or{r~y*fB3N<p+|qzU-?yY`PYYE|GxbAEt9#FIdaaoKmR}f{y*#P@2=~={{H*F z`^BI2PySS1`pFnJtNq%qpd&w~-1^NJ(7WQ%@0M%7Qf407{Opf!*G|UZsSED^?z{QR zV)u8w9pA(&S2KFIGCCCPc>c#~&-be3r%RWdlx#l~KlQ+;U;oT^e=l5gJhXq0MAI(D z&>0NIQD1)lzy0~&q6fdb4&9f@T*l;4$6yl6Xb`Nr)u4cZf$@l^i(^Q{;kQ?^gPR;g zjulRc6*pPO#u2r$(tESc?(5(G$277^%Vce^HM{lZ^R$`v`z6~JpE!B)q~hAOjisFh zQ|FmwwQh_Hj;ZF^wDsQ99c64=Z{=-iR9%<ryjE{rsrQz?9n+>{*cR$GMwKN*wfM7b zHRXR;?r`zY)XcSeubx{Fw!N%Kf|*74%r%qj{PPu^+pbSZkD2$e`SQD0J?T+S4+Z!Z z|6b9&HTI#gU)uvo?$w3zb(d~^m}?fgYVGNL){oa6b}%cM+GWhX=1-6CY)9Qdt^OxR zqL#^;Etr;9TExaPuQ01wYxDNKsWUB33(f7!*lAIJ%y(_w#gpOE4$+}!&RcwR`}(WY zE@$@sU4qQVzUbeo*cjn5d)qF*Wmnxj%>=nKEG=uB=b7xBk=^RHC1UowJ%_g@8SnL- z&^~diP0vErnbX>xU2B#x@0xykTGNI^L+PL95)Xebm=OE>80W4ZWtYC!hT0zHn9X>8 zpUZ5$z8Nj^Z+<Kh`g(nzRJ-BP$GexzPT6?G#Aj3f`pYjCcd0Eq=r%j-<B?~<SDuIZ zeDq><7To@fO+TsY?$nRvNmHU1>MW?}RBB6Pex7q~et%bVKu^E>0})Hho%K7*8M`#J Vrpz(l%D}+D;OXk;vd$@?2>@$NY7PJZ literal 0 HcmV?d00001 diff --git a/TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..797d452e458972bab9d994556c8305db4c827017 GIT binary patch literal 406 zcmeAS@N?(olHy`uVBq!ia0y~yV9)?z4rT@hhTRGt@eB+MT>(BJuK)l44>|gSF?_b> zwr?MP{mVP|^ZECG7vKLax$yJ*-~WlHet!D>|IN>T*=K)lIQ^jZ@~?Ye{(b)a|LvEb z0Y`rP`S(BO#1F%r-yXdFthWBGQTaOk(zO$A{%XGZ>(QGprd1nM@>Vc<G(P?I@65Zu z*Wdr1d+)dN{_mc9J{oNKc<b4RYfs+u=C0<9nZg~}$sOJnwqnOc1_p-Xo-U3d7N_4% z@Dyq?5MecD<do{<;4-o}U-kcW=CUG3)k5E!uh)HFZ7*T3V)%wBj>S~)W7Xv|RU5C* z4t{O;f8N&}_5C+?Px*80;D6b3eMw0P|M;#gk<w#JlBu=6A((aP$izj~UB@bx-jdD> zx@(v(e(d({O*>zm_z*O6Wr4j%SwPR!NVNm(*@j`u-h7ytc=jp7AC47!Ud63vN~@W4 zk9lFKoRQ+XxagJud84C0HTRxRdr`H|an>x>GuioP5(3lB4!hnxQ^36V3Geh@-1Dxk T&il&1z`)??>gTe~DWM4f7<1Pq literal 0 HcmV?d00001 diff --git a/TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..502f463a9bc882b461c96aadf492d1729e49e725 GIT binary patch literal 586 zcmeAS@N?(olHy`uVBq!ia0y~yU<d$V4rT@hhMnh`<})xbtO)Q4asB`Qf5_1vn%llH zhR^={?|;~_AG==si8%hF_VTYk|NdY9^j9il>E@?@xZ~!3`}6<6t3NR(eq8zR_vG8Z zjN!8uAG+;!;JeoLZ?As*JNo8t>4l#~=YMWE{b0qz-wJcCGlow4@caMM@Bb1{{?Oa; zjX88Oqkj*xMf`>*e;Tj+s<`+w<MhuxSDwz;b%i5(F0*fI+qGXRi|#8<JICl=$7GxR z<M01V58qDRc~v=Y1*3EM?f0i9GB7a4db&7<L>zuQ?PgfBfrx8x$CQvpt>#;t-U~ym zBcA{NZ@hR-s={_X&GvS?l==g4&(rp|Nb<A=r$5MA^G@Nu@BZ-TZ<>_%c|R(aICOQw z50)p3zZ<=X+ob<sS^LYxsu^<2+Fur0*~YP3X<j*8UM;08|5CAR*ZY67{`Oz~zu0}3 z((hS6B>4Hh3mhqby*bUIz3PYcqwIfExqk)lbCrAWZ+GR7a{D?%{o_U349Tm>d68jv zR<$2m`K4lmiszkG?Mgr18cx}DX+;$S$IkV6Q*0T6e%6&f=J+_(R>bh_MVYIMcLjcP z;4oT!?y_=wOU<M!HJ5LyB}q(Pvn$__d+){rW_sGcw{;tA*=x8f@aL!eg>PMDjP*8O z`u=Io>B+g7Z<d_dH{p={e3P<(v?!7JJFiTAkoxUt*t*~Ysn?eJGEVO_GnJ2XTa&v< zaPO=fmeU;`!jDq#y*+n&PIk>6Lms~bw&sPR@y{3(UKgy1-p#<kz~JfX=d#Wzp$Py& CXEa&> literal 0 HcmV?d00001 diff --git a/TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..0ec303439225b78712f49115768196d8d76f6790 GIT binary patch literal 862 zcmeAS@N?(olHy`uVBq!ia0y~yV5k6L4rT@h2EJX#9xyO4JP+^*asB`Qf5_1v4B@ji zw|)Eb?|;OxAHV<p_dNLh-@pHE2fl|M{qghfzoPR$8A4}HxcSTH(08`zxnF<(3pnya zZ^!qG58g0%PEy<QC8%fD?>~PpefT@|_OGOqKfe9>_vP0=-Gl$NwtbV?_%;9BPqSU$ z7=x!uZTxChwVuIy%9LBb$}j%B^!{)8g`Y{Meuy>iW%Oxhuq%+LT*c_$%jj0eXc+na z#~%jA3I=)Wo*Ta;8@34)FJ%mzz~I%)V4lLD<$LAB-}CSOo_h0V?)^VaSAM3Q{*ip@ zhxzXBvYWn2ZTNEa@w<x;-yXgBBC2f-NBm;5+?iXooRk?Dn2bDK978hhy}gkgd@Dep z;i2g~6?F$L#)}cIOIAjCE#%7D`?YTWpa1tS+gi-coqaSc;ry0!`{X|<8rW<;={JKj zW7e|FTd`-(@u=+n_?$J9c|z*VvTeP8YYt4l>Nz!q@w-CJ?x#{b+t}WHSZqG^It%xX z?~~MSdtEwx=eeGw`I>^(!nIm&))lN=y>8d5Rjb$SGVqNpy&4)0BEFy7b?wX<u3hHm zb5-xYIhwYA|Ig@Jo3DRT+1D(H_I{OfwtV@uD9i2Q=PT|{xwHT8(rpQTkN21Te6Px$ zz<Wn(-L*#rhT_jnKd+fqDbwD)Gw)vI6ON~?G28~r|7h^l-ieR<W~+bF?pxRNNb{z1 zM&G;c8`Ry~aeDWcI}tT$dG~(heRp)th?``&ee15iO+DV>zs0Y|>|Px^$-8>1&d#`b z;>DW|>`|E=wcbYmq|>^^oBT54Cb7m$lANBRDZY7Hspqo2LMxt3I`dy&=WCk(-A!+9 zsz%<JtMdNh(<j%oJ9Icw7hb-T`ta*q^>`Pt?s+Ox+jXzmX65g=D$MniBlVoGv|MUY z|K$VAeexzQ%Y5Le_WkCI4H^R9R3=wj+RQ&>ms&EvufOfO@b4)X_ev?&yi4de+NC~y z@#F5phc^C8c^=p6e)v$Q+*5w*boCRv68D~}tT5Z>A<esG&ndwt_rL9D+Y$0Fb@TOQ zmA0oWpH%<u4N0A<$!Ph5J(W4ga;L}5rf+V3`l>2Vw)$u1$lLoLd0@X^L;Q@J@#Y1Y gvzBH455CXX<`VnX;r43{1_lNOPgg&ebxsLQ0IGJ#9smFU literal 0 HcmV?d00001 diff --git a/TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0ec303439225b78712f49115768196d8d76f6790 GIT binary patch literal 862 zcmeAS@N?(olHy`uVBq!ia0y~yV5k6L4rT@h2EJX#9xyO4JP+^*asB`Qf5_1v4B@ji zw|)Eb?|;OxAHV<p_dNLh-@pHE2fl|M{qghfzoPR$8A4}HxcSTH(08`zxnF<(3pnya zZ^!qG58g0%PEy<QC8%fD?>~PpefT@|_OGOqKfe9>_vP0=-Gl$NwtbV?_%;9BPqSU$ z7=x!uZTxChwVuIy%9LBb$}j%B^!{)8g`Y{Meuy>iW%Oxhuq%+LT*c_$%jj0eXc+na z#~%jA3I=)Wo*Ta;8@34)FJ%mzz~I%)V4lLD<$LAB-}CSOo_h0V?)^VaSAM3Q{*ip@ zhxzXBvYWn2ZTNEa@w<x;-yXgBBC2f-NBm;5+?iXooRk?Dn2bDK978hhy}gkgd@Dep z;i2g~6?F$L#)}cIOIAjCE#%7D`?YTWpa1tS+gi-coqaSc;ry0!`{X|<8rW<;={JKj zW7e|FTd`-(@u=+n_?$J9c|z*VvTeP8YYt4l>Nz!q@w-CJ?x#{b+t}WHSZqG^It%xX z?~~MSdtEwx=eeGw`I>^(!nIm&))lN=y>8d5Rjb$SGVqNpy&4)0BEFy7b?wX<u3hHm zb5-xYIhwYA|Ig@Jo3DRT+1D(H_I{OfwtV@uD9i2Q=PT|{xwHT8(rpQTkN21Te6Px$ zz<Wn(-L*#rhT_jnKd+fqDbwD)Gw)vI6ON~?G28~r|7h^l-ieR<W~+bF?pxRNNb{z1 zM&G;c8`Ry~aeDWcI}tT$dG~(heRp)th?``&ee15iO+DV>zs0Y|>|Px^$-8>1&d#`b z;>DW|>`|E=wcbYmq|>^^oBT54Cb7m$lANBRDZY7Hspqo2LMxt3I`dy&=WCk(-A!+9 zsz%<JtMdNh(<j%oJ9Icw7hb-T`ta*q^>`Pt?s+Ox+jXzmX65g=D$MniBlVoGv|MUY z|K$VAeexzQ%Y5Le_WkCI4H^R9R3=wj+RQ&>ms&EvufOfO@b4)X_ev?&yi4de+NC~y z@#F5phc^C8c^=p6e)v$Q+*5w*boCRv68D~}tT5Z>A<esG&ndwt_rL9D+Y$0Fb@TOQ zmA0oWpH%<u4N0A<$!Ph5J(W4ga;L}5rf+V3`l>2Vw)$u1$lLoLd0@X^L;Q@J@#Y1Y gvzBH455CXX<`VnX;r43{1_lNOPgg&ebxsLQ0IGJ#9smFU literal 0 HcmV?d00001 diff --git a/TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..e9f5fea27c705180eb716271f41b582e76dcbd90 GIT binary patch literal 1674 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 literal 0 HcmV?d00001 diff --git a/TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..84ac32ae7d989f82d5e46a60405adcc8279e8001 GIT binary patch literal 762 zcmeAS@N?(olHy`uVBq!ia0y~yVDJH94rT@hh7X<#B^ekP?gjXSxc>kDKji3-KmYzm z9Q&cU?HgnG?B9R?HD3Ao^Y8y3zyJCl{*id{$BXZO!;bxMJMf(?YOeR8?_LMLyYBz~ z>c_uNzy4kQ^e^W4j}=GnFoey_KJ!y=`!@!^sUb(c$4uJC6fu{<W73_^f5kU^WeA-5 z@8AE6@Bdov{-(YEf7ykf20OkfZvLjS<*UY~Pp9s@VhreGa<6;$<FCrR>pELMD=)go z;5nJmI)l+5`0MX~H$MJV+5NZX($BQhKNx*GAAkLO=Ix*3um3!J{psrCcNXiPt1fwP z;>x`R`)|(NeJyUv{)CCU{W^CrIP_?R%>Ki`z<Ax$#W5t}@Z0N|!H*mS8Xl%4r4?In zcAik0eRfypb-5U&d*9#w|L?r*;|rOtqde1sRr3#uuc}zJyOICEn#ic5ULQjaHhEo= zYQJ|XY2Vz%at4vvb@l~Ct`Fz+&RFu4ZIPSgJ@bH#J$pp8BEL30&CF_zx^w!{kGRIR z?^UVpzWM9F&E+up>-VBU|KG#!kEGuHVBD`5rWd+lL6BCZe$9rTtxoN|<tE>*?X|d3 zy=dm?(reNOjzyndr@YE~QR>?EiOyFK{bk*B??9Q-p{{A^9IGPZ7wtUOqxNc1mHrm4 z)9e|M@9Sr*uylJFS0t8pa8sky+m7`GlHDeb#gQA{R{3gjKfZbQ#HPjfSEqLOtDo9j zX_@`_{i+#vlypx;7Z<Pa-KU(p>u<tGb?wVfbb2nv<Svmj_2gbDGCw6XO83)=Srxn5 zPL!$Su2j!-<kE|}lJI>E`?fFflOFflzZHLd|5oL5wg&HP?c6K#)}Hk<`lGo%a>>Hd z3m^Z+zlusL<&V-W=8}r~yEadKW|vvS>wW=e?^x+K-`p4HT{7A%veos@#h&DrE2h$V zXKoyqUB2Y+cj5i1b)si`&RTHiTkK&=;JWp}ech9H)3h^|PruI{JJ&-$s#bZe=Hi=6 hCC<$HDtVWg>A&sfRbjFV85kHCJYD@<);T3K0RZc2mlps4 literal 0 HcmV?d00001 diff --git a/TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..8953cba09064923c5daf2d37e7c3c836ccdd794b GIT binary patch literal 1226 zcmeAS@N?(olHy`uVBq!ia0y~yV3+~I9Lx+14Eiz`gc%qZIRbn_T>t<7A9D1E=C*H) z;j@E}{`mFxf5fpLfByad`|sbs|Nj}nW`!O7;eF`)^KX9>PyX;c_<i2pUw{7obKU>_ z_n*J)(Q_F*C$U7$dGhU_#@25P-cvR`{j>eqAGZVF!~6IA{QcLuW~1)*Z?VUJh;R6& zy5%cl==8eFKb5z9)7bLG|L}K*hRqk>|Iyy_$7ts_#-PcJ0sVSAzA<_>F*sKpd;RCw zt3Sp&zX|3nVz4V=G))kQY-G?2(%$p$*z4bne%%aKS$97F-TUHC>Zu=$J{{kG{{H*p zd(!lS0;$sl;(Himtr?`vBG3JQ_w(P0*MC+#{M~!wSLMZ@FW!Hhvi(YM?=Fk(U0Q{! z?2G3!*!M7mwlgR?|Mv2VU|?Xb^>lFzskrra`s*MmM}gMr#Kba|WU&B4Ay-4T#R^AU zj#OM%c~<9t@4v5+a!Az8GXh-}m$T|a|7~3GW7YYE+Zo#uCBUdd$@s9q17^)c4WT>A z41DqtGwb)Wz7rIBC%!D_3HMIs0=Z=!Q^L<VO*kv>>%`L6x#SzynU<S>_IjRZ@V=m} z@_cF0niS5emz9EFghGl{Ua9VgzdkXU=iGsN;T+$(U;PsjJo{exs;yw)+v{iV3BUPz zy!*wx1-JAU%vSc)Uvyq^)$i{28T%HqKd_$lUHtyV8u!~foh^gDD(zHX@vZy)i|CIs zi+1h*(YJ4N`4)+;`PNYl%q}LM<|;pUyJqUio6RSj_Zxjsk$%Qxd{e=m|Ipoe4(ko% zThf{eyed5<*g2J}kDgjRZ}T4I@ALO8bDJM-oBf&V*mowzkH@{rT-HCZ+IxXVPW8;1 zxNkBW;~&p<J=GJk|5wVSv~M!S*C#AKs`KZ#%-xE_S*<x9E8@e?9=k8hwtnN~B^&nh z*lw=cyW0B2^u+8Nd*)qRwNs(w^7<t+Z)UIFGwW7>{QG6`Crx@kYpo9p-kN^uOkm&1 zd6IiitqkE!e|Cy{JKMdBocbok7uLI+pZ4#X{@bMoO=Q1hE1W%aalv)&FHXkpmXFRD z$@BHZWjxbyH@RG&rvGN9wf-N~>{sDMX)_ixFS*K{{_G65=R3}3$!9M_=1f1x^Sy=n z%wGR*Iv*x27STE`Ri&CPc17Fnnd$?BtFxzHd~<doyT0bbjLO50zV6ud>#K<00ZS&M z@6*iB#;yGN{B}3@28MHj0=l~4r_<JdJM$&!VtZswV%oP^Gc+<cD_N*7K5OP1r!9Qy z%;hr|bZ)K}Reg5d=ey3!s{u*>&a&-|duKk|*4WARa@^d<d-p|H`7TXA^*VHUsi%(b z;`CdqZ|7~TO1gEXeAd-{*WaC6|MzX#>mQenaOCj5{km)M(Qi_FD>e5l-+A-%t1|1` zYnO#N?aA-GJNI*5`TnaH^un*$e9x(UzUOk@vh+(<E=S7GKe=?iZ_}lyjFt*x?L#lW z?-VkNb6k?{IwAY=($!HWRbee2GncCSB>lS-v%}zZy638NTVqwX4e8rv{;baP(zxXR z`Pj_LJ5nxZm&}S>b0$q^%Cl<+HcBqDOke!*@on{vgOV9#Mc<w-?A^Teyg+01Bf+@G w({@PkGukLB_x3ztcokpU0L?LZ()$^|b}yRos%l0G0|Nttr>mdKI;Vst06J}e(f|Me literal 0 HcmV?d00001 diff --git a/TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/TDDE43/labb2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0467bf12aa4d28f374bb26596605a46dcbb3e7c8 GIT binary patch literal 1418 zcmeAS@N?(olHy`uVBq!ia0y~yU|0^q9Lx+149+L^++$#1_#EI9;`;yp|B$0UG`D?Y z44)l*<j3EC|Ns2`_v`Qfh+{u~|N9?)?1$gs?=JhlGk8sA44c_?{a3)@A1qOGFTDH1 z95LtL|NrlP{yX~mkJrKPaVLIAZ1`HV@c8p@f0IuAXj^;E?Z9`v9p66v`gigDpU!K) z);<1hzxTWLzW?f*KFzxGOLfavMz^|>^FJ9wruiNI(XswKW6)$KzfNY8aK?asmBsg% zy<5Ki{>$i8#%PzXy8JPdWlG_~V~o1~55N3nP;~h6``@b{|D-m4Q(f_l!Ds5e7k?_Q z{+W08SImhYGjDv&JNv`$(2qOMJ_yggGiUGht_>Gj)}GItb2x40AqLy-#pN|e85mfC zJY5_^DsH{KlN~H<D8lwY*zD%roQ=22w#G4X$AwK0%g$zX{aAPX|Nm^C?b_`#r=%2G zRST)DU#xt1ditb2?JQ{x6HtJb(aMQ3E0h<8u}pCDu&63OJgfZpmJ2qGdAIWao{r1T zpQryS|7YOTZ0qKhE1D`Lk==#Go4ztmFs{^2J(lwFSZGoj&-Y60$7-tSFLxz*E$H@m z<MWJVbM$0M=eGey!V9`Pp8NXip2^ub%hE(X<&)GI#=AF<EL(nU8UKoNYDRxo1W0(S zPQ9i5<g~-0yj@pjuTxh|uQHk-6wem)y@*%k(lT|^S?4xS@~r)O!+WNs<j<RHE|xrV zxV(2~)sN4ncc(WV(L3+3Xl=mSZkeCUs*AqvC}BR?xa{}FS#f(>vkdO8n4q7p`0N+2 z=AKrCJ+0?<R`KkS^!Rkhf7=JKqHQnd8T{Q@6*1#Zf8&$$yf0Uo-`6dxRVY-~Dw$cY zH|4aH;MskxJMMj%#dI;_@>lr~Z-MJ;Z|>U6`g7H+dw=I|4`7OZe|h$_JE`;g9fRtM z)f%t+U;AmA998r9@x`tgkD5deU9H)aSo`wp`+JeR!Yp^vOK03#W*_d8cdvEQ%rz~V z4<*d^zKhn#pTk+ncf0o7kE3isM^lci>F7M1TkY()HeYdWW?9<mq@;-=CXb(Sz4S>- zDN0$#GiyHo)92=UJ2$UfpD|yzHS5ftlxwReuw*cF`FLI}k=43-&G=a9vU^{yr(Wiq z5utYMY&gG+$61rRe6Gu`gc(2PHIHrI)HC~@(<-OyX7)x>%lNL&?mH8mZ7q55=9Q@P zq9OTKM&{S$-lxnFHvB4j^?BOS7-tPm;e|c=JF66m8JDIcy*6Gm;h0MXGxJG~quW8O z$G+F~RcrUYJmI3T{ANi@oxyrFC+Qtk5(}={S6w!|@#|T*aH5j<v#Tx|jKaz3N>ds- zHyV7smab>)|6HSdPUO~mZ+-1stqx4F3T|Ka`ic*udyL`P${nBoai|2SHRf7>KDhn1 zLb5_{1ON7%Gusb8Qs;<T!BA0>oqPF=%=Yznl-s$KLky2UE)&_wSX<0>b%y>i*WG&? zj{P{dykkn1tM8du*0-SnrxZfc#g4w4Be|1juCe;>-%EoXWi1wO(wTg2jt@Vdn4kLs zrQ_F>i>+k&re4-uv0}lA8nfA=kAs&R2SoO&r}U|%&rvlgTI<tgX*Fk>AM4r~6P4HY zi;B!#pLQy8#aErF?;MJAYER1ard>|jQP1}BoMh~jl__#^eQJmATAq!3(VX7C-feTz z{_EXJ<qPNETfrsDKG)A*)~9@-Va+T*tGRyFD=*FcDB``NTu9g1>e?@h_UiCO^Vly) z%$wJ^tJ*F3q3D*!j3K#yJAbE_Fn(R&bI)OKX6?J!*UHu=<xIC;ODwXh{KV|Q5V*nT z+n-9#CJC(vzt`XP{v`B&@xMR+xLmCJ*M5I^ol$FrM^ZJ5Wk{fF?*(ILCj{7YD&By3 X-Nacj>(dw*7#KWV{an^LB{Ts5B8|zr literal 0 HcmV?d00001 diff --git a/TDDE43/labb2/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/TDDE43/labb2/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json new file mode 100644 index 0000000..0bedcf2 --- /dev/null +++ b/TDDE43/labb2/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "LaunchImage.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/TDDE43/labb2/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/TDDE43/labb2/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0y~yU|<Ac4i*LmhOII@ObiSR+@3CuAr*6yf1PJwU}9%v Vnk8dc$iTqB;OXk;vd$@?2>@r242}Q* literal 0 HcmV?d00001 diff --git a/TDDE43/labb2/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/TDDE43/labb2/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!ia0y~yU|<Ac4i*LmhOII@ObiSR+@3CuAr*6yf1PJwU}9%v Vnk8dc$iTqB;OXk;vd$@?2>@r242}Q* literal 0 HcmV?d00001 diff --git a/TDDE43/labb2/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/TDDE43/labb2/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!ia0y~yU|<Ac4i*LmhOII@ObiSR+@3CuAr*6yf1PJwU}9%v Vnk8dc$iTqB;OXk;vd$@?2>@r242}Q* literal 0 HcmV?d00001 diff --git a/TDDE43/labb2/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/TDDE43/labb2/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 0000000..89c2725 --- /dev/null +++ b/TDDE43/labb2/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/TDDE43/labb2/ios/Runner/Base.lproj/LaunchScreen.storyboard b/TDDE43/labb2/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..f2e259c --- /dev/null +++ b/TDDE43/labb2/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="12121" systemVersion="16G29" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" colorMatched="YES" initialViewController="01J-lp-oVM"> + <dependencies> + <deployment identifier="iOS"/> + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12089"/> + </dependencies> + <scenes> + <!--View Controller--> + <scene sceneID="EHf-IW-A2E"> + <objects> + <viewController id="01J-lp-oVM" sceneMemberID="viewController"> + <layoutGuides> + <viewControllerLayoutGuide type="top" id="Ydg-fD-yQy"/> + <viewControllerLayoutGuide type="bottom" id="xbc-2k-c8Z"/> + </layoutGuides> + <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3"> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" image="LaunchImage" translatesAutoresizingMaskIntoConstraints="NO" id="YRO-k0-Ey4"> + </imageView> + </subviews> + <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> + <constraints> + <constraint firstItem="YRO-k0-Ey4" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="1a2-6s-vTC"/> + <constraint firstItem="YRO-k0-Ey4" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="4X2-HB-R7a"/> + </constraints> + </view> + </viewController> + <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/> + </objects> + <point key="canvasLocation" x="53" y="375"/> + </scene> + </scenes> + <resources> + <image name="LaunchImage" width="168" height="185"/> + </resources> +</document> diff --git a/TDDE43/labb2/ios/Runner/Base.lproj/Main.storyboard b/TDDE43/labb2/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 0000000..f3c2851 --- /dev/null +++ b/TDDE43/labb2/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r"> + <dependencies> + <deployment identifier="iOS"/> + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/> + </dependencies> + <scenes> + <!--Flutter View Controller--> + <scene sceneID="tne-QT-ifu"> + <objects> + <viewController id="BYZ-38-t0r" customClass="FlutterViewController" sceneMemberID="viewController"> + <layoutGuides> + <viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/> + <viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/> + </layoutGuides> + <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC"> + <rect key="frame" x="0.0" y="0.0" width="600" height="600"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/> + </view> + </viewController> + <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/> + </objects> + </scene> + </scenes> +</document> diff --git a/TDDE43/labb2/ios/Runner/Info.plist b/TDDE43/labb2/ios/Runner/Info.plist new file mode 100644 index 0000000..2867dee --- /dev/null +++ b/TDDE43/labb2/ios/Runner/Info.plist @@ -0,0 +1,49 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>CFBundleDevelopmentRegion</key> + <string>$(DEVELOPMENT_LANGUAGE)</string> + <key>CFBundleDisplayName</key> + <string>Labb2</string> + <key>CFBundleExecutable</key> + <string>$(EXECUTABLE_NAME)</string> + <key>CFBundleIdentifier</key> + <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> + <key>CFBundleInfoDictionaryVersion</key> + <string>6.0</string> + <key>CFBundleName</key> + <string>labb2</string> + <key>CFBundlePackageType</key> + <string>APPL</string> + <key>CFBundleShortVersionString</key> + <string>$(FLUTTER_BUILD_NAME)</string> + <key>CFBundleSignature</key> + <string>????</string> + <key>CFBundleVersion</key> + <string>$(FLUTTER_BUILD_NUMBER)</string> + <key>LSRequiresIPhoneOS</key> + <true/> + <key>UILaunchStoryboardName</key> + <string>LaunchScreen</string> + <key>UIMainStoryboardFile</key> + <string>Main</string> + <key>UISupportedInterfaceOrientations</key> + <array> + <string>UIInterfaceOrientationPortrait</string> + <string>UIInterfaceOrientationLandscapeLeft</string> + <string>UIInterfaceOrientationLandscapeRight</string> + </array> + <key>UISupportedInterfaceOrientations~ipad</key> + <array> + <string>UIInterfaceOrientationPortrait</string> + <string>UIInterfaceOrientationPortraitUpsideDown</string> + <string>UIInterfaceOrientationLandscapeLeft</string> + <string>UIInterfaceOrientationLandscapeRight</string> + </array> + <key>CADisableMinimumFrameDurationOnPhone</key> + <true/> + <key>UIApplicationSupportsIndirectInputEvents</key> + <true/> +</dict> +</plist> diff --git a/TDDE43/labb2/ios/Runner/Runner-Bridging-Header.h b/TDDE43/labb2/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 0000000..308a2a5 --- /dev/null +++ b/TDDE43/labb2/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/TDDE43/labb2/ios/RunnerTests/RunnerTests.swift b/TDDE43/labb2/ios/RunnerTests/RunnerTests.swift new file mode 100644 index 0000000..86a7c3b --- /dev/null +++ b/TDDE43/labb2/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/TDDE43/labb2/lib/githubservice.dart b/TDDE43/labb2/lib/githubservice.dart new file mode 100644 index 0000000..5bd15e8 --- /dev/null +++ b/TDDE43/labb2/lib/githubservice.dart @@ -0,0 +1,17 @@ +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class GitHubService { + final String baseUrl = 'https://api.github.com/search/repositories'; + + Future<List<Map<String, dynamic>>> fetchTrendingProjects( + String language) async { + final response = await http + .get(Uri.parse('$baseUrl?q=language:$language&sort=stars&order=desc')); + + final data = json.decode(response.body); + List<Map<String, dynamic>> projects = + List<Map<String, dynamic>>.from(data['items']); + return projects; + } +} diff --git a/TDDE43/labb2/lib/main.dart b/TDDE43/labb2/lib/main.dart new file mode 100644 index 0000000..c501083 --- /dev/null +++ b/TDDE43/labb2/lib/main.dart @@ -0,0 +1,191 @@ +import 'package:flutter/material.dart'; +import 'githubservice.dart' as gitserv; + +void main() { + runApp(MyApp()); +} + +class MyApp extends StatelessWidget { + @override + Widget build(BuildContext context) { + return MaterialApp( + title: 'GitHub Trending Projects', + home: LanguageSelectionPage(), + ); + } +} + +// Första sidan där användaren kan välja sprÃ¥k +class LanguageSelectionPage extends StatefulWidget { + @override + _LanguageSelectionPageState createState() => _LanguageSelectionPageState(); +} + +class _LanguageSelectionPageState extends State<LanguageSelectionPage> { + @override + Widget build(BuildContext context) { + String? language; + String? language_title; + + return Scaffold( + appBar: AppBar( + title: Text('Välj sprÃ¥k'), + ), + body: Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + children: [ + DropdownButtonFormField( + items: <String>[ + 'Java', + 'CSS', + 'C', + 'C++', + 'C#', + 'JavaScript', + 'TypeScript', + 'Go', + 'Rust', + 'Swift', + 'Web', + 'PHP', + 'Ruby', + 'Python' + ].map((String value) { + return DropdownMenuItem<String>( + value: value, + child: Text(value), + ); + }).toList(), + onChanged: (String? newValue) { + if (newValue == "C++") { + language = "C%2B%2B"; + language_title = "C++"; + } else if (newValue == "C#") { + language = "C%23"; + language_title = "C#"; + } else { + language = newValue; + language_title = newValue; + } + + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => TrendingProjectsPage( + language: language.toString(), + title: language_title.toString(), + ), + ), + ); + }, + ), + ], + ), + ), + ); + } +} + +class _projects {} + +// Andra sidan som visar de trendande projekten +class TrendingProjectsPage extends StatefulWidget { + final String language; + final String title; + + TrendingProjectsPage({required this.language, required this.title}); + + @override + _TrendingProjectsPageState createState() => _TrendingProjectsPageState(); +} + +class _TrendingProjectsPageState extends State<TrendingProjectsPage> { + late Future<List<Map<String, dynamic>>> _projects; + + @override + void initState() { + super.initState(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text('Trending Projects in ${widget.title}'), + ), + body: FutureBuilder<List<Map<String, dynamic>>>( + future: gitserv.GitHubService().fetchTrendingProjects(widget.language), + builder: (context, snapshot) { + /* + + */ + if (snapshot.connectionState == ConnectionState.waiting) { + return Center( + child: CircularProgressIndicator(), + ); + } + /* + + */ + else if (snapshot.hasData) { + List<Map<String, dynamic>> projects = snapshot.data!; + return ListView.builder( + itemCount: projects.length, + itemBuilder: (context, index) { + var project = projects[index]; + return ListTile( + title: Text(project['name']), + subtitle: Text(project['owner']['login']), + onTap: () { + // Navigera till detaljsidan för projektet + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => + ProjectDetailPage(projekt: project), + ), + ); + }, + ); + }, + ); + } else { + return Center( + child: Text('No projects found.'), + ); + } + }, + ), + ); + } +} + +class ProjectDetailPage extends StatelessWidget { + final Map<String, dynamic> projekt; + + ProjectDetailPage({required this.projekt}); + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text(projekt['name']), + ), + body: Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + 'Description: ${projekt['description']}', + style: TextStyle(fontSize: 16), + ), + SizedBox(height: 16), + Text('Stars: ${projekt['stargazers_count']}'), + ], + ), + ), + ); + } +} diff --git a/TDDE43/labb2/linux/.gitignore b/TDDE43/labb2/linux/.gitignore new file mode 100644 index 0000000..d3896c9 --- /dev/null +++ b/TDDE43/labb2/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/TDDE43/labb2/linux/CMakeLists.txt b/TDDE43/labb2/linux/CMakeLists.txt new file mode 100644 index 0000000..a6327da --- /dev/null +++ b/TDDE43/labb2/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 "labb2") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID +set(APPLICATION_ID "com.example.labb2") + +# 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 "$<$<NOT:$<CONFIG:Debug>>:-O3>") + target_compile_definitions(${TARGET} PRIVATE "$<$<NOT:$<CONFIG:Debug>>: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/TDDE43/labb2/linux/flutter/CMakeLists.txt b/TDDE43/labb2/linux/flutter/CMakeLists.txt new file mode 100644 index 0000000..d5bd016 --- /dev/null +++ b/TDDE43/labb2/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/TDDE43/labb2/linux/flutter/generated_plugin_registrant.cc b/TDDE43/labb2/linux/flutter/generated_plugin_registrant.cc new file mode 100644 index 0000000..f6f23bf --- /dev/null +++ b/TDDE43/labb2/linux/flutter/generated_plugin_registrant.cc @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + +#include <url_launcher_linux/url_launcher_plugin.h> + +void fl_register_plugins(FlPluginRegistry* registry) { + 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/TDDE43/labb2/linux/flutter/generated_plugin_registrant.h b/TDDE43/labb2/linux/flutter/generated_plugin_registrant.h new file mode 100644 index 0000000..e0f0a47 --- /dev/null +++ b/TDDE43/labb2/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 <flutter_linux/flutter_linux.h> + +// Registers Flutter plugins. +void fl_register_plugins(FlPluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/TDDE43/labb2/linux/flutter/generated_plugins.cmake b/TDDE43/labb2/linux/flutter/generated_plugins.cmake new file mode 100644 index 0000000..f16b4c3 --- /dev/null +++ b/TDDE43/labb2/linux/flutter/generated_plugins.cmake @@ -0,0 +1,24 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST + 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 $<TARGET_FILE:${plugin}_plugin>) + 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/TDDE43/labb2/linux/main.cc b/TDDE43/labb2/linux/main.cc new file mode 100644 index 0000000..e7c5c54 --- /dev/null +++ b/TDDE43/labb2/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/TDDE43/labb2/linux/my_application.cc b/TDDE43/labb2/linux/my_application.cc new file mode 100644 index 0000000..5597b86 --- /dev/null +++ b/TDDE43/labb2/linux/my_application.cc @@ -0,0 +1,124 @@ +#include "my_application.h" + +#include <flutter_linux/flutter_linux.h> +#ifdef GDK_WINDOWING_X11 +#include <gdk/gdkx.h> +#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, "labb2"); + 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, "labb2"); + } + + 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/TDDE43/labb2/linux/my_application.h b/TDDE43/labb2/linux/my_application.h new file mode 100644 index 0000000..72271d5 --- /dev/null +++ b/TDDE43/labb2/linux/my_application.h @@ -0,0 +1,18 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include <gtk/gtk.h> + +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/TDDE43/labb2/macos/.gitignore b/TDDE43/labb2/macos/.gitignore new file mode 100644 index 0000000..746adbb --- /dev/null +++ b/TDDE43/labb2/macos/.gitignore @@ -0,0 +1,7 @@ +# Flutter-related +**/Flutter/ephemeral/ +**/Pods/ + +# Xcode-related +**/dgph +**/xcuserdata/ diff --git a/TDDE43/labb2/macos/Flutter/Flutter-Debug.xcconfig b/TDDE43/labb2/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 0000000..c2efd0b --- /dev/null +++ b/TDDE43/labb2/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/TDDE43/labb2/macos/Flutter/Flutter-Release.xcconfig b/TDDE43/labb2/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 0000000..c2efd0b --- /dev/null +++ b/TDDE43/labb2/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/TDDE43/labb2/macos/Flutter/GeneratedPluginRegistrant.swift b/TDDE43/labb2/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100644 index 0000000..8236f57 --- /dev/null +++ b/TDDE43/labb2/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,12 @@ +// +// Generated file. Do not edit. +// + +import FlutterMacOS +import Foundation + +import url_launcher_macos + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) +} diff --git a/TDDE43/labb2/macos/Runner.xcodeproj/project.pbxproj b/TDDE43/labb2/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..704c2b7 --- /dev/null +++ b/TDDE43/labb2/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,705 @@ +// !$*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 = "<group>"; }; + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = "<group>"; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = "<group>"; }; + 33CC10ED2044A3C60003C045 /* labb2.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "labb2.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = "<group>"; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = "<group>"; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = "<group>"; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = "<group>"; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = "<group>"; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = "<group>"; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = "<group>"; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = "<group>"; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = "<group>"; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = "<group>"; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = "<group>"; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = "<group>"; }; +/* 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 = "<group>"; + }; + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = "<group>"; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + ); + sourceTree = "<group>"; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* labb2.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = "<group>"; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = "<group>"; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = "<group>"; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = "<group>"; + }; + D73912EC22F37F3D000D13A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = "<group>"; + }; +/* 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 /* labb2.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1510; + 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 = "<group>"; + }; +/* 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.labb2.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/labb2.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/labb2"; + }; + 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.labb2.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/labb2.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/labb2"; + }; + 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.labb2.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/labb2.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/labb2"; + }; + name = Profile; + }; + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + 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; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + 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; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + 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; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + 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; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + 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; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + 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/TDDE43/labb2/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/TDDE43/labb2/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/TDDE43/labb2/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>IDEDidComputeMac32BitWarning</key> + <true/> +</dict> +</plist> diff --git a/TDDE43/labb2/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/TDDE43/labb2/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000..4b7da79 --- /dev/null +++ b/TDDE43/labb2/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,98 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Scheme + LastUpgradeVersion = "1510" + version = "1.3"> + <BuildAction + parallelizeBuildables = "YES" + buildImplicitDependencies = "YES"> + <BuildActionEntries> + <BuildActionEntry + buildForTesting = "YES" + buildForRunning = "YES" + buildForProfiling = "YES" + buildForArchiving = "YES" + buildForAnalyzing = "YES"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "33CC10EC2044A3C60003C045" + BuildableName = "labb2.app" + BlueprintName = "Runner" + ReferencedContainer = "container:Runner.xcodeproj"> + </BuildableReference> + </BuildActionEntry> + </BuildActionEntries> + </BuildAction> + <TestAction + buildConfiguration = "Debug" + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + shouldUseLaunchSchemeArgsEnv = "YES"> + <MacroExpansion> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "33CC10EC2044A3C60003C045" + BuildableName = "labb2.app" + BlueprintName = "Runner" + ReferencedContainer = "container:Runner.xcodeproj"> + </BuildableReference> + </MacroExpansion> + <Testables> + <TestableReference + skipped = "NO" + parallelizable = "YES"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "331C80D4294CF70F00263BE5" + BuildableName = "RunnerTests.xctest" + BlueprintName = "RunnerTests" + ReferencedContainer = "container:Runner.xcodeproj"> + </BuildableReference> + </TestableReference> + </Testables> + </TestAction> + <LaunchAction + buildConfiguration = "Debug" + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + launchStyle = "0" + useCustomWorkingDirectory = "NO" + ignoresPersistentStateOnLaunch = "NO" + debugDocumentVersioning = "YES" + debugServiceExtension = "internal" + allowLocationSimulation = "YES"> + <BuildableProductRunnable + runnableDebuggingMode = "0"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "33CC10EC2044A3C60003C045" + BuildableName = "labb2.app" + BlueprintName = "Runner" + ReferencedContainer = "container:Runner.xcodeproj"> + </BuildableReference> + </BuildableProductRunnable> + </LaunchAction> + <ProfileAction + buildConfiguration = "Profile" + shouldUseLaunchSchemeArgsEnv = "YES" + savedToolIdentifier = "" + useCustomWorkingDirectory = "NO" + debugDocumentVersioning = "YES"> + <BuildableProductRunnable + runnableDebuggingMode = "0"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "33CC10EC2044A3C60003C045" + BuildableName = "labb2.app" + BlueprintName = "Runner" + ReferencedContainer = "container:Runner.xcodeproj"> + </BuildableReference> + </BuildableProductRunnable> + </ProfileAction> + <AnalyzeAction + buildConfiguration = "Debug"> + </AnalyzeAction> + <ArchiveAction + buildConfiguration = "Release" + revealArchiveInOrganizer = "YES"> + </ArchiveAction> +</Scheme> diff --git a/TDDE43/labb2/macos/Runner.xcworkspace/contents.xcworkspacedata b/TDDE43/labb2/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..1d526a1 --- /dev/null +++ b/TDDE43/labb2/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Workspace + version = "1.0"> + <FileRef + location = "group:Runner.xcodeproj"> + </FileRef> +</Workspace> diff --git a/TDDE43/labb2/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/TDDE43/labb2/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/TDDE43/labb2/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>IDEDidComputeMac32BitWarning</key> + <true/> +</dict> +</plist> diff --git a/TDDE43/labb2/macos/Runner/AppDelegate.swift b/TDDE43/labb2/macos/Runner/AppDelegate.swift new file mode 100644 index 0000000..8e02df2 --- /dev/null +++ b/TDDE43/labb2/macos/Runner/AppDelegate.swift @@ -0,0 +1,9 @@ +import Cocoa +import FlutterMacOS + +@main +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } +} diff --git a/TDDE43/labb2/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/TDDE43/labb2/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..a2ec33f --- /dev/null +++ b/TDDE43/labb2/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "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" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/TDDE43/labb2/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/TDDE43/labb2/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100644 index 0000000000000000000000000000000000000000..82b6f9d9a33e198f5747104729e1fcef999772a5 GIT binary patch literal 102994 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⩔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%0AxuB<2>mJhsM6f2C1mP1V8w%&T8~&X;T9 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⪙}wt!=@B z1AmXTN1*5KX$DO9e;hNndplpm?d*Z5L!Txr%{>wEXR{h()0D>R*Or40FSfHa2)*<u znBj%md^^SocB~WZ1q;5sxTyHw@4Wo}&vW0`_>2A*LeJ?NTm(LFx846f@B5zT|DMmU zx4UEV<?u7v|BKWaEF2r0?)x$62yPKOZU71mIrnqhZVFE@F0pB}j22%}zbF0OzTfYx z_vGH*wx0LhhN<8!eu#`O!1UJPz<S|t)2qL~(_JmO=l+&y2@lUNk{6MFE%?cCh5g^& z1~rCXzke*b`B3HXw0SvmST?AqS3PR`HcdA=t^WP@y7$+9{`~p!g%?I;7?H)1b9dL* z^>P&t80-5#7-Vr+b2{9+CiWn*d4itl39+LUri=zR+9#^ZXI4%6l%i+d`B#`>v;Du1 z{r2WJoWs9?GAeS3XVT1&$F}eH-S_)=&Dr<bW_L{4p8IOSy9395DR28yo*;06<-h@% zRb4KXmnME%qH>h;^yFzZ8IN7QtN*b-bLNaq{KHWAKo!hrF;k|0X%Eu>u0GVA)w*fd z!Da{9Ycfm3<WFqj<zR|pDRAHmnY1jHK_IqF(c#mKI}e!}mh8+q+9i5?&zGh8e^0iG z$NgA$Wcw_baj^15Cy1p$_(OR8*YN+xpPik(^MQO<&8L_@=lxigOlIg7nYq+Z$Chz} zMW1o{ql)kIr>N`Qdcu5nWAgDg@_#SN=gyop>(~5lW~N^7env#`!qM0&u;cZ*-FAky zwsWs>r*3Wfe$eboMD`Mqg(ctRHFz#8Q)gg%k)XQr(Yk$iE1uuK^rvrs_>*7;OIbNN zIjd(glIwnG@BgIzep}xWjP&(G;K14a+xP!{yZy)PM%VH`-S7T=c2ny9f0X@{ko3fP z3=uZ$bJSJSKYLhKyPuj|@$Nt)^XBXE^?wiE-CcfvV@1LR518L!C6|WN1MT>qr=F{+ zs|SidF>QPvslH^&SC-d2-Vfz+bD7&3)EL;_G|ViiJakj|;wSF8S01+9+nRm-&C=;{ zze@KDY4}xO6x%vZEO8YNTW=S9<~L{j`(f2vonN}Cy&E|KBdeS*`7^Nnp7FS_E~n<r zd>hTDOJ;o7XwPktmY0|J;=)4bcmMO>`z?5*^V+8W`r0)UHdr*M99S5s%AwKba!n;6 zN+eLGfWM$x$&9KNe9<QA}Q&9%LIu5jkzGZzab1uV9hSYMKz)4-k~CTYzq#kz>a z$>{`NigC2==RbK@*MB-c`TO3|)j?D5RKNZ`@AI?&Iq!??OJ6_xH~;(I?e~73D?exb z>4dWV0^Udg2L?tKD6ycF#md?`-e3Or-e>*we-`Kez0T5*|5Lx~)pwN!bp{#M#YW!3 zTm|e7!v8KD()=xcet%Ep7yaCuJn>(}qwB>!JnGi3Q#{LNC-lu%5N;>~BTJOSgKN?G zdyQ(}n5%uQtP@aYo8zouwLgQARj!F;21CZ)=Z*EAkM-A`{^i=g|IWXo@2mcPy>1Q4 zcK@A!X&jh#P5GgqVgmychXR-|Fk-#rUibgwt?c!&3->ckW0@ju!G2<KF`MgikxH4F z9lBpu{N!-R{$ubrkilN+{-^c3P8%NUXAHT0`9Aa7CHCx>$}V}T+ZJC5bpII0;4LJG z2!V_s#=F1llaKYhj;s0T8qabj|NH%Ea#3$SFL9W|azcKu8f(O?kOpgpSzp+%pU-?f z{nGv|UH@FyiS8EDkGoTOQgymc#O|`UhyT8rp9c$5Q0Qh9G|tZ7_j7&t`ncFB%oZ>E zYfnk<c^3X}?iXvbAIi_aoMI{YI(?}r%b(3X;lE1T+tn&X+`q3&4w9LDO(JyNy2r=+ z<!!UCt=U-o?99&XK`VQ_-|9ev0vsL}QkYIp)7_nWYfGm2-fy?E_nlh*qBJ}I=EY<i z#Q+mQ1x7W7B^Qox%QI#?l8-BUHIJd7c+GK7#`|9vuDDuzb(0;}hTPlRPJu@HDv!$) z^T@MqP(zBoMm0f??f=$$-v3o!yW?woXYI|m|3Bt2sQ&Z%BpX_G>HUmZ5wk)MoJ`m} z&;I$|ScU(sU-VZmPXGAj^!iQlEH<Z~NBq?|u-yLdOZz4JxjtO@b~o4w6eQ3vZ%h-| z@$s0n{q%ib@4x^5_ul>Y-;)om-)3<x)z;^^;MoroERS2UJ_>zgWu6$p%zb43@>BZ` ztzWU*_D^8LzUY6!(HGqr-LhxeR&TT8D)9fMao~qZA1iXolZsKe`>Fo+mzS4IU+-W4 z<M+0D_q*TTNB=i<dpl3&LrcTtdRN^(Tho8JQH*v>7q-~%x+MHvrC~AKt~C+csx~?N zeH$Aa`%A+i`j^Im|Bn|lD5W?e9KT>AYsu^SUv~O;f5{71`LkHu>@V&AJhfi^*F1)d zH|%F_@<ufDGw{q<lWF!rKey-K(XcQ2)tOh~SueOV#?}A*`v0;?|14owgn<byTvsYz z?^k1(!hGb8!_yh&E{<C_Z|P`Q&$Io+;fIM|xPCmJ7610Sto*Dmo%MnaPdDx7TCguL zc$tsn-#44j|65=9_?Ya(SExxNf$8(}^Z$4A*L`U2U)o*qk*j{s+xXP`zt(R${&X_q zJdO{_DNF~1bOnBLIB@?F;FfDrXW-iP>NkhOtqu8~7VO@=ds3eAtm=cT;xSY9@i#p8 znW&YEl=R*xHkKTJw|`FMvzh<Dyjs2fS^0OZll>>_e16%6aqfH1a6+E(WWC;{C#92i zs{LoYX7RU1Na0%SJMT}I>q7eOGhevAJ@fK1ud2Y8^K2?VJqC>@u$uOHio-HGD0RPa zYg`+>eP7Y7%;mA)FL~?#^xC&bxb}FB(1GN?h79pv%kT8|H#oobV^m`(TmJ2xeVEUe z+An+7>R<F{4mqdJxa#ZH?CaZXzg`KJz7)%l&1dnT;qo41B@`PZ8%vhI+jhR@nQ^^g z{=GeGUoM(EsWSd*`J?p_Q~n(1WQc!yescZx_cPg#2e!L9oRsx`&HZD#rQ7*$Q}+hE zIC@B5;i`DYm*p;2m$!G>%}`^O%d9n$Q$(_%SGVALY<X?jyE{8)Utbd`eE;%q+db-x zA@^VIt<Ab@W@z8RKkbQq)|P;q;my%66h8(SG5+uAUialSpTOFW-i*hW?Ak99kh=b= zA*djjYR6{q?4<hqJ%wjx7_u*~6GJX&Zk%O$X}#;;@iQ}x<s-J`%$!{98vC|C``^;~ zSD#rNzbeJA68B{?V4RQ;RrpYuVeOCLyB`fJnG%j)n|J%~)o1@|njF6VdCV}iua9qS zu6Ed(8Nc^^-}`>ihP~g8Ho;5Z1_q|XIveut?mF&o`E-i>@+bE_YxbOa-^p-vht<dL za}W4^lC8Z~dH3xRF@Xf81*~-)r8X?;KMPj~*KOVTrm)Le_5a@7Txs*XH9E1owiy4d zJP<Em{bu9yOm>unYw(BZWzwBf-}gMX4cCp@q9JNM=Snq`g4&-#r2~(XKCO4Te{$dB z5B3aw8{Aoc@HN<;+JBob?hE%?v;7Pjzg!Pq)R$YQy=v{Qvy)W4t@QVPxn#fR(<$x$ z)>}71st{1hQfN5vfx9HO{_of6OY{G{zp<xs^ZnDuzrU_KANM8h-s8FK8dYCsu0D6^ z5R(tXmJj^fpDg@2-NtRd#1V1+y%|&XHiY~xIejrQeQv4yF69UJz4}~@k>Z?#XW{{8 ze%q3(Yq#IqRrvJO)Sti0)&KmguGl;O`wfXwx5`cPueZNgbJJIu(}3}Uhkfru+vz{J zWhd89|JyXdpXrFW@O0Z{uY1k!z3{ouT2TAz_u}=u?_X{%M~ZE?bq>3p{{Ib{Se}1< z?ha4K_jmu!yYv3y=NEPExsSj9JI5>IuJ?wc`iT!i&l>rPi~2im&G}>f%T=jfFz{~e zRq?qcU-!TM`F#HS9Ul&H+fTM@-cprP_$dRaI+Unuobu)WmmcGDJJx^q{{N>g=HmPF zpTEB?>^b$(cK@lk+E1%C_b@Q-V<}+yGhuW43;kcGXZ`*s)o{yJ?bx4gM%#6pGA}PX zb!%((ZgHImgXhljzb^co>XjO^ulN;GA);VV&{(qj|KH2Ye0OWA{@)i7zE@!SH<8Kp ze=GM}a0;k1?3p{c#(lm|T)Fi|R@NB|83*OFWcg2a)?N(wu6b?mD}ClA;>*vOW?wrq z)3*9sYo<`c^RS6}$i>tZ%@5CJ=iAMi^#A?dU$0hsy_oxBwanyt^?$QiI%@B!`7v1B zEMN24N8*|mlS<~=Pm^VSJnrb+x2??f-AQ4FcjbFEwylldzi*P=>?<=T{f`IjQ4pW@ z#`xWQBjgAd;aI|*bKYmZ-QWDn@poTcn$)JTu%C0E@PC`Cn0Y_6Uw(h3Y$TY_DJV3P zK|;~~MN_+^@V|&}0o#wRC^}nucUNid{{Mg9Z}*vJ^K;{5KdYBa?|V9s^W0ZX(5B9Z zXJ#7z&;C_hKX>IDmwTOi)fqn>i7)N{Xy*4L`HSa-Kha4nu4)W!7x;HSSZKBL{O+XP zrwv!hgy+Z0F7|9#KEJN&u=Tx<eU<LArB{C6^>jhhJq(Svm~L;&jV}E6^LhNYJH_Wq zmwmtb@znmwzZV^`SNks~uFjYxKjogF@&T3u9X|u7+Xbk9TgtqtZ^n=5(=K<1roOwg zbN&3<Z#VVjicTn|r~h8ih3xp54(aL7cXjLU`*C^yzpv}JuZ`O3)wxHV;nbvmH{z!J zIIjKwV^_USdb;D*sjNSY8`l20EPE&Ub9ZCBj!p3k@hLx)CQr9rCN*6@{@%=gS_dwJ zs<dkl{94yS+pQpPNJuihO#T;b|NrOt|3?@1+wD@VdHkR6{rbr+|8oD=*}p5Sd%y1c zC#~PMd+$HyHl7xmF6qd`y!V%NQ-<3W=ic+pe^%{N>nvH`asA@THKjiJGSa8=K1<{- zetSE<;$iFOKI?Zow1a1&v@Oa+UhMjIEBpUr-R*ZaE&MM1f9?fstC!_>X5E_dWA!_; ztESh=c_#c(=b1K_HR;jzVtrj@PX#;iM=A|M6;~g#G@SDLCi*#4m_h3C4ZFNMJHCB+ z+8}TD>&4>#Mq4){7g7#F7pDFXT<rGux3HhZLhHTpeV%*PzdN2{ulBd{)BD`Hf3&kY z!~Z1jTt2<teF}p-qeP(nyIK5Z`y^JpG2Pej!u9CpZo_B#e(x^-c*Py~>)WMwlE!Iw zjvr^t`p5GEkpLtdnSP!59~vI}b-udqtR?%GEd72r>aX0b_j?~#zm4d7yl3tG-M{zl zT^y1eSvpNnW5MbzIvg&H_c<R({0=GGz4&%a_?K69N4N1xn}xjF`FviupY7Kx_y6CV z|M%vbEam@5{xM);wX(7bizzy(I^FKW0p{74%hRuV{dqj~p9SNC?!0@~#6Ki$(K)$a z)vY3hDWS!lkxOo$aAoPvImd5^pZ5Fn_(#M#Kc*%7`8F8Uiaa=}8N6)H`d;KtjD#oC z%Xc?gU!LBiU;n66ecQT-jY@HQ^>@FL&;Q#W{x9@fXuZ2X!;C3U?h74x^?XaBgMxU$ zrFGvT&K-aHw{Xp=b-QEMF1HuF@$JXs{`Iph3Lo8B8N9r1MbOF*fm4(sZy^#~lwZQ* zW4-$=U$5D`?+Ylutcl!w?BssodiU77{hswVr`G5Df4X0Ee#*m2hdYc0HtW`I2v>if z+JE$KpVaeBNjlZ?wQpy!RD8RcZoW2l_qWE#&1rMzt1*6YZ9=XGx2!n;?m1ju=KK4$ zYqwbGvhRoe?#=yT{p{pEd!_~dYIME-L|>c0zAc-{hvChv_|^GuRqX2LWL;nDveACq z&e)5o?-#H4oy@>3rgLLk!NWtp&s)FWQ+)gO?eCuykQ+g3RW@W@T{VAx(J9UQ(R(Ti z!+&u&M1FdovVY#{|NE}m-+L4vmZ$0^cUq6*$;q2~Z@PS=Llo@X=j_pbwXJsjERRd8 z?0-MMS}zq)I{mT4)UAJ4oSdv4zRZ8V-M2pLcR%JQAMdl(L8*E#7%{Ei_v_VK&^l!M zWiO7zUkv{v`}y|2&z=nxU+@3!oXnu|U-xs5<UV$x$-5s~b5-Z1HU5w(j0{|@&akSp zW|j8M@=5EL+&{U0@ok%B`9cpCH1n;JDZf*=Sib7TLg{0@(&a9<rXl6l#%1CaKc7yo zuQ?`}e&_OU-~WDh=6<oZ`dR*EF2kzouPhDU9Y5Xwa=!2Ge}*YLHYx;oFUU~4sBc#H zG4M<G^u_U8l1eQ1b%bvB-R@HQ|J(NcZ$0LB?n?Ul>gxZP*DWucLFEsmL$g4VMXv70 z!_}Lf-1ppbkN<b==2La^*Sy$t-?%!b=Kb66kNci=yuW+b&1HfAf$);wQW^>YN&@q> z^|Z5OU(99LrL3@SU-N=p^F1f4_0BR*Klc)}cl7?0IoxNF>PwR~4({&9U%g(p``za4 z_o`kWE4jU2s8;n^m)E1Y7pxDKADZv}z1rGc{cm69^jdCVhFTGkE|wB*Gj67@Toxa% z|A<Q6`(ej@!#v^JSKckXwJ-5-+ctK&iiFHx8V8zR_B9k=j^~hg&FF&E(vXT&sJ-}g z^5*pO{~js#+iZHe^?F=)_}i%mszZz3x7bfho_##*{S4p7b3YuH(DeAXnC+=k<0h9i z1qQtwDvdwp6h?->3%&Mg_0L%`pI*IZ(CFGHd>~o0R^6fc*Rm@Yx8JY(ZLa1sqaZ0O z9l3Xv$QoDk@#uR{rSgA{-6g60FYj~i5vq#6T3&MK{fjd7|9xKXw#rZX-}d*V`SDK6 z#_Yb$Pj#eS73}io{IISvQc(M%b^M9_H1GWq2D!mE%kS6T=C}E9;2UVvR=8cR>P3B) z2*WvMq|PFDNqKqsz1r`0>r0P{hU=W$_on~JeUBq;0v(+(&T|CRFPboY-1+#)eM3K{ z6>D1VPiAmEx&PLls+g~O4OilNUsf|}ZNFP~yYu;+;&b*(%#hpVQcel4udVgg+yCd& z`K9kS+}c#~GAMTA_0X!LGybf8xBB<Tta_c*_dz*8`+ufK>Hn^%E9aXW?lO68ix7}l z0~&hxzR+&3!qFN1ou%(j2iDd;{j!%~>KDsZCFWOO{Z2nStJJT$`uDxU<Woq=<V{}V z_4xYQcQ2REue-aa^0O6N;nR4|{b~%4o-~}AW%1$dzdpY&vX=!W)hlk`@mZjMQ0hin zkJ|!&1-tf;bK$WEue$_aoXfE9)%$+N9qVS?=Uh;wdYAJ;-4Q|eo>|uA@50sm=2UoP zB_l;y!glU6^X>mfKc83qF8Ss8$nw&%GA+aMNAFgD@B173^E(TuyZzq(qUZj_a@jho z&ow#3GI^bf5V#@Q_~X&yqJ6Jg4eCFB&RL#c8B}spe?s5K)(zgqtIykf_Br0EKJUlW z=kx3T?SFr&bF(f|yNg-W<K#bS`=2NM^=#ko`7C$2`f^DB`|{7<_twpS{e9QE-+R|3 z*PLJd{c_At`4{|cA4@qu2sZ4RAraE<ut#`7-@{htM=4Gh8(tY+>dv`+YisuHcYD9z zn;yO{rt*G|r17#oIon_NMROgbk*su9-H>y0lXcp;IX|z?|NrOt>)@N7yOQiU7aWQ6 z+$&tK{%hUp^T{6ngxOBN6O`y$lKXv*rh6t^<Bysk%lOstFQ(rz{rJT6-n;lOfehcX z_nf-dp7c~Vzta1+-S0P-|2=5t|M&Cbaryt(SN0+oV2Yv_LjTXs+x4<L{@<tRmtFrq z-S_xv=l*1$S93pTTfOYhm3!UE?7Hp`|4aYgxuTo}><$yTa(62Us55SvziIWa)VHa} z&wXEAIQ8so^VfL|dGFXXk{8RuQ-4A@OVFYE^j(j?Wbb-)fA*i_DYkKYzl;8z@k0CO zbqRkai;v-7w#{?+aHQ$Jy7j9s$&saEENrR)Q$l#N+;dtS1Uk-ZPZ!-9w*JoY6(`lF z)~YwG|L|I?e(lxAd)I!yKJOjdiWhke@qZqPzn^QAdTMH>J#rn#<F#P*>es%pU-y5z zl^woBRqe0e4bizL#8v+nDji7eUqAKF^OJRP@>d=wDzm68Na<p2d?--xXnpPRO|L(; zu2~~<-urjQ<D~elcdE@D{^T`ezTC}tZ_{N5DMVc@utITy-TnISme1#Wp8EUU?)+Mh ze_!KF)ZQ7+EN_YzGYzY~7Z>>Z^O2@galsq&1Esl{oYf|%r#Wv+E^BcR>Nu}IU3BlO zS9`<bZ<enq6>s=u<9G3Q!Ig660&|C^L_`Ky5$_QG7c|MJA6xtN>S?D(?^W)G|B+1& zil6qw`sMYA^|$W*F1hqx!XMPz50DdLRQ1>4;91@vTraCUt-EjL{u58XF3L@czW?v? zT?Wy=OB=pK>i%8Y@cZ)it@Et1uB`a`C;>TxM<iTb75d*O``ViQp7(XP>Z$&(l7FRg zmvi@`$v+ON{4cb>Rlo07hzR>HJBvJT$;P0@eJv|XSY$cg>~i>L6KuO~SJC=iNqaV} z-?aXl_+3GP-+Sl2XZm3G`yCr-M9$yh_nXb@v-9)kPxy8ksq^n}`&h4Z{rA1^Yu~>I z?ZDcq8vb|gj^`)q_q=+~$+&&zI*IN5!rYg>t2q4eobbn;_ms01C?t0km$f+voS2_o z$aLW8j6K#1%g?AY%=vSilWA+E(81rA_N|`G*e+MKVxPu_w|&;{EX->?AH=s7FGh5M z3=Xk?+KtP1yYByW^L$;|#c8_HyY5#!=H=9gET1GNTs}29=)H^mu^a0*g}*=kyVtXR z-kaxNw@8bzwD~FcpK8lH|Aw=1F6*b~vxVz>-*{gMzIk%@<a&31rXx@6=QDhWaDBhr zit$2qy)^7rgYUtPIq|KlLPUFnB|?DZDNE%F|L#&_@D<({|sd}h1et{02qm#+Sw z%e>>2yzrkHKUT~9{&d9Nk70`Hf0cjAPkwG+E}u4U!rPahAO2XYKf(TaO!yZmuv6uQ z|1IKdw77P=s{YpgQ&YdxGUQHH^UeByWx3tf^QPBhJ|E>2R`c;i9_ZE8*--KEQMBE+ zjs16brktF#E+j1JT}#Zx&RvTpRUDsj$NFP=^cw4r-?!b1w`n__`MtLLR)oL}T_(SM zWv35Xa4<P4*nN))`x51QCD>N&qv1|{?|-(A0>@YFxvbLAw{*XlLEfDm+uqkaw{EX} zqAdUO)s2nG>PyQI^;n~rkjM7#_S5u!-T82UnLj6PSIJ7DVqL#qvU4{ace(epVyeB` z-@NZTcJRNyemp2PJLXf>o5ei`CU9GPl=>vQ*_q{)z=`?we*cn79=)5P{_U$D%aONR z>#zRqoBWP##gZrc|EAmjzIk%_ysB5zFN?GGt$qAQ5|QvO9AJ96`7d|<kHhl+?wara zc{cP{&wjht^Zl-`o>V$D`O>;glPixdO0nN|bmKk$JL~(Wmbre?XPIWJy?~{Iwb52{ zf<61(DX-^*lr4J461Oo!$RT&%uler%-?tUUf0W4mRoCFmXSw7rXq<W{sD%(8rX`w- zl<qIMfP2SZUo7sgdp*fpFLFca>uc+-t`4^rEH9a~j^$owwa>G;f2@Cb?N7G5_WMIi zQ~%->M-BDEt$(sN-c_BT9>4qb4jJ}FjS2SrvEg4<Es0H4fA4i>?uF^9|L1XhU};#q z{qw$0$uGK@v}bXEcK?`sZV~p|VdTrw<9QsZj?GADENQKO+01YEW9^r-|Mbht%F4di z9h`se2Iqd^67@G-l}7KE?AO?(oA<o-=o0&BizDW6biAD+cte-Tt0qDqL!|LXP07uZ zl|6oUK6^GS>TJ02jFZ9rz520=Ij>v}{QLbre&@$y(*D*zpG>x&Zzr`Od~rgd9HLQS z%QV|OzwYI~-|zqDhsRYuUH$Tq@ApqnPtVQJ)^a?*Sg2C{W8cSDb$ia*Z_D1jW9|3X z$wwaVnq#(7uk!9&7nZWw4U^a0Epy;&aj<9lS$v6er&)0%=k8NoUe9Fb-mw0~$KbyG z_={Z8tyTN&!c1TFHGGj}oC@mx#Da!~lFrO9WM8@wsphB-NI2Zad;U)4^SSr;|9Z80 zx~R%OzjLxvmsFQ3%|AZl&G90c=d~7D{|l#fyed5TdSky4({5jflf2way=oKe^<&qo zJ${)Yn|x{Al6xm>d_E+9l0RM8v;FHonc6w~DqbvX54&`~Z*9$E>H9Ojfc9f;>J(Pr zxBB7-3wc=6c)?ZHOXffSUk1%m?#|o&cANdu^FPX8bN{;}G`V2v)CJb7WY*s~-f}Nh z{ZC&WxY=5}JobG-&egpcJlssY$_tLPu{OGio|r$swzJ|rr*>fY?8U-ACFZ^WHC*q$ z&)uRwb#MH8Yq{upyA8hOEKBw)@BR+zqE9q2{2+hH3@IoMt4z>4lrzu1{vYrB-*=wR zi`Y?+IQ`$8_+NAO_bpSgURU|Ze!`P@>n|(~+k<CM{<q_O#Tk<&ReW7>9{+S5b0ip5 zO?5a-HaYy0DXnd9v9V=PedTv;?iuTy<w5h+|5e_7ob<&`w%p>~ionIUf<E1^`*P8J z`*M5z;!jsr2LJb-C1J5-qNAlbJXmJ3Tw5Fc{k3KBvpXecO|R<&9@<~=F-iSlm4qQ@ zd9}~A&@!g=FRpslMcU?xe_#H1<+`KC%XZ$n@tgl-{gnlG44C|uNj+<^5M<$E`Sg6{ zYrkV#J$){OUYq65QsJ~<p2YU=|4MA8*4~l0{Ux0FOYY{E(dplJf4SssKShmA@0IL) zCT@6J&0#OoOWUiv#N#R+9tW*vnP2f_qWh)Tf6=!u<^HQY^mdm}(bVKc?=}hliMlwM z@z$}&d-g8={yteNtMJXrw=w0`f{kqg0ZfOR95!=2IUjyKS?S%T$=_z2crMKJQ<kAH zX+ehd`{3gNH;)%hNlv}9qwtq-)708;H<y39`@Zh`k6?e>ufoD=J{Ey<kz(p8)9Uc` z^NR1+e!pA$_v`ib61G)a)_==pR=?HdbxL%vm1n=9+9y40tB2*Ww~uam{V^iz@}uNk zF}ZL4y4UJ(m~3ef5*K5c<*87AZr46%p?Pu>giF-l_We|G@cDK6)X!~&_pR2wijw(# z?&*VO{&n;2OQz2;{N^41>yq`Q`9gat{`~mp{*~u>JS?gh8cVwWKjydp^FcQL@2ha} zy+5DL{^hj)-PhOGt!I`Un(MCmBrCXQwNT~NxfiYr+uFT5{`*}2?6O$fb&JG%6CD?5 zvaCAk89YZ*z4JgH)6e4TrAKReId`iwToDugw@2=G%(WStOzoGwwtAfvS<d<*I?Mh; zBY)5TL*n}k{{DE}|DWZ)xPlz4hLOl*k~Yu#b9Q~**VVW8ecQVJuVU@O_~*-fXRqq4 zU*9bJ%I0TS)4FXEbGJP2+<)uyllbs|$-7VAYfrXuyVbJ#pHo66FQclO4u{EVhl`)f zmmjgVwb-gzSl;7V<MS@IFEF|LRiS+0eY>{v&Vk*puYP*iE+2RC%(pW$jgQBa-Ar|# zTXagZzV1OI`@Gp!TlHa%a#*mGW!J7<X8XR~%KrZ6)Aao{f7+z;BKD=66jFT-nj;A) zSR{Wsulpirm0a?t_4{l-_LqJ?zM{zI*JH!bYmaUO-`@GIOo@qC_ra4T3;icec3vRg z_^0yCFFw!mTke62);+m*a*uHB)!4H7z`M7f1|AQc-9P{MmC(1V-TrzW{QLd>{!14x z2JZax>Gb!%AKLA0{+>|o|KssXuhH4G0p2^vaAS;p`X7|$KF`kEmHBUO`MsT*wf2*Q z{=KvR`_jM4!f(agoZV+jkJ=c9+paVGc>eTPmA{4YA9rYF7e@Q%{@(xY{yitoMm52J zq(e;(t2v&WPrv?|<<3`|!t%Q(_r214F3k9@`{M2F|60diBtHxMmUTI(SM%rkCFl2V zom=^A=HkooA{JS{zP#Lg`7Yyo@4vUy;TiD41g4i-|Cg0a{r|3H>i_ua^`FXL`l~HB zQ$JJb^tLLn=VZOlmDsYT^;MCd=6|n@c9k{mFZ#N3$C?+eptQcVLAZZeoxmI$CdUOY zEZ>?Pt?BLDC0ucI#)s#n{#+F`cGuooh3Wjhkrf=-eLHFIa`mrAcQdcs@u=(Xz5oBd z&!1vvS8%KD_uF!}r9l@9;bVl2wn__b|GK^=^79FA{k<mdr$y)e{QGwM{kYd!`_EnE z+%ox%jg?|}wa>L=OSRuw=hd0Iem(wnZ+rh*JKc4=Vfk=NOT*;8X%z-G94t)^|L&C8 zx=r0{rCEMRE_vRA<D3n9&fne{`@4MhX}e{Me{J3I?vr2Oec20l@5Wvff4b-U-uJTA z4_n3k=2?}#;(W=?cK%-W`n}6CnBi$IL4sx1rR`t;-~V#+uloFoN1e~#?|eSb)ZhMZ zNxR*#8F???zxu1QpYL_bP7SM*dR=~(u0Aj7N$sqi!*Jn8&7510?7I8bn(6l0Zk<=( zeJja6m1UNf11CE-(^{Pg_QzxU15?*~9SbeHB)52S)z+OcVvoxzZ~p#ncsj|-=YHkN zHLl59LmuC&et&n`zbgsVzxuaZ*RESv^zY~M_oW9}#bpZb6dvEJz4g3bz5VwC^B(@` zh7I&z(ch4IdfN2MYk%*bGk@Cdce}D*I`i9Z3EloV+jBC5*Q&i1j%6XcPsM%Sbz8K1 zQt{TKS2_3Idgb};afSTh<DJLDBD-%_W!?T?`v04l7sr-{hRK~`6&f}yELmJn&X-;n z{k-Xw*Dcx4EOys^&t@p7zoYgpJoS3)xn!vz*~MkLeH-swU)IknQ*eOs?aOI<-fiFe zHuvpIZ`SX%-*?}){kh>VpY<cq%DUU%@0Q;WzEuA}cy;w7SVb;z5!|}lTK4u<y?6Kr zah<3wFQzV^SCw^i@ArGV1LLnP@8;Gl`&ySdf9@O!>s7XD7hO}gKK0x&x#s)MdB<m5 z*!^b3#*J@sAKTU18UC7+91_`mY@@=3O-!|(&Zq61<RqAGvv$pUpBH@Q^s3{X4A+y5 z)))DFO16A|dVBEQ-#vk;>!lVSEp>$?uiX19*W};zjaP}dd;Qhb)w{n2Hho#netem| z^N#<V>T@PMW8<^7@|Br0<(-Db#P?zb@`B(_eB(6%kNH>c&)PTf|I9CP56WM@`n%}< zpJ(Rl?Y`Yee*Nt1?CTTvRqWXPeZAn;wJ|$4X~+KT=eJTjTzT`WM5tc$)H$p5kL`(> za_0E9h_X%dk5}~kiTQHl%Ce&ymv1WuHQl1T4xDuHw$+g1VfxD<V*CE?H1%uitRur? zpH^M3aaxdL{oef8o;AC|boGw!x}CfxG;F?|Q@}-@{r?W%-;n71{o`@@`*z94diDn0 zG4~abnek4_!eFnVg-WlbP3`#uhRMfzELZGOgiRATID=N{m3n%8h>zM|_xI713;OX} zv#!3H9$#1KyQ{js*6Yi5otPaPygloF2_Meg<@^COPpbd3_phF~>(--Xs*j`Q+*p17 z>7o_ec1%<Kk^0v4_ZQ2fD~h|GuiPcReYc;>f~Bl;Y_@!9esWMTKq=tMpYqvBab>gB znUi$9->~0Wmwe>!uNfO{x2;@rG*|C>*Q?8qa;vkfuiw5D%P6`x@k07PD{Jf9B~u-q zmK=BZZFpS9Sj$(aXTDMDsk)VQ4zn~YG<=18<m~JI{L8e}@D<r(x|Y4zy|J<r(u}^M zK4IU7@@TJD)0dW}&RP&Z_uAH%{~s)U$@TYD$?Si#Sh>a4fC`6gdwx9Xp4%<1|L$5j z)6%WK{%=+L^7Vh|EFKN7oX^`f?YiB)=+>iE>`Qk|F8sbzZt-ca7khhe?b)?=Ud#R8 zMPCY&eRk{l{z;yHN{6F|qtS*@LXdwJd#8h1z?bR=+ayBuqLL52Yl(jxv(Eh4?HzK9 zPsP>7T;00EcKvSsV-epfw(_uOyD=~bmUy~2hE$%s{b|>6&9F<yxo?$-H}045$hZ44 zo$Hb)TkV$xzLPmJn-<vq-P-i6<oLlCpmA&Or+b5L+htBloNp3npyw+UGCky;_FCaf z;u7!XUgKP8V|cXl?c2A%m+Xk|5`J`0QyDxJzhOD+C6%9TTh?8^b@Adx#kJC+!A$>` zf06v%n|XK2so7@v_vZZTzOzYH^~LMy`tkefUS3){`%?Ow?aTCUzxLP|9R9p|{e|%V z|7EPpa=xzGD>wgN{?)lvtl{rJx36ch(5sBC%`4W)3ZDNv_MN_!q<&Xc@owST?O(-9 zWBLnsUfU^RE4Q`s;x-+Q9*@ST{8#QO9Q;)-+#-MNcIdiIpW2Y!*}3Di;i@;Gw|C7s zzDNIBXqm0scJZTIJRdG;xSiaS`u4Q9&Tikr1#b(Zr>_=fo2B3(%wC&cVAHw4ao1~w zy^X7mg<QMZV^%9Tao>xAM@KrRnkX*FUA;Ol+h;QK)xRrrYhxDfs^44bHJM|o$Ze6W z%Vx4|-@3eZ#roKAzf0fVu3T^1o9X{sdhKT~-`ro9yX`W!u3VG+Mel0WuFDJadrsXt zms=>WmF>APs^D&NaQOYYRm?w^zhwC$bMf=mmwtO1{Ut85{d;(&Fze&<>2}?5ca`>n zrojH}o)ni}zGC_HBeJjV=^dRXn`56>8uM%aBB{G;|7Ln}mZy8|u?}Xsw=}fgR9!ZB ze(`(1w^^5G<hib0xpu92R!pf;bl}PITjkpqy^8w!KRDlMo#zL$zxGT17k~NR{J;KF zX4Re~E4R|7n5SDp&fk8VbtLL>*RQ1L`czQkDDdvvzF(D3QnzbXU6q(F+kLC+myMo% z-|McZnD;Al?f-Aub-R<JM}zTRM&Al~bN+39jf?Jg-&nTkwchi<lXGt+^`w4Zc{cl= z*lWGxGp2{W&-ZmMvnt=3d2w6RCyCpum=Dd^wClF)UjOT-llDG7we9}YZ?=_hVlDHx zf!A8Ch(B;L>2Ea8*%OU2+xKs*tY33{)44leZFcEzd!BmrbeQU^cf~t3#8kf&#su#F zCVl*eh3m!_g)4ORZh@ATRk2naJ{`>1c#Fw(zj9u8VCwo?i%<FexcjcEXXBgPD`D5( z85%xIy_&stWp#Vqb=j?JPwzeY>c_uRu79`Qy7D}^@=n6zfVb%zj;C9Ln&6ESl?_5T zQ*YLF-TIx~{a5e0u&G*K@m?J(!|?s5w=VjXR3B;iPGA4|^F`^iZf$w8arxHg@!yY{ zo#N=JV7zD2|6@4=Ln)WY-*r3IYOGp&?G;OWa*SS=Ywp%<oyWgy+jutBHfOr%)*W#n z>-b*CKK{2yH(!6%^sSZgU%&8|<=n|zkSfhvVtovp1K-p&-kth`_ld>dUfoyyxf^vZ zMwH*Y_;;Q5v7$HS@o&N>tvh;h*YPP=@5&|XWdHv6%Faz@b#cerjq5gveSPj77;V>P z#iSh8V7^uPoBMfY`6UiF-}ivZs9({^o8A@4ZSCK4_Un!3$w%$BPjxLkVs~Bk>hq&d zH_hk|zMI_r>&~+o{iVB;*6y=dw_=a>ZLzogX5i4dCVXS+la1H5F~96iPL8~_Zn|rK z=ikbmE7on>VU?(#-ThbVd1>zT_}RyQ%rU)}Du4a!q6pbLzx$7ER%mdLW!j^-j=58j zV+x1J-+xEUrYDD3#&7+-D8+W$)Tvw7N7Yu=*X3L<<<ql1wr$a-+etD$miOJh?s!p? zrTh2m^jzy3Z%=)5w+8hj9f~>McwM@2f7{kypZ7()U;n1gy>s=Os-DW~$h&X*3=8$M zy8mumvvK3R>80y7p8XxR`*as19ajDSxZ{SKBqK`}#|O3@Y<#gCJPr$9lxuF=DYN*L zYw7mm5|eATU%$QVqtxo98PZ#;=U4XBx~6UyJ-TVzjd|0%UuAt>^m+BxFW2L@yiM4q zd5a&iq~)x#!Hgpt_vdDPeO|j!?zB*eZU5F^Cf8OUKl=9W^A(1E$C7XUHLSXmaO;uT zMw#=0Z`U24F@1IOC40H|R)UNyYzhaY?=vPCiZoiWoT^(6S|9Q(_3G(cSK_o6e&6PL zQJA4h!}ae*UHQkm79V?-dc8X-XLV@Ue6jcYmv1ZHyT9!F^rJQZQy;hOs`ZyGUm?%_ z8#MXZ7L?$xTH0)xw>J0FzCC)IZ(NJN`FCs5o71OPP2ajRUtwd0(SrSN|IV;I_jQrP z?T~Maaw7#C5;#~Yl&x4g-Y_)^HEz1U{>Hnaz@A(!@vC?5#b439Hv3O@&Yk#3+ikmJ zM7nSNiAb7%Dk>>HaPJ!5w?8Mn*M8sswXvu7cAy(*?lnWMu~B8x*FIgT>D#Za+O6Lo zboO?V?KIo4+>LwJy!*CjMXlw<?{%T&J2RxWKK<)jy8Y;k>7myj)qcD3L!6PN&85M7 zkMp4uegZGT7rZIg-6lTu?y?!vU#}GJ{kX5|*B6IZFZ&<IoLl^T{`S@DRKGp{8dZC> zxBCCd<45<^%&&}J^L_h#i!zH-)xUlm{y5`?IunONfZB%T!n>>b@893C>E9mPYsryz z>#W7L?p&`iZR^ppsjpX7$6So~{_{`QtBvQMf<mOPyI=OUhH}FJ0j>|ria88#iZU?^ zX#Bq0{Z`L9>${%zu}!~|qSqGP3tt_#<$YA{yKcj2wQFuH+cd4}ca>ZIfAhTUdrPZV z?yu`#Q$FXoFn9&mEcXTXo^0A*2u`&9sVk4}I^DPNer}iE?)zUQUh6)8{Hf}qp@~}G z=NXG6ZhzYJDsGSc^-c~2gC3?mH)Y*o%6c8<GHtEnPo96e@7CVa%$<cfkvD(${mqm1 z(2<h9oi+9IzD2ukJ$m%HH@9-<Jj24-jeY&MgTS$I!<dQLSL?Op{rfZa><_d3COS2H z>(2FII<LBOH?EmK;nmh#Hpea|$A(`Cx_0mK?a%o#!nZY*8xG_NJm`I!=kQE`gC}6Y zwfCuSUW0Pl+_uw)W&ck2{P;-miQ`|cKmX|Z_|;qKGdp(hrb3Dcp%vzmYfaa!(a-Py z8Zj+n&F(i6zq7aQ%wLggQ>XLWBJ1*`>(x=!|JGg=KOX4D(3mLpVfN=lJD%O{42`h@ zE526G`hK)Z=k<qm*2lI*l<iLrjL+$Qx+phk|EZ``$DY<+J-GM(k=$3A{mCJEx9#N3 z?|gN$?0;A{=Z!ogi-1Ij!(x?=uk+k*?x?!`ct^yv$Ti|qyKg-zbN!oF-19iu^4sxm zQK?^_dheURXTB8^#~Ve)dmZl-EBLw(=y6^7b@%LVwxIsx<jCdHul1~dJ-o8&dF@ZT z)87Kk)`ji<el=dlYWcry3qck+EHGs$Q}tZCH8=1+IA81hjnLQTKWg!R$z#Ji&mvZz zPwwDQxS+ta=V$H&d6wmk2Lw32eE%JDW&ZZ3rE|mXiM`(Vraizv`r?eJ+v0QEk3Zjd zZQtjOha>Z+e3m$O{KP&%2ZqLnVi{AOY?}9Zg=v~X?av!~@;={?JN@eXYuDVbJs&s9 zbZ;vJ^)zNVG?=gO{owpaMDT`dV^!Vx?qgSOKf5e_;>V(m_xc|P^nU!8b+oE4G`sp2 zc=~OYd%}uIH>$pE)=uu)rkl07CNO?)?!ETpi)HVWl^Ps`xj!u1-dSHU$BJpUM!@^` z_4SXlzFvRTy*&QCMXvFLjUOdapDw%?f3q;d9h}c)8W;K%uy5L5b^Mx?`Hg))gja0s zx9Brs;@C2QA-^X2Mf*u-#{>x$wqH_#?|)PsKiY0GBlpp_Dc}qtAmP_|P~{5q%`}DN zuNLf9br!id%$Yb$IvDa-NIzjen5l4qiOKn6m66Er8=|LdYyZSrmP1<%x*L`YKU!$< zFW}AMZ9;oF6fRt1+H*7arMx~rU*j_22c|1u)}_ob0M`|BnN;4FIvMhSJ7uE;WK|3( z?nYUl@@h0ijHZLpbTC>TfGbA~V!=+<fA&YVEuUoH;u6Eaz`)??>gTe~DWM4fYVNkY literal 0 HcmV?d00001 diff --git a/TDDE43/labb2/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/TDDE43/labb2/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100644 index 0000000000000000000000000000000000000000..13b35eba55c6dabc3aac36f33d859266c18fa0d0 GIT binary patch literal 5680 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 literal 0 HcmV?d00001 diff --git a/TDDE43/labb2/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/TDDE43/labb2/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png new file mode 100644 index 0000000000000000000000000000000000000000..0a3f5fa40fb3d1e0710331a48de5d256da3f275d GIT binary patch literal 520 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s77>k44ofy`glX=O&z~GV^ z;hE;^%b>-;z`()4*q+J20#d@jz#zo{0?Z2-8JNK$j0_A5nBcMk3z!jXkV2Et!cPng zj76R<jv*F;$q5St43u8~|Nno#>V);&M{-U)@^};P@J-as?O3u$l7L#kXB!1IF&zg( zh83rU=AWx~@Dy-kzNX+jV}aVs1v5CF*8KW9f8pa(@@+>Z+e?Ps``f*aWes~8gY~XA z)9?S6e8y;c_t&@S2P0>+Dn?9{jOEn!Xkd*MIr9J8?8d}HXX|;sH_no6jgUwRH8456 zHBsUNZ$|Ouuk}3Z>;EJcFlF_H99t`y!qvu@9``@J;;ZZm$rm~Dk!o!}%l{eK{QTDM zIJ>`7k>#@V47P|4W5Yi`&Ywz9J$1t1`?2`8$MOG-B0d-!SDa2N=hPASf7s?ITgY>@ zvqv_(duQMFRKL#nPv!rqioP%Hnbq5(6|EB38iFLaI<6(8bv*rZXhZeYw6-5@ygc#y z|GP|NFKTe?^<WRbm^!nu)8?j6!@|S9or#AZ`}2efmo3tEyvpp8`uSpzl-)a}8JRC; xa!#>v)a04tk<c|EW5VY3OvaZ5RSZwfVE9}5t)nw}dKf4cJYD@<);T3K0RS%<#rpsN literal 0 HcmV?d00001 diff --git a/TDDE43/labb2/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/TDDE43/labb2/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png new file mode 100644 index 0000000000000000000000000000000000000000..bdb57226d5f2bd20f11934f4903f16459cf52379 GIT binary patch literal 14142 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 GLK6Uo-0fok literal 0 HcmV?d00001 diff --git a/TDDE43/labb2/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png b/TDDE43/labb2/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png new file mode 100644 index 0000000000000000000000000000000000000000..f083318e09ca1b6b8484b1694a149f0c5d5cac1d GIT binary patch literal 1066 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}jKx9jP7LeL$-HD>U~ox| z@J#ddWzb?^VBlb2Y|mt10V!c%V31+}0p<ma49s8=Mh1ojOmJC+1<VLGNa32cq|Xct z%u_sF977^F--e&{7j_i+|29uNsw?;J184s*)>G~#A0PZ*Fk^zlqu$waK7Tx}yb!gO z@^x7kw<F_Al9N(katDiR)5R5?2@I+oA_fv60iO0{wd-$d-hG)DExcMhuHwzPGu5Ae zpRLYM+jgMs&vOoqydTRl<(6#ZyTp;%5TY)6sBY7G&)PLkLSH`3{UZA^_EL4%qLlvN z>CFNK4O`}a$v@3J%isk==6j{ZK@HtUZI*~fKgr>hda~jBZOy0os+uc=PqUpcPd<@< z`>)ovirmZHAI-d6=Vw$L@&0wvQa_5vNh;Ey;Bm6e)58bYGJR)utrI(&JFiTtK=s0d zXHT#Euef($t-sg~3I1x+n2c`=oZ@B~Z0NGOJn8I?TijghOA^i<c$=ZLHR<7nN7oD1 z_?>1yx6F)Zro+q`XWpK)lwY>NxMI>Ly`cL63m<7TvY(dyJkNISth*C9Z?J9V{W<rb z#GZ1qyxSib`@1F!%Km#Z*{Lip|F*;_mTPBa?y)VpcFK}f$4BE$aN#yjeUY-$2Ori4 zvh29UzVgAlC5QD6%+`1=^Ua3!IYZ`qEsus`yG<Dnp2f)csHlFq<EowhLEx#)v@QOp zbbBYQyxBB2`>-u5r;YFPIlZn2LxawpH@OscSybn*QDL2pC+kVJmG(2bn!LYi9h%K$ ztl^;`6!Kv9^$*7Ld_?19Lw~>QV71$wwW!*tv0_f&{F0JATiz7!E`6iJG)H{u_E$F- z>~eApU)=VpNc3#U9=Y}31GZ|<_?h<TRD{g@<eG1hkJLX1C-O^~X<LRb-7s<fHi?Us z=fami&iv8p^fplR*7F08_=T6xJ8t0oAhhIO`zetRrzC6cZ)?h)wP3eGv*L0ES&y0O z8?L4o_O6@pLZ&y-)KgqwrtX@V52W^N3wN(wp-^$|Nc|f}$A)#QRw~bE&X-_2*6z0P zOPy8vrzEQsrgee>ldpzpy|8`YxY@tiG4RK)SEkeM`7KzS&T&|OSxe-;<-E>n3Hxuw zEL-_ed&i#m<Ma3*N7NX%vE=@G+S2&#ouW;(rK(v=_x88{PTgeH&WkImH=VenZVBJS z2J=$859}w!yFAj*3-<_g+8nyyDLGO3!0rVZE7x)@djBZ#&4snI9yDiF={8<l-7GP? zXV=-seU7UwT%xivi<8|JnuuQdt(x+o!!U;P1B2v;^h!++g9;C}@|4MGH@%KMYUiv! zU%c1i*6GPXv$sph3&#{ZYWIu}wD&oY==?8}rH=WC;KzH9iX93;`P9?Z&t;ucLK6V| CRorR- literal 0 HcmV?d00001 diff --git a/TDDE43/labb2/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/TDDE43/labb2/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png new file mode 100644 index 0000000000000000000000000000000000000000..326c0e72c9d820600887813b3b98d0dd69c5d4e8 GIT binary patch literal 36406 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 SmN76eFnGH9xvX<aXaWF^o$Ma~ literal 0 HcmV?d00001 diff --git a/TDDE43/labb2/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/TDDE43/labb2/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png new file mode 100644 index 0000000000000000000000000000000000000000..2f1632cfddf3d9dade342351e627a0a75609fb46 GIT binary patch literal 2218 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 MboFyt=akR{0K)zWz5oCK literal 0 HcmV?d00001 diff --git a/TDDE43/labb2/macos/Runner/Base.lproj/MainMenu.xib b/TDDE43/labb2/macos/Runner/Base.lproj/MainMenu.xib new file mode 100644 index 0000000..80e867a --- /dev/null +++ b/TDDE43/labb2/macos/Runner/Base.lproj/MainMenu.xib @@ -0,0 +1,343 @@ +<?xml version="1.0" encoding="UTF-8"?> +<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct"> + <dependencies> + <deployment identifier="macosx"/> + <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14490.70"/> + <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> + </dependencies> + <objects> + <customObject id="-2" userLabel="File's Owner" customClass="NSApplication"> + <connections> + <outlet property="delegate" destination="Voe-Tx-rLC" id="GzC-gU-4Uq"/> + </connections> + </customObject> + <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/> + <customObject id="-3" userLabel="Application" customClass="NSObject"/> + <customObject id="Voe-Tx-rLC" customClass="AppDelegate" customModule="Runner" customModuleProvider="target"> + <connections> + <outlet property="applicationMenu" destination="uQy-DD-JDr" id="XBo-yE-nKs"/> + <outlet property="mainFlutterWindow" destination="QvC-M9-y7g" id="gIp-Ho-8D9"/> + </connections> + </customObject> + <customObject id="YLy-65-1bz" customClass="NSFontManager"/> + <menu title="Main Menu" systemMenu="main" id="AYu-sK-qS6"> + <items> + <menuItem title="APP_NAME" id="1Xt-HY-uBw"> + <modifierMask key="keyEquivalentModifierMask"/> + <menu key="submenu" title="APP_NAME" systemMenu="apple" id="uQy-DD-JDr"> + <items> + <menuItem title="About APP_NAME" id="5kV-Vb-QxS"> + <modifierMask key="keyEquivalentModifierMask"/> + <connections> + <action selector="orderFrontStandardAboutPanel:" target="-1" id="Exp-CZ-Vem"/> + </connections> + </menuItem> + <menuItem isSeparatorItem="YES" id="VOq-y0-SEH"/> + <menuItem title="Preferences…" keyEquivalent="," id="BOF-NM-1cW"/> + <menuItem isSeparatorItem="YES" id="wFC-TO-SCJ"/> + <menuItem title="Services" id="NMo-om-nkz"> + <modifierMask key="keyEquivalentModifierMask"/> + <menu key="submenu" title="Services" systemMenu="services" id="hz9-B4-Xy5"/> + </menuItem> + <menuItem isSeparatorItem="YES" id="4je-JR-u6R"/> + <menuItem title="Hide APP_NAME" keyEquivalent="h" id="Olw-nP-bQN"> + <connections> + <action selector="hide:" target="-1" id="PnN-Uc-m68"/> + </connections> + </menuItem> + <menuItem title="Hide Others" keyEquivalent="h" id="Vdr-fp-XzO"> + <modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/> + <connections> + <action selector="hideOtherApplications:" target="-1" id="VT4-aY-XCT"/> + </connections> + </menuItem> + <menuItem title="Show All" id="Kd2-mp-pUS"> + <modifierMask key="keyEquivalentModifierMask"/> + <connections> + <action selector="unhideAllApplications:" target="-1" id="Dhg-Le-xox"/> + </connections> + </menuItem> + <menuItem isSeparatorItem="YES" id="kCx-OE-vgT"/> + <menuItem title="Quit APP_NAME" keyEquivalent="q" id="4sb-4s-VLi"> + <connections> + <action selector="terminate:" target="-1" id="Te7-pn-YzF"/> + </connections> + </menuItem> + </items> + </menu> + </menuItem> + <menuItem title="Edit" id="5QF-Oa-p0T"> + <modifierMask key="keyEquivalentModifierMask"/> + <menu key="submenu" title="Edit" id="W48-6f-4Dl"> + <items> + <menuItem title="Undo" keyEquivalent="z" id="dRJ-4n-Yzg"> + <connections> + <action selector="undo:" target="-1" id="M6e-cu-g7V"/> + </connections> + </menuItem> + <menuItem title="Redo" keyEquivalent="Z" id="6dh-zS-Vam"> + <connections> + <action selector="redo:" target="-1" id="oIA-Rs-6OD"/> + </connections> + </menuItem> + <menuItem isSeparatorItem="YES" id="WRV-NI-Exz"/> + <menuItem title="Cut" keyEquivalent="x" id="uRl-iY-unG"> + <connections> + <action selector="cut:" target="-1" id="YJe-68-I9s"/> + </connections> + </menuItem> + <menuItem title="Copy" keyEquivalent="c" id="x3v-GG-iWU"> + <connections> + <action selector="copy:" target="-1" id="G1f-GL-Joy"/> + </connections> + </menuItem> + <menuItem title="Paste" keyEquivalent="v" id="gVA-U4-sdL"> + <connections> + <action selector="paste:" target="-1" id="UvS-8e-Qdg"/> + </connections> + </menuItem> + <menuItem title="Paste and Match Style" keyEquivalent="V" id="WeT-3V-zwk"> + <modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/> + <connections> + <action selector="pasteAsPlainText:" target="-1" id="cEh-KX-wJQ"/> + </connections> + </menuItem> + <menuItem title="Delete" id="pa3-QI-u2k"> + <modifierMask key="keyEquivalentModifierMask"/> + <connections> + <action selector="delete:" target="-1" id="0Mk-Ml-PaM"/> + </connections> + </menuItem> + <menuItem title="Select All" keyEquivalent="a" id="Ruw-6m-B2m"> + <connections> + <action selector="selectAll:" target="-1" id="VNm-Mi-diN"/> + </connections> + </menuItem> + <menuItem isSeparatorItem="YES" id="uyl-h8-XO2"/> + <menuItem title="Find" id="4EN-yA-p0u"> + <modifierMask key="keyEquivalentModifierMask"/> + <menu key="submenu" title="Find" id="1b7-l0-nxx"> + <items> + <menuItem title="Find…" tag="1" keyEquivalent="f" id="Xz5-n4-O0W"> + <connections> + <action selector="performFindPanelAction:" target="-1" id="cD7-Qs-BN4"/> + </connections> + </menuItem> + <menuItem title="Find and Replace…" tag="12" keyEquivalent="f" id="YEy-JH-Tfz"> + <modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/> + <connections> + <action selector="performFindPanelAction:" target="-1" id="WD3-Gg-5AJ"/> + </connections> + </menuItem> + <menuItem title="Find Next" tag="2" keyEquivalent="g" id="q09-fT-Sye"> + <connections> + <action selector="performFindPanelAction:" target="-1" id="NDo-RZ-v9R"/> + </connections> + </menuItem> + <menuItem title="Find Previous" tag="3" keyEquivalent="G" id="OwM-mh-QMV"> + <connections> + <action selector="performFindPanelAction:" target="-1" id="HOh-sY-3ay"/> + </connections> + </menuItem> + <menuItem title="Use Selection for Find" tag="7" keyEquivalent="e" id="buJ-ug-pKt"> + <connections> + <action selector="performFindPanelAction:" target="-1" id="U76-nv-p5D"/> + </connections> + </menuItem> + <menuItem title="Jump to Selection" keyEquivalent="j" id="S0p-oC-mLd"> + <connections> + <action selector="centerSelectionInVisibleArea:" target="-1" id="IOG-6D-g5B"/> + </connections> + </menuItem> + </items> + </menu> + </menuItem> + <menuItem title="Spelling and Grammar" id="Dv1-io-Yv7"> + <modifierMask key="keyEquivalentModifierMask"/> + <menu key="submenu" title="Spelling" id="3IN-sU-3Bg"> + <items> + <menuItem title="Show Spelling and Grammar" keyEquivalent=":" id="HFo-cy-zxI"> + <connections> + <action selector="showGuessPanel:" target="-1" id="vFj-Ks-hy3"/> + </connections> + </menuItem> + <menuItem title="Check Document Now" keyEquivalent=";" id="hz2-CU-CR7"> + <connections> + <action selector="checkSpelling:" target="-1" id="fz7-VC-reM"/> + </connections> + </menuItem> + <menuItem isSeparatorItem="YES" id="bNw-od-mp5"/> + <menuItem title="Check Spelling While Typing" id="rbD-Rh-wIN"> + <modifierMask key="keyEquivalentModifierMask"/> + <connections> + <action selector="toggleContinuousSpellChecking:" target="-1" id="7w6-Qz-0kB"/> + </connections> + </menuItem> + <menuItem title="Check Grammar With Spelling" id="mK6-2p-4JG"> + <modifierMask key="keyEquivalentModifierMask"/> + <connections> + <action selector="toggleGrammarChecking:" target="-1" id="muD-Qn-j4w"/> + </connections> + </menuItem> + <menuItem title="Correct Spelling Automatically" id="78Y-hA-62v"> + <modifierMask key="keyEquivalentModifierMask"/> + <connections> + <action selector="toggleAutomaticSpellingCorrection:" target="-1" id="2lM-Qi-WAP"/> + </connections> + </menuItem> + </items> + </menu> + </menuItem> + <menuItem title="Substitutions" id="9ic-FL-obx"> + <modifierMask key="keyEquivalentModifierMask"/> + <menu key="submenu" title="Substitutions" id="FeM-D8-WVr"> + <items> + <menuItem title="Show Substitutions" id="z6F-FW-3nz"> + <modifierMask key="keyEquivalentModifierMask"/> + <connections> + <action selector="orderFrontSubstitutionsPanel:" target="-1" id="oku-mr-iSq"/> + </connections> + </menuItem> + <menuItem isSeparatorItem="YES" id="gPx-C9-uUO"/> + <menuItem title="Smart Copy/Paste" id="9yt-4B-nSM"> + <modifierMask key="keyEquivalentModifierMask"/> + <connections> + <action selector="toggleSmartInsertDelete:" target="-1" id="3IJ-Se-DZD"/> + </connections> + </menuItem> + <menuItem title="Smart Quotes" id="hQb-2v-fYv"> + <modifierMask key="keyEquivalentModifierMask"/> + <connections> + <action selector="toggleAutomaticQuoteSubstitution:" target="-1" id="ptq-xd-QOA"/> + </connections> + </menuItem> + <menuItem title="Smart Dashes" id="rgM-f4-ycn"> + <modifierMask key="keyEquivalentModifierMask"/> + <connections> + <action selector="toggleAutomaticDashSubstitution:" target="-1" id="oCt-pO-9gS"/> + </connections> + </menuItem> + <menuItem title="Smart Links" id="cwL-P1-jid"> + <modifierMask key="keyEquivalentModifierMask"/> + <connections> + <action selector="toggleAutomaticLinkDetection:" target="-1" id="Gip-E3-Fov"/> + </connections> + </menuItem> + <menuItem title="Data Detectors" id="tRr-pd-1PS"> + <modifierMask key="keyEquivalentModifierMask"/> + <connections> + <action selector="toggleAutomaticDataDetection:" target="-1" id="R1I-Nq-Kbl"/> + </connections> + </menuItem> + <menuItem title="Text Replacement" id="HFQ-gK-NFA"> + <modifierMask key="keyEquivalentModifierMask"/> + <connections> + <action selector="toggleAutomaticTextReplacement:" target="-1" id="DvP-Fe-Py6"/> + </connections> + </menuItem> + </items> + </menu> + </menuItem> + <menuItem title="Transformations" id="2oI-Rn-ZJC"> + <modifierMask key="keyEquivalentModifierMask"/> + <menu key="submenu" title="Transformations" id="c8a-y6-VQd"> + <items> + <menuItem title="Make Upper Case" id="vmV-6d-7jI"> + <modifierMask key="keyEquivalentModifierMask"/> + <connections> + <action selector="uppercaseWord:" target="-1" id="sPh-Tk-edu"/> + </connections> + </menuItem> + <menuItem title="Make Lower Case" id="d9M-CD-aMd"> + <modifierMask key="keyEquivalentModifierMask"/> + <connections> + <action selector="lowercaseWord:" target="-1" id="iUZ-b5-hil"/> + </connections> + </menuItem> + <menuItem title="Capitalize" id="UEZ-Bs-lqG"> + <modifierMask key="keyEquivalentModifierMask"/> + <connections> + <action selector="capitalizeWord:" target="-1" id="26H-TL-nsh"/> + </connections> + </menuItem> + </items> + </menu> + </menuItem> + <menuItem title="Speech" id="xrE-MZ-jX0"> + <modifierMask key="keyEquivalentModifierMask"/> + <menu key="submenu" title="Speech" id="3rS-ZA-NoH"> + <items> + <menuItem title="Start Speaking" id="Ynk-f8-cLZ"> + <modifierMask key="keyEquivalentModifierMask"/> + <connections> + <action selector="startSpeaking:" target="-1" id="654-Ng-kyl"/> + </connections> + </menuItem> + <menuItem title="Stop Speaking" id="Oyz-dy-DGm"> + <modifierMask key="keyEquivalentModifierMask"/> + <connections> + <action selector="stopSpeaking:" target="-1" id="dX8-6p-jy9"/> + </connections> + </menuItem> + </items> + </menu> + </menuItem> + </items> + </menu> + </menuItem> + <menuItem title="View" id="H8h-7b-M4v"> + <modifierMask key="keyEquivalentModifierMask"/> + <menu key="submenu" title="View" id="HyV-fh-RgO"> + <items> + <menuItem title="Enter Full Screen" keyEquivalent="f" id="4J7-dP-txa"> + <modifierMask key="keyEquivalentModifierMask" control="YES" command="YES"/> + <connections> + <action selector="toggleFullScreen:" target="-1" id="dU3-MA-1Rq"/> + </connections> + </menuItem> + </items> + </menu> + </menuItem> + <menuItem title="Window" id="aUF-d1-5bR"> + <modifierMask key="keyEquivalentModifierMask"/> + <menu key="submenu" title="Window" systemMenu="window" id="Td7-aD-5lo"> + <items> + <menuItem title="Minimize" keyEquivalent="m" id="OY7-WF-poV"> + <connections> + <action selector="performMiniaturize:" target="-1" id="VwT-WD-YPe"/> + </connections> + </menuItem> + <menuItem title="Zoom" id="R4o-n2-Eq4"> + <modifierMask key="keyEquivalentModifierMask"/> + <connections> + <action selector="performZoom:" target="-1" id="DIl-cC-cCs"/> + </connections> + </menuItem> + <menuItem isSeparatorItem="YES" id="eu3-7i-yIM"/> + <menuItem title="Bring All to Front" id="LE2-aR-0XJ"> + <modifierMask key="keyEquivalentModifierMask"/> + <connections> + <action selector="arrangeInFront:" target="-1" id="DRN-fu-gQh"/> + </connections> + </menuItem> + </items> + </menu> + </menuItem> + <menuItem title="Help" id="EPT-qC-fAb"> + <modifierMask key="keyEquivalentModifierMask"/> + <menu key="submenu" title="Help" systemMenu="help" id="rJ0-wn-3NY"/> + </menuItem> + </items> + <point key="canvasLocation" x="142" y="-258"/> + </menu> + <window title="APP_NAME" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" id="QvC-M9-y7g" customClass="MainFlutterWindow" customModule="Runner" customModuleProvider="target"> + <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/> + <rect key="contentRect" x="335" y="390" width="800" height="600"/> + <rect key="screenRect" x="0.0" y="0.0" width="2560" height="1577"/> + <view key="contentView" wantsLayer="YES" id="EiT-Mj-1SZ"> + <rect key="frame" x="0.0" y="0.0" width="800" height="600"/> + <autoresizingMask key="autoresizingMask"/> + </view> + </window> + </objects> +</document> diff --git a/TDDE43/labb2/macos/Runner/Configs/AppInfo.xcconfig b/TDDE43/labb2/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 0000000..b56f6dc --- /dev/null +++ b/TDDE43/labb2/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 = labb2 + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = com.example.labb2 + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. diff --git a/TDDE43/labb2/macos/Runner/Configs/Debug.xcconfig b/TDDE43/labb2/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 0000000..36b0fd9 --- /dev/null +++ b/TDDE43/labb2/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/TDDE43/labb2/macos/Runner/Configs/Release.xcconfig b/TDDE43/labb2/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 0000000..dff4f49 --- /dev/null +++ b/TDDE43/labb2/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/TDDE43/labb2/macos/Runner/Configs/Warnings.xcconfig b/TDDE43/labb2/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 0000000..42bcbf4 --- /dev/null +++ b/TDDE43/labb2/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/TDDE43/labb2/macos/Runner/DebugProfile.entitlements b/TDDE43/labb2/macos/Runner/DebugProfile.entitlements new file mode 100644 index 0000000..dddb8a3 --- /dev/null +++ b/TDDE43/labb2/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>com.apple.security.app-sandbox</key> + <true/> + <key>com.apple.security.cs.allow-jit</key> + <true/> + <key>com.apple.security.network.server</key> + <true/> +</dict> +</plist> diff --git a/TDDE43/labb2/macos/Runner/Info.plist b/TDDE43/labb2/macos/Runner/Info.plist new file mode 100644 index 0000000..4789daa --- /dev/null +++ b/TDDE43/labb2/macos/Runner/Info.plist @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>CFBundleDevelopmentRegion</key> + <string>$(DEVELOPMENT_LANGUAGE)</string> + <key>CFBundleExecutable</key> + <string>$(EXECUTABLE_NAME)</string> + <key>CFBundleIconFile</key> + <string></string> + <key>CFBundleIdentifier</key> + <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> + <key>CFBundleInfoDictionaryVersion</key> + <string>6.0</string> + <key>CFBundleName</key> + <string>$(PRODUCT_NAME)</string> + <key>CFBundlePackageType</key> + <string>APPL</string> + <key>CFBundleShortVersionString</key> + <string>$(FLUTTER_BUILD_NAME)</string> + <key>CFBundleVersion</key> + <string>$(FLUTTER_BUILD_NUMBER)</string> + <key>LSMinimumSystemVersion</key> + <string>$(MACOSX_DEPLOYMENT_TARGET)</string> + <key>NSHumanReadableCopyright</key> + <string>$(PRODUCT_COPYRIGHT)</string> + <key>NSMainNibFile</key> + <string>MainMenu</string> + <key>NSPrincipalClass</key> + <string>NSApplication</string> +</dict> +</plist> diff --git a/TDDE43/labb2/macos/Runner/MainFlutterWindow.swift b/TDDE43/labb2/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 0000000..3cc05eb --- /dev/null +++ b/TDDE43/labb2/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/TDDE43/labb2/macos/Runner/Release.entitlements b/TDDE43/labb2/macos/Runner/Release.entitlements new file mode 100644 index 0000000..852fa1a --- /dev/null +++ b/TDDE43/labb2/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>com.apple.security.app-sandbox</key> + <true/> +</dict> +</plist> diff --git a/TDDE43/labb2/macos/RunnerTests/RunnerTests.swift b/TDDE43/labb2/macos/RunnerTests/RunnerTests.swift new file mode 100644 index 0000000..61f3bd1 --- /dev/null +++ b/TDDE43/labb2/macos/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Cocoa +import FlutterMacOS +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/TDDE43/labb2/pubspec.lock b/TDDE43/labb2/pubspec.lock new file mode 100644 index 0000000..d06d64d --- /dev/null +++ b/TDDE43/labb2/pubspec.lock @@ -0,0 +1,322 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + 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" + 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" + cupertino_icons: + dependency: "direct main" + description: + name: cupertino_icons + sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 + url: "https://pub.dev" + source: hosted + version: "1.0.8" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" + source: hosted + version: "1.3.1" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + sha256: "3f41d009ba7172d5ff9be5f6e6e6abb4300e263aab8866d2a0842ed2a70f8f0c" + url: "https://pub.dev" + source: hosted + version: "4.0.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" + http: + dependency: "direct main" + description: + name: http + sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 + url: "https://pub.dev" + source: hosted + version: "1.2.2" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + url: "https://pub.dev" + source: hosted + version: "4.0.2" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05" + url: "https://pub.dev" + source: hosted + version: "10.0.5" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806" + url: "https://pub.dev" + source: hosted + version: "3.0.5" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" + lints: + dependency: transitive + description: + name: lints + sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235" + url: "https://pub.dev" + source: hosted + version: "4.0.0" + matcher: + dependency: transitive + description: + name: matcher + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + url: "https://pub.dev" + source: hosted + version: "0.12.16+1" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec + url: "https://pub.dev" + source: hosted + version: "0.11.1" + meta: + dependency: transitive + description: + name: meta + sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7 + url: "https://pub.dev" + source: hosted + version: "1.15.0" + path: + dependency: transitive + description: + name: path + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + url: "https://pub.dev" + source: hosted + version: "1.9.0" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" + url: "https://pub.dev" + source: hosted + version: "2.1.8" + 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" + 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: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb" + url: "https://pub.dev" + source: hosted + version: "0.7.2" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 + url: "https://pub.dev" + source: hosted + version: "1.4.0" + url_launcher: + dependency: "direct main" + description: + name: url_launcher + sha256: "9d06212b1362abc2f0f0d78e6f09f726608c74e3b9462e8368bb03314aa8d603" + url: "https://pub.dev" + source: hosted + version: "6.3.1" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + sha256: "6fc2f56536ee873eeb867ad176ae15f304ccccc357848b351f6f0d8d4a40d193" + url: "https://pub.dev" + source: hosted + version: "6.3.14" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + sha256: e43b677296fadce447e987a2f519dcf5f6d1e527dc35d01ffab4fff5b8a7063e + url: "https://pub.dev" + source: hosted + version: "6.3.1" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935" + url: "https://pub.dev" + source: hosted + version: "3.2.1" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: "769549c999acdb42b8bcfa7c43d72bf79a382ca7441ab18a808e101149daf672" + url: "https://pub.dev" + source: hosted + version: "3.2.1" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e" + url: "https://pub.dev" + source: hosted + version: "2.3.3" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: "44cf3aabcedde30f2dba119a9dea3b0f2672fbe6fa96e85536251d678216b3c4" + url: "https://pub.dev" + source: hosted + version: "3.1.3" + 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: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d" + url: "https://pub.dev" + source: hosted + version: "14.2.5" + web: + dependency: transitive + description: + name: web + sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb + url: "https://pub.dev" + source: hosted + version: "1.1.0" +sdks: + dart: ">=3.5.3 <4.0.0" + flutter: ">=3.24.0" diff --git a/TDDE43/labb2/pubspec.yaml b/TDDE43/labb2/pubspec.yaml new file mode 100644 index 0000000..0c13916 --- /dev/null +++ b/TDDE43/labb2/pubspec.yaml @@ -0,0 +1,94 @@ +name: labb2 +description: "A new Flutter project." +# The following line prevents the package from being accidentally published to +# pub.dev using `flutter pub publish`. This is preferred for private packages. +publish_to: 'none' # Remove this line if you wish to publish to pub.dev + +# The following defines the version and build number for your application. +# A version number is three numbers separated by dots, like 1.2.43 +# followed by an optional build number separated by a +. +# Both the version and the builder number may be overridden in flutter +# build by specifying --build-name and --build-number, respectively. +# In Android, build-name is used as versionName while build-number used as versionCode. +# Read more about Android versioning at https://developer.android.com/studio/publish/versioning +# In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion. +# Read more about iOS versioning at +# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html +# In Windows, build-name is used as the major, minor, and patch parts +# of the product and file versions while build-number is used as the build suffix. +version: 1.0.0+1 + +environment: + sdk: ^3.5.3 + +# Dependencies specify other packages that your package needs in order to work. +# To automatically upgrade your package dependencies to the latest versions +# consider running `flutter pub upgrade --major-versions`. Alternatively, +# dependencies can be manually updated by changing the version numbers below to +# the latest version available on pub.dev. To see which dependencies have newer +# versions available, run `flutter pub outdated`. +dependencies: + + url_launcher: ^6.1.10 + + flutter: + sdk: flutter + + + # The following adds the Cupertino Icons font to your application. + # Use with the CupertinoIcons class for iOS style icons. + cupertino_icons: ^1.0.8 + http: ^1.2.2 + +dev_dependencies: + flutter_test: + sdk: flutter + + # The "flutter_lints" package below contains a set of recommended lints to + # encourage good coding practices. The lint set provided by the package is + # activated in the `analysis_options.yaml` file located at the root of your + # package. See that file for information about deactivating specific lint + # rules and activating additional ones. + flutter_lints: ^4.0.0 + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + +# The following section is specific to Flutter packages. +flutter: + + # The following line ensures that the Material Icons font is + # included with your application, so that you can use the icons in + # the material Icons class. + uses-material-design: true + + # To add assets to your application, add an assets section, like this: + # assets: + # - images/a_dot_burr.jpeg + # - images/a_dot_ham.jpeg + + # An image asset can refer to one or more resolution-specific "variants", see + # https://flutter.dev/to/resolution-aware-images + + # For details regarding adding assets from package dependencies, see + # https://flutter.dev/to/asset-from-package + + # To add custom fonts to your application, add a fonts section here, + # in this "flutter" section. Each entry in this list should have a + # "family" key with the font family name, and a "fonts" key with a + # list giving the asset and other descriptors for the font. For + # example: + # fonts: + # - family: Schyler + # fonts: + # - asset: fonts/Schyler-Regular.ttf + # - asset: fonts/Schyler-Italic.ttf + # style: italic + # - family: Trajan Pro + # fonts: + # - asset: fonts/TrajanPro.ttf + # - asset: fonts/TrajanPro_Bold.ttf + # weight: 700 + # + # For details regarding fonts from package dependencies, + # see https://flutter.dev/to/font-from-package diff --git a/TDDE43/labb2/test/widget_test.dart b/TDDE43/labb2/test/widget_test.dart new file mode 100644 index 0000000..59b9b42 --- /dev/null +++ b/TDDE43/labb2/test/widget_test.dart @@ -0,0 +1,30 @@ +// This is a basic Flutter widget test. +// +// To perform an interaction with a widget in your test, use the WidgetTester +// utility in the flutter_test package. For example, you can send tap and scroll +// gestures. You can also use WidgetTester to find child widgets in the widget +// tree, read text, and verify that the values of widget properties are correct. + +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import 'package:labb2/main.dart'; + +void main() { + testWidgets('Counter increments smoke test', (WidgetTester tester) async { + // Build our app and trigger a frame. + await tester.pumpWidget(const MyApp()); + + // Verify that our counter starts at 0. + expect(find.text('0'), findsOneWidget); + expect(find.text('1'), findsNothing); + + // Tap the '+' icon and trigger a frame. + await tester.tap(find.byIcon(Icons.add)); + await tester.pump(); + + // Verify that our counter has incremented. + expect(find.text('0'), findsNothing); + expect(find.text('1'), findsOneWidget); + }); +} diff --git a/TDDE43/labb2/web/favicon.png b/TDDE43/labb2/web/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaa46ac1ae21512746f852a42ba87e4165dfdd1 GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s77>k44ofy`glX=O&z`$AH z5n0T@pr;JNj1^1m%NQ6KBQrxHN+NuHtdjF{^%7I^lT!66atjzhz^1~gBDWwnwIorY zA~z?m*s8)-39P~@uh<GCtgoa1R#K8}s}$iIpx~Tel&WB=XQF4IWXGkTpkPy!l4cd; z;s(`Tl#*tvlu=SrV5P5LUS6(OZmgGIl&)`RX=$l%V5Dzkq+67drdwQ@SCUwvn^&w1 zF$89gOKNd)QD#9&W`3Rm$lS!F{L&IzB_)tW3NQe1XGvxn!lt}psJD{ybM-+o`i6Q2 z`f#&B#)Cwy{EISE^GXsy=Gz(CfK{T1LG7{82U(8f7>G~7qCqZhc3d|4;4lG&j~$oK zA@xWG2F9zNE{-7<g0;c6{?d*DwbkWz%`Qn?huRyIJUkyNsBkNLtyodm`{EO`fUnl9 zCB0MBRvzN_m}%w8WX9n>;ld7wO#(qnZWJZzI2E3_xA*Lsx!2?73+ET^w%+}I@67GR zPL~gKB+lnDthp%7_f?t4uW8c8|3WP+WgZ_FE&TA=jOG3EO9#GP7O}Aw)>E_$k#Ij{ zy7GD-^V?e9l7~+mufGc|5hy!fsr=)zztlt_?dh+%eqZG?+EVFvYJGT3%B4l+c?Nxv zA961J%WD)5K5(#z=Uq!-q}j6RjfU+9tC!e#p8CvEH~sU+6WhDDJxnp0o^W94eWCU1 zQd#DyR^MO$Yr>MKOsyrcjGjlI&9nHBnS0EEGw0Y$CX2WHmGZe!`~O@#c5SN5zDu26 zDI4BKt!FtLvCi9OcFDt_gv}BORd*bZl^1SM*<kdx(e>A_yFxrSX8ds2x$lS21HT;^ zTCIz7I(nCKmV|Unv7TVUR`#dH$H;AN(TuMbbG%<I39k9|LvpRXBg-;5gQ|}*vuFG$ zvwnK}seW&(xzxRA+wH|GvU|fy47XTio?u><%3CMZUe|J|QuJuIw1-!H;WNWB?$;ib zdFQ+9g^uhz>as0SX1QKp$Jx0PS=bUhTs~c2!d=hEU?gX@B64~UD6e?B`njxgN@xNA DfL3B_ literal 0 HcmV?d00001 diff --git a/TDDE43/labb2/web/icons/Icon-192.png b/TDDE43/labb2/web/icons/Icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..b749bfef07473333cf1dd31e9eed89862a5d52aa GIT binary patch literal 5292 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 L>gTe~DWM4f2kRIC literal 0 HcmV?d00001 diff --git a/TDDE43/labb2/web/icons/Icon-512.png b/TDDE43/labb2/web/icons/Icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..88cfd48dff1169879ba46840804b412fe02fefd6 GIT binary patch literal 8252 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 literal 0 HcmV?d00001 diff --git a/TDDE43/labb2/web/icons/Icon-maskable-192.png b/TDDE43/labb2/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000000000000000000000000000000000000..eb9b4d76e525556d5d89141648c724331630325d GIT binary patch literal 5594 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 O1B0ilpUXO@geCy8{()cs literal 0 HcmV?d00001 diff --git a/TDDE43/labb2/web/icons/Icon-maskable-512.png b/TDDE43/labb2/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000000000000000000000000000000000000..d69c56691fbdb0b7efa65097c7cc1edac12a6d3e GIT binary patch literal 20998 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 F695xY89M*~ literal 0 HcmV?d00001 diff --git a/TDDE43/labb2/web/index.html b/TDDE43/labb2/web/index.html new file mode 100644 index 0000000..8800efe --- /dev/null +++ b/TDDE43/labb2/web/index.html @@ -0,0 +1,38 @@ +<!DOCTYPE html> +<html> +<head> + <!-- + If you are serving your web app in a path other than the root, change the + href value below to reflect the base path you are serving from. + + The path provided below has to start and end with a slash "/" in order for + it to work correctly. + + For more details: + * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base + + This is a placeholder for base href that will be replaced by the value of + the `--base-href` argument provided to `flutter build`. + --> + <base href="$FLUTTER_BASE_HREF"> + + <meta charset="UTF-8"> + <meta content="IE=Edge" http-equiv="X-UA-Compatible"> + <meta name="description" content="A new Flutter project."> + + <!-- iOS meta tags & icons --> + <meta name="apple-mobile-web-app-capable" content="yes"> + <meta name="apple-mobile-web-app-status-bar-style" content="black"> + <meta name="apple-mobile-web-app-title" content="labb2"> + <link rel="apple-touch-icon" href="icons/Icon-192.png"> + + <!-- Favicon --> + <link rel="icon" type="image/png" href="favicon.png"/> + + <title>labb2</title> + <link rel="manifest" href="manifest.json"> +</head> +<body> + <script src="flutter_bootstrap.js" async></script> +</body> +</html> diff --git a/TDDE43/labb2/web/manifest.json b/TDDE43/labb2/web/manifest.json new file mode 100644 index 0000000..83fbfe0 --- /dev/null +++ b/TDDE43/labb2/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "labb2", + "short_name": "labb2", + "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" + } + ] +} diff --git a/TDDE43/labb2/windows/.gitignore b/TDDE43/labb2/windows/.gitignore new file mode 100644 index 0000000..d492d0d --- /dev/null +++ b/TDDE43/labb2/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/TDDE43/labb2/windows/CMakeLists.txt b/TDDE43/labb2/windows/CMakeLists.txt new file mode 100644 index 0000000..d15f006 --- /dev/null +++ b/TDDE43/labb2/windows/CMakeLists.txt @@ -0,0 +1,108 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.14) +project(labb2 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 "labb2") + +# 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 "$<$<CONFIG:Debug>:_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 "$<TARGET_FILE_DIR:${BINARY_NAME}>") +# 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/TDDE43/labb2/windows/flutter/CMakeLists.txt b/TDDE43/labb2/windows/flutter/CMakeLists.txt new file mode 100644 index 0000000..903f489 --- /dev/null +++ b/TDDE43/labb2/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} $<CONFIG> + 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/TDDE43/labb2/windows/flutter/generated_plugin_registrant.cc b/TDDE43/labb2/windows/flutter/generated_plugin_registrant.cc new file mode 100644 index 0000000..4f78848 --- /dev/null +++ b/TDDE43/labb2/windows/flutter/generated_plugin_registrant.cc @@ -0,0 +1,14 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + +#include <url_launcher_windows/url_launcher_windows.h> + +void RegisterPlugins(flutter::PluginRegistry* registry) { + UrlLauncherWindowsRegisterWithRegistrar( + registry->GetRegistrarForPlugin("UrlLauncherWindows")); +} diff --git a/TDDE43/labb2/windows/flutter/generated_plugin_registrant.h b/TDDE43/labb2/windows/flutter/generated_plugin_registrant.h new file mode 100644 index 0000000..dc139d8 --- /dev/null +++ b/TDDE43/labb2/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 <flutter/plugin_registry.h> + +// Registers Flutter plugins. +void RegisterPlugins(flutter::PluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/TDDE43/labb2/windows/flutter/generated_plugins.cmake b/TDDE43/labb2/windows/flutter/generated_plugins.cmake new file mode 100644 index 0000000..88b22e5 --- /dev/null +++ b/TDDE43/labb2/windows/flutter/generated_plugins.cmake @@ -0,0 +1,24 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST + 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 $<TARGET_FILE:${plugin}_plugin>) + 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/TDDE43/labb2/windows/runner/CMakeLists.txt b/TDDE43/labb2/windows/runner/CMakeLists.txt new file mode 100644 index 0000000..394917c --- /dev/null +++ b/TDDE43/labb2/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/TDDE43/labb2/windows/runner/Runner.rc b/TDDE43/labb2/windows/runner/Runner.rc new file mode 100644 index 0000000..9c3717d --- /dev/null +++ b/TDDE43/labb2/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", "labb2" "\0" + VALUE "FileVersion", VERSION_AS_STRING "\0" + VALUE "InternalName", "labb2" "\0" + VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "OriginalFilename", "labb2.exe" "\0" + VALUE "ProductName", "labb2" "\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/TDDE43/labb2/windows/runner/flutter_window.cpp b/TDDE43/labb2/windows/runner/flutter_window.cpp new file mode 100644 index 0000000..955ee30 --- /dev/null +++ b/TDDE43/labb2/windows/runner/flutter_window.cpp @@ -0,0 +1,71 @@ +#include "flutter_window.h" + +#include <optional> + +#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<flutter::FlutterViewController>( + 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<LRESULT> 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/TDDE43/labb2/windows/runner/flutter_window.h b/TDDE43/labb2/windows/runner/flutter_window.h new file mode 100644 index 0000000..6da0652 --- /dev/null +++ b/TDDE43/labb2/windows/runner/flutter_window.h @@ -0,0 +1,33 @@ +#ifndef RUNNER_FLUTTER_WINDOW_H_ +#define RUNNER_FLUTTER_WINDOW_H_ + +#include <flutter/dart_project.h> +#include <flutter/flutter_view_controller.h> + +#include <memory> + +#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::FlutterViewController> flutter_controller_; +}; + +#endif // RUNNER_FLUTTER_WINDOW_H_ diff --git a/TDDE43/labb2/windows/runner/main.cpp b/TDDE43/labb2/windows/runner/main.cpp new file mode 100644 index 0000000..c590fc1 --- /dev/null +++ b/TDDE43/labb2/windows/runner/main.cpp @@ -0,0 +1,43 @@ +#include <flutter/dart_project.h> +#include <flutter/flutter_view_controller.h> +#include <windows.h> + +#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<std::string> 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"labb2", 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/TDDE43/labb2/windows/runner/resource.h b/TDDE43/labb2/windows/runner/resource.h new file mode 100644 index 0000000..66a65d1 --- /dev/null +++ b/TDDE43/labb2/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/TDDE43/labb2/windows/runner/resources/app_icon.ico b/TDDE43/labb2/windows/runner/resources/app_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c04e20caf6370ebb9253ad831cc31de4a9c965f6 GIT binary patch literal 33772 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 literal 0 HcmV?d00001 diff --git a/TDDE43/labb2/windows/runner/runner.exe.manifest b/TDDE43/labb2/windows/runner/runner.exe.manifest new file mode 100644 index 0000000..153653e --- /dev/null +++ b/TDDE43/labb2/windows/runner/runner.exe.manifest @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> + <application xmlns="urn:schemas-microsoft-com:asm.v3"> + <windowsSettings> + <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness> + </windowsSettings> + </application> + <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> + <application> + <!-- Windows 10 and Windows 11 --> + <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/> + </application> + </compatibility> +</assembly> diff --git a/TDDE43/labb2/windows/runner/utils.cpp b/TDDE43/labb2/windows/runner/utils.cpp new file mode 100644 index 0000000..3a0b465 --- /dev/null +++ b/TDDE43/labb2/windows/runner/utils.cpp @@ -0,0 +1,65 @@ +#include "utils.h" + +#include <flutter_windows.h> +#include <io.h> +#include <stdio.h> +#include <windows.h> + +#include <iostream> + +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<std::string> 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::string>(); + } + + std::vector<std::string> 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(); + } + unsigned 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/TDDE43/labb2/windows/runner/utils.h b/TDDE43/labb2/windows/runner/utils.h new file mode 100644 index 0000000..3879d54 --- /dev/null +++ b/TDDE43/labb2/windows/runner/utils.h @@ -0,0 +1,19 @@ +#ifndef RUNNER_UTILS_H_ +#define RUNNER_UTILS_H_ + +#include <string> +#include <vector> + +// 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<std::string>, +// encoded in UTF-8. Returns an empty std::vector<std::string> on failure. +std::vector<std::string> GetCommandLineArguments(); + +#endif // RUNNER_UTILS_H_ diff --git a/TDDE43/labb2/windows/runner/win32_window.cpp b/TDDE43/labb2/windows/runner/win32_window.cpp new file mode 100644 index 0000000..60608d0 --- /dev/null +++ b/TDDE43/labb2/windows/runner/win32_window.cpp @@ -0,0 +1,288 @@ +#include "win32_window.h" + +#include <dwmapi.h> +#include <flutter_windows.h> + +#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<int>(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<EnableNonClientDpiScaling*>( + 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<LONG>(origin.x), + static_cast<LONG>(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<CREATESTRUCT*>(lparam); + SetWindowLongPtr(window, GWLP_USERDATA, + reinterpret_cast<LONG_PTR>(window_struct->lpCreateParams)); + + auto that = static_cast<Win32Window*>(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<RECT*>(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<Win32Window*>( + 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/TDDE43/labb2/windows/runner/win32_window.h b/TDDE43/labb2/windows/runner/win32_window.h new file mode 100644 index 0000000..e901dde --- /dev/null +++ b/TDDE43/labb2/windows/runner/win32_window.h @@ -0,0 +1,102 @@ +#ifndef RUNNER_WIN32_WINDOW_H_ +#define RUNNER_WIN32_WINDOW_H_ + +#include <windows.h> + +#include <functional> +#include <memory> +#include <string> + +// 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_ -- GitLab