menugen 0.1.1

Hierarchical menu generation library.
Documentation
use menugen::{menu, menuitem, reciter};


fn build_menu() -> menu::Menu<()> {
  let mut mb = menu::Builder::new();

  let mut mib =
    menuitem::Builder::new("test-sub-sub-menu", "Test sub-sub menu");
  mib.weight(100).parent("test-sub-menu");
  mb.add(mib);

  let mut mib = menuitem::Builder::new("sys-shutdown", "Shutdown");
  mib.weight(1000);
  mb.add(mib);

  let mut mib = menuitem::Builder::new("test-menu", "Test menu");
  mib.weight(100);
  mb.add(mib);

  let mut mib = menuitem::Builder::new("test-sub-menu", "Test sub menu");
  mib.weight(100).parent("test-menu");
  mb.add(mib);

  let mut mib = menuitem::Builder::new("test-menu-2", "Test menu too");
  mib.weight(100);
  mb.add(mib);

  let mut mib = menuitem::Builder::new("test-menu-3", "Aaaaargh!");
  mib.weight(100);
  mb.add(mib);

  let mut mib = menuitem::Builder::new("home", "Home");
  mib.weight(0);
  mb.add(mib);

  let mib = menuitem::Builder::new("foo", "Foo");
  mb.add(mib);

  let mut mib = menuitem::Builder::new("foo-sub-1", "Foo Sub");
  mib.parent("foo");
  mb.add(mib);

  let mut mib = menuitem::Builder::new("foo-sub-2", "Another Foo Sub");
  mib.parent("foo");
  mb.add(mib);

  mb.build()
}

fn main() {
  let menu = build_menu();

  let indent_str = String::from("  ");
  let mut indent = 0;
  for ev in menu.iter_hier() {
    match ev {
      reciter::Event::EnterScope => {
        println!("Enter scope");
        indent += 1;
      }
      reciter::Event::MenuItem(mi) => {
        println!(
          "{}id: {}\ttitle: {}",
          indent_str.repeat(indent),
          mi.id(),
          mi.title()
        );
      }
      reciter::Event::LeaveScope => {
        println!("Leave scope");
        indent -= 1;
      }
    }
  }
}

// vim: set ft=rust et sw=2 ts=2 sts=2 cinoptions=2 tw=79 :