Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStijn Buys <ingar@osirion.org>2010-09-18 13:25:37 +0000
committerStijn Buys <ingar@osirion.org>2010-09-18 13:25:37 +0000
commitfc4809e41bc5694231046eb2fd4c324c4daba13f (patch)
tree02f183a0779aa0457e13f42037f3631ea28b7b65 /src/client
parent8c6a1a404ac8d1589a37d54b3b7ce0d776fe4751 (diff)
cosmetic updates in engine list functions, trade menu updates
Diffstat (limited to 'src/client')
-rw-r--r--src/client/inventorylistview.cc6
-rw-r--r--src/client/playerview.cc22
-rw-r--r--src/client/trademenu.cc113
-rw-r--r--src/client/trademenu.h22
4 files changed, 101 insertions, 62 deletions
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<ui::ListItem *>(sender)->text());
- } else if (sender->parent() == menu_traderlistview) {
- // item from trader selected
- menu_namelabel->set_text("BUY " + static_cast<ui::ListItem *>(sender)->text());
- }
+ set_item(static_cast<ui::ListItem *>(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;
};
}