rows as a document property

This commit is contained in:
Erik Faye-Lund 2008-10-14 23:49:52 +00:00
parent ee62a21d3e
commit 1eb06de644
4 changed files with 42 additions and 22 deletions

View File

@ -16,6 +16,14 @@ bool SyncDocument::load(const std::string &fileName)
SyncDocument::MultiCommand *multiCmd = new SyncDocument::MultiCommand();
doc->load(fileName.c_str());
MSXML2::IXMLDOMNamedNodeMapPtr attribs = doc->documentElement->Getattributes();
MSXML2::IXMLDOMNodePtr rowsParam = attribs->getNamedItem("rows");
if (NULL != rowsParam)
{
std::string rowsString = rowsParam->Gettext();
this->setRows(atoi(rowsString.c_str()));
}
MSXML2::IXMLDOMNodeListPtr trackNodes = doc->documentElement->selectNodes("track");
for (int i = 0; i < trackNodes->Getlength(); ++i)
{
@ -76,9 +84,13 @@ bool SyncDocument::save(const std::string &fileName)
MSXML2::IXMLDOMDocumentPtr doc(MSXML2::CLSID_DOMDocument);
try
{
char temp[256];
_variant_t varNodeType((short)MSXML2::NODE_ELEMENT);
MSXML2::IXMLDOMNodePtr rootNode = doc->createNode(varNodeType, _T("tracks"), _T(""));
MSXML2::IXMLDOMElementPtr rootNode = doc->createElement(_T("tracks"));
doc->appendChild(rootNode);
_snprintf(temp, 256, "%d", getRows());
rootNode->setAttribute(_T("rows"), temp);
for (size_t i = 0; i < getTrackCount(); ++i)
{
@ -87,36 +99,37 @@ bool SyncDocument::save(const std::string &fileName)
MSXML2::IXMLDOMElementPtr trackElem = doc->createElement(_T("track"));
trackElem->setAttribute(_T("name"), track.getName().c_str());
rootNode->appendChild(doc->createTextNode("\n\t"));
rootNode->appendChild(doc->createTextNode(_T("\n\t")));
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);
_snprintf(temp, 256, _T("%d"), row);
keyElem->setAttribute(_T("row"), temp);
_snprintf(temp, 256, "%f", value);
_snprintf(temp, 256, _T("%f"), value);
keyElem->setAttribute(_T("value"), temp);
_snprintf(temp, 256, "%d", interpolationType);
_snprintf(temp, 256, _T("%d"), interpolationType);
keyElem->setAttribute(_T("interpolation"), temp);
trackElem->appendChild(doc->createTextNode("\n\t\t"));
trackElem->appendChild(doc->createTextNode(_T("\n\t\t")));
trackElem->appendChild(keyElem);
}
if (0 != track.keyFrames.size()) trackElem->appendChild(doc->createTextNode("\n\t"));
if (0 != track.keyFrames.size()) trackElem->appendChild(doc->createTextNode(_T("\n\t")));
}
if (0 != getTrackCount()) rootNode->appendChild(doc->createTextNode("\n"));
if (0 != getTrackCount()) rootNode->appendChild(doc->createTextNode(_T("\n")));
doc->save(fileName.c_str());
doc->Release();
savePointDelta = 0;
savePointUnreachable = false;
}

View File

