func (tv *TensorView) IsConfiged() bool {
	if len(tv.Kids) == 0 {
		return false
	}
	sf := tv.SliceFrame()
	if len(sf.Kids) == 0 {
		return false
	}
	return true
}
IsConfiged returns true if the widget is fully configured
package etview
import (
	"fmt"
	"image"
	"reflect"
	"github.com/emer/etable/etensor"
	"github.com/goki/gi/gi"
	"github.com/goki/gi/girl"
	"github.com/goki/gi/gist"
	"github.com/goki/gi/giv"
	"github.com/goki/gi/oswin/mimedata"
	"github.com/goki/gi/units"
	"github.com/goki/ki/ints"
	"github.com/goki/ki/ki"
	"github.com/goki/ki/kit"
	"github.com/goki/mat32"
)
type TensorView struct {
	giv.SliceViewBase
	Tensor etensor.Tensor `desc:"the tensor that we're a view of"`
	TsrLay TensorLayout   `desc:"layout config of the tensor"`
	NCols  int            `inactive:"+" desc:"number of columns in table (as of last update)"`
}
var KiT_TensorView = kit.Types.AddType(&TensorView{}, TensorViewProps)
func AddNewTensorView(parent ki.Ki, name string) *TensorView {
	return parent.AddNewChild(KiT_TensorView, name).(*TensorView)
}
var _ giv.SliceViewer = (*TensorView)(nil)
func (tv *TensorView) SetTensor(tsr etensor.Tensor, tmpSave giv.ValueView) {
	updt := false
	if tsr == nil {
		return
	}
	if tv.Tensor != tsr {
		if !tv.IsInactive() {
			tv.SelectedIdx = -1
		}
		tv.StartIdx = 0
		tv.Tensor = tsr
		updt = tv.UpdateStart()
		tv.ResetSelectedIdxs()
		tv.SelectMode = false
		tv.SetFullReRender()
	}
	tv.ShowIndex = true
	if sidxp, err := tv.PropTry("index"); err == nil {
		tv.ShowIndex, _ = kit.ToBool(sidxp)
	}
	tv.InactKeyNav = true
	if siknp, err := tv.PropTry("inact-key-nav"); err == nil {
		tv.InactKeyNav, _ = kit.ToBool(siknp)
	}
	tv.TmpSave = tmpSave
	tv.Config()
	tv.UpdateEnd(updt)
}
var TensorViewProps = ki.Props{
	"background-color": &gi.Prefs.Colors.Background,
	"color":            &gi.Prefs.Colors.Font,
	"max-width":        -1,
	"max-height":       -1,
}