diff --git a/YAPS/YAPS/Assets.xcassets/file_jpg.imageset/Contents.json b/YAPS/YAPS/Assets.xcassets/file_jpg.imageset/Contents.json new file mode 100644 index 0000000..52ffe18 --- /dev/null +++ b/YAPS/YAPS/Assets.xcassets/file_jpg.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "file_jpg.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/YAPS/YAPS/Assets.xcassets/file_jpg.imageset/file_jpg.png b/YAPS/YAPS/Assets.xcassets/file_jpg.imageset/file_jpg.png new file mode 100644 index 0000000..45bb733 Binary files /dev/null and b/YAPS/YAPS/Assets.xcassets/file_jpg.imageset/file_jpg.png differ diff --git a/YAPS/YAPS/Assets.xcassets/placeholder-image.imageset/Contents.json b/YAPS/YAPS/Assets.xcassets/placeholder-image.imageset/Contents.json new file mode 100644 index 0000000..4d1655f --- /dev/null +++ b/YAPS/YAPS/Assets.xcassets/placeholder-image.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "placeholder-image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/YAPS/YAPS/Assets.xcassets/placeholder-image.imageset/placeholder-image.png b/YAPS/YAPS/Assets.xcassets/placeholder-image.imageset/placeholder-image.png new file mode 100644 index 0000000..52deaa6 Binary files /dev/null and b/YAPS/YAPS/Assets.xcassets/placeholder-image.imageset/placeholder-image.png differ diff --git a/YAPS/YAPS/ContentView.swift b/YAPS/YAPS/ContentView.swift index 92c2708..2301cd8 100644 --- a/YAPS/YAPS/ContentView.swift +++ b/YAPS/YAPS/ContentView.swift @@ -11,14 +11,16 @@ import SwiftUI struct ContentView: View { @State var fileList = [YapsFile]() + @State var previewImg = Image("placeholder-image") var finderHelper: FinderHelper var body: some View { HStack { - VStack { + VStack(alignment: .leading) { HStack { Button(action: { + self.fileList.removeAll() self.fileList.append(contentsOf: self.finderHelper.selectFolder()) }) { Text("Select Folder") @@ -28,21 +30,29 @@ struct ContentView: View { List { ForEach(self.fileList, id: \.self) { yapsFile in HStack { - Image("file_raw").resizable().frame(width: 20, height: 20) + self.finderHelper.getImageByFiletype(file: yapsFile.file).resizable().frame(width: 20, height: 20) Text(yapsFile.name) } .onTapGesture(perform: { + let selectedImageURL: URL = yapsFile.file + print("pressed \(yapsFile.name)") + + self.previewImg = self.finderHelper.getImageByURL(source: selectedImageURL) + .resizable() }) } - } - - Text("THUMBNAIL") + .focusable() } + .frame(width: 150.0) - Text("Hello, World!") - .frame(maxWidth: .infinity, maxHeight: .infinity) + GeometryReader { geo in + self.previewImg.self + .resizable() + .aspectRatio(contentMode: .fit) + .frame(width: geo.size.width) + } } } } diff --git a/YAPS/YAPS/FinderHelper.swift b/YAPS/YAPS/FinderHelper.swift index 790ed40..b3e1d54 100644 --- a/YAPS/YAPS/FinderHelper.swift +++ b/YAPS/YAPS/FinderHelper.swift @@ -10,48 +10,71 @@ import Foundation import SwiftUI class FinderHelper { + + func selectFolder() -> [YapsFile] { + let dialog = NSOpenPanel(); + var fileList = [YapsFile]() - func selectFolder() -> [YapsFile] { - let dialog = NSOpenPanel(); - var fileList = [YapsFile]() - - dialog.title = "Select folder of images" - dialog.showsResizeIndicator = true - dialog.showsHiddenFiles = false - dialog.allowsMultipleSelection = false - dialog.canChooseFiles = false - dialog.canChooseDirectories = true - - if(dialog.runModal() == NSApplication.ModalResponse.OK) { - let result = dialog.url - - if(result != nil) { - let path: String = result!.path - print("Use \(path)") - fileList.append(contentsOf: getFilesList(path: result!)) - } - } else { - // User clicked on "Cancel" - } - - return fileList + dialog.title = "Select folder of images" + dialog.showsResizeIndicator = true + dialog.showsHiddenFiles = false + dialog.allowsMultipleSelection = false + dialog.canChooseFiles = false + dialog.canChooseDirectories = true + + if(dialog.runModal() == NSApplication.ModalResponse.OK) { + let result = dialog.url + + if(result != nil) { + let path: String = result!.path + print("Use \(path)") + fileList.append(contentsOf: getFilesList(path: result!)) + } + } else { + // User clicked on "Cancel" } - func getFilesList(path: URL) -> [YapsFile] { - let fm = FileManager.default - var fileList = [YapsFile]() - - do { - let items = try fm.contentsOfDirectory(at: path, includingPropertiesForKeys: nil, options: .skipsHiddenFiles) - - for item in items { - let yapsFile: YapsFile = YapsFile(name: item.lastPathComponent, file: item) - fileList.append(yapsFile) - } - } catch { - // failed to read directory – bad permissions, perhaps? - } - - return fileList + return fileList + } + + func getFilesList(path: URL) -> [YapsFile] { + let fm = FileManager.default + var fileList = [YapsFile]() + + do { + let items = try fm.contentsOfDirectory(at: path, includingPropertiesForKeys: nil, options: .skipsHiddenFiles).filter{ $0.pathExtension == "jpg" || $0.pathExtension == "jpeg" } + + for item in items { + let yapsFile: YapsFile = YapsFile(name: item.lastPathComponent, file: item) + fileList.append(yapsFile) + } + } catch { + // failed to read directory – bad permissions, perhaps? } + + return fileList + } + + func getImageByFiletype(file: URL) -> Image { + let fileExtension = file.pathExtension + var image = Image("file") + + switch fileExtension { + case "jpg": + image = Image("file_jpg") + case "raw": + image = Image("file_raw") + default: + print("No image found for extenstion \(fileExtension)") + } + + return image + } + + func getImageByURL(source: URL) -> Image { + let imageData:NSData = NSData(contentsOf: source)! + let image = NSImage(data: imageData as Data)! + + return Image(nsImage: image) + } }