@ -15,7 +15,7 @@
class SyncDocument : public sync::Data
{
public:
SyncDocument() : sync::Data(), clientPaused(true), savePointDelta(0), savePointUnreachable(true) {}
SyncDocument() : sync::Data(), clientPaused(true), rows(128), savePointDelta(0), savePointUnreachable(true) {}
~SyncDocument();
size_t createTrack(const std::basic_string<TCHAR> &name)
@ -313,10 +313,14 @@ public:
NetworkSocket clientSocket;
std::map<size_t, size_t> clientRemap;
bool clientPaused;
size_t getRows() const { return rows; }
void setRows(size_t rows) { this->rows = rows; }
private:
std::vector<size_t> trackOrder;
size_t rows;
// undo / redo functionality
std::stack<Command*> undoStack;
std::stack<Command*> redoStack;

View File

@ -38,7 +38,6 @@ TrackView::TrackView()
editRow = 0;
editTrack = 0;
rows = 0x80;
selectStartTrack = selectStopTrack = 0;
selectStartRow = selectStopRow = 0;
@ -183,9 +182,10 @@ void TrackView::paintTracks(HDC hdc, RECT rcTracks)
int firstRow = editRow - windowRows / 2 - 1;
int lastRow = editRow + windowRows / 2 + 1;
/* clamp first & last row */
firstRow = min(max(firstRow, 0), int(rows) - 1);
lastRow = min(max(lastRow, 0), int(rows) - 1);
firstRow = min(max(firstRow, 0), int(getRows()) - 1);
lastRow = min(max(lastRow, 0), int(getRows()) - 1);
SetBkMode(hdc, TRANSPARENT);
paintTopMargin(hdc, rcTracks);
@ -331,7 +331,7 @@ void TrackView::paintTracks(HDC hdc, RECT rcTracks)
{
RECT rightMargin;
rightMargin.top = getScreenY(0);
rightMargin.bottom = getScreenY(rows);
rightMargin.bottom = getScreenY(getRows());
rightMargin.left = getScreenX(getTrackCount());
rightMargin.right = rcTracks.right;
FillRect( hdc, &rightMargin, GetSysColorBrush(COLOR_APPWORKSPACE));
@ -339,7 +339,7 @@ void TrackView::paintTracks(HDC hdc, RECT rcTracks)
{
RECT bottomPadding;
bottomPadding.top = getScreenY(rows);
bottomPadding.top = getScreenY(getRows());
bottomPadding.bottom = rcTracks.bottom;
bottomPadding.left = rcTracks.left;
bottomPadding.right = rcTracks.right;
@ -512,7 +512,7 @@ void TrackView::setupScrollBars()
si.nPos = editRow;
si.nPage = windowRows;
si.nMin = 0;
si.nMax = rows - 1 + windowRows - 1;
si.nMax = getRows() - 1 + windowRows - 1;
SetScrollInfo(hwnd, SB_VERT, &si, TRUE);
si.fMask = SIF_POS | SIF_PAGE | SIF_RANGE | SIF_DISABLENOSCROLL;
@ -571,7 +571,7 @@ void TrackView::setEditRow(int newEditRow)
editRow = newEditRow;
// clamp to document
editRow = min(max(editRow, 0), int(rows) - 1);
editRow = min(max(editRow, 0), int(getRows()) - 1);
if (oldEditRow != editRow)
{
@ -649,7 +649,7 @@ static int getScrollPos(HWND hwnd, int bar)
void TrackView::setRows(size_t rows)
{
this->rows = rows;
document->setRows(rows);
InvalidateRect(getWin(), NULL, FALSE);
setEditRow(min(editRow, int(rows) - 1));
}
@ -980,7 +980,7 @@ LRESULT TrackView::onKeyDown(UINT keyCode, UINT /*flags*/)
case VK_END:
if (GetKeyState(VK_CONTROL) < 0) setEditTrack(int(getTrackCount()) - 1);
else setEditRow(rows - 1);
else setEditRow(int(getRows()) - 1);
break;
}
}

View File

@ -27,7 +27,11 @@ public:
SyncDocument *getDocument() { return document; }
void setRows(size_t rows);
int getRows() const { return rows; }
int getRows() const
{
if (NULL == document) return 0;
return document->getRows();
}
void editEnterValue();
void editDelete();
@ -165,7 +169,6 @@ private:
HWND hwnd;
UINT clipboardFormat;
size_t rows;
};
ATOM registerTrackViewWindowClass(HINSTANCE hInstance);