summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorDrew DeVault <sir@cmpwn.com>2018-01-10 22:54:55 -0500
committerDrew DeVault <sir@cmpwn.com>2018-01-10 22:54:55 -0500
commit55e84533022c1f9bf9fd9e2cd2db930394b590b8 (patch)
tree513ee239f641aa5154427776efa18fda752e642d
parent77a0f68758905faa74407499ff92c90929e27989 (diff)
downloadaerc-55e84533022c1f9bf9fd9e2cd2db930394b590b8.tar.gz
Improve invalidation logic
-rw-r--r--ui/account.go13
-rw-r--r--ui/types.go11
-rw-r--r--ui/ui.go (renamed from ui/render.go)14
3 files changed, 26 insertions, 12 deletions
diff --git a/ui/account.go b/ui/account.go
index 0949e52..9c16cc5 100644
--- a/ui/account.go
+++ b/ui/account.go
@@ -11,6 +11,8 @@ type AccountTab struct {
 	Config *config.AccountConfig
 	Worker *worker.Worker
 	Parent *UIState
+
+	counter int
 }
 
 func NewAccountTab(conf *config.AccountConfig, work *worker.Worker) *AccountTab {
@@ -24,10 +26,6 @@ func (acc *AccountTab) Name() string {
 	return acc.Config.Name
 }
 
-func (acc *AccountTab) Invalid() bool {
-	return false
-}
-
 func (acc *AccountTab) SetParent(parent *UIState) {
 	acc.Parent = parent
 }
@@ -37,5 +35,10 @@ func (acc *AccountTab) Render(at Geometry) {
 		Fg: tb.ColorDefault,
 		Bg: tb.ColorDefault,
 	}
-	TPrintf(&at, cell, "%s", acc.Name())
+	TPrintf(&at, cell, "%s %d", acc.Name(), acc.counter)
+	acc.counter++
+	if acc.counter%10000 == 0 {
+		acc.counter = 0
+	}
+	acc.Parent.InvalidateFrom(acc)
 }
diff --git a/ui/types.go b/ui/types.go
index 588c3b3..14a91c3 100644
--- a/ui/types.go
+++ b/ui/types.go
@@ -7,14 +7,18 @@ import (
 )
 
 const (
-	Valid          = 0
-	InvalidateTabs = 1 << iota
+	Valid             = 0
+	InvalidateTabList = 1 << iota
+	InvalidateTabView
 	InvalidateSidebar
 	InvalidateStatusBar
 )
 
 const (
-	InvalidateAll = InvalidateTabs | InvalidateSidebar | InvalidateStatusBar
+	InvalidateAll = InvalidateTabList |
+		InvalidateTabView |
+		InvalidateSidebar |
+		InvalidateStatusBar
 )
 
 type Geometry struct {
@@ -26,7 +30,6 @@ type Geometry struct {
 
 type AercTab interface {
 	Name() string
-	Invalid() bool
 	Render(at Geometry)
 	SetParent(parent *UIState)
 }
diff --git a/ui/render.go b/ui/ui.go
index 4fedc2c..f01af08 100644
--- a/ui/render.go
+++ b/ui/ui.go
@@ -31,6 +31,7 @@ func (state *UIState) Close() {
 }
 
 func (state *UIState) AddTab(tab AercTab) {
+	tab.SetParent(state)
 	state.Tabs = append(state.Tabs, tab)
 }
 
@@ -38,6 +39,12 @@ func (state *UIState) Invalidate(what uint) {
 	state.InvalidPanes |= what
 }
 
+func (state *UIState) InvalidateFrom(tab AercTab) {
+	if state.Tabs[state.SelectedTab] == tab {
+		state.Invalidate(InvalidateTabView)
+	}
+}
+
 func (state *UIState) calcGeometries() {
 	width, height := tb.Size()
 	// TODO: more
@@ -65,16 +72,17 @@ func (state *UIState) Tick() bool {
 		break
 	}
 	if state.InvalidPanes != 0 {
-		if state.InvalidPanes&InvalidateAll == InvalidateAll {
+		invalid := state.InvalidPanes
+		state.InvalidPanes = 0
+		if invalid&InvalidateAll == InvalidateAll {
 			tb.Clear(tb.ColorDefault, tb.ColorDefault)
 			state.calcGeometries()
 		}
-		if state.InvalidPanes&InvalidateTabs != 0 {
+		if invalid&InvalidateTabView != 0 {
 			tab := state.Tabs[state.SelectedTab]
 			tab.Render(state.Panes.TabView)
 		}
 		tb.Flush()
-		state.InvalidPanes = 0
 	}
 	return true
 }