完成编写光标移动的功能

This commit is contained in:
chenxinquan 2022-11-17 03:26:53 +08:00
parent 37b94cf560
commit b58b5cb920
1 changed files with 100 additions and 1 deletions

View File

@ -108,7 +108,7 @@ func (fr *FrameReport)SetDetailLayout(g *gocui.Gui) error {
return nil return nil
} }
//////////////////////////////////////////////////////////////// ///////////////////////////////
// navigation // navigation
func (fr *FrameReport)NextView(g *gocui.Gui, v *gocui.View) error { func (fr *FrameReport)NextView(g *gocui.Gui, v *gocui.View) error {
var rc error var rc error
@ -159,9 +159,57 @@ func (fr *FrameReport)PreSummary(g *gocui.Gui, v *gocui.View) error {
} }
/* */ /* */
func (fr *FrameReport)CursorDown(g *gocui.Gui, v *gocui.View) error { func (fr *FrameReport)CursorDown(g *gocui.Gui, v *gocui.View) error {
if (nil != v) {
cx, cy := v.Cursor()
ox, oy := v.Origin()
ok, _ := fr.movable(v, oy+cy+1)
if ( ! ok) {
return nil
} // if ( ! ok ..
rc := v.SetCursor(cx, (cy + 1) )
/* */
if (nil != rc) {
rc = v.SetOrigin(ox, (oy + 1) )
/* */
if (nil != rc) {
return rc
} // if (nil != ...
} // if (nil != ...
rc = fr.onMovingCursorRedrawView(g, v)
/* */
if (nil != rc) {
return rc
} // if (nil != ...
} // if (nil != ...
//cx, cy := v.Cursor()
//ox, oy := v.Origin()
// TODO:debug
// A_DE
return nil return nil
} }
func (fr *FrameReport)CursorUp(g *gocui.Gui, v *gocui.View) error { func (fr *FrameReport)CursorUp(g *gocui.Gui, v *gocui.View) error {
if (nil != v) {
ox, oy := v.Origin()
cx, cy := v.Cursor()
rc := v.SetCursor(cx, cy-1)
if ( (nil != rc) &&
(0 < oy) ) {
rc = v.SetOrigin(ox, oy-1)
if (nil != rc) {
return rc
} // if (nil != ...
} // if ( (nil != rc ..
} // if (nil != ...
_ = fr.onMovingCursorRedrawView(g, v)
/* */
return nil return nil
} }
func (fr *FrameReport)CursorPageDown(g *gocui.Gui, v *gocui.View) error { func (fr *FrameReport)CursorPageDown(g *gocui.Gui, v *gocui.View) error {
@ -171,3 +219,54 @@ func (fr *FrameReport)CursorPageUp(g *gocui.Gui, v *gocui.View) error {
return nil return nil
} }
///////////////////////////////
// Utils
func (fr *FrameReport)movable(v *gocui.View, nextY int) (ok bool, yLimit int) {
switch ( v.Name() ) {
case FRAMEREPORTVIEW_VIEWNAME_SIDE:
yLimit = len(fr.reports) - 1
/* */
if (yLimit < nextY) {
return false, yLimit
} // if (yLimit ...
/* */
return true, yLimit
case FRAMEREPORTVIEW_VIEWNAME_SUMMARY:
yLimit = len(fr.vulnInfos) - 1
if (yLimit < nextY) {
return false, yLimit
} // if (yLimit ...
/* */
return true, yLimit
case FRAMEREPORTVIEW_VIEWNAME_DETAIL:
// TODO:
return false, 0
default:
return true, 0
} // switch ( ...
}
// redraw views
func (fr *FrameReport)onMovingCursorRedrawView(g *gocui.Gui, v *gocui.View) error {
switch ( v.Name() ) {
case FRAMEREPORTVIEW_VIEWNAME_SUMMARY:
if rc := fr.redrawDetail(g); (nil != rc) {
return rc
} // if rc := ...
case FRAMEREPORTVIEW_VIEWNAME_SIDE:
// TODO
} // switch ( v.Name() ...
return nil
}
func (fr *FrameReport)redrawDetail(g *gocui.Gui) error {
rc := g.DeleteView(FRAMEREPORTVIEW_VIEWNAME_DETAIL)
/* */
if (nil != rc) {
return rc
} // if (nil ...
return fr.SetDetailLayout(g)
}