K3dGui.cpp

Go to the documentation of this file.
00001 
00011 /***************************************************************************
00012  *   Copyright (C) 2007 by Jan Koci   *
00013  *   honza.koci@email.cz   *
00014  *   http://kengine.sourceforge.net/tutorial/
00015  *                                                                         *
00016  *   This program is free software; you can redistribute it and/or modify  *
00017  *   it under the terms of the GNU General Public License as published by  *
00018  *   the Free Software Foundation; either version 2 of the License, or     *
00019  *   (at your option) any later version.                                   *
00020  *                                                                         *
00021  *   This program is distributed in the hope that it will be useful,       *
00022  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
00023  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
00024  *   GNU General Public License for more details.                          *
00025  *                                                                         *
00026  *   You should have received a copy of the GNU General Public License     *
00027  *   along with this program; if not, write to the                         *
00028  *   Free Software Foundation, Inc.,                                       *
00029  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
00030  ***************************************************************************/
00031 
00032 #include "K3dGui.h"
00033 
00034 K3dGui::K3dGui(K3dGameData *_pGameData)
00035 {
00036         m_pGameData = _pGameData;
00037         m_pGui = NULL;
00038         m_pInput = NULL;
00039         m_pGraphics = NULL;
00040         m_pImageLoader = NULL;
00041         m_bIsLoadGui = false;
00042 }
00043 
00044 K3dGui::~K3dGui(void)
00045 {
00046         cout << "K3dGui::~K3dGui(void)" << endl;
00047         DeleteGui();
00048 }
00049 
00051 void K3dGui::DeleteGui()
00052 {
00053         cout << "K3dGui::DeleteGui()" << endl;
00054         if(m_bIsLoadGui == true)
00055         {
00056                 m_bIsGuiDeleted = true;
00057                 unsigned int i=0;
00058                 for(i=0; i<m_tGuiFontArray.size(); i++)
00059                 {
00060                         delete m_tGuiFontArray[i];
00061                 }
00062                 m_tGuiFontArray.clear();
00063                 for(i=0; i<m_tGuiWindowArray.size(); i++)
00064                 {
00065                         delete m_tGuiWindowArray[i];
00066                 }
00067                 m_tGuiWindowArray.clear();
00068                 for(i=0; i<m_tGuiLabelArray.size(); i++)
00069                 {
00070                         delete m_tGuiLabelArray[i];
00071                 }
00072                 m_tGuiLabelArray.clear();
00073                 for(i=0; i<m_tGuiIconArray.size(); i++)
00074                 {
00075                         delete m_tGuiIconArray[i];
00076                 }
00077                 m_tGuiIconArray.clear();
00078                 for(i=0; i<m_tGuiButtonArray.size(); i++)
00079                 {
00080                         delete m_tGuiButtonArray[i];
00081                 }
00082                 m_tGuiButtonArray.clear();
00083                 for(i=0; i<m_tGuiTextFieldArray.size(); i++)
00084                 {
00085                         delete m_tGuiTextFieldArray[i];
00086                 }
00087                 m_tGuiTextFieldArray.clear();
00088                 for(i=0; i<m_tGuiTextBoxArray.size(); i++)
00089                 {
00090                         delete m_tGuiTextBoxArray[i];
00091                 }
00092                 m_tGuiTextBoxArray.clear();
00093                 for(i=0; i<m_tGuiScrollAreaArray.size(); i++)
00094                 {
00095                         delete m_tGuiScrollAreaArray[i];
00096                 }
00097                 m_tGuiScrollAreaArray.clear();
00098                 for(i=0; i<m_tGuiListBoxArray.size(); i++)
00099                 {
00100                         delete m_tGuiListBoxArray[i];
00101                 }
00102                 m_tGuiListBoxArray.clear();
00103                 for(i=0; i<m_tGuiDropDownArray.size(); i++)
00104                 {
00105                         delete m_tGuiDropDownArray[i];
00106                 }
00107                 m_tGuiDropDownArray.clear();
00108                 for(i=0; i<m_tGuiCheckBoxArray.size(); i++)
00109                 {
00110                         delete m_tGuiCheckBoxArray[i];
00111                 }
00112                 m_tGuiCheckBoxArray.clear();
00113                 for(i=0; i<m_tGuiRadioButtonArray.size(); i++)
00114                 {
00115                         delete m_tGuiRadioButtonArray[i];
00116                 }
00117                 m_tGuiRadioButtonArray.clear();
00118                 for(i=0; i<m_tGuiSliderArray.size(); i++)
00119                 {
00120                         delete m_tGuiSliderArray[i];
00121                 }
00122                 m_tGuiSliderArray.clear();
00123                 for(i=0; i<m_tGuiImageArray.size(); i++)
00124                 {
00125                         delete m_tGuiImageArray[i];
00126                 }
00127                 m_tGuiImageArray.clear();
00128                 for(i=0; i<m_tGuiContainerArray.size(); i++)
00129                 {
00130                         delete m_tGuiContainerArray[i];
00131                 }
00132                 m_tGuiContainerArray.clear();
00133                 for(i=0; i<m_tGuiListModelArray.size(); i++)
00134                 {
00135                         delete m_tGuiListModelArray[i];
00136                 }
00137                 m_tGuiListModelArray.clear();
00138                 if(m_pInput)
00139                 {
00140                         delete m_pInput;
00141                         m_pInput = NULL;
00142                 }
00143                 if(m_pGraphics)
00144                 {
00145                         delete m_pGraphics;
00146                         m_pGraphics = NULL;
00147                 }
00148                 if(m_pImageLoader)
00149                 {
00150                         delete m_pImageLoader;
00151                         m_pImageLoader = NULL;
00152                 }
00153                 if(m_pGui)
00154                 {
00155                         delete m_pGui;
00156                         m_pGui = NULL;
00157                 }
00158         }
00159 }
00160 
00162 void K3dGui::DrawGui()
00163 {
00164         if(m_bIsLoadGui == true)
00165         {
00166                 if(m_bIsGuiDeleted == false)
00167                 {
00168                         // Let the gui perform it's logic (like handle input)
00169                         m_pGui->logic();
00170                         // Draw the gui
00171                         m_pGui->draw();
00172                 }
00173         }
00174 }
00175 
00177 void K3dGui::SetTargetPlane(const int _iWidth, const int _iHeight)
00178 {
00179         m_pGraphics->setTargetPlane(_iWidth, _iHeight);
00180 }
00181 
00183 void K3dGui::LoadGui()
00184 {
00185         cout << "void K3dGui::LoadGui()" << endl;
00186         m_strFc = "void K3dGui::LoadGui() -- ";
00187         // Check if is needed load gui
00188         m_bIsLoadGui = false;
00189         // Get virtual machine from global data
00190         m_pLua = m_pGameData->GetLua();
00191         m_pLua->LuaGetGlobal(K_STR_LOAD_GUI);
00192     if (!m_pLua->LuaIsBoolean(-1))
00193         {
00194         m_strOut = m_strFc + K_STR_LOAD_GUI;
00195                 m_strOut += " is not a boolean number";
00196                 m_pLua->LuaError(m_strOut.GetString().c_str());
00197     }
00198         m_bIsLoadGui = (bool) m_pLua->LuaToBoolean(-1);
00199         if(m_bIsLoadGui == true)
00200         {
00201                 if(m_pGui == NULL)
00202                 {
00203                         m_pGui = new gcn::Gui;
00204                 }
00205                 TGraphicOption *ptGOption = m_pGameData->GetGraphicOption();
00206                 int iWidth = ptGOption->iWidth;
00207                 int iHeight = ptGOption->iHeight;
00208                 // We want unicode
00209                 SDL_EnableUNICODE(1);
00210                 // We want to enable key repeat
00211                 SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL);
00212                 m_pImageLoader = new gcn::OpenGLSDLImageLoader();
00213                 // The ImageLoader in use is static and must be set to be
00214                 // able to load images
00215                 gcn::Image::setImageLoader(m_pImageLoader);
00216                 m_pGraphics = new gcn::OpenGLGraphics();
00217                 // We need to tell OpenGL graphics how big the screen is.
00218                 //graphics->setTargetPlane(640, 480);
00219                 m_pGraphics->setTargetPlane(iWidth, iHeight);
00220                 m_pInput = new gcn::SDLInput();
00221                 // Set gui to use the SDLGraphics object.
00222                 m_pGui->setGraphics(m_pGraphics);
00223                 // Set gui to use the SDLInput object
00224                 m_pGui->setInput(m_pInput);
00225                 LoadGuiImages();
00226                 LoadGuiIcons();
00227                 LoadGuiFonts();
00228                 LoadGuiLabels();
00229                 LoadGuiButtons();
00230                 LoadGuiTextFields();
00231                 LoadGuiTextBoxes();
00232                 LoadGuiListModels();
00233                 LoadGuiListBoxes();
00234                 LoadGuiDropDown();
00235                 LoadGuiCheckBoxes();
00236                 LoadGuiRadioButtons();
00237                 LoadGuiSliders();
00238                 LoadGuiContainers();
00239                 LoadGuiScrollAreas();
00240                 LoadGuiWindows();
00241                 SetGuiDependencies();
00242                 m_bIsGuiDeleted = false;
00243         }
00244 }
00245 
00247 void K3dGui::LoadGuiImages()
00248 {
00249         cout << "void K3dGui::LoadGuiImages()" << endl;
00250         // Get number of gui images
00251         m_pLua->LuaGetGlobal(K_STR_NUM_GUI_IMAGES);
00252     if (!m_pLua->LuaIsNumber(-1))
00253         {
00254         m_strOut = m_strFc + K_STR_NUM_GUI_IMAGES;
00255                 m_strOut += " is not a valid number";
00256                 m_pLua->LuaError(m_strOut.GetString().c_str());
00257     }
00258         int iNum = (int) m_pLua->LuaToNumber(-1);
00259         for(int i=0; i<iNum; i++)
00260         {
00261                 K3dString kString(K_STR_GUI_IMAGE);
00262                 // Add number behind string
00263                 kString.AddNumber(i);
00264                 m_pLua->LuaGetGlobal(kString.GetString().c_str());
00265                 if (!m_pLua->LuaIsTable(-1))
00266                 {
00267                         m_strOut = m_strFc + kString;
00268                         m_strOut += " is not a valid line table";
00269                         m_pLua->LuaError(m_strOut.GetString().c_str());
00270                 }
00271                 const char* strTexture = m_pLua->LuaGetFieldString(K_STR_TEXTURE_TABLE);
00272                 K3dString strTextureName = m_pGameData->GetPath(K_PATH_APP) + strTexture;
00273                 gcn::Image* pImage = gcn::Image::load(strTextureName.GetString().c_str());
00274                 //m_tGuiImageArray.push_back(pImage);
00275                 K3dGuiImage *pK3dImage = new K3dGuiImage();
00276                 m_tGuiImageArray.push_back(pK3dImage);
00277                 pK3dImage->SetImage(pImage);
00278                 pK3dImage->GetName() = m_pLua->LuaGetFieldString(K_STR_NAME);
00279                 pK3dImage->GetObjectType() = K3D_GUI_IMAGE_OBJ;
00280                 pK3dImage->GetObjectId() = (int) m_tGuiImageArray.size() -1;
00281         }
00282 }
00283 
00285 void K3dGui::LoadGuiIcons()
00286 {
00287         cout << "void K3dGui::LoadGuiIcons()" << endl;
00288         // Get number of gui icons
00289         m_pLua->LuaGetGlobal(K_STR_NUM_GUI_ICONS);
00290     if (!m_pLua->LuaIsNumber(-1))
00291         {
00292         m_strOut = m_strFc + K_STR_NUM_GUI_ICONS;
00293                 m_strOut += " is not a valid number";
00294                 m_pLua->LuaError(m_strOut.GetString().c_str());
00295     }
00296         int iNum = (int) m_pLua->LuaToNumber(-1);
00297         for(int i=0; i<iNum; i++)
00298         {
00299                 K3dString kString(K_STR_GUI_ICON);
00300                 // Add number behind string
00301                 kString.AddNumber(i);
00302                 m_pLua->LuaGetGlobal(kString.GetString().c_str());
00303                 if (!m_pLua->LuaIsTable(-1))
00304                 {
00305                         m_strOut = m_strFc + kString;
00306                         m_strOut += " is not a valid line table";
00307                         m_pLua->LuaError(m_strOut.GetString().c_str());
00308                 }
00309                 const char* strImage = m_pLua->LuaGetFieldString(K_STR_IMAGE);
00310                 //int iImageId = (int) m_pLua->LuaGetFieldNumber(K_STR_GUI_IMAGE_ID);
00311                 K3dGuiImage *pImage = FindImage(strImage);
00312                 if(pImage)
00313                 {
00314                         //K3dGuiIcon* pIcon = new K3dGuiIcon(m_tGuiImageArray[iImageId]->GetImage());
00315                         K3dGuiIcon* pIcon = new K3dGuiIcon(pImage->GetImage());
00316                         m_tGuiIconArray.push_back(pIcon);
00317                         pIcon->GetName() = m_pLua->LuaGetFieldString(K_STR_NAME);
00318                         pIcon->GetIsResizeContent() = m_pLua->LuaGetFieldBool(K_STR_RESIZE_CONTENT);
00319                         pIcon->GetObjectType() = K3D_GUI_ICON_OBJ;
00320                         pIcon->GetObjectId() = (int) m_tGuiIconArray.size() -1;
00321                 }
00322                 else
00323                 {
00324                         cerr << "Error :: void K3dGui::LoadGuiIcons() - Image Object " << strImage << " doesn`t exists !!!" << endl;
00325                 }
00326         }
00327 }
00328 
00330 void K3dGui::LoadGuiFonts()
00331 {
00332         cout << "void K3dGui::LoadGuiFonts()" << endl;
00333         // Get number of gui fonts
00334         m_pLua->LuaGetGlobal(K_STR_NUM_GUI_FONTS);
00335     if (!m_pLua->LuaIsNumber(-1))
00336         {
00337         m_strOut = m_strFc + K_STR_NUM_GUI_FONTS;
00338                 m_strOut += " is not a valid number";
00339                 m_pLua->LuaError(m_strOut.GetString().c_str());
00340     }
00341         int iNum = (int) m_pLua->LuaToNumber(-1);
00342         for(int i=0; i<iNum; i++)
00343         {
00344                 K3dString kString(K_STR_GUI_FONT);
00345                 // Add number behind string
00346                 kString.AddNumber(i);
00347                 m_pLua->LuaGetGlobal(kString.GetString().c_str());
00348                 if (!m_pLua->LuaIsTable(-1))
00349                 {
00350                         m_strOut = m_strFc + kString;
00351                         m_strOut += " is not a valid line table";
00352                         m_pLua->LuaError(m_strOut.GetString().c_str());
00353                 }
00354                 const char* strFont = m_pLua->LuaGetFieldString(K_STR_FONT_LOWER);
00355                 const char* strGlyph = m_pLua->LuaGetFieldString(K_STR_GLYPH);
00356                 K3dString strFontName = m_pGameData->GetPath(K_PATH_APP) + strFont;
00357                 // Load the image font.
00358                 K3dGuiImageFont *pFont = new K3dGuiImageFont(strFontName.GetString(), strGlyph);
00359                 m_tGuiFontArray.push_back(pFont);
00360                 // The global font is static and must be set.
00361                 gcn::Widget::setGlobalFont(pFont);
00362                 pFont->GetName() = m_pLua->LuaGetFieldString(K_STR_NAME);
00363                 pFont->GetObjectType() = K3D_GUI_FONT_OBJ;
00364                 pFont->GetObjectId() = (int) m_tGuiFontArray.size() -1;
00365         }
00366 }
00367 
00369 void K3dGui::LoadGuiLabels()
00370 {
00371         cout << "void K3dGui::LoadGuiLabels()" << endl;
00372         // Get number of gui labels
00373         m_pLua->LuaGetGlobal(K_STR_NUM_GUI_LABELS);
00374     if (!m_pLua->LuaIsNumber(-1))
00375         {
00376         m_strOut = m_strFc + K_STR_NUM_GUI_LABELS;
00377                 m_strOut += " is not a valid number";
00378                 m_pLua->LuaError(m_strOut.GetString().c_str());
00379     }
00380         int iNum = (int) m_pLua->LuaToNumber(-1);
00381         for(int i=0; i<iNum; i++)
00382         {
00383                 K3dString kString(K_STR_GUI_LABEL);
00384                 // Add number behind string
00385                 kString.AddNumber(i);
00386                 m_pLua->LuaGetGlobal(kString.GetString().c_str());
00387                 if (!m_pLua->LuaIsTable(-1))
00388                 {
00389                         m_strOut = m_strFc + kString;
00390                         m_strOut += " is not a valid line table";
00391                         m_pLua->LuaError(m_strOut.GetString().c_str());
00392                 }
00393                 const char* strCaption = m_pLua->LuaGetFieldString(K_STR_CAPTION);
00394                 K3dGuiLabel *pLabel = new K3dGuiLabel(strCaption);
00395                 m_tGuiLabelArray.push_back(pLabel);
00396                 pLabel->GetName() = m_pLua->LuaGetFieldString(K_STR_NAME);
00397                 pLabel->GetPosX() = (int) m_pLua->LuaGetFieldNumber(K_STR_POS_X);
00398                 pLabel->GetPosY() = (int) m_pLua->LuaGetFieldNumber(K_STR_POS_Y);
00399                 pLabel->GetObjectType() = K3D_GUI_LABEL_OBJ;
00400                 pLabel->GetObjectId() = (int) m_tGuiLabelArray.size() -1;
00401                 cout << "Label Name = " << m_tGuiLabelArray[pLabel->GetObjectId()]->GetName().GetString() << endl;
00402         }
00403 }
00404 
00406 void K3dGui::LoadGuiButtons()
00407 {
00408         cout << "void K3dGui::LoadGuiButtons()" << endl;
00409         // Get number of gui buttons
00410         m_pLua->LuaGetGlobal(K_STR_NUM_GUI_BUTTONS);
00411     if (!m_pLua->LuaIsNumber(-1))
00412         {
00413         m_strOut = m_strFc + K_STR_NUM_GUI_BUTTONS;
00414                 m_strOut += " is not a valid number";
00415                 m_pLua->LuaError(m_strOut.GetString().c_str());
00416     }
00417         int iNum = (int) m_pLua->LuaToNumber(-1);
00418         for(int i=0; i<iNum; i++)
00419         {
00420                 K3dString kString(K_STR_GUI_BUTTON);
00421                 // Add number behind string
00422                 kString.AddNumber(i);
00423                 m_pLua->LuaGetGlobal(kString.GetString().c_str());
00424                 if (!m_pLua->LuaIsTable(-1))
00425                 {
00426                         m_strOut = m_strFc + kString;
00427                         m_strOut += " is not a valid line table";
00428                         m_pLua->LuaError(m_strOut.GetString().c_str());
00429                 }
00430                 const char* strCaption = m_pLua->LuaGetFieldString(K_STR_CAPTION);
00431                 K3dGuiButton *pButton = new K3dGuiButton(strCaption);
00432                 m_tGuiButtonArray.push_back(pButton);
00433                 pButton->GetName() = m_pLua->LuaGetFieldString(K_STR_NAME);
00434                 pButton->setWidth((int) m_pLua->LuaGetFieldNumber(K_STR_WIDTH));
00435                 pButton->setHeight((int) m_pLua->LuaGetFieldNumber(K_STR_HEIGHT));
00436                 pButton->GetPosX() = (int) m_pLua->LuaGetFieldNumber(K_STR_POS_X);
00437                 pButton->GetPosY() = (int) m_pLua->LuaGetFieldNumber(K_STR_POS_Y);
00438                 pButton->GetObjectType() = K3D_GUI_BUTTON_OBJ;
00439                 pButton->GetObjectId() = (int) m_tGuiButtonArray.size() -1;
00440         }
00441 }
00442 
00444 void K3dGui::LoadGuiTextFields()
00445 {
00446         cout << "void K3dGui::LoadGuiTextFields()" << endl;
00447         // Get number of gui text fields
00448         m_pLua->LuaGetGlobal(K_STR_NUM_GUI_TEXT_FIELDS);
00449     if (!m_pLua->LuaIsNumber(-1))
00450         {
00451         m_strOut = m_strFc + K_STR_NUM_GUI_TEXT_FIELDS;
00452                 m_strOut += " is not a valid number";
00453                 m_pLua->LuaError(m_strOut.GetString().c_str());
00454     }
00455         int iNum = (int) m_pLua->LuaToNumber(-1);
00456         for(int i=0; i<iNum; i++)
00457         {
00458                 K3dString kString(K_STR_GUI_TEXT_FIELD);
00459                 // Add number behind string
00460                 kString.AddNumber(i);
00461                 m_pLua->LuaGetGlobal(kString.GetString().c_str());
00462                 if (!m_pLua->LuaIsTable(-1))
00463                 {
00464                         m_strOut = m_strFc + kString;
00465                         m_strOut += " is not a valid line table";
00466                         m_pLua->LuaError(m_strOut.GetString().c_str());
00467                 }
00468                 const char* strText = m_pLua->LuaGetFieldString(K_STR_TEXT);
00469                 K3dGuiTextField *pTextField = new K3dGuiTextField(strText);
00470                 m_tGuiTextFieldArray.push_back(pTextField);
00471                 pTextField->GetName() = m_pLua->LuaGetFieldString(K_STR_NAME);
00472                 pTextField->GetPosX() = (int) m_pLua->LuaGetFieldNumber(K_STR_POS_X);
00473                 pTextField->GetPosY() = (int) m_pLua->LuaGetFieldNumber(K_STR_POS_Y);
00474                 pTextField->GetObjectType() = K3D_GUI_TEXT_FIELD_OBJ;
00475                 pTextField->GetObjectId() = (int) m_tGuiTextFieldArray.size() -1;
00476         }
00477 }
00478 
00480 void K3dGui::LoadGuiTextBoxes()
00481 {
00482         cout << "void K3dGui::LoadGuiTextBoxes()" << endl;
00483         // Get number of gui text boxes
00484         m_pLua->LuaGetGlobal(K_STR_NUM_GUI_TEXT_BOXES);
00485     if (!m_pLua->LuaIsNumber(-1))
00486         {
00487         m_strOut = m_strFc + K_STR_NUM_GUI_TEXT_BOXES;
00488                 m_strOut += " is not a valid number";
00489                 m_pLua->LuaError(m_strOut.GetString().c_str());
00490     }
00491         int iNum = (int) m_pLua->LuaToNumber(-1);
00492         for(int i=0; i<iNum; i++)
00493         {
00494                 K3dString kString(K_STR_GUI_TEXT_BOX);
00495                 // Add number behind string
00496                 kString.AddNumber(i);
00497                 m_pLua->LuaGetGlobal(kString.GetString().c_str());
00498                 if (!m_pLua->LuaIsTable(-1))
00499                 {
00500                         m_strOut = m_strFc + kString;
00501                         m_strOut += " is not a valid line table";
00502                         m_pLua->LuaError(m_strOut.GetString().c_str());
00503                 }
00504                 const char* strText = m_pLua->LuaGetFieldString(K_STR_TEXT);
00505                 K3dGuiTextBox *pTextBox = new K3dGuiTextBox(strText);
00506                 m_tGuiTextBoxArray.push_back(pTextBox);
00507                 pTextBox->GetName() = m_pLua->LuaGetFieldString(K_STR_NAME);
00508                 pTextBox->GetObjectType() = K3D_GUI_TEXT_BOX_OBJ;
00509                 pTextBox->GetObjectId() = (int) m_tGuiTextBoxArray.size() -1;
00510         }
00511 }
00512 
00514 void K3dGui::LoadGuiScrollAreas()
00515 {
00516         cout << "void K3dGui::LoadGuiScrollAreas()" << endl;
00517         // Get number of gui text boxes
00518         m_pLua->LuaGetGlobal(K_STR_NUM_GUI_SCROLL_AREAS);
00519     if (!m_pLua->LuaIsNumber(-1))
00520         {
00521         m_strOut = m_strFc + K_STR_NUM_GUI_SCROLL_AREAS;
00522                 m_strOut += " is not a valid number";
00523                 m_pLua->LuaError(m_strOut.GetString().c_str());
00524     }
00525         int iNum = (int) m_pLua->LuaToNumber(-1);
00526         for(int i=0; i<iNum; i++)
00527         {
00528                 K3dString kString(K_STR_GUI_SCROLL_AREA);
00529                 // Add number behind string
00530                 kString.AddNumber(i);
00531                 m_pLua->LuaGetGlobal(kString.GetString().c_str());
00532                 if (!m_pLua->LuaIsTable(-1))
00533                 {
00534                         m_strOut = m_strFc + kString;
00535                         m_strOut += " is not a valid line table";
00536                         m_pLua->LuaError(m_strOut.GetString().c_str());
00537                 }
00538                 const char* strContent = m_pLua->LuaGetFieldString(K_STR_CONTENT);
00539                 CreateScrollArea(strContent);
00540         }
00541 }
00542 
00544 void K3dGui::CreateScrollArea(const char* _strContent)
00545 {
00546         cout << "void K3dGui::CreateScrollArea(const char* _strContent)" << endl;
00547         K3dGuiScrollArea *pScrollArea;
00548 
00549         K3dGuiObject *pObject = (K3dGuiObject*) FindGuiObject(_strContent);
00550         if(pObject)
00551         {
00552                 EK3dGuiObjType eObjType = pObject->GetObjectType();
00553                 int iObjId = pObject->GetObjectId();
00554                 switch (eObjType)
00555                 {
00556                         case K3D_GUI_TEXT_BOX_OBJ:
00557                                 pScrollArea = new K3dGuiScrollArea(m_tGuiTextBoxArray[iObjId]);
00558                                 pScrollArea->GetName() = m_pLua->LuaGetFieldString(K_STR_NAME);
00559                                 pScrollArea->GetPosX() = (int) m_pLua->LuaGetFieldNumber(K_STR_POS_X);
00560                                 pScrollArea->GetPosY() = (int) m_pLua->LuaGetFieldNumber(K_STR_POS_Y);
00561                                 m_tGuiScrollAreaArray.push_back(pScrollArea);
00562                                 pScrollArea->setWidth((int) m_pLua->LuaGetFieldNumber(K_STR_WIDTH));
00563                                 pScrollArea->setHeight((int) m_pLua->LuaGetFieldNumber(K_STR_HEIGHT));
00564                                 pScrollArea->setBorderSize((int) m_pLua->LuaGetFieldNumber(K_STR_BORDER_SIZE));
00565                                 break;
00566                         case K3D_GUI_LIST_BOX_OBJ:
00567                                 pScrollArea = new K3dGuiScrollArea(m_tGuiListBoxArray[iObjId]);
00568                                 pScrollArea->GetName() = m_pLua->LuaGetFieldString(K_STR_NAME);
00569                                 pScrollArea->GetPosX() = (int) m_pLua->LuaGetFieldNumber(K_STR_POS_X);
00570                                 pScrollArea->GetPosY() = (int) m_pLua->LuaGetFieldNumber(K_STR_POS_Y);
00571                                 m_tGuiScrollAreaArray.push_back(pScrollArea);
00572                                 pScrollArea->setWidth((int) m_pLua->LuaGetFieldNumber(K_STR_WIDTH));
00573                                 pScrollArea->setHeight((int) m_pLua->LuaGetFieldNumber(K_STR_HEIGHT));
00574                                 pScrollArea->setBorderSize((int) m_pLua->LuaGetFieldNumber(K_STR_BORDER_SIZE));
00575                                 break;
00576                         case K3D_GUI_CONTAINER_OBJ:
00577                                 pScrollArea = new K3dGuiScrollArea(m_tGuiContainerArray[iObjId]);
00578                                 pScrollArea->GetName() = m_pLua->LuaGetFieldString(K_STR_NAME);
00579                                 pScrollArea->GetPosX() = (int) m_pLua->LuaGetFieldNumber(K_STR_POS_X);
00580                                 pScrollArea->GetPosY() = (int) m_pLua->LuaGetFieldNumber(K_STR_POS_Y);
00581                                 m_tGuiScrollAreaArray.push_back(pScrollArea);
00582                                 pScrollArea->setWidth((int) m_pLua->LuaGetFieldNumber(K_STR_WIDTH));
00583                                 pScrollArea->setHeight((int) m_pLua->LuaGetFieldNumber(K_STR_HEIGHT));
00584                                 pScrollArea->setBorderSize((int) m_pLua->LuaGetFieldNumber(K_STR_BORDER_SIZE));
00585                                 break;
00586                         default:
00587                                 break;
00588                 }
00589         }
00590         else    
00591         {
00592                 cerr << "Error in void K3dGui::CreateScrollArea(): Object " << _strContent << " doesn`t exist!!!" << endl;
00593         }
00594         
00595         
00596 /*
00597         K3dString kStr = _strContent;
00598         // Find text box
00599         K3dGuiScrollArea *pScrollArea;
00600         int iObjId = -1;
00601         K3dString kStrObj;
00602         if(kStr.Find(K_STR_GUI_TEXT_BOX))
00603         {
00604                 kStrObj = K_STR_GUI_TEXT_BOX;
00605                 // Get object index
00606                 kStr.Erase(0,kStrObj.GetSize());
00607                 iObjId = kStr.ToInt();
00608                 pScrollArea = new K3dGuiScrollArea(m_tGuiTextBoxArray[iObjId]);
00609                 pScrollArea->GetName() = m_pLua->LuaGetFieldString(K_STR_NAME);
00610                 pScrollArea->GetPosX() = (int) m_pLua->LuaGetFieldNumber(K_STR_POS_X);
00611                 pScrollArea->GetPosY() = (int) m_pLua->LuaGetFieldNumber(K_STR_POS_Y);
00612                 m_tGuiScrollAreaArray.push_back(pScrollArea);
00613                 pScrollArea->setWidth((int) m_pLua->LuaGetFieldNumber(K_STR_WIDTH));
00614                 pScrollArea->setHeight((int) m_pLua->LuaGetFieldNumber(K_STR_HEIGHT));
00615                 pScrollArea->setBorderSize((int) m_pLua->LuaGetFieldNumber(K_STR_BORDER_SIZE));
00616                 return;
00617         }
00618         // Find list box
00619         if(kStr.Find(K_STR_GUI_LIST_BOX))
00620         {
00621                 kStrObj = K_STR_GUI_LIST_BOX;
00622                 // Get object index
00623                 kStr.Erase(0,kStrObj.GetSize());
00624                 iObjId = kStr.ToInt();
00625                 pScrollArea = new K3dGuiScrollArea(m_tGuiListBoxArray[iObjId]);
00626                 pScrollArea->GetName() = m_pLua->LuaGetFieldString(K_STR_NAME);
00627                 pScrollArea->GetPosX() = (int) m_pLua->LuaGetFieldNumber(K_STR_POS_X);
00628                 pScrollArea->GetPosY() = (int) m_pLua->LuaGetFieldNumber(K_STR_POS_Y);
00629                 m_tGuiScrollAreaArray.push_back(pScrollArea);
00630                 pScrollArea->setWidth((int) m_pLua->LuaGetFieldNumber(K_STR_WIDTH));
00631                 pScrollArea->setHeight((int) m_pLua->LuaGetFieldNumber(K_STR_HEIGHT));
00632                 pScrollArea->setBorderSize((int) m_pLua->LuaGetFieldNumber(K_STR_BORDER_SIZE));
00633                 return;
00634         }
00635         // Find container
00636         if(kStr.Find(K_STR_GUI_CONTAINER))
00637         {
00638                 kStrObj = K_STR_GUI_CONTAINER;
00639                 // Get object index
00640                 kStr.Erase(0,kStrObj.GetSize());
00641                 iObjId = kStr.ToInt();
00642                 pScrollArea = new K3dGuiScrollArea(m_tGuiContainerArray[iObjId]);
00643                 pScrollArea->GetName() = m_pLua->LuaGetFieldString(K_STR_NAME);
00644                 pScrollArea->GetPosX() = (int) m_pLua->LuaGetFieldNumber(K_STR_POS_X);
00645                 pScrollArea->GetPosY() = (int) m_pLua->LuaGetFieldNumber(K_STR_POS_Y);
00646                 m_tGuiScrollAreaArray.push_back(pScrollArea);
00647                 pScrollArea->setWidth((int) m_pLua->LuaGetFieldNumber(K_STR_WIDTH));
00648                 pScrollArea->setHeight((int) m_pLua->LuaGetFieldNumber(K_STR_HEIGHT));
00649                 pScrollArea->setBorderSize((int) m_pLua->LuaGetFieldNumber(K_STR_BORDER_SIZE));
00650                 return;
00651         }       
00652 */
00653 }
00654 
00657 K3dGuiObject *K3dGui::FindGuiObject(const char* _strName)
00658 {
00659         K3dString kStr = _strName;
00660         unsigned int i=0;
00661         for(i=0; i<m_tGuiTextBoxArray.size(); i++)
00662         {
00663                 if(kStr == m_tGuiTextBoxArray[i]->GetName())
00664                 {
00665                         return m_tGuiTextBoxArray[i];
00666                 }
00667         }
00668         for(i=0; i<m_tGuiListModelArray.size(); i++)
00669         {
00670                 if(kStr == m_tGuiListModelArray[i]->GetName())
00671                 {
00672                         return m_tGuiListModelArray[i];
00673                 }
00674         }
00675         for(i=0; i<m_tGuiWindowArray.size(); i++)
00676         {
00677                 if(kStr == m_tGuiWindowArray[i]->GetName())
00678                 {
00679                         return m_tGuiWindowArray[i];
00680                 }
00681         }
00682         for(i=0; i<m_tGuiLabelArray.size(); i++)
00683         {
00684                 if(kStr == m_tGuiLabelArray[i]->GetName())
00685                 {
00686                         return m_tGuiLabelArray[i];
00687                 }
00688         }
00689         for(i=0; i<m_tGuiIconArray.size(); i++)
00690         {
00691                 if(kStr == m_tGuiIconArray[i]->GetName())
00692                 {
00693                         return m_tGuiIconArray[i];
00694                 }
00695         }
00696         for(i=0; i<m_tGuiButtonArray.size(); i++)
00697         {
00698                 if(kStr == m_tGuiButtonArray[i]->GetName())
00699                 {
00700                         return m_tGuiButtonArray[i];
00701                 }
00702         }
00703         for(i=0; i<m_tGuiFontArray.size(); i++)
00704         {
00705                 if(kStr == m_tGuiFontArray[i]->GetName())
00706                 {
00707                         return m_tGuiFontArray[i];
00708                 }
00709         }
00710         for(i=0; i<m_tGuiTextFieldArray.size(); i++)
00711         {
00712                 if(kStr == m_tGuiTextFieldArray[i]->GetName())
00713                 {
00714                         return m_tGuiTextFieldArray[i];
00715                 }
00716         }
00717         for(i=0; i<m_tGuiScrollAreaArray.size(); i++)
00718         {
00719                 if(kStr == m_tGuiScrollAreaArray[i]->GetName())
00720                 {
00721                         return m_tGuiScrollAreaArray[i];
00722                 }
00723         }
00724         for(i=0; i<m_tGuiListBoxArray.size(); i++)
00725         {
00726                 if(kStr == m_tGuiListBoxArray[i]->GetName())
00727                 {
00728                         return m_tGuiListBoxArray[i];
00729                 }
00730         }
00731         for(i=0; i<m_tGuiDropDownArray.size(); i++)
00732         {
00733                 if(kStr == m_tGuiDropDownArray[i]->GetName())
00734                 {
00735                         return m_tGuiDropDownArray[i];
00736                 }
00737         }
00738         for(i=0; i<m_tGuiCheckBoxArray.size(); i++)
00739         {
00740                 if(kStr == m_tGuiCheckBoxArray[i]->GetName())
00741                 {
00742                         return m_tGuiCheckBoxArray[i];
00743                 }
00744         }
00745         for(i=0; i<m_tGuiRadioButtonArray.size(); i++)
00746         {
00747                 if(kStr == m_tGuiRadioButtonArray[i]->GetName())
00748                 {
00749                         return m_tGuiRadioButtonArray[i];
00750                 }
00751         }
00752         for(i=0; i<m_tGuiSliderArray.size(); i++)
00753         {
00754                 if(kStr == m_tGuiSliderArray[i]->GetName())
00755                 {
00756                         return m_tGuiSliderArray[i];
00757                 }
00758         }
00759         for(i=0; i<m_tGuiImageArray.size(); i++)
00760         {
00761                 if(kStr == m_tGuiImageArray[i]->GetName())
00762                 {
00763                         return m_tGuiImageArray[i];
00764                 }
00765         }
00766         for(i=0; i<m_tGuiContainerArray.size(); i++)
00767         {
00768                 if(kStr == m_tGuiContainerArray[i]->GetName())
00769                 {
00770                         return m_tGuiContainerArray[i];
00771                 }
00772         }
00773         return NULL;
00774 }
00775 
00777 void K3dGui::LoadGuiListModels()
00778 {
00779         cout << "void K3dGui::LoadGuiListModels()" << endl;
00780         // Get number of gui list models
00781         m_pLua->LuaGetGlobal(K_STR_NUM_GUI_LIST_MODELS);
00782     if (!m_pLua->LuaIsNumber(-1))
00783         {
00784         m_strOut = m_strFc + K_STR_NUM_GUI_LIST_MODELS;
00785                 m_strOut += " is not a valid number";
00786                 m_pLua->LuaError(m_strOut.GetString().c_str());
00787     }
00788         int iNum = (int) m_pLua->LuaToNumber(-1);
00789         for(int i=0; i<iNum; i++)
00790         {
00791                 K3dString kString(K_STR_GUI_LIST_MODEL);
00792                 // Add number behind string
00793                 kString.AddNumber(i);
00794                 m_pLua->LuaGetGlobal(kString.GetString().c_str());
00795                 if (!m_pLua->LuaIsTable(-1))
00796                 {
00797                         m_strOut = m_strFc + kString;
00798                         m_strOut += " is not a valid line table";
00799                         m_pLua->LuaError(m_strOut.GetString().c_str());
00800                 }
00801                 K3dGuiListModel *pListModel = new K3dGuiListModel;
00802                 m_tGuiListModelArray.push_back(pListModel);
00803                 pListModel->GetName() = m_pLua->LuaGetFieldString(K_STR_NAME);
00804                 pListModel->GetObjectType() = K3D_GUI_LIST_MODEL_OBJ;
00805                 pListModel->GetObjectId() = (int) m_tGuiListModelArray.size() -1;
00806                 int iNumElements = (int) m_pLua->LuaGetFieldNumber(K_STR_GUI_NUM_ELEMENTS);
00807                 for(int el=0; el<iNumElements; el++)
00808                 {
00809                         kString.GetString() = K_STR_ELEMENT;
00810                         // Add number behind string
00811                         kString.AddNumber(el);
00812                         // Get element string
00813                         const char* strEl = m_pLua->LuaGetFieldString(kString.GetString().c_str());
00814                         pListModel->AddElement(strEl);
00815                 }
00816         }
00817 }
00818 
00820 void K3dGui::LoadGuiListBoxes()
00821 {
00822         cout << "void K3dGui::LoadGuiListBoxes()" << endl;
00823         // Get number of gui list boxes
00824         m_pLua->LuaGetGlobal(K_STR_NUM_GUI_LIST_BOXES);
00825     if (!m_pLua->LuaIsNumber(-1))
00826         {
00827         m_strOut = m_strFc + K_STR_NUM_GUI_LIST_BOXES;
00828                 m_strOut += " is not a valid number";
00829                 m_pLua->LuaError(m_strOut.GetString().c_str());
00830     }
00831         int iNum = (int) m_pLua->LuaToNumber(-1);
00832         for(int i=0; i<iNum; i++)
00833         {
00834                 K3dString kString(K_STR_GUI_LIST_BOX);
00835                 // Add number behind string
00836                 kString.AddNumber(i);
00837                 m_pLua->LuaGetGlobal(kString.GetString().c_str());
00838                 if (!m_pLua->LuaIsTable(-1))
00839                 {
00840                         m_strOut = m_strFc + kString;
00841                         m_strOut += " is not a valid line table";
00842                         m_pLua->LuaError(m_strOut.GetString().c_str());
00843                 }
00844                 const char* strContent = m_pLua->LuaGetFieldString(K_STR_CONTENT);
00845                 CreateListBox(strContent);
00846         }
00847 }
00848 
00850 void K3dGui::CreateListBox(const char* _strContent)
00851 {
00852         cout << "void K3dGui::CreateListBox(const char* _strContent)" << endl;
00853         K3dGuiListModel *pListModel = FindListModel(_strContent);
00854         if(pListModel)
00855         {
00856                 K3dGuiListBox *pListBox = new K3dGuiListBox(pListModel);
00857