diff options
Diffstat (limited to 'iTexSnip/Views/DetailedSnippetView.swift')
-rw-r--r-- | iTexSnip/Views/DetailedSnippetView.swift | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/iTexSnip/Views/DetailedSnippetView.swift b/iTexSnip/Views/DetailedSnippetView.swift new file mode 100644 index 0000000..c7386fa --- /dev/null +++ b/iTexSnip/Views/DetailedSnippetView.swift @@ -0,0 +1,145 @@ +// +// DetailedSnippetView.swift +// iTexSnip +// +// Created by Navan Chauhan on 10/21/24. +// + +import SwiftUI +import LaTeXSwiftUI + +struct DetailedSnippetView: View { + @Environment(\.modelContext) var modelContext + @Environment(\.dismiss) private var dismiss + + @State var showOriginal = false + + + var snippet: ImageSnippet + var body: some View { + VStack { + HStack { + Toggle("Show Original", isOn: $showOriginal) + .toggleStyle(.switch) + .padding() + Spacer() + HStack { + Button { + if snippet.rating == true { + updateRating(nil) + } else { + updateRating(true) + } + } label: { + if snippet.rating == true { + Image(systemName: "hand.thumbsup") + .foregroundStyle(.green) + .imageScale(.large) + } else { + Image(systemName: "hand.thumbsup") + .imageScale(.large) + } + }.buttonStyle(PlainButtonStyle()) + + Button { + if snippet.rating == false { + updateRating(nil) + } else { + updateRating(false) + } + } label: { + if snippet.rating == false { + Image(systemName: "hand.thumbsdown") + .foregroundStyle(.red) + .imageScale(.large) + } else { + Image(systemName: "hand.thumbsdown") + .imageScale(.large) + } + }.buttonStyle(PlainButtonStyle()) + + Button(role: .destructive) { + withAnimation { + modelContext.delete(snippet) + do { + try modelContext.save() + dismiss() + } catch { + print("Failed to delete snippet: \(error)") + } + } + } label: { + Image(systemName: "trash") + .imageScale(.large) + } + .padding() + .buttonStyle(PlainButtonStyle()) + }.padding() + } + if (showOriginal) { + HStack { + Spacer() + Image(nsImage: NSImage(data: snippet.image)!) + .resizable() + .clipped() + .cornerRadius(10) + .scaledToFit() + .frame(height: 100) + Spacer() + }.padding() + } + HStack { + Spacer() + LaTeXEquationView(equation: snippet.transcribedText!) + .clipped() + .scaledToFit() + .frame(height: 100) + Spacer() + } + GeometryReader { geometry in + HStack { + Button { + print("Should Copy") + } label: { + Image(systemName: "document.on.clipboard") + } + ScrollView(.horizontal) { + Text(snippet.transcribedText!) + .frame(height: 50) + .textSelection(.enabled) + } + .frame(width: geometry.size.width * 0.8) + .border(Color.red) + + Spacer() + Button { + print("Should Copy") + } label: { + Image(systemName: "document.on.clipboard") + } + } + } + Spacer() + } + } + + func updateRating(_ rating: Bool?) { + withAnimation { + self.snippet.rate(rating) + do { + try modelContext.save() + } catch { + print("Error saving rating: \(error)") + } + } + } +} + +struct LaTeXEquationView: View { + var equation: String + var body: some View { + LaTeX(equation) + .parsingMode(.all) + .font(.system(size: 28, weight: .bold)) + } +} |