Browse Source

Add descrption panel to be beside menu.

Steve Thielemann 2 years ago
parent
commit
2f843592c2
1 changed files with 66 additions and 7 deletions
  1. 66 7
      testdoor/testdoor.go

+ 66 - 7
testdoor/testdoor.go

@@ -8,6 +8,8 @@ import (
 	"strconv"
 	"strconv"
 	"strings"
 	"strings"
 	"time"
 	"time"
+
+	"github.com/mitchellh/go-wordwrap"
 )
 )
 
 
 func pctUpdate(pct *int64) func() int64 {
 func pctUpdate(pct *int64) func() int64 {
@@ -62,12 +64,15 @@ func about_test_door(d *door.Door) {
 		"This door was written by Bugz.",
 		"This door was written by Bugz.",
 		"",
 		"",
 		"It is written in Go, understands CP437 and unicode, adapts",
 		"It is written in Go, understands CP437 and unicode, adapts",
-		"to screen sizes, uses door32.sys, supports TheDraw Fonts,",
-		"has NoMoreSecrets effect, and runs on Linux and Windows."} {
+		"to screen sizes, uses door32.sys, supports TheDraw Fonts",
+		"(the fonts are compiled into the door), has NoMoreSecrets",
+		"effect, and runs on Linux and Windows."} {
 		about.Lines = append(about.Lines, door.Line{Text: fmt.Sprintf("%*s", -W, text)})
 		about.Lines = append(about.Lines, door.Line{Text: fmt.Sprintf("%*s", -W, text)})
 	}
 	}
 
 
 	var better door.NoMoreSecretsConfig = door.NoMoreSecretsDefault
 	var better door.NoMoreSecretsConfig = door.NoMoreSecretsDefault
+	better.Jumble_Loop_Speed = 75  // 35
+	better.Reveal_Loop_Speed = 100 // 50
 	better.Color = door.ColorText("BRI CYAN ON BLUE")
 	better.Color = door.ColorText("BRI CYAN ON BLUE")
 
 
 	door.NoMoreSecrets(about.Output(), d, &better)
 	door.NoMoreSecrets(about.Output(), d, &better)
@@ -76,7 +81,7 @@ func about_test_door(d *door.Door) {
 func MainMenu() door.Menu {
 func MainMenu() door.Menu {
 	// Make the main menu
 	// Make the main menu
 	var m door.Menu = door.Menu{Panel: door.Panel{Width: 45,
 	var m door.Menu = door.Menu{Panel: door.Panel{Width: 45,
-		X:           5,
+		X:           2,
 		Y:           5,
 		Y:           5,
 		Style:       door.DOUBLE,
 		Style:       door.DOUBLE,
 		Title:       "[ Main Menu: ]",
 		Title:       "[ Main Menu: ]",
@@ -92,7 +97,7 @@ func MainMenu() door.Menu {
 		door.ColorText("BOLD CYAN ON BLUE"))
 		door.ColorText("BOLD CYAN ON BLUE"))
 
 
 	m.AddSelection("A", "ANSI Display")
 	m.AddSelection("A", "ANSI Display")
-	m.AddSelection("C", "Crash")
+	// m.AddSelection("C", "Crash")
 	m.AddSelection("D", "Display Information (dropfile, screen)")
 	m.AddSelection("D", "Display Information (dropfile, screen)")
 	m.AddSelection("F", "Font Demo")
 	m.AddSelection("F", "Font Demo")
 	m.AddSelection("I", "Input Prompt Demo")
 	m.AddSelection("I", "Input Prompt Demo")
@@ -103,6 +108,60 @@ func MainMenu() door.Menu {
 	m.AddSelection("W", "Screen Width")
 	m.AddSelection("W", "Screen Width")
 
 
 	m.AddSelection("Q", "Quit")
 	m.AddSelection("Q", "Quit")
+
+	var descriptions []string = []string{
+		// 12345678901234567890123456789012345678901234567890
+		"Display an ANSI file. It is compiled into the door itself.",
+		// "Crash go, see a handled error.",  // The error shows up in the logs.
+		"Display dropfile information.",
+		"Display TheDraw Fonts. Font information is compiled into the door.",
+		"Input some values, while updating the time.",
+		"Isn't this is a menu?",
+		"Display various progress bar styles. Half step, display percentage, and gradient.",
+		"Show multiple panels.",
+		"Show more information about the door, using NoMoreSecrets effect.",
+		"Examples using the full width of the screen.",
+		"Exit this door.",
+	}
+
+	var widthLeft int = door.Width - (m.Width + m.X + 2)
+	var panelWidth int = widthLeft - (2 + 2)
+	var maxLines int = 1
+	var maxLineLength int
+	// Calculate the max lines needed for each line.
+	for _, line := range descriptions {
+		var wrapped string = wordwrap.WrapString(line, uint(panelWidth))
+		var lines int = len(strings.Split(wrapped, "\n"))
+		if lines > maxLines {
+			maxLines = lines
+		}
+		if len(line) > maxLineLength {
+			maxLineLength = len(line)
+		}
+	}
+
+	if maxLines == 1 {
+		// Ok! Everything fits into one line, SO use max line length as width of panel.
+		panelWidth = maxLineLength
+	}
+	var p door.Panel = door.Panel{X: m.Width + m.X + 2 + 1, Y: m.Y, Width: panelWidth, Style: door.SINGLE, BorderColor: door.ColorText("WHI ON BLU")}
+	for x := 0; x < maxLines; x++ {
+		p.Lines = append(p.Lines, door.Line{Text: ""})
+	}
+
+	// Target: 5, 20
+	m.Activated = func(item int, d *door.Door) {
+		var line string = descriptions[item]
+		var lines []string = strings.Split(wordwrap.WrapString(line, uint(panelWidth)), "\n")
+		for idx, _ := range p.Lines {
+			if idx >= len(lines) {
+				p.Lines[idx].Text = strings.Repeat(" ", panelWidth)
+			} else {
+				p.Lines[idx].Text = fmt.Sprintf("%-*s", panelWidth, lines[idx])
+			}
+		}
+		d.Write(door.SavePos + p.Output() + door.RestorePos)
+	}
 	return m
 	return m
 }
 }
 
 
@@ -334,7 +393,7 @@ func input_demo(d *door.Door) {
 	go func() {
 	go func() {
 		for t := range ticker.C {
 		for t := range ticker.C {
 			const tf = "January 2, 2006 03:04:05 PM MST"
 			const tf = "January 2, 2006 03:04:05 PM MST"
-			output := door.SavePos + door.Goto(5, 2) + door.ColorText("BRI WHI ON GREEN") + t.Format(tf) + door.RestorePos
+			output := door.SavePos + door.Goto(5, 2) + door.ColorText("BRI WHI ON CYAN") + t.Format(tf) + door.RestorePos
 			d.Write(output)
 			d.Write(output)
 		}
 		}
 	}()
 	}()
@@ -351,7 +410,7 @@ func input_demo(d *door.Door) {
 	var quest string = d.Input(35)
 	var quest string = d.Input(35)
 	d.Write(door.Reset + door.CRNL)
 	d.Write(door.Reset + door.CRNL)
 	prompt.Text = "What is your Favorite CoLoR: "
 	prompt.Text = "What is your Favorite CoLoR: "
-	d.Write(prompt.Output() + inputColor2)
+	d.Write(prompt.Output() + inputColor)
 	var color string = d.Input(15)
 	var color string = d.Input(15)
 	d.Write(door.Reset + door.CRNL)
 	d.Write(door.Reset + door.CRNL)
 	ticker.Stop()
 	ticker.Stop()
@@ -618,7 +677,7 @@ func main() {
 			width_demo(&d)
 			width_demo(&d)
 		case 'Q':
 		case 'Q':
 			choice = -1
 			choice = -1
-		case 'C':
+		case 'C': // Disabled
 			var a, z int
 			var a, z int
 			z = 0
 			z = 0
 			a = 10 / z
 			a = 10 / z