WIP Add indexed condition for browse menu items display
This commit is contained in:
parent
a7add69f18
commit
2b34149aa9
@ -114,7 +114,7 @@ func(en *Engine) WriteResult(w io.Writer) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
m, err := en.rs.RenderMenu()
|
||||
m, err := en.rs.RenderMenu(idx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -20,7 +20,7 @@ type Resource interface {
|
||||
PutMenu(string, string) error // Add a menu item.
|
||||
SetMenuBrowse(string, string, bool) error // Set menu browser display details.
|
||||
RenderTemplate(sym string, values map[string]string, idx uint16, sizer *Sizer) (string, error) // Render the given data map using the template of the symbol.
|
||||
RenderMenu() (string, error) // Render the current state of menu
|
||||
RenderMenu(idx uint16) (string, error) // Render the current state of menu
|
||||
Render(sym string, values map[string]string, idx uint16, sizer *Sizer) (string, error) // Render full output.
|
||||
FuncFor(sym string) (EntryFunc, error) // Resolve symbol content point for.
|
||||
}
|
||||
@ -104,7 +104,17 @@ func(m *MenuResource) shiftMenu() (string, string, error) {
|
||||
}
|
||||
|
||||
// add available browse options.
|
||||
func(m *MenuResource) applyPage() error {
|
||||
func(m *MenuResource) applyPage(idx uint16) error {
|
||||
l := uint16(len(m.sinkValues))
|
||||
if l == 0 {
|
||||
return nil
|
||||
}
|
||||
if idx == l - 1 {
|
||||
m.canNext = false
|
||||
}
|
||||
if idx == 0 {
|
||||
m.canPrev = false
|
||||
}
|
||||
if m.canNext {
|
||||
err := m.PutMenu(m.next[0], m.next[1])
|
||||
if err != nil {
|
||||
@ -123,8 +133,8 @@ func(m *MenuResource) applyPage() error {
|
||||
// RenderMenu returns the full current state of the menu as a string.
|
||||
//
|
||||
// After this has been executed, the state of the menu will be empty.
|
||||
func(m *MenuResource) RenderMenu() (string, error) {
|
||||
err := m.applyPage()
|
||||
func(m *MenuResource) RenderMenu(idx uint16) (string, error) {
|
||||
err := m.applyPage(idx)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
@ -252,7 +262,7 @@ func(m *MenuResource) render(sym string, values map[string]string, idx uint16, s
|
||||
return "", fmt.Errorf("limit exceeded: %v", sizer)
|
||||
}
|
||||
}
|
||||
s, err = m.RenderMenu()
|
||||
s, err = m.RenderMenu(idx)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
@ -13,7 +13,7 @@ func TestStateResourceInit(t *testing.T) {
|
||||
_ = NewStateResource(&st)
|
||||
}
|
||||
|
||||
func TestStateBrowse(t *testing.T) {
|
||||
func TestStateBrowseNoSink(t *testing.T) {
|
||||
st := state.NewState(0)
|
||||
st.Down("root")
|
||||
|
||||
@ -28,7 +28,35 @@ func TestStateBrowse(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
s, err := rs.RenderMenu()
|
||||
s, err := rs.RenderMenu(0)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
expect := `1:foo
|
||||
2:bar`
|
||||
if s != expect {
|
||||
t.Fatalf("expected:\n\t%s\ngot:\n\t%s\n", expect, s)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func TestStateBrowseSink(t *testing.T) {
|
||||
st := state.NewState(0)
|
||||
st.Down("root")
|
||||
|
||||
rs := NewStateResource(&st)
|
||||
rs.PutMenu("1", "foo")
|
||||
rs.PutMenu("2", "bar")
|
||||
err := rs.SetMenuBrowse("11", "next", false)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
err = rs.SetMenuBrowse("22", "prev", true)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
s, err := rs.RenderMenu(0)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@ -58,7 +86,7 @@ func TestStateBrowse(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
s, err = rs.RenderMenu()
|
||||
s, err = rs.RenderMenu(idx)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
@ -319,7 +319,7 @@ func TestRunMenu(t *testing.T) {
|
||||
t.Errorf("expected empty remainder, got length %v: %v", l, b)
|
||||
}
|
||||
|
||||
r, err := rs.RenderMenu()
|
||||
r, err := rs.RenderMenu(0)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@ -351,7 +351,7 @@ func TestRunMenuBrowse(t *testing.T) {
|
||||
t.Errorf("expected empty remainder, got length %v: %v", l, b)
|
||||
}
|
||||
|
||||
r, err := rs.RenderMenu()
|
||||
r, err := rs.RenderMenu(0)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user