avp/src/win95/dummyobjectchunk.cpp

182 lines
3.9 KiB
C++
Raw Normal View History

#include "dummyobjectchunk.hpp"
#ifdef cencon
#define new my_new
#endif
//macro for helping to force inclusion of chunks when using libraries
FORCE_CHUNK_INCLUDE_IMPLEMENT(dummyobjectchunk)
RIF_IMPLEMENT_DYNCREATE("DUMMYOBJ",Dummy_Object_Chunk)
CHUNK_WITH_CHILDREN_LOADER("DUMMYOBJ",Dummy_Object_Chunk)
/*
Children for Dummy_Object_Chunk :
"DUMOBJDT" Dummy_Object_Data_Chunk
"DUMOBJTX" Dummy_Object_Text_Chunk
*/
Dummy_Object_Chunk::Dummy_Object_Chunk(Chunk_With_Children* parent,const char* _name,ChunkVectorInt& _location,ChunkVectorInt& min ,ChunkVectorInt& max ,ChunkQuat& orient)
:Chunk_With_Children(parent,"DUMMYOBJ")
{
new Dummy_Object_Data_Chunk(this,_name,_location,min,max,orient);
}
Dummy_Object_Data_Chunk* Dummy_Object_Chunk::get_data_chunk()
{
return (Dummy_Object_Data_Chunk*) lookup_single_child("DUMOBJDT");
}
const char* Dummy_Object_Chunk::get_text()
{
//find the text
Dummy_Object_Text_Chunk* text_chunk = (Dummy_Object_Text_Chunk*) lookup_single_child("DUMOBJTX");
if(!text_chunk)
{
//no text
return NULL;
}
return text_chunk->get_text();
}
void Dummy_Object_Chunk::set_text(const char* text)
{
//find the text chunk
Dummy_Object_Text_Chunk* text_chunk = (Dummy_Object_Text_Chunk*) lookup_single_child("DUMOBJTX");
if(!text || strlen(text)==0)
{
//delete the text chunk if it exists
delete text_chunk;
}
else
{
if(text_chunk)
{
//alter the existing text
text_chunk->set_text(text);
}
else
{
//create a new text chunk
new Dummy_Object_Text_Chunk(this,text);
}
}
}
//////////////////////////////Dummy_Object_Data_Chunk////////////////////////////////
RIF_IMPLEMENT_DYNCREATE("DUMOBJDT",Dummy_Object_Data_Chunk)
Dummy_Object_Data_Chunk::Dummy_Object_Data_Chunk(Dummy_Object_Chunk* parent,const char* _name ,ChunkVectorInt& _location,ChunkVectorInt& min ,ChunkVectorInt& max ,ChunkQuat& orient)
:Chunk(parent,"DUMOBJDT")
{
location=_location;
min_extents=min;
max_extents=max;
orientation=orient;
name=new char[strlen(_name)+1];
strcpy(name,_name);
}
Dummy_Object_Data_Chunk::Dummy_Object_Data_Chunk(Chunk_With_Children* parent,const char* data,size_t)
:Chunk(parent,"DUMOBJDT")
{
CHUNK_EXTRACT(location,ChunkVectorInt)
CHUNK_EXTRACT(min_extents,ChunkVectorInt)
CHUNK_EXTRACT(max_extents,ChunkVectorInt)
CHUNK_EXTRACT(orientation,ChunkQuat)
CHUNK_EXTRACT_STRING(name)
}
Dummy_Object_Data_Chunk::~Dummy_Object_Data_Chunk()
{
if(name) delete [] name;
}
void Dummy_Object_Data_Chunk::fill_data_block(char* data)
{
CHUNK_FILL_START
CHUNK_FILL(location,ChunkVectorInt)
CHUNK_FILL(min_extents,ChunkVectorInt)
CHUNK_FILL(max_extents,ChunkVectorInt)
CHUNK_FILL(orientation,ChunkQuat)
CHUNK_FILL_STRING(name)
}
size_t Dummy_Object_Data_Chunk::size_chunk()
{
chunk_size=12+3*sizeof(ChunkVectorInt)+sizeof(ChunkQuat);
chunk_size+=(strlen(name)+4)&~3;
return chunk_size;
}
/////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////Dummy_Object_Text_Chunk////////////////////////////////
RIF_IMPLEMENT_DYNCREATE("DUMOBJTX",Dummy_Object_Text_Chunk)
Dummy_Object_Text_Chunk::Dummy_Object_Text_Chunk(Dummy_Object_Chunk* parent,const char* _text)
:Chunk(parent,"DUMOBJTX"),text(NULL)
{
set_text(_text);
}
Dummy_Object_Text_Chunk::Dummy_Object_Text_Chunk(Chunk_With_Children* parent,const char* data,size_t)
:Chunk(parent,"DUMOBJTX")
{
CHUNK_EXTRACT_STRING(text)
}
Dummy_Object_Text_Chunk::~Dummy_Object_Text_Chunk()
{
delete [] text;
}
void Dummy_Object_Text_Chunk::fill_data_block(char* data)
{
CHUNK_FILL_START
CHUNK_FILL_STRING(text)
}
void Dummy_Object_Text_Chunk::set_text(const char* _text)
{
char* new_text = NULL;
if(_text)
{
new_text = new char[strlen(_text)+1];
strcpy(new_text,_text);
}
delete [] text;
text = new_text;
}
size_t Dummy_Object_Text_Chunk::size_chunk()
{
chunk_size=12;
if(text)
chunk_size+=(strlen(text)+4)&~3;
else
chunk_size+=4;
return chunk_size;
}