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