diff options
Diffstat (limited to 'interface/main.go')
| -rw-r--r-- | interface/main.go | 131 |
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() { |