提交 9930c042 编写于 作者: aaronchen2k2k's avatar aaronchen2k2k

code refactoring

上级 3f6ab813
......@@ -15,12 +15,7 @@ import (
)
const (
leftWidth = 32
labelWidth = 15
inputFullLineWidth = 69
inputNumbWidth = 25
buttonWidth = 10
space = 2
leftWidth = 32
)
var server *httptest.Server
......@@ -42,7 +37,7 @@ func main() {
layout(g)
if err := keybindings(g); err != nil {
if err := keyBindings(g); err != nil {
log.Panicln(err)
}
......@@ -54,16 +49,14 @@ func main() {
func layout(g *gocui.Gui) error {
maxX, maxY := g.Size()
qickbarView := ui.NewLabelWidget(g, "qickbar", 0, 0, leftWidth, "")
viewMap["root"] = append(viewMap["root"], qickbarView.Name())
quickBarView := ui.NewPanelWidget(g, "quickBarView", 0, 0, leftWidth, 2, "")
viewMap["root"] = append(viewMap["root"], quickBarView.Name())
importView := ui.NewLabelWidget(g, "import", 3, 0, 9, "Import")
importView := ui.NewLabelWidget(g, "import", 3, 0, "Import")
viewMap["root"] = append(viewMap["root"], importView.Name())
importView.Frame = false
switchView := ui.NewLabelWidget(g, "switch", 19, 0, 13, "Switch")
switchView := ui.NewLabelWidget(g, "switch", 19, 0, "Switch")
viewMap["root"] = append(viewMap["root"], switchView.Name())
switchView.Frame = false
sideView := ui.NewPanelWidget(g, "side", 0, 2, leftWidth, maxY-3, "")
viewMap["root"] = append(viewMap["root"], sideView.Name())
......@@ -81,43 +74,13 @@ func layout(g *gocui.Gui) error {
ui.NewHelpWidget(g)
return nil
}
func quit(g *gocui.Gui, v *gocui.View) error {
return gocui.ErrQuit
}
func showHelp(g *gocui.Gui, v *gocui.View) error {
help, _ := g.View("help")
if help != nil {
hideHelp(g)
} else {
ui.NewHelpWidget(g)
}
return nil
}
func hideHelp(g *gocui.Gui) error {
help, _ := g.View("help")
if help != nil {
if err := g.DeleteView("help"); err != nil {
return err
}
}
return nil
}
func keybindings(g *gocui.Gui) error {
if err := g.SetKeybinding("", gocui.KeyCtrlC, gocui.ModNone, quit); err != nil {
func keyBindings(g *gocui.Gui) error {
if err := g.SetKeybinding("", gocui.KeyCtrlC, gocui.ModNone, ui.Quit); err != nil {
return err
}
if err := g.SetKeybinding("", gocui.KeyCtrlH, gocui.ModNone, showHelp); err != nil {
log.Panicln(err)
}
if err := g.SetKeybinding("", gocui.KeyTab, gocui.ModNone, toggleInput); err != nil {
if err := g.SetKeybinding("", gocui.KeyCtrlH, gocui.ModNone, ui.ShowHelp); err != nil {
log.Panicln(err)
}
......@@ -147,7 +110,7 @@ func setEdit(g *gocui.Gui, v *gocui.View) error {
}
func importProjectUi(g *gocui.Gui, v *gocui.View) error {
hideHelp(g)
ui.HideHelp(g)
maxX, _ := g.Size()
......@@ -155,141 +118,67 @@ func importProjectUi(g *gocui.Gui, v *gocui.View) error {
slideX, _ := slideView.Size()
left := slideX + 2
right := left + labelWidth
if v, err := g.SetView("urlLabel", left, 1, right, 3); err != nil {
v.Frame = false
fmt.Fprint(v, "ZentaoUrl")
viewMap["import"] = append(viewMap["import"], v.Name())
}
left = right + space
right = left + inputFullLineWidth
if v, err := g.SetView("urlInput", left, 1, right, 3); err != nil {
if err != gocui.ErrUnknownView {
return err
}
v.Clear()
fmt.Fprint(v, server.URL)
v.Editable = true
v.Wrap = true
if _, err := g.SetCurrentView("urlInput"); err != nil {
return err
}
viewMap["import"] = append(viewMap["import"], v.Name())
right := left + ui.LabelWidth
urlLabel := ui.NewLabelWidget(g, "urlLabel", left, 1, "ZentaoUrl")
viewMap["import"] = append(viewMap["import"], urlLabel.Name())
left = right + ui.Space
right = left + ui.TextWidthFull
urlInput := ui.NewTextWidget(g, "urlInput", left, 1, ui.TextWidthFull, server.URL)
viewMap["import"] = append(viewMap["import"], urlInput.Name())
if _, err := g.SetCurrentView("urlInput"); err != nil {
return err
}
left = slideX + 2
right = left + labelWidth
if v, err := g.SetView("productLabel", left, 4, right, 6); err != nil {
v.Frame = false
fmt.Fprint(v, "ProdoctId")
viewMap["import"] = append(viewMap["import"], v.Name())
}
left = right + space
right = left + inputNumbWidth
if v, err := g.SetView("productInput", left, 4, right, 6); err != nil {
if err != gocui.ErrUnknownView {
return err
}
right = left + ui.LabelWidth
productLabel := ui.NewLabelWidget(g, "productLabel", left, 4, "ProductId")
viewMap["import"] = append(viewMap["import"], productLabel.Name())
v.Editable = true
v.Wrap = true
left = right + ui.Space
right = left + ui.TextWidthHalf
productInput := ui.NewTextWidget(g, "productInput", left, 4, ui.TextWidthHalf, "1")
viewMap["import"] = append(viewMap["import"], productInput.Name())
fmt.Fprint(v, "1")
viewMap["import"] = append(viewMap["import"], v.Name())
}
left = right + space
right = left + labelWidth
if v, err := g.SetView("taskLabel", left, 4, right, 6); err != nil {
v.Frame = false
fmt.Fprint(v, "or TaskId")
viewMap["import"] = append(viewMap["import"], v.Name())
}
left = right + space
right = left + inputNumbWidth
if v, err := g.SetView("taskInput", left, 4, right, 6); err != nil {
if err != gocui.ErrUnknownView {
return err
}
left = right + ui.Space
right = left + ui.LabelWidth
taskLabel := ui.NewLabelWidget(g, "taskLabel", left, 4, "or TaskId")
viewMap["import"] = append(viewMap["import"], taskLabel.Name())
v.Editable = true
v.Wrap = true
fmt.Fprint(v, "1")
viewMap["import"] = append(viewMap["import"], v.Name())
}
left = right + ui.Space
right = left + ui.TextWidthHalf
taskInput := ui.NewTextWidget(g, "taskInput", left, 4, ui.TextWidthHalf, "1")
viewMap["import"] = append(viewMap["import"], taskInput.Name())
left = slideX + 2
right = left + labelWidth
if v, err := g.SetView("languageLabel", left, 7, right, 9); err != nil {
v.Frame = false
fmt.Fprint(v, "Language")
viewMap["import"] = append(viewMap["import"], v.Name())
}
left = right + space
right = left + inputNumbWidth
if v, err := g.SetView("languageInput", left, 7, right, 9); err != nil {
if err != gocui.ErrUnknownView {
return err
}
v.Editable = true
v.Wrap = true
fmt.Fprint(v, "python")
viewMap["import"] = append(viewMap["import"], v.Name())
}
left = right + space
right = left + labelWidth
if v, err := g.SetView("singleFileLabel", left, 7, right, 9); err != nil {
v.Frame = false
fmt.Fprint(v, "SingleFile")
viewMap["import"] = append(viewMap["import"], v.Name())
right = left + ui.LabelWidth
languageLabel := ui.NewLabelWidget(g, "languageLabel", left, 7, "Language")
viewMap["import"] = append(viewMap["import"], languageLabel.Name())
left = right + ui.Space
right = left + ui.TextWidthHalf
languageInput := ui.NewTextWidget(g, "languageInput", left, 7, ui.TextWidthHalf, "python")
viewMap["import"] = append(viewMap["import"], languageInput.Name())
left = right + ui.Space
right = left + ui.LabelWidth
singleFileLabel := ui.NewLabelWidget(g, "singleFileLabel", left, 7, "SingleFile")
viewMap["import"] = append(viewMap["import"], singleFileLabel.Name())
left = right + ui.Space
right = left + ui.TextWidthHalf
singleFileInput := ui.NewLabelWidget(g, "singleFileInput", left, 7, "[*]")
viewMap["import"] = append(viewMap["import"], singleFileInput.Name())
if err := g.SetKeybinding("singleFileInput", gocui.KeySpace, gocui.ModNone, changeSingleFile); err != nil {
return err
}
left = right + space
right = left + inputNumbWidth
if v, err := g.SetView("singleFileInput", left, 7, right, 9); err != nil {
if err != gocui.ErrUnknownView {
return err
}
v.Frame = false
buttonX := (maxX-leftWidth)/2 + leftWidth - ui.ButtonWidth
submitInput := ui.NewButtonWidgetAutoWidth(g, "submitInput", buttonX, 10, "Submit", importProjectRequest)
viewMap["import"] = append(viewMap["import"], submitInput.Name())
if err := g.SetKeybinding("singleFileInput", gocui.KeySpace, gocui.ModNone, changeSingleFile); err != nil {
return err
}
fmt.Fprint(v, "[*]")
viewMap["import"] = append(viewMap["import"], v.Name())
}
buttonX := (maxX-leftWidth)/2 + leftWidth - buttonWidth
if v, err := g.SetView("submitInput", buttonX, 10, buttonX+buttonWidth, 12); err != nil {
if err != gocui.ErrUnknownView {
return err
}
v.Highlight = true
v.BgColor = gocui.ColorGreen
v.FgColor = gocui.ColorBlack
fmt.Fprint(v, " Submit ")
if err := g.SetKeybinding("submitInput", gocui.MouseLeft, gocui.ModNone, importProjectRequest); err != nil {
return err
}
if err := g.SetKeybinding("submitInput", gocui.KeyEnter, gocui.ModNone, importProjectRequest); err != nil {
return err
}
viewMap["import"] = append(viewMap["import"], v.Name())
if err := g.SetKeybinding("", gocui.KeyTab, gocui.ModNone, ui.ToggleInput(viewMap["import"])); err != nil {
log.Panicln(err)
}
return nil
......@@ -356,14 +245,3 @@ func changeSingleFile(g *gocui.Gui, v *gocui.View) error {
return nil
}
func toggleInput(g *gocui.Gui, v *gocui.View) error {
nextView := ui.GetNextView(v.Name(), viewMap["import"])
if nextView != "" {
_, err := g.SetCurrentView(nextView)
return err
}
return nil
}
......@@ -6,7 +6,8 @@ import (
)
const (
buttonWidth = 10
ButtonWidth = 15
ButtonHeight = 2
)
type ButtonWidget struct {
......@@ -17,23 +18,34 @@ type ButtonWidget struct {
handler func(g *gocui.Gui, v *gocui.View) error
}
func NewButtonWidget(name string, x, y int, label string, handler func(g *gocui.Gui, v *gocui.View) error) *ButtonWidget {
return &ButtonWidget{name: name, x: x, y: y, w: len(label) + 1, label: label, handler: handler}
func NewButtonWidget(g *gocui.Gui, name string, x, y, w int, label string,
handler func(g *gocui.Gui, v *gocui.View) error) *gocui.View {
widget := ButtonWidget{name: name, x: x, y: y, w: w, label: label, handler: handler}
v, _ := widget.Layout(g, handler)
return v
}
func (w *ButtonWidget) Layout(g *gocui.Gui) error {
v, err := g.SetView(w.name, w.x, w.y, w.x+w.w, w.y+2)
func NewButtonWidgetAutoWidth(g *gocui.Gui, name string, x, y int, label string,
handler func(g *gocui.Gui, v *gocui.View) error) *gocui.View {
widget := NewButtonWidget(g, name, x, y, len(label)+3, " "+label+" ", handler)
return widget
}
func (w *ButtonWidget) Layout(g *gocui.Gui, handler func(g *gocui.Gui, v *gocui.View) error) (*gocui.View, error) {
v, err := g.SetView(w.name, w.x, w.y, w.x+w.w, w.y+ButtonHeight)
if err != nil {
if err != gocui.ErrUnknownView {
return err
}
if _, err := g.SetCurrentView(w.name); err != nil {
return err
return nil, err
}
if err := g.SetKeybinding(w.name, gocui.KeyEnter, gocui.ModNone, w.handler); err != nil {
return err
return nil, err
}
if err := g.SetKeybinding(w.name, gocui.MouseLeft, gocui.ModNone, w.handler); err != nil {
return nil, err
}
fmt.Fprint(v, w.label)
}
return nil
return v, nil
}
......@@ -6,7 +6,8 @@ import (
)
const (
labelWidth = 15
LabelWidth = 15
LabelHeight = 2
)
type LabelWidget struct {
......@@ -16,20 +17,22 @@ type LabelWidget struct {
label string
}
func NewLabelWidget(g *gocui.Gui, name string, x, y, w int, label string) *gocui.View {
widget := LabelWidget{name: name, x: x, y: y, w: w, label: label}
func NewLabelWidget(g *gocui.Gui, name string, x, y int, label string) *gocui.View {
widget := LabelWidget{name: name, x: x, y: y, w: LabelWidth, label: label}
v, _ := widget.Layout(g)
v.Frame = false
return v
}
func NewLabelWidgetAutoWidth(g *gocui.Gui, name string, x, y int, label string) *gocui.View {
widget := &LabelWidget{name: name, x: x, y: y, w: len(label) + 1, label: label}
widget := LabelWidget{name: name, x: x, y: y, w: len(label), label: label}
v, _ := widget.Layout(g)
v.Frame = false
return v
}
func (w *LabelWidget) Layout(g *gocui.Gui) (*gocui.View, error) {
v, err := g.SetView(w.name, w.x, w.y, w.x+w.w, w.y+2)
v, err := g.SetView(w.name, w.x, w.y, w.x+w.w, w.y+LabelHeight)
if err != nil {
if err != gocui.ErrUnknownView {
return nil, err
......
......@@ -6,34 +6,37 @@ import (
)
const (
inputNumbWidth = 25
TextWidthFull = 69
TextWidthHalf = 25
TextHeight = 2
)
type TextWidget struct {
name string
x, y int
w int
label string
handler func(g *gocui.Gui, v *gocui.View) error
name string
x, y int
w int
text string
}
func NewTextWidget(name string, x, y int, label string, handler func(g *gocui.Gui, v *gocui.View) error) *TextWidget {
return &TextWidget{name: name, x: x, y: y, w: len(label) + 1, label: label, handler: handler}
func NewTextWidget(g *gocui.Gui, name string, x, y, w int, text string) *gocui.View {
widget := TextWidget{name: name, x: x, y: y, w: w, text: text}
v, _ := widget.Layout(g)
return v
}
func (w *TextWidget) Layout(g *gocui.Gui) error {
v, err := g.SetView(w.name, w.x, w.y, w.x+w.w, w.y+2)
func (w *TextWidget) Layout(g *gocui.Gui) (*gocui.View, error) {
v, err := g.SetView(w.name, w.x, w.y, w.x+w.w, w.y+TextHeight)
if err != nil {
if err != gocui.ErrUnknownView {
return err
}
if _, err := g.SetCurrentView(w.name); err != nil {
return err
}
if err := g.SetKeybinding(w.name, gocui.KeyEnter, gocui.ModNone, w.handler); err != nil {
return err
return nil, err
}
fmt.Fprint(v, w.label)
v.Editable = true
v.Wrap = true
v.Clear()
fmt.Fprint(v, w.text)
}
return nil
return v, nil
}
package ui
import (
"github.com/jroimartin/gocui"
"strings"
)
const (
Space = 2
)
func ShowHelp(g *gocui.Gui, v *gocui.View) error {
help, _ := g.View("help")
if help != nil {
HideHelp(g)
} else {
NewHelpWidget(g)
}
return nil
}
func HideHelp(g *gocui.Gui) error {
help, _ := g.View("help")
if help != nil {
if err := g.DeleteView("help"); err != nil {
return err
}
}
return nil
}
func ToggleInput(views []string) func(g *gocui.Gui, v *gocui.View) error {
return func(g *gocui.Gui, v *gocui.View) error {
nextView := GetNextView(v.Name(), views)
if nextView != "" {
_, err := g.SetCurrentView(nextView)
return err
}
return nil
}
}
func GetNextView(name string, views []string) string {
i := 0
found := false
......@@ -27,3 +68,7 @@ func GetNextView(name string, views []string) string {
return ""
}
func Quit(g *gocui.Gui, v *gocui.View) error {
return gocui.ErrQuit
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册