|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objecteu.webtoolkit.jwt.WObject
eu.webtoolkit.jwt.WWidget
eu.webtoolkit.jwt.WCompositeWidget
eu.webtoolkit.jwt.WMenu
public class WMenu
A widget that shows a menu of options.
The WMenu widget offers menu navigation.
Typically, a menu is used in conjunction with a WStackedWidget (but
can be used without too), where different 'contents' are stacked
upon each other. Each choice in the menu (which is implemented as a
WMenuItem) corresponds to a tab in the contents stack. The contents
stack may contain other items, and could be shared with other WMenu
instances.
When used without a contents stack, you can react to menu item selection
using the itemSelected() signal, to implement
some custom handling of item selection.
Usage example:
{
@code
// create the stack where the contents will be located
WStackedWidget contents = new WStackedWidget(contentsParent);
// create a menu
WMenu menu = new WMenu(contents, Orientation.Vertical, menuParent);
menu.setRenderAsList(true);
// add four items using the default lazy loading policy.
menu.addItem("Introduction", new WText("intro"));
menu.addItem("Download", new WText("Not yet available"));
menu.addItem("Demo", new DemoWidget());
menu.addItem(new WMenuItem("Demo2", new DemoWidget()));
}
Historically, a menu was implemented as a table, but
rendering as a list (
<ul>) is preferred, as it is the norm form
implementations.
After contruction, the first entry will be selected. At any time, it is
possible to select a particular item using
select().
Each item of WMenu may be closeable (see
WMenuItem#setCloseable().
Like selection, at any time, it is possible to close a particular item using
close(). You can react to close of item
by using the itemClosed() signal.
The WMenu implementation offers fine-grained control on how contents should
be preloaded. By default, all contents is lazy-loaded, only when needed. To
improve response time, an item may also be preloaded (using
addItem()). In that case, the item will be loaded in the background, before
its first use. In any case, once the contents corresponding to a menu item is
loaded, subsequent navigation to it is handled entirely client-side.
The WMenu may participate in the application's internal path, which lets
menu items correspond to internal URLs, see
setInternalPathEnabled().
The layout of the menu may be Horizontal or Vertical. The look of the items
may be defined through style sheets. The default WMenuItem
implementation uses four style classes to distinguish between inactivated,
activated, closeable inactivated and closeable activated menu items:
"item", "itemselected",
"citem", "citemselected". By
using CSS nested selectors, a different style may be defined for items in a
different menu.
You may customize the rendering and behaviour of menu entries by specializing
WMenuItem.
Styling a menu will be different depending of the rendering mode (table,
list). Conventionally, menus like this are styled as a list (
setRenderAsList()).
You will want to differentiate between unselected and selected items based on
the "item" and "itemselected"
style classes as well as between unselected and selected closeable items
based on the "citem" and
"citemselected" style classes.
For menus without closeable items a styling is pretty simple. For example,
assuming you set a "menu" style class for your menu,
you can style the items using:
.menu * .item {
cursor: pointer; cursor: hand;
color: blue;
text-decoration: underline;
}
.menu * .itemselected {
color: blue;
text-decoration: underline;
font-weight: bold;
}
For menus which supports closing and/or enabling disabling of items, the
styling is more complex. The close icon is styled by the current CSS theme
and can be overriden by using "Wt-closeicon" CSS
class. The look of the menu, assuming the default implementation for
WMenuItem, can be customized by using the following selectors (again
assuming a menu with as styleclass "menu"):
.Wt-closeicon : a close icon .menu : the list (you custom menu class) .menu li : a list item .menu span : spans of a list item # not closable items: .menu a.item span : the inner span of the label of an enabled item .menu span.item : the label of a disabled item .menu a.itemselected span : the inner span the label of an enabled selected item .menu span.itemselected : the label of a disabled selected item # closable items: .menu .citem a.label span : the inner span of the label of an enabled item .menu .citem span.label : the label of a disabled item .menu .citemselected a.label span : the inner span the label of an enabled selected item .menu .citemselected span.label : the label of a disabled selected item
Example of styling a menu with closeable items:
.menu {
overflow: auto;
}
.menu li {
display: inline;
}
.menu span {
display: block; float: left;
}
.menu a.item span {
cursor: pointer; cursor: hand;
color: blue;
margin-right: 5px;
}
.menu span.item {
color: gray;
margin-right: 5px;
}
.menu a.itemselected span {
color: black;
font-weight: bold;
text-decoration: none;
margin-right: 5px;
}
.menu span.itemselected {
color: gray;
font-weight: bold;
text-decoration: none;
margin-right: 5px;
}
.menu .citem a.label span {
cursor: pointer; cursor: hand;
color: blue;
}
.menu .citem span.label {
color: gray;
}
.menu .citemselected a.label span {
color: black;
font-weight: bold;
text-decoration: none;
}
.menu .citemselected span.label {
color: gray;
font-weight: bold;
text-decoration: none;
}
WMenuItem| Constructor Summary | |
|---|---|
WMenu(Orientation orientation)
Creates a new menu. |
|
WMenu(Orientation orientation,
WContainerWidget parent)
Creates a new menu. |
|
WMenu(WStackedWidget contentsStack,
Orientation orientation)
Creates a new menu. |
|
WMenu(WStackedWidget contentsStack,
Orientation orientation,
WContainerWidget parent)
Creates a new menu. |
|
| Method Summary | |
|---|---|
WMenuItem |
addItem(java.lang.CharSequence name,
WWidget contents)
Adds an item. |
WMenuItem |
addItem(java.lang.CharSequence name,
WWidget contents,
WMenuItem.LoadPolicy policy)
Adds an item. |
WMenuItem |
addItem(WMenuItem item)
Adds an item. |
void |
close(int index)
Closes an item. |
void |
close(WMenuItem item)
Closes an item. |
protected void |
enableAjax()
Progresses to an Ajax-enabled widget. |
WStackedWidget |
getContentsStack()
Returns the contents stack associated with the menu. |
int |
getCurrentIndex()
Returns the index of the currently selected item. |
WMenuItem |
getCurrentItem()
Returns the currently selected item. |
java.lang.String |
getInternalBasePath()
Returns the internal base path. |
java.util.List<WMenuItem> |
getItems()
Returns the items. |
Orientation |
getOrientation()
Returns the orientation. |
boolean |
isInternalPathEnabled()
Returns whether the menu generates internal paths entries. |
boolean |
isItemDisabled(int index)
Returns whether the item widget of the given index is disabled. |
boolean |
isItemDisabled(WMenuItem item)
Returns whether the item widget of the given item is disabled. |
boolean |
isItemHidden(int index)
Returns whether the item widget of the given index is hidden. |
boolean |
isItemHidden(WMenuItem item)
Returns whether the item widget of the given item is hidden. |
Signal1<WMenuItem> |
itemClosed()
Signal which indicates that an item was closed. |
Signal1<WMenuItem> |
itemSelected()
Signal which indicates that a new item was selected. |
Signal1<WMenuItem> |
itemSelectRendered()
Signal which indicates that a new selected item is rendered. |
protected int |
nextAfterHide(int index)
Returns the index of the item to be selected after hides. |
void |
remove()
Destructor. |
void |
removeItem(WMenuItem item)
Removes an item. |
boolean |
renderAsList()
Returns whether the menu is rendered as an HTML list. |
void |
select(int index)
Selects an item. |
void |
select(WMenuItem item)
Selects an item. |
void |
setInternalBasePath(java.lang.String basePath)
Sets the internal base path. |
void |
setInternalPathEnabled()
Enables internal paths for items. |
void |
setInternalPathEnabled(java.lang.String basePath)
Enables internal paths for items. |
void |
setItemDisabled(int index,
boolean disabled)
Disables an item. |
void |
setItemDisabled(WMenuItem item,
boolean disabled)
Disables an item. |
void |
setItemHidden(int index,
boolean hidden)
Hides an item. |
void |
setItemHidden(WMenuItem item,
boolean hidden)
Hides an item. |
void |
setRenderAsList(boolean enable)
Renders using an HTML list. |
| Methods inherited from class eu.webtoolkit.jwt.WWidget |
|---|
acceptDrops, acceptDrops, addCssRule, addCssRule, addStyleClass, animateHide, animateShow, containsExposed, disable, dropEvent, enable, getDrop, getJsRef, getParent, hide, htmlText, isLayoutSizeAware, isRendered, layoutSizeChanged, positionAt, positionAt, removeStyleClass, resize, setClearSides, setHeight, setHidden, setLayoutSizeAware, setMargin, setMargin, setMargin, setMargin, setMargin, setOffsets, setOffsets, setOffsets, setOffsets, setOffsets, setToolTip, setVerticalAlignment, setWidth, show, stopAcceptDrops, toggleStyleClass, toggleStyleClass, tr |
| Methods inherited from class eu.webtoolkit.jwt.WObject |
|---|
addChild, getObjectName, setObjectName |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Constructor Detail |
|---|
public WMenu(Orientation orientation,
WContainerWidget parent)
Construct a menu with given orientation. The menu is not
associated with a contents stack, and thus you will want to react to the
itemSelected() signal to react to menu
changes.
public WMenu(Orientation orientation)
Calls this(orientation, (WContainerWidget)null)
public WMenu(WStackedWidget contentsStack,
Orientation orientation,
WContainerWidget parent)
Construct a menu to manage the widgets in contentsStack, and
sets the menu orientation.
Each menu item will manage a single widget in the
contentsStack, making it the current widget when the menu
item is activated.
public WMenu(WStackedWidget contentsStack,
Orientation orientation)
Calls
this(contentsStack, orientation, (WContainerWidget)null)
| Method Detail |
|---|
public void remove()
remove in class WCompositeWidgetWContainerWidget.removeWidget(WWidget widget)
public WMenuItem addItem(java.lang.CharSequence name,
WWidget contents,
WMenuItem.LoadPolicy policy)
Adds a menu item with given contents, which is added to the
menu's associated contents stack.
contents may be null for two reasons:
Returns the corresponding WMenuItem.
addItem(WMenuItem item)
public final WMenuItem addItem(java.lang.CharSequence name,
WWidget contents)
Returns
addItem(name, contents, WMenuItem.LoadPolicy.LazyLoading)
public WMenuItem addItem(WMenuItem item)
Adds a menu item. Use this form to add specialized WMenuItem
implementations.
addItem(CharSequence name, WWidget contents,
WMenuItem.LoadPolicy policy)public void removeItem(WMenuItem item)
Removes the given item. The item and its contents is not deleted.
addItem(CharSequence name, WWidget contents,
WMenuItem.LoadPolicy policy)public void select(WMenuItem item)
Select the menu item item.
When item is null, the current selection is
removed.
select(int index),
getCurrentItem(),
WMenuItem.select()public void select(int index)
Menu items in a menu with N items are numbered from 0 to
N - 1.
Using a value of -1 removes the current selection.
select(WMenuItem item),
getCurrentIndex()public Signal1<WMenuItem> itemSelected()
This signal is emitted when an item was selected. It is emitted both when
the user activated an item, or when select() was invoked.
itemSelectRendered()public Signal1<WMenuItem> itemSelectRendered()
This signal is similar to itemSelected, but
is emitted from within a stateless slot. Therefore, any slot connected to
this signal will be optimized to client-side JavaScript, and must support
the contract of a stateless slot (i.e., be idempotent).
If you are unsure what is the difference with the
itemSelected signal, you'll probably
need the latter instead.
itemSelected()public void close(WMenuItem item)
Close the menu item item. Only
closeable items can be
closed.
close(int index),
WMenuItem.close()public void close(int index)
Menu items in a menu with N items are numbered from 0 to
N - 1.
close(WMenuItem item)public java.util.List<WMenuItem> getItems()
Returns the list of menu items in this menu.
public Signal1<WMenuItem> itemClosed()
This signal is emitted when an item was closed. It is emitted both when
the user closes an item, or when close() was invoked.
public void setItemHidden(WMenuItem item,
boolean hidden)
Hides the menu item item. By default, all menu items are
visible.
If the item was currently selected, then the next item to be selected is
determined by nextAfterHide().
setItemHidden(int index, boolean hidden),
WMenuItem.hide()
public void setItemHidden(int index,
boolean hidden)
Menu items in a menu with N items are numbered from 0 to
N - 1.
setItemHidden(WMenuItem item, boolean hidden)public boolean isItemHidden(WMenuItem item)
setItemHidden(WMenuItem item, boolean hidden)public boolean isItemHidden(int index)
Menu items in a menu with N items are numbered from 0 to
N - 1.
setItemHidden(WMenuItem item, boolean hidden)
public void setItemDisabled(WMenuItem item,
boolean disabled)
Disables the menu item item. Only an item that is enabled
can be selected. By default, all menu items are enabled.
setItemDisabled(int index, boolean disabled),
WMenuItem.setDisabled(boolean disabled)
public void setItemDisabled(int index,
boolean disabled)
Menu items in a menu with N items are numbered from 0 to
N - 1.
setItemDisabled(WMenuItem item, boolean disabled)public boolean isItemDisabled(WMenuItem item)
setItemDisabled(WMenuItem item, boolean disabled)public boolean isItemDisabled(int index)
Menu items in a menu with N items are numbered from 0 to
N - 1.
setItemDisabled(WMenuItem item, boolean disabled)public WMenuItem getCurrentItem()
getCurrentIndex(),
select(WMenuItem item)public int getCurrentIndex()
getCurrentItem(),
select(int index)public Orientation getOrientation()
The orientation is set at time of construction.
public void setRenderAsList(boolean enable)
By default, the the menu is rendered using an HTML
<table> element for layout. Setting this option
enables rendering using <ul> and
<il> elements, as is commonly done for CSS-based
designs.
Note: You cannot use this method after items have been added to the menu.
public boolean renderAsList()
setRenderAsList(boolean enable)public void setInternalPathEnabled(java.lang.String basePath)
The menu participates in the internal path by changing the internal path when an item has been selected, and listening for path changes to react to path selections. As a consequence this allows the user to bookmark the current menu selection and revisit it later, use back/forward buttons to navigate through history of visited menu items, and allows indexing of pages.
For each menu item, WMenuItem#getPathComponent() is appended to the basePath,
which defaults to the internal path (
WApplication#getBookmarkUrl()). A
'/' is appended to the base path, to turn it into a folder, if
needed.
By default, menu interaction does not change the application internal path.
WMenuItem.setPathComponent(String path)public final void setInternalPathEnabled()
Calls setInternalPathEnabled("")
public boolean isInternalPathEnabled()
setInternalPathEnabled(String basePath)public void setInternalBasePath(java.lang.String basePath)
A '/' is appended to turn it into a folder, if needed.
setInternalPathEnabled(String basePath),
getInternalBasePath()public java.lang.String getInternalBasePath()
The default value is the application's internalPath (
WApplication#getBookmarkUrl()) that
was recorded when setInternalPathEnabled() was called, and together with each
WMenuItem#getPathComponent()
determines the paths for each item.
For example, if getInternalBasePath()
is "/examples/" and pathComponent() for a
particular item is "charts/", then the internal
path for that item will be "/examples/charts/".
setInternalPathEnabled(String basePath)public WStackedWidget getContentsStack()
protected void enableAjax()
WWidgetThis method is called when the progressive bootstrap method is used, and support for AJAX has been detected. The default behavior will upgrade the widget's event handling to use AJAX instead of full page reloads, and propagate the call to its children.
You may want to reimplement this method if you want to make changes to widget when AJAX is enabled. You should always call the base implementation.
enableAjax in class WCompositeWidgetWApplication.enableAjax()protected int nextAfterHide(int index)
Returns the index of the item to be selected after the item with given index will be hidden.
By default, if the given index is an index of currently selected item, returns an index of the first visible item to the right of it. If it is not found, returns the index of the first visible item to the left of it. If there are no visible items around the currently selected item, returns the index of currently selected item.
You may want to reimplement this if you want to customize the algorithm of determining the index of the item to be selected after hiding the item with given index.
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||