void ChartSymbols::ProcessColorTables( TiXmlElement* colortableNodes ) { for( TiXmlNode *childNode = colortableNodes->FirstChild(); childNode; childNode = childNode->NextSibling() ) { TiXmlElement *child = childNode->ToElement(); colTable *colortable = new colTable; const char *pName = child->Attribute( "name" ); colortable->tableName = new wxString( pName, wxConvUTF8 ); TiXmlElement* colorNode = child->FirstChild()->ToElement(); while( colorNode ) { S52color color; wxString propVal; long numVal; if( wxString( colorNode->Value(), wxConvUTF8 ) == _T("graphics-file") ) { colortable->rasterFileName = wxString( colorNode->Attribute( "name" ), wxConvUTF8 ); goto next; } else { TGET_INT_PROPERTY_VALUE( colorNode, "r", color.R ) TGET_INT_PROPERTY_VALUE( colorNode, "g", color.G ) TGET_INT_PROPERTY_VALUE( colorNode, "b", color.B ) wxString key( colorNode->Attribute( "name" ), wxConvUTF8 ); strncpy( color.colName, key.char_str(), 5 ); color.colName[5] = 0; colortable->colors[key] = color; wxColour wxcolor( color.R, color.G, color.B ); colortable->wxColors[key] = wxcolor; } next: colorNode = colorNode->NextSiblingElement(); } colorTables->Add( (void *) colortable ); } }
void ChartSymbols::ProcessColorTables( wxXmlNode* colortableNodes ) { wxXmlNode* tableNode = colortableNodes->GetChildren(); while(tableNode) { colTable *colortable = new colTable; colortable->tableName = new wxString( tableNode->GetPropVal( _("name"), _("<void>"))); wxXmlNode* colorNode = tableNode->GetChildren(); while( colorNode ) { S52color color; wxString propVal; long numVal; if( colorNode->GetName() == _("graphics-file") ) { colortable->rasterFileName = colorNode->GetPropVal( _("name"), _("<void>") ); goto next; } else { GET_INT_PROPERTY_VALUE( colorNode, "r", color.R ) GET_INT_PROPERTY_VALUE( colorNode, "g", color.G ) GET_INT_PROPERTY_VALUE( colorNode, "b", color.B ) wxString key = colorNode->GetPropVal( _("name"), _("<N/A>")); strncpy( color.colName, key.char_str(), 5 ); color.colName[5] = 0; colortable->colors[key] = color; wxColour wxcolor ( color.R, color.G, color.B ); colortable->wxColors[key] = wxcolor; } next: colorNode = colorNode->GetNext(); } colorTables->Add( (void *) colortable ); tableNode = tableNode->GetNext(); } }
int RazdsParser::ParseCOLS( FILE *fp ) { int ret; colTable *ct = new colTable; // get color table name ChopS52Line( pBuf, '\0' ); ct->tableName = new wxString( pBuf + 19, wxConvUTF8 ); ColorTableArray->Add( (void *) ct ); // read color ret = ReadS52Line( pBuf, NEWLN, 0, fp ); while( 0 != strncmp( pBuf, "****", 4 ) ) { double x, y, L; S52color c; ChopS52Line( pBuf, ' ' ); strncpy( c.colName, pBuf + 9, 5 ); c.colName[5] = 0; sscanf( pBuf + 14, "%lf %lf %lf", &x, &y, &L ); _CIE2RGB( &c, x, y, L ); wxString colorName( c.colName, wxConvUTF8 ); ct->colors[colorName] = c; wxColour wxcolor( c.R, c.G, c.B ); ct->wxColors[colorName] = wxcolor; ret = ReadS52Line( pBuf, NEWLN, 0, fp ); } return ret; }