00001
00002
00003
00004
00005
00006 #include <string>
00007 #include "Menu/CCGui.h"
00008 #include "Menu/CCButton.h"
00009 #include "Menu/CCTable.h"
00010 #include "Menu/CCListModel.h"
00011 #include "Menu/CCListBox.h"
00012 #include "Menu/CCTextField.h"
00013 #include "Menu/CCLabel.h"
00014 #include "Menu/CCFont.h"
00015 #include "Callback.h"
00016 #include "Economy.h"
00017 #include "City.h"
00018 #include "CityEconomy.h"
00019 #include "CityManager.h"
00020 #include "Product.h"
00021 #include "EconomyScreen.h"
00022
00023 using namespace std;
00024
00025 EconomyScreen::EconomyScreen(CityManager* Manager, int Width, int Height) {
00026 unsigned int i;
00027 string CityName;
00028 CCLabel* tempLabel;
00029
00030 m_CityManager = Manager;
00031
00032 Log::s_log->DebugMessage("Setting Callbacks");
00033 m_HideCallback.SetCallback(this, &EconomyScreen::HideMe);
00034 m_StepCallback.SetCallback(this, &EconomyScreen::StepEconomy);
00035 m_ListBoxCallback.SetCallback(this, &EconomyScreen::ListBoxCallback);
00036
00037 m_listModel = new CCListModel();
00038 m_top = new gcn::Container();
00039 m_top->setDimension(gcn::Rectangle(0,0,Width, Height));
00040
00041 Log::s_log->DebugMessage("Adding Cities to the CCListModel");
00042 for (i = 0;
00043 i < m_CityManager->NumberCities();
00044 i++) {
00045 CityName = m_CityManager->GetCity(i)->getName();
00046 m_listModel->AddItem(CityName);
00047 }
00048
00049 m_Cities = new CCListBox(m_listModel, &m_ListBoxCallback);
00050 m_CityName = new CCLabel("", "systemBlack.png");
00051 m_CityLabel = new CCLabel("City Name", "systemBlack.png");
00052 m_StepEconomy = new CCButton("Step Economy",
00053 "Step",
00054 "systemBlack.png",
00055 "systemWhite.png",
00056 "systemBlack.png",
00057 &m_StepCallback);
00058
00059 m_Table = new CCTable(2, Economy::s_economy->ProductCount() + 1);
00060 m_Table->setColumnBuffer(10);
00061 tempLabel = new CCLabel("Product", "systemBlack.png");
00062 m_Table->add(0, 0, tempLabel);
00063 tempLabel = new CCLabel("Price", "systemBlack.png");
00064 m_Table->add(1, 0, tempLabel);
00065
00066 for (i = 0; i < Economy::s_economy->ProdList.size(); i++) {
00067 tempLabel = new CCLabel(Economy::s_economy->ProdList[i], "systemBlack.png");
00068 m_Table->add(0, i+1, tempLabel);
00069 tempLabel = new CCLabel("0", "systemBlack.png");
00070 m_Table->add(1, i+1, tempLabel);
00071 }
00072
00073 m_top->setBorderSize(2);
00074 m_top->setOpaque(true);
00075 m_top->add(m_Cities, 0,0);
00076 m_top->add(m_Table, 200, 100);
00077 m_top->add(m_CityLabel, 200, 0);
00078 m_top->add(m_CityName, 200, 20);
00079 m_top->add(m_StepEconomy, m_top->getWidth() - m_StepEconomy->getWidth(),
00080 m_top->getHeight() - m_StepEconomy->getHeight());
00081 ShowScreen(false);
00082
00083 Log::s_log->DebugMessage("EconomyScreen Created");
00084 }
00085
00086 EconomyScreen::~EconomyScreen() {
00087 delete m_Table;
00088
00089 delete m_StepEconomy;
00090 delete m_Cities;
00091 delete m_listModel;
00092 delete m_CityLabel;
00093 delete m_CityName;
00094 delete m_top;
00095 }
00096
00097 bool EconomyScreen::ToggleShowScreen() {
00098 ShowScreen(!m_top->isVisible());
00099 return m_top->isVisible();
00100 }
00101
00102 void EconomyScreen::ShowScreen(bool Show) {
00103 m_top->setVisible(Show);
00104 }
00105
00106 void EconomyScreen::StepEconomy(int n) {
00107 Economy::s_economy->Step();
00108 ListBoxCallback(n);
00109 }
00110
00111 void EconomyScreen::HideMe(int n) {
00112 ShowScreen(false);
00113 }
00114
00115 void EconomyScreen::ListBoxCallback(int n) {
00116 CCLabel* tempLabel;
00117 unsigned int i;
00118 CityEconomy* CE;
00119 Product* tempProd;
00120 string cityName;
00121 try {
00122 cityName = m_listModel->getElementAt(m_Cities->getSelected());
00123 } catch (...) {return;}
00124 m_CityName->setCaption(cityName);
00125 m_CityName->adjustSize();
00126
00127 CE = m_CityManager->GetCity(cityName.c_str())->MyEconomy;
00128 for (i = 0; i < CE->GetProductList().size(); i++) {
00129 tempLabel = (CCLabel*)m_Table->getWidget(1, i+1);
00130 tempProd = CE->GetProductList()[i];
00131 tempLabel->SetCaption(CE->GetPrice(tempProd->GetName()), 2);
00132 tempLabel->adjustSize();
00133 }
00134 }
00135
00136 gcn::Widget* EconomyScreen::GetWidget() {
00137 return m_top;
00138 }