/** * Constructor. * * @param pSelectorCallback called when the selector is clicked. Must <b>not</b> be <code>null * </code>. * @param pMoreArrowCallback called when the 'More' arrow is clicked. Must <b>not</b> be <code> * null</code>. */ public CbGenericListItem( final CbSelectorCallbackIF<W> pSelectorCallback, final CbMoreArrowCallbackIF<W> pMoreArrowCallback) { // dummy widget we put on the panel until the display widget is set in setDisplayWidget() Label dummy = new Label("<dummy>"); // $NON-NLS-1$ // image shown when the marker is active Image markerActive = new Image(CbConstants.IMG_BUNDLE.markerActive()); markerActive.setStyleName(CbConstants.CSS.ccColMarker()); markerActive.setVisible(false); Image markerPassive = new Image(CbConstants.IMG_BUNDLE.markerPassive()); markerPassive.setStyleName(CbConstants.CSS.ccColMarker()); CbMoreArrow moreArrow = new CbMoreArrow(pMoreArrowCallback.getTooltipText()); moreArrow.addStyleName(CbConstants.CSS.cbMoreArrowLabelSmaller()); iDisplayWidgetWrapper = new FlowPanel(); iDisplayWidgetWrapper.add(dummy); iDisplayWidgetWrapper.setStyleName(CbConstants.CSS.cbDisplayWidgetWrapper()); final FlowPanel fp = new FlowPanel(); fp.setStyleName(CbConstants.CSS.cbGeneralListItem()); fp.add(markerActive); fp.add(markerPassive); fp.add(iDisplayWidgetWrapper); fp.add(moreArrow); final ClickHandler clickHandler = new ClickHandler() { @Override public void onClick(final ClickEvent pEvent) { int pos = COL_SELECTOR; if (!fp.getWidget(pos).isVisible()) { pos++; } if (CbUtil.isInside(fp.getWidget(pos), pEvent)) { pSelectorCallback.onItemSelected(CbGenericListItem.this); } else { pMoreArrowCallback.onMoreArrowClicked(CbGenericListItem.this); } } }; addClickHandler(clickHandler); initWidget(fp); }