Skip to content

Commit

Permalink
ui: Sync preview/make collage icons with the real status.
Browse files Browse the repository at this point in the history
  • Loading branch information
cosmin42 committed Feb 2, 2025
1 parent 8294837 commit 38f5c73
Show file tree
Hide file tree
Showing 5 changed files with 82 additions and 24 deletions.
14 changes: 14 additions & 0 deletions osx/PhotoBook/PhotoBook/Collages/CollagesCommandModel.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
//
// CollagesCommandModel.swift
// PhotoBook
//
// Created by Cosmin Mihai on 02.02.2025.
//

import SwiftUI

class CollagesCommandModel: ObservableObject
{
@Published public var previewDisabled: Bool = true
@Published public var makeCollageDisabled: Bool = true
}
41 changes: 25 additions & 16 deletions osx/PhotoBook/PhotoBook/Collages/CollagesGrid.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,35 +9,44 @@ import SwiftUI

struct CollagesGrid: View
{
@State private var frameSize:CGSize
@ObservedObject var model: CollagesGridModel

private var tabViewRatio = 0.5

init(frameSize: CGSize, model: CollagesGridModel)
{
self.frameSize = frameSize
self.model = model
}
@State var frameSize: CGSize
@Binding var makeCollageDisabled: Bool
@Binding var previewDisabled: Bool

var body: some View {
ScrollView {
LazyVGrid(columns: model.columns, spacing: 10) {
ForEach(self.model.images, id: \.self) { item in
if let fileName = item.path
ForEach(self.model.images.indices, id: \.self) { index in
if let fileName = self.model.images[index].path
{
if let nsImage = NSImage(contentsOfFile: fileName) {
Image(nsImage: nsImage)
.resizable()
.aspectRatio(contentMode: .fit)
.frame(height: 80)
VStack
{
Image(nsImage: nsImage)
.resizable()
.aspectRatio(contentMode: .fit)
.frame(height: 80)
.overlay(
RoundedRectangle(cornerRadius: 10)
.stroke(model.selectedIndex == index ? Color.white : Color.clear, lineWidth: 1)
)
.padding(4)
.onTapGesture {
self.model.selectedIndex = index
self.makeCollageDisabled = !self.model.collagePossible()
self.previewDisabled = self.makeCollageDisabled
}
Text(self.model.images[index].name)
}
} else {
Text("Image not found")
}
}
}
}
.frame(width: frameSize.width * tabViewRatio)
.frame(width: frameSize.width * 0.5)
.padding(4)
}
.frame(alignment:.leading)
.tag(1)
Expand Down
25 changes: 22 additions & 3 deletions osx/PhotoBook/PhotoBook/Collages/CollagesGridModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,11 @@ import SwiftUI

class CollagesGridModel: ObservableObject
{
@State var photobook: Photobook
@Binding var splSelectedIndices: [Int]
@Binding var uplSelectedIndices: [Int]

@Published public var images:[CollageItem] = []
@Published public var selectedIndex: Int? = nil

// TODO: Do a flexible calculation here
@Published public var columns = [
Expand All @@ -18,8 +21,24 @@ class CollagesGridModel: ObservableObject
GridItem(.flexible())
]

init(photobook: Photobook)
init(splSelectedIndices:Binding<[Int]>, uplSelectedIndices:Binding<[Int]>)
{
_photobook = State(initialValue: photobook)
_splSelectedIndices = splSelectedIndices
_uplSelectedIndices = uplSelectedIndices
}

public func collagePossible() -> Bool
{
if let selectedIndex = self.selectedIndex
{
let selectedLen = max(splSelectedIndices.count, uplSelectedIndices.count)
let collageImagesLen = self.images[selectedIndex].imagesCount
return (selectedLen == collageImagesLen)
}
else
{
return false
}
}

}
24 changes: 20 additions & 4 deletions osx/PhotoBook/PhotoBook/Pages/TableContentView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,14 @@ struct TableContentView: View, PhotobookUIListener {

@State private var showImportMediaPicker = false

@State private var uplModel: UnstagedPhotoLineModel = UnstagedPhotoLineModel()
@State private var uplModel: UnstagedPhotoLineModel
@State private var splModel: StagedPhotoLineModel
@State private var mediaListModel: MediaListModel

@State private var collagesGridModel: CollagesGridModel

@StateObject private var canvasModel: CanvasModel = CanvasModel()
@StateObject private var collagesCommandModel: CollagesCommandModel = CollagesCommandModel()

@Binding private var lutGridModel: LutGridModel

Expand All @@ -36,10 +37,11 @@ struct TableContentView: View, PhotobookUIListener {
_navigationPath = navigationPath
_lutGridModel = lutGridModel

self.uplModel = UnstagedPhotoLineModel()
self.splModel = StagedPhotoLineModel(stagedImagesView: photobook.projectManagementService().stagedImages())

self.mediaListModel = MediaListModel(photobook: photobook)
self.collagesGridModel = CollagesGridModel(photobook: photobook)
_collagesGridModel = State(initialValue: CollagesGridModel(splSelectedIndices: Binding.constant([]), uplSelectedIndices: Binding.constant([])))
}

var body: some View {
Expand Down Expand Up @@ -104,6 +106,7 @@ struct TableContentView: View, PhotobookUIListener {
.frame(alignment: .leading)
.background(Color.PrimaryColor)
.buttonStyle(PlainButtonStyle())
.disabled(collagesCommandModel.previewDisabled)

Divider()
.frame(height: 32)
Expand All @@ -121,6 +124,7 @@ struct TableContentView: View, PhotobookUIListener {
.frame(alignment: .leading)
.background(Color.PrimaryColor)
.buttonStyle(PlainButtonStyle())
.disabled(collagesCommandModel.makeCollageDisabled)

Button(action: {
print("Send tapped")
Expand Down Expand Up @@ -218,7 +222,7 @@ struct TableContentView: View, PhotobookUIListener {
}
}

CollagesGrid(frameSize: geometry.size, model: self.collagesGridModel)
CollagesGrid(model: self.collagesGridModel, frameSize: geometry.size, makeCollageDisabled: $collagesCommandModel.makeCollageDisabled, previewDisabled: $collagesCommandModel.previewDisabled)

LutGrid(frameSize: geometry.size, model: self.lutGridModel)
}
Expand Down Expand Up @@ -337,15 +341,27 @@ struct TableContentView: View, PhotobookUIListener {
return true
}
}
.onChange(of: splModel.selectedIndices)
{
_ in
self.collagesCommandModel.previewDisabled = !self.collagesGridModel.collagePossible()
self.collagesCommandModel.makeCollageDisabled = self.collagesCommandModel.previewDisabled
}

UnstagedPhotoLine(model: uplModel, canvasImage: $canvasModel.mainImage, mediaListModel: $mediaListModel, stagedPhotoLineModel: $splModel)

.onChange(of: uplModel.selectedIndices)
{
_ in
self.collagesCommandModel.previewDisabled = !self.collagesGridModel.collagePossible()
self.collagesCommandModel.makeCollageDisabled = self.collagesCommandModel.previewDisabled
}
}
.frame(height: geometry.size.height * 0.3)
}
}
.onAppear()
{
self.collagesGridModel = CollagesGridModel(splSelectedIndices: $splModel.selectedIndices, uplSelectedIndices: $uplModel.selectedIndices)
PhotoBookApp.pushListener(listener: self)
self.photobook.makeCollages()
}
Expand Down
2 changes: 1 addition & 1 deletion osx/PhotoBook/PhotoBook/UPL/UnstagedPhotoLine.swift
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ struct UnstagedPhotoLine: View
.padding(4)
.onTapGesture {
self.canvasImage = model.list[index]
stagedPhotoLineModel.selectedIndices.removeAll()
self.stagedPhotoLineModel.selectedIndices.removeAll()
if model.selectedIndices.contains(index)
{
model.selectedIndices.removeAll { $0 == index }
Expand Down

0 comments on commit 38f5c73

Please sign in to comment.