you will have to fill in some blanks

public class MenuItem
{
    private MenuItem parent;
    private List<MenuItem> children;
    private IModel label;
    private Class<? extends Page>
}

public class Menu extends Panel
{

    private boolean refresh = true;

    public MenuItem getPageItem()
    {

        return ((entrypage)getPage()).getMenuItem();
    }

    @Override
    protected void onBeforeRender()
    {
        if (refresh)
        {
            if (get("menu") != null)
            {
                remove("menu");
            }

            MenuItem item = getPageItem();

            ArrayList<MenuItem> stack = new ArrayList<MenuItem>();

            if (!item.getChildren().isEmpty())
            {
                stack.add(0, item);
            }
            item = item.getParent();
            while (item != null)
            {
                stack.add(0, item);
                item = item.getParent();
            }

            add(new MenuItemFragment("menu", stack, 0));

            refresh = false;
        }

        super.onBeforeRender();
    }

    private static class ItemLink extends BookmarkablePageLink
    {
        private final boolean selected;

        public ItemLink(String id, Class<?> pageClass, boolean selected)
        {
            super(id, pageClass);
            this.selected = selected;
        }

        @Override
        protected void onComponentTag(ComponentTag tag)
        {
            super.onComponentTag(tag);
            if (selected)
            {
                tag.put("class", "on");
            }
        }
    }

    private class MenuItemFragment extends Fragment
    {

        public MenuItemFragment(String id, List<MenuItem> stack, int index)
        {
            super(id, "menu-panel", Menu.this);

            MenuItem current = stack.get(index);

            StringBuilder stackPrefix = new StringBuilder();
            for (int i = 0; i <= index; i++)
            {
                stackPrefix.append(stack.get(i).getMarkupId());
                stackPrefix.append("__");
            }
            final String stackPrefixId = stackPrefix.toString();

            RepeatingView items = new RepeatingView("items");
            add(items);

            for (MenuItem child : current.getChildren())
            {
                if (!child.isVisible(security))
                {
                    continue;
                }
                final boolean selected = stack.contains(child) ||
child == getPageItem();

                WebMarkupContainer item = new
WebMarkupContainer(items.newChildId());
                item.setMarkupId(stackPrefixId + child.getMarkupId());
                item.setOutputMarkupId(true);
                items.add(item);

                Link link = new ItemLink("link", child.getPageClass(),
selected);
                item.add(link);
                link.add(new Label("label", child.getLabel()));

                WebMarkupContainer submenu = new WebMarkupContainer("submenu");
                item.add(submenu);

                if (selected && !child.getChildren().isEmpty())
                {
                    submenu.add(new MenuItemFragment("items", stack,
index + 1));
                }
                else
                {
                    submenu.setVisible(false);
                }
            }
        }
    }

}

<wicket:panel>
        <ul id="nav">
                <wicket:container wicket:id="menu"></wicket:container>
        </ul>
        
        <wicket:fragment wicket:id="menu-panel">
                <li wicket:id="items">
                                <a wicket:id="link"><span wicket:id="label">[[ 
menu item label ]]</span></a>
                                <ul wicket:id="submenu">
                                        <wicket:container 
wicket:id="items"></wicket:container>
                                </ul>
                </li>
        </wicket:fragment>


</wicket:panel>

public abstract class entrypage extends webpage {

  entrypage() { add(new menu("menu")); }

  public abstract MenuItem getMenuItem();
}

-igor


On Thu, May 8, 2008 at 11:25 PM, ArthIT <[EMAIL PROTECTED]> wrote:
>
> Nobody has a hint?
> --
> View this message in context: 
> http://www.nabble.com/n-Level-Page-Navigation.-How-to-implement--tp17083157p17142043.html
> Sent from the Wicket - User mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to