Various small fixes and minimal improvements

This was SVN commit r2035.
This commit is contained in:
Ykkrosh 2005-03-22 13:54:37 +00:00
parent 5b11dbb6b0
commit 5460b8982e
25 changed files with 143 additions and 78 deletions

View File

@ -164,10 +164,9 @@ bool CObjectBase::Load(const char* filename)
XERO_ITER_EL(root, child)
{
int element_name = child.getNodeName();
CStr element_value (child.getText());
int child_name = child.getNodeName();
if (element_name == el_group)
if (child_name == el_group)
{
m_Variants.resize(m_Variants.size()+1);
@ -246,7 +245,7 @@ bool CObjectBase::Load(const char* filename)
m_Variants.pop_back();
}
}
else if (element_name == el_material)
else if (child_name == el_material)
{
m_Material = child.getText();
}

View File

@ -201,7 +201,7 @@ void CObjectManager::LoadObjectsIn(CStr& pathname)
else
{
m_ObjectTypes[0].m_ObjectNameToFilename[objectName] = *it;
debug_out("%s -> %s\n", objectName.c_str(), it->c_str());
// debug_out("%s -> %s\n", objectName.c_str(), it->c_str());
}
}

View File

@ -308,7 +308,7 @@ int sem_timedwait(sem_t* sem, const struct timespec* abs_timeout)
HANDLE h = sem_t_to_HANDLE(sem);
DWORD ret = WaitForSingleObject(h, timeout_ms);
// succesfully decremented semaphore; bail.
// successfully decremented semaphore; bail.
if(ret == WAIT_OBJECT_0)
return 0;

View File

@ -132,8 +132,8 @@ public:
// Miscellaneous utility functions:
namespace AtlasObject
{
void LoadFromXML(AtObj& obj, const wchar_t* filename);
void SaveToXML(AtObj& obj, const wchar_t* filename);
AtObj LoadFromXML(const wchar_t* filename);
bool SaveToXML(AtObj& obj, const wchar_t* filename);
};
#endif // ATLASOBJECT_H__

View File

@ -140,8 +140,8 @@ void AtObj::set(const char* key, const wchar_t* value)
bool AtObj::hasContent() const
{
if (! p)
return true;
if (!p)
return false;
return p->hasContent();
}

View File

@ -19,4 +19,4 @@ namespace AtlasObject
// as an easy way of visualising the data (without any horridly ugly
// XML junk)
std::wstring ConvertToString(const AtObj& obj);
}
}

View File

@ -21,7 +21,7 @@ XERCES_CPP_NAMESPACE_USE
static AtSmartPtr<AtNode> ConvertNode(DOMElement* element);
void AtlasObject::LoadFromXML(AtObj& obj, const wchar_t* filename)
AtObj AtlasObject::LoadFromXML(const wchar_t* filename)
{
// TODO: Convert wchar_t* to XMLCh* when running under GCC
assert(sizeof(wchar_t) == sizeof(XMLCh));
@ -39,16 +39,24 @@ void AtlasObject::LoadFromXML(AtObj& obj, const wchar_t* filename)
if (parser->getErrorCount() != 0)
{
assert(! "Error while loading XML - invalid XML data?");
return;
return AtObj();
}
DOMDocument* doc = parser->getDocument();
DOMElement* root = doc->getDocumentElement();
AtObj obj;
obj.p = ConvertNode(root);
AtObj rootObj;
char* rootName = XMLString::transcode(root->getNodeName());
rootObj.set(rootName, obj);
XMLString::release(&rootName);
// TODO: Initialise/terminate properly
// XMLPlatformUtils::Terminate();
return rootObj;
}
// Convert from a DOMElement to an AtNode
@ -70,16 +78,14 @@ static AtSmartPtr<AtNode> ConvertNode(DOMElement* element)
// Use its name for the AtNode key
char* name = XMLString::transcode(node->getNodeName());
const std::string namestr (name);
// Recursively convert the sub-element, and add it into this node
AtNode::child_pairtype n (
namestr, ConvertNode((DOMElement*)node)
);
obj->children.insert(n);
obj->children.insert(AtNode::child_pairtype(
name, ConvertNode((DOMElement*)node)
));
// Free memory
XMLString::release(&name);
XMLString::release((char**)&name);
}
else if (type == DOMNode::TEXT_NODE)
{
@ -127,7 +133,7 @@ static DOMNode* BuildDOM(DOMDocument* doc, const XMLCh* name, AtNode::Ptr p)
return node;
}
void AtlasObject::SaveToXML(AtObj& obj, const wchar_t* filename)
bool AtlasObject::SaveToXML(AtObj& obj, const wchar_t* filename)
{
// TODO: Convert wchar_t* to XMLCh* when running under GCC
assert(sizeof(wchar_t) == sizeof(XMLCh));
@ -136,9 +142,9 @@ void AtlasObject::SaveToXML(AtObj& obj, const wchar_t* filename)
XMLPlatformUtils::Initialize();
// Why does it take so much work just to create a DOMWriter? :-(
XMLCh tempStr[100];
XMLString::transcode("LS", tempStr, 99);
DOMImplementation* impl = DOMImplementationRegistry::getDOMImplementation(tempStr);
XMLCh domFeatures[100];
XMLString::transcode("LS", domFeatures, 99); // maybe "LS" means "load/save", but I really don't know
DOMImplementation* impl = DOMImplementationRegistry::getDOMImplementation(domFeatures);
DOMWriter* writer = ((DOMImplementationLS*)impl)->createDOMWriter();
if (writer->canSetFeature(XMLUni::fgDOMWRTDiscardDefaultContent, true))
@ -147,11 +153,23 @@ void AtlasObject::SaveToXML(AtObj& obj, const wchar_t* filename)
if (writer->canSetFeature(XMLUni::fgDOMWRTFormatPrettyPrint, true))
writer->setFeature(XMLUni::fgDOMWRTFormatPrettyPrint, true);
DOMDocument* doc = impl->createDocument();
doc->appendChild(BuildDOM(doc, L"actor", obj.p)); // TODO: this is stupid
// Find the root element of the object:
if (obj.p->children.size() != 1)
{
assert(! "SaveToXML: root must only have one child");
return false;
}
XMLCh rootName[255];
XMLString::transcode(obj.p->children.begin()->first.c_str(), rootName, 255);
AtNode::Ptr firstChild (obj.p->children.begin()->second);
try
{
DOMDocument* doc = impl->createDocument();
doc->appendChild(BuildDOM(doc, rootName, firstChild));
XMLFormatTarget* FormatTarget = new LocalFileFormatTarget((XMLCh*)filename);
writer->writeNode(FormatTarget, *doc);
delete FormatTarget;
@ -160,18 +178,20 @@ void AtlasObject::SaveToXML(AtObj& obj, const wchar_t* filename)
char* message = XMLString::transcode(e.getMessage());
assert(! "XML exception - maybe failed while writing the file");
XMLString::release(&message);
XMLPlatformUtils::Terminate();
return;
// XMLPlatformUtils::Terminate();
return false;
}
catch (const DOMException& e) {
char* message = XMLString::transcode(e.msg);
assert(! "DOM exception");
XMLString::release(&message);
XMLPlatformUtils::Terminate();
return;
// XMLPlatformUtils::Terminate();
return false;
}
writer->release();
// XMLPlatformUtils::Terminate();
return true;
}

