about summary refs log tree commit diff stats
path: root/widgets
diff options
context:
space:
mode:
authorJeffas <dev@jeffas.io>2020-05-31 12:37:46 +0100
committerReto Brunner <reto@labrat.space>2020-06-09 08:48:47 +0200
commit543510f5c146aa6e4d3344ec7d109ad7945fa106 (patch)
tree7356a64e28c2ab9123e84a76381e2cd99e82849a /widgets
parent3877b1aa719569d3666bce227e351afcbc2628af (diff)
downloadaerc-543510f5c146aa6e4d3344ec7d109ad7945fa106.tar.gz
Make grid sizes dynamic
The grid used static sizes which meant that changing settings didn't
have an effect on elements of the ui, notably the sidebar width. This
patch makes the `Size` parameter of a cell a function which returns the
`int`, allowing for dynamic sizes.

A `Const` function is also included for ease of use for static sizes.
Diffstat (limited to 'widgets')
-rw-r--r--widgets/account-wizard.go98
-rw-r--r--widgets/account.go47
-rw-r--r--widgets/aerc.go9
-rw-r--r--widgets/compose.go21
-rw-r--r--widgets/msgviewer.go20
5 files changed, 96 insertions, 99 deletions
diff --git a/widgets/account-wizard.go b/widgets/account-wizard.go
index 6f93367..4e51926 100644
--- a/widgets/account-wizard.go
+++ b/widgets/account-wizard.go
@@ -136,18 +136,18 @@ func NewAccountWizard(conf *config.AercConfig, aerc *Aerc) *AccountWizard {
 	})
 
 	basics := ui.NewGrid().Rows([]ui.GridSpec{
-		{ui.SIZE_EXACT, 8}, // Introduction
-		{ui.SIZE_EXACT, 1}, // Account name (label)
-		{ui.SIZE_EXACT, 1}, // (input)
-		{ui.SIZE_EXACT, 1}, // Padding
-		{ui.SIZE_EXACT, 1}, // Full name (label)
-		{ui.SIZE_EXACT, 1}, // (input)
-		{ui.SIZE_EXACT, 1}, // Padding
-		{ui.SIZE_EXACT, 1}, // Email address (label)
-		{ui.SIZE_EXACT, 1}, // (input)
-		{ui.SIZE_WEIGHT, 1},
+		{ui.SIZE_EXACT, ui.Const(8)}, // Introduction
+		{ui.SIZE_EXACT, ui.Const(1)}, // Account name (label)
+		{ui.SIZE_EXACT, ui.Const(1)}, // (input)
+		{ui.SIZE_EXACT, ui.Const(1)}, // Padding
+		{ui.SIZE_EXACT, ui.Const(1)}, // Full name (label)
+		{ui.SIZE_EXACT, ui.Const(1)}, // (input)
+		{ui.SIZE_EXACT, ui.Const(1)}, // Padding
+		{ui.SIZE_EXACT, ui.Const(1)}, // Email address (label)
+		{ui.SIZE_EXACT, ui.Const(1)}, // (input)
+		{ui.SIZE_WEIGHT, ui.Const(1)},
 	}).Columns([]ui.GridSpec{
-		{ui.SIZE_WEIGHT, 1},
+		{ui.SIZE_WEIGHT, ui.Const(1)},
 	})
 	basics.AddChild(
 		ui.NewText("\nWelcome to aerc! Let's configure your account.\n\n" +
@@ -209,23 +209,23 @@ func NewAccountWizard(conf *config.AercConfig, aerc *Aerc) *AccountWizard {
 	})
 
 	incoming := ui.NewGrid().Rows([]ui.GridSpec{
-		{ui.SIZE_EXACT, 3}, // Introduction
-		{ui.SIZE_EXACT, 1}, // Username (label)
-		{ui.SIZE_EXACT, 1}, // (input)
-		{ui.SIZE_EXACT, 1}, // Padding
-		{ui.SIZE_EXACT, 1}, // Password (label)
-		{ui.SIZE_EXACT, 1}, // (input)
-		{ui.SIZE_EXACT, 1}, // Padding
-		{ui.SIZE_EXACT, 1}, // Server (label)
-		{ui.SIZE_EXACT, 1}, // (input)
-		{ui.SIZE_EXACT, 1}, // Padding
-		{ui.SIZE_EXACT, 1}, // Connection mode (label)
-		{ui.SIZE_EXACT, 2}, // (input)
-		{ui.SIZE_EXACT, 1}, // Padding
-		{ui.SIZE_EXACT, 1}, // Connection string
-		{ui.SIZE_WEIGHT, 1},
+		{ui.SIZE_EXACT, ui.Const(3)}, // Introduction
+		{ui.SIZE_EXACT, ui.Const(1)}, // Username (label)
+		{ui.SIZE_EXACT, ui.Const(1)}, // (input)
+		{ui.SIZE_EXACT, ui.Const(1)}, // Padding
+		{ui.SIZE_EXACT, ui.Const(1)}, // Password (label)
+		{ui.SIZE_EXACT, ui.Const(1)}, // (input)
+		{ui.SIZE_EXACT, ui.Const(1)}, // Padding
+		{ui.SIZE_EXACT, ui.Const(1)}, // Server (label)
+		{ui.SIZE_EXACT, ui.Const(1)}, // (input)
+		{ui.SIZE_EXACT, ui.Const(1)}, // Padding
+		{ui.SIZE_EXACT, ui.Const(1)}, // Connection mode (label)
+		{ui.SIZE_EXACT, ui.Const(2)}, // (input)
+		{ui.SIZE_EXACT, ui.Const(1)}, // Padding
+		{ui.SIZE_EXACT, ui.Const(1)}, // Connection string
+		{ui.SIZE_WEIGHT, ui.Const(1)},
 	}).Columns([]ui.GridSpec{
-		{ui.SIZE_WEIGHT, 1},
+		{ui.SIZE_WEIGHT, ui.Const(1)},
 	})
 	incoming.AddChild(ui.NewText("\nConfigure incoming mail (IMAP)"))
 	incoming.AddChild(
@@ -283,26 +283,26 @@ func NewAccountWizard(conf *config.AercConfig, aerc *Aerc) *AccountWizard {
 	})
 
 	outgoing := ui.NewGrid().Rows([]ui.GridSpec{
-		{ui.SIZE_EXACT, 3}, // Introduction
-		{ui.SIZE_EXACT, 1}, // Username (label)
-		{ui.SIZE_EXACT, 1}, // (input)
-		{ui.SIZE_EXACT, 1}, // Padding
-		{ui.SIZE_EXACT, 1}, // Password (label)
-		{ui.SIZE_EXACT, 1}, // (input)
-		{ui.SIZE_EXACT, 1}, // Padding
-		{ui.SIZE_EXACT, 1}, // Server (label)
-		{ui.SIZE_EXACT, 1}, // (input)
-		{ui.SIZE_EXACT, 1}, // Padding
-		{ui.SIZE_EXACT, 1}, // Connection mode (label)
-		{ui.SIZE_EXACT, 2}, // (input)
-		{ui.SIZE_EXACT, 1}, // Padding
-		{ui.SIZE_EXACT, 1}, // Connection string
-		{ui.SIZE_EXACT, 1}, // Padding
-		{ui.SIZE_EXACT, 1}, // Copy to sent (label)
-		{ui.SIZE_EXACT, 2}, // (input)
-		{ui.SIZE_WEIGHT, 1},
+		{ui.SIZE_EXACT, ui.Const(3)}, // Introduction
+		{ui.SIZE_EXACT, ui.Const(1)}, // Username (label)
+		{ui.SIZE_EXACT, ui.Const(1)}, // (input)
+		{ui.SIZE_EXACT, ui.Const(1)}, // Padding
+		{ui.SIZE_EXACT, ui.Const(1)}, // Password (label)
+		{ui.SIZE_EXACT, ui.Const(1)}, // (input)
+		{ui.SIZE_EXACT, ui.Const(1)}, // Padding
+		{ui.SIZE_EXACT, ui.Const(1)}, // Server (label)
+		{ui.SIZE_EXACT, ui.Const(1)}, // (input)
+		{ui.SIZE_EXACT, ui.Const(1)}, // Padding
+		{ui.SIZE_EXACT, ui.Const(1)}, // Connection mode (label)
+		{ui.SIZE_EXACT, ui.Const(2)}, // (input)
+		{ui.SIZE_EXACT, ui.Const(1)}, // Padding
+		{ui.SIZE_EXACT, ui.Const(1)}, // Connection string
+		{ui.SIZE_EXACT, ui.Const(1)}, // Padding
+		{ui.SIZE_EXACT, ui.Const(1)}, // Copy to sent (label)
+		{ui.SIZE_EXACT, ui.Const(2)}, // (input)
+		{ui.SIZE_WEIGHT, ui.Const(1)},
 	}).Columns([]ui.GridSpec{
-		{ui.SIZE_WEIGHT, 1},
+		{ui.SIZE_WEIGHT, ui.Const(1)},
 	})
 	outgoing.AddChild(ui.NewText("\nConfigure outgoing mail (SMTP)"))
 	outgoing.AddChild(
@@ -374,10 +374,10 @@ func NewAccountWizard(conf *config.AercConfig, aerc *Aerc) *AccountWizard {
 	})
 
 	complete := ui.NewGrid().Rows([]ui.GridSpec{
-		{ui.SIZE_EXACT, 7},  // Introduction
-		{ui.SIZE_WEIGHT, 1}, // Previous / Finish / Finish & open tutorial
+		{ui.SIZE_EXACT, ui.Const(7)},  // Introduction
+		{ui.SIZE_WEIGHT, ui.Const(1)}, // Previous / Finish / Finish & open tutorial
 	}).Columns([]ui.GridSpec{
-		{ui.SIZE_WEIGHT, 1},
+		{ui.SIZE_WEIGHT, ui.Const(1)},
 	})
 	complete.AddChild(ui.NewText(
 		"\nConfiguration complete!\n\n" +
diff --git a/widgets/account.go b/widgets/account.go
index 20ed345..313a364 100644
--- a/widgets/account.go
+++ b/widgets/account.go
@@ -45,45 +45,38 @@ func NewAccountView(aerc *Aerc, conf *config.AercConfig, acct *config.AccountCon
 		config.UI_CONTEXT_ACCOUNT: acct.Name,
 	})
 
-	grid := ui.NewGrid().Rows([]ui.GridSpec{
-		{ui.SIZE_WEIGHT, 1},
+	view := &AccountView{
+		acct:   acct,
+		aerc:   aerc,
+		conf:   conf,
+		host:   host,
+		logger: logger,
+	}
+
+	view.grid = ui.NewGrid().Rows([]ui.GridSpec{
+		{ui.SIZE_WEIGHT, ui.Const(1)},
 	}).Columns([]ui.GridSpec{
-		{ui.SIZE_EXACT, acctUiConf.SidebarWidth},
-		{ui.SIZE_WEIGHT, 1},
+		{ui.SIZE_EXACT, func() int {
+			return view.UiConfig().SidebarWidth
+		}},
+		{ui.SIZE_WEIGHT, ui.Const(1)},
 	})
 
 	worker, err := worker.NewWorker(acct.Source, logger)
 	if err != nil {
 		host.SetStatus(fmt.Sprintf("%s: %s", acct.Name, err)).
 			Color(tcell.ColorDefault, tcell.ColorRed)
-		return &AccountView{
-			acct:   acct,
-			aerc:   aerc,
-			grid:   grid,
-			host:   host,
-			logger: logger,
-		}
+		return view
 	}
+	view.worker = worker
 
-	dirlist := NewDirectoryList(conf, acct, logger, worker)
+	view.dirlist = NewDirectoryList(conf, acct, logger, worker)
 	if acctUiConf.SidebarWidth > 0 {
-		grid.AddChild(ui.NewBordered(dirlist, ui.BORDER_RIGHT))
+		view.grid.AddChild(ui.NewBordered(view.dirlist, ui.BORDER_RIGHT))
 	}
 
-	msglist := NewMessageList(conf, logger, aerc)
-	grid.AddChild(msglist).At(0, 1)
-
-	view := &AccountView{
-		acct:    acct,
-		aerc:    aerc,
-		conf:    conf,
-		dirlist: dirlist,
-		grid:    grid,
-		host:    host,
-		logger:  logger,
-		msglist: msglist,
-		worker:  worker,
-	}
+	view.msglist = NewMessageList(conf, logger, aerc)
+	view.grid.AddChild(view.msglist).At(0, 1)
 
 	go worker.Backend.Run()
 
diff --git a/widgets/aerc.go b/widgets/aerc.go
index 829873a..4913be3 100644
--- a/widgets/aerc.go
+++ b/widgets/aerc.go
@@ -56,11 +56,11 @@ func NewAerc(conf *config.AercConfig, logger *log.Logger,
 	statusbar.Push(statusline)
 
 	grid := ui.NewGrid().Rows([]ui.GridSpec{
-		{ui.SIZE_EXACT, 1},
-		{ui.SIZE_WEIGHT, 1},
-		{ui.SIZE_EXACT, 1},
+		{ui.SIZE_EXACT, ui.Const(1)},
+		{ui.SIZE_WEIGHT, ui.Const(1)},
+		{ui.SIZE_EXACT, ui.Const(1)},
 	}).Columns([]ui.GridSpec{
-		{ui.SIZE_WEIGHT, 1},
+		{ui.SIZE_WEIGHT, ui.Const(1)},
 	})
 	grid.AddChild(tabs.TabStrip)
 	grid.AddChild(tabs.TabContent).At(1, 0)
@@ -552,7 +552,6 @@ func (aerc *Aerc) CloseDialog() {
 	return
 }
 
-
 func (aerc *Aerc) GetPassword(title string, prompt string) (chText chan string, chErr chan error) {
 	chText = make(chan string, 1)
 	chErr = make(chan error, 1)
diff --git a/widgets/compose.go b/widgets/compose.go
index 01b8dd8..b68c406 100644
--- a/widgets/compose.go
+++ b/widgets/compose.go
@@ -673,13 +673,15 @@ func (c *Composer) updateGrid() {
 	)
 
 	if c.grid == nil {
-		c.grid = ui.NewGrid().Columns([]ui.GridSpec{{ui.SIZE_WEIGHT, 1}})
+		c.grid = ui.NewGrid().Columns([]ui.GridSpec{
+			{ui.SIZE_WEIGHT, ui.Const(1)},
+		})
 	}
 
 	c.grid.Rows([]ui.GridSpec{
-		{ui.SIZE_EXACT, height},
-		{ui.SIZE_EXACT, 1},
-		{ui.SIZE_WEIGHT, 1},
+		{ui.SIZE_EXACT, ui.Const(height)},
+		{ui.SIZE_EXACT, ui.Const(1)},
+		{ui.SIZE_WEIGHT, ui.Const(1)},
 	})
 
 	if c.header != nil {
@@ -768,15 +770,18 @@ type reviewMessage struct {
 }
 
 func newReviewMessage(composer *Composer, err error) *reviewMessage {
-	spec := []ui.GridSpec{{ui.SIZE_EXACT, 2}, {ui.SIZE_EXACT, 1}}
+	spec := []ui.GridSpec{
+		{ui.SIZE_EXACT, ui.Const(2)},
+		{ui.SIZE_EXACT, ui.Const(1)},
+	}
 	for i := 0; i < len(composer.attachments)-1; i++ {
-		spec = append(spec, ui.GridSpec{ui.SIZE_EXACT, 1})
+		spec = append(spec, ui.GridSpec{ui.SIZE_EXACT, ui.Const(1)})
 	}
 	// make the last element fill remaining space
-	spec = append(spec, ui.GridSpec{ui.SIZE_WEIGHT, 1})
+	spec = append(spec, ui.GridSpec{ui.SIZE_WEIGHT, ui.Const(1)})
 
 	grid := ui.NewGrid().Rows(spec).Columns([]ui.GridSpec{
-		{ui.SIZE_WEIGHT, 1},
+		{ui.SIZE_WEIGHT, ui.Const(1)},
 	})
 
 	if err != nil {
diff --git a/widgets/msgviewer.go b/widgets/msgviewer.go
index ce85970..f06b787 100644
--- a/widgets/msgviewer.go
+++ b/widgets/msgviewer.go
@@ -69,7 +69,7 @@ func NewMessageViewer(acct *AccountView,
 	)
 
 	rows := []ui.GridSpec{
-		{ui.SIZE_EXACT, headerHeight},
+		{ui.SIZE_EXACT, ui.Const(headerHeight)},
 	}
 
 	if msg.PGPDetails() != nil {
@@ -77,16 +77,16 @@ func NewMessageViewer(acct *AccountView,
 		if msg.PGPDetails().IsSigned && msg.PGPDetails().IsEncrypted {
 			height = 2
 		}
-		rows = append(rows, ui.GridSpec{ui.SIZE_EXACT, height})
+		rows = append(rows, ui.GridSpec{ui.SIZE_EXACT, ui.Const(height)})
 	}
 
 	rows = append(rows, []ui.GridSpec{
-		{ui.SIZE_EXACT, 1},
-		{ui.SIZE_WEIGHT, 1},
+		{ui.SIZE_EXACT, ui.Const(1)},
+		{ui.SIZE_WEIGHT, ui.Const(1)},
 	}...)
 
 	grid := ui.NewGrid().Rows(rows).Columns([]ui.GridSpec{
-		{ui.SIZE_WEIGHT, 1},
+		{ui.SIZE_WEIGHT, ui.Const(1)},
 	})
 
 	switcher := &PartSwitcher{}
@@ -373,7 +373,7 @@ func (ps *PartSwitcher) MouseEvent(localX int, localY int, event tcell.Event) {
 			if localY < y && ps.parts[ps.selected].term != nil {
 				ps.parts[ps.selected].term.MouseEvent(localX, localY, event)
 			}
-			for i, _ := range ps.parts {
+			for i := range ps.parts {
 				if localY != y+i {
 					continue
 				}
@@ -511,11 +511,11 @@ func NewPartViewer(acct *AccountView, conf *config.AercConfig,
 	}
 
 	grid := ui.NewGrid().Rows([]ui.GridSpec{
-		{ui.SIZE_EXACT, 3}, // Message
-		{ui.SIZE_EXACT, 1}, // Selector
-		{ui.SIZE_WEIGHT, 1},
+		{ui.SIZE_EXACT, ui.Const(3)}, // Message
+		{ui.SIZE_EXACT, ui.Const(1)}, // Selector
+		{ui.SIZE_WEIGHT, ui.Const(1)},
 	}).Columns([]ui.GridSpec{
-		{ui.SIZE_WEIGHT, 1},
+		{ui.SIZE_WEIGHT, ui.Const(1)},
 	})
 
 	selecter := NewSelecter([]string{"Save message", "Pipe to command"}, 0).