From 5102f7a2da168cdb74bf1e088fae140ab75df08c Mon Sep 17 00:00:00 2001 From: "ismail.taha_janan" Date: Tue, 13 Jun 2023 20:40:57 +0200 Subject: [PATCH] MVVM workin i guess --- .DS_Store | Bin 0 -> 6148 bytes CalculMoy/.DS_Store | Bin 0 -> 8196 bytes CalculMoy/CalculMoy.xcodeproj/project.pbxproj | 674 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../UserInterfaceState.xcuserstate | Bin 0 -> 68880 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 6 + .../xcschemes/xcschememanagement.plist | 14 + CalculMoy/CalculMoy/.DS_Store | Bin 0 -> 6148 bytes CalculMoy/CalculMoy/Assets.xcassets/.DS_Store | Bin 0 -> 6148 bytes .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 13 + .../CalculMoy/Assets.xcassets/Contents.json | 6 + CalculMoy/CalculMoy/Block.swift | 57 ++ CalculMoy/CalculMoy/CalculMoyApp.swift | 17 + CalculMoy/CalculMoy/ContentView.swift | 64 ++ .../Preview Assets.xcassets/Contents.json | 6 + CalculMoy/CalculMoy/UsList.swift | 62 ++ CalculMoy/CalculMoyTests/CalculMoyTests.swift | 36 + .../CalculMoyUITests/CalculMoyUITests.swift | 41 ++ .../CalculMoyUITestsLaunchTests.swift | 32 + CalculMoy/Model/Manager.swift | 23 + CalculMoy/Model/Module.swift | 15 + CalculMoy/Model/Stub.swift | 69 ++ CalculMoy/Model/UE.swift | 18 + CalculMoy/Utile/MySlider.swift | 28 + CalculMoy/ViewModel/ManagerVM.swift | 55 ++ CalculMoy/ViewModel/ModuleVM.swift | 32 + CalculMoy/ViewModel/UeVM.swift | 72 ++ CalculMoy/Views/Components/ModuleView.swift | 118 +++ CalculMoy/Views/Components/UEView.swift | 54 ++ CalculMoy/Views/Components/UISliderView.swift | 145 ++++ MyPlayground.playground/Contents.swift | 3 + MyPlayground.playground/contents.xcplayground | 4 + .../contents.xcworkspacedata | 7 + .../UserInterfaceState.xcuserstate | Bin 0 -> 5926 bytes MyPlayground.playground/timeline.xctimeline | 6 + 37 files changed, 1703 insertions(+) create mode 100644 .DS_Store create mode 100644 CalculMoy/.DS_Store create mode 100644 CalculMoy/CalculMoy.xcodeproj/project.pbxproj create mode 100644 CalculMoy/CalculMoy.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 CalculMoy/CalculMoy.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 CalculMoy/CalculMoy.xcodeproj/project.xcworkspace/xcuserdata/etudiant.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 CalculMoy/CalculMoy.xcodeproj/xcuserdata/etudiant.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist create mode 100644 CalculMoy/CalculMoy.xcodeproj/xcuserdata/etudiant.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 CalculMoy/CalculMoy/.DS_Store create mode 100644 CalculMoy/CalculMoy/Assets.xcassets/.DS_Store create mode 100644 CalculMoy/CalculMoy/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 CalculMoy/CalculMoy/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 CalculMoy/CalculMoy/Assets.xcassets/Contents.json create mode 100644 CalculMoy/CalculMoy/Block.swift create mode 100644 CalculMoy/CalculMoy/CalculMoyApp.swift create mode 100644 CalculMoy/CalculMoy/ContentView.swift create mode 100644 CalculMoy/CalculMoy/Preview Content/Preview Assets.xcassets/Contents.json create mode 100644 CalculMoy/CalculMoy/UsList.swift create mode 100644 CalculMoy/CalculMoyTests/CalculMoyTests.swift create mode 100644 CalculMoy/CalculMoyUITests/CalculMoyUITests.swift create mode 100644 CalculMoy/CalculMoyUITests/CalculMoyUITestsLaunchTests.swift create mode 100644 CalculMoy/Model/Manager.swift create mode 100644 CalculMoy/Model/Module.swift create mode 100644 CalculMoy/Model/Stub.swift create mode 100644 CalculMoy/Model/UE.swift create mode 100644 CalculMoy/Utile/MySlider.swift create mode 100644 CalculMoy/ViewModel/ManagerVM.swift create mode 100644 CalculMoy/ViewModel/ModuleVM.swift create mode 100644 CalculMoy/ViewModel/UeVM.swift create mode 100644 CalculMoy/Views/Components/ModuleView.swift create mode 100644 CalculMoy/Views/Components/UEView.swift create mode 100644 CalculMoy/Views/Components/UISliderView.swift create mode 100644 MyPlayground.playground/Contents.swift create mode 100644 MyPlayground.playground/contents.xcplayground create mode 100644 MyPlayground.playground/playground.xcworkspace/contents.xcworkspacedata create mode 100644 MyPlayground.playground/playground.xcworkspace/xcuserdata/etudiant.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 MyPlayground.playground/timeline.xctimeline diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..b059d895dda05668dde50af09691665f8a1ca5dc GIT binary patch literal 6148 zcmeHKPm9w)6o1oJo4ATSDDL7V;7KfNcdah6m)Na`9t1I>2bFHply2B*CbW%ZDTSOB zLBEY(KtF(jxBV>o-pnj!w-Ky}NSOz3e)H$O$-Lh%Z!!SDT4}fiPy+x9m9TOFivpo> z(gi8$o{NY~&XEF#M3@bTpKAa{O6FW@4;QA!ODP&dCz z!CIk5FdZk_<71HUXgp~&zOhoda_)S!YFF2)ue<{>^(Ou#9k=|^3u-+Tf(IvcKX?}P zr`_6>JrPg*DDID>LlpMW$BPRPP6XZxw|v3JG1-S zjk?pk*PPF7>*|f$yHC1@d>D&2a_zt{S4p{~@dVytrGN`Q*z$T}m`JnIO~L}Jp=h^t z{MPY@@XP1xpNO?W%kVcXlY`us%kOCc1@pc3Mll!h07ogZYnXwL;4$u}k2ru4=HnD% z2w@YF#oi9j?=+)C|1P)FOU`zRE7<5Pzn(mg8@G;kzh0I+F1e1O_{s5~&vJ@?*vDX2 zO7uCf)>bMi6O3WNFz`1Rp#0#V61o~Qg)((uA)f$<73`LRb^2i-A4j9BF;j>mC``E` zDp#hT7)-fizoYG3jhRB_4op8jnEtZ7xX^;huOm9xKw+)~Qy2ye17{d0t9Fg<|A)VR z|DW+PO~Zg;V3inPmA2PzVMO|FU5JhDS_gF>m4xgvh0+BJeI3gRy&>08rQn!D6+~BK TrVx8j%#VPi!4!spf6BlQNbSp( literal 0 HcmV?d00001 diff --git a/CalculMoy/.DS_Store b/CalculMoy/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..8b4cd59b2720cca57414cde7b45743b1f0a5a89f GIT binary patch literal 8196 zcmeHMy>1gh5S|T=a7aWfC$J zf%Ex@XqjFk!jziSq7J>p(~DZ-MEMCw8D+s$oXAynp}2j?#%A@}=_^Z`je>UDX`i8! zqaD`NA)KbO9@g%ItzFuqU6(6$3Hp+&kywWzDt#YkOY-vYVEyvXdCkj685IM z@l-q<)Tu_pcz8d+!&tn_Mfn}@V=3qTE~8Uj(pY{@RT!+>uFEZ^>k{{ zT}OI)?(@oVr=s_xup~Y8Yq*~3Unw*60DiXU)i7@LDU%+15U%HQ{N2@~B_mi}IrHmV zH}B>=kdchmbR$}YVQ}AFZ!ll*IgybFO*evzOYS<-^W!_$kG^(yNzan>*stO7l)atw zcFGX2!1ezo(h$qg0t118$znj2s$10!#B6KpT=e{7K0<$t&W-glBQ*pAtMGeWjzjkT oVTk9*&c#+{Mq&o-uYU;WS25!LcJH8Y|Le-H9PWR;MgPm;58@>i(EtDd literal 0 HcmV?d00001 diff --git a/CalculMoy/CalculMoy.xcodeproj/project.pbxproj b/CalculMoy/CalculMoy.xcodeproj/project.pbxproj new file mode 100644 index 0000000..50dda7a --- /dev/null +++ b/CalculMoy/CalculMoy.xcodeproj/project.pbxproj @@ -0,0 +1,674 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 56; + objects = { + +/* Begin PBXBuildFile section */ + EC14918A2A20D64500B2D47A /* Block.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC1491892A20D64500B2D47A /* Block.swift */; }; + EC14918D2A20DF2900B2D47A /* MySlider.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC14918C2A20DF2900B2D47A /* MySlider.swift */; }; + EC14918F2A29F05A00B2D47A /* UsList.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC14918E2A29F05A00B2D47A /* UsList.swift */; }; + EC1491942A35B7CA00B2D47A /* Module.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC1491932A35B7CA00B2D47A /* Module.swift */; }; + EC1491962A35B91D00B2D47A /* UE.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC1491952A35B91D00B2D47A /* UE.swift */; }; + EC1491982A35BD3400B2D47A /* Stub.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC1491972A35BD3400B2D47A /* Stub.swift */; }; + EC14919A2A35D15000B2D47A /* Manager.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC1491992A35D15000B2D47A /* Manager.swift */; }; + EC14919D2A35F60000B2D47A /* ModuleVM.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC14919C2A35F60000B2D47A /* ModuleVM.swift */; }; + EC14919F2A36022C00B2D47A /* UeVM.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC14919E2A36022C00B2D47A /* UeVM.swift */; }; + EC1491A22A361B7600B2D47A /* ManagerVM.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC1491A12A361B7600B2D47A /* ManagerVM.swift */; }; + EC243AA42A1FA0440017C10A /* CalculMoyApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC243AA32A1FA0440017C10A /* CalculMoyApp.swift */; }; + EC243AA62A1FA0440017C10A /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC243AA52A1FA0440017C10A /* ContentView.swift */; }; + EC243AA82A1FA0460017C10A /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = EC243AA72A1FA0460017C10A /* Assets.xcassets */; }; + EC243AAB2A1FA0460017C10A /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = EC243AAA2A1FA0460017C10A /* Preview Assets.xcassets */; }; + EC243AB52A1FA0460017C10A /* CalculMoyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC243AB42A1FA0460017C10A /* CalculMoyTests.swift */; }; + EC243ABF2A1FA0460017C10A /* CalculMoyUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC243ABE2A1FA0460017C10A /* CalculMoyUITests.swift */; }; + EC243AC12A1FA0460017C10A /* CalculMoyUITestsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC243AC02A1FA0460017C10A /* CalculMoyUITestsLaunchTests.swift */; }; + EC97FE492A378E59007AEC0A /* UEView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC97FE482A378E59007AEC0A /* UEView.swift */; }; + EC97FE4B2A3798B7007AEC0A /* ModuleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC97FE4A2A3798B7007AEC0A /* ModuleView.swift */; }; + EC97FE4D2A37A9F6007AEC0A /* UISliderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC97FE4C2A37A9F6007AEC0A /* UISliderView.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + EC243AB12A1FA0460017C10A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = EC243A982A1FA0440017C10A /* Project object */; + proxyType = 1; + remoteGlobalIDString = EC243A9F2A1FA0440017C10A; + remoteInfo = CalculMoy; + }; + EC243ABB2A1FA0460017C10A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = EC243A982A1FA0440017C10A /* Project object */; + proxyType = 1; + remoteGlobalIDString = EC243A9F2A1FA0440017C10A; + remoteInfo = CalculMoy; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + EC1491892A20D64500B2D47A /* Block.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Block.swift; sourceTree = ""; }; + EC14918C2A20DF2900B2D47A /* MySlider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MySlider.swift; sourceTree = ""; }; + EC14918E2A29F05A00B2D47A /* UsList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UsList.swift; sourceTree = ""; }; + EC1491932A35B7CA00B2D47A /* Module.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Module.swift; sourceTree = ""; }; + EC1491952A35B91D00B2D47A /* UE.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UE.swift; sourceTree = ""; }; + EC1491972A35BD3400B2D47A /* Stub.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Stub.swift; sourceTree = ""; }; + EC1491992A35D15000B2D47A /* Manager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Manager.swift; sourceTree = ""; }; + EC14919C2A35F60000B2D47A /* ModuleVM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModuleVM.swift; sourceTree = ""; }; + EC14919E2A36022C00B2D47A /* UeVM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UeVM.swift; sourceTree = ""; }; + EC1491A12A361B7600B2D47A /* ManagerVM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManagerVM.swift; sourceTree = ""; }; + EC243AA02A1FA0440017C10A /* CalculMoy.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = CalculMoy.app; sourceTree = BUILT_PRODUCTS_DIR; }; + EC243AA32A1FA0440017C10A /* CalculMoyApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalculMoyApp.swift; sourceTree = ""; }; + EC243AA52A1FA0440017C10A /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; + EC243AA72A1FA0460017C10A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + EC243AAA2A1FA0460017C10A /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; + EC243AB02A1FA0460017C10A /* CalculMoyTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CalculMoyTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + EC243AB42A1FA0460017C10A /* CalculMoyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalculMoyTests.swift; sourceTree = ""; }; + EC243ABA2A1FA0460017C10A /* CalculMoyUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CalculMoyUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + EC243ABE2A1FA0460017C10A /* CalculMoyUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalculMoyUITests.swift; sourceTree = ""; }; + EC243AC02A1FA0460017C10A /* CalculMoyUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalculMoyUITestsLaunchTests.swift; sourceTree = ""; }; + EC97FE482A378E59007AEC0A /* UEView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UEView.swift; sourceTree = ""; }; + EC97FE4A2A3798B7007AEC0A /* ModuleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModuleView.swift; sourceTree = ""; }; + EC97FE4C2A37A9F6007AEC0A /* UISliderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UISliderView.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + EC243A9D2A1FA0440017C10A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EC243AAD2A1FA0460017C10A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EC243AB72A1FA0460017C10A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + EC14918B2A20DEEB00B2D47A /* Utile */ = { + isa = PBXGroup; + children = ( + EC14918C2A20DF2900B2D47A /* MySlider.swift */, + ); + path = Utile; + sourceTree = ""; + }; + EC1491902A35B70500B2D47A /* Model */ = { + isa = PBXGroup; + children = ( + EC1491932A35B7CA00B2D47A /* Module.swift */, + EC1491952A35B91D00B2D47A /* UE.swift */, + EC1491972A35BD3400B2D47A /* Stub.swift */, + EC1491992A35D15000B2D47A /* Manager.swift */, + ); + path = Model; + sourceTree = ""; + }; + EC14919B2A35E97F00B2D47A /* ViewModel */ = { + isa = PBXGroup; + children = ( + EC14919C2A35F60000B2D47A /* ModuleVM.swift */, + EC14919E2A36022C00B2D47A /* UeVM.swift */, + EC1491A12A361B7600B2D47A /* ManagerVM.swift */, + ); + path = ViewModel; + sourceTree = ""; + }; + EC243A972A1FA0440017C10A = { + isa = PBXGroup; + children = ( + EC97FE462A378D9C007AEC0A /* Views */, + EC14919B2A35E97F00B2D47A /* ViewModel */, + EC1491902A35B70500B2D47A /* Model */, + EC14918B2A20DEEB00B2D47A /* Utile */, + EC243AA22A1FA0440017C10A /* CalculMoy */, + EC243AB32A1FA0460017C10A /* CalculMoyTests */, + EC243ABD2A1FA0460017C10A /* CalculMoyUITests */, + EC243AA12A1FA0440017C10A /* Products */, + ); + sourceTree = ""; + }; + EC243AA12A1FA0440017C10A /* Products */ = { + isa = PBXGroup; + children = ( + EC243AA02A1FA0440017C10A /* CalculMoy.app */, + EC243AB02A1FA0460017C10A /* CalculMoyTests.xctest */, + EC243ABA2A1FA0460017C10A /* CalculMoyUITests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + EC243AA22A1FA0440017C10A /* CalculMoy */ = { + isa = PBXGroup; + children = ( + EC243AA32A1FA0440017C10A /* CalculMoyApp.swift */, + EC243AA52A1FA0440017C10A /* ContentView.swift */, + EC243AA72A1FA0460017C10A /* Assets.xcassets */, + EC243AA92A1FA0460017C10A /* Preview Content */, + EC1491892A20D64500B2D47A /* Block.swift */, + EC14918E2A29F05A00B2D47A /* UsList.swift */, + ); + path = CalculMoy; + sourceTree = ""; + }; + EC243AA92A1FA0460017C10A /* Preview Content */ = { + isa = PBXGroup; + children = ( + EC243AAA2A1FA0460017C10A /* Preview Assets.xcassets */, + ); + path = "Preview Content"; + sourceTree = ""; + }; + EC243AB32A1FA0460017C10A /* CalculMoyTests */ = { + isa = PBXGroup; + children = ( + EC243AB42A1FA0460017C10A /* CalculMoyTests.swift */, + ); + path = CalculMoyTests; + sourceTree = ""; + }; + EC243ABD2A1FA0460017C10A /* CalculMoyUITests */ = { + isa = PBXGroup; + children = ( + EC243ABE2A1FA0460017C10A /* CalculMoyUITests.swift */, + EC243AC02A1FA0460017C10A /* CalculMoyUITestsLaunchTests.swift */, + ); + path = CalculMoyUITests; + sourceTree = ""; + }; + EC97FE462A378D9C007AEC0A /* Views */ = { + isa = PBXGroup; + children = ( + EC97FE472A378DBE007AEC0A /* Components */, + ); + path = Views; + sourceTree = ""; + }; + EC97FE472A378DBE007AEC0A /* Components */ = { + isa = PBXGroup; + children = ( + EC97FE482A378E59007AEC0A /* UEView.swift */, + EC97FE4A2A3798B7007AEC0A /* ModuleView.swift */, + EC97FE4C2A37A9F6007AEC0A /* UISliderView.swift */, + ); + path = Components; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + EC243A9F2A1FA0440017C10A /* CalculMoy */ = { + isa = PBXNativeTarget; + buildConfigurationList = EC243AC42A1FA0460017C10A /* Build configuration list for PBXNativeTarget "CalculMoy" */; + buildPhases = ( + EC243A9C2A1FA0440017C10A /* Sources */, + EC243A9D2A1FA0440017C10A /* Frameworks */, + EC243A9E2A1FA0440017C10A /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = CalculMoy; + productName = CalculMoy; + productReference = EC243AA02A1FA0440017C10A /* CalculMoy.app */; + productType = "com.apple.product-type.application"; + }; + EC243AAF2A1FA0460017C10A /* CalculMoyTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = EC243AC72A1FA0460017C10A /* Build configuration list for PBXNativeTarget "CalculMoyTests" */; + buildPhases = ( + EC243AAC2A1FA0460017C10A /* Sources */, + EC243AAD2A1FA0460017C10A /* Frameworks */, + EC243AAE2A1FA0460017C10A /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + EC243AB22A1FA0460017C10A /* PBXTargetDependency */, + ); + name = CalculMoyTests; + productName = CalculMoyTests; + productReference = EC243AB02A1FA0460017C10A /* CalculMoyTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + EC243AB92A1FA0460017C10A /* CalculMoyUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = EC243ACA2A1FA0460017C10A /* Build configuration list for PBXNativeTarget "CalculMoyUITests" */; + buildPhases = ( + EC243AB62A1FA0460017C10A /* Sources */, + EC243AB72A1FA0460017C10A /* Frameworks */, + EC243AB82A1FA0460017C10A /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + EC243ABC2A1FA0460017C10A /* PBXTargetDependency */, + ); + name = CalculMoyUITests; + productName = CalculMoyUITests; + productReference = EC243ABA2A1FA0460017C10A /* CalculMoyUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + EC243A982A1FA0440017C10A /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1410; + LastUpgradeCheck = 1410; + TargetAttributes = { + EC243A9F2A1FA0440017C10A = { + CreatedOnToolsVersion = 14.1; + }; + EC243AAF2A1FA0460017C10A = { + CreatedOnToolsVersion = 14.1; + TestTargetID = EC243A9F2A1FA0440017C10A; + }; + EC243AB92A1FA0460017C10A = { + CreatedOnToolsVersion = 14.1; + TestTargetID = EC243A9F2A1FA0440017C10A; + }; + }; + }; + buildConfigurationList = EC243A9B2A1FA0440017C10A /* Build configuration list for PBXProject "CalculMoy" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = EC243A972A1FA0440017C10A; + productRefGroup = EC243AA12A1FA0440017C10A /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + EC243A9F2A1FA0440017C10A /* CalculMoy */, + EC243AAF2A1FA0460017C10A /* CalculMoyTests */, + EC243AB92A1FA0460017C10A /* CalculMoyUITests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + EC243A9E2A1FA0440017C10A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EC243AAB2A1FA0460017C10A /* Preview Assets.xcassets in Resources */, + EC243AA82A1FA0460017C10A /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EC243AAE2A1FA0460017C10A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EC243AB82A1FA0460017C10A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + EC243A9C2A1FA0440017C10A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EC97FE4B2A3798B7007AEC0A /* ModuleView.swift in Sources */, + EC1491962A35B91D00B2D47A /* UE.swift in Sources */, + EC14918F2A29F05A00B2D47A /* UsList.swift in Sources */, + EC14918A2A20D64500B2D47A /* Block.swift in Sources */, + EC14919F2A36022C00B2D47A /* UeVM.swift in Sources */, + EC97FE492A378E59007AEC0A /* UEView.swift in Sources */, + EC1491A22A361B7600B2D47A /* ManagerVM.swift in Sources */, + EC1491982A35BD3400B2D47A /* Stub.swift in Sources */, + EC243AA62A1FA0440017C10A /* ContentView.swift in Sources */, + EC14918D2A20DF2900B2D47A /* MySlider.swift in Sources */, + EC243AA42A1FA0440017C10A /* CalculMoyApp.swift in Sources */, + EC14919A2A35D15000B2D47A /* Manager.swift in Sources */, + EC97FE4D2A37A9F6007AEC0A /* UISliderView.swift in Sources */, + EC14919D2A35F60000B2D47A /* ModuleVM.swift in Sources */, + EC1491942A35B7CA00B2D47A /* Module.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EC243AAC2A1FA0460017C10A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EC243AB52A1FA0460017C10A /* CalculMoyTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EC243AB62A1FA0460017C10A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EC243AC12A1FA0460017C10A /* CalculMoyUITestsLaunchTests.swift in Sources */, + EC243ABF2A1FA0460017C10A /* CalculMoyUITests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + EC243AB22A1FA0460017C10A /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = EC243A9F2A1FA0440017C10A /* CalculMoy */; + targetProxy = EC243AB12A1FA0460017C10A /* PBXContainerItemProxy */; + }; + EC243ABC2A1FA0460017C10A /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = EC243A9F2A1FA0440017C10A /* CalculMoy */; + targetProxy = EC243ABB2A1FA0460017C10A /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + EC243AC22A1FA0460017C10A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = 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_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_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 16.1; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + EC243AC32A1FA0460017C10A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = 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_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_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 16.1; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + EC243AC52A1FA0460017C10A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_ASSET_PATHS = "\"CalculMoy/Preview Content\""; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = fr.uca.iut.CalculMoy; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + EC243AC62A1FA0460017C10A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_ASSET_PATHS = "\"CalculMoy/Preview Content\""; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = fr.uca.iut.CalculMoy; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + EC243AC82A1FA0460017C10A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 16.1; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = fr.uca.iut.CalculMoyTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/CalculMoy.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/CalculMoy"; + }; + name = Debug; + }; + EC243AC92A1FA0460017C10A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 16.1; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = fr.uca.iut.CalculMoyTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/CalculMoy.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/CalculMoy"; + }; + name = Release; + }; + EC243ACB2A1FA0460017C10A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = fr.uca.iut.CalculMoyUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = CalculMoy; + }; + name = Debug; + }; + EC243ACC2A1FA0460017C10A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = fr.uca.iut.CalculMoyUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = CalculMoy; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + EC243A9B2A1FA0440017C10A /* Build configuration list for PBXProject "CalculMoy" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + EC243AC22A1FA0460017C10A /* Debug */, + EC243AC32A1FA0460017C10A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + EC243AC42A1FA0460017C10A /* Build configuration list for PBXNativeTarget "CalculMoy" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + EC243AC52A1FA0460017C10A /* Debug */, + EC243AC62A1FA0460017C10A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + EC243AC72A1FA0460017C10A /* Build configuration list for PBXNativeTarget "CalculMoyTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + EC243AC82A1FA0460017C10A /* Debug */, + EC243AC92A1FA0460017C10A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + EC243ACA2A1FA0460017C10A /* Build configuration list for PBXNativeTarget "CalculMoyUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + EC243ACB2A1FA0460017C10A /* Debug */, + EC243ACC2A1FA0460017C10A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = EC243A982A1FA0440017C10A /* Project object */; +} diff --git a/CalculMoy/CalculMoy.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/CalculMoy/CalculMoy.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/CalculMoy/CalculMoy.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/CalculMoy/CalculMoy.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/CalculMoy/CalculMoy.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/CalculMoy/CalculMoy.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/CalculMoy/CalculMoy.xcodeproj/project.xcworkspace/xcuserdata/etudiant.xcuserdatad/UserInterfaceState.xcuserstate b/CalculMoy/CalculMoy.xcodeproj/project.xcworkspace/xcuserdata/etudiant.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..bfb6737f241b991a8cf0cddfe9c4dc687029d91a GIT binary patch literal 68880 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

Aa-wz%E_ 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 literal 0 HcmV?d00001 diff --git a/CalculMoy/CalculMoy.xcodeproj/xcuserdata/etudiant.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/CalculMoy/CalculMoy.xcodeproj/xcuserdata/etudiant.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist new file mode 100644 index 0000000..90d58ac --- /dev/null +++ b/CalculMoy/CalculMoy.xcodeproj/xcuserdata/etudiant.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,6 @@ + + + diff --git a/CalculMoy/CalculMoy.xcodeproj/xcuserdata/etudiant.xcuserdatad/xcschemes/xcschememanagement.plist b/CalculMoy/CalculMoy.xcodeproj/xcuserdata/etudiant.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..8724348 --- /dev/null +++ b/CalculMoy/CalculMoy.xcodeproj/xcuserdata/etudiant.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + CalculMoy.xcscheme_^#shared#^_ + + orderHint + 0 + + + + diff --git a/CalculMoy/CalculMoy/.DS_Store b/CalculMoy/CalculMoy/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..745f6cfeb70c3a1c1c1bd334d3546ffc43d51297 GIT binary patch literal 6148 zcmeHK%}T>S5dOC9q2i%EDtK5BJPLgR(;DxEzJT@z6CNifb>$@+=;EH$JmQvi0grQJxMOuAvE_PjwmoCDp4aNh@k=At^W{8~?4zFDv&!|z zcWGh_7z4(@k2AoYEmGfCG;0hP1I9qXfczgkRWON|D~4YOO*jG&Yjg+UIP6)7UL3?E zVy;LJ#c3*0Q(Zh_I8CSD$G9Y7uBhp7VP-xj&g|j|#l;)rMB;MAB87v{iWw`d_<$OOelG)J U5;0e#hhiInK!X`$;8z)V2XoS8UjP6A literal 0 HcmV?d00001 diff --git a/CalculMoy/CalculMoy/Assets.xcassets/.DS_Store b/CalculMoy/CalculMoy/Assets.xcassets/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..c06a545cd4050b4a0cbf4952dcfbddede2e9c435 GIT binary patch literal 6148 zcmeHKO-sW-5S^_(L_AnT!DCR*LjOTpJtB(WjGcWn4aVc_8`iN14+eS0oR)M&1!Zuzzn}o` z-7yVlg6o0m`?sJ=#B?tg^o-GE_Shdyio7&puWfSkB2C9xF-A@_%Wls;4?hO&@~1z_ zFK6}N&i{8h0`C&njqsd<@4fV&tlz}>ZP&ay-;?)?bK|?yntAcfwQX(#Pv+|83b+EU zKwSaUY_{k?(OXx*6>tSs3h?_OhBGFHm7=^l(8v)0*hN?j_wsE8j5z>I3@b%MU_n!X zni}kg5i}j~*ybgMm7=Cokd^TqTRGSXCCKWC$1bObjbUL}30Q MAToI43jC@9UuMT|fB*mh literal 0 HcmV?d00001 diff --git a/CalculMoy/CalculMoy/Assets.xcassets/AccentColor.colorset/Contents.json b/CalculMoy/CalculMoy/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/CalculMoy/CalculMoy/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CalculMoy/CalculMoy/Assets.xcassets/AppIcon.appiconset/Contents.json b/CalculMoy/CalculMoy/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..13613e3 --- /dev/null +++ b/CalculMoy/CalculMoy/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,13 @@ +{ + "images" : [ + { + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CalculMoy/CalculMoy/Assets.xcassets/Contents.json b/CalculMoy/CalculMoy/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/CalculMoy/CalculMoy/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CalculMoy/CalculMoy/Block.swift b/CalculMoy/CalculMoy/Block.swift new file mode 100644 index 0000000..692cd7c --- /dev/null +++ b/CalculMoy/CalculMoy/Block.swift @@ -0,0 +1,57 @@ +// +// Block.swift +// CalculMoy +// +// Created by etudiant on 26/05/2023. +// + +import SwiftUI + +struct Block: View { + public var title : String + public var coeff : Int + public var note : Float + + + var body: some View { + NavigationStack{ + HStack{ + VStack{ + HStack{ + Text(title) + Spacer() + Text(String(coeff)) + } + .padding(.horizontal) + HStack{ + Rectangle() + .frame(width: CGFloat(Int(note)) * 10, height: 30) + .cornerRadius(20) + .foregroundColor((note < 10 ? .red : .green)) + Text(String(note)) + Spacer() + + } + .padding(.horizontal) + Divider() + } + /*NavigationLink(destination: UEView()){ + Image(systemName: "square.and.pencil") + }*/ + Button{ + }label: { + Image(systemName: "square.and.pencil") + } + + Divider() + .padding(.horizontal) + } + + } + } +} +struct Block_Previews: PreviewProvider { + static var previews: some View { + Block(title: "UE - Génie logiciel", coeff: 6,note: 14) + } +} diff --git a/CalculMoy/CalculMoy/CalculMoyApp.swift b/CalculMoy/CalculMoy/CalculMoyApp.swift new file mode 100644 index 0000000..65897a0 --- /dev/null +++ b/CalculMoy/CalculMoy/CalculMoyApp.swift @@ -0,0 +1,17 @@ +// +// CalculMoyApp.swift +// CalculMoy +// +// Created by etudiant on 25/05/2023. +// + +import SwiftUI + +@main +struct CalculMoyApp: App { + var body: some Scene { + WindowGroup { + ContentView() + } + } +} diff --git a/CalculMoy/CalculMoy/ContentView.swift b/CalculMoy/CalculMoy/ContentView.swift new file mode 100644 index 0000000..ccd8d5f --- /dev/null +++ b/CalculMoy/CalculMoy/ContentView.swift @@ -0,0 +1,64 @@ +// +// ContentView.swift +// CalculMoy +// +// Created by etudiant on 25/05/2023. +// + +import SwiftUI + +struct ContentView: View { + var body: some View { + + + NavigationStack{ + + ScrollView(){ + VStack(alignment: .leading){ + Text("UEs") + .font(.largeTitle) + .bold() + .padding(.leading, 15.0) + .frame(alignment: .leading) + + Text("Détail des UEs") + .padding(.leading, 15.0) + .frame(alignment: .leading) + + Group{ + Block(title: "UE - Génie logiciel", coeff: 6,note: 14) + Block(title: "UE - Génie logiciel", coeff: 6,note: 9) + Block(title: "UE - Génie logiciel", coeff: 9,note: 18) + Block(title: "UE - Génie logiciel", coeff: 9,note: 18) + Block(title: "UE - Génie logiciel", coeff: 9,note: 18) + } + Group{ + Block(title: "UE - Génie logiciel", coeff: 9,note: 18) + Block(title: "UE - Génie logiciel", coeff: 9,note: 18) + Block(title: "UE - Génie logiciel", coeff: 9,note: 18) + Block(title: "UE - Génie logiciel", coeff: 9,note: 18) + Block(title: "UE - Génie logiciel", coeff: 9,note: 18) + } + + + + + } + + + + + }.multilineTextAlignment(.leading) + .navigationTitle("Calculette") + + + + } + } +} + +struct ContentView_Previews: PreviewProvider { + static var previews: some View { + ContentView() + } +} diff --git a/CalculMoy/CalculMoy/Preview Content/Preview Assets.xcassets/Contents.json b/CalculMoy/CalculMoy/Preview Content/Preview Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/CalculMoy/CalculMoy/Preview Content/Preview Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CalculMoy/CalculMoy/UsList.swift b/CalculMoy/CalculMoy/UsList.swift new file mode 100644 index 0000000..0bcc61f --- /dev/null +++ b/CalculMoy/CalculMoy/UsList.swift @@ -0,0 +1,62 @@ +// +// UsList.swift +// CalculMoy +// +// Created by etudiant on 02/06/2023. +// + +import SwiftUI + +struct UsList: View { + var body: some View { + NavigationStack{ + + ScrollView(){ + VStack(alignment: .leading){ + Text("UE- ") + .font(.largeTitle) + .bold() + .padding(.leading, 15.0) + .frame(alignment: .leading) + + Text("Détail des UEs") + .padding(.leading, 15.0) + .frame(alignment: .leading) + + Group{ + Block(title: "UE - Génie logiciel", coeff: 6,note: 14) + Block(title: "UE - Génie logiciel", coeff: 6,note: 9) + Block(title: "UE - Génie logiciel", coeff: 9,note: 18) + Block(title: "UE - Génie logiciel", coeff: 9,note: 18) + Block(title: "UE - Génie logiciel", coeff: 9,note: 18) + } + Group{ + Block(title: "UE - Génie logiciel", coeff: 9,note: 18) + Block(title: "UE - Génie logiciel", coeff: 9,note: 18) + Block(title: "UE - Génie logiciel", coeff: 9,note: 18) + Block(title: "UE - Génie logiciel", coeff: 9,note: 18) + Block(title: "UE - Génie logiciel", coeff: 9,note: 18) + } + + + + + } + + + + + }.multilineTextAlignment(.leading) + .navigationTitle("Details") + + + + } + } +} + +struct UsList_Previews: PreviewProvider { + static var previews: some View { + UsList() + } +} diff --git a/CalculMoy/CalculMoyTests/CalculMoyTests.swift b/CalculMoy/CalculMoyTests/CalculMoyTests.swift new file mode 100644 index 0000000..e5f7dc3 --- /dev/null +++ b/CalculMoy/CalculMoyTests/CalculMoyTests.swift @@ -0,0 +1,36 @@ +// +// CalculMoyTests.swift +// CalculMoyTests +// +// Created by etudiant on 25/05/2023. +// + +import XCTest +@testable import CalculMoy + +final class CalculMoyTests: XCTestCase { + + override func setUpWithError() throws { + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDownWithError() throws { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testExample() throws { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + // Any test you write for XCTest can be annotated as throws and async. + // Mark your test throws to produce an unexpected failure when your test encounters an uncaught error. + // Mark your test async to allow awaiting for asynchronous code to complete. Check the results with assertions afterwards. + } + + func testPerformanceExample() throws { + // This is an example of a performance test case. + self.measure { + // Put the code you want to measure the time of here. + } + } + +} diff --git a/CalculMoy/CalculMoyUITests/CalculMoyUITests.swift b/CalculMoy/CalculMoyUITests/CalculMoyUITests.swift new file mode 100644 index 0000000..928593b --- /dev/null +++ b/CalculMoy/CalculMoyUITests/CalculMoyUITests.swift @@ -0,0 +1,41 @@ +// +// CalculMoyUITests.swift +// CalculMoyUITests +// +// Created by etudiant on 25/05/2023. +// + +import XCTest + +final class CalculMoyUITests: XCTestCase { + + override func setUpWithError() throws { + // Put setup code here. This method is called before the invocation of each test method in the class. + + // In UI tests it is usually best to stop immediately when a failure occurs. + continueAfterFailure = false + + // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. + } + + override func tearDownWithError() throws { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testExample() throws { + // UI tests must launch the application that they test. + let app = XCUIApplication() + app.launch() + + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + func testLaunchPerformance() throws { + if #available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 7.0, *) { + // This measures how long it takes to launch your application. + measure(metrics: [XCTApplicationLaunchMetric()]) { + XCUIApplication().launch() + } + } + } +} diff --git a/CalculMoy/CalculMoyUITests/CalculMoyUITestsLaunchTests.swift b/CalculMoy/CalculMoyUITests/CalculMoyUITestsLaunchTests.swift new file mode 100644 index 0000000..09671b3 --- /dev/null +++ b/CalculMoy/CalculMoyUITests/CalculMoyUITestsLaunchTests.swift @@ -0,0 +1,32 @@ +// +// CalculMoyUITestsLaunchTests.swift +// CalculMoyUITests +// +// Created by etudiant on 25/05/2023. +// + +import XCTest + +final class CalculMoyUITestsLaunchTests: XCTestCase { + + override class var runsForEachTargetApplicationUIConfiguration: Bool { + true + } + + override func setUpWithError() throws { + continueAfterFailure = false + } + + func testLaunch() throws { + let app = XCUIApplication() + app.launch() + + // Insert steps here to perform after app launch but before taking a screenshot, + // such as logging into a test account or navigating somewhere in the app + + let attachment = XCTAttachment(screenshot: app.screenshot()) + attachment.name = "Launch Screen" + attachment.lifetime = .keepAlways + add(attachment) + } +} diff --git a/CalculMoy/Model/Manager.swift b/CalculMoy/Model/Manager.swift new file mode 100644 index 0000000..1fd23ae --- /dev/null +++ b/CalculMoy/Model/Manager.swift @@ -0,0 +1,23 @@ +// +// Manager.swift +// CalculMoy +// +// Created by etudiant on 11/06/2023. +// + +import Foundation + +struct Manager { + public var ues:[UE] + + + public init(ues: [UE]) { + self.ues = ues + } + + mutating func getData(){ + self.ues = Stub.uesData + } + + +} diff --git a/CalculMoy/Model/Module.swift b/CalculMoy/Model/Module.swift new file mode 100644 index 0000000..793c0bd --- /dev/null +++ b/CalculMoy/Model/Module.swift @@ -0,0 +1,15 @@ +// +// Module.swift +// CalculMoy +// +// Created by etudiant on 11/06/2023. +// + +import Foundation + +struct Module{ + let id: UUID + var moduleName: String + var coef: Int + var note: Double? +} diff --git a/CalculMoy/Model/Stub.swift b/CalculMoy/Model/Stub.swift new file mode 100644 index 0000000..7e50a56 --- /dev/null +++ b/CalculMoy/Model/Stub.swift @@ -0,0 +1,69 @@ +// +// Stub.swift +// CalculMoy +// +// Created by etudiant on 11/06/2023. +// + +import Foundation + +struct Stub{ + static let uesData:[UE] = [ + UE( + id: UUID(), + ueName: "UE - 1", + coef: 9, + modules: [ + Module(id: UUID(), moduleName: "Module - 1", coef: 2, note: 4), + Module(id: UUID(), moduleName: "Module - 2", coef: 3, note: 14), + Module(id: UUID(), moduleName: "Module - 3", coef: 5, note: 10), + Module(id: UUID(), moduleName: "Module - 4", coef: 2, note: 9), + ] + ), + UE( + id: UUID(), + ueName: "UE - 2", + coef: 9, + modules: [ + Module(id: UUID(), moduleName: "Module - 1", coef: 2, note: 4), + Module(id: UUID(), moduleName: "Module - 2", coef: 3, note: 14), + Module(id: UUID(), moduleName: "Module - 3", coef: 5, note: 10), + Module(id: UUID(), moduleName: "Module - 4", coef: 2, note: 9), + ] + ), + UE( + id: UUID(), + ueName: "UE - 3", + coef: 9, + modules: [ + Module(id: UUID(), moduleName: "Module - 1", coef: 2, note: 4), + Module(id: UUID(), moduleName: "Module - 2", coef: 3, note: 14), + Module(id: UUID(), moduleName: "Module - 3", coef: 5, note: 10), + Module(id: UUID(), moduleName: "Module - 4", coef: 2, note: 9), + ] + ), + UE( + id: UUID(), + ueName: "UE - 4", + coef: 9, + modules: [ + Module(id: UUID(), moduleName: "Module - 1", coef: 2, note: 4), + Module(id: UUID(), moduleName: "Module - 2", coef: 3, note: 14), + Module(id: UUID(), moduleName: "Module - 3", coef: 5, note: 10), + Module(id: UUID(), moduleName: "Module - 4", coef: 2, note: 9), + ] + ), + UE( + id: UUID(), + ueName: "UE - 5", + coef: 9, + modules: [ + Module(id: UUID(), moduleName: "Module - 1", coef: 2, note: 4), + Module(id: UUID(), moduleName: "Module - 2", coef: 3, note: 14), + Module(id: UUID(), moduleName: "Module - 3", coef: 5, note: 10), + Module(id: UUID(), moduleName: "Module - 4", coef: 2, note: 9), + ] + ), + + ] +} diff --git a/CalculMoy/Model/UE.swift b/CalculMoy/Model/UE.swift new file mode 100644 index 0000000..b11f7d9 --- /dev/null +++ b/CalculMoy/Model/UE.swift @@ -0,0 +1,18 @@ +// +// UE.swift +// CalculMoy +// +// Created by etudiant on 11/06/2023. +// + +import Foundation + +struct UE { + let id: UUID + var ueName: String + var coef: Int + var note: Double? + var modules: [Module] + + +} diff --git a/CalculMoy/Utile/MySlider.swift b/CalculMoy/Utile/MySlider.swift new file mode 100644 index 0000000..c54502a --- /dev/null +++ b/CalculMoy/Utile/MySlider.swift @@ -0,0 +1,28 @@ +// +// MySlider.swift +// CalculMoy +// +// Created by etudiant on 26/05/2023. +// + +import SwiftUI + +struct MySlider: View { + var body: some View { + GeometryReader{metrics in + Rectangle() + //.frame(width: metrics.size.width, height: 30) + //.background((.green) + ZStack{ + Text("hello").foregroundColor(.red) + } + + } + } +} + +struct MySlider_Previews: PreviewProvider { + static var previews: some View { + MySlider() + } +} diff --git a/CalculMoy/ViewModel/ManagerVM.swift b/CalculMoy/ViewModel/ManagerVM.swift new file mode 100644 index 0000000..c951b32 --- /dev/null +++ b/CalculMoy/ViewModel/ManagerVM.swift @@ -0,0 +1,55 @@ +// +// ManagerVM.swift +// CalculMoy +// +// Created by etudiant on 11/06/2023. +// + +import Foundation + +class ManagerVM:ObservableObject{ + @Published var ueList: [UeVM] + + init(ueList: [UeVM]) { + self.ueList = ueList + } + + init(manager:Manager){ + ueList=[] + for ue in manager.ues{ + ueList.append(UeVM(ue: ue)) + } + } + + init(){ + ueList=[] + addUEs(ues: Stub.uesData) + } + + func addUEs(ues: [UE]){ + for ue in ues { + ueList.append(UeVM(ue: ue)) + } + } + + + + public func getMoyGeneral()->Double?{ + var coef = 0 + var somme = 0.0 + + + for ue in ueList { + if let note = ue.note{ + coef += ue.coef + somme += note * Double(ue.coef) + } + } + + if coef == 0 { + return nil + } + + return somme / Double(coef) + } +} diff --git a/CalculMoy/ViewModel/ModuleVM.swift b/CalculMoy/ViewModel/ModuleVM.swift new file mode 100644 index 0000000..2fe7a30 --- /dev/null +++ b/CalculMoy/ViewModel/ModuleVM.swift @@ -0,0 +1,32 @@ +// +// ModuleVM.swift +// CalculMoy +// +// Created by etudiant on 11/06/2023. +// + +import Foundation + + + +class ModuleVM : ObservableObject{ + let id: UUID + @Published var moduleName: String + @Published var coef: Int + @Published var note: Double? + + + public init(id: UUID, moduleName: String, coef: Int, note: Double? = nil) { + self.id = id + self.moduleName = moduleName + self.coef = coef + self.note = note + } + + public init(module: Module){ + self.id = module.id + self.moduleName = module.moduleName + self.coef = module.coef + self.note = module.note + } +} diff --git a/CalculMoy/ViewModel/UeVM.swift b/CalculMoy/ViewModel/UeVM.swift new file mode 100644 index 0000000..1faba17 --- /dev/null +++ b/CalculMoy/ViewModel/UeVM.swift @@ -0,0 +1,72 @@ +// +// UeVM.swift +// CalculMoy +// +// Created by etudiant on 11/06/2023. +// + +import Foundation + +class UeVM:ObservableObject{ + + let id: UUID + @Published var ueName: String + @Published var coef: Int + @Published var note: Double? + @Published var moduleVMs: [ModuleVM] + + func calculMoy()->Double?{ + var coef = 0 + var somme = 0.0 + + for module in moduleVMs { + if let note = module.note { + coef += module.coef + somme += note * Double(module.coef) + } + + } + + if coef == 0 { + return nil + } + + return somme / Double(coef) + + } + + public init(id: UUID, ueName: String, coef: Int, note: Double? = nil, modules: [ModuleVM]) { + self.id = id + self.ueName = ueName + self.coef = coef + self.note = note + self.moduleVMs = modules + } + + public init (ue: UE){ + id = ue.id + ueName = ue.ueName + coef = ue.coef + note = ue.note + moduleVMs=[] + for module in ue.modules { + moduleVMs.append(ModuleVM(module: module)) + } + } + + + + public func addModuleVM(moduleVM: ModuleVM){ + moduleVMs.append(moduleVM) + } + + public func deleteModuleVM(modduleVM: ModuleVM){ + guard let x = getIndexById(id: modduleVM.id) else {return} + moduleVMs.remove(at: x) + } + + func getIndexById(id:UUID)->Int?{ + return moduleVMs.firstIndex(where: {$0.id == id}) + } + +} diff --git a/CalculMoy/Views/Components/ModuleView.swift b/CalculMoy/Views/Components/ModuleView.swift new file mode 100644 index 0000000..1230229 --- /dev/null +++ b/CalculMoy/Views/Components/ModuleView.swift @@ -0,0 +1,118 @@ +// +// ModuleView.swift +// CalculMoy +// +// Created by etudiant on 12/06/2023. +// + +import SwiftUI + + +final class Slider: UISlider { + + override func draw(_ rect: CGRect) { + super.draw(rect) + setup() + } + + private func setup() { + clear() + } + + private func clear() { + tintColor = .clear + maximumTrackTintColor = .clear + backgroundColor = .clear + thumbTintColor = .clear + } +} + + +struct ModuleView: View { + + @ObservedObject var moduleVM:ModuleVM + @ObservedObject var ueVm: UeVM + @ObservedObject var managerVm: ManagerVM + @State private var editable:Bool=false + + + + + var body: some View { + + HStack{ + + + + VStack{ + + HStack{ + Text("> " + moduleVM.moduleName) + Spacer() + Text(String(moduleVM.coef)) + } + + HStack{ + + if let note = moduleVM.note{ + + UISliderView( + value: Binding( + get: {note}, set: { + newValue in + if editable{ + moduleVM.note = newValue + } + + } ), + editable: $editable, + minValue: 0.0, + maxValue: 20.00 + + + ).disabled(!editable) + .scaleEffect(x: 1, y: 4, anchor: .center) + + + + + + } + if let note = moduleVM.note{ + + Text(String(format: "%.2f",note)) + } + + + } + + + + + + }.padding(10) + Button{ + //do somthing + editable = !editable + }label: { + Image(systemName: "square.and.pencil") + }.foregroundColor( + editable ? .green : .gray + ) + + } + + } +} + +struct ModuleView_Previews: PreviewProvider { + + static var managerData:ManagerVM=ManagerVM( + manager: Manager(ues: Stub.uesData) + ) + static var previews: some View { + ModuleView( + moduleVM: ModuleVM(module: Stub.uesData[0].modules[0]), ueVm: UeVM(ue: Stub.uesData[0]), managerVm: managerData + ) + } +} diff --git a/CalculMoy/Views/Components/UEView.swift b/CalculMoy/Views/Components/UEView.swift new file mode 100644 index 0000000..d9f7c6f --- /dev/null +++ b/CalculMoy/Views/Components/UEView.swift @@ -0,0 +1,54 @@ +// +// UEView.swift +// CalculMoy +// +// Created by etudiant on 12/06/2023. +// + +import SwiftUI + +struct UEView: View { + + @ObservedObject var ueVm: UeVM + @ObservedObject var managerVm: ManagerVM + + var body: some View { + VStack{ + + HStack{ + Text("> " + ueVm.ueName) + Spacer() + Text(String(ueVm.coef)) + } + + HStack{ + if let note = ueVm.calculMoy(){ + ProgressView(value: note,total: 20) + .accentColor(note < 10 ? .red : .green) + .scaleEffect(x: 1, y: 4, anchor: .center) + Text(String(format: "%.2f",note)) + } + + } + + + } + .padding() + .background(Color.gray.opacity(0.2)) + .cornerRadius(12) + .padding(.horizontal) + } +} + +struct UEView_Previews: PreviewProvider { + + static var managerData:ManagerVM=ManagerVM( + manager: Manager(ues: Stub.uesData) + ) + + static var previews: some View { + UEView( + ueVm: UeVM(ue: Stub.uesData[0]) , managerVm: managerData + ) + } +} diff --git a/CalculMoy/Views/Components/UISliderView.swift b/CalculMoy/Views/Components/UISliderView.swift new file mode 100644 index 0000000..064bb75 --- /dev/null +++ b/CalculMoy/Views/Components/UISliderView.swift @@ -0,0 +1,145 @@ +// +// MySlider.swift +// CalculMoy +// +// Created by etudiant on 12/06/2023. +// + +import SwiftUI + +struct UISliderView: UIViewRepresentable { + + @Binding var value: Double + @Binding var editable: Bool + + + + var minValue = 1.0 + + var maxValue = 100.0 + + var thumbColor: UIColor = UIColor(Color.black.opacity(0)) + + var minTrackColor: UIColor = .red + + var maxTrackColor: UIColor = .lightGray + + + + + + class Coordinator: NSObject { + + var value: Binding + + + + init(value: Binding) { + + self.value = value + + } + + + + @objc func valueChanged(_ sender: UISlider) { + + self.value.wrappedValue = Double(sender.value) + + } + + } + + + + func makeCoordinator() -> UISliderView.Coordinator { + + Coordinator(value: $value) + + } + + + + func makeUIView(context: Context) -> UISlider { + + let slider = UISlider(frame: .zero) + + slider.thumbTintColor = thumbColor + + slider.minimumTrackTintColor = minTrackColor + + slider.maximumTrackTintColor = maxTrackColor + + slider.minimumValue = Float(minValue) + + slider.maximumValue = Float(maxValue) + + + + + + + + if editable{ + slider.value = Float(value) + } + + + + + + + slider.addTarget( + + context.coordinator, + + action: #selector(Coordinator.valueChanged(_:)), + + for: .valueChanged + + ) + + + + return slider + + } + + + + func updateUIView(_ uiView: UISlider, context: Context) { + + + + uiView.value = Float(value) + uiView.minimumTrackTintColor = value > 10 ? .green : .red + + } + +} + + +struct UISliderView_Previews: PreviewProvider { + private var currentValue = 6.0 + + static var previews: some View { +// UISliderView(value: Binding( +// get: {currentValue},set: { value in +// currentValue +// } +// +// +// ), +// +// minValue: 1.0, +// +// maxValue: 10.0, +// +// thumbColor: .red, +// +// minTrackColor: .purple, +// +// maxTrackColor: .green) + Text("je") + } +} diff --git a/MyPlayground.playground/Contents.swift b/MyPlayground.playground/Contents.swift new file mode 100644 index 0000000..9d86688 --- /dev/null +++ b/MyPlayground.playground/Contents.swift @@ -0,0 +1,3 @@ +import UIKit + +var greeting = "Hello, playground" diff --git a/MyPlayground.playground/contents.xcplayground b/MyPlayground.playground/contents.xcplayground new file mode 100644 index 0000000..7627317 --- /dev/null +++ b/MyPlayground.playground/contents.xcplayground @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/MyPlayground.playground/playground.xcworkspace/contents.xcworkspacedata b/MyPlayground.playground/playground.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/MyPlayground.playground/playground.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/MyPlayground.playground/playground.xcworkspace/xcuserdata/etudiant.xcuserdatad/UserInterfaceState.xcuserstate b/MyPlayground.playground/playground.xcworkspace/xcuserdata/etudiant.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..e860b98a42d730fcfc49e5f9b6b2e3903e8f3fe8 GIT binary patch literal 5926 zcmbVQd3+Pso&UX=@r*{&$g&NN!5jwL9L6T{DVuQkkZgnx9LpERSO|MCgJsFg$Y6&M zUb2)NGzke|Dan!;n}vjKLK@P0w>jFhp&=z4yV*V{A@QnaYcbqNSCzyb#ez=HtR_N?u)swt81x~!nuy+y&d=B#LB zpgk+HX{+2F)slhi9SJxS8~nBMu-sD-BRUTj5L^7wU{t2$l=DuofgNswG?)QPAQ$pr zDclS$$cF+b1UIaN)!>6QPz!6p4{fjxHo!*M3|pZe20(*v!CtrbaAK(MH z3ZKBI@EQDx5W*0aa3q27L?B5dnWT_uB#q1@v&lS?P4Y-SDJCVPl2j27@seuNMEs@Y|ZKp1vPCHk|3EflpTd>Fr9LA4owX>r};eIwusuN z4FtPoPo#UWUk*nD&Ma@WtEkLV>B`G5F00BbDy??sRhE?&7+0Z93HL;H;K)q#sX|qQ;a*wS&LeLc?Dd5=N08hvhY)dc&p3ISxs}N< zzM0NXjB8s2#gH>HLLC>N6v|*3+|pqhI2`Pk+s#KA8K*S(>j$I3O(EH%phl5!P#qpa z^5w9iv%xYv4Z4U=>tB>KK$m1yoWeO`^$T-~lgG(-b<5PS;Ou4xZX|+WWh= zpne+qOu$)uBZ9i17H!ew9$e{>wWtyf>S9$6n+uI~3vRS-D!tAiE@~aro3@A#G{UV@ z2b!T}vbB~&`>1Y#3kG64pz|nVlBH>;ExRCq_|=bUcoe!|MSRyFbVH6oc@%o+Ox^T4 z;Cn$am#3S{`ykXcZggXpG3e9xG0DTAj8G)imu`d35tXE==~7!3xTbCJ|=F8Lco zbIzFH8i|B91yx_1YrvT{F=t3Ld1~j*g5u)bjQoPaUAY-M%Sv3i8E$vUu3d2hKLCHP z8~8!k4-dh^Z~z{GgLDyHOmpZGnoINO(i3Rh@4#Vr6duE;BWP3?Eu=-%jZdX|gm5Bz z|CY#(hTwLkH;BraL*uU%7(g&4AXQ6L2`N!U*4mVw=oXXA7uE*Q(Ie^v+4#yyWIBWK zGY;sBEOA|)gp)cLpQ8Ck;k&dzmo2eIjSLQ$u>?Izi<6#$XHD>DmJgJJ{)x{# z4?oa1`93W^3O}SJ`X=)RHCb&`<;}9H$~{#W0DB|quy-gbhxKIX^Jpe?e`>%uvwWMe z;rNa(z^@_aB)kYO!OQS-_yxQIzl2}Gt8j*v(Pi`&x}2_{E9oj)PAh2TNq7y;!t3xG zI0tXQdANZ4T%uLfORH%OT}^$oiw@H5bcZfkMm$PRSi_IWJ?abh$U}`m-NreU^5%#t zS4H{wM!jMxiCePsaQt21g;m41w# zb;04tASS2j|3?lpFJQ#Q1B)dLBgUI&oe>*q)Qb)ct%=!UK$SIoFyf!qRUaHu`jy+{ z9%CZ}k+Hg0Rt@H@ioD|@{2s1g*mxf^{f9`<;2+n$P7e1PD4R6a8Vn7}PT~aWF(cDQ z@W=I&=11XUSTT8^W9@((_Jz@*H75j|$uUjqT__%r+kzJ$NxLD$kcT2CA3+T-vy_zJ$p-)k7O8tJXH9e+3IAq%xI&1lA# znCdC!*lIKsf)59~`?L+Q6TuVBFI=+T7nS>KG1eLRVm5lrV5mp;n?@`}n&fSR75h*WmLbzIm5@~0O4H6mBAG$k48xOjGOM-0-+-cxlJr<2Aal@)WG-EY$$-p9 z>P(V_;jMcR{Vp6UH6}?xJ80)6vVbfki;#A)@y$i+g$)p6gw;iDFrt2`(&I=4XM-FtR_CPhSbs?D$~uh_ZY_iv#=O45v5+N4(&QP(pxdC z=;;jek-S5Po7NQEVfdL|<4v87)pY*u$N;9|j46}G@`#E>pw_J_1Bh~5pE`xa*u8mp zK#t4VM%H1lChZiR@2m;dBuwa9BqUcWp{T6t%EpPi$VQzwKto4KkoFsn=4ovnw}Js| z6SFcXqhvGbrD3X#dop`e0n-y8@ z)ZZquv=d)-9qWU=VI?})BWISYBSxl(3phk>zi$6B+;((67j0

l|a=S9h^2;(> zP^)F7jhK57LgUh#LL!S&uh)g!Rp(U{6}hqVt;CwW!c&x2;Bn`B3yVBO748BvxW*gB zi8B8p3Qq zsZ)MD0==)Mb`-PF?I|rSET}-aN=ouv1yvQ;s$;)iT3zU>D0Jml78JVH@6?sf%_u7_ z*>%C=t**II&x!{$ng3|@>ha$6(wf@hy87&fwb(_(kI|HJ@`_mVGiNHr^@y1W-ZgpgqiKkoy)TBGl~kHW8PriVcuolV}8$EW&X@uW2d2#i`aa2CF^BtSRY%< zHnGiYE8EU?ushk)sOZP+RaEvf_HXQ0?APoy&c@j}iA&_txY^tSZZWrn%i~J8m0T6q z$oaVzuAS@PIysr!!foY3+#t7y+s8e^9pnyiBivDLjC+=QfqRMjIrj?pEA9;U8uvQ) zHuo-fnY+S$!2N;yBX^bil=~`Sd4ims;#s>mqB8HP^b-T4imuZn18&My=beL)Kl^-PU`o4_Y6w9$Y>Y z^S0mG-nPAKyKK8+`@r^@?MpjjpJ`ucci9W^^&~U9s=AKV^T} ze$IZue#!o({Vn_N>|fZww*QYrBu?Tbi!@8hmU5(AX{qFrR!APHT3Riwk#3dzQj63k zt&@7CsC2iqUpgWkla5PIN++f7NvEanOFxu;EWIq9lirZdOBbbom99u1N*_sArB9{L zr7xwgrE3mwFpfk=sw2%Y(=p4D>Bx30bS!o(aTGgNI%*wFj%G)zqumj31RdQD+0pA5 icHHII=QxnEGi6uG-jqjD9*emuWB!xprg$o(jQ%gCN9mUU literal 0 HcmV?d00001 diff --git a/MyPlayground.playground/timeline.xctimeline b/MyPlayground.playground/timeline.xctimeline new file mode 100644 index 0000000..bf468af --- /dev/null +++ b/MyPlayground.playground/timeline.xctimeline @@ -0,0 +1,6 @@ + + + + +