package main import ( "fmt" "fyne.io/fyne/v2" "fyne.io/fyne/v2/app" "fyne.io/fyne/v2/canvas" "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/layout" "fyne.io/fyne/v2/widget" "image/color" ) type DBInterface struct { window fyne.Window db SQLConnection } func insertView(window fyne.Window, db SQLConnection, table string) { window.SetTitle(fmt.Sprintf("Insert into table %s", table)) columns, _ := db.getColumns(table) var elements []fyne.CanvasObject for _, val := range columns { label := canvas.NewText(val, color.White) input := widget.NewEntry() elements = append(elements, container.New( layout.NewBorderLayout(nil, nil, label, nil), label, input)) } elements = append(elements, widget.NewButton("Вставить", func() {})) elements = append(elements, widget.NewButton("Назад", func() { showTable(window, db, table) })) mainContainer := container.NewVBox(elements...) window.SetContent(mainContainer) } func showTable(window fyne.Window, db SQLConnection, table string) { data, err := db.getTable(table) if err != nil { fmt.Println(err) return } columns, err := db.getColumns(table) list := widget.NewTable( func() (int, int) { return len(data), len(columns) }, func() fyne.CanvasObject { return widget.NewLabel("wide content") }, func(i widget.TableCellID, o fyne.CanvasObject) { o.(*widget.Label).SetText(fmt.Sprintf("%v", data[i.Row][i.Col])) }) signup := widget.NewButton("Вставить", func() { insertView(window, db, table) }) back := widget.NewButton("Назад", func() { adminView(window, db) }) window.SetContent(container.NewBorder(nil, container.NewHBox(signup, back), nil, nil, list)) } func adminView(window fyne.Window, db SQLConnection) { tables, _ := db.getTables() var tableBtns []fyne.CanvasObject tableBtns = append(tableBtns, container.NewCenter(widget.NewLabel("Таблицы"))) for _, val := range tables { e := val tableBtns = append( tableBtns, widget.NewButton( fmt.Sprintf("Показать %s", val), func() { showTable(window, db, e) })) } views, _ := db.getViews() var viewsBtns []fyne.CanvasObject viewsBtns = append(viewsBtns, container.NewCenter(widget.NewLabel("Представления"))) for _, val := range views { e := val viewsBtns = append( viewsBtns, widget.NewButton( fmt.Sprintf("Показать %s", val), func() { showTable(window, db, e) })) } tablesScroll := container.NewVScroll(container.NewVBox(tableBtns...)) viewsScroll := container.NewVScroll(container.NewVBox(viewsBtns...)) dataBox := container.NewHBox(tablesScroll, viewsScroll) menuBtn := widget.NewButton("В меню", func() { menu(window, db) }) window.SetContent(container.NewBorder(nil, menuBtn, nil, nil, dataBox)) } func userView(window fyne.Window, db SQLConnection) { } func menu(window fyne.Window, db SQLConnection) { window.SetContent(container.NewCenter( container.NewVBox( widget.NewButton("Режим Администратора", func() { adminView(window, db) }), widget.NewButton("Режим Пользователя", func() { userView(window, db) }), ), )) } func main() { myApp := app.New() window := myApp.NewWindow("Table Widget") window.Resize(fyne.NewSize(700, 480)) db := SQLConnection{} err := db.init() if err != nil { fmt.Println(err) return } menu(window, db) window.ShowAndRun() }