/**
   * Mark the list item with the given ID.
   *
   * @param pItemId item ID
   */
  @SuppressWarnings("unchecked")
  public void setMarked(final String pItemId) {
    if (LOG.isTraceEnabled()) {
      LOG.enter(
          "setMarked", //$NON-NLS-1$
          new String[] {"pItemId"},
          new Object[] {pItemId}); // $NON-NLS-1$
    }

    boolean clear =
        pItemId == null
            || pItemId.equals(
                getIdFromWidget(
                    ((CbGenericListItem<W>) iGuiList.getWidget(iMarkedIdx)).getDisplayWidget()));
    clearMarker();
    if (pItemId != null && !clear) {
      int idx = 0;
      for (Iterator<Widget> iter = iGuiList.iterator(); iter.hasNext(); idx++) {
        CbGenericListItem<W> gli = (CbGenericListItem<W>) iter.next();
        W w = gli.getDisplayWidget();
        if (pItemId.equals(getIdFromWidget(w))) {
          setMarked(idx);
          break;
        }
      }
    }

    LOG.exit("setMarked"); // $NON-NLS-1$
  }
 /**
  * Replace the list displayed with the given one.
  *
  * @param pDisplayWidgets the new list of items to display
  */
 protected void setDisplayWidgets(final List<W> pDisplayWidgets) {
   iGuiList.clear();
   int i = 0;
   for (W w : pDisplayWidgets) {
     CbGenericListItem<W> newRow =
         new CbGenericListItem<W>(getSelectorCallback(), getMoreArrowCallback());
     newRow.setDisplayWidget(w);
     newRow.setRowIdx(i++);
     iGuiList.add(newRow);
   }
   checkEmptyListHint();
 }
 /**
  * Gets the display widget with the given item ID from {@link #iGuiList}.
  *
  * @param pItemId the widget's item ID
  * @return the widget itself
  */
 protected W getItem(final String pItemId) {
   W result = null;
   for (Iterator<Widget> iter = iGuiList.iterator(); iter.hasNext(); ) {
     @SuppressWarnings("unchecked")
     CbGenericListItem<W> gli = (CbGenericListItem<W>) iter.next();
     W w = gli.getDisplayWidget();
     if (pItemId.equals(getIdFromWidget(w))) {
       result = w;
       break;
     }
   }
   return result;
 }
 /**
  * Removes the entry with the given item ID.
  *
  * @param pItemId the unique item ID
  */
 protected void removeDisplayWidget(final String pItemId) {
   int i = 0;
   for (Iterator<Widget> iter = iGuiList.iterator(); iter.hasNext(); i++) {
     @SuppressWarnings("unchecked")
     CbGenericListItem<W> gli = (CbGenericListItem<W>) iter.next();
     if (pItemId.equals(getIdFromWidget(gli.getDisplayWidget()))) {
       iter.remove();
       i--;
     } else {
       gli.setRowIdx(i);
     }
   }
   checkEmptyListHint();
 }
 /**
  * Add an item to the list.
  *
  * @param pNewWidget the new display widget
  */
 @SuppressWarnings("unchecked")
 protected void addDisplayWidget(final W pNewWidget) {
   final String itemId = getIdFromWidget(pNewWidget);
   int beforeIdx = -1;
   for (Widget w : iGuiList) {
     CbGenericListItem<W> gli = (CbGenericListItem<W>) w;
     if (itemId.compareToIgnoreCase(getIdFromWidget(gli.getDisplayWidget())) < 0) {
       beforeIdx = gli.getRowIdx();
       break;
     }
   }
   CbGenericListItem<W> newRow =
       new CbGenericListItem<W>(getSelectorCallback(), getMoreArrowCallback());
   newRow.setDisplayWidget(pNewWidget);
   if (beforeIdx < 0) {
     newRow.setRowIdx(iGuiList.getWidgetCount());
     iGuiList.add(newRow);
   } else {
     newRow.setRowIdx(beforeIdx);
     iGuiList.insert(newRow, beforeIdx);
     int i = 0;
     for (Widget w : iGuiList) {
       ((CbGenericListItem<W>) w).setRowIdx(i++);
     }
   }
   checkEmptyListHint();
 }