Various improvements

This commit is contained in:
Ilya Laktyushin
2024-06-15 18:41:19 +04:00
parent 2150d65f78
commit 1ae20bd685
94 changed files with 3242 additions and 534 deletions

View File

@@ -12,6 +12,7 @@ struct ModalContainerLayout {
var controllers: [ViewController]
var isFlat: Bool
var isStandalone: Bool
var isMinimized: Bool
}
struct NavigationLayout {
@@ -19,7 +20,7 @@ struct NavigationLayout {
var modal: [ModalContainerLayout]
}
func makeNavigationLayout(mode: NavigationControllerMode, layout: ContainerViewLayout, controllers: [ViewController]) -> NavigationLayout {
func makeNavigationLayout(mode: NavigationControllerMode, layout: ContainerViewLayout, controllers: [ViewController], minimizedControllers: [ViewController]) -> NavigationLayout {
var rootControllers: [ViewController] = []
var modalStack: [ModalContainerLayout] = []
for controller in controllers {
@@ -54,7 +55,7 @@ func makeNavigationLayout(mode: NavigationControllerMode, layout: ContainerViewL
if requiresModal {
controller._presentedInModal = true
if beginsModal || modalStack.isEmpty || modalStack[modalStack.count - 1].isStandalone {
modalStack.append(ModalContainerLayout(controllers: [controller], isFlat: isFlat, isStandalone: isStandalone))
modalStack.append(ModalContainerLayout(controllers: [controller], isFlat: isFlat, isStandalone: isStandalone, isMinimized: false))
} else {
modalStack[modalStack.count - 1].controllers.append(controller)
}
@@ -64,7 +65,7 @@ func makeNavigationLayout(mode: NavigationControllerMode, layout: ContainerViewL
controller._presentedInModal = true
}
if modalStack[modalStack.count - 1].isStandalone {
modalStack.append(ModalContainerLayout(controllers: [controller], isFlat: isFlat, isStandalone: isStandalone))
modalStack.append(ModalContainerLayout(controllers: [controller], isFlat: isFlat, isStandalone: isStandalone, isMinimized: false))
} else {
modalStack[modalStack.count - 1].controllers.append(controller)
}
@@ -73,6 +74,23 @@ func makeNavigationLayout(mode: NavigationControllerMode, layout: ContainerViewL
rootControllers.append(controller)
}
}
var minimizedModalContainer: ModalContainerLayout?
for controller in minimizedControllers {
controller._presentedInModal = false
if var container = minimizedModalContainer {
container.controllers.append(controller)
minimizedModalContainer = container
} else {
let container = ModalContainerLayout(controllers: [controller], isFlat: false, isStandalone: false, isMinimized: true)
minimizedModalContainer = container
}
}
if let minimizedModalContainer {
modalStack.insert(minimizedModalContainer, at: 0)
}
let rootLayout: RootNavigationLayout
switch mode {
case .single: