From 18fc6238dfc73170227afe26f19e1628ff45f461 Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Mon, 3 Mar 2025 15:00:05 -0600 Subject: new standard: GenericWindow() --- genericWindow.go | 106 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 genericWindow.go diff --git a/genericWindow.go b/genericWindow.go new file mode 100644 index 0000000..f2695fd --- /dev/null +++ b/genericWindow.go @@ -0,0 +1,106 @@ +// Copyright 2017-2025 WIT.COM Inc. All rights reserved. +// Use of this source code is governed by the GPL 3.0 + +package gadgets + +// This model works for 99.9% of all windows +// This is the Default Standard Window Model + +import ( + "go.wit.com/log" + + "go.wit.com/gui" +) + +type GenericWindow struct { + Win *BasicWindow // the window widget itself + Shelf *gui.Node // the overall box: the shelf + Stack *gui.Node // the first box is a stack + Top *gui.Node // the first item in the stack is always a shelf like box + Group *gui.Node // the first item top box is always a group + Middle *gui.Node // the middle box (shelf style) + Bottom *gui.Node // the bottom box (stack style) +} + +func (gw *GenericWindow) Hidden() bool { + if gw == nil { + return true + } + if gw.Win == nil { + return true + } + return gw.Win.Hidden() +} + +func (gw *GenericWindow) Toggle() { + if gw.Hidden() { + gw.Show() + } else { + gw.Hide() + } +} + +func (gw *GenericWindow) Show() { + if gw == nil { + return + } + if gw.Win == nil { + return + } + gw.Win.Show() +} + +func (gw *GenericWindow) Hide() { + if gw == nil { + return + } + if gw.Win == nil { + return + } + gw.Win.Hide() +} + +func (gw *GenericWindow) Disable() { + if gw == nil { + return + } + if gw.Shelf == nil { + return + } + gw.Shelf.Disable() +} + +func (gw *GenericWindow) Enable() { + if gw == nil { + return + } + if gw.Shelf == nil { + return + } + gw.Shelf.Enable() +} + +func NewGenericWindow(title string, grouptxt string) *GenericWindow { + gw := new(GenericWindow) + gw.Win = RawBasicWindow(title) + gw.Win.Make() + + gw.Win.Custom = func() { + log.Warn("Found Window close. setting hidden=true") + // sets the hidden flag to false so Toggle() works + gw.Win.Hide() + } + gw.Shelf = gw.Win.Box() + // gw.Shelf.Vertical().SetProgName("ShelfBox") + gw.Stack = gw.Shelf.NewVerticalBox("Stackbox") + + gw.Top = gw.Stack.NewVerticalBox("Stackbox") + gw.Middle = gw.Stack.Box() + gw.Bottom = gw.Stack.Box() + + gw.Group = gw.Top.NewGroup(grouptxt) + + gw.Show() + + return gw +} -- cgit v1.2.3