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(); SyncDocument::MultiCommand *multiCmd = new SyncDocument::MultiCommand();
doc->load(fileName.c_str()); 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"); MSXML2::IXMLDOMNodeListPtr trackNodes = doc->documentElement->selectNodes("track");
for (int i = 0; i < trackNodes->Getlength(); ++i) for (int i = 0; i < trackNodes->Getlength(); ++i)
{ {
@ -76,10 +84,14 @@ bool SyncDocument::save(const std::string &fileName)
MSXML2::IXMLDOMDocumentPtr doc(MSXML2::CLSID_DOMDocument); MSXML2::IXMLDOMDocumentPtr doc(MSXML2::CLSID_DOMDocument);
try try
{ {
char temp[256];
_variant_t varNodeType((short)MSXML2::NODE_ELEMENT); _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); doc->appendChild(rootNode);
_snprintf(temp, 256, "%d", getRows());
rootNode->setAttribute(_T("rows"), temp);
for (size_t i = 0; i < getTrackCount(); ++i) for (size_t i = 0; i < getTrackCount(); ++i)
{ {
const sync::Track &track = getTrack(i); const sync::Track &track = getTrack(i);
@ -87,36 +99,37 @@ bool SyncDocument::save(const std::string &fileName)
MSXML2::IXMLDOMElementPtr trackElem = doc->createElement(_T("track")); MSXML2::IXMLDOMElementPtr trackElem = doc->createElement(_T("track"));
trackElem->setAttribute(_T("name"), track.getName().c_str()); trackElem->setAttribute(_T("name"), track.getName().c_str());
rootNode->appendChild(doc->createTextNode("\n\t")); rootNode->appendChild(doc->createTextNode(_T("\n\t")));
rootNode->appendChild(trackElem); rootNode->appendChild(trackElem);
sync::Track::KeyFrameContainer::const_iterator it; sync::Track::KeyFrameContainer::const_iterator it;
for (it = track.keyFrames.begin(); it != track.keyFrames.end(); ++it) for (it = track.keyFrames.begin(); it != track.keyFrames.end(); ++it)
{ {
char temp[256];
size_t row = it->first; size_t row = it->first;
float value = it->second.value; float value = it->second.value;
char interpolationType = char(it->second.interpolationType); char interpolationType = char(it->second.interpolationType);
MSXML2::IXMLDOMElementPtr keyElem = doc->createElement(_T("key")); MSXML2::IXMLDOMElementPtr keyElem = doc->createElement(_T("key"));
_snprintf(temp, 256, "%d", row); _snprintf(temp, 256, _T("%d"), row);
keyElem->setAttribute(_T("row"), temp); keyElem->setAttribute(_T("row"), temp);
_snprintf(temp, 256, "%f", value); _snprintf(temp, 256, _T("%f"), value);
keyElem->setAttribute(_T("value"), temp); keyElem->setAttribute(_T("value"), temp);
_snprintf(temp, 256, "%d", interpolationType); _snprintf(temp, 256, _T("%d"), interpolationType);
keyElem->setAttribute(_T("interpolation"), temp); keyElem->setAttribute(_T("interpolation"), temp);
trackElem->appendChild(doc->createTextNode("\n\t\t")); trackElem->appendChild(doc->createTextNode(_T("\n\t\t")));
trackElem->appendChild(keyElem); 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->save(fileName.c_str());
doc->Release();
savePointDelta = 0; savePointDelta = 0;
savePointUnreachable = false; savePointUnreachable = false;
} }

View File

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

View File

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

View File

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