From ce7e51bafa20dc5a996226913789ab5598aede9d Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Wed, 26 Apr 2023 14:52:54 -0500 Subject: [PATCH] gocui: more correct logic Signed-off-by: Jeff Carr --- toolkit/gocui/add.go | 18 ++++++++------- toolkit/gocui/click.go | 50 ++++++++++++++++++++++++------------------ 2 files changed, 39 insertions(+), 29 deletions(-) diff --git a/toolkit/gocui/add.go b/toolkit/gocui/add.go index 856b871..c649da5 100644 --- a/toolkit/gocui/add.go +++ b/toolkit/gocui/add.go @@ -44,16 +44,18 @@ func (w *cuiWidget) addWidget() { w.setFake() return case toolkit.Window: - w.setTabWH() - w.showView() + me.current = w + updateCurrentTabs() + setCurrentWindow(w) return case toolkit.Tab: - UnsetCurrent(me.rootNode) - me.rootNode.hideWidgets() - w.isCurrent = true - w.parent.isCurrent = true - w.placeWidgets() - w.showWidgets() + // if this is the first tab, set it to the current one and stay here + if (me.current != nil) { + // there is already a current tab. just redraw the tabs + updateCurrentTabs() + return + } + setCurrentTab(w) return case toolkit.Box: w.isFake = true diff --git a/toolkit/gocui/click.go b/toolkit/gocui/click.go index d0c5d90..f0f325e 100644 --- a/toolkit/gocui/click.go +++ b/toolkit/gocui/click.go @@ -25,8 +25,34 @@ func updateCurrentTabs() { me.rootNode.redoTabs(true) } +// shows the widgets in a window +func setCurrentWindow(w *cuiWidget) { + if w.widgetType != toolkit.Window { + return + } + UnsetCurrent(me.rootNode) + me.rootNode.hideWidgets() + + // THIS IS THE BEGINING OF THE LAYOUT + me.rootNode.nextW = 0 + me.rootNode.nextH = 0 + + w.isCurrent = true + if w.hasTabs { + // set isCurrent = true on the first tab + for _, child := range w.children { + child.isCurrent = true + break + } + } + me.rootNode.redoTabs(true) + + w.placeWidgets() + w.showWidgets() +} + // shows the widgets in a tab -func setCurrent(w *cuiWidget) { +func setCurrentTab(w *cuiWidget) { if w.widgetType != toolkit.Tab { return } @@ -51,27 +77,9 @@ func (w *cuiWidget) doWidgetClick() { // me.rootNode.redoColor(true) me.rootNode.dumpTree(true) case toolkit.Window: - UnsetCurrent(me.rootNode) - me.rootNode.hideWidgets() - - me.rootNode.nextW = 0 - me.rootNode.nextH = 0 - - w.isCurrent = true - if w.hasTabs { - // set isCurrent = true on the first tab - for _, child := range w.children { - child.isCurrent = true - break - } - } - me.rootNode.redoTabs(true) - - w.placeWidgets() - w.showWidgets() - // THIS IS THE BEGINING OF THE LAYOUT + setCurrentWindow(w) case toolkit.Tab: - setCurrent(w) + setCurrentTab(w) case toolkit.Group: w.placeWidgets() w.toggleTree()