NS_IMETHODIMP nsXFormsItemSetElement::SelectItemByNode(nsIDOMNode *aNode, nsIDOMNode **aSelected) { NS_ENSURE_ARG_POINTER(aSelected); NS_ENSURE_STATE(mElement); *aSelected = nsnull; // nsIXFormsItemSetUIElement is implemented by the XBL binding. nsCOMPtr<nsIXFormsItemSetUIElement> uiItemSet(do_QueryInterface(mElement)); NS_ENSURE_STATE(uiItemSet); nsCOMPtr<nsIDOMElement> anonContent; uiItemSet->GetAnonymousItemSetContent(getter_AddRefs(anonContent)); NS_ENSURE_STATE(anonContent); nsCOMPtr<nsIDOMNode> child, tmp; anonContent->GetFirstChild(getter_AddRefs(child)); // Trying to select the first possible (generated) \<item\> element. while (child) { nsCOMPtr<nsIXFormsSelectChild> selectChild(do_QueryInterface(child)); if (selectChild) { selectChild->SelectItemByNode(aNode, aSelected); if (*aSelected) { return NS_OK; } } tmp.swap(child); tmp->GetNextSibling(getter_AddRefs(child)); } return NS_OK; }
shared_ptr<const Data> InMemoryStorage::find(const Interest& interest) { // if the interest contains implicit digest, it is possible to directly locate a packet. auto it = m_cache.get<byFullName>().find(interest.getName()); // if a packet is located by its full name, it must be the packet to return. if (it != m_cache.get<byFullName>().end()) { return ((*it)->getData()).shared_from_this(); } // if the packet is not discovered by last step, either the packet is not in the storage or // the interest doesn't contains implicit digest. it = m_cache.get<byFullName>().lower_bound(interest.getName()); if (it == m_cache.get<byFullName>().end()) { return nullptr; } // to locate the element that has a just smaller name than the interest's if (it != m_cache.get<byFullName>().begin()) { it--; } InMemoryStorageEntry* ret = selectChild(interest, it); if (ret == nullptr) { return nullptr; } // let derived class do something with the entry afterAccess(ret); return ret->getData().shared_from_this(); }
void ListBox::selectIndex(int index) { const WidgetsList& children = getChildren(); if (index < 0 || index >= (int)children.size()) return; ListItem* child = static_cast<ListItem*>(children[index]); ASSERT(child); selectChild(child); }
std::pair<int64_t,Name> Index::find(const Interest& interest) const { Name name = interest.getName(); IndexContainer::const_iterator result = m_indexContainer.lower_bound(name); if (result != m_indexContainer.end()) { return selectChild(interest, result); } else { return std::make_pair(0, Name()); } }
bool ListBox::onProcessMessage(Message* msg) { switch (msg->type()) { case kOpenMessage: centerScroll(); break; case kMouseDownMessage: captureMouse(); case kMouseMoveMessage: if (hasCapture()) { gfx::Point mousePos = static_cast<MouseMessage*>(msg)->position(); int select = getSelectedIndex(); View* view = View::getView(this); bool pick_item = true; if (view) { gfx::Rect vp = view->getViewportBounds(); if (mousePos.y < vp.y) { int num = MAX(1, (vp.y - mousePos.y) / 8); selectIndex(select-num); pick_item = false; } else if (mousePos.y >= vp.y + vp.h) { int num = MAX(1, (mousePos.y - (vp.y+vp.h-1)) / 8); selectIndex(select+num); pick_item = false; } } if (pick_item) { Widget* picked; if (view) { picked = view->getViewport()->pick(mousePos); } else { picked = pick(mousePos); } /* if the picked widget is a child of the list, select it */ if (picked && hasChild(picked)) { if (ListItem* pickedItem = dynamic_cast<ListItem*>(picked)) selectChild(pickedItem); } } return true; } break; case kMouseUpMessage: releaseMouse(); break; case kMouseWheelMessage: { View* view = View::getView(this); if (view) { gfx::Point scroll = view->getViewScroll(); scroll += static_cast<MouseMessage*>(msg)->wheelDelta() * getTextHeight()*3; view->setViewScroll(scroll); } break; } case kKeyDownMessage: if (hasFocus() && !getChildren().empty()) { int select = getSelectedIndex(); View* view = View::getView(this); int bottom = MAX(0, getChildren().size()-1); KeyMessage* keymsg = static_cast<KeyMessage*>(msg); switch (keymsg->scancode()) { case kKeyUp: // Select previous element. if (select >= 0) select--; // Or select the bottom of the list if there is no // selected item. else select = bottom; break; case kKeyDown: select++; break; case kKeyHome: select = 0; break; case kKeyEnd: select = bottom; break; case kKeyPageUp: if (view) { gfx::Rect vp = view->getViewportBounds(); select -= vp.h / getTextHeight(); } else select = 0; break; case kKeyPageDown: if (view) { gfx::Rect vp = view->getViewportBounds(); select += vp.h / getTextHeight(); } else select = bottom; break; case kKeyLeft: case kKeyRight: if (view) { gfx::Rect vp = view->getViewportBounds(); gfx::Point scroll = view->getViewScroll(); int sgn = (keymsg->scancode() == kKeyLeft) ? -1: 1; scroll.x += vp.w/2*sgn; view->setViewScroll(scroll); } break; default: return Widget::onProcessMessage(msg); } selectIndex(MID(0, select, bottom)); return true; } break; case kDoubleClickMessage: onDoubleClickItem(); return true; } return Widget::onProcessMessage(msg); }