View File

@ -67,22 +67,33 @@ ActorEditor::ActorEditor(wxWindow* parent)
void ActorEditor::Import(AtObj& in)
{
m_ActorEditorListCtrl->Import(in);
if (! in["actor"].defined())
{
// TODO: report error
return;
}
if (in["castshadow"].defined())
AtObj actor (in["actor"]);
m_ActorEditorListCtrl->Import(actor);
if (actor["castshadow"].defined())
m_CastShadows->SetValue(true);
else
m_CastShadows->SetValue(false);
m_Material->SetValue(in["material"]);
m_Material->SetValue(actor["material"]);
}
void ActorEditor::Export(AtObj& out)
AtObj ActorEditor::Export()
{
m_ActorEditorListCtrl->Export(out);
AtObj actor (m_ActorEditorListCtrl->Export());
if (m_CastShadows->IsChecked())
out.set("castshadow", L"true");
actor.set("castshadow", L"true");
out.set("material", m_Material->GetValue().c_str());
actor.set("material", m_Material->GetValue().c_str());
AtObj out;
out.set("actor", actor);
return out;
}

View File

@ -9,11 +9,11 @@ public:
protected:
void Import(AtObj& in);
void Export(AtObj& out);
AtObj Export();
private:
ActorEditorListCtrl* m_ActorEditorListCtrl;
wxCheckBox* m_CastShadows;
wxTextCtrl* m_Material;
};
};

View File

@ -45,8 +45,10 @@ void ActorEditorListCtrl::Import(AtObj& in)
UpdateDisplay();
}
void ActorEditorListCtrl::Export(AtObj& out)
AtObj ActorEditorListCtrl::Export()
{
AtObj out;
AtObj group;
for (size_t i = 0; i < m_ListData.size(); ++i)
@ -66,6 +68,8 @@ void ActorEditorListCtrl::Export(AtObj& out)
if (! group.isNull())
out.add("group", group);
return out;
}
wxListItemAttr* ActorEditorListCtrl::OnGetItemAttr(long item) const

View File

@ -17,7 +17,7 @@ public:
private:
void Import(AtObj& in);
void Export(AtObj& out);
AtObj Export();
wxListItemAttr m_ListItemAttr_Model[2];
wxListItemAttr m_ListItemAttr_Texture[2];

View File

@ -26,9 +26,9 @@ void AnimListEditor::Import(AtObj& in)
m_MainListBox->Import(in);
}
void AnimListEditor::Export(AtObj& out)
AtObj AnimListEditor::Export()
{
m_MainListBox->Export(out);
return m_MainListBox->Export();
}
//////////////////////////////////////////////////////////////////////////
@ -50,8 +50,10 @@ void AnimListEditorListCtrl::Import(AtObj& in)
UpdateDisplay();
}
void AnimListEditorListCtrl::Export(AtObj& out)
AtObj AnimListEditorListCtrl::Export()
{
AtObj out;
for (size_t i = 0; i < m_ListData.size(); ++i)
out.add("animation", m_ListData[i]);
return out;
}

