/* client/inventorylistview.cc This file is part of the Osirion project and is distributed under the terms and conditions of the GNU General Public License version 2 */ #include "client/inventorylistview.h" #include "ui/listitem.h" namespace client { InventoryListView::InventoryListView(ui::Widget *parent) : ui::ListView (parent) { listview_timestamp = 0; set_inventory(0, 0); } InventoryListView::~InventoryListView() { } void InventoryListView::set_inventory(core::Inventory *inventory, core::InfoType *infotype) { remove_children(); listview_inventory = inventory; listview_infotype = infotype; const core::Item *selecteditem = (selected() ? selected()->item() : 0); if (!inventory || !infotype) { return; } // TODO scan the inventories and request updated infos // update when necessary for (core::Inventory::Items::const_iterator it = inventory->items().begin(); it != inventory->items().end(); it++) { core::Item *item = (*it); if (item->info() && (item->info()->type() == infotype) && (item->amount() != 0) ) { ui::ListItem *listitem = 0; std::ostringstream str; str << item->info()->name().c_str(); if (item->amount() > 0) { str << " (" << item->amount() << ")"; } listitem = new ui::ListItem(this, str.str().c_str()); listitem->set_height(listitem->font()->height() * 2.0f); listitem->set_item(item); listitem->set_info(item->info()); // preserve previous selection during update if (item == selecteditem) { ui::ListView::select(listitem); } } } listview_timestamp = inventory->timestamp(); event_resize(); } void InventoryListView::draw() { if (listview_timestamp != listview_inventory->timestamp()) { set_inventory(listview_inventory, listview_infotype); } ListView::draw(); } } // namespace client