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-19 22:49:55 +0000
committerStijn Buys <ingar@osirion.org>2010-09-19 22:49:55 +0000
commite8f7c4a06fce9e41fb23ffc42a566501a78210cb (patch)
tree3adf0b1f3eae778e9645450d0e51821142f7983b /src/client/trademenu.cc
parentcc18095cded14f5e7e3f049e47fca2224134b647 (diff)
player can only sell cargo on bases that allow it, trademenu layout updates
Diffstat (limited to 'src/client/trademenu.cc')
-rw-r--r--src/client/trademenu.cc30
1 files changed, 24 insertions, 6 deletions
diff --git a/src/client/trademenu.cc b/src/client/trademenu.cc
index 7ac3e7c..47655f6 100644
--- a/src/client/trademenu.cc
+++ b/src/client/trademenu.cc
@@ -79,7 +79,7 @@ TradeMenu::TradeMenu(ui::Widget *parent, const char * label) : ui::Window(parent
std::string test("test");
- set_item_type(0);
+ set_itemtype(0);
hide();
}
@@ -89,10 +89,11 @@ TradeMenu::~TradeMenu()
}
-void TradeMenu::set_item_type(core::InfoType *item_type)
+void TradeMenu::set_itemtype(core::InfoType *item_type)
{
// reset
menu_namelabel->set_text(0);
+ menu_itemtype = item_type;
core::Inventory *inventory_player = 0;
core::Inventory *inventory_view = 0;
@@ -123,11 +124,13 @@ void TradeMenu::set_item(ui::ListItem *item)
menu_modelview->hide();
return;
}
+
+ long amount = 1; // reserved
if (item->parent() == menu_inventorylistview) {
menu_traderlistview->deselect();
// item in ship inventory selected (SELL)
- menu_namelabel->set_text("Sell " + item->text());
+ menu_namelabel->set_text("Sell " + item->info()->name());
menu_buyallbutton->hide();
menu_buybutton->hide();
@@ -137,20 +140,29 @@ void TradeMenu::set_item(ui::ListItem *item)
menu_sellbutton->show();
menu_sellbutton->set_command("remote sell " + item->info()->type()->label() + " " + item->info()->label() + " 1");
+
+ const core::Item *trader_item = (menu_traderlistview->inventory() ? menu_traderlistview->inventory()->find(item->info()) : 0);
+ if (trader_item) {
+ std::ostringstream str;
+ str << "Price: " << std::setw(8) << amount * trader_item->price() << '\n' << "Volume: " << std::setw(7) << std::setprecision(2) << amount * trader_item->info()->volume();
+ menu_tradertext->set_text(str.str());
+ } else {
+ menu_tradertext->set_text("^1Can not sell here");
+ }
} else if (item->parent() == menu_traderlistview) {
menu_inventorylistview->deselect();
// item in trader inventory selected (BUY)
- menu_namelabel->set_text("Buy " + item->text());
+ menu_namelabel->set_text("Buy " + item->info()->name());
menu_buyallbutton->show();
menu_buyallbutton->set_command("remote buy " + item->info()->type()->label() + " " + item->info()->label() + " -1");
menu_buybutton->show();
- menu_buybutton->set_command("remote buy " + item->info()->type()->label() + " " + item->info()->label() + " 1; ");
+ menu_buybutton->set_command("remote buy " + item->info()->type()->label() + " " + item->info()->label() + " 1");
std::ostringstream str;
- str << "Price: " << std::setw(8) << item->item()->price() << '\n' << "Volume: " << std::setw(7) << std::setprecision(2) << item->info()->volume();
+ str << "Price: " << std::setw(8) << amount * item->item()->price() << '\n' << "Volume: " << std::setw(7) << std::setprecision(2) << amount * item->info()->volume();
menu_tradertext->set_text(str.str());
menu_sellallbutton->hide();
@@ -246,6 +258,12 @@ bool TradeMenu::on_emit(Widget *sender, const Event event, void *data)
void TradeMenu::draw()
{
+ // sanity check
+ if ((menu_inventorylistview->inventory() != (core::localcontrol() ? core::localcontrol()->inventory() : 0 )) ||
+ (menu_traderlistview->inventory() != (core::localplayer()->view() ? core::localplayer()->view()->inventory() : 0 ))) {
+ set_itemtype(menu_itemtype);
+ }
+
std::stringstream str;
str << "Credit: " << std::setw(8) << core::localplayer()->credits();