start adding review states
- ID
ae1b773- date
2023-06-08 12:37:17+00:00- author
Alex Chan <alex@alexwlchan.net>- parent
3c2551b- message
start adding review states- changed files
2 files, 56 additions, 1 deletion
Changed files
BlinkReviewer/BlinkReviewer/Views/ThumbnailImage.swift (1422) → BlinkReviewer/BlinkReviewer/Views/ThumbnailImage.swift (3039)
diff --git a/BlinkReviewer/BlinkReviewer/Views/ThumbnailImage.swift b/BlinkReviewer/BlinkReviewer/Views/ThumbnailImage.swift
index dba8cd7..64dfb7e 100644
--- a/BlinkReviewer/BlinkReviewer/Views/ThumbnailImage.swift
+++ b/BlinkReviewer/BlinkReviewer/Views/ThumbnailImage.swift
@@ -8,6 +8,12 @@
import SwiftUI
import Photos
+enum ReviewState {
+ case Approved
+ case Rejected
+ case NeedsAction
+}
+
/// Renders a square thumbnail for an image.
///
/// The image will be expanded to fill the square, and may be clipped
@@ -20,6 +26,42 @@ struct ThumbnailImage: View {
isSelected ? 70.0 : 50.0
}
+ var state: ReviewState? {
+ var result: ReviewState? = nil
+
+ asset.albums().forEach { album in
+ switch (album.localizedTitle) {
+ case "Approved":
+ result = .Approved
+ case "Rejected":
+ result = .Rejected
+ case "Needs Action":
+ result = .NeedsAction
+ default:
+ break
+ }
+ }
+
+ return result
+ }
+
+ var stateColor: Color {
+ switch (state) {
+ case .Approved:
+ return .green
+ case .Rejected:
+ return .red
+ case .NeedsAction:
+ return .blue
+ default:
+ return .gray.opacity(0.5)
+ }
+ }
+
+ var cornerRadius: CGFloat {
+ return isSelected ? 7.0 : 5.0
+ }
+
var body: some View {
Image(nsImage: asset.getThumbnail())
.resizable()
@@ -35,6 +77,12 @@ struct ThumbnailImage: View {
.scaledToFill()
.frame(width: size, height: size, alignment: .center)
.clipped()
+ .cornerRadius(cornerRadius)
+ .overlay(
+ // https://www.appcoda.com/swiftui-border/
+ RoundedRectangle(cornerRadius: cornerRadius)
+ .stroke(stateColor, lineWidth: state != nil ? 3.0 : 1.0)
+ )
.overlay(alignment: Alignment(horizontal: .leading, vertical: .bottom)) {
if (asset.isFavorite) {
Image(systemName: "heart.fill")
@@ -43,5 +91,12 @@ struct ThumbnailImage: View {
.shadow(radius: 2.0)
}
}
+ .overlay(alignment: Alignment(horizontal: .leading, vertical: .top)) {
+ if (state != nil) {
+ Image(systemName: "checkmark.circle.fill").foregroundColor(stateColor).accentColor(.white).padding(2).font(.title2)
+// "info.circle.fill"
+// "trash.circle.fill
+ }
+ }
}
}
BlinkReviewer/BlinkReviewer/Views/ThumbnailList.swift (2810) → BlinkReviewer/BlinkReviewer/Views/ThumbnailList.swift (2810)
diff --git a/BlinkReviewer/BlinkReviewer/Views/ThumbnailList.swift b/BlinkReviewer/BlinkReviewer/Views/ThumbnailList.swift
index caa6486..cec0cdb 100644
--- a/BlinkReviewer/BlinkReviewer/Views/ThumbnailList.swift
+++ b/BlinkReviewer/BlinkReviewer/Views/ThumbnailList.swift
@@ -50,7 +50,7 @@ struct ThumbnailList: View {
.environment(\.layoutDirection, .rightToLeft)
}.padding()
}
- .frame(height: 70)
+ .frame(height: 90)
.flipsForRightToLeftLayoutDirection(true)
.environment(\.layoutDirection, .rightToLeft)
.onChange(of: selectedAssetIndex, perform: { newIndex in