Browse Source

Add Application.Init

tablepad
Trevor Slocum 2 years ago
parent
commit
a55c812490
  1. 1
      CHANGELOG
  2. 62
      application.go

1
CHANGELOG

@ -2,6 +2,7 @@ v1.5.1 (WIP)
- Add FocusManager
- Add Slider
- Add TabbedPanels
- Add Application.Init
- Add Application.GetScreen and Application.GetScreenSize
- Add SetVisible and GetVisible to all widgets
- Add TextView.SetBytes and TextView.GetBytes

62
application.go

@ -201,20 +201,56 @@ func (a *Application) SetScreen(screen tcell.Screen) {
}
// GetScreen returns the current tcell.Screen of the application. Lock the
// application when manipulating the screen to prevent race conditions.
// application when manipulating the screen to prevent race conditions. This
// value is only available after calling Init or Run.
func (a *Application) GetScreen() tcell.Screen {
a.RLock()
defer a.RUnlock()
return a.screen
}
// GetScreenSize returns the size of the application's screen.
// GetScreenSize returns the size of the application's screen. These values are
// only available after calling Init or Run.
func (a *Application) GetScreenSize() (width, height int) {
a.RLock()
defer a.RUnlock()
return a.width, a.height
}
// Init initializes the application screen. Calling Init before running is not
// required. Its primary use is to populate screen dimensions before running an
// application.
func (a *Application) Init() error {
a.Lock()
defer a.Unlock()
return a.init()
}
func (a *Application) init() error {
if a.screen != nil {
return nil
}
var err error
a.screen, err = tcell.NewScreen()
if err != nil {
a.Unlock()
return err
}
if err = a.screen.Init(); err != nil {
a.Unlock()
return err
}
a.width, a.height = a.screen.Size()
if a.enableBracketedPaste {
a.screen.EnablePaste()
}
if a.enableMouse {
a.screen.EnableMouse()
}
return nil
}
// EnableBracketedPaste enables bracketed paste mode, which is enabled by default.
func (a *Application) EnableBracketedPaste(enable bool) {
a.Lock()
@ -246,26 +282,12 @@ func (a *Application) EnableMouse(enable bool) {
// Run starts the application and thus the event loop. This function returns
// when Stop() was called.
func (a *Application) Run() error {
var err error
a.Lock()
// Make a screen if there is none yet.
if a.screen == nil {
a.screen, err = tcell.NewScreen()
if err != nil {
a.Unlock()
return err
}
if err = a.screen.Init(); err != nil {
a.Unlock()
return err
}
if a.enableBracketedPaste {
a.screen.EnablePaste()
}
if a.enableMouse {
a.screen.EnableMouse()
}
// Initialize screen
err := a.init()
if err != nil {
return err
}
// We catch panics to clean up because they mess up the terminal.

Loading…
Cancel
Save