summaryrefslogtreecommitdiff
path: root/interface/main.go
diff options
context:
space:
mode:
authorAndrew Guschin <guschin.drew@gmail.com>2022-05-29 16:03:41 +0400
committerAndrew Guschin <guschin.drew@gmail.com>2022-05-29 16:03:41 +0400
commite296b1dbb2319b26282a1b6fac034ce1048714b9 (patch)
treed37a11a082e12fd5670c73e887c0bfb36cb582fc /interface/main.go
parent5ac59d00add5c7982bc3eefa9145bfe676044734 (diff)
Улучшенные формы запросов
Diffstat (limited to 'interface/main.go')
-rw-r--r--interface/main.go229
1 files changed, 195 insertions, 34 deletions
diff --git a/interface/main.go b/interface/main.go
index 8f7566d..342debc 100644
--- a/interface/main.go
+++ b/interface/main.go
@@ -4,46 +4,154 @@ 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
+ application fyne.App
+ 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)
+func genMainView(view fyne.CanvasObject, buttons []fyne.CanvasObject) fyne.CanvasObject {
+ return container.NewBorder(
+ nil, container.NewGridWithColumns(len(buttons), buttons...), nil, nil, view)
+}
+
+func (app *DBInterface) insertAdminView(table string) {
+ app.window.SetTitle(fmt.Sprintf("Insert into table %s", table))
+ columns, _ := app.db.getColumns(table)
var elements []fyne.CanvasObject
for _, val := range columns {
- label := canvas.NewText(val, color.White)
+ label := widget.NewLabel(val)
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)
- }))
+ insertBtn := widget.NewButton("Вставить", func() {})
+ backBtn := widget.NewButton("Назад", func() {
+ app.showAdminTable(table)
+ })
mainContainer := container.NewVBox(elements...)
- window.SetContent(mainContainer)
+ app.window.SetContent(
+ genMainView(
+ container.NewVScroll(mainContainer),
+ []fyne.CanvasObject{insertBtn, backBtn}))
}
-func showTable(window fyne.Window, db SQLConnection, table string) {
- data, err := db.getTable(table)
+func (app *DBInterface) deleteAdminView(table string) {
+ app.window.SetTitle(fmt.Sprintf("Delete from table %s", table))
+
+ queryLabel := widget.NewLabel(fmt.Sprintf("DELETE FROM [%s] WHERE", table))
+
+ var query []fyne.CanvasObject
+ newConstraintBtn := widget.NewButton("Добавить новое ограничение", func() {})
+ updateView := func() {
+ queryBox := container.NewVBox(queryLabel, container.NewVBox(query...), newConstraintBtn)
+ deleteBtn := widget.NewButton("Выполнить удаление", func() {
+
+ })
+ backBtn := widget.NewButton("Назад", func() {
+ app.showAdminTable(table)
+ })
+ app.window.SetContent(
+ genMainView(
+ container.NewVScroll(queryBox),
+ []fyne.CanvasObject{deleteBtn, backBtn}))
+ }
+
+ columns, _ := app.db.getColumns(table)
+ newConstraintBtn.OnTapped = func() {
+ selectBtn := widget.NewSelect(columns, func(value string) {
+ fmt.Println("Select set to", value)
+ })
+ operatorBtn := widget.NewSelect([]string{"=", "<", "<=", ">=", "LIKE"}, func(value string) {
+ fmt.Println("Select set to", value)
+ })
+ compareField := widget.NewEntry()
+
+ fieldConstraint := container.NewGridWithColumns(3, selectBtn, operatorBtn, compareField)
+ query = append(query, fieldConstraint)
+ updateView()
+ }
+ updateView()
+}
+
+func (app *DBInterface) selectAdminView(table string) {
+ app.window.SetTitle(fmt.Sprintf("Select from table %s", table))
+
+ columns, _ := app.db.getColumns(table)
+
+ var selectFields []fyne.CanvasObject
+ newField := widget.NewButton("Добавить новое поле", func() {})
+
+ var query []fyne.CanvasObject
+ newConstraintBtn := widget.NewButton("Добавить новое ограничение", func() {})
+ updateView := func() {
+ var widgets []fyne.CanvasObject
+ widgets = append(widgets, widget.NewLabel("SELECT"))
+ for _, val := range selectFields {
+ widgets = append(widgets, container.NewHBox(val, widget.NewLabel(",")))
+ }
+ widgets = append(widgets, newField)
+ widgets = append(widgets, widget.NewLabel(fmt.Sprintf("FROM [%s] WHERE", table)))
+
+ for _, val := range query {
+ widgets = append(widgets, val)
+ }
+ widgets = append(widgets, newConstraintBtn)
+
+ selectBtn := widget.NewButton("Показать результаты выбора", func() {
+ w := app.application.NewWindow("hello")
+ w.Resize(fyne.NewSize(100, 100))
+ //conn := DBInterface{app.application, w, app.db}
+ w.Show()
+ })
+ backBtn := widget.NewButton("Назад", func() {
+ app.showAdminTable(table)
+ })
+
+ app.window.SetContent(
+ genMainView(
+ container.NewVScroll(container.NewVBox(widgets...)),
+ []fyne.CanvasObject{selectBtn, backBtn}))
+ }
+
+ newField.OnTapped = func() {
+ selectBtn := widget.NewSelect(columns, func(value string) {
+ fmt.Println("Select set to", value)
+ })
+ selectFields = append(selectFields, selectBtn)
+ updateView()
+ }
+ newConstraintBtn.OnTapped = func() {
+ selectBtn := widget.NewSelect(columns, func(value string) {
+ fmt.Println("Select set to", value)
+ })
+ operatorBtn := widget.NewSelect([]string{"=", "<", "<=", ">=", "LIKE"}, func(value string) {
+ fmt.Println("Select set to", value)
+ })
+ compareField := widget.NewEntry()
+
+ fieldConstraint := container.NewGridWithColumns(3, selectBtn, operatorBtn, compareField)
+ query = append(query, fieldConstraint)
+ updateView()
+ }
+ updateView()
+}
+
+func (app *DBInterface) showAdminTable(table string) {
+ data, err := app.db.getTable(table)
if err != nil {
fmt.Println(err)
return
}
- columns, err := db.getColumns(table)
+ columns, err := app.db.getColumns(table)
list := widget.NewTable(
func() (int, int) {
@@ -56,19 +164,27 @@ func showTable(window fyne.Window, db SQLConnection, table string) {
o.(*widget.Label).SetText(fmt.Sprintf("%v", data[i.Row][i.Col]))
})
- signup := widget.NewButton("Вставить", func() {
- insertView(window, db, table)
+ selectBtn := widget.NewButton("Выбрать", func() {
+ app.selectAdminView(table)
+ })
+
+ insertBtn := widget.NewButton("Вставить", func() {
+ app.insertAdminView(table)
+ })
+
+ deleteBtn := widget.NewButton("Удалить", func() {
+ app.deleteAdminView(table)
})
back := widget.NewButton("Назад", func() {
- adminView(window, db)
+ app.adminView()
})
- window.SetContent(container.NewBorder(nil, container.NewHBox(signup, back), nil, nil, list))
+ app.window.SetContent(genMainView(list, []fyne.CanvasObject{selectBtn, insertBtn, deleteBtn, back}))
}
-func adminView(window fyne.Window, db SQLConnection) {
- tables, _ := db.getTables()
+func (app *DBInterface) adminView() {
+ tables, _ := app.db.getTables()
var tableBtns []fyne.CanvasObject
tableBtns = append(tableBtns, container.NewCenter(widget.NewLabel("Таблицы")))
@@ -78,11 +194,11 @@ func adminView(window fyne.Window, db SQLConnection) {
tableBtns, widget.NewButton(
fmt.Sprintf("Показать %s", val),
func() {
- showTable(window, db, e)
+ app.showAdminTable(e)
}))
}
- views, _ := db.getViews()
+ views, _ := app.db.getViews()
var viewsBtns []fyne.CanvasObject
viewsBtns = append(viewsBtns, container.NewCenter(widget.NewLabel("Представления")))
for _, val := range views {
@@ -91,33 +207,77 @@ func adminView(window fyne.Window, db SQLConnection) {
viewsBtns, widget.NewButton(
fmt.Sprintf("Показать %s", val),
func() {
- showTable(window, db, e)
+ app.showAdminTable(e)
}))
}
tablesScroll := container.NewVScroll(container.NewVBox(tableBtns...))
viewsScroll := container.NewVScroll(container.NewVBox(viewsBtns...))
- dataBox := container.NewHBox(tablesScroll, viewsScroll)
+ dataBox := container.NewGridWithColumns(2, tablesScroll, viewsScroll)
menuBtn := widget.NewButton("В меню", func() {
- menu(window, db)
+ app.menu()
+ })
+
+ app.window.SetContent(genMainView(dataBox, []fyne.CanvasObject{menuBtn}))
+}
+
+func (app *DBInterface) showUserTable(table string) {
+ data, err := app.db.getTable(table)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ columns, err := app.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]))
+ })
+
+ back := widget.NewButton("Назад", func() {
+ app.userView()
})
- window.SetContent(container.NewBorder(nil, menuBtn, nil, nil, dataBox))
+ app.window.SetContent(genMainView(list, []fyne.CanvasObject{back}))
}
-func userView(window fyne.Window, db SQLConnection) {
+func (app *DBInterface) userView() {
+ views, _ := app.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() {
+ app.showUserTable(e)
+ }))
+ }
+
+ viewsScroll := container.NewVScroll(container.NewVBox(viewsBtns...))
+ menuBtn := widget.NewButton("В меню", func() {
+ app.menu()
+ })
+ app.window.SetContent(container.NewBorder(nil, menuBtn, nil, nil, viewsScroll))
}
-func menu(window fyne.Window, db SQLConnection) {
- window.SetContent(container.NewCenter(
+func (app *DBInterface) menu() {
+ app.window.SetContent(container.NewCenter(
container.NewVBox(
widget.NewButton("Режим Администратора", func() {
- adminView(window, db)
+ app.adminView()
}),
widget.NewButton("Режим Пользователя", func() {
- userView(window, db)
+ app.userView()
}),
),
))
@@ -135,6 +295,7 @@ func main() {
return
}
- menu(window, db)
+ dbApp := DBInterface{myApp, window, db}
+ dbApp.menu()
window.ShowAndRun()
}