diff options
author | Stijn Buys <ingar@osirion.org> | 2013-11-08 23:24:51 +0000 |
---|---|---|
committer | Stijn Buys <ingar@osirion.org> | 2013-11-08 23:24:51 +0000 |
commit | cf4deaa44bebafc829e21704f186e01faa2f940d (patch) | |
tree | 28197eb15173adac890abd077083c7586fb2ce45 /src/client/trademenu.cc | |
parent | 566cd41a05579a51a58c6969304297d5951223be (diff) |
More inventory and trade menu fancyfication.
Diffstat (limited to 'src/client/trademenu.cc')
-rw-r--r-- | src/client/trademenu.cc | 231 |
1 files changed, 122 insertions, 109 deletions
diff --git a/src/client/trademenu.cc b/src/client/trademenu.cc index 0023f1b..a16c5c4 100644 --- a/src/client/trademenu.cc +++ b/src/client/trademenu.cc @@ -21,62 +21,74 @@ TradeMenu::TradeMenu(ui::Widget *parent, const char * label) : ui::Window(parent { set_border(false); set_background(false); - if (label) + if (label) { set_label(label); - else + } else { set_label("trademenu"); + } + // container window menu_tradewindow = new ui::Window(this); menu_tradewindow->set_label("tradewindow"); menu_tradewindow->set_border(true); menu_tradewindow->set_background(true); - menu_modelview = new ui::ModelView(menu_tradewindow); + // ---- center pane pane + menu_pane_center = new ui::Widget(menu_tradewindow); + menu_pane_center->set_background(true); + menu_pane_center->set_border(true); + + // modelview, add it first so it gets rendered before anything else + menu_modelview = new ui::ModelView(menu_pane_center); menu_modelview->set_label("modelview"); menu_modelview->set_background(false); menu_modelview->set_border(false); - - menu_slider = new ui::Slider(menu_modelview); - //menu_slider->set_background(false); - //menu_slider->set_border(true); - - menu_modellabel = new ui::Label(menu_modelview); + + menu_modellabel = new ui::Label(menu_pane_center); menu_modellabel->set_background(false); menu_modellabel->set_border(false); menu_modellabel->set_alignment(ui::AlignCenter); - menu_msgtext = new ui::Label(menu_modelview); + menu_msgtext = new ui::Label(menu_pane_center); menu_msgtext->set_label("label"); menu_msgtext->set_background(false); menu_msgtext->set_border(false); menu_msgtext->set_alignment(ui::AlignCenter); + + menu_slider = new ui::Slider(menu_pane_center); + menu_slider->set_background(false); + menu_slider->set_border(true); + + menu_buybutton = new ui::Button(menu_pane_center, "Buy"); + + menu_scrollpane = new ui::ScrollPane(menu_pane_center, menu_infotext); + menu_scrollpane->set_background(false); + menu_scrollpane->set_border(false); + menu_scrollpane->set_alignment(ui::AlignTop); - menu_namelabel = new ui::Label(menu_tradewindow); - menu_namelabel->set_label("label"); - menu_namelabel->set_background(false); - menu_namelabel->set_border(false); - menu_namelabel->set_font(ui::root()->font_large()); - menu_namelabel->set_alignment(ui::AlignCenter); - menu_namelabel->show(); + // window title lable + menu_titlelabel = new ui::Label(menu_tradewindow); + menu_titlelabel->set_label("label"); + menu_titlelabel->set_background(false); + menu_titlelabel->set_border(false); + menu_titlelabel->set_font(ui::root()->font_large()); + menu_titlelabel->set_alignment(ui::AlignCenter); + menu_titlelabel->show(); // close button - menu_closebutton = new ui::IconButton(menu_namelabel, "bitmaps/icons/window_close"); + menu_closebutton = new ui::IconButton(menu_titlelabel, "bitmaps/icons/window_close"); menu_inventorylistview = new InventoryListView(menu_tradewindow); menu_inventorylistview->set_label("inventorylistview"); //menu_inventorylistview->set_background(false); //menu_inventorylistview->set_border(true); - menu_inventorytext = new ui::PlainText(menu_tradewindow); + menu_inventorytext = new ui::Label(menu_tradewindow); menu_inventorytext->set_label("inventorytext"); menu_inventorytext->set_background(true); menu_inventorytext->set_border(true); menu_inventorytext->set_font(ui::root()->font_small()); - - 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_inventorytext->set_alignment(ui::AlignLeft | ui::AlignTop); menu_traderlistview = new InventoryListView(menu_tradewindow); menu_traderlistview->set_label("traderlistview"); @@ -84,13 +96,12 @@ TradeMenu::TradeMenu(ui::Widget *parent, const char * label) : ui::Window(parent //menu_traderlistview->set_border(true); menu_traderlistview->set_showempty(true); - menu_tradertext = new ui::PlainText(menu_tradewindow); + menu_tradertext = new ui::Label(menu_tradewindow); menu_tradertext->set_label("tradertext"); menu_tradertext->set_background(true); menu_tradertext->set_border(true); menu_tradertext->set_font(ui::root()->font_small()); - - menu_buybutton = new ui::Button(menu_tradewindow, "Buy"); + menu_inventorytext->set_alignment(ui::AlignLeft | ui::AlignTop); menu_listitem = 0; @@ -137,9 +148,10 @@ void TradeMenu::set_item(ui::ListItem *item) title.append ("TRADER"); aux::to_uppercase(title); - menu_namelabel->set_text(title); + menu_titlelabel->set_text(title); - menu_tradertext->set_text("TRADER"); + menu_tradertext->set_text(aux::pad_left("TRADER", 19)); + menu_modellabel->clear(); menu_msgtext->clear(); menu_msgtext->hide(); menu_slider->hide(); @@ -155,13 +167,27 @@ void TradeMenu::set_item(ui::ListItem *item) if (!item || !item->info()) { menu_traderlistview->deselect(); - menu_inventorylistview->deselect(); - - menu_scrollpane->hide(); + menu_inventorylistview->deselect(); menu_modelview->hide(); + menu_buybutton->hide(); + menu_slider->set_range(0, 2); menu_slider->set_value(1); + + if (core::localplayer()->view() && core::localplayer()->view()->info()) { + for (core::Info::Text::const_iterator it = core::localplayer()->view()->info()->text().begin(); it != core::localplayer()->view()->info()->text().end(); it++) { + menu_infotext.push_back((*it)); + } + menu_scrollpane->show(); + + menu_msgtext->set_text(core::localplayer()->view()->info()->name()); + menu_msgtext->show(); + } else { + menu_scrollpane->hide(); + } return; + } else { + menu_buybutton->show(); } long amount = 0; @@ -208,9 +234,9 @@ void TradeMenu::set_item(ui::ListItem *item) } std::ostringstream str; - str << "TRADER" << '\n' << '\n'; - str << "Price: " << std::setw(12) << (amount > 0 ? amount : 1) * trader_item->price() << '\n' - << "Volume: " << std::setw(12) << (float)(amount > 0 ? amount : 1) * trader_item->info()->volume(); + str << aux::pad_left("TRADER", 19) << '\n' << '\n'; + str << "Price: " << std::setw(11) << (amount > 0 ? amount : 1) * trader_item->price() << '\n'; + str << "Volume: " << std::setw(11) << (float)(amount > 0 ? amount : 1) * trader_item->info()->volume(); menu_tradertext->set_text(str.str()); } else { menu_msgtext->set_text("^1Can not sell here"); @@ -262,10 +288,9 @@ void TradeMenu::set_item(ui::ListItem *item) } std::ostringstream str; - str << "TRADER" << '\n' << '\n'; - - str << "Price: " << std::setw(12) << (amount > 0 ? (float) amount : 1.0f) * item->item()->price() << '\n' - << "Volume: " << std::setw(12) << (amount > 0 ? (float) amount : 1.0f) * item->info()->volume() << '\n'; + str << aux::pad_left("TRADER", 19) << '\n' << '\n'; + str << "Price: " << std::setw(11) << (amount > 0 ? (float) amount : 1.0f) * item->item()->price() << '\n'; + str << "Volume: " << std::setw(11) << (amount > 0 ? (float) amount : 1.0f) * item->info()->volume() << '\n'; menu_tradertext->set_text(str.str()); } @@ -281,94 +306,82 @@ void TradeMenu::set_item(ui::ListItem *item) void TradeMenu::resize() { const float smallmargin = ui::UI::elementsize.height(); - const float fontmargin = ui::root()->font_large()->height(); + const float padding = ui::root()->font_large()->height(); // this menu takes the entire screen set_size(parent()->size()); - // resize the subwindow + // resize the container window menu_tradewindow->set_size(width() - smallmargin * 2.0f, height()- smallmargin * 4.0f); menu_tradewindow->set_location(smallmargin, smallmargin * 2.0f); + // ---- window title + // resize label - menu_namelabel->set_size(menu_tradewindow->width() - fontmargin * 2.0f, menu_namelabel->font()->height()); - menu_namelabel->set_location(fontmargin, fontmargin); + menu_titlelabel->set_size(menu_tradewindow->width() - padding * 2.0f, menu_titlelabel->font()->height()); + menu_titlelabel->set_location(padding, padding); // resize close button - menu_closebutton->set_size(menu_namelabel->font()->height(), menu_namelabel->font()->height()); - menu_closebutton->set_location(menu_namelabel->width() - menu_closebutton->width(), 0); + menu_closebutton->set_size(menu_titlelabel->font()->height(), menu_titlelabel->font()->height()); + menu_closebutton->set_location(menu_titlelabel->width() - menu_closebutton->width(), 0.0f); + + // ---- left // resize player inventory text - menu_inventorytext->set_size( - ui::UI::elementsize.width(), - fontmargin * 3.0f - ); - menu_inventorytext->set_location(fontmargin, menu_namelabel->bottom() + fontmargin); + menu_inventorytext->set_size(ui::UI::elementsize.width(), menu_inventorytext->font()->height() * 5.0f); + menu_inventorytext->set_location(padding, menu_titlelabel->bottom() + padding); // resize player inventory listview - menu_inventorylistview->set_size( - ui::UI::elementsize.width(), - menu_tradewindow->height() - menu_inventorytext->bottom() - 2.0f * fontmargin - ); - menu_inventorylistview->set_location( - fontmargin, - menu_inventorytext->bottom() + fontmargin - ); + menu_inventorylistview->set_size(ui::UI::elementsize.width(), menu_tradewindow->height() - menu_inventorytext->bottom() - 2.0f * padding); + menu_inventorylistview->set_location(padding, menu_inventorytext->bottom() + padding); + // ---- right - // 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 trader inventory text + menu_tradertext->set_size(ui::UI::elementsize.width(), menu_inventorytext->font()->height() * 5.0f); + menu_tradertext->set_location(menu_tradewindow->width() - ui::UI::elementsize.width() - padding, menu_titlelabel->bottom() + padding); + + // resize trader inventory listview + menu_traderlistview->set_size(ui::UI::elementsize.width(), menu_tradewindow->height() - menu_tradertext->bottom() - 2.0f * padding); + menu_traderlistview->set_location(menu_tradewindow->width() - ui::UI::elementsize.width() - padding, menu_tradertext->bottom() + padding); + + // ---- center pane - // resize modelview title label - menu_modellabel->set_location(0, 0); - menu_modellabel->set_size(menu_modelview->width(), menu_modellabel->font()->height()); + menu_pane_center->set_size(menu_tradertext->left() - menu_inventorytext->right() - 2.0f * padding, menu_tradewindow->height() - menu_titlelabel->bottom() - 2.0f * padding); + menu_pane_center->set_location(menu_inventorytext->right() + padding, menu_titlelabel->bottom() + padding); - // resize slider - menu_slider->set_size(menu_modelview->width(), menu_slider->font()->height()); - menu_slider->set_location(0, menu_modelview->height() - menu_slider->height()); + { + const ui::Widget *pane = menu_pane_center; + const float margin_horizontal = pane->font()->width(); + const float margin_vertical = pane->font()->height() * 0.5f; + + // resize modelview title label + menu_modellabel->set_size(pane->width() - 2.0f * margin_horizontal, menu_modellabel->font()->height()); + menu_modellabel->set_location(margin_horizontal, margin_vertical); - // warning text - menu_msgtext->set_size(menu_slider->size()); - menu_msgtext->set_location(menu_slider->location()); - - // resize trader inventory text - menu_tradertext->set_size( - ui::UI::elementsize.width(), - fontmargin * 3.0f - ); - menu_tradertext->set_location( - menu_tradewindow->width() - ui::UI::elementsize.width() - fontmargin, - menu_namelabel->bottom() + fontmargin - ); + // resize modelview + menu_modelview->set_size(pane->width() - 2.0f * margin_horizontal, ui::UI::elementsize.width()); + menu_modelview->set_location(margin_horizontal, menu_modellabel->bottom() + margin_vertical); + + // warning text + menu_msgtext->set_size(pane->width() - 2.0f * margin_horizontal, menu_msgtext->font()->height()); + menu_msgtext->set_location(margin_horizontal, menu_modelview->bottom() + margin_vertical); - // resize trader inventory listview - menu_traderlistview->set_size( - ui::UI::elementsize.width(), - menu_tradewindow->height() - menu_tradertext->bottom() - 2.0f * fontmargin - ); - menu_traderlistview->set_location( - menu_tradewindow->width() - ui::UI::elementsize.width() - fontmargin, - menu_tradertext->bottom() + fontmargin - ); - - // resize buttons - menu_buybutton->set_size(ui::UI::elementsize); - menu_buybutton->set_location( - menu_modelview->left() + (menu_modelview->width() - menu_buybutton->width()) * 0.5f, - menu_modelview->bottom() + fontmargin - ); - - // resize infotext scrollpane - menu_scrollpane->set_size( - menu_tradewindow->width() - 2.0f * ui::UI::elementsize.width() - fontmargin * 4.0f, - menu_tradewindow->height() - menu_buybutton->bottom() - fontmargin * 2.0f - ); - - menu_scrollpane->set_location( - fontmargin * 2.0f + ui::UI::elementsize.width(), - menu_buybutton->bottom() + fontmargin - ); + // resize slider + menu_slider->set_size( + math::min(pane->width() - padding * 2.0f - margin_horizontal * 2.0f, ui::UI::elementsize.width() * 2.5f), + menu_slider->font()->height() + ); + menu_slider->set_location((pane->width() - menu_slider->width()) * 0.5f, menu_msgtext->top()); + + // resize button + menu_buybutton->set_size(ui::UI::elementsize); + menu_buybutton->set_location((pane->width() - menu_buybutton->width()) * 0.5f, menu_msgtext->bottom() + padding); + + // resize infotext scrollpane + menu_scrollpane->set_size(pane->width() - 2.0f * margin_horizontal, pane->height() - menu_buybutton->bottom() - margin_vertical - padding); + menu_scrollpane->set_location(margin_horizontal, menu_buybutton->bottom() + padding); + } } bool TradeMenu::on_emit(Widget *sender, const Event event, void *data) @@ -417,7 +430,7 @@ void TradeMenu::draw() str << "INVENTORY" << '\n' << '\n'; - str << "Credits: " << aux::pad_left(creditstr.str(),12); + str << "Credits: " << aux::pad_left(creditstr.str(), 10); if (core::localcontrol() && core::localcontrol()->inventory()) { core::Inventory *inventory = core::localcontrol()->inventory(); @@ -425,7 +438,7 @@ void TradeMenu::draw() std::stringstream cargostr; cargostr << inventory->capacity_used() << " of " << inventory->capacity(); - str << '\n' << "Cargo: " << aux::pad_left(cargostr.str(),12); + str << '\n' << "Cargo: " << aux::pad_left(cargostr.str(),12); } menu_inventorytext->set_text(str.str()); |