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();
|
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,9 +84,13 @@ 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)
|
||||||
{
|
{
|
||||||
@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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)
|
||||||
@ -313,10 +313,14 @@ public:
|
|||||||
NetworkSocket clientSocket;
|
NetworkSocket clientSocket;
|
||||||
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;
|
||||||
std::stack<Command*> redoStack;
|
std::stack<Command*> redoStack;
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user