View File

@ -16,7 +16,7 @@ public:
protected:
void Import(AtObj& in);
void Export(AtObj& out);
AtObj Export();
private:
AnimListEditorListCtrl* m_MainListBox;
@ -34,5 +34,5 @@ public:
void OnUpdate(wxCommandEvent& event);
void Import(AtObj& in);
void Export(AtObj& out);
AtObj Export();
};

View File

@ -26,9 +26,9 @@ void PropListEditor::Import(AtObj& in)
m_MainListBox->Import(in);
}
void PropListEditor::Export(AtObj& out)
AtObj PropListEditor::Export()
{
m_MainListBox->Export(out);
return m_MainListBox->Export();
}
//////////////////////////////////////////////////////////////////////////
@ -49,8 +49,10 @@ void PropListEditorListCtrl::Import(AtObj& in)
UpdateDisplay();
}
void PropListEditorListCtrl::Export(AtObj& out)
AtObj PropListEditorListCtrl::Export()
{
AtObj out;
for (size_t i = 0; i < m_ListData.size(); ++i)
out.add("prop", m_ListData[i]);
return out;
}

View File

@ -16,7 +16,7 @@ public:
protected:
void Import(AtObj& in);
void Export(AtObj& out);
AtObj Export();
private:
PropListEditorListCtrl* m_MainListBox;
@ -34,5 +34,5 @@ public:
void OnUpdate(wxCommandEvent& event);
void Import(AtObj& in);
void Export(AtObj& out);
AtObj Export();
};

View File

@ -34,4 +34,4 @@ private:
long m_DragSource;
DECLARE_EVENT_TABLE();
};
};

View File

@ -80,8 +80,7 @@ void FieldEditCtrl_Dialog::StartEdit(wxWindow* parent, wxRect WXUNUSED(rect), lo
if (ret == wxID_OK)
{
AtObj out;
dialog->Export(out);
AtObj out (dialog->Export());
AtlasWindowCommandProc::GetFromParentFrame(parent)->Submit(
new EditCommand_Dialog(editCtrl, row, col, out)
@ -89,4 +88,4 @@ void FieldEditCtrl_Dialog::StartEdit(wxWindow* parent, wxRect WXUNUSED(rect), lo
}
delete dialog;
}
}

View File

@ -32,4 +32,3 @@ protected:
private:
wxString m_DialogType;
};

View File

@ -19,4 +19,4 @@ private:
EditableListCtrl* m_listCtrl;
long m_Row;
int m_Col;
};
};

View File

@ -10,4 +10,4 @@ public:
private:
DECLARE_EVENT_TABLE();
};
};

View File

@ -82,8 +82,7 @@ void AtlasWindow::OnImport(wxCommandEvent& WXUNUSED(event))
wxString filename = dlg.GetPath();
AtObj file;
AtlasObject::LoadFromXML(file, filename.c_str());
AtObj file (AtlasObject::LoadFromXML(filename.c_str()));
Import(file);
@ -99,8 +98,7 @@ void AtlasWindow::OnExport(wxCommandEvent& WXUNUSED(event))
wxString filename = dlg.GetPath();
AtObj file;
Export(file);
AtObj file (Export());
AtlasObject::SaveToXML(file, filename.c_str());

View File

@ -35,4 +35,4 @@ private:
wxString m_WindowTitle;
DECLARE_EVENT_TABLE();
};
};

View File

@ -7,7 +7,7 @@ class IAtlasExporter // and also importer, but I can't think of a nice concise n
{
public:
virtual void Import(AtObj& in)=0;
virtual void Export(AtObj& out)=0;
virtual AtObj Export()=0;
};
#endif // IATLASEXPORTER_H__

View File

@ -1 +1 @@
#include "stdafx.h"
#include "stdafx.h"

View File

@ -1,23 +1,54 @@
* Copy and paste
* Sort this list
* s/PropListEditor/PropListEditor/
* Rearrange directory structure
===
* Don't hardcode "actor" in XML files (urgh)
* Document lots
* Make import undoable
* Combo boxes for prop/anim names, loaded from file
* Right click to edit
===
* Better input controls (=> export nicely, support undo, etc)
* Copy and paste
* Browse for meshes/actors/etc.
* Save on exit
* Help (tooltips, etc)
===
* Window size memory
* Column width memory
* Allow reset memory
* Input validation?
* Browse for meshes/actors/etc, with mods
* Customised AtObj->string conversion
* Import/export filter, for validation(?) and for handling attributes
* Undo in text-editing boxes
* AtlasObjectXML error handling
* Use standard wxWidgets 2.5.4 release
===
* Document lots
* wxListItemAttr* OnGetItemAttr(long item) >>>const<<< - wx documentation??
* Better widths
* Combo boxes for prop/anim names, loaded from file
* Input validation?
* Better input controls (=> export nicely, support undo, etc)
* Handle undo correctly after importing