diff --git a/editor/trackview.cpp b/editor/trackview.cpp index 1bdaa6e..3fed9e2 100644 --- a/editor/trackview.cpp +++ b/editor/trackview.cpp @@ -734,7 +734,7 @@ void TrackView::editToggleInterpolationType() SyncEditData::Command *cmd = syncData->getSetKeyFrameCommand(editTrack, int(lower->first), newKey); syncData->exec(cmd); - invalidateRange(editTrack, editTrack, lower->first, upper->first); + invalidateRange(editTrack, editTrack, int(lower->first), int(upper->first)); } else MessageBeep(0); } diff --git a/sync/device_client.cpp b/sync/device_client.cpp index 356b5bc..edc432f 100644 --- a/sync/device_client.cpp +++ b/sync/device_client.cpp @@ -170,13 +170,38 @@ std::string ClientDevice::getTrackFileName(std::string trackName) return fileName; } +static bool saveTrack(const sync::Track &track, std::string fileName) +{ + FILE *fp = fopen(fileName.c_str(), "wb"); + if (NULL == fp) return false; + + size_t keyFrameCount = track.getKeyFrameCount(); + fwrite(&keyFrameCount, sizeof(size_t), 1, fp); + + sync::Track::KeyFrameContainer::const_iterator it; + for (it = track.keyFrames.begin(); it != track.keyFrames.end(); ++it) + { + size_t row = it->first; + float value = it->second.value; + char interpolationType = char(it->second.interpolationType); + + // write key + fwrite(&row, sizeof(size_t), 1, fp); + fwrite(&value, sizeof(float), 1, fp); + fwrite(&interpolationType, sizeof(char), 1, fp); + } + + fclose(fp); + fp = NULL; + return true; +} + void ClientDevice::saveTracks() { sync::Data::TrackContainer::iterator iter; for (iter = syncData.tracks.begin(); iter != syncData.tracks.end(); ++iter) { - std::string fileName = getTrackFileName(iter->first); - printf("\"%s\"\n", fileName.c_str()); + saveTrack(syncData.getTrack(iter->second), getTrackFileName(iter->first)); } } diff --git a/sync/track.cpp b/sync/track.cpp index d44beb5..591d3bb 100644 --- a/sync/track.cpp +++ b/sync/track.cpp @@ -103,7 +103,7 @@ void Track::setKeyFrame(size_t row, const KeyFrame &keyFrame) keyFrames[row] = keyFrame; } -size_t Track::getFrameCount() const +size_t Track::getKeyFrameCount() const { if (keyFrames.empty()) return 0; KeyFrameContainer::const_iterator iter = keyFrames.end(); diff --git a/sync/track.h b/sync/track.h index 7c19cd0..144f309 100644 --- a/sync/track.h +++ b/sync/track.h @@ -38,7 +38,7 @@ namespace sync bool isKeyFrame(size_t row) const; const KeyFrame *getKeyFrame(size_t row) const; - size_t getFrameCount() const; + size_t getKeyFrameCount() const; void deleteKeyFrame(size_t row); void setKeyFrame(size_t row, const KeyFrame &keyFrame); diff --git a/sync_player.vcproj b/sync_player.vcproj index aab5559..34b5c35 100644 --- a/sync_player.vcproj +++ b/sync_player.vcproj @@ -40,7 +40,7 @@ + +