Open task views in a sheet over the left pane
This commit is contained in:
@@ -43,8 +43,6 @@ enum LeftTab {
|
||||
@Observable
|
||||
final class Overlays {
|
||||
var alerts: [OverlayAlert] = []
|
||||
var image: NSImage?
|
||||
var diagram: BoxLayout?
|
||||
var menu: OverlayMenu? {
|
||||
didSet {
|
||||
menuHover = false
|
||||
@@ -64,9 +62,10 @@ final class Overlays {
|
||||
@ObservationIgnored private weak var behindModal: NSResponder?
|
||||
@ObservationIgnored private var holders = 0
|
||||
@ObservationIgnored private var ctrl: @MainActor (String) -> Bool = { _ in false }
|
||||
@ObservationIgnored private var escape: @MainActor () -> Bool = { false }
|
||||
|
||||
var isOpen: Bool {
|
||||
!alerts.isEmpty || image != nil || diagram != nil || menu != nil || modal != nil || switcher != nil
|
||||
!alerts.isEmpty || menu != nil || modal != nil || switcher != nil
|
||||
}
|
||||
|
||||
var dialogOpen: Bool {
|
||||
@@ -130,10 +129,6 @@ final class Overlays {
|
||||
alerts.removeLast()
|
||||
} else if modal != nil {
|
||||
answerModal("cancel")
|
||||
} else if image != nil {
|
||||
image = nil
|
||||
} else if diagram != nil {
|
||||
diagram = nil
|
||||
} else if let switcher {
|
||||
switcher.close()
|
||||
} else if menu != nil {
|
||||
@@ -141,9 +136,10 @@ final class Overlays {
|
||||
}
|
||||
}
|
||||
|
||||
func install(_ ctrl: @escaping @MainActor (String) -> Bool) {
|
||||
func install(_ ctrl: @escaping @MainActor (String) -> Bool, escape: @escaping @MainActor () -> Bool) {
|
||||
holders += 1
|
||||
self.ctrl = ctrl
|
||||
self.escape = escape
|
||||
if monitor != nil {
|
||||
return
|
||||
}
|
||||
@@ -181,7 +177,11 @@ final class Overlays {
|
||||
closeTop()
|
||||
return true
|
||||
}
|
||||
return !marked && !terminalFocused()
|
||||
if marked || terminalFocused() {
|
||||
return false
|
||||
}
|
||||
_ = escape()
|
||||
return true
|
||||
}
|
||||
if !isOpen {
|
||||
return false
|
||||
@@ -204,7 +204,7 @@ final class Overlays {
|
||||
}
|
||||
return false
|
||||
}
|
||||
if image == nil, diagram == nil, !marked, let switcher {
|
||||
if !marked, let switcher {
|
||||
if code == 48 {
|
||||
switcher.inList.toggle()
|
||||
return true
|
||||
@@ -232,6 +232,7 @@ final class Overlays {
|
||||
return
|
||||
}
|
||||
ctrl = { _ in false }
|
||||
escape = { false }
|
||||
if let monitor {
|
||||
NSEvent.removeMonitor(monitor)
|
||||
}
|
||||
@@ -275,30 +276,6 @@ struct OverlayHost: View {
|
||||
}
|
||||
SwitcherPlacement(model: switcher)
|
||||
}
|
||||
if let image = overlays.image {
|
||||
Palette.imageBackdrop
|
||||
.onTapGesture {
|
||||
overlays.image = nil
|
||||
}
|
||||
Image(nsImage: image)
|
||||
.resizable()
|
||||
.scaledToFit()
|
||||
.frame(maxWidth: image.size.width, maxHeight: image.size.height)
|
||||
.padding(24)
|
||||
.frame(maxWidth: .infinity, maxHeight: .infinity)
|
||||
.onTapGesture {
|
||||
overlays.image = nil
|
||||
}
|
||||
}
|
||||
if let diagram = overlays.diagram {
|
||||
Palette.imageBackdrop
|
||||
.onTapGesture {
|
||||
overlays.diagram = nil
|
||||
}
|
||||
DiagramViewer(layout: diagram)
|
||||
.id(diagram.id)
|
||||
.padding(24)
|
||||
}
|
||||
if let menu = overlays.menu {
|
||||
VStack(alignment: .leading, spacing: 0) {
|
||||
ForEach(menu.entries) { entry in
|
||||
|
||||
Reference in New Issue
Block a user