Various small fixes and minimal improvements
This was SVN commit r2035.
This commit is contained in:
parent
5b11dbb6b0
commit
5460b8982e
@ -164,10 +164,9 @@ bool CObjectBase::Load(const char* filename)
|
|||||||
|
|
||||||
XERO_ITER_EL(root, child)
|
XERO_ITER_EL(root, child)
|
||||||
{
|
{
|
||||||
int element_name = child.getNodeName();
|
int child_name = child.getNodeName();
|
||||||
CStr element_value (child.getText());
|
|
||||||
|
|
||||||
if (element_name == el_group)
|
if (child_name == el_group)
|
||||||
{
|
{
|
||||||
m_Variants.resize(m_Variants.size()+1);
|
m_Variants.resize(m_Variants.size()+1);
|
||||||
|
|
||||||
@ -246,7 +245,7 @@ bool CObjectBase::Load(const char* filename)
|
|||||||
m_Variants.pop_back();
|
m_Variants.pop_back();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (element_name == el_material)
|
else if (child_name == el_material)
|
||||||
{
|
{
|
||||||
m_Material = child.getText();
|
m_Material = child.getText();
|
||||||
}
|
}
|
||||||
|
@ -201,7 +201,7 @@ void CObjectManager::LoadObjectsIn(CStr& pathname)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_ObjectTypes[0].m_ObjectNameToFilename[objectName] = *it;
|
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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -308,7 +308,7 @@ int sem_timedwait(sem_t* sem, const struct timespec* abs_timeout)
|
|||||||
|
|
||||||
HANDLE h = sem_t_to_HANDLE(sem);
|
HANDLE h = sem_t_to_HANDLE(sem);
|
||||||
DWORD ret = WaitForSingleObject(h, timeout_ms);
|
DWORD ret = WaitForSingleObject(h, timeout_ms);
|
||||||
// succesfully decremented semaphore; bail.
|
// successfully decremented semaphore; bail.
|
||||||
if(ret == WAIT_OBJECT_0)
|
if(ret == WAIT_OBJECT_0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -132,8 +132,8 @@ public:
|
|||||||
// Miscellaneous utility functions:
|
// Miscellaneous utility functions:
|
||||||
namespace AtlasObject
|
namespace AtlasObject
|
||||||
{
|
{
|
||||||
void LoadFromXML(AtObj& obj, const wchar_t* filename);
|
AtObj LoadFromXML(const wchar_t* filename);
|
||||||
void SaveToXML(AtObj& obj, const wchar_t* filename);
|
bool SaveToXML(AtObj& obj, const wchar_t* filename);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // ATLASOBJECT_H__
|
#endif // ATLASOBJECT_H__
|
||||||
|
@ -140,8 +140,8 @@ void AtObj::set(const char* key, const wchar_t* value)
|
|||||||
|
|
||||||
bool AtObj::hasContent() const
|
bool AtObj::hasContent() const
|
||||||
{
|
{
|
||||||
if (! p)
|
if (!p)
|
||||||
return true;
|
return false;
|
||||||
|
|
||||||
return p->hasContent();
|
return p->hasContent();
|
||||||
}
|
}
|
||||||
|
@ -19,4 +19,4 @@ namespace AtlasObject
|
|||||||
// as an easy way of visualising the data (without any horridly ugly
|
// as an easy way of visualising the data (without any horridly ugly
|
||||||
// XML junk)
|
// XML junk)
|
||||||
std::wstring ConvertToString(const AtObj& obj);
|
std::wstring ConvertToString(const AtObj& obj);
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,7 @@ XERCES_CPP_NAMESPACE_USE
|
|||||||
|
|
||||||
static AtSmartPtr<AtNode> ConvertNode(DOMElement* element);
|
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
|
// TODO: Convert wchar_t* to XMLCh* when running under GCC
|
||||||
assert(sizeof(wchar_t) == sizeof(XMLCh));
|
assert(sizeof(wchar_t) == sizeof(XMLCh));
|
||||||
@ -39,16 +39,24 @@ void AtlasObject::LoadFromXML(AtObj& obj, const wchar_t* filename)
|
|||||||
if (parser->getErrorCount() != 0)
|
if (parser->getErrorCount() != 0)
|
||||||
{
|
{
|
||||||
assert(! "Error while loading XML - invalid XML data?");
|
assert(! "Error while loading XML - invalid XML data?");
|
||||||
return;
|
return AtObj();
|
||||||
}
|
}
|
||||||
|
|
||||||
DOMDocument* doc = parser->getDocument();
|
DOMDocument* doc = parser->getDocument();
|
||||||
DOMElement* root = doc->getDocumentElement();
|
DOMElement* root = doc->getDocumentElement();
|
||||||
|
|
||||||
|
AtObj obj;
|
||||||
obj.p = ConvertNode(root);
|
obj.p = ConvertNode(root);
|
||||||
|
|
||||||
|
AtObj rootObj;
|
||||||
|
char* rootName = XMLString::transcode(root->getNodeName());
|
||||||
|
rootObj.set(rootName, obj);
|
||||||
|
XMLString::release(&rootName);
|
||||||
|
|
||||||
// TODO: Initialise/terminate properly
|
// TODO: Initialise/terminate properly
|
||||||
// XMLPlatformUtils::Terminate();
|
// XMLPlatformUtils::Terminate();
|
||||||
|
|
||||||
|
return rootObj;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert from a DOMElement to an AtNode
|
// Convert from a DOMElement to an AtNode
|
||||||
@ -70,16 +78,14 @@ static AtSmartPtr<AtNode> ConvertNode(DOMElement* element)
|
|||||||
|
|
||||||
// Use its name for the AtNode key
|
// Use its name for the AtNode key
|
||||||
char* name = XMLString::transcode(node->getNodeName());
|
char* name = XMLString::transcode(node->getNodeName());
|
||||||
const std::string namestr (name);
|
|
||||||
|
|
||||||
// Recursively convert the sub-element, and add it into this node
|
// Recursively convert the sub-element, and add it into this node
|
||||||
AtNode::child_pairtype n (
|
obj->children.insert(AtNode::child_pairtype(
|
||||||
namestr, ConvertNode((DOMElement*)node)
|
name, ConvertNode((DOMElement*)node)
|
||||||
);
|
));
|
||||||
obj->children.insert(n);
|
|
||||||
|
|
||||||
// Free memory
|
// Free memory
|
||||||
XMLString::release(&name);
|
XMLString::release((char**)&name);
|
||||||
}
|
}
|
||||||
else if (type == DOMNode::TEXT_NODE)
|
else if (type == DOMNode::TEXT_NODE)
|
||||||
{
|
{
|
||||||
@ -127,7 +133,7 @@ static DOMNode* BuildDOM(DOMDocument* doc, const XMLCh* name, AtNode::Ptr p)
|
|||||||
return node;
|
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
|
// TODO: Convert wchar_t* to XMLCh* when running under GCC
|
||||||
assert(sizeof(wchar_t) == sizeof(XMLCh));
|
assert(sizeof(wchar_t) == sizeof(XMLCh));
|
||||||
@ -136,9 +142,9 @@ void AtlasObject::SaveToXML(AtObj& obj, const wchar_t* filename)
|
|||||||
XMLPlatformUtils::Initialize();
|
XMLPlatformUtils::Initialize();
|
||||||
|
|
||||||
// Why does it take so much work just to create a DOMWriter? :-(
|
// Why does it take so much work just to create a DOMWriter? :-(
|
||||||
XMLCh tempStr[100];
|
XMLCh domFeatures[100];
|
||||||
XMLString::transcode("LS", tempStr, 99);
|
XMLString::transcode("LS", domFeatures, 99); // maybe "LS" means "load/save", but I really don't know
|
||||||
DOMImplementation* impl = DOMImplementationRegistry::getDOMImplementation(tempStr);
|
DOMImplementation* impl = DOMImplementationRegistry::getDOMImplementation(domFeatures);
|
||||||
DOMWriter* writer = ((DOMImplementationLS*)impl)->createDOMWriter();
|
DOMWriter* writer = ((DOMImplementationLS*)impl)->createDOMWriter();
|
||||||
|
|
||||||
if (writer->canSetFeature(XMLUni::fgDOMWRTDiscardDefaultContent, true))
|
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))
|
if (writer->canSetFeature(XMLUni::fgDOMWRTFormatPrettyPrint, true))
|
||||||
writer->setFeature(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
|
try
|
||||||
{
|
{
|
||||||
|
DOMDocument* doc = impl->createDocument();
|
||||||
|
doc->appendChild(BuildDOM(doc, rootName, firstChild));
|
||||||
|
|
||||||
XMLFormatTarget* FormatTarget = new LocalFileFormatTarget((XMLCh*)filename);
|
XMLFormatTarget* FormatTarget = new LocalFileFormatTarget((XMLCh*)filename);
|
||||||
writer->writeNode(FormatTarget, *doc);
|
writer->writeNode(FormatTarget, *doc);
|
||||||
delete FormatTarget;
|
delete FormatTarget;
|
||||||
@ -160,18 +178,20 @@ void AtlasObject::SaveToXML(AtObj& obj, const wchar_t* filename)
|
|||||||
char* message = XMLString::transcode(e.getMessage());
|
char* message = XMLString::transcode(e.getMessage());
|
||||||
assert(! "XML exception - maybe failed while writing the file");
|
assert(! "XML exception - maybe failed while writing the file");
|
||||||
XMLString::release(&message);
|
XMLString::release(&message);
|
||||||
XMLPlatformUtils::Terminate();
|
// XMLPlatformUtils::Terminate();
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
catch (const DOMException& e) {
|
catch (const DOMException& e) {
|
||||||
char* message = XMLString::transcode(e.msg);
|
char* message = XMLString::transcode(e.msg);
|
||||||
assert(! "DOM exception");
|
assert(! "DOM exception");
|
||||||
XMLString::release(&message);
|
XMLString::release(&message);
|
||||||
XMLPlatformUtils::Terminate();
|
// XMLPlatformUtils::Terminate();
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
writer->release();
|
writer->release();
|
||||||
|
|
||||||
// XMLPlatformUtils::Terminate();
|
// XMLPlatformUtils::Terminate();
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -67,22 +67,33 @@ ActorEditor::ActorEditor(wxWindow* parent)
|
|||||||
|
|
||||||
void ActorEditor::Import(AtObj& in)
|
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);
|
m_CastShadows->SetValue(true);
|
||||||
else
|
else
|
||||||
m_CastShadows->SetValue(false);
|
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())
|
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;
|
||||||
}
|
}
|
||||||
|
@ -9,11 +9,11 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
void Import(AtObj& in);
|
void Import(AtObj& in);
|
||||||
void Export(AtObj& out);
|
AtObj Export();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ActorEditorListCtrl* m_ActorEditorListCtrl;
|
ActorEditorListCtrl* m_ActorEditorListCtrl;
|
||||||
|
|
||||||
wxCheckBox* m_CastShadows;
|
wxCheckBox* m_CastShadows;
|
||||||
wxTextCtrl* m_Material;
|
wxTextCtrl* m_Material;
|
||||||
};
|
};
|
||||||
|
@ -45,8 +45,10 @@ void ActorEditorListCtrl::Import(AtObj& in)
|
|||||||
UpdateDisplay();
|
UpdateDisplay();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ActorEditorListCtrl::Export(AtObj& out)
|
AtObj ActorEditorListCtrl::Export()
|
||||||
{
|
{
|
||||||
|
AtObj out;
|
||||||
|
|
||||||
AtObj group;
|
AtObj group;
|
||||||
|
|
||||||
for (size_t i = 0; i < m_ListData.size(); ++i)
|
for (size_t i = 0; i < m_ListData.size(); ++i)
|
||||||
@ -66,6 +68,8 @@ void ActorEditorListCtrl::Export(AtObj& out)
|
|||||||
|
|
||||||
if (! group.isNull())
|
if (! group.isNull())
|
||||||
out.add("group", group);
|
out.add("group", group);
|
||||||
|
|
||||||
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxListItemAttr* ActorEditorListCtrl::OnGetItemAttr(long item) const
|
wxListItemAttr* ActorEditorListCtrl::OnGetItemAttr(long item) const
|
||||||
|
@ -17,7 +17,7 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void Import(AtObj& in);
|
void Import(AtObj& in);
|
||||||
void Export(AtObj& out);
|
AtObj Export();
|
||||||
|
|
||||||
wxListItemAttr m_ListItemAttr_Model[2];
|
wxListItemAttr m_ListItemAttr_Model[2];
|
||||||
wxListItemAttr m_ListItemAttr_Texture[2];
|
wxListItemAttr m_ListItemAttr_Texture[2];
|
||||||
|
@ -26,9 +26,9 @@ void AnimListEditor::Import(AtObj& in)
|
|||||||
m_MainListBox->Import(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();
|
UpdateDisplay();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AnimListEditorListCtrl::Export(AtObj& out)
|
AtObj AnimListEditorListCtrl::Export()
|
||||||
{
|
{
|
||||||
|
AtObj out;
|
||||||
for (size_t i = 0; i < m_ListData.size(); ++i)
|
for (size_t i = 0; i < m_ListData.size(); ++i)
|
||||||
out.add("animation", m_ListData[i]);
|
out.add("animation", m_ListData[i]);
|
||||||
|
return out;
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,7 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
void Import(AtObj& in);
|
void Import(AtObj& in);
|
||||||
void Export(AtObj& out);
|
AtObj Export();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
AnimListEditorListCtrl* m_MainListBox;
|
AnimListEditorListCtrl* m_MainListBox;
|
||||||
@ -34,5 +34,5 @@ public:
|
|||||||
void OnUpdate(wxCommandEvent& event);
|
void OnUpdate(wxCommandEvent& event);
|
||||||
|
|
||||||
void Import(AtObj& in);
|
void Import(AtObj& in);
|
||||||
void Export(AtObj& out);
|
AtObj Export();
|
||||||
};
|
};
|
||||||
|
@ -26,9 +26,9 @@ void PropListEditor::Import(AtObj& in)
|
|||||||
m_MainListBox->Import(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();
|
UpdateDisplay();
|
||||||
}
|
}
|
||||||
|
|
||||||
void PropListEditorListCtrl::Export(AtObj& out)
|
AtObj PropListEditorListCtrl::Export()
|
||||||
{
|
{
|
||||||
|
AtObj out;
|
||||||
for (size_t i = 0; i < m_ListData.size(); ++i)
|
for (size_t i = 0; i < m_ListData.size(); ++i)
|
||||||
out.add("prop", m_ListData[i]);
|
out.add("prop", m_ListData[i]);
|
||||||
|
return out;
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,7 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
void Import(AtObj& in);
|
void Import(AtObj& in);
|
||||||
void Export(AtObj& out);
|
AtObj Export();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
PropListEditorListCtrl* m_MainListBox;
|
PropListEditorListCtrl* m_MainListBox;
|
||||||
@ -34,5 +34,5 @@ public:
|
|||||||
void OnUpdate(wxCommandEvent& event);
|
void OnUpdate(wxCommandEvent& event);
|
||||||
|
|
||||||
void Import(AtObj& in);
|
void Import(AtObj& in);
|
||||||
void Export(AtObj& out);
|
AtObj Export();
|
||||||
};
|
};
|
||||||
|
@ -34,4 +34,4 @@ private:
|
|||||||
long m_DragSource;
|
long m_DragSource;
|
||||||
|
|
||||||
DECLARE_EVENT_TABLE();
|
DECLARE_EVENT_TABLE();
|
||||||
};
|
};
|
||||||
|
@ -80,8 +80,7 @@ void FieldEditCtrl_Dialog::StartEdit(wxWindow* parent, wxRect WXUNUSED(rect), lo
|
|||||||
|
|
||||||
if (ret == wxID_OK)
|
if (ret == wxID_OK)
|
||||||
{
|
{
|
||||||
AtObj out;
|
AtObj out (dialog->Export());
|
||||||
dialog->Export(out);
|
|
||||||
|
|
||||||
AtlasWindowCommandProc::GetFromParentFrame(parent)->Submit(
|
AtlasWindowCommandProc::GetFromParentFrame(parent)->Submit(
|
||||||
new EditCommand_Dialog(editCtrl, row, col, out)
|
new EditCommand_Dialog(editCtrl, row, col, out)
|
||||||
@ -89,4 +88,4 @@ void FieldEditCtrl_Dialog::StartEdit(wxWindow* parent, wxRect WXUNUSED(rect), lo
|
|||||||
}
|
}
|
||||||
|
|
||||||
delete dialog;
|
delete dialog;
|
||||||
}
|
}
|
||||||
|
@ -32,4 +32,3 @@ protected:
|
|||||||
private:
|
private:
|
||||||
wxString m_DialogType;
|
wxString m_DialogType;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -19,4 +19,4 @@ private:
|
|||||||
EditableListCtrl* m_listCtrl;
|
EditableListCtrl* m_listCtrl;
|
||||||
long m_Row;
|
long m_Row;
|
||||||
int m_Col;
|
int m_Col;
|
||||||
};
|
};
|
||||||
|
@ -10,4 +10,4 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
DECLARE_EVENT_TABLE();
|
DECLARE_EVENT_TABLE();
|
||||||
};
|
};
|
||||||
|
@ -82,8 +82,7 @@ void AtlasWindow::OnImport(wxCommandEvent& WXUNUSED(event))
|
|||||||
|
|
||||||
wxString filename = dlg.GetPath();
|
wxString filename = dlg.GetPath();
|
||||||
|
|
||||||
AtObj file;
|
AtObj file (AtlasObject::LoadFromXML(filename.c_str()));
|
||||||
AtlasObject::LoadFromXML(file, filename.c_str());
|
|
||||||
|
|
||||||
Import(file);
|
Import(file);
|
||||||
|
|
||||||
@ -99,8 +98,7 @@ void AtlasWindow::OnExport(wxCommandEvent& WXUNUSED(event))
|
|||||||
|
|
||||||
wxString filename = dlg.GetPath();
|
wxString filename = dlg.GetPath();
|
||||||
|
|
||||||
AtObj file;
|
AtObj file (Export());
|
||||||
Export(file);
|
|
||||||
|
|
||||||
AtlasObject::SaveToXML(file, filename.c_str());
|
AtlasObject::SaveToXML(file, filename.c_str());
|
||||||
|
|
||||||
|
@ -35,4 +35,4 @@ private:
|
|||||||
wxString m_WindowTitle;
|
wxString m_WindowTitle;
|
||||||
|
|
||||||
DECLARE_EVENT_TABLE();
|
DECLARE_EVENT_TABLE();
|
||||||
};
|
};
|
||||||
|
@ -7,7 +7,7 @@ class IAtlasExporter // and also importer, but I can't think of a nice concise n
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual void Import(AtObj& in)=0;
|
virtual void Import(AtObj& in)=0;
|
||||||
virtual void Export(AtObj& out)=0;
|
virtual AtObj Export()=0;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // IATLASEXPORTER_H__
|
#endif // IATLASEXPORTER_H__
|
||||||
|
@ -1 +1 @@
|
|||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
|
@ -1,23 +1,54 @@
|
|||||||
* Copy and paste
|
* Sort this list
|
||||||
|
|
||||||
* s/PropListEditor/PropListEditor/
|
===
|
||||||
|
|
||||||
* Rearrange directory structure
|
|
||||||
|
|
||||||
* Don't hardcode "actor" in XML files (urgh)
|
* Don't hardcode "actor" in XML files (urgh)
|
||||||
|
|
||||||
* Document lots
|
|
||||||
|
|
||||||
* Make import undoable
|
* 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??
|
* wxListItemAttr* OnGetItemAttr(long item) >>>const<<< - wx documentation??
|
||||||
|
|
||||||
* Better widths
|
* 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
|
|
Loading…
Reference in New Issue
Block a user