Skip to content

Commit 353956c

Browse files
committed
fixed rename shortcut; added arrow nav to file browser
1 parent cb8f875 commit 353956c

File tree

3 files changed

+44
-2
lines changed

3 files changed

+44
-2
lines changed

MacImageManager/MacImageManager/MacImageManagerApp.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ struct MacImageManagerApp: App {
5353
Button("Rename File") {
5454
browserModel.startRenamingSelectedFile()
5555
}
56-
.keyboardShortcut("r", modifiers: .command)
56+
.keyboardShortcut(.return, modifiers: [])
5757
.disabled(!browserModel.canRenameSelectedFile)
5858

5959
Button("Delete File") {

MacImageManager/MacImageManager/Views/FileBrowserRowView.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ struct FileBrowserRowView: View {
5858
browserModel.selectedFile = item
5959
browserModel.startRenamingSelectedFile()
6060
}
61-
.keyboardShortcut("r", modifiers: .command)
61+
.keyboardShortcut(.return, modifiers: [])
6262
.disabled(item.isDirectory) // TODO: For now, disable directory renaming
6363

6464
Button("Delete") {

MacImageManager/MacImageManager/Views/PaneFileBrowserView.swift

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@
77

88
import SwiftUI
99

10+
enum NavigationDirection {
11+
case up, down
12+
}
13+
1014
struct PaneFileBrowserView: View {
1115
@EnvironmentObject var browserModel: BrowserModel
1216
@Binding var selectedImage: FileItem?
@@ -41,6 +45,14 @@ struct PaneFileBrowserView: View {
4145
}
4246
}
4347
.focused($isListFocused)
48+
.onKeyPress(.upArrow) {
49+
navigateToNextImage(direction: .up)
50+
return .handled
51+
}
52+
.onKeyPress(.downArrow) {
53+
navigateToNextImage(direction: .down)
54+
return .handled
55+
}
4456
.onAppear {
4557
isListFocused = true
4658
}
@@ -65,6 +77,36 @@ struct PaneFileBrowserView: View {
6577
}
6678
}
6779
}
80+
81+
private func navigateToNextImage(direction: NavigationDirection) {
82+
// Get only viewable media files (staticImage, animatedGif, and video)
83+
let mediaFiles = browserModel.items.filter { item in
84+
item.mediaType == .staticImage || item.mediaType == .animatedGif || item.mediaType == .video
85+
}
86+
87+
guard !mediaFiles.isEmpty else { return }
88+
89+
// If no media is currently selected, select the first or last media based on direction
90+
guard let currentSelection = selectedImage,
91+
let currentIndex = mediaFiles.firstIndex(of: currentSelection) else {
92+
selectedImage = direction == .down ? mediaFiles.first : mediaFiles.last
93+
return
94+
}
95+
96+
// Navigate to next/previous media file
97+
switch direction {
98+
case .down:
99+
if currentIndex < mediaFiles.count - 1 {
100+
selectedImage = mediaFiles[currentIndex + 1]
101+
}
102+
// If at the end, do nothing (don't wrap around)
103+
case .up:
104+
if currentIndex > 0 {
105+
selectedImage = mediaFiles[currentIndex - 1]
106+
}
107+
// If at the beginning, do nothing (don't wrap around)
108+
}
109+
}
68110
}
69111

70112
struct NavigationHeader: View {

0 commit comments

Comments
 (0)