From c2591baa20d42d7af10c7ac3a114b60d68d0397c Mon Sep 17 00:00:00 2001 From: Daniel Collin Date: Thu, 27 Dec 2012 23:22:58 +0100 Subject: [PATCH] Latest version --- ogl_editor/src/Editor.c | 121 ++++++++++++++++++++++++------------- ogl_editor/src/Editor.h | 5 +- ogl_editor/src/macosx/RocketView.m | 42 ++++++++----- 3 files changed, 107 insertions(+), 61 deletions(-) diff --git a/ogl_editor/src/Editor.c b/ogl_editor/src/Editor.c index 89feb33..c8da589 100644 --- a/ogl_editor/src/Editor.c +++ b/ogl_editor/src/Editor.c @@ -45,6 +45,7 @@ typedef struct EditorData int copyCount; } EditorData; +static char s_currentFile[2048]; static EditorData s_editorData; static CopyData s_copyData; static bool reset_tracks = true; @@ -288,6 +289,7 @@ static void drawStatus() int size = 0; const int sizeY = s_editorData.trackViewInfo.windowSizeY; const int sizeX = s_editorData.trackViewInfo.windowSizeX; + const int prevRow = getRowPos(); Emgui_setFont(s_editorData.trackViewInfo.smallFontId); @@ -300,6 +302,9 @@ static void drawStatus() size += drawNameValue("Start Row", size, sizeY, &s_editorData.trackViewInfo.startRow, 0, 10000000, s_startRow); size += drawNameValue("End Row", size, sizeY, &s_editorData.trackViewInfo.endRow, 0, 10000000, s_endRow); + if (getRowPos() != prevRow) + RemoteConnection_sendSetRowCommand(getRowPos()); + Emgui_setDefaultFont(); } @@ -456,10 +461,38 @@ static void deleteArea(int rowPos, int track, int bufferWidth, int bufferHeight) /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +static void biasSelection(float value, int selectLeft, int selectRight, int selectTop, int selectBottom) +{ + int track, row; + struct sync_track** tracks = getTracks(); + + for (track = selectLeft; track <= selectRight; ++track) + { + struct sync_track* t = tracks[track]; + + for (row = selectTop; row <= selectBottom; ++row) + { + struct track_key newKey; + int idx = sync_find_key(t, row); + if (idx < 0) + continue; + + newKey = t->keys[idx]; + newKey.value += value; + + sync_set_key(t, &newKey); + + RemoteConnection_sendSetKeyCommand(t->name, &newKey); + } + } +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + static char s_editBuffer[512]; static bool is_editing = false; -bool Editor_keyDown(int key, int modifiers) +bool Editor_keyDown(int key, int keyCode, int modifiers) { bool handled_key = true; TrackData* trackData = &s_editorData.trackData; @@ -776,46 +809,27 @@ bool Editor_keyDown(int key, int modifiers) // Handle biasing of values - if ((key >= '1' && key <= '9') && ((modifiers & EMGUI_KEY_CTRL) || (modifiers & EMGUI_KEY_ALT))) + if ((keyCode >= 0 && keyCode <= 6) || (keyCode >= 12 && keyCode <= 17)) { - struct sync_track** tracks; - int track, row; - float bias_value = 0.0f; - tracks = getTracks(); - switch (key) + switch (keyCode) { - case '1' : bias_value = 0.01f; break; - case '2' : bias_value = 0.1f; break; - case '3' : bias_value = 1.0f; break; - case '4' : bias_value = 10.f; break; - case '5' : bias_value = 100.0f; break; - case '6' : bias_value = 1000.0f; break; - case '7' : bias_value = 10000.0f; break; + case 0 : bias_value = -0.01f; break; + case 1 : bias_value = -0.1f; break; + case 2 : bias_value = -1.0f; break; + case 3 : bias_value = -10.f; break; + case 5 : bias_value = -100.0f; break; + case 4 : bias_value = -1000.0f; break; + case 12 : bias_value = 0.01f; break; + case 13 : bias_value = 0.1f; break; + case 14 : bias_value = 1.0f; break; + case 15 : bias_value = 10.f; break; + case 17 : bias_value = 100.0f; break; + case 16 : bias_value = 1000.0f; break; } - bias_value = modifiers & EMGUI_KEY_ALT ? -bias_value : bias_value; - - for (track = selectLeft; track <= selectRight; ++track) - { - struct sync_track* t = tracks[track]; - - for (row = selectTop; row <= selectBottom; ++row) - { - struct track_key newKey; - int idx = sync_find_key(t, row); - if (idx < 0) - continue; - - newKey = t->keys[idx]; - newKey.value += bias_value; - - sync_set_key(t, &newKey); - - RemoteConnection_sendSetKeyCommand(t->name, &newKey); - } - } + biasSelection(bias_value, selectLeft, selectRight, selectTop, selectBottom); Editor_update(); @@ -902,12 +916,28 @@ bool Editor_keyDown(int key, int modifiers) /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -void Editor_scroll(float deltaX, float deltaY) +void Editor_scroll(float deltaX, float deltaY, int flags) { int current_row = s_editorData.trackViewInfo.rowPos; int old_offset = s_editorData.trackViewInfo.startPixel; TrackViewInfo* viewInfo = &s_editorData.trackViewInfo; + if (flags & EMGUI_KEY_ALT) + { + TrackViewInfo* viewInfo = &s_editorData.trackViewInfo; + const int selectLeft = mini(viewInfo->selectStartTrack, viewInfo->selectStopTrack); + const int selectRight = maxi(viewInfo->selectStartTrack, viewInfo->selectStopTrack); + const int selectTop = mini(viewInfo->selectStartRow, viewInfo->selectStopRow); + const int selectBottom = maxi(viewInfo->selectStartRow, viewInfo->selectStopRow); + const float multiplier = flags & EMGUI_KEY_SHIFT ? 0.1f : 0.01f; + + biasSelection(-deltaY * multiplier, selectLeft, selectRight, selectTop, selectBottom); + + Editor_update(); + + return; + } + current_row += (int)deltaY; if (current_row < viewInfo->startRow || current_row >= viewInfo->endRow) @@ -1061,12 +1091,10 @@ static void setWindowTitle(const char* path) static void onOpen() { - char path[2048]; - - if (LoadSave_loadRocketXMLDialog(path, &s_editorData.trackData)) + if (LoadSave_loadRocketXMLDialog(s_currentFile, getTrackData())) { Editor_update(); - setWindowTitle(path); + setWindowTitle(s_currentFile); } } @@ -1074,8 +1102,15 @@ static void onOpen() static void onSave() { + LoadSave_saveRocketXML(s_currentFile, getTrackData()); +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +static void onSaveDialog() +{ char path[2048]; - if (!LoadSave_saveRocketXMLDialog(path, &s_editorData.trackData)) + if (!LoadSave_saveRocketXMLDialog(path, getTrackData())) return; setWindowTitle(path); @@ -1089,8 +1124,8 @@ void Editor_menuEvent(int menuItem) switch (menuItem) { case EDITOR_MENU_OPEN : onOpen(); break; - case EDITOR_MENU_SAVE : - case EDITOR_MENU_SAVE_AS : onSave(); break; + case EDITOR_MENU_SAVE : onSave(); break; + case EDITOR_MENU_SAVE_AS : onSaveDialog(); break; } } diff --git a/ogl_editor/src/Editor.h b/ogl_editor/src/Editor.h index ee88066..e7e4ea1 100644 --- a/ogl_editor/src/Editor.h +++ b/ogl_editor/src/Editor.h @@ -7,10 +7,11 @@ void Editor_destroy(); void Editor_init(); void Editor_update(); void Editor_timedUpdate(); -bool Editor_keyDown(int keyCode, int mod); +bool Editor_keyDown(int key, int keyCode, int mod); +void Editor_keyUp(); void Editor_setWindowSize(int x, int y); void Editor_menuEvent(int menuItem); -void Editor_scroll(float deltaX, float deltaY); +void Editor_scroll(float deltaX, float deltaY, int flags); void Editor_updateTrackScroll(); enum diff --git a/ogl_editor/src/macosx/RocketView.m b/ogl_editor/src/macosx/RocketView.m index 57f844f..ae7eb26 100644 --- a/ogl_editor/src/macosx/RocketView.m +++ b/ogl_editor/src/macosx/RocketView.m @@ -77,6 +77,27 @@ NSWindow* g_window = 0; /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +static int getModifierFlags(int flags) +{ + int specialKeys = 0; + + if (flags & NSShiftKeyMask) + specialKeys |= EMGUI_KEY_SHIFT; + + if (flags & NSAlternateKeyMask) + specialKeys |= EMGUI_KEY_ALT; + + if (flags & NSControlKeyMask) + specialKeys |= EMGUI_KEY_CTRL; + + if (flags & NSCommandKeyMask) + specialKeys |= EMGUI_KEY_COMMAND; + + return specialKeys; +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + - (void)keyDown:(NSEvent *)theEvent { NSString* key = [theEvent charactersIgnoringModifiers]; @@ -87,19 +108,7 @@ NSWindow* g_window = 0; keyChar = [key characterAtIndex:0]; int keyCode = keyChar; - int specialKeys = 0; - - if ([theEvent modifierFlags] & NSShiftKeyMask) - specialKeys |= EMGUI_KEY_SHIFT; - - if ([theEvent modifierFlags] & NSAlternateKeyMask) - specialKeys |= EMGUI_KEY_ALT; - - if ([theEvent modifierFlags] & NSControlKeyMask) - specialKeys |= EMGUI_KEY_CTRL; - - if ([theEvent modifierFlags] & NSCommandKeyMask) - specialKeys |= EMGUI_KEY_COMMAND; + int specialKeys = getModifierFlags([theEvent modifierFlags]); Emgui_sendKeyinput(keyChar, specialKeys); @@ -114,7 +123,7 @@ NSWindow* g_window = 0; } } - if (!Editor_keyDown(keyCode, specialKeys)) + if (!Editor_keyDown(keyCode, [theEvent keyCode], specialKeys)) [super keyDown:theEvent]; Editor_update(); @@ -168,9 +177,10 @@ NSWindow* g_window = 0; { float x = (float)[theEvent deltaX]; float y = (float)[theEvent deltaY]; + int flags = getModifierFlags([theEvent modifierFlags]); - printf("%f %f\n", x, y); - Editor_scroll(-x, -y); + printf("%f %f %d\n", x, y, flags); + Editor_scroll(-x, -y, flags); } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////