Add working tview, add working load ond Tables, remove giu

This commit is contained in:
Pablu
2025-12-01 15:00:58 +01:00
parent 027aad1374
commit 6182129022
11 changed files with 383 additions and 172 deletions

View File

@@ -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)

View File

@@ -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)
}

View File

@@ -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
View 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)
}
}