Initial move
This commit is contained in:
74
frontend/src/views/view-manager.ts
Normal file
74
frontend/src/views/view-manager.ts
Normal file
@@ -0,0 +1,74 @@
|
||||
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());
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user