Add working tview, add working load ond Tables, remove giu
This commit is contained in:
@@ -3,18 +3,18 @@ package main
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
|
||||
engine "git.pablu.de/pablu/sqv-engine"
|
||||
)
|
||||
|
||||
func main() {
|
||||
file, err := os.ReadFile("test.sql")
|
||||
fmt.Println("Started")
|
||||
|
||||
m, err := engine.NewManager("db.sqlite")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
m := engine.NewManagerFromFile(string(file))
|
||||
err = m.Start()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
|
||||
@@ -1,93 +0,0 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
"os"
|
||||
|
||||
engine "git.pablu.de/pablu/sqv-engine"
|
||||
g "github.com/AllenDang/giu"
|
||||
)
|
||||
|
||||
type Test struct {
|
||||
tables []engine.Table
|
||||
enabled []bool
|
||||
}
|
||||
|
||||
func (t *Test) loop() {
|
||||
tableMenuItems := make([]g.Widget, len(t.tables))
|
||||
|
||||
for i, table := range t.tables {
|
||||
tableMenuItems[i] = g.MenuItem(table.Name).OnClick(func() {
|
||||
t.enabled[i] = !t.enabled[i]
|
||||
})
|
||||
}
|
||||
|
||||
g.MainMenuBar().Layout(
|
||||
g.Menu("Tables").Layout(
|
||||
tableMenuItems...,
|
||||
),
|
||||
).Build()
|
||||
|
||||
for i, table := range t.tables {
|
||||
if t.enabled[i] {
|
||||
g.Window(table.Name).Layout(
|
||||
SqlTable(table),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func SqlTable(table engine.Table) *g.TableWidget {
|
||||
tableColumns := make([]*g.TableColumnWidget, 0)
|
||||
for _, column := range table.Columns {
|
||||
tableColumns = append(tableColumns, g.TableColumn(column.Name))
|
||||
}
|
||||
|
||||
tableRows := make([]*g.TableRowWidget, 0)
|
||||
for _, row := range table.Rows {
|
||||
tableRows = append(tableRows, SqlValueRow(row))
|
||||
}
|
||||
|
||||
return g.Table().Columns(
|
||||
tableColumns...,
|
||||
).Rows(tableRows...)
|
||||
}
|
||||
|
||||
func SqlValueRow(row engine.Row) *g.TableRowWidget {
|
||||
v := make([]g.Widget, 0)
|
||||
for _, values := range row.Values {
|
||||
v = append(v, g.Label(values))
|
||||
}
|
||||
|
||||
return g.TableRow(v...)
|
||||
}
|
||||
|
||||
func main() {
|
||||
wnd := g.NewMasterWindow("SQV", 800, 600, 0)
|
||||
|
||||
//nolint:gocritic // should be here for doc
|
||||
// errMarkers = imgui.NewErrorMarkers()
|
||||
file, err := os.ReadFile("test.sql")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
m := engine.NewManagerFromFile(string(file))
|
||||
if err := m.Start(); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
t := Test{
|
||||
tables: m.GetTables(),
|
||||
enabled: make([]bool, len(m.GetTables())),
|
||||
}
|
||||
|
||||
t.tables[2].Rows = []engine.Row{
|
||||
engine.Row{
|
||||
Values: []string{
|
||||
"HELLO", "WORLD", "!",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
wnd.Run(t.loop)
|
||||
}
|
||||
@@ -8,14 +8,11 @@ import (
|
||||
|
||||
engine "git.pablu.de/pablu/sqv-engine"
|
||||
"github.com/charmbracelet/bubbles/table"
|
||||
"github.com/charmbracelet/bubbles/textarea"
|
||||
tea "github.com/charmbracelet/bubbletea"
|
||||
"github.com/charmbracelet/lipgloss"
|
||||
)
|
||||
|
||||
var baseStyle = lipgloss.NewStyle().
|
||||
BorderStyle(lipgloss.NormalBorder()).
|
||||
BorderForeground(lipgloss.Color("240"))
|
||||
|
||||
func tabBorderWithBottom(left, middle, right string) lipgloss.Border {
|
||||
border := lipgloss.RoundedBorder()
|
||||
border.BottomLeft = left
|
||||
@@ -37,6 +34,7 @@ var (
|
||||
type model struct {
|
||||
tables []table.Model
|
||||
tableNames []string
|
||||
textarea textarea.Model
|
||||
|
||||
currTable int
|
||||
}
|
||||
@@ -97,7 +95,13 @@ func (m model) View() string {
|
||||
row := lipgloss.JoinHorizontal(lipgloss.Top, renderedTabs...)
|
||||
doc.WriteString(row)
|
||||
doc.WriteString("\n")
|
||||
doc.WriteString(windowStyle.Width((lipgloss.Width(row) - windowStyle.GetHorizontalFrameSize())).Render(m.tables[m.currTable].View()))
|
||||
windowWidth := (lipgloss.Width(row) - windowStyle.GetHorizontalFrameSize())
|
||||
doc.WriteString(windowStyle.Width(windowWidth).Render(m.tables[m.currTable].View()))
|
||||
doc.WriteString("\n")
|
||||
|
||||
// Is this correct??
|
||||
m.textarea.SetWidth(windowWidth)
|
||||
doc.WriteString(windowStyle.Width(windowWidth).Render(m.textarea.View()))
|
||||
|
||||
return docStyle.Render(doc.String())
|
||||
// return baseStyle.Render(m.table.View()) + "\n"
|
||||
@@ -113,7 +117,7 @@ func convertToViewTable(m *engine.Manager) ([]string, []table.Model) {
|
||||
for i, column := range t.Columns {
|
||||
columns[i] = table.Column{
|
||||
Title: column.Name,
|
||||
Width: 10,
|
||||
Width: max(lipgloss.Width(column.Name), 10),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -134,7 +138,7 @@ func convertToViewTable(m *engine.Manager) ([]string, []table.Model) {
|
||||
table.WithColumns(columns),
|
||||
table.WithRows(rows),
|
||||
table.WithFocused(true),
|
||||
table.WithHeight(7),
|
||||
table.WithHeight(25),
|
||||
)
|
||||
|
||||
s := table.DefaultStyles()
|
||||
@@ -167,7 +171,14 @@ func main() {
|
||||
|
||||
tableNames, tables := convertToViewTable(m)
|
||||
|
||||
p := tea.NewProgram(model{tables: tables, tableNames: tableNames}, tea.WithAltScreen())
|
||||
ta := textarea.New()
|
||||
ta.Placeholder = "select * from ?"
|
||||
ta.Focus()
|
||||
|
||||
ta.Prompt = "| "
|
||||
ta.CharLimit = 280
|
||||
|
||||
p := tea.NewProgram(model{tables: tables, tableNames: tableNames, textarea: ta}, tea.WithAltScreen())
|
||||
if _, err := p.Run(); err != nil {
|
||||
log.Fatalf("Alas, theres been an error: %v", err)
|
||||
}
|
||||
|
||||
80
cmd/sqv-tview/main.go
Normal file
80
cmd/sqv-tview/main.go
Normal file
@@ -0,0 +1,80 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
|
||||
engine "git.pablu.de/pablu/sqv-engine"
|
||||
"github.com/gdamore/tcell/v2"
|
||||
"github.com/rivo/tview"
|
||||
)
|
||||
|
||||
func main() {
|
||||
app := tview.NewApplication()
|
||||
|
||||
menu := tview.NewList()
|
||||
table := tview.NewTable().SetBorders(true)
|
||||
table.SetBorder(true).SetTitle("TABLE")
|
||||
|
||||
menu.SetTitle("TABLES").SetBorder(true)
|
||||
menu.ShowSecondaryText(false).SetDoneFunc(func() {
|
||||
table.Clear()
|
||||
})
|
||||
|
||||
flex := tview.NewFlex().
|
||||
AddItem(menu, 0, 1, true).
|
||||
AddItem(table, 0, 3, true)
|
||||
|
||||
m, err := engine.NewManager("db.sqlite")
|
||||
if err != nil {
|
||||
log.Fatalf("Ran into an error on opening Manager, err: %v\n", err)
|
||||
}
|
||||
m.Start()
|
||||
|
||||
tables := m.GetTables()
|
||||
|
||||
for _, t := range tables {
|
||||
menu.AddItem(t.Name, "", 0, nil)
|
||||
}
|
||||
menu.SetChangedFunc(func(index int, mainText, secondaryText string, shortcut rune) {
|
||||
table.Clear()
|
||||
|
||||
t, ok := m.GetTable(mainText)
|
||||
if !ok {
|
||||
panic("AHHHHHHH")
|
||||
}
|
||||
|
||||
for i, c := range t.Columns {
|
||||
color := tcell.ColorDarkGreen
|
||||
table.SetCell(0, i, tview.NewTableCell(c.Name).SetTextColor(color).SetAlign(tview.AlignCenter))
|
||||
}
|
||||
|
||||
err = m.LoadTable(&t)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
for ri, r := range t.Rows {
|
||||
for rc, c := range r.Values {
|
||||
table.SetCell(ri+1, rc, tview.NewTableCell(c).SetTextColor(tcell.ColorWhite).SetAlign(tview.AlignCenter))
|
||||
}
|
||||
}
|
||||
})
|
||||
menu.SetCurrentItem(1)
|
||||
|
||||
table.Select(0, 0).SetFixed(1, 1).SetDoneFunc(func(key tcell.Key) {
|
||||
switch key {
|
||||
case tcell.KeyEscape:
|
||||
app.Stop()
|
||||
case tcell.KeyEnter:
|
||||
table.SetSelectable(true, true)
|
||||
}
|
||||
}).SetSelectedFunc(func(row, column int) {
|
||||
table.GetCell(row, column).SetTextColor(tcell.ColorRed)
|
||||
table.SetSelectable(false, false)
|
||||
})
|
||||
|
||||
if err := app.SetRoot(flex, true).EnableMouse(true).Run(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user