rows as a document property
This commit is contained in:
parent
ee62a21d3e
commit
1eb06de644
@ -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;
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user