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>2009-04-15 17:08:51 +0000
committerStijn Buys <ingar@osirion.org>2009-04-15 17:08:51 +0000
commita95028547981614e06ea7a6d22b853b85418cea3 (patch)
treed4d6998a4118a4d8690ce138d586abfba4893179 /src/client/buymenu.cc
parent4f33f59571f10019c1e7a0e3640b2f69c159a8cf (diff)
added info registry, list_info
added network info transfer added info based buy menu and related game changes
Diffstat (limited to 'src/client/buymenu.cc')
-rw-r--r--src/client/buymenu.cc132
1 files changed, 132 insertions, 0 deletions
diff --git a/src/client/buymenu.cc b/src/client/buymenu.cc
new file mode 100644
index 0000000..b0a0b48
--- /dev/null
+++ b/src/client/buymenu.cc
@@ -0,0 +1,132 @@
+/*
+ client/buymenu.cc
+ This file is part of the Osirion project and is distributed under
+ the terms of the GNU General Public License version 2
+*/
+
+#include "ui/ui.h"
+#include "ui/button.h"
+#include "ui/paint.h"
+#include "client/buymenu.h"
+#include "core/info.h"
+#include "core/application.h"
+namespace client
+{
+
+BuyMenu::BuyMenu(ui::Widget *parent, const char * label) : ui::Window(parent)
+{
+ set_border(false);
+ set_background(true);
+
+ if (label)
+ set_label(label);
+ else
+ set_label("buymenu");
+
+ // model pane (left)
+ menu_modelpane = new ui::Window(this);
+ menu_modelpane->set_label("modelpane");
+ menu_modelpane->set_background(true);
+ menu_modelpane->set_border(true);
+
+ menu_closebutton = new ui::Button(menu_modelpane, "Close","view hide");
+
+ // text pane (right)
+ menu_textpane = new ui::Window(this);
+ menu_textpane->set_label("textpane");
+ menu_textpane->set_background(true);
+ menu_textpane->set_border(true);
+
+ menu_namelabel = new ui::Label(menu_textpane);
+ menu_namelabel->set_label("infolabel");
+ 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_buybutton = new ui::Button(menu_textpane, "Buy");
+ menu_scrollpane = new ui::ScrollPane(menu_textpane, menu_infotext);
+ menu_scrollpane->set_background(false);
+ menu_scrollpane->set_border(false);
+ menu_scrollpane->set_alignment(ui::AlignTop);
+
+ menu_infotimestamp = 0;
+ menu_inforecord = 0;
+
+ hide();
+}
+
+BuyMenu::~BuyMenu()
+{
+
+}
+
+void BuyMenu::set_item(std::string const & itemtype, std::string const & itemname)
+{
+ menu_itemtype.assign(itemtype);
+ aux::to_label(menu_itemtype);
+
+ menu_itemname.assign(itemname);
+ aux::to_label(menu_itemname);
+
+ menu_buybutton->set_command("remote buy " + itemtype + ' ' + itemname + "; view hide");
+ menu_buybutton->set_label("buy " + itemname);
+
+ menu_infotext.clear();
+ menu_namelabel->set_text(0);
+
+ core::Info *info = core::game()->info(itemtype+'/'+itemname);
+ if (info) {
+ menu_namelabel->set_text(info->name());
+ for (core::Info::Text::iterator it = info->text().begin(); it != info->text().end(); it++) {
+ menu_infotext.push_back((*it));
+ }
+ menu_infotimestamp = info->timestamp();
+ } else {
+ menu_infotext.push_back("Information is not available");
+ menu_infotimestamp = 0;
+ }
+
+ menu_inforecord = info;
+}
+
+void BuyMenu::resize()
+{
+ const float smallmargin = ui::UI::elementsize.height();
+
+ set_size(parent()->size());
+
+ // reposition model pane (left)
+ menu_modelpane->set_size(ui::UI::elementsize.width() * 1.5f, height() - smallmargin * 4.0f);
+ menu_modelpane->set_location(smallmargin, smallmargin * 2.0f);
+
+ menu_closebutton->set_size(ui::UI::elementsize);
+ menu_closebutton->set_location((menu_modelpane->width() - menu_closebutton->width()) * 0.5f,
+ menu_modelpane->height() - menu_closebutton->height() - ui::UI::elementsize.height() * 0.5f);
+
+ // reposition text pane (right)
+ menu_textpane->set_size(width() - smallmargin * 3.0f - menu_modelpane->width(), height() - smallmargin * 4.0f);
+ menu_textpane->set_location(smallmargin * 2.0f + menu_modelpane->width(), smallmargin * 2.0f);
+
+ menu_buybutton->set_size(ui::UI::elementsize);
+ menu_buybutton->set_location((menu_textpane->width() - menu_buybutton->width()) * 0.5f,
+ menu_textpane->height() - menu_buybutton->height() - ui::UI::elementsize.height() * 0.5f);
+
+ menu_namelabel->set_size(menu_textpane->width(), menu_namelabel->font()->height() * 2.0f);
+ menu_namelabel->set_location(0, 4);
+
+ menu_scrollpane->set_size(menu_textpane->width() - 8, menu_buybutton->top() - menu_namelabel->bottom() - 8 );
+ menu_scrollpane->set_location(4, menu_namelabel->bottom() + 4);
+
+}
+
+void BuyMenu::draw()
+{
+ // update content if necessary
+ if (menu_infotimestamp && (menu_infotimestamp != menu_inforecord->timestamp()))
+ set_item(menu_itemtype, menu_itemname);
+
+ ui::Window::draw();
+}
+
+}
+