Fix dialog layout

This commit is contained in:
Maarten Heremans
2024-08-06 21:30:11 +02:00
parent 64e96e6800
commit ce11540123
4 changed files with 101 additions and 9 deletions

View File

@@ -47,6 +47,11 @@ func (p *Padding) HasPadding() bool {
return p.Top > 0 || p.Bottom > 0 || p.Left > 0 || p.Right > 0
}
type ToolTip struct {
Content string `yaml:"content"`
Localized bool `yaml:"localized"`
}
// Element represents the yaml description of a ui element
type Element struct {
ID string `yaml:"id"`
@@ -97,6 +102,7 @@ type Element struct {
Options map[string]any `yaml:"options"`
Disabled bool `yaml:"disabled"`
Hidden bool `yaml:"hidden"`
ToolTip *ToolTip `yaml:"tooltip"`
// Properties shared by most widgets
Placeholder string `yaml:"placeholder"`

View File

@@ -133,8 +133,12 @@ func (s *Screen) Resize(sz fyne.Size) {
}
}
func (s *Screen) MinSize() fyne.Size {
return s.CanvasObject.MinSize()
}
func (s *Screen) CreateRenderer() fyne.WidgetRenderer {
return widget.NewSimpleRenderer(s.CanvasObject)
return widget.NewSimpleRenderer(s.AsContainer())
}
func (s *Screen) RegisterResizeCallback(cb func(fyne.Size)) {
@@ -149,6 +153,42 @@ func (s *Screen) AsContainer() *fyne.Container {
return s.CanvasObject.(*fyne.Container)
}
type DialogScreen struct {
*Screen
}
func NewDialogScreen(
filesystem embed.FS,
name string,
screenHandler ScreenHandler,
) (src *DialogScreen, err error) {
screen, err := New(filesystem, name, screenHandler)
if err != nil {
return
}
src = &DialogScreen{screen}
return
}
func (s *DialogScreen) Initialize() (obj fyne.CanvasObject, err error) {
if s.CanvasObject, err = s.rootElement.BuildUI(s.screenHandler); err != nil {
err = fmt.Errorf("failed to build screen: %w", err)
return
}
obj = s
return
}
func (s *DialogScreen) Move(p fyne.Position) {
c := fyne.CurrentApp().Driver().CanvasForObject(s.CanvasObject)
movePos := fyne.Position{
X: p.X / c.Scale(),
Y: p.Y / c.Scale(),
}
s.CanvasObject.Move(movePos)
//fmt.Printf("%+v\n", s.CanvasObject.Position());
}
type TemplateScreenHandler struct {
localizer *i18n.Localizer
elementsMap map[string]*UIElement