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