added main term (may rename later)

This commit is contained in:
Djeeberjr 2023-01-28 03:56:07 +01:00
parent f71505ce28
commit 2cbcc86dce

101
src/lib/MainTerm.hx Normal file
View File

@ -0,0 +1,101 @@
package lib;
import kernel.KernelEvents;
import bin.Terminal;
import kernel.ui.WindowManager;
import kernel.ui.WindowContext;
class MainTerm {
private static final MAX_CONTEXT:Int = 10;
private var ctx: WindowContext = null;
private final workspaces: Map<Int,WindowContext> = [];
private var currentWorkspace: Int = -1;
public function new() {
}
public function run() {
// Create main terminal context
ctx = WindowManager.instance.createNewContext();
WindowManager.instance.focusContextToOutput(ctx,"main");
// Setup renderer and event handlers for main terminal
render();
ctx.onClick.handle(e -> {
if (e.button != Left) return;
var clickedContext = e.pos.y;
if (workspaces[clickedContext] != null) {
focusContext(clickedContext);
}else {
var newContext = WindowManager.instance.createNewContext();
// Create new terminal
var term = new Terminal();
term.invoke(newContext);
addContextToWorkspace(newContext,clickedContext);
focusContext(clickedContext);
}
});
// Register global key bindings to react to main terminal
KernelEvents.instance.onKey.handle(e -> {
// Is HOME pressed?
// TODO: remove magic number
if (e.keyCode == 268){
focusMainTerm();
}
});
}
/**
Adds a context to the list of contexts to manage. Returns the context ID. Returns -1 if the context could not be added.
**/
private function addContextNextWorkspace(context: WindowContext): Int {
for (i in 0...MAX_CONTEXT) {
if (!workspaces.exists(i)) {
workspaces[i] = context;
return i;
}
}
return -1;
}
private function addContextToWorkspace(context: WindowContext, id: Int) {
if (!workspaces.exists(id)) {
workspaces[id] = context;
}
}
private function focusContext(id: Int) {
if (workspaces.exists(id)) {
WindowManager.instance.focusContextToOutput(workspaces[id],"main");
currentWorkspace = id;
}
}
private function focusMainTerm() {
render();
WindowManager.instance.focusContextToOutput(ctx,"main");
currentWorkspace = -1;
}
private function render() {
ctx.clear();
ctx.setCursorPos(0,0);
for(i in 0...MAX_CONTEXT){
ctx.setCursorPos(0,i);
if (workspaces.exists(i)) {
ctx.write("Switch to context " + i);
}else{
ctx.write("Create new Terminal on context " + i);
}
}
}
}