Some work
This commit is contained in:
@@ -83,13 +83,14 @@ func (w *BorderedWidget) Draw(screen tcell.Screen) {
|
|||||||
if !w.widget.Visible() {
|
if !w.widget.Visible() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
st := w.style.Dim(!w.Active())
|
||||||
if len(w.title) > 0 {
|
if len(w.title) > 0 {
|
||||||
wh.TitledBorderFilled(w.x, w.y, w.x+w.w, w.y+w.h, w.title, w.border, w.style, screen)
|
wh.TitledBorderFilled(w.x, w.y, w.x+w.w, w.y+w.h, w.title, w.border, st, screen)
|
||||||
} else {
|
} else {
|
||||||
wh.BorderFilled(w.x, w.y, w.x+w.w, w.y+w.h, w.border, w.style, screen)
|
wh.BorderFilled(w.x, w.y, w.x+w.w, w.y+w.h, w.border, st, screen)
|
||||||
}
|
}
|
||||||
if len(w.help) > 0 {
|
if len(w.help) > 0 {
|
||||||
wh.DrawText(w.x+w.w-len(w.help)-2, w.y+w.h, w.help, w.style, screen)
|
wh.DrawText(w.x+w.w-len(w.help)-2, w.y+w.h, w.help, st, screen)
|
||||||
}
|
}
|
||||||
w.GetPos().DrawOffset(w.widget, screen)
|
w.GetPos().DrawOffset(w.widget, screen)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -67,6 +67,7 @@ func (w *DatePicker) Init(id string, s tcell.Style) {
|
|||||||
w.format = time.RFC3339
|
w.format = time.RFC3339
|
||||||
|
|
||||||
w.dateFld = NewField(fmt.Sprintf("%s-date", id), s)
|
w.dateFld = NewField(fmt.Sprintf("%s-date", id), s)
|
||||||
|
w.dateFld.SetOverwrite(true)
|
||||||
w.dateFld.SetValue(w.date.Format(w.format))
|
w.dateFld.SetValue(w.date.Format(w.format))
|
||||||
w.dateFld.SetH(1)
|
w.dateFld.SetH(1)
|
||||||
|
|
||||||
|
|||||||
@@ -35,6 +35,8 @@ type Field struct {
|
|||||||
label string
|
label string
|
||||||
value string
|
value string
|
||||||
|
|
||||||
|
overwriteMode bool
|
||||||
|
|
||||||
cursor int
|
cursor int
|
||||||
visible bool
|
visible bool
|
||||||
active bool
|
active bool
|
||||||
@@ -93,6 +95,10 @@ func (w *Field) HandleKey(ev *tcell.EventKey) bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
if wh.IsBS(*ev) {
|
if wh.IsBS(*ev) {
|
||||||
|
if w.overwriteMode {
|
||||||
|
w.cursor--
|
||||||
|
return true
|
||||||
|
}
|
||||||
return w.handleBackspace(ev)
|
return w.handleBackspace(ev)
|
||||||
}
|
}
|
||||||
if ok := w.keyMap.Handle(ev); ok {
|
if ok := w.keyMap.Handle(ev); ok {
|
||||||
@@ -102,7 +108,16 @@ func (w *Field) HandleKey(ev *tcell.EventKey) bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
if ev.Key() == tcell.KeyRune {
|
if ev.Key() == tcell.KeyRune {
|
||||||
w.SetValue(fmt.Sprintf("%s%s%s", w.value[:w.cursor], string(ev.Rune()), w.value[w.cursor:]))
|
var val string
|
||||||
|
if w.overwriteMode {
|
||||||
|
val = fmt.Sprintf("%s%s", w.value[:w.cursor], string(ev.Rune()))
|
||||||
|
if len(w.value) > w.cursor+1 {
|
||||||
|
val = fmt.Sprintf("%s%s", val, w.value[w.cursor+1:])
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val = fmt.Sprintf("%s%s%s", w.value[:w.cursor], string(ev.Rune()), w.value[w.cursor:])
|
||||||
|
}
|
||||||
|
w.SetValue(val)
|
||||||
w.cursor++
|
w.cursor++
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
@@ -252,3 +267,4 @@ func (w *Field) SetFilter(f func(ev tcell.EventKey) bool) {
|
|||||||
return f(ev)
|
return f(ev)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
func (w *Field) SetOverwrite(b bool) { w.overwriteMode = b }
|
||||||
|
|||||||
@@ -68,19 +68,30 @@ func (w *TopMenuLayout) Init(id string, s tcell.Style) {
|
|||||||
w.menu.SetType(MenuTypeH)
|
w.menu.SetType(MenuTypeH)
|
||||||
|
|
||||||
w.widget = NewBlankWidget("blank")
|
w.widget = NewBlankWidget("blank")
|
||||||
w.keyMap = BlankKeyMap()
|
w.keyMap = NewKeyMap(map[tcell.Key]func(ev *tcell.EventKey) bool{
|
||||||
w.keyMap.Add(tcell.KeyEscape, func(ev *tcell.EventKey) bool {
|
tcell.KeyEscape: func(ev *tcell.EventKey) bool {
|
||||||
if w.menu != nil {
|
return w.ToggleMenu()
|
||||||
w.menu.SetActive(!w.menu.Active())
|
},
|
||||||
if w.widget != nil {
|
})
|
||||||
w.widget.SetActive(!w.menu.Active())
|
w.keyMap.AddRune(' ', func(ev *tcell.EventKey) bool {
|
||||||
}
|
if ev.Modifiers()&tcell.ModAlt != 0 {
|
||||||
return true
|
return w.ToggleMenu()
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (w *TopMenuLayout) ToggleMenu() bool {
|
||||||
|
if w.menu != nil {
|
||||||
|
w.menu.SetActive(!w.menu.Active())
|
||||||
|
if w.widget != nil {
|
||||||
|
w.widget.SetActive(!w.menu.Active())
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func (w *TopMenuLayout) Id() string { return w.id }
|
func (w *TopMenuLayout) Id() string { return w.id }
|
||||||
func (w *TopMenuLayout) HandleResize(ev *tcell.EventResize) {
|
func (w *TopMenuLayout) HandleResize(ev *tcell.EventResize) {
|
||||||
w.w, w.h = ev.Size()
|
w.w, w.h = ev.Size()
|
||||||
|
|||||||
Reference in New Issue
Block a user