moved XML-loading/saving routines to a separate source-file, so the nasty COM-stuff doesn't contaminate all code ;)
This commit is contained in:
parent
18f3415ae7
commit
9767ad5852
@ -188,6 +188,10 @@
|
|||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
|
RelativePath=".\syncdocument.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
RelativePath=".\synctracker2.cpp"
|
RelativePath=".\synctracker2.cpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
|||||||
106
editor/syncdocument.cpp
Normal file
106
editor/syncdocument.cpp
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
#include "syncdocument.h"
|
||||||
|
|
||||||
|
#import <msxml4.dll> 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;
|
||||||
|
}
|
||||||
|
|
||||||
@ -9,9 +9,6 @@
|
|||||||
#include <stack>
|
#include <stack>
|
||||||
#include <list>
|
#include <list>
|
||||||
|
|
||||||
|
|
||||||
#import <msxml4.dll> named_guids
|
|
||||||
|
|
||||||
class SyncDocument : public sync::Data
|
class SyncDocument : public sync::Data
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -253,108 +250,10 @@ public:
|
|||||||
else cmd = new InsertCommand(track, row, key);
|
else cmd = new InsertCommand(track, row, key);
|
||||||
return cmd;
|
return cmd;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool load(const std::string &fileName)
|
bool load(const std::string &fileName);
|
||||||
{
|
bool save(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;
|
|
||||||
}
|
|
||||||
|
|
||||||
SOCKET clientSocket;
|
SOCKET clientSocket;
|
||||||
std::map<size_t, size_t> clientRemap;
|
std::map<size_t, size_t> clientRemap;
|
||||||
|
|||||||
@ -8,6 +8,7 @@
|
|||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <commctrl.h>
|
#include <commctrl.h>
|
||||||
|
#include <objbase.h>
|
||||||
|
|
||||||
#include "trackview.h"
|
#include "trackview.h"
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user