bool Demo6Sample::handleContentsChanged(const CEGUI::EventArgs& e) { using namespace CEGUI; // get access to required widgets MultiColumnList* mcl = static_cast<MultiColumnList*>(WindowManager::getSingleton().getWindow("Demo6/MainList")); Window* colText = WindowManager::getSingleton().getWindow("Demo6/ControlPanel/ColCount"); Window* rowText = WindowManager::getSingleton().getWindow("Demo6/ControlPanel/RowCount"); std::string tmp; char buff[16]; // update the column count tmp = "Current Column Count: "; sprintf(buff, "%d", mcl->getColumnCount()); tmp += buff; colText->setText(tmp); // update the row count tmp = "Current Row Count: "; sprintf(buff, "%d", mcl->getRowCount()); tmp += buff; rowText->setText(tmp); // event was handled. return true; }
bool Demo6Sample::handleContentsChanged(const CEGUI::EventArgs& args) { using namespace CEGUI; // get access to required widgets MultiColumnList* mcl = static_cast<MultiColumnList*>(static_cast<const WindowEventArgs&>(args).window->getRootWindow()->getChild("MainList")); Window* colText = static_cast<const WindowEventArgs&>(args).window->getRootWindow()->getChild("ControlPanel/SetItemPanel/ColCount"); Window* rowText = static_cast<const WindowEventArgs&>(args).window->getRootWindow()->getChild("ControlPanel/SetItemPanel/RowCount"); std::string tmp; char buff[16]; // update the column count tmp = "Current Column Count: "; sprintf(buff, "%d", mcl->getColumnCount()); tmp += buff; colText->setText(tmp.c_str()); // update the row count tmp = "Current Row Count: "; sprintf(buff, "%d", mcl->getRowCount()); tmp += buff; rowText->setText(tmp.c_str()); // event was handled. return true; }
void FalagardMultiColumnList::render() { MultiColumnList* w = (MultiColumnList*)d_window; const ListHeader* header = w->getListHeader(); const Scrollbar* vertScrollbar = w->getVertScrollbar(); const Scrollbar* horzScrollbar = w->getHorzScrollbar(); // render general stuff before we handle the items cacheListboxBaseImagery(); // // Render list items // Vector3f itemPos; Sizef itemSize; Rectf itemClipper, itemRect; // calculate position of area we have to render into Rectf itemsArea(getListRenderArea()); // set up initial positional details for items itemPos.d_y = itemsArea.top() - vertScrollbar->getScrollPosition(); itemPos.d_z = 0.0f; const float alpha = w->getEffectiveAlpha(); // loop through the items for (uint i = 0; i < w->getRowCount(); ++i) { // set initial x position for this row. itemPos.d_x = itemsArea.left() - horzScrollbar->getScrollPosition(); // calculate height for this row. itemSize.d_height = w->getHighestRowItemHeight(i); // loop through the columns in this row for (uint j = 0; j < w->getColumnCount(); ++j) { // allow item to use full width of the column itemSize.d_width = CoordConverter::asAbsolute(header->getColumnWidth(j), header->getPixelSize().d_width); ListboxItem* item = w->getItemAtGridReference(MCLGridRef(i,j)); // is the item for this column set? if (item) { // calculate destination area for this item. itemRect.left(itemPos.d_x); itemRect.top(itemPos.d_y); itemRect.setSize(itemSize); itemClipper = itemRect.getIntersection(itemsArea); // skip this item if totally clipped if (itemClipper.getWidth() == 0) { itemPos.d_x += itemSize.d_width; continue; } // draw this item item->draw(w->getGeometryBuffer(), itemRect, alpha, &itemClipper); } // update position for next column. itemPos.d_x += itemSize.d_width; } // update position ready for next row itemPos.d_y += itemSize.d_height; } }