renamed SyncEditData to SyncDocument, since that's essentially what it is ;)

This commit is contained in:
Erik Faye-Lund 2008-02-18 21:15:50 +00:00
parent 26209abb1c
commit 74eee30216
6 changed files with 321 additions and 311 deletions

View File

@ -226,6 +226,10 @@
> >
</File> </File>
<File <File
RelativePath=".\syncdocument.h"
>
</File>
<File
RelativePath="..\sync\track.h" RelativePath="..\sync\track.h"
> >
</File> </File>

View File

@ -9,10 +9,10 @@
#include <stack> #include <stack>
#include <list> #include <list>
class SyncEditData : public sync::Data class SyncDocument : public sync::Data
{ {
public: public:
SyncEditData() : sync::Data(), clientPaused(true) {} SyncDocument() : sync::Data(), clientPaused(true) {}
void sendSetKeyCommand(int track, int row, const sync::Track::KeyFrame &key) void sendSetKeyCommand(int track, int row, const sync::Track::KeyFrame &key)
{ {
@ -41,8 +41,6 @@ public:
void sendSetRowCommand(int row) void sendSetRowCommand(int row)
{ {
if (INVALID_SOCKET == clientSocket) return; if (INVALID_SOCKET == clientSocket) return;
printf("sending row pos\n");
unsigned char cmd = SET_ROW; unsigned char cmd = SET_ROW;
send(clientSocket, (char*)&cmd, 1, 0); send(clientSocket, (char*)&cmd, 1, 0);
send(clientSocket, (char*)&row, sizeof(int), 0); send(clientSocket, (char*)&row, sizeof(int), 0);
@ -67,8 +65,8 @@ public:
{ {
public: public:
virtual ~Command() {} virtual ~Command() {}
virtual void exec(SyncEditData *data) = 0; virtual void exec(SyncDocument *data) = 0;
virtual void undo(SyncEditData *data) = 0; virtual void undo(SyncDocument *data) = 0;
}; };
class InsertCommand : public Command class InsertCommand : public Command
@ -77,7 +75,7 @@ public:
InsertCommand(int track, int row, const sync::Track::KeyFrame &key) : track(track), row(row), key(key) {} InsertCommand(int track, int row, const sync::Track::KeyFrame &key) : track(track), row(row), key(key) {}
~InsertCommand() {} ~InsertCommand() {}
virtual void exec(SyncEditData *data) virtual void exec(SyncDocument *data)
{ {
sync::Track &t = data->getTrack(this->track); sync::Track &t = data->getTrack(this->track);
assert(!t.isKeyFrame(row)); assert(!t.isKeyFrame(row));
@ -86,7 +84,7 @@ public:
data->sendSetKeyCommand(track, row, key); // update clients data->sendSetKeyCommand(track, row, key); // update clients
} }
virtual void undo(SyncEditData *data) virtual void undo(SyncDocument *data)
{ {
sync::Track &t = data->getTrack(this->track); sync::Track &t = data->getTrack(this->track);
assert(t.isKeyFrame(row)); assert(t.isKeyFrame(row));
@ -106,7 +104,7 @@ public:
DeleteCommand(int track, int row) : track(track), row(row) {} DeleteCommand(int track, int row) : track(track), row(row) {}
~DeleteCommand() {} ~DeleteCommand() {}
virtual void exec(SyncEditData *data) virtual void exec(SyncDocument *data)
{ {
sync::Track &t = data->getTrack(this->track); sync::Track &t = data->getTrack(this->track);
assert(t.isKeyFrame(row)); assert(t.isKeyFrame(row));
@ -116,7 +114,7 @@ public:
data->sendDeleteKeyCommand(track, row); // update clients data->sendDeleteKeyCommand(track, row); // update clients
} }
virtual void undo(SyncEditData *data) virtual void undo(SyncDocument *data)
{ {
sync::Track &t = data->getTrack(this->track); sync::Track &t = data->getTrack(this->track);
assert(!t.isKeyFrame(row)); assert(!t.isKeyFrame(row));
@ -137,7 +135,7 @@ public:
EditCommand(int track, int row, const sync::Track::KeyFrame &key) : track(track), row(row), key(key) {} EditCommand(int track, int row, const sync::Track::KeyFrame &key) : track(track), row(row), key(key) {}
~EditCommand() {} ~EditCommand() {}
virtual void exec(SyncEditData *data) virtual void exec(SyncDocument *data)
{ {
sync::Track &t = data->getTrack(this->track); sync::Track &t = data->getTrack(this->track);
@ -151,7 +149,7 @@ public:
data->sendSetKeyCommand(track, row, key); // update clients data->sendSetKeyCommand(track, row, key); // update clients
} }
virtual void undo(SyncEditData *data) virtual void undo(SyncDocument *data)
{ {
sync::Track &t = data->getTrack(this->track); sync::Track &t = data->getTrack(this->track);
@ -186,13 +184,13 @@ public:
size_t getSize() const { return commands.size(); } size_t getSize() const { return commands.size(); }
virtual void exec(SyncEditData *data) virtual void exec(SyncDocument *data)
{ {
std::list<Command*>::iterator it; std::list<Command*>::iterator it;
for (it = commands.begin(); it != commands.end(); ++it) (*it)->exec(data); for (it = commands.begin(); it != commands.end(); ++it) (*it)->exec(data);
} }
virtual void undo(SyncEditData *data) virtual void undo(SyncDocument *data)
{ {
std::list<Command*>::iterator it; std::list<Command*>::iterator it;
for (it = commands.begin(); it != commands.end(); ++it) (*it)->undo(data); for (it = commands.begin(); it != commands.end(); ++it) (*it)->undo(data);
@ -246,17 +244,17 @@ public:
Command *getSetKeyFrameCommand(int track, int row, const sync::Track::KeyFrame &key) Command *getSetKeyFrameCommand(int track, int row, const sync::Track::KeyFrame &key)
{ {
sync::Track &t = getTrack(track); sync::Track &t = getTrack(track);
SyncEditData::Command *cmd; SyncDocument::Command *cmd;
if (t.isKeyFrame(row)) cmd = new EditCommand(track, row, key); if (t.isKeyFrame(row)) cmd = new EditCommand(track, row, key);
else cmd = new InsertCommand(track, row, key); else cmd = new InsertCommand(track, row, key);
return cmd; return cmd;
} }
SOCKET clientSocket; SOCKET clientSocket;
// private:
std::map<size_t, size_t> clientRemap; std::map<size_t, size_t> clientRemap;
bool clientPaused; bool clientPaused;
private:
std::stack<Command*> undoStack; std::stack<Command*> undoStack;
std::stack<Command*> redoStack; std::stack<Command*> redoStack;
}; };

View File

@ -234,6 +234,19 @@ static ATOM registerMainWindowClass(HINSTANCE hInstance)
return RegisterClassEx(&wc); return RegisterClassEx(&wc);
} }
SyncDocument loadDocument()
{
SyncDocument document;
for (int i = 0; i < 10; ++i)
{
std::string trackName = "balle";
// find track
const sync::Track &track = document.getTrack(trackName);
}
return document;
}
int _tmain(int argc, _TCHAR* argv[]) int _tmain(int argc, _TCHAR* argv[])
{ {
#ifdef _DEBUG #ifdef _DEBUG
@ -281,7 +294,7 @@ int _tmain(int argc, _TCHAR* argv[])
} */ } */
#endif #endif
SyncEditData syncData; SyncDocument syncData;
syncData.clientSocket = INVALID_SOCKET; syncData.clientSocket = INVALID_SOCKET;
ATOM mainClass = registerMainWindowClass(hInstance); ATOM mainClass = registerMainWindowClass(hInstance);
@ -293,7 +306,7 @@ int _tmain(int argc, _TCHAR* argv[])
} }
trackView = new TrackView(); trackView = new TrackView();
trackView->setSyncData(&syncData); trackView->setDocument(&syncData);
HWND hwnd = CreateWindowEx( HWND hwnd = CreateWindowEx(
0, 0,
@ -377,7 +390,6 @@ int _tmain(int argc, _TCHAR* argv[])
{ {
size_t clientIndex = 0; size_t clientIndex = 0;
int ret = recv(clientSocket, (char*)&clientIndex, sizeof(int), 0); int ret = recv(clientSocket, (char*)&clientIndex, sizeof(int), 0);
printf("client index: %d\n", clientIndex);
// get len // get len
int str_len = 0; int str_len = 0;
@ -393,7 +405,6 @@ int _tmain(int argc, _TCHAR* argv[])
// find track // find track
size_t serverIndex = syncData.getTrackIndex(trackName.c_str()); size_t serverIndex = syncData.getTrackIndex(trackName.c_str());
printf("name: \"%s\"\n", trackName.c_str());
// setup remap // setup remap
syncData.clientRemap[serverIndex] = clientIndex; syncData.clientRemap[serverIndex] = clientIndex;

View File

@ -110,15 +110,15 @@ void TrackView::paintTopMargin(HDC hdc, RECT rcTracks)
int firstTrack = min(max(scrollPosX / trackWidth, 0), getTrackCount() - 1); int firstTrack = min(max(scrollPosX / trackWidth, 0), getTrackCount() - 1);
int lastTrack = min(max(firstTrack + windowTracks + 1, 0), getTrackCount() - 1); int lastTrack = min(max(firstTrack + windowTracks + 1, 0), getTrackCount() - 1);
sync::Data *syncData = getSyncData(); SyncDocument *document = getDocument();
if (NULL == syncData) return; if (NULL == document) return;
SetTextColor(hdc, GetSysColor(COLOR_WINDOWTEXT)); SetTextColor(hdc, GetSysColor(COLOR_WINDOWTEXT));
sync::Data::TrackContainer::iterator trackIter = syncData->tracks.begin(); sync::Data::TrackContainer::iterator trackIter = document->tracks.begin();
for (int track = 0; track <= lastTrack; ++track, ++trackIter) for (int track = 0; track <= lastTrack; ++track, ++trackIter)
{ {
assert(trackIter != syncData->tracks.end()); assert(trackIter != document->tracks.end());
if (track < firstTrack) continue; if (track < firstTrack) continue;
RECT topMargin; RECT topMargin;
@ -141,7 +141,7 @@ void TrackView::paintTopMargin(HDC hdc, RECT rcTracks)
const std::basic_string<TCHAR> &trackName = trackIter->first; const std::basic_string<TCHAR> &trackName = trackIter->first;
if (this->syncData->clientRemap.count(track) == 0) SetTextColor(hdc, GetSysColor(COLOR_GRAYTEXT)); if (this->document->clientRemap.count(track) == 0) SetTextColor(hdc, GetSysColor(COLOR_GRAYTEXT));
else SetTextColor(hdc, GetSysColor(COLOR_WINDOWTEXT)); else SetTextColor(hdc, GetSysColor(COLOR_WINDOWTEXT));
TextOut(hdc, TextOut(hdc,
fillRect.left, 0, fillRect.left, 0,
@ -210,20 +210,17 @@ void TrackView::paintTracks(HDC hdc, RECT rcTracks)
SetTextColor(hdc, GetSysColor(COLOR_WINDOWTEXT)); SetTextColor(hdc, GetSysColor(COLOR_WINDOWTEXT));
sync::Data *syncData = getSyncData();
if (NULL == syncData) return;
int selectLeft = min(selectStartTrack, selectStopTrack); int selectLeft = min(selectStartTrack, selectStopTrack);
int selectRight = max(selectStartTrack, selectStopTrack); int selectRight = max(selectStartTrack, selectStopTrack);
int selectTop = min(selectStartRow, selectStopRow); int selectTop = min(selectStartRow, selectStopRow);
int selectBottom = max(selectStartRow, selectStopRow); int selectBottom = max(selectStartRow, selectStopRow);
sync::Data::TrackContainer::iterator trackIter = syncData->tracks.begin(); sync::Data::TrackContainer::iterator trackIter = document->tracks.begin();
for (int track = 0; track <= lastTrack; ++track, ++trackIter) for (int track = 0; track <= lastTrack; ++track, ++trackIter)
{ {
assert(trackIter != syncData->tracks.end()); assert(trackIter != document->tracks.end());
size_t trackIndex = trackIter->second; size_t trackIndex = trackIter->second;
const sync::Track &t = *syncData->actualTracks[trackIndex]; const sync::Track &t = *document->actualTracks[trackIndex];
if (track < firstTrack) continue; if (track < firstTrack) continue;
for (int row = firstRow; row <= lastRow; ++row) for (int row = firstRow; row <= lastRow; ++row)
@ -377,7 +374,7 @@ void TrackView::editCopy()
for (int track = selectLeft; track <= selectRight; ++track) for (int track = selectLeft; track <= selectRight; ++track)
{ {
int localTrack = track - selectLeft; int localTrack = track - selectLeft;
const sync::Track &t = syncData->getTrack(track); const sync::Track &t = document->getTrack(track);
for (int row = selectTop; row <= selectBottom; ++row) for (int row = selectTop; row <= selectBottom; ++row)
{ {
int localRow = row - selectTop; int localRow = row - selectTop;
@ -448,17 +445,17 @@ void TrackView::editPaste()
{ {
char *src = clipbuf + 2 * sizeof(int) + sizeof(size_t); char *src = clipbuf + 2 * sizeof(int) + sizeof(size_t);
SyncEditData::MultiCommand *multiCmd = new SyncEditData::MultiCommand(); SyncDocument::MultiCommand *multiCmd = new SyncDocument::MultiCommand();
for (int i = 0; i < buffer_size; ++i) for (int i = 0; i < buffer_size; ++i)
{ {
struct CopyEntry ce; struct CopyEntry ce;
memcpy(&ce, src, sizeof(CopyEntry)); memcpy(&ce, src, sizeof(CopyEntry));
SyncEditData::Command *cmd = syncData->getSetKeyFrameCommand(editTrack + ce.track, editRow + ce.row, ce.keyFrame); SyncDocument::Command *cmd = document->getSetKeyFrameCommand(editTrack + ce.track, editRow + ce.row, ce.keyFrame);
multiCmd->addCommand(cmd); multiCmd->addCommand(cmd);
src += sizeof(CopyEntry); src += sizeof(CopyEntry);
} }
syncData->exec(multiCmd); document->exec(multiCmd);
} }
GlobalUnlock(hmem); GlobalUnlock(hmem);
@ -548,9 +545,9 @@ void TrackView::setEditRow(int newEditRow)
selectStartRow = selectStopRow = editRow; selectStartRow = selectStopRow = editRow;
selectStartTrack = selectStopTrack = editTrack; selectStartTrack = selectStopTrack = editTrack;
} }
if (getSyncData()->clientPaused) if (document->clientPaused)
{ {
getSyncData()->sendSetRowCommand(editRow); document->sendSetRowCommand(editRow);
} }
} }
@ -683,16 +680,16 @@ LRESULT TrackView::onHScroll(UINT sbCode, int /*newPos*/)
void TrackView::editEnterValue() void TrackView::editEnterValue()
{ {
if (int(editString.size()) > 0 && editTrack < int(syncData->getTrackCount())) if (int(editString.size()) > 0 && editTrack < int(document->getTrackCount()))
{ {
sync::Track &t = syncData->getTrack(editTrack); sync::Track &t = document->getTrack(editTrack);
sync::Track::KeyFrame newKey; sync::Track::KeyFrame newKey;
if (t.isKeyFrame(editRow)) newKey = *t.getKeyFrame(editRow); // copy old key if (t.isKeyFrame(editRow)) newKey = *t.getKeyFrame(editRow); // copy old key
newKey.value = float(_tstof(editString.c_str())); // modify value newKey.value = float(_tstof(editString.c_str())); // modify value
SyncEditData::Command *cmd = syncData->getSetKeyFrameCommand(editTrack, editRow, newKey); SyncDocument::Command *cmd = document->getSetKeyFrameCommand(editTrack, editRow, newKey);
syncData->exec(cmd); document->exec(cmd);
editString.clear(); editString.clear();
// invalidatePos(editTrack, editRow); // invalidatePos(editTrack, editRow);
@ -703,9 +700,9 @@ void TrackView::editEnterValue()
void TrackView::editToggleInterpolationType() void TrackView::editToggleInterpolationType()
{ {
if (editTrack < int(syncData->getTrackCount())) if (editTrack < int(document->getTrackCount()))
{ {
sync::Track &t = syncData->getTrack(editTrack); sync::Track &t = document->getTrack(editTrack);
// find key to modify // find key to modify
sync::Track::KeyFrameContainer::const_iterator upper = t.keyFrames.upper_bound(editRow); sync::Track::KeyFrameContainer::const_iterator upper = t.keyFrames.upper_bound(editRow);
@ -731,8 +728,8 @@ void TrackView::editToggleInterpolationType()
(int(newKey.interpolationType) + 1) % sync::Track::KeyFrame::IT_COUNT (int(newKey.interpolationType) + 1) % sync::Track::KeyFrame::IT_COUNT
); );
SyncEditData::Command *cmd = syncData->getSetKeyFrameCommand(editTrack, int(lower->first), newKey); SyncDocument::Command *cmd = document->getSetKeyFrameCommand(editTrack, int(lower->first), newKey);
syncData->exec(cmd); document->exec(cmd);
invalidateRange(editTrack, editTrack, int(lower->first), int(upper->first)); invalidateRange(editTrack, editTrack, int(lower->first), int(upper->first));
} }
@ -746,21 +743,21 @@ void TrackView::editDelete()
int selectTop = min(selectStartRow, selectStopRow); int selectTop = min(selectStartRow, selectStopRow);
int selectBottom = max(selectStartRow, selectStopRow); int selectBottom = max(selectStartRow, selectStopRow);
if (selectRight >= int(syncData->getTrackCount())) if (selectRight >= int(document->getTrackCount()))
{ {
MessageBeep(0); MessageBeep(0);
return; return;
} }
SyncEditData::MultiCommand *multiCmd = new SyncEditData::MultiCommand(); SyncDocument::MultiCommand *multiCmd = new SyncDocument::MultiCommand();
for (int track = selectLeft; track <= selectRight; ++track) for (int track = selectLeft; track <= selectRight; ++track)
{ {
sync::Track &t = syncData->getTrack(track); sync::Track &t = document->getTrack(track);
for (int row = selectTop; row <= selectBottom; ++row) for (int row = selectTop; row <= selectBottom; ++row)
{ {
if (t.isKeyFrame(row)) if (t.isKeyFrame(row))
{ {
SyncEditData::Command *cmd = new SyncEditData::DeleteCommand(track, row); SyncDocument::Command *cmd = new SyncDocument::DeleteCommand(track, row);
multiCmd->addCommand(cmd); multiCmd->addCommand(cmd);
} }
} }
@ -773,7 +770,7 @@ void TrackView::editDelete()
} }
else else
{ {
syncData->exec(multiCmd); document->exec(multiCmd);
InvalidateRect(getWin(), NULL, FALSE); InvalidateRect(getWin(), NULL, FALSE);
// invalidateRange(selectLeft, selectRight, selectTop, selectBottom); // invalidateRange(selectLeft, selectRight, selectTop, selectBottom);
} }
@ -786,10 +783,10 @@ void TrackView::editBiasValue(float amount)
int selectTop = min(selectStartRow, selectStopRow); int selectTop = min(selectStartRow, selectStopRow);
int selectBottom = max(selectStartRow, selectStopRow); int selectBottom = max(selectStartRow, selectStopRow);
SyncEditData::MultiCommand *multiCmd = new SyncEditData::MultiCommand(); SyncDocument::MultiCommand *multiCmd = new SyncDocument::MultiCommand();
for (int track = selectLeft; track <= selectRight; ++track) for (int track = selectLeft; track <= selectRight; ++track)
{ {
sync::Track &t = syncData->getTrack(track); sync::Track &t = document->getTrack(track);
for (int row = selectTop; row <= selectBottom; ++row) for (int row = selectTop; row <= selectBottom; ++row)
{ {
if (t.isKeyFrame(row)) if (t.isKeyFrame(row))
@ -798,7 +795,7 @@ void TrackView::editBiasValue(float amount)
newKey.value += amount; // modify value newKey.value += amount; // modify value
// add sub-command // add sub-command
SyncEditData::Command *cmd = syncData->getSetKeyFrameCommand(track, row, newKey); SyncDocument::Command *cmd = document->getSetKeyFrameCommand(track, row, newKey);
multiCmd->addCommand(cmd); multiCmd->addCommand(cmd);
} }
} }
@ -811,14 +808,14 @@ void TrackView::editBiasValue(float amount)
} }
else else
{ {
syncData->exec(multiCmd); document->exec(multiCmd);
invalidateRange(selectLeft, selectRight, selectTop, selectBottom); invalidateRange(selectLeft, selectRight, selectTop, selectBottom);
} }
} }
LRESULT TrackView::onKeyDown(UINT keyCode, UINT /*flags*/) LRESULT TrackView::onKeyDown(UINT keyCode, UINT /*flags*/)
{ {
if (editString.empty() && getSyncData()->clientPaused) if (editString.empty() && document->clientPaused)
{ {
switch (keyCode) switch (keyCode)
{ {
@ -898,7 +895,7 @@ LRESULT TrackView::onKeyDown(UINT keyCode, UINT /*flags*/)
invalidatePos(editTrack, editRow); invalidatePos(editTrack, editRow);
MessageBeep(0); MessageBeep(0);
} }
getSyncData()->sendPauseCommand( !getSyncData()->clientPaused ); document->sendPauseCommand( !document->clientPaused );
break; break;
} }
return FALSE; return FALSE;
@ -932,7 +929,7 @@ LRESULT TrackView::onChar(UINT keyCode, UINT flags)
case '7': case '7':
case '8': case '8':
case '9': case '9':
if (editTrack < int(syncData->getTrackCount())) if (editTrack < int(document->getTrackCount()))
{ {
editString.push_back(char(keyCode)); editString.push_back(char(keyCode));
invalidatePos(editTrack, editRow); invalidatePos(editTrack, editRow);
@ -945,7 +942,7 @@ LRESULT TrackView::onChar(UINT keyCode, UINT flags)
break; break;
case 's': case 's':
syncData->sendSaveCommand(); document->sendSaveCommand();
break; break;
} }
return FALSE; return FALSE;
@ -995,13 +992,13 @@ LRESULT TrackView::windowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
break; break;
case WM_UNDO: case WM_UNDO:
if (!syncData->undo()) MessageBeep(0); if (!document->undo()) MessageBeep(0);
// unfortunately, we don't know how much to invalidate... so we'll just invalidate it all. // unfortunately, we don't know how much to invalidate... so we'll just invalidate it all.
InvalidateRect(hwnd, NULL, FALSE); InvalidateRect(hwnd, NULL, FALSE);
break; break;
case WM_REDO: case WM_REDO:
if (!syncData->redo()) MessageBeep(0); if (!document->redo()) MessageBeep(0);
// unfortunately, we don't know how much to invalidate... so we'll just invalidate it all. // unfortunately, we don't know how much to invalidate... so we'll just invalidate it all.
InvalidateRect(hwnd, NULL, FALSE); InvalidateRect(hwnd, NULL, FALSE);
break; break;

View File

@ -4,7 +4,7 @@
#pragma once #pragma once
#include "synceditdata.h" #include "syncdocument.h"
#include <list> #include <list>
#include <string> #include <string>
@ -22,8 +22,8 @@ public:
HWND create(HINSTANCE hInstance, HWND hwndParent); HWND create(HINSTANCE hInstance, HWND hwndParent);
HWND getWin(){ return hwnd; } HWND getWin(){ return hwnd; }
void setSyncData(SyncEditData *syncData) { this->syncData = syncData; } void setDocument(SyncDocument *document) { this->document = document; }
SyncEditData *getSyncData() { return syncData; } SyncDocument *getDocument() { return document; }
void setRows(int rows); void setRows(int rows);
int getRows() const { return rows; } int getRows() const { return rows; }
@ -115,7 +115,7 @@ private:
int getTrackCount() int getTrackCount()
{ {
sync::Data *syncData = getSyncData(); sync::Data *syncData = getDocument();
if (NULL == syncData) return 0; if (NULL == syncData) return 0;
return int(syncData->getTrackCount()); return int(syncData->getTrackCount());
}; };
@ -136,7 +136,7 @@ private:
int windowWidth, windowHeight; int windowWidth, windowHeight;
int windowRows, windowTracks; int windowRows, windowTracks;
SyncEditData *syncData; SyncDocument *document;
std::basic_string<TCHAR> editString; std::basic_string<TCHAR> editString;