Initial Commit
Started dev on a calculator module
This commit is contained in:
parent
c0d5c1525e
commit
df470b9153
83
termbox_calculator.go
Normal file
83
termbox_calculator.go
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
package termboxModules
|
||||||
|
|
||||||
|
import "github.com/nsf/termbox-go"
|
||||||
|
|
||||||
|
// Calculator An input field that allows simple maths
|
||||||
|
type Calculator struct {
|
||||||
|
text string
|
||||||
|
input *InputField
|
||||||
|
x, y, width, height int
|
||||||
|
cursor int
|
||||||
|
bg, fg termbox.Attribute
|
||||||
|
history []string
|
||||||
|
opStack []string
|
||||||
|
showHistoryLines int
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateCalculator Create a calculator module
|
||||||
|
func CreateCalculator(x, y, width, height int, fg, bg termbox.Attribute) *Calculator {
|
||||||
|
i := Calculator{x: x, y: y, width: width, height: height, fg: fg, bg: bg, showHistoryLines: 0}
|
||||||
|
i.input = CreateInputField(i.x, i.y, i.width, 2, i.fg, i.bg)
|
||||||
|
i.input.bordered = true
|
||||||
|
return &i
|
||||||
|
}
|
||||||
|
|
||||||
|
// PushOpStack Pushes a value onto the opStack
|
||||||
|
func (calc *Calculator) PushOpStack(v string) {
|
||||||
|
calc.opStack = append(calc.opStack, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
// PopOpStack Pops the last value off of the opStack
|
||||||
|
func (calc *Calculator) PopOpStack() string {
|
||||||
|
prevEntry := opStack[len(opStack)-1]
|
||||||
|
calc.opStack = opStack[:len(opStack)-1]
|
||||||
|
return prevEntry
|
||||||
|
}
|
||||||
|
|
||||||
|
// HandleKeyPress Handle the termbox event, return true if it was consumed
|
||||||
|
func (calc *Calculator) HandleKeyPress(event termbox.Event) bool {
|
||||||
|
if event.Ch == '+' || event.Ch == '-' || event.Ch == '*' || event.Ch == '/' {
|
||||||
|
// Save the value of input to opStack
|
||||||
|
calc.PushOpStack(i.input.GetValue())
|
||||||
|
calc.PushOpStack(string(event.Ch))
|
||||||
|
i.input.SetValue("")
|
||||||
|
return true
|
||||||
|
} else if event.Ch == '=' {
|
||||||
|
// Perform the operation
|
||||||
|
var total int
|
||||||
|
// Go ltr through stack doing all multiplication & division
|
||||||
|
/*
|
||||||
|
for len(opStack) > 0 {
|
||||||
|
prevEntry := calc.PopStack()
|
||||||
|
if prevEntry == "+" {
|
||||||
|
prevEntry = calc.PopStack()
|
||||||
|
if addVal, err := strconv.Atoi(prevEntry); err == nil {
|
||||||
|
total = total + addVal
|
||||||
|
}
|
||||||
|
} else if prevEntry == "-" {
|
||||||
|
prevEntry = calc.PopStack()
|
||||||
|
if subVal, err := strconv.Atoi(prevEntry); err == nil {
|
||||||
|
total = total - subVal
|
||||||
|
}
|
||||||
|
} else if prevEntry == "*" {
|
||||||
|
prevEntry = calc.PopStack()
|
||||||
|
if multVal, err := strconv.Atoi(prevEntry); err == nil {
|
||||||
|
total = total * multVal
|
||||||
|
}
|
||||||
|
} else if prevEntry == "/" {
|
||||||
|
prevEntry = calc.PopStack()
|
||||||
|
if divVal, err := strconv.Atoi(prevEntry); err == nil {
|
||||||
|
total = total / divVal
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
} else if event.Ch == '0' || event.Ch == '1' ||
|
||||||
|
event.Ch == '2' || event.Ch == '3' ||
|
||||||
|
event.Ch == '4' || event.Ch == '5' ||
|
||||||
|
event.Ch == '6' || event.Ch == '7' ||
|
||||||
|
event.Ch == '8' || event.Ch == '9' {
|
||||||
|
return i.input.HandleKeyPress(event)
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user