src/EconomyScreen.cpp

Go to the documentation of this file.
00001 /*
00002  * Economy Screen Class
00003  * Crown and Cutlass
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   //delete m_HideMenu;
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 }

Generated on Mon Jan 8 22:34:12 2007 for CrownandCutlass by  doxygen 1.4.7