From acbdbdd13c3b0bf641c2182c427a4382600def28 Mon Sep 17 00:00:00 2001 From: DJYohann Date: Tue, 30 May 2023 11:30:54 +0200 Subject: [PATCH] :sparkles: Add model --- docs/README.md | 0 src/App/App.xcodeproj/project.pbxproj | 16 +++--- .../BadColor.colorset/Contents.json | 38 ++++++++++++ .../GoodColor.colorset/Contents.json | 38 ++++++++++++ src/App/Views/BlocListItem.swift | 13 ++--- src/App/Views/CalculatorView.swift | 8 --- src/App/Views/MatiereItem.swift | 37 ------------ src/App/Views/NoteInfo.swift | 28 +++++++++ src/App/Views/NoteSlider.swift | 54 ++++++++++++++++++ src/App/Views/UEItem.swift | 37 ------------ src/App/Views/UEListItem.swift | 10 ++-- src/App/Views/UEView.swift | 12 ++-- .../UserInterfaceState.xcuserstate | Bin 32633 -> 45714 bytes src/Model/Sources/Model/Bloc.swift | 18 ++++++ src/Model/Sources/Model/Matiere.swift | 20 +++++++ src/Model/Sources/Model/Model.swift | 6 -- src/Model/Sources/Model/Stub.swift | 48 ++++++++++++++++ src/Model/Sources/Model/UE.swift | 22 +++++++ 18 files changed, 289 insertions(+), 116 deletions(-) create mode 100644 docs/README.md create mode 100644 src/App/App/Assets.xcassets/BadColor.colorset/Contents.json create mode 100644 src/App/App/Assets.xcassets/GoodColor.colorset/Contents.json delete mode 100644 src/App/Views/MatiereItem.swift create mode 100644 src/App/Views/NoteInfo.swift create mode 100644 src/App/Views/NoteSlider.swift delete mode 100644 src/App/Views/UEItem.swift create mode 100644 src/Model/Sources/Model/Bloc.swift create mode 100644 src/Model/Sources/Model/Matiere.swift delete mode 100644 src/Model/Sources/Model/Model.swift create mode 100644 src/Model/Sources/Model/Stub.swift create mode 100644 src/Model/Sources/Model/UE.swift diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..e69de29 diff --git a/src/App/App.xcodeproj/project.pbxproj b/src/App/App.xcodeproj/project.pbxproj index dc9f86f..ba62493 100644 --- a/src/App/App.xcodeproj/project.pbxproj +++ b/src/App/App.xcodeproj/project.pbxproj @@ -18,9 +18,9 @@ 1E0D89132A1E7C4500786FE3 /* CalculatorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E0D89122A1E7C4500786FE3 /* CalculatorView.swift */; }; 1E0D89152A1E7F5800786FE3 /* BlocListItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E0D89142A1E7F5800786FE3 /* BlocListItem.swift */; }; 1E0D89172A1E838700786FE3 /* UEListItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E0D89162A1E838700786FE3 /* UEListItem.swift */; }; - 1E0D89192A1E84AE00786FE3 /* UEItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E0D89182A1E84AE00786FE3 /* UEItem.swift */; }; 1E0D891B2A1E9BEF00786FE3 /* UEView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E0D891A2A1E9BEF00786FE3 /* UEView.swift */; }; - 1E0D891D2A1EBBBF00786FE3 /* MatiereItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E0D891C2A1EBBBF00786FE3 /* MatiereItem.swift */; }; + 1E160AB22A1FA51600ECDB3F /* NoteSlider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E160AB12A1FA51600ECDB3F /* NoteSlider.swift */; }; + 1EDC99232A20DDAB00C3561D /* NoteInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EDC99222A20DDAB00C3561D /* NoteInfo.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -54,9 +54,9 @@ 1E0D89122A1E7C4500786FE3 /* CalculatorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalculatorView.swift; sourceTree = ""; }; 1E0D89142A1E7F5800786FE3 /* BlocListItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlocListItem.swift; sourceTree = ""; }; 1E0D89162A1E838700786FE3 /* UEListItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UEListItem.swift; sourceTree = ""; }; - 1E0D89182A1E84AE00786FE3 /* UEItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UEItem.swift; sourceTree = ""; }; 1E0D891A2A1E9BEF00786FE3 /* UEView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UEView.swift; sourceTree = ""; }; - 1E0D891C2A1EBBBF00786FE3 /* MatiereItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MatiereItem.swift; sourceTree = ""; }; + 1E160AB12A1FA51600ECDB3F /* NoteSlider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NoteSlider.swift; sourceTree = ""; }; + 1EDC99222A20DDAB00C3561D /* NoteInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NoteInfo.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -156,9 +156,9 @@ 1E0D89122A1E7C4500786FE3 /* CalculatorView.swift */, 1E0D89142A1E7F5800786FE3 /* BlocListItem.swift */, 1E0D89162A1E838700786FE3 /* UEListItem.swift */, - 1E0D89182A1E84AE00786FE3 /* UEItem.swift */, 1E0D891A2A1E9BEF00786FE3 /* UEView.swift */, - 1E0D891C2A1EBBBF00786FE3 /* MatiereItem.swift */, + 1E160AB12A1FA51600ECDB3F /* NoteSlider.swift */, + 1EDC99222A20DDAB00C3561D /* NoteInfo.swift */, ); path = Views; sourceTree = ""; @@ -296,12 +296,12 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 1E160AB22A1FA51600ECDB3F /* NoteSlider.swift in Sources */, 1E0D89152A1E7F5800786FE3 /* BlocListItem.swift in Sources */, 1E0D88E52A1E759A00786FE3 /* ContentView.swift in Sources */, - 1E0D891D2A1EBBBF00786FE3 /* MatiereItem.swift in Sources */, 1E0D89132A1E7C4500786FE3 /* CalculatorView.swift in Sources */, 1E0D88E32A1E759A00786FE3 /* AppApp.swift in Sources */, - 1E0D89192A1E84AE00786FE3 /* UEItem.swift in Sources */, + 1EDC99232A20DDAB00C3561D /* NoteInfo.swift in Sources */, 1E0D891B2A1E9BEF00786FE3 /* UEView.swift in Sources */, 1E0D89172A1E838700786FE3 /* UEListItem.swift in Sources */, ); diff --git a/src/App/App/Assets.xcassets/BadColor.colorset/Contents.json b/src/App/App/Assets.xcassets/BadColor.colorset/Contents.json new file mode 100644 index 0000000..b389538 --- /dev/null +++ b/src/App/App/Assets.xcassets/BadColor.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x30", + "green" : "0x3B", + "red" : "0xFF" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xFF", + "green" : "0xFF", + "red" : "0xFF" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/src/App/App/Assets.xcassets/GoodColor.colorset/Contents.json b/src/App/App/Assets.xcassets/GoodColor.colorset/Contents.json new file mode 100644 index 0000000..4395dbb --- /dev/null +++ b/src/App/App/Assets.xcassets/GoodColor.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x59", + "green" : "0xC7", + "red" : "0x34" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xFF", + "green" : "0xFF", + "red" : "0xFF" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/src/App/Views/BlocListItem.swift b/src/App/Views/BlocListItem.swift index 4e3c559..c57f9f5 100644 --- a/src/App/Views/BlocListItem.swift +++ b/src/App/Views/BlocListItem.swift @@ -1,10 +1,3 @@ -// -// BlocListItem.swift -// App -// -// Created by BREUIL Yohann on 24/05/2023. -// - import SwiftUI struct BlocListItem: View { @@ -16,12 +9,14 @@ struct BlocListItem: View { HStack { Label("Total", systemImage: "doc.on.doc.fill") Spacer() - Label("11.67", systemImage: "graduationcap.circle.fill") + Text("11.67") + Image(systemName: "graduationcap.circle.fill") } HStack { Label("Total", systemImage: "doc.on.doc.fill") Spacer() - Label("11.67", systemImage: "graduationcap.circle.fill") + Text("11.67") + Image(systemName: "graduationcap.circle.fill") } } .padding() diff --git a/src/App/Views/CalculatorView.swift b/src/App/Views/CalculatorView.swift index a2b4f02..39c9efb 100644 --- a/src/App/Views/CalculatorView.swift +++ b/src/App/Views/CalculatorView.swift @@ -1,12 +1,4 @@ -// -// CalculatorView.swift -// App -// -// Created by BREUIL Yohann on 24/05/2023. -// - import SwiftUI -import Model struct CalculatorView: View { var body: some View { diff --git a/src/App/Views/MatiereItem.swift b/src/App/Views/MatiereItem.swift deleted file mode 100644 index be8aac1..0000000 --- a/src/App/Views/MatiereItem.swift +++ /dev/null @@ -1,37 +0,0 @@ -// -// MatiereItem.swift -// App -// -// Created by BREUIL Yohann on 24/05/2023. -// - -import SwiftUI - -struct MatiereItem: View { - @State private var note = 12.5 - - var body: some View { - VStack { - HStack() { - Text("Qualité de Développement") - Spacer() - Text("6") - } - HStack { - Slider( - value: $note, - in: 0...20, - step: 0.1 - ) - Text("\(note)") - } - Divider() - } - } -} - -struct MatiereItem_Previews: PreviewProvider { - static var previews: some View { - MatiereItem() - } -} diff --git a/src/App/Views/NoteInfo.swift b/src/App/Views/NoteInfo.swift new file mode 100644 index 0000000..a7acdf4 --- /dev/null +++ b/src/App/Views/NoteInfo.swift @@ -0,0 +1,28 @@ +// +// NoteInfo.swift +// App +// +// Created by BREUIL Yohann on 26/05/2023. +// + +import SwiftUI + +struct NoteInfo: View { + var body: some View { + VStack { + HStack() { + Text("Qualité de Développement") + Spacer() + Text("6") + } + NoteSlider() + Divider() + } + } +} + +struct NoteInfo_Previews: PreviewProvider { + static var previews: some View { + NoteInfo() + } +} diff --git a/src/App/Views/NoteSlider.swift b/src/App/Views/NoteSlider.swift new file mode 100644 index 0000000..e6399d8 --- /dev/null +++ b/src/App/Views/NoteSlider.swift @@ -0,0 +1,54 @@ +// +// NoteSliderComponent.swift +// App +// +// Created by BREUIL Yohann on 25/05/2023. +// + +import SwiftUI + +struct NoteSlider: View { + @State private var sliderProgress: CGFloat = 0 + @State private var sliderWidth: CGFloat = 20 + @State private var sliderMaxWidth: CGFloat = 200 + @State private var sliderCurrentWidth: CGFloat = 0 + + var drag: some Gesture { + DragGesture() + .onChanged { value in + let translation = value.translation.width + sliderWidth = translation + sliderCurrentWidth + + sliderWidth = sliderWidth > sliderMaxWidth ? sliderMaxWidth : sliderWidth + sliderWidth = sliderWidth >= 0 ? sliderWidth : 20 + + let progress = sliderWidth / sliderMaxWidth + sliderProgress = progress <= 1.0 ? progress : 1 + } + .onEnded { value in + sliderWidth = sliderWidth > sliderMaxWidth ? sliderMaxWidth : sliderWidth + sliderWidth = sliderWidth >= 0 ? sliderWidth : 20 + + sliderCurrentWidth = sliderWidth + } + } + + var body: some View { + HStack { + Rectangle() + .fill(sliderProgress < 0.5 ? Color("BadColor") : Color("GoodColor")) + .frame(width: sliderWidth, height: 25) + .clipShape(Capsule()) + .gesture(drag) + Spacer() + Text("\(sliderProgress)") + } + .padding() + } +} + +struct NoteSliderComponent_Previews: PreviewProvider { + static var previews: some View { + NoteSlider() + } +} diff --git a/src/App/Views/UEItem.swift b/src/App/Views/UEItem.swift deleted file mode 100644 index 4db5f0e..0000000 --- a/src/App/Views/UEItem.swift +++ /dev/null @@ -1,37 +0,0 @@ -// -// UEItem.swift -// App -// -// Created by BREUIL Yohann on 24/05/2023. -// - -import SwiftUI - -struct UEItem: View { - @State private var note = 12.5 - - var body: some View { - VStack { - HStack() { - Text("UE1 Génie Logiciel") - Spacer() - Text("6") - } - HStack { - Slider( - value: $note, - in: 0...20, - step: 0.1 - ) - Text("\(note)") - } - Divider() - } - } -} - -struct UEItem_Previews: PreviewProvider { - static var previews: some View { - UEItem() - } -} diff --git a/src/App/Views/UEListItem.swift b/src/App/Views/UEListItem.swift index ccbd87d..684574e 100644 --- a/src/App/Views/UEListItem.swift +++ b/src/App/Views/UEListItem.swift @@ -16,7 +16,7 @@ struct UEListItem: View { Text("Détails des UEs") LazyVStack { HStack { - UEItem() + NoteInfo() NavigationLink(destination: UEView()) { Image(systemName: "square.and.pencil") } @@ -24,7 +24,7 @@ struct UEListItem: View { } .padding() HStack { - UEItem() + NoteInfo() NavigationLink(destination: UEView()) { Image(systemName: "square.and.pencil") } @@ -32,7 +32,7 @@ struct UEListItem: View { } .padding() HStack { - UEItem() + NoteInfo() NavigationLink(destination: UEView()) { Image(systemName: "square.and.pencil") } @@ -40,7 +40,7 @@ struct UEListItem: View { } .padding() HStack { - UEItem() + NoteInfo() NavigationLink(destination: UEView()) { Image(systemName: "square.and.pencil") } @@ -48,7 +48,7 @@ struct UEListItem: View { } .padding() HStack { - UEItem() + NoteInfo() NavigationLink(destination: UEView()) { Image(systemName: "square.and.pencil") } diff --git a/src/App/Views/UEView.swift b/src/App/Views/UEView.swift index 8ae4b7f..231cc7d 100644 --- a/src/App/Views/UEView.swift +++ b/src/App/Views/UEView.swift @@ -11,7 +11,7 @@ struct UEView: View { var body: some View { NavigationStack { ScrollView { - UEItem() + NoteInfo() VStack(alignment: .leading) { Label("Coefficcient : 6", systemImage: "xmark.circle.fill") Label("Détails des notes ", systemImage: "note.text") @@ -21,29 +21,30 @@ struct UEView: View { Button(action: {}) { Image(systemName: "lock") } - MatiereItem() + NoteInfo() } HStack { Button(action: {}) { Image(systemName: "lock") } - MatiereItem() + NoteInfo() } HStack { Button(action: {}) { Image(systemName: "lock") } - MatiereItem() + NoteInfo() } HStack { Button(action: {}) { Image(systemName: "lock") } - MatiereItem() + NoteInfo() } } } + .padding() .navigationTitle("UE1 Génie logiciel") .toolbar { Button(action: {}) { @@ -51,7 +52,6 @@ struct UEView: View { } } } - } } diff --git a/src/AverageCalculator.xcworkspace/xcuserdata/djyohann.xcuserdatad/UserInterfaceState.xcuserstate b/src/AverageCalculator.xcworkspace/xcuserdata/djyohann.xcuserdatad/UserInterfaceState.xcuserstate index e4a45d89120453015653f5c1b1361d100721ea44..d274cf75c6a35f1c0a1f801fd86a9f80d97d0716 100644 GIT binary patch literal 45714 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 [Bloc] {[ + Bloc(name: "Total", ues: [ + UE(number: 1, name: "Génie logiciel", factor: 6, matieres: [ + Matiere(name: "Processus de développement", factor: 4, note: 19.04), + Matiere(name: "Programmation objets", factor: 9, note: 9.08), + Matiere(name: "Qualité de développement", factor: 5, note: 13), + Matiere(name: "Remise à niveau Objets", factor: 4, note: 12), + ]), + UE(number: 2, name: "Systèmes et réseaux", factor: 6, matieres: [ + Matiere(name: "Internet des Objets", factor: 4, note: 10), + Matiere(name: "Réseaux", factor: 4, note: 10), + Matiere(name: "Services Mobiles", factor: 4, note: 10), + Matiere(name: "Système", factor: 5, note: 10) + ]), + UE(number: 3, name: "Insertion Professionnellle", factor: 6, matieres: [ + Matiere(name: "Anglais", factor: 5, note: 10), + Matiere(name: "Économie", factor: 4, note: 10), + Matiere(name: "Gestion", factor: 3, note: 10), + Matiere(name: "Communication", factor: 4, note: 10) + ]), + UE(number: 4, name: "Technologies Mobiles 1", factor: 9, matieres: [ + Matiere(name: "Android", factor: 6, note: 10), + Matiere(name: "Architecture de projets .NET (1)", factor: 5, note: 10), + Matiere(name: "C++", factor: 4, note: 10), + Matiere(name: "Swift", factor: 5, note: 10) + ]), + UE(number: 5, name: "Technologies Mobiles 2", factor: 9, matieres: [ + Matiere(name: "Architecture de projets .NET (2)", factor: 4, note: 10), + Matiere(name: "Client / Serveur", factor: 4, note: 10), + Matiere(name: "iOS", factor: 5, note: 10), + Matiere(name: "Multiplateformes", factor: 3, note: 10), + Matiere(name: "QT Quick", factor: 5, note: 10), + Matiere(name: "Xamarin", factor: 5, note: 10) + ]), + ]), + Bloc(name: "Projet / Stage", ues: [ + UE(number: 6, name: "Projet", factor: 9, matieres: [ + Matiere(name: "Projet", factor: 1, note: 10) + ]), + UE(number: 7, name: "Stage", factor: 15, matieres: [ + Matiere(name: "Stage", factor: 1, note: 10) + ]) + ]) + ]} +} diff --git a/src/Model/Sources/Model/UE.swift b/src/Model/Sources/Model/UE.swift new file mode 100644 index 0000000..550627f --- /dev/null +++ b/src/Model/Sources/Model/UE.swift @@ -0,0 +1,22 @@ +import Foundation + +public struct UE: Identifiable { + public let id: UUID + + public var number: Int + public var name: String + public var factor: Int + public var matieres: [Matiere] + + init(id: UUID, number: Int, name: String, factor: Int, matieres: [Matiere]) { + self.id = id + self.number = number + self.name = name + self.factor = factor + self.matieres = matieres + } + + init(number: Int, name: String, factor: Int, matieres: [Matiere]) { + self.init(id: UUID(), number: number, name: name, factor: factor, matieres: matieres) + } +}