aboutsummaryrefslogtreecommitdiff
path: root/screens/screens.go
diff options
context:
space:
mode:
Diffstat (limited to 'screens/screens.go')
-rw-r--r--screens/screens.go59
1 files changed, 59 insertions, 0 deletions
diff --git a/screens/screens.go b/screens/screens.go
new file mode 100644
index 0000000..77197ca
--- /dev/null
+++ b/screens/screens.go
@@ -0,0 +1,59 @@
+package screens
+
+import (
+ "os"
+
+ tea "github.com/charmbracelet/bubbletea"
+ "golang.org/x/term"
+)
+
+type SwitchMsg struct {
+ Screen tea.Model
+}
+
+type ScreenManager struct {
+ currentScreen tea.Model
+}
+
+var globals Globals
+
+func (sm *ScreenManager) Init() tea.Cmd {
+ return sm.currentScreen.Init()
+}
+
+func (sm *ScreenManager) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
+ switch m := msg.(type) {
+ case tea.WindowSizeMsg:
+ globals.width, globals.height = m.Width, m.Height
+ return sm, nil
+ case SwitchMsg:
+ sm.currentScreen = m.Screen
+ return sm, sm.currentScreen.Init()
+ }
+
+ updatedScreen, cmd := sm.currentScreen.Update(msg)
+ sm.currentScreen = updatedScreen
+ return sm, cmd
+}
+
+func (sm *ScreenManager) View() string {
+ return sm.currentScreen.View()
+}
+
+func switchScreen(screen tea.Model) tea.Cmd {
+ return func() tea.Msg {
+ return SwitchMsg{Screen: screen}
+ }
+}
+
+func Start() tea.Model {
+ width, height, err := term.GetSize(int(os.Stdout.Fd()))
+ if err != nil {
+ width = 80
+ height = 24
+ }
+
+ globals = Globals{width: width, height: height}
+
+ return &ScreenManager{currentScreen: _root()}
+}