summaryrefslogtreecommitdiff
path: root/interface/main.go
diff options
context:
space:
mode:
authorAndrew Guschin <guschin.drew@gmail.com>2022-05-30 00:54:47 +0400
committerAndrew Guschin <guschin.drew@gmail.com>2022-05-30 00:54:47 +0400
commit30cac6776ffe530892f27c87f7fc26db0f08fd8b (patch)
tree47358897c9db1706f289433f979ba797a514cf68 /interface/main.go
parente296b1dbb2319b26282a1b6fac034ce1048714b9 (diff)
Отображение связи один ко многим
Diffstat (limited to 'interface/main.go')
-rw-r--r--interface/main.go131
1 files changed, 126 insertions, 5 deletions
diff --git a/interface/main.go b/interface/main.go
index 342debc..15a0077 100644
--- a/interface/main.go
+++ b/interface/main.go
@@ -5,6 +5,7 @@ import (
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/container"
+ "fyne.io/fyne/v2/dialog"
"fyne.io/fyne/v2/layout"
"fyne.io/fyne/v2/widget"
)
@@ -145,6 +146,95 @@ func (app *DBInterface) selectAdminView(table string) {
updateView()
}
+func (app *DBInterface) oneToManyShowAdmin(manyTable string, manyColumn string, oneValue string) {
+ data, err := app.db.getOneToManyTable(manyTable, manyColumn, oneValue)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ columns, err := app.db.getColumns(manyTable)
+
+ tableWidget := widget.NewTable(
+ func() (int, int) {
+ return len(data) + 1, len(columns)
+ },
+ func() fyne.CanvasObject {
+ return widget.NewLabel("some very wide content")
+ },
+ func(i widget.TableCellID, o fyne.CanvasObject) {
+ if i.Row == 0 {
+ o.(*widget.Label).Alignment = fyne.TextAlignCenter
+ o.(*widget.Label).TextStyle = fyne.TextStyle{Bold: true}
+ o.(*widget.Label).SetText(fmt.Sprintf("%v", columns[i.Col]))
+ } else {
+ o.(*widget.Label).Alignment = fyne.TextAlignLeading
+ o.(*widget.Label).TextStyle = fyne.TextStyle{Bold: false}
+ o.(*widget.Label).SetText(fmt.Sprintf("%v", data[i.Row-1][i.Col]))
+ }
+ })
+
+ app.window.SetContent(container.NewMax(tableWidget))
+}
+
+func (app *DBInterface) oneToManyParamsAdmin(table string, row int) {
+ app.window.Resize(fyne.NewSize(720, 480))
+ oneColumns, _ := app.db.getColumns(table)
+ tables, _ := app.db.getTables()
+ data, _ := app.db.getTable(table)
+
+ oneColumn := ""
+ manyTable := ""
+ manyColumn := ""
+ oneValue := ""
+
+ showTable := widget.NewButton("Показать таблицу", func() {
+ app.oneToManyShowAdmin(manyTable, manyColumn, oneValue)
+ })
+ showTable.Disable()
+
+ manyFieldSelect := widget.NewSelect([]string{}, func(manyColumnVal string) {
+ manyColumn = manyColumnVal
+ showTable.Enable()
+ })
+ manyFieldSelect.Disable()
+
+ manyTablesSelect := widget.NewSelect(tables, func(manyTableVal string) {
+ manyTable = manyTableVal
+ manyColumns, _ := app.db.getColumns(manyTable)
+ manyFieldSelect.Options = manyColumns
+ manyFieldSelect.Refresh()
+ manyFieldSelect.Enable()
+ })
+ manyTablesSelect.Disable()
+
+ selectedLabel := widget.NewLabel("")
+
+ oneFieldSelect := widget.NewSelect(oneColumns, func(oneColumnVal string) {
+ oneColumn = oneColumnVal
+ columnIdx := 0
+ for i, val := range oneColumns {
+ if val == oneColumn {
+ columnIdx = i
+ }
+ }
+ oneValue = fmt.Sprintf("%v", data[row][columnIdx])
+ selectedLabel.Text = fmt.Sprintf(
+ "Значение [%s] выбранной строки = %v",
+ oneColumn, oneValue)
+ selectedLabel.Refresh()
+ manyTablesSelect.Enable()
+ })
+
+ app.window.SetContent(
+ container.NewVBox(
+ widget.NewLabel(fmt.Sprintf("Выбранная таблица: [%s]", table)),
+ container.NewHBox(widget.NewLabel("Представитель связи \"один\":"), oneFieldSelect),
+ selectedLabel,
+ container.NewHBox(widget.NewLabel("Таблица связи \"многие\":"), manyTablesSelect),
+ container.NewHBox(widget.NewLabel("Представитель связи \"многие\":"), manyFieldSelect),
+ showTable))
+}
+
func (app *DBInterface) showAdminTable(table string) {
data, err := app.db.getTable(table)
if err != nil {
@@ -153,17 +243,30 @@ func (app *DBInterface) showAdminTable(table string) {
}
columns, err := app.db.getColumns(table)
- list := widget.NewTable(
+ tableWidget := widget.NewTable(
func() (int, int) {
- return len(data), len(columns)
+ return len(data) + 1, len(columns)
},
func() fyne.CanvasObject {
- return widget.NewLabel("wide content")
+ return widget.NewLabel("some very wide content")
},
func(i widget.TableCellID, o fyne.CanvasObject) {
- o.(*widget.Label).SetText(fmt.Sprintf("%v", data[i.Row][i.Col]))
+ if i.Row == 0 {
+ o.(*widget.Label).Alignment = fyne.TextAlignCenter
+ o.(*widget.Label).TextStyle = fyne.TextStyle{Bold: true}
+ o.(*widget.Label).SetText(fmt.Sprintf("%v", columns[i.Col]))
+ } else {
+ o.(*widget.Label).Alignment = fyne.TextAlignLeading
+ o.(*widget.Label).TextStyle = fyne.TextStyle{Bold: false}
+ o.(*widget.Label).SetText(fmt.Sprintf("%v", data[i.Row-1][i.Col]))
+ }
})
+ selectedRow := -1
+ tableWidget.OnSelected = func(id widget.TableCellID) {
+ selectedRow = id.Row - 1
+ }
+
selectBtn := widget.NewButton("Выбрать", func() {
app.selectAdminView(table)
})
@@ -176,11 +279,29 @@ func (app *DBInterface) showAdminTable(table string) {
app.deleteAdminView(table)
})
+ oneToMany := widget.NewButton("Один ко многим", func() {
+ if selectedRow == -1 {
+ dialog.ShowInformation(
+ "Один ко многим",
+ "Не выбрана ни одна строка в таблице",
+ app.window)
+ } else {
+ w := app.application.NewWindow("hello")
+ w.Resize(fyne.NewSize(100, 100))
+ conn := DBInterface{app.application, w, app.db}
+ conn.oneToManyParamsAdmin(table, selectedRow)
+ w.Show()
+ }
+ })
+
back := widget.NewButton("Назад", func() {
app.adminView()
})
- app.window.SetContent(genMainView(list, []fyne.CanvasObject{selectBtn, insertBtn, deleteBtn, back}))
+ app.window.SetContent(
+ genMainView(
+ tableWidget,
+ []fyne.CanvasObject{selectBtn, insertBtn, deleteBtn, oneToMany, back}))
}
func (app *DBInterface) adminView() {