diff options
| author | Přemysl Eric Janouch <p@janouch.name> | 2024-11-09 11:23:15 +0100 | 
|---|---|---|
| committer | Přemysl Eric Janouch <p@janouch.name> | 2024-11-09 17:20:20 +0100 | 
| commit | 9278e0038366aab29f7c7352f606073756d5b750 (patch) | |
| tree | f58b6945c4b131f433bf6c6d5e69ccfb418009f0 | |
| parent | 98c68ccd0df3e976c3b7992968852e6ae0b9595c (diff) | |
| download | xK-9278e0038366aab29f7c7352f606073756d5b750.tar.gz xK-9278e0038366aab29f7c7352f606073756d5b750.tar.xz xK-9278e0038366aab29f7c7352f606073756d5b750.zip | |
WIP: xA: add prompt and status
| -rw-r--r-- | xA/xA.go | 47 | 
1 files changed, 41 insertions, 6 deletions
| @@ -141,7 +141,6 @@ type buffer struct {  	kind            RelayBufferKind  	serverName      string  	lines           []bufferLine -	// TODO(p): Server by name or by pointer?  	// Channel: @@ -189,6 +188,8 @@ var (  	wTopic      *widget.RichText  	wRichText   *widget.RichText  	wRichScroll *container.Scroll +	wPrompt     *widget.Label +	wStatus     *widget.Label  	wEntry      *widget.Entry  ) @@ -332,11 +333,38 @@ func refreshBufferList() {  }  func refreshPrompt() { -	// TODO(p): First off, add a prompt, second, refresh it. +	var prompt string +	if b := bufferByName(bufferCurrent); b == nil { +		prompt = "Synchronizing..." +	} else if server, ok := servers[b.serverName]; ok { +		prompt = server.user +		if server.userModes != "" { +			prompt += "(" + server.userModes + ")" +		} +		if prompt == "" { +			prompt = "(" + server.state.String() + ")" +		} +	} +	wPrompt.SetText(prompt)  }  func refreshStatus() { -	// TODO(p): First off, add a status, second, refresh it. +	var status string +	if !bufferAtBottom() { +		status += "🡇 " +	} + +	status += bufferCurrent +	if b := bufferByName(bufferCurrent); b != nil { +		if b.modes != "" { +			status += "(+" + b.modes + ")" +		} +		if b.hideUnimportant { +			status += "<H>" +		} +	} + +	wStatus.SetText(status)  }  // --- RichText formatting ----------------------------------------------------- @@ -890,16 +918,23 @@ func main() {  	a.Settings().SetTheme(&customTheme{})  	wWindow = a.NewWindow(projectName) -	// TODO(p): There should also be a widget.NewLabel() next to the entry. -	//  - Probably another Border, even though this seems odd. +	// TODO(p): Consider using data bindings.  	wTopic = widget.NewRichText()  	wTopic.Truncation = fyne.TextTruncateEllipsis  	wRichText = widget.NewRichText()  	wRichText.Wrapping = fyne.TextWrapWord  	wRichScroll = container.NewVScroll(wRichText) +	wPrompt = widget.NewLabelWithStyle( +		"", fyne.TextAlignLeading, fyne.TextStyle{Bold: true}) +	wStatus = widget.NewLabelWithStyle( +		"", fyne.TextAlignTrailing, fyne.TextStyle{})  	wEntry = widget.NewMultiLineEntry() +	bottom := container.NewVBox( +		container.NewBorder(nil, nil, wPrompt, wStatus), +		wEntry, +	)  	wWindow.SetContent(container.NewBorder( -		wTopic, wEntry, nil, nil, wRichScroll)) +		wTopic, bottom, nil, nil, wRichScroll))  	go relayRun() | 
