From fc4809e41bc5694231046eb2fd4c324c4daba13f Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Sat, 18 Sep 2010 13:25:37 +0000 Subject: cosmetic updates in engine list functions, trade menu updates --- src/client/inventorylistview.cc | 6 +++ src/client/playerview.cc | 22 +++++--- src/client/trademenu.cc | 113 +++++++++++++++++++++++----------------- src/client/trademenu.h | 22 +++++--- 4 files changed, 101 insertions(+), 62 deletions(-) (limited to 'src/client') diff --git a/src/client/inventorylistview.cc b/src/client/inventorylistview.cc index 656adfb..1b46fd0 100644 --- a/src/client/inventorylistview.cc +++ b/src/client/inventorylistview.cc @@ -14,6 +14,9 @@ InventoryListView::InventoryListView(ui::Widget *parent) : ui::ListView (parent) set_inventory(0, 0); } +InventoryListView::~InventoryListView() { +} + void InventoryListView::set_inventory(core::Inventory *inventory, core::InfoType *info_type) { remove_children(); @@ -22,6 +25,9 @@ void InventoryListView::set_inventory(core::Inventory *inventory, core::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); diff --git a/src/client/playerview.cc b/src/client/playerview.cc index 4be64d2..2c2ecaa 100644 --- a/src/client/playerview.cc +++ b/src/client/playerview.cc @@ -133,15 +133,25 @@ void PlayerView::show_menu(const std::string & args) // show buy menu view_buymenu->show(); } else { - con_print << "usage: view buy [infoid] show the buy menu for this kind of item" << std::endl; + con_print << "usage: view buy [info id] show the buy menu for this kind of item" << std::endl; } } else if (label.compare("trade") == 0) { - // hide other menus - view_buymenu->hide(); - view_entitymenu->hide(); - // show trade menu - view_trademenu->show(); + // invetory based trade + std::string typestr; + + if(argstr >> typestr) { + aux::to_label(typestr); + + // hide other menus + view_buymenu->hide(); + view_entitymenu->hide(); + // show trade menu + view_trademenu->show(); + view_trademenu->set_item_type(core::InfoType::find(typestr)); + } else { + con_print << "usage: view trade [string] show the trade menu for this type of items" << std::endl; + } } else if (label.compare("hide") == 0) { // hide all menus diff --git a/src/client/trademenu.cc b/src/client/trademenu.cc index 7e9be4f..e96f1a6 100644 --- a/src/client/trademenu.cc +++ b/src/client/trademenu.cc @@ -4,6 +4,9 @@ the terms of the GNU General Public License version 2 */ +#include "core/application.h" +#include "core/info.h" +#include "core/inventory.h" #include "ui/button.h" #include "ui/paint.h" #include "ui/ui.h" @@ -34,13 +37,22 @@ TradeMenu::TradeMenu(ui::Widget *parent, const char * label) : ui::Window(parent menu_namelabel->set_alignment(ui::AlignCenter); menu_namelabel->show(); - menu_inventorylistview = new ui::ListView(menu_tradewindow); + menu_inventorylistview = new InventoryListView(menu_tradewindow); menu_inventorylistview->set_label("inventorylistview"); menu_inventorylistview->set_background(false); menu_inventorylistview->set_border(true); + menu_modelview = new ui::ModelView(menu_tradewindow); + menu_modelview->set_label("modelview"); + menu_modelview->set_background(false); + menu_modelview->set_border(false); + + menu_scrollpane = new ui::ScrollPane(menu_tradewindow, menu_infotext); + menu_scrollpane->set_background(false); + menu_scrollpane->set_border(false); + menu_scrollpane->set_alignment(ui::AlignTop); - menu_traderlistview = new ui::ListView(menu_tradewindow); + menu_traderlistview = new InventoryListView(menu_tradewindow); menu_traderlistview->set_label("traderlistview"); menu_traderlistview->set_background(false); menu_traderlistview->set_border(true); @@ -48,7 +60,7 @@ TradeMenu::TradeMenu(ui::Widget *parent, const char * label) : ui::Window(parent menu_closebutton = new ui::Button(menu_tradewindow, "Return", "view hide"); std::string test("test"); - set_item_type(test); + set_item_type(0); hide(); } @@ -58,54 +70,55 @@ TradeMenu::~TradeMenu() } -void TradeMenu::set_item_type(std::string const & itemtype) +void TradeMenu::set_item_type(core::InfoType *item_type) { - ui::ListItem *item_label = 0; - + // reset menu_namelabel->set_text(0); + menu_infotext.clear(); - // update inventorylistview - menu_inventorylistview->remove_children(); - - //core::Inventory *inventory = 0; - - - item_label = new ui::ListItem(menu_inventorylistview, "Inventory item 1"); - item_label->set_height(item_label->font()->height() * 2.0f); - - item_label = new ui::ListItem(menu_inventorylistview, "Inventory item 2"); - item_label->set_height(item_label->font()->height() * 2.0f); + core::Inventory *inventory_player = 0; + core::Inventory *inventory_view = 0; - item_label = new ui::ListItem(menu_inventorylistview, "Inventory item 3"); - item_label->set_height(item_label->font()->height() * 2.0f); + if (core::localcontrol()) + inventory_player = core::localcontrol()->inventory(); - item_label = new ui::ListItem(menu_inventorylistview, "Inventory item 4"); - item_label->set_height(item_label->font()->height() * 2.0f); + if(core::localplayer()->view()) + inventory_view = core::localplayer()->view()->inventory(); - item_label = new ui::ListItem(menu_inventorylistview, "Inventory item 5"); - item_label->set_height(item_label->font()->height() * 2.0f); + menu_inventorylistview->set_inventory(inventory_player, item_type); + menu_traderlistview->set_inventory(inventory_view, item_type); - menu_inventorylistview->event_resize(); - - // update traderlistview - menu_traderlistview->remove_children(); - - item_label = new ui::ListItem(menu_traderlistview, "Shop item 1"); - item_label->set_height(item_label->font()->height() * 2.0f); - - item_label = new ui::ListItem(menu_traderlistview, "Shop item 2"); - item_label->set_height(item_label->font()->height() * 2.0f); - - item_label = new ui::ListItem(menu_traderlistview, "Shop item 3"); - item_label->set_height(item_label->font()->height() * 2.0f); - - item_label = new ui::ListItem(menu_traderlistview, "Shop item 4"); - item_label->set_height(item_label->font()->height() * 2.0f); + set_item(0); +} + +void TradeMenu::set_item(ui::ListItem *item) +{ + menu_namelabel->clear(); - item_label = new ui::ListItem(menu_traderlistview, "Shop item 5"); - item_label->set_height(item_label->font()->height() * 2.0f); + if (!item || !item->info()) { + menu_scrollpane->hide(); + menu_modelview->hide(); + return; + } - menu_traderlistview->event_resize(); + if (item->parent() == menu_inventorylistview) { + // item in ship inventory selected (SELL) + menu_namelabel->set_text("Sell " + item->text()); + + } else if (item->parent() == menu_traderlistview) { + // item in trader inventory selected (BUY) + menu_namelabel->set_text("Buy " + item->text()); + } + + if (item->info()) { + for (core::Info::Text::const_iterator it = item->info()->text().begin(); it != item->info()->text().end(); it++) { + menu_infotext.push_back((*it)); + } + menu_scrollpane->show(); + + menu_modelview->set_modelname(item->info()->modelname()); + menu_modelview->show(); + } } void TradeMenu::resize() @@ -128,6 +141,14 @@ void TradeMenu::resize() menu_inventorylistview->set_size(ui::UI::elementsize.width(), menu_tradewindow->height() - smallmargin * 2.0f - fontmargin * 3.0f); menu_inventorylistview->set_location(fontmargin, fontmargin * 3.0f); + // resize modelview + menu_modelview->set_size(menu_tradewindow->width() - 2.0f * ui::UI::elementsize.width() - fontmargin * 4.0f, ui::UI::elementsize.width()); + menu_modelview->set_location(fontmargin * 2.0f + ui::UI::elementsize.width(), fontmargin * 3.0f); + + // resize scrollpane + menu_scrollpane->set_size(menu_tradewindow->width() - 2.0f * ui::UI::elementsize.width() - fontmargin * 4.0f, menu_inventorylistview->height() - fontmargin - ui::UI::elementsize.width()); + menu_scrollpane->set_location(fontmargin * 2.0f + ui::UI::elementsize.width(), fontmargin * 4.0f + ui::UI::elementsize.width()); + // resize trader listview menu_traderlistview->set_size(ui::UI::elementsize.width(), menu_tradewindow->height() - smallmargin * 2.0f - fontmargin * 3.0f); menu_traderlistview->set_location(menu_tradewindow->width() - menu_traderlistview->width() - fontmargin, fontmargin * 3.0f); @@ -140,13 +161,7 @@ void TradeMenu::resize() bool TradeMenu::on_emit(Widget *sender, const Event event, void *data) { if (event == ui::Widget::EventListItemClicked) { - if (sender->parent() == menu_inventorylistview) { - // item from inventory selected - menu_namelabel->set_text("SELL " + static_cast(sender)->text()); - } else if (sender->parent() == menu_traderlistview) { - // item from trader selected - menu_namelabel->set_text("BUY " + static_cast(sender)->text()); - } + set_item(static_cast(sender)); return true; } diff --git a/src/client/trademenu.h b/src/client/trademenu.h index 37823b1..b95ee57 100644 --- a/src/client/trademenu.h +++ b/src/client/trademenu.h @@ -10,8 +10,11 @@ #include "core/info.h" #include "ui/container.h" #include "ui/label.h" -#include "ui/listview.h" +#include "ui/listitem.h" +#include "ui/scrollpane.h" +#include "ui/modelview.h" #include "ui/widget.h" +#include "client/inventorylistview.h" namespace client { @@ -25,7 +28,7 @@ public: ~TradeMenu(); /// set the item type to trade - void set_item_type(std::string const & itemtype); + void set_item_type(core::InfoType *item_type); protected: /// resize event handler @@ -33,15 +36,20 @@ protected: /// emit event handler virtual bool on_emit(Widget *sender, const Event event, void *data); - + private: + void set_item(ui::ListItem *item); + ui::Window *menu_tradewindow; - ui::ListView *menu_inventorylistview; - ui::ListView *menu_traderlistview; ui::Button *menu_closebutton; - ui::Label *menu_namelabel; - + ui::ModelView *menu_modelview; + ui::ScrollPane *menu_scrollpane; + + InventoryListView *menu_inventorylistview; + InventoryListView *menu_traderlistview; + + ui::Text menu_infotext; }; } -- cgit v1.2.3