75 lines
2.3 KiB
TypeScript
75 lines
2.3 KiB
TypeScript
|
import { UIWindow } from "../ui/window";
|
||
|
import { View } from "./view";
|
||
|
|
||
|
export class ViewManager {
|
||
|
private currentView: View | undefined | null;
|
||
|
private views: View[];
|
||
|
private window: UIWindow;
|
||
|
public constructor() {
|
||
|
this.views = [];
|
||
|
this.window = new UIWindow("Notebrook");
|
||
|
this.currentView = null;
|
||
|
}
|
||
|
|
||
|
public add(view: View) {
|
||
|
this.views.push(view);
|
||
|
view.onCreate();
|
||
|
}
|
||
|
|
||
|
public remove(view: View) {
|
||
|
this.views.splice(this.views.indexOf(view), 1);
|
||
|
view.onDestroy();
|
||
|
if (view === this.currentView) this.window.remove(this.currentView.show());
|
||
|
if (this.currentView) this.currentView.setActive(false);
|
||
|
this.currentView = null;
|
||
|
}
|
||
|
|
||
|
public switchTo(view: View) {
|
||
|
if (!this.views.includes(view)) {
|
||
|
throw new Error("View not initialized");
|
||
|
}
|
||
|
if (this.currentView) {
|
||
|
this.currentView.onDeactivate();
|
||
|
this.currentView.setActive(false);
|
||
|
this.window.remove(this.currentView.show());
|
||
|
}
|
||
|
this.currentView = view;
|
||
|
this.currentView.setActive(true);
|
||
|
this.currentView.onActivate();
|
||
|
this.window.add(this.currentView.show());
|
||
|
}
|
||
|
|
||
|
public render(): HTMLElement|undefined {
|
||
|
return this.window.show();
|
||
|
}
|
||
|
|
||
|
public push(view: View) {
|
||
|
if (this.currentView) {
|
||
|
this.currentView.onDeactivate();
|
||
|
this.currentView.setActive(false);
|
||
|
this.window.remove(this.currentView.show());
|
||
|
}
|
||
|
|
||
|
this.views.unshift(view);
|
||
|
this.currentView = view;
|
||
|
this.currentView.onCreate();
|
||
|
this.currentView.setActive(true);
|
||
|
this.currentView.onActivate();
|
||
|
this.window.add(this.currentView.show());
|
||
|
}
|
||
|
|
||
|
public pop() {
|
||
|
if (this.currentView) {
|
||
|
this.currentView.onDeactivate();
|
||
|
this.currentView.setActive(false);
|
||
|
this.window.remove(this.currentView.show());
|
||
|
this.currentView.onDestroy();
|
||
|
}
|
||
|
this.views.splice(0, 1);
|
||
|
this.currentView = this.views[0];
|
||
|
this.currentView.setActive(true);
|
||
|
this.currentView.onActivate();
|
||
|
this.window.add(this.currentView.show());
|
||
|
}
|
||
|
}
|