From b58b5cb920f540008b7ac77b0f75ecd1fdf75305 Mon Sep 17 00:00:00 2001 From: chenxinquan Date: Thu, 17 Nov 2022 03:26:53 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E7=BC=96=E5=86=99=E5=85=89?= =?UTF-8?q?=E6=A0=87=E7=A7=BB=E5=8A=A8=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/gconsole/FrameReportView.go | 101 +++++++++++++++++++++++++++++++- 1 file changed, 100 insertions(+), 1 deletion(-) diff --git a/src/gconsole/FrameReportView.go b/src/gconsole/FrameReportView.go index a5d93c6..980ca94 100644 --- a/src/gconsole/FrameReportView.go +++ b/src/gconsole/FrameReportView.go @@ -108,7 +108,7 @@ func (fr *FrameReport)SetDetailLayout(g *gocui.Gui) error { return nil } -//////////////////////////////////////////////////////////////// +/////////////////////////////// // navigation func (fr *FrameReport)NextView(g *gocui.Gui, v *gocui.View) 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 { + 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 } 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 } 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 } + +/////////////////////////////// +// 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) +} +