#include <primitive_class.h>
Nevrax France
Definition at line 50 of file primitive_class.h.
Public Types | |
enum | TType { Node, Point, Path, Bitmap, Zone } |
Public Member Functions | |
CPrimitiveClass () | |
Constructor. | |
bool | read (xmlNodePtr primitiveNode, const char *filename, const char *className, std::set< std::string > &contextStrings, std::map< std::string, std::string > &contextFilesLookup, NLLIGO::CLigoConfig &config) |
Data Fields | |
bool | AutoInit |
Auto init ? | |
bool | Collision |
Collision ? | |
NLMISC::CRGBA | Color |
Color. | |
bool | Deletable |
Deletable ? | |
std::vector< CChild > | DynamicChildren |
std::string | FileExtension |
Filename extension (for type File). | |
std::string | FileType |
File type (for type File). | |
std::vector< CChild > | GeneratedChildren |
bool | LinkBrothers |
Link children ? | |
std::string | Name |
Class name. | |
bool | Numberize |
Numberize on copy ? | |
std::vector< CParameter > | Parameters |
Parameters. | |
bool | ShowArrow |
Show arrow ? | |
std::vector< CChild > | StaticChildren |
enum NLLIGO::CPrimitiveClass::TType | Type |
|
Definition at line 55 of file primitive_class.h.
|
|
Constructor.
Definition at line 38 of file primitive_class.cpp.
00039 { 00040 } |
|
Definition at line 193 of file primitive_class.cpp. References AutoInit, NLLIGO::CPrimitiveClass::CParameter::Autoname, Bitmap, Collision, NLLIGO::CPrimitiveClass::CParameter::ComboValues, NLLIGO::CPrimitiveClass::CInitParameters::DefaultValue, Deletable, NLLIGO::CPrimitiveClass::CParameter::DisplayHS, DynamicChildren, NLLIGO::CPrimitiveClass::CParameter::FileExtension, FileExtension, NLLIGO::CPrimitiveClass::CParameter::Filename, FileType, NLLIGO::CPrimitiveClass::CParameter::Folder, GeneratedChildren, NLLIGO::CLigoConfig::getPropertyString(), LinkBrothers, NLLIGO::CPrimitiveClass::CParameter::Lookup, NLLIGO::CPrimitiveClass::CInitParameters::Name, Node, Numberize, Parameters, ReadBool(), ReadChild(), ReadColor(), ReadInt(), NLLIGO::CPrimitiveClass::CParameter::ReadOnly, ShowArrow, NLLIGO::CPrimitiveClass::CParameter::SortEntries, StaticChildren, NLMISC::strlwr(), NLLIGO::CLigoConfig::syntaxError(), NLLIGO::CPrimitiveClass::CParameter::Type, type, uint, value, NLLIGO::CPrimitiveClass::CParameter::CConstStringValue::Values, NLLIGO::CPrimitiveClass::CParameter::Visible, and NLLIGO::CPrimitiveClass::CParameter::WidgetHeight.
00195 { 00196 // The name 00197 Name = className; 00198 00199 // Read the type 00200 std::string type; 00201 if (config.getPropertyString (type, filename, primitiveNode, "TYPE")) 00202 { 00203 // Good type ? 00204 if (type == "node") 00205 Type = Node; 00206 else if (type == "point") 00207 Type = Point; 00208 else if (type == "path") 00209 Type = Path; 00210 else if (type == "zone") 00211 Type = Zone; 00212 else if (type == "bitmap") 00213 Type = Bitmap; 00214 else 00215 { 00216 config.syntaxError (filename, primitiveNode, "Unknown primitive type (%s)", type.c_str ()); 00217 goto failed; 00218 } 00219 00220 // Read the color 00221 ReadColor (Color, primitiveNode); 00222 00223 // Autoinit 00224 AutoInit = false; 00225 ReadBool ("AUTO_INIT", AutoInit, primitiveNode, filename, config); 00226 00227 // Deletable 00228 Deletable = true; 00229 ReadBool ("DELETABLE", Deletable, primitiveNode, filename, config); 00230 00231 // File extension 00232 FileExtension = ""; 00233 CIXml::getPropertyString (FileExtension, primitiveNode, "FILE_EXTENSION"); 00234 00235 // File type 00236 FileType = ""; 00237 CIXml::getPropertyString (FileType, primitiveNode, "FILE_TYPE"); 00238 00239 // Collision 00240 Collision = false; 00241 ReadBool ("COLLISION", Collision, primitiveNode, filename, config); 00242 00243 // LinkBrothers 00244 LinkBrothers = false; 00245 ReadBool ("LINK_BROTHERS", LinkBrothers, primitiveNode, filename, config); 00246 00247 // ShowArrow 00248 ShowArrow = true; 00249 ReadBool ("SHOW_ARROW", ShowArrow, primitiveNode, filename, config); 00250 00251 // Numberize when copy the primitive 00252 Numberize = true; 00253 ReadBool ("NUMBERIZE", Numberize, primitiveNode, filename, config); 00254 00255 // Read the parameters 00256 xmlNodePtr paramNode = CIXml::getFirstChildNode (primitiveNode, "PARAMETER"); 00257 if (paramNode) 00258 { 00259 do 00260 { 00261 // Add a parameter 00262 Parameters.push_back (CParameter ()); 00263 00264 // The parameter ref 00265 CParameter ¶meter = Parameters.back (); 00266 00267 // Read the property name 00268 if (config.getPropertyString (type, filename, paramNode, "NAME")) 00269 { 00270 // Set the name 00271 parameter.Name = type; 00272 00273 // Read the type 00274 if (config.getPropertyString (type, filename, paramNode, "TYPE")) 00275 { 00276 // Good type ? 00277 if (type == "boolean") 00278 parameter.Type = CParameter::Boolean; 00279 else if (type == "const_string") 00280 parameter.Type = CParameter::ConstString; 00281 else if (type == "string") 00282 parameter.Type = CParameter::String; 00283 else if (type == "string_array") 00284 parameter.Type = CParameter::StringArray; 00285 else if (type == "const_string_array") 00286 parameter.Type = CParameter::ConstStringArray; 00287 else 00288 { 00289 config.syntaxError (filename, paramNode, "Unknown primitive parameter type (%s)", type.c_str ()); 00290 goto failed; 00291 } 00292 00293 // Visible 00294 parameter.Visible = true; 00295 ReadBool ("VISIBLE", parameter.Visible, paramNode, filename, config); 00296 00297 // Filename 00298 parameter.Filename = false; 00299 ReadBool ("FILENAME", parameter.Filename, paramNode, filename, config); 00300 00301 // Lookup 00302 parameter.Lookup = false; 00303 ReadBool ("LOOKUP", parameter.Lookup, paramNode, filename, config); 00304 00305 // Read only primitive 00306 parameter.ReadOnly = false; 00307 ReadBool ("READ_ONLY", parameter.ReadOnly, paramNode, filename, config); 00308 00309 // sort combo box entries 00310 parameter.SortEntries = false; 00311 ReadBool ("SORT_ENTRIES", parameter.SortEntries, paramNode, filename, config); 00312 00313 // Display horizontal scoller in multiline edit box 00314 parameter.DisplayHS = false; 00315 ReadBool ("SHOW_HS", parameter.DisplayHS, paramNode, filename, config); 00316 00317 // Lookup 00318 parameter.WidgetHeight = 100; 00319 int temp; 00320 if (ReadInt ("WIDGET_HEIGHT", temp, paramNode)) 00321 parameter.WidgetHeight = (uint)temp; 00322 00323 // Read the file extension 00324 parameter.FileExtension = ""; 00325 CIXml::getPropertyString (parameter.FileExtension, paramNode, "FILE_EXTENSION"); 00326 parameter.FileExtension = strlwr (parameter.FileExtension); 00327 00328 // Autonaming preference 00329 parameter.Autoname = ""; 00330 CIXml::getPropertyString (parameter.Autoname, paramNode, "AUTONAME"); 00331 00332 // Read the file extension 00333 parameter.Folder = ""; 00334 CIXml::getPropertyString (parameter.Folder, paramNode, "FOLDER"); 00335 parameter.Folder = strlwr (parameter.Folder); 00336 00337 // Read the combo values 00338 xmlNodePtr comboValueNode = CIXml::getFirstChildNode (paramNode, "COMBO_VALUES"); 00339 if (comboValueNode) 00340 { 00341 do 00342 { 00343 // Read the context 00344 if (config.getPropertyString (type, filename, comboValueNode, "CONTEXT_NAME")) 00345 { 00346 // Add this context 00347 contextStrings.insert (type); 00348 00349 // Add a combo value 00350 pair<std::map<std::string, CParameter::CConstStringValue>::iterator, bool> insertResult = 00351 parameter.ComboValues.insert (std::map<std::string, CParameter::CConstStringValue>::value_type (type, CParameter::CConstStringValue ())); 00352 00353 // The combo value ref 00354 CParameter::CConstStringValue &comboValue = insertResult.first->second; 00355 00356 // Read the values 00357 xmlNodePtr comboValueValueNode = CIXml::getFirstChildNode (comboValueNode, "CONTEXT_VALUE"); 00358 comboValue.Values.reserve (CIXml::countChildren (comboValueNode, "CONTEXT_VALUE")); 00359 if (comboValueValueNode) 00360 { 00361 do 00362 { 00363 // Read the value 00364 if (config.getPropertyString (type, filename, comboValueValueNode, "VALUE")) 00365 { 00366 // Add a combo box 00367 comboValue.Values.push_back (type); 00368 } 00369 else 00370 goto failed; 00371 } 00372 while ((comboValueValueNode = CIXml::getFirstChildNode (comboValueValueNode, "CONTEXT_VALUE"))); 00373 } 00374 } 00375 else 00376 goto failed; 00377 } 00378 while ((comboValueNode = CIXml::getNextChildNode (comboValueNode, "COMBO_VALUES"))); 00379 } 00380 00381 // Read the combo files 00382 comboValueNode = CIXml::getFirstChildNode (paramNode, "COMBO_FILES"); 00383 if (comboValueNode) 00384 { 00385 do 00386 { 00387 // Read the context 00388 if (config.getPropertyString (type, filename, comboValueNode, "CONTEXT_NAME")) 00389 { 00390 // Read the path to search 00391 string path; 00392 if (config.getPropertyString (path, filename, comboValueNode, "PATH")) 00393 { 00394 // Look for files in the path 00395 std::vector<std::string> files; 00396 CPath::getPathContent (path, true, false, true, files); 00397 00398 // Not empty ? 00399 if (!files.empty ()) 00400 { 00401 // Add this context 00402 contextStrings.insert (type); 00403 00404 // For each file 00405 for (uint i=0; i<files.size (); i++) 00406 { 00407 // Good extension ? 00408 if (strlwr (NLMISC::CFile::getExtension (files[i])) == parameter.FileExtension) 00409 { 00410 // Add a combo value 00411 pair<std::map<std::string, CParameter::CConstStringValue>::iterator, bool> insertResult = 00412 parameter.ComboValues.insert (std::map<std::string, CParameter::CConstStringValue>::value_type (type, CParameter::CConstStringValue ())); 00413 00414 // The combo value ref 00415 CParameter::CConstStringValue &comboValue = insertResult.first->second; 00416 00417 // Get the filename without extension 00418 string nameWithoutExt = strlwr (NLMISC::CFile::getFilenameWithoutExtension (files[i])); 00419 00420 // Add the values 00421 comboValue.Values.push_back (nameWithoutExt); 00422 00423 // Add the value for lookup 00424 contextFilesLookup.insert (map<string, string>::value_type (nameWithoutExt, files[i])); 00425 } 00426 } 00427 } 00428 } 00429 else 00430 goto failed; 00431 } 00432 else 00433 goto failed; 00434 } 00435 while ((comboValueNode = CIXml::getNextChildNode (comboValueNode, "COMBO_FILES"))); 00436 } 00437 00438 // Read parameters default values 00439 xmlNodePtr defaultValueNode = CIXml::getFirstChildNode (paramNode, "DEFAULT_VALUE"); 00440 parameter.DefaultValue.resize (CIXml::countChildren (paramNode, "DEFAULT_VALUE")); 00441 uint defaultId = 0; 00442 if (defaultValueNode) 00443 { 00444 do 00445 { 00446 // Gen id flag 00447 parameter.DefaultValue[defaultId].GenID = false; 00448 00449 // Read the gen id flag 00450 string value; 00451 if (CIXml::getPropertyString (value, defaultValueNode, "GEN_ID") && (value != "false")) 00452 { 00453 parameter.DefaultValue[defaultId].GenID = true; 00454 } 00455 else 00456 { 00457 if (config.getPropertyString (value, filename, defaultValueNode, "VALUE")) 00458 { 00459 parameter.DefaultValue[defaultId].Name = value; 00460 } 00461 else 00462 goto failed; 00463 } 00464 defaultId++; 00465 } 00466 while ((defaultValueNode = CIXml::getNextChildNode (defaultValueNode, "DEFAULT_VALUE"))); 00467 } 00468 } 00469 else 00470 goto failed; 00471 } 00472 else 00473 goto failed; 00474 } 00475 while ((paramNode = CIXml::getNextChildNode (paramNode, "PARAMETER"))); 00476 } 00477 00478 // Read static children 00479 xmlNodePtr childrenNode = CIXml::getFirstChildNode (primitiveNode, "STATIC_CHILD"); 00480 StaticChildren.reserve (CIXml::countChildren (primitiveNode, "STATIC_CHILD")); 00481 if (childrenNode) 00482 { 00483 do 00484 { 00485 // Add a static child 00486 StaticChildren.push_back (CChild ()); 00487 00488 // Child ref 00489 CChild &child = StaticChildren.back (); 00490 00491 // Read the child 00492 if (!ReadChild (child, childrenNode, filename, true, config)) 00493 goto failed; 00494 } 00495 while ((childrenNode = CIXml::getNextChildNode (childrenNode, "STATIC_CHILD"))); 00496 } 00497 00498 // Read dynamic children 00499 childrenNode = CIXml::getFirstChildNode (primitiveNode, "DYNAMIC_CHILD"); 00500 DynamicChildren.reserve (CIXml::countChildren (primitiveNode, "DYNAMIC_CHILD")); 00501 if (childrenNode) 00502 { 00503 do 00504 { 00505 // Add a static child 00506 DynamicChildren.push_back (CChild ()); 00507 00508 // Child ref 00509 CChild &child = DynamicChildren.back (); 00510 00511 // Read the child 00512 if (!ReadChild (child, childrenNode, filename, false, config)) 00513 goto failed; 00514 } 00515 while ((childrenNode = CIXml::getNextChildNode (childrenNode, "DYNAMIC_CHILD"))); 00516 } 00517 00518 // Read generated children 00519 childrenNode = CIXml::getFirstChildNode (primitiveNode, "GENERATED_CHILD"); 00520 GeneratedChildren.reserve (CIXml::countChildren (primitiveNode, "GENERATED_CHILD")); 00521 if (childrenNode) 00522 { 00523 do 00524 { 00525 // Add a static child 00526 GeneratedChildren.push_back (CChild ()); 00527 00528 // Child ref 00529 CChild &child = GeneratedChildren.back (); 00530 00531 // Read the child 00532 if (!ReadChild (child, childrenNode, filename, false, config)) 00533 goto failed; 00534 } 00535 while ((childrenNode = CIXml::getNextChildNode (childrenNode, "GENERATED_CHILD"))); 00536 } 00537 00538 return true; 00539 } 00540 failed: 00541 return false; 00542 } |
|
Auto init ?
Definition at line 80 of file primitive_class.h. Referenced by read(). |
|
Collision ?
Definition at line 86 of file primitive_class.h. Referenced by read(). |
|
Color.
Definition at line 77 of file primitive_class.h. |
|
Deletable ?
Definition at line 83 of file primitive_class.h. Referenced by read(). |
|
Definition at line 221 of file primitive_class.h. Referenced by NLLIGO::CLigoConfig::canBeChild(), NLLIGO::CLigoConfig::canBeRoot(), and read(). |
|
Filename extension (for type File).
Definition at line 71 of file primitive_class.h. Referenced by read(). |
|
File type (for type File).
Definition at line 74 of file primitive_class.h. Referenced by read(). |
|
Definition at line 224 of file primitive_class.h. Referenced by NLLIGO::CLigoConfig::canBeChild(), and read(). |
|
Link children ?
Definition at line 89 of file primitive_class.h. Referenced by read(). |
|
Class name.
Definition at line 68 of file primitive_class.h. |
|
Numberize on copy ?
Definition at line 95 of file primitive_class.h. Referenced by read(). |
|
Parameters.
Definition at line 201 of file primitive_class.h. Referenced by read(), NLLIGO::IPrimitive::read(), and NLLIGO::CPrimitiveClass::CParameter::translateAutoname(). |
|
Show arrow ?
Definition at line 92 of file primitive_class.h. Referenced by read(). |
|
Definition at line 218 of file primitive_class.h. Referenced by read(). |
|
|