#include <form.h>
Inheritance diagram for NLGEORGES::CForm:
Definition at line 44 of file form.h.
Public Types | |
enum | { HeldElementCount = 4 } |
Public Member Functions | |
CForm () | |
void | clean () |
void | clearParents () |
const std::string & | getComment () const |
void | getDependencies (std::set< std::string > &dependencies) const |
const std::string & | getFilename () const |
uint | getNumParent () const |
Get a mutable pointer on the root element of the form. It is a struct node. | |
CForm * | getParent (uint parent) const |
uint | getParentCount () const |
const std::string & | getParentFilename (uint parent) const |
UForm * | getParentForm (uint parent) const |
Get a mutable pointer on the root element of the form. It is a struct node. | |
const sint & | getRefCount () const |
const UFormElm & | getRootNode () const |
Get a const pointer on the root element of the form. It is a struct node. | |
UFormElm & | getRootNode () |
Get a mutable pointer on the root element of the form. It is a struct node. | |
bool | insertParent (uint before, const char *filename, CForm *parent) |
void | removeParent (uint parent) |
void | warning (bool exception, const char *function, const char *format,...) const |
void | write (xmlDocPtr doc, const char *filename, bool georges4CVS) |
void | write (class NLMISC::IStream &stream, bool georges4CVS) |
~CForm () | |
Data Fields | |
sint | crefs |
CFormElmStruct | Elements |
Vector of CFormElm*. | |
CFileHeader | Header |
CFormElmStruct * | HeldElements [HeldElementCount] |
Backup slots. | |
CPtrInfo * | pinfo |
Static Public Attributes | |
CPtrInfo | NullPtrInfo |
Private Member Functions | |
void | read (xmlNodePtr node, CFormLoader &loader, CFormDfn *dfn, const char *filename) |
void | readParent (const char *parent, CFormLoader &loader) |
Private Attributes | |
std::string | _Filename |
std::vector< CParent > | ParentList |
Pointer on the parent. | |
Friends | |
class | CFormLoader |
bool | convertFormFile (const char *oldFileName, const char *newFileName) |
struct | CPtrInfo |
|
Definition at line 50 of file form.h.
00050 { HeldElementCount = 4 }; |
|
Definition at line 94 of file form.cpp. References HeldElementCount, HeldElements, and uint.
00094 : Elements (this, NULL, NULL, 0xffffffff) 00095 { 00096 uint i; 00097 for (i=0; i<HeldElementCount; i++) 00098 { 00099 HeldElements[i] = new CFormElmStruct (this, NULL, NULL, 0xffffffff); 00100 } 00101 } |
|
Definition at line 105 of file form.cpp. References HeldElementCount, HeldElements, and uint.
00106 { 00107 uint i; 00108 for (i=0; i<HeldElementCount; i++) 00109 { 00110 delete HeldElements[i]; 00111 } 00112 } |
|
Definition at line 337 of file form.cpp. References clearParents(). Referenced by read().
00338 { 00339 clearParents (); 00340 } |
|
Definition at line 344 of file form.cpp. References ParentList. Referenced by clean().
00345 { 00346 ParentList.clear (); 00347 } |
|
Get the comment Implements NLGEORGES::UForm. Definition at line 264 of file form.cpp. References NLGEORGES::CFileHeader::Comments, and Header.
00265 { 00266 return Header.Comments; 00267 } |
|
Get dependency files Implements NLGEORGES::UForm. Definition at line 373 of file form.cpp. References _Filename, NLGEORGES::CFormElmStruct::getDependencies(), ParentList, NLMISC::strlwr(), and uint.
00374 { 00375 // Add me 00376 if (dependencies.insert (strlwr(CFile::getFilename (_Filename))).second) 00377 { 00378 // Add parents 00379 uint i; 00380 for (i=0; i<ParentList.size (); i++) 00381 { 00382 if (ParentList[i].Parent) 00383 { 00384 ParentList[i].Parent->getDependencies (dependencies); 00385 } 00386 } 00387 00388 // Add elements 00389 Elements.getDependencies (dependencies); 00390 } 00391 } |
|
Definition at line 351 of file form.cpp. References _Filename. Referenced by NLGEORGES::CMyEvalNumExpr::evalValue(), NLGEORGES::CFormElm::getIternalNodeByName(), NLGEORGES::CFormElmAtom::warning(), NLGEORGES::CFormElmArray::warning(), NLGEORGES::CFormElmVirtualStruct::warning(), NLGEORGES::CFormElmStruct::warning(), and NLGEORGES::CFormElm::warning().
00352 { 00353 return _Filename; 00354 } |
|
Get a mutable pointer on the root element of the form. It is a struct node. Access form parents Implements NLGEORGES::UForm. Definition at line 395 of file form.cpp. References getParentCount(), and uint.
00396 { 00397 return getParentCount(); 00398 } |
|
Definition at line 316 of file form.cpp. References ParentList, and uint. Referenced by NLGEORGES::CFormElm::getIternalNodeByName(), and getParentForm().
00317 { 00318 return ParentList[parent].Parent; 00319 } |
|
Definition at line 330 of file form.cpp. References ParentList, and uint. Referenced by NLGEORGES::CFormElm::getIternalNodeByName(), getNumParent(), and readParent().
00331 { 00332 return ParentList.size (); 00333 } |
|
Definition at line 323 of file form.cpp. References ParentList, and uint.
00324 { 00325 return ParentList[parent].ParentFilename; 00326 } |
|
Get a mutable pointer on the root element of the form. It is a struct node.
Implements NLGEORGES::UForm. Definition at line 402 of file form.cpp. References getParent(), and uint.
|
|
Definition at line 70 of file smart_ptr.h. References NLMISC::CRefCount::crefs, and sint.
00071 { 00072 return crefs; 00073 } |
|
Get a const pointer on the root element of the form. It is a struct node.
Implements NLGEORGES::UForm. Definition at line 85 of file form.cpp.
00086 { 00087 return Elements; 00088 } |
|
Get a mutable pointer on the root element of the form. It is a struct node. Access form nodes Implements NLGEORGES::UForm. Definition at line 78 of file form.cpp. Referenced by NLGEORGES::CMyEvalNumExpr::evalValue(), and NLGEORGES::CFormElm::getIternalNodeByName().
00079 { 00080 return Elements; 00081 } |
|
Definition at line 283 of file form.cpp. References Elements, NLGEORGES::CFormElmStruct::FormDfn, nlassert, ParentList, uint, and warning(). Referenced by readParent().
00284 { 00285 // Set or reset ? 00286 nlassert (parent); 00287 00288 // Must have the same DFN 00289 if (parent->Elements.FormDfn == Elements.FormDfn) 00290 { 00291 // Set members 00292 std::vector<CParent>::iterator ite = ParentList.insert (ParentList.begin() + before); 00293 ite->Parent = parent; 00294 ite->ParentFilename = filename; 00295 00296 return true; 00297 } 00298 else 00299 { 00300 // Output an error 00301 warning (false, "insertParent", "Can't insert parent form (%s) that has not the same DFN.", filename); 00302 } 00303 00304 return false; 00305 } |
|
Definition at line 188 of file form.cpp. References _Filename, NLGEORGES::CFormElmStruct::build(), clean(), Header, HeldElementCount, HeldElements, index, ParentList, NLGEORGES::CFileHeader::read(), NLGEORGES::CFormElmStruct::read(), readParent(), uint, and warning().
00189 { 00190 // Save the filename 00191 _Filename = CFile::getFilename (filename); 00192 00193 // Reset form 00194 clean (); 00195 00196 // Check node name 00197 if ( ((const char*)node->name == NULL) || (strcmp ((const char*)node->name, "FORM") != 0) ) 00198 { 00199 // Make an error message 00200 warning (true, "read", "XML Syntax error in block line %d, node (%s) should be FORM.", 00201 (int)node->content, node->name); 00202 } 00203 00204 // Get first struct node 00205 xmlNodePtr child = CIXml::getFirstChildNode (node, "STRUCT"); 00206 if (child == NULL) 00207 { 00208 // Throw exception 00209 warning (true, "read", "Syntax error in block line %d, node (%s) should have a STRUCT child node.", 00210 (int)node->content, node->name); 00211 } 00212 00213 // Read the struct 00214 Elements.read (child, loader, dfn, this); 00215 00216 // Get next struct node 00217 child = CIXml::getNextChildNode (node, "STRUCT"); 00218 uint index = 0; 00219 while ( (child != NULL) && (index < HeldElementCount)) 00220 { 00221 HeldElements[index]->read (child, loader, dfn, this); 00222 index++; 00223 } 00224 while (index < HeldElementCount) 00225 { 00226 // Build the Form 00227 HeldElements[index]->build (dfn); 00228 index++; 00229 } 00230 00231 // Get the old parent parameter 00232 const char *parent = (const char*)xmlGetProp (node, (xmlChar*)"Parent"); 00233 if (parent) 00234 { 00235 // Add a parent, xmlFree is done by readParent 00236 readParent (parent, loader); 00237 } 00238 00239 // Read the new parent nodes 00240 uint parentCount = CIXml::countChildren (node, "PARENT"); 00241 00242 // Reserve some parents 00243 ParentList.reserve (ParentList.size () + parentCount); 00244 00245 // Enum children node 00246 child = CIXml::getFirstChildNode (node, "PARENT"); 00247 while (child) 00248 { 00249 parent = (const char*)xmlGetProp (child, (xmlChar*)"Filename"); 00250 00251 // Add a parent, xmlFree is done by readParent 00252 readParent (parent, loader); 00253 00254 // Next node <PARENT> 00255 child = CIXml::getNextChildNode (child, "PARENT"); 00256 } 00257 00258 // Read the header 00259 Header.read (node); 00260 } |
|
Definition at line 154 of file form.cpp. References getParentCount(), insertParent(), NLGEORGES::CFormLoader::loadForm(), and warning(). Referenced by read().
00155 { 00156 // Load the parent 00157 CForm *theParent = (CForm*)loader.loadForm (parent); 00158 if (theParent != NULL) 00159 { 00160 // Set the parent 00161 if (!insertParent (getParentCount (), parent, theParent)) 00162 { 00163 // Make an error message 00164 std::string parentName = parent; 00165 00166 // Delete the value 00167 xmlFree ((void*)parent); 00168 00169 // Throw exception 00170 warning (true, "readParent", "Can't set the parent FORM named (%s). Check if it is the same form or if it use a differnt formDfn.", parentName.c_str ()); 00171 } 00172 } 00173 else 00174 { 00175 // Make an error message 00176 std::string parentName = parent; 00177 00178 // Delete the value 00179 xmlFree ((void*)parent); 00180 00181 // Throw exception 00182 warning (true, "readParent", "Can't load the parent FORM named (%s).", parentName.c_str ()); 00183 } 00184 } |
|
Definition at line 309 of file form.cpp. References ParentList, and uint.
00310 { 00311 ParentList.erase (ParentList.begin() + parent); 00312 } |
|
Definition at line 358 of file form.cpp. References _Filename, buffer, format, and NLGEORGES::warning(). Referenced by insertParent(), read(), and readParent().
00359 { 00360 // Make a buffer string 00361 va_list args; 00362 va_start( args, format ); 00363 char buffer[1024]; 00364 vsnprintf( buffer, 1024, format, args ); 00365 va_end( args ); 00366 00367 // Set the warning 00368 NLGEORGES::warning (exception, "(CForm::%s) in form (%s) : %s", function, _Filename.c_str (), buffer); 00369 } |
|
Definition at line 116 of file form.cpp. References _Filename, Header, HeldElementCount, HeldElements, ParentList, uint, NLGEORGES::CFileHeader::write(), and NLGEORGES::CFormElmStruct::write().
00117 { 00118 // Save the filename 00119 if (filename) 00120 _Filename = CFile::getFilename (filename); 00121 00122 // Create the first node 00123 xmlNodePtr node = xmlNewDocNode (doc, NULL, (const xmlChar*)"FORM", NULL); 00124 xmlDocSetRootElement (doc, node); 00125 00126 // List of parent 00127 for (uint parent=0; parent<ParentList.size (); parent++) 00128 { 00129 // Parent name not empty ? 00130 if (!(ParentList[parent].ParentFilename.empty())) 00131 { 00132 // Add a parent node 00133 xmlNodePtr parentNode = xmlNewChild ( node, NULL, (const xmlChar*)"PARENT", NULL ); 00134 xmlSetProp (parentNode, (const xmlChar*)"Filename", (const xmlChar*)ParentList[parent].ParentFilename.c_str()); 00135 } 00136 } 00137 00138 // Write elements 00139 Elements.write (node, this, NULL, true); 00140 00141 // Write held elements 00142 uint i; 00143 for (i=0; i<HeldElementCount; i++) 00144 { 00145 HeldElements[i]->write (node, this, NULL, true); 00146 } 00147 00148 // Header 00149 Header.write (node, georges4CVS); 00150 } |
|
Write the form in a stream.
Implements NLGEORGES::UForm. Definition at line 271 of file form.cpp. References NLMISC::COXml::getDocument(), and NLMISC::COXml::init().
00272 { 00273 // Xml stream 00274 COXml xmlStream; 00275 xmlStream.init (&stream); 00276 00277 // Write the file 00278 write (xmlStream.getDocument (), NULL, georges4CVS); 00279 } |
|
|
|
|
|
Definition at line 67 of file smart_ptr.h. |
|
Definition at line 132 of file form.h. Referenced by getDependencies(), getFilename(), read(), warning(), and write(). |
|
Definition at line 79 of file smart_ptr.h. Referenced by NLMISC::CRefCount::CRefCount(), NLMISC::CRefCount::getRefCount(), and NLMISC::CRefCount::~CRefCount(). |
|
Vector of CFormElm*.
Definition at line 78 of file form.h. Referenced by insertParent(). |
|
Definition at line 73 of file form.h. Referenced by getComment(), read(), and write(). |
|
Backup slots.
|
|
Referenced by NLMISC::CRefCount::CRefCount(). |
|
Pointer on the parent.
Definition at line 122 of file form.h. Referenced by clearParents(), getDependencies(), getParent(), getParentCount(), getParentFilename(), insertParent(), read(), removeParent(), and write(). |
|
Definition at line 80 of file smart_ptr.h. Referenced by NLMISC::CRefCount::CRefCount(), and NLMISC::CRefCount::~CRefCount(). |