diff --git a/editor/editor.rc b/editor/editor.rc index 557c0c7..f263c3e 100644 --- a/editor/editor.rc +++ b/editor/editor.rc @@ -86,6 +86,11 @@ BEGIN MENUITEM "&Copy\tCtrl+C", ID_EDIT_COPY MENUITEM "Cu&t\tCtrl+X", ID_EDIT_CUT MENUITEM "&Paste\tCtrl+V", ID_EDIT_PASTE + MENUITEM "Clear\tDel", ID_EDIT_CLEAR + MENUITEM SEPARATOR + MENUITEM "Select All\tCtrl+A", ID_EDIT_SELECTALL + MENUITEM "Select Track", ID_EDIT_SELECTTRACK + MENUITEM "Select Row", ID_EDIT_SELECTROW MENUITEM SEPARATOR MENUITEM "&Bias Selection\tCtrl+B", ID_EDIT_BIAS MENUITEM SEPARATOR diff --git a/editor/resource.h b/editor/resource.h index 23e7bde..8acf54d 100644 --- a/editor/resource.h +++ b/editor/resource.h @@ -1,6 +1,6 @@ //{{NO_DEPENDENCIES}} // Microsoft Visual C++ generated include file. -// Used by synctracker2.rc +// Used by editor.rc // #define IDR_ACCELERATOR 101 #define IDR_MENU 102 @@ -14,13 +14,17 @@ #define ID_EDIT 40003 #define ID_EDIT_SETROWS 40007 #define ID_EDIT_BIAS 40008 +#define ID_EDIT_CLEAR40011 40011 +#define ID_EDIT_SELECTALL 40012 +#define ID_EDIT_SELECTROW 40013 +#define ID_EDIT_SELECTTRACK 40014 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 104 -#define _APS_NEXT_COMMAND_VALUE 40011 +#define _APS_NEXT_COMMAND_VALUE 40015 #define _APS_NEXT_CONTROL_VALUE 1004 #define _APS_NEXT_SYMED_VALUE 101 #endif diff --git a/editor/synceditdata.h b/editor/synceditdata.h index 3fa2b89..5ee260f 100644 --- a/editor/synceditdata.h +++ b/editor/synceditdata.h @@ -43,7 +43,7 @@ public: send(clientSocket, (char*)&cmd, 1, 0); send(clientSocket, (char*)&row, sizeof(int), 0); } - + void sendPauseCommand(bool pause) { unsigned char cmd = PAUSE; @@ -52,7 +52,12 @@ public: send(clientSocket, (char*)&flag, 1, 0); clientPaused = pause; } - + + void sendSaveCommand() + { + unsigned char cmd = SAVE_TRACKS; + send(clientSocket, (char*)&cmd, 1, 0); + } class Command { diff --git a/editor/trackview.cpp b/editor/trackview.cpp index 885f134..30c2310 100644 --- a/editor/trackview.cpp +++ b/editor/trackview.cpp @@ -939,6 +939,10 @@ LRESULT TrackView::onChar(UINT keyCode, UINT flags) case 'i': editToggleInterpolationType(); break; + + case 's': + syncData->sendSaveCommand(); + break; } return FALSE; } diff --git a/sync/device_client.cpp b/sync/device_client.cpp index 0c3f2e8..21e9104 100644 --- a/sync/device_client.cpp +++ b/sync/device_client.cpp @@ -21,7 +21,10 @@ public: bool update(float row); private: - const std::string &baseName; + std::string getTrackFileName(std::string trackName); + void saveTracks(); + + const std::string baseName; sync::Data syncData; Timer &timer; @@ -121,6 +124,10 @@ bool ClientDevice::update(float row) } break; + case SAVE_TRACKS: + saveTracks(); + break; + default: assert(false); fprintf(stderr, "unknown cmd: %02x\n", cmd); @@ -143,6 +150,25 @@ bool ClientDevice::update(float row) return !done; } +std::string ClientDevice::getTrackFileName(std::string trackName) +{ + std::string fileName = baseName.c_str(); + fileName += "_"; + fileName += trackName; + fileName += ".track"; + return fileName; +} + +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()); + } +} + Device *sync::createDevice(const std::string &baseName, Timer &timer) { if (false == initNetwork()) return NULL; @@ -157,6 +183,6 @@ Device *sync::createDevice(const std::string &baseName, Timer &timer) SOCKET serverSocket = serverConnect(&sain); if (INVALID_SOCKET == serverSocket) return NULL; - Device *device = new ClientDevice(baseName, serverSocket, timer); + ClientDevice *device = new ClientDevice(baseName, serverSocket, timer); return device; } diff --git a/sync/network.h b/sync/network.h index 1f4e7a6..3836813 100644 --- a/sync/network.h +++ b/sync/network.h @@ -13,19 +13,21 @@ SOCKET serverConnect(struct sockaddr_in *addr); bool pollRead(SOCKET socket); -enum RemoteCommand { +enum RemoteCommand +{ // server -> client - SET_KEY = 0, - DELETE_KEY = 1, + SET_KEY, + DELETE_KEY, // client -> server - GET_TRACK = 2, + GET_TRACK, // client -> server, server -> client - SET_ROW = 3, + SET_ROW, // server -> client - PAUSE = 4, + PAUSE, + SAVE_TRACKS }; #endif /* NETWORK_H */