提交 113bf6c9 编写于 作者: aaronchen2k2k's avatar aaronchen2k2k

support keyup, keydown event for views

上级 ec3f7587
......@@ -34,7 +34,7 @@ func PrintWholeLine(msg string, char string, attr color.Attribute) {
clr := color.New(attr)
clr.Fprintf(output, fmt.Sprintf("%s%s%s\n", preFixStr, msg, postFixStr))
adjustOrigin()
utils.AdjustOrigin("main")
}
func PrintAndLog(logs *[]string, str string) {
......@@ -48,7 +48,7 @@ func PrintAndLog(logs *[]string, str string) {
}
fmt.Fprintf(output, str+"\n")
adjustOrigin()
utils.AdjustOrigin("main")
}
func PrintAndLogColorLn(logs *[]string, str string, attr color.Attribute) {
......@@ -63,7 +63,7 @@ func PrintAndLogColorLn(logs *[]string, str string, attr color.Attribute) {
clr := color.New(attr)
clr.Fprintf(output, str+"\n")
adjustOrigin()
utils.AdjustOrigin("main")
}
func Printt(str string) {
......@@ -75,7 +75,7 @@ func Printt(str string) {
}
fmt.Fprintf(output, str)
adjustOrigin()
utils.AdjustOrigin("main")
}
func coloredStatus(status string) string {
......@@ -92,18 +92,3 @@ func coloredStatus(status string) string {
return status
}
func adjustOrigin() {
if !utils.RunFromCui {
return
}
view, _ := utils.Cui.View("main")
contentHeight := len(view.BufferLines())
oy := contentHeight - utils.MainViewHeight
if oy < 0 {
oy = 0
}
ox, _ := view.Origin()
view.SetOrigin(ox, oy)
}
......@@ -107,22 +107,21 @@ func ImportRequest(g *gocui.Gui, v *gocui.View) error {
params["entityVal"] = taskId
}
cmdView, _ := g.View("cmd")
_, _ = fmt.Fprintln(cmdView, fmt.Sprintf("#atf gen -u %s -t %s -v %s -l %s -s %t",
utils.PrintToCmd(g, fmt.Sprintf("#atf gen -u %s -t %s -v %s -l %s -s %t",
url, params["entityType"], params["entityVal"], language, singleFile))
json, e := httpClient.Get(url, params)
if e != nil {
fmt.Fprintln(cmdView, e.Error())
utils.PrintToCmd(g, e.Error())
return nil
}
count, err := action.Generate(json, url, params["entityType"], params["entityVal"], language, singleFile)
if err == nil {
fmt.Fprintln(cmdView, fmt.Sprintf("success to generate %d test scripts in '%s' at %s",
utils.PrintToCmd(g, fmt.Sprintf("success to generate %d test scripts in '%s' at %s",
count, utils.GenDir, utils.DateTimeStr(time.Now())))
} else {
fmt.Fprintln(cmdView, err.Error())
utils.PrintToCmd(g, err.Error())
}
return nil
......
......@@ -14,7 +14,7 @@ func InitMainPage(g *gocui.Gui) error {
if maxY < utils.MinHeight {
maxY = utils.MinHeight
}
utils.MainViewHeight = maxY - 10
utils.MainViewHeight = maxY - utils.CmdViewHeight - 1
quickBarView := NewPanelWidget(g, "quickBarView", 0, 0, utils.LeftWidth, 2, "")
ViewMap["root"] = append(ViewMap["root"], quickBarView.Name())
......@@ -31,12 +31,11 @@ func InitMainPage(g *gocui.Gui) error {
mainView := NewPanelWidget(g, "main", utils.LeftWidth, 0, maxX-1-utils.LeftWidth, utils.MainViewHeight, "")
ViewMap["root"] = append(ViewMap["root"], mainView.Name())
//mainView.Editable = true
mainView.Wrap = true
cmdView := NewPanelWidget(g, "cmd", utils.LeftWidth, utils.MainViewHeight, maxX-1-utils.LeftWidth, 9, "")
cmdView := NewPanelWidget(g, "cmd", utils.LeftWidth, utils.MainViewHeight, maxX-1-utils.LeftWidth, utils.CmdViewHeight, "")
ViewMap["root"] = append(ViewMap["root"], cmdView.Name())
cmdView.Autoscroll = true
mainView.Wrap = true
utils.PrintPreferenceToView(cmdView)
......@@ -56,31 +55,25 @@ func MainPageKeyBindings(g *gocui.Gui) error {
log.Panicln(err)
}
if err := g.SetKeybinding("main", gocui.KeyArrowUp, gocui.ModNone,
func(g *gocui.Gui, v *gocui.View) error {
scrollView(v, -1)
return nil
}); err != nil {
if err := g.SetKeybinding("main", gocui.MouseLeft, gocui.ModNone, setCurrView("main")); err != nil {
return err
}
if err := g.SetKeybinding("main", gocui.KeyArrowDown, gocui.ModNone,
func(g *gocui.Gui, v *gocui.View) error {
scrollView(v, 1)
return nil
}); err != nil {
if err := g.SetKeybinding("main", gocui.KeyArrowUp, gocui.ModNone, scroll(-1)); err != nil {
return err
}
if err := g.SetKeybinding("main", gocui.KeyArrowDown, gocui.ModNone, scroll(1)); err != nil {
return err
}
return nil
}
func scrollView(v *gocui.View, dy int) error {
if v != nil {
v.Autoscroll = false
ox, oy := v.Origin()
if err := v.SetOrigin(ox, oy+dy); err != nil {
return err
}
if err := g.SetKeybinding("cmd", gocui.MouseLeft, gocui.ModNone, setCurrView("cmd")); err != nil {
return err
}
if err := g.SetKeybinding("cmd", gocui.KeyArrowUp, gocui.ModNone, scroll(-1)); err != nil {
return err
}
if err := g.SetKeybinding("cmd", gocui.KeyArrowDown, gocui.ModNone, scroll(1)); err != nil {
return err
}
return nil
}
......@@ -46,18 +46,17 @@ func SwitchWorkDir(g *gocui.Gui, v *gocui.View) error {
workDir := strings.TrimSpace(workDirView.ViewBuffer())
cmdView, _ := g.View("cmd")
_, _ = fmt.Fprintln(cmdView, fmt.Sprintf("#atf switch -d %s", workDir))
utils.PrintToCmd(g, fmt.Sprintf("#atf switch -d %s", workDir))
err := action.SwitchWorkDir(workDir)
if err == nil {
workDirView.Clear()
workDirView.Write([]byte(utils.Prefer.WorkDir))
fmt.Fprintln(cmdView, fmt.Sprintf("success to switch project to %s at %s",
utils.PrintToCmd(g, fmt.Sprintf("success to switch project to %s at %s",
workDir, utils.DateTimeStr(time.Now())))
} else {
fmt.Fprintln(cmdView, err.Error())
utils.PrintToCmd(g, err.Error())
}
return nil
......
......@@ -49,3 +49,33 @@ func GetNextView(name string, views []string) string {
func Quit(g *gocui.Gui, v *gocui.View) error {
return gocui.ErrQuit
}
func scroll(dy int) func(g *gocui.Gui, v *gocui.View) error {
return func(g *gocui.Gui, v *gocui.View) error {
return scrollView(v, dy)
}
}
func scrollView(v *gocui.View, dy int) error {
v.Autoscroll = false
ox, oy := v.Origin()
pos := oy + dy
_, height := v.Size()
if pos < 0 {
pos = 0
} else if pos > len(v.BufferLines())-height {
pos = len(v.BufferLines()) - height
}
if err := v.SetOrigin(ox, pos); err != nil {
return err
}
return nil
}
func setCurrView(name string) func(g *gocui.Gui, v *gocui.View) error {
return func(g *gocui.Gui, v *gocui.View) error {
g.SetCurrentView(name)
return nil
}
}
......@@ -20,6 +20,8 @@ const (
LeftWidth = 36
MinWidth = 130
MinHeight = 36
CmdViewHeight = 10
)
var RunFromCui bool
......
......@@ -64,3 +64,20 @@ func parseSize(input string) (int, int, error) {
}
return int(w), int(h), nil
}
func AdjustOrigin(name string) {
if !RunFromCui {
return
}
view, _ := Cui.View(name)
_, height := view.Size()
contentHeight := len(view.BufferLines())
oy := contentHeight - height
if oy < 0 {
oy = 0
}
ox, _ := view.Origin()
view.SetOrigin(ox, oy)
}
package utils
import (
"flag"
"fmt"
"github.com/fatih/color"
"github.com/jroimartin/gocui"
)
func PrintUsage(flagSet flag.FlagSet) {
PrintUsageWithSpaceLine(flagSet, true)
}
func PrintUsageWithSpaceLine(flagSet flag.FlagSet, spaceLine bool) {
prefix := ""
if spaceLine {
prefix = "\n"
}
fmt.Printf("%s %s \n", prefix, color.CyanString(flagSet.Name()))
flagSet.PrintDefaults()
}
func PrintSample() {
fmt.Printf("\nSample to use: \n")
fmt.Printf("TODO... \n")
}
func PrintToCmd(g *gocui.Gui, msg string) {
cmdView, _ := g.View("cmd")
_, _ = fmt.Fprintln(cmdView, msg)
AdjustOrigin("cmd")
}
func PrintToMain(g *gocui.Gui, msg string) {
mainView, _ := g.View("main")
mainView.Clear()
_, _ = fmt.Fprintln(mainView, msg)
AdjustOrigin("main")
}
package utils
import (
"flag"
"fmt"
"github.com/easysoft/zentaoatf/src/misc"
"github.com/fatih/color"
"github.com/jroimartin/gocui"
"os"
"path"
"regexp"
......@@ -70,42 +66,6 @@ func IsMac() bool {
return GetOs() == "mac"
}
func PrintUsages(flagSets []flag.FlagSet) {
for _, flagSet := range flagSets {
fmt.Printf("\n %s \n", flagSet.Name())
flagSet.PrintDefaults()
}
}
func PrintUsage(flagSet flag.FlagSet) {
PrintUsageWithSpaceLine(flagSet, true)
}
func PrintUsageWithSpaceLine(flagSet flag.FlagSet, spaceLine bool) {
prefix := ""
if spaceLine {
prefix = "\n"
}
fmt.Printf("%s %s \n", prefix, color.CyanString(flagSet.Name()))
flagSet.PrintDefaults()
}
func PrintSample() {
fmt.Printf("\nSample to use: \n")
fmt.Printf("TODO... \n")
}
func PrintToCmd(g *gocui.Gui, msg string) {
cmdView, _ := g.View("cmd")
_, _ = fmt.Fprintln(cmdView, msg)
}
func PrintToMain(g *gocui.Gui, msg string) {
mainView, _ := g.View("main")
mainView.Clear()
_, _ = fmt.Fprintln(mainView, msg)
}
func IsRelease() bool {
return !FileExist("res")
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册