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; }
static void sdl_update_roadbook(struct navigation *nav) { using namespace CEGUI; extern Window* myRoot; struct navigation_list *list; list=navigation_list_new(nav); // First, update the 'Navigation Tip' on the main window try { struct attr attr; item_attr_get(navigation_list_get_item(list), attr_navigation_speech, &attr); WindowManager::getSingleton().getWindow("Navit/Routing/Tips")->setText(attr.u.str); } catch (CEGUI::Exception& e) { fprintf(stderr,"CEGUI Exception occured: \n%s\n", e.getMessage().c_str()); printf("Missing control!...\n"); } // Then, update the whole roadbook try { /* Currently we use the 'Navit' text to display the roadbook, until Mineque design a button for that if(! WindowManager::getSingleton().getWindow("OSD/RoadbookButton")->isVisible()){ WindowManager::getSingleton().getWindow("OSD/RoadbookButton")->show(); } */ MultiColumnList* mcl = static_cast<MultiColumnList*>(WindowManager::getSingleton().getWindow("Roadbook")); mcl->resetList(); item *item; struct attr attr; list=navigation_list_new(nav); while ((item=navigation_list_get_item(list))) { // printf("SDL : %s\n", str); mcl->addRow(); item_attr_get(item, attr_navigation_short, &attr); ListboxTextItem* itemListbox = new ListboxTextItem(attr.u.str); itemListbox->setSelectionBrushImage("TaharezLook", "MultiListSelectionBrush"); mcl->setItem(itemListbox, 0, mcl->getRowCount()-1); } navigation_list_destroy(list); } catch (CEGUI::Exception& e) { fprintf(stderr,"CEGUI Exception occured: \n%s\n", e.getMessage().c_str()); printf("Missing control!...\n"); } }
bool handleMouseEnters(const CEGUI::EventArgs& event) { // FIXME this whole function could maybe be removed const CEGUI::WindowEventArgs& we = static_cast<const CEGUI::WindowEventArgs&>(event); // FIXME theses variables should be shared extern CEGUI::OpenGLRenderer* renderer; extern CEGUI::Window* myRoot; using namespace CEGUI; myRoot->getChild("Navit/Keyboard")->getChild("Navit/Keyboard/Input")->setText(""); MultiColumnList* mcl = static_cast<MultiColumnList*>(WindowManager::getSingleton().getWindow("DestinationWindow/Listbox")); String senderID = we.window->getName(); if (senderID == "DestinationWindow/CountryEditbox"){ // First, clean off the Street and Town Editbox extern Window* myRoot; Window* town_edit = static_cast<Window*>(myRoot->getChild("DestinationWindow")->getChild("DestinationWindow/TownEditbox")); town_edit->setText(""); Window* street_edit = static_cast<Window*>(myRoot->getChild("DestinationWindow")->getChild("DestinationWindow/StreetEditbox")); street_edit->setText(""); SDL_dest.current_search=SRCH_COUNTRY; } else if (senderID == "DestinationWindow/TownEditbox"){ // First, clean off the Street Editbox extern Window* myRoot; Window* street_edit = static_cast<Window*>(myRoot->getChild("DestinationWindow")->getChild("DestinationWindow/StreetEditbox")); street_edit->setText(""); SDL_dest.current_search=SRCH_TOWN; } else if (senderID == "DestinationWindow/StreetEditbox"){ // First, make sure the user selected an entry in the town choice. If he hadn't, select the first for him. if(SDL_dest.current_search==SRCH_TOWN){ if (mcl->getRowCount()>0) { handleItemSelect(0); } } SDL_dest.current_search=SRCH_STREET; } }
bool ButtonGo(const CEGUI::EventArgs& event) { using namespace CEGUI; MultiColumnList* mcl = static_cast<MultiColumnList*>(WindowManager::getSingleton().getWindow("AdressSearch/Listbox")); // First, make sure the user selected an entry in the town choice. If he hadn't, select the first for him. if(SDL_dest.current_search==SRCH_TOWN){ if (mcl->getRowCount()>0) { handleItemSelect(0); } } Window* Dest_x = static_cast<Window*>(WindowManager::getSingleton().getWindow("AdressSearch/Dest_x")); Window* Dest_y = static_cast<Window*>(WindowManager::getSingleton().getWindow("AdressSearch/Dest_y")); extern struct navit *sdl_gui_navit; route_to(atoi(Dest_x->getText().c_str()),atoi(Dest_y->getText().c_str())); return true; }
void handle_destination_change(){ using namespace CEGUI; struct search_param *search=&search_param; struct search_list_result *res; MultiColumnList* mcl = static_cast<MultiColumnList*>(WindowManager::getSingleton().getWindow("AdressSearch/Listbox")); if (SDL_dest.current_search==SRCH_COUNTRY) { Editbox* country_edit = static_cast<Editbox*>(WindowManager::getSingleton().getWindow("AdressSearch/CountryEditbox")); String content=country_edit->getText(); mcl->resetList(); dbg(0,"Starting a country search : %s\n",content.c_str()); search->attr.type=attr_country_all; // FIXME the following codeblock could be shared between country, town and street search search->attr.u.str=(char *)content.c_str(); search_list_search(search->sl, &search->attr, 1); while((res=search_list_get_result(search->sl))) { ListboxTextItem* itemListbox = new ListboxTextItem((CEGUI::utf8*)(res->country->name)); itemListbox->setSelectionBrushImage("TaharezLook", "MultiListSelectionBrush"); mcl->addRow(itemListbox,0); } } else if (SDL_dest.current_search==SRCH_TOWN) { Editbox* town_edit = static_cast<Editbox*>(WindowManager::getSingleton().getWindow("AdressSearch/TownEditbox")); String content=town_edit->getText(); mcl->resetList(); if(strlen(content.c_str())<4){ } else { dbg(0,"town searching for %s\n",content.c_str()); search->attr.type=attr_town_name; search->attr.u.str=(char *)content.c_str(); search_list_search(search->sl, &search->attr, 1); while((res=search_list_get_result(search->sl))) { ListboxTextItem* itemListbox = new ListboxTextItem((CEGUI::utf8*)(res->town->name)); itemListbox->setSelectionBrushImage("TaharezLook", "MultiListSelectionBrush"); mcl->addRow(itemListbox,0); char x [256]; sprintf(x,"%li",res->c->x); ListboxTextItem* xitem = new ListboxTextItem(x); char y [256]; sprintf(y,"%li",res->c->y); ListboxTextItem* yitem = new ListboxTextItem(y); try { mcl->setItem(xitem, 3, mcl->getRowCount()-1); mcl->setItem(yitem, 4, mcl->getRowCount()-1); } // something went wrong, so cleanup the ListboxTextItem. catch (InvalidRequestException) { // delete item; } } } } else if (SDL_dest.current_search==SRCH_STREET) { Editbox* street_edit = static_cast<Editbox*>(WindowManager::getSingleton().getWindow("AdressSearch/StreetEditbox")); String content=street_edit->getText(); if(strlen(content.c_str())<1){ } else { // dbg(1,"street searching for %s\n",content.c_str()); search->attr.type=attr_street_name; search->attr.u.str=(char *)content.c_str(); mcl->resetList(); search_list_search(search->sl, &search->attr, 1); while((res=search_list_get_result(search->sl))) { ListboxTextItem* itemListbox = new ListboxTextItem((CEGUI::utf8*)(res->street->name)); itemListbox->setSelectionBrushImage("TaharezLook", "MultiListSelectionBrush"); mcl->addRow(itemListbox,0); char x [256]; sprintf(x,"%li",res->c->x); ListboxTextItem* xitem = new ListboxTextItem(x); char y [256]; sprintf(y,"%li",res->c->y); ListboxTextItem* yitem = new ListboxTextItem(y); try { mcl->setItem(xitem, 3, mcl->getRowCount()-1); mcl->setItem(yitem, 4, mcl->getRowCount()-1); } // something went wrong, so cleanup the ListboxTextItem. catch (InvalidRequestException) { // delete item; } } } } }
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; } }
static void sdl_update_roadbook(struct navigation *nav) { using namespace CEGUI; struct map *map; struct map_rect *mr; if (! nav) return; map=navigation_get_map(nav); if (! map) return; mr=map_rect_new(map, NULL); if (! mr) return; // First, ensure the navigation tip is visible. quick workaround for when resuming a destination WindowManager::getSingleton().getWindow("Navit/Routing/Tips")->show(); // update the 'Navigation Tip' on the main window try { struct attr attr; item_attr_get(map_rect_get_item(mr), attr_navigation_speech, &attr); map_rect_destroy(mr); mr=map_rect_new(map, NULL); WindowManager::getSingleton().getWindow("Navit/Routing/Tips")->setText((CEGUI::utf8*)(attr.u.str)); } catch (CEGUI::Exception& e) { fprintf(stderr,"CEGUI Exception occured: \n%s\n", e.getMessage().c_str()); printf("Missing control!...\n"); } // Then, update the whole roadbook try { /* Currently we use the 'Navit' text to display the roadbook, until Mineque design a button for that if(! WindowManager::getSingleton().getWindow("OSD/RoadbookButton")->isVisible()){ WindowManager::getSingleton().getWindow("OSD/RoadbookButton")->show(); } */ MultiColumnList* mcl = static_cast<MultiColumnList*>(WindowManager::getSingleton().getWindow("Roadbook")); mcl->resetList(); item *item; struct attr attr; while ((item=map_rect_get_item(mr))) { mcl->addRow(); item_attr_get(item, attr_navigation_short, &attr); ListboxTextItem* itemListbox = new ListboxTextItem(attr.u.str); itemListbox->setSelectionBrushImage("TaharezLook", "MultiListSelectionBrush"); mcl->setItem(itemListbox, 0, mcl->getRowCount()-1); } map_rect_destroy(mr); } catch (CEGUI::Exception& e) { dbg(0,"CEGUI Exception occured: \n%s\n", e.getMessage().c_str()); dbg(0,"Missing control!\n"); } }