diff --git a/editor/editor.vcproj b/editor/editor.vcproj index dee7738..ea1af99 100644 --- a/editor/editor.vcproj +++ b/editor/editor.vcproj @@ -188,6 +188,10 @@ > + + diff --git a/editor/syncdocument.cpp b/editor/syncdocument.cpp new file mode 100644 index 0000000..62312e8 --- /dev/null +++ b/editor/syncdocument.cpp @@ -0,0 +1,106 @@ +#include "syncdocument.h" + +#import named_guids + +bool SyncDocument::load(const std::string &fileName) +{ + MSXML2::IXMLDOMDocumentPtr doc(MSXML2::CLSID_DOMDocument); + try + { + doc->load(fileName.c_str()); + MSXML2::IXMLDOMNodeListPtr trackNodes = doc->documentElement->selectNodes("track"); + for (int i = 0; i < trackNodes->Getlength(); ++i) + { + MSXML2::IXMLDOMNodePtr trackNode = trackNodes->Getitem(i); + MSXML2::IXMLDOMNamedNodeMapPtr attribs = trackNode->Getattributes(); + + std::string name = attribs->getNamedItem("name")->Gettext(); + sync::Track &t = getTrack(name); + + MSXML2::IXMLDOMNodeListPtr rowNodes = trackNode->GetchildNodes(); + for (int i = 0; i < rowNodes->Getlength(); ++i) + { + MSXML2::IXMLDOMNodePtr keyNode = rowNodes->Getitem(i); + std::string baseName = keyNode->GetbaseName(); + if (baseName == "key") + { + MSXML2::IXMLDOMNamedNodeMapPtr rowAttribs = keyNode->Getattributes(); + std::string rowString = rowAttribs->getNamedItem("row")->Gettext(); + std::string valueString = rowAttribs->getNamedItem("value")->Gettext(); + std::string interpolationString = rowAttribs->getNamedItem("interpolation")->Gettext(); + + sync::Track::KeyFrame keyFrame( + float(atof(valueString.c_str())), + sync::Track::KeyFrame::InterpolationType( + atoi(interpolationString.c_str()) + ) + ); + t.setKeyFrame(atoi(rowString.c_str()), keyFrame); + } + } + } + } + catch(_com_error &e) + { + char temp[256]; + _snprintf(temp, 256, "Error loading: %s\n", (const char*)_bstr_t(e.Description())); + MessageBox(NULL, temp, NULL, MB_OK | MB_ICONERROR | MB_SETFOREGROUND); + return false; + } + return true; +} + +bool SyncDocument::save(const std::string &fileName) +{ + MSXML2::IXMLDOMDocumentPtr doc(MSXML2::CLSID_DOMDocument); + try + { + _variant_t varNodeType((short)MSXML2::NODE_ELEMENT); + MSXML2::IXMLDOMNodePtr rootNode = doc->createNode(varNodeType, _T("tracks"), _T("")); + doc->appendChild(rootNode); + + sync::Data::TrackContainer::iterator iter; + for (iter = tracks.begin(); iter != tracks.end(); ++iter) + { + size_t index = iter->second; + const sync::Track &track = getTrack(index); + + MSXML2::IXMLDOMElementPtr trackElem = doc->createElement(_T("track")); + trackElem->setAttribute(_T("name"), iter->first.c_str()); + rootNode->appendChild(trackElem); + + sync::Track::KeyFrameContainer::const_iterator it; + for (it = track.keyFrames.begin(); it != track.keyFrames.end(); ++it) + { + char temp[256]; + size_t row = it->first; + float value = it->second.value; + char interpolationType = char(it->second.interpolationType); + + MSXML2::IXMLDOMElementPtr keyElem = doc->createElement(_T("key")); + + _snprintf(temp, 256, "%d", row); + keyElem->setAttribute(_T("row"), temp); + + _snprintf(temp, 256, "%f", value); + keyElem->setAttribute(_T("value"), temp); + + _snprintf(temp, 256, "%d", interpolationType); + keyElem->setAttribute(_T("interpolation"), temp); + + trackElem->appendChild(keyElem); + } + } + + doc->save(fileName.c_str()); + } + catch(_com_error &e) + { + char temp[256]; + _snprintf(temp, 256, "Error loading: %s\n", (const char*)_bstr_t(e.Description())); + MessageBox(NULL, temp, NULL, MB_OK | MB_ICONERROR | MB_SETFOREGROUND); + return false; + } + return true; +} + diff --git a/editor/syncdocument.h b/editor/syncdocument.h index 79bd3b7..5e6c901 100644 --- a/editor/syncdocument.h +++ b/editor/syncdocument.h @@ -9,9 +9,6 @@ #include #include - -#import named_guids - class SyncDocument : public sync::Data { public: @@ -253,108 +250,10 @@ public: else cmd = new InsertCommand(track, row, key); return cmd; } - - bool load(const std::string &fileName) - { - MSXML2::IXMLDOMDocumentPtr doc(MSXML2::CLSID_DOMDocument); - try - { - doc->load(fileName.c_str()); - MSXML2::IXMLDOMNodeListPtr trackNodes = doc->documentElement->selectNodes("track"); - for (int i = 0; i < trackNodes->Getlength(); ++i) - { - MSXML2::IXMLDOMNodePtr trackNode = trackNodes->Getitem(i); - MSXML2::IXMLDOMNamedNodeMapPtr attribs = trackNode->Getattributes(); - - std::string name = attribs->getNamedItem("name")->Gettext(); - sync::Track &t = getTrack(name); - - MSXML2::IXMLDOMNodeListPtr rowNodes = trackNode->GetchildNodes(); - for (int i = 0; i < rowNodes->Getlength(); ++i) - { - MSXML2::IXMLDOMNodePtr keyNode = rowNodes->Getitem(i); - std::string baseName = keyNode->GetbaseName(); - if (baseName == "key") - { - MSXML2::IXMLDOMNamedNodeMapPtr rowAttribs = keyNode->Getattributes(); - std::string rowString = rowAttribs->getNamedItem("row")->Gettext(); - std::string valueString = rowAttribs->getNamedItem("value")->Gettext(); - std::string interpolationString = rowAttribs->getNamedItem("interpolation")->Gettext(); - - sync::Track::KeyFrame keyFrame( - float(atof(valueString.c_str())), - sync::Track::KeyFrame::InterpolationType( - atoi(interpolationString.c_str()) - ) - ); - t.setKeyFrame(atoi(rowString.c_str()), keyFrame); - } - } - } - } - catch(_com_error &e) - { - char temp[256]; - _snprintf(temp, 256, "Error loading: %s\n", (const char*)_bstr_t(e.Description())); - MessageBox(NULL, temp, NULL, MB_OK | MB_ICONERROR | MB_SETFOREGROUND); - return false; - } - return true; - } - - bool save(const std::string &fileName) - { - MSXML2::IXMLDOMDocumentPtr doc(MSXML2::CLSID_DOMDocument); - try - { - _variant_t varNodeType((short)MSXML2::NODE_ELEMENT); - MSXML2::IXMLDOMNodePtr rootNode = doc->createNode(varNodeType, _T("tracks"), _T("")); - doc->appendChild(rootNode); - - sync::Data::TrackContainer::iterator iter; - for (iter = tracks.begin(); iter != tracks.end(); ++iter) - { - size_t index = iter->second; - const sync::Track &track = getTrack(index); - - MSXML2::IXMLDOMElementPtr trackElem = doc->createElement(_T("track")); - trackElem->setAttribute(_T("name"), iter->first.c_str()); - rootNode->appendChild(trackElem); - - sync::Track::KeyFrameContainer::const_iterator it; - for (it = track.keyFrames.begin(); it != track.keyFrames.end(); ++it) - { - char temp[256]; - size_t row = it->first; - float value = it->second.value; - char interpolationType = char(it->second.interpolationType); - - MSXML2::IXMLDOMElementPtr keyElem = doc->createElement(_T("key")); - - _snprintf(temp, 256, "%d", row); - keyElem->setAttribute(_T("row"), temp); - - _snprintf(temp, 256, "%f", value); - keyElem->setAttribute(_T("value"), temp); - - _snprintf(temp, 256, "%d", interpolationType); - keyElem->setAttribute(_T("interpolation"), temp); - - trackElem->appendChild(keyElem); - } - } - - doc->save(fileName.c_str()); - } - catch(_com_error &e) - { - char temp[256]; - _snprintf(temp, 256, "Error loading: %s\n", (const char*)_bstr_t(e.Description())); - MessageBox(NULL, temp, NULL, MB_OK | MB_ICONERROR | MB_SETFOREGROUND); - return false; - } - return true; - } + + bool load(const std::string &fileName); + bool save(const std::string &fileName); + SOCKET clientSocket; std::map clientRemap; diff --git a/editor/synctracker2.cpp b/editor/synctracker2.cpp index d521c13..cdfd1d2 100644 --- a/editor/synctracker2.cpp +++ b/editor/synctracker2.cpp @@ -8,6 +8,7 @@ #define WIN32_LEAN_AND_MEAN #include #include +#include #include "trackview.h" #include