From 0f6390596f1f50e4e8a6b7bc41f598fd02c87284 Mon Sep 17 00:00:00 2001 From: Kai O'Reilly Date: Thu, 21 Mar 2024 21:48:58 -0700 Subject: [PATCH] add embedded fields and view add-fields struct view docs --- docs/content/3-views/struct-views.md | 28 ++++++++++++++++++++++++++++ docs/webcoregen.go | 28 +++++++++++++++++++++++++--- 2 files changed, 53 insertions(+), 3 deletions(-) diff --git a/docs/content/3-views/struct-views.md b/docs/content/3-views/struct-views.md index 3e65e6e2e6..69fb947849 100644 --- a/docs/content/3-views/struct-views.md +++ b/docs/content/3-views/struct-views.md @@ -68,6 +68,34 @@ type person struct { giv.NewStructView(parent).SetStruct(&person{Name: "Go", Age: 35}).SetReadOnly(true) ``` +You can use structs with embedded fields: + +```Go +type Person struct { + Name string + Age int +} +type employee struct { + Person + Role string +} +giv.NewStructView(parent).SetStruct(&employee{Person{Name: "Go", Age: 35}, "Programmer"}) +``` + +You can expand fields that are themselves structs: + +```Go +type person struct { + Name string + Age int +} +type employee struct { + Role string + Manager person `view:"add-fields"` +} +giv.NewStructView(parent).SetStruct(&employee{"Programmer", person{Name: "Go", Age: 35}}) +``` + You can specify a default value (or list or range of values) for a field, which will be displayed in the tooltip for the field label, make the label highlighted when the value is non-default, and allow the user to reset the value to the default value by double clicking on the label: ```Go diff --git a/docs/webcoregen.go b/docs/webcoregen.go index 24794ab858..09b223197a 100644 --- a/docs/webcoregen.go +++ b/docs/webcoregen.go @@ -590,6 +590,28 @@ var WebcoreExamples = map[string]func(parent gi.Widget){ giv.NewStructView(parent).SetStruct(&person{Name: "Go", Age: 35}).SetReadOnly(true) }, "views/struct-views-6": func(parent gi.Widget) { + type Person struct { + Name string + Age int + } + type employee struct { + Person + Role string + } + giv.NewStructView(parent).SetStruct(&employee{Person{Name: "Go", Age: 35}, "Programmer"}) + }, + "views/struct-views-7": func(parent gi.Widget) { + type person struct { + Name string + Age int + } + type employee struct { + Role string + Manager person `view:"add-fields"` + } + giv.NewStructView(parent).SetStruct(&employee{"Programmer", person{Name: "Go", Age: 35}}) + }, + "views/struct-views-8": func(parent gi.Widget) { type person struct { Name string `default:"Gopher"` Age int `default:"20:30"` @@ -597,21 +619,21 @@ var WebcoreExamples = map[string]func(parent gi.Widget){ } giv.NewStructView(parent).SetStruct(&person{Name: "Go", Age: 35, Precision: 50}) }, - "views/struct-views-7": func(parent gi.Widget) { + "views/struct-views-9": func(parent gi.Widget) { type person struct { Name string Age int } giv.NewStructViewInline(parent).SetStruct(&person{Name: "Go", Age: 35}) }, - "views/struct-views-8": func(parent gi.Widget) { + "views/struct-views-10": func(parent gi.Widget) { type person struct { Name string Age int } giv.NewValue(parent, &person{Name: "Go", Age: 35}) }, - "views/struct-views-9": func(parent gi.Widget) { + "views/struct-views-11": func(parent gi.Widget) { type person struct { Name string Age int