diff options
Diffstat (limited to 'props_table.go')
| -rw-r--r-- | props_table.go | 49 |
1 files changed, 5 insertions, 44 deletions
diff --git a/props_table.go b/props_table.go index dc4020c..86acc00 100644 --- a/props_table.go +++ b/props_table.go @@ -32,13 +32,10 @@ func makePropsTable(props map[string]float32) *tview.Table { table := tview.NewTable(). SetBorders(true). SetSelectable(true, false). - SetSelectedStyle(tcell.StyleDefault.Background(tcell.ColorDarkCyan).Foreground(tcell.ColorWhite)) // Allow row selection but not column selection - + SetSelectedStyle(tcell.StyleDefault.Background(tcell.ColorGray).Foreground(tcell.ColorWhite)) // Allow row selection but not column selection table.SetTitle("Properties Configuration (Press 'x' to exit)"). SetTitleAlign(tview.AlignLeft) - row := 0 - // Add a header or note row headerCell := tview.NewTableCell("Props for llamacpp completion call"). SetTextColor(tcell.ColorYellow). @@ -46,14 +43,12 @@ func makePropsTable(props map[string]float32) *tview.Table { SetSelectable(false) table.SetCell(row, 0, headerCell) table.SetCell(row, 1, - tview.NewTableCell(""). + tview.NewTableCell("press 'x' to exit"). SetTextColor(tcell.ColorYellow). SetSelectable(false)) row++ - // Store cell data for later use in selection functions cellData := make(map[string]*CellData) - // Helper function to add a checkbox-like row addCheckboxRow := func(label string, initialValue bool, onChange func(bool)) { table.SetCell(row, 0, @@ -61,17 +56,14 @@ func makePropsTable(props map[string]float32) *tview.Table { SetTextColor(tcell.ColorWhite). SetAlign(tview.AlignLeft). SetSelectable(false)) - valueText := "No" if initialValue { valueText = "Yes" } - valueCell := tview.NewTableCell(valueText). SetTextColor(tcell.ColorYellow). SetAlign(tview.AlignCenter) table.SetCell(row, 1, valueCell) - // Store cell data cellID := fmt.Sprintf("checkbox_%d", row) cellData[cellID] = &CellData{ @@ -80,7 +72,6 @@ func makePropsTable(props map[string]float32) *tview.Table { } row++ } - // Helper function to add a dropdown-like row, that opens a list popup addListPopupRow := func(label string, options []string, initialValue string, onChange func(string)) { table.SetCell(row, 0, @@ -88,12 +79,10 @@ func makePropsTable(props map[string]float32) *tview.Table { SetTextColor(tcell.ColorWhite). SetAlign(tview.AlignLeft). SetSelectable(false)) - valueCell := tview.NewTableCell(initialValue). SetTextColor(tcell.ColorYellow). SetAlign(tview.AlignCenter) table.SetCell(row, 1, valueCell) - // Store cell data cellID := fmt.Sprintf("listpopup_%d", row) cellData[cellID] = &CellData{ @@ -103,7 +92,6 @@ func makePropsTable(props map[string]float32) *tview.Table { } row++ } - // Helper function to add an input field row addInputRow := func(label string, initialValue string, onChange func(string)) { table.SetCell(row, 0, @@ -111,12 +99,10 @@ func makePropsTable(props map[string]float32) *tview.Table { SetTextColor(tcell.ColorWhite). SetAlign(tview.AlignLeft). SetSelectable(false)) - valueCell := tview.NewTableCell(initialValue). SetTextColor(tcell.ColorYellow). SetAlign(tview.AlignCenter) table.SetCell(row, 1, valueCell) - // Store cell data cellID := fmt.Sprintf("input_%d", row) cellData[cellID] = &CellData{ @@ -125,58 +111,48 @@ func makePropsTable(props map[string]float32) *tview.Table { } row++ } - // Add checkboxes - addCheckboxRow("Insert \U000F0E88 (/completion only)", cfg.ThinkUse, func(checked bool) { + addCheckboxRow("Insert <think> tag (/completion only)", cfg.ThinkUse, func(checked bool) { cfg.ThinkUse = checked }) - addCheckboxRow("RAG use", cfg.RAGEnabled, func(checked bool) { cfg.RAGEnabled = checked }) - addCheckboxRow("Inject role", injectRole, func(checked bool) { injectRole = checked }) - // Add dropdowns logLevels := []string{"Debug", "Info", "Warn"} addListPopupRow("Set log level", logLevels, GetLogLevel(), func(option string) { setLogLevel(option) }) - // Prepare API links dropdown - insert current API at the beginning apiLinks := slices.Insert(cfg.ApiLinks, 0, cfg.CurrentAPI) addListPopupRow("Select an api", apiLinks, cfg.CurrentAPI, func(option string) { cfg.CurrentAPI = option }) - // Prepare model list dropdown modelList := []string{chatBody.Model, "deepseek-chat", "deepseek-reasoner"} modelList = append(modelList, ORFreeModels...) addListPopupRow("Select a model", modelList, chatBody.Model, func(option string) { chatBody.Model = option }) - // Role selection dropdown addListPopupRow("Write next message as", listRolesWithUser(), cfg.WriteNextMsgAs, func(option string) { cfg.WriteNextMsgAs = option }) - // Add input fields addInputRow("New char to write msg as", "", func(text string) { if text != "" { cfg.WriteNextMsgAs = text } }) - addInputRow("Username", cfg.UserRole, func(text string) { if text != "" { renameUser(cfg.UserRole, text) cfg.UserRole = text } }) - // Add property fields (the float32 values) for propName, value := range props { propName := propName // capture loop variable for closure @@ -187,7 +163,6 @@ func makePropsTable(props map[string]float32) *tview.Table { } }) } - // Set selection function to handle dropdown-like behavior table.SetSelectedFunc(func(selectedRow, selectedCol int) { // Only handle selection on the value column (column 1) @@ -198,11 +173,9 @@ func makePropsTable(props map[string]float32) *tview.Table { } return } - // Get the cell and its corresponding data cell := table.GetCell(selectedRow, selectedCol) cellID := fmt.Sprintf("checkbox_%d", selectedRow) - // Check if it's a checkbox if cellData[cellID] != nil && cellData[cellID].Type == CellTypeCheckbox { data := cellData[cellID] @@ -218,7 +191,6 @@ func makePropsTable(props map[string]float32) *tview.Table { } return } - // Check for dropdown dropdownCellID := fmt.Sprintf("dropdown_%d", selectedRow) if cellData[dropdownCellID] != nil && cellData[dropdownCellID].Type == CellTypeDropdown { @@ -233,24 +205,22 @@ func makePropsTable(props map[string]float32) *tview.Table { break } } - // Move to next option (cycle back to 0 if at end) nextIndex := (currentIndex + 1) % len(data.Options) newValue := data.Options[nextIndex] - onChange(newValue) cell.SetText(newValue) } return } - // Check for listpopup listPopupCellID := fmt.Sprintf("listpopup_%d", selectedRow) if cellData[listPopupCellID] != nil && cellData[listPopupCellID].Type == CellTypeListPopup { data := cellData[listPopupCellID] if onChange, ok := data.OnChange.(func(string)); ok && data.Options != nil { // Create a list primitive - apiList := tview.NewList().ShowSecondaryText(false) + apiList := tview.NewList().ShowSecondaryText(false). + SetSelectedBackgroundColor(tcell.ColorGray) apiList.SetTitle("Select an API").SetBorder(true) for i, api := range data.Options { if api == cell.Text { @@ -258,13 +228,11 @@ func makePropsTable(props map[string]float32) *tview.Table { } apiList.AddItem(api, "", 0, nil) } - apiList.SetSelectedFunc(func(index int, mainText string, secondaryText string, shortcut rune) { onChange(mainText) cell.SetText(mainText) pages.RemovePage("apiListPopup") }) - apiList.SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey { if event.Key() == tcell.KeyEscape { pages.RemovePage("apiListPopup") @@ -272,7 +240,6 @@ func makePropsTable(props map[string]float32) *tview.Table { } return event }) - modal := func(p tview.Primitive, width, height int) tview.Primitive { return tview.NewFlex(). AddItem(nil, 0, 1, false). @@ -282,14 +249,12 @@ func makePropsTable(props map[string]float32) *tview.Table { AddItem(nil, 0, 1, false), width, 1, true). AddItem(nil, 0, 1, false) } - // Add modal page and make it visible pages.AddPage("apiListPopup", modal(apiList, 80, 20), true, true) app.SetFocus(apiList) } return } - // Handle input fields by creating an input modal on selection inputCellID := fmt.Sprintf("input_%d", selectedRow) if cellData[inputCellID] != nil && cellData[inputCellID].Type == CellTypeInput { @@ -308,7 +273,6 @@ func makePropsTable(props map[string]float32) *tview.Table { } pages.RemovePage("editModal") }) - // Create a simple modal with the input field modalFlex := tview.NewFlex(). SetDirection(tview.FlexRow). @@ -319,14 +283,12 @@ func makePropsTable(props map[string]float32) *tview.Table { AddItem(tview.NewBox(), 0, 1, false), // Spacer 0, 1, true). AddItem(tview.NewBox(), 0, 1, false) // Spacer - // Add modal page and make it visible pages.AddPage("editModal", modalFlex, true, true) } return } }) - // Set input capture to handle 'x' key for exiting table.SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey { if event.Key() == tcell.KeyRune && event.Rune() == 'x' { @@ -335,7 +297,6 @@ func makePropsTable(props map[string]float32) *tview.Table { } return event }) - return table } |
